import { NextRequest, NextResponse } from "next/server"; import { consumePendingAuth } from "@/lib/auth/pkce"; import { tidalAdapter } from "@/lib/adapters/tidal"; import { upsertAccount } from "@/lib/db/repositories/accounts"; export async function GET(request: NextRequest) { const url = new URL(request.url); const code = url.searchParams.get("code"); const state = url.searchParams.get("state"); const error = url.searchParams.get("error"); if (error) { return NextResponse.redirect(new URL(`/accounts?error=${encodeURIComponent(error)}`, request.url)); } if (!code || !state) { return NextResponse.redirect(new URL("/accounts?error=missing_code_or_state", request.url)); } const pending = consumePendingAuth(state); if (!pending || pending.platform !== "tidal") { return NextResponse.redirect(new URL("/accounts?error=invalid_state", request.url)); } const tokens = await tidalAdapter.exchangeCode(code, pending.codeVerifier, pending.redirectUri); const profile = await tidalAdapter.getAccountProfile(tokens); upsertAccount("tidal", profile, tokens); return NextResponse.redirect(new URL("/accounts?connected=tidal", request.url)); }