userdo
Version:
A Durable Object base class for building applications on Cloudflare Workers.
89 lines (88 loc) • 3.21 kB
TypeScript
export type JwtPayload = {
sub: string;
email?: string;
exp?: number;
iat?: number;
type?: string;
};
/**
* Simple JWT decoding without verification
* @param token - JWT token to decode
* @returns Decoded payload or null if invalid
*/
export declare function decodeJWT(token: string): JwtPayload | null;
/**
* JWT verification with secret - extracted from UserDO implementation
* @param token - JWT token to verify
* @param secret - JWT secret for verification
* @returns Verification result with payload if valid
*/
export declare function verifyJWT(token: string, secret: string): Promise<{
ok: boolean;
payload?: JwtPayload;
error?: string;
}>;
/**
* Hash email for ID generation - matches UserDO internal implementation
* @param email - Email to hash
* @returns Promise resolving to hex hash string
*/
export declare function hashEmailForId(email: string): Promise<string>;
/**
* Check if token is expired
* @param payload - JWT payload
* @returns true if token is expired
*/
export declare function isTokenExpired(payload: JwtPayload): boolean;
/**
* Extract email from token
* @param token - JWT token
* @returns Email string or null if not found
*/
export declare function getEmailFromToken(token: string): string | null;
/**
* Sign a JWT token with the given payload and secret
* @param payload - JWT payload
* @param secret - JWT secret
* @returns Promise resolving to signed token
*/
export declare function signJWT(payload: JwtPayload, secret: string): Promise<string>;
/**
* Generate a UserDO-compatible access token
* @param userId - User ID
* @param email - User email
* @param secret - JWT secret
* @param expiresInMinutes - Token expiration in minutes (default: 15)
* @returns Promise resolving to signed access token
*/
export declare function generateAccessToken(userId: string, email: string, secret: string, expiresInMinutes?: number): Promise<string>;
/**
* Generate a UserDO-compatible refresh token
* @param userId - User ID
* @param secret - JWT secret
* @param expiresInDays - Token expiration in days (default: 7)
* @returns Promise resolving to signed refresh token
*/
export declare function generateRefreshToken(userId: string, secret: string, expiresInDays?: number): Promise<string>;
/**
* Verify tokens with automatic refresh - decodes email from expired access token
* @param token - Current access token (may be expired)
* @param refreshToken - Refresh token (optional)
* @param secret - JWT secret
* @returns Verification result with payload and new token if refreshed
*/
export declare function verifyTokens(token: string, refreshToken: string | undefined, secret: string): Promise<{
ok: boolean;
payload?: JwtPayload;
newToken?: string;
error?: string;
}>;
/**
* Generate a UserDO-compatible password reset token
* @param userId - User ID
* @param email - User email
* @param secret - JWT secret
* @param expiresInMinutes - Token expiration in minutes (default: 60)
* @returns Promise resolving to signed password reset token
*/
export declare function generatePasswordResetToken(userId: string, email: string, secret: string, expiresInMinutes?: number): Promise<string>;