/** * Temporal client management — connection lifecycle and workflow operations. * Uses @temporalio/client (not worker) since the API server only submits and queries workflows. */ import { Client, Connection } from '@temporalio/client'; import type { PipelineProgress } from '@trebuchet/worker/pipeline'; export interface TemporalClients { readonly client: Client; readonly connection: Connection; } export async function connectTemporal(address: string): Promise { console.log(`Connecting to Temporal at ${address}...`); const connection = await Connection.connect({ address }); const client = new Client({ connection }); console.log('Temporal connected.'); return { client, connection }; } export async function disconnectTemporal(clients: TemporalClients): Promise { await clients.connection.close(); } /** Query a workflow's progress via the getProgress query. */ export async function queryProgress(client: Client, workflowId: string): Promise { const handle = client.workflow.getHandle(workflowId); return handle.query('getProgress'); } /** Cancel a running workflow. */ export async function cancelWorkflow(client: Client, workflowId: string): Promise { const handle = client.workflow.getHandle(workflowId); await handle.cancel(); }