11import * as path from 'path' ;
2- import * as fs from 'fs' ;
2+ import * as fs from 'fs/promises ' ;
33import ON_DEATH from 'death' ;
44// import puppeteer from 'puppeteer-extra';
55import { puppeteerConfig , useragent , width , height } from '../config/puppeteer.config' ;
6- import { Browser , CDPSession , Page } from 'puppeteer' ;
6+ import { Browser , Page } from 'puppeteer' ;
77import { Spin , EvEmitter } from './events' ;
88import { ConfigObject } from '../api/model' ;
99import { FileNotFoundError , getTextFile } from 'pico-s3' ;
1010// eslint-disable-next-line @typescript-eslint/no-var-requires
1111const puppeteer = require ( 'puppeteer-extra' )
1212import terminate from 'terminate/promise' ;
1313import { log } from '../logging/logging' ;
14- import { now , processSendData , timeout , timePromise } from '../utils/tools' ;
14+ import { now , pathExists , processSendData , timeout , timePromise } from '../utils/tools' ;
1515import { QRManager } from './auth' ;
1616import { scriptLoader } from './script_preloader' ;
1717import { earlyInjectionCheck } from './patch_manager' ;
@@ -155,7 +155,7 @@ export async function initPage(sessionId?: string, config?:ConfigObject, qrManag
155155 * AUTH
156156 */
157157 spinner ?. info ( 'Loading session data' )
158- let sessionjson : any = getSessionDataFromFile ( sessionId , config , spinner )
158+ let sessionjson : any = await getSessionDataFromFile ( sessionId , config , spinner )
159159 if ( ! sessionjson && sessionjson !== "" && config . sessionDataBucketAuth ) {
160160 try {
161161 spinner ?. info ( 'Unable to find session data file locally, attempting to find session data in cloud storage..' )
@@ -227,16 +227,16 @@ export async function initPage(sessionId?: string, config?:ConfigObject, qrManag
227227 return waPage ;
228228}
229229
230- const getSessionDataFromFile = ( sessionId : string , config : ConfigObject , spinner ?: Spin ) => {
230+ const getSessionDataFromFile = async ( sessionId : string , config : ConfigObject , spinner ?: Spin ) => {
231231 if ( config ?. sessionData == "NUKE" ) return ''
232232 //check if [session].json exists in __dirname
233- const sessionjsonpath = getSessionDataFilePath ( sessionId , config )
233+ const sessionjsonpath = await getSessionDataFilePath ( sessionId , config )
234234 let sessionjson = '' ;
235235 const sd = process . env [ `${ sessionId . toUpperCase ( ) } _DATA_JSON` ] ? JSON . parse ( process . env [ `${ sessionId . toUpperCase ( ) } _DATA_JSON` ] ) : config ?. sessionData ;
236236 sessionjson = ( typeof sd === 'string' && sd !== "" ) ? JSON . parse ( Buffer . from ( sd , 'base64' ) . toString ( 'ascii' ) ) : sd ;
237- if ( sessionjsonpath && typeof sessionjsonpath == 'string' && fs . existsSync ( sessionjsonpath ) ) {
237+ if ( sessionjsonpath && typeof sessionjsonpath == 'string' && await pathExists ( sessionjsonpath ) ) {
238238 spinner . succeed ( `Found session data file: ${ sessionjsonpath } ` )
239- const s = fs . readFileSync ( sessionjsonpath , "utf8" ) ;
239+ const s = await fs . readFile ( sessionjsonpath , "utf8" ) ;
240240 try {
241241 sessionjson = JSON . parse ( s ) ;
242242 } catch ( error ) {
@@ -256,43 +256,41 @@ const getSessionDataFromFile = (sessionId: string, config: ConfigObject, spinner
256256 return sessionjson ;
257257}
258258
259- export const deleteSessionData = ( config : ConfigObject ) : boolean => {
260- const sessionjsonpath = getSessionDataFilePath ( config ?. sessionId || 'session' , config )
261- if ( typeof sessionjsonpath == 'string' && fs . existsSync ( sessionjsonpath ) ) {
259+ export const deleteSessionData = async ( config : ConfigObject ) : Promise < boolean > => {
260+ const sessionjsonpath = await getSessionDataFilePath ( config ?. sessionId || 'session' , config )
261+ if ( typeof sessionjsonpath == 'string' && await pathExists ( sessionjsonpath ) ) {
262262 const l = `logout detected, deleting session data file: ${ sessionjsonpath } `
263263 console . log ( l )
264264 log . info ( l )
265- fs . unlinkSync ( sessionjsonpath ) ;
265+ await fs . unlink ( sessionjsonpath ) ;
266266 }
267- const mdDir = config [ 'userDataDir' ] ;
268- if ( mdDir ) {
267+ const mdDir = await pathExists ( config [ 'userDataDir' ] ) ;
268+ if ( config [ 'userDataDir' ] && mdDir ) {
269269 log . info ( `Deleting MD session directory: ${ mdDir } ` )
270- // @ts -ignore
271- fs . rmdirSync ( mdDir , { force : true , recursive : true } )
270+ await fs . rm ( mdDir , { force : true , recursive : true } )
271+ log . info ( `MD directory ${ mdDir } deleted: ${ ! ( await pathExists ( mdDir , true ) ) } ` )
272272 }
273273 return true ;
274274}
275275
276- export const invalidateSesssionData = ( config : ConfigObject ) : boolean => {
277- const sessionjsonpath = getSessionDataFilePath ( config ?. sessionId || 'session' , config )
278- if ( typeof sessionjsonpath == 'string' && fs . existsSync ( sessionjsonpath ) ) {
276+ export const invalidateSesssionData = async ( config : ConfigObject ) : Promise < boolean > => {
277+ const sessionjsonpath = await getSessionDataFilePath ( config ?. sessionId || 'session' , config )
278+ if ( typeof sessionjsonpath == 'string' && await pathExists ( sessionjsonpath ) ) {
279279 const l = `logout detected, invalidating session data file: ${ sessionjsonpath } `
280280 console . log ( l )
281281 log . info ( l )
282- fs . writeFile ( sessionjsonpath , "LOGGED OUT" , ( err ) => {
283- if ( err ) { console . error ( err ) ; return ; }
284- } ) ;
282+ fs . writeFile ( sessionjsonpath , "LOGGED OUT" ) ;
285283 }
286284 return true ;
287285}
288286
289- export const getSessionDataFilePath = ( sessionId : string , config : ConfigObject ) : string | false => {
287+ export const getSessionDataFilePath = async ( sessionId : string , config : ConfigObject ) : Promise < string | false > => {
290288 const p = require ?. main ?. path || process ?. mainModule ?. path ;
291289 const sessionjsonpath = ( config ?. sessionDataPath && config ?. sessionDataPath . includes ( '.data.json' ) ) ? path . join ( path . resolve ( process . cwd ( ) , config ?. sessionDataPath || '' ) ) : path . join ( path . resolve ( process . cwd ( ) , config ?. sessionDataPath || '' ) , `${ sessionId || 'session' } .data.json` ) ;
292290 const altSessionJsonPath = p ? ( config ?. sessionDataPath && config ?. sessionDataPath . includes ( '.data.json' ) ) ? path . join ( path . resolve ( p , config ?. sessionDataPath || '' ) ) : path . join ( path . resolve ( p , config ?. sessionDataPath || '' ) , `${ sessionId || 'session' } .data.json` ) : false ;
293- if ( fs . existsSync ( sessionjsonpath ) ) {
291+ if ( pathExists ( sessionjsonpath ) ) {
294292 return sessionjsonpath
295- } else if ( p && altSessionJsonPath && fs . existsSync ( altSessionJsonPath ) ) {
293+ } else if ( p && altSessionJsonPath && await pathExists ( altSessionJsonPath ) ) {
296294 return altSessionJsonPath
297295 }
298296 return false
@@ -401,9 +399,9 @@ async function initBrowser(sessionId?: string, config:any={}, spinner ?: Spin) {
401399 spinner ?. info ( `Data dir: ${ config [ "userDataDir" ] } ` )
402400 }
403401 if ( config ?. corsFix ) args . push ( '--disable-web-security' ) ;
404- if ( config [ "userDataDir" ] && ! fs . existsSync ( config [ "userDataDir" ] ) ) {
402+ if ( config [ "userDataDir" ] && ! ( await pathExists ( config [ "userDataDir" ] ) ) ) {
405403 spinner ?. info ( `Data dir doesnt exist, creating...: ${ config [ "userDataDir" ] } ` )
406- fs . mkdirSync ( config [ "userDataDir" ] , { recursive : true } ) ;
404+ fs . mkdir ( config [ "userDataDir" ] , { recursive : true } ) ;
407405 }
408406 const browser = ( config ?. browserWSEndpoint ) ? await puppeteer . connect ( { ...config } ) : await puppeteer . launch ( {
409407 headless : true ,
0 commit comments