import { Context, Application } from "egg"; import { Queue, QueueOptions, JobOptions, Job as BullJob } from "bull"; interface Bus { get(name: string): Queue; dispatch(name: string, payload?: T, options?: JobOptions): void; emit(name: string, payload?: T, options?: JobOptions): void; } interface BusEvent { name: string; data: T; } interface EggBusOptions { app?: boolean; debug?: boolean; concurrency?: number; listener?: { ignore?: string; baseDir?: string; options?: JobOptions; }; bull?: QueueOptions; queue?: { prefix?: string; default?: string; }; job?: { ignore?: string; baseDir?: string; options?: JobOptions; }; queues?: { [x: string]: QueueOptions & { concurrency: number }; }; } declare module "egg" { interface Application { bus: Bus; } interface EggAppConfig { bus: EggBusOptions; } } declare module "egg-bus" { interface ListenerStruct { name: string; data: T; } abstract class Listener { ctx: Context; app: Application; abstract run(event: BusEvent, job: BullJob): Promise; abstract failed( struct: ListenerStruct, error: Error, job: BullJob ): Promise; } abstract class Job { ctx: Context; app: Application; abstract run(data: T, job: BullJob): Promise; abstract failed(data: T, error: Error, job: BullJob): Promise; } }