@@ -10,6 +10,7 @@ const source = await readFile(
1010 ) ,
1111 "utf8" ,
1212) ;
13+ const tokenKey = "reflex:ws://localhost:8000/_event:token" ;
1314
1415/** Evaluate the actual frontend module with controlled transport and browser APIs. */
1516async function setup ( {
@@ -26,11 +27,14 @@ async function setup({
2627 const updates = [ ] ;
2728 const window = new EventTarget ( ) ;
2829 window . location = new URL ( "http://localhost:3000/page?query=value" ) ;
29- const storage = new Map ( storedToken ? [ [ "token" , storedToken ] ] : [ ] ) ;
30+ const storage = new Map ( storedToken ? [ [ tokenKey , storedToken ] ] : [ ] ) ;
3031 window . sessionStorage = {
3132 getItem : ( key ) => storage . get ( key ) ,
3233 setItem : ( key , value ) => storage . set ( key , value ) ,
3334 } ;
35+ window . localStorage = {
36+ getItem : ( ) => ( storedToken ? String ( Date . now ( ) + 3600000 ) : undefined ) ,
37+ } ;
3438 const document = new EventTarget ( ) ;
3539 document . cookie = disabled ? "backend-enabled=false" : "" ;
3640 document . visibilityState = hidden ? "hidden" : "visible" ;
@@ -194,34 +198,31 @@ test("warm the transport without hydrating, then reuse it with every handler att
194198 assert . deepEqual ( app . updates , [ 7 ] ) ;
195199 assert . deepEqual ( app . firstHydrates , [ true ] ) ;
196200 assert . equal ( app . timers . size , 0 ) ;
197- assert . equal ( app . window . sessionStorage . getItem ( "token" ) , "assigned-token" ) ;
201+ assert . equal ( app . window . sessionStorage . getItem ( tokenKey ) , "assigned-token" ) ;
198202 assert . equal ( app . socket . current . auth . event . router_data . pathname , "/page" ) ;
199203} ) ;
200204
201- test ( "a new session's token is saved only once the mounted app connects " , async ( ) => {
205+ test ( "a cold session stores only the token assigned by the server " , async ( ) => {
202206 const app = await setup ( { storedToken : null } ) ;
203207 app . flush ( ) ;
204- const warm = app . sockets [ 0 ] ;
205- const token = warm . io . opts . query . token ;
206- assert . ok ( token ) ;
207- // Waiting for the token in session storage must mean the app has mounted.
208- assert . equal ( app . window . sessionStorage . getItem ( "token" ) , undefined ) ;
208+ assert . equal ( app . sockets . length , 0 ) ;
209+ assert . equal ( app . window . sessionStorage . getItem ( tokenKey ) , undefined ) ;
209210 const saved = [ ] ;
210211 const setItem = app . window . sessionStorage . setItem ;
211212 app . window . sessionStorage . setItem = ( key , value ) => {
212213 saved . push ( value ) ;
213214 setItem ( key , value ) ;
214215 } ;
215216 await app . connect ( ) ;
216- assert . equal ( app . socket . current , warm ) ;
217- assert . deepEqual ( saved , [ token , "assigned-token" ] ) ;
217+ assert . equal ( app . socket . current . io . opts . query . token , "" ) ;
218+ assert . deepEqual ( saved , [ "assigned-token" ] ) ;
218219} ) ;
219220
220221test ( "a warm transport carrying another session's token is replaced" , async ( ) => {
221222 const app = await setup ( ) ;
222223 app . flush ( ) ;
223224 const warm = app . sockets [ 0 ] ;
224- app . window . sessionStorage . setItem ( "token" , "replaced-token" ) ;
225+ app . window . sessionStorage . setItem ( tokenKey , "replaced-token" ) ;
225226 await app . connect ( ) ;
226227 assert . equal ( warm . disconnects , 1 ) ;
227228 assert . equal ( app . sockets . length , 2 ) ;
0 commit comments