@randajan/koa-io-session 2.2.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/class/SessionBridge.js", "../../src/tools.js", "../../src/httpSession.js", "../../src/wrappers.js", "../../src/socketSession.js", "../../src/class/SessionStore.js", "../../src/const.js", "../../src/formatOptions.js", "../../src/class/Bridge.js", "../../src/index.js"],
4
- "sourcesContent": ["import { EventEmitter } from \"events\";\r\nimport { ServerResponse } from \"http\";\r\nimport { solid, virtual } from \"@randajan/props\";\r\n\r\nimport { generateUid } from \"../tools.js\";\r\nimport { createKoaSession, createClientCookie } from \"../httpSession.js\";\r\nimport { applySessionHandler } from \"../socketSession.js\";\r\n\r\nimport { formatOptions } from \"../formatOptions.js\";\r\nimport { Bridge } from \"./Bridge.js\";\r\n\r\n\r\nexport class SessionBridge extends EventEmitter {\r\n\r\n constructor(app, io, opt = {}) {\r\n super();\r\n\r\n if (!app.keys) { app.keys = Array(6).fill().map(() => generateUid(12)); }\r\n\r\n const o = formatOptions(opt);\r\n const { store } = o.koaOpt;\r\n\r\n const brg = new Bridge({\r\n onSet:pair=>this.emit(\"sessionStart\", pair),\r\n onDelete:pair=>this.emit(\"sessionEnd\", pair)\r\n });\r\n\r\n const cc = createClientCookie(o.clientOpt);\r\n const [koaSession, sc] = createKoaSession(o.koaOpt, app, (ctx, sid)=>{\r\n const cid = cc.get(ctx);\r\n brg.set(cid, sid);\r\n });\r\n\r\n const regenerateSid = async (ctx, cid, reqSid)=>{\r\n if (cid == null || reqSid == null) { return; } //empty cid or sid\r\n\r\n const brgSid = brg.getByCid(cid);\r\n if (brgSid == reqSid) { return; } //correct sid for this client\r\n else if (brgSid) { sc.set(ctx, brgSid); return; } //this client have different sid\r\n\r\n if (brg.getBySid(reqSid)) { return; } //sid is occupied by different client\r\n if (!await store.get(reqSid)) { return; } //there is no sesssion with that sid\r\n brg.set(cid, reqSid); //attach session to this client\r\n }\r\n \r\n app.use(koaSession);\r\n\r\n // pro HTTP jen sessionId, nic v\u00EDc nepot\u0159ebujeme\r\n app.use(async (ctx, next) => {\r\n let cid = cc.get(ctx);\r\n const sid = sc.get(ctx);\r\n\r\n if (!cid) { cc.set(ctx, cid = generateUid(24)); }\r\n else if (o.clientAlwaysRoll) { cc.set(ctx, cid); }\r\n \r\n await regenerateSid(ctx, cid, sid);\r\n \r\n solid(ctx, \"clientId\", cid);\r\n virtual(ctx, \"sessionId\", _=>brg.getByCid(cid));\r\n await next();\r\n });\r\n\r\n /* ------------------ WebSocket ------------------------------------- */\r\n io.use(async (socket, next) => {\r\n const req = socket.request;\r\n const res = req.res ?? socket.response ?? new ServerResponse(req);\r\n const ctx = app.createContext(req, res);\r\n\r\n await koaSession(ctx, async () => {});\r\n const cid = cc.get(ctx);\r\n const sid = sc.get(ctx);\r\n\r\n await regenerateSid(ctx, cid, sid);\r\n\r\n solid(socket, \"clientId\", cid);\r\n virtual(socket, \"sessionId\", _=>brg.getByCid(cid));\r\n solid(socket, \"withSession\", async function (handler, onMissing) {\r\n const onm = arguments.length > 1 ? onMissing : new Error(\"Session missing\");\r\n return applySessionHandler(socket, handler, store, onm);\r\n }, false);\r\n\r\n await next();\r\n });\r\n\r\n store.on(\"destroy\", (_store, sid)=>{\r\n if (!sid) { return; }\r\n brg.deleteBySid(sid);\r\n });\r\n \r\n\r\n solid(this, \"store\", store);\r\n }\r\n\r\n\r\n}\r\n\r\n", "import crypto from \"crypto\";\r\n\r\nexport const generateUid = (len = 16) => crypto.randomBytes(len).toString(\"base64url\").slice(0, len);\r\n\r\nexport const is = (type, any)=>typeof any === type;\r\n\r\nexport const valid = (type, any, req=false, msg=\"argument\")=>{\r\n if (any == null) {\r\n if (!req) { return; }\r\n throw new Error(`${msg} require typeof '${type}'`);\r\n }\r\n if (is(type, any)) { return any; }\r\n throw new Error(`${msg} is not typeof '${type}'`);\r\n}\r\n\r\nexport const validRange = (min, max, any, req=false, msg=\"argument\")=>{\r\n const num = valid(\"number\", any, req, msg);\r\n if (num == null) { return; }\r\n if (num < min) { throw new Error(`${msg} must be greater than ${min}`); }\r\n if (num > max) { throw new Error(`${msg} must be less than ${max}`); }\r\n return num;\r\n}\r\n\r\nexport const validInterval = (any, req=false, msg=\"argument\")=>{\r\n return validRange(10, 2_147_483_647, any, req, msg);\r\n}\r\n\r\nexport const validObject = (any, req=false, msg=\"argument\")=>{\r\n const obj = valid(\"object\", any, req, msg);\r\n if (obj == null) { return; }\r\n if (!Array.isArray(obj)) { return obj; }\r\n throw new Error(`${msg} must be object, not array`);\r\n}\r\n\r\n\r\nexport const validStore = (store) => {\n const missing = [];\n if (!is(\"function\", store?.get)) { missing.push(\"get()\"); }\n if (!is(\"function\", store?.set)) { missing.push(\"set()\"); }\n if (!is(\"function\", store?.destroy)) { missing.push(\"destroy()\"); }\n if (!is(\"function\", store?.on)) { missing.push(\"on()\"); }\n\r\n if (missing.length) {\r\n throw new TypeError(`store is missing required API: ${missing.join(\", \")}`);\r\n }\r\n \r\n return store;\r\n};\n", "import session from \"koa-session\";\r\nimport { wrapExternalKey, wrapStore } from \"./wrappers.js\";\r\n\r\nexport const createKoaSession = (opt, app, onSet)=>{\r\n const store = wrapStore(opt.store);\r\n const externalKey = wrapExternalKey(opt, onSet);\r\n const koaSession = session({...opt, store, externalKey}, app);\r\n return [koaSession, externalKey];\r\n}\r\n\r\nexport const createClientCookie = opt => {\r\n const { key, maxAge, signed, path, secure, sameSite, httpOnly } = opt;\r\n return wrapExternalKey({\r\n key,\r\n signed,\r\n maxAge,\r\n path: path ?? \"/\",\r\n secure,\r\n sameSite,\r\n httpOnly: httpOnly ?? true,\r\n overwrite: true\r\n });\r\n}", "\r\n\r\nexport const wrapStore = (store)=>{\n return {\n get:store.get.bind(store),\n set:store.set.bind(store),\n destroy:store.destroy.bind(store)\n }\n}\n\r\nexport const wrapExternalKey = (opt, onSet) => {\r\n const { externalKey: base, key, signed } = opt;\r\n\r\n const get = base?.get\r\n ? (ctx) => base.get(ctx)\r\n : (ctx) => ctx.cookies.get(key, { signed });\r\n\r\n const setRaw = base?.set\r\n ? (ctx, sid) => base.set(ctx, sid)\r\n : (ctx, sid) => ctx.cookies.set(key, sid, opt);\r\n\r\n const set = typeof onSet != \"function\"\r\n ? setRaw\r\n : (ctx, sid) => {\r\n setRaw(ctx, sid); // re\u00E1ln\u00FD z\u00E1pis SID\r\n onSet(ctx, sid); // tv\u016Fj hook\r\n };\r\n\r\n return { get, set };\r\n};\r\n", "import { solids } from \"@randajan/props\";\r\nimport { is, validObject } from \"./tools.js\";\r\n\r\n\r\nconst sidLocks = new Map();\r\n\r\nconst createSessionCtx = (sessionId, session, socket) =>solids({ session }, { sessionId, socket });\r\n\r\nconst createSessionHash = (session) => {\r\n try { return JSON.stringify(session ?? null); }\r\n catch { return null; }\r\n};\r\n\r\nconst isSessionHashChanged = (originalHash, session) => {\r\n const nextHash = createSessionHash(session);\r\n if (originalHash == null || nextHash == null) { return true; }\r\n return originalHash !== nextHash;\r\n};\r\n\r\nconst withLock = async (task, socket, ...args) => {\r\n const sid = socket.sessionId;\r\n const previous = sidLocks.get(sid);\r\n let releaseCurrent;\r\n const current = new Promise((resolve) => { releaseCurrent = resolve; });\r\n sidLocks.set(sid, current);\r\n\r\n if (previous) { await previous; }\r\n\r\n try {\r\n return await task(socket, ...args);\r\n } finally {\r\n releaseCurrent();\r\n if (sidLocks.get(sid) === current) { sidLocks.delete(sid); }\r\n }\r\n};\r\n\r\nconst applyOnMissing = (onMissing)=>{\r\n if (onMissing instanceof Error) { throw onMissing; }\r\n if (is(\"function\", onMissing)) { return onMissing(); }\r\n return onMissing;\r\n}\r\n\r\nconst runSessionHandler = async (socket, handler, store, onMissing) => {\r\n const sid = socket.sessionId;\r\n\r\n const current = await store.get(sid);\r\n\r\n if (!current) { return applyOnMissing(onMissing); }\r\n\r\n const session = current;\r\n const sessionCtx = createSessionCtx(sid, session, socket);\r\n\r\n const originalHash = createSessionHash(sessionCtx.session);\r\n const result = await handler(sessionCtx, socket);\r\n\r\n if (sessionCtx.session == null) {\r\n await store.destroy(sid);\r\n return result;\r\n }\r\n\r\n sessionCtx.session = validObject(sessionCtx.session, false, \"session\");\r\n\r\n if (isSessionHashChanged(originalHash, sessionCtx.session)) {\r\n await store.set(sid, sessionCtx.session);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const applySessionHandler = async (socket, handler, store, onMissing) => {\r\n\r\n if (typeof handler !== \"function\") {\r\n throw new TypeError(\"socket.withSession(handler) requires a function\");\r\n }\r\n if (!socket.sessionId) { return applyOnMissing(onMissing); }\r\n\r\n return withLock(runSessionHandler, socket, handler, store, onMissing);\r\n};\r\n", "import { solid } from \"@randajan/props\";\r\nimport { EventEmitter } from \"events\";\r\nimport { valid, validInterval, validRange } from \"../tools.js\";\r\nimport { ms } from \"../const.js\";\r\n\r\n\r\nconst formatState = (session, maxAge, prevTTL, maxAgeDefault)=>{\r\n const ttl = maxAge ?? prevTTL ?? maxAgeDefault;\r\n const expiresAt = Date.now() + ttl;\r\n return { session, expiresAt, ttl };\r\n}\r\n\r\nexport class SessionStore extends Map {\r\n\r\n constructor(opt={}) {\r\n super();\r\n\r\n const maxAge = validRange(ms.s(), ms.y(), opt.maxAge, false, \"maxAge\") ?? ms.M();\r\n const autoCleanup = valid(\"boolean\", opt.autoCleanup, false, \"autoCleanup\") ?? true;\r\n const autoCleanupMs = validInterval(opt.autoCleanupMs, false, \"autoCleanupMs\") ?? Math.max(ms.s(), Math.min(ms.h(), maxAge/10));\r\n \r\n solid(this, \"maxAge\", maxAge);\r\n solid(this, \"event\", new EventEmitter());\r\n\r\n if (!autoCleanup) { return; }\r\n\r\n setInterval(_=>this.cleanup(), autoCleanupMs);\r\n }\r\n\r\n on(eventName, callback) {\r\n return this.event.on(eventName, callback);\r\n }\r\n\r\n get(sid) {\r\n const d = super.get(sid);\r\n if (!d) { return; }\r\n if (Date.now() < d.expiresAt) { return d.session; }\r\n this.delete(sid);\r\n }\r\n\r\n set(sid, session, maxAge) {\r\n const d = super.get(sid);\r\n if (session == null) { return !d || this.destroy(sid); }\r\n super.set(sid, formatState(session, maxAge, d?.ttl, this.maxAge));\r\n this.event.emit(\"set\", this, sid, !d);\r\n return true;\r\n }\r\n\r\n delete(sid) {\r\n return this.destroy(sid);\r\n }\r\n\r\n destroy(sid) {\r\n if (this.has(sid)) {\r\n super.delete(sid);\r\n this.event.emit(\"destroy\", this, sid);\r\n }\r\n return true;\r\n }\r\n\r\n cleanup() {\r\n const now = Date.now();\r\n let cleared = 0;\r\n\r\n for (const [sid, d] of this.entries()) {\r\n if (now < d.expiresAt) { continue; }\r\n if (this.destroy(sid)) { cleared++; }\r\n }\r\n\r\n if (cleared) { this.event.emit(\"cleanup\", this, cleared); }\r\n\r\n return cleared;\r\n }\r\n\r\n}\r\n", "export const ms = {\r\n s:(v=1)=>v*1000,\r\n m:(v=1)=>ms.s(v*60),\r\n h:(v=1)=>ms.m(v*60),\r\n d:(v=1)=>ms.h(v*24),\r\n w:(v=1)=>ms.d(v*7),\r\n M:(v=1)=>ms.d(v*30),\r\n y:(v=1)=>ms.d(v*365)\r\n}\r\n\r\nexport const _customOptKeys = new Set([\r\n \"store\",\r\n \"autoCleanup\",\r\n \"autoCleanupMs\",\r\n \"clientKey\",\r\n \"clientMaxAge\",\r\n \"clientAlwaysRoll\"\r\n]);", "import { SessionStore } from \"./class/SessionStore.js\";\r\nimport { _customOptKeys, ms } from \"./const.js\";\r\nimport { generateUid, valid, validRange, validInterval, validObject, validStore } from \"./tools.js\";\r\n\r\nconst pickKoaOpt = (rawOpt) => {\r\n const koaOpt = {}\r\n for (const key in rawOpt) {\r\n if (_customOptKeys.has(key)) { continue; }\r\n koaOpt[key] = rawOpt[key];\r\n }\r\n\r\n koaOpt.key = valid(\"string\", koaOpt.key, false, \"key\") ?? generateUid(12);\r\n koaOpt.maxAge = validRange(ms.s(), ms.y(), koaOpt.maxAge, false, \"maxAge\") ?? ms.M();\r\n koaOpt.signed = valid(\"boolean\", koaOpt.signed, false, \"signed\") ?? true;\r\n koaOpt.store = validStore(rawOpt.store || new SessionStore(rawOpt));\r\n\r\n return koaOpt;\r\n};\r\n\r\n/**\r\n * Validate and normalize attachSession options.\r\n * Returns split options for internal parts and koa-session pass-through options.\r\n */\r\nexport const formatOptions = (opt = {}) => {\r\n opt = validObject(opt, true, \"options\");\r\n\r\n const koaOpt = pickKoaOpt(opt);\r\n \r\n const clientKey = valid(\"string\", opt.clientKey) ?? `${koaOpt.key}.cid`;\r\n const clientMaxAge = validInterval(opt.clientMaxAge, false, \"clientMaxAge\") ?? ms.y();\r\n const clientAlwaysRoll = valid(\"boolean\", opt.clientAlwaysRoll, false, \"clientAlwaysRoll\") ?? true;\r\n\r\n const clientOpt = { ...koaOpt, key:clientKey, maxAge:clientMaxAge }\r\n\r\n return {\r\n koaOpt,\r\n clientOpt,\r\n clientAlwaysRoll,\r\n };\r\n};\r\n\r\n", "import { solids } from \"@randajan/props\";\r\n\r\nexport class Bridge {\r\n constructor(opt={}) {\r\n const { onSet, onDelete } = opt;\r\n\r\n solids(this, {\r\n onSet,\r\n onDelete,\r\n s2c:new Map(),\r\n c2s:new Map()\r\n });\r\n\r\n }\r\n\r\n set(cid, sid) {\n if (!cid || !sid) { return false; }\n\n const byCid = this.deleteByCid(cid, sid);\n const bySid = this.deleteBySid(sid, cid);\n if (!byCid && !bySid) { return false; }\n\n this.c2s.set(cid, sid);\n this.s2c.set(sid, cid);\n\n this.onSet({clientId:cid, sessionId:sid});\n return true;\n }\n \r\n getByCid(cid) {return this.c2s.get(cid); }\r\n getBySid(sid) { return this.s2c.get(sid); }\r\n\r\n deleteBySid(sid, skipIf) {\r\n const cid = this.getBySid(sid);\r\n if (!cid) { return true; }\r\n if (skipIf && cid == skipIf) { return false; }\r\n this.s2c.delete(sid);\r\n this.c2s.delete(cid);\r\n this.onDelete({clientId:cid, sessionId:sid});\r\n return true;\r\n }\r\n\r\n deleteByCid(cid, skipIf) {\r\n const sid = this.getByCid(cid);\r\n if (!sid) { return true; }\r\n if (skipIf && sid == skipIf) { return false; }\r\n this.c2s.delete(cid);\r\n this.s2c.delete(sid);\r\n this.onDelete({clientId:cid, sessionId:sid});\r\n return true;\r\n }\r\n}\r\n", "import { SessionBridge } from \"./class/SessionBridge.js\";\r\nimport { SessionStore } from \"./class/SessionStore.js\";\r\nimport { generateUid } from \"./tools.js\";\r\n\r\n\r\nconst bridgeSession = (app, io, opt = {}) => new SessionBridge(app, io, opt);\r\n\r\nexport default bridgeSession;\r\n\r\nexport {\r\n bridgeSession,\r\n generateUid,\r\n SessionStore,\r\n SessionBridge\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["EventEmitter", "solid", "session", "session", "solids", "EventEmitter", "solid"]
3
+ "sources": ["../../src/class/SessionBridge.js", "../../src/httpSession.js", "../../src/wrappers.js", "../../src/socketSession.js", "../../src/formatOptions.js", "../../src/class/Bridge.js", "../../src/class/TempMap.js", "../../src/class/StoreGateway.js", "../../src/stores/LiveStore.js", "../../src/index.js"],
4
+ "sourcesContent": ["import { EventEmitter } from \"events\";\r\nimport { ServerResponse } from \"http\";\r\nimport { solid, virtual } from \"@randajan/props\";\r\n\r\nimport { generateUid } from \"../tools.js\";\r\nimport { createKoaSession, createClientCookie } from \"../httpSession.js\";\r\nimport { applySessionHandler } from \"../socketSession.js\";\r\n\r\nimport { formatOptions } from \"../formatOptions.js\";\r\nimport { Bridge } from \"./Bridge.js\";\r\nimport { _errPrefix, _privs } from \"../const.js\";\r\nimport { TempMap } from \"./TempMap.js\";\r\nimport { StoreGateway } from \"./StoreGateway.js\";\r\n\r\n\r\nexport class SessionBridge extends EventEmitter {\r\n\r\n constructor(app, io, opt = {}) {\r\n super();\r\n\r\n if (!app.keys) { app.keys = Array(6).fill().map(() => generateUid(12)); }\r\n\r\n const { koaOpt, clientOpt, clientAlwaysRoll } = formatOptions(opt);\r\n const _p = {};\r\n\r\n const tmp = new TempMap(5000);\r\n const brg = _p.brg = new Bridge({\r\n onSet:(clientId, sessionId)=>{\r\n const isNew = !!tmp.get(sessionId, true);\r\n this.emit(\"sessionSet\", { clientId, sessionId, isNew, isInit:true });\r\n },\r\n onDelete:(clientId, sessionId)=>this.emit(\"sessionDestroy\", { clientId, sessionId })\r\n });\r\n\r\n _p.notifySet = (sid, isNew)=>{\r\n if (!sid) { return; }\r\n const cid = brg.getBySid(sid);\r\n if (!cid) { tmp.set(sid, isNew, false); return; }\r\n this.emit(\"sessionSet\", { clientId:cid, sessionId:sid, isNew:!!isNew, isInit:false });\r\n }\r\n _p.notifyDestroy = (sid)=>{ if (sid) { brg.deleteBySid(sid); } }\r\n _p.notifyCleanup = (cleared)=>{ this.emit(\"cleanup\", cleared); }\r\n\r\n const gw = _p.gw = new StoreGateway(opt, _p);\r\n\r\n const cc = createClientCookie(clientOpt);\r\n const [koaSession, sc] = createKoaSession(app, gw, koaOpt, (ctx, sid)=>{\r\n const cid = cc.get(ctx);\r\n brg.set(cid, sid);\r\n });\r\n\r\n const reviveCid = ctx=>{\r\n let cid = cc.get(ctx);\r\n if (!cid) { cc.set(ctx, cid = generateUid(24)); }\r\n else if (clientAlwaysRoll) { cc.set(ctx, cid); }\r\n return cid;\r\n }\r\n\r\n const reviveSid = async (ctx, cid)=>{\r\n const reqSid = sc.get(ctx);\r\n if (cid == null || reqSid == null) { return; } //empty cid or sid\r\n\r\n const brgSid = brg.getByCid(cid);\r\n if (brgSid == reqSid) { return; } //correct sid for this client\r\n else if (brgSid) { sc.set(ctx, brgSid); return; } //this client have different sid\r\n\r\n if (brg.getBySid(reqSid)) { return; } //sid is occupied by different client\r\n if (!await gw.get(reqSid)) { return; } //there is no sesssion with that sid\r\n brg.set(cid, reqSid); //attach session to this client\r\n }\r\n \r\n app.use(koaSession);\r\n\r\n // pro HTTP jen sessionId, nic v\u00EDc nepot\u0159ebujeme\r\n app.use(async (ctx, next) => {\r\n const cid = reviveCid(ctx);\r\n await reviveSid(ctx, cid);\r\n \r\n solid(ctx, \"clientId\", cid);\r\n virtual(ctx, \"sessionId\", _=>brg.getByCid(cid));\r\n await next();\r\n });\r\n\r\n /* ------------------ WebSocket ------------------------------------- */\r\n io.use(async (socket, next) => {\r\n const req = socket.request;\r\n const res = req.res ?? socket.response ?? new ServerResponse(req);\r\n const ctx = app.createContext(req, res);\r\n\r\n await koaSession(ctx, async () => {});\r\n \r\n const cid = reviveCid(ctx);\r\n await reviveSid(ctx, cid);\r\n\r\n solid(socket, \"clientId\", cid);\r\n virtual(socket, \"sessionId\", _=>brg.getByCid(cid));\r\n solid(socket, \"withSession\", async function (handler, onMissing) {\r\n const onm = arguments.length > 1 ? onMissing : new Error(`${_errPrefix} Session is missing for this socket.`);\r\n return applySessionHandler(socket, handler, gw, onm);\r\n }, false);\r\n\r\n await next();\r\n });\r\n\r\n _privs.set(this, _p);\r\n }\r\n\r\n async getById(sessionId) {\r\n const { gw, brg } = _privs.get(this);\r\n const cid = brg.getBySid(sessionId);\r\n if (cid) { return gw.get(sessionId); }\r\n }\r\n\r\n async destroyById(sessionId) {\r\n const { gw, brg } = _privs.get(this);\r\n const cid = brg.getBySid(sessionId);\r\n if (cid) { return gw.destroy(sessionId); }\r\n return false;\r\n }\r\n\r\n async setById(sessionId, session, maxAge) {\r\n const { gw, brg } = _privs.get(this);\r\n const cid = brg.getBySid(sessionId);\r\n if (cid) { return gw.set(sessionId, session, maxAge); } \r\n throw new Error(`${_errPrefix} Creating session via setById() is prohibited. sessionId='${sessionId}'.`);\r\n }\r\n \r\n\r\n async getByClientId(clientId) {\r\n const { gw, brg } = _privs.get(this);\r\n const sid = brg.getByCid(clientId);\r\n if (sid) { return gw.get(sid); }\r\n }\r\n\r\n async destroyByClientId(clientId) {\r\n const { gw, brg } = _privs.get(this);\r\n const sid = brg.getByCid(clientId);\r\n if (sid) { return gw.destroy(sid); }\r\n return false;\r\n }\r\n \r\n async setByClientId(clientId, session, maxAge) {\r\n const { gw, brg } = _privs.get(this);\r\n const sid = brg.getByCid(clientId);\r\n if (sid) { return gw.set(sid, session, maxAge); }\r\n throw new Error(`${_errPrefix} Creating session via setByClientId() is prohibited. clientId='${clientId}'.`);\r\n }\r\n\r\n getSessionId(clientId) { return _privs.get(this).brg.getByCid(clientId); }\r\n getClientId(sessionId) { return _privs.get(this).brg.getBySid(sessionId); }\r\n\r\n async cleanup() { return _privs.get(this).gw.cleanup(); }\r\n startAutoCleanup(interval) { return _privs.get(this).gw.startAutoCleanup(interval); }\r\n stopAutoCleanup() { return _privs.get(this).gw.stopAutoCleanup(); }\r\n\r\n notifyStoreSet(sessionId, isNew) { return _privs.get(this).notifySet(sessionId, isNew); }\r\n notifyStoreDestroy(sessionId) { return _privs.get(this).notifyDestroy(sessionId); }\r\n notifyStoreCleanup(clearedCount) { return _privs.get(this).notifyCleanup(clearedCount); }\r\n}\r\n\r\n", "import session from \"koa-session\";\r\nimport { wrapExternalKey, wrapStore } from \"./wrappers.js\";\r\n\r\nexport const createKoaSession = (app, gw, opt, onSet)=>{\r\n const maxAge = gw.maxAge;\r\n const store = wrapStore(gw);\r\n const externalKey = wrapExternalKey(opt, onSet);\r\n const koaSession = session({...opt, maxAge, store, externalKey}, app);\r\n return [koaSession, externalKey];\r\n}\r\n\r\nexport const createClientCookie = opt => {\r\n const { key, maxAge, signed, path, secure, sameSite, httpOnly } = opt;\r\n return wrapExternalKey({\r\n key,\r\n signed,\r\n maxAge,\r\n path: path ?? \"/\",\r\n secure,\r\n sameSite,\r\n httpOnly: httpOnly ?? true,\r\n overwrite: true\r\n });\r\n}", "\r\n\r\nexport const wrapStore = (store)=>{\n return {\n get:store.get.bind(store),\n set:store.set.bind(store),\n destroy:store.destroy.bind(store)\n }\n}\n\r\nexport const wrapExternalKey = (opt, onSet) => {\r\n const { externalKey: base, key, signed } = opt;\r\n\r\n const get = base?.get\r\n ? (ctx) => base.get(ctx)\r\n : (ctx) => ctx.cookies.get(key, { signed });\r\n\r\n const setRaw = base?.set\r\n ? (ctx, sid) => base.set(ctx, sid)\r\n : (ctx, sid) => ctx.cookies.set(key, sid, opt);\r\n\r\n const set = typeof onSet != \"function\"\r\n ? setRaw\r\n : (ctx, sid) => {\r\n setRaw(ctx, sid); // re\u00E1ln\u00FD z\u00E1pis SID\r\n onSet(ctx, sid); // tv\u016Fj hook\r\n };\r\n\r\n return { get, set };\r\n};\r\n", "import { solids } from \"@randajan/props\";\r\nimport { is, valid } from \"./tools.js\";\r\nimport { _errPrefix } from \"./const.js\";\r\n\r\nconst sidLocks = new Map();\r\n\r\nconst applyOnMissing = (onMissing)=>{\r\n if (onMissing instanceof Error) { throw onMissing; }\r\n if (is(\"function\", onMissing)) { return onMissing(); }\r\n return onMissing;\r\n}\r\n\r\nconst runSessionHandler = async (sid, socket, handler, gw, onMissing) => {\r\n const session = await gw.get(sid);\r\n if (!session) { return applyOnMissing(onMissing); }\r\n\r\n const sessionCtx = solids({ session }, { sessionId:sid, socket });\r\n const result = await handler(sessionCtx, socket);\r\n\r\n if (sid === socket.sessionId) { await gw.set(sid, sessionCtx.session); }\r\n\r\n return result;\r\n};\r\n\r\nconst createLock = (sid)=>{\r\n let _release;\r\n const previous = sidLocks.get(sid);\r\n const current = new Promise((resolve) => { _release = resolve; });\r\n sidLocks.set(sid, current);\r\n const release = ()=>{\r\n _release();\r\n if (sidLocks.get(sid) === current) { sidLocks.delete(sid); }\r\n }\r\n return [ previous, release ];\r\n}\r\n\r\nexport const applySessionHandler = async (socket, handler, gw, onMissing) => {\r\n\r\n valid(\"function\", handler, true, \"handler\");\r\n\r\n for (let i=0; i<5; i++) {\r\n const sid = socket.sessionId;\r\n if (!sid) { return applyOnMissing(onMissing); }\r\n\r\n const [ previous, release ] = createLock(sid);\r\n\r\n if (previous) { await previous; }\r\n if (previous && sid !== socket.sessionId) { release(); continue; } \r\n\r\n try { return await runSessionHandler(sid, socket, handler, gw, onMissing); }\r\n finally { release(); }\r\n }\r\n\r\n throw new Error(`${_errPrefix} socket.sessionId changed during withSession execution.`);\r\n\r\n};\r\n", "import { _customOptKeys, ms } from \"./const.js\";\r\nimport { generateUid, valid, validInterval, validObject } from \"./tools.js\";\r\n\r\nconst pickKoaOpt = (rawOpt) => {\r\n const koaOpt = {}\r\n for (const key in rawOpt) {\r\n if (_customOptKeys.has(key)) { continue; }\r\n koaOpt[key] = rawOpt[key];\r\n }\r\n\r\n koaOpt.key = valid(\"string\", koaOpt.key, false, \"key\") ?? generateUid(12);\r\n koaOpt.signed = valid(\"boolean\", koaOpt.signed, false, \"signed\") ?? true;\r\n\r\n return koaOpt;\r\n};\r\n\r\n/**\r\n * Validate and normalize attachSession options.\r\n * Returns split options for internal parts and koa-session pass-through options.\r\n */\r\nexport const formatOptions = (opt = {}) => {\r\n opt = validObject(opt, true, \"options\");\r\n\r\n const koaOpt = pickKoaOpt(opt);\r\n \r\n const clientKey = valid(\"string\", opt.clientKey) ?? `${koaOpt.key}.cid`;\r\n const clientMaxAge = validInterval(opt.clientMaxAge, false, \"clientMaxAge\") ?? ms.y();\r\n const clientAlwaysRoll = valid(\"boolean\", opt.clientAlwaysRoll, false, \"clientAlwaysRoll\") ?? true;\r\n\r\n const clientOpt = { ...koaOpt, key:clientKey, maxAge:clientMaxAge }\r\n\r\n return {\r\n koaOpt,\r\n clientOpt,\r\n clientAlwaysRoll,\r\n };\r\n};\r\n\r\n", "import { solids } from \"@randajan/props\";\r\n\r\nexport class Bridge {\r\n constructor(opt={}) {\r\n const { onSet, onDelete } = opt;\r\n\r\n solids(this, {\r\n onSet,\r\n onDelete,\r\n s2c:new Map(),\r\n c2s:new Map()\r\n });\r\n\r\n }\r\n\r\n set(cid, sid) {\r\n if (!cid || !sid) { return false; }\r\n\r\n const byCid = this.deleteByCid(cid, sid);\r\n const bySid = this.deleteBySid(sid, cid);\r\n if (!byCid && !bySid) { return false; }\r\n\r\n this.c2s.set(cid, sid);\r\n this.s2c.set(sid, cid);\r\n\r\n this.onSet(cid, sid);\r\n return true;\r\n }\r\n \r\n getByCid(cid) { return this.c2s.get(cid); }\r\n getBySid(sid) { return this.s2c.get(sid); }\r\n\r\n deleteBySid(sid, skipIf) {\r\n const cid = this.getBySid(sid);\r\n if (!cid) { return true; }\r\n if (skipIf && cid == skipIf) { return false; }\r\n this.s2c.delete(sid);\r\n this.c2s.delete(cid);\r\n this.onDelete(cid, sid);\r\n return true;\r\n }\r\n\r\n deleteByCid(cid, skipIf) {\r\n const sid = this.getByCid(cid);\r\n if (!sid) { return true; }\r\n if (skipIf && sid == skipIf) { return false; }\r\n this.c2s.delete(cid);\r\n this.s2c.delete(sid);\r\n this.onDelete(cid, sid);\r\n return true;\r\n }\r\n}\r\n", "import { validInterval } from \"../tools.js\";\r\nimport { _privs } from \"../const.js\";\r\n\r\n\r\nexport class TempMap extends Map {\r\n\r\n constructor(ttl) {\r\n super();\r\n\r\n const _p = {\r\n ttl:validInterval(ttl, true, \"ttl\"),\r\n ts: new Map()\r\n }\r\n\r\n _privs.set(this, _p);\r\n }\r\n\r\n set(key, value, overwrite=true) {\r\n const { ts, ttl } = _privs.get(this);\r\n if (!overwrite && this.has(key)) { return false; }\r\n this.delete(key);\r\n super.set(key, value);\r\n const t = setTimeout(_=>{ this.delete(key); }, ttl);\r\n ts.set(key, t);\r\n return true;\r\n }\r\n \r\n\r\n get(key, andDelete=false) {\r\n const v = super.get(key);\r\n if (andDelete) { this.delete(key); }\r\n return v;\r\n }\r\n\r\n delete(key) {\r\n if (!super.delete(key)) { return false; }\r\n const { ts } = _privs.get(this);\r\n const t = ts.get(key);\r\n clearTimeout(t);\r\n ts.delete(key);\r\n return true;\r\n }\r\n\r\n}", "import { solid } from \"@randajan/props\";\r\nimport { is, valid, validInterval, validObject, validRange, validStore } from \"../tools.js\";\r\nimport { _errPrefix, _privs, ms } from \"../const.js\";\r\nimport { LiveStore } from \"../stores/LiveStore.js\";\r\n\r\nconst formatState = (session, maxAge, maxAgeDefault)=>{\r\n const ttl = maxAge ?? maxAgeDefault;\r\n const expiresAt = Date.now() + ttl;\r\n return { session, expiresAt, ttl };\r\n}\r\n\r\nconst requireList = (store) => {\r\n if (!store.list) { throw new TypeError(`${_errPrefix} store.list() is required`); }\r\n};\r\n\r\nexport class StoreGateway {\r\n\r\n static is(any) { return any instanceof StoreGateway; }\r\n\r\n constructor(opt={}, emit={}) {\r\n const maxAge = validRange(opt.maxAge, ms.m(), ms.y(), false, \"maxAge\") ?? ms.M();\r\n const autoCleanup = valid(\"boolean\", opt.autoCleanup, false, \"autoCleanup\") ?? false;\r\n\r\n solid(this, \"emit\", emit);\r\n solid(this, \"maxAge\", maxAge);\r\n solid(this, \"store\", validStore(opt.store, false) ?? new LiveStore());\r\n\r\n if (autoCleanup) { this.startAutoCleanup(validInterval(opt.autoCleanupMs, false, \"autoCleanupMs\")); }\r\n }\r\n\r\n async list() {\r\n const { store } = this\r\n requireList(store);\r\n return store.list();\r\n }\r\n\r\n async get(sid) {\r\n const { store } = this\r\n const c = await store.get(sid);\r\n if (!c) { return; }\r\n \r\n if (Date.now() >= c.expiresAt) {\r\n await this.destroy(sid); return;\r\n }\r\n\r\n try { return JSON.parse(c.session); }\r\n catch {\r\n await this.destroy(sid); // rozbit\u00FD z\u00E1znam pry\u010D\r\n throw new Error(`${_errPrefix} Invalid session JSON for sid='${sid}'.`);\r\n };\r\n\r\n }\r\n\r\n async set(sid, session, maxAge) {\r\n const { store } = this\r\n const ses = validObject(session, false, \"session\");\r\n if (ses == null) { return this.destroy(sid); }\r\n\r\n const to = JSON.stringify(ses);\r\n const from = await store.get(sid, false);\r\n if (to === from?.session) { return true; }\r\n\r\n const isOk = await store.set(sid, formatState(to, maxAge, this.maxAge));\r\n if (isOk === false) { return false; }\r\n this.emit.notifySet(sid, !from);\r\n return true;\r\n }\r\n\r\n async destroy(sid) {\r\n const { store } = this\r\n const isOk = await store.destroy(sid);\r\n if (isOk === false) { return false; }\r\n this.emit.notifyDestroy(sid);\r\n return true;\r\n }\r\n\r\n async cleanup() {\r\n const { store } = this\r\n requireList(store);\r\n\r\n const list = await store.list();\r\n const now = Date.now();\r\n let cleared = 0;\r\n\r\n await Promise.all([...list].map(async sid=>{\r\n const d = await store.get(sid);\r\n if (!d) { return; }\r\n if (now < d.expiresAt) { return; }\r\n if (await this.destroy(sid)) { cleared++; }\r\n }));\r\n\r\n if (is(\"function\", store.optimize)) { await store.optimize(cleared); }\r\n\r\n this.emit.notifyCleanup(cleared);\r\n return cleared;\r\n }\r\n\r\n startAutoCleanup(interval) {\r\n const { store, maxAge, _intId } = this;\r\n requireList(store);\r\n const int = validRange(interval, ms.m(), ms.d(), false, \"interval\") ?? Math.max(ms.m(), Math.min(ms.d(), maxAge/4));\r\n clearInterval(_intId);\r\n this._intId = setInterval(_=>this.cleanup().catch(()=>{}), int);\r\n return true;\r\n }\r\n\r\n stopAutoCleanup() {\r\n const { _intId } = this;\r\n if (!_intId) { return false; }\r\n clearInterval(_intId);\r\n delete this._intId;\r\n return true;\r\n }\r\n\r\n}\r\n", "\r\nexport class LiveStore extends Map {\r\n\r\n get(sid) {\r\n return super.get(sid);\r\n }\r\n\r\n set(sid, state) {\r\n super.set(sid, state);\r\n return true;\r\n }\r\n\r\n destroy(sid) {\r\n return super.delete(sid);\r\n }\r\n\r\n list() {\r\n return this.keys();\r\n }\r\n\r\n \r\n}", "import { SessionBridge } from \"./class/SessionBridge.js\";\nimport { ms } from \"./const.js\";\nimport { LiveStore } from \"./stores/LiveStore.js\";\nimport { generateUid } from \"./tools.js\";\n\n\nconst bridgeSession = (app, io, opt = {}) => new SessionBridge(app, io, opt);\n\nexport default bridgeSession;\n\nexport {\n ms,\n bridgeSession,\n generateUid,\n LiveStore,\n SessionBridge\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["solid", "session", "solids", "session", "solid", "session"]
7
7
  }
@@ -0,0 +1,66 @@
1
+ import {
2
+ _privs,
3
+ valid
4
+ } from "../chunk-27XQ42ES.js";
5
+
6
+ // src/stores/FileStore.js
7
+ import createFileDB from "@randajan/file-db";
8
+ var ensureReady = async (self) => {
9
+ const _p = _privs.get(self);
10
+ if (_p.ready) {
11
+ return _p.ready;
12
+ }
13
+ _p.ready = (async () => {
14
+ await _p.file.verify();
15
+ _p.cache = await _p.file.index();
16
+ })();
17
+ return _p.ready;
18
+ };
19
+ var FileStore = class {
20
+ constructor(opt = {}) {
21
+ const fileName = valid("string", opt.fileName, false, "fileName") || "sessions";
22
+ const fdb = opt.fdb ?? createFileDB(opt.fdbOpt ?? {});
23
+ const file = fdb.get(fileName, false) ?? fdb.link(fileName);
24
+ const _p = {
25
+ fdb,
26
+ file,
27
+ cache: {},
28
+ ready: null
29
+ };
30
+ _privs.set(this, _p);
31
+ }
32
+ async get(sid) {
33
+ await ensureReady(this);
34
+ const { cache } = _privs.get(this);
35
+ return cache[sid];
36
+ }
37
+ async set(sid, state) {
38
+ await ensureReady(this);
39
+ const _p = _privs.get(this);
40
+ _p.cache[sid] = state;
41
+ await _p.file.write(sid, state);
42
+ return true;
43
+ }
44
+ async destroy(sid) {
45
+ await ensureReady(this);
46
+ const _p = _privs.get(this);
47
+ if (!Object.prototype.hasOwnProperty.call(_p.cache, sid)) {
48
+ return false;
49
+ }
50
+ delete _p.cache[sid];
51
+ await _p.file.write(sid);
52
+ return true;
53
+ }
54
+ async list() {
55
+ await ensureReady(this);
56
+ return Object.keys(_privs.get(this).cache);
57
+ }
58
+ async optimize() {
59
+ const _p = _privs.get(this);
60
+ await _p.file.optimize();
61
+ }
62
+ };
63
+ export {
64
+ FileStore
65
+ };
66
+ //# sourceMappingURL=FileStore.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/stores/FileStore.js"],
4
+ "sourcesContent": ["import createFileDB from \"@randajan/file-db\";\nimport { valid } from \"../tools.js\";\nimport { _privs } from \"../const.js\";\n\n\nconst ensureReady = async (self) => {\n const _p = _privs.get(self);\n if (_p.ready) { return _p.ready; }\n\n _p.ready = (async () => {\n await _p.file.verify();\n _p.cache = await _p.file.index();\n })();\n\n return _p.ready;\n};\n\nexport class FileStore {\n\n constructor(opt = {}) {\n const fileName = valid(\"string\", opt.fileName, false, \"fileName\") || \"sessions\";\n const fdb = opt.fdb ?? createFileDB(opt.fdbOpt ?? {});\n const file = fdb.get(fileName, false) ?? fdb.link(fileName);\n\n const _p = {\n fdb,\n file,\n cache:{},\n ready:null\n };\n\n _privs.set(this, _p);\n }\n\n async get(sid) {\n await ensureReady(this);\n const { cache } = _privs.get(this);\n return cache[sid];\n }\n\n async set(sid, state) {\n await ensureReady(this);\n const _p = _privs.get(this);\n _p.cache[sid] = state;\n await _p.file.write(sid, state);\n return true;\n }\n\n async destroy(sid) {\n await ensureReady(this);\n const _p = _privs.get(this);\n if (!Object.prototype.hasOwnProperty.call(_p.cache, sid)) { return false; }\n delete _p.cache[sid];\n await _p.file.write(sid);\n return true;\n }\n\n async list() {\n await ensureReady(this);\n return Object.keys(_privs.get(this).cache);\n }\n\n async optimize() {\n const _p = _privs.get(this);\n await _p.file.optimize();\n }\n}\n"],
5
+ "mappings": ";;;;;;AAAA,OAAO,kBAAkB;AAKzB,IAAM,cAAc,OAAO,SAAS;AAChC,QAAM,KAAK,OAAO,IAAI,IAAI;AAC1B,MAAI,GAAG,OAAO;AAAE,WAAO,GAAG;AAAA,EAAO;AAEjC,KAAG,SAAS,YAAY;AACpB,UAAM,GAAG,KAAK,OAAO;AACrB,OAAG,QAAQ,MAAM,GAAG,KAAK,MAAM;AAAA,EACnC,GAAG;AAEH,SAAO,GAAG;AACd;AAEO,IAAM,YAAN,MAAgB;AAAA,EAEnB,YAAY,MAAM,CAAC,GAAG;AAClB,UAAM,WAAW,MAAM,UAAU,IAAI,UAAU,OAAO,UAAU,KAAK;AACrE,UAAM,MAAM,IAAI,OAAO,aAAa,IAAI,UAAU,CAAC,CAAC;AACpD,UAAM,OAAO,IAAI,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,QAAQ;AAE1D,UAAM,KAAK;AAAA,MACP;AAAA,MACA;AAAA,MACA,OAAM,CAAC;AAAA,MACP,OAAM;AAAA,IACV;AAEA,WAAO,IAAI,MAAM,EAAE;AAAA,EACvB;AAAA,EAEA,MAAM,IAAI,KAAK;AACX,UAAM,YAAY,IAAI;AACtB,UAAM,EAAE,MAAM,IAAI,OAAO,IAAI,IAAI;AACjC,WAAO,MAAM,GAAG;AAAA,EACpB;AAAA,EAEA,MAAM,IAAI,KAAK,OAAO;AAClB,UAAM,YAAY,IAAI;AACtB,UAAM,KAAK,OAAO,IAAI,IAAI;AAC1B,OAAG,MAAM,GAAG,IAAI;AAChB,UAAM,GAAG,KAAK,MAAM,KAAK,KAAK;AAC9B,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,QAAQ,KAAK;AACf,UAAM,YAAY,IAAI;AACtB,UAAM,KAAK,OAAO,IAAI,IAAI;AAC1B,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAG,OAAO,GAAG,GAAG;AAAE,aAAO;AAAA,IAAO;AAC1E,WAAO,GAAG,MAAM,GAAG;AACnB,UAAM,GAAG,KAAK,MAAM,GAAG;AACvB,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,OAAO;AACT,UAAM,YAAY,IAAI;AACtB,WAAO,OAAO,KAAK,OAAO,IAAI,IAAI,EAAE,KAAK;AAAA,EAC7C;AAAA,EAEA,MAAM,WAAW;AACb,UAAM,KAAK,OAAO,IAAI,IAAI;AAC1B,UAAM,GAAG,KAAK,SAAS;AAAA,EAC3B;AACJ;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@randajan/koa-io-session",
3
- "version": "2.2.0",
3
+ "version": "3.0.0",
4
4
  "description": "Simple bridge between koa-session and socket.io. Shares a unified session across HTTP and WebSocket using a common session store.",
5
5
  "repository": "randajan/koa-io-session",
6
6
  "type": "module",
@@ -10,6 +10,10 @@
10
10
  ".": {
11
11
  "import": "./dist/esm/index.mjs",
12
12
  "require": "./dist/cjs/index.cjs"
13
+ },
14
+ "./fdb": {
15
+ "import": "./dist/esm/stores/FileStore.mjs",
16
+ "require": "./dist/cjs/stores/FileStore.cjs"
13
17
  }
14
18
  },
15
19
  "license": "MIT",
@@ -49,5 +53,8 @@
49
53
  "@randajan/props": "^0.1.4",
50
54
  "crypto": "^1.0.1",
51
55
  "koa-session": "^7.0.2"
56
+ },
57
+ "peerDependencies": {
58
+ "@randajan/file-db": "^1.1.4"
52
59
  }
53
60
  }