Skip to content

Commit 39d7589

Browse files
committed
make sync path match
1 parent 424b6e6 commit 39d7589

1 file changed

Lines changed: 41 additions & 9 deletions

File tree

  • apps/sim/app/api/workflows/[id]/execute

apps/sim/app/api/workflows/[id]/execute/route.ts

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,17 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
403403
if (!enableSSE) {
404404
logger.info(`[${requestId}] Using non-SSE execution (direct JSON response)`)
405405
const syncTimeout = preprocessResult.executionTimeout?.sync
406+
const abortController = new AbortController()
407+
let isTimedOut = false
408+
let timeoutId: NodeJS.Timeout | undefined
409+
410+
if (syncTimeout) {
411+
timeoutId = setTimeout(() => {
412+
isTimedOut = true
413+
abortController.abort()
414+
}, syncTimeout)
415+
}
416+
406417
try {
407418
const metadata: ExecutionMetadata = {
408419
requestId,
@@ -436,9 +447,33 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
436447
includeFileBase64,
437448
base64MaxBytes,
438449
stopAfterBlockId,
439-
abortSignal: syncTimeout ? AbortSignal.timeout(syncTimeout) : undefined,
450+
abortSignal: abortController.signal,
440451
})
441452

453+
if (result.status === 'cancelled' && isTimedOut && syncTimeout) {
454+
const timeoutErrorMessage = getTimeoutErrorMessage(null, syncTimeout)
455+
logger.info(`[${requestId}] Non-SSE execution timed out`, { timeoutMs: syncTimeout })
456+
await loggingSession.markAsFailed(timeoutErrorMessage)
457+
458+
await cleanupExecutionBase64Cache(executionId)
459+
460+
return NextResponse.json(
461+
{
462+
success: false,
463+
output: result.output,
464+
error: timeoutErrorMessage,
465+
metadata: result.metadata
466+
? {
467+
duration: result.metadata.duration,
468+
startTime: result.metadata.startTime,
469+
endTime: result.metadata.endTime,
470+
}
471+
: undefined,
472+
},
473+
{ status: 408 }
474+
)
475+
}
476+
442477
const outputWithBase64 = includeFileBase64
443478
? ((await hydrateUserFilesWithBase64(result.output, {
444479
requestId,
@@ -472,14 +507,9 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
472507

473508
return NextResponse.json(filteredResult)
474509
} catch (error: unknown) {
475-
const isTimeout = isTimeoutError(error)
476-
const errorMessage = isTimeout
477-
? getTimeoutErrorMessage(error, syncTimeout)
478-
: error instanceof Error
479-
? error.message
480-
: 'Unknown error'
510+
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
481511

482-
logger.error(`[${requestId}] Non-SSE execution failed: ${errorMessage}`, { isTimeout })
512+
logger.error(`[${requestId}] Non-SSE execution failed: ${errorMessage}`)
483513

484514
const executionResult = hasExecutionResult(error) ? error.executionResult : undefined
485515

@@ -502,8 +532,10 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
502532
}
503533
: undefined,
504534
},
505-
{ status: isTimeout ? 408 : 500 }
535+
{ status: 500 }
506536
)
537+
} finally {
538+
if (timeoutId) clearTimeout(timeoutId)
507539
}
508540
}
509541

0 commit comments

Comments
 (0)