Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 4 retries for fs.promises.rm #3351

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,8 @@ declare namespace WAWebJS {
public dataPath?: string;
constructor(options?: {
clientId?: string,
dataPath?: string
dataPath?: string,
rmMaxRetries?: number
})
}

Expand All @@ -552,7 +553,8 @@ declare namespace WAWebJS {
store: Store,
clientId?: string,
dataPath?: string,
backupSyncIntervalMs: number
backupSyncIntervalMs: number,
rmMaxRetries?: number
})
}

Expand Down
6 changes: 4 additions & 2 deletions src/authStrategies/LocalAuth.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -21,6 +22,7 @@ class LocalAuth extends BaseAuthStrategy {

this.dataPath = path.resolve(dataPath || './.wwebjs_auth/');
this.clientId = clientId;
this.rmMaxRetries = rmMaxRetries ?? 4;
}

async beforeBrowserInitialized() {
Expand All @@ -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);
});
Expand Down
16 changes: 11 additions & 5 deletions src/authStrategies/RemoteAuth.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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() {
Expand Down Expand Up @@ -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);
Expand All @@ -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);
}
Expand All @@ -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) {
Expand Down Expand Up @@ -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(() => {});
Expand Down
Loading