From 96c87c97552e27f2b695b1d00074b47782e88deb Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Tue, 6 Feb 2024 16:49:37 +0100 Subject: [PATCH] Calls: Fix leaving on page unload (#4248) --- src/api/gramjs/worker/worker.ts | 2 +- src/lib/gramjs/extensions/HttpStream.ts | 4 ++-- src/lib/gramjs/network/MTProtoSender.js | 7 +++++-- src/lib/gramjs/network/connection/Connection.js | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/api/gramjs/worker/worker.ts b/src/api/gramjs/worker/worker.ts index 40ff1bd3c..224de6798 100644 --- a/src/api/gramjs/worker/worker.ts +++ b/src/api/gramjs/worker/worker.ts @@ -176,7 +176,7 @@ function onUpdate(update: ApiUpdate) { sendUpdatesOnTickEnd(); } -export function sendToOrigin(data: WorkerMessageData, arrayBuffer?: ArrayBuffer) { +function sendToOrigin(data: WorkerMessageData, arrayBuffer?: ArrayBuffer) { if (arrayBuffer) { postMessage(data, [arrayBuffer]); } else { diff --git a/src/lib/gramjs/extensions/HttpStream.ts b/src/lib/gramjs/extensions/HttpStream.ts index 31407718a..a5db63d98 100644 --- a/src/lib/gramjs/extensions/HttpStream.ts +++ b/src/lib/gramjs/extensions/HttpStream.ts @@ -41,7 +41,7 @@ class HttpStream { return data; } - getURL(ip: string, port: number, testServers: boolean, isPremium: boolean) { + static getURL(ip: string, port: number, testServers: boolean, isPremium: boolean) { if (port === 443) { return `https://${ip}:${port}/apiw1${testServers ? '_test' : ''}${isPremium ? '_premium' : ''}`; } else { @@ -55,7 +55,7 @@ class HttpStream { this.resolveRead = resolve; this.rejectRead = reject; }); - this.url = this.getURL(ip, port, testServers, isPremium); + this.url = HttpStream.getURL(ip, port, testServers, isPremium); await fetch(this.url, { method: 'POST', diff --git a/src/lib/gramjs/network/MTProtoSender.js b/src/lib/gramjs/network/MTProtoSender.js index 1b7d5c2bb..934363ac4 100644 --- a/src/lib/gramjs/network/MTProtoSender.js +++ b/src/lib/gramjs/network/MTProtoSender.js @@ -40,7 +40,6 @@ const { SecurityError } = require('../errors/Common'); const { InvalidBufferError } = require('../errors/Common'); const { RPCMessageToError } = require('../errors'); const { TypeNotFoundError } = require('../errors/Common'); -const { sendToOrigin } = require('../../../api/gramjs/worker/worker'); const LONGPOLL_MAX_WAIT = 3000; const LONGPOLL_MAX_DELAY = 500; @@ -353,7 +352,11 @@ class MTProtoSender { const data = await this._send_queue.getBeacon(state); const encryptedData = await this._state.encryptMessageData(data); - sendToOrigin({ type: 'sendBeacon', data: encryptedData, url: this._fallbackConnection.socket.website }); + postMessage({ + type: 'sendBeacon', + data: encryptedData, + url: this._fallbackConnection.href, + }); } /** diff --git a/src/lib/gramjs/network/connection/Connection.js b/src/lib/gramjs/network/connection/Connection.js index be966916b..7007bed49 100644 --- a/src/lib/gramjs/network/connection/Connection.js +++ b/src/lib/gramjs/network/connection/Connection.js @@ -189,6 +189,7 @@ class HttpConnection extends Connection { super(ip, port, dcId, loggers, testServers, isPremium); this.shouldLongPoll = true; this.socket = new HttpStream(this.disconnectCallback.bind(this)); + this.href = HttpStream.getURL(this._ip, this._port, this._testServers, this._isPremium); } send(data) {