52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { CustomError } from "ts-custom-error";
|
|
|
|
export class SignaldError extends CustomError {
|
|
public msg: string;
|
|
constructor(public errorType: string, public message: string) {
|
|
super(`[${errorType}]: ${message}`);
|
|
this.errorType = errorType;
|
|
this.message = `[${errorType}]: ${message}`;
|
|
this.msg = `${message}`;
|
|
}
|
|
}
|
|
|
|
export class CaptchaRequiredException extends SignaldError {
|
|
constructor(errorType: string, message: string) {
|
|
super(errorType, message);
|
|
}
|
|
}
|
|
|
|
const isBoolean = (v) => "boolean" === typeof v;
|
|
const isString = (v) => typeof v === "string" || v instanceof String;
|
|
|
|
export const throwOnError = (response: any) => {
|
|
if (response.type === "profile_not_available")
|
|
throw new SignaldError("profile_not_available", response.data);
|
|
|
|
const { data } = response;
|
|
let error;
|
|
if (Array.isArray(data)) {
|
|
error = response.error || false;
|
|
} else if (isString(data)) {
|
|
error = false;
|
|
} else {
|
|
error = response.error || data?.error || false;
|
|
}
|
|
if (error) {
|
|
let type_, msg;
|
|
if (isBoolean(error)) {
|
|
type_ = response.type;
|
|
msg = data.message || "";
|
|
let req = data.request || "";
|
|
msg += req.toString();
|
|
} else {
|
|
type_ = error.type;
|
|
msg = error.message || "";
|
|
msg += (error.validationResults || [""]).join("");
|
|
}
|
|
if (!type_) type_ = response.error_type;
|
|
if (type_ === "CaptchaRequired")
|
|
throw new CaptchaRequiredException(type_, msg);
|
|
throw new SignaldError(type_, msg);
|
|
}
|
|
};
|