@@ -12,15 +12,49 @@ import {
1212import { persistWorkflowOperation } from '@/socket/database/operations'
1313import type { AuthenticatedSocket } from '@/socket/middleware/auth'
1414import { checkRolePermission } from '@/socket/middleware/permissions'
15- import type { IRoomManager } from '@/socket/rooms'
15+ import type { IRoomManager , UserSession } from '@/socket/rooms'
1616import { WorkflowOperationSchema } from '@/socket/validation/schemas'
1717
1818const logger = createLogger ( 'OperationsHandlers' )
1919
2020export function setupOperationsHandlers ( socket : AuthenticatedSocket , roomManager : IRoomManager ) {
2121 socket . on ( 'workflow-operation' , async ( data ) => {
22- const workflowId = await roomManager . getWorkflowIdForSocket ( socket . id )
23- const session = await roomManager . getUserSession ( socket . id )
22+ if ( ! roomManager . isReady ( ) ) {
23+ socket . emit ( 'operation-forbidden' , {
24+ type : 'ROOM_MANAGER_UNAVAILABLE' ,
25+ message : 'Realtime unavailable' ,
26+ } )
27+ if ( data ?. operationId ) {
28+ socket . emit ( 'operation-failed' , {
29+ operationId : data . operationId ,
30+ error : 'Realtime unavailable' ,
31+ retryable : true ,
32+ } )
33+ }
34+ return
35+ }
36+
37+ let workflowId : string | null = null
38+ let session : UserSession | null = null
39+
40+ try {
41+ workflowId = await roomManager . getWorkflowIdForSocket ( socket . id )
42+ session = await roomManager . getUserSession ( socket . id )
43+ } catch ( error ) {
44+ logger . error ( 'Error loading session for workflow operation:' , error )
45+ socket . emit ( 'operation-forbidden' , {
46+ type : 'ROOM_MANAGER_UNAVAILABLE' ,
47+ message : 'Realtime unavailable' ,
48+ } )
49+ if ( data ?. operationId ) {
50+ socket . emit ( 'operation-failed' , {
51+ operationId : data . operationId ,
52+ error : 'Realtime unavailable' ,
53+ retryable : true ,
54+ } )
55+ }
56+ return
57+ }
2458
2559 if ( ! workflowId || ! session ) {
2660 socket . emit ( 'operation-forbidden' , {
0 commit comments