import { getAccessToken } from "./tokens" import type { Config } from "./config" import type { Sb1Account, Sb1Transaction } from "./types" export function createSb1Client(config: Config["sb1"]) { async function token() { return getAccessToken(config.clientId, config.clientSecret) } return { async getAccounts(): Promise { const res = await fetch("https://api.sparebank1.no/personal/banking/accounts", { headers: { Authorization: `Bearer ${await token()}` } }) if (!res.ok) throw new Error(`Failed to fetch accounts: ${await res.text()}`) const json = await res.json() as { accounts: Sb1Account[] } return json.accounts }, async getTransactions(accountKey: string, fromDate?: string): Promise { const params = new URLSearchParams({ accountKey }) if (fromDate) { params.set("fromDate", fromDate) params.set("Transaction source", "ALL") } const res = await fetch(`https://api.sparebank1.no/personal/banking/transactions?${params}`, { headers: { Authorization: `Bearer ${await token()}`, Accept: "application/vnd.sparebank1.v1+json;charset=utf-8" } }) if (!res.ok) throw new Error(`Failed to fetch transactions: ${await res.text()}`) const json = await res.json() return json["transactions"] as Sb1Transaction[] } } }