@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
TypeScript
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