import { IInitData, UserResponse, AccountInfo, NetworkInfo } from './types.mjs';
export { UserResponseStatus } from './types.mjs';
import { IRequestData, EvmSDKEventType, EvmSDKEventPayload } from './message/types.mjs';
export { EvmSDKEvent } from './message/types.mjs';
export { isLuffa, isLuffaMiniProgram, isLuffaMiniProgramWebview } from './utils/index.mjs';

interface Metadata {
    title: string;
    url: string;
    origin: string;
    icon: string;
    gameId: string;
    userId: string;
    walletAddress: string;
}

declare enum MethodName {
    CONNECT = "connect",
    GETACCOUNT = "getAccount",
    DISCONNECT = "disconnect",
    CURRENT_CHAIN = "currentChain",
    NETWORK_CHANGE = "luffa_switchChain",
    SIGN_MESSAGE = "signMessage",
    SEND_TRANSACTION = "sendTransaction",
    SIGN_AND_SUBMIT_TRANSACTION = "signAndSubmitTransaction",
    SIGN_TRANSACTION = "signTransaction",
    SIGN_BUILD_TRANSACTION = "signBuildTransaction",
    EVM_APPROVE = "evmApprove",
    ACCOUNT_CHANGE = "accountChange"
}
declare class LuffaEvmSdk {
    static readonly version: string;
    private static _instance;
    private message;
    private _metadata;
    private _initData;
    private accountAddress;
    static getIninData: () => IInitData;
    static getAccountAddress: () => string | null;
    static setAccountAddress: (accountAddress: string | null) => void;
    constructor(initData: IInitData);
    private initConfig;
    sendTransaction(params: any): Promise<any>;
    private getMetadata;
    request: (data: IRequestData, callback?: (data: unknown) => void) => Promise<any>;
    luffa_switchChain: (data: IRequestData) => Promise<string | {
        status: string;
    }>;
    currentChain: () => Promise<string | {
        status: string;
    }>;
    getAccount: () => Promise<string[]>;
    connect: () => Promise<[string]>;
    disconnect: (callback?: (data: unknown) => void) => Promise<void>;
    on: <K extends EvmSDKEventType>(methodName: K, callback: (payload: EvmSDKEventPayload<K>) => void) => void;
    off: <K extends EvmSDKEventType>(methodName: K, callback?: (payload: EvmSDKEventPayload<K>) => void) => void;
    signAndSubmitTransaction: (data: IRequestData, methodName?: MethodName) => Promise<any>;
    signTransaction: (params: any, methodName?: MethodName) => Promise<any>;
    signMessage: (data: IRequestData, callback?: (data: unknown) => void) => Promise<UserResponse<any>>;
    onAccountChange: (callback: (data: AccountInfo) => void) => void;
    onNetworkChange: (callback: (data: NetworkInfo) => void) => void;
}

export { AccountInfo, LuffaEvmSdk, type Metadata, MethodName, UserResponse };
