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.

50 lines (49 loc) 2.02 kB
import { RequestType } from "../../core/request-types"; import { SubscriptionRequestImpl } from "../../core/subscription-request"; import { getRequestConfig } from "../../request-configs"; import { SubscriptionStatus } from "../../core/types/subscription"; import { getMessageDetails } from "../../core/helpers"; import { isMessageOfType } from "../../core/helpers"; import { MessageTypes } from "../../core/message-types"; import { validateSubscription } from "./helpers"; function processMarketDataEventsMessage(eventMessage) { const { correlationIds } = eventMessage; if (!Array.isArray(correlationIds) || correlationIds.length == 0) { return new Map(); } const data = getMessageDetails(eventMessage, MessageTypes.MarketDataEvents); const dataToSubscriptionIdMap = new Map(); correlationIds.forEach((id) => { dataToSubscriptionIdMap.set(id, data); }); return dataToSubscriptionIdMap; } function subscriptionDataHandler(eventMessage) { if (!isMessageOfType(eventMessage, MessageTypes.MarketDataEvents)) { return new Map(); } return processMarketDataEventsMessage(eventMessage); } function toSubscriptionInner({ fields, security, delayed, intervalInSeconds, subscriptionId, }) { let options; if (intervalInSeconds) { options = `interval=${intervalInSeconds}`; } if (delayed) { options = options ? `${options}&delayed` : "delayed"; } return { subscriptionId, fields, security, options, status: SubscriptionStatus.SubscriptionCreated, }; } export default (sessionManager) => (subscriptions) => { for (const subscription of subscriptions) { validateSubscription(subscription); } const subscriptionsInner = subscriptions.map(toSubscriptionInner); return new SubscriptionRequestImpl(sessionManager, getRequestConfig(RequestType.MarketSubscription), subscriptionsInner, subscriptionDataHandler).api; };