UNPKG

@glue42/bbg-market-data

Version:

A high-level API that wraps existing Glue42 Bloomberg Bridge Market Data interop methods. The API is based on the jBloomberg open source wrapper.

226 lines (225 loc) 10.1 kB
import { Glue42Core } from "@glue42/core"; import { HistoricalDataRequestArguments } from "./requests/historical-data-request/request-args"; import { HistoricalDataRequest } from "./requests/historical-data-request"; import { ReferenceDataRequestArguments, ReferenceDataRequest } from "./requests/reference-data-request"; import { InstrumentListRequest, InstrumentListRequestArguments } from "./requests/instrument-list-request"; import { FieldListRequest, FieldListRequestArguments, FieldSearchRequestArguments, FieldSearchRequest } from "./requests/field-request"; import { UserEntitlementsRequest, UserEntitlementsRequestArguments } from "./requests/user-entitlements-request"; import { IntraDayBarRequestArguments, IntraDayBarRequest } from "./requests/intraday-bar-request"; import { SnapshotRequestArguments, SnapshotRequest } from "./requests/snapshot-request"; import { Subscription } from "./core/types/subscription-request"; import { UnsubscribeFunction } from "callback-registry"; import { ConnectionStatus } from "./connection/connection-status"; import { Logger } from "./logger/types"; import { BloombergSession, SessionSettings } from "./sessions/types"; import { MarketDataSubscriptionRequest } from "./requests/mkt-data-subscription"; import { IntraDayTickRequest, IntraDayTickRequestArguments } from "./requests/intraday-tick-request"; import { GenericRequest, GenericRequestArgs } from "./requests/generic-request"; export interface ProtocolMethods { CreateSubscriptionRequest: Glue42Core.Interop.MethodDefinition; CreateRequest: Glue42Core.Interop.MethodDefinition; CancelRequests: Glue42Core.Interop.MethodDefinition; CloseSession: Glue42Core.Interop.MethodDefinition; SubscribeStatus: Glue42Core.Interop.MethodDefinition; } /** * Configuration object for the BBG Market Data library. */ export interface BBGMarketDataConfig { /** * Whether to enable debugging mode (logging). * @default false */ debug?: boolean; /** * A custom logger that implements the `Logger` interface. * If not provided, a default library console logger is used. */ logger?: Logger; /** * Controls the log level of the default console logger. * Default "info". */ logLevel?: "trace" | "debug" | "log" | "info" | "warn" | "error"; /** * Reconnection period in milliseconds. * @default 5000 ms. * Min value 5000 ms. */ connectionPeriodMsecs?: number; /** * To use non-default session options and session identity options. */ sessionSettings?: SessionSettings; /** * Use to override some or all of the default protocol methods. * @param defaultMethods The default protocol methods. * @returns Overrides. */ overrideProtocolMethods?: (defaultMethods: ProtocolMethods) => Partial<ProtocolMethods>; } /** * A factory function the creates a new BBGMarketDataAPI instance. */ export interface BBGMarketDataFactory { (interop: Glue42Core.Interop.API, config: BBGMarketDataConfig): BBGMarketDataAPI; } /** * API for handling sessions. */ export interface SessionsAPI { /** * Returns all currently open user-defined sessions. */ all: string[]; /** * Allows you to and close an existing user defined session by its name. * @param session The name of the session. */ close: (session: string) => Promise<void>; /** * Creates a config for a new session which lifetime is bound to the Interop instance's lifetime. * @param session The name of the session. */ create: (settings?: SessionSettings) => Promise<BloombergSession>; } /** * **BBG Market Data** is a high level API which provides access to the Market Data Feed service of Bloomberg. * The API enables building request/response and subscription requests. * It provides a flattened request arguments structure. Instead of passing string arguments, as with the standard Bloomberg API, * the possible options are wrapped in primitive values and enumerations. * Any method will throw an error when an attempt to create a request with invalid request arguments is made. * * Below is a typescript example for making a `HistoricalData` request: * * @example * ```typescript * import BBGMarketData from "bbg-market-data"; * import GlueCoreFactory from "@glue42/core" * * GlueCoreFactory() * .then((glue) => { * const bbgMarketData = BBGMarketData(glue.interop, { debug: false }); * * const requestArguments = { * securities: ["IBM US Equity"], * fields: ["PX_LAST", "OPEN"], * startDate: "20060101", * endDate: "20061231", * periodicityAdjustment: PeriodicityAdjustment.ACTUAL, * periodicitySelection: PeriodicitySelection.MONTHLY, * maxDataPoints: 100, * returnEids: true, * nonTradingDayFillOption: FillOptions.NON_TRADING_WEEKDAYS, * nonTradingDayFillMethod: FillMethod.PREVIOUS_VALUE * }; * * // The request is created and can be sent to the Bloomberg service. * const request = bbgMarketData.createHistoricalDataRequest(requestArguments); * * * request.onStatus((status: RequestStatus) => { * // Track the current request status. * }); * * request.onEvent((event: BloombergEvent) => { * // Handle events from Bloomberg that are related to this request. * }); * * request.onError((error) => { * // Handle errors. The request is considered failed and no more events will be received. * }); * * request.onData((data) => { * // Handle response data. * }); * * // Send the actual request to the Bloomberg service. * // The API will create a new session which will close immediately after the request completes, fails or is closed. * request * .open({ session: Session.CreateNew }) .then((response: HistoricalData[] | undefined) => { // Handle aggregated response. }); * }); * ``` */ export interface BBGMarketDataAPI { /** * Library version. */ version: string; info: { /** * A unique library instance id. */ apiId: string; }; ready: Promise<void>; /** * Creates a new instance of a `GenericRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. * @param service - A Bloomberg service. * @param operation - A service operation. */ createGenericRequest(requestArguments: GenericRequestArgs, service: string, operation: string): GenericRequest; /** * Creates a new instance of a `HistoricalDataRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createHistoricalDataRequest(requestArguments: HistoricalDataRequestArguments): HistoricalDataRequest; /** * Creates a new instance of an `IntraDayBarRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createIntraDayBarRequest(requestArguments: IntraDayBarRequestArguments): IntraDayBarRequest; /** * Creates a new instance of an `IntraDayTickRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createIntraDayTickRequest(requestArguments: IntraDayTickRequestArguments): IntraDayTickRequest; /** * Creates a new instance of a `ReferenceDataRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createReferenceDataRequest(requestArguments: ReferenceDataRequestArguments): ReferenceDataRequest; /** * Creates a new instance of an `InstrumentListRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createInstrumentListRequest(requestArguments: InstrumentListRequestArguments): InstrumentListRequest; /** * Creates a new instance of a `SnapshotRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createSnapshotRequest(requestArguments: SnapshotRequestArguments): SnapshotRequest; /** * Creates a new instance of a `FieldListRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createFieldListRequest(requestArguments: FieldListRequestArguments): FieldListRequest; /** * Creates a new instance of a `FieldSearchRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createFieldSearchRequest(requestArguments: FieldSearchRequestArguments): FieldSearchRequest; /** * Creates a new instance of a `UserEntitlementsRequest`. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createUserEntitlementsRequest(requestArguments: UserEntitlementsRequestArguments): UserEntitlementsRequest; /** * Creates a new instance of a `SubscriptionRequest`. Streaming data is retrieved through the `//blp/mktdata` service. * @param requestArguments - Arguments for the request to the Bloomberg service. */ createMarketDataRequest(requestArguments: Array<Subscription>): MarketDataSubscriptionRequest; /** * The Sessions API allows you to retrieve a list of all opened user-defined sessions. The API exposes the Glue42 protocol to close a session. */ sessions: SessionsAPI; /** * Attaches a callback for handling changes of the MDF Api `ConnectionStatus`. * @param callback - Handler function for connection status changes. */ onConnectionStatusChanged(callback: (status: ConnectionStatus) => void): UnsubscribeFunction; }