import type { BankAccountAddressObfuscated, MobileWalletAddressObfuscated } from "../common.js";
interface BaseLocation<Type extends 'chain' | 'bank-account' | 'mobile-wallet'> {
    type: Type;
}
export interface BankLocation extends BaseLocation<'bank-account'> {
    account: {
        type: BankAccountType;
    };
}
export interface MobileWalletLocation extends BaseLocation<'mobile-wallet'> {
    account: {
        type: MobileWalletAccountType;
    };
}
interface BaseChainLocation<Data> extends BaseLocation<'chain'> {
    type: 'chain';
    chain: Data;
}
export type ChainLocation = {
    type: 'chain';
    chain: {
        type: 'keeta';
        /**
         * The network ID representing the Keeta network to interact with
         */
        networkId: bigint;
    } | {
        type: 'evm';
        /**
         * The chain ID representing the EVM-based network to interact with
         */
        chainId: bigint;
    } | {
        type: 'solana';
        /**
         * The genesis hash representing Solana network/cluster to interact with
         */
        genesisHash: string;
    } | {
        type: 'bitcoin';
        /**
         * The "magic bytes" representing the bitcoin network to interact with
         */
        magicBytes: string;
    } | {
        type: 'tron';
        /**
         * The network alias representing the Tron network to interact with
         * Note: this is not the chain ID, but a human-readable alias because tron does not use chain/network IDs or any similar way to differentiate networks
         */
        networkAlias: 'mainnet' | 'shasta' | 'nile' | `custom:${string}`;
    };
};
export type ChainLocationType = ChainLocation['chain']['type'];
export type PickChainLocation<T extends ChainLocationType = ChainLocationType> = BaseChainLocation<Extract<ChainLocation['chain'], {
    type: T;
}>>;
export declare function isChainLocation<T extends ChainLocationType>(input: AssetLocation, chainType?: T): input is PickChainLocation<T>;
export type AssetLocation = ChainLocation | BankLocation | MobileWalletLocation;
export type BankAccountType = BankAccountAddressObfuscated['accountType'];
export type MobileWalletAccountType = MobileWalletAddressObfuscated['accountType'];
type ChainLocationIDType = {
    [K in 'keeta' | 'evm']: bigint;
} & {
    [K in 'solana' | 'bitcoin' | 'tron']: string;
};
export type ChainLocationString<T extends ChainLocationType = ChainLocationType> = {
    [K in T]: `chain:${K}:${ChainLocationIDType[K]}`;
}[T];
export type AssetLocationString = ChainLocationString | `bank-account:${BankAccountType}` | `mobile-wallet:${MobileWalletAccountType}`;
export type AssetLocationLike = AssetLocation | AssetLocationString;
export type AssetLocationInput = AssetLocation | AssetLocationString;
export type AssetLocationCanonical = AssetLocationString;
export declare function convertAssetLocationToString(input: AssetLocationLike): AssetLocationString;
export declare function toAssetLocationFromString(input: string): AssetLocation;
export declare function convertAssetLocationInputToCanonical(input: AssetLocationInput): AssetLocationCanonical;
export declare function toAssetLocation(input: AssetLocationInput): AssetLocation;
export declare function isAssetLocationEqual(a: AssetLocationInput, b: AssetLocationInput): boolean;
export {};
//# sourceMappingURL=location.d.ts.map