@metamask-previews/perps-controller 22.1.2-preview-37b170414 → 22.1.2-preview-2c49dc768
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 -4
- package/dist/providers/AggregatedPerpsProvider.d.ts.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.js +6 -5
- package/dist/providers/AggregatedPerpsProvider.js.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.ts.map +1 -1
- package/dist/providers/HyperLiquidProvider.js +1 -1
- package/dist/providers/HyperLiquidProvider.js.map +1 -1
- package/dist/services/TradingService.d.ts.map +1 -1
- package/dist/services/TradingService.js +7 -4
- package/dist/services/TradingService.js.map +1 -1
- package/dist/utils/errorContext.d.ts +33 -0
- package/dist/utils/errorContext.d.ts.map +1 -1
- package/dist/utils/errorContext.js +41 -0
- package/dist/utils/errorContext.js.map +1 -1
- package/dist/utils/errorUtils.d.ts +5 -0
- package/dist/utils/errorUtils.d.ts.map +1 -1
- package/dist/utils/errorUtils.js +11 -1
- package/dist/utils/errorUtils.js.map +1 -1
- package/dist/utils/hyperLiquidValidation.d.ts +3 -1
- package/dist/utils/hyperLiquidValidation.d.ts.map +1 -1
- package/dist/utils/hyperLiquidValidation.js +6 -3
- package/dist/utils/hyperLiquidValidation.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,13 +9,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
-
- Add
|
|
13
|
-
-
|
|
14
|
-
- `ORDER_POST_ONLY_WOULD_CROSS` on a failed `editOrder` means Hyperliquid has already cancelled the original resting order.
|
|
12
|
+
- **BREAKING:** Add `PERPS_ERROR_CODES.ORDER_POST_ONLY_WOULD_CROSS` and `PERPS_ERROR_CODES.ORDER_POST_ONLY_WINDOW`, returned on Hyperliquid provider results when a post-only order would cross the spread or when the venue only accepts post-only orders after a network upgrade. ([#11206](https://github.com/MetaMask/core/pull/11206))
|
|
13
|
+
- This widens the exported `PerpsErrorCode` union, so consumers that key an exhaustive `Record<PerpsErrorCode, …>` stop compiling until they add an entry for both codes. Both first-party clients do: Mobile's `ERROR_CODE_TO_I18N_KEY` in `app/components/UI/Perps/utils/translatePerpsError.ts` and Extension's map in `ui/components/app/perps/utils/translate-perps-error.ts`. Until a client maps them, both codes render that client's generic error copy.
|
|
14
|
+
- `ORDER_POST_ONLY_WOULD_CROSS` on a failed `editOrder` means Hyperliquid has already cancelled the original resting order. Clients that detect either condition from venue wording must switch to `errorCode`, because `error` no longer carries that wording. In Mobile that is `isPostOnlyWouldCrossError`, `isPostOnlyWindowError`, and `normalizeOrderEditRejection`; without the switch, a refused edit is reported as keeping an original order that was already cancelled.
|
|
15
|
+
- **BREAKING:** Add exported `HyperLiquidErrorDetails` and widen `PerpsErrorDetails` to `PriceMovedErrorDetails | HyperLiquidErrorDetails`. Every normalized Hyperliquid failure now carries `{ code, provider: 'hyperliquid' }` details, so clients can translate stable codes without parsing venue messages. `PRICE_MOVED` keeps its existing numeric payload. ([#11206](https://github.com/MetaMask/core/pull/11206))
|
|
16
|
+
- Code that reads `PriceMovedErrorDetails` fields must first narrow on `errorDetails.code === PERPS_ERROR_CODES.PRICE_MOVED`, which both first-party clients already do. `HyperLiquidErrorDetails['code']` never includes `PRICE_MOVED`, so that check still narrows.
|
|
17
|
+
- Runtime guards that accept only the `PRICE_MOVED` shape now reject these results. Mobile's `isPerpsErrorInput` (via `isPerpsErrorDetails`) returns `false` for them, so `translatePerpsError` falls back to generic copy for every Hyperliquid failure until the guard also accepts `HyperLiquidErrorDetails`.
|
|
18
|
+
- Add optional `errorCode` and `errorDetails` to `MarginResult`, `WithdrawResult`, `TransferBetweenDexsResult`, `InitializeResult`, `ReadyToTradeResult`, `DisconnectResult`, `ToggleTestnetResult`, `ClosePositionsResult`, and each `ClosePositionsResult.results` entry. ([#11206](https://github.com/MetaMask/core/pull/11206))
|
|
15
19
|
|
|
16
20
|
### Changed
|
|
17
21
|
|
|
18
|
-
- Normalize known Hyperliquid venue failures to stable `PerpsErrorCode` values on every provider result boundary, including order placement and cancellation, edits, closes, TP/SL updates, margin changes, withdrawals, transfers, and readiness failures.
|
|
22
|
+
- **BREAKING:** Normalize known Hyperliquid venue failures to stable `PerpsErrorCode` values on every provider result boundary, including order placement and cancellation, edits, closes, TP/SL updates, margin changes, withdrawals, transfers, and readiness failures. ([#11206](https://github.com/MetaMask/core/pull/11206))
|
|
23
|
+
- Result `error` fields now hold the stable code instead of venue text, and unknown failures return `UNKNOWN_ERROR`. Clients that pattern-match on `error` must read `errorCode` instead.
|
|
24
|
+
- A structured failure the provider raises itself without details, such as the `ORDER_SIZE_MIN` returned when the venue rejects an opening order below its minimum, now also carries provider-tagged details. `PRICE_MOVED` is unchanged.
|
|
25
|
+
- The original failure is never copied into result fields. It stays the `cause` of the reported error, including when `TradingService` reports a failed `closePosition`, `cancelOrder`, or `flipPosition` result.
|
|
19
26
|
|
|
20
27
|
## [22.1.2]
|
|
21
28
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregatedPerpsProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AggregatedPerpsProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EAExB,UAAU,EACV,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,4BAA4B,EAC5B,qCAAqC,EACrC,qCAAqC,EACrC,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,OAAO,EACP,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAEhB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,YAAY,EACZ,UAAU,EACV,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,+BAA+B,EAC/B,6BAA6B,EAC7B,iBAAiB,EACjB,QAAQ,EACR,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"AggregatedPerpsProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AggregatedPerpsProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
|
|
|
19
19
|
import { ProviderRouter } from '../routing/ProviderRouter.js';
|
|
20
20
|
import { isProviderOnTestnet } from '../services/providerNetwork.js';
|
|
21
21
|
import { WebSocketConnectionState } from '../types/index.js';
|
|
22
|
+
import { carryProviderErrorCause } from '../utils/errorContext.js';
|
|
22
23
|
import { ensureError } from '../utils/errorUtils.js';
|
|
23
24
|
/** Error returned when only some providers suspend their Chase orders. */
|
|
24
25
|
export class ChaseOrderSuspensionError extends Error {
|
|
@@ -445,7 +446,7 @@ export class AggregatedPerpsProvider {
|
|
|
445
446
|
symbol: params.symbol,
|
|
446
447
|
});
|
|
447
448
|
const result = await provider.placeOrder(params);
|
|
448
|
-
return { ...result, providerId };
|
|
449
|
+
return carryProviderErrorCause(result, { ...result, providerId });
|
|
449
450
|
}
|
|
450
451
|
/**
|
|
451
452
|
* Read TWAP lifecycle records from every active provider.
|
|
@@ -577,12 +578,12 @@ export class AggregatedPerpsProvider {
|
|
|
577
578
|
// EditOrderParams contains OrderParams in newOrder which may have providerId
|
|
578
579
|
const [providerId, provider] = this.#getProviderOrDefault(params.newOrder.providerId);
|
|
579
580
|
const result = await provider.editOrder(params);
|
|
580
|
-
return { ...result, providerId };
|
|
581
|
+
return carryProviderErrorCause(result, { ...result, providerId });
|
|
581
582
|
}
|
|
582
583
|
async cancelOrder(params) {
|
|
583
584
|
const [providerId, provider] = this.#getProviderOrDefault(params.providerId);
|
|
584
585
|
const result = await provider.cancelOrder(params);
|
|
585
|
-
return { ...result, providerId };
|
|
586
|
+
return carryProviderErrorCause(result, { ...result, providerId });
|
|
586
587
|
}
|
|
587
588
|
async cancelOrders(params) {
|
|
588
589
|
// Batch cancel delegates to default provider
|
|
@@ -605,7 +606,7 @@ export class AggregatedPerpsProvider {
|
|
|
605
606
|
async closePosition(params) {
|
|
606
607
|
const [providerId, provider] = this.#getProviderOrDefault(params.providerId);
|
|
607
608
|
const result = await provider.closePosition(params);
|
|
608
|
-
return { ...result, providerId };
|
|
609
|
+
return carryProviderErrorCause(result, { ...result, providerId });
|
|
609
610
|
}
|
|
610
611
|
async closePositions(params) {
|
|
611
612
|
// Batch close delegates to default provider
|
|
@@ -623,7 +624,7 @@ export class AggregatedPerpsProvider {
|
|
|
623
624
|
async updatePositionTPSL(params) {
|
|
624
625
|
const [providerId, provider] = this.#getProviderOrDefault(params.providerId);
|
|
625
626
|
const result = await provider.updatePositionTPSL(params);
|
|
626
|
-
return { ...result, providerId };
|
|
627
|
+
return carryProviderErrorCause(result, { ...result, providerId });
|
|
627
628
|
}
|
|
628
629
|
async updateMargin(params) {
|
|
629
630
|
const [, provider] = this.#getProviderOrDefault(params.providerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregatedPerpsProvider.js","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.js';\nimport { PERPS_CONSTANTS } from '../constants/perpsConfig.js';\nimport { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';\nimport { ProviderRouter } from '../routing/ProviderRouter.js';\nimport { isProviderOnTestnet } from '../services/providerNetwork.js';\nimport { WebSocketConnectionState } from '../types/index.js';\nimport type {\n AccountState,\n AggregatedProviderConfig,\n AggregationMode,\n AssetRoute,\n BatchCancelOrdersParams,\n CancelOrderParams,\n CancelOrderResult,\n CancelOrdersResult,\n ChaseOrder,\n GetChaseOrderOwnershipParams,\n ReconcileChaseOrderCancellationParams,\n ReconcileChaseOrderCancellationResult,\n PerpsChaseOrderOwnership,\n ClosePositionParams,\n ClosePositionsParams,\n ClosePositionsResult,\n DepositParams,\n DisconnectResult,\n EditOrderParams,\n FeeCalculationParams,\n FeeCalculationResult,\n Funding,\n GetAccountStateParams,\n GetAccountSupportParams,\n GetAvailableDexsParams,\n GetFundingParams,\n GetHistoricalPortfolioParams,\n GetMarketsParams,\n GetOrderCapabilitiesParams,\n GetMarginModeLockParams,\n GetScalePriceLadderParams,\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 PositionModifyPreviewParams,\n PositionModifyPreviewResult,\n MarginResult,\n MarketInfo,\n Order,\n OrderFill,\n OrderParams,\n OrderResult,\n PerpsMarketData,\n PerpsAccountSupport,\n PerpsOrderCapabilities,\n PerpsMarginModeLock,\n PerpsScalePriceLadder,\n PerpsPendingManualRecovery,\n PerpsRecoveredDispatch,\n AttachedOrderGroup,\n PerpsRecoveryVenueReview,\n ScaleOrderGroup,\n ResolveRecoveryProtectionParams,\n PerpsRecoveryProtectionResult,\n PerpsProviderType,\n Position,\n ReadyToTradeResult,\n SubscribeAccountParams,\n SubscribeCandlesParams,\n SubscribeOICapsParams,\n SubscribeOrderBookParams,\n SubscribeOrderFillsParams,\n SubscribeOrdersParams,\n SubscribeTwapOrdersParams,\n SubscribePositionsParams,\n SubscribePricesParams,\n ToggleTestnetResult,\n TwapOrder,\n UpdateMarginParams,\n UpdatePositionTPSLParams,\n UserHistoryItem,\n WithdrawParams,\n WithdrawResult,\n RawLedgerUpdate,\n PerpsReadOptions,\n PerpsFeeResolution,\n} from '../types/index.js';\nimport { ensureError } from '../utils/errorUtils.js';\n\n/** Error returned when only some providers suspend their Chase orders. */\nexport class ChaseOrderSuspensionError extends Error {\n readonly suspendedOrders: ChaseOrder[];\n\n readonly failures: { providerId: PerpsProviderType; reason: unknown }[];\n\n constructor(options: {\n suspendedOrders: ChaseOrder[];\n failures: { providerId: PerpsProviderType; reason: unknown }[];\n }) {\n const failedProviderIds = options.failures\n .map(({ providerId }) => providerId)\n .join(', ');\n super(`Failed to suspend Chase orders for: ${failedProviderIds}`);\n this.name = 'ChaseOrderSuspensionError';\n this.suspendedOrders = options.suspendedOrders;\n this.failures = options.failures;\n }\n}\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 * ['lighter', lighterProvider],\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: 'lighter', ... });\n * ```\n */\nexport class AggregatedPerpsProvider implements PerpsProvider {\n readonly protocolId = 'aggregated';\n\n readonly routesOrdersByProviderId = true;\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 #isTestnet: boolean | undefined;\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 this.#isTestnet = config.isTestnet;\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 * Which provider a write with this route actually reaches.\n *\n * `protocolId` is `aggregated` and `getPositions` spans every active\n * provider, so a caller that needs to reason about one write — pricing the\n * positions a close can actually touch, for instance — cannot infer the route\n * from either. This reports it explicitly.\n *\n * @param providerId - Explicit route, or undefined for the default.\n * @returns The provider id the write will be submitted through.\n */\n getWriteProviderId(providerId?: PerpsProviderType): PerpsProviderType {\n return providerId ?? this.#defaultProvider;\n }\n\n /**\n * Get the explicit provider, or the default when no route was supplied.\n *\n * @param providerId - The provider id value.\n * @returns The selected provider id and instance.\n * @throws If an explicit provider is not registered.\n */\n #getProviderOrDefault(\n providerId?: PerpsProviderType,\n ): [PerpsProviderType, PerpsProvider] {\n if (providerId === undefined) {\n return [this.#defaultProvider, this.#getDefaultProvider()];\n }\n\n const provider = this.#providers.get(providerId);\n if (!provider) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_NOT_FOUND);\n }\n return [providerId, 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 * Route account support through the same explicit-provider/default-provider\n * selection used by writes.\n *\n * @param params - Optional provider route.\n * @returns The selected provider's account support result.\n */\n async getAccountSupport(\n params?: GetAccountSupportParams,\n ): Promise<PerpsAccountSupport> {\n const [, provider] = this.#getProviderOrDefault(params?.providerId);\n return provider.getAccountSupport\n ? provider.getAccountSupport(params)\n : { isSupported: true };\n }\n\n /**\n * Resolve capabilities with the same explicit-provider/default-provider\n * selection used by order placement. Unknown routes return a typed\n * unavailable result instead of throwing a placement error.\n *\n * @param params - Market and optional provider route.\n * @returns Capabilities from the selected provider.\n */\n async getOrderCapabilities(\n params: GetOrderCapabilitiesParams,\n ): Promise<PerpsOrderCapabilities> {\n const providerId = params.providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(providerId);\n if (!provider) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_found',\n };\n }\n if (!provider.getOrderCapabilities) {\n return { status: 'unavailable', providerId, reason: 'not_implemented' };\n }\n try {\n const capabilities = await provider.getOrderCapabilities({\n ...params,\n providerId,\n });\n if (\n capabilities.providerId !== undefined &&\n capabilities.providerId !== providerId\n ) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_routable',\n };\n }\n return { ...capabilities, providerId };\n } catch (error) {\n this.#deps.debugLogger.log(\n '[AggregatedPerpsProvider] Order capabilities unavailable',\n {\n providerId,\n error: error instanceof Error ? error.message : String(error),\n },\n );\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_unavailable',\n };\n }\n }\n\n /**\n * Resolve the margin-mode lock with the same explicit-provider/default-\n * provider selection used by order placement.\n *\n * @param params - Market and optional provider route.\n * @returns The lock reported by the selected provider.\n */\n async getMarginModeLock(\n params: GetMarginModeLockParams,\n ): Promise<PerpsMarginModeLock> {\n const providerId = params.providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(providerId);\n if (!provider) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_found',\n };\n }\n if (!provider.getMarginModeLock) {\n return { status: 'unavailable', providerId, reason: 'not_implemented' };\n }\n try {\n const lock = await provider.getMarginModeLock({ ...params, providerId });\n if (lock.providerId !== undefined && lock.providerId !== providerId) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_routable',\n };\n }\n return { ...lock, providerId };\n } catch (error) {\n this.#deps.debugLogger.log(\n '[AggregatedPerpsProvider] Margin mode lock unavailable',\n {\n providerId,\n error: error instanceof Error ? error.message : String(error),\n },\n );\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_unavailable',\n };\n }\n }\n\n /**\n * Normalize a Scale price ladder through the selected provider route.\n *\n * @param params - Market, ladder bounds, count, optional sizing and explicit route.\n * @returns Provider-normalized prices with sizingPreview when supported, or a typed unavailable result.\n * @throws When bounds or sizing violate the provider's venue rules.\n */\n async getScalePriceLadder(\n params: GetScalePriceLadderParams,\n ): Promise<PerpsScalePriceLadder> {\n const providerId = params.providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(providerId);\n if (!provider) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_found',\n };\n }\n if (!provider.getScalePriceLadder) {\n return { status: 'unavailable', providerId, reason: 'not_implemented' };\n }\n const result = await provider.getScalePriceLadder({\n ...params,\n providerId,\n });\n if (result.providerId !== undefined && result.providerId !== providerId) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_routable',\n };\n }\n return { ...result, providerId };\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 /**\n * Read TWAP lifecycle records from every active provider.\n *\n * @returns TWAP records with their provider route attached.\n */\n async getTwapOrders(): Promise<TwapOrder[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getTwapOrders\n ? (await provider.getTwapOrders()).map((order) => ({\n ...order,\n providerId,\n }))\n : [],\n ),\n );\n\n return this.#extractSuccessfulResults(results, 'getTwapOrders').flat();\n }\n\n /**\n * Read all available snapshots, retaining successful providers on a partial failure.\n *\n * @returns Chase snapshots from every provider that responded successfully.\n */\n async getChaseOrders(): Promise<ChaseOrder[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getChaseOrders\n ? (await provider.getChaseOrders()).map((order) => ({\n ...order,\n providerId,\n }))\n : [],\n ),\n );\n\n return this.#extractSuccessfulResults(results, 'getChaseOrders').flat();\n }\n\n /**\n * Route a strict local ownership read once, without aggregating partial inventories.\n *\n * @param input - Exact stable handle and explicit provider route.\n * @returns That provider's durable history or an explicit unsupported result.\n */\n async getChaseOrderOwnership(\n input: GetChaseOrderOwnershipParams,\n ): Promise<PerpsChaseOrderOwnership> {\n const params = {\n ...input,\n owner: input.owner ? { ...input.owner } : undefined,\n };\n if (!params.providerId || !params.handle) {\n throw new Error(\n 'Chase ownership requires an exact handle and explicit provider',\n );\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n const ownership: PerpsChaseOrderOwnership = provider.getChaseOrderOwnership\n ? await provider.getChaseOrderOwnership(params)\n : {\n status: 'unsupported',\n providerId: params.providerId,\n handle: params.handle,\n reason: 'Durable Chase ownership is unavailable for this provider',\n };\n if (this.#providers.get(params.providerId) !== provider) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_LIFECYCLE_STALE);\n }\n return ownership;\n }\n\n /**\n * Route observation-only reconciliation to exactly one named provider.\n *\n * @param input - Original handle, owner, child and cancellation identity.\n * @returns Exact owning-provider settlement or unsupported, never ordinary cancel.\n */\n async reconcileChaseOrderCancellation(\n input: ReconcileChaseOrderCancellationParams,\n ): Promise<ReconcileChaseOrderCancellationResult> {\n const params = {\n ...input,\n owner: { ...input.owner },\n cancellation: { ...input.cancellation },\n };\n if (\n !params.providerId ||\n !params.handle ||\n !params.clientOrderId ||\n params.owner.providerId !== params.providerId\n ) {\n throw new Error(\n 'Chase cancellation reconciliation requires an exact handle, child and matching owner/provider',\n );\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n const ownership: ReconcileChaseOrderCancellationResult =\n provider.reconcileChaseOrderCancellation\n ? await provider.reconcileChaseOrderCancellation(params)\n : {\n status: 'unsupported',\n providerId: params.providerId,\n handle: params.handle,\n reason:\n 'Chase cancellation reconciliation is unavailable for this provider',\n };\n if (this.#providers.get(params.providerId) !== provider) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_LIFECYCLE_STALE);\n }\n return ownership;\n }\n\n /**\n * Attempt to suspend every provider and reject after all attempts settle if\n * any provider could not suspend safely. Successful providers remain\n * suspended, so callers may retry to reconcile a partial failure.\n *\n * @returns Chase snapshots after every provider suspends successfully.\n * @throws ChaseOrderSuspensionError if any active provider fails. The error\n * includes successful snapshots and each failed provider ID.\n */\n async suspendChaseOrders(): Promise<ChaseOrder[]> {\n const providers = this.#getActiveProviders();\n const results = await Promise.allSettled(\n providers.map(async ([providerId, provider]) =>\n provider.suspendChaseOrders\n ? (await provider.suspendChaseOrders()).map((order) => ({\n ...order,\n providerId,\n }))\n : [],\n ),\n );\n\n const snapshots: ChaseOrder[] = [];\n const failures: {\n providerId: PerpsProviderType;\n reason: unknown;\n }[] = [];\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n snapshots.push(...result.value);\n } else {\n failures.push({\n providerId: providers[index][0],\n reason: result.reason,\n });\n }\n });\n if (failures.length > 0) {\n throw new ChaseOrderSuspensionError({\n suspendedOrders: snapshots,\n failures,\n });\n }\n return snapshots;\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 * Aggregate parked manual TP/SL recoveries from every underlying\n * provider implementing the durable-settlement contract. Storage\n * errors PROPAGATE — a corrupt store degrading to \"nothing pending\"\n * would hide an under-protected position.\n *\n * @returns Pending manual-recovery entries across providers.\n */\n async getPendingManualRecoveries(): Promise<PerpsPendingManualRecovery[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getPendingManualRecoveries\n ? (await provider.getPendingManualRecoveries()).map((row) => ({\n ...row,\n providerId,\n }))\n : [],\n ),\n );\n return results.flat();\n }\n\n /**\n * Review native attached groups on providers implementing that capability.\n *\n * @returns Provider-labelled venue observations without financial actions.\n */\n async reviewAttachedOrderGroups(): Promise<AttachedOrderGroup[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n ((await provider.reviewAttachedOrderGroups?.()) ?? []).map((group) => ({\n ...group,\n providerId,\n })),\n ),\n );\n return results.flat();\n }\n\n /**\n * List stored attached identities across active providers.\n *\n * @returns Provider-labelled groups without financial actions.\n */\n async getAttachedOrderGroups(): Promise<AttachedOrderGroup[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n ((await provider.getAttachedOrderGroups?.()) ?? []).map((group) => ({\n ...group,\n providerId,\n })),\n ),\n );\n return results.flat();\n }\n\n /**\n * Aggregate recovered-dispatch outcomes from every underlying provider\n * implementing the durable-settlement contract.\n *\n * @returns Pending recovered-dispatch outcomes across providers.\n */\n async getRecoveredDispatches(): Promise<PerpsRecoveredDispatch[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getRecoveredDispatches\n ? (await provider.getRecoveredDispatches()).map((row) => ({\n ...row,\n providerId,\n }))\n : [],\n ),\n );\n return results.flat();\n }\n\n /**\n * List durable Scale groups from providers that expose group ownership.\n * @returns Owned groups with their provider routes.\n */\n async getScaleOrderGroups(): Promise<ScaleOrderGroup[]> {\n const groups = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n ((await provider.getScaleOrderGroups?.()) ?? []).map((group) => ({\n ...group,\n providerId,\n })),\n ),\n );\n return groups.flat();\n }\n\n /**\n * Review one selected provider's Scale groups without replaying placement.\n * @param params - Explicit provider route.\n * @param params.providerId - Owning provider.\n * @returns Reconciled durable groups.\n */\n async reviewScaleOrderGroups(\n params: { providerId?: PerpsProviderType } = {},\n ): Promise<ScaleOrderGroup[]> {\n if (!params.providerId) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_NOT_FOUND);\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n if (!provider.reviewScaleOrderGroups) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_NOT_AVAILABLE);\n }\n return provider.reviewScaleOrderGroups(params);\n }\n\n /**\n * Execute an explicit successor for one selected durable protection obligation.\n *\n * @param params - Owning provider, opaque source ID and new protection intent.\n * @returns Settled, unresolved or unsupported recovery result.\n */\n async resolveRecoveryProtection(\n params: ResolveRecoveryProtectionParams,\n ): Promise<PerpsRecoveryProtectionResult> {\n if (!params.providerId) {\n throw new Error('Protection recovery requires an explicit provider');\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return (\n provider.resolveRecoveryProtection?.(params) ?? {\n status: 'unsupported',\n providerId: params.providerId,\n success: false,\n error: 'Selected protection recovery is unavailable for this provider',\n }\n );\n }\n\n /**\n * Review only the selected recovery owner, never an aggregated account snapshot.\n *\n * @param params - Explicit owning-provider route.\n * @param params.providerId - Provider to review.\n * @returns That provider's strict snapshot or unsupported capability.\n */\n async reviewRecoveryVenue(\n params: { providerId?: PerpsProviderType } = {},\n ): Promise<PerpsRecoveryVenueReview> {\n if (!params.providerId) {\n throw new Error('Recovery review requires an explicit provider');\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return (\n provider.reviewRecoveryVenue?.(params) ?? {\n status: 'unsupported',\n providerId: params.providerId,\n reason:\n 'Authoritative recovery review is unavailable for this provider',\n }\n );\n }\n\n /**\n * Reconcile every active provider without financial writes. Unsupported\n * providers contribute their local listing, or an empty list. Any failure\n * rejects the entire result, so partial evidence is never reported as complete.\n *\n * @returns Newly scoped pending and recovered dispatches across providers.\n */\n async reconcileRecoveredDispatches(): Promise<PerpsRecoveredDispatch[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) => {\n const rows = provider.reconcileRecoveredDispatches\n ? await provider.reconcileRecoveredDispatches()\n : ((await provider.getRecoveredDispatches?.()) ?? []);\n return rows.map((row) => ({ ...row, providerId }));\n }),\n );\n return results.flat();\n }\n\n /**\n * Acknowledge ONE recovered-dispatch outcome by its stable id on\n * whichever underlying provider owns it.\n *\n * @param recoveryId - Stable id from {@link getRecoveredDispatches}.\n */\n async acknowledgeRecoveredDispatch(recoveryId: string): Promise<void> {\n const capable = this.#getActiveProviders().filter(\n ([, provider]) =>\n typeof provider.acknowledgeRecoveredDispatch === 'function',\n );\n if (capable.length === 0) {\n throw new Error(\n 'No perps provider has recovered dispatches to acknowledge',\n );\n }\n let lastError: Error | null = null;\n for (const [, provider] of capable) {\n try {\n await provider.acknowledgeRecoveredDispatch?.(recoveryId);\n return;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n }\n throw lastError as Error;\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 const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.calculateLiquidationPrice(params);\n }\n\n async calculateMaintenanceMargin(\n params: MaintenanceMarginParams,\n ): Promise<number> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.calculateMaintenanceMargin(params);\n }\n\n async getMaxLeverage(\n asset: string,\n providerId?: PerpsProviderType,\n ): Promise<number> {\n const [, provider] = this.#getProviderOrDefault(providerId);\n return provider.getMaxLeverage(asset);\n }\n\n async calculateFees(\n params: FeeCalculationParams,\n ): Promise<FeeCalculationResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.calculateFees(params);\n }\n\n async previewPositionModify(\n params: PositionModifyPreviewParams,\n ): Promise<PositionModifyPreviewResult> {\n const [, provider] = this.#getProviderOrDefault(\n params.providerId ?? params.position.providerId,\n );\n return provider.previewPositionModify(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 /**\n * Stream TWAP updates from the default provider only.\n *\n * Unlike `getTwapOrders`, this does not fan out: HyperLiquid is the sole\n * venue with a native TWAP push channel today, so a mux would add\n * multi-provider merge semantics with nothing to merge. Callers needing the\n * aggregated view across providers keep using `getTwapOrders`.\n *\n * @param params - Subscription parameters including callback and account ID.\n * @returns A cleanup function; a no-op when the default provider has no\n * native TWAP push channel.\n */\n subscribeToTwapOrders(params: SubscribeTwapOrdersParams): () => void {\n const defaultProviderId = this.#defaultProvider;\n // Read the map directly: #getDefaultProvider throws when the default is\n // unavailable, and this method's contract is a no-op cleanup, not a throw.\n const provider = this.#providers.get(defaultProviderId);\n if (!provider?.subscribeToTwapOrders) {\n return () => {\n // No-op: default provider exposes no native TWAP push channel\n };\n }\n return provider.subscribeToTwapOrders({\n ...params,\n // Stamp the same way getTwapOrders does, so swapping a poll for this\n // subscription does not silently drop providerId from every schedule.\n callback: (twapOrders, isSnapshot) =>\n params.callback(\n twapOrders.map((order) => ({\n ...order,\n providerId: defaultProviderId,\n })),\n isSnapshot,\n ),\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 setUserFeeResolution(resolution: PerpsFeeResolution | undefined): void {\n this.#providers.forEach((provider) => {\n if (provider.setUserFeeResolution) {\n provider.setUserFeeResolution(resolution);\n } else if (provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(resolution?.discountBips);\n }\n });\n }\n\n /**\n * Approve the dedicated subscription builder on the HyperLiquid provider.\n *\n * @deprecated ADR 0064 replaced the dedicated subscription builder with cloid\n * marking on the standard builder; nothing on the order path reads this.\n * @returns Whether the builder is approved.\n */\n async approveSubscriptionBuilderFee(): Promise<boolean> {\n const provider =\n this.#providers.get('hyperliquid') ?? this.#getDefaultProvider();\n return provider.approveSubscriptionBuilderFee\n ? provider.approveSubscriptionBuilderFee()\n : false;\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 /**\n * Prepare every provider in turn, so a hardware wallet sees one prompt at a\n * time. A provider that throws is logged with its provider ID and counts as\n * not ready.\n *\n * @returns The not-ready result of the first provider, in registration\n * order, that is not ready; else ready.\n */\n async prepareTradingWallet(): Promise<ReadyToTradeResult> {\n let notReady: ReadyToTradeResult | undefined;\n for (const [providerId, provider] of this.#getActiveProviders()) {\n let result: ReadyToTradeResult | undefined;\n try {\n result = await provider.prepareTradingWallet?.();\n } catch (caughtError) {\n // Providers report their own failures, so a throw here is unexpected.\n const error = ensureError(\n caughtError,\n 'AggregatedPerpsProvider.prepareTradingWallet',\n );\n // The provider's own network: Lighter can be pinned to testnet.\n const isProviderTestnet = isProviderOnTestnet(\n providerId,\n this.#isTestnet,\n );\n this.#deps.logger.error(error, {\n tags: {\n feature: PERPS_CONSTANTS.FeatureName,\n provider: providerId,\n ...(isProviderTestnet !== undefined && {\n network: isProviderTestnet ? 'testnet' : 'mainnet',\n }),\n },\n context: {\n name: 'AggregatedPerpsProvider',\n data: { method: 'prepareTradingWallet', providerId },\n },\n });\n result = { ready: false, error: error.message };\n }\n if (result && !result.ready) {\n notReady ??= result;\n }\n }\n return notReady ?? { ready: true };\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.js","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.js';\nimport { PERPS_CONSTANTS } from '../constants/perpsConfig.js';\nimport { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';\nimport { ProviderRouter } from '../routing/ProviderRouter.js';\nimport { isProviderOnTestnet } from '../services/providerNetwork.js';\nimport { WebSocketConnectionState } from '../types/index.js';\nimport type {\n AccountState,\n AggregatedProviderConfig,\n AggregationMode,\n AssetRoute,\n BatchCancelOrdersParams,\n CancelOrderParams,\n CancelOrderResult,\n CancelOrdersResult,\n ChaseOrder,\n GetChaseOrderOwnershipParams,\n ReconcileChaseOrderCancellationParams,\n ReconcileChaseOrderCancellationResult,\n PerpsChaseOrderOwnership,\n ClosePositionParams,\n ClosePositionsParams,\n ClosePositionsResult,\n DepositParams,\n DisconnectResult,\n EditOrderParams,\n FeeCalculationParams,\n FeeCalculationResult,\n Funding,\n GetAccountStateParams,\n GetAccountSupportParams,\n GetAvailableDexsParams,\n GetFundingParams,\n GetHistoricalPortfolioParams,\n GetMarketsParams,\n GetOrderCapabilitiesParams,\n GetMarginModeLockParams,\n GetScalePriceLadderParams,\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 PositionModifyPreviewParams,\n PositionModifyPreviewResult,\n MarginResult,\n MarketInfo,\n Order,\n OrderFill,\n OrderParams,\n OrderResult,\n PerpsMarketData,\n PerpsAccountSupport,\n PerpsOrderCapabilities,\n PerpsMarginModeLock,\n PerpsScalePriceLadder,\n PerpsPendingManualRecovery,\n PerpsRecoveredDispatch,\n AttachedOrderGroup,\n PerpsRecoveryVenueReview,\n ScaleOrderGroup,\n ResolveRecoveryProtectionParams,\n PerpsRecoveryProtectionResult,\n PerpsProviderType,\n Position,\n ReadyToTradeResult,\n SubscribeAccountParams,\n SubscribeCandlesParams,\n SubscribeOICapsParams,\n SubscribeOrderBookParams,\n SubscribeOrderFillsParams,\n SubscribeOrdersParams,\n SubscribeTwapOrdersParams,\n SubscribePositionsParams,\n SubscribePricesParams,\n ToggleTestnetResult,\n TwapOrder,\n UpdateMarginParams,\n UpdatePositionTPSLParams,\n UserHistoryItem,\n WithdrawParams,\n WithdrawResult,\n RawLedgerUpdate,\n PerpsReadOptions,\n PerpsFeeResolution,\n} from '../types/index.js';\nimport { carryProviderErrorCause } from '../utils/errorContext.js';\nimport { ensureError } from '../utils/errorUtils.js';\n\n/** Error returned when only some providers suspend their Chase orders. */\nexport class ChaseOrderSuspensionError extends Error {\n readonly suspendedOrders: ChaseOrder[];\n\n readonly failures: { providerId: PerpsProviderType; reason: unknown }[];\n\n constructor(options: {\n suspendedOrders: ChaseOrder[];\n failures: { providerId: PerpsProviderType; reason: unknown }[];\n }) {\n const failedProviderIds = options.failures\n .map(({ providerId }) => providerId)\n .join(', ');\n super(`Failed to suspend Chase orders for: ${failedProviderIds}`);\n this.name = 'ChaseOrderSuspensionError';\n this.suspendedOrders = options.suspendedOrders;\n this.failures = options.failures;\n }\n}\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 * ['lighter', lighterProvider],\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: 'lighter', ... });\n * ```\n */\nexport class AggregatedPerpsProvider implements PerpsProvider {\n readonly protocolId = 'aggregated';\n\n readonly routesOrdersByProviderId = true;\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 #isTestnet: boolean | undefined;\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 this.#isTestnet = config.isTestnet;\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 * Which provider a write with this route actually reaches.\n *\n * `protocolId` is `aggregated` and `getPositions` spans every active\n * provider, so a caller that needs to reason about one write — pricing the\n * positions a close can actually touch, for instance — cannot infer the route\n * from either. This reports it explicitly.\n *\n * @param providerId - Explicit route, or undefined for the default.\n * @returns The provider id the write will be submitted through.\n */\n getWriteProviderId(providerId?: PerpsProviderType): PerpsProviderType {\n return providerId ?? this.#defaultProvider;\n }\n\n /**\n * Get the explicit provider, or the default when no route was supplied.\n *\n * @param providerId - The provider id value.\n * @returns The selected provider id and instance.\n * @throws If an explicit provider is not registered.\n */\n #getProviderOrDefault(\n providerId?: PerpsProviderType,\n ): [PerpsProviderType, PerpsProvider] {\n if (providerId === undefined) {\n return [this.#defaultProvider, this.#getDefaultProvider()];\n }\n\n const provider = this.#providers.get(providerId);\n if (!provider) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_NOT_FOUND);\n }\n return [providerId, 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 * Route account support through the same explicit-provider/default-provider\n * selection used by writes.\n *\n * @param params - Optional provider route.\n * @returns The selected provider's account support result.\n */\n async getAccountSupport(\n params?: GetAccountSupportParams,\n ): Promise<PerpsAccountSupport> {\n const [, provider] = this.#getProviderOrDefault(params?.providerId);\n return provider.getAccountSupport\n ? provider.getAccountSupport(params)\n : { isSupported: true };\n }\n\n /**\n * Resolve capabilities with the same explicit-provider/default-provider\n * selection used by order placement. Unknown routes return a typed\n * unavailable result instead of throwing a placement error.\n *\n * @param params - Market and optional provider route.\n * @returns Capabilities from the selected provider.\n */\n async getOrderCapabilities(\n params: GetOrderCapabilitiesParams,\n ): Promise<PerpsOrderCapabilities> {\n const providerId = params.providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(providerId);\n if (!provider) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_found',\n };\n }\n if (!provider.getOrderCapabilities) {\n return { status: 'unavailable', providerId, reason: 'not_implemented' };\n }\n try {\n const capabilities = await provider.getOrderCapabilities({\n ...params,\n providerId,\n });\n if (\n capabilities.providerId !== undefined &&\n capabilities.providerId !== providerId\n ) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_routable',\n };\n }\n return { ...capabilities, providerId };\n } catch (error) {\n this.#deps.debugLogger.log(\n '[AggregatedPerpsProvider] Order capabilities unavailable',\n {\n providerId,\n error: error instanceof Error ? error.message : String(error),\n },\n );\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_unavailable',\n };\n }\n }\n\n /**\n * Resolve the margin-mode lock with the same explicit-provider/default-\n * provider selection used by order placement.\n *\n * @param params - Market and optional provider route.\n * @returns The lock reported by the selected provider.\n */\n async getMarginModeLock(\n params: GetMarginModeLockParams,\n ): Promise<PerpsMarginModeLock> {\n const providerId = params.providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(providerId);\n if (!provider) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_found',\n };\n }\n if (!provider.getMarginModeLock) {\n return { status: 'unavailable', providerId, reason: 'not_implemented' };\n }\n try {\n const lock = await provider.getMarginModeLock({ ...params, providerId });\n if (lock.providerId !== undefined && lock.providerId !== providerId) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_routable',\n };\n }\n return { ...lock, providerId };\n } catch (error) {\n this.#deps.debugLogger.log(\n '[AggregatedPerpsProvider] Margin mode lock unavailable',\n {\n providerId,\n error: error instanceof Error ? error.message : String(error),\n },\n );\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_unavailable',\n };\n }\n }\n\n /**\n * Normalize a Scale price ladder through the selected provider route.\n *\n * @param params - Market, ladder bounds, count, optional sizing and explicit route.\n * @returns Provider-normalized prices with sizingPreview when supported, or a typed unavailable result.\n * @throws When bounds or sizing violate the provider's venue rules.\n */\n async getScalePriceLadder(\n params: GetScalePriceLadderParams,\n ): Promise<PerpsScalePriceLadder> {\n const providerId = params.providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(providerId);\n if (!provider) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_found',\n };\n }\n if (!provider.getScalePriceLadder) {\n return { status: 'unavailable', providerId, reason: 'not_implemented' };\n }\n const result = await provider.getScalePriceLadder({\n ...params,\n providerId,\n });\n if (result.providerId !== undefined && result.providerId !== providerId) {\n return {\n status: 'unavailable',\n providerId,\n reason: 'provider_not_routable',\n };\n }\n return { ...result, providerId };\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 carryProviderErrorCause(result, { ...result, providerId });\n }\n\n /**\n * Read TWAP lifecycle records from every active provider.\n *\n * @returns TWAP records with their provider route attached.\n */\n async getTwapOrders(): Promise<TwapOrder[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getTwapOrders\n ? (await provider.getTwapOrders()).map((order) => ({\n ...order,\n providerId,\n }))\n : [],\n ),\n );\n\n return this.#extractSuccessfulResults(results, 'getTwapOrders').flat();\n }\n\n /**\n * Read all available snapshots, retaining successful providers on a partial failure.\n *\n * @returns Chase snapshots from every provider that responded successfully.\n */\n async getChaseOrders(): Promise<ChaseOrder[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getChaseOrders\n ? (await provider.getChaseOrders()).map((order) => ({\n ...order,\n providerId,\n }))\n : [],\n ),\n );\n\n return this.#extractSuccessfulResults(results, 'getChaseOrders').flat();\n }\n\n /**\n * Route a strict local ownership read once, without aggregating partial inventories.\n *\n * @param input - Exact stable handle and explicit provider route.\n * @returns That provider's durable history or an explicit unsupported result.\n */\n async getChaseOrderOwnership(\n input: GetChaseOrderOwnershipParams,\n ): Promise<PerpsChaseOrderOwnership> {\n const params = {\n ...input,\n owner: input.owner ? { ...input.owner } : undefined,\n };\n if (!params.providerId || !params.handle) {\n throw new Error(\n 'Chase ownership requires an exact handle and explicit provider',\n );\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n const ownership: PerpsChaseOrderOwnership = provider.getChaseOrderOwnership\n ? await provider.getChaseOrderOwnership(params)\n : {\n status: 'unsupported',\n providerId: params.providerId,\n handle: params.handle,\n reason: 'Durable Chase ownership is unavailable for this provider',\n };\n if (this.#providers.get(params.providerId) !== provider) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_LIFECYCLE_STALE);\n }\n return ownership;\n }\n\n /**\n * Route observation-only reconciliation to exactly one named provider.\n *\n * @param input - Original handle, owner, child and cancellation identity.\n * @returns Exact owning-provider settlement or unsupported, never ordinary cancel.\n */\n async reconcileChaseOrderCancellation(\n input: ReconcileChaseOrderCancellationParams,\n ): Promise<ReconcileChaseOrderCancellationResult> {\n const params = {\n ...input,\n owner: { ...input.owner },\n cancellation: { ...input.cancellation },\n };\n if (\n !params.providerId ||\n !params.handle ||\n !params.clientOrderId ||\n params.owner.providerId !== params.providerId\n ) {\n throw new Error(\n 'Chase cancellation reconciliation requires an exact handle, child and matching owner/provider',\n );\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n const ownership: ReconcileChaseOrderCancellationResult =\n provider.reconcileChaseOrderCancellation\n ? await provider.reconcileChaseOrderCancellation(params)\n : {\n status: 'unsupported',\n providerId: params.providerId,\n handle: params.handle,\n reason:\n 'Chase cancellation reconciliation is unavailable for this provider',\n };\n if (this.#providers.get(params.providerId) !== provider) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_LIFECYCLE_STALE);\n }\n return ownership;\n }\n\n /**\n * Attempt to suspend every provider and reject after all attempts settle if\n * any provider could not suspend safely. Successful providers remain\n * suspended, so callers may retry to reconcile a partial failure.\n *\n * @returns Chase snapshots after every provider suspends successfully.\n * @throws ChaseOrderSuspensionError if any active provider fails. The error\n * includes successful snapshots and each failed provider ID.\n */\n async suspendChaseOrders(): Promise<ChaseOrder[]> {\n const providers = this.#getActiveProviders();\n const results = await Promise.allSettled(\n providers.map(async ([providerId, provider]) =>\n provider.suspendChaseOrders\n ? (await provider.suspendChaseOrders()).map((order) => ({\n ...order,\n providerId,\n }))\n : [],\n ),\n );\n\n const snapshots: ChaseOrder[] = [];\n const failures: {\n providerId: PerpsProviderType;\n reason: unknown;\n }[] = [];\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n snapshots.push(...result.value);\n } else {\n failures.push({\n providerId: providers[index][0],\n reason: result.reason,\n });\n }\n });\n if (failures.length > 0) {\n throw new ChaseOrderSuspensionError({\n suspendedOrders: snapshots,\n failures,\n });\n }\n return snapshots;\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 carryProviderErrorCause(result, { ...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 carryProviderErrorCause(result, { ...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 carryProviderErrorCause(result, { ...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 carryProviderErrorCause(result, { ...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 * Aggregate parked manual TP/SL recoveries from every underlying\n * provider implementing the durable-settlement contract. Storage\n * errors PROPAGATE — a corrupt store degrading to \"nothing pending\"\n * would hide an under-protected position.\n *\n * @returns Pending manual-recovery entries across providers.\n */\n async getPendingManualRecoveries(): Promise<PerpsPendingManualRecovery[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getPendingManualRecoveries\n ? (await provider.getPendingManualRecoveries()).map((row) => ({\n ...row,\n providerId,\n }))\n : [],\n ),\n );\n return results.flat();\n }\n\n /**\n * Review native attached groups on providers implementing that capability.\n *\n * @returns Provider-labelled venue observations without financial actions.\n */\n async reviewAttachedOrderGroups(): Promise<AttachedOrderGroup[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n ((await provider.reviewAttachedOrderGroups?.()) ?? []).map((group) => ({\n ...group,\n providerId,\n })),\n ),\n );\n return results.flat();\n }\n\n /**\n * List stored attached identities across active providers.\n *\n * @returns Provider-labelled groups without financial actions.\n */\n async getAttachedOrderGroups(): Promise<AttachedOrderGroup[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n ((await provider.getAttachedOrderGroups?.()) ?? []).map((group) => ({\n ...group,\n providerId,\n })),\n ),\n );\n return results.flat();\n }\n\n /**\n * Aggregate recovered-dispatch outcomes from every underlying provider\n * implementing the durable-settlement contract.\n *\n * @returns Pending recovered-dispatch outcomes across providers.\n */\n async getRecoveredDispatches(): Promise<PerpsRecoveredDispatch[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n provider.getRecoveredDispatches\n ? (await provider.getRecoveredDispatches()).map((row) => ({\n ...row,\n providerId,\n }))\n : [],\n ),\n );\n return results.flat();\n }\n\n /**\n * List durable Scale groups from providers that expose group ownership.\n * @returns Owned groups with their provider routes.\n */\n async getScaleOrderGroups(): Promise<ScaleOrderGroup[]> {\n const groups = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) =>\n ((await provider.getScaleOrderGroups?.()) ?? []).map((group) => ({\n ...group,\n providerId,\n })),\n ),\n );\n return groups.flat();\n }\n\n /**\n * Review one selected provider's Scale groups without replaying placement.\n * @param params - Explicit provider route.\n * @param params.providerId - Owning provider.\n * @returns Reconciled durable groups.\n */\n async reviewScaleOrderGroups(\n params: { providerId?: PerpsProviderType } = {},\n ): Promise<ScaleOrderGroup[]> {\n if (!params.providerId) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_NOT_FOUND);\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n if (!provider.reviewScaleOrderGroups) {\n throw new Error(PERPS_ERROR_CODES.PROVIDER_NOT_AVAILABLE);\n }\n return provider.reviewScaleOrderGroups(params);\n }\n\n /**\n * Execute an explicit successor for one selected durable protection obligation.\n *\n * @param params - Owning provider, opaque source ID and new protection intent.\n * @returns Settled, unresolved or unsupported recovery result.\n */\n async resolveRecoveryProtection(\n params: ResolveRecoveryProtectionParams,\n ): Promise<PerpsRecoveryProtectionResult> {\n if (!params.providerId) {\n throw new Error('Protection recovery requires an explicit provider');\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return (\n provider.resolveRecoveryProtection?.(params) ?? {\n status: 'unsupported',\n providerId: params.providerId,\n success: false,\n error: 'Selected protection recovery is unavailable for this provider',\n }\n );\n }\n\n /**\n * Review only the selected recovery owner, never an aggregated account snapshot.\n *\n * @param params - Explicit owning-provider route.\n * @param params.providerId - Provider to review.\n * @returns That provider's strict snapshot or unsupported capability.\n */\n async reviewRecoveryVenue(\n params: { providerId?: PerpsProviderType } = {},\n ): Promise<PerpsRecoveryVenueReview> {\n if (!params.providerId) {\n throw new Error('Recovery review requires an explicit provider');\n }\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return (\n provider.reviewRecoveryVenue?.(params) ?? {\n status: 'unsupported',\n providerId: params.providerId,\n reason:\n 'Authoritative recovery review is unavailable for this provider',\n }\n );\n }\n\n /**\n * Reconcile every active provider without financial writes. Unsupported\n * providers contribute their local listing, or an empty list. Any failure\n * rejects the entire result, so partial evidence is never reported as complete.\n *\n * @returns Newly scoped pending and recovered dispatches across providers.\n */\n async reconcileRecoveredDispatches(): Promise<PerpsRecoveredDispatch[]> {\n const results = await Promise.all(\n this.#getActiveProviders().map(async ([providerId, provider]) => {\n const rows = provider.reconcileRecoveredDispatches\n ? await provider.reconcileRecoveredDispatches()\n : ((await provider.getRecoveredDispatches?.()) ?? []);\n return rows.map((row) => ({ ...row, providerId }));\n }),\n );\n return results.flat();\n }\n\n /**\n * Acknowledge ONE recovered-dispatch outcome by its stable id on\n * whichever underlying provider owns it.\n *\n * @param recoveryId - Stable id from {@link getRecoveredDispatches}.\n */\n async acknowledgeRecoveredDispatch(recoveryId: string): Promise<void> {\n const capable = this.#getActiveProviders().filter(\n ([, provider]) =>\n typeof provider.acknowledgeRecoveredDispatch === 'function',\n );\n if (capable.length === 0) {\n throw new Error(\n 'No perps provider has recovered dispatches to acknowledge',\n );\n }\n let lastError: Error | null = null;\n for (const [, provider] of capable) {\n try {\n await provider.acknowledgeRecoveredDispatch?.(recoveryId);\n return;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n }\n throw lastError as Error;\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 const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.calculateLiquidationPrice(params);\n }\n\n async calculateMaintenanceMargin(\n params: MaintenanceMarginParams,\n ): Promise<number> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.calculateMaintenanceMargin(params);\n }\n\n async getMaxLeverage(\n asset: string,\n providerId?: PerpsProviderType,\n ): Promise<number> {\n const [, provider] = this.#getProviderOrDefault(providerId);\n return provider.getMaxLeverage(asset);\n }\n\n async calculateFees(\n params: FeeCalculationParams,\n ): Promise<FeeCalculationResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.calculateFees(params);\n }\n\n async previewPositionModify(\n params: PositionModifyPreviewParams,\n ): Promise<PositionModifyPreviewResult> {\n const [, provider] = this.#getProviderOrDefault(\n params.providerId ?? params.position.providerId,\n );\n return provider.previewPositionModify(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 /**\n * Stream TWAP updates from the default provider only.\n *\n * Unlike `getTwapOrders`, this does not fan out: HyperLiquid is the sole\n * venue with a native TWAP push channel today, so a mux would add\n * multi-provider merge semantics with nothing to merge. Callers needing the\n * aggregated view across providers keep using `getTwapOrders`.\n *\n * @param params - Subscription parameters including callback and account ID.\n * @returns A cleanup function; a no-op when the default provider has no\n * native TWAP push channel.\n */\n subscribeToTwapOrders(params: SubscribeTwapOrdersParams): () => void {\n const defaultProviderId = this.#defaultProvider;\n // Read the map directly: #getDefaultProvider throws when the default is\n // unavailable, and this method's contract is a no-op cleanup, not a throw.\n const provider = this.#providers.get(defaultProviderId);\n if (!provider?.subscribeToTwapOrders) {\n return () => {\n // No-op: default provider exposes no native TWAP push channel\n };\n }\n return provider.subscribeToTwapOrders({\n ...params,\n // Stamp the same way getTwapOrders does, so swapping a poll for this\n // subscription does not silently drop providerId from every schedule.\n callback: (twapOrders, isSnapshot) =>\n params.callback(\n twapOrders.map((order) => ({\n ...order,\n providerId: defaultProviderId,\n })),\n isSnapshot,\n ),\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 setUserFeeResolution(resolution: PerpsFeeResolution | undefined): void {\n this.#providers.forEach((provider) => {\n if (provider.setUserFeeResolution) {\n provider.setUserFeeResolution(resolution);\n } else if (provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(resolution?.discountBips);\n }\n });\n }\n\n /**\n * Approve the dedicated subscription builder on the HyperLiquid provider.\n *\n * @deprecated ADR 0064 replaced the dedicated subscription builder with cloid\n * marking on the standard builder; nothing on the order path reads this.\n * @returns Whether the builder is approved.\n */\n async approveSubscriptionBuilderFee(): Promise<boolean> {\n const provider =\n this.#providers.get('hyperliquid') ?? this.#getDefaultProvider();\n return provider.approveSubscriptionBuilderFee\n ? provider.approveSubscriptionBuilderFee()\n : false;\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 /**\n * Prepare every provider in turn, so a hardware wallet sees one prompt at a\n * time. A provider that throws is logged with its provider ID and counts as\n * not ready.\n *\n * @returns The not-ready result of the first provider, in registration\n * order, that is not ready; else ready.\n */\n async prepareTradingWallet(): Promise<ReadyToTradeResult> {\n let notReady: ReadyToTradeResult | undefined;\n for (const [providerId, provider] of this.#getActiveProviders()) {\n let result: ReadyToTradeResult | undefined;\n try {\n result = await provider.prepareTradingWallet?.();\n } catch (caughtError) {\n // Providers report their own failures, so a throw here is unexpected.\n const error = ensureError(\n caughtError,\n 'AggregatedPerpsProvider.prepareTradingWallet',\n );\n // The provider's own network: Lighter can be pinned to testnet.\n const isProviderTestnet = isProviderOnTestnet(\n providerId,\n this.#isTestnet,\n );\n this.#deps.logger.error(error, {\n tags: {\n feature: PERPS_CONSTANTS.FeatureName,\n provider: providerId,\n ...(isProviderTestnet !== undefined && {\n network: isProviderTestnet ? 'testnet' : 'mainnet',\n }),\n },\n context: {\n name: 'AggregatedPerpsProvider',\n data: { method: 'prepareTradingWallet', providerId },\n },\n });\n result = { ready: false, error: error.message };\n }\n if (result && !result.ready) {\n notReady ??= result;\n }\n }\n return notReady ?? { ready: true };\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HyperLiquidProvider.d.ts","sourceRoot":"","sources":["../../src/providers/HyperLiquidProvider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"HyperLiquidProvider.d.ts","sourceRoot":"","sources":["../../src/providers/HyperLiquidProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -4884,7 +4884,7 @@ export class HyperLiquidProvider {
|
|
|
4884
4884
|
error: isMinimumOrderError &&
|
|
4885
4885
|
!params.reduceOnly &&
|
|
4886
4886
|
!isStrategyOrderType(params.orderType)
|
|
4887
|
-
? new PerpsControllerError(PERPS_ERROR_CODES.ORDER_SIZE_MIN, PERPS_ERROR_CODES.ORDER_SIZE_MIN)
|
|
4887
|
+
? new PerpsControllerError(PERPS_ERROR_CODES.ORDER_SIZE_MIN, PERPS_ERROR_CODES.ORDER_SIZE_MIN, undefined, { cause: error })
|
|
4888
4888
|
: error,
|
|
4889
4889
|
symbol: params.symbol,
|
|
4890
4890
|
orderType: params.orderType,
|