Jules
Final deployment with all fixes and verified content
c09f67c
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",
};
}