Skip to content

Commit

Permalink
fix: Fixed 'Unhandled Rejection' that was killing the application
Browse files Browse the repository at this point in the history
  • Loading branch information
edgardmessias committed Mar 12, 2022
1 parent 4b2c68b commit f865d48
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 12 deletions.
6 changes: 6 additions & 0 deletions src/api/helpers/evaluate-and-return.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@ export async function evaluateAndReturn<T extends EvaluateFn>(

Object.assign(error, result.__error);

let jsStack = error.stack;
Error.captureStackTrace(error);
if (jsStack) {
error.stack = (error.stack || '') + '\nJS Stack: ' + jsStack;
}

throw error;
}

Expand Down
13 changes: 10 additions & 3 deletions src/api/layers/listener.layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* along with WPPConnect. If not, see <https://www.gnu.org/licenses/>.
*/

import { EventEmitter } from 'events';
import { EventEmitter, captureRejectionSymbol } from 'events';
import { Page } from 'puppeteer';
import { CreateConfig } from '../../config/create-config';
import { evaluateAndReturn } from '../helpers';
Expand Down Expand Up @@ -45,14 +45,22 @@ declare global {
}

export class ListenerLayer extends ProfileLayer {
private listenerEmitter = new EventEmitter();
private listenerEmitter = new EventEmitter({
captureRejections: true,
});

constructor(public page: Page, session?: string, options?: CreateConfig) {
super(page, session, options);

this.listenerEmitter.on(ExposedFn.onInterfaceChange, (state) => {
this.log('http', `Current state: ${state.mode} (${state.displayInfo})`);
});
this.listenerEmitter.on('error', (error) => {
this.log('error', error.toString());
});
this.listenerEmitter[captureRejectionSymbol] = (error) => {
this.log('error', error.toString());
};
}

protected async afterPageLoad() {
Expand Down Expand Up @@ -356,7 +364,6 @@ export class ListenerLayer extends ProfileLayer {
return this.registerEvent(
ExposedFn.onNotificationMessage,
(message: Message) => {
console.log('notification', message);
// Only group events
if (
message.type !== MessageType.GP2 ||
Expand Down
11 changes: 4 additions & 7 deletions src/controllers/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import * as path from 'path';
import * as rimraf from 'rimraf';
import * as waVersion from '@wppconnect/wa-version';
import axios from 'axios';
import { addExitCallback } from 'catch-exit';
import { Browser, BrowserContext, Page } from 'puppeteer';
import puppeteer from 'puppeteer-extra';
import { CreateConfig } from '../config/create-config';
Expand Down Expand Up @@ -213,13 +212,11 @@ export async function initBrowser(
if (
path.relative(os.tmpdir(), tmpUserDataDir).startsWith('puppeteer')
) {
addExitCallback((signal) => {
process.on('exit', () => {
// Remove only on exit signal
if (signal === 'exit') {
try {
rimraf.sync(tmpUserDataDir);
} catch (error) {}
}
try {
rimraf.sync(tmpUserDataDir);
} catch (error) {}
});
}
}
Expand Down
19 changes: 19 additions & 0 deletions src/controllers/initializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,25 @@ import {
StatusFindCallback,
} from '../api/model/initializer';
import { SessionToken } from '../token-store';
import { defaultLogger } from '../utils/logger';

process.on(
'unhandledRejection',
(reason: Error | any, promise: Promise<any>) => {
let message = 'Unhandled Rejection: ';
if (reason instanceof Error) {
if (reason.stack) {
message += reason.stack;
} else {
message += reason.toString();
}
} else {
message += JSON.stringify(reason);
}

defaultLogger.error(message);
}
);

/**
* Start the bot
Expand Down
3 changes: 1 addition & 2 deletions src/utils/ffmpeg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
* You should have received a copy of the GNU Lesser General Public License
* along with WPPConnect. If not, see <https://www.gnu.org/licenses/>.
*/
import { addExitCallback } from 'catch-exit';
import execa from 'execa';
import * as fs from 'fs';
import * as path from 'path';
Expand All @@ -26,7 +25,7 @@ const tmpDir = tmp.dirSync({});

let i = 0;

addExitCallback((signal) => {
process.on('exit', () => {
// Remove only on exit signal
try {
// Use rimraf because it is synchronous
Expand Down

0 comments on commit f865d48

Please sign in to comment.