@metamask-previews/perps-controller 3.2.0-preview-6ce5d58fa → 4.0.0-preview-1e2fe74a0
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 +29 -1
- package/dist/PerpsController-method-action-types.cjs.map +1 -1
- package/dist/PerpsController-method-action-types.d.cts +9 -0
- package/dist/PerpsController-method-action-types.d.cts.map +1 -1
- package/dist/PerpsController-method-action-types.d.mts +9 -0
- package/dist/PerpsController-method-action-types.d.mts.map +1 -1
- package/dist/PerpsController-method-action-types.mjs.map +1 -1
- package/dist/PerpsController.cjs +15 -3
- package/dist/PerpsController.cjs.map +1 -1
- package/dist/PerpsController.d.cts +18 -3
- package/dist/PerpsController.d.cts.map +1 -1
- package/dist/PerpsController.d.mts +18 -3
- package/dist/PerpsController.d.mts.map +1 -1
- package/dist/PerpsController.mjs +15 -3
- package/dist/PerpsController.mjs.map +1 -1
- package/dist/constants/perpsConfig.cjs +28 -0
- package/dist/constants/perpsConfig.cjs.map +1 -1
- package/dist/constants/perpsConfig.d.cts +3 -0
- package/dist/constants/perpsConfig.d.cts.map +1 -1
- package/dist/constants/perpsConfig.d.mts +3 -0
- package/dist/constants/perpsConfig.d.mts.map +1 -1
- package/dist/constants/perpsConfig.mjs +28 -0
- package/dist/constants/perpsConfig.mjs.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.cjs +16 -6
- package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.d.cts +12 -4
- package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.d.mts +12 -4
- package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.mjs +16 -6
- package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.cjs +56 -20
- package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.cts +29 -4
- package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.mts +29 -4
- package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
- package/dist/providers/HyperLiquidProvider.mjs +57 -21
- package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
- package/dist/services/HyperLiquidClientService.cjs +131 -60
- package/dist/services/HyperLiquidClientService.cjs.map +1 -1
- package/dist/services/HyperLiquidClientService.d.cts +23 -0
- package/dist/services/HyperLiquidClientService.d.cts.map +1 -1
- package/dist/services/HyperLiquidClientService.d.mts +23 -0
- package/dist/services/HyperLiquidClientService.d.mts.map +1 -1
- package/dist/services/HyperLiquidClientService.mjs +132 -61
- package/dist/services/HyperLiquidClientService.mjs.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.cjs +193 -11
- package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.mjs +194 -12
- package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -1
- package/dist/services/MarketDataService.cjs +89 -6
- package/dist/services/MarketDataService.cjs.map +1 -1
- package/dist/services/MarketDataService.d.cts +19 -0
- package/dist/services/MarketDataService.d.cts.map +1 -1
- package/dist/services/MarketDataService.d.mts +19 -0
- package/dist/services/MarketDataService.d.mts.map +1 -1
- package/dist/services/MarketDataService.mjs +89 -6
- package/dist/services/MarketDataService.mjs.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +21 -3
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.mts +21 -3
- package/dist/types/index.d.mts.map +1 -1
- package/dist/types/index.mjs.map +1 -1
- package/dist/utils/accountUtils.cjs +74 -1
- package/dist/utils/accountUtils.cjs.map +1 -1
- package/dist/utils/accountUtils.d.cts +4 -0
- package/dist/utils/accountUtils.d.cts.map +1 -1
- package/dist/utils/accountUtils.d.mts +4 -0
- package/dist/utils/accountUtils.d.mts.map +1 -1
- package/dist/utils/accountUtils.mjs +70 -0
- package/dist/utils/accountUtils.mjs.map +1 -1
- package/dist/utils/coalescePerpsRestRequest.cjs +71 -0
- package/dist/utils/coalescePerpsRestRequest.cjs.map +1 -0
- package/dist/utils/coalescePerpsRestRequest.d.cts +32 -0
- package/dist/utils/coalescePerpsRestRequest.d.cts.map +1 -0
- package/dist/utils/coalescePerpsRestRequest.d.mts +32 -0
- package/dist/utils/coalescePerpsRestRequest.d.mts.map +1 -0
- package/dist/utils/coalescePerpsRestRequest.mjs +66 -0
- package/dist/utils/coalescePerpsRestRequest.mjs.map +1 -0
- package/dist/utils/hyperLiquidAdapter.cjs +7 -7
- package/dist/utils/hyperLiquidAdapter.cjs.map +1 -1
- package/dist/utils/hyperLiquidAdapter.d.cts +2 -2
- package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -1
- package/dist/utils/hyperLiquidAdapter.d.mts +2 -2
- package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -1
- package/dist/utils/hyperLiquidAdapter.mjs +7 -7
- package/dist/utils/hyperLiquidAdapter.mjs.map +1 -1
- package/dist/utils/perpsFormatters.cjs +5 -1
- package/dist/utils/perpsFormatters.cjs.map +1 -1
- package/dist/utils/perpsFormatters.d.cts.map +1 -1
- package/dist/utils/perpsFormatters.d.mts.map +1 -1
- package/dist/utils/perpsFormatters.mjs +5 -1
- package/dist/utils/perpsFormatters.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregatedPerpsProvider.mjs","sourceRoot":"","sources":["../../src/providers/AggregatedPerpsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AggregatedPerpsProvider - Multi-provider aggregation wrapper\n *\n * Implements PerpsProvider interface to enable seamless multi-provider support.\n * Aggregates read operations from all providers, routes write operations to specific\n * providers based on params.providerId or default provider.\n *\n * Phase 1 Implementation:\n * - Read operations: Aggregate from all providers using Promise.allSettled()\n * - Write operations: Route to params.providerId ?? defaultProvider\n * - Subscriptions: Multiplex via SubscriptionMultiplexer\n * - Lifecycle: Delegate to default provider\n *\n * All returned data includes providerId field for UI differentiation.\n */\n\nimport type { CaipAccountId } from '@metamask/utils';\n\nimport { SubscriptionMultiplexer } from '../aggregation/SubscriptionMultiplexer';\nimport { ProviderRouter } from '../routing/ProviderRouter';\nimport { WebSocketConnectionState } from '../types';\nimport type {\n AccountState,\n AggregatedProviderConfig,\n AggregationMode,\n AssetRoute,\n BatchCancelOrdersParams,\n CancelOrderParams,\n CancelOrderResult,\n CancelOrdersResult,\n ClosePositionParams,\n ClosePositionsParams,\n ClosePositionsResult,\n DepositParams,\n DisconnectResult,\n EditOrderParams,\n FeeCalculationParams,\n FeeCalculationResult,\n Funding,\n GetAccountStateParams,\n GetAvailableDexsParams,\n GetFundingParams,\n GetHistoricalPortfolioParams,\n GetMarketsParams,\n GetOrderFillsParams,\n GetOrdersParams,\n GetOrFetchFillsParams,\n GetPositionsParams,\n GetSupportedPathsParams,\n HistoricalPortfolioResult,\n InitializeResult,\n PerpsPlatformDependencies,\n PerpsProvider,\n LiquidationPriceParams,\n LiveDataConfig,\n MaintenanceMarginParams,\n MarginResult,\n MarketInfo,\n Order,\n OrderFill,\n OrderParams,\n OrderResult,\n PerpsMarketData,\n PerpsProviderType,\n Position,\n ReadyToTradeResult,\n SubscribeAccountParams,\n SubscribeCandlesParams,\n SubscribeOICapsParams,\n SubscribeOrderBookParams,\n SubscribeOrderFillsParams,\n SubscribeOrdersParams,\n SubscribePositionsParams,\n SubscribePricesParams,\n ToggleTestnetResult,\n UpdateMarginParams,\n UpdatePositionTPSLParams,\n UserHistoryItem,\n WithdrawParams,\n WithdrawResult,\n RawLedgerUpdate,\n} from '../types';\n\n/**\n * AggregatedPerpsProvider implements PerpsProvider by coordinating\n * multiple backend providers.\n *\n * Design principles:\n * 1. Read operations aggregate from all providers (parallel)\n * 2. Write operations route to specific provider (explicit > default)\n * 3. Lifecycle operations delegate to default provider\n * 4. All returned data includes providerId for UI differentiation\n *\n * @example\n * ```typescript\n * const aggregated = new AggregatedPerpsProvider({\n * providers: new Map([\n * ['hyperliquid', hlProvider],\n * ['myx', myxProvider],\n * ]),\n * defaultProvider: 'hyperliquid',\n * infrastructure: deps,\n * });\n *\n * // Read: returns positions from all providers\n * const positions = await aggregated.getPositions();\n *\n * // Write: routes to specific or default provider\n * await aggregated.placeOrder({ symbol: 'BTC', providerId: 'myx', ... });\n * ```\n */\nexport class AggregatedPerpsProvider implements PerpsProvider {\n readonly protocolId = 'aggregated';\n\n readonly #providers: Map<PerpsProviderType, PerpsProvider>;\n\n readonly #defaultProvider: PerpsProviderType;\n\n readonly #aggregationMode: AggregationMode;\n\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #router: ProviderRouter;\n\n readonly #subscriptionMux: SubscriptionMultiplexer;\n\n constructor(config: AggregatedProviderConfig) {\n this.#providers = config.providers;\n this.#defaultProvider = config.defaultProvider;\n this.#aggregationMode = config.aggregationMode ?? 'all';\n this.#deps = config.infrastructure;\n\n // Initialize router with default provider\n this.#router = new ProviderRouter({\n defaultProvider: this.#defaultProvider,\n });\n\n // Initialize subscription multiplexer with logger for error reporting\n this.#subscriptionMux = new SubscriptionMultiplexer({\n logger: this.#deps.logger,\n });\n\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Initialized', {\n providers: Array.from(this.#providers.keys()),\n defaultProvider: this.#defaultProvider,\n aggregationMode: this.#aggregationMode,\n });\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Get list of active providers as tuples for iteration.\n * Returns array of [providerId, provider] pairs.\n *\n * @returns The result of the operation.\n */\n #getActiveProviders(): [PerpsProviderType, PerpsProvider][] {\n return Array.from(this.#providers.entries());\n }\n\n /**\n * Get the default provider instance.\n * Throws if default provider is not available.\n *\n * @returns The result of the operation.\n */\n #getDefaultProvider(): PerpsProvider {\n const provider = this.#providers.get(this.#defaultProvider);\n if (!provider) {\n throw new Error(\n `[AggregatedPerpsProvider] Default provider '${this.#defaultProvider}' not available`,\n );\n }\n return provider;\n }\n\n /**\n * Get provider by ID, falling back to default if not found.\n *\n * @param providerId - The provider id value.\n * @returns The result of the operation.\n */\n #getProviderOrDefault(\n providerId?: PerpsProviderType,\n ): [PerpsProviderType, PerpsProvider] {\n const id = providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(id);\n if (!provider) {\n this.#deps.debugLogger.log(\n `[AggregatedPerpsProvider] Provider '${id}' not found, using default`,\n );\n return [this.#defaultProvider, this.#getDefaultProvider()];\n }\n return [id, provider];\n }\n\n /**\n * Extract successful results from Promise.allSettled.\n * Logs errors for failed promises.\n *\n * @param results - Results from Promise.allSettled\n * @param context - Context string for logging\n * @returns Array of successful values\n */\n #extractSuccessfulResults<TResult>(\n results: PromiseSettledResult<TResult>[],\n context: string,\n ): TResult[] {\n const successful: TResult[] = [];\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n successful.push(result.value);\n } else {\n this.#deps.debugLogger.log(\n `[AggregatedPerpsProvider] ${context} failed for provider ${index}`,\n { error: result.reason },\n );\n }\n });\n return successful;\n }\n\n // ============================================================================\n // Asset Routes (Synchronous - delegate to default provider)\n // ============================================================================\n\n getDepositRoutes(params?: GetSupportedPathsParams): AssetRoute[] {\n return this.#getDefaultProvider().getDepositRoutes(params);\n }\n\n getWithdrawalRoutes(params?: GetSupportedPathsParams): AssetRoute[] {\n return this.#getDefaultProvider().getWithdrawalRoutes(params);\n }\n\n // ============================================================================\n // Read Operations (Aggregate from all providers)\n // ============================================================================\n\n async getPositions(params?: GetPositionsParams): Promise<Position[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const positions = await provider.getPositions(params);\n return positions.map((pos) => ({ ...pos, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getPositions').flat();\n }\n\n async getAccountState(params?: GetAccountStateParams): Promise<AccountState> {\n // Return account state from default provider with providerId injected\n const provider = this.#getDefaultProvider();\n const state = await provider.getAccountState(params);\n return { ...state, providerId: this.#defaultProvider };\n }\n\n async getMarkets(params?: GetMarketsParams): Promise<MarketInfo[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const markets = await provider.getMarkets(params);\n return markets.map((market) => ({ ...market, providerId: id }));\n }),\n );\n\n const allMarkets = this.#extractSuccessfulResults(\n results,\n 'getMarkets',\n ).flat();\n\n // Deduplicate markets by name (keep first occurrence)\n const seen = new Set<string>();\n return allMarkets.filter((market) => {\n // Use providerId:name as unique key to allow same market from different providers\n const key = `${market.providerId}:${market.name}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n\n async getMarketDataWithPrices(): Promise<PerpsMarketData[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const data = await provider.getMarketDataWithPrices();\n return data.map((item) => ({ ...item, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(\n results,\n 'getMarketDataWithPrices',\n ).flat();\n }\n\n async getOrderFills(params?: GetOrderFillsParams): Promise<OrderFill[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const fills = await provider.getOrderFills(params);\n return fills.map((fill) => ({ ...fill, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrderFills').flat();\n }\n\n async getOrFetchFills(params?: GetOrFetchFillsParams): Promise<OrderFill[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const fills = await provider.getOrFetchFills(params);\n return fills.map((fill) => ({ ...fill, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrFetchFills').flat();\n }\n\n async getOrders(params?: GetOrdersParams): Promise<Order[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const orders = await provider.getOrders(params);\n return orders.map((order) => ({ ...order, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrders').flat();\n }\n\n async getOpenOrders(params?: GetOrdersParams): Promise<Order[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const orders = await provider.getOpenOrders(params);\n return orders.map((order) => ({ ...order, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOpenOrders').flat();\n }\n\n async getFunding(params?: GetFundingParams): Promise<Funding[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([_providerId, provider]) => {\n const funding = await provider.getFunding(params);\n // Funding type doesn't have providerId - we could add it if needed\n return funding;\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getFunding').flat();\n }\n\n async getHistoricalPortfolio(\n params?: GetHistoricalPortfolioParams,\n ): Promise<HistoricalPortfolioResult> {\n // Delegate to default provider\n return this.#getDefaultProvider().getHistoricalPortfolio(params);\n }\n\n /**\n * Get user non-funding ledger updates from default provider.\n *\n * @param params - Optional parameters\n * @param params.accountId - Account ID to filter by\n * @param params.startTime - Start time filter\n * @param params.endTime - End time filter\n * @returns Raw ledger updates\n */\n async getUserNonFundingLedgerUpdates(params?: {\n accountId?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<RawLedgerUpdate[]> {\n // Delegate to default provider (protocol-specific)\n return this.#getDefaultProvider().getUserNonFundingLedgerUpdates(params);\n }\n\n /**\n * Get user history from all providers.\n *\n * @param params - Optional parameters\n * @param params.accountId - Account ID to filter by\n * @param params.startTime - Start time filter\n * @param params.endTime - End time filter\n * @returns Aggregated user history with providerId\n */\n async getUserHistory(params?: {\n accountId?: CaipAccountId;\n startTime?: number;\n endTime?: number;\n }): Promise<UserHistoryItem[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const history = await provider.getUserHistory(params);\n return history.map((item) => ({ ...item, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getUserHistory').flat();\n }\n\n // ============================================================================\n // Write Operations (Route to specific provider)\n // ============================================================================\n\n async placeOrder(params: OrderParams): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] placeOrder routing', {\n requestedProvider: params.providerId,\n actualProvider: providerId,\n symbol: params.symbol,\n });\n\n const result = await provider.placeOrder(params);\n return { ...result, providerId };\n }\n\n async editOrder(params: EditOrderParams): Promise<OrderResult> {\n // EditOrderParams contains OrderParams in newOrder which may have providerId\n const [providerId, provider] = this.#getProviderOrDefault(\n params.newOrder.providerId,\n );\n const result = await provider.editOrder(params);\n return { ...result, providerId };\n }\n\n async cancelOrder(params: CancelOrderParams): Promise<CancelOrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.cancelOrder(params);\n return { ...result, providerId };\n }\n\n async cancelOrders(\n params: BatchCancelOrdersParams,\n ): Promise<CancelOrdersResult> {\n // Batch cancel delegates to default provider\n const provider = this.#getDefaultProvider();\n if (!provider.cancelOrders) {\n return {\n success: false,\n successCount: 0,\n failureCount: params.length,\n results: params.map((param) => ({\n orderId: param.orderId,\n symbol: param.symbol,\n success: false,\n error: 'Batch cancel not supported',\n })),\n };\n }\n return provider.cancelOrders(params);\n }\n\n async closePosition(params: ClosePositionParams): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.closePosition(params);\n return { ...result, providerId };\n }\n\n async closePositions(\n params: ClosePositionsParams,\n ): Promise<ClosePositionsResult> {\n // Batch close delegates to default provider\n const provider = this.#getDefaultProvider();\n if (!provider.closePositions) {\n return {\n success: false,\n successCount: 0,\n failureCount: 0,\n results: [],\n };\n }\n return provider.closePositions(params);\n }\n\n async updatePositionTPSL(\n params: UpdatePositionTPSLParams,\n ): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.updatePositionTPSL(params);\n return { ...result, providerId };\n }\n\n async updateMargin(params: UpdateMarginParams): Promise<MarginResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.updateMargin(params);\n }\n\n async withdraw(params: WithdrawParams): Promise<WithdrawResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.withdraw(params);\n }\n\n // ============================================================================\n // Validation (Route to specific provider)\n // ============================================================================\n\n async validateDeposit(\n params: DepositParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n return this.#getDefaultProvider().validateDeposit(params);\n }\n\n async validateOrder(\n params: OrderParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateOrder(params);\n }\n\n async validateClosePosition(\n params: ClosePositionParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateClosePosition(params);\n }\n\n async validateWithdrawal(\n params: WithdrawParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateWithdrawal(params);\n }\n\n // ============================================================================\n // Protocol Calculations (Delegate to default or route)\n // ============================================================================\n\n async calculateLiquidationPrice(\n params: LiquidationPriceParams,\n ): Promise<string> {\n return this.#getDefaultProvider().calculateLiquidationPrice(params);\n }\n\n async calculateMaintenanceMargin(\n params: MaintenanceMarginParams,\n ): Promise<number> {\n return this.#getDefaultProvider().calculateMaintenanceMargin(params);\n }\n\n async getMaxLeverage(asset: string): Promise<number> {\n return this.#getDefaultProvider().getMaxLeverage(asset);\n }\n\n async calculateFees(\n params: FeeCalculationParams,\n ): Promise<FeeCalculationResult> {\n return this.#getDefaultProvider().calculateFees(params);\n }\n\n // ============================================================================\n // Subscriptions (Multiplex via SubscriptionMultiplexer)\n // ============================================================================\n\n subscribeToPrices(params: SubscribePricesParams): () => void {\n return this.#subscriptionMux.subscribeToPrices({\n ...params,\n providers: this.#getActiveProviders(),\n aggregationMode: 'merge',\n });\n }\n\n subscribeToPositions(params: SubscribePositionsParams): () => void {\n return this.#subscriptionMux.subscribeToPositions({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToOrderFills(params: SubscribeOrderFillsParams): () => void {\n return this.#subscriptionMux.subscribeToOrderFills({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToOrders(params: SubscribeOrdersParams): () => void {\n return this.#subscriptionMux.subscribeToOrders({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToAccount(params: SubscribeAccountParams): () => void {\n // For account subscriptions, we emit as array for multi-provider\n // but the callback expects single AccountState\n // Delegate to default provider for now\n return this.#getDefaultProvider().subscribeToAccount(params);\n }\n\n subscribeToOICaps(params: SubscribeOICapsParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToOICaps(params);\n }\n\n subscribeToCandles(params: SubscribeCandlesParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToCandles(params);\n }\n\n subscribeToOrderBook(params: SubscribeOrderBookParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToOrderBook(params);\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n setLiveDataConfig(config: Partial<LiveDataConfig>): void {\n // Apply config to all providers\n this.#providers.forEach((provider) => {\n provider.setLiveDataConfig(config);\n });\n }\n\n setUserFeeDiscount(discountBips: number | undefined): void {\n // Apply to all providers that support it\n this.#providers.forEach((provider) => {\n if (provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(discountBips);\n }\n });\n }\n\n // ============================================================================\n // Lifecycle (Delegate to default provider)\n // ============================================================================\n\n async toggleTestnet(): Promise<ToggleTestnetResult> {\n return this.#getDefaultProvider().toggleTestnet();\n }\n\n async initialize(): Promise<InitializeResult> {\n // Initialize default provider\n const result = await this.#getDefaultProvider().initialize();\n\n // Optionally initialize other providers in background\n // For Phase 1, we only initialize default provider\n return result;\n }\n\n async isReadyToTrade(): Promise<ReadyToTradeResult> {\n return this.#getDefaultProvider().isReadyToTrade();\n }\n\n async disconnect(): Promise<DisconnectResult> {\n // Disconnect all providers\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(([, provider]) => provider.disconnect()),\n );\n\n // Clear subscription cache\n this.#subscriptionMux.clearCache();\n\n // Return success if at least one succeeded\n const successCount = results.filter(\n (res) => res.status === 'fulfilled' && res.value.success,\n ).length;\n\n return {\n success: successCount > 0,\n };\n }\n\n async ping(timeoutMs?: number): Promise<void> {\n return this.#getDefaultProvider().ping(timeoutMs);\n }\n\n getWebSocketConnectionState(): WebSocketConnectionState {\n const provider = this.#getDefaultProvider();\n if (provider.getWebSocketConnectionState) {\n return provider.getWebSocketConnectionState();\n }\n return WebSocketConnectionState.Disconnected;\n }\n\n subscribeToConnectionState(\n listener: (\n state: WebSocketConnectionState,\n reconnectionAttempt: number,\n ) => void,\n ): () => void {\n const provider = this.#getDefaultProvider();\n if (provider.subscribeToConnectionState) {\n return provider.subscribeToConnectionState(listener);\n }\n listener(WebSocketConnectionState.Disconnected, 0);\n return () => {\n /* noop */\n };\n }\n\n async reconnect(): Promise<void> {\n const provider = this.#getDefaultProvider();\n if (provider.reconnect) {\n await provider.reconnect();\n }\n }\n\n // ============================================================================\n // Block Explorer\n // ============================================================================\n\n getBlockExplorerUrl(address?: string): string {\n return this.#getDefaultProvider().getBlockExplorerUrl(address);\n }\n\n // ============================================================================\n // HIP-3 (Optional)\n // ============================================================================\n\n async getAvailableDexs(params?: GetAvailableDexsParams): Promise<string[]> {\n const provider = this.#getDefaultProvider();\n if (!provider.getAvailableDexs) {\n return [];\n }\n return provider.getAvailableDexs(params);\n }\n\n // ============================================================================\n // Provider Management\n // ============================================================================\n\n /**\n * Add a new provider to the aggregated provider.\n *\n * @param providerId - Unique identifier for the provider\n * @param provider - Provider instance\n */\n addProvider(providerId: PerpsProviderType, provider: PerpsProvider): void {\n this.#providers.set(providerId, provider);\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Provider added', {\n providerId,\n });\n }\n\n /**\n * Remove a provider from the aggregated provider.\n *\n * @param providerId - Provider to remove\n * @returns true if removed, false if not found\n */\n removeProvider(providerId: PerpsProviderType): boolean {\n const removed = this.#providers.delete(providerId);\n if (removed) {\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Provider removed', {\n providerId,\n });\n }\n return removed;\n }\n\n /**\n * Get list of all registered provider IDs.\n *\n * @returns The result of the operation.\n */\n getProviderIds(): PerpsProviderType[] {\n return Array.from(this.#providers.keys());\n }\n\n /**\n * Check if a provider is registered.\n *\n * @param providerId - The provider id value.\n * @returns True if the condition is met.\n */\n hasProvider(providerId: PerpsProviderType): boolean {\n return this.#providers.has(providerId);\n }\n\n /**\n * Get the router instance for external configuration.\n *\n * @returns The result of the operation.\n */\n getRouter(): ProviderRouter {\n return this.#router;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AggregatedPerpsProvider.mjs","sourceRoot":"","sources":["../../src/providers/AggregatedPerpsProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;AAIH,OAAO,EAAE,uBAAuB,EAAE,mDAA+C;AACjF,OAAO,EAAE,cAAc,EAAE,sCAAkC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,2BAAiB;AAgEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,uBAAuB;IAelC,YAAY,MAAgC;;QAdnC,eAAU,GAAG,YAAY,CAAC;QAE1B,qDAAkD;QAElD,2DAAoC;QAEpC,2DAAkC;QAElC,gDAAiC;QAEjC,kDAAwB;QAExB,2DAA0C;QAGjD,uBAAA,IAAI,sCAAc,MAAM,CAAC,SAAS,MAAA,CAAC;QACnC,uBAAA,IAAI,4CAAoB,MAAM,CAAC,eAAe,MAAA,CAAC;QAC/C,uBAAA,IAAI,4CAAoB,MAAM,CAAC,eAAe,IAAI,KAAK,MAAA,CAAC;QACxD,uBAAA,IAAI,iCAAS,MAAM,CAAC,cAAc,MAAA,CAAC;QAEnC,0CAA0C;QAC1C,uBAAA,IAAI,mCAAW,IAAI,cAAc,CAAC;YAChC,eAAe,EAAE,uBAAA,IAAI,gDAAiB;SACvC,CAAC,MAAA,CAAC;QAEH,sEAAsE;QACtE,uBAAA,IAAI,4CAAoB,IAAI,uBAAuB,CAAC;YAClD,MAAM,EAAE,uBAAA,IAAI,qCAAM,CAAC,MAAM;SAC1B,CAAC,MAAA,CAAC;QAEH,uBAAA,IAAI,qCAAM,CAAC,WAAW,CAAC,GAAG,CAAC,uCAAuC,EAAE;YAClE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,0CAAW,CAAC,IAAI,EAAE,CAAC;YAC7C,eAAe,EAAE,uBAAA,IAAI,gDAAiB;YACtC,eAAe,EAAE,uBAAA,IAAI,gDAAiB;SACvC,CAAC,CAAC;IACL,CAAC;IA8ED,+EAA+E;IAC/E,4DAA4D;IAC5D,+EAA+E;IAE/E,gBAAgB,CAAC,MAAgC;QAC/C,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,mBAAmB,CAAC,MAAgC;QAClD,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,+EAA+E;IAC/E,iDAAiD;IACjD,+EAA+E;IAE/E,KAAK,CAAC,YAAY,CAAC,MAA2B;QAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAA8B;QAClD,sEAAsE;QACtE,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,uBAAA,IAAI,gDAAiB,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAyB;QACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,UAAU,GAAG,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EACrB,OAAO,EACP,YAAY,CACb,CAAC,IAAI,EAAE,CAAC;QAET,sDAAsD;QACtD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,kFAAkF;YAClF,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,uBAAuB,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EACT,OAAO,EACP,yBAAyB,CAC1B,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAA4B,EAC5B,OAA0B;QAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAA8B;QAClD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAwB,EACxB,OAA0B;QAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAwB;QAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAyB,EACzB,OAA0B;QAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE;YAC/D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3D,mEAAmE;YACnE,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,MAAqC;QAErC,+BAA+B;QAC/B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,8BAA8B,CAAC,MAIpC;QACC,mDAAmD;QACnD,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,mBAAmB,EAAE,CAAC;IAC1D,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CAAC,MAIpB;QACC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,uBAAA,IAAI,6FAA0B,MAA9B,IAAI,EAA2B,OAAO,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,CAAC;IAED,+EAA+E;IAC/E,gDAAgD;IAChD,+EAA+E;IAE/E,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EACjC,MAAM,CAAC,UAAU,CAClB,CAAC;QAEF,uBAAA,IAAI,qCAAM,CAAC,WAAW,CAAC,GAAG,CAAC,8CAA8C,EAAE;YACzE,iBAAiB,EAAE,MAAM,CAAC,UAAU;YACpC,cAAc,EAAE,UAAU;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAuB;QACrC,6EAA6E;QAC7E,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EACjC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAC3B,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAyB;QACzC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EACjC,MAAM,CAAC,UAAU,CAClB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,MAA+B;QAE/B,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,MAAM,CAAC,MAAM;gBAC3B,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,4BAA4B;iBACpC,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAA2B;QAC7C,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EACjC,MAAM,CAAC,UAAU,CAClB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAA4B;QAE5B,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAgC;QAEhC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EACjC,MAAM,CAAC,UAAU,CAClB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAA0B;QAC3C,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,+EAA+E;IAC/E,0CAA0C;IAC1C,+EAA+E;IAE/E,KAAK,CAAC,eAAe,CACnB,MAAqB;QAErB,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAAmB;QAEnB,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,MAA2B;QAE3B,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAsB;QAEtB,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAA,IAAI,yFAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,+EAA+E;IAC/E,uDAAuD;IACvD,+EAA+E;IAE/E,KAAK,CAAC,yBAAyB,CAC7B,MAA8B;QAE9B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,MAA+B;QAE/B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAA4B;QAE5B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,+EAA+E;IAC/E,wDAAwD;IACxD,+EAA+E;IAE/E,iBAAiB,CAAC,MAA6B;QAC7C,OAAO,uBAAA,IAAI,gDAAiB,CAAC,iBAAiB,CAAC;YAC7C,GAAG,MAAM;YACT,SAAS,EAAE,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB;YACrC,eAAe,EAAE,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,MAAgC;QACnD,OAAO,uBAAA,IAAI,gDAAiB,CAAC,oBAAoB,CAAC;YAChD,GAAG,MAAM;YACT,SAAS,EAAE,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB;SACtC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,CAAC,MAAiC;QACrD,OAAO,uBAAA,IAAI,gDAAiB,CAAC,qBAAqB,CAAC;YACjD,GAAG,MAAM;YACT,SAAS,EAAE,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB;SACtC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,MAA6B;QAC7C,OAAO,uBAAA,IAAI,gDAAiB,CAAC,iBAAiB,CAAC;YAC7C,GAAG,MAAM;YACT,SAAS,EAAE,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB;SACtC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,MAA8B;QAC/C,iEAAiE;QACjE,+CAA+C;QAC/C,uCAAuC;QACvC,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB,CAAC,MAA6B;QAC7C,+BAA+B;QAC/B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,kBAAkB,CAAC,MAA8B;QAC/C,+BAA+B;QAC/B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,oBAAoB,CAAC,MAAgC;QACnD,+BAA+B;QAC/B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E,iBAAiB,CAAC,MAA+B;QAC/C,gCAAgC;QAChC,uBAAA,IAAI,0CAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,YAAgC;QACjD,yCAAyC;QACzC,uBAAA,IAAI,0CAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnC,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBAChC,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,2CAA2C;IAC3C,+EAA+E;IAE/E,KAAK,CAAC,aAAa;QACjB,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,UAAU,EAAE,CAAC;QAE7D,sDAAsD;QACtD,mDAAmD;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,cAAc,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CACxE,CAAC;QAEF,2BAA2B;QAC3B,uBAAA,IAAI,gDAAiB,CAAC,UAAU,EAAE,CAAC;QAEnC,2CAA2C;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CACzD,CAAC,MAAM,CAAC;QAET,OAAO;YACL,OAAO,EAAE,YAAY,GAAG,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAkB;QAC3B,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,2BAA2B;QACzB,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,IAAI,QAAQ,CAAC,2BAA2B,EAAE,CAAC;YACzC,OAAO,QAAQ,CAAC,2BAA2B,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,wBAAwB,CAAC,YAAY,CAAC;IAC/C,CAAC;IAED,0BAA0B,CACxB,QAGS;QAET,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,IAAI,QAAQ,CAAC,0BAA0B,EAAE,CAAC;YACxC,OAAO,QAAQ,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,QAAQ,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,GAAG,EAAE;YACV,UAAU;QACZ,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E,mBAAmB,CAAC,OAAgB;QAClC,OAAO,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,+EAA+E;IAC/E,mBAAmB;IACnB,+EAA+E;IAE/E,KAAK,CAAC,gBAAgB,CAAC,MAA+B;QACpD,MAAM,QAAQ,GAAG,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,+EAA+E;IAC/E,sBAAsB;IACtB,+EAA+E;IAE/E;;;;;OAKG;IACH,WAAW,CAAC,UAA6B,EAAE,QAAuB;QAChE,uBAAA,IAAI,0CAAW,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC1C,uBAAA,IAAI,qCAAM,CAAC,WAAW,CAAC,GAAG,CAAC,0CAA0C,EAAE;YACrE,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,UAA6B;QAC1C,MAAM,OAAO,GAAG,uBAAA,IAAI,0CAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,uBAAA,IAAI,qCAAM,CAAC,WAAW,CAAC,GAAG,CAAC,4CAA4C,EAAE;gBACvE,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,0CAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,UAA6B;QACvC,OAAO,uBAAA,IAAI,0CAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,uBAAA,IAAI,uCAAQ,CAAC;IACtB,CAAC;CACF;;IA5oBG,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,0CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;IASC,MAAM,QAAQ,GAAG,uBAAA,IAAI,0CAAW,CAAC,GAAG,CAAC,uBAAA,IAAI,gDAAiB,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,+CAA+C,uBAAA,IAAI,gDAAiB,iBAAiB,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,yGASC,UAA8B;IAE9B,MAAM,EAAE,GAAG,UAAU,IAAI,uBAAA,IAAI,gDAAiB,CAAC;IAC/C,MAAM,QAAQ,GAAG,uBAAA,IAAI,0CAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,uBAAA,IAAI,qCAAM,CAAC,WAAW,CAAC,GAAG,CACxB,uCAAuC,EAAE,4BAA4B,CACtE,CAAC;QACF,OAAO,CAAC,uBAAA,IAAI,gDAAiB,EAAE,uBAAA,IAAI,uFAAoB,MAAxB,IAAI,CAAsB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxB,CAAC,iHAWC,OAAwC,EACxC,OAAe;IAEf,MAAM,UAAU,GAAc,EAAE,CAAC;IACjC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,uBAAA,IAAI,qCAAM,CAAC,WAAW,CAAC,GAAG,CACxB,6BAA6B,OAAO,wBAAwB,KAAK,EAAE,EACnE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CACzB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["/**\n * AggregatedPerpsProvider - Multi-provider aggregation wrapper\n *\n * Implements PerpsProvider interface to enable seamless multi-provider support.\n * Aggregates read operations from all providers, routes write operations to specific\n * providers based on params.providerId or default provider.\n *\n * Phase 1 Implementation:\n * - Read operations: Aggregate from all providers using Promise.allSettled()\n * - Write operations: Route to params.providerId ?? defaultProvider\n * - Subscriptions: Multiplex via SubscriptionMultiplexer\n * - Lifecycle: Delegate to default provider\n *\n * All returned data includes providerId field for UI differentiation.\n */\n\nimport type { CaipAccountId } from '@metamask/utils';\n\nimport { SubscriptionMultiplexer } from '../aggregation/SubscriptionMultiplexer';\nimport { ProviderRouter } from '../routing/ProviderRouter';\nimport { WebSocketConnectionState } from '../types';\nimport type {\n AccountState,\n AggregatedProviderConfig,\n AggregationMode,\n AssetRoute,\n BatchCancelOrdersParams,\n CancelOrderParams,\n CancelOrderResult,\n CancelOrdersResult,\n ClosePositionParams,\n ClosePositionsParams,\n ClosePositionsResult,\n DepositParams,\n DisconnectResult,\n EditOrderParams,\n FeeCalculationParams,\n FeeCalculationResult,\n Funding,\n GetAccountStateParams,\n GetAvailableDexsParams,\n GetFundingParams,\n GetHistoricalPortfolioParams,\n GetMarketsParams,\n GetOrderFillsParams,\n GetOrdersParams,\n GetOrFetchFillsParams,\n GetPositionsParams,\n GetSupportedPathsParams,\n HistoricalPortfolioResult,\n InitializeResult,\n PerpsPlatformDependencies,\n PerpsProvider,\n LiquidationPriceParams,\n LiveDataConfig,\n MaintenanceMarginParams,\n MarginResult,\n MarketInfo,\n Order,\n OrderFill,\n OrderParams,\n OrderResult,\n PerpsMarketData,\n PerpsProviderType,\n Position,\n ReadyToTradeResult,\n SubscribeAccountParams,\n SubscribeCandlesParams,\n SubscribeOICapsParams,\n SubscribeOrderBookParams,\n SubscribeOrderFillsParams,\n SubscribeOrdersParams,\n SubscribePositionsParams,\n SubscribePricesParams,\n ToggleTestnetResult,\n UpdateMarginParams,\n UpdatePositionTPSLParams,\n UserHistoryItem,\n WithdrawParams,\n WithdrawResult,\n RawLedgerUpdate,\n PerpsReadOptions,\n} from '../types';\n\n/**\n * AggregatedPerpsProvider implements PerpsProvider by coordinating\n * multiple backend providers.\n *\n * Design principles:\n * 1. Read operations aggregate from all providers (parallel)\n * 2. Write operations route to specific provider (explicit > default)\n * 3. Lifecycle operations delegate to default provider\n * 4. All returned data includes providerId for UI differentiation\n *\n * @example\n * ```typescript\n * const aggregated = new AggregatedPerpsProvider({\n * providers: new Map([\n * ['hyperliquid', hlProvider],\n * ['myx', myxProvider],\n * ]),\n * defaultProvider: 'hyperliquid',\n * infrastructure: deps,\n * });\n *\n * // Read: returns positions from all providers\n * const positions = await aggregated.getPositions();\n *\n * // Write: routes to specific or default provider\n * await aggregated.placeOrder({ symbol: 'BTC', providerId: 'myx', ... });\n * ```\n */\nexport class AggregatedPerpsProvider implements PerpsProvider {\n readonly protocolId = 'aggregated';\n\n readonly #providers: Map<PerpsProviderType, PerpsProvider>;\n\n readonly #defaultProvider: PerpsProviderType;\n\n readonly #aggregationMode: AggregationMode;\n\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #router: ProviderRouter;\n\n readonly #subscriptionMux: SubscriptionMultiplexer;\n\n constructor(config: AggregatedProviderConfig) {\n this.#providers = config.providers;\n this.#defaultProvider = config.defaultProvider;\n this.#aggregationMode = config.aggregationMode ?? 'all';\n this.#deps = config.infrastructure;\n\n // Initialize router with default provider\n this.#router = new ProviderRouter({\n defaultProvider: this.#defaultProvider,\n });\n\n // Initialize subscription multiplexer with logger for error reporting\n this.#subscriptionMux = new SubscriptionMultiplexer({\n logger: this.#deps.logger,\n });\n\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Initialized', {\n providers: Array.from(this.#providers.keys()),\n defaultProvider: this.#defaultProvider,\n aggregationMode: this.#aggregationMode,\n });\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Get list of active providers as tuples for iteration.\n * Returns array of [providerId, provider] pairs.\n *\n * @returns The result of the operation.\n */\n #getActiveProviders(): [PerpsProviderType, PerpsProvider][] {\n return Array.from(this.#providers.entries());\n }\n\n /**\n * Get the default provider instance.\n * Throws if default provider is not available.\n *\n * @returns The result of the operation.\n */\n #getDefaultProvider(): PerpsProvider {\n const provider = this.#providers.get(this.#defaultProvider);\n if (!provider) {\n throw new Error(\n `[AggregatedPerpsProvider] Default provider '${this.#defaultProvider}' not available`,\n );\n }\n return provider;\n }\n\n /**\n * Get provider by ID, falling back to default if not found.\n *\n * @param providerId - The provider id value.\n * @returns The result of the operation.\n */\n #getProviderOrDefault(\n providerId?: PerpsProviderType,\n ): [PerpsProviderType, PerpsProvider] {\n const id = providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(id);\n if (!provider) {\n this.#deps.debugLogger.log(\n `[AggregatedPerpsProvider] Provider '${id}' not found, using default`,\n );\n return [this.#defaultProvider, this.#getDefaultProvider()];\n }\n return [id, provider];\n }\n\n /**\n * Extract successful results from Promise.allSettled.\n * Logs errors for failed promises.\n *\n * @param results - Results from Promise.allSettled\n * @param context - Context string for logging\n * @returns Array of successful values\n */\n #extractSuccessfulResults<TResult>(\n results: PromiseSettledResult<TResult>[],\n context: string,\n ): TResult[] {\n const successful: TResult[] = [];\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n successful.push(result.value);\n } else {\n this.#deps.debugLogger.log(\n `[AggregatedPerpsProvider] ${context} failed for provider ${index}`,\n { error: result.reason },\n );\n }\n });\n return successful;\n }\n\n // ============================================================================\n // Asset Routes (Synchronous - delegate to default provider)\n // ============================================================================\n\n getDepositRoutes(params?: GetSupportedPathsParams): AssetRoute[] {\n return this.#getDefaultProvider().getDepositRoutes(params);\n }\n\n getWithdrawalRoutes(params?: GetSupportedPathsParams): AssetRoute[] {\n return this.#getDefaultProvider().getWithdrawalRoutes(params);\n }\n\n // ============================================================================\n // Read Operations (Aggregate from all providers)\n // ============================================================================\n\n async getPositions(params?: GetPositionsParams): Promise<Position[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const positions = await provider.getPositions(params);\n return positions.map((pos) => ({ ...pos, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getPositions').flat();\n }\n\n async getAccountState(params?: GetAccountStateParams): Promise<AccountState> {\n // Return account state from default provider with providerId injected\n const provider = this.#getDefaultProvider();\n const state = await provider.getAccountState(params);\n return { ...state, providerId: this.#defaultProvider };\n }\n\n async getMarkets(params?: GetMarketsParams): Promise<MarketInfo[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const markets = await provider.getMarkets(params);\n return markets.map((market) => ({ ...market, providerId: id }));\n }),\n );\n\n const allMarkets = this.#extractSuccessfulResults(\n results,\n 'getMarkets',\n ).flat();\n\n // Deduplicate markets by name (keep first occurrence)\n const seen = new Set<string>();\n return allMarkets.filter((market) => {\n // Use providerId:name as unique key to allow same market from different providers\n const key = `${market.providerId}:${market.name}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n\n async getMarketDataWithPrices(): Promise<PerpsMarketData[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const data = await provider.getMarketDataWithPrices();\n return data.map((item) => ({ ...item, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(\n results,\n 'getMarketDataWithPrices',\n ).flat();\n }\n\n async getOrderFills(\n params?: GetOrderFillsParams,\n options?: PerpsReadOptions,\n ): Promise<OrderFill[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const fills = await provider.getOrderFills(params, options);\n return fills.map((fill) => ({ ...fill, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrderFills').flat();\n }\n\n async getOrFetchFills(params?: GetOrFetchFillsParams): Promise<OrderFill[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const fills = await provider.getOrFetchFills(params);\n return fills.map((fill) => ({ ...fill, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrFetchFills').flat();\n }\n\n async getOrders(\n params?: GetOrdersParams,\n options?: PerpsReadOptions,\n ): Promise<Order[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const orders = await provider.getOrders(params, options);\n return orders.map((order) => ({ ...order, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrders').flat();\n }\n\n async getOpenOrders(params?: GetOrdersParams): Promise<Order[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const orders = await provider.getOpenOrders(params);\n return orders.map((order) => ({ ...order, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOpenOrders').flat();\n }\n\n async getFunding(\n params?: GetFundingParams,\n options?: PerpsReadOptions,\n ): Promise<Funding[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([_providerId, provider]) => {\n const funding = await provider.getFunding(params, options);\n // Funding type doesn't have providerId - we could add it if needed\n return funding;\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getFunding').flat();\n }\n\n async getHistoricalPortfolio(\n params?: GetHistoricalPortfolioParams,\n ): Promise<HistoricalPortfolioResult> {\n // Delegate to default provider\n return this.#getDefaultProvider().getHistoricalPortfolio(params);\n }\n\n /**\n * Get user non-funding ledger updates from default provider.\n *\n * @param params - Optional parameters\n * @param params.accountId - Account ID to filter by\n * @param params.startTime - Start time filter\n * @param params.endTime - End time filter\n * @returns Raw ledger updates\n */\n async getUserNonFundingLedgerUpdates(params?: {\n accountId?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<RawLedgerUpdate[]> {\n // Delegate to default provider (protocol-specific)\n return this.#getDefaultProvider().getUserNonFundingLedgerUpdates(params);\n }\n\n /**\n * Resolve the currently selected CAIP account identifier. Accounts are\n * shared across sub-providers (same InternalAccountController), so the\n * default provider's view is authoritative.\n *\n * @returns Resolved CAIP account id from the default sub-provider.\n */\n async getCurrentAccountId(): Promise<CaipAccountId> {\n return this.#getDefaultProvider().getCurrentAccountId();\n }\n\n /**\n * Get user history from all providers.\n *\n * @param params - Optional parameters\n * @param params.accountId - Account ID to filter by\n * @param params.startTime - Start time filter\n * @param params.endTime - End time filter\n * @returns Aggregated user history with providerId\n */\n async getUserHistory(params?: {\n accountId?: CaipAccountId;\n startTime?: number;\n endTime?: number;\n }): Promise<UserHistoryItem[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const history = await provider.getUserHistory(params);\n return history.map((item) => ({ ...item, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getUserHistory').flat();\n }\n\n // ============================================================================\n // Write Operations (Route to specific provider)\n // ============================================================================\n\n async placeOrder(params: OrderParams): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] placeOrder routing', {\n requestedProvider: params.providerId,\n actualProvider: providerId,\n symbol: params.symbol,\n });\n\n const result = await provider.placeOrder(params);\n return { ...result, providerId };\n }\n\n async editOrder(params: EditOrderParams): Promise<OrderResult> {\n // EditOrderParams contains OrderParams in newOrder which may have providerId\n const [providerId, provider] = this.#getProviderOrDefault(\n params.newOrder.providerId,\n );\n const result = await provider.editOrder(params);\n return { ...result, providerId };\n }\n\n async cancelOrder(params: CancelOrderParams): Promise<CancelOrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.cancelOrder(params);\n return { ...result, providerId };\n }\n\n async cancelOrders(\n params: BatchCancelOrdersParams,\n ): Promise<CancelOrdersResult> {\n // Batch cancel delegates to default provider\n const provider = this.#getDefaultProvider();\n if (!provider.cancelOrders) {\n return {\n success: false,\n successCount: 0,\n failureCount: params.length,\n results: params.map((param) => ({\n orderId: param.orderId,\n symbol: param.symbol,\n success: false,\n error: 'Batch cancel not supported',\n })),\n };\n }\n return provider.cancelOrders(params);\n }\n\n async closePosition(params: ClosePositionParams): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.closePosition(params);\n return { ...result, providerId };\n }\n\n async closePositions(\n params: ClosePositionsParams,\n ): Promise<ClosePositionsResult> {\n // Batch close delegates to default provider\n const provider = this.#getDefaultProvider();\n if (!provider.closePositions) {\n return {\n success: false,\n successCount: 0,\n failureCount: 0,\n results: [],\n };\n }\n return provider.closePositions(params);\n }\n\n async updatePositionTPSL(\n params: UpdatePositionTPSLParams,\n ): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.updatePositionTPSL(params);\n return { ...result, providerId };\n }\n\n async updateMargin(params: UpdateMarginParams): Promise<MarginResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.updateMargin(params);\n }\n\n async withdraw(params: WithdrawParams): Promise<WithdrawResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.withdraw(params);\n }\n\n // ============================================================================\n // Validation (Route to specific provider)\n // ============================================================================\n\n async validateDeposit(\n params: DepositParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n return this.#getDefaultProvider().validateDeposit(params);\n }\n\n async validateOrder(\n params: OrderParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateOrder(params);\n }\n\n async validateClosePosition(\n params: ClosePositionParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateClosePosition(params);\n }\n\n async validateWithdrawal(\n params: WithdrawParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateWithdrawal(params);\n }\n\n // ============================================================================\n // Protocol Calculations (Delegate to default or route)\n // ============================================================================\n\n async calculateLiquidationPrice(\n params: LiquidationPriceParams,\n ): Promise<string> {\n return this.#getDefaultProvider().calculateLiquidationPrice(params);\n }\n\n async calculateMaintenanceMargin(\n params: MaintenanceMarginParams,\n ): Promise<number> {\n return this.#getDefaultProvider().calculateMaintenanceMargin(params);\n }\n\n async getMaxLeverage(asset: string): Promise<number> {\n return this.#getDefaultProvider().getMaxLeverage(asset);\n }\n\n async calculateFees(\n params: FeeCalculationParams,\n ): Promise<FeeCalculationResult> {\n return this.#getDefaultProvider().calculateFees(params);\n }\n\n // ============================================================================\n // Subscriptions (Multiplex via SubscriptionMultiplexer)\n // ============================================================================\n\n subscribeToPrices(params: SubscribePricesParams): () => void {\n return this.#subscriptionMux.subscribeToPrices({\n ...params,\n providers: this.#getActiveProviders(),\n aggregationMode: 'merge',\n });\n }\n\n subscribeToPositions(params: SubscribePositionsParams): () => void {\n return this.#subscriptionMux.subscribeToPositions({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToOrderFills(params: SubscribeOrderFillsParams): () => void {\n return this.#subscriptionMux.subscribeToOrderFills({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToOrders(params: SubscribeOrdersParams): () => void {\n return this.#subscriptionMux.subscribeToOrders({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToAccount(params: SubscribeAccountParams): () => void {\n // For account subscriptions, we emit as array for multi-provider\n // but the callback expects single AccountState\n // Delegate to default provider for now\n return this.#getDefaultProvider().subscribeToAccount(params);\n }\n\n subscribeToOICaps(params: SubscribeOICapsParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToOICaps(params);\n }\n\n subscribeToCandles(params: SubscribeCandlesParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToCandles(params);\n }\n\n subscribeToOrderBook(params: SubscribeOrderBookParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToOrderBook(params);\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n setLiveDataConfig(config: Partial<LiveDataConfig>): void {\n // Apply config to all providers\n this.#providers.forEach((provider) => {\n provider.setLiveDataConfig(config);\n });\n }\n\n setUserFeeDiscount(discountBips: number | undefined): void {\n // Apply to all providers that support it\n this.#providers.forEach((provider) => {\n if (provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(discountBips);\n }\n });\n }\n\n // ============================================================================\n // Lifecycle (Delegate to default provider)\n // ============================================================================\n\n async toggleTestnet(): Promise<ToggleTestnetResult> {\n return this.#getDefaultProvider().toggleTestnet();\n }\n\n async initialize(): Promise<InitializeResult> {\n // Initialize default provider\n const result = await this.#getDefaultProvider().initialize();\n\n // Optionally initialize other providers in background\n // For Phase 1, we only initialize default provider\n return result;\n }\n\n async isReadyToTrade(): Promise<ReadyToTradeResult> {\n return this.#getDefaultProvider().isReadyToTrade();\n }\n\n async disconnect(): Promise<DisconnectResult> {\n // Disconnect all providers\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(([, provider]) => provider.disconnect()),\n );\n\n // Clear subscription cache\n this.#subscriptionMux.clearCache();\n\n // Return success if at least one succeeded\n const successCount = results.filter(\n (res) => res.status === 'fulfilled' && res.value.success,\n ).length;\n\n return {\n success: successCount > 0,\n };\n }\n\n async ping(timeoutMs?: number): Promise<void> {\n return this.#getDefaultProvider().ping(timeoutMs);\n }\n\n getWebSocketConnectionState(): WebSocketConnectionState {\n const provider = this.#getDefaultProvider();\n if (provider.getWebSocketConnectionState) {\n return provider.getWebSocketConnectionState();\n }\n return WebSocketConnectionState.Disconnected;\n }\n\n subscribeToConnectionState(\n listener: (\n state: WebSocketConnectionState,\n reconnectionAttempt: number,\n ) => void,\n ): () => void {\n const provider = this.#getDefaultProvider();\n if (provider.subscribeToConnectionState) {\n return provider.subscribeToConnectionState(listener);\n }\n listener(WebSocketConnectionState.Disconnected, 0);\n return () => {\n /* noop */\n };\n }\n\n async reconnect(): Promise<void> {\n const provider = this.#getDefaultProvider();\n if (provider.reconnect) {\n await provider.reconnect();\n }\n }\n\n // ============================================================================\n // Block Explorer\n // ============================================================================\n\n getBlockExplorerUrl(address?: string): string {\n return this.#getDefaultProvider().getBlockExplorerUrl(address);\n }\n\n // ============================================================================\n // HIP-3 (Optional)\n // ============================================================================\n\n async getAvailableDexs(params?: GetAvailableDexsParams): Promise<string[]> {\n const provider = this.#getDefaultProvider();\n if (!provider.getAvailableDexs) {\n return [];\n }\n return provider.getAvailableDexs(params);\n }\n\n // ============================================================================\n // Provider Management\n // ============================================================================\n\n /**\n * Add a new provider to the aggregated provider.\n *\n * @param providerId - Unique identifier for the provider\n * @param provider - Provider instance\n */\n addProvider(providerId: PerpsProviderType, provider: PerpsProvider): void {\n this.#providers.set(providerId, provider);\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Provider added', {\n providerId,\n });\n }\n\n /**\n * Remove a provider from the aggregated provider.\n *\n * @param providerId - Provider to remove\n * @returns true if removed, false if not found\n */\n removeProvider(providerId: PerpsProviderType): boolean {\n const removed = this.#providers.delete(providerId);\n if (removed) {\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Provider removed', {\n providerId,\n });\n }\n return removed;\n }\n\n /**\n * Get list of all registered provider IDs.\n *\n * @returns The result of the operation.\n */\n getProviderIds(): PerpsProviderType[] {\n return Array.from(this.#providers.keys());\n }\n\n /**\n * Check if a provider is registered.\n *\n * @param providerId - The provider id value.\n * @returns True if the condition is met.\n */\n hasProvider(providerId: PerpsProviderType): boolean {\n return this.#providers.has(providerId);\n }\n\n /**\n * Get the router instance for external configuration.\n *\n * @returns The result of the operation.\n */\n getRouter(): ProviderRouter {\n return this.#router;\n }\n}\n"]}
|
|
@@ -1438,9 +1438,10 @@ class HyperLiquidProvider {
|
|
|
1438
1438
|
* Get historical user fills (trade executions)
|
|
1439
1439
|
*
|
|
1440
1440
|
* @param params - The operation parameters.
|
|
1441
|
+
* @param options - Optional cache-control modifiers for this read.
|
|
1441
1442
|
* @returns A promise that resolves to the result.
|
|
1442
1443
|
*/
|
|
1443
|
-
async getOrderFills(params) {
|
|
1444
|
+
async getOrderFills(params, options) {
|
|
1444
1445
|
try {
|
|
1445
1446
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Getting user fills via HyperLiquid SDK:', params);
|
|
1446
1447
|
// Read-only operation: only need client initialization
|
|
@@ -1467,8 +1468,14 @@ class HyperLiquidProvider {
|
|
|
1467
1468
|
// Start fetching historical orders in parallel with fill transformation.
|
|
1468
1469
|
// The fills API does not return order type, so we cross-reference
|
|
1469
1470
|
// with historical orders to enable TP/SL pill rendering in activity.
|
|
1470
|
-
|
|
1471
|
-
|
|
1471
|
+
// Routed through the client-service coalesce so the enrichment sidecar
|
|
1472
|
+
// rides the same cache as an explicit getOrders call, preventing a
|
|
1473
|
+
// second REST fire under rapid market switching.
|
|
1474
|
+
const historicalOrdersPromise = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f")
|
|
1475
|
+
.fetchHistoricalOrders(userAddress, {
|
|
1476
|
+
forceRefresh: options?.forceRefresh,
|
|
1477
|
+
})
|
|
1478
|
+
.catch((enrichError) => {
|
|
1472
1479
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Warning: failed to enrich fills with order types:', enrichError);
|
|
1473
1480
|
return null;
|
|
1474
1481
|
});
|
|
@@ -1534,19 +1541,17 @@ class HyperLiquidProvider {
|
|
|
1534
1541
|
* Get historical orders (order lifecycle)
|
|
1535
1542
|
*
|
|
1536
1543
|
* @param params - The operation parameters.
|
|
1544
|
+
* @param options - Optional cache-control modifiers for this read.
|
|
1537
1545
|
* @returns A promise that resolves to the result.
|
|
1538
1546
|
*/
|
|
1539
|
-
async getOrders(params) {
|
|
1547
|
+
async getOrders(params, options) {
|
|
1540
1548
|
try {
|
|
1541
1549
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Getting user orders via HyperLiquid SDK:', params);
|
|
1542
1550
|
// Read-only operation: only need client initialization
|
|
1543
1551
|
await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_ensureClientsInitialized).call(this);
|
|
1544
1552
|
__classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").ensureInitialized();
|
|
1545
|
-
const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient();
|
|
1546
1553
|
const userAddress = await __classPrivateFieldGet(this, _HyperLiquidProvider_walletService, "f").getUserAddressWithDefault(params?.accountId);
|
|
1547
|
-
const rawOrders = await
|
|
1548
|
-
user: userAddress,
|
|
1549
|
-
});
|
|
1554
|
+
const rawOrders = await __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").fetchHistoricalOrders(userAddress, { forceRefresh: options?.forceRefresh });
|
|
1550
1555
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('User orders received:', {
|
|
1551
1556
|
count: rawOrders?.length ?? 0,
|
|
1552
1557
|
});
|
|
@@ -1693,9 +1698,11 @@ class HyperLiquidProvider {
|
|
|
1693
1698
|
* Get user funding history
|
|
1694
1699
|
*
|
|
1695
1700
|
* @param params - The operation parameters.
|
|
1701
|
+
* @param _options - Cache-control modifiers (unused — funding has no
|
|
1702
|
+
* provider-internal cache; coalescing happens at MarketDataService).
|
|
1696
1703
|
* @returns A promise that resolves to the result.
|
|
1697
1704
|
*/
|
|
1698
|
-
async getFunding(params) {
|
|
1705
|
+
async getFunding(params, _options) {
|
|
1699
1706
|
try {
|
|
1700
1707
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Getting user funding via HyperLiquid SDK:', params);
|
|
1701
1708
|
// Read-only operation: only need client initialization
|
|
@@ -1814,6 +1821,18 @@ class HyperLiquidProvider {
|
|
|
1814
1821
|
return [];
|
|
1815
1822
|
}
|
|
1816
1823
|
}
|
|
1824
|
+
/**
|
|
1825
|
+
* Resolve the provider's currently active CAIP account identifier.
|
|
1826
|
+
* Used by the MarketDataService REST coalesce layer so cached payloads
|
|
1827
|
+
* are keyed by the actual resolved address rather than a shared
|
|
1828
|
+
* "default" sentinel — prevents one account's data from being served
|
|
1829
|
+
* after an account switch within the coalesce TTL window.
|
|
1830
|
+
*
|
|
1831
|
+
* @returns CAIP account id for the currently selected HyperLiquid account.
|
|
1832
|
+
*/
|
|
1833
|
+
async getCurrentAccountId() {
|
|
1834
|
+
return __classPrivateFieldGet(this, _HyperLiquidProvider_walletService, "f").getCurrentAccountId();
|
|
1835
|
+
}
|
|
1817
1836
|
/**
|
|
1818
1837
|
* Get user history (deposits, withdrawals, transfers)
|
|
1819
1838
|
*
|
|
@@ -1916,10 +1935,21 @@ class HyperLiquidProvider {
|
|
|
1916
1935
|
isTestnet: __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode(),
|
|
1917
1936
|
});
|
|
1918
1937
|
const dexs = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getStandaloneValidatedDexs).call(this);
|
|
1919
|
-
const
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1938
|
+
const [standaloneSpotStateResult, standalonePerpsResults] = await Promise.all([
|
|
1939
|
+
standaloneInfoClient
|
|
1940
|
+
.spotClearinghouseState({ user: userAddress })
|
|
1941
|
+
.catch((error) => {
|
|
1942
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Standalone spot state fetch failed — falling back to perps-only totals', {
|
|
1943
|
+
error: (0, errorUtils_1.ensureError)(error, 'HyperLiquidProvider.getAccountState.standalone.spot').message,
|
|
1944
|
+
});
|
|
1945
|
+
return null;
|
|
1946
|
+
}),
|
|
1947
|
+
(0, standaloneInfoClient_1.queryStandaloneClearinghouseStates)(standaloneInfoClient, userAddress, dexs),
|
|
1948
|
+
]);
|
|
1949
|
+
// Aggregate account states across all DEXs, then apply spot-backed
|
|
1950
|
+
// adjustments so streamed/standalone/full paths report the same totals.
|
|
1951
|
+
const dexAccountStates = standalonePerpsResults.map((perpsState) => (0, hyperLiquidAdapter_1.adaptAccountStateFromSDK)(perpsState));
|
|
1952
|
+
const aggregatedAccountState = (0, accountUtils_1.addSpotBalanceToAccountState)((0, accountUtils_1.aggregateAccountStates)(dexAccountStates), standaloneSpotStateResult);
|
|
1923
1953
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('HyperLiquidProvider: standalone account state fetched', { totalBalance: aggregatedAccountState.totalBalance });
|
|
1924
1954
|
return aggregatedAccountState;
|
|
1925
1955
|
}
|
|
@@ -1984,13 +2014,7 @@ class HyperLiquidProvider {
|
|
|
1984
2014
|
});
|
|
1985
2015
|
return dexAccountState;
|
|
1986
2016
|
});
|
|
1987
|
-
const aggregatedAccountState = (0, accountUtils_1.aggregateAccountStates)(dexAccountStates);
|
|
1988
|
-
// Add spot balance to totalBalance (spot is global, not per-DEX)
|
|
1989
|
-
let spotBalance = 0;
|
|
1990
|
-
if (spotState?.balances && Array.isArray(spotState.balances)) {
|
|
1991
|
-
spotBalance = spotState.balances.reduce((sum, balance) => sum + parseFloat(balance.total || '0'), 0);
|
|
1992
|
-
}
|
|
1993
|
-
aggregatedAccountState.totalBalance = (parseFloat(aggregatedAccountState.totalBalance) + spotBalance).toString();
|
|
2017
|
+
const aggregatedAccountState = (0, accountUtils_1.addSpotBalanceToAccountState)((0, accountUtils_1.aggregateAccountStates)(dexAccountStates), spotState);
|
|
1994
2018
|
// Build per-sub-account breakdown (HIP-3 DEXs map to sub-accounts)
|
|
1995
2019
|
const subAccountBreakdown = {};
|
|
1996
2020
|
perpsStateResults.forEach((result) => {
|
|
@@ -3454,6 +3478,18 @@ class HyperLiquidProvider {
|
|
|
3454
3478
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Cleared all fee cache');
|
|
3455
3479
|
}
|
|
3456
3480
|
}
|
|
3481
|
+
/**
|
|
3482
|
+
* Escape hatch for agentic validation flows and test harnesses that drive
|
|
3483
|
+
* HL mutations directly. NOT part of the PerpsProvider interface.
|
|
3484
|
+
* Production code paths must go through the provider's own methods.
|
|
3485
|
+
*
|
|
3486
|
+
* @returns A promise resolving to the underlying HyperLiquid SDK
|
|
3487
|
+
* ExchangeClient. Promise shape matches the existing agentic flows
|
|
3488
|
+
* (hl-provision-fixture) that chain `.then` on the result.
|
|
3489
|
+
*/
|
|
3490
|
+
async getExchangeClient() {
|
|
3491
|
+
return __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getExchangeClient();
|
|
3492
|
+
}
|
|
3457
3493
|
/**
|
|
3458
3494
|
* Disconnect provider
|
|
3459
3495
|
*
|