11import type { Session } from "electron"
2- import { describe , expect , it , vi } from "vitest"
2+ import { beforeEach , describe , expect , it , vi } from "vitest"
33
44import {
55 buildManagedAuthCookieHeader ,
@@ -10,6 +10,10 @@ import {
1010} from "./auth-cookies"
1111
1212describe ( "auth cookies" , ( ) => {
13+ beforeEach ( ( ) => {
14+ vi . useRealTimers ( )
15+ } )
16+
1317 it ( "builds a cookie header from managed auth cookies only" , ( ) => {
1418 const header = buildManagedAuthCookieHeader ( [
1519 { name : "__Secure-better-auth.session_token" , value : "session-token" } ,
@@ -104,6 +108,53 @@ describe("auth cookies", () => {
104108 expect ( remove ) . not . toHaveBeenCalled ( )
105109 } )
106110
111+ it ( "persists session token cookies across app restarts when the server sends Max-Age" , async ( ) => {
112+ vi . useFakeTimers ( )
113+ vi . setSystemTime ( new Date ( "2026-05-12T00:00:00.000Z" ) )
114+
115+ const set = vi . fn ( ) . mockImplementation ( async ( ) => { } )
116+ const remove = vi . fn ( ) . mockImplementation ( async ( ) => { } )
117+ const get = vi . fn ( ) . mockResolvedValue ( [ ] )
118+
119+ await persistManagedAuthCookiesFromSetCookieHeader ( {
120+ apiURL : "https://api.folo.is" ,
121+ session : {
122+ cookies : { get, set, remove } ,
123+ } as unknown as Session ,
124+ setCookieHeader :
125+ "__Secure-better-auth.session_token=session-token; Max-Age=2592000; Path=/; HttpOnly; Secure; SameSite=None" ,
126+ } )
127+
128+ expect ( set ) . toHaveBeenCalledWith (
129+ expect . objectContaining ( {
130+ name : "__Secure-better-auth.session_token" ,
131+ value : "session-token" ,
132+ expirationDate : 1_781_136_000 ,
133+ } ) ,
134+ )
135+ } )
136+
137+ it ( "keeps rememberMe=false session token cookies session-scoped" , async ( ) => {
138+ const set = vi . fn ( ) . mockImplementation ( async ( ) => { } )
139+ const remove = vi . fn ( ) . mockImplementation ( async ( ) => { } )
140+ const get = vi . fn ( ) . mockResolvedValue ( [ ] )
141+
142+ await persistManagedAuthCookiesFromSetCookieHeader ( {
143+ apiURL : "https://api.folo.is" ,
144+ session : {
145+ cookies : { get, set, remove } ,
146+ } as unknown as Session ,
147+ setCookieHeader :
148+ "__Secure-better-auth.session_token=session-token; Path=/; HttpOnly; Secure; SameSite=None" ,
149+ } )
150+
151+ expect ( set ) . toHaveBeenCalledWith (
152+ expect . not . objectContaining ( {
153+ expirationDate : expect . any ( Number ) ,
154+ } ) ,
155+ )
156+ } )
157+
107158 it ( "removes stale duplicate session token cookies while keeping the secure host-only cookie" , async ( ) => {
108159 const remove = vi . fn ( ) . mockImplementation ( async ( ) => { } )
109160 const get = vi . fn ( ) . mockResolvedValue ( [
0 commit comments