Skip to content

Commit 82d491d

Browse files
Vikhyath MondretiVikhyath Mondreti
authored andcommitted
fix sockets token refresh
1 parent 7c00f07 commit 82d491d

2 files changed

Lines changed: 7 additions & 49 deletions

File tree

apps/sim/contexts/socket-context.tsx

Lines changed: 6 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -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
})

apps/sim/lib/auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export const auth = betterAuth({
187187
plugins: [
188188
nextCookies(),
189189
oneTimeToken({
190-
expiresIn: 30, // 30 minutes - covers typical work sessions
190+
expiresIn: 24 * 60 * 60, // 24 hours - Socket.IO handles connection persistence with heartbeats
191191
}),
192192
emailOTP({
193193
sendVerificationOTP: async (data: {

0 commit comments

Comments
 (0)