@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.
95 lines (94 loc) • 3.89 kB
JavaScript
import { __assign } from "tslib";
import { RequestStatus } from "../request-status";
import { BloombergError } from "./types";
import { EventTypes } from "./event-types";
import { SubscriptionStatus } from "./types/subscription";
import CorrelationId from "./../correlationId";
export var isNew = function (status) { return status === RequestStatus.Created; };
export var isPending = function (status) { return status === RequestStatus.Opened || status === RequestStatus.Active; };
export var isDone = function (status) {
return status === RequestStatus.Failed || status === RequestStatus.Completed || status === RequestStatus.Closed;
};
export var isActive = function (status) { return 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 function (eventMessage) {
if (!isMessageOfType(eventMessage, messageType)) {
return {
match: false,
};
}
var messageDetails = getMessageDetails(eventMessage, messageType);
if (typeof test === "function" && !test(messageDetails)) {
return { match: false };
}
var errorDetails = getError(messageDetails);
return {
match: true,
data: new BloombergError(EventTypes.Response, messageType, errorDetails),
};
};
}
export function createResponseDataHandler(messageType, getData, test) {
return function (eventMessage) {
if (!isMessageOfType(eventMessage, messageType)) {
return {
match: false,
};
}
var messageDetails = getMessageDetails(eventMessage, messageType);
if (typeof test === "function" && !test(messageDetails)) {
return { match: false };
}
var data = getData(messageDetails);
return {
match: true,
data: data,
};
};
}
export function createErrorMessageHandler(eventType, messageType) {
return function (eventMessage) {
if (isEventOfType(eventMessage, eventType) && isMessageOfType(eventMessage, messageType)) {
var messageDetails = getMessageDetails(eventMessage, messageType);
return {
match: true,
data: new BloombergError(eventType, messageType, messageDetails),
};
}
return {
match: false,
};
};
}
export function setSubscriptionIds(subscription) {
return __assign(__assign({}, subscription), { internalId: new CorrelationId().value, subscriptionId: subscription.subscriptionId instanceof CorrelationId
? subscription.subscriptionId
: new CorrelationId(subscription.security) });
}
export function setSubscriptionCreatedStatus(subscription) {
return __assign(__assign({}, subscription), { status: SubscriptionStatus.SubscriptionCreated });
}
export function toTerminalSubscription(_a) {
var internalId = _a.internalId, security = _a.security, fields = _a.fields, options = _a.options;
return {
subscriptionId: internalId,
security: security,
fields: fields.join(","),
options: options,
};
}
export function getFailureReason(id, error) {
var errorMessage = error instanceof BloombergError
? "Received: event=\"" + error.eventType + "\" / event message=\"" + error.eventMessage + "\"."
: error.message;
return "Request with an id \"" + id + "\" failed. " + errorMessage;
}