import { Router } from 'express';
import { type OAuthProviderCallback } from './oauth.ts';
import { type JwtPayload } from './JWT.ts';
export type MayHaveUpgradeToken = {
    upgradingToken?: JwtPayload;
};
export type RegisterWithEmailAndPasswordCallback<T = any> = (email: string, password: string, options: T & MayHaveUpgradeToken) => Promise<unknown>;
export type RegisterAnonymouslyCallback<T = any> = (options: T) => Promise<unknown>;
export type FindUserByEmailCallback = (email: string) => Promise<(unknown & {
    password: string;
}) | null | undefined>;
export type SendEmailConfirmationCallback = (email: string, html: string, confirmLink: string) => Promise<unknown>;
export type EmailConfirmedCallback = (email: string) => Promise<unknown>;
export type ForgotPasswordCallback = (email: string, html: string, resetLink: string) => Promise<boolean | unknown>;
export type ResetPasswordCallback = (email: string, password: string) => Promise<unknown>;
export type ParseTokenCallback = (token: JwtPayload) => Promise<unknown> | unknown;
export type GenerateTokenCallback = (userdata: unknown) => Promise<unknown>;
export type HashPasswordCallback = (password: string) => Promise<string>;
export interface AuthSettings {
    onFindUserByEmail: FindUserByEmailCallback;
    onRegisterWithEmailAndPassword: RegisterWithEmailAndPasswordCallback;
    onRegisterAnonymously: RegisterAnonymouslyCallback;
    onSendEmailConfirmation?: SendEmailConfirmationCallback;
    onEmailConfirmed?: EmailConfirmedCallback;
    onForgotPassword?: ForgotPasswordCallback;
    onResetPassword?: ResetPasswordCallback;
    onOAuthProviderCallback?: OAuthProviderCallback;
    onParseToken?: ParseTokenCallback;
    onGenerateToken?: GenerateTokenCallback;
    onHashPassword?: HashPasswordCallback;
}
export declare const auth: {
    /**
     * Backend URL (used for OAuth callbacks and email confirmation links)
     */
    backend_url: string;
    /**
     * OAuth utilities
     */
    oauth: {
        defaults: import("grant").GrantProvider & {
            prefix: never;
        };
        prefix: string;
        providers: { [providerId in import("./oauth.ts").OAuthProviderName]: import("./oauth.ts").OAuthProviderConfig; };
        addProvider: (providerId: import("./oauth.ts").OAuthProviderName, config: import("./oauth.ts").OAuthProviderConfig) => void;
        onCallback: (callback: OAuthProviderCallback) => void;
        routes: (callback?: OAuthProviderCallback) => Router;
        transformProfileData(raw: any): any;
    };
    settings: AuthSettings;
    prefix: string;
    /**
     * Middleware that verifies JsonWebTokens.
     * Works with both Express and better-call.
     *
     * Express: sets `req.auth`
     * better-call: decoded JWT payload is available in `ctx.context.auth`
     */
    middleware: <T = JwtPayload>(options?: import("jsonwebtoken").VerifyOptions) => import("./JWT.ts").JWTAuthMiddleware<T>;
    routes: (settings?: Partial<AuthSettings>) => Router;
};
