@@ -256,6 +256,68 @@ describe('SupabaseClient', () => {
256256 const token = await client . _getAccessToken ( )
257257 expect ( token ) . toBe ( KEY )
258258 } )
259+
260+ test ( 'should fallback to supabaseKey on network error by default' , async ( ) => {
261+ const client = createClient ( URL , KEY )
262+
263+ // Mock network error (status 0 indicates AuthRetryableFetchError)
264+ const networkError = { message : 'Network error' , status : 0 }
265+ client . auth . getSession = jest . fn ( ) . mockResolvedValue ( {
266+ data : { session : null } ,
267+ error : networkError ,
268+ } )
269+
270+ // @ts -ignore - accessing private method
271+ const token = await client . _getAccessToken ( )
272+ // Should fallback to KEY, not throw
273+ expect ( token ) . toBe ( KEY )
274+ } )
275+
276+ test ( 'should throw on network error when failOnNetworkError is true' , async ( ) => {
277+ const client = createClient ( URL , KEY , {
278+ auth : { failOnNetworkError : true } ,
279+ } )
280+
281+ // Mock network error (status 0 indicates AuthRetryableFetchError)
282+ const networkError = { message : 'Network error' , status : 0 }
283+ client . auth . getSession = jest . fn ( ) . mockResolvedValue ( {
284+ data : { session : null } ,
285+ error : networkError ,
286+ } )
287+
288+ // @ts -ignore - accessing private method
289+ await expect ( client . _getAccessToken ( ) ) . rejects . toEqual ( networkError )
290+ } )
291+
292+ test ( 'should not throw on non-network auth errors even when failOnNetworkError is true' , async ( ) => {
293+ const client = createClient ( URL , KEY , {
294+ auth : { failOnNetworkError : true } ,
295+ } )
296+
297+ // Mock non-network auth error (e.g., session expired - status 401)
298+ const authError = { message : 'Session expired' , status : 401 }
299+ client . auth . getSession = jest . fn ( ) . mockResolvedValue ( {
300+ data : { session : null } ,
301+ error : authError ,
302+ } )
303+
304+ // @ts -ignore - accessing private method
305+ const token = await client . _getAccessToken ( )
306+ // Should fallback to KEY, not throw (status !== 0)
307+ expect ( token ) . toBe ( KEY )
308+ } )
309+
310+ test ( 'should store failOnNetworkError setting' , ( ) => {
311+ const clientWithOption = createClient ( URL , KEY , {
312+ auth : { failOnNetworkError : true } ,
313+ } )
314+ // @ts -ignore - accessing protected property
315+ expect ( clientWithOption . failOnNetworkError ) . toBe ( true )
316+
317+ const clientWithoutOption = createClient ( URL , KEY )
318+ // @ts -ignore - accessing protected property
319+ expect ( clientWithoutOption . failOnNetworkError ) . toBe ( false )
320+ } )
259321 } )
260322
261323 describe ( 'Realtime Authentication' , ( ) => {
0 commit comments