import { EventEmitter } from 'events'; import Publisher from './publisher'; import { DelayedConfig } from './getDelayed'; import { RetryConfig } from './getRetries'; import { Message, PubSub, Topic } from '@google-cloud/pubsub'; import { JobPayload, QueueConfig } from '.'; export type JobStatus = string | 'put' | 'retry'; export type JobResult = void | JobStatus | { status: string; extra: any; }; export type Handler = { ackOnStart?: boolean; retries?: RetryConfig; delayed?: DelayedConfig; work: (payload: JobPayload, message: Message) => Promise; }; export type DynamicHandler = (type: string) => Handler; export type Handlers = Record | DynamicHandler; export default class PubsubWorker extends EventEmitter { client: PubSub; queueConfig: QueueConfig; topic: Topic; publisher: Publisher; buriedPublisher?: Publisher; constructor(client: PubSub, queueConfig: QueueConfig); work(handlers: Handlers, message: Message): Promise; runHandler(handler: Handler, data: JobPayload, message: Message, ackOnStart?: boolean, delayed?: string | null): Promise<{}>; handleRetry(status: JobStatus, message: Message, ackOnStart: boolean, delayed?: string | null): void; /** * Start the worker */ start(handlers?: {}, options?: {}): void; }