@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
86 lines (67 loc) • 3.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.spinUpSocketEpic = void 0;
var _rxjs = require("rxjs");
var _operators = require("rxjs/operators");
var _publishStream = require("../publishStream");
var _types = require("./types");
var _isTruthy = require("../isTruthy");
var _prepareWaitForCompletionFn = require("./prepareWaitForCompletionFn");
var _dataStreamFromSocket = require("./dataStreamFromSocket");
var _pipeStreamIntoSocket = require("./pipeStreamIntoSocket");
var _actionStreamFromSocket = require("./actionStreamFromSocket");
var _binaryStreamFromSocket = require("./binaryStreamFromSocket");
var _logSocketStats = require("./logSocketStats");
var _logWarningIfOutgoingStreamNotComplete = require("./logWarningIfOutgoingStreamNotComplete");
var _createSocketEpicContext = require("./createSocketEpicContext");
var _logConnected = require("./logConnected");
var _logging = require("../logging");
const spinUpSocketEpic = (socket, request, epic, closeSocket, parentLogger) => {
var _epic$completedSocket, _epic$completedSocket2;
const requestIdTag = {
rid: request.id.substr(0, 8)
};
const logger = (0, _logging.createTaggedLogger)([requestIdTag], parentLogger);
const allData = (0, _publishStream.publishStream)((0, _dataStreamFromSocket.dataStreamFromSocket)(socket, logger));
const commands = (0, _publishStream.publishStream)((0, _actionStreamFromSocket.actionStreamFromSocket)(allData, epic.actionSchemaByType, logger));
const binary = (0, _binaryStreamFromSocket.binaryStreamFromSocket)(allData);
const ctx = (0, _createSocketEpicContext.createSocketEpicContext)({
request,
commands,
binary,
logger,
buildDeps: epic.buildDeps
});
(0, _logConnected.logConnected)(logger, socket, request, epic);
const outgoing = (0, _publishStream.publishStream)(epic(commands, ctx));
const subscription = new _rxjs.Subscription();
const warningTimeout = (_epic$completedSocket = epic.completedSocketWarningTimeout) !== null && _epic$completedSocket !== void 0 ? _epic$completedSocket : _types.SOCKET_COMPLETE_WARNING_TIMEOUT;
const completeWaitTimeout = (_epic$completedSocket2 = epic.completedSocketWaitTimeout) !== null && _epic$completedSocket2 !== void 0 ? _epic$completedSocket2 : _types.SOCKET_CLOSE_WAIT_TIMEOUT;
const logging = [(0, _logWarningIfOutgoingStreamNotComplete.logWarningIfOutgoingStreamNotComplete)(logger, allData, outgoing, warningTimeout, socket.id, epic.name), epic.debugStats && (0, _logSocketStats.logSocketStats)(logger, allData)].filter(_isTruthy.isTruthy);
const allEpicJobs = (0, _rxjs.merge)(outgoing.pipe((0, _operators.ignoreElements)()), ...logging);
const {
connect,
waitForCompletion
} = (0, _prepareWaitForCompletionFn.prepareWaitForCompletionFn)(allEpicJobs, completeWaitTimeout);
subscription.add((0, _pipeStreamIntoSocket.pipeStreamIntoSocket)(outgoing, socket, {
close: (sock, code) => {
closeSocket(sock.id, code);
},
logger,
...(epic.send && {
send: epic.send
})
}));
subscription.add(connect());
subscription.add(commands.connect());
subscription.add(outgoing.connect());
subscription.add(allData.connect());
return {
subscription,
waitForCompletion
};
};
exports.spinUpSocketEpic = spinUpSocketEpic;
//# sourceMappingURL=spinUpSocketEpic.js.map