fix(testkit): macOS compat + fix test 8c ordering (#24)
This commit is contained in:
34
artifacts/api-server/src/lib/event-bus.ts
Normal file
34
artifacts/api-server/src/lib/event-bus.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { EventEmitter } from "events";
|
||||
|
||||
export type JobEvent =
|
||||
| { type: "job:state"; jobId: string; state: string }
|
||||
| { type: "job:paid"; jobId: string; invoiceType: "eval" | "work" }
|
||||
| { type: "job:completed"; jobId: string; result: string }
|
||||
| { type: "job:failed"; jobId: string; reason: string };
|
||||
|
||||
export type SessionEvent =
|
||||
| { type: "session:state"; sessionId: string; state: string }
|
||||
| { type: "session:paid"; sessionId: string; amountSats: number }
|
||||
| { type: "session:balance"; sessionId: string; balanceSats: number };
|
||||
|
||||
export type BusEvent = JobEvent | SessionEvent;
|
||||
|
||||
class EventBus extends EventEmitter {
|
||||
emit(event: "bus", data: BusEvent): boolean;
|
||||
emit(event: string, ...args: unknown[]): boolean {
|
||||
return super.emit(event, ...args);
|
||||
}
|
||||
|
||||
on(event: "bus", listener: (data: BusEvent) => void): this;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
on(event: string, listener: (...args: any[]) => void): this {
|
||||
return super.on(event, listener);
|
||||
}
|
||||
|
||||
publish(data: BusEvent): void {
|
||||
this.emit("bus", data);
|
||||
}
|
||||
}
|
||||
|
||||
export const eventBus = new EventBus();
|
||||
eventBus.setMaxListeners(256);
|
||||
Reference in New Issue
Block a user