import { api as client } from "../auth/http"; import { unwrap } from "@/utils/endpoint"; import { URL_CONSTANTS } from "@/constants/URLS"; import type { ApiResponse } from "@/types/apiResponse"; const BASE = URL_CONSTANTS.EXCHANGE_SETTINGS.BASE; /** * Where the rate the API last served came from. `live` means CBE answered; * `stored` means it is failing and the fallback is in use. */ export type ExchangeRateSource = "live" | "stored"; /** Health of the CBE exchange-rate feed. */ export interface ExchangeFeedStatus { rate: number | null; source: ExchangeRateSource | null; lastSuccessAt: string | null; lastError: string | null; } export interface ExchangeSettings { fallbackRate: number; /** `AUTO` when synced from CBE, `MANUAL` when set here. */ fallbackSource: "AUTO" | "MANUAL"; lastSyncedAt: string | null; updatedById: string | null; feed?: ExchangeFeedStatus; } export const exchangeSettingsService = { get: async (): Promise => { const response = await client.get>(BASE); return unwrap(response.data); }, setFallbackRate: async (fallbackRate: number): Promise => { const response = await client.patch>(BASE, { fallbackRate, }); return unwrap(response.data); }, };