UNPKG

@sebspark/pubsub

Version:

A wrapper around [@google-cloud/pubsub](https://www.npmjs.com/package/@google-cloud/pubsub) adding simple methods for publishing and subscribing with typed messages.

38 lines (33 loc) 1.57 kB
import { ClientConfig, Message, Subscription } from '@google-cloud/pubsub'; type CloudSchema = { schemaId: string; avroDefinition: string; }; type PublisherClient<T extends Record<string, unknown>> = { topic<K extends keyof T>(name: K, cloudSchema?: CloudSchema): { publish<M extends T[K]>(message: M): Promise<void>; initiate(): Promise<void>; }; }; declare const createPublisher: <T extends Record<string, unknown>>(clientOptions?: ClientConfig | undefined) => PublisherClient<T>; type TypedMessage<T> = Omit<Message, 'data'> & { data: T; }; type SubscriptionClient<T extends Record<string, unknown>> = { topic<K extends keyof T>(name: K, cloudSchema?: CloudSchema): { subscribe<M extends T[K]>(name: string, callbacks: { onMessage: (message: TypedMessage<M>) => Promise<void>; onError?: (message: TypedMessage<M>, error: unknown) => Promise<void>; }, options?: PubSubOptions): Promise<Subscription>; initiate<M extends T[K]>(name: string, options?: PubSubOptions): Promise<void>; close: (name: string) => Promise<void>; delete: (name: string) => Promise<void>; }; }; type PubSubOptions = { expirationPolicy: number; messageRetentionDuration: number; autoAck?: boolean; }; declare const createSubscriber: <T extends Record<string, unknown>>(clientOptions?: ClientConfig | undefined) => SubscriptionClient<T>; export { type PubSubOptions, type PublisherClient, type SubscriptionClient, type TypedMessage, createPublisher, createSubscriber };