UNPKG

@barfinex/types

Version:

Core TypeScript type definitions and shared interfaces for the Barfinex ecosystem. Provides strongly-typed contracts for modules, services, and plugins.

219 lines 10.3 kB
import { Candle } from './candle.interface'; import { Detector } from './detector.interface'; import { Order } from './order.interface'; import { OrderBook } from './orderbook.interface'; import { Account } from './account.interface'; import { Trade } from './trade.interface'; import { InspectorRegulation } from './inspector-regulation.interface'; import { Instrument } from '.'; /** * Metadata and configuration of a plugin. * Эти данные используются в магазине и ЛК. */ export interface PluginMeta { studioGuid?: string; title: string; description?: string; version: string; author?: string; iconUrl?: string; coverUrl?: string; homepage?: string; repoUrl?: string; tags?: string[]; visibility: 'draft' | 'private' | 'public'; pluginApi?: string; capabilities?: PluginCapabilities; options?: Record<string, unknown>; createdAt?: string; updatedAt?: string; publishedAt?: string; } export interface PluginCapabilities { canReadMarketData?: boolean; canEmitSignals?: boolean; canExecuteOrders?: boolean; canAccessCapitalEngine?: boolean; canRegisterEndpoints?: boolean; } /** * Опции конкретного экземпляра плагина. * Конфигурируются через UI. */ export type PluginOptions = Record<string, unknown>; /** * Interface for the plugin driver, managing plugin lifecycle and hooks. * This serves as the main entry point for integrating various plugins. */ export interface PluginDriverInterface { register(plugins: PluginInterface[], key?: string): void; unregister(key: string, pluginId: string): Promise<void>; unregisterAll(key: string): Promise<UnregisterReport>; asyncReduce<T extends AsyncHooks>(hookName: T, ...arg: Parameters<AsyncHookArgumentsMap[T]>): Promise<void>; reduce<T extends SyncHooks>(hookName: T, ...arg: Parameters<SyncHookArgumentsMap[T]>): void; getSnapshot(): Record<string, Record<string, unknown>>; hydrateSnapshot(pluginsData: Record<string, Record<string, unknown>>): void; /** * Возвращает список зарегистрированных плагинов с их метаданными. */ listPlugins(): PluginMeta[]; /** * Обновляет конфигурацию конкретного плагина (из UI). */ updatePluginOptions(slug: string, options: PluginOptions): void; /** * Публикует плагин (меняет visibility). */ publishPlugin(slug: string): void; } /** * Type for defining a plugin with access to the plugin API. */ export type Plugin = (api: PluginDriverInterface) => void; /** * Enum representing various plugin hook events. */ export declare enum PluginHook { onTrade = "onTrade", onAfterTrade = "onAfterTrade", onAccountUpdate = "onAccountUpdate", onAfterAccountUpdate = "onAfterAccountUpdate", onCandleUpdate = "onCandleUpdate", onAfterCandleUpdate = "onAfterCandleUpdate", onCandleOpen = "onCandleOpen", onAfterCandleOpen = "onAfterCandleOpen", onCandleClose = "onCandleClose", onAfterCandleClose = "onAfterCandleClose", onInit = "onInit", onStart = "onStart", onDispose = "onDispose", onOrderBookUpdate = "onOrderBookUpdate", onAfterOrderBookUpdate = "onAfterOrderBookUpdate", onOrderOpen = "onOrderOpen", onAfterOrderOpen = "onAfterOrderOpen", onOrderClose = "onOrderClose", onAfterOrderClose = "onAfterOrderClose", onInspectorRegulation = "onInspectorRegulation", onAfterInspectorRegulation = "onAfterInspectorRegulation" } /** * Type defining synchronous hooks. */ export type SyncHooks = PluginHook.onInit; /** * Type defining asynchronous hooks. */ export type AsyncHooks = PluginHook.onInit | PluginHook.onTrade | PluginHook.onAfterTrade | PluginHook.onAccountUpdate | PluginHook.onAfterAccountUpdate | PluginHook.onStart | PluginHook.onDispose | PluginHook.onCandleUpdate | PluginHook.onAfterCandleUpdate | PluginHook.onCandleOpen | PluginHook.onAfterCandleOpen | PluginHook.onCandleClose | PluginHook.onAfterCandleClose | PluginHook.onOrderBookUpdate | PluginHook.onAfterOrderBookUpdate | PluginHook.onOrderOpen | PluginHook.onAfterOrderOpen | PluginHook.onOrderClose | PluginHook.onAfterOrderClose | PluginHook.onInspectorRegulation | PluginHook.onAfterInspectorRegulation; /** * Map of arguments for synchronous hooks. */ export type SyncHookArgumentsMap = { [PluginHook.onInit]: (arg: PluginContext) => void; }; /** * Map of arguments for asynchronous hooks. */ export type AsyncHookArgumentsMap = { [PluginHook.onInit]: (arg: PluginContext) => Promise<void>; [PluginHook.onTrade]: (arg: PluginContext, trade: Trade) => Promise<void>; [PluginHook.onAfterTrade]: (arg: PluginContext, trade: Trade) => Promise<void>; [PluginHook.onAccountUpdate]: (arg: PluginContext, account: Account) => Promise<void>; [PluginHook.onAfterAccountUpdate]: (arg: PluginContext, account: Account) => Promise<void>; [PluginHook.onStart]: (arg: PluginContext) => Promise<void>; [PluginHook.onDispose]: (arg: PluginContext) => Promise<void>; [PluginHook.onCandleUpdate]: (arg: PluginContext, candle: Candle) => Promise<void>; [PluginHook.onAfterCandleUpdate]: (arg: PluginContext, candle: Candle) => Promise<void>; [PluginHook.onCandleOpen]: (arg: PluginContext, candle: Candle) => Promise<void>; [PluginHook.onAfterCandleOpen]: (arg: PluginContext, candle: Candle) => Promise<void>; [PluginHook.onCandleClose]: (arg: PluginContext, candle: Candle) => Promise<void>; [PluginHook.onAfterCandleClose]: (arg: PluginContext, candle: Candle) => Promise<void>; [PluginHook.onOrderBookUpdate]: (arg: PluginContext, orderBook: OrderBook) => Promise<void>; [PluginHook.onAfterOrderBookUpdate]: (arg: PluginContext, orderBook: OrderBook) => Promise<void>; [PluginHook.onOrderOpen]: (arg: PluginContext, order: Order) => Promise<void>; [PluginHook.onAfterOrderOpen]: (arg: PluginContext, order: Order) => Promise<void>; [PluginHook.onOrderClose]: (arg: PluginContext, order: Order) => Promise<void>; [PluginHook.onAfterOrderClose]: (arg: PluginContext, order: Order) => Promise<void>; [PluginHook.onInspectorRegulation]: (arg: PluginContext, inspectorRegulation: InspectorRegulation) => Promise<void>; [PluginHook.onAfterInspectorRegulation]: (arg: PluginContext, inspectorRegulation: InspectorRegulation) => Promise<void>; }; /** * Interface representing a plugin with defined hooks, API, metadata and options. */ export interface PluginInterface { /** Уникальное имя (id) */ name: string; /** Публичный API, доступный другим плагинам */ api: unknown; /** Метаданные для магазина/ЛК */ meta: PluginMeta; /** Конфигурация экземпляра, редактируемая из UI */ options?: PluginOptions; [PluginHook.onInit]: SyncHookArgumentsMap[PluginHook.onInit]; [PluginHook.onStart]: AsyncHookArgumentsMap[PluginHook.onStart]; [PluginHook.onDispose]: AsyncHookArgumentsMap[PluginHook.onDispose]; [PluginHook.onCandleUpdate]: AsyncHookArgumentsMap[PluginHook.onCandleUpdate]; [PluginHook.onAfterCandleUpdate]: AsyncHookArgumentsMap[PluginHook.onAfterCandleUpdate]; [PluginHook.onCandleOpen]: AsyncHookArgumentsMap[PluginHook.onCandleOpen]; [PluginHook.onAfterCandleOpen]: AsyncHookArgumentsMap[PluginHook.onAfterCandleOpen]; [PluginHook.onCandleClose]: AsyncHookArgumentsMap[PluginHook.onCandleClose]; [PluginHook.onAfterCandleClose]: AsyncHookArgumentsMap[PluginHook.onAfterCandleClose]; [PluginHook.onAccountUpdate]: AsyncHookArgumentsMap[PluginHook.onAccountUpdate]; [PluginHook.onAfterAccountUpdate]: AsyncHookArgumentsMap[PluginHook.onAfterAccountUpdate]; [PluginHook.onOrderBookUpdate]: AsyncHookArgumentsMap[PluginHook.onOrderBookUpdate]; [PluginHook.onAfterOrderBookUpdate]: AsyncHookArgumentsMap[PluginHook.onAfterOrderBookUpdate]; [PluginHook.onTrade]: AsyncHookArgumentsMap[PluginHook.onTrade]; [PluginHook.onAfterTrade]: AsyncHookArgumentsMap[PluginHook.onAfterTrade]; [PluginHook.onOrderOpen]: AsyncHookArgumentsMap[PluginHook.onOrderOpen]; [PluginHook.onAfterOrderOpen]: AsyncHookArgumentsMap[PluginHook.onAfterOrderOpen]; [PluginHook.onOrderClose]: AsyncHookArgumentsMap[PluginHook.onOrderClose]; [PluginHook.onAfterOrderClose]: AsyncHookArgumentsMap[PluginHook.onAfterOrderClose]; /** * Optional lifecycle hooks for plugin-driver keyed attachment. */ onAttach?(ctx: PluginContext): void | Promise<void>; onDetach?(ctx: PluginContext): void | Promise<void>; } /** * Context object available to plugins during execution. */ export interface PluginContext { key: string; logger: { log: (...args: unknown[]) => void; error: (...args: unknown[]) => void; warn: (...args: unknown[]) => void; debug: (...args: unknown[]) => void; verbose?: (...args: unknown[]) => void; }; config: any; trackInterval<T>(factory: () => T): T; trackTimeout<T>(factory: () => T): T; trackSubscription<T>(subscription: T): T; trackListener<T extends { on?: (...args: unknown[]) => unknown; off?: (...args: unknown[]) => unknown; addListener?: (...args: unknown[]) => unknown; removeListener?: (...args: unknown[]) => unknown; }>(emitter: T, event: string | symbol, handler: (...args: unknown[]) => void): T; findPlugin<T extends PluginInterface>(name: string): T; detectorContext: { name: string; options: Detector; account: Account; candles: any; orders: Array<Order>; }; emitSignal?: (signal: unknown) => void; executeOrder?: (order: unknown) => Promise<unknown>; accessCapitalEngine?: () => unknown; registerEndpoint?: (definition: unknown) => boolean; tradingOperation: { closeAll(instrument: Instrument): Promise<Order[]>; }; } export interface UnregisterReport { detached: string[]; failed: string[]; durationMs: number; } //# sourceMappingURL=plugin.interface.d.ts.map