UNPKG

@aimee-blue/ab-service-kit

Version:
81 lines (68 loc) 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pipeStreamIntoSocket = exports.defaultSendToSocket = void 0; var _operators = require("rxjs/operators"); var _registerError = require("../registerError"); var _logging = require("../logging"); const SOCKET_CLOSED = 'Trying to send data while socket already closed'; const defaultSendToSocket = (socket, data) => { return new Promise((res, rej) => { if (socket.readyState === socket.OPEN) { socket.send(data instanceof Buffer ? data : JSON.stringify(data), err => { if (err) { rej(err); } else { res(); } }); } else { rej(new Error(SOCKET_CLOSED)); } }); }; exports.defaultSendToSocket = defaultSendToSocket; const defaultSendToSocketErrorHandler = (data, error, logger) => { if (error.message === SOCKET_CLOSED) { logger.warn('🚨 Socket was closed before we could send data back', data); } else { (0, _registerError.registerError)(error); logger.error('💥 Error when sending data', data, error); } }; const defaultCloseSocket = (socket, code) => { socket.close(code); }; const pipeStreamIntoSocket = (stream, socket, optsRaw) => { var _optsRaw$close, _optsRaw$send, _optsRaw$logger, _optsRaw$onSendError, _optsRaw$closeOnError, _optsRaw$closeOnCompl; const opts = { close: (_optsRaw$close = optsRaw === null || optsRaw === void 0 ? void 0 : optsRaw.close) !== null && _optsRaw$close !== void 0 ? _optsRaw$close : defaultCloseSocket, send: (_optsRaw$send = optsRaw === null || optsRaw === void 0 ? void 0 : optsRaw.send) !== null && _optsRaw$send !== void 0 ? _optsRaw$send : defaultSendToSocket, logger: (_optsRaw$logger = optsRaw === null || optsRaw === void 0 ? void 0 : optsRaw.logger) !== null && _optsRaw$logger !== void 0 ? _optsRaw$logger : _logging.defaultLogger, onSendError: (_optsRaw$onSendError = optsRaw === null || optsRaw === void 0 ? void 0 : optsRaw.onSendError) !== null && _optsRaw$onSendError !== void 0 ? _optsRaw$onSendError : defaultSendToSocketErrorHandler, closeOnError: (_optsRaw$closeOnError = optsRaw === null || optsRaw === void 0 ? void 0 : optsRaw.closeOnError) !== null && _optsRaw$closeOnError !== void 0 ? _optsRaw$closeOnError : true, closeOnComplete: (_optsRaw$closeOnCompl = optsRaw === null || optsRaw === void 0 ? void 0 : optsRaw.closeOnComplete) !== null && _optsRaw$closeOnCompl !== void 0 ? _optsRaw$closeOnCompl : true }; const subscription = stream.pipe((0, _operators.concatMap)(data => opts.send(socket, data).catch(err => { opts.onSendError(data, err, opts.logger); return Promise.reject(err); })), (0, _operators.ignoreElements)()).subscribe({ error: error => { if (!(error instanceof Error && error.message === SOCKET_CLOSED)) { opts.logger.error('💥 Outgoing stream error', error); } if (opts.closeOnError) { opts.close(socket, 1011); } }, complete: () => { if (opts.closeOnComplete) { opts.close(socket, 1000); } } }); return subscription; }; exports.pipeStreamIntoSocket = pipeStreamIntoSocket; //# sourceMappingURL=pipeStreamIntoSocket.js.map