@distributed-functions/core
Version:
Distributed Functions for TypeScript
47 lines (46 loc) • 3.15 kB
TypeScript
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>;
};