/** * FunCaptcha (Arkose Labs) solver — API-level approach. * * Ported and integrated from: * - noahcoolboy/funcaptcha (BDA fingerprint generation, session/challenge API, crypto, api-breakers) * - useragents/Funcaptcha-Audio-Solver (audio challenge flow + speech-to-text) * * This module does NOT require a browser. It speaks directly to the Arkose * Labs API: generate BDA → get token → get challenge → solve (audio or * vision). The solved token is then injected back into the page. * * When audio mode is unavailable or denied, falls back to vision-based * solving through the existing visionClassify pipeline. */ export declare function setActivePersona(index: number): void; interface TokenInfo { token: string; r: string; pk: string; dc: string; at: string; cdn_url: string; surl: string; kbio: boolean; mbio: boolean; tbio: boolean; sup?: string; [key: string]: any; } export interface FuncaptchaOptions { publicKey: string; serviceUrl?: string; site?: string; dataBlob?: string; proxy?: string; userAgent?: string; visionFn?: (imageBase64: string, prompt: string) => Promise; } export interface FuncaptchaSolveResult { success: boolean; token?: string; error?: string; solveTime?: number; method?: 'audio' | 'vision' | 'suppressed'; } export declare class FuncaptchaSolver { private publicKey; private serviceUrl; private site?; private dataBlob?; private proxy?; private userAgent; private visionFn?; constructor(opts: FuncaptchaOptions); getToken(): Promise<{ token: string; tokenInfo: TokenInfo; mbio: boolean; }>; getChallenge(tokenStr: string, tokenInfo: TokenInfo): Promise; solveChallenge(challengeData: any, mbio: boolean): Promise; private tryAudioSolve; solve(): Promise; } export declare function extractPublicKey(frameUrl: string): string | null; export declare function extractServiceUrl(frameUrl: string): string; export {}; //# sourceMappingURL=FuncaptchaSolver.d.ts.map