export abstract class Exception {
    /**
     * @param message is JavaScript original message, in English usually.
     * In prod environment, you are not advised to display the error message directly to end-user.
     */
    protected constructor(public message: string) {}
}

export class APIException extends Exception {
    constructor(message: string, public statusCode: number, public requestURL: string, public responseData: any, public errorId: string | null, public errorCode: string | null) {
        super(message);
    }
}

export class NetworkConnectionException extends Exception {
    constructor(message: string, public requestURL: string, public originalErrorMessage: string = "") {
        super(message);
    }
}

export class JavaScriptException extends Exception {
    constructor(message: string, public originalError?: any) {
        super(message);
    }
}
