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
TypeScript
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;