import type { Authenticator, StrategyAction, StrategyActionName, StrategyActions } from "../Authenticator";
import type { Hono } from "hono";
import type { Static, TSchema } from "@sinclair/typebox";
import { type TObject } from "../../../core/utils";
export type StrategyMode = "form" | "external";
export declare abstract class Strategy<Schema extends TSchema = TSchema> {
    protected config: Static<Schema>;
    type: string;
    name: string;
    mode: StrategyMode;
    protected actions: StrategyActions;
    constructor(config: Static<Schema>, type: string, name: string, mode: StrategyMode);
    protected registerAction<S extends TObject = TObject>(name: StrategyActionName, schema: S, preprocess: StrategyAction<S>["preprocess"]): void;
    protected abstract getSchema(): Schema;
    abstract getController(auth: Authenticator): Hono;
    getType(): string;
    getMode(): StrategyMode;
    getName(): string;
    toJSON(secrets?: boolean): {
        type: string;
        config: Static<Schema> | {} | undefined;
    };
    getActions(): StrategyActions;
}
