UNPKG

@mixxtor/currencyx-js

Version:

Modern TypeScript currency converter with type inference and multiple providers (Google Finance, Fixer.io). Framework agnostic with clean architecture.

1,376 lines (1,375 loc) 268 kB
/** * Main contract that all currency exchanges must implement */ interface CurrencyExchangeContract { /** * Base currency code. Default is 'USD'. */ base: CurrencyCode; /** * Get supported currencies */ getList(): CurrencyInfo[]; /** * Set base currency */ setBase?(currency: CurrencyCode): this; /** * Set API key (if required by exchange) */ setKey?(key: string): this; /** * Retrieves the latest currency conversion rates. * * @param {ExchangeRatesParams} params - The parameters for getting exchange rates. * @param {CurrencyCode} params.base - The base currency code to retrieve rates for. * @param {CurrencyCode[]} params.codes - The currency codes to retrieve rates for. */ latestRates(params?: ExchangeRatesParams): Promise<ExchangeRatesResult>; /** * Retrieves the currency conversion rate. * * @param {ConvertParams} params - The parameters for converting currency. * @param {number} params.amount - The amount to convert. * @param {CurrencyCode} params.from - The currency code to convert from. * @param {CurrencyCode} params.to - The currency code to convert to. Defaults to 'USD'. */ convert(params: ConvertParams): Promise<ConversionResult>; /** * Retrieves the currency conversion rate. * * @param {CurrencyCode} from - The currency code to convert from. * @param {CurrencyCode} to - The currency code to convert to. Defaults to 'USD'. */ getConvertRate(from: CurrencyCode, to: CurrencyCode, currencyList?: Record<string, any>[]): Promise<number | undefined>; /** * Round currency value * * @param {number} value - Currency value * @param {TRoundOptions} options * @param {number} options.precision - Decimal precision * @param {string} options.direction - Round direction */ round(value: number, options?: TRoundOptions): number; } declare abstract class BaseCurrencyExchange implements CurrencyExchangeContract { /** * Exchange name - must be implemented by subclasses */ abstract readonly name: string; /** * Base currency code. Default is 'USD'. */ base: CurrencyCode; /** * Get all supported currency codes */ get currencies(): ("AED" | "AFN" | "ALL" | "AMD" | "ANG" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BGN" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BRL" | "BSD" | "BTC" | "BTN" | "BWP" | "BYR" | "BYN" | "BZD" | "CAD" | "CDF" | "CHF" | "CLF" | "CLP" | "CNY" | "COP" | "CRC" | "CUC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HRK" | "HTG" | "HUF" | "IDR" | "ILS" | "INR" | "IQD" | "IRR" | "ISK" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LTL" | "LVL" | "LYD" | "MAD" | "MDL" | "MGA" | "MKD" | "MMK" | "MNT" | "MOP" | "MRO" | "MUR" | "MVR" | "MWK" | "MXN" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "RON" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SOS" | "SRD" | "STN" | "STD" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "UYU" | "UZS" | "VED" | "VEF" | "VND" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XCD" | "XDR" | "XOF" | "XPF" | "YER" | "ZAR" | "ZMK" | "ZMW" | "ZWL")[]; /** * Get all constant currencies */ getList(): ({ readonly code: "AED"; readonly numeric_code: "784"; readonly name: "United Arab Emirates dirham"; readonly symbol: "د.إ"; readonly round: 1; readonly decimal: 2; readonly delimiter: "."; readonly short_format: "Dhs. {{amount}}"; readonly explicit_format: "Dhs. {{amount}} AED"; readonly countries: readonly ["AE"]; } | { readonly code: "AFN"; readonly numeric_code: "971"; readonly name: "Afghan afghani"; readonly symbol: "؋"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}}؋"; readonly explicit_format: "{{amount}}؋ AFN"; readonly countries: readonly ["AF"]; } | { readonly code: "ALL"; readonly numeric_code: "008"; readonly name: "Albanian lek"; readonly symbol: "Lek"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Lek {{amount}}"; readonly explicit_format: "Lek {{amount}} ALL"; readonly countries: readonly ["AL"]; } | { readonly code: "AMD"; readonly numeric_code: "051"; readonly name: "Armenian dram"; readonly symbol: "֏"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} AMD"; readonly explicit_format: "{{amount}} AMD"; readonly countries: readonly ["AM"]; } | { readonly code: "ANG"; readonly numeric_code: "532"; readonly name: "Netherlands Antillean guilder"; readonly symbol: "ƒ"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "ƒ;{{amount}}"; readonly explicit_format: "{{amount}} NAƒ;"; readonly countries: readonly ["CW", "SX"]; } | { readonly code: "AOA"; readonly numeric_code: "973"; readonly name: "Angolan kwanza"; readonly symbol: "Kz"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Kz{{amount}}"; readonly explicit_format: "Kz{{amount}} AOA"; readonly countries: readonly ["AO"]; } | { readonly code: "ARS"; readonly numeric_code: "032"; readonly name: "Argentine peso"; readonly symbol: "AR$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} ARS"; readonly countries: readonly ["AR"]; } | { readonly code: "AUD"; readonly numeric_code: "036"; readonly name: "Australian dollar"; readonly symbol: "AU$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} AUD"; readonly countries: readonly ["AU", "CX", "CC", "HM", "KI", "NR", "NF", "TV"]; } | { readonly code: "AWG"; readonly numeric_code: "533"; readonly name: "Aruban florin"; readonly symbol: "Afl."; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Afl{{amount}}"; readonly explicit_format: "Afl{{amount}} AWG"; readonly countries: readonly ["AW"]; } | { readonly code: "AZN"; readonly numeric_code: "944"; readonly name: "Azerbaijani manat"; readonly symbol: "₼"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "m.{{amount}}"; readonly explicit_format: "m.{{amount}} AZN"; readonly countries: readonly ["AZ"]; } | { readonly code: "BAM"; readonly numeric_code: "977"; readonly name: "Bosnia and Herzegovina convertible mark"; readonly symbol: "KM"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "KM {{amount}}"; readonly explicit_format: "KM {{amount}} BAM"; readonly countries: readonly ["BA"]; } | { readonly code: "BBD"; readonly numeric_code: "052"; readonly name: "Barbados dollar"; readonly symbol: "$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} Bds"; readonly countries: readonly ["BB"]; } | { readonly code: "BDT"; readonly numeric_code: "050"; readonly name: "Bangladeshi taka"; readonly symbol: "৳"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Tk {{amount}}"; readonly explicit_format: "Tk {{amount}} BDT"; readonly countries: readonly ["BD"]; } | { readonly code: "BGN"; readonly numeric_code: "975"; readonly name: "Bulgarian lev"; readonly symbol: "лв"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} лв"; readonly explicit_format: "{{amount}} лв BGN"; readonly countries: readonly ["BG"]; } | { readonly code: "BHD"; readonly numeric_code: "048"; readonly name: "Bahraini dinar"; readonly symbol: ".د.ب"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} BD"; readonly explicit_format: "{{amount}} BHD"; readonly countries: readonly ["BH"]; } | { readonly code: "BIF"; readonly numeric_code: "108"; readonly name: "Burundian franc"; readonly symbol: "FBu"; readonly round: 1000; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "FBu. {{amount}}"; readonly explicit_format: "FBu. {{amount}} BIF"; readonly countries: readonly ["BI"]; } | { readonly code: "BMD"; readonly numeric_code: "060"; readonly name: "Bermudian dollar"; readonly symbol: "$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "BD${{amount}}"; readonly explicit_format: "BD${{amount}} BMD"; readonly countries: readonly ["BM"]; } | { readonly code: "BND"; readonly numeric_code: "096"; readonly name: "Brunei dollar"; readonly symbol: "BN$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} BND"; readonly countries: readonly ["BN"]; } | { readonly code: "BOB"; readonly numeric_code: "068"; readonly name: "Boliviano"; readonly symbol: "Bs"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Bs{{amount}}"; readonly explicit_format: "Bs{{amount}} BOB"; readonly countries: readonly ["BO"]; } | { readonly code: "BRL"; readonly numeric_code: "986"; readonly name: "Brazilian real"; readonly symbol: "R$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "R$ {{amount}}"; readonly explicit_format: "R$ {{amount}} BRL"; readonly countries: readonly ["BR"]; } | { readonly code: "BSD"; readonly numeric_code: "044"; readonly name: "Bahamian dollar"; readonly symbol: "$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "BS${{amount}}"; readonly explicit_format: "BS${{amount}} BSD"; readonly countries: readonly ["BS"]; } | { readonly code: "BTC"; readonly numeric_code: "BTC"; readonly name: "Bitcoin"; readonly symbol: "₿"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly []; } | { readonly code: "BTN"; readonly numeric_code: "064"; readonly name: "Bhutanese ngultrum"; readonly symbol: "Nu."; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "Nu {{amount}}"; readonly explicit_format: "Nu {{amount}} BTN"; readonly countries: readonly ["BT"]; } | { readonly code: "BWP"; readonly numeric_code: "072"; readonly name: "Botswana pula"; readonly symbol: "P"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "P{{amount}}"; readonly explicit_format: "P{{amount}} BWP"; readonly countries: readonly ["BW"]; } | { readonly code: "BYR"; readonly numeric_code: "974"; readonly name: "Belarusian ruble (pre-2016)"; readonly symbol: "Rbl"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "Br {{amount}}"; readonly explicit_format: "Br {{amount}} BYR"; readonly countries: readonly ["BY"]; } | { readonly code: "BYN"; readonly numeric_code: "933"; readonly name: "Belarusian ruble"; readonly symbol: "Rbl"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "Br {{amount}}"; readonly explicit_format: "Br {{amount}} BYN"; readonly countries: readonly ["BY"]; } | { readonly code: "BZD"; readonly numeric_code: "084"; readonly name: "Belize dollar"; readonly symbol: "BZ$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "BZ${{amount}}"; readonly explicit_format: "BZ${{amount}} BZD"; readonly countries: readonly ["BZ"]; } | { readonly code: "CAD"; readonly numeric_code: "124"; readonly name: "Canadian dollar"; readonly symbol: "CA$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} CAD"; readonly countries: readonly ["CA"]; } | { readonly code: "CDF"; readonly numeric_code: "976"; readonly name: "Congolese franc"; readonly symbol: "FC"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "FC{{amount}}"; readonly explicit_format: "FC{{amount}} CDF"; readonly countries: readonly ["CD"]; } | { readonly code: "CHF"; readonly numeric_code: "756"; readonly name: "Swiss franc"; readonly symbol: "S₣"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "S₣{{amount}}"; readonly explicit_format: "S₣{{amount}} CHF"; readonly countries: readonly ["CH", "LI"]; } | { readonly code: "CLF"; readonly numeric_code: "990"; readonly name: "Chilean Unit of Account (UF)"; readonly symbol: "UF"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "UF {{amount}}"; readonly explicit_format: "UF{{amount}} CLF"; readonly countries: readonly ["CL"]; } | { readonly code: "CLP"; readonly numeric_code: "152"; readonly name: "Chilean peso"; readonly symbol: "CL$"; readonly round: 100; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} CLP"; readonly countries: readonly ["CL"]; } | { readonly code: "CNY"; readonly numeric_code: "156"; readonly name: "Renminbi"; readonly symbol: "CN¥"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "¥{{amount}}"; readonly explicit_format: "¥{{amount}} CNY"; readonly countries: readonly ["CN"]; } | { readonly code: "COP"; readonly numeric_code: "170"; readonly name: "Colombian peso"; readonly symbol: "CO$"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} COP"; readonly countries: readonly ["CO"]; } | { readonly code: "CRC"; readonly numeric_code: "188"; readonly name: "Costa Rican colon"; readonly symbol: "₡"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "₡{{amount}}"; readonly explicit_format: "₡ {{amount}} CRC"; readonly countries: readonly ["CR"]; } | { readonly code: "CUC"; readonly numeric_code: "931"; readonly name: "Cuban convertible peso (pre-2022)"; readonly symbol: "$"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "CUC${{amount}} CUC"; readonly countries: readonly ["CU"]; } | { readonly code: "CUP"; readonly numeric_code: "192"; readonly name: "Cuban peso"; readonly symbol: "$"; readonly round: 10; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "$MN {{amount}} CUP"; readonly countries: readonly ["CU"]; } | { readonly code: "CVE"; readonly numeric_code: "132"; readonly name: "Cape Verdean escudo"; readonly symbol: "CV$"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}}$"; readonly explicit_format: "{{amount}}$ CVE"; readonly countries: readonly ["CV"]; } | { readonly code: "CZK"; readonly numeric_code: "203"; readonly name: "Czech koruna"; readonly symbol: "Kč"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} Kč"; readonly explicit_format: "{{amount}} Kč"; readonly countries: readonly ["CZ"]; } | { readonly code: "DJF"; readonly numeric_code: "262"; readonly name: "Djiboutian franc"; readonly symbol: "Fdj"; readonly round: 100; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} Fdj"; readonly explicit_format: "{{amount}} DJF"; readonly countries: readonly ["DJ"]; } | { readonly code: "DKK"; readonly numeric_code: "208"; readonly name: "Danish krone"; readonly symbol: "kr."; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} kr"; readonly explicit_format: "{{amount}} DKK"; readonly countries: readonly ["DK", "FO", "GL"]; } | { readonly code: "DOP"; readonly numeric_code: "214"; readonly name: "Dominican peso"; readonly symbol: "RD$"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "RD$ {{amount}}"; readonly explicit_format: "RD$ {{amount}}"; readonly countries: readonly ["DO"]; } | { readonly code: "DZD"; readonly numeric_code: "012"; readonly name: "Algerian dinar"; readonly symbol: "DA"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "DA {{amount}}"; readonly explicit_format: "DA {{amount}} DZD"; readonly countries: readonly ["DZ"]; } | { readonly code: "EGP"; readonly numeric_code: "818"; readonly name: "Egyptian pound"; readonly symbol: "E£"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "LE {{amount}}"; readonly explicit_format: "LE {{amount}} EGP"; readonly countries: readonly ["EG"]; } | { readonly code: "ERN"; readonly numeric_code: "232"; readonly name: "Eritrean nakfa"; readonly symbol: "Nfk"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Nkf {{amount}}"; readonly explicit_format: "Nkf {{amount}} ERN"; readonly countries: readonly ["ER"]; } | { readonly code: "ETB"; readonly numeric_code: "230"; readonly name: "Ethiopian birr"; readonly symbol: "Br"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Br{{amount}}"; readonly explicit_format: "Br{{amount}} ETB"; readonly countries: readonly ["ET"]; } | { readonly code: "EUR"; readonly numeric_code: "978"; readonly name: "Euro"; readonly symbol: "€"; readonly round: 0.95; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "€{{amount}}"; readonly explicit_format: "€{{amount}} EUR"; readonly countries: readonly ["AX", "EU", "AD", "AT", "BE", "HR", "CY", "EE", "FI", "FR", "GF", "TF", "DE", "GR", "GP", "IE", "IT", "XK", "LV", "LT", "LU", "MT", "MQ", "YT", "MC", "ME", "NL", "PT", "RE", "BL", "MF", "PM", "SM", "SK", "SI", "ES", "VA"]; } | { readonly code: "FJD"; readonly numeric_code: "242"; readonly name: "Fiji dollar"; readonly symbol: "$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "FJ${{amount}}"; readonly countries: readonly ["FJ"]; } | { readonly code: "FKP"; readonly numeric_code: "238"; readonly name: "Falkland Islands pound"; readonly symbol: "£"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "£{{amount}}"; readonly explicit_format: "£{{amount}} FKP"; readonly countries: readonly ["FK"]; } | { readonly code: "GBP"; readonly numeric_code: "826"; readonly name: "Pound sterling"; readonly symbol: "£"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "£{{amount}}"; readonly explicit_format: "£{{amount}} GBP"; readonly countries: readonly ["UK", "IM", "JE", "GG", "SH-TA"]; } | { readonly code: "GEL"; readonly numeric_code: "981"; readonly name: "Georgian lari"; readonly symbol: "₾"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "₾{{amount}}"; readonly explicit_format: "₾{{amount}} GEL"; readonly countries: readonly ["GE"]; } | { readonly code: "GHS"; readonly numeric_code: "936"; readonly name: "Ghanaian cedi"; readonly symbol: "GH₵"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "GH₵{{amount}}"; readonly explicit_format: "GH₵{{amount}}"; readonly countries: readonly ["GH"]; } | { readonly code: "GIP"; readonly numeric_code: "292"; readonly name: "Gibraltar pound"; readonly symbol: "£"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "£{{amount}}"; readonly explicit_format: "£{{amount}} GIP"; readonly countries: readonly ["GI"]; } | { readonly code: "GMD"; readonly numeric_code: "270"; readonly name: "Gambian dalasi"; readonly symbol: "D"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "D {{amount}}"; readonly explicit_format: "D {{amount}} GMD"; readonly countries: readonly ["GM"]; } | { readonly code: "GNF"; readonly numeric_code: "324"; readonly name: "Guinean franc"; readonly symbol: "FG"; readonly round: 1000; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "FG {{amount}}"; readonly explicit_format: "FG {{amount}} GNF"; readonly countries: readonly ["GN"]; } | { readonly code: "GTQ"; readonly numeric_code: "320"; readonly name: "Guatemalan quetzal"; readonly symbol: "Q"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Q {{amount}}"; readonly explicit_format: "Q{{amount}} GTQ"; readonly countries: readonly ["GT"]; } | { readonly code: "GYD"; readonly numeric_code: "328"; readonly name: "Guyanese dollar"; readonly symbol: "G$"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "G$ ${{amount}}"; readonly explicit_format: "${{amount}} GYD"; readonly countries: readonly ["GY"]; } | { readonly code: "HKD"; readonly numeric_code: "344"; readonly name: "Hong Kong dollar"; readonly symbol: "HK$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "HK${{amount}}"; readonly countries: readonly ["HK"]; } | { readonly code: "HNL"; readonly numeric_code: "340"; readonly name: "Honduran lempira"; readonly symbol: "L"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "L{{amount}}"; readonly explicit_format: "L {{amount}} HNL"; readonly countries: readonly ["HN"]; } | { readonly code: "HRK"; readonly numeric_code: "191"; readonly name: "Croatian dinar (pre-2023)"; readonly symbol: "kn"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "kn{{amount}}"; readonly explicit_format: "kn{{amount}} HRK"; readonly countries: readonly ["HR"]; } | { readonly code: "HTG"; readonly numeric_code: "332"; readonly name: "Haitian gourde"; readonly symbol: "G"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "G {{amount}}"; readonly explicit_format: "{{amount}} HTG"; readonly countries: readonly ["HT"]; } | { readonly code: "HUF"; readonly numeric_code: "348"; readonly name: "Hungarian forint"; readonly symbol: "Ft"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} Ft"; readonly explicit_format: "{{amount}} Ft"; readonly countries: readonly ["HU"]; } | { readonly code: "IDR"; readonly numeric_code: "360"; readonly name: "Indonesian rupiah"; readonly symbol: "Rp"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Rp {{amount}}"; readonly explicit_format: "Rp {{amount}} IDR"; readonly countries: readonly ["ID"]; } | { readonly code: "ILS"; readonly numeric_code: "376"; readonly name: "Israeli new shekel"; readonly symbol: "₪"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "₪{{amount}}"; readonly explicit_format: "{{amount}} NIS"; readonly countries: readonly ["IL"]; } | { readonly code: "INR"; readonly numeric_code: "356"; readonly name: "Indian rupee"; readonly symbol: "₹"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "₹{{amount}}"; readonly explicit_format: "Rs. {{amount}}"; readonly countries: readonly ["IN", "BT"]; } | { readonly code: "IQD"; readonly numeric_code: "368"; readonly name: "Iraqi dinar"; readonly symbol: "د.ع"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} IQD"; readonly explicit_format: "{{amount}} IQD"; readonly countries: readonly ["IQ"]; } | { readonly code: "IRR"; readonly numeric_code: "364"; readonly name: "Iranian rial"; readonly symbol: "﷼"; readonly round: 1000; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "﷼ {{amount}}"; readonly explicit_format: "﷼ {{amount}} IRR"; readonly countries: readonly ["IR"]; } | { readonly code: "ISK"; readonly numeric_code: "352"; readonly name: "Icelandic króna (plural: krónur)"; readonly symbol: "Ikr"; readonly round: 100; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} kr"; readonly explicit_format: "{{amount}} ISK"; readonly countries: readonly ["IS"]; } | { readonly code: "JMD"; readonly numeric_code: "388"; readonly name: "Jamaican dollar"; readonly symbol: "J$"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} JMD"; readonly countries: readonly ["JM"]; } | { readonly code: "JOD"; readonly numeric_code: "400"; readonly name: "Jordanian dinar"; readonly symbol: "د.أ"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} JD"; readonly explicit_format: "{{amount}} JOD"; readonly countries: readonly ["JO"]; } | { readonly code: "JPY"; readonly numeric_code: "392"; readonly name: "Japanese yen"; readonly symbol: "¥"; readonly round: 100; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "¥{{amount}}"; readonly explicit_format: "¥{{amount}} JPY"; readonly countries: readonly ["JP"]; } | { readonly code: "KES"; readonly numeric_code: "404"; readonly name: "Kenyan shilling"; readonly symbol: "Ksh"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "KSh{{amount}}"; readonly explicit_format: "KSh{{amount}}"; readonly countries: readonly ["KE"]; } | { readonly code: "KGS"; readonly numeric_code: "417"; readonly name: "Kyrgyzstani som"; readonly symbol: "лв"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "лв{{amount}}"; readonly explicit_format: "лв{{amount}}"; readonly countries: readonly ["KG"]; } | { readonly code: "KHR"; readonly numeric_code: "116"; readonly name: "Cambodian riel"; readonly symbol: "៛"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "KHR{{amount}}"; readonly explicit_format: "KHR{{amount}}"; readonly countries: readonly ["KH"]; } | { readonly code: "KMF"; readonly numeric_code: "174"; readonly name: "Comoro franc"; readonly symbol: "CF"; readonly round: 100; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} CF"; readonly explicit_format: "{{amount}} CF"; readonly countries: readonly ["KM"]; } | { readonly code: "KPW"; readonly numeric_code: "408"; readonly name: "North Korean won"; readonly symbol: "₩"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "₩{{amount}}"; readonly explicit_format: "₩{{amount}} KPW"; readonly countries: readonly ["KP"]; } | { readonly code: "KRW"; readonly numeric_code: "410"; readonly name: "South Korean won"; readonly symbol: "₩"; readonly round: 1000; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "₩{{amount}}"; readonly explicit_format: "₩{{amount}} KRW"; readonly countries: readonly ["KR"]; } | { readonly code: "KWD"; readonly numeric_code: "414"; readonly name: "Kuwaiti dinar"; readonly symbol: "KD"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "{{amount}} KD"; readonly explicit_format: "{{amount}} KWD"; readonly countries: readonly ["KW"]; } | { readonly code: "KYD"; readonly numeric_code: "136"; readonly name: "Cayman Islands dollar"; readonly symbol: "CI$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "${{amount}}"; readonly explicit_format: "${{amount}} KYD"; readonly countries: readonly ["KY"]; } | { readonly code: "KZT"; readonly numeric_code: "398"; readonly name: "Kazakhstani tenge"; readonly symbol: "₸"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "₸{{amount}}"; readonly explicit_format: "₸{{amount}} KZT"; readonly countries: readonly ["KZ"]; } | { readonly code: "LAK"; readonly numeric_code: "418"; readonly name: "Lao kip"; readonly symbol: "₭"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "₭{{amount}}"; readonly explicit_format: "₭{{amount}} LAK"; readonly countries: readonly ["LA"]; } | { readonly code: "LBP"; readonly numeric_code: "422"; readonly name: "Lebanese pound"; readonly symbol: "ل"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "L£{{amount}}"; readonly explicit_format: "L£{{amount}} LBP"; readonly countries: readonly ["LB"]; } | { readonly code: "LKR"; readonly numeric_code: "144"; readonly name: "Sri Lankan rupee"; readonly symbol: "රු"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "Rs {{amount}}"; readonly explicit_format: "Rs {{amount}} LKR"; readonly countries: readonly ["LK"]; } | { readonly code: "LRD"; readonly numeric_code: "430"; readonly name: "Liberian dollar"; readonly symbol: "L$"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "L${{amount}}"; readonly explicit_format: "L${{amount}} LRD"; readonly countries: readonly ["LR"]; } | { readonly code: "LSL"; readonly numeric_code: "426"; readonly name: "Lesotho loti"; readonly symbol: "M"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "M{{amount}}"; readonly explicit_format: "M{{amount}} LSL"; readonly countries: readonly ["LS"]; } | { readonly code: "LTL"; readonly numeric_code: "440"; readonly name: "Lithuanian litas (pre-1993)"; readonly symbol: "Lt"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "Lt {{amount}}"; readonly explicit_format: "Lt {{amount}} LTL"; readonly countries: readonly ["LT"]; } | { readonly code: "LVL"; readonly numeric_code: "428"; readonly name: "Latvian lats (pre-1993)"; readonly symbol: "ℒ︁𝓈"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "Ls {{amount}}"; readonly explicit_format: "Ls {{amount}} LVL"; readonly countries: readonly ["LV"]; } | { readonly code: "LYD"; readonly numeric_code: "434"; readonly name: "Libyan dinar"; readonly symbol: "ل.د"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "LD {{amount}}"; readonly explicit_format: "LD {{amount}} LYD"; readonly countries: readonly ["LY"]; } | { readonly code: "MAD"; readonly numeric_code: "504"; readonly name: "Moroccan dirham"; readonly symbol: ".د.م"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} dh"; readonly explicit_format: "Dh {{amount}} MAD"; readonly countries: readonly ["MA", "EH"]; } | { readonly code: "MDL"; readonly numeric_code: "498"; readonly name: "Moldovan leu"; readonly symbol: "MDL"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} MDL"; readonly explicit_format: "{{amount}} MDL"; readonly countries: readonly ["MD"]; } | { readonly code: "MGA"; readonly numeric_code: "969"; readonly name: "Malagasy ariary"; readonly symbol: "Ar"; readonly round: 0; readonly decimal: 0; readonly delimiter: ","; readonly short_format: "Ar {{amount}}"; readonly explicit_format: "Ar {{amount}} MGA"; readonly countries: readonly ["MG"]; } | { readonly code: "MKD"; readonly numeric_code: "807"; readonly name: "Macedonian denar"; readonly symbol: "MKD"; readonly round: 100; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "ден{{amount}}"; readonly explicit_format: "ден{{amount}} MKD"; readonly countries: readonly ["MK"]; } | { readonly code: "MMK"; readonly numeric_code: "104"; readonly name: "Myanmar kyat"; readonly symbol: "K"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "K{{amount}}"; readonly explicit_format: "K{{amount}} MMK"; readonly countries: readonly ["MM"]; } | { readonly code: "MNT"; readonly numeric_code: "496"; readonly name: "Mongolian tögrög"; readonly symbol: "₮"; readonly round: 1000; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "{{amount}} ₮"; readonly explicit_format: "{{amount}} MNT"; readonly countries: readonly ["MN"]; } | { readonly code: "MOP"; readonly numeric_code: "446"; readonly name: "Macanese pataca"; readonly symbol: "MOP$"; readonly round: 1; readonly decimal: 2; readonly delimiter: ","; readonly short_format: "MOP${{amount}}"; readonly explicit_format: "MOP${{amount}}"; readonly countries: readonly ["MO"]; } | { readonly code: "MRO"; readonly numeric_code: "478"; readonly name: "Mauritanian ouguiya (legacy code) [1973–2017]"; readonly symbol: "UM"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MR"]; } | { readonly code: "MUR"; readonly numeric_code: "480"; readonly name: "Mauritian rupee"; readonly symbol: "MURs"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MU"]; } | { readonly code: "MVR"; readonly numeric_code: "462"; readonly name: "Maldivian rufiyaa"; readonly symbol: "MVR"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MV"]; } | { readonly code: "MWK"; readonly numeric_code: "454"; readonly name: "Malawian kwacha"; readonly symbol: "MWK"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MW"]; } | { readonly code: "MXN"; readonly numeric_code: "484"; readonly name: "Mexican peso"; readonly symbol: "MX$"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MX"]; } | { readonly code: "MYR"; readonly numeric_code: "458"; readonly name: "Malaysian ringgit"; readonly symbol: "RM"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MY"]; } | { readonly code: "MZN"; readonly numeric_code: "943"; readonly name: "Mozambican metical"; readonly symbol: "MTn"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["MZ"]; } | { readonly code: "NAD"; readonly numeric_code: "516"; readonly name: "Namibian dollar"; readonly symbol: "N$"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["NA"]; } | { readonly code: "NGN"; readonly numeric_code: "566"; readonly name: "Nigerian naira"; readonly symbol: "₦"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["NG"]; } | { readonly code: "NIO"; readonly numeric_code: "558"; readonly name: "Nicaraguan córdoba"; readonly symbol: "C$"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["NI"]; } | { readonly code: "NOK"; readonly numeric_code: "578"; readonly name: "Norwegian krone"; readonly symbol: "Nkr"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["NO", "SJ", "BV"]; } | { readonly code: "NPR"; readonly numeric_code: "524"; readonly name: "Nepalese rupee"; readonly symbol: "NPRs"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["NP"]; } | { readonly code: "NZD"; readonly numeric_code: "554"; readonly name: "New Zealand dollar"; readonly symbol: "NZ$"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["NZ", "CK", "NU", "PN", "TK"]; } | { readonly code: "OMR"; readonly numeric_code: "512"; readonly name: "Omani rial"; readonly symbol: "OMR"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["OM"]; } | { readonly code: "PAB"; readonly numeric_code: "590"; readonly name: "Panamanian balboa"; readonly symbol: "B/."; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PA"]; } | { readonly code: "PEN"; readonly numeric_code: "604"; readonly name: "Peruvian sol"; readonly symbol: "S/."; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PE"]; } | { readonly code: "PGK"; readonly numeric_code: "598"; readonly name: "Papua New Guinean kina"; readonly symbol: "PGK"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PG"]; } | { readonly code: "PHP"; readonly numeric_code: "608"; readonly name: "Philippine peso"; readonly symbol: "₱"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PH"]; } | { readonly code: "PKR"; readonly numeric_code: "586"; readonly name: "Pakistani rupee"; readonly symbol: "PKRs"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PK"]; } | { readonly code: "PLN"; readonly numeric_code: "985"; readonly name: "Polish złoty"; readonly symbol: "zł"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PL"]; } | { readonly code: "PYG"; readonly numeric_code: "600"; readonly name: "Paraguayan guaraní"; readonly symbol: "₲"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["PY"]; } | { readonly code: "QAR"; readonly numeric_code: "634"; readonly name: "Qatari riyal"; readonly symbol: "QR"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["QA"]; } | { readonly code: "RON"; readonly numeric_code: "946"; readonly name: "Romanian leu"; readonly symbol: "RON"; readonly round: 9999999; readonly decimal: 111111; readonly delimiter: "DE_LI"; readonly short_format: "FORSHRT"; readonly explicit_format: "FORMEX"; readonly countries: readonly ["RO"]; } | { readonly code: "RUB"; readonly numeric_code: "643"; readonly name: "Russian ruble"; readonly symbol: "RUB"; readonly round: 9999999; readonly decimal: