UNPKG

@aimee-blue/ab-service-kit

Version:
86 lines (67 loc) 3.37 kB
"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