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.

91 lines (90 loc) 3.69 kB
import { RequestStatus } from "../request-status"; import { BloombergError } from "./types"; import { EventTypes } from "./event-types"; import { SubscriptionStatus } from "./types/subscription"; import CorrelationId from "./../correlationId"; export const isNew = (status) => status === RequestStatus.Created; export const isPending = (status) => status === RequestStatus.Opened || status === RequestStatus.Active; export const isDone = (status) => status === RequestStatus.Failed || status === RequestStatus.Completed || status === RequestStatus.Closed; export const isActive = (status) => status === RequestStatus.Active; export function isMessageOfType(eventMessage, type) { return type in eventMessage.message; } export function isEventOfType(eventMessage, type) { return eventMessage.eventType === type; } export function getMessageDetails(eventMessage, type) { return eventMessage.message[type]; } export function createResponseErrorHandler(messageType, getError, test) { return (eventMessage) => { if (!isMessageOfType(eventMessage, messageType)) { return { match: false, }; } const messageDetails = getMessageDetails(eventMessage, messageType); if (typeof test === "function" && !test(messageDetails)) { return { match: false }; } const errorDetails = getError(messageDetails); return { match: true, data: new BloombergError(EventTypes.Response, messageType, errorDetails), }; }; } export function createResponseDataHandler(messageType, getData, test) { return (eventMessage) => { if (!isMessageOfType(eventMessage, messageType)) { return { match: false, }; } const messageDetails = getMessageDetails(eventMessage, messageType); if (typeof test === "function" && !test(messageDetails)) { return { match: false }; } const data = getData(messageDetails); return { match: true, data: data, }; }; } export function createErrorMessageHandler(eventType, messageType) { return (eventMessage) => { if (isEventOfType(eventMessage, eventType) && isMessageOfType(eventMessage, messageType)) { const messageDetails = getMessageDetails(eventMessage, messageType); return { match: true, data: new BloombergError(eventType, messageType, messageDetails), }; } return { match: false, }; }; } export function setSubscriptionIds(subscription) { return Object.assign(Object.assign({}, subscription), { internalId: new CorrelationId().value, subscriptionId: subscription.subscriptionId instanceof CorrelationId ? subscription.subscriptionId : new CorrelationId(subscription.security) }); } export function setSubscriptionCreatedStatus(subscription) { return Object.assign(Object.assign({}, subscription), { status: SubscriptionStatus.SubscriptionCreated }); } export function toTerminalSubscription({ internalId, security, fields, options, }) { return { subscriptionId: internalId, security, fields: fields.join(","), options, }; } export function getFailureReason(id, error) { const errorMessage = error instanceof BloombergError ? `Received: event="${error.eventType}" / event message="${error.eventMessage}".` : error.message; return `Request with an id "${id}" failed. ${errorMessage}`; }