Skip to content

Commit 4158615

Browse files
committed
👔 smarter injection logic #2447
1 parent fce979c commit 4158615

File tree

2 files changed

+20
-19
lines changed

2 files changed

+20
-19
lines changed

src/controllers/browser.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ import { log } from '../logging/logging';
1414
import { now, processSendData, timeout, timePromise } from '../utils/tools';
1515
import { qrManager } from './auth';
1616

17-
let browser;
17+
let browser,
18+
wapiInjected = false,
19+
wapiAttempts = 1;
20+
1821
export let BROWSER_START_TS = 0;
1922

2023
export async function initPage(sessionId?: string, config?:ConfigObject, customUserAgent?:string, spinner ?: Spin, _page?: Page, skipAuth ?: boolean) : Promise<Page> {
@@ -241,27 +244,25 @@ export async function injectPreApiScripts(page: Page, spinner ?: Spin) : Promise
241244
return page;
242245
}
243246

244-
export async function injectWapi(page: Page, spinner ?: Spin) : Promise<Page> {
247+
export async function injectWapi(page: Page, spinner ?: Spin, force = false) : Promise<Page> {
248+
if(wapiInjected && !force) return page;
249+
const check = `window.WAPI && window.Store ? true : false`;
245250
const wapi = await timePromise(()=>addScript(page,'wapi.js'))
246251
spinner?.info(`WAPI inject: ${wapi}ms`)
247-
spinner?.info("Checking WAPI Injection")
248-
const check = (c) => `window.${c} ? true : false`
249-
await page.waitForFunction(check('WAPI'),{ timeout: 0, polling: 500 })
250-
return;
252+
spinner?.info("Checking session integrity")
253+
wapiAttempts++;
254+
wapiInjected = !!(await page.waitForFunction(check,{ timeout: 3000, polling: 200 }).catch(e=>false))
255+
if(!wapiInjected) {
256+
spinner?.info(`Session integrity check failed, trying again... ${wapiAttempts}`);
257+
return await injectWapi(page, spinner)
258+
}
259+
spinner?.info("Session integrity check passed")
260+
return page;
251261
}
252262

253-
export async function injectApi(page: Page, spinner ?: Spin) : Promise<Page> {
263+
export async function injectApi(page: Page, spinner ?: Spin, force = false) : Promise<Page> {
254264
await injectPreApiScripts(page, spinner);
255-
await injectWapi(page, spinner)
256-
// const wapi = await timePromise(()=>addScript(page,'wapi.js'))
257-
// spinner?.info(`WAPI inject: ${wapi}ms`)
258-
// await addScript(page,'wapi.js')
259-
// await addScript(page,'wapi.js')
260-
// await addScript(page,'wapi.js')
261-
// await addScript(page,'wapi.js')
262-
// await addScript(page,'wapi.js')
263-
// await addScript(page,'wapi.js')
264-
// await addScript(page,'wapi.js')
265+
await injectWapi(page, spinner, force)
265266
const launch = await timePromise(()=>addScript(page,'launch.js'))
266267
spinner?.info(`Launch inject: ${launch}ms`)
267268
return page;

src/controllers/initializer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ export async function create(config: ConfigObject = {}): Promise<Client> {
281281
}
282282
const pre = canInjectEarly ? 'Rei' : 'I';
283283
spinner.start(`${pre}njecting api`);
284-
waPage = await injectApi(waPage, spinner);
284+
waPage = await injectApi(waPage, spinner, true);
285285
spinner.succeed(`WAPI ${pre}njected`);
286286

287287
if (canInjectEarly) {
@@ -290,7 +290,7 @@ export async function create(config: ConfigObject = {}): Promise<Client> {
290290
if(config?.safeMode) await timeout(5000);
291291
}
292292
//@ts-ignore
293-
const VALID_SESSION = await waPage.evaluate(() => window.Store && window.Store.Msg ? true : false);
293+
const VALID_SESSION = await waPage.waitForFunction(`window.Store && window.Store.Msg ? true : false`,{ timeout: 9000, polling: 200 }).catch(e=>false)
294294
if (VALID_SESSION) {
295295
/**
296296
* Session is valid, attempt to preload patches

0 commit comments

Comments
 (0)