/// <reference types="react" />
import { ApolloClient, NormalizedCacheObject } from '@apollo/client';
import { CHAINS, Constants } from '@futureverse/experience-sdk';
import { type Storage } from 'wagmi';
import { Xumm } from 'xumm';
import type { FutureverseAuthClient, UserSession } from '@futureverse/auth';
export type SupportedChains = Exclude<keyof typeof CHAINS, 'XRPL'>;
export type RequiredChains = [SupportedChains, ...SupportedChains[]];
export type ProviderApiKeys = {
    alchemy?: string;
};
export type Web3ProviderProps = React.PropsWithChildren<{
    authClient: FutureverseAuthClient;
    requiredChains: RequiredChains;
    walletConnectProjectId: string;
    ethereumProviderApiKeys?: ProviderApiKeys;
    ssr?: boolean;
    storage?: Storage;
    flow?: 'popup' | 'redirect';
}>;
export type LoginFn = (opts?: {
    /** Any state data provided by the client in the Authorization request. It will be returned unchanged to the client. */
    customClientState?: unknown;
}) => void;
export type LogoutFn = (opts?: {
    onBeforeRedirect?: () => Promise<void>;
}) => Promise<void>;
export type ProviderContext = {
    userSession: UserSession | null;
    login: LoginFn;
    logout: LogoutFn;
    apolloClient: ApolloClient<NormalizedCacheObject>;
    authClient: FutureverseAuthClient;
    CONSTANTS: Constants;
    xamanClient: Xumm;
    error: Error | null;
    isFetchingSession: boolean;
};
export declare const context: import("react").Context<ProviderContext | null>;
export declare function useFutureverse(): ProviderContext;
