You've already forked AstralRinth
forked from didirus/AstralRinth
* fix: negative value stuff * fix: mobile responsiveness for modal min-w * feat: better error handling on withdraw * fix: empty state positioning + svg sizing * fix: title case -> sentence case * fix: re-add virtual visa under gift cards * fix: hide <1% segments
999 lines
25 KiB
TypeScript
999 lines
25 KiB
TypeScript
import { defineMessage, type MessageDescriptor } from '@vintl/vintl'
|
|
|
|
export type FieldType = 'text' | 'select' | 'email' | 'tel' | 'date'
|
|
|
|
export interface FieldConfig {
|
|
name: string
|
|
type: FieldType
|
|
label: MessageDescriptor
|
|
required: boolean
|
|
placeholder?: MessageDescriptor
|
|
helpText?: MessageDescriptor
|
|
options?: Array<{ value: string; label: MessageDescriptor }>
|
|
pattern?: string
|
|
validate?: (value: string) => string | null
|
|
autocomplete?: string
|
|
}
|
|
|
|
export interface RailConfig {
|
|
id: string
|
|
name: MessageDescriptor
|
|
currency: string
|
|
fee: string
|
|
type: 'fiat' | 'crypto'
|
|
railCode?: string
|
|
blockchain?: string
|
|
fields: FieldConfig[]
|
|
warningMessage?: MessageDescriptor
|
|
requiresBankName?: boolean
|
|
}
|
|
|
|
const DOCUMENT_TYPE_OPTIONS = [
|
|
{
|
|
value: 'NATIONAL_ID',
|
|
label: defineMessage({
|
|
id: 'muralpay.document-type.national-id',
|
|
defaultMessage: 'National ID',
|
|
}),
|
|
},
|
|
{
|
|
value: 'PASSPORT',
|
|
label: defineMessage({ id: 'muralpay.document-type.passport', defaultMessage: 'Passport' }),
|
|
},
|
|
{
|
|
value: 'RESIDENT_ID',
|
|
label: defineMessage({
|
|
id: 'muralpay.document-type.resident-id',
|
|
defaultMessage: 'Resident ID',
|
|
}),
|
|
},
|
|
{
|
|
value: 'RUC',
|
|
label: defineMessage({ id: 'muralpay.document-type.ruc', defaultMessage: 'RUC' }),
|
|
},
|
|
{
|
|
value: 'TAX_ID',
|
|
label: defineMessage({ id: 'muralpay.document-type.tax-id', defaultMessage: 'Tax ID' }),
|
|
},
|
|
]
|
|
|
|
const ACCOUNT_TYPE_OPTIONS = [
|
|
{
|
|
value: 'CHECKING',
|
|
label: defineMessage({ id: 'muralpay.account-type.checking', defaultMessage: 'Checking' }),
|
|
},
|
|
{
|
|
value: 'SAVINGS',
|
|
label: defineMessage({ id: 'muralpay.account-type.savings', defaultMessage: 'Savings' }),
|
|
},
|
|
]
|
|
|
|
export const MURALPAY_RAILS: Record<string, RailConfig> = {
|
|
fiat_usd: {
|
|
id: 'fiat_usd',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-usd.name',
|
|
defaultMessage: 'Bank Transfer (USD)',
|
|
}),
|
|
currency: 'USD',
|
|
type: 'fiat',
|
|
fee: '≈ 1.50% + $0.50',
|
|
railCode: 'usd',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'accountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
required: true,
|
|
options: ACCOUNT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.bank-account-number',
|
|
defaultMessage: 'Account number',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-account-number',
|
|
defaultMessage: 'Enter account number',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankRoutingNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.routing-number',
|
|
defaultMessage: 'Routing number',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-routing-number',
|
|
defaultMessage: 'Enter 9-digit routing number',
|
|
}),
|
|
pattern: '^[0-9]{9}$',
|
|
validate: (val) => (/^\d{9}$/.test(val) ? null : 'Must be exactly 9 digits'),
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_eur: {
|
|
id: 'fiat_eur',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-eur.name',
|
|
defaultMessage: 'Bank Transfer (EUR)',
|
|
}),
|
|
currency: 'EUR',
|
|
type: 'fiat',
|
|
fee: '≈ 1.60% + €1.00',
|
|
railCode: 'eur',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'iban',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.iban', defaultMessage: 'IBAN' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-iban',
|
|
defaultMessage: 'Enter IBAN',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.iban',
|
|
defaultMessage: 'International Bank Account Number',
|
|
}),
|
|
autocomplete: 'iban',
|
|
},
|
|
{
|
|
name: 'swiftBic',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.swift-bic', defaultMessage: 'SWIFT/BIC' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-swift-bic',
|
|
defaultMessage: 'Enter SWIFT/BIC code',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.swift-bic',
|
|
defaultMessage: 'Bank Identifier Code',
|
|
}),
|
|
autocomplete: 'swift',
|
|
},
|
|
{
|
|
name: 'country',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.country', defaultMessage: 'Country' }),
|
|
required: true,
|
|
autocomplete: 'off',
|
|
options: [
|
|
{
|
|
value: 'AT',
|
|
label: defineMessage({ id: 'muralpay.country.at', defaultMessage: 'Austria' }),
|
|
},
|
|
{
|
|
value: 'BE',
|
|
label: defineMessage({ id: 'muralpay.country.be', defaultMessage: 'Belgium' }),
|
|
},
|
|
{
|
|
value: 'CY',
|
|
label: defineMessage({ id: 'muralpay.country.cy', defaultMessage: 'Cyprus' }),
|
|
},
|
|
{
|
|
value: 'EE',
|
|
label: defineMessage({ id: 'muralpay.country.ee', defaultMessage: 'Estonia' }),
|
|
},
|
|
{
|
|
value: 'FI',
|
|
label: defineMessage({ id: 'muralpay.country.fi', defaultMessage: 'Finland' }),
|
|
},
|
|
{
|
|
value: 'FR',
|
|
label: defineMessage({ id: 'muralpay.country.fr', defaultMessage: 'France' }),
|
|
},
|
|
{
|
|
value: 'DE',
|
|
label: defineMessage({ id: 'muralpay.country.de', defaultMessage: 'Germany' }),
|
|
},
|
|
{
|
|
value: 'GR',
|
|
label: defineMessage({ id: 'muralpay.country.gr', defaultMessage: 'Greece' }),
|
|
},
|
|
{
|
|
value: 'IE',
|
|
label: defineMessage({ id: 'muralpay.country.ie', defaultMessage: 'Ireland' }),
|
|
},
|
|
{
|
|
value: 'IT',
|
|
label: defineMessage({ id: 'muralpay.country.it', defaultMessage: 'Italy' }),
|
|
},
|
|
{
|
|
value: 'LV',
|
|
label: defineMessage({ id: 'muralpay.country.lv', defaultMessage: 'Latvia' }),
|
|
},
|
|
{
|
|
value: 'LT',
|
|
label: defineMessage({ id: 'muralpay.country.lt', defaultMessage: 'Lithuania' }),
|
|
},
|
|
{
|
|
value: 'LU',
|
|
label: defineMessage({ id: 'muralpay.country.lu', defaultMessage: 'Luxembourg' }),
|
|
},
|
|
{
|
|
value: 'MT',
|
|
label: defineMessage({ id: 'muralpay.country.mt', defaultMessage: 'Malta' }),
|
|
},
|
|
{
|
|
value: 'NL',
|
|
label: defineMessage({ id: 'muralpay.country.nl', defaultMessage: 'Netherlands' }),
|
|
},
|
|
{
|
|
value: 'PT',
|
|
label: defineMessage({ id: 'muralpay.country.pt', defaultMessage: 'Portugal' }),
|
|
},
|
|
{
|
|
value: 'SK',
|
|
label: defineMessage({ id: 'muralpay.country.sk', defaultMessage: 'Slovakia' }),
|
|
},
|
|
{
|
|
value: 'ES',
|
|
label: defineMessage({ id: 'muralpay.country.es', defaultMessage: 'Spain' }),
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_mxn: {
|
|
id: 'fiat_mxn',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-mxn.name',
|
|
defaultMessage: 'Bank Transfer (MXN)',
|
|
}),
|
|
currency: 'MXN',
|
|
type: 'fiat',
|
|
fee: '≈ 1.90% + $0.50',
|
|
railCode: 'mxn',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.clabe', defaultMessage: 'CLABE' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-clabe',
|
|
defaultMessage: 'Enter 18-digit CLABE',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.clabe',
|
|
defaultMessage: 'Clave Bancaria Estandarizada (Mexican bank account number)',
|
|
}),
|
|
pattern: '^[0-9]{18}$',
|
|
validate: (val) => (/^\d{18}$/.test(val) ? null : 'CLABE must be exactly 18 digits'),
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_brl: {
|
|
id: 'fiat_brl',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-brl.name',
|
|
defaultMessage: 'PIX Transfer (BRL)',
|
|
}),
|
|
currency: 'BRL',
|
|
type: 'fiat',
|
|
fee: '≈ 2.30% + $0.25',
|
|
railCode: 'brl',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'pixAccountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.pix-key-type', defaultMessage: 'PIX key type' }),
|
|
required: true,
|
|
autocomplete: 'off',
|
|
options: [
|
|
{
|
|
value: 'PHONE',
|
|
label: defineMessage({ id: 'muralpay.pix-type.phone', defaultMessage: 'Phone number' }),
|
|
},
|
|
{
|
|
value: 'EMAIL',
|
|
label: defineMessage({ id: 'muralpay.pix-type.email', defaultMessage: 'Email' }),
|
|
},
|
|
{
|
|
value: 'DOCUMENT',
|
|
label: defineMessage({ id: 'muralpay.pix-type.document', defaultMessage: 'CPF/CNPJ' }),
|
|
},
|
|
{
|
|
value: 'BANK_ACCOUNT',
|
|
label: defineMessage({
|
|
id: 'muralpay.pix-type.bank-account',
|
|
defaultMessage: 'Bank account',
|
|
}),
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: 'pixEmail',
|
|
type: 'email',
|
|
label: defineMessage({ id: 'muralpay.field.pix-email', defaultMessage: 'PIX email' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-pix-email',
|
|
defaultMessage: 'Enter PIX email',
|
|
}),
|
|
autocomplete: 'email',
|
|
},
|
|
{
|
|
name: 'pixPhone',
|
|
type: 'tel',
|
|
label: defineMessage({ id: 'muralpay.field.pix-phone', defaultMessage: 'PIX phone' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.pix-phone',
|
|
defaultMessage: '+55...',
|
|
}),
|
|
autocomplete: 'tel',
|
|
},
|
|
{
|
|
name: 'branchCode',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.branch-code', defaultMessage: 'Branch code' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-branch-code',
|
|
defaultMessage: 'Enter branch code',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'documentNumber',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.cpf-cnpj', defaultMessage: 'CPF/CNPJ' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-cpf-cnpj',
|
|
defaultMessage: 'Enter CPF or CNPJ',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.cpf-cnpj',
|
|
defaultMessage: 'Brazilian tax identification number',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_cop: {
|
|
id: 'fiat_cop',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-cop.name',
|
|
defaultMessage: 'Bank Transfer (COP)',
|
|
}),
|
|
currency: 'COP',
|
|
type: 'fiat',
|
|
fee: '≈ 1.95% + $0.35',
|
|
railCode: 'cop',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'phoneNumber',
|
|
type: 'tel',
|
|
label: defineMessage({ id: 'muralpay.field.phone-number', defaultMessage: 'Phone number' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.phone-cop',
|
|
defaultMessage: '+57...',
|
|
}),
|
|
autocomplete: 'tel',
|
|
},
|
|
{
|
|
name: 'accountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
required: true,
|
|
options: ACCOUNT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.bank-account-number',
|
|
defaultMessage: 'Account number',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.enter-account-number',
|
|
defaultMessage: 'Enter account number',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'documentType',
|
|
type: 'select',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.document-type',
|
|
defaultMessage: 'Document type',
|
|
}),
|
|
required: true,
|
|
options: DOCUMENT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_ars: {
|
|
id: 'fiat_ars',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-ars.name',
|
|
defaultMessage: 'Bank Transfer (ARS)',
|
|
}),
|
|
currency: 'ARS',
|
|
type: 'fiat',
|
|
fee: '≈ 1.50% + $0.00',
|
|
railCode: 'ars',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.account-number-cbu-cvu',
|
|
defaultMessage: 'Account number (CBU/CVU)',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.cbu-cvu',
|
|
defaultMessage: 'Enter CBU or CVU',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.cbu-cvu',
|
|
defaultMessage: 'Clave Bancaria Uniforme or Clave Virtual Uniforme',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'documentNumber',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.cuit-cuil', defaultMessage: 'CUIT/CUIL' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.cuit-cuil',
|
|
defaultMessage: 'Enter CUIT or CUIL',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.cuit-cuil',
|
|
defaultMessage: 'Argentine tax ID',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumberType',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.account-number-type',
|
|
defaultMessage: 'Account number type',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.cbu-cvu-type',
|
|
defaultMessage: 'CBU or CVU',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_clp: {
|
|
id: 'fiat_clp',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-clp.name',
|
|
defaultMessage: 'Bank Transfer (CLP)',
|
|
}),
|
|
currency: 'CLP',
|
|
type: 'fiat',
|
|
fee: '≈ 1.95% + $1.20',
|
|
railCode: 'clp',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'accountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
required: true,
|
|
options: ACCOUNT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.account-number',
|
|
defaultMessage: 'Account number',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.account-number',
|
|
defaultMessage: 'Enter account number',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'documentType',
|
|
type: 'select',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.document-type',
|
|
defaultMessage: 'Document type',
|
|
}),
|
|
required: true,
|
|
options: DOCUMENT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_crc: {
|
|
id: 'fiat_crc',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-crc.name',
|
|
defaultMessage: 'Bank Transfer (CRC)',
|
|
}),
|
|
currency: 'CRC',
|
|
type: 'fiat',
|
|
fee: '≈ 2.05% + $0.80',
|
|
railCode: 'crc',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'iban',
|
|
type: 'text',
|
|
label: defineMessage({ id: 'muralpay.field.iban', defaultMessage: 'IBAN' }),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.iban-crc',
|
|
defaultMessage: 'Enter Costa Rican IBAN',
|
|
}),
|
|
autocomplete: 'iban',
|
|
},
|
|
{
|
|
name: 'documentType',
|
|
type: 'select',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.document-type',
|
|
defaultMessage: 'Document type',
|
|
}),
|
|
required: true,
|
|
options: DOCUMENT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
fiat_pen: {
|
|
id: 'fiat_pen',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-pen.name',
|
|
defaultMessage: 'Bank Transfer (PEN)',
|
|
}),
|
|
currency: 'PEN',
|
|
type: 'fiat',
|
|
fee: '≈ 2.15% + $1.00',
|
|
railCode: 'pen',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'documentType',
|
|
type: 'select',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.document-type',
|
|
defaultMessage: 'Document type',
|
|
}),
|
|
required: true,
|
|
options: DOCUMENT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.account-number-cci',
|
|
defaultMessage: 'Account number (CCI)',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.cci',
|
|
defaultMessage: 'Enter 20-digit CCI',
|
|
}),
|
|
helpText: defineMessage({
|
|
id: 'muralpay.help.cci',
|
|
defaultMessage: 'Código de Cuenta Interbancaria',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'accountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
required: true,
|
|
options: ACCOUNT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
// fiat_bob: {
|
|
// id: 'fiat_bob',
|
|
// name: defineMessage({
|
|
// id: 'muralpay.rail.fiat-bob.name',
|
|
// defaultMessage: 'Bank Transfer (BOB)',
|
|
// }),
|
|
// currency: 'BOB',
|
|
// type: 'fiat',
|
|
// fee: 'TBD',
|
|
// railCode: 'bob',
|
|
// requiresBankName: true,
|
|
// fields: [
|
|
// {
|
|
// name: 'bankAccountNumber',
|
|
// type: 'text',
|
|
// label: defineMessage({
|
|
// id: 'muralpay.field.account-number',
|
|
// defaultMessage: 'Account number',
|
|
// }),
|
|
// required: true,
|
|
// placeholder: defineMessage({
|
|
// id: 'muralpay.placeholder.account-number',
|
|
// defaultMessage: 'Enter account number',
|
|
// }),
|
|
// autocomplete: 'off',
|
|
// },
|
|
// {
|
|
// name: 'documentType',
|
|
// type: 'select',
|
|
// label: defineMessage({
|
|
// id: 'muralpay.field.document-type',
|
|
// defaultMessage: 'Document type',
|
|
// }),
|
|
// required: true,
|
|
// options: DOCUMENT_TYPE_OPTIONS,
|
|
// autocomplete: 'off',
|
|
// },
|
|
// ],
|
|
// },
|
|
|
|
fiat_zar: {
|
|
id: 'fiat_zar',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-zar.name',
|
|
defaultMessage: 'Bank Transfer (ZAR)',
|
|
}),
|
|
currency: 'ZAR',
|
|
type: 'fiat',
|
|
fee: '≈ 2.40% + $1.50',
|
|
railCode: 'zar',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'accountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
required: true,
|
|
options: ACCOUNT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.account-number',
|
|
defaultMessage: 'Account number',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.account-number',
|
|
defaultMessage: 'Enter account number',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
'fiat_usd-peru': {
|
|
id: 'fiat_usd-peru',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.fiat-usd-peru.name',
|
|
defaultMessage: 'Bank Transfer (USD - Peru)',
|
|
}),
|
|
currency: 'USD',
|
|
type: 'fiat',
|
|
fee: '≈ 1.50% + $5.00',
|
|
railCode: 'usd-peru',
|
|
requiresBankName: true,
|
|
fields: [
|
|
{
|
|
name: 'accountType',
|
|
type: 'select',
|
|
label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
required: true,
|
|
options: ACCOUNT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'bankAccountNumber',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.account-number',
|
|
defaultMessage: 'Account number',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.account-number',
|
|
defaultMessage: 'Enter account number',
|
|
}),
|
|
autocomplete: 'off',
|
|
},
|
|
{
|
|
name: 'documentType',
|
|
type: 'select',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.document-type',
|
|
defaultMessage: 'Document type',
|
|
}),
|
|
required: true,
|
|
options: DOCUMENT_TYPE_OPTIONS,
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
// 'fiat_usd-china': {
|
|
// id: 'fiat_usd-china',
|
|
// name: defineMessage({
|
|
// id: 'muralpay.rail.fiat-usd-china.name',
|
|
// defaultMessage: 'Bank Transfer (USD - China)',
|
|
// }),
|
|
// currency: 'USD',
|
|
// type: 'fiat',
|
|
// fee: 'TBD',
|
|
// railCode: 'usd-china',
|
|
// requiresBankName: false,
|
|
// fields: [
|
|
// {
|
|
// name: 'bankName',
|
|
// type: 'text',
|
|
// label: defineMessage({ id: 'muralpay.field.bank-name', defaultMessage: 'Bank Name' }),
|
|
// required: true,
|
|
// placeholder: defineMessage({
|
|
// id: 'muralpay.placeholder.bank-name',
|
|
// defaultMessage: 'Enter bank name',
|
|
// }),
|
|
// autocomplete: 'off',
|
|
// },
|
|
// {
|
|
// name: 'accountType',
|
|
// type: 'select',
|
|
// label: defineMessage({ id: 'muralpay.field.account-type', defaultMessage: 'Account type' }),
|
|
// required: true,
|
|
// options: ACCOUNT_TYPE_OPTIONS,
|
|
// autocomplete: 'off',
|
|
// },
|
|
// {
|
|
// name: 'bankAccountNumber',
|
|
// type: 'text',
|
|
// label: defineMessage({
|
|
// id: 'muralpay.field.account-number',
|
|
// defaultMessage: 'Account number',
|
|
// }),
|
|
// required: true,
|
|
// placeholder: defineMessage({
|
|
// id: 'muralpay.placeholder.account-number',
|
|
// defaultMessage: 'Enter account number',
|
|
// }),
|
|
// autocomplete: 'off',
|
|
// },
|
|
// {
|
|
// name: 'documentType',
|
|
// type: 'select',
|
|
// label: defineMessage({
|
|
// id: 'muralpay.field.document-type',
|
|
// defaultMessage: 'Document type',
|
|
// }),
|
|
// required: true,
|
|
// options: DOCUMENT_TYPE_OPTIONS,
|
|
// autocomplete: 'off',
|
|
// },
|
|
// {
|
|
// name: 'phoneNumber',
|
|
// type: 'tel',
|
|
// label: defineMessage({ id: 'muralpay.field.phone-number', defaultMessage: 'Phone number' }),
|
|
// required: true,
|
|
// placeholder: defineMessage({
|
|
// id: 'muralpay.placeholder.phone-china',
|
|
// defaultMessage: '+86...',
|
|
// }),
|
|
// autocomplete: 'tel',
|
|
// },
|
|
// {
|
|
// name: 'address',
|
|
// type: 'text',
|
|
// label: defineMessage({ id: 'muralpay.field.address', defaultMessage: 'Address' }),
|
|
// required: true,
|
|
// placeholder: defineMessage({
|
|
// id: 'muralpay.placeholder.address',
|
|
// defaultMessage: 'Enter address',
|
|
// }),
|
|
// autocomplete: 'street-address',
|
|
// },
|
|
// {
|
|
// name: 'swiftBic',
|
|
// type: 'text',
|
|
// label: defineMessage({ id: 'muralpay.field.swift-bic', defaultMessage: 'SWIFT/BIC' }),
|
|
// required: true,
|
|
// placeholder: defineMessage({
|
|
// id: 'muralpay.placeholder.swift-bic',
|
|
// defaultMessage: 'Enter SWIFT/BIC code',
|
|
// }),
|
|
// autocomplete: 'swift',
|
|
// },
|
|
// ],
|
|
// },
|
|
|
|
blockchain_usdc_polygon: {
|
|
id: 'blockchain_usdc_polygon',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.usdc-polygon.name',
|
|
defaultMessage: 'Crypto (USDC)',
|
|
}),
|
|
currency: 'USDC',
|
|
type: 'crypto',
|
|
fee: '≈ 1%',
|
|
blockchain: 'POLYGON',
|
|
warningMessage: defineMessage({
|
|
id: 'muralpay.warning.wallet-address',
|
|
defaultMessage:
|
|
'Double-check your wallet address. Funds sent to an incorrect address cannot be recovered.',
|
|
}),
|
|
fields: [
|
|
{
|
|
name: 'walletAddress',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.wallet-address',
|
|
defaultMessage: 'Wallet address',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.wallet-address-eth',
|
|
defaultMessage: '0x...',
|
|
}),
|
|
pattern: '^0x[a-fA-F0-9]{40}$',
|
|
validate: (val) =>
|
|
/^0x[a-fA-F0-9]{40}$/.test(val) ? null : 'Must be a valid Ethereum address (0x...)',
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
blockchain_usdc_base: {
|
|
id: 'blockchain_usdc_base',
|
|
name: defineMessage({ id: 'muralpay.rail.usdc-base.name', defaultMessage: 'USDC (Base)' }),
|
|
currency: 'USDC',
|
|
type: 'crypto',
|
|
fee: '≈ 1%',
|
|
blockchain: 'BASE',
|
|
warningMessage: defineMessage({
|
|
id: 'muralpay.warning.wallet-address',
|
|
defaultMessage:
|
|
'Double-check your wallet address. Funds sent to an incorrect address cannot be recovered.',
|
|
}),
|
|
fields: [
|
|
{
|
|
name: 'walletAddress',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.wallet-address',
|
|
defaultMessage: 'Wallet address',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.wallet-address-eth',
|
|
defaultMessage: '0x...',
|
|
}),
|
|
pattern: '^0x[a-fA-F0-9]{40}$',
|
|
validate: (val) =>
|
|
/^0x[a-fA-F0-9]{40}$/.test(val) ? null : 'Must be a valid Ethereum address (0x...)',
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
blockchain_usdc_ethereum: {
|
|
id: 'blockchain_usdc_ethereum',
|
|
name: defineMessage({
|
|
id: 'muralpay.rail.usdc-ethereum.name',
|
|
defaultMessage: 'USDC (Ethereum)',
|
|
}),
|
|
currency: 'USDC',
|
|
type: 'crypto',
|
|
fee: '≈ 1%',
|
|
blockchain: 'ETHEREUM',
|
|
warningMessage: defineMessage({
|
|
id: 'muralpay.warning.wallet-address',
|
|
defaultMessage:
|
|
'Double-check your wallet address. Funds sent to an incorrect address cannot be recovered.',
|
|
}),
|
|
fields: [
|
|
{
|
|
name: 'walletAddress',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.wallet-address',
|
|
defaultMessage: 'Wallet address',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.wallet-address-eth',
|
|
defaultMessage: '0x...',
|
|
}),
|
|
pattern: '^0x[a-fA-F0-9]{40}$',
|
|
validate: (val) =>
|
|
/^0x[a-fA-F0-9]{40}$/.test(val) ? null : 'Must be a valid Ethereum address (0x...)',
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
|
|
blockchain_usdc_celo: {
|
|
id: 'blockchain_usdc_celo',
|
|
name: defineMessage({ id: 'muralpay.rail.usdc-celo.name', defaultMessage: 'USDC (Celo)' }),
|
|
currency: 'USDC',
|
|
type: 'crypto',
|
|
fee: '≈ 1%',
|
|
blockchain: 'CELO',
|
|
warningMessage: defineMessage({
|
|
id: 'muralpay.warning.wallet-address',
|
|
defaultMessage:
|
|
'Double-check your wallet address. Funds sent to an incorrect address cannot be recovered.',
|
|
}),
|
|
fields: [
|
|
{
|
|
name: 'walletAddress',
|
|
type: 'text',
|
|
label: defineMessage({
|
|
id: 'muralpay.field.wallet-address',
|
|
defaultMessage: 'Wallet address',
|
|
}),
|
|
required: true,
|
|
placeholder: defineMessage({
|
|
id: 'muralpay.placeholder.wallet-address-eth',
|
|
defaultMessage: '0x...',
|
|
}),
|
|
pattern: '^0x[a-fA-F0-9]{40}$',
|
|
validate: (val) =>
|
|
/^0x[a-fA-F0-9]{40}$/.test(val) ? null : 'Must be a valid Ethereum address (0x...)',
|
|
autocomplete: 'off',
|
|
},
|
|
],
|
|
},
|
|
}
|
|
|
|
export function getAvailableRails(): string[] {
|
|
return Object.keys(MURALPAY_RAILS)
|
|
}
|
|
|
|
export function getRailsByType(type: 'fiat' | 'crypto'): RailConfig[] {
|
|
return Object.values(MURALPAY_RAILS).filter((rail) => rail.type === type)
|
|
}
|
|
|
|
export function getRailConfig(railId: string): RailConfig | undefined {
|
|
return MURALPAY_RAILS[railId]
|
|
}
|