@@ -85,10 +85,7 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
8585 const [ currentWorkflowId , setCurrentWorkflowId ] = useState < string | null > ( null )
8686 const [ presenceUsers , setPresenceUsers ] = useState < PresenceUser [ ] > ( [ ] )
8787
88- // Connection state tracking
89- const reconnectCount = useRef ( 0 )
90- const tokenRefreshAttempts = useRef ( 0 )
91- const isRefreshingToken = useRef ( false )
88+
9289
9390 // Use refs to store event handlers to avoid stale closures
9491 const eventHandlers = useRef < {
@@ -153,14 +150,11 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
153150 socketInstance . on ( 'connect' , ( ) => {
154151 setIsConnected ( true )
155152 setIsConnecting ( false )
156- reconnectCount . current = 0
157- tokenRefreshAttempts . current = 0
158153
159154 logger . info ( 'Socket connected successfully' , {
160155 socketId : socketInstance . id ,
161156 connected : socketInstance . connected ,
162157 transport : socketInstance . io . engine ?. transport ?. name ,
163- reconnectCount : reconnectCount . current ,
164158 } )
165159 } )
166160
@@ -170,14 +164,13 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
170164
171165 logger . info ( 'Socket disconnected' , {
172166 reason,
173- reconnectCount : reconnectCount . current ,
174167 } )
175168
176169 // Clear presence when disconnected
177170 setPresenceUsers ( [ ] )
178171 } )
179172
180- socketInstance . on ( 'connect_error' , async ( error : any ) => {
173+ socketInstance . on ( 'connect_error' , ( error : any ) => {
181174 setIsConnecting ( false )
182175 logger . error ( 'Socket connection error:' , {
183176 message : error . message ,
@@ -187,53 +180,18 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
187180 transport : error . transport ,
188181 } )
189182
183+ // With 24-hour token expiry, authentication errors indicate a more serious issue
184+ // that requires user intervention (e.g., session expired, user logged out)
190185 if (
191186 error . message ?. includes ( 'Token validation failed' ) ||
192187 error . message ?. includes ( 'Authentication failed' )
193188 ) {
194- // Prevent infinite loops - limit refresh attempts
195- if ( tokenRefreshAttempts . current >= 3 ) {
196- logger . warn ( 'Max token refresh attempts reached - user needs to refresh page' )
197- return
198- }
199-
200- // Prevent concurrent refresh attempts
201- if ( isRefreshingToken . current ) {
202- logger . info ( 'Token refresh already in progress, skipping...' )
203- return
204- }
205-
206- isRefreshingToken . current = true
207- tokenRefreshAttempts . current ++
208- logger . info ( `Token expired, attempting refresh (${ tokenRefreshAttempts . current } /3)...` )
209-
210- try {
211- const tokenResponse = await fetch ( '/api/auth/socket-token' , {
212- method : 'POST' ,
213- credentials : 'include' ,
214- } )
215-
216- if ( tokenResponse . ok ) {
217- const { token } = await tokenResponse . json ( )
218- socketInstance . auth = { ...socketInstance . auth , token }
219- logger . info ( 'Token refreshed successfully, reconnecting...' )
220- socketInstance . connect ( )
221- } else {
222- logger . warn ( 'Failed to refresh token - user may need to refresh page' )
223- }
224- } catch ( refreshError ) {
225- logger . error ( 'Token refresh failed:' , refreshError )
226- } finally {
227- isRefreshingToken . current = false
228- }
189+ logger . warn ( 'Authentication failed - user may need to refresh page or re-login' )
229190 }
230191 } )
231192
232- // Add reconnection logging
193+ // Socket.IO provides reconnection logging with attempt numbers
233194 socketInstance . on ( 'reconnect' , ( attemptNumber ) => {
234- reconnectCount . current = attemptNumber
235- // Reset token refresh attempts on successful reconnection
236- tokenRefreshAttempts . current = 0
237195 logger . info ( 'Socket reconnected' , {
238196 attemptNumber,
239197 } )
0 commit comments