insite-cookie 2.0.14 → 2.0.21

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.
@@ -7,10 +7,12 @@ export type Options = {
7
7
  onerror?: (this: XMLHttpRequest, event: ProgressEvent) => unknown;
8
8
  };
9
9
  export declare class CookieSetter {
10
- #private;
11
10
  constructor(ws: InSiteWebSocket, options?: Options);
12
11
  readonly method: Method;
13
12
  readonly url: string;
13
+ private onload;
14
+ private onerror;
15
+ private handleSet;
14
16
  static onXhrLoad(this: XMLHttpRequest): void;
15
17
  static onXhrError(this: XMLHttpRequest): void;
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Setter.d.ts","sourceRoot":"","sources":["../../src/client/Setter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAMjD,MAAM,MAAM,OAAO,GAAG;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;CAClE,CAAC;AAGF,qBAAa,YAAY;;gBACZ,EAAE,EAAE,eAAe,EAAE,OAAO,GAAE,OAAY;IAkBtD,QAAQ,CAAC,MAAM,SAAC;IAChB,QAAQ,CAAC,GAAG,SAAC;IAkBb,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc;IAOrC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc;CAMtC"}
1
+ {"version":3,"file":"Setter.d.ts","sourceRoot":"","sources":["../../src/client/Setter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAMjD,MAAM,MAAM,OAAO,GAAG;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;CAClE,CAAC;AAGF,qBAAa,YAAY;gBACZ,EAAE,EAAE,eAAe,EAAE,OAAO,GAAE,OAAY;IAkBtD,QAAQ,CAAC,MAAM,SAAC;IAChB,QAAQ,CAAC,GAAG,SAAC;IACb,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,OAAO,CAAC;IAEhB,OAAO,CAAC,SAAS,CAWf;IAGF,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc;IAOrC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc;CAMtC"}
@@ -1,2 +1,2 @@
1
- var k=Object.defineProperty;var u=o=>{throw TypeError(o)};var y=(o,t,e)=>t in o?k(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;var p=(o,t,e)=>y(o,typeof t!="symbol"?t+"":t,e),c=(o,t,e)=>t.has(o)||u("Cannot "+e);var i=(o,t,e)=>(c(o,t,"read from private field"),e?e.call(o):t.get(o)),h=(o,t,e)=>t.has(o)?u("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(o):t.set(o,e),l=(o,t,e,n)=>(c(o,t,"write to private field"),n?n.call(o,e):t.set(o,e),e);var m={set:"~setcookie"};var r,s,d,a=class a{constructor(t,e={}){p(this,"method");p(this,"url");h(this,r);h(this,s);h(this,d,t=>{let e=new XMLHttpRequest;e.onload=i(this,r),e.onerror=i(this,s),e.open(this.method,`${this.url}?${t}`,!0),e.send(null)});let{method:n="GET",url:x="/cookie",onload:M=a.onXhrLoad,onerror:S=a.onXhrError}=e;this.method=n,this.url=x,l(this,r,M),l(this,s,S),t.on(`message:${m.set}`,i(this,d))}static onXhrLoad(){this.readyState===4&&this.status!==200&&console.error("Set cookie:",this.statusText)}static onXhrError(){console.error("Set cookie:",this.statusText)}};r=new WeakMap,s=new WeakMap,d=new WeakMap;var X=a;export{X as CookieSetter};
1
+ var p=Object.defineProperty;var l=(o,t,e)=>t in o?p(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;var r=(o,t,e)=>l(o,typeof t!="symbol"?t+"":t,e);var s={set:"~setcookie"};var n=class o{constructor(t,e={}){r(this,"method");r(this,"url");r(this,"onload");r(this,"onerror");r(this,"handleSet",t=>{let e=new XMLHttpRequest;e.onload=this.onload,e.onerror=this.onerror,e.open(this.method,`${this.url}?${t}`,!0),e.send(null)});let{method:i="GET",url:h="/cookie",onload:a=o.onXhrLoad,onerror:d=o.onXhrError}=e;this.method=i,this.url=h,this.onload=a,this.onerror=d,t.on(`message:${s.set}`,this.handleSet)}static onXhrLoad(){this.readyState===4&&this.status!==200&&console.error("Set cookie:",this.statusText)}static onXhrError(){console.error("Set cookie:",this.statusText)}};export{n as CookieSetter};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/common.ts", "../../src/client/Setter.ts"],
4
- "sourcesContent": ["export const headers = {\n\tset: \"~setcookie\"\n};\n\nexport type Method = \"GET\" | \"POST\";\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport { headers, type Method } from \"../common\";\n\n\n/* eslint-disable unicorn/prefer-add-event-listener */\n\n\nexport type Options = {\n\tmethod?: Method;\n\turl?: string;\n\tonload?: (this: XMLHttpRequest, event: ProgressEvent) => unknown;\n\tonerror?: (this: XMLHttpRequest, event: ProgressEvent) => unknown;\n};\n\n\nexport class CookieSetter {\n\tconstructor(ws: InSiteWebSocket, options: Options = {}) {\n\t\t\n\t\tconst {\n\t\t\tmethod = \"GET\",\n\t\t\turl = \"/cookie\",\n\t\t\tonload = CookieSetter.onXhrLoad,\n\t\t\tonerror = CookieSetter.onXhrError\n\t\t} = options;\n\t\t\n\t\tthis.method = method;\n\t\tthis.url = url;\n\t\tthis.#onload = onload;\n\t\tthis.#onerror = onerror;\n\t\t\n\t\tws.on(`message:${headers.set}`, this.#handleSet);\n\t\t\n\t}\n\t\n\treadonly method;\n\treadonly url;\n\t#onload;\n\t#onerror;\n\t\n\t#handleSet = (token: string) => {\n\t\t\n\t\tconst xhr = new XMLHttpRequest();\n\t\t\n\t\txhr.onload = this.#onload;\n\t\txhr.onerror = this.#onerror;\n\t\t\n\t\txhr.open(this.method, `${this.url}?${token}`, true);\n\t\t\n\t\txhr.send(null);\n\t\t\n\t};\n\t\n\t\n\tstatic onXhrLoad(this: XMLHttpRequest) {\n\t\t\n\t\tif (this.readyState === 4 && this.status !== 200)\n\t\t\tconsole.error(\"Set cookie:\", this.statusText);\n\t\t\n\t}\n\t\n\tstatic onXhrError(this: XMLHttpRequest) {\n\t\t\n\t\tconsole.error(\"Set cookie:\", this.statusText);\n\t\t\n\t}\n\t\n}\n"],
5
- "mappings": "2eAAO,IAAMA,EAAU,CACtB,IAAK,YACN,ECFA,IAAAC,EAAAC,EAAAC,EAeaC,EAAN,MAAMA,CAAa,CACzB,YAAYC,EAAqBC,EAAmB,CAAC,EAAG,CAkBxDC,EAAA,KAAS,UACTA,EAAA,KAAS,OACTC,EAAA,KAAAP,GACAO,EAAA,KAAAN,GAEAM,EAAA,KAAAL,EAAcM,GAAkB,CAE/B,IAAMC,EAAM,IAAI,eAEhBA,EAAI,OAASC,EAAA,KAAKV,GAClBS,EAAI,QAAUC,EAAA,KAAKT,GAEnBQ,EAAI,KAAK,KAAK,OAAQ,GAAG,KAAK,GAAG,IAAID,CAAK,GAAI,EAAI,EAElDC,EAAI,KAAK,IAAI,CAEd,GAhCC,GAAM,CACL,OAAAE,EAAS,MACT,IAAAC,EAAM,UACN,OAAAC,EAASV,EAAa,UACtB,QAAAW,EAAUX,EAAa,UACxB,EAAIE,EAEJ,KAAK,OAASM,EACd,KAAK,IAAMC,EACXG,EAAA,KAAKf,EAAUa,GACfE,EAAA,KAAKd,EAAWa,GAEhBV,EAAG,GAAG,WAAWY,EAAQ,GAAG,GAAIN,EAAA,KAAKR,EAAU,CAEhD,CAqBA,OAAO,WAAgC,CAElC,KAAK,aAAe,GAAK,KAAK,SAAW,KAC5C,QAAQ,MAAM,cAAe,KAAK,UAAU,CAE9C,CAEA,OAAO,YAAiC,CAEvC,QAAQ,MAAM,cAAe,KAAK,UAAU,CAE7C,CAED,EA9BCF,EAAA,YACAC,EAAA,YAEAC,EAAA,YAxBM,IAAMe,EAANd",
6
- "names": ["headers", "_onload", "_onerror", "_handleSet", "_CookieSetter", "ws", "options", "__publicField", "__privateAdd", "token", "xhr", "__privateGet", "method", "url", "onload", "onerror", "__privateSet", "headers", "CookieSetter"]
4
+ "sourcesContent": ["export const headers = {\n\tset: \"~setcookie\"\n};\n\nexport type Method = \"GET\" | \"POST\";\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport { headers, type Method } from \"../common\";\n\n\n/* eslint-disable unicorn/prefer-add-event-listener */\n\n\nexport type Options = {\n\tmethod?: Method;\n\turl?: string;\n\tonload?: (this: XMLHttpRequest, event: ProgressEvent) => unknown;\n\tonerror?: (this: XMLHttpRequest, event: ProgressEvent) => unknown;\n};\n\n\nexport class CookieSetter {\n\tconstructor(ws: InSiteWebSocket, options: Options = {}) {\n\t\t\n\t\tconst {\n\t\t\tmethod = \"GET\",\n\t\t\turl = \"/cookie\",\n\t\t\tonload = CookieSetter.onXhrLoad,\n\t\t\tonerror = CookieSetter.onXhrError\n\t\t} = options;\n\t\t\n\t\tthis.method = method;\n\t\tthis.url = url;\n\t\tthis.onload = onload;\n\t\tthis.onerror = onerror;\n\t\t\n\t\tws.on(`message:${headers.set}`, this.handleSet);\n\t\t\n\t}\n\t\n\treadonly method;\n\treadonly url;\n\tprivate onload;\n\tprivate onerror;\n\t\n\tprivate handleSet = (token: string) => {\n\t\t\n\t\tconst xhr = new XMLHttpRequest();\n\t\t\n\t\txhr.onload = this.onload;\n\t\txhr.onerror = this.onerror;\n\t\t\n\t\txhr.open(this.method, `${this.url}?${token}`, true);\n\t\t\n\t\txhr.send(null);\n\t\t\n\t};\n\t\n\t\n\tstatic onXhrLoad(this: XMLHttpRequest) {\n\t\t\n\t\tif (this.readyState === 4 && this.status !== 200)\n\t\t\tconsole.error(\"Set cookie:\", this.statusText);\n\t\t\n\t}\n\t\n\tstatic onXhrError(this: XMLHttpRequest) {\n\t\t\n\t\tconsole.error(\"Set cookie:\", this.statusText);\n\t\t\n\t}\n\t\n}\n"],
5
+ "mappings": "oKAAO,IAAMA,EAAU,CACtB,IAAK,YACN,ECaO,IAAMC,EAAN,MAAMC,CAAa,CACzB,YAAYC,EAAqBC,EAAmB,CAAC,EAAG,CAkBxDC,EAAA,KAAS,UACTA,EAAA,KAAS,OACTA,EAAA,KAAQ,UACRA,EAAA,KAAQ,WAERA,EAAA,KAAQ,YAAaC,GAAkB,CAEtC,IAAMC,EAAM,IAAI,eAEhBA,EAAI,OAAS,KAAK,OAClBA,EAAI,QAAU,KAAK,QAEnBA,EAAI,KAAK,KAAK,OAAQ,GAAG,KAAK,GAAG,IAAID,CAAK,GAAI,EAAI,EAElDC,EAAI,KAAK,IAAI,CAEd,GAhCC,GAAM,CACL,OAAAC,EAAS,MACT,IAAAC,EAAM,UACN,OAAAC,EAASR,EAAa,UACtB,QAAAS,EAAUT,EAAa,UACxB,EAAIE,EAEJ,KAAK,OAASI,EACd,KAAK,IAAMC,EACX,KAAK,OAASC,EACd,KAAK,QAAUC,EAEfR,EAAG,GAAG,WAAWS,EAAQ,GAAG,GAAI,KAAK,SAAS,CAE/C,CAqBA,OAAO,WAAgC,CAElC,KAAK,aAAe,GAAK,KAAK,SAAW,KAC5C,QAAQ,MAAM,cAAe,KAAK,UAAU,CAE9C,CAEA,OAAO,YAAiC,CAEvC,QAAQ,MAAM,cAAe,KAAK,UAAU,CAE7C,CAED",
6
+ "names": ["headers", "CookieSetter", "_CookieSetter", "ws", "options", "__publicField", "token", "xhr", "method", "url", "onload", "onerror", "headers"]
7
7
  }
@@ -9,8 +9,8 @@ type MakeArg = {
9
9
  value: Cookie[keyof Cookie];
10
10
  } & CookieOptions;
11
11
  export declare class InSiteCookieMiddleware extends InSiteServerMiddleware {
12
- #private;
13
12
  constructor(options?: Options);
13
+ private handler;
14
14
  static make({ name, value, maxAge, expiresAt, domain, path, secure, httpOnly, sameSite }: MakeArg): string;
15
15
  static cookify(cookie: Cookie, options: CookieOptions): string[];
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../../src/server/Middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGrD,KAAK,OAAO,GAAG;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,YAAY,EAAE,OAAO,IAAI,uBAAuB,EAAE,CAAC;AAEnD,KAAK,OAAO,GAAG;IACd,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC;CAC5B,GAAG,aAAa,CAAC;AAGlB,qBAAa,sBAAuB,SAAQ,sBAAsB;;gBACrD,OAAO,GAAE,OAAY;IA2BjC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAU,EAAE,MAAa,EAAE,QAAe,EAAE,QAAmB,EAAE,EAAE,OAAO;IA0BhI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAIrD"}
1
+ {"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../../src/server/Middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGrD,KAAK,OAAO,GAAG;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,YAAY,EAAE,OAAO,IAAI,uBAAuB,EAAE,CAAC;AAEnD,KAAK,OAAO,GAAG;IACd,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC;CAC5B,GAAG,aAAa,CAAC;AAGlB,qBAAa,sBAAuB,SAAQ,sBAAsB;gBACrD,OAAO,GAAE,OAAY;IAajC,OAAO,CAAC,OAAO,CAWb;IAGF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAU,EAAE,MAAa,EAAE,QAAe,EAAE,QAAmB,EAAE,EAAE,OAAO;IA0BhI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAIrD"}
@@ -8,13 +8,15 @@ export type Options<AS extends AbilitiesSchema> = {
8
8
  maxAge?: number;
9
9
  };
10
10
  export declare class CookieSetter<AS extends AbilitiesSchema> {
11
- #private;
12
11
  constructor({ usersServer, domain, maxAge }: Options<AS>);
12
+ private wsSessionIdMap;
13
13
  usersServer: UsersServer<AS>;
14
14
  domain: string | undefined;
15
15
  maxAge: number;
16
16
  set(wssc: WSSCWithUser<AS>, cookie: Cookie, options: CookieOptions): void;
17
17
  unset(wssc: WSSCWithUser<AS>, names: string[]): void;
18
+ private handleClientConnect;
19
+ private handleClientSession;
18
20
  static parse: typeof parseCookie;
19
21
  }
20
22
  //# sourceMappingURL=Setter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Setter.d.ts","sourceRoot":"","sources":["../../src/server/Setter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKrD,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,IAAI;IACjD,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,qBAAa,YAAY,CAAC,EAAE,SAAS,eAAe;;gBACvC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;IAYxD,WAAW,kBAAC;IACZ,MAAM,qBAAC;IACP,MAAM,SAAC;IAEP,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAUlE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;IAoC7C,MAAM,CAAC,KAAK,qBAAe;CAE3B"}
1
+ {"version":3,"file":"Setter.d.ts","sourceRoot":"","sources":["../../src/server/Setter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKrD,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,IAAI;IACjD,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,qBAAa,YAAY,CAAC,EAAE,SAAS,eAAe;gBACvC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;IAUxD,OAAO,CAAC,cAAc,CAAkD;IAExE,WAAW,kBAAC;IACZ,MAAM,qBAAC;IACP,MAAM,SAAC;IAEP,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAUlE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;IAS7C,OAAO,CAAC,mBAAmB,CAYzB;IAEF,OAAO,CAAC,mBAAmB,CAUzB;IAGF,MAAM,CAAC,KAAK,qBAAe;CAE3B"}
@@ -1,2 +1,2 @@
1
- import{getWithTimeout as f}from"@nesvet/n";import{InSiteServerMiddleware as l}from"insite-http";var n=new Map;var u=class r extends l{constructor(e={}){super();let{requestRegExp:s=/^\/cookie\/?\?/}=e;this.listeners={GET:[[s,this.#e]]}}#e=(e,s)=>{let[,t]=e.url.split("?");return t&&n.has(t)?s.writeHead(200,{"Content-Type":"text/plain; charset=utf-8","Set-Cookie":r.cookify(...f(n,t))}).end():!1};static make({name:e,value:s,maxAge:t,expiresAt:o,domain:a,path:m="/",secure:k=!0,httpOnly:d=!0,sameSite:h="Strict"}){let i=[`${e}=${s}`];return t!==void 0?i.push(`Max-Age=${t}`):o&&i.push(`Max-Age=${Math.round((o.getTime()-Date.now())/1e3)}`),a&&i.push(`Domain=${a}`),m&&i.push(`Path=${m}`),k&&i.push("Secure"),d&&i.push("HttpOnly"),h&&i.push(`SameSite=${h}`),i.join("; ")}static cookify(e,s){return Object.entries(e).map(([t,o])=>this.make({name:t,value:o,...s}))}};function p(r){return r?r.split(/;\s*/).reduce((e,s)=>{let[t,o]=s.split(/=/);try{e[t]=JSON.parse(o)}catch{e[t]=o}return e},{}):{}}import g from"node:crypto";import{random as C,setWithTimeout as x}from"@nesvet/n";var S={set:"~setcookie"};var y=2e3,c=class{constructor({usersServer:e,domain:s,maxAge:t}){this.usersServer=e,this.domain=s??process.env.INSITE_HOST,this.maxAge=t??this.usersServer.users.sessions.collection.expireAfterSeconds,this.usersServer.wss.on("client-connect",this.#t),this.usersServer.wss.on("client-session",this.#s)}#e=new WeakMap;usersServer;domain;maxAge;set(e,s,t){let o=`${Math.round(performance.now()*Number.MAX_SAFE_INTEGER).toString(36)}$${g.randomBytes(C(4,8)).toString("hex")}`;x(n,o,[s,t],y),e.sendMessage(S.set,o)}unset(e,s){this.set(e,s.reduce((t,o)=>(t[o]="",t),{}),{maxAge:0})}#t=(e,s)=>{if(this.#e.set(e,null),s.headers.cookie){let{sessionId:t=null}=p(s.headers.cookie);this.#e.set(e,t),t&&this.usersServer.setSession(e,t,!0)}};#s=e=>{this.#e.get(e)!==e.session?._id&&(this.#e.set(e,e.session?._id??null),e.isOpen&&e.session?this.set(e,{sessionId:e.session._id},{domain:this.domain,maxAge:this.maxAge}):this.unset(e,["sessionId"]))};static parse=p};export{c as CookieSetter,u as InSiteCookieMiddleware,p as parseCookie};
1
+ import{getWithTimeout as k}from"@nesvet/n";import{InSiteServerMiddleware as f}from"insite-http";var n=new Map;var S=class r extends f{constructor(e={}){super();let{requestRegExp:t=/^\/cookie\/?\?/}=e;this.listeners={GET:[[t,this.handler]]}}handler=(e,t)=>{let[,s]=e.url.split("?");return s&&n.has(s)?t.writeHead(200,{"Content-Type":"text/plain; charset=utf-8","Set-Cookie":r.cookify(...k(n,s))}).end():!1};static make({name:e,value:t,maxAge:s,expiresAt:o,domain:a,path:m="/",secure:c=!0,httpOnly:l=!0,sameSite:h="Strict"}){let i=[`${e}=${t}`];return s!==void 0?i.push(`Max-Age=${s}`):o&&i.push(`Max-Age=${Math.round((o.getTime()-Date.now())/1e3)}`),a&&i.push(`Domain=${a}`),m&&i.push(`Path=${m}`),c&&i.push("Secure"),l&&i.push("HttpOnly"),h&&i.push(`SameSite=${h}`),i.join("; ")}static cookify(e,t){return Object.entries(e).map(([s,o])=>this.make({name:s,value:o,...t}))}};function p(r){return r?r.split(/;\s*/).reduce((e,t)=>{let[s,o]=t.split(/=/);try{e[s]=JSON.parse(o)}catch{e[s]=o}return e},{}):{}}import g from"node:crypto";import{random as C,setWithTimeout as x}from"@nesvet/n";var u={set:"~setcookie"};var y=2e3,d=class{constructor({usersServer:e,domain:t,maxAge:s}){this.usersServer=e,this.domain=t??process.env.INSITE_HOST,this.maxAge=s??this.usersServer.users.sessions.collection.expireAfterSeconds,this.usersServer.wss.on("client-connect",this.handleClientConnect),this.usersServer.wss.on("client-session",this.handleClientSession)}wsSessionIdMap=new WeakMap;usersServer;domain;maxAge;set(e,t,s){let o=`${Math.round(performance.now()*Number.MAX_SAFE_INTEGER).toString(36)}$${g.randomBytes(C(4,8)).toString("hex")}`;x(n,o,[t,s],y),e.sendMessage(u.set,o)}unset(e,t){this.set(e,t.reduce((s,o)=>(s[o]="",s),{}),{maxAge:0})}handleClientConnect=(e,t)=>{if(this.wsSessionIdMap.set(e,null),t.headers.cookie){let{sessionId:s=null}=p(t.headers.cookie);this.wsSessionIdMap.set(e,s),s&&this.usersServer.setSession(e,s,!0)}};handleClientSession=e=>{this.wsSessionIdMap.get(e)!==e.session?._id&&(this.wsSessionIdMap.set(e,e.session?._id??null),e.isOpen&&e.session?this.set(e,{sessionId:e.session._id},{domain:this.domain,maxAge:this.maxAge}):this.unset(e,["sessionId"]))};static parse=p};export{d as CookieSetter,S as InSiteCookieMiddleware,p as parseCookie};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/server/Middleware.ts", "../../src/server/tokenMap.ts", "../../src/server/parse.ts", "../../src/server/Setter.ts", "../../src/common.ts"],
4
- "sourcesContent": ["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { getWithTimeout } from \"@nesvet/n\";\nimport { InSiteServerMiddleware } from \"insite-http\";\nimport { tokenMap } from \"./tokenMap\";\nimport type { Cookie, CookieOptions } from \"./types\";\n\n\ntype Options = {\n\trequestRegExp?: RegExp;\n};\n\nexport type { Options as CookieMiddlewareOptions };\n\ntype MakeArg = {\n\tname: keyof Cookie;\n\tvalue: Cookie[keyof Cookie];\n} & CookieOptions;\n\n\nexport class InSiteCookieMiddleware extends InSiteServerMiddleware {\n\tconstructor(options: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tconst {\n\t\t\trequestRegExp = /^\\/cookie\\/?\\?/\n\t\t} = options;\n\t\t\n\t\tthis.listeners = { GET: [\n\t\t\t[ requestRegExp, this.#handler ]\n\t\t] };\n\t\t\n\t}\n\t\n\t#handler = (request: IncomingMessage, response: ServerResponse) => {\n\t\tconst [ , token ] = request.url!.split(\"?\");\n\t\t\n\t\tif (token && tokenMap.has(token))\n\t\t\treturn response.writeHead(200, {\n\t\t\t\t\"Content-Type\": \"text/plain; charset=utf-8\",\n\t\t\t\t\"Set-Cookie\": InSiteCookieMiddleware.cookify(...getWithTimeout(tokenMap, token)!)\n\t\t\t}).end();\n\t\t\n\t\t\n\t\treturn false;\n\t};\n\t\n\t\n\tstatic make({ name, value, maxAge, expiresAt, domain, path = \"/\", secure = true, httpOnly = true, sameSite = \"Strict\" }: MakeArg) {\n\t\tconst cookie = [ `${name}=${value}` ];\n\t\t\n\t\tif (maxAge !== undefined)\n\t\t\tcookie.push(`Max-Age=${maxAge}`);\n\t\telse if (expiresAt)\n\t\t\tcookie.push(`Max-Age=${Math.round((expiresAt.getTime() - Date.now()) / 1000)}`);\n\t\t\n\t\tif (domain)\n\t\t\tcookie.push(`Domain=${domain}`);\n\t\t\n\t\tif (path)\n\t\t\tcookie.push(`Path=${path}`);\n\t\t\n\t\tif (secure)\n\t\t\tcookie.push(\"Secure\");\n\t\t\n\t\tif (httpOnly)\n\t\t\tcookie.push(\"HttpOnly\");\n\t\t\n\t\tif (sameSite)\n\t\t\tcookie.push(`SameSite=${sameSite}`);\n\t\t\n\t\treturn cookie.join(\"; \");\n\t}\n\t\n\tstatic cookify(cookie: Cookie, options: CookieOptions) {\n\t\treturn Object.entries(cookie).map(([ name, value ]) => this.make({ name, value, ...options }));\n\t}\n\t\n}\n", "import type { Cookie, CookieOptions } from \"./types\";\n\n\nexport const tokenMap = new Map<string, [ cookie: Cookie, options: CookieOptions ]>();\n", "export function parseCookie(cookie: string) {\n\treturn cookie ? cookie.split(/;\\s*/).reduce((object, keyEqValue) => {\n\t\tconst [ key, value ] = keyEqValue.split(/=/);\n\t\t\n\t\ttry {\n\t\t\tobject[key] = JSON.parse(value);\n\t\t} catch {\n\t\t\tobject[key] = value;\n\t\t}\n\t\t\n\t\treturn object;\n\t}, {} as Record<string, unknown>) : {};\n}\n", "import crypto from \"node:crypto\";\nimport type { IncomingMessage } from \"node:http\";\nimport { random, setWithTimeout } from \"@nesvet/n\";\nimport type { AbilitiesSchema } from \"insite-common\";\nimport type { UsersServer, WSSCWithUser } from \"insite-users-server-ws\";\nimport { headers } from \"../common\";\nimport { parseCookie } from \"./parse\";\nimport { tokenMap } from \"./tokenMap\";\nimport type { Cookie, CookieOptions } from \"./types\";\n\n\nconst cookieTokenTimeout = 2000;\n\nexport type Options<AS extends AbilitiesSchema> = {\n\tusersServer: UsersServer<AS>;\n\tdomain?: string;\n\tmaxAge?: number;\n};\n\n\nexport class CookieSetter<AS extends AbilitiesSchema> {\n\tconstructor({ usersServer, domain, maxAge }: Options<AS>) {\n\t\tthis.usersServer = usersServer;\n\t\tthis.domain = domain ?? process.env.INSITE_HOST;\n\t\tthis.maxAge = maxAge ?? this.usersServer.users.sessions.collection.expireAfterSeconds;\n\t\t\n\t\tthis.usersServer.wss.on(\"client-connect\", this.#handleClientConnect);\n\t\tthis.usersServer.wss.on(\"client-session\", this.#handleClientSession);\n\t\t\n\t}\n\t\n\t#wsSessionIdMap = new WeakMap<WSSCWithUser<AS>, null | string>();\n\t\n\tusersServer;\n\tdomain;\n\tmaxAge;\n\t\n\tset(wssc: WSSCWithUser<AS>, cookie: Cookie, options: CookieOptions) {\n\t\t\n\t\tconst token = `${Math.round(performance.now() * Number.MAX_SAFE_INTEGER).toString(36)}$${crypto.randomBytes(random(4, 8)).toString(\"hex\")}`;\n\t\t\n\t\tsetWithTimeout(tokenMap, token, [ cookie, options ], cookieTokenTimeout);\n\t\t\n\t\twssc.sendMessage(headers.set, token);\n\t\t\n\t}\n\t\n\tunset(wssc: WSSCWithUser<AS>, names: string[]) {\n\t\tthis.set(wssc, names.reduce((cookie, name) => {\n\t\t\tcookie[name] = \"\";\n\t\t\t\n\t\t\treturn cookie;\n\t\t}, {} as Cookie), { maxAge: 0 });\n\t\t\n\t}\n\t\n\t#handleClientConnect = (wssc: WSSCWithUser<AS>, request: IncomingMessage) => {\n\t\tthis.#wsSessionIdMap.set(wssc, null);\n\t\t\n\t\tif (request.headers.cookie) {\n\t\t\tconst { sessionId = null } = parseCookie(request.headers.cookie) as { sessionId: null | string };\n\t\t\t\n\t\t\tthis.#wsSessionIdMap.set(wssc, sessionId);\n\t\t\t\n\t\t\tif (sessionId)\n\t\t\t\tthis.usersServer.setSession(wssc, sessionId, true);\n\t\t}\n\t\t\n\t};\n\t\n\t#handleClientSession = (wssc: WSSCWithUser<AS>) => {\n\t\tif (this.#wsSessionIdMap.get(wssc) !== wssc.session?._id) {\n\t\t\tthis.#wsSessionIdMap.set(wssc, wssc.session?._id ?? null);\n\t\t\t\n\t\t\tif (wssc.isOpen && wssc.session)\n\t\t\t\tthis.set(wssc, { sessionId: wssc.session._id }, { domain: this.domain, maxAge: this.maxAge });\n\t\t\telse\n\t\t\t\tthis.unset(wssc, [ \"sessionId\" ]);\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tstatic parse = parseCookie;\n\t\n}\n", "export const headers = {\n\tset: \"~setcookie\"\n};\n\nexport type Method = \"GET\" | \"POST\";\n"],
5
- "mappings": "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",
6
- "names": ["getWithTimeout", "InSiteServerMiddleware", "tokenMap", "InSiteCookieMiddleware", "_InSiteCookieMiddleware", "InSiteServerMiddleware", "options", "requestRegExp", "#handler", "request", "response", "token", "tokenMap", "getWithTimeout", "name", "value", "maxAge", "expiresAt", "domain", "path", "secure", "httpOnly", "sameSite", "cookie", "parseCookie", "cookie", "object", "keyEqValue", "key", "value", "crypto", "random", "setWithTimeout", "headers", "cookieTokenTimeout", "CookieSetter", "usersServer", "domain", "maxAge", "#handleClientConnect", "#handleClientSession", "#wsSessionIdMap", "wssc", "cookie", "options", "token", "crypto", "random", "setWithTimeout", "tokenMap", "headers", "names", "name", "request", "sessionId", "parseCookie"]
4
+ "sourcesContent": ["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { getWithTimeout } from \"@nesvet/n\";\nimport { InSiteServerMiddleware } from \"insite-http\";\nimport { tokenMap } from \"./tokenMap\";\nimport type { Cookie, CookieOptions } from \"./types\";\n\n\ntype Options = {\n\trequestRegExp?: RegExp;\n};\n\nexport type { Options as CookieMiddlewareOptions };\n\ntype MakeArg = {\n\tname: keyof Cookie;\n\tvalue: Cookie[keyof Cookie];\n} & CookieOptions;\n\n\nexport class InSiteCookieMiddleware extends InSiteServerMiddleware {\n\tconstructor(options: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tconst {\n\t\t\trequestRegExp = /^\\/cookie\\/?\\?/\n\t\t} = options;\n\t\t\n\t\tthis.listeners = { GET: [\n\t\t\t[ requestRegExp, this.handler ]\n\t\t] };\n\t\t\n\t}\n\t\n\tprivate handler = (request: IncomingMessage, response: ServerResponse) => {\n\t\tconst [ , token ] = request.url!.split(\"?\");\n\t\t\n\t\tif (token && tokenMap.has(token))\n\t\t\treturn response.writeHead(200, {\n\t\t\t\t\"Content-Type\": \"text/plain; charset=utf-8\",\n\t\t\t\t\"Set-Cookie\": InSiteCookieMiddleware.cookify(...getWithTimeout(tokenMap, token)!)\n\t\t\t}).end();\n\t\t\n\t\t\n\t\treturn false;\n\t};\n\t\n\t\n\tstatic make({ name, value, maxAge, expiresAt, domain, path = \"/\", secure = true, httpOnly = true, sameSite = \"Strict\" }: MakeArg) {\n\t\tconst cookie = [ `${name}=${value}` ];\n\t\t\n\t\tif (maxAge !== undefined)\n\t\t\tcookie.push(`Max-Age=${maxAge}`);\n\t\telse if (expiresAt)\n\t\t\tcookie.push(`Max-Age=${Math.round((expiresAt.getTime() - Date.now()) / 1000)}`);\n\t\t\n\t\tif (domain)\n\t\t\tcookie.push(`Domain=${domain}`);\n\t\t\n\t\tif (path)\n\t\t\tcookie.push(`Path=${path}`);\n\t\t\n\t\tif (secure)\n\t\t\tcookie.push(\"Secure\");\n\t\t\n\t\tif (httpOnly)\n\t\t\tcookie.push(\"HttpOnly\");\n\t\t\n\t\tif (sameSite)\n\t\t\tcookie.push(`SameSite=${sameSite}`);\n\t\t\n\t\treturn cookie.join(\"; \");\n\t}\n\t\n\tstatic cookify(cookie: Cookie, options: CookieOptions) {\n\t\treturn Object.entries(cookie).map(([ name, value ]) => this.make({ name, value, ...options }));\n\t}\n\t\n}\n", "import type { Cookie, CookieOptions } from \"./types\";\n\n\nexport const tokenMap = new Map<string, [ cookie: Cookie, options: CookieOptions ]>();\n", "export function parseCookie(cookie: string) {\n\treturn cookie ? cookie.split(/;\\s*/).reduce((object, keyEqValue) => {\n\t\tconst [ key, value ] = keyEqValue.split(/=/);\n\t\t\n\t\ttry {\n\t\t\tobject[key] = JSON.parse(value);\n\t\t} catch {\n\t\t\tobject[key] = value;\n\t\t}\n\t\t\n\t\treturn object;\n\t}, {} as Record<string, unknown>) : {};\n}\n", "import crypto from \"node:crypto\";\nimport type { IncomingMessage } from \"node:http\";\nimport { random, setWithTimeout } from \"@nesvet/n\";\nimport type { AbilitiesSchema } from \"insite-common\";\nimport type { UsersServer, WSSCWithUser } from \"insite-users-server-ws\";\nimport { headers } from \"../common\";\nimport { parseCookie } from \"./parse\";\nimport { tokenMap } from \"./tokenMap\";\nimport type { Cookie, CookieOptions } from \"./types\";\n\n\nconst cookieTokenTimeout = 2000;\n\nexport type Options<AS extends AbilitiesSchema> = {\n\tusersServer: UsersServer<AS>;\n\tdomain?: string;\n\tmaxAge?: number;\n};\n\n\nexport class CookieSetter<AS extends AbilitiesSchema> {\n\tconstructor({ usersServer, domain, maxAge }: Options<AS>) {\n\t\tthis.usersServer = usersServer;\n\t\tthis.domain = domain ?? process.env.INSITE_HOST;\n\t\tthis.maxAge = maxAge ?? this.usersServer.users.sessions.collection.expireAfterSeconds;\n\t\t\n\t\tthis.usersServer.wss.on(\"client-connect\", this.handleClientConnect);\n\t\tthis.usersServer.wss.on(\"client-session\", this.handleClientSession);\n\t\t\n\t}\n\t\n\tprivate wsSessionIdMap = new WeakMap<WSSCWithUser<AS>, null | string>();\n\t\n\tusersServer;\n\tdomain;\n\tmaxAge;\n\t\n\tset(wssc: WSSCWithUser<AS>, cookie: Cookie, options: CookieOptions) {\n\t\t\n\t\tconst token = `${Math.round(performance.now() * Number.MAX_SAFE_INTEGER).toString(36)}$${crypto.randomBytes(random(4, 8)).toString(\"hex\")}`;\n\t\t\n\t\tsetWithTimeout(tokenMap, token, [ cookie, options ], cookieTokenTimeout);\n\t\t\n\t\twssc.sendMessage(headers.set, token);\n\t\t\n\t}\n\t\n\tunset(wssc: WSSCWithUser<AS>, names: string[]) {\n\t\tthis.set(wssc, names.reduce((cookie, name) => {\n\t\t\tcookie[name] = \"\";\n\t\t\t\n\t\t\treturn cookie;\n\t\t}, {} as Cookie), { maxAge: 0 });\n\t\t\n\t}\n\t\n\tprivate handleClientConnect = (wssc: WSSCWithUser<AS>, request: IncomingMessage) => {\n\t\tthis.wsSessionIdMap.set(wssc, null);\n\t\t\n\t\tif (request.headers.cookie) {\n\t\t\tconst { sessionId = null } = parseCookie(request.headers.cookie) as { sessionId: null | string };\n\t\t\t\n\t\t\tthis.wsSessionIdMap.set(wssc, sessionId);\n\t\t\t\n\t\t\tif (sessionId)\n\t\t\t\tthis.usersServer.setSession(wssc, sessionId, true);\n\t\t}\n\t\t\n\t};\n\t\n\tprivate handleClientSession = (wssc: WSSCWithUser<AS>) => {\n\t\tif (this.wsSessionIdMap.get(wssc) !== wssc.session?._id) {\n\t\t\tthis.wsSessionIdMap.set(wssc, wssc.session?._id ?? null);\n\t\t\t\n\t\t\tif (wssc.isOpen && wssc.session)\n\t\t\t\tthis.set(wssc, { sessionId: wssc.session._id }, { domain: this.domain, maxAge: this.maxAge });\n\t\t\telse\n\t\t\t\tthis.unset(wssc, [ \"sessionId\" ]);\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tstatic parse = parseCookie;\n\t\n}\n", "export const headers = {\n\tset: \"~setcookie\"\n};\n\nexport type Method = \"GET\" | \"POST\";\n"],
5
+ "mappings": "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",
6
+ "names": ["getWithTimeout", "InSiteServerMiddleware", "tokenMap", "InSiteCookieMiddleware", "_InSiteCookieMiddleware", "InSiteServerMiddleware", "options", "requestRegExp", "request", "response", "token", "tokenMap", "getWithTimeout", "name", "value", "maxAge", "expiresAt", "domain", "path", "secure", "httpOnly", "sameSite", "cookie", "parseCookie", "cookie", "object", "keyEqValue", "key", "value", "crypto", "random", "setWithTimeout", "headers", "cookieTokenTimeout", "CookieSetter", "usersServer", "domain", "maxAge", "wssc", "cookie", "options", "token", "crypto", "random", "setWithTimeout", "tokenMap", "headers", "names", "name", "request", "sessionId", "parseCookie"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "insite-cookie",
3
- "version": "2.0.14",
3
+ "version": "2.0.21",
4
4
  "description": "Cookie support for inSite",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",
@@ -31,13 +31,13 @@
31
31
  "@nesvet/n": "^1.1.7",
32
32
  "insite-common": "^2.0.0",
33
33
  "insite-http": "^2.0.6",
34
- "insite-users-server-ws": "^2.0.10",
34
+ "insite-users-server-ws": "^2.0.17",
35
35
  "insite-ws": "^2.0.17"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@nesvet/conveyer": "^2.2.4",
39
39
  "@nesvet/eslint-config": "^2.0.25",
40
- "@types/node": "^22.5.1",
40
+ "@types/node": "^22.5.2",
41
41
  "@types/ws": "^8.5.12",
42
42
  "typescript": "^5.5.4"
43
43
  }