import { type EvmMovableCollateralAdapter, type IToken, type TokenAmount, } from '@hyperlane-xyz/sdk'; import { type InventoryRoute, type MovableCollateralRoute, type Route, } from './IStrategy.js'; export type RebalancerType = 'movableCollateral' | 'inventory'; export interface ExecutionResult { route: R; success: boolean; error?: string; // messageId?: string; txHash?: string; // amountSent?: bigint; reason?: string; } export interface MovableCollateralExecutionResult extends ExecutionResult { messageId: string; } export interface InventoryExecutionResult extends ExecutionResult { messageId?: string; amountSent?: bigint; } export interface IRebalancer< R extends Route = Route, E extends ExecutionResult = ExecutionResult, > { readonly rebalancerType: RebalancerType; rebalance(routes: R[]): Promise; } export type IMovableCollateralRebalancer = IRebalancer< MovableCollateralRoute, MovableCollateralExecutionResult >; export type IInventoryRebalancer = IRebalancer< InventoryRoute, InventoryExecutionResult >; type PreparedOriginTokenAmount = TokenAmount; export type PreparedTransaction = { populatedTx: Awaited< ReturnType >; route: MovableCollateralRoute & { intentId: string }; originTokenAmount: PreparedOriginTokenAmount; };