UNPKG

@t2ee/cookieman

Version:
50 lines (47 loc) 1.79 kB
import CookieStore from './CookieStore'; import Cookie from './Cookie'; import * as Redis from 'redis'; export default class MemoryStore implements CookieStore { private redis: Redis.RedisClient; constructor(uri: string, private prefix: string) { this.redis = Redis.createClient(uri); } async get(key: string): Promise<Cookie> { return new Promise<Cookie>((resolve, reject) => { this.redis.get(this.prefix + key, (err, result) => { if (err) return reject(err); const cookie = new Cookie(); const data = JSON.parse(result) if (!data) return resolve(cookie); cookie.key = data.key; cookie.expires = new Date(data.expires); cookie.data = data.data; cookie.path = data.path; cookie.domain = data.domain; cookie.secure = data.secure ? true : false; cookie.httpOnly = data.httpOnly ? true : false; resolve(cookie); }); }); } async set(cookie: Cookie): Promise<void> { return new Promise<void>((resolve, reject) => { this.redis.setex( this.prefix + cookie.key, Math.round((cookie.expires.getTime() - Date.now()) / 1000), JSON.stringify(cookie), err => { if (err) return reject(err); resolve(); }); }); } async remove(cookie: Cookie): Promise<void> { return new Promise<void>((resolve, reject) => { this.redis.del(this.prefix + cookie.key, err => { if (err) return reject(err); resolve(); }); }); } }