( workflowId: string, providedWorkspaceId?: string )
| 124 | } |
| 125 | |
| 126 | export async function loadDeployedWorkflowState( |
| 127 | workflowId: string, |
| 128 | providedWorkspaceId?: string |
| 129 | ): Promise<DeployedWorkflowData> { |
| 130 | try { |
| 131 | const [active] = await db |
| 132 | .select({ |
| 133 | id: workflowDeploymentVersion.id, |
| 134 | state: workflowDeploymentVersion.state, |
| 135 | createdAt: workflowDeploymentVersion.createdAt, |
| 136 | }) |
| 137 | .from(workflowDeploymentVersion) |
| 138 | .where( |
| 139 | and( |
| 140 | eq(workflowDeploymentVersion.workflowId, workflowId), |
| 141 | eq(workflowDeploymentVersion.isActive, true) |
| 142 | ) |
| 143 | ) |
| 144 | .orderBy(desc(workflowDeploymentVersion.createdAt)) |
| 145 | .limit(1) |
| 146 | |
| 147 | if (!active?.state) { |
| 148 | throw new Error(`Workflow ${workflowId} has no active deployment`) |
| 149 | } |
| 150 | |
| 151 | const cached = deployedStateCache.get(active.id) |
| 152 | if (cached) { |
| 153 | return structuredClone(cached) |
| 154 | } |
| 155 | |
| 156 | const state = active.state as WorkflowState & { variables?: Record<string, unknown> } |
| 157 | |
| 158 | let resolvedWorkspaceId = providedWorkspaceId |
| 159 | if (!resolvedWorkspaceId) { |
| 160 | const workflowContext = await getActiveWorkflowContext(workflowId) |
| 161 | resolvedWorkspaceId = workflowContext?.workspaceId |
| 162 | } |
| 163 | |
| 164 | if (!resolvedWorkspaceId) { |
| 165 | throw new Error(`Workflow ${workflowId} has no workspace`) |
| 166 | } |
| 167 | |
| 168 | const { blocks: migratedBlocks } = await applyBlockMigrations( |
| 169 | state.blocks || {}, |
| 170 | resolvedWorkspaceId |
| 171 | ) |
| 172 | |
| 173 | const deployedState: DeployedWorkflowData = { |
| 174 | blocks: migratedBlocks, |
| 175 | edges: state.edges || [], |
| 176 | loops: state.loops || {}, |
| 177 | parallels: state.parallels || {}, |
| 178 | variables: state.variables || {}, |
| 179 | isFromNormalizedTables: false, |
| 180 | deploymentVersionId: active.id, |
| 181 | } |
| 182 | |
| 183 | deployedStateCache.set(active.id, deployedState) |
no test coverage detected