import type { Chain, Network } from "@wormhole-foundation/sdk-base";
import type { AttestationId, ChainContext, CircleTransferDetails, GatewayTransferDetails, ProtocolName, Signer, TokenTransferDetails, TxHash } from "@wormhole-foundation/sdk-definitions";
import type { AttestationReceipt, TransferQuote, TransferReceipt, TransferState } from "../types.js";
import type { Wormhole } from "../wormhole.js";
export type TransferRequest<PN extends ProtocolName = ProtocolName> = PN extends "TokenBridge" | "AutomaticTokenBridge" ? TokenTransferDetails : PN extends "CircleBridge" | "AutomaticCircleBridge" ? CircleTransferDetails : PN extends "IbcBridge" ? GatewayTransferDetails : never;
export interface TransferProtocol<PN extends ProtocolName> {
    isTransferComplete<N extends Network, C extends Chain>(toChain: ChainContext<N, C>, attestation: AttestationId<PN>): Promise<boolean>;
    validateTransferDetails<N extends Network>(wh: Wormhole<N>, transfer: TransferRequest<PN>): Promise<void>;
    quoteTransfer(xfer: WormholeTransfer<PN>): Promise<TransferQuote>;
    getReceipt(xfer: WormholeTransfer<PN>): TransferReceipt<AttestationReceipt<PN>>;
    track<N extends Network>(wh: Wormhole<N>, xfer: TransferReceipt<AttestationReceipt<PN>>, timeout: number): AsyncGenerator<TransferReceipt<AttestationReceipt<PN>>>;
}
export interface WormholeTransfer<PN extends ProtocolName> {
    transfer: TransferRequest<PN>;
    getTransferState(): TransferState;
    initiateTransfer(signer: Signer): Promise<TxHash[]>;
    fetchAttestation(timeout?: number): Promise<AttestationId[]>;
    completeTransfer(signer: Signer): Promise<TxHash[]>;
}
//# sourceMappingURL=wormholeTransfer.d.ts.map