import { DurableObject } from 'cloudflare:workers';
import { z } from 'zod';
import { UserDODatabase, TableOptions } from './database/index';
declare const UserSchema: z.ZodObject<{
    id: z.ZodString;
    email: z.ZodString;
    passwordHash: z.ZodString;
    salt: z.ZodString;
    createdAt: z.ZodString;
    refreshTokens: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    createdAt: string;
    id: string;
    email: string;
    passwordHash: string;
    salt: string;
    refreshTokens: string[];
}, {
    createdAt: string;
    id: string;
    email: string;
    passwordHash: string;
    salt: string;
    refreshTokens?: string[] | undefined;
}>;
type User = z.infer<typeof UserSchema>;
export interface Env {
    JWT_SECRET: string;
    USERDO: DurableObjectNamespace<UserDO>;
    ASSETS?: Fetcher;
}
export declare function hashEmailForId(email: string): Promise<string>;
export declare function getUserDO<T extends UserDO>(namespace: DurableObjectNamespace, email: string): Promise<T>;
export declare function migrateUserEmail({ env, oldEmail, newEmail }: {
    env: Env;
    oldEmail: string;
    newEmail: string;
}): Promise<{
    ok: boolean;
    error?: string;
}>;
export declare class UserDO extends DurableObject {
    protected state: DurableObjectState;
    protected storage: DurableObjectStorage;
    protected env: Env;
    protected database: UserDODatabase;
    constructor(state: DurableObjectState, env: Env);
    private checkRateLimit;
    signup({ email, password }: {
        email: string;
        password: string;
    }): Promise<{
        user: User;
        token: string;
        refreshToken: string;
    }>;
    login({ email, password }: {
        email: string;
        password: string;
    }): Promise<{
        user: User;
        token: string;
        refreshToken: string;
    }>;
    raw(): Promise<User>;
    init(user: User): Promise<{
        ok: boolean;
    }>;
    deleteUser(): Promise<{
        ok: boolean;
    }>;
    changePassword({ oldPassword, newPassword }: {
        oldPassword: string;
        newPassword: string;
    }): Promise<{
        ok: boolean;
    }>;
    resetPassword({ newPassword }: {
        newPassword: string;
    }): Promise<{
        ok: boolean;
    }>;
    generatePasswordResetToken(): Promise<{
        resetToken: string;
    }>;
    resetPasswordWithToken({ resetToken, newPassword }: {
        resetToken: string;
        newPassword: string;
    }): Promise<{
        ok: boolean;
    }>;
    verifyToken({ token }: {
        token: string;
    }): Promise<{
        ok: boolean;
        user?: {
            id: string;
            email: string;
        };
        error?: string;
    }>;
    set(key: string, value: unknown): Promise<{
        ok: boolean;
    }>;
    get(key: string): Promise<unknown>;
    refreshToken({ refreshToken }: {
        refreshToken: string;
    }): Promise<{
        token: string;
    }>;
    revokeRefreshToken({ refreshToken }: {
        refreshToken: string;
    }): Promise<{
        ok: boolean;
    }>;
    revokeAllRefreshTokens(): Promise<{
        ok: boolean;
    }>;
    logout(): Promise<{
        ok: boolean;
    }>;
    table<T extends z.ZodSchema>(name: string, schema: T, options?: TableOptions): import(".").GenericTable<z.TypeOf<T>>;
    get db(): SqlStorage;
    protected getCurrentUserId(): string;
    fetch(request: Request): Promise<Response>;
    webSocketMessage(ws: WebSocket, message: ArrayBuffer | string): Promise<void>;
    webSocketClose(ws: WebSocket, code: number, reason: string, wasClean: boolean): Promise<void>;
    protected broadcast(event: string, data: any): void;
}
declare const _default: {};
export default _default;
