class PayoutErrorHandler {
static handle(error) {
if (!(error instanceof ZubaAPIError)) {
return this.handleNetworkError(error);
}
switch (error.code) {
case 'INSUFFICIENT_FUNDS':
return this.handleInsufficientFunds(error);
case 'INVALID_BENEFICIARY':
return this.handleInvalidBeneficiary(error);
case 'CURRENCY_NOT_SUPPORTED':
return this.handleUnsupportedCurrency(error);
case 'AMOUNT_TOO_LOW':
case 'AMOUNT_TOO_HIGH':
return this.handleAmountLimits(error);
case 'ROUTE_UNAVAILABLE':
return this.handleRouteUnavailable(error);
default:
return this.handleGenericError(error);
}
}
static handleInsufficientFunds(error) {
const { availableBalance, requestedAmount, currency } = error.details;
return {
userMessage: `Insufficient balance. Available: ${availableBalance} ${currency}, Requested: ${requestedAmount} ${currency}`,
suggestion: 'Please top up your account or reduce the payout amount',
canRetry: false,
requiresAction: 'TOPUP_BALANCE'
};
}
static handleInvalidBeneficiary(error) {
return {
userMessage: 'The recipient is invalid or inactive',
suggestion: 'Please verify the beneficiary details and try again',
canRetry: false,
requiresAction: 'UPDATE_BENEFICIARY'
};
}
static handleUnsupportedCurrency(error) {
const { requestedCurrency, supportedCurrencies } = error.details;
return {
userMessage: `Currency ${requestedCurrency} is not supported`,
suggestion: `Supported currencies: ${supportedCurrencies?.join(', ')}`,
canRetry: false,
requiresAction: 'CHANGE_CURRENCY'
};
}
static handleAmountLimits(error) {
const { minAmount, maxAmount, currency } = error.details;
return {
userMessage: `Amount must be between ${minAmount} and ${maxAmount} ${currency}`,
suggestion: 'Please adjust the payout amount',
canRetry: false,
requiresAction: 'ADJUST_AMOUNT'
};
}
static handleRouteUnavailable(error) {
const { requestedRoute, availableRoutes } = error.details;
return {
userMessage: `Payment route ${requestedRoute} is currently unavailable`,
suggestion: `Try using: ${availableRoutes?.join(', ')}`,
canRetry: true,
requiresAction: 'CHANGE_ROUTE'
};
}
static handleNetworkError(error) {
return {
userMessage: 'Network error occurred',
suggestion: 'Please check your connection and try again',
canRetry: true,
requiresAction: 'RETRY'
};
}
static handleGenericError(error) {
return {
userMessage: 'An error occurred while processing your request',
suggestion: 'Please try again or contact support',
canRetry: true,
requiresAction: 'CONTACT_SUPPORT'
};
}
}