import { AuthenticationResponseJSON, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from '@simplewebauthn/types';
/**
 * Server configuration object
 */
export interface ServerConfig {
    serverUrl: string;
    apiKey: string;
}
/**
 * Encrypted share object
 */
export interface EncryptedShare {
    iv: number[];
    data: number[];
}
/**
 * Secret question object
 */
export interface SecretQuestion {
    id: string;
    question: string;
}
/**
 * User object
 */
export interface User {
    id: string;
    email: string;
    credential: UserCredential;
}
/**
 * User credential object
 */
export interface UserCredential {
    id: string;
    authCredentialId: string;
    publicKey: string;
    serverShare: EncryptedShare;
    lastUsedAt: string;
}
/**
 * Registration start response object
 */
export interface RegistrationStartResponse {
    deviceId: string;
    deviceSecret: string;
    options: PublicKeyCredentialCreationOptionsJSON;
}
/**
 * Registration complete response object
 */
export interface RegistrationCompleteResponse {
    userId: string;
    email: string;
    credentialId: string;
    token: string;
}
/**
 * Authentication start response object
 */
export interface AuthenticationStartResponse {
    userId: string;
    email: string;
    credentialId: string;
    serverShare: EncryptedShare;
    options: PublicKeyCredentialRequestOptionsJSON;
    prfSalt?: string;
    backupServerShare?: EncryptedShare;
    backupShareCid?: string;
    secretQuestion?: SecretQuestion;
}
/**
 * Authentication complete response object
 */
export interface AuthenticationCompleteResponse {
    userId: string;
    email: string;
    credentialId: string;
    token: string;
}
/**
 * Set server configuration for user module
 * @param config - Configuration object containing server URL and API key
 */
export declare function setServerConfig(config: ServerConfig): void;
/**
 * Check if a user exists by email
 * @param email - The user's email address
 * @returns Promise resolving to a boolean indicating if the user exists
 */
export declare function checkUserExists(email: string): Promise<boolean>;
/**
 * Start the authentication process for a user
 * @param email - The user's email address
 * @param credentialId - The user's credential ID (optional)
 * @param deviceToken - The device token for the user (optional)
 * @returns Authentication options and server data
 */
export declare function startUserAuthentication(email: string, credentialId?: string, deviceToken?: string): Promise<AuthenticationStartResponse>;
/**
 * Complete the authentication process
 * @param credentialId - The user's credential ID
 * @param authenticationResponse - The WebAuthn response from the authenticator
 * @returns Authentication completion data
 */
export declare function completeUserAuthentication(credentialId: string, authenticationResponse: AuthenticationResponseJSON): Promise<AuthenticationCompleteResponse>;
/**
 * Start the registration process for a new user
 * @param email - The user's email address
 * @param serverShare - The encrypted share for the server data
 * @param backupShare - The encrypted share for the backup data
 * @param secretQuestionId - The security question ID (optional)
 * @param deviceToken - The device token for the user (optional)
 * @returns Registration options and server data
 */
export declare function startUserRegistration(email: string, serverShare: EncryptedShare, backupShare: EncryptedShare, secretQuestionId?: number, deviceToken?: string): Promise<RegistrationStartResponse>;
/**
 * Complete the registration process
 * @param email - The user's email address
 * @param deviceServerShare - The encrypted share for the server data (using device passkey)
 * @param registrationResponse - The WebAuthn response from the authenticator
 * @param prfSalt - The PRF salt used for key derivation
 * @returns Registration completion data
 */
export declare function completeUserRegistration(email: string, deviceId: string, deviceServerShare: EncryptedShare, registrationResponse: any, prfSalt: string): Promise<RegistrationCompleteResponse>;
/**
 * Get user data.
 * @param email - The user's email address
 * @returns User data including credential details and encrypted server share
 */
export declare function getUserData(email: string): Promise<User>;
/**
 * Fetch the list of secret questions from the server
 * @returns Promise resolving to an array of SecretQuestion objects
 */
export declare function allSecretQuestions(): Promise<SecretQuestion[]>;
/**
 * Get the secret question for a specific user
 * @param email - The user's email address
 * @returns The secret question object or null if not found
 */
export declare function getSecretQuestion(email: string): Promise<SecretQuestion | null>;
