| | 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) { |
| | |
| | if (this.message === "The requested account is closed") { |
| | return "disconnected"; |
| | } |
| |
|
| | |
| | if (this.message.startsWith("EUA was valid for")) { |
| | return "disconnected"; |
| | } |
| |
|
| | switch (code) { |
| | |
| | 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": |
| | |
| | case "ITEM_LOGIN_REQUIRED": |
| | case "ITEM_LOCKED": |
| | case "ITEM_CONCURRENTLY_DELETED": |
| | case "ACCESS_NOT_GRANTED": |
| | |
| | case "AccessExpiredError": |
| | case "AccountInactiveError": |
| | case "Account suspended": |
| | logger("disconnected", this.message); |
| | return "disconnected"; |
| |
|
| | |
| | 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", |
| | }; |
| | } |
| |
|