@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.
65 lines (64 loc) • 3.93 kB
JavaScript
import { __awaiter, __rest } from "tslib";
import loggerFactory from "./logger";
import genericRequestFactory from "./requests/generic-request";
import historicalDataFactory from "./requests/historical-data-request";
import referenceDataFactory from "./requests/reference-data-request";
import instrumentListFactory from "./requests/instrument-list-request";
import fieldListFactory from "./requests/field-request/field-list-request";
import fieldSearchFactory from "./requests/field-request/field-search-request";
import userEntitlementsFactory from "./requests/user-entitlements-request";
import intraDayBarFactory from "./requests/intraday-bar-request";
import intraDayTickFactory from "./requests/intraday-tick-request";
import snapshotFactory from "./requests/snapshot-request";
import mktDataSubscriptionFactory from "./requests/mkt-data-subscription";
import { SessionsManager } from "./sessions/sessions-manager";
import { MdfBridge } from "./bridge/mdf-bridge";
import { version } from "./version";
import { generateId } from "./utils";
import { Connection } from "./connection/connection";
import { ProtocolMethodsDefault } from "./constants";
const mergeProtocolMethods = (override, defaults) => {
const overrides = typeof override === "function" ? override(ProtocolMethodsDefault) : {};
return Object.assign(Object.assign({}, defaults), overrides);
};
export default function (interop, config) {
const apiId = generateId();
const logger = loggerFactory(apiId, config);
const _a = config !== null && config !== void 0 ? config : {}, { logger: _, overrideProtocolMethods } = _a, restConfig = __rest(_a, ["logger", "overrideProtocolMethods"]);
logger === null || logger === void 0 ? void 0 : logger.info(`Glue42 BBG Market Data (${apiId}) v.${version}. Config: ${JSON.stringify(restConfig)}`);
const protocolMethods = mergeProtocolMethods(overrideProtocolMethods, ProtocolMethodsDefault);
logger === null || logger === void 0 ? void 0 : logger.info(`Protocol methods: ${JSON.stringify(protocolMethods)}`);
const mdfBridge = new MdfBridge(interop, apiId, version, protocolMethods, logger);
const sessionManager = new SessionsManager(mdfBridge, apiId, config === null || config === void 0 ? void 0 : config.sessionSettings, logger);
const connection = new Connection(mdfBridge, config === null || config === void 0 ? void 0 : config.connectionPeriodMsecs);
const factories = {
createGenericRequest: genericRequestFactory(sessionManager),
createHistoricalDataRequest: historicalDataFactory(sessionManager),
createReferenceDataRequest: referenceDataFactory(sessionManager),
createInstrumentListRequest: instrumentListFactory(sessionManager),
createFieldListRequest: fieldListFactory(sessionManager),
createFieldSearchRequest: fieldSearchFactory(sessionManager),
createUserEntitlementsRequest: userEntitlementsFactory(sessionManager),
createIntraDayBarRequest: intraDayBarFactory(sessionManager),
createIntraDayTickRequest: intraDayTickFactory(sessionManager),
createSnapshotRequest: snapshotFactory(sessionManager),
createMarketDataRequest: mktDataSubscriptionFactory(sessionManager),
};
const sessionsApi = {
get all() {
return sessionManager.all;
},
close(session) {
return sessionManager.closeSession(session);
},
create(settings) {
return sessionManager.createSession(settings);
},
};
const ready = (() => __awaiter(this, void 0, void 0, function* () {
yield mdfBridge.ready();
}))();
return Object.assign(Object.assign({ version, info: {
apiId,
}, ready }, factories), { sessions: sessionsApi, onConnectionStatusChanged: connection.onConnectionStatusChanged.bind(connection) });
}