import '@eggjs/typebox-validate';
import { Type, type Static } from '@eggjs/typebox-validate/typebox';
import type { PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from '@simplewebauthn/typescript-types';
import { type EggContext, type EggAppConfig, type EggLogger } from 'egg';
import type { UserService } from '../../core/service/UserService.ts';
import { MiddlewareController } from '../middleware/index.ts';
declare const LoginRequestRule: Type.TObject<{
    hostname: Type.TOptional<Type.TString>;
}>;
type LoginRequest = Static<typeof LoginRequestRule>;
interface LoginPrepareResult {
    wanStatus: number;
    wanCredentialRegiOption?: PublicKeyCredentialCreationOptionsJSON;
    wanCredentialAuthOption?: PublicKeyCredentialRequestOptionsJSON;
}
interface 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.ts").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 {};
