UNPKG

socket-ipc

Version:

Message-based communications over UNIX sockets

81 lines (64 loc) 7.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _events = require("events"); var _verror = require("verror"); var _MessageCodec = _interopRequireDefault(require("./MessageCodec")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class MessageConnection extends _events.EventEmitter { constructor(socket, options) { super(); _defineProperty(this, "socket", void 0); _defineProperty(this, "messageCodec", void 0); _defineProperty(this, "onSocketData", data => { try { this.messageCodec.decode(data, message => { const event = { data: message }; this.emit('message', event); }); } catch (err) { this.onError(new _verror.VError(err, 'error while decoding message from socket')); } }); _defineProperty(this, "close", () => { if (this.socket) { this.socket.destroy(); this.socket = undefined; this.emit('close'); } }); this.socket = socket; this.messageCodec = new _MessageCodec.default({ binary: options.binary }); socket.on('data', this.onSocketData); socket.on('close', this.close); socket.on('error', err => this.onError(new _verror.VError(err, 'MessageConnection got error from socket'))); } send(message) { const { socket } = this; if (!socket) throw Error('unexpected missing socketWrite'); socket.write(this.messageCodec.encode(message), err => { if (err) this.onError(new _verror.VError(err, 'socket error during send')); }); } /** * Included for compatibility with the WebSocket API */ destroy() { this.close(); } onError(err) { this.emit('error', err); this.close(); } } exports.default = MessageConnection; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9NZXNzYWdlQ29ubmVjdGlvbi50cyJdLCJuYW1lcyI6WyJNZXNzYWdlQ29ubmVjdGlvbiIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwic29ja2V0Iiwib3B0aW9ucyIsImRhdGEiLCJtZXNzYWdlQ29kZWMiLCJkZWNvZGUiLCJtZXNzYWdlIiwiZXZlbnQiLCJlbWl0IiwiZXJyIiwib25FcnJvciIsIlZFcnJvciIsImRlc3Ryb3kiLCJ1bmRlZmluZWQiLCJNZXNzYWdlQ29kZWMiLCJiaW5hcnkiLCJvbiIsIm9uU29ja2V0RGF0YSIsImNsb3NlIiwic2VuZCIsIkVycm9yIiwid3JpdGUiLCJlbmNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFFQTs7Ozs7O0FBa0JlLE1BQU1BLGlCQUFOLFNBQWlDQyxvQkFBakMsQ0FFWjtBQUlEQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBcUJDLE9BQXJCLEVBQXdEO0FBQ2pFOztBQURpRTs7QUFBQTs7QUFBQSwwQ0F1QjNDQyxJQUFELElBQXdCO0FBQzdDLFVBQUk7QUFDRixhQUFLQyxZQUFMLENBQWtCQyxNQUFsQixDQUF5QkYsSUFBekIsRUFBZ0NHLE9BQUQsSUFBOEI7QUFDM0QsZ0JBQU1DLEtBQW1CLEdBQUc7QUFBRUosWUFBQUEsSUFBSSxFQUFFRztBQUFSLFdBQTVCO0FBQ0EsZUFBS0UsSUFBTCxDQUFVLFNBQVYsRUFBcUJELEtBQXJCO0FBQ0QsU0FIRDtBQUlELE9BTEQsQ0FLRSxPQUFPRSxHQUFQLEVBQVk7QUFDWixhQUFLQyxPQUFMLENBQWEsSUFBSUMsY0FBSixDQUFXRixHQUFYLEVBQWdCLDBDQUFoQixDQUFiO0FBQ0Q7QUFDRixLQWhDa0U7O0FBQUEsbUNBeUMzRCxNQUFZO0FBQ2xCLFVBQUksS0FBS1IsTUFBVCxFQUFpQjtBQUNmLGFBQUtBLE1BQUwsQ0FBWVcsT0FBWjtBQUNBLGFBQUtYLE1BQUwsR0FBY1ksU0FBZDtBQUNBLGFBQUtMLElBQUwsQ0FBVSxPQUFWO0FBQ0Q7QUFDRixLQS9Da0U7O0FBRWpFLFNBQUtQLE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtHLFlBQUwsR0FBb0IsSUFBSVUscUJBQUosQ0FBaUI7QUFBRUMsTUFBQUEsTUFBTSxFQUFFYixPQUFPLENBQUNhO0FBQWxCLEtBQWpCLENBQXBCO0FBRUFkLElBQUFBLE1BQU0sQ0FBQ2UsRUFBUCxDQUFVLE1BQVYsRUFBa0IsS0FBS0MsWUFBdkI7QUFDQWhCLElBQUFBLE1BQU0sQ0FBQ2UsRUFBUCxDQUFVLE9BQVYsRUFBbUIsS0FBS0UsS0FBeEI7QUFDQWpCLElBQUFBLE1BQU0sQ0FBQ2UsRUFBUCxDQUFVLE9BQVYsRUFBb0JQLEdBQUQsSUFDakIsS0FBS0MsT0FBTCxDQUFhLElBQUlDLGNBQUosQ0FBV0YsR0FBWCxFQUFnQix5Q0FBaEIsQ0FBYixDQURGO0FBR0Q7O0FBRURVLEVBQUFBLElBQUksQ0FBQ2IsT0FBRCxFQUFpQztBQUNuQyxVQUFNO0FBQUVMLE1BQUFBO0FBQUYsUUFBYSxJQUFuQjtBQUNBLFFBQUksQ0FBQ0EsTUFBTCxFQUFhLE1BQU1tQixLQUFLLENBQUMsZ0NBQUQsQ0FBWDtBQUNibkIsSUFBQUEsTUFBTSxDQUFDb0IsS0FBUCxDQUNFLEtBQUtqQixZQUFMLENBQWtCa0IsTUFBbEIsQ0FBeUJoQixPQUF6QixDQURGLEVBRUdHLEdBQUQsSUFBNEI7QUFDMUIsVUFBSUEsR0FBSixFQUFTLEtBQUtDLE9BQUwsQ0FBYSxJQUFJQyxjQUFKLENBQVdGLEdBQVgsRUFBZ0IsMEJBQWhCLENBQWI7QUFDVixLQUpIO0FBTUQ7O0FBYUQ7OztBQUdBRyxFQUFBQSxPQUFPLEdBQVM7QUFDZCxTQUFLTSxLQUFMO0FBQ0Q7O0FBVU9SLEVBQUFBLE9BQVIsQ0FBZ0JELEdBQWhCLEVBQWtDO0FBQ2hDLFNBQUtELElBQUwsQ0FBVSxPQUFWLEVBQW1CQyxHQUFuQjtBQUNBLFNBQUtTLEtBQUw7QUFDRDs7QUF4REEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgbmV0IGZyb20gJ25ldCdcblxuaW1wb3J0IFN0cmljdEV2ZW50RW1pdHRlciBmcm9tICdzdHJpY3QtZXZlbnQtZW1pdHRlci10eXBlcydcbmltcG9ydCB7IFZFcnJvciB9IGZyb20gJ3ZlcnJvcidcblxuaW1wb3J0IE1lc3NhZ2VDb2RlYyBmcm9tICcuL01lc3NhZ2VDb2RlYydcbmltcG9ydCB7IE1lc3NhZ2VFdmVudCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uT3B0aW9ucyA9IHtcbiAgYmluYXJ5PzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VDb25uZWN0aW9uRW1pdHRlZEV2ZW50cyB7XG4gIG1lc3NhZ2U6IE1lc3NhZ2VFdmVudFxuICBlcnJvcjogRXJyb3JcbiAgY2xvc2U6IHZvaWRcbn1cblxudHlwZSBNZXNzYWdlQ29ubmVjdGlvbkVtaXR0ZXIgPSBTdHJpY3RFdmVudEVtaXR0ZXI8XG4gIEV2ZW50RW1pdHRlcixcbiAgTWVzc2FnZUNvbm5lY3Rpb25FbWl0dGVkRXZlbnRzXG4+XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VDb25uZWN0aW9uIGV4dGVuZHMgKEV2ZW50RW1pdHRlciBhcyB7XG4gIG5ldyAoKTogTWVzc2FnZUNvbm5lY3Rpb25FbWl0dGVyXG59KSB7XG4gIHByaXZhdGUgc29ja2V0OiBuZXQuU29ja2V0IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUNvZGVjOiBNZXNzYWdlQ29kZWNcblxuICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IG5ldC5Tb2NrZXQsIG9wdGlvbnM6IE1lc3NhZ2VDb25uZWN0aW9uT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMubWVzc2FnZUNvZGVjID0gbmV3IE1lc3NhZ2VDb2RlYyh7IGJpbmFyeTogb3B0aW9ucy5iaW5hcnkgfSlcblxuICAgIHNvY2tldC5vbignZGF0YScsIHRoaXMub25Tb2NrZXREYXRhKVxuICAgIHNvY2tldC5vbignY2xvc2UnLCB0aGlzLmNsb3NlKVxuICAgIHNvY2tldC5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT5cbiAgICAgIHRoaXMub25FcnJvcihuZXcgVkVycm9yKGVyciwgJ01lc3NhZ2VDb25uZWN0aW9uIGdvdCBlcnJvciBmcm9tIHNvY2tldCcpKVxuICAgIClcbiAgfVxuXG4gIHNlbmQobWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBzb2NrZXQgfSA9IHRoaXNcbiAgICBpZiAoIXNvY2tldCkgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgbWlzc2luZyBzb2NrZXRXcml0ZScpXG4gICAgc29ja2V0LndyaXRlKFxuICAgICAgdGhpcy5tZXNzYWdlQ29kZWMuZW5jb2RlKG1lc3NhZ2UpLFxuICAgICAgKGVycjogRXJyb3IgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKGVycikgdGhpcy5vbkVycm9yKG5ldyBWRXJyb3IoZXJyLCAnc29ja2V0IGVycm9yIGR1cmluZyBzZW5kJykpXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBvblNvY2tldERhdGEgPSAoZGF0YTogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWVzc2FnZUNvZGVjLmRlY29kZShkYXRhLCAobWVzc2FnZTogQnVmZmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50OiBNZXNzYWdlRXZlbnQgPSB7IGRhdGE6IG1lc3NhZ2UgfVxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBldmVudClcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLm9uRXJyb3IobmV3IFZFcnJvcihlcnIsICdlcnJvciB3aGlsZSBkZWNvZGluZyBtZXNzYWdlIGZyb20gc29ja2V0JykpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFdlYlNvY2tldCBBUElcbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSgpXG4gIH1cblxuICBjbG9zZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LmRlc3Ryb3koKVxuICAgICAgdGhpcy5zb2NrZXQgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25FcnJvcihlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICB0aGlzLmNsb3NlKClcbiAgfVxufVxuIl19