@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
text/typescript
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 };