This package provides functionality to fetch the exchange rates of different currencies using Yahoo Finance APIs.
Using npm:
npm install @tamtamchik/exchanger
Using yarn:
yarn add @tamtamchik/exchanger
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()
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 of making a new API call.
This package defines the following error classes for better error handling:
FetchError
: Thrown when there is a network problem and the request cannot be made.BackendError
: Thrown when the service does not return a HTTP 200 response.MalformedError
: 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 { BackendError, FetchError, getExchangeRate, MalformedError } 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 FetchError) {
console.error('Network problem:', error.message)
} else if (error instanceof BackendError) {
console.error('Backend problem:', error.message)
} else if (error instanceof MalformedError) {
console.error('Unexpected response data:', error.message)
} else {
console.error('Unknown error:', error.message)
}
}
}
fetchRate()
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Exchanger is MIT licensed.