@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
JavaScript
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;
};