diff options
Diffstat (limited to 'app/src/lib/server/sb1.ts')
| -rw-r--r-- | app/src/lib/server/sb1.ts | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/app/src/lib/server/sb1.ts b/app/src/lib/server/sb1.ts index b456609..a7cad3e 100644 --- a/app/src/lib/server/sb1.ts +++ b/app/src/lib/server/sb1.ts @@ -5,7 +5,7 @@ import { randomUUID } from "node:crypto"; import { db } from "./db"; import { syncSession } from "./db/schema"; -type Sb1Tokens = { +export type Sb1Tokens = { access_token: string expires_in: number refresh_token_expires_in: number @@ -65,10 +65,8 @@ const auth = { if (!entity[0]) return undefined const { tokens, accessTokenCreated, refreshTokenCreated } = entity[0] if (!tokens) return undefined - const tokensParsed = JSON.parse(tokens) - if (!tokensParsed) return undefined - const refreshTokenExpires = Temporal.Instant.fromEpochMilliseconds(Number(refreshTokenCreated)).add({ seconds: tokensParsed?.refresh_token_expires_in }) - const accessTokenExpires = Temporal.Instant.fromEpochMilliseconds(Number(accessTokenCreated)).add({ seconds: tokensParsed?.expires_in }) + const refreshTokenExpires = Temporal.Instant.fromEpochMilliseconds(Number(refreshTokenCreated)).add({ seconds: tokens.refresh_token_expires_in }) + const accessTokenExpires = Temporal.Instant.fromEpochMilliseconds(Number(accessTokenCreated)).add({ seconds: tokens.expires_in }) return { refreshTokenExpires, accessTokenExpires @@ -95,15 +93,16 @@ const auth = { refreshTokenCreated: syncSession.refreshTokenCreated, accessTokenCreated: syncSession.accessTokenCreated }).from(syncSession) - const { tokens: _tokens, accessTokenCreated, refreshTokenCreated } = result[0] - let tokens = JSON.parse(_tokens ?? "") as Sb1Tokens + if (!result[0]) return undefined + const { tokens, accessTokenCreated, refreshTokenCreated } = result[0] + if (!tokens) return undefined const nowInstant = Temporal.Now.instant() - const accessTokenExpiredInstant = Temporal.Instant.fromEpochMilliseconds(accessTokenCreated ?? 0).add({ seconds: tokens.expires_in }) + const accessTokenExpiredInstant = Temporal.Instant.fromEpochMilliseconds(Number(accessTokenCreated)).add({ seconds: tokens.expires_in }) if (Temporal.Instant.compare(nowInstant, accessTokenExpiredInstant) >= 0) { const refreshedTokens = await this.refresh_token() if (refreshedTokens) return refreshedTokens.access_token } - const refreshTokenExpiredInstant = Temporal.Instant.fromEpochMilliseconds(refreshTokenCreated ?? 0).add({ seconds: tokens.refresh_token_expires_in }) + const refreshTokenExpiredInstant = Temporal.Instant.fromEpochMilliseconds(Number(refreshTokenCreated)).add({ seconds: tokens.refresh_token_expires_in }) if (Temporal.Instant.compare(nowInstant, refreshTokenExpiredInstant) >= 0) { return undefined } @@ -117,19 +116,16 @@ const auth = { id: syncSession.id }).from(syncSession) - const { tokens, id } = entity[0] - - if (!tokens) return null - - const parsed = JSON.parse(tokens) as Sb1Tokens + const { tokens: currentTokens, id } = entity[0] - if (!parsed.refresh_token) throw new Error("No refresh token"); + if (!currentTokens) return null + if (!currentTokens.refresh_token) throw new Error("No refresh token"); const params = new URLSearchParams(); params.set("client_id", SB1_ID); params.set("client_secret", SB1_SECRET); - params.set("refresh_token", parsed.refresh_token); + params.set("refresh_token", currentTokens.refresh_token); params.set("grant_type", "refresh_token"); const res = await fetch("https://api.sparebank1.no/oauth/token", { @@ -139,13 +135,13 @@ const auth = { method: "POST", body: params, }); - const text = await res.text() + const tokens = await res.json() as Sb1Tokens const epoch = Temporal.Now.instant().epochMilliseconds if (res.ok) { - await db.update(syncSession).set({ tokens: text, accessTokenCreated: epoch, refreshTokenCreated: epoch }).where(eq(syncSession.id, id)) - return JSON.parse(text) as Sb1Tokens + await db.update(syncSession).set({ tokens, accessTokenCreated: epoch.toString(), refreshTokenCreated: epoch.toString() }).where(eq(syncSession.id, id)) + return tokens } else { - console.error("Failed to refresh tokens", text) + console.error("Failed to refresh tokens", tokens) return null } |
