UNPKG

@tableau/taco-toolkit

Version:
79 lines 6.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserWatcher = void 0; var ws_1 = require("ws"); var error_codes_1 = require("../../../shared/errors/error-codes"); var error_source_1 = require("../../../shared/errors/error-source"); var status_code_1 = require("../../../shared/errors/status-code"); var eps_logger_1 = require("../../logging/eps-logger"); var app_global_1 = __importDefault(require("../core/app-global")); /** * Websocket server for handling browser activity * * Watches the browser tab to notify if tab is closed or user leaves page app. * 1) Launch server to listen for incoming websocket connections * 2) For each connection, * 3) ... listen for introduction message that has connectionId, capture it * 4) ... attach close handler passing connectionId. */ var BrowserWatcher = /** @class */ (function () { function BrowserWatcher() { } BrowserWatcher.prototype.start = function (port) { return new Promise(function (resolve, reject) { var server = new ws_1.WebSocketServer({ port: port }, function () { eps_logger_1.Logger.info("BrowserWatcher is listening on port ".concat(port, "...")); resolve(); }); server.on('error', function (error) { error.message = "Failed to start BrowserWatcher on port ".concat(port, ". ").concat(error.message); reject(error); }); server.on('connection', function (socket) { var connectionId; socket.on('message', function (rawMsg) { var msg = rawMsg.toString(); var connectionMessage; try { connectionMessage = JSON.parse(msg); } catch (err) { eps_logger_1.Logger.logEPSError(status_code_1.StatusCode.InvalidArgument, error_source_1.ErrorSources.System, error_codes_1.ErrorCodes.RXCCMIVQ, "BrowserWatcher could not parse message '".concat(msg, "'.")); return; } if (!isConnectionMessage(connectionMessage)) { eps_logger_1.Logger.logEPSError(status_code_1.StatusCode.InvalidArgument, error_source_1.ErrorSources.System, error_codes_1.ErrorCodes.UYJY51CE, "BrowserWatcher could not find connectionId: string in '".concat(msg, "'.")); return; } connectionId = connectionMessage.connectionId; }); socket.on('close', function (reasonCode) { console.log("Browser client's socket has disconnected connection ".concat(connectionId), reasonCode); if (connectionId === undefined) { return; } // Force close Chromium when the window closes. Need this on Mac. if (app_global_1.default.connectionManager.isSubmitted(connectionId)) { app_global_1.default.connectionManager.freeBrowser(connectionId); } else { app_global_1.default.connectionManager.free(connectionId); } }); }); }); }; return BrowserWatcher; }()); exports.BrowserWatcher = BrowserWatcher; function isConnectionMessage(value) { if (value === null || typeof value !== 'object') { return false; } var obj = value; return typeof obj.connectionId === 'string'; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci13YXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Vwcy9tYWluL3NlcnZpY2VzL2Jyb3dzZXItd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSx5QkFBb0M7QUFFcEMsa0VBQStEO0FBQy9ELG9FQUFrRTtBQUNsRSxrRUFBK0Q7QUFDL0QsdURBQWlEO0FBQ2pELGtFQUEwQztBQUUxQzs7Ozs7Ozs7R0FRRztBQUNIO0lBQUE7SUE2REEsQ0FBQztJQTVEQyw4QkFBSyxHQUFMLFVBQU0sSUFBWTtRQUNoQixPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDakMsSUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBZSxDQUFDLEVBQUUsSUFBSSxNQUFBLEVBQUUsRUFBRTtnQkFDM0MsbUJBQU0sQ0FBQyxJQUFJLENBQUMsOENBQXVDLElBQUksUUFBSyxDQUFDLENBQUE7Z0JBQzdELE9BQU8sRUFBRSxDQUFBO1lBQ1gsQ0FBQyxDQUFDLENBQUE7WUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFDLEtBQVk7Z0JBQzlCLEtBQUssQ0FBQyxPQUFPLEdBQUcsaURBQTBDLElBQUksZUFBSyxLQUFLLENBQUMsT0FBTyxDQUFFLENBQUE7Z0JBQ2xGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNmLENBQUMsQ0FBQyxDQUFBO1lBRUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBQyxNQUFjO2dCQUNyQyxJQUFJLFlBQWdDLENBQUE7Z0JBRXBDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQUMsTUFBYztvQkFDbEMsSUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO29CQUU3QixJQUFJLGlCQUFpQixDQUFBO29CQUNyQixJQUFJO3dCQUNGLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7cUJBQ3BDO29CQUFDLE9BQU8sR0FBRyxFQUFFO3dCQUNaLG1CQUFNLENBQUMsV0FBVyxDQUNoQix3QkFBVSxDQUFDLGVBQWUsRUFDMUIsMkJBQVksQ0FBQyxNQUFNLEVBQ25CLHdCQUFVLENBQUMsUUFBUSxFQUNuQixrREFBMkMsR0FBRyxPQUFJLENBQ25ELENBQUE7d0JBQ0QsT0FBTTtxQkFDUDtvQkFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsRUFBRTt3QkFDM0MsbUJBQU0sQ0FBQyxXQUFXLENBQ2hCLHdCQUFVLENBQUMsZUFBZSxFQUMxQiwyQkFBWSxDQUFDLE1BQU0sRUFDbkIsd0JBQVUsQ0FBQyxRQUFRLEVBQ25CLGlFQUEwRCxHQUFHLE9BQUksQ0FDbEUsQ0FBQTt3QkFDRCxPQUFNO3FCQUNQO29CQUVELFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUE7Z0JBQy9DLENBQUMsQ0FBQyxDQUFBO2dCQUVGLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQUMsVUFBa0I7b0JBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOERBQXVELFlBQVksQ0FBRSxFQUFFLFVBQVUsQ0FBQyxDQUFBO29CQUM5RixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7d0JBQzlCLE9BQU07cUJBQ1A7b0JBRUQsaUVBQWlFO29CQUNqRSxJQUFJLG9CQUFTLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUN6RCxvQkFBUyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtxQkFDdEQ7eUJBQU07d0JBQ0wsb0JBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUE3REQsSUE2REM7QUE3RFksd0NBQWM7QUFtRTNCLFNBQVMsbUJBQW1CLENBQUMsS0FBYztJQUN6QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQy9DLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFFRCxJQUFNLEdBQUcsR0FBRyxLQUFtQyxDQUFBO0lBQy9DLE9BQU8sT0FBTyxHQUFHLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQTtBQUM3QyxDQUFDIn0=