import { EggContext } from '@eggjs/tegg';
import { EggLogger, EggAppConfig } from 'egg';
import { Static } from '@sinclair/typebox';
import type { PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from '@simplewebauthn/typescript-types';
import { UserService } from '../../core/service/UserService';
import { MiddlewareController } from '../middleware';
declare const LoginRequestRule: import("@sinclair/typebox").TObject<{
    hostname: import("@sinclair/typebox").TString;
}>;
type LoginRequest = Static<typeof LoginRequestRule>;
type LoginPrepareResult = {
    wanStatus: number;
    wanCredentialRegiOption?: PublicKeyCredentialCreationOptionsJSON;
    wanCredentialAuthOption?: PublicKeyCredentialRequestOptionsJSON;
};
type LoginImplementRequest = {
    accData: {
        username: string;
        password: string;
    };
    wanCredentialRegiData: unknown;
    wanCredentialAuthData: unknown;
    needUnbindWan: boolean;
};
export declare class WebauthController extends MiddlewareController {
    private cacheAdapter;
    private authAdapter;
    protected logger: EggLogger;
    protected config: EggAppConfig;
    protected userService: UserService;
    login(ctx: EggContext, loginRequest: LoginRequest): Promise<import("../../common/typing").AuthUrlResult>;
    loginRender(ctx: EggContext, sessionId: string): Promise<"<h1>😭😭😭 Session not found, please try again on your command line 😭😭😭</h1>" | undefined>;
    loginImplement(ctx: EggContext, sessionId: string, loginImplementRequest: LoginImplementRequest): Promise<{
        ok: boolean;
        message: string;
    } | {
        ok: boolean;
        message?: undefined;
    }>;
    loginPrepare(ctx: EggContext, sessionId: string, name: string): Promise<LoginPrepareResult | {
        ok: boolean;
        message: string;
    }>;
    ssoRequest(ctx: EggContext, sessionId: string): Promise<{
        success: boolean;
    }>;
    loginRequestSuccess(ctx: EggContext): Promise<string>;
    loginDone(ctx: EggContext, sessionId: string): Promise<{
        message: string;
        token?: undefined;
    } | {
        token: string;
        message?: undefined;
    }>;
}
export {};
