@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.
96 lines (95 loc) • 4.6 kB
JavaScript
import { __assign, __awaiter, __extends, __generator, __rest } from "tslib";
import { BaseRequest } from "../../core/base-request";
import { isEventOfType } from "../../core/helpers";
import { EventTypes } from "../../core/event-types";
import { requestFailureHandler, serviceOpenedFailureHandler, sessionTerminatedHandler, sessionStartUpFailureHandler } from "../../core/message-handlers";
var GenericRequestImpl = (function (_super) {
__extends(GenericRequestImpl, _super);
function GenericRequestImpl(sessionManager, config, operationArgs) {
var _this = _super.call(this, sessionManager, config, operationArgs) || this;
_this.sessionManager = sessionManager;
_this.config = config;
_this.operationArgs = operationArgs;
return _this;
}
Object.defineProperty(GenericRequestImpl.prototype, "api", {
get: function () {
var that = this;
return {
get id() {
return that.requestId;
},
get settings() {
return {
operation: that.config.operation,
service: that.config.service,
operationArgs: that.operationArgs,
};
},
get status() {
return that._status;
},
open: that.open.bind(that),
close: that.closeRequest.bind(that),
onRequestStatusChanged: that.onRequestStatusChanged.bind(that),
};
},
enumerable: false,
configurable: true
});
GenericRequestImpl.prototype.open = function (options) {
return __awaiter(this, void 0, void 0, function () {
var _a, messageProcessor, otherOptions;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = options !== null && options !== void 0 ? options : {}, messageProcessor = _a.messageProcessor, otherOptions = __rest(_a, ["messageProcessor"]);
if (typeof messageProcessor !== "function") {
throw new Error("messageProcessor must be a function");
}
this.userMessageProcessor = messageProcessor;
return [4, _super.prototype.openRequest.call(this, __assign(__assign({}, otherOptions), { messageProcessor: this.messageProcessor.bind(this) }))];
case 1:
_b.sent();
return [2];
}
});
});
};
GenericRequestImpl.prototype.messageProcessor = function (eventMessage) {
return __awaiter(this, void 0, void 0, function () {
var error, processorResult, error_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
error = [
sessionStartUpFailureHandler(eventMessage),
sessionTerminatedHandler(eventMessage),
serviceOpenedFailureHandler(eventMessage),
requestFailureHandler(eventMessage),
].find(function (_a) {
var match = _a.match;
return match;
});
return [4, this.userMessageProcessor(eventMessage.eventType, eventMessage.message)];
case 1:
processorResult = _a.sent();
if (error) {
return [2, { action: "fail", error: error.data }];
}
if (isEventOfType(eventMessage, EventTypes.Response)) {
return [2, { action: 'complete' }];
}
return [2, processorResult.continue ? { action: 'continue' } : { action: 'close' }];
case 2:
error_1 = _a.sent();
return [2, { action: 'fail', error: error_1 instanceof Error ? error_1 : new Error(String(error_1)) }];
case 3: return [2];
}
});
});
};
return GenericRequestImpl;
}(BaseRequest));
export { GenericRequestImpl };