| 5bcd5db | | | 1 | import { EventEmitter } from "events"; |
| 5bcd5db | | | 2 | |
| 5bcd5db | | | 3 | export interface CanopyEvent { |
| 5bcd5db | | | 4 | type: |
| 5bcd5db | | | 5 | | "run:created" |
| 5bcd5db | | | 6 | | "run:started" |
| 5bcd5db | | | 7 | | "run:completed" |
| 5bcd5db | | | 8 | | "run:cancelled" |
| 5bcd5db | | | 9 | | "step:started" |
| 5bcd5db | | | 10 | | "step:completed" |
| 5bcd5db | | | 11 | | "step:skipped" |
| 5bcd5db | | | 12 | | "log:append"; |
| 5bcd5db | | | 13 | runId: number; |
| 5bcd5db | | | 14 | repoId: number; |
| 5bcd5db | | | 15 | stepId?: number; |
| 5bcd5db | | | 16 | stepIndex?: number; |
| 5bcd5db | | | 17 | status?: string; |
| 5bcd5db | | | 18 | run?: Record<string, unknown>; |
| 5bcd5db | | | 19 | step?: Record<string, unknown>; |
| 5bcd5db | | | 20 | log?: { stream: string; content: string; created_at: string }; |
| 5bcd5db | | | 21 | ts: string; |
| 5bcd5db | | | 22 | } |
| 5bcd5db | | | 23 | |
| 5bcd5db | | | 24 | export class CanopyEventBus extends EventEmitter { |
| 5bcd5db | | | 25 | publish(data: CanopyEvent): void { |
| 5bcd5db | | | 26 | this.emit("canopy", data); |
| 5bcd5db | | | 27 | } |
| 5bcd5db | | | 28 | |
| 5bcd5db | | | 29 | subscribe(listener: (data: CanopyEvent) => void): () => void { |
| 5bcd5db | | | 30 | this.on("canopy", listener); |
| 5bcd5db | | | 31 | return () => this.off("canopy", listener); |
| 5bcd5db | | | 32 | } |
| 5bcd5db | | | 33 | } |