import type { ConnectionInvocationRecord } from "../contracts/runTypes"; import type { ParentExecutionRef } from "../types"; import type { RunEventBus } from "./runEvents"; export class ConnectionInvocationEventPublisher { constructor( private readonly eventBus: RunEventBus | undefined, private readonly parent: ParentExecutionRef | undefined, ) {} async publish(record: ConnectionInvocationRecord): Promise { if (!this.eventBus) return; const kind = this.kindFor(record); if (!kind) return; await this.eventBus.publish({ kind, runId: record.runId, workflowId: record.workflowId, parent: this.parent, at: record.updatedAt, record, }); } private kindFor( record: ConnectionInvocationRecord, ): "connectionInvocationStarted" | "connectionInvocationCompleted" | "connectionInvocationFailed" | undefined { if (record.status === "running" || record.status === "queued") { return "connectionInvocationStarted"; } if (record.status === "completed") { return "connectionInvocationCompleted"; } if (record.status === "failed") { return "connectionInvocationFailed"; } return undefined; } }