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