import type { Chain } from "@wormhole-foundation/sdk-base";
import type { Attestation, AttestationId, ProtocolName, TokenId, TransactionId } from "@wormhole-foundation/sdk-definitions";
import type { QuoteWarning } from "./warnings.js";
export declare enum TransferState {
    Failed = -1,
    Created = 0,// The TokenTransfer object is created
    SourceInitiated = 1,// Source chain transactions are submitted
    SourceFinalized = 2,// Source chain transactions are finalized or whenever we have a message id
    InReview = 3,// Transfer is in review (e.g. held by governor)
    Attested = 4,// VAA or Circle Attestation is available
    Refunded = 5,// Transfer failed and was refunded on the source chain
    DestinationInitiated = 6,// Attestation is submitted to destination chain
    DestinationQueued = 7,// Transfer is queued on destination chain
    DestinationFinalized = 8
}
export type AttestationReceipt<PN extends ProtocolName = ProtocolName> = {
    id: AttestationId<PN>;
    attestation?: Attestation<PN>;
};
interface BaseTransferReceipt<SC extends Chain, DC extends Chain> {
    from: SC;
    to: DC;
    state: TransferState;
}
export interface CreatedTransferReceipt<SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.Created;
}
export interface SourceInitiatedTransferReceipt<SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.SourceInitiated;
    originTxs: TransactionId<SC>[];
}
export interface SourceFinalizedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.SourceFinalized;
    originTxs: TransactionId<SC>[];
    attestation: AT;
}
export interface InReviewTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.InReview;
    originTxs: TransactionId<SC>[];
    attestation: AT;
}
export interface AttestedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.Attested;
    originTxs: TransactionId<SC>[];
    attestation: Required<AT>;
}
export interface RefundedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.Refunded;
    originTxs: TransactionId<SC>[];
    refundTxs: TransactionId<SC>[];
    attestation: AT;
}
export interface RedeemedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.DestinationInitiated;
    originTxs: TransactionId<SC>[];
    attestation: Required<AT>;
    destinationTxs?: TransactionId<DC>[];
}
export interface DestinationQueuedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.DestinationQueued;
    originTxs: TransactionId<SC>[];
    attestation: Required<AT>;
    destinationTxs?: TransactionId<DC>[];
    queueReleaseTime: Date;
}
export interface CompletedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.DestinationFinalized;
    originTxs: TransactionId<SC>[];
    attestation: AT;
    destinationTxs?: TransactionId<DC>[];
}
export interface FailedTransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> extends BaseTransferReceipt<SC, DC> {
    state: TransferState.Failed;
    originTxs: TransactionId<SC>[];
    destinationTxs?: TransactionId<DC>[];
    attestation?: AT;
    error: string | Error;
}
export declare function isSourceInitiated<AT>(receipt: TransferReceipt<AT>): receipt is SourceInitiatedTransferReceipt;
export declare function isSourceFinalized<AT>(receipt: TransferReceipt<AT>): receipt is SourceFinalizedTransferReceipt<AT>;
export declare function isInReview<AT>(receipt: TransferReceipt<AT>): receipt is InReviewTransferReceipt<AT>;
export declare function isAttested<AT>(receipt: TransferReceipt<AT>): receipt is AttestedTransferReceipt<AT>;
export declare function isRefunded<AT>(receipt: TransferReceipt<AT>): receipt is RefundedTransferReceipt<AT>;
export declare function isRedeemed<AT>(receipt: TransferReceipt<AT>): receipt is RedeemedTransferReceipt<AT>;
export declare function isDestinationQueued<AT>(receipt: TransferReceipt<AT>): receipt is DestinationQueuedTransferReceipt<AT>;
export declare function isCompleted<AT>(receipt: TransferReceipt<AT>): receipt is CompletedTransferReceipt<AT>;
export declare function isFailed<AT>(receipt: TransferReceipt<AT>): receipt is FailedTransferReceipt<AT>;
export type TransferReceipt<AT, SC extends Chain = Chain, DC extends Chain = Chain> = FailedTransferReceipt<AT, SC, DC> | CreatedTransferReceipt<SC, DC> | SourceInitiatedTransferReceipt<SC, DC> | SourceFinalizedTransferReceipt<AT, SC, DC> | InReviewTransferReceipt<AT, SC, DC> | AttestedTransferReceipt<AT, SC, DC> | RefundedTransferReceipt<AT, SC, DC> | RedeemedTransferReceipt<AT, SC, DC> | DestinationQueuedTransferReceipt<AT, SC, DC> | CompletedTransferReceipt<AT, SC, DC>;
export interface TransferQuote {
    sourceToken: {
        token: TokenId;
        amount: bigint;
    };
    destinationToken: {
        token: TokenId;
        amount: bigint;
    };
    relayFee?: {
        token: TokenId;
        amount: bigint;
    };
    destinationNativeGas?: bigint;
    warnings?: QuoteWarning[];
    eta?: number;
    expires?: Date;
}
export {};
//# sourceMappingURL=types.d.ts.map