{"version":3,"sources":["../src/data/currencies.ts","../src/exchanges/base_exchange.ts","../src/exchanges/google_finance.ts","../src/exchanges/fixer.ts","../src/services/currency_service.ts","../src/config/define_config.ts","../src/config/exchanges.ts","../src/factory.ts"],"names":["c","axios","cheerio","rates","exchanges"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Currency Data\n * \n * Contains basic currency information for common currencies\n */\n\nexport type CurrencyInfo = typeof CURRENCIES[number]\nexport type CurrencyCode = CurrencyInfo['code'] | (string & {})\ntype CurrencySymbol = CurrencyInfo['symbol']\nexport type CountryCode = CurrencyInfo['countries'][number] | (string & {})\ntype CountryName = CurrencyInfo['name']\ntype CountryNumericCode = CurrencyInfo['numeric_code']\n\n/**\n * List of currencies\n * @link https://en.wikipedia.org/wiki/ISO_4217\n */\n// prettier-ignore\nexport const CURRENCIES = [\n  { code: 'AED', numeric_code: '784', name: 'United Arab Emirates dirham', symbol: 'د.إ', round: 1, decimal: 2, delimiter: '.', short_format: 'Dhs. {{amount}}', explicit_format: 'Dhs. {{amount}} AED', countries: ['AE'] },\n  { code: 'AFN', numeric_code: '971', name: 'Afghan afghani', symbol: '؋', round: 100, decimal: 2, delimiter: ',', short_format: '{{amount}}؋', explicit_format: '{{amount}}؋ AFN', countries: ['AF'] },\n  { code: 'ALL', numeric_code: '008', name: 'Albanian lek', symbol: 'Lek', round: 100, decimal: 2, delimiter: ',', short_format: 'Lek {{amount}}', explicit_format: 'Lek {{amount}} ALL', countries: ['AL'] },\n  { code: 'AMD', numeric_code: '051', name: 'Armenian dram', symbol: '֏', round: 100, decimal: 2, delimiter: ',', short_format: '{{amount}} AMD', explicit_format: '{{amount}} AMD', countries: ['AM'] },\n  { code: 'ANG', numeric_code: '532', name: 'Netherlands Antillean guilder', symbol: 'ƒ', round: 1, decimal: 2, delimiter: ',', short_format: 'ƒ;{{amount}}', explicit_format: '{{amount}} NAƒ;', countries: ['CW', 'SX'] },\n  { code: 'AOA', numeric_code: '973', name: 'Angolan kwanza', symbol: 'Kz', round: 100, decimal: 2, delimiter: ',', short_format: 'Kz{{amount}}', explicit_format: 'Kz{{amount}} AOA', countries: ['AO'] },\n  { code: 'ARS', numeric_code: '032', name: 'Argentine peso', symbol: 'AR$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} ARS', countries: ['AR'] },\n  { code: 'AUD', numeric_code: '036', name: 'Australian dollar', symbol: 'AU$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} AUD', countries: ['AU', 'CX', 'CC', 'HM', 'KI', 'NR', 'NF', 'TV'] },\n  { code: 'AWG', numeric_code: '533', name: 'Aruban florin', symbol: 'Afl.', round: 1, decimal: 2, delimiter: ',', short_format: 'Afl{{amount}}', explicit_format: 'Afl{{amount}} AWG', countries: ['AW'] },\n  { code: 'AZN', numeric_code: '944', name: 'Azerbaijani manat', symbol: '₼', round: 1, decimal: 2, delimiter: ',', short_format: 'm.{{amount}}', explicit_format: 'm.{{amount}} AZN', countries: ['AZ'] },\n  { code: 'BAM', numeric_code: '977', name: 'Bosnia and Herzegovina convertible mark', symbol: 'KM', round: 1, decimal: 2, delimiter: ',', short_format: 'KM {{amount}}', explicit_format: 'KM {{amount}} BAM', countries: ['BA'] },\n  { code: 'BBD', numeric_code: '052', name: 'Barbados dollar', symbol: '$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} Bds', countries: ['BB'] },\n  { code: 'BDT', numeric_code: '050', name: 'Bangladeshi taka', symbol: '৳', round: 100, decimal: 2, delimiter: ',', short_format: 'Tk {{amount}}', explicit_format: 'Tk {{amount}} BDT', countries: ['BD'] },\n  { code: 'BGN', numeric_code: '975', name: 'Bulgarian lev', symbol: 'лв', round: 1, decimal: 2, delimiter: ',', short_format: '{{amount}} лв', explicit_format: '{{amount}} лв BGN', countries: ['BG'] },\n  { code: 'BHD', numeric_code: '048', name: 'Bahraini dinar', symbol: '.د.ب', round: 0, decimal: 0, delimiter: ',', short_format: '{{amount}} BD', explicit_format: '{{amount}} BHD', countries: ['BH'] },\n  { code: 'BIF', numeric_code: '108', name: 'Burundian franc', symbol: 'FBu', round: 1000, decimal: 0, delimiter: ',', short_format: 'FBu. {{amount}}', explicit_format: 'FBu. {{amount}} BIF', countries: ['BI'] },\n  { code: 'BMD', numeric_code: '060', name: 'Bermudian dollar', symbol: '$', round: 1, decimal: 2, delimiter: ',', short_format: 'BD${{amount}}', explicit_format: 'BD${{amount}} BMD', countries: ['BM'] },\n  { code: 'BND', numeric_code: '096', name: 'Brunei dollar', symbol: 'BN$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} BND', countries: ['BN'] },\n  { code: 'BOB', numeric_code: '068', name: 'Boliviano', symbol: 'Bs', round: 1, decimal: 2, delimiter: ',', short_format: 'Bs{{amount}}', explicit_format: 'Bs{{amount}} BOB', countries: ['BO'] },\n  // { code: \"BOV\", numeric_code: \"984\", name: \"Bolivian Mvdol (funds code)\", symbol: \"\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"BO\"] },\n  { code: 'BRL', numeric_code: '986', name: 'Brazilian real', symbol: 'R$', round: 1, decimal: 2, delimiter: ',', short_format: 'R$ {{amount}}', explicit_format: 'R$ {{amount}} BRL', countries: ['BR'] },\n  { code: 'BSD', numeric_code: '044', name: 'Bahamian dollar', symbol: '$', round: 1, decimal: 2, delimiter: ',', short_format: 'BS${{amount}}', explicit_format: 'BS${{amount}} BSD', countries: ['BS'] },\n  { code: 'BTC', numeric_code: 'BTC', name: 'Bitcoin', symbol: '₿', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: [] },\n  { code: 'BTN', numeric_code: '064', name: 'Bhutanese ngultrum', symbol: 'Nu.', round: 0, decimal: 0, delimiter: ',', short_format: 'Nu {{amount}}', explicit_format: 'Nu {{amount}} BTN', countries: ['BT'] },\n  { code: 'BWP', numeric_code: '072', name: 'Botswana pula', symbol: 'P', round: 1, decimal: 2, delimiter: ',', short_format: 'P{{amount}}', explicit_format: 'P{{amount}} BWP', countries: ['BW'] },\n  { code: 'BYR', numeric_code: '974', name: 'Belarusian ruble (pre-2016)', symbol: 'Rbl', round: 0, decimal: 0, delimiter: ',', short_format: 'Br {{amount}}', explicit_format: 'Br {{amount}} BYR', countries: ['BY'] },\n  { code: 'BYN', numeric_code: '933', name: 'Belarusian ruble', symbol: 'Rbl', round: 0, decimal: 0, delimiter: ',', short_format: 'Br {{amount}}', explicit_format: 'Br {{amount}} BYN', countries: ['BY'] },\n  { code: 'BZD', numeric_code: '084', name: 'Belize dollar', symbol: 'BZ$', round: 1, decimal: 2, delimiter: ',', short_format: 'BZ${{amount}}', explicit_format: 'BZ${{amount}} BZD', countries: ['BZ'] },\n  { code: 'CAD', numeric_code: '124', name: 'Canadian dollar', symbol: 'CA$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} CAD', countries: ['CA'] },\n  { code: 'CDF', numeric_code: '976', name: 'Congolese franc', symbol: 'FC', round: 1000, decimal: 2, delimiter: ',', short_format: 'FC{{amount}}', explicit_format: 'FC{{amount}} CDF', countries: ['CD'] },\n  // { code: \"CHE\", numeric_code: \"947\", name: \"WIR euro (complementary currency)\", symbol: \"CHE\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"CH\"] },\n  { code: 'CHF', numeric_code: '756', name: 'Swiss franc', symbol: 'S₣', round: 1, decimal: 2, delimiter: ',', short_format: 'S₣{{amount}}', explicit_format: 'S₣{{amount}} CHF', countries: ['CH', 'LI'] },\n  // { code: \"CHW\", numeric_code: \"948\", name: \"WIR franc (complementary currency)\", symbol: \"CHW\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"CH\"] },\n  { code: 'CLF', numeric_code: '990', name: 'Chilean Unit of Account (UF)', symbol: 'UF', round: 0, decimal: 0, delimiter: ',', short_format: 'UF {{amount}}', explicit_format: 'UF{{amount}} CLF', countries: ['CL'] },\n  { code: 'CLP', numeric_code: '152', name: 'Chilean peso', symbol: 'CL$', round: 100, decimal: 0, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} CLP', countries: ['CL'] },\n  { code: 'CNY', numeric_code: '156', name: 'Renminbi', symbol: 'CN¥', round: 1.0, decimal: 2, delimiter: ',', short_format: '¥{{amount}}', explicit_format: '¥{{amount}} CNY', countries: ['CN'] },\n  { code: 'COP', numeric_code: '170', name: 'Colombian peso', symbol: 'CO$', round: 1000, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} COP', countries: ['CO'] },\n  // { code: \"COU\", numeric_code: \"970\", name: \"Unidad de Valor Real (UVR) (funds code)\", symbol: \"COU\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"CO\"] },\n  { code: 'CRC', numeric_code: '188', name: 'Costa Rican colon', symbol: '₡', round: 100, decimal: 2, delimiter: ',', short_format: '₡{{amount}}', explicit_format: '₡ {{amount}} CRC', countries: ['CR'] },\n  { code: 'CUC', numeric_code: '931', name: 'Cuban convertible peso (pre-2022)', symbol: '$', round: 0, decimal: 0, delimiter: ',', short_format: '${{amount}}', explicit_format: 'CUC${{amount}} CUC', countries: ['CU'] },\n  { code: 'CUP', numeric_code: '192', name: 'Cuban peso', symbol: '$', round: 10, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '$MN {{amount}} CUP', countries: ['CU'] },\n  { code: 'CVE', numeric_code: '132', name: 'Cape Verdean escudo', symbol: 'CV$', round: 100, decimal: 2, delimiter: ',', short_format: '{{amount}}$', explicit_format: '{{amount}}$ CVE', countries: ['CV'] },\n  { code: 'CZK', numeric_code: '203', name: 'Czech koruna', symbol: 'Kč', round: 1, decimal: 2, delimiter: ',', short_format: '{{amount}} Kč', explicit_format: '{{amount}} Kč', countries: ['CZ'] },\n  { code: 'DJF', numeric_code: '262', name: 'Djiboutian franc', symbol: 'Fdj', round: 100, decimal: 0, delimiter: ',', short_format: '{{amount}} Fdj', explicit_format: '{{amount}} DJF', countries: ['DJ'] },\n  { code: 'DKK', numeric_code: '208', name: 'Danish krone', symbol: 'kr.', round: 1, decimal: 2, delimiter: ',', short_format: '{{amount}} kr', explicit_format: '{{amount}} DKK', countries: ['DK', 'FO', 'GL'] },\n  { code: 'DOP', numeric_code: '214', name: 'Dominican peso', symbol: 'RD$', round: 100, decimal: 2, delimiter: ',', short_format: 'RD$ {{amount}}', explicit_format: 'RD$ {{amount}}', countries: ['DO'] },\n  { code: 'DZD', numeric_code: '012', name: 'Algerian dinar', symbol: 'DA', round: 100, decimal: 2, delimiter: ',', short_format: 'DA {{amount}}', explicit_format: 'DA {{amount}} DZD', countries: ['DZ'] },\n  { code: 'EGP', numeric_code: '818', name: 'Egyptian pound', symbol: 'E£', round: 1, decimal: 2, delimiter: ',', short_format: 'LE {{amount}}', explicit_format: 'LE {{amount}} EGP', countries: ['EG'] },\n  { code: 'ERN', numeric_code: '232', name: 'Eritrean nakfa', symbol: 'Nfk', round: 1, decimal: 2, delimiter: ',', short_format: 'Nkf {{amount}}', explicit_format: 'Nkf {{amount}} ERN', countries: ['ER'] },\n  { code: 'ETB', numeric_code: '230', name: 'Ethiopian birr', symbol: 'Br', round: 1, decimal: 2, delimiter: ',', short_format: 'Br{{amount}}', explicit_format: 'Br{{amount}} ETB', countries: ['ET'] },\n  { code: 'EUR', numeric_code: '978', name: 'Euro', symbol: '€', round: 0.95, decimal: 2, delimiter: ',', short_format: '€{{amount}}', explicit_format: '€{{amount}} EUR', countries: ['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'] },\n  { code: 'FJD', numeric_code: '242', name: 'Fiji dollar', symbol: '$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: 'FJ${{amount}}', countries: ['FJ'] },\n  { code: 'FKP', numeric_code: '238', name: 'Falkland Islands pound', symbol: '£', round: 1, decimal: 2, delimiter: ',', short_format: '£{{amount}}', explicit_format: '£{{amount}} FKP', countries: ['FK'] },\n  { code: 'GBP', numeric_code: '826', name: 'Pound sterling', symbol: '£', round: 1, decimal: 2, delimiter: ',', short_format: '£{{amount}}', explicit_format: '£{{amount}} GBP', countries: ['UK', 'IM', 'JE', 'GG', 'SH-TA'] },\n  { code: 'GEL', numeric_code: '981', name: 'Georgian lari', symbol: '₾', round: 1, decimal: 2, delimiter: ',', short_format: '₾{{amount}}', explicit_format: '₾{{amount}} GEL', countries: ['GE'] },\n  { code: 'GHS', numeric_code: '936', name: 'Ghanaian cedi', symbol: 'GH₵', round: 1, decimal: 2, delimiter: ',', short_format: 'GH₵{{amount}}', explicit_format: 'GH₵{{amount}}', countries: ['GH'] },\n  { code: 'GIP', numeric_code: '292', name: 'Gibraltar pound', symbol: '£', round: 1, decimal: 2, delimiter: ',', short_format: '£{{amount}}', explicit_format: '£{{amount}} GIP', countries: ['GI'] },\n  { code: 'GMD', numeric_code: '270', name: 'Gambian dalasi', symbol: 'D', round: 1, decimal: 2, delimiter: ',', short_format: 'D {{amount}}', explicit_format: 'D {{amount}} GMD', countries: ['GM'] },\n  { code: 'GNF', numeric_code: '324', name: 'Guinean franc', symbol: 'FG', round: 1000, decimal: 0, delimiter: ',', short_format: 'FG {{amount}}', explicit_format: 'FG {{amount}} GNF', countries: ['GN'] },\n  { code: 'GTQ', numeric_code: '320', name: 'Guatemalan quetzal', symbol: 'Q', round: 1, decimal: 2, delimiter: ',', short_format: 'Q {{amount}}', explicit_format: 'Q{{amount}} GTQ', countries: ['GT'] },\n  { code: 'GYD', numeric_code: '328', name: 'Guyanese dollar', symbol: 'G$', round: 100, decimal: 2, delimiter: ',', short_format: 'G$ ${{amount}}', explicit_format: '${{amount}} GYD', countries: ['GY'] },\n  { code: 'HKD', numeric_code: '344', name: 'Hong Kong dollar', symbol: 'HK$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: 'HK${{amount}}', countries: ['HK'] },\n  { code: 'HNL', numeric_code: '340', name: 'Honduran lempira', symbol: 'L', round: 1, decimal: 2, delimiter: ',', short_format: 'L{{amount}}', explicit_format: 'L {{amount}} HNL', countries: ['HN'] },\n  { code: 'HRK', numeric_code: '191', name: 'Croatian dinar (pre-2023)', symbol: 'kn', round: 1, decimal: 2, delimiter: ',', short_format: 'kn{{amount}}', explicit_format: 'kn{{amount}} HRK', countries: ['HR'] },\n  { code: 'HTG', numeric_code: '332', name: 'Haitian gourde', symbol: 'G', round: 100, decimal: 2, delimiter: ',', short_format: 'G {{amount}}', explicit_format: '{{amount}} HTG', countries: ['HT'] },\n  { code: 'HUF', numeric_code: '348', name: 'Hungarian forint', symbol: 'Ft', round: 100, decimal: 2, delimiter: ',', short_format: '{{amount}} Ft', explicit_format: '{{amount}} Ft', countries: ['HU'] },\n  { code: 'IDR', numeric_code: '360', name: 'Indonesian rupiah', symbol: 'Rp', round: 1000, decimal: 2, delimiter: ',', short_format: 'Rp {{amount}}', explicit_format: 'Rp {{amount}} IDR', countries: ['ID'] },\n  { code: 'ILS', numeric_code: '376', name: 'Israeli new shekel', symbol: '₪', round: 1, decimal: 2, delimiter: ',', short_format: '₪{{amount}}', explicit_format: '{{amount}} NIS', countries: ['IL'] },\n  { code: 'INR', numeric_code: '356', name: 'Indian rupee', symbol: '₹', round: 100, decimal: 2, delimiter: ',', short_format: '₹{{amount}}', explicit_format: 'Rs. {{amount}}', countries: ['IN', 'BT'] },\n  { code: 'IQD', numeric_code: '368', name: 'Iraqi dinar', symbol: 'د.ع', round: 0, decimal: 0, delimiter: ',', short_format: '{{amount}} IQD', explicit_format: '{{amount}} IQD', countries: ['IQ'] },\n  { code: 'IRR', numeric_code: '364', name: 'Iranian rial', symbol: '﷼', round: 1000, decimal: 0, delimiter: ',', short_format: '﷼ {{amount}}', explicit_format: '﷼ {{amount}} IRR', countries: ['IR'] },\n  { code: 'ISK', numeric_code: '352', name: 'Icelandic króna (plural: krónur)', symbol: 'Ikr', round: 100, decimal: 0, delimiter: ',', short_format: '{{amount}} kr', explicit_format: '{{amount}} ISK', countries: ['IS'] },\n  { code: 'JMD', numeric_code: '388', name: 'Jamaican dollar', symbol: 'J$', round: 100, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} JMD', countries: ['JM'] },\n  { code: 'JOD', numeric_code: '400', name: 'Jordanian dinar', symbol: 'د.أ', round: 0, decimal: 0, delimiter: ',', short_format: '{{amount}} JD', explicit_format: '{{amount}} JOD', countries: ['JO'] },\n  { code: 'JPY', numeric_code: '392', name: 'Japanese yen', symbol: '¥', round: 100, decimal: 0, delimiter: ',', short_format: '¥{{amount}}', explicit_format: '¥{{amount}} JPY', countries: ['JP'] },\n  { code: 'KES', numeric_code: '404', name: 'Kenyan shilling', symbol: 'Ksh', round: 100, decimal: 2, delimiter: ',', short_format: 'KSh{{amount}}', explicit_format: 'KSh{{amount}}', countries: ['KE'] },\n  { code: 'KGS', numeric_code: '417', name: 'Kyrgyzstani som', symbol: 'лв', round: 100, decimal: 2, delimiter: ',', short_format: 'лв{{amount}}', explicit_format: 'лв{{amount}}', countries: ['KG'] },\n  { code: 'KHR', numeric_code: '116', name: 'Cambodian riel', symbol: '៛', round: 1000, decimal: 2, delimiter: ',', short_format: 'KHR{{amount}}', explicit_format: 'KHR{{amount}}', countries: ['KH'] },\n  { code: 'KMF', numeric_code: '174', name: 'Comoro franc', symbol: 'CF', round: 100, decimal: 0, delimiter: ',', short_format: '{{amount}} CF', explicit_format: '{{amount}} CF', countries: ['KM'] },\n  { code: 'KPW', numeric_code: '408', name: 'North Korean won', symbol: '₩', round: 0, decimal: 0, delimiter: ',', short_format: '₩{{amount}}', explicit_format: '₩{{amount}} KPW', countries: ['KP'] },\n  { code: 'KRW', numeric_code: '410', name: 'South Korean won', symbol: '₩', round: 1000, decimal: 0, delimiter: ',', short_format: '₩{{amount}}', explicit_format: '₩{{amount}} KRW', countries: ['KR'] },\n  { code: 'KWD', numeric_code: '414', name: 'Kuwaiti dinar', symbol: 'KD', round: 0, decimal: 0, delimiter: ',', short_format: '{{amount}} KD', explicit_format: '{{amount}} KWD', countries: ['KW'] },\n  { code: 'KYD', numeric_code: '136', name: 'Cayman Islands dollar', symbol: 'CI$', round: 1, decimal: 2, delimiter: ',', short_format: '${{amount}}', explicit_format: '${{amount}} KYD', countries: ['KY'] },\n  { code: 'KZT', numeric_code: '398', name: 'Kazakhstani tenge', symbol: '₸', round: 100, decimal: 2, delimiter: ',', short_format: '₸{{amount}}', explicit_format: '₸{{amount}} KZT', countries: ['KZ'] },\n  { code: 'LAK', numeric_code: '418', name: 'Lao kip', symbol: '₭', round: 1000, decimal: 2, delimiter: ',', short_format: '₭{{amount}}', explicit_format: '₭{{amount}} LAK', countries: ['LA'] },\n  { code: 'LBP', numeric_code: '422', name: 'Lebanese pound', symbol: 'ل', round: 1000, decimal: 2, delimiter: ',', short_format: 'L£{{amount}}', explicit_format: 'L£{{amount}} LBP', countries: ['LB'] },\n  { code: 'LKR', numeric_code: '144', name: 'Sri Lankan rupee', symbol: 'රු', round: 100, decimal: 2, delimiter: ',', short_format: 'Rs {{amount}}', explicit_format: 'Rs {{amount}} LKR', countries: ['LK'] },\n  { code: 'LRD', numeric_code: '430', name: 'Liberian dollar', symbol: 'L$', round: 100, decimal: 2, delimiter: ',', short_format: 'L${{amount}}', explicit_format: 'L${{amount}} LRD', countries: ['LR'] },\n  { code: 'LSL', numeric_code: '426', name: 'Lesotho loti', symbol: 'M', round: 1, decimal: 2, delimiter: ',', short_format: 'M{{amount}}', explicit_format: 'M{{amount}} LSL', countries: ['LS'] },\n  { code: 'LTL', numeric_code: '440', name: 'Lithuanian litas (pre-1993)', symbol: 'Lt', round: 0, decimal: 0, delimiter: ',', short_format: 'Lt {{amount}}', explicit_format: 'Lt {{amount}} LTL', countries: ['LT'] },\n  { code: 'LVL', numeric_code: '428', name: 'Latvian lats (pre-1993)', symbol: 'ℒ︁𝓈', round: 0, decimal: 0, delimiter: ',', short_format: 'Ls {{amount}}', explicit_format: 'Ls {{amount}} LVL', countries: ['LV'] },\n  { code: 'LYD', numeric_code: '434', name: 'Libyan dinar', symbol: 'ل.د', round: 0, decimal: 0, delimiter: ',', short_format: 'LD {{amount}}', explicit_format: 'LD {{amount}} LYD', countries: ['LY'] },\n  { code: 'MAD', numeric_code: '504', name: 'Moroccan dirham', symbol: '.د.م', round: 1, decimal: 2, delimiter: ',', short_format: '{{amount}} dh', explicit_format: 'Dh {{amount}} MAD', countries: ['MA', 'EH'] },\n  { code: 'MDL', numeric_code: '498', name: 'Moldovan leu', symbol: 'MDL', round: 1, decimal: 2, delimiter: ',', short_format: '{{amount}} MDL', explicit_format: '{{amount}} MDL', countries: ['MD'] },\n  { code: 'MGA', numeric_code: '969', name: 'Malagasy ariary', symbol: 'Ar', round: 0, decimal: 0, delimiter: ',', short_format: 'Ar {{amount}}', explicit_format: 'Ar {{amount}} MGA', countries: ['MG'] },\n  { code: 'MKD', numeric_code: '807', name: 'Macedonian denar', symbol: 'MKD', round: 100, decimal: 2, delimiter: ',', short_format: 'ден{{amount}}', explicit_format: 'ден{{amount}} MKD', countries: ['MK'] },\n  { code: 'MMK', numeric_code: '104', name: 'Myanmar kyat', symbol: 'K', round: 1000, decimal: 2, delimiter: ',', short_format: 'K{{amount}}', explicit_format: 'K{{amount}} MMK', countries: ['MM'] },\n  { code: 'MNT', numeric_code: '496', name: 'Mongolian tögrög', symbol: '₮', round: 1000, decimal: 2, delimiter: ',', short_format: '{{amount}} ₮', explicit_format: '{{amount}} MNT', countries: ['MN'] },\n  { code: 'MOP', numeric_code: '446', name: 'Macanese pataca', symbol: 'MOP$', round: 1, decimal: 2, delimiter: ',', short_format: 'MOP${{amount}}', explicit_format: 'MOP${{amount}}', countries: ['MO'] },\n  // { code: \"MRU\", numeric_code: \"929\", name: \"Mauritanian ouguiya\", symbol: \"UM\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"MR\"] },\n  { code: 'MRO', numeric_code: '478', name: 'Mauritanian ouguiya (legacy code) [1973–2017]', symbol: 'UM', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MR'] },\n  { code: 'MUR', numeric_code: '480', name: 'Mauritian rupee', symbol: 'MURs', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MU'] },\n  { code: 'MVR', numeric_code: '462', name: 'Maldivian rufiyaa', symbol: 'MVR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MV'] },\n  { code: 'MWK', numeric_code: '454', name: 'Malawian kwacha', symbol: 'MWK', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MW'] },\n  { code: 'MXN', numeric_code: '484', name: 'Mexican peso', symbol: 'MX$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MX'] },\n  // { code: \"MXV\", numeric_code: \"979\", name: \"Mexican Unidad de Inversion (UDI) (funds code)\", symbol: \"MXV\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"MX\"] },\n  { code: 'MYR', numeric_code: '458', name: 'Malaysian ringgit', symbol: 'RM', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MY'] },\n  { code: 'MZN', numeric_code: '943', name: 'Mozambican metical', symbol: 'MTn', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['MZ'] },\n  { code: 'NAD', numeric_code: '516', name: 'Namibian dollar', symbol: 'N$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['NA'] },\n  { code: 'NGN', numeric_code: '566', name: 'Nigerian naira', symbol: '₦', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['NG'] },\n  { code: 'NIO', numeric_code: '558', name: 'Nicaraguan córdoba', symbol: 'C$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['NI'] },\n  { code: 'NOK', numeric_code: '578', name: 'Norwegian krone', symbol: 'Nkr', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['NO', 'SJ', 'BV'] },\n  { code: 'NPR', numeric_code: '524', name: 'Nepalese rupee', symbol: 'NPRs', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['NP'] },\n  { code: 'NZD', numeric_code: '554', name: 'New Zealand dollar', symbol: 'NZ$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['NZ', 'CK', 'NU', 'PN', 'TK'] },\n  { code: 'OMR', numeric_code: '512', name: 'Omani rial', symbol: 'OMR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['OM'] },\n  { code: 'PAB', numeric_code: '590', name: 'Panamanian balboa', symbol: 'B/.', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PA'] },\n  { code: 'PEN', numeric_code: '604', name: 'Peruvian sol', symbol: 'S/.', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PE'] },\n  { code: 'PGK', numeric_code: '598', name: 'Papua New Guinean kina', symbol: 'PGK', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PG'] },\n  { code: 'PHP', numeric_code: '608', name: 'Philippine peso', symbol: '₱', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PH'] },\n  { code: 'PKR', numeric_code: '586', name: 'Pakistani rupee', symbol: 'PKRs', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PK'] },\n  { code: 'PLN', numeric_code: '985', name: 'Polish złoty', symbol: 'zł', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PL'] },\n  { code: 'PYG', numeric_code: '600', name: 'Paraguayan guaraní', symbol: '₲', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PY'] },\n  { code: 'QAR', numeric_code: '634', name: 'Qatari riyal', symbol: 'QR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['QA'] },\n  { code: 'RON', numeric_code: '946', name: 'Romanian leu', symbol: 'RON', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['RO'] },\n  // { code: \"RSD\", numeric_code: \"941\", name: \"Serbian dinar\", symbol: \"RSD\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"RS\"] },\n  { code: 'RUB', numeric_code: '643', name: 'Russian ruble', symbol: 'RUB', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['RU'] },\n  { code: 'RWF', numeric_code: '646', name: 'Rwandan franc', symbol: 'RWF', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['RW'] },\n  { code: 'SAR', numeric_code: '682', name: 'Saudi riyal', symbol: 'SR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SA'] },\n  { code: 'SBD', numeric_code: '090', name: 'Solomon Islands dollar', symbol: 'SBD', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SB'] },\n  { code: 'SCR', numeric_code: '690', name: 'Seychelles rupee', symbol: 'SCR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SC'] },\n  { code: 'SDG', numeric_code: '938', name: 'Sudanese pound', symbol: 'SDG', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SD'] },\n  { code: 'SEK', numeric_code: '752', name: 'Swedish krona (plural: kronor)', symbol: 'Skr', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SE'] },\n  { code: 'SGD', numeric_code: '702', name: 'Singapore dollar', symbol: 'S$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SG'] },\n  { code: 'SHP', numeric_code: '654', name: 'Saint Helena pound', symbol: 'SHP', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SH', 'SH-AC'] },\n  // { code: \"SLE\", numeric_code: \"925\", name: \"Sierra Leonean leone (new leone)\", symbol: \"SLE\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"SL\"] },\n  // { code: \"SLL\", numeric_code: \"694\", name: \"Sierra Leonean leone (old leone)\", symbol: \"SLL\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"SL\"] },\n  { code: 'SOS', numeric_code: '706', name: 'Somali shilling', symbol: 'Ssh', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SO'] },\n  { code: 'SRD', numeric_code: '968', name: 'Surinamese dollar', symbol: 'SRD', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SR'] },\n  // { code: \"SSP\", numeric_code: \"728\", name: \"South Sudanese pound\", symbol: \"SSP\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"South Sudan\"] },\n  { code: 'STN', numeric_code: '930', name: 'São Tomé and Príncipe dobra', symbol: 'STN', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['ST'] },\n  { code: 'STD', numeric_code: '678', name: 'São Tomé and Príncipe dobra (legacy code) [1977–2018]', symbol: 'STD', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['ST'] },\n  { code: 'SVC', numeric_code: '222', name: 'Salvadoran colón', symbol: 'SVC', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SV'] },\n  { code: 'SYP', numeric_code: '760', name: 'Syrian pound', symbol: 'SY£', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SY'] },\n  { code: 'SZL', numeric_code: '748', name: 'Swazi lilangeni', symbol: 'SZL', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SZ'] },\n  { code: 'THB', numeric_code: '764', name: 'Thai baht', symbol: '฿', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TH'] },\n  { code: 'TJS', numeric_code: '972', name: 'Tajikistani somoni', symbol: 'TJS', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TJ'] },\n  { code: 'TMT', numeric_code: '934', name: 'Turkmenistan manat', symbol: 'TMT', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TM'] },\n  { code: 'TND', numeric_code: '788', name: 'Tunisian dinar', symbol: 'DT', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TN'] },\n  { code: 'TOP', numeric_code: '776', name: 'Tongan paʻanga', symbol: 'T$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TO'] },\n  { code: 'TRY', numeric_code: '949', name: 'Turkish lira', symbol: '₺', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TR'] },\n  { code: 'TTD', numeric_code: '780', name: 'Trinidad and Tobago dollar', symbol: 'TT$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TT'] },\n  { code: 'TWD', numeric_code: '901', name: 'New Taiwan dollar', symbol: 'NT$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TW'] },\n  { code: 'TZS', numeric_code: '834', name: 'Tanzanian shilling', symbol: 'TSh', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['TZ'] },\n  { code: 'UAH', numeric_code: '980', name: 'Ukrainian hryvnia', symbol: '₴', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['UA'] },\n  { code: 'UGX', numeric_code: '800', name: 'Ugandan shilling', symbol: 'USh', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['UG'] },\n  { code: 'USD', numeric_code: '840', name: 'United States dollar', symbol: '$', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['US', 'AS', 'IO', 'VG', 'BQ', 'EC', 'SV', 'GU', 'MH', 'FM', 'MP', 'PW', 'PA', 'PR', 'TL', 'TC', 'VI', 'UM'] },\n  // { code: \"USN\", numeric_code: \"997\", name: \"United States dollar (next day) (funds code)\", symbol: \"USN\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"US\"] },\n  // { code: \"UYI\", numeric_code: \"940\", name: \"Uruguay Peso en Unidades Indexadas (URUIURUI) (funds code)\", symbol: \"UYI\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"UY\"] },\n  { code: 'UYU', numeric_code: '858', name: 'Uruguayan peso', symbol: '$U', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['UY'] },\n  // { code: \"UYW\", numeric_code: \"927\", name: \"Unidad previsional\", symbol: \"UYW\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"UY\"] },\n  { code: 'UZS', numeric_code: '860', name: 'Uzbekistan sum', symbol: 'UZS', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['UZ'] },\n  { code: 'VED', numeric_code: '926', name: 'Venezuelan digital bolívar', symbol: 'VED', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['VE'] },\n  { code: 'VEF', numeric_code: '937', name: 'Venezuelan bolívar fuerte (pre-2018)', symbol: 'Bs.F.', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['VE'] },\n  // { code: \"VES\", numeric_code: \"928\", name: \"Venezuelan sovereign bolívar\", symbol: \"VES\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"VE\"] }, // ???????? now?\n  { code: 'VND', numeric_code: '704', name: 'Vietnamese đồng', symbol: '₫', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['VN'] },\n  { code: 'VUV', numeric_code: '548', name: 'Vanuatu vatu', symbol: 'VUV', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['VU'] },\n  { code: 'WST', numeric_code: '882', name: 'Samoan tala', symbol: 'WST', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['WS'] },\n  { code: 'XAF', numeric_code: '950', name: 'CFA franc BEAC', symbol: 'FCFA', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['CM', 'CF', 'CG', 'TD', 'GQ', 'GA'] },\n  { code: 'XAG', numeric_code: '961', name: 'Silver (one troy ounce)', symbol: 'XAG', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: [] },\n  { code: 'XAU', numeric_code: '959', name: 'Gold (one troy ounce)', symbol: 'XAU', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: [] },\n  // { code: \"XBA\", numeric_code: \"955\", name: \"European Composite Unit (EURCO) (bond market unit)\", symbol: \"XBA\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  // { code: \"XBB\", numeric_code: \"956\", name: \"European Monetary Unit (E.M.U.-6) (bond market unit)\", symbol: \"XBB\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  // { code: \"XBC\", numeric_code: \"957\", name: \"European Unit of Account 9 (E.U.A.-9) (bond market unit)\", symbol: \"XBC\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  // { code: \"XBD\", numeric_code: \"958\", name: \"European Unit of Account 17 (E.U.A.-17) (bond market unit)\", symbol: \"XBD\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  { code: 'XCD', numeric_code: '951', name: 'East Caribbean dollar', symbol: 'XCD', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['AI', 'AG', 'DM', 'GD', 'MS', 'KN', 'LC', 'VC'] },\n  { code: 'XDR', numeric_code: '960', name: 'Special drawing rights', symbol: 'XDR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['International Monetary Fund'] },\n  { code: 'XOF', numeric_code: '952', name: 'CFA franc BCEAO', symbol: 'CFA', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['BJ', 'BF', 'CI', 'GW', 'ML', 'NE', 'SN', 'TG'] },\n  // { code: \"XPD\", numeric_code: \"964\", name: \"Palladium (one troy ounce)\", symbol: \"XPD\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  { code: 'XPF', numeric_code: '953', name: 'CFP franc (franc Pacifique)', symbol: 'XPF', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['PF', 'NC', 'WF'] },\n  // { code: \"XPT\", numeric_code: \"962\", name: \"Platinum (one troy ounce)\", symbol: \"XPT\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  // { code: \"XSU\", numeric_code: \"994\", name: \"SUCRE\", symbol: \"XSU\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"AG\", \"BO\", \"CU\", \"DM\", \"GD\", \"NI\", \"KN\", \"LC\", \"VC\", \"VE\"] },\n  // { code: \"XTS\", numeric_code: \"963\", name: \"Code reserved for testing\", symbol: \"XTS\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  // { code: \"XUA\", numeric_code: \"965\", name: \"ADB Unit of Account\", symbol: \"XUA\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [\"African Development Bank\"] },\n  // { code: \"XXX\", numeric_code: \"999\", name: \"No currency\", symbol: \"XXX\", round: 9999999, decimal: 111111, delimiter: \"DE_LI\", short_format: \"FORSHRT\", explicit_format: \"FORMEX\", countries: [] },\n  { code: 'YER', numeric_code: '886', name: 'Yemeni rial', symbol: 'YR', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['YE'] },\n  { code: 'ZAR', numeric_code: '710', name: 'South African rand', symbol: 'R', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['SZ', 'LS', 'NA', 'ZA'] },\n  { code: 'ZMK', numeric_code: '894', name: 'Zambian kwacha (pre-2013)', symbol: 'ZMK', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['ZM'] },\n  { code: 'ZMW', numeric_code: '967', name: 'Zambian kwacha', symbol: 'ZK', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['ZM'] },\n  { code: 'ZWL', numeric_code: '932', name: 'Zimbabwean dollar (fifth)', symbol: 'ZWL', round: 9999999, decimal: 111111, delimiter: 'DE_LI', short_format: 'FORSHRT', explicit_format: 'FORMEX', countries: ['ZW'] },\n] as const\n\n/**\n * Get all currencies\n */\nexport function getList(): CurrencyInfo[] {\n  return CURRENCIES as unknown as CurrencyInfo[]\n}\n\n/**\n * Filter currencies by country\n */\nexport function filterByCountry(iso2: CountryCode): CurrencyInfo[] {\n  return CURRENCIES.filter(c => c.countries.find(c => c === iso2.toUpperCase()))\n}\n\n/**\n * Filter currencies by name\n */\nexport function filterByName(name: CountryName): CurrencyInfo[]\nexport function filterByName(name: string): CurrencyInfo[] {\n  return CURRENCIES.filter((c) => c.name.includes(name))\n}\n\n/**\n * Get currency info by country ISO2 code (e.g., 'US')\n */\nexport function getByCountry(iso2: CountryCode): CurrencyInfo | undefined\nexport function getByCountry(iso2: string): CurrencyInfo | undefined {\n  return CURRENCIES.find((c) => c.countries.find(c => c === iso2.toUpperCase()))\n}\n\n/**\n * Get currency info by ISO code (e.g., 'USD')\n */\nexport function getByCode(code: CurrencyCode): CurrencyInfo | undefined\nexport function getByCode(code: string): CurrencyInfo | undefined {\n  return CURRENCIES.find((c) => c.code === code)\n}\n\n/**\n * Get currency info by symbol (e.g., '$')\n */\nexport function getBySymbol(symbol: CurrencySymbol): CurrencyInfo | undefined\nexport function getBySymbol(symbol: string): CurrencyInfo | undefined {\n  return CURRENCIES.find((c) => c.symbol === symbol)\n}\n\n/**\n * Get currency info by numeric code (e.g., '840')\n */\nexport function getByNumericCode(numCode: CountryNumericCode): CurrencyInfo | undefined\nexport function getByNumericCode(numCode: number | string): CurrencyInfo | undefined {\n  return CURRENCIES.find((c) => c.numeric_code === numCode?.toString())\n}\n","import type {\n  CurrencyCode,\n  ConversionResult,\n  ExchangeRatesResult,\n  ConvertParams,\n  ExchangeRatesParams,\n  CurrencyInfo,\n  CountryCode,\n  TRoundOptions,\n} from '../types/index.js'\nimport type { CurrencyExchangeContract } from '../contracts/currency_exchange.js'\nimport { getList } from '../data/currencies.js'\n\nexport abstract class BaseCurrencyExchange implements CurrencyExchangeContract {\n  /**\n   * Exchange name - must be implemented by subclasses\n   */\n  abstract readonly name: string\n\n  /**\n   * Base currency code. Default is 'USD'.\n   */\n  public base: CurrencyCode = 'USD'\n\n  /**\n   * Get all supported currency codes\n   */\n  public get currencies() {\n    return getList().map(c => c.code)\n  }\n\n  /**\n   * Get all constant currencies\n   */\n  getList() {\n    return getList()\n  }\n\n  /**\n   * Filter constant currencies by name\n   * @param {string} name - Currency name\n   */\n  filterByName(name: CurrencyInfo['name']): CurrencyInfo[]\n  filterByName(name: string) {\n    return this.getList().filter((c) => c.name.includes(name))\n  }\n\n  /**\n   * Filter constant currencies by country\n   * @param {string} iso2 - Country ISO2 code\n   */\n  filterByCountry(iso2: CountryCode) {\n    return this.getList().filter(c => c.countries.find(c => c === iso2.toUpperCase()))\n  }\n\n  /**\n   * Get constant currency info by country ISO2 code (e.g., 'US')\n   * @param {string} iso2\n   */\n  getByCountry(iso2: CountryCode): CurrencyInfo | undefined\n  getByCountry(iso2: string) {\n    return this.getList().find((c) => c.countries.find(c => c === iso2.toUpperCase()))\n  }\n\n  /**\n   * Get constant currency info by ISO code (e.g., 'USD')\n   * @param {string} code - Currency ISO code\n   */\n  getByCode(code: CurrencyCode): CurrencyInfo | undefined {\n    return this.getList().find((c) => c.code === code)\n  }\n\n  /**\n   * Get constant currency info by symbol (e.g., '$')\n   * @param {string} symbol - Currency symbol (e.g., '$')\n   */\n  getBySymbol(symbol: CurrencyInfo['symbol']): CurrencyInfo | undefined\n  getBySymbol(symbol: string) {\n    return this.getList().find((c) => c.symbol === symbol)\n  }\n\n  /**\n   * Get constant currency info by numeric code (e.g., '840')\n   * @param {string} numCode - Currency numeric code\n   */\n  getByNumericCode(numCode: CurrencyInfo['numeric_code']): CurrencyInfo | undefined\n  getByNumericCode(numCode: string) {\n    return this.getList().find((c) => c.numeric_code === numCode)\n  }\n\n  /**\n   * Abstract method that retrieves the latest currency conversion rates.\n   *\n   * @param {ExchangeRatesParams} params - The parameters for getting exchange rates.\n   * @param {CurrencyCode} params.base - The base currency code to retrieve rates for.\n   * @param {CurrencyCode[]} params.codes - The currency codes to retrieve rates for.\n   */\n  abstract latestRates(params?: ExchangeRatesParams): Promise<ExchangeRatesResult>\n\n  /**\n   * Abstract method that retrieves the currency conversion rate.\n   *\n   * @param {ConvertParams} params - The parameters for converting currency.\n   * @param {number} params.amount - The amount to convert.\n   * @param {CurrencyCode} params.from - The currency code to convert from.\n   * @param {CurrencyCode} params.to - The currency code to convert to. Defaults to 'USD'.\n   */\n  abstract convert(params: ConvertParams): Promise<ConversionResult>\n\n  /**\n   * Abstract method that retrieves the currency conversion rate.\n   *\n   * @param {CurrencyCode} from - The currency code to convert from.\n   * @param {CurrencyCode} to - The currency code to convert to. Defaults to 'USD'.\n   * @param {CurrencyInfo[]} currencyList - List of currencies\n   */\n  abstract getConvertRate(from: CurrencyCode, to: CurrencyCode, currencyList?: CurrencyInfo[]): Promise<number | undefined>\n\n  /**\n   * Set base currency\n   */\n  setBase(currency: CurrencyCode): this {\n    this.base = currency || 'USD'\n    return this\n  }\n\n  /**\n   * Set API key (default implementation - can be overridden)\n   * Default does implementation does nothing.\n   * Exchanges that need API keys should override this\n   */\n  setKey(_key: string): this {\n    return this\n  }\n\n  /**\n   * Round currency value according to currency rules\n   *\n   * @param {number} amount - Currency value\n   * @param {TRoundOptions} options\n   * @param {number} options.precision - Decimal precision. Default is 2\n   * @param {string} options.direction - Round direction. Default is 'up'\n   */\n  round(amount: number, options: TRoundOptions = { precision: 2, direction: 'up' }): number {\n    const { precision } = options\n\n    if (options?.precision !== undefined) {\n      return Math.round(Number(amount) * Math.pow(10, precision)) / Math.pow(10, precision)\n    }\n\n    // Use default precision of 2 decimal places\n    return Math.round((Number(amount) + Number.EPSILON) * 100) / 100\n  }\n\n  /**\n   * Rounds a given money amount to the nearest roundable value for the given currency.\n   *\n   * @param {number} amount - The amount of money to round.\n   * @param {CurrencyCode} [currency='USD'] - The currency to determine the rounding for.\n   * @return {number} The rounded amount.\n   */\n  public roundMoney(amount: number, currency: CurrencyCode = 'USD'): number {\n    const data = this.getByCode(currency)\n    if (data && data?.round > 1) {\n      return data.round == 100 && data.decimal != 0\n        ? Math.round(amount * data?.round) / data?.round\n        : Math.round(amount / data?.round) * data?.round\n    }\n\n    return this.round(amount)\n  }\n\n  /**\n   * Create standardized conversion result\n   */\n  protected createConversionResult(\n    amount: number,\n    from: CurrencyCode,\n    to: CurrencyCode,\n    result?: number,\n    rate?: number,\n    error?: { code?: number; info: string; type?: string }\n  ): ConversionResult {\n    return {\n      success: !error && result !== undefined,\n      query: { from, to, amount },\n      info: { timestamp: Date.now(), rate },\n      date: new Date().toISOString(),\n      result,\n      error,\n    }\n  }\n\n  /**\n   * Create standardized exchange rates result\n   */\n  protected createExchangeRatesResult(\n    base: CurrencyCode,\n    rates: Record<string, number>,\n    error?: { code?: number; info: string; type?: string }\n  ): ExchangeRatesResult {\n    return {\n      success: !error && Object.keys(rates).length > 0,\n      timestamp: Date.now(),\n      date: new Date().toISOString(),\n      base,\n      rates,\n      error,\n    }\n  }\n\n\n}\n","/**\n * Google Finance Exchange\n */\n\nimport axios from 'axios'\nimport type {\n  CurrencyCode,\n  ConversionResult,\n  ExchangeRatesResult,\n  GoogleFinanceConfig,\n  ExchangeRatesParams,\n  ConvertParams,\n} from '../types/index.js'\nimport { BaseCurrencyExchange } from './base_exchange.js'\nimport * as cheerio from 'cheerio'\n\nexport class GoogleFinanceExchange extends BaseCurrencyExchange {\n  readonly name = 'google'\n\n  private baseUrl = 'https://www.google.com/finance'\n  private timeout: number\n\n  constructor(config: GoogleFinanceConfig = {}) {\n    super()\n    this.base = config.base || 'USD'\n    this.timeout = config.timeout || 5000\n  }\n\n  /**\n   * Get latest exchange rates\n   */\n  async latestRates(params?: ExchangeRatesParams): Promise<ExchangeRatesResult> {\n    const rates: Record<string, number> = {}\n    const currenciesToFetch = params?.codes || this.currencies\n\n    try {\n      for (const code of currenciesToFetch) {\n        if (code === this.base) {\n          rates[code] = 1.0\n          continue\n        }\n\n        const rate = await this.#getRate(this.base, code)\n        if (rate) {\n          rates[code] = rate\n        }\n      }\n\n      return this.createExchangeRatesResult(this.base, rates)\n    } catch (error) {\n      return this.createExchangeRatesResult(\n        this.base,\n        {},\n        {\n          info: error instanceof Error ? error.message : 'Failed to fetch exchange rates',\n          type: 'FETCH_ERROR',\n        }\n      )\n    }\n  }\n\n  /**\n   * Convert currency amount\n   */\n  async convert(params: ConvertParams): Promise<ConversionResult> {\n    const { amount, from, to } = params\n    try {\n      if (from === to) {\n        return this.createConversionResult(amount, from, to, amount, 1.0)\n      }\n\n      const rate = await this.#getRate(from, to)\n      if (!rate) {\n        return this.createConversionResult(amount, from, to, undefined, undefined, {\n          info: `Failed to get exchange rate for ${from}-${to}`,\n          type: 'RATE_NOT_FOUND',\n        })\n      }\n\n      const result = rate * amount\n      return this.createConversionResult(amount, from, to, result, rate)\n    } catch (error) {\n      return this.createConversionResult(amount, from, to, undefined, undefined, {\n        info: error instanceof Error ? error.message : 'Conversion failed',\n        type: 'CONVERSION_ERROR',\n      })\n    }\n  }\n\n  /**\n   * Get conversion rate between two currencies\n   */\n  async getConvertRate(from: CurrencyCode, to: CurrencyCode): Promise<number | undefined> {\n    return await this.#getRate(from, to)\n  }\n\n  /**\n   * Get exchange rate from Google Finance\n   */\n  async #getRate(from: CurrencyCode, to: CurrencyCode): Promise<number | undefined> {\n    try {\n      const url = `${this.baseUrl}/quote/${from}-${to}`\n      const timeout = 2000\n      const userAgent =\n        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'\n\n      const response = await axios.get(url, {\n        headers: { 'User-Agent': userAgent },\n        timeout: timeout,\n      })\n\n      const $ = cheerio.load(response.data)\n      const block = $(`div[data-source=\"${from}\"][data-target=\"${to}\"]`)\n      const rateString = block.children().first().text()\n      const stringWithoutCommas = rateString.replace(/,/g, '') // remove commas from the string\n      const rate = Number.parseFloat(stringWithoutCommas)\n      if (rate && !isNaN(rate)) {\n        return rate\n      } else {\n        console.error(`Google Finance: Failed to get ${from}-${to} rate.`)\n      }\n    } catch (error) {\n      console.error(error)\n    }\n  }\n\n  /**\n   * Parse exchange rate from Google Finance HTML\n   */\n  #parseRateFromHtml(html: string, from: CurrencyCode, to: CurrencyCode): number | undefined {\n    try {\n      // Look for the rate in various possible formats\n      const patterns = [\n        // Pattern for data-source and data-target attributes\n        new RegExp(`data-source=\"${from}\"[^>]*data-target=\"${to}\"[^>]*>([^<]*<[^>]*>)*([0-9,]+\\\\.?[0-9]*)`, 'i'),\n        // Pattern for currency pair in title or aria-label\n        new RegExp(`${from}\\\\s*-\\\\s*${to}[^0-9]*([0-9,]+\\\\.?[0-9]*)`, 'i'),\n        // Pattern for rate value in common Google Finance structure\n        new RegExp(`\"${from}-${to}\"[^}]*\"price\"[^:]*:[^\"]*\"([0-9,]+\\\\.?[0-9]*)\"`, 'i'),\n        // Fallback pattern for any number after currency pair\n        new RegExp(`${from}/${to}[^0-9]*([0-9,]+\\\\.?[0-9]*)`, 'i'),\n      ]\n\n      for (const pattern of patterns) {\n        const match = html.match(pattern)\n        if (match && match[2]) {\n          const rateString = match[2].replace(/,/g, '') // Remove commas\n          const rate = parseFloat(rateString)\n          if (!isNaN(rate) && rate > 0) {\n            return rate\n          }\n        }\n      }\n\n      return undefined\n    } catch (error) {\n      console.error('Error parsing rate from HTML:', error)\n      return undefined\n    }\n  }\n}\n","/**\n * Fixer.io Exchange\n */\n\nimport type {\n  CurrencyCode,\n  ConversionResult,\n  ExchangeRatesResult,\n  FixerConfig,\n  ExchangeRatesParams,\n  ConvertParams,\n} from '../types/index.js'\nimport { BaseCurrencyExchange } from './base_exchange.js'\n\ninterface FixerResponse {\n  success: boolean\n  timestamp?: number\n  base?: string\n  date?: string\n  rates?: Record<string, number>\n  error?: {\n    code: number\n    info: string\n    type: string\n  }\n}\n\ninterface FixerConvertResponse {\n  success: boolean\n  query?: {\n    from: string\n    to: string\n    amount: number\n  }\n  info?: {\n    timestamp: number\n    rate: number\n  }\n  date?: string\n  result?: number\n  error?: {\n    code: number\n    info: string\n    type: string\n  }\n}\n\nexport class FixerExchange extends BaseCurrencyExchange {\n  readonly name = 'fixer'\n\n  private baseUrl = 'http://data.fixer.io/api'\n  private accessKey: string\n  private timeout: number\n\n  constructor(config: FixerConfig) {\n    super()\n    this.accessKey = config.accessKey\n    this.base = config.base || 'EUR' // Fixer.io default base is EUR\n    this.timeout = config.timeout || 5000\n  }\n\n  /**\n   * Set API key\n   */\n  setKey(key: string): this {\n    this.accessKey = key\n    return this\n  }\n\n  /**\n   * Get latest exchange rates\n   */\n  async latestRates(params?: ExchangeRatesParams): Promise<ExchangeRatesResult> {\n    const codes = params?.codes || this.currencies\n    try {\n      const url = new URL(`${this.baseUrl}/latest`)\n      url.searchParams.set('access_key', this.accessKey)\n      url.searchParams.set('base', this.base)\n\n      if (codes && codes.length > 0) {\n        url.searchParams.set('symbols', codes.join(','))\n      }\n\n      const response = await fetch(url.toString(), {\n        signal: AbortSignal.timeout(this.timeout),\n      })\n\n      if (!response.ok) {\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n      }\n\n      const data: FixerResponse = await response.json()\n\n      if (!data.success) {\n        return this.createExchangeRatesResult(\n          this.base,\n          {},\n          {\n            code: data.error?.code,\n            info: data.error?.info || 'Unknown error from Fixer.io',\n            type: data.error?.type || 'API_ERROR',\n          }\n        )\n      }\n\n      return this.createExchangeRatesResult(this.base, data.rates || {})\n    } catch (error) {\n      return this.createExchangeRatesResult(\n        this.base,\n        {},\n        {\n          info: error instanceof Error ? error.message : 'Failed to fetch exchange rates',\n          type: 'FETCH_ERROR',\n        }\n      )\n    }\n  }\n\n  /**\n   * Convert currency amount\n   */\n  async convert(params: ConvertParams): Promise<ConversionResult> {\n    const { amount, from, to } = params\n    try {\n      if (from === to) {\n        return this.createConversionResult(amount, from, to, amount, 1.0)\n      }\n\n      const url = new URL(`${this.baseUrl}/convert`)\n      url.searchParams.set('access_key', this.accessKey)\n      url.searchParams.set('from', from)\n      url.searchParams.set('to', to)\n      url.searchParams.set('amount', amount.toString())\n\n      const response = await fetch(url.toString(), {\n        signal: AbortSignal.timeout(this.timeout),\n      })\n\n      if (!response.ok) {\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n      }\n\n      const data: FixerConvertResponse = await response.json()\n\n      if (!data.success) {\n        return this.createConversionResult(amount, from, to, undefined, undefined, {\n          code: data.error?.code,\n          info: data.error?.info || 'Unknown error from Fixer.io',\n          type: data.error?.type || 'API_ERROR',\n        })\n      }\n\n      return this.createConversionResult(amount, from, to, data.result, data.info?.rate)\n    } catch (error) {\n      return this.createConversionResult(amount, from, to, undefined, undefined, {\n        info: error instanceof Error ? error.message : 'Conversion failed',\n        type: 'CONVERSION_ERROR',\n      })\n    }\n  }\n\n  /**\n   * Get conversion rate between two currencies\n   */\n  async getConvertRate(from: CurrencyCode, to: CurrencyCode): Promise<number | undefined> {\n    try {\n      if (from === to) {\n        return 1.0\n      }\n\n      // If one of the currencies is the base currency, we can use latest rates\n      if (from === this.base) {\n        const rates = await this.latestRates({ codes: [to] })\n        return rates.rates[to]\n      }\n\n      if (to === this.base) {\n        const rates = await this.latestRates({ codes: [from] })\n        const rate = rates.rates[from]\n        return rate ? 1 / rate : undefined\n      }\n\n      // For cross-currency conversion, get both rates against base\n      const rates = await this.latestRates({ codes: [from, to] })\n      const fromRate = rates.rates[from]\n      const toRate = rates.rates[to]\n\n      if (fromRate && toRate) {\n        return toRate / fromRate\n      }\n\n      return undefined\n    } catch (error) {\n      console.error(`Fixer: Failed to get conversion rate for ${from}-${to}:`, error)\n      return undefined\n    }\n  }\n}\n","import type {\n  CurrencyConfig,\n  ConversionResult,\n  ExchangeRatesResult,\n  CurrencyCode,\n  ConvertParams,\n  ExchangeRatesParams,\n  TRoundOptions,\n} from '../types/index.js'\nimport { BaseCurrencyExchange } from '../exchanges/base_exchange.js'\nimport type { CurrencyExchangeContract } from '../contracts/currency_exchange.js'\n\n/**\n * Main Currency Service Implementation\n */\nexport class CurrencyService<KnownExchanges extends Record<string, BaseCurrencyExchange> = Record<string, BaseCurrencyExchange>> extends BaseCurrencyExchange implements CurrencyExchangeContract {\n  #exchanges: Map<keyof KnownExchanges, KnownExchanges[keyof KnownExchanges]> = new Map()\n  #currentExchangeName: keyof KnownExchanges\n  #config: CurrencyConfig<KnownExchanges>\n  base: CurrencyCode\n  name: string = null as unknown as string\n\n  constructor(config: CurrencyConfig<KnownExchanges>) {\n    super()\n    this.#config = config\n    this.#initializeExchanges()\n    this.#currentExchangeName = config.default\n\n    const exchange = this.#exchanges.get(this.#currentExchangeName)\n    this.base = exchange?.base || 'USD'\n    this.name = exchange?.name || null as unknown as string\n  }\n\n  /**\n   * Initialize exchanges based on configuration\n   * Handles both exchange instances and factory functions\n   */\n  #initializeExchanges(): void {\n    const exchanges = this.#config.exchanges\n\n    for (const [name, exchange] of Object.entries(exchanges)) {\n      // Check if exchange is a factory function\n      if (typeof exchange === 'function') {\n        // Call factory function to get exchange instance\n        this.#exchanges.set(name as keyof KnownExchanges, (exchange as () => KnownExchanges[keyof KnownExchanges])())\n      } else {\n        // Exchange is already an instance\n        this.#exchanges.set(name as keyof KnownExchanges, exchange as KnownExchanges[keyof KnownExchanges])\n      }\n    }\n  }\n\n  getList() {\n    const exchange = this.#getActiveExchange()\n    return exchange.getList()\n  }\n\n  /**\n   * Convert currency amount\n   */\n  async convert(params: ConvertParams): Promise<ConversionResult> {\n    const exchange = this.#getActiveExchange()\n    return await exchange.convert(params)\n  }\n\n  /**\n   * Get exchange rates\n   */\n  async getExchangeRates(params?: ExchangeRatesParams): Promise<ExchangeRatesResult> {\n    const exchange = this.#getActiveExchange()\n\n    // Set base currency if provided\n    if (params?.base) {\n      exchange.setBase(params.base)\n    }\n\n    return await exchange.latestRates(params)\n  }\n\n  async latestRates(params?: ExchangeRatesParams): Promise<ExchangeRatesResult> {\n    return this.getExchangeRates(params)\n  }\n\n  async getConvertRate(from: CurrencyCode, to: CurrencyCode): Promise<number | undefined> {\n    return this.#getActiveExchange().getConvertRate(from, to)\n  }\n\n  /**\n   * Switch to a different exchange (type-safe)\n   */\n  use<ExchangeName extends keyof KnownExchanges>(exchange: ExchangeName): KnownExchanges[ExchangeName] {\n    const exchangeName = exchange\n    if (!this.#exchanges.has(exchangeName as keyof KnownExchanges)) {\n      throw new Error(`Exchange '${exchangeName?.toString()}' is not configured`)\n    }\n    this.#currentExchangeName = exchangeName\n    return this.#exchanges.get(exchangeName as keyof KnownExchanges) as KnownExchanges[ExchangeName]\n  }\n\n  /**\n   * Get current exchange name\n   */\n  getCurrentExchange() {\n    return this.#currentExchangeName\n  }\n\n  /**\n   * Get list of available exchanges\n   */\n  getAvailableExchanges(): (keyof KnownExchanges)[] {\n    return Array.from(this.#exchanges.keys()) as (keyof KnownExchanges)[]\n  }\n\n  /**\n   * Round currency value\n   */\n  round(value: number, options: TRoundOptions = { precision: 2, direction: 'up' }): number {\n    const exchange = this.#getActiveExchange()\n    return exchange.round(value, options)\n  }\n\n  /**\n   * Get active exchange instance\n   */\n  #getActiveExchange(): KnownExchanges[keyof KnownExchanges] {\n    if (!this.#currentExchangeName) {\n      throw new Error('No exchange is currently selected')\n    }\n\n    const exchange = this.#exchanges.get(this.#currentExchangeName)\n    if (!exchange) {\n      throw new Error(`Exchange '${this.#currentExchangeName?.toString()}' is not available`)\n    }\n\n    return exchange\n  }\n\n  /**\n   * Format currency value with proper locale\n   *\n   * @param {number} params.amount - Currency amount\n   * @param {CurrencyCode} params.code - Currency code\n   * @param {string} params.locale - Locale to use for formatting\n   */\n  formatCurrency(params: { amount: number, code: CurrencyCode, locale?: string }): string {\n    const { amount, code: currencyCode, locale = 'en-US' } = params\n    try {\n      return new Intl.NumberFormat(locale, {\n        style: 'currency',\n        currency: currencyCode,\n      }).format(amount)\n    } catch {\n      // Fallback formatting\n      return `${currencyCode} ${amount.toFixed(2)}`\n    }\n  }\n\n  /**\n   * Get supported currencies for current exchange\n   */\n  async getSupportedCurrencies(exchangeName: keyof KnownExchanges = this.#currentExchangeName): Promise<CurrencyCode[]> {\n    if (!exchangeName) {\n      return []\n    }\n\n    const exchangeInstance = this.#exchanges.get(exchangeName) as BaseCurrencyExchange\n    if (!exchangeInstance) {\n      return []\n    }\n\n    if ('getSupportedCurrencies' in exchangeInstance && typeof exchangeInstance.getSupportedCurrencies === 'function') {\n      return await exchangeInstance.getSupportedCurrencies()\n    }\n\n    // Fallback to base currencies\n    return exchangeInstance.currencies || []\n  }\n}\n","/**\n * Configuration Helper\n *\n * Provides type-safe configuration definition similar to @adonisjs/drive\n */\n\nimport type { BaseCurrencyExchange } from '../exchanges/base_exchange.js';\nimport type { CurrencyConfig } from '../types/index.js'\n\n/**\n * Helper function to define currency configuration with type inference\n *\n * @example\n * ```typescript\n * const config = defineConfig({\n *   default: 'google' as const,\n *   exchanges: {\n *     google: exchanges.google({ base: 'USD' }),\n *     fixer: exchanges.fixer({ accessKey: 'your-key' })\n *   }\n * })\n * ```\n */\nexport function defineConfig<KnownExchanges extends Record<string, BaseCurrencyExchange>>(config: CurrencyConfig<KnownExchanges>): CurrencyConfig<KnownExchanges> {\n  return config\n}\n","/**\n * Exchange Configuration Exports\n *\n * Exchanges typed configuration helpers for each exchange\n */\n\nimport { FixerExchange } from '../exchanges/fixer.js'\nimport { GoogleFinanceExchange } from '../exchanges/google_finance.js'\nimport type { GoogleFinanceConfig, FixerConfig } from '../types/index.js'\n\n/**\n * Google Finance exchange configuration\n *\n * @example\n * ```typescript\n * const config = defineConfig({\n *   default: 'google',\n *   exchanges: {\n *     google: exchanges.google({ base: 'USD', timeout: 5000 })\n *   }\n * })\n * ```\n */\nfunction google(config: GoogleFinanceConfig = {}): GoogleFinanceExchange {\n  return new GoogleFinanceExchange({\n    base: config.base || 'USD',\n    timeout: config.timeout || 5000,\n    ...config,\n  })\n}\n\n/**\n * Fixer.io exchange configuration\n *\n * @example\n * ```typescript\n * const config = defineConfig({\n *   default: 'fixer',\n *   exchanges: {\n *     fixer: exchanges.fixer({\n *       accessKey: env.get('FIXER_API_KEY'),\n *       base: 'EUR'\n *     })\n *   }\n * })\n * ```\n */\nfunction fixer(config: FixerConfig): FixerExchange {\n  if (!config.accessKey) {\n    throw new Error('Fixer exchange requires an accessKey')\n  }\n\n  return new FixerExchange({\n    base: config.base || 'USD',\n    timeout: config.timeout || 5000,\n    ...config,\n  })\n}\n\n/**\n * Exchange configuration helpers\n * Similar to @adonisjs/drive's services object\n */\nexport const exchanges = {\n  google,\n  fixer,\n} as const\n","/**\n * Factory Function\n *\n * Creates a typed currency service with exchange inference\n */\n\nimport type { CurrencyConfig, CurrencyExchanges } from './types/index.js'\nimport { CurrencyService } from './services/index.js'\nimport type { BaseCurrencyExchange } from './exchanges/base_exchange.js'\n\n/**\n * Create a typed currency service with exchange inference\n *\n * @example\n * ```typescript\n * const config = defineConfig({\n *   default: 'google' as const,\n *   exchanges: {\n *     google: exchanges.google({ base: 'USD' }),\n *     fixer: exchanges.fixer({ accessKey: 'your-key' })\n *   }\n * })\n *\n * const currency = createCurrency(config)\n *\n * // TypeScript knows these are valid\n * currency.use('google')  // ✅\n * currency.use('fixer')   // ✅\n * // currency.use('invalid') // ❌ TypeScript error\n * ```\n */\nexport function createCurrency<KnownExchanges extends Record<keyof CurrencyExchanges, BaseCurrencyExchange>>(\n  config: CurrencyConfig<KnownExchanges>\n): CurrencyService<KnownExchanges> {\n  return new CurrencyService<KnownExchanges>(config)\n}\n"]}