Spaces:
Paused
Paused
Download src/app/api/cloud/credentials/update/route.ts from igorkurgin/omniroute: direct link, hf CLI and curl.
- Browser
- Download file 2.63 kB
-
https://huggingface.co/spaces/igorkurgin/omniroute/resolve/main/src/app/api/cloud/credentials/update/route.ts
- Command line
-
hf download hf://spaces/igorkurgin/omniroute/src/app/api/cloud/credentials/update/route.ts
-
curl -L -o route.ts https://huggingface.co/spaces/igorkurgin/omniroute/resolve/main/src/app/api/cloud/credentials/update/route.ts
2.63 kB
| import { NextResponse } from "next/server"; | |
| import { validateApiKey, getProviderConnections, updateProviderConnection } from "@/models"; | |
| import { cloudCredentialUpdateSchema } from "@/shared/validation/schemas"; | |
| import { isValidationFailure, validateBody } from "@/shared/validation/helpers"; | |
| // Update provider credentials (for cloud token refresh) | |
| export async function PUT(request: Request) { | |
| let rawBody; | |
| try { | |
| rawBody = await request.json(); | |
| } catch { | |
| return NextResponse.json( | |
| { error: { message: "Invalid request", details: [{ field: "body", message: "Invalid JSON body" }] } }, | |
| { status: 400 } | |
| ); | |
| } | |
| try { | |
| const authHeader = request.headers.get("Authorization"); | |
| if (!authHeader?.startsWith("Bearer ")) { | |
| return NextResponse.json({ error: "Missing API key" }, { status: 401 }); | |
| } | |
| const apiKey = authHeader.slice(7); | |
| const validation = validateBody(cloudCredentialUpdateSchema, rawBody); | |
| if (isValidationFailure(validation)) { | |
| return NextResponse.json({ error: validation.error }, { status: 400 }); | |
| } | |
| const { provider, credentials } = validation.data; | |
| // Validate API key | |
| const isValid = await validateApiKey(apiKey); | |
| if (!isValid) { | |
| return NextResponse.json({ error: "Invalid API key" }, { status: 401 }); | |
| } | |
| // Find active connection for provider | |
| const connections = await getProviderConnections({ provider, isActive: true }); | |
| const connection = connections[0]; | |
| if (!connection) { | |
| return NextResponse.json( | |
| { error: `No active connection found for provider: ${provider}` }, | |
| { status: 404 } | |
| ); | |
| } | |
| // Update credentials | |
| const updateData: Record<string, unknown> = {}; | |
| if (credentials.accessToken) { | |
| updateData.accessToken = credentials.accessToken; | |
| } | |
| if (credentials.refreshToken) { | |
| updateData.refreshToken = credentials.refreshToken; | |
| } | |
| if (credentials.expiresIn) { | |
| updateData.expiresAt = new Date(Date.now() + credentials.expiresIn * 1000).toISOString(); | |
| } | |
| const connectionId = typeof connection.id === "string" ? connection.id : null; | |
| if (!connectionId) { | |
| return NextResponse.json({ error: "Invalid provider connection ID" }, { status: 500 }); | |
| } | |
| await updateProviderConnection(connectionId, updateData); | |
| return NextResponse.json({ | |
| success: true, | |
| message: `Credentials updated for provider: ${provider}`, | |
| }); | |
| } catch (error) { | |
| console.log("Update credentials error:", error); | |
| return NextResponse.json({ error: "Failed to update credentials" }, { status: 500 }); | |
| } | |
| } | |