UNPKG

@hotmeshio/hotmesh

Version:

Serverless Workflow

261 lines (260 loc) 7.75 kB
import { ILogger } from '../services/logger'; import { HotMesh as HotMeshService } from '../services/hotmesh'; import { HookRules } from './hook'; import { StreamData, StreamDataResponse } from './stream'; import { LogLevel } from './logger'; import { ProviderClient, ProviderConfig, ProvidersConfig } from './provider'; /** * the full set of entity types that are stored in the key/value store */ declare enum KeyType { APP = "APP", THROTTLE_RATE = "THROTTLE_RATE", HOOKS = "HOOKS", JOB_DEPENDENTS = "JOB_DEPENDENTS", JOB_STATE = "JOB_STATE", JOB_STATS_GENERAL = "JOB_STATS_GENERAL", JOB_STATS_MEDIAN = "JOB_STATS_MEDIAN", JOB_STATS_INDEX = "JOB_STATS_INDEX", HOTMESH = "HOTMESH", QUORUM = "QUORUM", SCHEMAS = "SCHEMAS", SIGNALS = "SIGNALS", STREAMS = "STREAMS", SUBSCRIPTIONS = "SUBSCRIPTIONS", SUBSCRIPTION_PATTERNS = "SUBSCRIPTION_PATTERNS", SYMKEYS = "SYMKEYS", SYMVALS = "SYMVALS", TIME_RANGE = "TIME_RANGE", WORK_ITEMS = "WORK_ITEMS" } /** * minting keys, requires one or more of the following parameters */ type KeyStoreParams = { appId?: string; engineId?: string; appVersion?: string; jobId?: string; activityId?: string; jobKey?: string; dateTime?: string; facet?: string; topic?: string; timeValue?: number; scoutType?: 'signal' | 'time' | 'activate'; }; type HotMesh = typeof HotMeshService; type HotMeshEngine = { /** * set by hotmesh once the connnector service instances the provider * @private */ store?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ stream?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ sub?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * AND if the provider requires a separate channel for publishing * @private */ pub?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ search?: ProviderClient; /** * redis connection options; replaced with 'connection' * @deprecated */ redis?: ProviderConfig; /** * short-form format for the connection options for the * store, stream, sub, and search clients */ connection?: ProviderConfig | ProvidersConfig; /** * long-form format for the connection options for the * store, stream, sub, and search clients */ /** * the number of milliseconds to wait before reclaiming a stream; * depending upon the provider this may be an explicit retry event, * consuming a message from the stream and re-queueing it (dlq, etc), * or it may be a configurable delay before the provider exposes the * message to the consumer again. It is up to the provider, but expressed * in milliseconds here. */ reclaimDelay?: number; /** * the number of times to reclaim a stream before giving up * and moving the message to a dead-letter queue or other * error handling mechanism */ reclaimCount?: number; /** * if true, the engine will not route stream messages * to the worker * @default false */ readonly?: boolean; }; type HotMeshWorker = { /** * the topic that the worker subscribes to */ topic: string; /** * set by hotmesh once the connnector service instances the provider * AND if the provider requires a separate channel for publishing * @private */ pub?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ store?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ stream?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ sub?: ProviderClient; /** * set by hotmesh once the connnector service instances the provider * @private */ search?: ProviderClient; /** * redis connection options; replaced with 'connection' * @deprecated */ redis?: ProviderConfig; /** * short-form format for the connection options for the * store, stream, sub, and search clients */ connection?: ProviderConfig | ProvidersConfig; /** * long-form format for the connection options for the * store, stream, sub, and search clients */ /** * the number of milliseconds to wait before reclaiming a stream; * depending upon the provider this may be an explicit retry event, * consuming a message from the stream and re-queueing it (dlq, etc), * or it may be a configurable delay before the provider exposes the * message to the consumer again. It is up to the provider, but expressed * in milliseconds here. */ reclaimDelay?: number; /** * the number of times to reclaim a stream before giving up * and moving the message to a dead-letter queue or other * error handling mechanism */ reclaimCount?: number; /** * The callback function to execute when a message is dequeued * from the target stream */ callback: (payload: StreamData) => Promise<StreamDataResponse>; }; type HotMeshConfig = { appId: string; namespace?: string; name?: string; guid?: string; logger?: ILogger; logLevel?: LogLevel; engine?: HotMeshEngine; workers?: HotMeshWorker[]; }; type HotMeshGraph = { /** * the unique topic that the graph subscribes to, creating one * job for each idempotent message that is received */ subscribes: string; /** * the unique topic that the graph publishes/emits to when the job completes */ publishes?: string; /** * the number of seconds that the completed job should be * left in the store before it is deleted */ expire?: number; /** * if the graph is reentrant and has open activities, the * `persistent` flag will emit the job completed event. * This allows the 'main' thread/trigger that started the job to * signal to subscribers (or the parent) that the job * is 'done', while still leaving the job in a * state that allows for reentry (such as cyclical hooks). */ persistent?: boolean; /** * the schema for the output of the graph */ output?: { schema: Record<string, any>; }; /** * the schema for the input of the graph */ input?: { schema: Record<string, any>; }; /** * the activities that define the graph */ activities: Record<string, any>; /** * the transitions that define how activities are connected */ transitions?: Record<string, any>; /** * the reentrant hook rules that define how to reenter a running graph */ hooks?: HookRules; }; type HotMeshSettings = { namespace: string; version: string; }; type HotMeshManifest = { app: { id: string; version: string; settings: Record<string, any>; graphs: HotMeshGraph[]; }; }; type VersionedFields = { [K in `versions/${string}`]: any; }; type HotMeshApp = VersionedFields & { id: string; version: string; settings?: string; active?: boolean; }; type HotMeshApps = { [appId: string]: HotMeshApp; }; export { HotMesh, HotMeshEngine, HotMeshWorker, HotMeshSettings, HotMeshApp, HotMeshApps, HotMeshConfig, HotMeshManifest, HotMeshGraph, KeyType, KeyStoreParams, };