diff --git a/shared/sdk-ts/src/exchange-rates.ts b/shared/sdk-ts/src/exchange-rates.ts new file mode 100644 index 000000000..9c1fac18c --- /dev/null +++ b/shared/sdk-ts/src/exchange-rates.ts @@ -0,0 +1,41 @@ +import type { ApiFetcher } from './fetch-utils'; + +export const EXCHANGE_RATES_ROUTES = { + LATEST: '/api/exchange-rates/latest', +} as const; + +/** Query params for GET /api/exchange-rates/latest */ +export interface ExchangeRateLatestQuery { + /** Source currency code (ISO 4217) */ + from_currency?: string; + /** Target currency code (ISO 4217) */ + to_currency?: string; +} + +/** Response for GET /api/exchange-rates/latest */ +export interface ExchangeRateLatestResponse { + /** The base currency code */ + baseCurrency: string; + /** The target currency code */ + toCurrency: string; + /** The exchange rate value */ + exchangeRate: number; +} + +/** + * Fetches the latest exchange rate for the given currency pair. + * @param fetcher - The API fetcher instance + * @param query - Query parameters containing from_currency and/or to_currency + * @returns The exchange rate response with baseCurrency, toCurrency, and exchangeRate + */ +export async function fetchLatestExchangeRate( + fetcher: ApiFetcher, + query?: ExchangeRateLatestQuery, +): Promise { + const get = fetcher + .path(EXCHANGE_RATES_ROUTES.LATEST as never) + .method('get') + .create(); + const { data } = await get((query ?? {}) as never); + return data as ExchangeRateLatestResponse; +} diff --git a/shared/sdk-ts/src/index.ts b/shared/sdk-ts/src/index.ts index 57aae06ea..c7e7a006d 100644 --- a/shared/sdk-ts/src/index.ts +++ b/shared/sdk-ts/src/index.ts @@ -14,6 +14,7 @@ export * from './bills'; export * from './items'; export * from './branches'; export * from './warehouses'; +export * from './exchange-rates'; export * from './expenses'; export * from './import'; export * from './manual-journals';