| import { NextResponse } from "next/server"; |
| import { |
| deleteProxyPool, |
| getProviderConnections, |
| getProxyPoolById, |
| updateProxyPool, |
| } from "@/models"; |
|
|
| function normalizeProxyPoolUpdate(body = {}) { |
| const updates = {}; |
|
|
| if (Object.prototype.hasOwnProperty.call(body, "name")) { |
| const name = typeof body?.name === "string" ? body.name.trim() : ""; |
| if (!name) { |
| return { error: "Name is required" }; |
| } |
| updates.name = name; |
| } |
|
|
| if (Object.prototype.hasOwnProperty.call(body, "proxyUrl")) { |
| const proxyUrl = typeof body?.proxyUrl === "string" ? body.proxyUrl.trim() : ""; |
| if (!proxyUrl) { |
| return { error: "Proxy URL is required" }; |
| } |
| updates.proxyUrl = proxyUrl; |
| } |
|
|
| if (Object.prototype.hasOwnProperty.call(body, "noProxy")) { |
| updates.noProxy = typeof body?.noProxy === "string" ? body.noProxy.trim() : ""; |
| } |
|
|
| if (Object.prototype.hasOwnProperty.call(body, "isActive")) { |
| updates.isActive = body?.isActive === true; |
| } |
|
|
| if (Object.prototype.hasOwnProperty.call(body, "strictProxy")) { |
| updates.strictProxy = body?.strictProxy === true; |
| } |
|
|
| if (Object.prototype.hasOwnProperty.call(body, "type")) { |
| const validTypes = ["http", "vercel", "cloudflare"]; |
| updates.type = validTypes.includes(body?.type) ? body.type : "http"; |
| } |
|
|
| return { updates }; |
| } |
|
|
| function countBoundConnections(connections = [], proxyPoolId) { |
| return connections.filter((connection) => connection?.providerSpecificData?.proxyPoolId === proxyPoolId).length; |
| } |
|
|
| |
| export async function GET(request, { params }) { |
| try { |
| const { id } = await params; |
| const proxyPool = await getProxyPoolById(id); |
|
|
| if (!proxyPool) { |
| return NextResponse.json({ error: "Proxy pool not found" }, { status: 404 }); |
| } |
|
|
| return NextResponse.json({ proxyPool }); |
| } catch (error) { |
| console.log("Error fetching proxy pool:", error); |
| return NextResponse.json({ error: "Failed to fetch proxy pool" }, { status: 500 }); |
| } |
| } |
|
|
| |
| export async function PUT(request, { params }) { |
| try { |
| const { id } = await params; |
| const existing = await getProxyPoolById(id); |
|
|
| if (!existing) { |
| return NextResponse.json({ error: "Proxy pool not found" }, { status: 404 }); |
| } |
|
|
| const body = await request.json(); |
| const normalized = normalizeProxyPoolUpdate(body); |
|
|
| if (normalized.error) { |
| return NextResponse.json({ error: normalized.error }, { status: 400 }); |
| } |
|
|
| const updated = await updateProxyPool(id, normalized.updates); |
| return NextResponse.json({ proxyPool: updated }); |
| } catch (error) { |
| console.log("Error updating proxy pool:", error); |
| return NextResponse.json({ error: "Failed to update proxy pool" }, { status: 500 }); |
| } |
| } |
|
|
| |
| export async function DELETE(request, { params }) { |
| try { |
| const { id } = await params; |
| const existing = await getProxyPoolById(id); |
|
|
| if (!existing) { |
| return NextResponse.json({ error: "Proxy pool not found" }, { status: 404 }); |
| } |
|
|
| const connections = await getProviderConnections(); |
| const boundConnectionCount = countBoundConnections(connections, id); |
|
|
| if (boundConnectionCount > 0) { |
| return NextResponse.json( |
| { |
| error: "Proxy pool is currently in use", |
| boundConnectionCount, |
| }, |
| { status: 409 } |
| ); |
| } |
|
|
| await deleteProxyPool(id); |
| return NextResponse.json({ success: true }); |
| } catch (error) { |
| console.log("Error deleting proxy pool:", error); |
| return NextResponse.json({ error: "Failed to delete proxy pool" }, { status: 500 }); |
| } |
| } |
|
|