api/src/services/canopy-events.tsblame
View source
5bcd5db1import { EventEmitter } from "events";
5bcd5db2
5bcd5db3export interface CanopyEvent {
5bcd5db4 type:
5bcd5db5 | "run:created"
5bcd5db6 | "run:started"
5bcd5db7 | "run:completed"
5bcd5db8 | "run:cancelled"
5bcd5db9 | "step:started"
5bcd5db10 | "step:completed"
5bcd5db11 | "step:skipped"
5bcd5db12 | "log:append";
5bcd5db13 runId: number;
5bcd5db14 repoId: number;
5bcd5db15 stepId?: number;
5bcd5db16 stepIndex?: number;
5bcd5db17 status?: string;
5bcd5db18 run?: Record<string, unknown>;
5bcd5db19 step?: Record<string, unknown>;
5bcd5db20 log?: { stream: string; content: string; created_at: string };
5bcd5db21 ts: string;
5bcd5db22}
5bcd5db23
5bcd5db24export class CanopyEventBus extends EventEmitter {
5bcd5db25 publish(data: CanopyEvent): void {
5bcd5db26 this.emit("canopy", data);
5bcd5db27 }
5bcd5db28
5bcd5db29 subscribe(listener: (data: CanopyEvent) => void): () => void {
5bcd5db30 this.on("canopy", listener);
5bcd5db31 return () => this.off("canopy", listener);
5bcd5db32 }
5bcd5db33}