export class AppRequest {
    timeout?: NodeJS.Timeout;

    constructor(readonly id, readonly method, private resolve, private reject) {
    }

    onSuccess(...args) {
        this.resolve(...args);
    }

    onError(...args) {
        if ('code' in args[0] && 'message' in args[0] && 'stack' in args[0]) {
            this.reject(new AppError(args[0].code, args[0].message, args[0].stack));
        } else {
            this.reject(...args);
        }
    }
}

export class AppError extends Error {
    constructor(public name: string, public message: string, public stack: string) {
        super(message);
    }
}
