@randajan/koa-io-session 0.0.3 → 0.0.4

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.
package/README.md CHANGED
@@ -26,7 +26,7 @@ const app = new Koa();
26
26
  const server = http.createServer(app.callback());
27
27
  const io = new Server(server);
28
28
 
29
- attachSession(app, io, {
29
+ const store = attachSession(app, io, {
30
30
  key: "koa:sess",
31
31
  signed: true,
32
32
  maxAge: 86400000
@@ -92,6 +92,7 @@ var attachSession = (app, io, opt = {}) => {
92
92
  (0, import_props2.virtual)(socket, "session", (_) => store.get(sid));
93
93
  await next();
94
94
  });
95
+ return opt.store;
95
96
  };
96
97
  var index_default = attachSession;
97
98
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.js", "../../src/SessionStore.js"],
4
- "sourcesContent": ["import crypto from \"crypto\";\nimport session from \"koa-session\";\nimport { SessionStore } from \"./SessionStore\";\nimport { virtual } from \"@randajan/props\";\n\nconst uid = (len = 12) => crypto.randomBytes(len).toString(\"base64url\").slice(0, len);\n\nexport const attachSession = (app, io, opt = {}) => {\n if (!app.keys) { app.keys = Array(6).fill().map(() => uid(12)); }\n\n if (!opt.key) { opt.key = uid(12); }\n if (!opt.store) { opt.store = new SessionStore(); }\n\n const { key, store } = opt;\n\n const signed = (\"signed\" in opt) ? !!opt.signed : true;\n delete opt.signed;\n\n app.use(session(opt, app));\n app.use(async (ctx, next) => {\n ctx.session.active = true; //idk why but without this it doesnt work :)\n await next();\n });\n \n io.use(async (socket, next) => {\n \n if (!socket.handshake.headers.cookie) { return next(new Error('no cookie')); }\n \n const ctx = app.createContext(socket.request, socket.response);\n const sid = ctx.cookies.get(key, { signed });\n \n virtual(socket, \"sessionId\", _=>sid);\n virtual(socket, \"session\", _=>store.get(sid));\n \n await next();\n });\n};\n\n\n\nexport default attachSession;", "import { solid } from \"@randajan/props\";\r\n\r\n\r\nexport class SessionStore {\r\n constructor() {\r\n solid(this, \"_recs\", new Map());\r\n }\r\n\r\n get(sid) {\r\n const rec = this._recs.get(sid);\r\n if (!rec) { return; }\r\n if (Date.now() < rec.expiresAt) { return rec.session; }\r\n this.destroy(sid);\r\n }\r\n\r\n set(sid, session, maxAge) {\r\n const expiresAt = Date.now() + maxAge;\r\n this._recs.set(sid, { session, expiresAt, maxAge });\r\n }\r\n\r\n destroy(sid) {\r\n this._recs.delete(sid);\r\n }\r\n};"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,yBAAoB;;;ACDpB,mBAAsB;AAGf,IAAM,eAAN,MAAmB;AAAA,EACtB,cAAc;AACV,4BAAM,MAAM,SAAS,oBAAI,IAAI,CAAC;AAAA,EAClC;AAAA,EAEA,IAAI,KAAK;AACL,UAAM,MAAM,KAAK,MAAM,IAAI,GAAG;AAC9B,QAAI,CAAC,KAAK;AAAE;AAAA,IAAQ;AACpB,QAAI,KAAK,IAAI,IAAI,IAAI,WAAW;AAAE,aAAO,IAAI;AAAA,IAAS;AACtD,SAAK,QAAQ,GAAG;AAAA,EACpB;AAAA,EAEA,IAAI,KAAKA,UAAS,QAAQ;AACtB,UAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,SAAK,MAAM,IAAI,KAAK,EAAE,SAAAA,UAAS,WAAW,OAAO,CAAC;AAAA,EACtD;AAAA,EAEA,QAAQ,KAAK;AACT,SAAK,MAAM,OAAO,GAAG;AAAA,EACzB;AACJ;;;ADpBA,IAAAC,gBAAwB;AAExB,IAAM,MAAM,CAAC,MAAM,OAAO,cAAAC,QAAO,YAAY,GAAG,EAAE,SAAS,WAAW,EAAE,MAAM,GAAG,GAAG;AAE7E,IAAM,gBAAgB,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM;AAChD,MAAI,CAAC,IAAI,MAAM;AAAE,QAAI,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,EAAG;AAEhE,MAAI,CAAC,IAAI,KAAK;AAAE,QAAI,MAAM,IAAI,EAAE;AAAA,EAAG;AACnC,MAAI,CAAC,IAAI,OAAO;AAAE,QAAI,QAAQ,IAAI,aAAa;AAAA,EAAG;AAElD,QAAM,EAAE,KAAK,MAAM,IAAI;AAEvB,QAAM,SAAU,YAAY,MAAO,CAAC,CAAC,IAAI,SAAS;AAClD,SAAO,IAAI;AAEX,MAAI,QAAI,mBAAAC,SAAQ,KAAK,GAAG,CAAC;AACzB,MAAI,IAAI,OAAO,KAAK,SAAS;AACzB,QAAI,QAAQ,SAAS;AACrB,UAAM,KAAK;AAAA,EACf,CAAC;AAED,KAAG,IAAI,OAAO,QAAQ,SAAS;AAE3B,QAAI,CAAC,OAAO,UAAU,QAAQ,QAAQ;AAAE,aAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAAA,IAAG;AAE7E,UAAM,MAAM,IAAI,cAAc,OAAO,SAAS,OAAO,QAAQ;AAC7D,UAAM,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE,OAAO,CAAC;AAE3C,+BAAQ,QAAQ,aAAa,OAAG,GAAG;AACnC,+BAAQ,QAAQ,WAAW,OAAG,MAAM,IAAI,GAAG,CAAC;AAE5C,UAAM,KAAK;AAAA,EACf,CAAC;AACL;AAIA,IAAO,gBAAQ;",
4
+ "sourcesContent": ["import crypto from \"crypto\";\nimport session from \"koa-session\";\nimport { SessionStore } from \"./SessionStore\";\nimport { virtual } from \"@randajan/props\";\n\nconst uid = (len = 12) => crypto.randomBytes(len).toString(\"base64url\").slice(0, len);\n\nexport const attachSession = (app, io, opt = {}) => {\n if (!app.keys) { app.keys = Array(6).fill().map(() => uid(12)); }\n\n if (!opt.key) { opt.key = uid(12); }\n if (!opt.store) { opt.store = new SessionStore(); }\n\n const { key, store } = opt;\n\n const signed = (\"signed\" in opt) ? !!opt.signed : true;\n delete opt.signed;\n\n app.use(session(opt, app));\n app.use(async (ctx, next) => {\n ctx.session.active = true; //idk why but without this it doesnt work :)\n await next();\n });\n \n io.use(async (socket, next) => {\n \n if (!socket.handshake.headers.cookie) { return next(new Error('no cookie')); }\n \n const ctx = app.createContext(socket.request, socket.response);\n const sid = ctx.cookies.get(key, { signed });\n \n virtual(socket, \"sessionId\", _=>sid);\n virtual(socket, \"session\", _=>store.get(sid));\n \n await next();\n });\n\n return opt.store;\n};\n\n\n\nexport default attachSession;", "import { solid } from \"@randajan/props\";\r\n\r\n\r\nexport class SessionStore {\r\n constructor() {\r\n solid(this, \"_recs\", new Map());\r\n }\r\n\r\n get(sid) {\r\n const rec = this._recs.get(sid);\r\n if (!rec) { return; }\r\n if (Date.now() < rec.expiresAt) { return rec.session; }\r\n this.destroy(sid);\r\n }\r\n\r\n set(sid, session, maxAge) {\r\n const expiresAt = Date.now() + maxAge;\r\n this._recs.set(sid, { session, expiresAt, maxAge });\r\n }\r\n\r\n destroy(sid) {\r\n this._recs.delete(sid);\r\n }\r\n};"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,yBAAoB;;;ACDpB,mBAAsB;AAGf,IAAM,eAAN,MAAmB;AAAA,EACtB,cAAc;AACV,4BAAM,MAAM,SAAS,oBAAI,IAAI,CAAC;AAAA,EAClC;AAAA,EAEA,IAAI,KAAK;AACL,UAAM,MAAM,KAAK,MAAM,IAAI,GAAG;AAC9B,QAAI,CAAC,KAAK;AAAE;AAAA,IAAQ;AACpB,QAAI,KAAK,IAAI,IAAI,IAAI,WAAW;AAAE,aAAO,IAAI;AAAA,IAAS;AACtD,SAAK,QAAQ,GAAG;AAAA,EACpB;AAAA,EAEA,IAAI,KAAKA,UAAS,QAAQ;AACtB,UAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,SAAK,MAAM,IAAI,KAAK,EAAE,SAAAA,UAAS,WAAW,OAAO,CAAC;AAAA,EACtD;AAAA,EAEA,QAAQ,KAAK;AACT,SAAK,MAAM,OAAO,GAAG;AAAA,EACzB;AACJ;;;ADpBA,IAAAC,gBAAwB;AAExB,IAAM,MAAM,CAAC,MAAM,OAAO,cAAAC,QAAO,YAAY,GAAG,EAAE,SAAS,WAAW,EAAE,MAAM,GAAG,GAAG;AAE7E,IAAM,gBAAgB,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM;AAChD,MAAI,CAAC,IAAI,MAAM;AAAE,QAAI,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,EAAG;AAEhE,MAAI,CAAC,IAAI,KAAK;AAAE,QAAI,MAAM,IAAI,EAAE;AAAA,EAAG;AACnC,MAAI,CAAC,IAAI,OAAO;AAAE,QAAI,QAAQ,IAAI,aAAa;AAAA,EAAG;AAElD,QAAM,EAAE,KAAK,MAAM,IAAI;AAEvB,QAAM,SAAU,YAAY,MAAO,CAAC,CAAC,IAAI,SAAS;AAClD,SAAO,IAAI;AAEX,MAAI,QAAI,mBAAAC,SAAQ,KAAK,GAAG,CAAC;AACzB,MAAI,IAAI,OAAO,KAAK,SAAS;AACzB,QAAI,QAAQ,SAAS;AACrB,UAAM,KAAK;AAAA,EACf,CAAC;AAED,KAAG,IAAI,OAAO,QAAQ,SAAS;AAE3B,QAAI,CAAC,OAAO,UAAU,QAAQ,QAAQ;AAAE,aAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAAA,IAAG;AAE7E,UAAM,MAAM,IAAI,cAAc,OAAO,SAAS,OAAO,QAAQ;AAC7D,UAAM,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE,OAAO,CAAC;AAE3C,+BAAQ,QAAQ,aAAa,OAAG,GAAG;AACnC,+BAAQ,QAAQ,WAAW,OAAG,MAAM,IAAI,GAAG,CAAC;AAE5C,UAAM,KAAK;AAAA,EACf,CAAC;AAED,SAAO,IAAI;AACf;AAIA,IAAO,gBAAQ;",
6
6
  "names": ["session", "import_props", "crypto", "session"]
7
7
  }
@@ -58,6 +58,7 @@ var attachSession = (app, io, opt = {}) => {
58
58
  virtual(socket, "session", (_) => store.get(sid));
59
59
  await next();
60
60
  });
61
+ return opt.store;
61
62
  };
62
63
  var index_default = attachSession;
63
64
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.js", "../../src/SessionStore.js"],
4
- "sourcesContent": ["import crypto from \"crypto\";\nimport session from \"koa-session\";\nimport { SessionStore } from \"./SessionStore\";\nimport { virtual } from \"@randajan/props\";\n\nconst uid = (len = 12) => crypto.randomBytes(len).toString(\"base64url\").slice(0, len);\n\nexport const attachSession = (app, io, opt = {}) => {\n if (!app.keys) { app.keys = Array(6).fill().map(() => uid(12)); }\n\n if (!opt.key) { opt.key = uid(12); }\n if (!opt.store) { opt.store = new SessionStore(); }\n\n const { key, store } = opt;\n\n const signed = (\"signed\" in opt) ? !!opt.signed : true;\n delete opt.signed;\n\n app.use(session(opt, app));\n app.use(async (ctx, next) => {\n ctx.session.active = true; //idk why but without this it doesnt work :)\n await next();\n });\n \n io.use(async (socket, next) => {\n \n if (!socket.handshake.headers.cookie) { return next(new Error('no cookie')); }\n \n const ctx = app.createContext(socket.request, socket.response);\n const sid = ctx.cookies.get(key, { signed });\n \n virtual(socket, \"sessionId\", _=>sid);\n virtual(socket, \"session\", _=>store.get(sid));\n \n await next();\n });\n};\n\n\n\nexport default attachSession;", "import { solid } from \"@randajan/props\";\r\n\r\n\r\nexport class SessionStore {\r\n constructor() {\r\n solid(this, \"_recs\", new Map());\r\n }\r\n\r\n get(sid) {\r\n const rec = this._recs.get(sid);\r\n if (!rec) { return; }\r\n if (Date.now() < rec.expiresAt) { return rec.session; }\r\n this.destroy(sid);\r\n }\r\n\r\n set(sid, session, maxAge) {\r\n const expiresAt = Date.now() + maxAge;\r\n this._recs.set(sid, { session, expiresAt, maxAge });\r\n }\r\n\r\n destroy(sid) {\r\n this._recs.delete(sid);\r\n }\r\n};"],
5
- "mappings": ";AAAA,OAAO,YAAY;AACnB,OAAO,aAAa;;;ACDpB,SAAS,aAAa;AAGf,IAAM,eAAN,MAAmB;AAAA,EACtB,cAAc;AACV,UAAM,MAAM,SAAS,oBAAI,IAAI,CAAC;AAAA,EAClC;AAAA,EAEA,IAAI,KAAK;AACL,UAAM,MAAM,KAAK,MAAM,IAAI,GAAG;AAC9B,QAAI,CAAC,KAAK;AAAE;AAAA,IAAQ;AACpB,QAAI,KAAK,IAAI,IAAI,IAAI,WAAW;AAAE,aAAO,IAAI;AAAA,IAAS;AACtD,SAAK,QAAQ,GAAG;AAAA,EACpB;AAAA,EAEA,IAAI,KAAKA,UAAS,QAAQ;AACtB,UAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,SAAK,MAAM,IAAI,KAAK,EAAE,SAAAA,UAAS,WAAW,OAAO,CAAC;AAAA,EACtD;AAAA,EAEA,QAAQ,KAAK;AACT,SAAK,MAAM,OAAO,GAAG;AAAA,EACzB;AACJ;;;ADpBA,SAAS,eAAe;AAExB,IAAM,MAAM,CAAC,MAAM,OAAO,OAAO,YAAY,GAAG,EAAE,SAAS,WAAW,EAAE,MAAM,GAAG,GAAG;AAE7E,IAAM,gBAAgB,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM;AAChD,MAAI,CAAC,IAAI,MAAM;AAAE,QAAI,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,EAAG;AAEhE,MAAI,CAAC,IAAI,KAAK;AAAE,QAAI,MAAM,IAAI,EAAE;AAAA,EAAG;AACnC,MAAI,CAAC,IAAI,OAAO;AAAE,QAAI,QAAQ,IAAI,aAAa;AAAA,EAAG;AAElD,QAAM,EAAE,KAAK,MAAM,IAAI;AAEvB,QAAM,SAAU,YAAY,MAAO,CAAC,CAAC,IAAI,SAAS;AAClD,SAAO,IAAI;AAEX,MAAI,IAAI,QAAQ,KAAK,GAAG,CAAC;AACzB,MAAI,IAAI,OAAO,KAAK,SAAS;AACzB,QAAI,QAAQ,SAAS;AACrB,UAAM,KAAK;AAAA,EACf,CAAC;AAED,KAAG,IAAI,OAAO,QAAQ,SAAS;AAE3B,QAAI,CAAC,OAAO,UAAU,QAAQ,QAAQ;AAAE,aAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAAA,IAAG;AAE7E,UAAM,MAAM,IAAI,cAAc,OAAO,SAAS,OAAO,QAAQ;AAC7D,UAAM,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE,OAAO,CAAC;AAE3C,YAAQ,QAAQ,aAAa,OAAG,GAAG;AACnC,YAAQ,QAAQ,WAAW,OAAG,MAAM,IAAI,GAAG,CAAC;AAE5C,UAAM,KAAK;AAAA,EACf,CAAC;AACL;AAIA,IAAO,gBAAQ;",
4
+ "sourcesContent": ["import crypto from \"crypto\";\nimport session from \"koa-session\";\nimport { SessionStore } from \"./SessionStore\";\nimport { virtual } from \"@randajan/props\";\n\nconst uid = (len = 12) => crypto.randomBytes(len).toString(\"base64url\").slice(0, len);\n\nexport const attachSession = (app, io, opt = {}) => {\n if (!app.keys) { app.keys = Array(6).fill().map(() => uid(12)); }\n\n if (!opt.key) { opt.key = uid(12); }\n if (!opt.store) { opt.store = new SessionStore(); }\n\n const { key, store } = opt;\n\n const signed = (\"signed\" in opt) ? !!opt.signed : true;\n delete opt.signed;\n\n app.use(session(opt, app));\n app.use(async (ctx, next) => {\n ctx.session.active = true; //idk why but without this it doesnt work :)\n await next();\n });\n \n io.use(async (socket, next) => {\n \n if (!socket.handshake.headers.cookie) { return next(new Error('no cookie')); }\n \n const ctx = app.createContext(socket.request, socket.response);\n const sid = ctx.cookies.get(key, { signed });\n \n virtual(socket, \"sessionId\", _=>sid);\n virtual(socket, \"session\", _=>store.get(sid));\n \n await next();\n });\n\n return opt.store;\n};\n\n\n\nexport default attachSession;", "import { solid } from \"@randajan/props\";\r\n\r\n\r\nexport class SessionStore {\r\n constructor() {\r\n solid(this, \"_recs\", new Map());\r\n }\r\n\r\n get(sid) {\r\n const rec = this._recs.get(sid);\r\n if (!rec) { return; }\r\n if (Date.now() < rec.expiresAt) { return rec.session; }\r\n this.destroy(sid);\r\n }\r\n\r\n set(sid, session, maxAge) {\r\n const expiresAt = Date.now() + maxAge;\r\n this._recs.set(sid, { session, expiresAt, maxAge });\r\n }\r\n\r\n destroy(sid) {\r\n this._recs.delete(sid);\r\n }\r\n};"],
5
+ "mappings": ";AAAA,OAAO,YAAY;AACnB,OAAO,aAAa;;;ACDpB,SAAS,aAAa;AAGf,IAAM,eAAN,MAAmB;AAAA,EACtB,cAAc;AACV,UAAM,MAAM,SAAS,oBAAI,IAAI,CAAC;AAAA,EAClC;AAAA,EAEA,IAAI,KAAK;AACL,UAAM,MAAM,KAAK,MAAM,IAAI,GAAG;AAC9B,QAAI,CAAC,KAAK;AAAE;AAAA,IAAQ;AACpB,QAAI,KAAK,IAAI,IAAI,IAAI,WAAW;AAAE,aAAO,IAAI;AAAA,IAAS;AACtD,SAAK,QAAQ,GAAG;AAAA,EACpB;AAAA,EAEA,IAAI,KAAKA,UAAS,QAAQ;AACtB,UAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,SAAK,MAAM,IAAI,KAAK,EAAE,SAAAA,UAAS,WAAW,OAAO,CAAC;AAAA,EACtD;AAAA,EAEA,QAAQ,KAAK;AACT,SAAK,MAAM,OAAO,GAAG;AAAA,EACzB;AACJ;;;ADpBA,SAAS,eAAe;AAExB,IAAM,MAAM,CAAC,MAAM,OAAO,OAAO,YAAY,GAAG,EAAE,SAAS,WAAW,EAAE,MAAM,GAAG,GAAG;AAE7E,IAAM,gBAAgB,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM;AAChD,MAAI,CAAC,IAAI,MAAM;AAAE,QAAI,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,EAAG;AAEhE,MAAI,CAAC,IAAI,KAAK;AAAE,QAAI,MAAM,IAAI,EAAE;AAAA,EAAG;AACnC,MAAI,CAAC,IAAI,OAAO;AAAE,QAAI,QAAQ,IAAI,aAAa;AAAA,EAAG;AAElD,QAAM,EAAE,KAAK,MAAM,IAAI;AAEvB,QAAM,SAAU,YAAY,MAAO,CAAC,CAAC,IAAI,SAAS;AAClD,SAAO,IAAI;AAEX,MAAI,IAAI,QAAQ,KAAK,GAAG,CAAC;AACzB,MAAI,IAAI,OAAO,KAAK,SAAS;AACzB,QAAI,QAAQ,SAAS;AACrB,UAAM,KAAK;AAAA,EACf,CAAC;AAED,KAAG,IAAI,OAAO,QAAQ,SAAS;AAE3B,QAAI,CAAC,OAAO,UAAU,QAAQ,QAAQ;AAAE,aAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAAA,IAAG;AAE7E,UAAM,MAAM,IAAI,cAAc,OAAO,SAAS,OAAO,QAAQ;AAC7D,UAAM,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE,OAAO,CAAC;AAE3C,YAAQ,QAAQ,aAAa,OAAG,GAAG;AACnC,YAAQ,QAAQ,WAAW,OAAG,MAAM,IAAI,GAAG,CAAC;AAE5C,UAAM,KAAK;AAAA,EACf,CAAC;AAED,SAAO,IAAI;AACf;AAIA,IAAO,gBAAQ;",
6
6
  "names": ["session"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@randajan/koa-io-session",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
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",