import { LoginMethodOrderOption } from '@privy-io/react-auth';

/**
 * The type of network that we are connected to (indentified by the genesis block)
 * */
type NETWORK_TYPE = 'main' | 'test' | 'solo';
/**
 * A model for the VechainThor network that we are connected to
 * @field `id` - Unique ID for this network
 * @field `defaultNet` - If the network is a default network
 * @field `name` - A name for this network
 * @field `type` - What type of network is it? `main, test, solo or custom`
 * @field `urls` - A list of URLs for this network
 * @field `currentUrl` - The current URL that we are connected to
 * @field `explorerUrl` - The explorer URL for this network
 * @field `genesis` - The genesis block for the network
 * @field `blockTime` - The time it takes to mine a block in milliseconds
 */
type Network = {
    id: string;
    defaultNet: boolean;
    name: string;
    type: NETWORK_TYPE;
    urls: string[];
    explorerUrl?: string;
    genesis: typeof genesises.main;
    blockTime: number;
};
declare const genesises: {
    readonly main: Connex.Thor.Block;
    readonly test: Connex.Thor.Block;
    readonly solo: Connex.Thor.Block;
    which(gid: string): "solo" | "main" | "test" | undefined;
};

type ENSRecords = {
    display?: string;
    description?: string;
    email?: string;
    url?: string;
    header?: string;
    notice?: string;
    location?: string;
    phone?: string;
    [key: string]: string | undefined;
};
type Wallet = {
    address: string;
    domain?: string;
    image?: string;
    isLoadingMetadata?: boolean;
    metadata?: ENSRecords;
} | null;
type SmartAccount = Wallet & {
    isDeployed: boolean;
    isActive: boolean;
    version: number | null;
};
type ConnectionSource = {
    type: 'privy' | 'wallet' | 'privy-cross-app';
    displayName: string;
};
/**
 * Data that the Privy user must sign in order to execute a transaction
 * by authorizing the Smart Account contract
 */
type ExecuteWithAuthorizationSignData = {
    domain: {
        name: string;
        version: string;
        chainId: number;
        verifyingContract: string;
    };
    types: {
        ExecuteWithAuthorization: {
            name: string;
            type: string;
        }[];
        EIP712Domain: {
            name: string;
            type: string;
        }[];
    };
    primaryType: string;
    message: {
        validAfter: number;
        validBefore: number;
        to: string | null | undefined;
        value: string;
        data: string;
    };
};
type ExecuteBatchWithAuthorizationSignData = {
    domain: {
        name: string;
        version: string;
        chainId: number;
        verifyingContract: string;
    };
    types: {
        ExecuteBatchWithAuthorization: {
            name: string;
            type: string;
        }[];
        EIP712Domain: {
            name: string;
            type: string;
        }[];
    };
    primaryType: string;
    message: {
        to: string[] | null | undefined;
        value: string[] | null | undefined;
        data: string[] | null | undefined;
        validAfter: number;
        validBefore: number;
        nonce: string;
    };
};
/**
 * ready: the user has not clicked on the button yet
 * pending: the user has clicked on the button and we're waiting for the transaction to be sent
 * waitingConfirmation: the transaction has been sent and we're waiting for the transaction to be confirmed by the chain
 * success: the transaction has been confirmed by the chain
 * error: the transaction has failed
 * unknown: the transaction receipt has failed to load
 */
type TransactionStatus = 'ready' | 'pending' | 'waitingConfirmation' | 'success' | 'error' | 'unknown';
type TransactionStatusErrorType = {
    type: 'SendTransactionError' | 'TxReceiptError' | 'RevertReasonError' | 'UserRejectedError';
    reason?: string;
};
/**
 * An enhanced clause with a comment and an abi
 * @param comment a comment to add to the clause
 * @param abi the abi of the contract to call
 */
type EnhancedClause = Connex.VM.Clause & {
    comment?: string;
    abi?: object;
};
type PrivyAppInfo = {
    id: string;
    name: string;
    logo_url: string;
    icon_url: string | null;
    terms_and_conditions_url: string;
    privacy_policy_url: string;
    theme: string;
    accent_color: string;
    wallet_auth: boolean;
    email_auth: boolean;
    google_oauth: boolean;
    twitter_oauth: boolean;
    url: string;
    website?: string;
};
type PrivyLoginMethod = LoginMethodOrderOption;
interface CrossAppConnectionCache {
    timestamp: number;
    ecosystemApp: {
        name: string;
        logoUrl?: string;
        appId: string;
        website?: string;
    };
}
declare enum NFTMediaType {
    IMAGE = "image",
    VIDEO = "video",
    UNKNOWN = "unknown",
    TEXT = "text"
}
declare enum VePassportUserStatus {
    NONE = "NONE",
    WHITELIST = "WHITELIST",
    BLACKLIST = "BLACKLIST"
}
type CURRENCY = "usd" | "gbp" | "eur";
declare const CURRENCY_SYMBOLS: Record<CURRENCY, string>;

declare const TOKEN_LOGOS: Record<string, string>;
declare const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element>;
declare const VECHAIN_PRIVY_APP_ID = "cm4wxxujb022fyujl7g0thb21";
declare const notFoundImage = "https://upload.wikimedia.org/wikipedia/commons/a/a3/Image-not-found.png";
declare enum TogglePassportCheck {
    WhitelistCheck = 1,
    BlacklistCheck = 2,
    SignalingCheck = 3,
    ParticipationScoreCheck = 4,
    GmOwnershipCheck = 5
}
declare const VECHAIN_KIT_STORAGE_KEYS: {
    NETWORK: string;
};
declare const ENV: {
    isDevelopment: boolean;
    isProduction: boolean;
};
declare const VECHAIN_KIT_MIXPANEL_TOKENS: {
    development: string;
    production: string;
};
declare const VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN: string;
declare const VECHAIN_KIT_MIXPANEL_PROJECT_NAME = "vechain-kit";
type PrivyEcosystemApp = {
    id: string;
    name: string;
    website: string;
};
declare const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[];
declare const VECHAIN_KIT_TERMS_CONFIG: {
    url: string;
    version: number;
    required: boolean;
    displayName: string;
};
declare const VECHAIN_KIT_COOKIES_CONFIG: {
    url: string;
    version: number;
    required: boolean;
    displayName: string;
};

export { type CURRENCY as C, DEFAULT_PRIVY_ECOSYSTEM_APPS as D, type EnhancedClause as E, type NETWORK_TYPE as N, type PrivyLoginMethod as P, type SmartAccount as S, TogglePassportCheck as T, VePassportUserStatus as V, type Wallet as W, type Network as a, type PrivyAppInfo as b, type TransactionStatus as c, type TransactionStatusErrorType as d, type ConnectionSource as e, type ENSRecords as f, NFTMediaType as g, type CrossAppConnectionCache as h, type ExecuteWithAuthorizationSignData as i, type ExecuteBatchWithAuthorizationSignData as j, CURRENCY_SYMBOLS as k, TOKEN_LOGOS as l, TOKEN_LOGO_COMPONENTS as m, VECHAIN_PRIVY_APP_ID as n, notFoundImage as o, VECHAIN_KIT_STORAGE_KEYS as p, ENV as q, VECHAIN_KIT_MIXPANEL_TOKENS as r, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN as s, VECHAIN_KIT_MIXPANEL_PROJECT_NAME as t, type PrivyEcosystemApp as u, VECHAIN_KIT_TERMS_CONFIG as v, VECHAIN_KIT_COOKIES_CONFIG as w };
