Skip to content

Commit

Permalink
Add max retries for fs.promises.rm (#3351)
Browse files Browse the repository at this point in the history
  • Loading branch information
devlikepro authored Dec 23, 2024
1 parent 5df83b0 commit f56d25f
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 deletions.
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

0 comments on commit f56d25f

Please sign in to comment.