/** * Payout Error Handling Utility * * Maps Stripe payout failure codes to user-friendly messages for owners. * These codes indicate why a bank deposit failed. */ const PAYOUT_FAILURE_MESSAGES = { account_closed: { message: "Your bank account has been closed.", action: "Please update your bank account in your payout settings.", requiresBankUpdate: true, }, account_frozen: { message: "Your bank account is frozen.", action: "Please contact your bank to resolve this issue.", requiresBankUpdate: false, }, bank_account_restricted: { message: "Your bank account has restrictions that prevent deposits.", action: "Please contact your bank or add a different account.", requiresBankUpdate: true, }, bank_ownership_changed: { message: "The ownership of your bank account has changed.", action: "Please re-verify your bank account in your payout settings.", requiresBankUpdate: true, }, could_not_process: { message: "Your bank could not process the deposit.", action: "This is usually temporary. We'll retry automatically.", requiresBankUpdate: false, }, debit_not_authorized: { message: "Your bank account is not authorized to receive deposits.", action: "Please contact your bank to enable incoming transfers.", requiresBankUpdate: false, }, declined: { message: "Your bank declined the deposit.", action: "Please contact your bank for more information.", requiresBankUpdate: false, }, insufficient_funds: { message: "The deposit was returned.", action: "This can happen with some account types. Please verify your account details.", requiresBankUpdate: true, }, invalid_account_number: { message: "Your bank account number appears to be invalid.", action: "Please verify and update your bank account details.", requiresBankUpdate: true, }, incorrect_account_holder_name: { message: "The name on your bank account doesn't match your profile.", action: "Please update your bank account or profile information.", requiresBankUpdate: true, }, incorrect_account_holder_type: { message: "Your bank account type doesn't match what was expected.", action: "Please verify your account type (individual vs business).", requiresBankUpdate: true, }, invalid_currency: { message: "Your bank account doesn't support this currency.", action: "Please add a bank account that supports USD deposits.", requiresBankUpdate: true, }, no_account: { message: "The bank account could not be found.", action: "Please verify your account number and routing number.", requiresBankUpdate: true, }, unsupported_card: { message: "The debit card used for payouts is not supported.", action: "Please update to a supported debit card or bank account.", requiresBankUpdate: true, }, }; // Default message for unknown failure codes const DEFAULT_PAYOUT_FAILURE = { message: "There was an issue depositing funds to your bank.", action: "Please check your bank account details or contact support.", requiresBankUpdate: true, }; /** * Get user-friendly payout failure message * @param {string} failureCode - The Stripe payout failure code * @returns {Object} - { message, action, requiresBankUpdate } */ function getPayoutFailureMessage(failureCode) { return PAYOUT_FAILURE_MESSAGES[failureCode] || DEFAULT_PAYOUT_FAILURE; } module.exports = { PAYOUT_FAILURE_MESSAGES, DEFAULT_PAYOUT_FAILURE, getPayoutFailureMessage, };