File size: 1,874 Bytes
c09f67c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import { logger } from "./logger";
export class ProviderError extends Error {
code: string;
constructor({ message, code }: { message: string; code: string }) {
super(message);
this.code = this.setCode(code);
}
setCode(code: string) {
// Teller
if (this.message === "The requested account is closed") {
return "disconnected";
}
// GoCardLess
if (this.message.startsWith("EUA was valid for")) {
return "disconnected";
}
switch (code) {
// Teller
case "enrollment.disconnected":
case "enrollment.disconnected.user_action.mfa_required":
case "enrollment.disconnected.account_locked":
case "enrollment.disconnected.credentials_invalid":
case "enrollment.disconnected.enrollment_inactive":
case "enrollment.disconnected.user_action.contact_information_required":
case "enrollment.disconnected.user_action.insufficient_permissions":
case "enrollment.disconnected.user_action.captcha_required":
case "enrollment.disconnected.user_action.web_login_required":
// // Plaid
case "ITEM_LOGIN_REQUIRED":
case "ITEM_LOCKED":
case "ITEM_CONCURRENTLY_DELETED":
case "ACCESS_NOT_GRANTED":
// GoCardLess
case "AccessExpiredError":
case "AccountInactiveError":
case "Account suspended":
logger("disconnected", this.message);
return "disconnected";
// EnableBanking
case "ALREADY_AUTHORIZED":
return "already_authorized";
default:
logger("unknown", this.message);
return "unknown";
}
}
}
export function createErrorResponse(error: unknown) {
console.error(error);
if (error instanceof ProviderError) {
return {
message: error.message,
code: error.code,
};
}
return {
message: String(error),
code: "unknown",
};
}
|