@tamtamchik/exchanger v3.0.0
Exchanger
This package provides functionality to fetch the exchange rates of different currencies using Yahoo Finance APIs.
Installation
Using npm:
npm install @tamtamchik/exchangerUsing yarn:
yarn add @tamtamchik/exchangerUsage
Import Exchanger in your TypeScript file:
import { getExchangeRate } from "@tamtamchik/exchanger";
async function fetchRate() {
try {
const rate = await getExchangeRate("USD", "EUR");
console.log(`Exchange rate from USD to EUR: ${rate}`);
} catch (error) {
console.error(`Failed to fetch the exchange rate: ${error.message}`);
}
}
fetchRate();Caching
To improve performance and reduce the number of requests made to the API, you can use the built-in caching feature.
By default, caching is disabled. You can enable and customize caching by passing an options object to the getExchangeRate function:
// Cache for 1 hour (3600000 milliseconds)
const rate = await getExchangeRate("USD", "EUR", { cacheDurationMs: 3600000 });Once a rate is fetched, it's stored in an in-memory cache. If you fetch the same rate within the specified caching duration, the cached rate is returned instead ofmaking a new API call.
Error Handling
This package defines the following error classes for better error handling:
NetworkError: Thrown when there is a network problem and the request cannot be made.ServerError: Thrown when the service does not return a HTTP 200 response.DataError: Thrown when the service does not return the expected data structure.
Each error class extends the built-in Error class, so you can use instanceof to check the error type.
import {
ServerError,
NetworkError,
DataError,
getExchangeRate,
} from "@tamtamchik/exchanger";
async function fetchRate() {
try {
const rate = await getExchangeRate("USD", "EUR");
console.log(`Exchange rate from USD to EUR: ${rate}`);
} catch (error) {
if (error instanceof NetworkError) {
console.error("Network problem:", error.message);
} else if (error instanceof ServerError) {
console.error("Backend problem:", error.message);
} else if (error instanceof DataError) {
console.error("Unexpected response data:", error.message);
} else {
console.error("Unknown error:", error.message);
}
}
}
fetchRate();Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
License
Exchanger is MIT licensed.