UNPKG

helene

Version:
83 lines 2.98 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.IdleTimeout = void 0; const utils_1 = require("../utils"); const defer_1 = __importDefault(require("lodash/defer")); const isNumber_1 = __importDefault(require("lodash/isNumber")); const throttle_1 = __importDefault(require("lodash/throttle")); class IdleTimeout { client; timeout = null; idleTimeout = null; constructor(client) { this.client = client; this.timeout = this.client.options.idlenessTimeout; this.setup(); } start() { if ((0, isNumber_1.default)(this.timeout) && (utils_1.Environment.isBrowser || utils_1.Environment.isTest)) { this.idleTimeout = setTimeout(() => { this.client.close(); console.log('Helene: Disconnected due to inactivity'); }, this.timeout); } } setup() { this.client.on(utils_1.ClientEvents.CLOSE, () => { clearTimeout(this.idleTimeout); }); (0, defer_1.default)(() => { this.start(); }); if (typeof window === 'undefined') return; const reset = (0, isNumber_1.default)(this.timeout) ? (0, throttle_1.default)(this.reset.bind(this), this.timeout / 2, { leading: true, trailing: true, }) : null; if (reset) { // https://github.com/socketio/socket.io/issues/2924#issuecomment-297985409 window.addEventListener('focus', reset); window.addEventListener('mousemove', reset); window.addEventListener('mousedown', reset); window.addEventListener('keydown', reset); window.addEventListener('scroll', reset); window.addEventListener('touchstart', reset); window.addEventListener('pageshow', reset); window.addEventListener('pagehide', reset); } document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible') { this.reset(); } else { if (this.client.options?.ws?.disconnectOnPageHide) { this.client.close(); console.log('Helene: Disconnected on page hide'); } } }); } stop() { if (this.idleTimeout) { clearTimeout(this.idleTimeout); } } async reset() { this.stop(); this.start(); if (this.client.clientSocket.socket?.active) { return; } this.client.clientSocket.connect(); await this.client.waitFor(utils_1.ClientEvents.WEBSOCKET_CONNECTED, 10000); } } exports.IdleTimeout = IdleTimeout; //# sourceMappingURL=idle-timeout.js.map