import PrivyJS, { type OAuthProviderType } from '@privy-io/js-sdk-core';
import React, { type ReactNode } from 'react';
import { type FunkitUserInfoBase, PrivyLoginMethod } from '../consts/funkit';
type FarcasterAuthParams = Parameters<PrivyJS['auth']['farcaster']['authenticate']>[0];
type FarcasterCompletedStatusResponse = Extract<Awaited<ReturnType<PrivyJS['auth']['farcaster']['getFarcasterStatus']>>, {
    state: 'completed';
}>;
type FarcasterConnectionStatus = {
    isCompleted: true;
    fcMeta: FarcasterCompletedStatusResponse;
} | {
    isCompleted: false;
    fcMeta: unknown;
};
export declare const ERROR_MESSAGES: {
    readonly MISSING_LOGIN_CODES: "Missing login codes";
    readonly INVALID_LOGIN_METHOD: "Invalid login method";
    readonly INVALID_EMAIL: "Invalid email address";
    readonly FAILED_SEND_EMAIL: "Failed to send email";
    readonly PRIVY_NOT_INITIALIZED: "Privy not initialized";
    readonly PRIVY_PROVIDER_NOT_INITIALIZED: "Privy wallet provider not initialized";
    readonly PRIVY_USER_NOT_INITIALIZED: "Privy user not initialized";
    readonly FARCASTER_NOT_INITIALIZED: "Unable to initialize Farcaster login";
};
type PrivyLoginParams = {
    firstLoginCode?: string;
    secondLoginCode?: string;
    alternateCodeMeta?: FarcasterAuthParams;
    inputLoginMethod: PrivyLoginMethod;
};
interface FunkitWeb2LoginParams extends Omit<PrivyLoginParams, 'inputLoginMethod'> {
    chainId: number;
    inputLoginMethod?: PrivyLoginMethod;
}
interface FunkitWeb2ContextType {
    isSendingOtpEmail: boolean;
    isGeneratingFcUri: boolean;
    handleSendOtpEmail: (emailAddress: string) => Promise<{
        success: boolean;
        error: string;
    }>;
    handleOauthRedirect: (provider: OAuthProviderType) => Promise<void>;
    handleFunkitWeb2Login: ({ chainId, firstLoginCode, secondLoginCode, alternateCodeMeta, inputLoginMethod, }: FunkitWeb2LoginParams) => Promise<boolean>;
    isLoggingIn: boolean;
    loginErrorMessage: string;
    clearLoginError: () => void;
    handleFunkitWeb2Logout: () => Promise<void>;
    handleGenerateFcUri: () => Promise<{
        success: boolean;
        error: string;
        channelToken: string;
        connectUri: string;
    }>;
    getFcConnectionStatus: (channelToken: string) => Promise<FarcasterConnectionStatus>;
    web2UserInfo: FunkitUserInfoBase;
}
export declare const AUTH_PROVIDER = "privy.io";
interface FunkitWeb2ProviderProps {
    children: ReactNode;
}
/**
 * Handles web2 signins via Privy
 */
declare const FunkitWeb2Provider: React.FC<FunkitWeb2ProviderProps>;
declare const useFunkitWeb2Login: () => FunkitWeb2ContextType;
export { FunkitWeb2Provider, useFunkitWeb2Login };
