@@ -14,7 +14,10 @@ import { log } from '../logging/logging';
1414import { now , processSendData , timeout , timePromise } from '../utils/tools' ;
1515import { qrManager } from './auth' ;
1616
17- let browser ;
17+ let browser ,
18+ wapiInjected = false ,
19+ wapiAttempts = 1 ;
20+
1821export let BROWSER_START_TS = 0 ;
1922
2023export 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 ;
0 commit comments