diff --git a/src/api/gramjs/worker/provider.ts b/src/api/gramjs/worker/provider.ts index b947793ad..30544caa9 100644 --- a/src/api/gramjs/worker/provider.ts +++ b/src/api/gramjs/worker/provider.ts @@ -135,7 +135,9 @@ function makeRequest(message: OriginRequest) { Object.assign(requestState, { resolve, reject }); }); - if (('args' in payload) && typeof payload.args[1] === 'function') { + if ('args' in payload && 'name' in payload && typeof payload.args[1] === 'function') { + payload.withCallback = true; + const callback = payload.args.pop() as AnyToVoidFunction; requestState.callback = callback; requestStatesByCallback.set(callback, requestState); diff --git a/src/api/gramjs/worker/types.ts b/src/api/gramjs/worker/types.ts index 683242161..25e3e5a2b 100644 --- a/src/api/gramjs/worker/types.ts +++ b/src/api/gramjs/worker/types.ts @@ -33,6 +33,7 @@ export type OriginRequest = { messageId?: string; name: keyof Methods; args: MethodArgs; + withCallback?: boolean; } | { type: 'ping'; messageId?: string; diff --git a/src/api/gramjs/worker/worker.ts b/src/api/gramjs/worker/worker.ts index 25b1345fd..de8859a5a 100644 --- a/src/api/gramjs/worker/worker.ts +++ b/src/api/gramjs/worker/worker.ts @@ -24,9 +24,11 @@ onmessage = async (message: OriginMessageEvent) => { break; } case 'callMethod': { - const { messageId, name, args } = data; + const { + messageId, name, args, withCallback, + } = data; try { - if (messageId) { + if (messageId && withCallback) { const callback = (...callbackArgs: any[]) => { const lastArg = callbackArgs[callbackArgs.length - 1]; diff --git a/src/util/WorkerConnector.ts b/src/util/WorkerConnector.ts index fd3f213b0..2268a65d3 100644 --- a/src/util/WorkerConnector.ts +++ b/src/util/WorkerConnector.ts @@ -14,6 +14,7 @@ type CallMethodData = { messageId?: string; name: string; args: any; + withCallback?: boolean; }; type OriginMessageData = CallMethodData | { @@ -78,6 +79,8 @@ export default class WorkerConnector { }); if (typeof payload.args[payload.args.length - 1] === 'function') { + payload.withCallback = true; + const callback = payload.args.pop() as AnyToVoidFunction; requestState.callback = callback; requestStatesByCallback.set(callback, requestState); diff --git a/src/util/createWorkerInterface.ts b/src/util/createWorkerInterface.ts index 4842af137..f36a4595a 100644 --- a/src/util/createWorkerInterface.ts +++ b/src/util/createWorkerInterface.ts @@ -13,9 +13,11 @@ export default function createInterface(api: Record) { switch (data.type) { case 'callMethod': { - const { messageId, name, args } = data; + const { + messageId, name, args, withCallback, + } = data; try { - if (messageId) { + if (messageId && withCallback) { const callback = (...callbackArgs: any[]) => { const lastArg = callbackArgs[callbackArgs.length - 1];