@proteinjs/server 3.5.1 → 3.5.2

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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.5.2](https://github.com/proteinjs/server/compare/@proteinjs/server@3.5.1...@proteinjs/server@3.5.2) (2026-08-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * a request always seeds its OWN session context — kills the keep-alive session-bag bleed ([24f84e3](https://github.com/proteinjs/server/commit/24f84e38cdc4317e5e2c5ef819ed8d58289cfc5b))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [3.5.1](https://github.com/proteinjs/server/compare/@proteinjs/server@3.5.0...@proteinjs/server@3.5.1) (2026-08-19)
7
18
 
8
19
 
@@ -33,7 +33,7 @@ require("react-helmet");
33
33
  require("socket.io");
34
34
  require("typescript");
35
35
  /** Generate Source Graph */
36
- var sourceGraph = "{\"options\":{\"directed\":true,\"multigraph\":false,\"compound\":false},\"nodes\":[{\"v\":\"@proteinjs/server/NodeGlobalDataStorage\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"NodeGlobalDataStorage\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/NodeGlobalDataStorage.ts\",\"qualifiedName\":\"@proteinjs/server/NodeGlobalDataStorage\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"HOOK_INITIALIZED\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"GLOBAL_DATA\",\"type\":{\"packageName\":\"@proteinjs/server\",\"name\":\"{ [id: string]: GlobalData }\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server/{ [id: string]: GlobalData }\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"environment\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[{\"name\":\"setData\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"data\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalData\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getData\",\"returnType\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalData\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"initHook\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalDataStorage\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalDataStorage\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/server-api/GlobalDataStorage\"},{\"v\":\"@proteinjs/server/NodeSessionDataStorage\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"NodeSessionDataStorage\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/NodeSessionDataStorage.ts\",\"qualifiedName\":\"@proteinjs/server/NodeSessionDataStorage\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"HOOK_INITIALIZED\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"SESSION_DATA\",\"type\":{\"packageName\":\"@proteinjs/server\",\"name\":\"{ [id: string]: SessionData }\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server/{ [id: string]: SessionData }\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"environment\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[{\"name\":\"setData\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"data\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"SessionData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/SessionData\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getData\",\"returnType\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"SessionData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/SessionData\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"initHook\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"SessionDataStorage\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/SessionDataStorage\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/server-api/SessionDataStorage\"},{\"v\":\"@proteinjs/server/ExtendedIncomingMessage\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"ExtendedIncomingMessage\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts\",\"qualifiedName\":\"@proteinjs/server/ExtendedIncomingMessage\",\"properties\":[{\"name\":\"sessionID\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"user\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"http\",\"name\":\"IncomingMessage\",\"filePath\":null,\"qualifiedName\":\"http/IncomingMessage\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"http/IncomingMessage\"},{\"v\":\"@proteinjs/server/ExtendedSocket\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"ExtendedSocket\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts\",\"qualifiedName\":\"@proteinjs/server/ExtendedSocket\",\"properties\":[{\"name\":\"request\",\"type\":{\"packageName\":\"@proteinjs/server\",\"name\":\"ExtendedIncomingMessage\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server/ExtendedIncomingMessage\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"socket.io\",\"name\":\"Socket\",\"filePath\":null,\"qualifiedName\":\"socket.io/Socket\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"socket.io/Socket\"},{\"v\":\"@proteinjs/server/environmentCache\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"environmentCache\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/envCache.ts\",\"qualifiedName\":\"@proteinjs/server/environmentCache\",\"type\":{\"packageName\":\"\",\"name\":\"GlobalDataCache<Env>\",\"filePath\":null,\"qualifiedName\":\"/GlobalDataCache<Env>\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalDataCache\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalDataCache\",\"typeParameters\":[\"@proteinjs/server-api/Env\"],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/server-api/GlobalDataCache\"},{\"v\":\"@proteinjs/server/healthCheck\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"healthCheck\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/routes/healthCheck.ts\",\"qualifiedName\":\"@proteinjs/server/healthCheck\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/server-api/Route\"}],\"edges\":[{\"v\":\"@proteinjs/server/NodeGlobalDataStorage\",\"w\":\"@proteinjs/server-api/GlobalDataStorage\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/server/NodeSessionDataStorage\",\"w\":\"@proteinjs/server-api/SessionDataStorage\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/server/ExtendedIncomingMessage\",\"w\":\"http/IncomingMessage\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/server/ExtendedSocket\",\"w\":\"socket.io/Socket\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/server/environmentCache\",\"w\":\"@proteinjs/server-api/GlobalDataCache\",\"value\":\"has type\"},{\"v\":\"@proteinjs/server/healthCheck\",\"w\":\"@proteinjs/server-api/Route\",\"value\":\"has type\"}]}";
36
+ var sourceGraph = "{\"options\":{\"directed\":true,\"multigraph\":false,\"compound\":false},\"nodes\":[{\"v\":\"@proteinjs/server/NodeGlobalDataStorage\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"NodeGlobalDataStorage\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/NodeGlobalDataStorage.ts\",\"qualifiedName\":\"@proteinjs/server/NodeGlobalDataStorage\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"HOOK_INITIALIZED\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"GLOBAL_DATA\",\"type\":{\"packageName\":\"@proteinjs/server\",\"name\":\"{ [id: string]: GlobalData }\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server/{ [id: string]: GlobalData }\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"environment\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[{\"name\":\"setData\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"data\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalData\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getData\",\"returnType\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalData\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"initHook\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalDataStorage\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalDataStorage\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/server-api/GlobalDataStorage\"},{\"v\":\"@proteinjs/server/NodeSessionDataStorage\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"NodeSessionDataStorage\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/NodeSessionDataStorage.ts\",\"qualifiedName\":\"@proteinjs/server/NodeSessionDataStorage\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"HOOK_INITIALIZED\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"SESSION_DATA\",\"type\":{\"packageName\":\"@proteinjs/server\",\"name\":\"{ [id: string]: SessionData }\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server/{ [id: string]: SessionData }\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"environment\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[{\"name\":\"setData\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"data\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"SessionData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/SessionData\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getData\",\"returnType\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"SessionData\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/SessionData\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"clearData\",\"returnType\":{\"packageName\":\"\",\"name\":\"void\",\"filePath\":null,\"qualifiedName\":\"/void\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"initHook\",\"returnType\":null,\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"SessionDataStorage\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/SessionDataStorage\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/server-api/SessionDataStorage\"},{\"v\":\"@proteinjs/server/ExtendedIncomingMessage\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"ExtendedIncomingMessage\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts\",\"qualifiedName\":\"@proteinjs/server/ExtendedIncomingMessage\",\"properties\":[{\"name\":\"sessionID\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"user\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"http\",\"name\":\"IncomingMessage\",\"filePath\":null,\"qualifiedName\":\"http/IncomingMessage\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"http/IncomingMessage\"},{\"v\":\"@proteinjs/server/ExtendedSocket\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"ExtendedSocket\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts\",\"qualifiedName\":\"@proteinjs/server/ExtendedSocket\",\"properties\":[{\"name\":\"request\",\"type\":{\"packageName\":\"@proteinjs/server\",\"name\":\"ExtendedIncomingMessage\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server/ExtendedIncomingMessage\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"socket.io\",\"name\":\"Socket\",\"filePath\":null,\"qualifiedName\":\"socket.io/Socket\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"socket.io/Socket\"},{\"v\":\"@proteinjs/server/environmentCache\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"environmentCache\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/envCache.ts\",\"qualifiedName\":\"@proteinjs/server/environmentCache\",\"type\":{\"packageName\":\"\",\"name\":\"GlobalDataCache<Env>\",\"filePath\":null,\"qualifiedName\":\"/GlobalDataCache<Env>\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"GlobalDataCache\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/GlobalDataCache\",\"typeParameters\":[\"@proteinjs/server-api/Env\"],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/server-api/GlobalDataCache\"},{\"v\":\"@proteinjs/server/healthCheck\",\"value\":{\"packageName\":\"@proteinjs/server\",\"name\":\"healthCheck\",\"filePath\":\"/home/runner/work/server/server/packages/server/src/routes/healthCheck.ts\",\"qualifiedName\":\"@proteinjs/server/healthCheck\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/server-api/Route\"}],\"edges\":[{\"v\":\"@proteinjs/server/NodeGlobalDataStorage\",\"w\":\"@proteinjs/server-api/GlobalDataStorage\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/server/NodeSessionDataStorage\",\"w\":\"@proteinjs/server-api/SessionDataStorage\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/server/ExtendedIncomingMessage\",\"w\":\"http/IncomingMessage\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/server/ExtendedSocket\",\"w\":\"socket.io/Socket\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/server/environmentCache\",\"w\":\"@proteinjs/server-api/GlobalDataCache\",\"value\":\"has type\"},{\"v\":\"@proteinjs/server/healthCheck\",\"w\":\"@proteinjs/server-api/Route\",\"value\":\"has type\"}]}";
37
37
  /** Generate Source Links */
38
38
  var NodeGlobalDataStorage_1 = require("../src/NodeGlobalDataStorage");
39
39
  var NodeSessionDataStorage_1 = require("../src/NodeSessionDataStorage");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../generated/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;AAEpC,4BAA0B;AAC1B,6BAA2B;AAC3B,iCAA+B;AAC/B,iCAA+B;AAC/B,gCAA8B;AAC9B,uBAAqB;AACrB,yBAAuB;AACvB,kBAAgB;AAChB,mBAAiB;AACjB,2BAAyB;AACzB,oBAAkB;AAClB,0BAAwB;AACxB,mBAAiB;AACjB,iBAAe;AACf,wBAAsB;AACtB,qBAAmB;AACnB,sBAAoB;AAGpB,4BAA4B;AAE5B,IAAM,WAAW,GAAG,gqRAAgqR,CAAC;AAGrrR,4BAA4B;AAE5B,sEAAqE;AACrE,wEAAuE;AACvE,4CAAmD;AACnD,yDAAwD;AAExD,IAAM,WAAW,GAAG;IACnB,yCAAyC,EAAE,6CAAqB;IAChE,0CAA0C,EAAE,+CAAsB;IAClE,oCAAoC,EAAE,2BAAgB;IACtD,+BAA+B,EAAE,yBAAW;CAC5C,CAAC;AAGF,kCAAkC;AAElC,oDAAyD;AACzD,6BAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAGjD,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../generated/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;AAEpC,4BAA0B;AAC1B,6BAA2B;AAC3B,iCAA+B;AAC/B,iCAA+B;AAC/B,gCAA8B;AAC9B,uBAAqB;AACrB,yBAAuB;AACvB,kBAAgB;AAChB,mBAAiB;AACjB,2BAAyB;AACzB,oBAAkB;AAClB,0BAAwB;AACxB,mBAAiB;AACjB,iBAAe;AACf,wBAAsB;AACtB,qBAAmB;AACnB,sBAAoB;AAGpB,4BAA4B;AAE5B,IAAM,WAAW,GAAG,y8RAAy8R,CAAC;AAG99R,4BAA4B;AAE5B,sEAAqE;AACrE,wEAAuE;AACvE,4CAAmD;AACnD,yDAAwD;AAExD,IAAM,WAAW,GAAG;IACnB,yCAAyC,EAAE,6CAAqB;IAChE,0CAA0C,EAAE,+CAAsB;IAClE,oCAAoC,EAAE,2BAAgB;IACtD,+BAA+B,EAAE,yBAAW;CAC5C,CAAC;AAGF,kCAAkC;AAElC,oDAAyD;AACzD,6BAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAGjD,2CAAyB"}
@@ -5,6 +5,17 @@ export declare class NodeSessionDataStorage implements SessionDataStorage {
5
5
  environment: "node";
6
6
  setData(data: SessionData): void;
7
7
  getData(): SessionData;
8
+ /**
9
+ * Drop the CURRENT async id's entry so the next `setData` seeds fresh. The init hook copies
10
+ * a populated bag onto every descendant async resource and `setData` is first-write-wins, so
11
+ * a request dispatched inside a PREVIOUS request's lineage (keep-alive socket reuse — the
12
+ * normal case under a 620s keepAliveTimeout) would otherwise run as the prior request's user
13
+ * (observed 2026-08-26: /dev/login account switch, home greeting server-rendered with the
14
+ * previous account's name). Scoped to the current id on purpose: in-flight hops of the
15
+ * previous request keep their own already-copied entries, and descendants created after the
16
+ * re-seed inherit the fresh bag.
17
+ */
18
+ clearData(): void;
8
19
  private initHook;
9
20
  }
10
21
  //# sourceMappingURL=NodeSessionDataStorage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSessionDataStorage.d.ts","sourceRoot":"","sources":["../../src/NodeSessionDataStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAExE,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAS;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqC;IACzE,WAAW,SAAoB;IAE/B,OAAO,CAAC,IAAI,EAAE,WAAW;IAYzB,OAAO,IAAI,WAAW;IAQtB,OAAO,CAAC,QAAQ;CAiBjB"}
1
+ {"version":3,"file":"NodeSessionDataStorage.d.ts","sourceRoot":"","sources":["../../src/NodeSessionDataStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAExE,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAS;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqC;IACzE,WAAW,SAAoB;IAE/B,OAAO,CAAC,IAAI,EAAE,WAAW;IAYzB,OAAO,IAAI,WAAW;IAQtB;;;;;;;;;OASG;IACH,SAAS,IAAI,IAAI;IAQjB,OAAO,CAAC,QAAQ;CAiBjB"}
@@ -24,6 +24,22 @@ var NodeSessionDataStorage = /** @class */ (function () {
24
24
  }
25
25
  return NodeSessionDataStorage.SESSION_DATA[async_hooks_1.default.executionAsyncId()];
26
26
  };
27
+ /**
28
+ * Drop the CURRENT async id's entry so the next `setData` seeds fresh. The init hook copies
29
+ * a populated bag onto every descendant async resource and `setData` is first-write-wins, so
30
+ * a request dispatched inside a PREVIOUS request's lineage (keep-alive socket reuse — the
31
+ * normal case under a 620s keepAliveTimeout) would otherwise run as the prior request's user
32
+ * (observed 2026-08-26: /dev/login account switch, home greeting server-rendered with the
33
+ * previous account's name). Scoped to the current id on purpose: in-flight hops of the
34
+ * previous request keep their own already-copied entries, and descendants created after the
35
+ * re-seed inherit the fresh bag.
36
+ */
37
+ NodeSessionDataStorage.prototype.clearData = function () {
38
+ if (!NodeSessionDataStorage.HOOK_INITIALIZED) {
39
+ this.initHook();
40
+ }
41
+ delete NodeSessionDataStorage.SESSION_DATA[async_hooks_1.default.executionAsyncId()];
42
+ };
27
43
  NodeSessionDataStorage.prototype.initHook = function () {
28
44
  async_hooks_1.default
29
45
  .createHook({
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSessionDataStorage.js","sourceRoot":"","sources":["../../src/NodeSessionDataStorage.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAqC;AAGrC;IAAA;QAGE,gBAAW,GAAG,MAAgB,CAAC;IAuCjC,CAAC;IArCC,wCAAO,GAAP,UAAQ,IAAiB;QACvB,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAED,IAAI,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,EAAE;YACtE,OAAO;SACR;QAED,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5E,CAAC;IAED,wCAAO,GAAP;QACE,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAED,OAAO,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAEO,yCAAQ,GAAhB;QACE,qBAAU;aACP,UAAU,CAAC;YACV,IAAI,EAAE,UAAC,OAAe,EAAE,IAAY,EAAE,cAAsB,EAAE,QAAgB;gBAC5E,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;oBACxD,OAAO;iBACR;gBAED,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YACrG,CAAC;YACD,OAAO,EAAE,UAAC,OAAe;gBACvB,OAAO,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC;SACF,CAAC;aACD,MAAM,EAAE,CAAC;QACZ,sBAAsB,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjD,CAAC;IAxCc,uCAAgB,GAAG,KAAK,AAAR,CAAS;IAChB,mCAAY,GAAkC,EAAE,AAApC,CAAqC;IAwC3E,6BAAC;CAAA,AA1CD,IA0CC;AA1CY,wDAAsB"}
1
+ {"version":3,"file":"NodeSessionDataStorage.js","sourceRoot":"","sources":["../../src/NodeSessionDataStorage.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAqC;AAGrC;IAAA;QAGE,gBAAW,GAAG,MAAgB,CAAC;IAyDjC,CAAC;IAvDC,wCAAO,GAAP,UAAQ,IAAiB;QACvB,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAED,IAAI,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,EAAE;YACtE,OAAO;SACR;QAED,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5E,CAAC;IAED,wCAAO,GAAP;QACE,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAED,OAAO,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;;;;OASG;IACH,0CAAS,GAAT;QACE,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAED,OAAO,sBAAsB,CAAC,YAAY,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAEO,yCAAQ,GAAhB;QACE,qBAAU;aACP,UAAU,CAAC;YACV,IAAI,EAAE,UAAC,OAAe,EAAE,IAAY,EAAE,cAAsB,EAAE,QAAgB;gBAC5E,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;oBACxD,OAAO;iBACR;gBAED,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YACrG,CAAC;YACD,OAAO,EAAE,UAAC,OAAe;gBACvB,OAAO,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC;SACF,CAAC;aACD,MAAM,EAAE,CAAC;QACZ,sBAAsB,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjD,CAAC;IA1Dc,uCAAgB,GAAG,KAAK,AAAR,CAAS;IAChB,mCAAY,GAAkC,EAAE,AAApC,CAAqC;IA0D3E,6BAAC;CAAA,AA5DD,IA4DC;AA5DY,wDAAsB"}
@@ -126,6 +126,13 @@ function wrapRoute(route, config) {
126
126
  _i++;
127
127
  return [3 /*break*/, 1];
128
128
  case 4:
129
+ // A request always seeds ITS OWN session context: on a reused keep-alive socket this
130
+ // dispatch is born inside the previous request's async lineage (the storage's init hook
131
+ // copies bags onto descendants), and first-write-wins setData would silently drop this
132
+ // request's seed — the request then runs (and server-renders proteinjs.sessionData) as
133
+ // the PRIOR request's user (observed 2026-08-26: stale home greeting after a /dev/login
134
+ // account switch; roster correct, greeting wrong). Clear the inherited entry first.
135
+ server_api_1.Session.clearData();
129
136
  server_api_1.Session.setData(sessionData);
130
137
  if (shouldLogRequest(request, config)) {
131
138
  message = "Started ".concat(request.originalUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"loadRoutes.js","sourceRoot":"","sources":["../../src/loadRoutes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadRoutes.js","sourceRoot":"","sources":["../../src/loadRoutes.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ import 'typescript';
21
21
  /** Generate Source Graph */
22
22
 
23
23
  const sourceGraph =
24
- '{"options":{"directed":true,"multigraph":false,"compound":false},"nodes":[{"v":"@proteinjs/server/NodeGlobalDataStorage","value":{"packageName":"@proteinjs/server","name":"NodeGlobalDataStorage","filePath":"/home/runner/work/server/server/packages/server/src/NodeGlobalDataStorage.ts","qualifiedName":"@proteinjs/server/NodeGlobalDataStorage","isAbstract":false,"isStatic":false,"visibility":"public","properties":[{"name":"HOOK_INITIALIZED","type":null,"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"GLOBAL_DATA","type":{"packageName":"@proteinjs/server","name":"{ [id: string]: GlobalData }","filePath":null,"qualifiedName":"@proteinjs/server/{ [id: string]: GlobalData }","typeParameters":null,"directParents":null},"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"environment","type":null,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[{"name":"setData","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[{"name":"data","type":{"packageName":"@proteinjs/server-api","name":"GlobalData","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalData","typeParameters":null,"directParents":null}}]},{"name":"getData","returnType":{"packageName":"@proteinjs/server-api","name":"GlobalData","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalData","typeParameters":null,"directParents":null},"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[]},{"name":"initHook","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"private","parameters":[]}],"typeParameters":[],"directParentInterfaces":[{"packageName":"@proteinjs/server-api","name":"GlobalDataStorage","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalDataStorage","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"directParentClasses":[],"sourceType":2}},{"v":"@proteinjs/server-api/GlobalDataStorage"},{"v":"@proteinjs/server/NodeSessionDataStorage","value":{"packageName":"@proteinjs/server","name":"NodeSessionDataStorage","filePath":"/home/runner/work/server/server/packages/server/src/NodeSessionDataStorage.ts","qualifiedName":"@proteinjs/server/NodeSessionDataStorage","isAbstract":false,"isStatic":false,"visibility":"public","properties":[{"name":"HOOK_INITIALIZED","type":null,"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"SESSION_DATA","type":{"packageName":"@proteinjs/server","name":"{ [id: string]: SessionData }","filePath":null,"qualifiedName":"@proteinjs/server/{ [id: string]: SessionData }","typeParameters":null,"directParents":null},"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"environment","type":null,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[{"name":"setData","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[{"name":"data","type":{"packageName":"@proteinjs/server-api","name":"SessionData","filePath":null,"qualifiedName":"@proteinjs/server-api/SessionData","typeParameters":null,"directParents":null}}]},{"name":"getData","returnType":{"packageName":"@proteinjs/server-api","name":"SessionData","filePath":null,"qualifiedName":"@proteinjs/server-api/SessionData","typeParameters":null,"directParents":null},"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[]},{"name":"initHook","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"private","parameters":[]}],"typeParameters":[],"directParentInterfaces":[{"packageName":"@proteinjs/server-api","name":"SessionDataStorage","filePath":null,"qualifiedName":"@proteinjs/server-api/SessionDataStorage","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"directParentClasses":[],"sourceType":2}},{"v":"@proteinjs/server-api/SessionDataStorage"},{"v":"@proteinjs/server/ExtendedIncomingMessage","value":{"packageName":"@proteinjs/server","name":"ExtendedIncomingMessage","filePath":"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts","qualifiedName":"@proteinjs/server/ExtendedIncomingMessage","properties":[{"name":"sessionID","type":{"packageName":"","name":"string","filePath":null,"qualifiedName":"/string","typeParameters":null,"directParents":null},"isOptional":true,"isAbstract":false,"isStatic":false,"visibility":"public"},{"name":"user","type":{"packageName":"","name":"string","filePath":null,"qualifiedName":"/string","typeParameters":null,"directParents":null},"isOptional":true,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[],"typeParameters":[],"directParents":[{"packageName":"http","name":"IncomingMessage","filePath":null,"qualifiedName":"http/IncomingMessage","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"sourceType":3}},{"v":"http/IncomingMessage"},{"v":"@proteinjs/server/ExtendedSocket","value":{"packageName":"@proteinjs/server","name":"ExtendedSocket","filePath":"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts","qualifiedName":"@proteinjs/server/ExtendedSocket","properties":[{"name":"request","type":{"packageName":"@proteinjs/server","name":"ExtendedIncomingMessage","filePath":null,"qualifiedName":"@proteinjs/server/ExtendedIncomingMessage","typeParameters":null,"directParents":null},"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[],"typeParameters":[],"directParents":[{"packageName":"socket.io","name":"Socket","filePath":null,"qualifiedName":"socket.io/Socket","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"sourceType":3}},{"v":"socket.io/Socket"},{"v":"@proteinjs/server/environmentCache","value":{"packageName":"@proteinjs/server","name":"environmentCache","filePath":"/home/runner/work/server/server/packages/server/src/envCache.ts","qualifiedName":"@proteinjs/server/environmentCache","type":{"packageName":"","name":"GlobalDataCache<Env>","filePath":null,"qualifiedName":"/GlobalDataCache<Env>","typeParameters":[],"directParents":[{"packageName":"@proteinjs/server-api","name":"GlobalDataCache","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalDataCache","typeParameters":["@proteinjs/server-api/Env"],"directParents":null}]},"isExported":true,"isConst":true,"sourceType":0}},{"v":"@proteinjs/server-api/GlobalDataCache"},{"v":"@proteinjs/server/healthCheck","value":{"packageName":"@proteinjs/server","name":"healthCheck","filePath":"/home/runner/work/server/server/packages/server/src/routes/healthCheck.ts","qualifiedName":"@proteinjs/server/healthCheck","type":{"packageName":"@proteinjs/server-api","name":"Route","filePath":null,"qualifiedName":"@proteinjs/server-api/Route","typeParameters":[],"directParents":[{"packageName":"@proteinjs/server-api","name":"Route","filePath":null,"qualifiedName":"@proteinjs/server-api/Route","typeParameters":[],"directParents":null}]},"isExported":true,"isConst":true,"sourceType":0}},{"v":"@proteinjs/server-api/Route"}],"edges":[{"v":"@proteinjs/server/NodeGlobalDataStorage","w":"@proteinjs/server-api/GlobalDataStorage","value":"implements interface"},{"v":"@proteinjs/server/NodeSessionDataStorage","w":"@proteinjs/server-api/SessionDataStorage","value":"implements interface"},{"v":"@proteinjs/server/ExtendedIncomingMessage","w":"http/IncomingMessage","value":"extends interface"},{"v":"@proteinjs/server/ExtendedSocket","w":"socket.io/Socket","value":"extends interface"},{"v":"@proteinjs/server/environmentCache","w":"@proteinjs/server-api/GlobalDataCache","value":"has type"},{"v":"@proteinjs/server/healthCheck","w":"@proteinjs/server-api/Route","value":"has type"}]}';
24
+ '{"options":{"directed":true,"multigraph":false,"compound":false},"nodes":[{"v":"@proteinjs/server/NodeGlobalDataStorage","value":{"packageName":"@proteinjs/server","name":"NodeGlobalDataStorage","filePath":"/home/runner/work/server/server/packages/server/src/NodeGlobalDataStorage.ts","qualifiedName":"@proteinjs/server/NodeGlobalDataStorage","isAbstract":false,"isStatic":false,"visibility":"public","properties":[{"name":"HOOK_INITIALIZED","type":null,"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"GLOBAL_DATA","type":{"packageName":"@proteinjs/server","name":"{ [id: string]: GlobalData }","filePath":null,"qualifiedName":"@proteinjs/server/{ [id: string]: GlobalData }","typeParameters":null,"directParents":null},"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"environment","type":null,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[{"name":"setData","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[{"name":"data","type":{"packageName":"@proteinjs/server-api","name":"GlobalData","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalData","typeParameters":null,"directParents":null}}]},{"name":"getData","returnType":{"packageName":"@proteinjs/server-api","name":"GlobalData","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalData","typeParameters":null,"directParents":null},"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[]},{"name":"initHook","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"private","parameters":[]}],"typeParameters":[],"directParentInterfaces":[{"packageName":"@proteinjs/server-api","name":"GlobalDataStorage","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalDataStorage","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"directParentClasses":[],"sourceType":2}},{"v":"@proteinjs/server-api/GlobalDataStorage"},{"v":"@proteinjs/server/NodeSessionDataStorage","value":{"packageName":"@proteinjs/server","name":"NodeSessionDataStorage","filePath":"/home/runner/work/server/server/packages/server/src/NodeSessionDataStorage.ts","qualifiedName":"@proteinjs/server/NodeSessionDataStorage","isAbstract":false,"isStatic":false,"visibility":"public","properties":[{"name":"HOOK_INITIALIZED","type":null,"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"SESSION_DATA","type":{"packageName":"@proteinjs/server","name":"{ [id: string]: SessionData }","filePath":null,"qualifiedName":"@proteinjs/server/{ [id: string]: SessionData }","typeParameters":null,"directParents":null},"isOptional":false,"isAbstract":false,"isStatic":true,"visibility":"private"},{"name":"environment","type":null,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[{"name":"setData","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[{"name":"data","type":{"packageName":"@proteinjs/server-api","name":"SessionData","filePath":null,"qualifiedName":"@proteinjs/server-api/SessionData","typeParameters":null,"directParents":null}}]},{"name":"getData","returnType":{"packageName":"@proteinjs/server-api","name":"SessionData","filePath":null,"qualifiedName":"@proteinjs/server-api/SessionData","typeParameters":null,"directParents":null},"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[]},{"name":"clearData","returnType":{"packageName":"","name":"void","filePath":null,"qualifiedName":"/void","typeParameters":null,"directParents":null},"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public","parameters":[]},{"name":"initHook","returnType":null,"isAsync":false,"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"private","parameters":[]}],"typeParameters":[],"directParentInterfaces":[{"packageName":"@proteinjs/server-api","name":"SessionDataStorage","filePath":null,"qualifiedName":"@proteinjs/server-api/SessionDataStorage","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"directParentClasses":[],"sourceType":2}},{"v":"@proteinjs/server-api/SessionDataStorage"},{"v":"@proteinjs/server/ExtendedIncomingMessage","value":{"packageName":"@proteinjs/server","name":"ExtendedIncomingMessage","filePath":"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts","qualifiedName":"@proteinjs/server/ExtendedIncomingMessage","properties":[{"name":"sessionID","type":{"packageName":"","name":"string","filePath":null,"qualifiedName":"/string","typeParameters":null,"directParents":null},"isOptional":true,"isAbstract":false,"isStatic":false,"visibility":"public"},{"name":"user","type":{"packageName":"","name":"string","filePath":null,"qualifiedName":"/string","typeParameters":null,"directParents":null},"isOptional":true,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[],"typeParameters":[],"directParents":[{"packageName":"http","name":"IncomingMessage","filePath":null,"qualifiedName":"http/IncomingMessage","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"sourceType":3}},{"v":"http/IncomingMessage"},{"v":"@proteinjs/server/ExtendedSocket","value":{"packageName":"@proteinjs/server","name":"ExtendedSocket","filePath":"/home/runner/work/server/server/packages/server/src/SocketIOServerRepo.ts","qualifiedName":"@proteinjs/server/ExtendedSocket","properties":[{"name":"request","type":{"packageName":"@proteinjs/server","name":"ExtendedIncomingMessage","filePath":null,"qualifiedName":"@proteinjs/server/ExtendedIncomingMessage","typeParameters":null,"directParents":null},"isOptional":false,"isAbstract":false,"isStatic":false,"visibility":"public"}],"methods":[],"typeParameters":[],"directParents":[{"packageName":"socket.io","name":"Socket","filePath":null,"qualifiedName":"socket.io/Socket","properties":[],"methods":[],"typeParameters":[],"directParents":[]}],"sourceType":3}},{"v":"socket.io/Socket"},{"v":"@proteinjs/server/environmentCache","value":{"packageName":"@proteinjs/server","name":"environmentCache","filePath":"/home/runner/work/server/server/packages/server/src/envCache.ts","qualifiedName":"@proteinjs/server/environmentCache","type":{"packageName":"","name":"GlobalDataCache<Env>","filePath":null,"qualifiedName":"/GlobalDataCache<Env>","typeParameters":[],"directParents":[{"packageName":"@proteinjs/server-api","name":"GlobalDataCache","filePath":null,"qualifiedName":"@proteinjs/server-api/GlobalDataCache","typeParameters":["@proteinjs/server-api/Env"],"directParents":null}]},"isExported":true,"isConst":true,"sourceType":0}},{"v":"@proteinjs/server-api/GlobalDataCache"},{"v":"@proteinjs/server/healthCheck","value":{"packageName":"@proteinjs/server","name":"healthCheck","filePath":"/home/runner/work/server/server/packages/server/src/routes/healthCheck.ts","qualifiedName":"@proteinjs/server/healthCheck","type":{"packageName":"@proteinjs/server-api","name":"Route","filePath":null,"qualifiedName":"@proteinjs/server-api/Route","typeParameters":[],"directParents":[{"packageName":"@proteinjs/server-api","name":"Route","filePath":null,"qualifiedName":"@proteinjs/server-api/Route","typeParameters":[],"directParents":null}]},"isExported":true,"isConst":true,"sourceType":0}},{"v":"@proteinjs/server-api/Route"}],"edges":[{"v":"@proteinjs/server/NodeGlobalDataStorage","w":"@proteinjs/server-api/GlobalDataStorage","value":"implements interface"},{"v":"@proteinjs/server/NodeSessionDataStorage","w":"@proteinjs/server-api/SessionDataStorage","value":"implements interface"},{"v":"@proteinjs/server/ExtendedIncomingMessage","w":"http/IncomingMessage","value":"extends interface"},{"v":"@proteinjs/server/ExtendedSocket","w":"socket.io/Socket","value":"extends interface"},{"v":"@proteinjs/server/environmentCache","w":"@proteinjs/server-api/GlobalDataCache","value":"has type"},{"v":"@proteinjs/server/healthCheck","w":"@proteinjs/server-api/Route","value":"has type"}]}';
25
25
 
26
26
  /** Generate Source Links */
27
27
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/server",
3
- "version": "3.5.1",
3
+ "version": "3.5.2",
4
4
  "description": "A server impl",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -25,7 +25,7 @@
25
25
  "@proteinjs/event": "^1.0.18",
26
26
  "@proteinjs/logger": "^1.0.21",
27
27
  "@proteinjs/reflection": "^1.1.12",
28
- "@proteinjs/server-api": "^3.1.1",
28
+ "@proteinjs/server-api": "^3.1.2",
29
29
  "@proteinjs/util-node": "^1.10.1",
30
30
  "body-parser": "1.19.0",
31
31
  "cookie-parser": "1.4.5",
@@ -64,5 +64,5 @@
64
64
  },
65
65
  "main": "./dist/generated/index.js",
66
66
  "types": "./dist/generated/index.d.ts",
67
- "gitHead": "8fb8f61e0d710d6cfbb74676735a726ec4107219"
67
+ "gitHead": "ea237ffcd7725e009d841d339ed098e324d3afef"
68
68
  }
@@ -26,6 +26,24 @@ export class NodeSessionDataStorage implements SessionDataStorage {
26
26
  return NodeSessionDataStorage.SESSION_DATA[asyncHooks.executionAsyncId()];
27
27
  }
28
28
 
29
+ /**
30
+ * Drop the CURRENT async id's entry so the next `setData` seeds fresh. The init hook copies
31
+ * a populated bag onto every descendant async resource and `setData` is first-write-wins, so
32
+ * a request dispatched inside a PREVIOUS request's lineage (keep-alive socket reuse — the
33
+ * normal case under a 620s keepAliveTimeout) would otherwise run as the prior request's user
34
+ * (observed 2026-08-26: /dev/login account switch, home greeting server-rendered with the
35
+ * previous account's name). Scoped to the current id on purpose: in-flight hops of the
36
+ * previous request keep their own already-copied entries, and descendants created after the
37
+ * re-seed inherit the fresh bag.
38
+ */
39
+ clearData(): void {
40
+ if (!NodeSessionDataStorage.HOOK_INITIALIZED) {
41
+ this.initHook();
42
+ }
43
+
44
+ delete NodeSessionDataStorage.SESSION_DATA[asyncHooks.executionAsyncId()];
45
+ }
46
+
29
47
  private initHook() {
30
48
  asyncHooks
31
49
  .createHook({
package/src/loadRoutes.ts CHANGED
@@ -87,6 +87,13 @@ function wrapRoute(
87
87
  for (const sessionDataCache of getSessionDataCaches()) {
88
88
  sessionData.data[sessionDataCache.key] = await sessionDataCache.create(sessionData.sessionId, sessionData.user);
89
89
  }
90
+ // A request always seeds ITS OWN session context: on a reused keep-alive socket this
91
+ // dispatch is born inside the previous request's async lineage (the storage's init hook
92
+ // copies bags onto descendants), and first-write-wins setData would silently drop this
93
+ // request's seed — the request then runs (and server-renders proteinjs.sessionData) as
94
+ // the PRIOR request's user (observed 2026-08-26: stale home greeting after a /dev/login
95
+ // account switch; roster correct, greeting wrong). Clear the inherited entry first.
96
+ Session.clearData();
90
97
  Session.setData(sessionData);
91
98
 
92
99
  if (shouldLogRequest(request, config)) {
@@ -0,0 +1,51 @@
1
+ import { SessionData } from '@proteinjs/server-api';
2
+ import { NodeSessionDataStorage } from '../src/NodeSessionDataStorage';
3
+
4
+ /**
5
+ * The keep-alive session-bleed class (observed 2026-08-26: after a /dev/login account
6
+ * switch, the home page server-rendered the PREVIOUS account's display name — roster
7
+ * correct, greeting wrong). Mechanism: the storage's init hook copies a populated bag onto
8
+ * every descendant async resource, `setData` is first-write-wins, and a request dispatched
9
+ * on a reused keep-alive socket is born inside the previous request's lineage — so the new
10
+ * request's seed silently loses and the request runs as the prior request's user.
11
+ *
12
+ * These tests pin the hazard AND the request-boundary cure `wrapRoute` now applies:
13
+ * `clearData()` before the seed makes the request's own `setData` authoritative.
14
+ */
15
+ describe('session data at the request boundary', () => {
16
+ const storage = new NodeSessionDataStorage();
17
+ const asData = (user: string): SessionData => ({ sessionId: `session-${user}`, user, data: {} });
18
+
19
+ /** A continuation born INSIDE the current async context — the keep-alive shape: request B's
20
+ * dispatch created while request A's lineage still tags the trigger ids. */
21
+ const bornInLineage = (run: () => void): Promise<void> =>
22
+ new Promise((resolve, reject) => {
23
+ setImmediate(() => {
24
+ try {
25
+ run();
26
+ resolve();
27
+ } catch (e) {
28
+ reject(e);
29
+ }
30
+ });
31
+ });
32
+
33
+ it('pins the hazard: a dispatch born in a prior lineage INHERITS the bag, and a bare re-seed silently loses', async () => {
34
+ storage.setData(asData('account-a'));
35
+ await bornInLineage(() => {
36
+ expect(storage.getData()?.user).toBe('account-a'); // inherited from the trigger lineage
37
+ storage.setData(asData('account-b')); // first-write-wins: this seed is DROPPED
38
+ expect(storage.getData()?.user).toBe('account-a'); // the silent bleed
39
+ });
40
+ });
41
+
42
+ it('the request-boundary cure: clearData() then setData makes the new request authoritative', async () => {
43
+ storage.setData(asData('account-a'));
44
+ await bornInLineage(() => {
45
+ // What wrapRoute does per request now: clear the inherited entry, then seed.
46
+ storage.clearData();
47
+ storage.setData(asData('account-b'));
48
+ expect(storage.getData()?.user).toBe('account-b');
49
+ });
50
+ });
51
+ });