@metamask-previews/perps-controller 0.0.0-preview-ae46ab603 → 0.0.0-preview-e4aa1532
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 +11 -1
- package/dist/PerpsController.cjs +2224 -66
- package/dist/PerpsController.cjs.map +1 -1
- package/dist/PerpsController.d.cts +933 -79
- package/dist/PerpsController.d.cts.map +1 -1
- package/dist/PerpsController.d.mts +933 -79
- package/dist/PerpsController.d.mts.map +1 -1
- package/dist/PerpsController.mjs +2221 -64
- package/dist/PerpsController.mjs.map +1 -1
- package/dist/__mocks__/hyperliquidMock.cjs +68 -0
- package/dist/__mocks__/hyperliquidMock.cjs.map +1 -0
- package/dist/__mocks__/hyperliquidMock.d.cts +15 -0
- package/dist/__mocks__/hyperliquidMock.d.cts.map +1 -0
- package/dist/__mocks__/hyperliquidMock.d.mts +15 -0
- package/dist/__mocks__/hyperliquidMock.d.mts.map +1 -0
- package/dist/__mocks__/hyperliquidMock.mjs +65 -0
- package/dist/__mocks__/hyperliquidMock.mjs.map +1 -0
- package/dist/__mocks__/providerMocks.cjs +144 -0
- package/dist/__mocks__/providerMocks.cjs.map +1 -0
- package/dist/__mocks__/providerMocks.d.cts +44 -0
- package/dist/__mocks__/providerMocks.d.cts.map +1 -0
- package/dist/__mocks__/providerMocks.d.mts +44 -0
- package/dist/__mocks__/providerMocks.d.mts.map +1 -0
- package/dist/__mocks__/providerMocks.mjs +136 -0
- package/dist/__mocks__/providerMocks.mjs.map +1 -0
- package/dist/__mocks__/serviceMocks.cjs +187 -0
- package/dist/__mocks__/serviceMocks.cjs.map +1 -0
- package/dist/__mocks__/serviceMocks.d.cts +58 -0
- package/dist/__mocks__/serviceMocks.d.cts.map +1 -0
- package/dist/__mocks__/serviceMocks.d.mts +58 -0
- package/dist/__mocks__/serviceMocks.d.mts.map +1 -0
- package/dist/__mocks__/serviceMocks.mjs +180 -0
- package/dist/__mocks__/serviceMocks.mjs.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.cjs +459 -0
- package/dist/aggregation/SubscriptionMultiplexer.cjs.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.cts +222 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.mts +222 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.mjs +455 -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/eventNames.cjs +117 -0
- package/dist/constants/eventNames.cjs.map +1 -0
- package/dist/constants/eventNames.d.cts +106 -0
- package/dist/constants/eventNames.d.cts.map +1 -0
- package/dist/constants/eventNames.d.mts +106 -0
- package/dist/constants/eventNames.d.mts.map +1 -0
- package/dist/constants/eventNames.mjs +114 -0
- package/dist/constants/eventNames.mjs.map +1 -0
- package/dist/constants/hyperLiquidConfig.cjs +366 -0
- package/dist/constants/hyperLiquidConfig.cjs.map +1 -0
- package/dist/constants/hyperLiquidConfig.d.cts +276 -0
- package/dist/constants/hyperLiquidConfig.d.cts.map +1 -0
- package/dist/constants/hyperLiquidConfig.d.mts +276 -0
- package/dist/constants/hyperLiquidConfig.d.mts.map +1 -0
- package/dist/constants/hyperLiquidConfig.mjs +357 -0
- package/dist/constants/hyperLiquidConfig.mjs.map +1 -0
- package/dist/constants/index.cjs +23 -0
- package/dist/constants/index.cjs.map +1 -0
- package/dist/constants/index.d.cts +7 -0
- package/dist/constants/index.d.cts.map +1 -0
- package/dist/constants/index.d.mts +7 -0
- package/dist/constants/index.d.mts.map +1 -0
- package/dist/constants/index.mjs +7 -0
- package/dist/constants/index.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 +61 -0
- package/dist/constants/performanceMetrics.cjs.map +1 -0
- package/dist/constants/performanceMetrics.d.cts +44 -0
- package/dist/constants/performanceMetrics.d.cts.map +1 -0
- package/dist/constants/performanceMetrics.d.mts +44 -0
- package/dist/constants/performanceMetrics.d.mts.map +1 -0
- package/dist/constants/performanceMetrics.mjs +58 -0
- package/dist/constants/performanceMetrics.mjs.map +1 -0
- package/dist/constants/perpsConfig.cjs +461 -0
- package/dist/constants/perpsConfig.cjs.map +1 -0
- package/dist/constants/perpsConfig.d.cts +343 -0
- package/dist/constants/perpsConfig.d.cts.map +1 -0
- package/dist/constants/perpsConfig.d.mts +343 -0
- package/dist/constants/perpsConfig.d.mts.map +1 -0
- package/dist/constants/perpsConfig.mjs +458 -0
- package/dist/constants/perpsConfig.mjs.map +1 -0
- package/dist/constants/perpsErrorCodes.cjs +79 -0
- package/dist/constants/perpsErrorCodes.cjs.map +1 -0
- package/dist/constants/perpsErrorCodes.d.cts +64 -0
- package/dist/constants/perpsErrorCodes.d.cts.map +1 -0
- package/dist/constants/perpsErrorCodes.d.mts +64 -0
- package/dist/constants/perpsErrorCodes.d.mts.map +1 -0
- package/dist/constants/perpsErrorCodes.mjs +76 -0
- package/dist/constants/perpsErrorCodes.mjs.map +1 -0
- package/dist/index.cjs +32 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +6 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +9 -1
- package/dist/index.mjs.map +1 -1
- package/dist/platform-services/HyperLiquidClientService.cjs +857 -0
- package/dist/platform-services/HyperLiquidClientService.cjs.map +1 -0
- package/dist/platform-services/HyperLiquidClientService.d.cts +263 -0
- package/dist/platform-services/HyperLiquidClientService.d.cts.map +1 -0
- package/dist/platform-services/HyperLiquidClientService.d.mts +263 -0
- package/dist/platform-services/HyperLiquidClientService.d.mts.map +1 -0
- package/dist/platform-services/HyperLiquidClientService.mjs +853 -0
- package/dist/platform-services/HyperLiquidClientService.mjs.map +1 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.cjs +2170 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.cjs.map +1 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.d.cts +424 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.d.cts.map +1 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.d.mts +424 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.d.mts.map +1 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.mjs +2166 -0
- package/dist/platform-services/HyperLiquidSubscriptionService.mjs.map +1 -0
- package/dist/platform-services/HyperLiquidWalletService.cjs +140 -0
- package/dist/platform-services/HyperLiquidWalletService.cjs.map +1 -0
- package/dist/platform-services/HyperLiquidWalletService.d.cts +78 -0
- package/dist/platform-services/HyperLiquidWalletService.d.cts.map +1 -0
- package/dist/platform-services/HyperLiquidWalletService.d.mts +78 -0
- package/dist/platform-services/HyperLiquidWalletService.d.mts.map +1 -0
- package/dist/platform-services/HyperLiquidWalletService.mjs +136 -0
- package/dist/platform-services/HyperLiquidWalletService.mjs.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.cjs +777 -0
- package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.d.cts +466 -0
- package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.d.mts +466 -0
- package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.mjs +773 -0
- package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -0
- package/dist/providers/HyperLiquidProvider.cjs +5172 -0
- package/dist/providers/HyperLiquidProvider.cjs.map +1 -0
- package/dist/providers/HyperLiquidProvider.d.cts +881 -0
- package/dist/providers/HyperLiquidProvider.d.cts.map +1 -0
- package/dist/providers/HyperLiquidProvider.d.mts +881 -0
- package/dist/providers/HyperLiquidProvider.d.mts.map +1 -0
- package/dist/providers/HyperLiquidProvider.mjs +5168 -0
- package/dist/providers/HyperLiquidProvider.mjs.map +1 -0
- package/dist/providers/index.cjs +11 -0
- package/dist/providers/index.cjs.map +1 -0
- package/dist/providers/index.d.cts +6 -0
- package/dist/providers/index.d.cts.map +1 -0
- package/dist/providers/index.d.mts +6 -0
- package/dist/providers/index.d.mts.map +1 -0
- package/dist/providers/index.mjs +6 -0
- package/dist/providers/index.mjs.map +1 -0
- package/dist/routing/ProviderRouter.cjs +148 -0
- package/dist/routing/ProviderRouter.cjs.map +1 -0
- package/dist/routing/ProviderRouter.d.cts +124 -0
- package/dist/routing/ProviderRouter.d.cts.map +1 -0
- package/dist/routing/ProviderRouter.d.mts +124 -0
- package/dist/routing/ProviderRouter.d.mts.map +1 -0
- package/dist/routing/ProviderRouter.mjs +144 -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 +161 -0
- package/dist/selectors.cjs.map +1 -0
- package/dist/selectors.d.cts +345 -0
- package/dist/selectors.d.cts.map +1 -0
- package/dist/selectors.d.mts +345 -0
- package/dist/selectors.d.mts.map +1 -0
- package/dist/selectors.mjs +153 -0
- package/dist/selectors.mjs.map +1 -0
- package/dist/services/AccountService.cjs +313 -0
- package/dist/services/AccountService.cjs.map +1 -0
- package/dist/services/AccountService.d.cts +53 -0
- package/dist/services/AccountService.d.cts.map +1 -0
- package/dist/services/AccountService.d.mts +53 -0
- package/dist/services/AccountService.d.mts.map +1 -0
- package/dist/services/AccountService.mjs +309 -0
- package/dist/services/AccountService.mjs.map +1 -0
- package/dist/services/DataLakeService.cjs +219 -0
- package/dist/services/DataLakeService.cjs.map +1 -0
- package/dist/services/DataLakeService.d.cts +49 -0
- package/dist/services/DataLakeService.d.cts.map +1 -0
- package/dist/services/DataLakeService.d.mts +49 -0
- package/dist/services/DataLakeService.d.mts.map +1 -0
- package/dist/services/DataLakeService.mjs +215 -0
- package/dist/services/DataLakeService.mjs.map +1 -0
- package/dist/services/DepositService.cjs +96 -0
- package/dist/services/DepositService.cjs.map +1 -0
- package/dist/services/DepositService.d.cts +37 -0
- package/dist/services/DepositService.d.cts.map +1 -0
- package/dist/services/DepositService.d.mts +37 -0
- package/dist/services/DepositService.d.mts.map +1 -0
- package/dist/services/DepositService.mjs +92 -0
- package/dist/services/DepositService.mjs.map +1 -0
- package/dist/services/EligibilityService.cjs +156 -0
- package/dist/services/EligibilityService.cjs.map +1 -0
- package/dist/services/EligibilityService.d.cts +48 -0
- package/dist/services/EligibilityService.d.cts.map +1 -0
- package/dist/services/EligibilityService.d.mts +48 -0
- package/dist/services/EligibilityService.d.mts.map +1 -0
- package/dist/services/EligibilityService.mjs +152 -0
- package/dist/services/EligibilityService.mjs.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.cjs +258 -0
- package/dist/services/FeatureFlagConfigurationService.cjs.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.d.cts +100 -0
- package/dist/services/FeatureFlagConfigurationService.d.cts.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.d.mts +100 -0
- package/dist/services/FeatureFlagConfigurationService.d.mts.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.mjs +254 -0
- package/dist/services/FeatureFlagConfigurationService.mjs.map +1 -0
- package/dist/services/MarketDataService.cjs +875 -0
- package/dist/services/MarketDataService.cjs.map +1 -0
- package/dist/services/MarketDataService.d.cts +289 -0
- package/dist/services/MarketDataService.d.cts.map +1 -0
- package/dist/services/MarketDataService.d.mts +289 -0
- package/dist/services/MarketDataService.d.mts.map +1 -0
- package/dist/services/MarketDataService.mjs +871 -0
- package/dist/services/MarketDataService.mjs.map +1 -0
- package/dist/services/RewardsIntegrationService.cjs +94 -0
- package/dist/services/RewardsIntegrationService.cjs.map +1 -0
- package/dist/services/RewardsIntegrationService.d.cts +30 -0
- package/dist/services/RewardsIntegrationService.d.cts.map +1 -0
- package/dist/services/RewardsIntegrationService.d.mts +30 -0
- package/dist/services/RewardsIntegrationService.d.mts.map +1 -0
- package/dist/services/RewardsIntegrationService.mjs +90 -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 +110 -0
- package/dist/services/ServiceContext.d.cts.map +1 -0
- package/dist/services/ServiceContext.d.mts +110 -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/TradingService.cjs +1481 -0
- package/dist/services/TradingService.cjs.map +1 -0
- package/dist/services/TradingService.d.cts +308 -0
- package/dist/services/TradingService.d.cts.map +1 -0
- package/dist/services/TradingService.d.mts +308 -0
- package/dist/services/TradingService.d.mts.map +1 -0
- package/dist/services/TradingService.mjs +1477 -0
- package/dist/services/TradingService.mjs.map +1 -0
- package/dist/services/index.cjs +26 -0
- package/dist/services/index.cjs.map +1 -0
- package/dist/services/index.d.cts +11 -0
- package/dist/services/index.d.cts.map +1 -0
- package/dist/services/index.d.mts +11 -0
- package/dist/services/index.d.mts.map +1 -0
- package/dist/services/index.mjs +10 -0
- package/dist/services/index.mjs.map +1 -0
- package/dist/services/utils.cjs +16 -0
- package/dist/services/utils.cjs.map +1 -0
- package/dist/services/utils.d.cts +8 -0
- package/dist/services/utils.d.cts.map +1 -0
- package/dist/services/utils.d.mts +8 -0
- package/dist/services/utils.d.mts.map +1 -0
- package/dist/services/utils.mjs +12 -0
- package/dist/services/utils.mjs.map +1 -0
- package/dist/types/chart.cjs +42 -0
- package/dist/types/chart.cjs.map +1 -0
- package/dist/types/chart.d.cts +62 -0
- package/dist/types/chart.d.cts.map +1 -0
- package/dist/types/chart.d.mts +62 -0
- package/dist/types/chart.d.mts.map +1 -0
- package/dist/types/chart.mjs +39 -0
- package/dist/types/chart.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 +52 -0
- package/dist/types/hyperliquid-types.d.cts.map +1 -0
- package/dist/types/hyperliquid-types.d.mts +52 -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 +96 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +1153 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.mts +1153 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/index.mjs +79 -0
- package/dist/types/index.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 +65 -0
- package/dist/utils/accountUtils.cjs.map +1 -0
- package/dist/utils/accountUtils.d.cts +26 -0
- package/dist/utils/accountUtils.d.cts.map +1 -0
- package/dist/utils/accountUtils.d.mts +26 -0
- package/dist/utils/accountUtils.d.mts.map +1 -0
- package/dist/utils/accountUtils.mjs +61 -0
- package/dist/utils/accountUtils.mjs.map +1 -0
- package/dist/utils/amountConversion.cjs +61 -0
- package/dist/utils/amountConversion.cjs.map +1 -0
- package/dist/utils/amountConversion.d.cts +16 -0
- package/dist/utils/amountConversion.d.cts.map +1 -0
- package/dist/utils/amountConversion.d.mts +16 -0
- package/dist/utils/amountConversion.d.mts.map +1 -0
- package/dist/utils/amountConversion.mjs +54 -0
- package/dist/utils/amountConversion.mjs.map +1 -0
- package/dist/utils/chartUtils.cjs +98 -0
- package/dist/utils/chartUtils.cjs.map +1 -0
- package/dist/utils/chartUtils.d.cts +14 -0
- package/dist/utils/chartUtils.d.cts.map +1 -0
- package/dist/utils/chartUtils.d.mts +14 -0
- package/dist/utils/chartUtils.d.mts.map +1 -0
- package/dist/utils/chartUtils.mjs +94 -0
- package/dist/utils/chartUtils.mjs.map +1 -0
- package/dist/utils/errorUtils.cjs +22 -0
- package/dist/utils/errorUtils.cjs.map +1 -0
- package/dist/utils/errorUtils.d.cts +13 -0
- package/dist/utils/errorUtils.d.cts.map +1 -0
- package/dist/utils/errorUtils.d.mts +13 -0
- package/dist/utils/errorUtils.d.mts.map +1 -0
- package/dist/utils/errorUtils.mjs +18 -0
- package/dist/utils/errorUtils.mjs.map +1 -0
- package/dist/utils/formatUtils.cjs +987 -0
- package/dist/utils/formatUtils.cjs.map +1 -0
- package/dist/utils/formatUtils.d.cts +387 -0
- package/dist/utils/formatUtils.d.cts.map +1 -0
- package/dist/utils/formatUtils.d.mts +387 -0
- package/dist/utils/formatUtils.d.mts.map +1 -0
- package/dist/utils/formatUtils.mjs +966 -0
- package/dist/utils/formatUtils.mjs.map +1 -0
- package/dist/utils/hyperLiquidAdapter.cjs +454 -0
- package/dist/utils/hyperLiquidAdapter.cjs.map +1 -0
- package/dist/utils/hyperLiquidAdapter.d.cts +158 -0
- package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -0
- package/dist/utils/hyperLiquidAdapter.d.mts +158 -0
- package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -0
- package/dist/utils/hyperLiquidAdapter.mjs +439 -0
- package/dist/utils/hyperLiquidAdapter.mjs.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.cjs +89 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +58 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +58 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.mjs +84 -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 +50 -0
- package/dist/utils/idUtils.cjs.map +1 -0
- package/dist/utils/idUtils.d.cts +38 -0
- package/dist/utils/idUtils.d.cts.map +1 -0
- package/dist/utils/idUtils.d.mts +38 -0
- package/dist/utils/idUtils.d.mts.map +1 -0
- package/dist/utils/idUtils.mjs +42 -0
- package/dist/utils/idUtils.mjs.map +1 -0
- package/dist/utils/marginUtils.cjs +137 -0
- package/dist/utils/marginUtils.cjs.map +1 -0
- package/dist/utils/marginUtils.d.cts +64 -0
- package/dist/utils/marginUtils.d.cts.map +1 -0
- package/dist/utils/marginUtils.d.mts +64 -0
- package/dist/utils/marginUtils.d.mts.map +1 -0
- package/dist/utils/marginUtils.mjs +131 -0
- package/dist/utils/marginUtils.mjs.map +1 -0
- package/dist/utils/marketDataTransform.cjs +227 -0
- package/dist/utils/marketDataTransform.cjs.map +1 -0
- package/dist/utils/marketDataTransform.d.cts +45 -0
- package/dist/utils/marketDataTransform.d.cts.map +1 -0
- package/dist/utils/marketDataTransform.d.mts +45 -0
- package/dist/utils/marketDataTransform.d.mts.map +1 -0
- package/dist/utils/marketDataTransform.mjs +220 -0
- package/dist/utils/marketDataTransform.mjs.map +1 -0
- package/dist/utils/marketUtils.cjs +420 -0
- package/dist/utils/marketUtils.cjs.map +1 -0
- package/dist/utils/marketUtils.d.cts +227 -0
- package/dist/utils/marketUtils.d.cts.map +1 -0
- package/dist/utils/marketUtils.d.mts +227 -0
- package/dist/utils/marketUtils.d.mts.map +1 -0
- package/dist/utils/marketUtils.mjs +404 -0
- package/dist/utils/marketUtils.mjs.map +1 -0
- package/dist/utils/orderBookGrouping.cjs +151 -0
- package/dist/utils/orderBookGrouping.cjs.map +1 -0
- package/dist/utils/orderBookGrouping.d.cts +76 -0
- package/dist/utils/orderBookGrouping.d.cts.map +1 -0
- package/dist/utils/orderBookGrouping.d.mts +76 -0
- package/dist/utils/orderBookGrouping.d.mts.map +1 -0
- package/dist/utils/orderBookGrouping.mjs +143 -0
- package/dist/utils/orderBookGrouping.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/orderUtils.cjs +159 -0
- package/dist/utils/orderUtils.cjs.map +1 -0
- package/dist/utils/orderUtils.d.cts +66 -0
- package/dist/utils/orderUtils.d.cts.map +1 -0
- package/dist/utils/orderUtils.d.mts +66 -0
- package/dist/utils/orderUtils.d.mts.map +1 -0
- package/dist/utils/orderUtils.mjs +151 -0
- package/dist/utils/orderUtils.mjs.map +1 -0
- package/dist/utils/pnlCalculations.cjs +107 -0
- package/dist/utils/pnlCalculations.cjs.map +1 -0
- package/dist/utils/pnlCalculations.d.cts +79 -0
- package/dist/utils/pnlCalculations.d.cts.map +1 -0
- package/dist/utils/pnlCalculations.d.mts +79 -0
- package/dist/utils/pnlCalculations.d.mts.map +1 -0
- package/dist/utils/pnlCalculations.mjs +97 -0
- package/dist/utils/pnlCalculations.mjs.map +1 -0
- package/dist/utils/positionCalculations.cjs +176 -0
- package/dist/utils/positionCalculations.cjs.map +1 -0
- package/dist/utils/positionCalculations.d.cts +85 -0
- package/dist/utils/positionCalculations.d.cts.map +1 -0
- package/dist/utils/positionCalculations.d.mts +85 -0
- package/dist/utils/positionCalculations.d.mts.map +1 -0
- package/dist/utils/positionCalculations.mjs +165 -0
- package/dist/utils/positionCalculations.mjs.map +1 -0
- package/dist/utils/sortMarkets.cjs +88 -0
- package/dist/utils/sortMarkets.cjs.map +1 -0
- package/dist/utils/sortMarkets.d.cts +21 -0
- package/dist/utils/sortMarkets.d.cts.map +1 -0
- package/dist/utils/sortMarkets.d.mts +21 -0
- package/dist/utils/sortMarkets.d.mts.map +1 -0
- package/dist/utils/sortMarkets.mjs +84 -0
- package/dist/utils/sortMarkets.mjs.map +1 -0
- package/dist/utils/standaloneInfoClient.cjs +34 -0
- package/dist/utils/standaloneInfoClient.cjs.map +1 -0
- package/dist/utils/standaloneInfoClient.d.cts +31 -0
- package/dist/utils/standaloneInfoClient.d.cts.map +1 -0
- package/dist/utils/standaloneInfoClient.d.mts +31 -0
- package/dist/utils/standaloneInfoClient.d.mts.map +1 -0
- package/dist/utils/standaloneInfoClient.mjs +30 -0
- package/dist/utils/standaloneInfoClient.mjs.map +1 -0
- package/dist/utils/stringParseUtils.cjs +49 -0
- package/dist/utils/stringParseUtils.cjs.map +1 -0
- package/dist/utils/stringParseUtils.d.cts +35 -0
- package/dist/utils/stringParseUtils.d.cts.map +1 -0
- package/dist/utils/stringParseUtils.d.mts +35 -0
- package/dist/utils/stringParseUtils.d.mts.map +1 -0
- package/dist/utils/stringParseUtils.mjs +44 -0
- package/dist/utils/stringParseUtils.mjs.map +1 -0
- package/dist/utils/time.cjs +37 -0
- package/dist/utils/time.cjs.map +1 -0
- package/dist/utils/time.d.cts +17 -0
- package/dist/utils/time.d.cts.map +1 -0
- package/dist/utils/time.d.mts +17 -0
- package/dist/utils/time.d.mts.map +1 -0
- package/dist/utils/time.mjs +33 -0
- package/dist/utils/time.mjs.map +1 -0
- package/dist/utils/tpslValidation.cjs +505 -0
- package/dist/utils/tpslValidation.cjs.map +1 -0
- package/dist/utils/tpslValidation.d.cts +182 -0
- package/dist/utils/tpslValidation.d.cts.map +1 -0
- package/dist/utils/tpslValidation.d.mts +182 -0
- package/dist/utils/tpslValidation.d.mts.map +1 -0
- package/dist/utils/tpslValidation.mjs +482 -0
- package/dist/utils/tpslValidation.mjs.map +1 -0
- package/dist/utils/transactionUtils.cjs +36 -0
- package/dist/utils/transactionUtils.cjs.map +1 -0
- package/dist/utils/transactionUtils.d.cts +17 -0
- package/dist/utils/transactionUtils.d.cts.map +1 -0
- package/dist/utils/transactionUtils.d.mts +17 -0
- package/dist/utils/transactionUtils.d.mts.map +1 -0
- package/dist/utils/transactionUtils.mjs +32 -0
- package/dist/utils/transactionUtils.mjs.map +1 -0
- package/dist/utils/wait.cjs +12 -0
- package/dist/utils/wait.cjs.map +1 -0
- package/dist/utils/wait.d.cts +8 -0
- package/dist/utils/wait.d.cts.map +1 -0
- package/dist/utils/wait.d.mts +8 -0
- package/dist/utils/wait.d.mts.map +1 -0
- package/dist/utils/wait.mjs +8 -0
- package/dist/utils/wait.mjs.map +1 -0
- package/package.json +19 -4
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart-related types for Perps candlestick data
|
|
3
|
+
* These types are protocol-agnostic and used across the codebase.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Enum for available candle periods
|
|
7
|
+
* Provides type safety and prevents typos when referencing candle periods
|
|
8
|
+
*/
|
|
9
|
+
export var CandlePeriod;
|
|
10
|
+
(function (CandlePeriod) {
|
|
11
|
+
CandlePeriod["OneMinute"] = "1m";
|
|
12
|
+
CandlePeriod["ThreeMinutes"] = "3m";
|
|
13
|
+
CandlePeriod["FiveMinutes"] = "5m";
|
|
14
|
+
CandlePeriod["FifteenMinutes"] = "15m";
|
|
15
|
+
CandlePeriod["ThirtyMinutes"] = "30m";
|
|
16
|
+
CandlePeriod["OneHour"] = "1h";
|
|
17
|
+
CandlePeriod["TwoHours"] = "2h";
|
|
18
|
+
CandlePeriod["FourHours"] = "4h";
|
|
19
|
+
CandlePeriod["EightHours"] = "8h";
|
|
20
|
+
CandlePeriod["TwelveHours"] = "12h";
|
|
21
|
+
CandlePeriod["OneDay"] = "1d";
|
|
22
|
+
CandlePeriod["ThreeDays"] = "3d";
|
|
23
|
+
CandlePeriod["OneWeek"] = "1w";
|
|
24
|
+
CandlePeriod["OneMonth"] = "1M";
|
|
25
|
+
})(CandlePeriod || (CandlePeriod = {}));
|
|
26
|
+
/**
|
|
27
|
+
* Enum for available time durations
|
|
28
|
+
* Provides type safety and prevents typos when referencing durations
|
|
29
|
+
*/
|
|
30
|
+
export var TimeDuration;
|
|
31
|
+
(function (TimeDuration) {
|
|
32
|
+
TimeDuration["OneHour"] = "1hr";
|
|
33
|
+
TimeDuration["OneDay"] = "1d";
|
|
34
|
+
TimeDuration["OneWeek"] = "1w";
|
|
35
|
+
TimeDuration["OneMonth"] = "1m";
|
|
36
|
+
TimeDuration["YearToDate"] = "ytd";
|
|
37
|
+
TimeDuration["Max"] = "max";
|
|
38
|
+
})(TimeDuration || (TimeDuration = {}));
|
|
39
|
+
//# sourceMappingURL=chart.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.mjs","sourceRoot":"","sources":["../../src/types/chart.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAN,IAAY,YAeX;AAfD,WAAY,YAAY;IACtB,gCAAgB,CAAA;IAChB,mCAAmB,CAAA;IACnB,kCAAkB,CAAA;IAClB,sCAAsB,CAAA;IACtB,qCAAqB,CAAA;IACrB,8BAAc,CAAA;IACd,+BAAe,CAAA;IACf,gCAAgB,CAAA;IAChB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,6BAAa,CAAA;IACb,gCAAgB,CAAA;IAChB,8BAAc,CAAA;IACd,+BAAe,CAAA;AACjB,CAAC,EAfW,YAAY,KAAZ,YAAY,QAevB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,+BAAe,CAAA;IACf,6BAAa,CAAA;IACb,8BAAc,CAAA;IACd,+BAAe,CAAA;IACf,kCAAkB,CAAA;IAClB,2BAAW,CAAA;AACb,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB","sourcesContent":["/**\n * Chart-related types for Perps candlestick data\n * These types are protocol-agnostic and used across the codebase.\n */\n\n/**\n * Enum for available candle periods\n * Provides type safety and prevents typos when referencing candle periods\n */\nexport enum CandlePeriod {\n OneMinute = '1m',\n ThreeMinutes = '3m',\n FiveMinutes = '5m',\n FifteenMinutes = '15m',\n ThirtyMinutes = '30m',\n OneHour = '1h',\n TwoHours = '2h',\n FourHours = '4h',\n EightHours = '8h',\n TwelveHours = '12h',\n OneDay = '1d',\n ThreeDays = '3d',\n OneWeek = '1w',\n OneMonth = '1M',\n}\n\n/**\n * Enum for available time durations\n * Provides type safety and prevents typos when referencing durations\n */\nexport enum TimeDuration {\n OneHour = '1hr',\n OneDay = '1d',\n OneWeek = '1w',\n OneMonth = '1m',\n YearToDate = 'ytd',\n Max = 'max',\n}\n\n/**\n * Represents a single candlestick data point\n */\nexport type CandleStick = {\n time: number;\n open: string;\n high: string;\n low: string;\n close: string;\n volume: string;\n};\n\n/**\n * Represents historical candlestick data for a specific symbol and interval\n */\nexport type CandleData = {\n /** Asset identifier (e.g., 'BTC', 'ETH'). Protocol-agnostic terminology for multi-provider support. */\n symbol: string;\n interval: CandlePeriod;\n candles: CandleStick[];\n};\n\n/**\n * Valid time intervals for historical candle data\n * Uses CandlePeriod enum for type safety\n */\nexport type ValidCandleInterval = CandlePeriod;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperliquid-types.cjs","sourceRoot":"","sources":["../../src/types/hyperliquid-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * HyperLiquid SDK Type Aliases\n *\n * The @nktkas/hyperliquid SDK only exports Response types (e.g., ClearinghouseStateResponse).\n * We extract commonly-used nested types here to avoid repetitive type extraction syntax.\n *\n * Pattern: Import Response types, extract nested types using TypeScript index access.\n * This is the SDK's intentional design - not bad practice!\n */\nimport type {\n ClearinghouseStateResponse,\n SpotClearinghouseStateResponse,\n MetaResponse,\n FrontendOpenOrdersResponse,\n MetaAndAssetCtxsResponse,\n AllMidsResponse,\n PredictedFundingsResponse,\n OrderParameters,\n} from '@nktkas/hyperliquid';\n\n// Clearinghouse (Account) Types\nexport type AssetPosition =\n ClearinghouseStateResponse['assetPositions'][number];\nexport type SpotBalance = SpotClearinghouseStateResponse['balances'][number];\n\n// Market/Asset Types\nexport type PerpsUniverse = MetaResponse['universe'][number];\nexport type PerpsAssetCtx = MetaAndAssetCtxsResponse[1][number];\nexport type PredictedFunding = PredictedFundingsResponse[number];\n\n// Order Types\nexport type FrontendOrder = FrontendOpenOrdersResponse[number];\nexport type SDKOrderParams = OrderParameters['orders'][number];\nexport type OrderType = FrontendOrder['orderType'];\n\n// Re-export Response types for convenience\nexport type {\n ClearinghouseStateResponse,\n SpotClearinghouseStateResponse,\n MetaResponse,\n FrontendOpenOrdersResponse,\n AllMidsResponse,\n MetaAndAssetCtxsResponse,\n PredictedFundingsResponse,\n};\n\n/**\n * Extended asset metadata including Growth Mode fields not in SDK types.\n *\n * The HyperLiquid API returns these fields but the SDK doesn't type them.\n *\n * @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers\n */\nexport type ExtendedAssetMeta = {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n /** Per-asset Growth Mode status - \"enabled\" means 90% fee reduction */\n growthMode?: 'enabled' | null;\n /** ISO timestamp of last Growth Mode change */\n lastGrowthModeChangeTime?: string;\n};\n\n/**\n * Extended perp DEX info including fee scale fields not in SDK types.\n *\n * The HyperLiquid API returns these fields but the SDK doesn't type them.\n *\n * @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers\n */\nexport type ExtendedPerpDex = {\n name: string;\n fullName?: string;\n deployer?: string;\n /** DEX-level fee scale (e.g., \"1.0\" for xyz DEX) - determines HIP-3 multiplier */\n deployerFeeScale?: string;\n /** ISO timestamp of last fee scale change */\n lastDeployerFeeScaleChangeTime?: string;\n};\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HyperLiquid SDK Type Aliases
|
|
3
|
+
*
|
|
4
|
+
* The @nktkas/hyperliquid SDK only exports Response types (e.g., ClearinghouseStateResponse).
|
|
5
|
+
* We extract commonly-used nested types here to avoid repetitive type extraction syntax.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: Import Response types, extract nested types using TypeScript index access.
|
|
8
|
+
* This is the SDK's intentional design - not bad practice!
|
|
9
|
+
*/
|
|
10
|
+
import type { ClearinghouseStateResponse, SpotClearinghouseStateResponse, MetaResponse, FrontendOpenOrdersResponse, MetaAndAssetCtxsResponse, AllMidsResponse, PredictedFundingsResponse, OrderParameters } from "@nktkas/hyperliquid";
|
|
11
|
+
export type AssetPosition = ClearinghouseStateResponse['assetPositions'][number];
|
|
12
|
+
export type SpotBalance = SpotClearinghouseStateResponse['balances'][number];
|
|
13
|
+
export type PerpsUniverse = MetaResponse['universe'][number];
|
|
14
|
+
export type PerpsAssetCtx = MetaAndAssetCtxsResponse[1][number];
|
|
15
|
+
export type PredictedFunding = PredictedFundingsResponse[number];
|
|
16
|
+
export type FrontendOrder = FrontendOpenOrdersResponse[number];
|
|
17
|
+
export type SDKOrderParams = OrderParameters['orders'][number];
|
|
18
|
+
export type OrderType = FrontendOrder['orderType'];
|
|
19
|
+
export type { ClearinghouseStateResponse, SpotClearinghouseStateResponse, MetaResponse, FrontendOpenOrdersResponse, AllMidsResponse, MetaAndAssetCtxsResponse, PredictedFundingsResponse, };
|
|
20
|
+
/**
|
|
21
|
+
* Extended asset metadata including Growth Mode fields not in SDK types.
|
|
22
|
+
*
|
|
23
|
+
* The HyperLiquid API returns these fields but the SDK doesn't type them.
|
|
24
|
+
*
|
|
25
|
+
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers
|
|
26
|
+
*/
|
|
27
|
+
export type ExtendedAssetMeta = {
|
|
28
|
+
name: string;
|
|
29
|
+
szDecimals: number;
|
|
30
|
+
maxLeverage: number;
|
|
31
|
+
/** Per-asset Growth Mode status - "enabled" means 90% fee reduction */
|
|
32
|
+
growthMode?: 'enabled' | null;
|
|
33
|
+
/** ISO timestamp of last Growth Mode change */
|
|
34
|
+
lastGrowthModeChangeTime?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Extended perp DEX info including fee scale fields not in SDK types.
|
|
38
|
+
*
|
|
39
|
+
* The HyperLiquid API returns these fields but the SDK doesn't type them.
|
|
40
|
+
*
|
|
41
|
+
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers
|
|
42
|
+
*/
|
|
43
|
+
export type ExtendedPerpDex = {
|
|
44
|
+
name: string;
|
|
45
|
+
fullName?: string;
|
|
46
|
+
deployer?: string;
|
|
47
|
+
/** DEX-level fee scale (e.g., "1.0" for xyz DEX) - determines HIP-3 multiplier */
|
|
48
|
+
deployerFeeScale?: string;
|
|
49
|
+
/** ISO timestamp of last fee scale change */
|
|
50
|
+
lastDeployerFeeScaleChangeTime?: string;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=hyperliquid-types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperliquid-types.d.cts","sourceRoot":"","sources":["../../src/types/hyperliquid-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,YAAY,EACZ,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,yBAAyB,EACzB,eAAe,EAChB,4BAA4B;AAG7B,MAAM,MAAM,aAAa,GACvB,0BAA0B,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,8BAA8B,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAG7E,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAGjE,MAAM,MAAM,aAAa,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;AAGnD,YAAY,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,YAAY,EACZ,0BAA0B,EAC1B,eAAe,EACf,wBAAwB,EACxB,yBAAyB,GAC1B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,+CAA+C;IAC/C,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HyperLiquid SDK Type Aliases
|
|
3
|
+
*
|
|
4
|
+
* The @nktkas/hyperliquid SDK only exports Response types (e.g., ClearinghouseStateResponse).
|
|
5
|
+
* We extract commonly-used nested types here to avoid repetitive type extraction syntax.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: Import Response types, extract nested types using TypeScript index access.
|
|
8
|
+
* This is the SDK's intentional design - not bad practice!
|
|
9
|
+
*/
|
|
10
|
+
import type { ClearinghouseStateResponse, SpotClearinghouseStateResponse, MetaResponse, FrontendOpenOrdersResponse, MetaAndAssetCtxsResponse, AllMidsResponse, PredictedFundingsResponse, OrderParameters } from "@nktkas/hyperliquid";
|
|
11
|
+
export type AssetPosition = ClearinghouseStateResponse['assetPositions'][number];
|
|
12
|
+
export type SpotBalance = SpotClearinghouseStateResponse['balances'][number];
|
|
13
|
+
export type PerpsUniverse = MetaResponse['universe'][number];
|
|
14
|
+
export type PerpsAssetCtx = MetaAndAssetCtxsResponse[1][number];
|
|
15
|
+
export type PredictedFunding = PredictedFundingsResponse[number];
|
|
16
|
+
export type FrontendOrder = FrontendOpenOrdersResponse[number];
|
|
17
|
+
export type SDKOrderParams = OrderParameters['orders'][number];
|
|
18
|
+
export type OrderType = FrontendOrder['orderType'];
|
|
19
|
+
export type { ClearinghouseStateResponse, SpotClearinghouseStateResponse, MetaResponse, FrontendOpenOrdersResponse, AllMidsResponse, MetaAndAssetCtxsResponse, PredictedFundingsResponse, };
|
|
20
|
+
/**
|
|
21
|
+
* Extended asset metadata including Growth Mode fields not in SDK types.
|
|
22
|
+
*
|
|
23
|
+
* The HyperLiquid API returns these fields but the SDK doesn't type them.
|
|
24
|
+
*
|
|
25
|
+
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers
|
|
26
|
+
*/
|
|
27
|
+
export type ExtendedAssetMeta = {
|
|
28
|
+
name: string;
|
|
29
|
+
szDecimals: number;
|
|
30
|
+
maxLeverage: number;
|
|
31
|
+
/** Per-asset Growth Mode status - "enabled" means 90% fee reduction */
|
|
32
|
+
growthMode?: 'enabled' | null;
|
|
33
|
+
/** ISO timestamp of last Growth Mode change */
|
|
34
|
+
lastGrowthModeChangeTime?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Extended perp DEX info including fee scale fields not in SDK types.
|
|
38
|
+
*
|
|
39
|
+
* The HyperLiquid API returns these fields but the SDK doesn't type them.
|
|
40
|
+
*
|
|
41
|
+
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers
|
|
42
|
+
*/
|
|
43
|
+
export type ExtendedPerpDex = {
|
|
44
|
+
name: string;
|
|
45
|
+
fullName?: string;
|
|
46
|
+
deployer?: string;
|
|
47
|
+
/** DEX-level fee scale (e.g., "1.0" for xyz DEX) - determines HIP-3 multiplier */
|
|
48
|
+
deployerFeeScale?: string;
|
|
49
|
+
/** ISO timestamp of last fee scale change */
|
|
50
|
+
lastDeployerFeeScaleChangeTime?: string;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=hyperliquid-types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperliquid-types.d.mts","sourceRoot":"","sources":["../../src/types/hyperliquid-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,YAAY,EACZ,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,yBAAyB,EACzB,eAAe,EAChB,4BAA4B;AAG7B,MAAM,MAAM,aAAa,GACvB,0BAA0B,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,8BAA8B,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAG7E,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAGjE,MAAM,MAAM,aAAa,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;AAGnD,YAAY,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,YAAY,EACZ,0BAA0B,EAC1B,eAAe,EACf,wBAAwB,EACxB,yBAAyB,GAC1B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,+CAA+C;IAC/C,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperliquid-types.mjs","sourceRoot":"","sources":["../../src/types/hyperliquid-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * HyperLiquid SDK Type Aliases\n *\n * The @nktkas/hyperliquid SDK only exports Response types (e.g., ClearinghouseStateResponse).\n * We extract commonly-used nested types here to avoid repetitive type extraction syntax.\n *\n * Pattern: Import Response types, extract nested types using TypeScript index access.\n * This is the SDK's intentional design - not bad practice!\n */\nimport type {\n ClearinghouseStateResponse,\n SpotClearinghouseStateResponse,\n MetaResponse,\n FrontendOpenOrdersResponse,\n MetaAndAssetCtxsResponse,\n AllMidsResponse,\n PredictedFundingsResponse,\n OrderParameters,\n} from '@nktkas/hyperliquid';\n\n// Clearinghouse (Account) Types\nexport type AssetPosition =\n ClearinghouseStateResponse['assetPositions'][number];\nexport type SpotBalance = SpotClearinghouseStateResponse['balances'][number];\n\n// Market/Asset Types\nexport type PerpsUniverse = MetaResponse['universe'][number];\nexport type PerpsAssetCtx = MetaAndAssetCtxsResponse[1][number];\nexport type PredictedFunding = PredictedFundingsResponse[number];\n\n// Order Types\nexport type FrontendOrder = FrontendOpenOrdersResponse[number];\nexport type SDKOrderParams = OrderParameters['orders'][number];\nexport type OrderType = FrontendOrder['orderType'];\n\n// Re-export Response types for convenience\nexport type {\n ClearinghouseStateResponse,\n SpotClearinghouseStateResponse,\n MetaResponse,\n FrontendOpenOrdersResponse,\n AllMidsResponse,\n MetaAndAssetCtxsResponse,\n PredictedFundingsResponse,\n};\n\n/**\n * Extended asset metadata including Growth Mode fields not in SDK types.\n *\n * The HyperLiquid API returns these fields but the SDK doesn't type them.\n *\n * @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers\n */\nexport type ExtendedAssetMeta = {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n /** Per-asset Growth Mode status - \"enabled\" means 90% fee reduction */\n growthMode?: 'enabled' | null;\n /** ISO timestamp of last Growth Mode change */\n lastGrowthModeChangeTime?: string;\n};\n\n/**\n * Extended perp DEX info including fee scale fields not in SDK types.\n *\n * The HyperLiquid API returns these fields but the SDK doesn't type them.\n *\n * @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/fees#fee-formula-for-developers\n */\nexport type ExtendedPerpDex = {\n name: string;\n fullName?: string;\n deployer?: string;\n /** DEX-level fee scale (e.g., \"1.0\" for xyz DEX) - determines HIP-3 multiplier */\n deployerFeeScale?: string;\n /** ISO timestamp of last fee scale change */\n lastDeployerFeeScaleChangeTime?: string;\n};\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.PerpsTraceOperations = exports.PerpsTraceNames = exports.PerpsAnalyticsEvent = exports.WebSocketConnectionState = void 0;
|
|
18
|
+
// Re-export transaction types for consumers
|
|
19
|
+
__exportStar(require("./transactionTypes.cjs"), exports);
|
|
20
|
+
/**
|
|
21
|
+
* WebSocket connection states for real-time data management
|
|
22
|
+
*/
|
|
23
|
+
var WebSocketConnectionState;
|
|
24
|
+
(function (WebSocketConnectionState) {
|
|
25
|
+
WebSocketConnectionState["Disconnected"] = "disconnected";
|
|
26
|
+
WebSocketConnectionState["Connecting"] = "connecting";
|
|
27
|
+
WebSocketConnectionState["Connected"] = "connected";
|
|
28
|
+
WebSocketConnectionState["Disconnecting"] = "disconnecting";
|
|
29
|
+
})(WebSocketConnectionState || (exports.WebSocketConnectionState = WebSocketConnectionState = {}));
|
|
30
|
+
/**
|
|
31
|
+
* Analytics events specific to Perps feature.
|
|
32
|
+
* These are the actual event names sent to analytics backend.
|
|
33
|
+
* Values must match the corresponding MetaMetricsEvents values in mobile for compatibility.
|
|
34
|
+
*
|
|
35
|
+
* When migrating to core monorepo, this enum travels with PerpsController.
|
|
36
|
+
*/
|
|
37
|
+
var PerpsAnalyticsEvent;
|
|
38
|
+
(function (PerpsAnalyticsEvent) {
|
|
39
|
+
PerpsAnalyticsEvent["WithdrawalTransaction"] = "Perp Withdrawal Transaction";
|
|
40
|
+
PerpsAnalyticsEvent["TradeTransaction"] = "Perp Trade Transaction";
|
|
41
|
+
PerpsAnalyticsEvent["PositionCloseTransaction"] = "Perp Position Close Transaction";
|
|
42
|
+
PerpsAnalyticsEvent["OrderCancelTransaction"] = "Perp Order Cancel Transaction";
|
|
43
|
+
PerpsAnalyticsEvent["ScreenViewed"] = "Perp Screen Viewed";
|
|
44
|
+
PerpsAnalyticsEvent["UiInteraction"] = "Perp UI Interaction";
|
|
45
|
+
PerpsAnalyticsEvent["RiskManagement"] = "Perp Risk Management";
|
|
46
|
+
PerpsAnalyticsEvent["PerpsError"] = "Perp Error";
|
|
47
|
+
})(PerpsAnalyticsEvent || (exports.PerpsAnalyticsEvent = PerpsAnalyticsEvent = {}));
|
|
48
|
+
/**
|
|
49
|
+
* Perps trace name constants. Values match TraceName enum in mobile.
|
|
50
|
+
* When in core, these ARE the source of truth - mobile will re-export from core.
|
|
51
|
+
*/
|
|
52
|
+
exports.PerpsTraceNames = {
|
|
53
|
+
// Trading operations
|
|
54
|
+
PlaceOrder: 'Perps Place Order',
|
|
55
|
+
EditOrder: 'Perps Edit Order',
|
|
56
|
+
CancelOrder: 'Perps Cancel Order',
|
|
57
|
+
ClosePosition: 'Perps Close Position',
|
|
58
|
+
UpdateTpsl: 'Perps Update TP/SL',
|
|
59
|
+
UpdateMargin: 'Perps Update Margin',
|
|
60
|
+
FlipPosition: 'Perps Flip Position',
|
|
61
|
+
// Account operations
|
|
62
|
+
Withdraw: 'Perps Withdraw',
|
|
63
|
+
Deposit: 'Perps Deposit',
|
|
64
|
+
// Market data
|
|
65
|
+
GetPositions: 'Perps Get Positions',
|
|
66
|
+
GetAccountState: 'Perps Get Account State',
|
|
67
|
+
GetMarkets: 'Perps Get Markets',
|
|
68
|
+
OrderFillsFetch: 'Perps Order Fills Fetch',
|
|
69
|
+
OrdersFetch: 'Perps Orders Fetch',
|
|
70
|
+
FundingFetch: 'Perps Funding Fetch',
|
|
71
|
+
GetHistoricalPortfolio: 'Perps Get Historical Portfolio',
|
|
72
|
+
FetchHistoricalCandles: 'Perps Fetch Historical Candles',
|
|
73
|
+
// Data lake
|
|
74
|
+
DataLakeReport: 'Perps Data Lake Report',
|
|
75
|
+
// WebSocket
|
|
76
|
+
WebsocketConnected: 'Perps WebSocket Connected',
|
|
77
|
+
WebsocketDisconnected: 'Perps WebSocket Disconnected',
|
|
78
|
+
WebsocketFirstPositions: 'Perps WebSocket First Positions',
|
|
79
|
+
WebsocketFirstOrders: 'Perps WebSocket First Orders',
|
|
80
|
+
WebsocketFirstAccount: 'Perps WebSocket First Account',
|
|
81
|
+
// Other
|
|
82
|
+
RewardsApiCall: 'Perps Rewards API Call',
|
|
83
|
+
ConnectionEstablishment: 'Perps Connection Establishment',
|
|
84
|
+
AccountSwitchReconnection: 'Perps Account Switch Reconnection',
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Perps trace operation constants. Values match TraceOperation enum in mobile.
|
|
88
|
+
* These categorize traces by type of operation for Sentry/observability filtering.
|
|
89
|
+
*/
|
|
90
|
+
exports.PerpsTraceOperations = {
|
|
91
|
+
Operation: 'perps.operation',
|
|
92
|
+
OrderSubmission: 'perps.order_submission',
|
|
93
|
+
PositionManagement: 'perps.position_management',
|
|
94
|
+
MarketData: 'perps.market_data',
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiBA,4CAA4C;AAC5C,yDAAmC;AAgBnC;;GAEG;AACH,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAClC,yDAA6B,CAAA;IAC7B,qDAAyB,CAAA;IACzB,mDAAuB,CAAA;IACvB,2DAA+B,CAAA;AACjC,CAAC,EALW,wBAAwB,wCAAxB,wBAAwB,QAKnC;AA2hCD;;;;;;GAMG;AACH,IAAY,mBASX;AATD,WAAY,mBAAmB;IAC7B,4EAAqD,CAAA;IACrD,kEAA2C,CAAA;IAC3C,mFAA4D,CAAA;IAC5D,+EAAwD,CAAA;IACxD,0DAAmC,CAAA;IACnC,4DAAqC,CAAA;IACrC,8DAAuC,CAAA;IACvC,gDAAyB,CAAA;AAC3B,CAAC,EATW,mBAAmB,mCAAnB,mBAAmB,QAS9B;AAgDD;;;GAGG;AACU,QAAA,eAAe,GAAG;IAC7B,qBAAqB;IACrB,UAAU,EAAE,mBAAmB;IAC/B,SAAS,EAAE,kBAAkB;IAC7B,WAAW,EAAE,oBAAoB;IACjC,aAAa,EAAE,sBAAsB;IACrC,UAAU,EAAE,oBAAoB;IAChC,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,qBAAqB;IAEnC,qBAAqB;IACrB,QAAQ,EAAE,gBAAgB;IAC1B,OAAO,EAAE,eAAe;IAExB,cAAc;IACd,YAAY,EAAE,qBAAqB;IACnC,eAAe,EAAE,yBAAyB;IAC1C,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,yBAAyB;IAC1C,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,qBAAqB;IACnC,sBAAsB,EAAE,gCAAgC;IACxD,sBAAsB,EAAE,gCAAgC;IAExD,YAAY;IACZ,cAAc,EAAE,wBAAwB;IAExC,YAAY;IACZ,kBAAkB,EAAE,2BAA2B;IAC/C,qBAAqB,EAAE,8BAA8B;IACrD,uBAAuB,EAAE,iCAAiC;IAC1D,oBAAoB,EAAE,8BAA8B;IACpD,qBAAqB,EAAE,+BAA+B;IAEtD,QAAQ;IACR,cAAc,EAAE,wBAAwB;IACxC,uBAAuB,EAAE,gCAAgC;IACzD,yBAAyB,EAAE,mCAAmC;CACb,CAAC;AAEpD;;;GAGG;AACU,QAAA,oBAAoB,GAAG;IAClC,SAAS,EAAE,iBAAiB;IAC5B,eAAe,EAAE,wBAAwB;IACzC,kBAAkB,EAAE,2BAA2B;IAC/C,UAAU,EAAE,mBAAmB;CACvB,CAAC","sourcesContent":["import type {\n CaipAccountId,\n CaipChainId,\n CaipAssetId,\n Hex,\n} from '@metamask/utils';\n\n// Import chart types for local use\nimport type { CandleData } from './chart';\nimport type { CandlePeriod, TimeDuration } from './chart';\n\n// Re-export chart types for consumers\nexport type * from './chart';\n\n// Re-export HyperLiquid SDK types for consumers\nexport type * from './hyperliquid-types';\n\n// Re-export transaction types for consumers\nexport * from './transactionTypes';\n\n/**\n * Stream channel keys for pausing/resuming WebSocket streams\n * Platform-specific implementations map their channels to these keys\n */\nexport type PerpsStreamChannelKey =\n | 'prices'\n | 'positions'\n | 'orders'\n | 'orderFills'\n | 'account'\n | 'orderBook'\n | 'candles'\n | 'oiCaps';\n\n/**\n * WebSocket connection states for real-time data management\n */\nexport enum WebSocketConnectionState {\n Disconnected = 'disconnected',\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnecting = 'disconnecting',\n}\n\n/**\n * Raw HyperLiquid ledger update structure from SDK\n * This matches the actual SDK types for userNonFundingLedgerUpdates\n */\nexport type RawHyperLiquidLedgerUpdate = {\n hash: string;\n time: number;\n delta: {\n type: string;\n usdc?: string;\n coin?: string;\n };\n};\n\n// User history item for deposits and withdrawals\nexport type UserHistoryItem = {\n id: string;\n timestamp: number;\n type: 'deposit' | 'withdrawal';\n amount: string;\n asset: string;\n txHash: string;\n status: 'completed' | 'failed' | 'pending';\n details: {\n source: string;\n bridgeContract?: string;\n recipient?: string;\n blockNumber?: string;\n chainId?: string;\n synthetic?: boolean;\n };\n};\n\n// Parameters for getting user history\nexport type GetUserHistoryParams = {\n startTime?: number;\n endTime?: number;\n accountId?: CaipAccountId;\n};\n\n// Trade configuration saved per market per network\nexport type TradeConfiguration = {\n leverage?: number; // Last used leverage for this market\n // Pending trade configuration (temporary, expires after 5 minutes)\n pendingConfig?: {\n amount?: string; // Order size in USD\n leverage?: number; // Leverage\n takeProfitPrice?: string; // Take profit price\n stopLossPrice?: string; // Stop loss price\n limitPrice?: string; // Limit price (for limit orders)\n orderType?: OrderType; // Market vs limit\n timestamp: number; // When the config was saved (for expiration check)\n };\n};\n\n// Order type enumeration\nexport type OrderType = 'market' | 'limit';\n\n// Market asset type classification (reusable across components)\nexport type MarketType = 'crypto' | 'equity' | 'commodity' | 'forex';\n\n// Market type filter including 'all' option and combined 'stocks_and_commodities' for UI filtering\nexport type MarketTypeFilter = MarketType | 'all' | 'stocks_and_commodities';\n\n// Badge type for market badges in UI (used by marketUtils)\nexport type BadgeType = MarketType | 'experimental' | 'dex';\n\n// Input method for amount entry tracking\nexport type InputMethod =\n | 'default'\n | 'slider'\n | 'keypad'\n | 'percentage'\n | 'max';\n\n// Trade action type - differentiates first trade on a market from adding to existing position\nexport type TradeAction = 'create_position' | 'increase_exposure';\n\n// Unified tracking data interface for analytics events (never persisted in state)\n// Note: Numeric values are already parsed by hooks (usePerpsOrderFees, etc.) from API responses\nexport type TrackingData = {\n // Common to all operations\n totalFee: number; // Total fee for the operation (parsed by hooks)\n marketPrice: number; // Market price at operation time (parsed by hooks)\n metamaskFee?: number; // MetaMask fee amount (parsed by hooks)\n metamaskFeeRate?: number; // MetaMask fee rate (parsed by hooks)\n feeDiscountPercentage?: number; // Fee discount percentage (parsed by hooks)\n estimatedPoints?: number; // Estimated reward points (parsed by hooks)\n\n // Order-specific (used for trade operations)\n marginUsed?: number; // Margin required for this order (calculated by hooks)\n inputMethod?: InputMethod; // How user set the amount\n tradeAction?: TradeAction; // 'create_position' for first trade, 'increase_exposure' for adding to existing\n\n // Close-specific (used for position close operations)\n receivedAmount?: number; // Amount user receives after close (calculated by hooks)\n realizedPnl?: number; // Realized P&L from close (calculated by hooks)\n\n // Entry source for analytics (e.g., 'trending' for Trending page discovery)\n source?: string;\n};\n\n// TP/SL-specific tracking data for analytics events\nexport type TPSLTrackingData = {\n direction: 'long' | 'short'; // Position direction\n source: string; // Source of the TP/SL update (e.g., 'tp_sl_view', 'position_card')\n positionSize: number; // Unsigned position size for metrics\n takeProfitPercentage?: number; // Take profit percentage from entry\n stopLossPercentage?: number; // Stop loss percentage from entry\n isEditingExistingPosition?: boolean; // true = editing existing position, false = creating for new order\n entryPrice?: number; // Entry price for percentage calculations\n};\n\n// MetaMask Perps API order parameters for PerpsController\nexport type OrderParams = {\n symbol: string; // Asset identifier (e.g., 'ETH', 'BTC', 'xyz:TSLA')\n isBuy: boolean; // true = BUY order, false = SELL order\n size: string; // Order size as string (derived for validation, provider recalculates from usdAmount)\n orderType: OrderType; // Order type\n price?: string; // Limit price (required for limit orders)\n reduceOnly?: boolean; // Reduce-only flag\n isFullClose?: boolean; // Indicates closing 100% of position (skips $10 minimum validation)\n timeInForce?: 'GTC' | 'IOC' | 'ALO'; // Time in force\n\n // USD as source of truth (hybrid approach)\n usdAmount?: string; // USD amount (primary source of truth, provider calculates size from this)\n priceAtCalculation?: number; // Price snapshot when size was calculated (for slippage validation)\n maxSlippageBps?: number; // Slippage tolerance in basis points (e.g., 100 = 1%, default if not provided)\n\n // Advanced order features\n takeProfitPrice?: string; // Take profit price\n stopLossPrice?: string; // Stop loss price\n clientOrderId?: string; // Optional client-provided order ID\n slippage?: number; // Slippage tolerance for market orders (default: ORDER_SLIPPAGE_CONFIG.DefaultMarketSlippageBps / 10000 = 3%)\n grouping?: 'na' | 'normalTpsl' | 'positionTpsl'; // Override grouping (defaults: 'na' without TP/SL, 'normalTpsl' with TP/SL)\n currentPrice?: number; // Current market price (avoids extra API call if provided)\n leverage?: number; // Leverage to apply for the order (e.g., 10 for 10x leverage)\n existingPositionLeverage?: number; // Existing position leverage for validation (protocol constraint)\n\n // Optional tracking data for MetaMetrics events\n trackingData?: TrackingData;\n\n // Multi-provider routing (optional: defaults to active/default provider)\n providerId?: PerpsProviderType; // Optional: override active provider for routing\n};\n\nexport type OrderResult = {\n success?: boolean;\n orderId?: string; // Order ID from exchange\n error?: string;\n filledSize?: string; // Amount filled\n averagePrice?: string; // Average execution price\n providerId?: PerpsProviderType; // Multi-provider: which provider executed this order (injected by aggregator)\n};\n\nexport type Position = {\n symbol: string; // Asset identifier (e.g., 'ETH', 'BTC', 'xyz:TSLA')\n size: string; // Signed position size (+ = LONG, - = SHORT)\n entryPrice: string; // Average entry price\n positionValue: string; // Total position value in USD\n unrealizedPnl: string; // Unrealized profit/loss\n marginUsed: string; // Margin currently used for this position\n leverage: {\n type: 'isolated' | 'cross'; // Margin type\n value: number; // Leverage multiplier\n rawUsd?: string; // USD amount (for isolated margin)\n };\n liquidationPrice: string | null; // Liquidation price (null if no risk)\n maxLeverage: number; // Maximum allowed leverage for this asset\n returnOnEquity: string; // ROE percentage\n cumulativeFunding: {\n // Funding payments history\n allTime: string; // Total funding since account opening\n sinceOpen: string; // Funding since position opened\n sinceChange: string; // Funding since last size change\n };\n takeProfitPrice?: string; // Take profit price (if set)\n stopLossPrice?: string; // Stop loss price (if set)\n takeProfitCount: number; // Take profit count, how many tps can affect the position\n stopLossCount: number; // Stop loss count, how many sls can affect the position\n providerId?: PerpsProviderType; // Multi-provider: which provider holds this position (injected by aggregator)\n};\n\n// Using 'type' instead of 'interface' for BaseController Json compatibility\nexport type AccountState = {\n availableBalance: string; // Based on HyperLiquid: withdrawable\n totalBalance: string; // Based on HyperLiquid: accountValue\n marginUsed: string; // Based on HyperLiquid: marginUsed\n unrealizedPnl: string; // Based on HyperLiquid: unrealizedPnl\n returnOnEquity: string; // Based on HyperLiquid: returnOnEquity adjusted for weighted margin\n /**\n * Per-sub-account balance breakdown (protocol-specific, optional)\n * Maps sub-account identifier to its balance details.\n *\n * Protocol examples:\n * - HyperLiquid HIP-3: '' or 'main' (main DEX), 'xyz' (HIP-3 builder DEX)\n * - dYdX: Sub-account numbers (e.g., '0', '1', '2')\n * - Other protocols: Vault IDs, pool IDs, margin account IDs, etc.\n *\n * Key: Sub-account identifier (protocol-specific string)\n * Value: Balance details for that sub-account\n */\n subAccountBreakdown?: Record<\n string,\n {\n availableBalance: string;\n totalBalance: string;\n }\n >;\n providerId?: PerpsProviderType; // Multi-provider: which provider this account state is from (injected by aggregator)\n};\n\nexport type ClosePositionParams = {\n symbol: string; // Asset identifier to close (e.g., 'ETH', 'BTC', 'xyz:TSLA')\n size?: string; // Size to close (omit for full close)\n orderType?: OrderType; // Close order type (default: market)\n price?: string; // Limit price (required for limit close)\n currentPrice?: number; // Current market price for validation\n\n // USD as source of truth (hybrid approach - same as OrderParams)\n usdAmount?: string; // USD amount (primary source of truth, provider calculates size from this)\n priceAtCalculation?: number; // Price snapshot when size was calculated (for slippage validation)\n maxSlippageBps?: number; // Slippage tolerance in basis points (e.g., 100 = 1%, default if not provided)\n\n // Optional tracking data for MetaMetrics events\n trackingData?: TrackingData;\n\n // Multi-provider routing (optional: defaults to active/default provider)\n providerId?: PerpsProviderType; // Optional: override active provider for routing\n};\n\nexport type ClosePositionsParams = {\n symbols?: string[]; // Optional: specific symbols to close (omit or empty array to close all)\n closeAll?: boolean; // Explicitly close all positions\n};\n\nexport type ClosePositionsResult = {\n success: boolean; // Overall success (true if at least one position closed)\n successCount: number; // Number of positions closed successfully\n failureCount: number; // Number of positions that failed to close\n results: {\n symbol: string;\n success: boolean;\n error?: string;\n }[];\n};\n\nexport type UpdateMarginParams = {\n symbol: string; // Asset identifier (e.g., 'BTC', 'ETH', 'xyz:TSLA')\n amount: string; // Amount to adjust as string (positive = add, negative = remove)\n providerId?: PerpsProviderType; // Multi-provider: optional provider override for routing\n};\n\nexport type MarginResult = {\n success: boolean;\n error?: string;\n};\n\nexport type FlipPositionParams = {\n symbol: string; // Asset identifier to flip (e.g., 'BTC', 'ETH', 'xyz:TSLA')\n position: Position; // Current position to flip\n};\n\nexport type InitializeResult = {\n success: boolean;\n error?: string;\n chainId?: string;\n};\n\nexport type ReadyToTradeResult = {\n ready: boolean;\n error?: string;\n walletConnected?: boolean;\n networkSupported?: boolean;\n};\n\nexport type DisconnectResult = {\n success: boolean;\n error?: string;\n};\n\nexport type MarketInfo = {\n name: string; // HyperLiquid: universe name (asset symbol)\n szDecimals: number; // HyperLiquid: size decimals\n maxLeverage: number; // HyperLiquid: max leverage\n marginTableId: number; // HyperLiquid: margin requirements table ID\n onlyIsolated?: true; // HyperLiquid: isolated margin only (optional, only when true)\n isDelisted?: true; // HyperLiquid: delisted status (optional, only when true)\n minimumOrderSize?: number; // Minimum order size in USD (protocol-specific)\n providerId?: PerpsProviderType; // Multi-provider: which provider this market comes from (injected by aggregator)\n};\n\n/**\n * Market data with prices for UI display\n * Protocol-agnostic interface for market information with formatted values\n */\nexport type PerpsMarketData = {\n /**\n * Token symbol (e.g., 'BTC', 'ETH')\n */\n symbol: string;\n /**\n * Full token name (e.g., 'Bitcoin', 'Ethereum')\n */\n name: string;\n /**\n * Maximum leverage available as formatted string (e.g., '40x', '25x')\n */\n maxLeverage: string;\n /**\n * Current price as formatted string (e.g., '$50,000.00')\n */\n price: string;\n /**\n * 24h price change as formatted string (e.g., '+$1,250.00', '-$850.50')\n */\n change24h: string;\n /**\n * 24h price change percentage as formatted string (e.g., '+2.5%', '-1.8%')\n */\n change24hPercent: string;\n /**\n * Trading volume as formatted string (e.g., '$1.2B', '$850M')\n */\n volume: string;\n /**\n * Open interest as formatted string (e.g., '$24.5M', '$1.2B')\n */\n openInterest?: string;\n /**\n * Next funding time in milliseconds since epoch (optional, market-specific)\n */\n nextFundingTime?: number;\n /**\n * Funding interval in hours (optional, market-specific)\n */\n fundingIntervalHours?: number;\n /**\n * Current funding rate as decimal (optional, from predictedFundings API)\n */\n fundingRate?: number;\n /**\n * Market source DEX identifier (HIP-3 support)\n * - null or undefined: Main validator DEX\n * - \"xyz\", \"abc\", etc: HIP-3 builder-deployed DEX\n */\n marketSource?: string | null;\n /**\n * Market asset type classification (optional)\n * - crypto: Cryptocurrency (default for most markets)\n * - equity: Stock/equity markets (HIP-3)\n * - commodity: Commodity markets (HIP-3)\n * - forex: Foreign exchange pairs (HIP-3)\n */\n marketType?: MarketType;\n /**\n * Multi-provider: which provider this market data comes from (injected by aggregator)\n */\n providerId?: PerpsProviderType;\n};\n\nexport type ToggleTestnetResult = {\n success: boolean;\n isTestnet: boolean;\n error?: string;\n};\n\nexport type AssetRoute = {\n assetId: CaipAssetId; // CAIP asset ID (e.g., \"eip155:42161/erc20:0xaf88.../default\")\n chainId: CaipChainId; // CAIP-2 chain ID where the bridge contract is located\n contractAddress: Hex; // Bridge contract address for deposits/withdrawals\n constraints?: {\n minAmount?: string; // Minimum deposit/withdrawal amount\n maxAmount?: string; // Maximum deposit/withdrawal amount\n estimatedTime?: string; // Estimated processing time (formatted string - deprecated, use estimatedMinutes)\n estimatedMinutes?: number; // Estimated processing time in minutes (raw value for UI formatting)\n fees?: {\n fixed?: number; // Fixed fee amount (e.g., 1 for 1 token)\n percentage?: number; // Percentage fee (e.g., 0.05 for 0.05%)\n token?: string; // Fee token symbol (e.g., 'USDC', 'ETH')\n };\n };\n};\n\nexport type SwitchProviderResult = {\n success: boolean;\n providerId: PerpsActiveProviderMode;\n error?: string;\n};\n\nexport type CancelOrderParams = {\n orderId: string; // Order ID to cancel\n symbol: string; // Asset identifier (e.g., 'BTC', 'ETH', 'xyz:TSLA')\n providerId?: PerpsProviderType; // Multi-provider: optional provider override for routing\n};\n\nexport type CancelOrderResult = {\n success: boolean;\n orderId?: string; // Cancelled order ID\n error?: string;\n providerId?: PerpsProviderType; // Multi-provider: source provider identifier\n};\n\nexport type BatchCancelOrdersParams = {\n orderId: string;\n symbol: string;\n}[];\n\nexport type CancelOrdersParams = {\n symbols?: string[]; // Optional: specific symbols (omit to cancel all orders)\n orderIds?: string[]; // Optional: specific order IDs (omit to cancel all orders for specified coins)\n cancelAll?: boolean; // Explicitly cancel all orders\n};\n\nexport type CancelOrdersResult = {\n success: boolean; // Overall success (true if at least one order cancelled)\n successCount: number; // Number of orders cancelled successfully\n failureCount: number; // Number of orders that failed to cancel\n results: {\n orderId: string;\n symbol: string;\n success: boolean;\n error?: string;\n }[];\n};\n\nexport type EditOrderParams = {\n orderId: string | number; // Order ID or client order ID to modify\n newOrder: OrderParams; // New order parameters\n};\n\nexport type DepositParams = {\n amount: string; // Amount to deposit\n assetId: CaipAssetId; // Asset to deposit (required for validation)\n fromChainId?: CaipChainId; // Source chain (defaults to current network)\n toChainId?: CaipChainId; // Destination chain (defaults to HyperLiquid Arbitrum)\n recipient?: Hex; // Recipient address (defaults to selected account)\n};\n\nexport type DepositResult = {\n success: boolean;\n txHash?: string;\n error?: string;\n};\n\n// Enhanced deposit flow state types for multi-step deposits\nexport type DepositStatus =\n | 'idle' // No deposit in progress\n | 'preparing' // Analyzing route & preparing transactions\n | 'swapping' // Converting token (e.g., ETH → USDC)\n | 'bridging' // Cross-chain transfer\n | 'depositing' // Final deposit to HyperLiquid\n | 'success' // Deposit completed successfully\n | 'error'; // Deposit failed at any step\n\nexport type DepositFlowType =\n | 'direct' // Same chain, same token (USDC on Arbitrum)\n | 'swap' // Same chain, different token (ETH → USDC)\n | 'bridge' // Different chain, same token (USDC on Ethereum → Arbitrum)\n | 'swap_bridge'; // Different chain, different token (ETH on Ethereum → USDC on Arbitrum)\n\nexport type DepositStepInfo = {\n totalSteps: number; // Total number of steps in this flow\n currentStep: number; // Current step (0-based index)\n stepNames: string[]; // Human-readable step names\n stepTxHashes?: string[]; // Transaction hashes for each completed step\n};\n\nexport type WithdrawParams = {\n amount: string; // Amount to withdraw\n destination?: Hex; // Destination address (optional, defaults to current account)\n assetId?: CaipAssetId; // Asset to withdraw (defaults to USDC)\n providerId?: PerpsProviderType; // Multi-provider: optional provider override for routing\n};\n\nexport type WithdrawResult = {\n success: boolean;\n txHash?: string;\n error?: string;\n withdrawalId?: string; // Unique ID for tracking\n estimatedArrivalTime?: number; // Provider-specific arrival time\n};\n\nexport type TransferBetweenDexsParams = {\n sourceDex: string; // Source DEX name ('' = main DEX, 'xyz' = HIP-3 DEX)\n destinationDex: string; // Destination DEX name ('' = main DEX, 'xyz' = HIP-3 DEX)\n amount: string; // USDC amount to transfer\n};\n\nexport type TransferBetweenDexsResult = {\n success: boolean;\n txHash?: string;\n error?: string;\n};\n\nexport type GetHistoricalPortfolioParams = {\n accountId?: CaipAccountId; // Optional: defaults to selected account\n};\n\nexport type HistoricalPortfolioResult = {\n accountValue1dAgo: string;\n timestamp: number;\n};\n\nexport type LiveDataConfig = {\n priceThrottleMs?: number; // ms between price updates (default: 2000)\n positionThrottleMs?: number; // ms between position updates (default: 5000)\n maxUpdatesPerSecond?: number; // hard limit to prevent UI blocking\n};\n\nexport type PerpsControllerConfig = {\n /**\n * Fallback blocked regions to use when RemoteFeatureFlagController fails to fetch.\n * The fallback is set by default if defined and replaced with remote block list once available.\n */\n fallbackBlockedRegions?: string[];\n /**\n * Fallback HIP-3 equity perps master switch to use when RemoteFeatureFlagController fails to fetch.\n * Controls whether HIP-3 (builder-deployed) DEXs are enabled.\n * The fallback is set by default if defined and replaced with remote feature flag once available.\n */\n fallbackHip3Enabled?: boolean;\n /**\n * Fallback HIP-3 market allowlist to use when RemoteFeatureFlagController fails to fetch.\n * Empty array = enable all markets (discovery mode), non-empty = allowlist specific markets.\n * Supports wildcards: \"xyz:*\" (all xyz markets), \"xyz\" (shorthand for \"xyz:*\"), \"BTC\" (main DEX market).\n * Only applies when HIP-3 is enabled.\n * The fallback is set by default if defined and replaced with remote feature flag once available.\n */\n fallbackHip3AllowlistMarkets?: string[];\n /**\n * Fallback HIP-3 market blocklist to use when RemoteFeatureFlagController fails to fetch.\n * Empty array = no blocking, non-empty = block specific markets.\n * Supports wildcards: \"xyz:*\" (block all xyz markets), \"xyz\" (shorthand for \"xyz:*\"), \"BTC\" (block main DEX market).\n * Always applied regardless of HIP-3 enabled state.\n * The fallback is set by default if defined and replaced with remote feature flag once available.\n */\n fallbackHip3BlocklistMarkets?: string[];\n};\n\nexport type PriceUpdate = {\n symbol: string; // Asset identifier (e.g., 'BTC', 'ETH', 'xyz:TSLA')\n price: string; // Current mid price (average of best bid and ask)\n timestamp: number; // Update timestamp\n percentChange24h?: string; // 24h price change percentage\n // Order book data (only available when includeOrderBook is true)\n bestBid?: string; // Best bid price (highest price buyers are willing to pay)\n bestAsk?: string; // Best ask price (lowest price sellers are willing to accept)\n spread?: string; // Ask - Bid spread\n markPrice?: string; // Mark price from oracle (used for liquidations)\n // Market data (only available when includeMarketData is true)\n funding?: number; // Current funding rate\n openInterest?: number; // Open interest in USD\n volume24h?: number; // 24h trading volume in USD\n providerId?: PerpsProviderType; // Multi-provider: price source (injected by aggregator)\n};\n\nexport type OrderFill = {\n orderId: string; // Order ID that was filled\n symbol: string; // Asset symbol\n side: string; // Normalized order side ('buy' or 'sell')\n size: string; // Fill size\n price: string; // Fill price\n pnl: string; // PNL\n direction: string; // Direction of the fill\n fee: string; // Fee paid\n feeToken: string; // Fee token symbol\n timestamp: number; // Fill timestamp\n startPosition?: string; // Start position\n success?: boolean; // Whether the order was filled successfully\n liquidation?: {\n liquidatedUser: string; // Address of the liquidated user. liquidatedUser isn't always the current user. It can also mean the fill filled another user's liquidation.\n markPx: string; // Mark price at liquidation\n method: string; // Liquidation method (e.g., 'market')\n };\n orderType?: 'take_profit' | 'stop_loss' | 'liquidation' | 'regular';\n detailedOrderType?: string; // Original order type from exchange\n providerId?: PerpsProviderType; // Multi-provider: which provider this fill occurred on (injected by aggregator)\n};\n\n// Parameter interfaces - all fully optional for better UX\nexport type GetPositionsParams = {\n accountId?: CaipAccountId; // Optional: defaults to selected account\n includeHistory?: boolean; // Optional: include historical positions\n skipCache?: boolean; // Optional: bypass WebSocket cache and force API call (default: false)\n};\n\nexport type GetAccountStateParams = {\n accountId?: CaipAccountId; // Optional: defaults to selected account\n source?: string; // Optional: source of the call for tracing (e.g., 'health_check', 'initial_connection')\n};\n\nexport type GetOrderFillsParams = {\n accountId?: CaipAccountId; // Optional: defaults to selected account\n user?: Hex; // Optional: user address (defaults to selected account)\n startTime?: number; // Optional: start timestamp (Unix milliseconds)\n endTime?: number; // Optional: end timestamp (Unix milliseconds)\n limit?: number; // Optional: max number of results for pagination\n aggregateByTime?: boolean; // Optional: aggregate by time\n};\n\nexport type GetOrdersParams = {\n accountId?: CaipAccountId; // Optional: defaults to selected account\n startTime?: number; // Optional: start timestamp (Unix milliseconds)\n endTime?: number; // Optional: end timestamp (Unix milliseconds)\n limit?: number; // Optional: max number of results for pagination\n offset?: number; // Optional: offset for pagination\n skipCache?: boolean; // Optional: bypass WebSocket cache and force API call (default: false)\n};\n\nexport type GetFundingParams = {\n accountId?: CaipAccountId; // Optional: defaults to selected account\n startTime?: number; // Optional: start timestamp (Unix milliseconds)\n endTime?: number; // Optional: end timestamp (Unix milliseconds)\n limit?: number; // Optional: max number of results for pagination\n offset?: number; // Optional: offset for pagination\n};\n\nexport type GetSupportedPathsParams = {\n isTestnet?: boolean; // Optional: override current testnet state\n assetId?: CaipAssetId; // Optional: filter by specific asset\n symbol?: string; // Optional: filter by asset symbol (e.g., 'USDC')\n chainId?: CaipChainId; // Optional: filter by chain (CAIP-2 format)\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- Reserved for future extensibility (filters, pagination, etc.)\nexport type GetAvailableDexsParams = {};\n\nexport type GetMarketsParams = {\n symbols?: string[]; // Optional symbol filter (e.g., ['BTC', 'xyz:XYZ100'])\n dex?: string; // HyperLiquid HIP-3: DEX name (empty string '' or undefined for main DEX). Other protocols: ignored.\n skipFilters?: boolean; // Skip market filtering (both allowlist and blocklist, default: false). When true, returns all markets without filtering.\n readOnly?: boolean; // Lightweight mode: skip full initialization, only fetch market metadata (no wallet/WebSocket needed). Only main DEX markets returned. Use for discovery use cases like checking if a perps market exists.\n};\n\nexport type SubscribePricesParams = {\n symbols: string[];\n callback: (prices: PriceUpdate[]) => void;\n throttleMs?: number; // Future: per-subscription throttling\n includeOrderBook?: boolean; // Optional: include bid/ask data from L2 book\n includeMarketData?: boolean; // Optional: include funding, open interest, volume data\n};\n\nexport type SubscribePositionsParams = {\n callback: (positions: Position[]) => void;\n accountId?: CaipAccountId; // Optional: defaults to selected account\n includeHistory?: boolean; // Future: include historical data\n};\n\nexport type SubscribeOrderFillsParams = {\n callback: (fills: OrderFill[], isSnapshot?: boolean) => void;\n accountId?: CaipAccountId; // Optional: defaults to selected account\n since?: number; // Future: only fills after timestamp\n};\n\nexport type SubscribeOrdersParams = {\n callback: (orders: Order[]) => void;\n accountId?: CaipAccountId; // Optional: defaults to selected account\n includeHistory?: boolean; // Optional: include filled/canceled orders\n};\n\nexport type SubscribeAccountParams = {\n callback: (account: AccountState) => void;\n accountId?: CaipAccountId; // Optional: defaults to selected account\n};\n\nexport type SubscribeOICapsParams = {\n callback: (caps: string[]) => void;\n accountId?: CaipAccountId; // Optional: defaults to selected account\n};\n\nexport type SubscribeCandlesParams = {\n symbol: string;\n interval: CandlePeriod;\n duration?: TimeDuration;\n callback: (data: CandleData) => void;\n onError?: (error: Error) => void;\n};\n\n/**\n * Single price level in the order book\n */\nexport type OrderBookLevel = {\n /** Price at this level */\n price: string;\n /** Size at this level (in base asset) */\n size: string;\n /** Cumulative size up to and including this level */\n total: string;\n /** Notional value in USD */\n notional: string;\n /** Cumulative notional up to and including this level */\n totalNotional: string;\n};\n\n/**\n * Full order book data with multiple price levels\n */\nexport type OrderBookData = {\n /** Bid levels (buy orders) - highest price first */\n bids: OrderBookLevel[];\n /** Ask levels (sell orders) - lowest price first */\n asks: OrderBookLevel[];\n /** Spread between best bid and best ask */\n spread: string;\n /** Spread as a percentage of mid price */\n spreadPercentage: string;\n /** Mid price (average of best bid and best ask) */\n midPrice: string;\n /** Timestamp of last update */\n lastUpdated: number;\n /** Maximum total size across all levels (for scaling depth bars) */\n maxTotal: string;\n};\n\nexport type SubscribeOrderBookParams = {\n /** Symbol to subscribe to (e.g., 'BTC', 'ETH') */\n symbol: string;\n /** Number of levels to return per side (default: 10) */\n levels?: number;\n /** Price aggregation significant figures (2-5, default: 5). Higher = finer granularity */\n nSigFigs?: 2 | 3 | 4 | 5;\n /** Mantissa for aggregation when nSigFigs is 5 (2 or 5). Controls finest price increments */\n mantissa?: 2 | 5;\n /** Callback function receiving order book updates */\n callback: (orderBook: OrderBookData) => void;\n /** Callback for errors */\n onError?: (error: Error) => void;\n};\n\nexport type LiquidationPriceParams = {\n entryPrice: number;\n leverage: number;\n direction: 'long' | 'short';\n positionSize?: number; // Optional: for more accurate calculations\n marginType?: 'isolated' | 'cross'; // Optional: defaults to isolated\n asset?: string; // Optional: for asset-specific maintenance margins\n};\n\nexport type MaintenanceMarginParams = {\n asset: string;\n positionSize?: number; // Optional: for tiered margin systems\n};\n\nexport type FeeCalculationParams = {\n orderType: 'market' | 'limit';\n isMaker?: boolean;\n amount?: string;\n symbol: string; // Required: Asset identifier for HIP-3 fee calculation (e.g., 'BTC', 'xyz:TSLA')\n};\n\nexport type FeeCalculationResult = {\n // Total fees (protocol + MetaMask)\n feeRate?: number; // Total fee rate as decimal (e.g., 0.00145 for 0.145%), undefined when unavailable\n feeAmount?: number; // Total fee amount in USD (when amount is provided)\n\n // Protocol-specific base fees\n protocolFeeRate?: number; // Protocol fee rate (e.g., 0.00045 for HyperLiquid taker), undefined when unavailable\n protocolFeeAmount?: number; // Protocol fee amount in USD\n\n // MetaMask builder/revenue fee\n metamaskFeeRate?: number; // MetaMask fee rate (e.g., 0.001 for 0.1%), undefined when unavailable\n metamaskFeeAmount?: number; // MetaMask fee amount in USD\n\n // Optional detailed breakdown for transparency\n breakdown?: {\n baseFeeRate: number;\n volumeTier?: string;\n volumeDiscount?: number;\n stakingDiscount?: number;\n };\n};\n\nexport type UpdatePositionTPSLParams = {\n symbol: string; // Asset identifier (e.g., 'BTC', 'ETH', 'xyz:TSLA')\n takeProfitPrice?: string; // Optional: undefined to remove\n stopLossPrice?: string; // Optional: undefined to remove\n // Optional tracking data for MetaMetrics events\n trackingData?: TPSLTrackingData;\n providerId?: PerpsProviderType; // Multi-provider: optional provider override for routing\n};\n\nexport type Order = {\n orderId: string; // Order ID\n symbol: string; // Asset symbol (e.g., 'ETH', 'BTC')\n side: 'buy' | 'sell'; // Normalized order side\n orderType: OrderType; // Order type (market/limit)\n size: string; // Order size\n originalSize: string; // Original order size\n price: string; // Order price (for limit orders)\n filledSize: string; // Amount filled\n remainingSize: string; // Amount remaining\n status: 'open' | 'filled' | 'canceled' | 'rejected' | 'triggered' | 'queued'; // Normalized status\n timestamp: number; // Order timestamp\n lastUpdated?: number; // Last status update timestamp (optional - not provided by all APIs)\n // TODO: Consider creating separate type for OpenOrders (UI Orders) potentially if optional properties muddy up the original Order type\n takeProfitPrice?: string; // Take profit price (if set)\n stopLossPrice?: string; // Stop loss price (if set)\n stopLossOrderId?: string; // Stop loss order ID\n takeProfitOrderId?: string; // Take profit order ID\n detailedOrderType?: string; // Full order type from exchange (e.g., 'Take Profit Limit', 'Stop Market')\n isTrigger?: boolean; // Whether this is a trigger order (TP/SL)\n reduceOnly?: boolean; // Whether this is a reduce-only order\n triggerPrice?: string; // Trigger condition price for trigger orders (e.g., TP/SL trigger level)\n providerId?: PerpsProviderType; // Multi-provider: which provider this order is on (injected by aggregator)\n};\n\nexport type Funding = {\n symbol: string; // Asset symbol (e.g., 'ETH', 'BTC')\n amountUsd: string; // Funding amount in USD (positive = received, negative = paid)\n rate: string; // Funding rate applied\n timestamp: number; // Funding payment timestamp\n transactionHash?: string; // Optional transaction hash\n};\n\nexport type PerpsProvider = {\n readonly protocolId: string;\n\n // Unified asset and route information\n getDepositRoutes(params?: GetSupportedPathsParams): AssetRoute[]; // Assets and their deposit routes\n getWithdrawalRoutes(params?: GetSupportedPathsParams): AssetRoute[]; // Assets and their withdrawal routes\n\n // Trading operations → Redux (persisted, optimistic updates)\n placeOrder(params: OrderParams): Promise<OrderResult>;\n editOrder(params: EditOrderParams): Promise<OrderResult>;\n cancelOrder(params: CancelOrderParams): Promise<CancelOrderResult>;\n cancelOrders?(params: BatchCancelOrdersParams): Promise<CancelOrdersResult>; // Optional: batch cancel for protocols that support it\n closePosition(params: ClosePositionParams): Promise<OrderResult>;\n closePositions?(params: ClosePositionsParams): Promise<ClosePositionsResult>; // Optional: batch close for protocols that support it\n updatePositionTPSL(params: UpdatePositionTPSLParams): Promise<OrderResult>;\n updateMargin(params: UpdateMarginParams): Promise<MarginResult>;\n getPositions(params?: GetPositionsParams): Promise<Position[]>;\n getAccountState(params?: GetAccountStateParams): Promise<AccountState>;\n getMarkets(params?: GetMarketsParams): Promise<MarketInfo[]>;\n getMarketDataWithPrices(): Promise<PerpsMarketData[]>;\n withdraw(params: WithdrawParams): Promise<WithdrawResult>; // API operation - stays in provider\n // Note: deposit() is handled by PerpsController routing (blockchain operation)\n validateDeposit(\n params: DepositParams,\n ): Promise<{ isValid: boolean; error?: string }>; // Protocol-specific deposit validation\n validateOrder(\n params: OrderParams,\n ): Promise<{ isValid: boolean; error?: string }>; // Protocol-specific order validation\n validateClosePosition(\n params: ClosePositionParams,\n ): Promise<{ isValid: boolean; error?: string }>; // Protocol-specific position close validation\n validateWithdrawal(\n params: WithdrawParams,\n ): Promise<{ isValid: boolean; error?: string }>; // Protocol-specific withdrawal validation\n\n // Historical data operations\n /**\n * Historical trade fills - actual executed trades with exact prices and fees.\n * Purpose: Track what actually happened when orders were executed.\n * Example: Market long 1 ETH @ $50,000 → OrderFill with exact execution price and fees\n */\n getOrderFills(params?: GetOrderFillsParams): Promise<OrderFill[]>;\n\n /**\n * Get historical portfolio data.\n * Purpose: Retrieve account value from previous periods for PnL tracking\n * Example: Get account value from yesterday to calculate 24h percentage change\n *\n * @param params - Optional parameters for historical portfolio retrieval\n */\n getHistoricalPortfolio(\n params?: GetHistoricalPortfolioParams,\n ): Promise<HistoricalPortfolioResult>;\n\n /**\n * Historical order lifecycle - order placement, modifications, and status changes.\n * Purpose: Track the complete journey of orders from request to completion.\n * Example: Limit buy 1 ETH @ $48,000 → Order with status 'open' → 'filled' when executed\n */\n getOrders(params?: GetOrdersParams): Promise<Order[]>;\n\n /**\n * Currently active open orders (real-time status).\n * Purpose: Show orders that are currently open/pending execution (not historical states).\n * Different from getOrders() which returns complete historical order lifecycle.\n * Example: Shows only orders that are actually open right now in the exchange.\n */\n getOpenOrders(params?: GetOrdersParams): Promise<Order[]>;\n\n /**\n * Historical funding payments - periodic costs/rewards for holding positions.\n * Purpose: Track ongoing expenses and income from position maintenance.\n * Example: Holding long ETH position → Funding payment of -$5.00 (you pay the funding)\n */\n getFunding(params?: GetFundingParams): Promise<Funding[]>;\n\n /**\n * Get user non-funding ledger updates (deposits, transfers, withdrawals)\n */\n getUserNonFundingLedgerUpdates(params?: {\n accountId?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<RawHyperLiquidLedgerUpdate[]>;\n\n /**\n * Get user history (deposits, withdrawals, transfers)\n */\n getUserHistory(params?: {\n accountId?: CaipAccountId;\n startTime?: number;\n endTime?: number;\n }): Promise<UserHistoryItem[]>;\n\n // Protocol-specific calculations\n calculateLiquidationPrice(params: LiquidationPriceParams): Promise<string>;\n calculateMaintenanceMargin(params: MaintenanceMarginParams): Promise<number>;\n getMaxLeverage(asset: string): Promise<number>;\n calculateFees(params: FeeCalculationParams): Promise<FeeCalculationResult>;\n\n // Live data subscriptions → Direct UI (NO Redux, maximum speed)\n subscribeToPrices(params: SubscribePricesParams): () => void;\n subscribeToPositions(params: SubscribePositionsParams): () => void;\n subscribeToOrderFills(params: SubscribeOrderFillsParams): () => void;\n subscribeToOrders(params: SubscribeOrdersParams): () => void;\n subscribeToAccount(params: SubscribeAccountParams): () => void;\n subscribeToOICaps(params: SubscribeOICapsParams): () => void;\n subscribeToCandles(params: SubscribeCandlesParams): () => void;\n subscribeToOrderBook(params: SubscribeOrderBookParams): () => void;\n\n // Live data configuration\n setLiveDataConfig(config: Partial<LiveDataConfig>): void;\n\n // Connection management\n toggleTestnet(): Promise<ToggleTestnetResult>;\n initialize(): Promise<InitializeResult>;\n isReadyToTrade(): Promise<ReadyToTradeResult>;\n disconnect(): Promise<DisconnectResult>;\n ping(timeoutMs?: number): Promise<void>; // Lightweight WebSocket health check with configurable timeout\n getWebSocketConnectionState?(): WebSocketConnectionState; // Optional: get current WebSocket connection state\n subscribeToConnectionState?(\n listener: (\n state: WebSocketConnectionState,\n reconnectionAttempt: number,\n ) => void,\n ): () => void; // Optional: subscribe to WebSocket connection state changes\n reconnect?(): Promise<void>; // Optional: manually trigger WebSocket reconnection\n\n // Block explorer\n getBlockExplorerUrl(address?: string): string;\n\n // Fee discount context (optional - for MetaMask reward discounts)\n setUserFeeDiscount?(discountBips: number | undefined): void;\n\n // HIP-3 (Builder-deployed DEXs) operations - optional for backward compatibility\n /**\n * Get list of available HIP-3 builder-deployed DEXs.\n *\n * @param params - Optional parameters (reserved for future filters/pagination)\n * @returns Array of DEX names (empty string '' represents main DEX)\n */\n getAvailableDexs?(params?: GetAvailableDexsParams): Promise<string[]>;\n};\n\n// ============================================================================\n// Multi-Provider Aggregation Types (Phase 1)\n// ============================================================================\n\n/**\n * Provider identifier type for multi-provider support.\n * Add new providers here as they are implemented.\n */\nexport type PerpsProviderType = 'hyperliquid' | 'myx';\n\n/**\n * Active provider mode for PerpsController state.\n * - Direct providers: 'hyperliquid', 'myx'\n * - 'aggregated': Multi-provider aggregation mode\n */\nexport type PerpsActiveProviderMode = PerpsProviderType | 'aggregated';\n\n/**\n * Aggregation mode for read operations.\n * - 'all': Aggregate data from all registered providers\n * - 'active': Only aggregate from providers with active connections\n * - 'specific': Aggregate from a specific subset of providers\n */\nexport type AggregationMode = 'all' | 'active' | 'specific';\n\n/**\n * Routing strategy for write operations.\n * Phase 1 only supports 'default_provider' - advanced strategies deferred to Phase 3.\n */\nexport type RoutingStrategy = 'default_provider';\n\n/**\n * Configuration for AggregatedPerpsProvider\n */\nexport type AggregatedProviderConfig = {\n /** Map of provider ID to provider instance */\n providers: Map<PerpsProviderType, PerpsProvider>;\n /** Default provider for write operations when providerId not specified */\n defaultProvider: PerpsProviderType;\n /** Aggregation mode for read operations (default: 'all') */\n aggregationMode?: AggregationMode;\n /** Platform dependencies for logging, metrics, etc. */\n infrastructure: PerpsPlatformDependencies;\n};\n\n/**\n * Provider-specific error with context for multi-provider error handling\n */\nexport type ProviderError = {\n /** Which provider the error originated from */\n providerId: PerpsProviderType;\n /** Human-readable error message */\n message: string;\n /** Original error object if available */\n originalError?: Error;\n /** Whether the operation can be retried */\n isRetryable?: boolean;\n};\n\n/**\n * Aggregated account state combining data from multiple providers\n */\nexport type AggregatedAccountState = {\n /** Combined totals across all providers */\n total: AccountState;\n /** Per-provider breakdown */\n byProvider: Map<PerpsProviderType, AccountState>;\n};\n\n// ============================================================================\n// Injectable Dependency Interfaces\n// These interfaces enable dependency injection for platform-specific services,\n// allowing PerpsController to be moved to core without mobile-specific imports.\n// ============================================================================\n\n/**\n * Injectable logger interface for error reporting.\n * Allows core package to be platform-agnostic (mobile: Sentry, extension: different impl)\n */\nexport type PerpsLogger = {\n error(\n error: Error,\n options?: {\n tags?: Record<string, string | number>;\n context?: { name: string; data: Record<string, unknown> };\n extras?: Record<string, unknown>;\n },\n ): void;\n};\n\n/**\n * Analytics events specific to Perps feature.\n * These are the actual event names sent to analytics backend.\n * Values must match the corresponding MetaMetricsEvents values in mobile for compatibility.\n *\n * When migrating to core monorepo, this enum travels with PerpsController.\n */\nexport enum PerpsAnalyticsEvent {\n WithdrawalTransaction = 'Perp Withdrawal Transaction',\n TradeTransaction = 'Perp Trade Transaction',\n PositionCloseTransaction = 'Perp Position Close Transaction',\n OrderCancelTransaction = 'Perp Order Cancel Transaction',\n ScreenViewed = 'Perp Screen Viewed',\n UiInteraction = 'Perp UI Interaction',\n RiskManagement = 'Perp Risk Management',\n PerpsError = 'Perp Error',\n}\n\n/**\n * Perps-specific trace names. These must match TraceName enum values in mobile.\n * When in core monorepo, this defines the valid trace names for Perps operations.\n */\nexport type PerpsTraceName =\n | 'Perps Open Position'\n | 'Perps Close Position'\n | 'Perps Deposit'\n | 'Perps Withdraw'\n | 'Perps Place Order'\n | 'Perps Edit Order'\n | 'Perps Cancel Order'\n | 'Perps Update TP/SL'\n | 'Perps Update Margin'\n | 'Perps Flip Position'\n | 'Perps Order Submission Toast'\n | 'Perps Market Data Update'\n | 'Perps Order View'\n | 'Perps Tab View'\n | 'Perps Market List View'\n | 'Perps Position Details View'\n | 'Perps Adjust Margin View'\n | 'Perps Order Details View'\n | 'Perps Order Book View'\n | 'Perps Flip Position Sheet'\n | 'Perps Transactions View'\n | 'Perps Order Fills Fetch'\n | 'Perps Orders Fetch'\n | 'Perps Funding Fetch'\n | 'Perps Get Positions'\n | 'Perps Get Account State'\n | 'Perps Get Historical Portfolio'\n | 'Perps Get Markets'\n | 'Perps Fetch Historical Candles'\n | 'Perps WebSocket Connected'\n | 'Perps WebSocket Disconnected'\n | 'Perps WebSocket First Positions'\n | 'Perps WebSocket First Orders'\n | 'Perps WebSocket First Account'\n | 'Perps Data Lake Report'\n | 'Perps Rewards API Call'\n | 'Perps Close Position View'\n | 'Perps Withdraw View'\n | 'Perps Connection Establishment'\n | 'Perps Account Switch Reconnection';\n\n/**\n * Perps trace name constants. Values match TraceName enum in mobile.\n * When in core, these ARE the source of truth - mobile will re-export from core.\n */\nexport const PerpsTraceNames = {\n // Trading operations\n PlaceOrder: 'Perps Place Order',\n EditOrder: 'Perps Edit Order',\n CancelOrder: 'Perps Cancel Order',\n ClosePosition: 'Perps Close Position',\n UpdateTpsl: 'Perps Update TP/SL',\n UpdateMargin: 'Perps Update Margin',\n FlipPosition: 'Perps Flip Position',\n\n // Account operations\n Withdraw: 'Perps Withdraw',\n Deposit: 'Perps Deposit',\n\n // Market data\n GetPositions: 'Perps Get Positions',\n GetAccountState: 'Perps Get Account State',\n GetMarkets: 'Perps Get Markets',\n OrderFillsFetch: 'Perps Order Fills Fetch',\n OrdersFetch: 'Perps Orders Fetch',\n FundingFetch: 'Perps Funding Fetch',\n GetHistoricalPortfolio: 'Perps Get Historical Portfolio',\n FetchHistoricalCandles: 'Perps Fetch Historical Candles',\n\n // Data lake\n DataLakeReport: 'Perps Data Lake Report',\n\n // WebSocket\n WebsocketConnected: 'Perps WebSocket Connected',\n WebsocketDisconnected: 'Perps WebSocket Disconnected',\n WebsocketFirstPositions: 'Perps WebSocket First Positions',\n WebsocketFirstOrders: 'Perps WebSocket First Orders',\n WebsocketFirstAccount: 'Perps WebSocket First Account',\n\n // Other\n RewardsApiCall: 'Perps Rewards API Call',\n ConnectionEstablishment: 'Perps Connection Establishment',\n AccountSwitchReconnection: 'Perps Account Switch Reconnection',\n} as const satisfies Record<string, PerpsTraceName>;\n\n/**\n * Perps trace operation constants. Values match TraceOperation enum in mobile.\n * These categorize traces by type of operation for Sentry/observability filtering.\n */\nexport const PerpsTraceOperations = {\n Operation: 'perps.operation',\n OrderSubmission: 'perps.order_submission',\n PositionManagement: 'perps.position_management',\n MarketData: 'perps.market_data',\n} as const;\n\n/**\n * Values allowed in trace data/tags. Matches Sentry's TraceValue type.\n */\nexport type PerpsTraceValue = string | number | boolean;\n\n/**\n * Properties allowed in analytics events. More constrained than unknown.\n * Named PerpsAnalyticsProperties to avoid conflict with PerpsEventProperties\n * constant object from eventNames.ts (which contains property key names).\n */\nexport type PerpsAnalyticsProperties = Record<\n string,\n string | number | boolean | null | undefined\n>;\n\n/**\n * Injectable metrics interface for analytics.\n * Allows core package to work with different analytics backends.\n */\nexport type PerpsMetrics = {\n isEnabled(): boolean;\n\n /**\n * Track a Perps-specific analytics event with properties.\n * This abstracts away the MetricsEventBuilder pattern used in mobile.\n *\n * @param event - The Perps analytics event type (enum with actual event name values)\n * @param properties - Type-safe key-value properties to attach to the event\n */\n trackPerpsEvent(\n event: PerpsAnalyticsEvent,\n properties: PerpsAnalyticsProperties,\n ): void;\n};\n\n/**\n * Injectable debug logger for development logging.\n * Only logs in development mode.\n * Accepts `unknown` to allow logging error objects from catch blocks.\n */\nexport type PerpsDebugLogger = {\n log(...args: unknown[]): void;\n};\n\n/**\n * Injectable stream manager interface for pause/resume during critical operations.\n *\n * WHY THIS IS NEEDED:\n * PerpsStreamManager is a React-based mobile-specific singleton that:\n * - Uses React Context for subscription management\n * - Uses react-native-performance for tracing\n * - Directly accesses Engine.context (mobile singleton pattern)\n * - Manages WebSocket connections with throttling/caching\n *\n * PerpsController only needs pause/resume during critical operations (withStreamPause method)\n * to prevent stale UI updates during batch operations. The minimal interface allows:\n * - Mobile: Wrap existing singleton (streamManager[channel].pause())\n * - Extension: Implement with whatever streaming solution they use\n */\nexport type PerpsStreamManager = {\n pauseChannel(channel: string): void;\n resumeChannel(channel: string): void;\n clearAllChannels(): void;\n};\n\n/**\n * Injectable performance monitor interface.\n * Wraps react-native-performance or browser Performance API.\n */\nexport type PerpsPerformance = {\n now(): number;\n};\n\n/**\n * Injectable tracer interface for Sentry/observability tracing.\n * Services use this to create spans and measure operation durations.\n *\n * Note: trace() returns void because services use name/id pairs to identify traces.\n * The actual span management is handled internally by the platform adapter.\n */\nexport type PerpsTracer = {\n trace(params: {\n name: PerpsTraceName;\n id: string;\n op: string;\n tags?: Record<string, PerpsTraceValue>;\n data?: Record<string, PerpsTraceValue>;\n }): void;\n\n endTrace(params: {\n name: PerpsTraceName;\n id: string;\n data?: Record<string, PerpsTraceValue>;\n }): void;\n\n setMeasurement(name: string, value: number, unit: string): void;\n};\n\n/**\n * Injectable keyring controller interface for signing operations.\n * Allows services to sign typed messages without directly accessing Engine.\n */\nexport type PerpsKeyringController = {\n signTypedMessage(\n msgParams: { from: string; data: unknown },\n version: string,\n ): Promise<string>;\n};\n\n/**\n * Injectable account utilities interface.\n * Provides access to selected account without coupling to Engine singleton.\n */\nexport type PerpsAccountUtils = {\n getSelectedEvmAccount(): { address: string } | undefined;\n formatAccountToCaipId(address: string, chainId: string): string | null;\n};\n\n// ============================================================================\n// Controller Access Interfaces\n// These granular interfaces define the specific operations needed from each\n// controller, enabling cleaner dependency injection and easier testing.\n// ============================================================================\n\n/**\n * Network controller operations required by Perps.\n * Provides chain ID lookups and network client identification.\n */\nexport type PerpsNetworkOperations = {\n /**\n * Get the chain ID for a given network client.\n */\n getChainIdForNetwork(networkClientId: string): Hex;\n\n /**\n * Find the network client ID for a given chain.\n */\n findNetworkClientIdForChain(chainId: Hex): string | undefined;\n\n /**\n * Get the currently selected network client ID.\n */\n getSelectedNetworkClientId(): string;\n};\n\n/**\n * Transaction controller operations required by Perps.\n * Provides transaction submission capabilities.\n */\nexport type PerpsTransactionOperations = {\n /**\n * Submit a transaction to the blockchain.\n * Returns the result promise and transaction metadata.\n */\n submit(\n txParams: {\n from: string;\n to?: string;\n value?: string;\n data?: string;\n },\n options: {\n networkClientId: string;\n origin?: string;\n type?: string; // Will be bridged to TransactionType in adapter\n skipInitialGasEstimate?: boolean;\n gasFeeToken?: Hex;\n },\n ): Promise<{\n result: Promise<string>; // Resolves to txHash\n transactionMeta: { id: string; hash?: string };\n }>;\n};\n\n/**\n * Rewards controller operations required by Perps (optional).\n * Provides fee discount capabilities for MetaMask rewards program.\n */\nexport type PerpsRewardsOperations = {\n /**\n * Get fee discount for an account.\n * Returns discount in basis points (e.g., 6500 = 65% discount)\n */\n getFeeDiscount(\n caipAccountId: `${string}:${string}:${string}`,\n ): Promise<number>;\n};\n\n/**\n * Authentication controller operations required by Perps (optional).\n * Provides bearer token access for authenticated API calls.\n */\nexport type PerpsAuthenticationOperations = {\n /**\n * Get a bearer token for authenticated API requests.\n */\n getBearerToken(): Promise<string>;\n};\n\n/**\n * Consolidated controller access interface.\n * Groups ALL controller dependencies in one place for clarity.\n *\n * Benefits:\n * 1. Clear separation: observability utilities vs controller access\n * 2. Consistent pattern: all controllers accessed via deps.controllers.*\n * 3. Mockable: test can mock entire controllers object\n * 4. Future-proof: add new controller access without bloating top-level\n */\nexport type PerpsControllerAccess = {\n /** Account utilities - wraps AccountsController access */\n accounts: PerpsAccountUtils;\n /** Keyring operations - wraps KeyringController for signing */\n keyring: PerpsKeyringController;\n /** Network operations - wraps NetworkController for chain lookups */\n network: PerpsNetworkOperations;\n /** Transaction operations - wraps TransactionController for TX submission */\n transaction: PerpsTransactionOperations;\n /** Rewards operations - wraps RewardsController for fee discounts */\n rewards: PerpsRewardsOperations;\n /** Authentication operations - wraps AuthenticationController for bearer tokens */\n authentication: PerpsAuthenticationOperations;\n};\n\n/**\n * Combined platform dependencies for PerpsController and services.\n * All platform-specific dependencies are bundled here for easy injection.\n *\n * Architecture:\n * - Observability: logger, debugLogger, metrics, performance, tracer (stateless utilities)\n * - Platform: streamManager (mobile/extension specific capabilities)\n * - Controllers: consolidated access to all external controllers\n *\n * This interface enables dependency injection for platform-specific services,\n * allowing PerpsController to be moved to core without mobile-specific imports.\n */\nexport type PerpsPlatformDependencies = {\n // === Observability (stateless utilities) ===\n logger: PerpsLogger;\n debugLogger: PerpsDebugLogger;\n metrics: PerpsMetrics;\n performance: PerpsPerformance;\n tracer: PerpsTracer;\n\n // === Platform Services (mobile/extension specific) ===\n streamManager: PerpsStreamManager;\n\n // === Controller Access (ALL controllers consolidated) ===\n controllers: PerpsControllerAccess;\n};\n"]}
|