UNPKG

@hotmeshio/hotmesh

Version:

Serverless Workflow

162 lines (143 loc) 4.96 kB
import { KeyStoreParams } from '../modules/key'; import { StringAnyType } from './serializer'; /** * Generic type for provider class */ export interface ProviderClass { [key: string]: any; } /** * Generic type for provider options */ export interface ProviderOptions { [key: string]: any; } export type Providers = 'redis' | 'nats' | 'postgres' | 'ioredis'; /** * A provider transaction is a set of operations that are executed * atomically by the provider. The transaction is created by calling * the `transact` method on the provider. The transaction object * contains methods specific to the provider allowing it to optionally * choose to execute a single command or collect all commands and * execute as a single transaction. */ export interface ProviderTransaction { exec(): Promise<any>; // Allows callable properties while avoiding conflicts with ProviderTransaction instances [key: string]: ((...args: any[]) => Promise<any>) | undefined | any; } /** * A provider native client is the raw client object provided by the * connecter service. This object is passed to the ProviderClient * (which wraps it), providing a standardized interface for all * providers. */ export interface ProviderNativeClient { [key: string]: any; } /** * Wrapped provider native client object that standardizes the * interface for all providers. */ export interface ProviderClient { /** The provider-specific transaction object */ transact(): ProviderTransaction; /** Mint a provider-specific key */ mintKey(type: KeyType, params: KeyStoreParams): string; /** The provider-specific client object */ [key: string]: any; } /** * an array of outputs generic to all providers * e.g., [3, 2, '0'] */ export type TransactionResultList = (string | number)[]; // e.g., [3, 2, '0'] export type ProviderConfig = { class: any; options: StringAnyType; /* 'redis' (Class) | 'ioredis' (Class) | 'postgres' (Client module) | 'postgres.pool' | 'postgres.poolclient', 'nats' */ provider?: string; /** * If provided and if true, the engine router instance will * be initialized as a readonly instance and will not consume * messages from the stream channel. An engine in readonly mode * can still read/write to the store and can still pub/sub events. */ readonly?: boolean; }; export type ProvidersConfig = { sub: ProviderConfig; store: ProviderConfig; stream: ProviderConfig; pub?: ProviderConfig; search?: ProviderConfig; /** * If provided and if true, the engine router instance will * be initialized as a readonly instance and will not consume * messages from the stream channel. An engine in readonly mode * can still read/write to the store and can still pub/sub events. */ readonly?: boolean; }; export interface SetOptions { nx?: boolean; ex?: number; // Expiry time in seconds } export interface HSetOptions { nx?: boolean; ex?: number; // Expiry time in seconds } export interface ZAddOptions { nx?: boolean; } export interface HScanResult { cursor: string; items: Record<string, string>; } export interface KVSQLProviderTransaction extends ProviderTransaction { [key: string]: any; exec(): Promise<any[]>; set(key: string, value: string, options?: SetOptions): ProviderTransaction; get(key: string): ProviderTransaction; del(key: string): ProviderTransaction; expire(key: string, seconds: number): ProviderTransaction; hset( key: string, fields: Record<string, string>, options?: HSetOptions, ): ProviderTransaction; hget(key: string, field: string): ProviderTransaction; hdel(key: string, fields: string[]): ProviderTransaction; hmget(key: string, fields: string[]): ProviderTransaction; hgetall(key: string): ProviderTransaction; hincrbyfloat(key: string, field: string, value: number): ProviderTransaction; hscan(key: string, cursor: string, count?: number): ProviderTransaction; lrange(key: string, start: number, end: number): ProviderTransaction; rpush(key: string, value: string): ProviderTransaction; lpush(key: string, value: string): ProviderTransaction; lpop(key: string): ProviderTransaction; lmove( source: string, destination: string, srcPosition: 'LEFT' | 'RIGHT', destPosition: 'LEFT' | 'RIGHT', ): ProviderTransaction; zadd( key: string, score: number, member: string, options?: ZAddOptions, ): ProviderTransaction; zrange(key: string, start: number, stop: number): ProviderTransaction; zrangebyscore(key: string, min: number, max: number): ProviderTransaction; zrangebyscore_withscores( key: string, min: number, max: number, ): ProviderTransaction; zrem(key: string, member: string): ProviderTransaction; zrank(key: string, member: string): ProviderTransaction; scan(cursor: number, count?: number): ProviderTransaction; rename(oldKey: string, newKey: string): ProviderTransaction; // Add other methods as needed }