UNPKG

userdo

Version:

A Durable Object base class that provides user authentication, per-user data storage, and real-time updates for Cloudflare Workers applications.

132 lines (131 loc) 3.73 kB
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;