diff --git a/index.d.ts b/index.d.ts index bd75dbf96b..22aea7e556 100644 --- a/index.d.ts +++ b/index.d.ts @@ -538,7 +538,8 @@ declare namespace WAWebJS { public dataPath?: string; constructor(options?: { clientId?: string, - dataPath?: string + dataPath?: string, + rmMaxRetries?: number }) } @@ -552,7 +553,8 @@ declare namespace WAWebJS { store: Store, clientId?: string, dataPath?: string, - backupSyncIntervalMs: number + backupSyncIntervalMs: number, + rmMaxRetries?: number }) } diff --git a/src/authStrategies/LocalAuth.js b/src/authStrategies/LocalAuth.js index 543a6b9ba1..38a8797b3c 100644 --- a/src/authStrategies/LocalAuth.js +++ b/src/authStrategies/LocalAuth.js @@ -9,9 +9,10 @@ const BaseAuthStrategy = require('./BaseAuthStrategy'); * @param {object} options - options * @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance * @param {string} options.dataPath - Change the default path for saving session files, default is: "./.wwebjs_auth/" + * @param {number} options.rmMaxRetries - Sets the maximum number of retries for removing the session directory */ class LocalAuth extends BaseAuthStrategy { - constructor({ clientId, dataPath }={}) { + constructor({ clientId, dataPath, rmMaxRetries }={}) { super(); const idRegex = /^[-_\w]+$/i; @@ -21,6 +22,7 @@ class LocalAuth extends BaseAuthStrategy { this.dataPath = path.resolve(dataPath || './.wwebjs_auth/'); this.clientId = clientId; + this.rmMaxRetries = rmMaxRetries ?? 4; } async beforeBrowserInitialized() { @@ -44,7 +46,7 @@ class LocalAuth extends BaseAuthStrategy { async logout() { if (this.userDataDir) { - await fs.promises.rm(this.userDataDir, { recursive: true, force: true }) + await fs.promises.rm(this.userDataDir, { recursive: true, force: true, maxRetries: this.rmMaxRetries }) .catch((e) => { throw new Error(e); }); diff --git a/src/authStrategies/RemoteAuth.js b/src/authStrategies/RemoteAuth.js index 99e688ba2f..8b9f6c9c56 100644 --- a/src/authStrategies/RemoteAuth.js +++ b/src/authStrategies/RemoteAuth.js @@ -22,9 +22,10 @@ const BaseAuthStrategy = require('./BaseAuthStrategy'); * @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance * @param {string} options.dataPath - Change the default path for saving session files, default is: "./.wwebjs_auth/" * @param {number} options.backupSyncIntervalMs - Sets the time interval for periodic session backups. Accepts values starting from 60000ms {1 minute} + * @param {number} options.rmMaxRetries - Sets the maximum number of retries for removing the session directory */ class RemoteAuth extends BaseAuthStrategy { - constructor({ clientId, dataPath, store, backupSyncIntervalMs } = {}) { + constructor({ clientId, dataPath, store, backupSyncIntervalMs, rmMaxRetries } = {}) { if (!fs && !unzipper && !archiver) throw new Error('Optional Dependencies [fs-extra, unzipper, archiver] are required to use RemoteAuth. Make sure to run npm install correctly and remove the --no-optional flag'); super(); @@ -43,6 +44,7 @@ class RemoteAuth extends BaseAuthStrategy { this.dataPath = path.resolve(dataPath || './.wwebjs_auth/'); this.tempDir = `${this.dataPath}/wwebjs_temp_session_${this.clientId}`; this.requiredDirs = ['Default', 'IndexedDB', 'Local Storage']; /* => Required Files & Dirs in WWebJS to restore session */ + this.rmMaxRetries = rmMaxRetries ?? 4; } async beforeBrowserInitialized() { @@ -80,7 +82,8 @@ class RemoteAuth extends BaseAuthStrategy { if (pathExists) { await fs.promises.rm(this.userDataDir, { recursive: true, - force: true + force: true, + maxRetries: this.rmMaxRetries, }).catch(() => {}); } clearInterval(this.backupSync); @@ -107,7 +110,8 @@ class RemoteAuth extends BaseAuthStrategy { await fs.promises.unlink(`${this.sessionName}.zip`); await fs.promises.rm(`${this.tempDir}`, { recursive: true, - force: true + force: true, + maxRetries: this.rmMaxRetries, }).catch(() => {}); if(options && options.emit) this.client.emit(Events.REMOTE_SESSION_SAVED); } @@ -120,7 +124,8 @@ class RemoteAuth extends BaseAuthStrategy { if (pathExists) { await fs.promises.rm(this.userDataDir, { recursive: true, - force: true + force: true, + maxRetries: this.rmMaxRetries, }).catch(() => {}); } if (sessionExists) { @@ -177,7 +182,8 @@ class RemoteAuth extends BaseAuthStrategy { if (stats.isDirectory()) { await fs.promises.rm(dirElement, { recursive: true, - force: true + force: true, + maxRetries: this.rmMaxRetries, }).catch(() => {}); } else { await fs.promises.unlink(dirElement).catch(() => {});