UNPKG

hono-sess

Version:

A Simple Session Middleware for Hono

73 lines (72 loc) 2.15 kB
"use strict"; import { Store } from "./store.js"; import { Session } from "./session.js"; export class MemoryStore extends Store { sessions; constructor() { super(); this.sessions = Object.create(null); } all(callback) { const sessionIds = Object.keys(this.sessions); const sessions = Object.create(null); for (const sessionId of sessionIds) { const session = getSession.call(this, sessionId); if (session) { sessions[sessionId] = session; } } callback && callback(null, sessions); } clear(callback) { this.sessions = Object.create(null); callback && callback(); } destroy(sessionId, callback) { delete this.sessions[sessionId]; callback && callback(); } get(sessionId, callback) { callback(null, getSession.call(this, sessionId)); } set(sessionId, session, callback) { this.sessions[sessionId] = JSON.stringify(session); callback && callback(); } length(callback) { this.all((err, sessions) => { if (err) return callback(err); callback(null, Object.keys(sessions).length); }); } touch(sessionId, session, callback) { const currentSession = getSession.call(this, sessionId); if (currentSession) { currentSession.cookie = session.cookie; this.sessions[sessionId] = JSON.stringify(currentSession); } callback && callback(); } generate(req) { const session = new Session(req, null); req.session = session; } } function getSession(sessionId) { const sess = this.sessions[sessionId]; if (!sess) { return; } const parsed = JSON.parse(sess); if (parsed.cookie) { const expires = typeof parsed.cookie.expires === "string" ? new Date(parsed.cookie.expires) : parsed.cookie.expires; if (expires && expires <= Date.now()) { delete this.sessions[sessionId]; return; } } return parsed; }