(workflowId: string)
| 169 | } |
| 170 | |
| 171 | export async function getWorkflowState(workflowId: string) { |
| 172 | try { |
| 173 | const workflowData = await db |
| 174 | .select() |
| 175 | .from(workflow) |
| 176 | .where(and(eq(workflow.id, workflowId), isNull(workflow.archivedAt))) |
| 177 | .limit(1) |
| 178 | |
| 179 | if (!workflowData.length) { |
| 180 | throw new Error(`Workflow ${workflowId} not found`) |
| 181 | } |
| 182 | |
| 183 | const normalizedData = await loadWorkflowFromNormalizedTablesRaw(workflowId) |
| 184 | |
| 185 | if (normalizedData) { |
| 186 | const finalState = { |
| 187 | hasActiveWebhook: false, |
| 188 | blocks: normalizedData.blocks, |
| 189 | edges: normalizedData.edges, |
| 190 | loops: normalizedData.loops, |
| 191 | parallels: normalizedData.parallels, |
| 192 | lastSaved: Date.now(), |
| 193 | isDeployed: workflowData[0].isDeployed || false, |
| 194 | deployedAt: workflowData[0].deployedAt, |
| 195 | } |
| 196 | |
| 197 | return { |
| 198 | ...workflowData[0], |
| 199 | state: finalState, |
| 200 | lastModified: Date.now(), |
| 201 | } |
| 202 | } |
| 203 | return { |
| 204 | ...workflowData[0], |
| 205 | lastModified: Date.now(), |
| 206 | } |
| 207 | } catch (error) { |
| 208 | logger.error(`Error fetching workflow state for ${workflowId}:`, error) |
| 209 | throw error |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | export async function persistWorkflowOperation(workflowId: string, operation: any) { |
| 214 | const startTime = Date.now() |
no test coverage detected