import type { IOauth1Token } from "garmin-connect/dist/garmin/types"; import { getDb } from "@/lib/db"; import type { GarminPendingMfa } from "@/lib/garmin/sso"; const AUTH_COLLECTION = "garmin_auth"; const PENDING_COLLECTION = "garmin_login_pending"; type GarminAuthDoc = { _id: "tokens"; oauth1Token: IOauth1Token; updatedAt: Date }; type GarminPendingDoc = { _id: "pending"; state: GarminPendingMfa; createdAt: Date }; export async function getSavedOauth1Token(): Promise { const db = await getDb(); const doc = await db.collection(AUTH_COLLECTION).findOne({ _id: "tokens" }); return doc?.oauth1Token ?? null; } export async function saveOauth1Token(oauth1Token: IOauth1Token): Promise { const db = await getDb(); await db .collection(AUTH_COLLECTION) .updateOne({ _id: "tokens" }, { $set: { oauth1Token, updatedAt: new Date() } }, { upsert: true }); } export async function savePendingMfaState(state: GarminPendingMfa): Promise { const db = await getDb(); await db .collection(PENDING_COLLECTION) .updateOne({ _id: "pending" }, { $set: { state, createdAt: new Date() } }, { upsert: true }); } export async function getPendingMfaState(): Promise { const db = await getDb(); const doc = await db.collection(PENDING_COLLECTION).findOne({ _id: "pending" }); return doc?.state ?? null; } export async function clearPendingMfaState(): Promise { const db = await getDb(); await db.collection(PENDING_COLLECTION).deleteOne({ _id: "pending" }); }