UNPKG

@distributed-functions/core

Version:
47 lines (46 loc) 3.15 kB
import { CallsRecord, Call, RequestFromCall, ResponseFromCall } from './call'; import { CallHandler, CallHandlerRun } from './call-handler'; import { EventsRecord, Event, MessageFromEvent } from './event'; import { EventHandler, EventHandlerRun } from './event-handler'; import { CallsPublisher, EventsPublisher, CallsToPublish, EventsToPublish } from './publishers'; export type CallSubscriber<Ctx extends Record<any, any>, ER extends EventsRecord, CR extends CallsRecord> = { subscribe: <C extends Call<any, any, any, any>>(call: C, run: CallHandlerRun<C, Ctx, ER, CR>, options?: { parallel?: number; }) => Promise<void>; subscribeHandler: (callHandler: CallHandler<Call<string, any, any, any>, Ctx, any, any>) => Promise<void>; }; export type EventSubscriber<Ctx extends Record<any, any>, ER extends EventsRecord, CR extends CallsRecord> = { subscribe: <E extends Event<any, any>>(event: E, run: EventHandlerRun<E, Ctx, ER, CR>, options?: { parallel?: number; mandatory?: boolean; }) => Promise<void>; subscribeHandler: (eventHandler: EventHandler<any, Ctx, any, any>) => Promise<void>; }; export type TransportPubSub<Ctx extends Record<any, any>, ER extends EventsRecord, CR extends CallsRecord> = { call: CallsPublisher<CR> & CallSubscriber<Ctx, ER, CR>; event: EventsPublisher<ER> & EventSubscriber<Ctx, ER, CR>; }; export type TransportInitializer<Ctx extends Record<any, any>> = { init: () => Promise<void>; stop: () => Promise<void>; restart: () => Promise<void>; destroy: () => Promise<void>; ctx: () => Ctx; }; export type Transport<Ctx extends Record<any, any>, ER extends EventsRecord, CR extends CallsRecord> = TransportPubSub<Ctx, ER, CR> & TransportInitializer<Ctx>; export declare const bindTransportToCalls: <CR extends CallsRecord>(publishCall: <C extends Call<any, any, any, any>>(request: ReturnType<C["request"]>, options?: { timeout?: number; mandatory?: boolean; }, assignedCalls?: CallsToPublish<any>, assignedEvents?: EventsToPublish<any>) => Promise<ReturnType<C["response"]>>, callsRecord: CR) => CallsToPublish<CR>; export declare const bindTransportToEvents: <ER extends EventsRecord>(publishEvent: <E extends Event<any, any>>(event: MessageFromEvent<E>, options?: { mandatory?: boolean; }, assignedCalls?: CallsToPublish<any>, assignedEvents?: EventsToPublish<any>) => Promise<void>, callsRecord: ER) => EventsToPublish<ER>; export declare const Transport: { bindTransportToCalls: <CR extends CallsRecord>(publishCall: <C extends Call<any, any, any, any>>(request: ReturnType<C["request"]>, options?: { timeout?: number; mandatory?: boolean; }, assignedCalls?: CallsToPublish<any>, assignedEvents?: EventsToPublish<any>) => Promise<ReturnType<C["response"]>>, callsRecord: CR) => CallsToPublish<CR>; bindTransportToEvents: <ER extends EventsRecord>(publishEvent: <E extends Event<any, any>>(event: MessageFromEvent<E>, options?: { mandatory?: boolean; }, assignedCalls?: CallsToPublish<any>, assignedEvents?: EventsToPublish<any>) => Promise<void>, callsRecord: ER) => EventsToPublish<ER>; };