fa-session-redis
Version:
Redis session store for farrow-auth-session with support for both redis and ioredis clients
92 lines • 3.84 kB
TypeScript
import { SessionStore } from 'farrow-auth-session';
export interface IoRedisLike {
get(key: string): Promise<string | null>;
set(key: string, value: string): Promise<string>;
setex(key: string, seconds: number, value: string): Promise<string>;
del(...keys: string[]): Promise<number>;
expire(key: string, seconds: number): Promise<number>;
ttl(key: string): Promise<number>;
mget(...keys: string[]): Promise<(string | null)[]>;
scan(cursor: number | string, ...args: any[]): Promise<[string, string[]]>;
}
export interface NodeRedisLike {
get(key: string): Promise<string | null>;
set(key: string, value: string): Promise<string>;
setEx(key: string, seconds: number, value: string): Promise<string>;
del(keyOrKeys: string | string[]): Promise<number>;
expire(key: string, seconds: number): Promise<boolean>;
ttl(key: string): Promise<number>;
mGet(keys: string[]): Promise<(string | null)[]>;
scanIterator(options: {
MATCH?: string;
COUNT?: number;
}): AsyncIterable<string>;
}
export interface RedisLikeClient {
get(key: string): Promise<string | null>;
set(key: string, value: string): Promise<string | 'OK' | null>;
del(key: string | string[]): Promise<number>;
expire(key: string, seconds: number): Promise<number | boolean>;
mGet?(keys: string[]): Promise<(string | null)[]>;
mget?(keys: string[]): Promise<(string | null)[]>;
scan?(cursor: number | string, ...args: any[]): Promise<[string, string[]]>;
scanIterator?(options: {
MATCH?: string;
COUNT?: number;
}): AsyncIterable<string>;
}
export interface NormalizedRedisClient {
get(key: string): Promise<string | null>;
set(key: string, value: string): Promise<boolean>;
setex(key: string, seconds: number, value: string): Promise<boolean>;
del(keyOrKeys: string | string[]): Promise<number>;
expire(key: string, seconds: number): Promise<boolean>;
ttl(key: string): Promise<number>;
mget(keys: string[]): Promise<(string | null)[]>;
scanIterator(match: string, count: number): AsyncIterable<string>;
}
export declare function createNormalizedRedisClient(client: RedisLikeClient): NormalizedRedisClient;
export interface RedisSessionStoreOptions<UserData> {
/**
* Redis key prefix for sessions
* @default 'session'
*/
prefix?: string;
/**
* Session expiration time in seconds
* Set to false to disable expiration in Redis (but session may still expire in cookies)
* @default 86400 (24 hours)
*/
ttl?: number | false;
/**
* If true, session expiration will be reset on each access
* Only works when ttl is set to a number
* @default false
*/
rolling?: boolean;
/**
* If true, session expiration will be renewed when close to expiry
* @default false
*/
renew?: boolean;
/**
* Time in seconds before expiry to trigger renewal
* Only used when renew is true
* @default 600 (10 minutes)
*/
renewBefore?: number;
/**
* Custom session ID generator
* @default () => ulid()
*/
genSessionId?: () => string;
/**
* Initial session data creator
* @default () => ({} as UserData)
*/
defaultData?: () => UserData;
}
export declare function createRedisSessionStore<UserData = any>(client: IoRedisLike, options?: RedisSessionStoreOptions<UserData>): SessionStore<UserData, string>;
export declare function createRedisSessionStore<UserData = any>(client: NodeRedisLike, options?: RedisSessionStoreOptions<UserData>): SessionStore<UserData, string>;
export declare function createRedisSessionStore<UserData = any>(client: RedisLikeClient, options?: RedisSessionStoreOptions<UserData>): SessionStore<UserData, string>;
//# sourceMappingURL=index.d.ts.map