()
| 370 | * on the environment load, so the two are awaited concurrently below. |
| 371 | */ |
| 372 | const loadWorkflowState = async () => { |
| 373 | if (metadata.workflowStateOverride) { |
| 374 | const override = metadata.workflowStateOverride |
| 375 | logger.info(`[${requestId}] Using workflow state override (diff workflow execution)`, { |
| 376 | blocksCount: Object.keys(override.blocks).length, |
| 377 | edgesCount: override.edges.length, |
| 378 | }) |
| 379 | return { |
| 380 | blocks: override.blocks, |
| 381 | edges: override.edges, |
| 382 | loops: override.loops || {}, |
| 383 | parallels: override.parallels || {}, |
| 384 | deploymentVersionId: override.deploymentVersionId, |
| 385 | } |
| 386 | } |
| 387 | |
| 388 | if (useDraftState) { |
| 389 | const draftData = await loadWorkflowFromNormalizedTables(workflowId) |
| 390 | |
| 391 | if (!draftData) { |
| 392 | throw new Error('Workflow not found or not yet saved') |
| 393 | } |
| 394 | |
| 395 | logger.info( |
| 396 | `[${requestId}] Using draft workflow state from normalized tables (client execution)` |
| 397 | ) |
| 398 | return { |
| 399 | blocks: draftData.blocks, |
| 400 | edges: draftData.edges, |
| 401 | loops: draftData.loops, |
| 402 | parallels: draftData.parallels, |
| 403 | deploymentVersionId: undefined, |
| 404 | } |
| 405 | } |
| 406 | |
| 407 | const deployedData = await loadDeployedWorkflowState(workflowId) |
| 408 | logger.info(`[${requestId}] Using deployed workflow state (deployed execution)`) |
| 409 | return { |
| 410 | blocks: deployedData.blocks, |
| 411 | edges: deployedData.edges, |
| 412 | loops: deployedData.loops, |
| 413 | parallels: deployedData.parallels, |
| 414 | deploymentVersionId: deployedData.deploymentVersionId, |
| 415 | } |
| 416 | } |
| 417 | |
| 418 | const [workflowState, env] = await Promise.all([ |
| 419 | loadWorkflowState(), |
no test coverage detected