Skip to content

Commit 754d768

Browse files
Vikhyath MondretiVikhyath Mondreti
authored andcommitted
fix dup token
1 parent 05c83e2 commit 754d768

File tree

1 file changed

+47
-20
lines changed

1 file changed

+47
-20
lines changed

apps/sim/contexts/socket-context.tsx

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,21 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
9696
workflowDeleted?: (data: any) => void
9797
}>({})
9898

99+
// Helper function to generate a fresh socket token
100+
const generateSocketToken = async (): Promise<string> => {
101+
const tokenResponse = await fetch('/api/auth/socket-token', {
102+
method: 'POST',
103+
credentials: 'include',
104+
})
105+
106+
if (!tokenResponse.ok) {
107+
throw new Error('Failed to generate socket token')
108+
}
109+
110+
const { token } = await tokenResponse.json()
111+
return token
112+
}
113+
99114
// Initialize socket when user is available - only once per session
100115
useEffect(() => {
101116
if (!user?.id) return
@@ -111,17 +126,8 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
111126

112127
const initializeSocket = async () => {
113128
try {
114-
// Generate one-time token for socket authentication
115-
const tokenResponse = await fetch('/api/auth/socket-token', {
116-
method: 'POST',
117-
credentials: 'include',
118-
})
119-
120-
if (!tokenResponse.ok) {
121-
throw new Error('Failed to generate socket token')
122-
}
123-
124-
const { token } = await tokenResponse.json()
129+
// Generate initial token for socket authentication
130+
const token = await generateSocketToken()
125131

126132
const socketUrl = process.env.NEXT_PUBLIC_SOCKET_URL || 'http://localhost:3002'
127133

@@ -139,8 +145,17 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
139145
reconnectionDelay: 1000, // Start with 1 second delay
140146
reconnectionDelayMax: 5000, // Max 5 second delay
141147
timeout: 10000, // Back to original timeout
142-
auth: {
143-
token, // Send one-time token for authentication
148+
auth: (cb) => {
149+
// Generate a fresh token for each connection attempt (including reconnections)
150+
generateSocketToken()
151+
.then((freshToken) => {
152+
logger.info('Generated fresh token for connection attempt')
153+
cb({ token: freshToken })
154+
})
155+
.catch((error) => {
156+
logger.error('Failed to generate fresh token for connection:', error)
157+
cb({ token: null }) // This will cause authentication to fail gracefully
158+
})
144159
},
145160
})
146161

@@ -178,33 +193,45 @@ export function SocketProvider({ children, user }: SocketProviderProps) {
178193
transport: error.transport,
179194
})
180195

181-
// With 24-hour token expiry, authentication errors indicate a more serious issue
182-
// that requires user intervention (e.g., session expired, user logged out)
196+
// Authentication errors now indicate either session expiry or token generation issues
183197
if (
184198
error.message?.includes('Token validation failed') ||
185-
error.message?.includes('Authentication failed')
199+
error.message?.includes('Authentication failed') ||
200+
error.message?.includes('Authentication required')
186201
) {
187-
logger.warn('Authentication failed - user may need to refresh page or re-login')
202+
logger.warn('Authentication failed - this could indicate session expiry or token generation issues')
203+
// The fresh token generation on each attempt should handle most cases automatically
204+
// If this persists, user may need to refresh page or re-login
188205
}
189206
})
190207

191208
// Socket.IO provides reconnection logging with attempt numbers
192209
socketInstance.on('reconnect', (attemptNumber) => {
193-
logger.info('Socket reconnected', {
210+
logger.info('Socket reconnected successfully', {
194211
attemptNumber,
212+
socketId: socketInstance.id,
213+
transport: socketInstance.io.engine?.transport?.name,
195214
})
196215
})
197216

198217
socketInstance.on('reconnect_attempt', (attemptNumber) => {
199-
logger.info('Socket reconnection attempt', { attemptNumber })
218+
logger.info('Socket reconnection attempt (fresh token will be generated)', {
219+
attemptNumber,
220+
timestamp: new Date().toISOString(),
221+
})
200222
})
201223

202224
socketInstance.on('reconnect_error', (error: any) => {
203-
logger.error('Socket reconnection error:', error)
225+
logger.error('Socket reconnection error:', {
226+
message: error.message,
227+
attemptNumber: error.attemptNumber,
228+
type: error.type,
229+
})
204230
})
205231

206232
socketInstance.on('reconnect_failed', () => {
207233
logger.error('Socket reconnection failed - all attempts exhausted')
234+
setIsConnecting(false)
208235
})
209236

210237
// Presence events

0 commit comments

Comments
 (0)