From 2b9d8fa7d5b8e9b6f9add118ff0f061cbddfef66 Mon Sep 17 00:00:00 2001 From: Unchained Date: Tue, 31 Mar 2026 13:34:37 +0200 Subject: [PATCH] fix: add OpenPanel proxy routes for script and tracking --- src/app/api/op/[...path]/route.ts | 5 ----- src/app/api/op/track/route.ts | 22 ++++++++++++++++++++++ src/app/api/op1/route.ts | 24 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) delete mode 100644 src/app/api/op/[...path]/route.ts create mode 100644 src/app/api/op/track/route.ts create mode 100644 src/app/api/op1/route.ts diff --git a/src/app/api/op/[...path]/route.ts b/src/app/api/op/[...path]/route.ts deleted file mode 100644 index 195832e..0000000 --- a/src/app/api/op/[...path]/route.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createRouteHandler } from "@openpanel/nextjs/server"; - -export const { GET, POST } = createRouteHandler({ - apiUrl: process.env.OPENPANEL_API_URL || "https://op.nodecrew.me/api", -}); diff --git a/src/app/api/op/track/route.ts b/src/app/api/op/track/route.ts new file mode 100644 index 0000000..00930be --- /dev/null +++ b/src/app/api/op/track/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from "next/server"; + +const OPENPANEL_API_URL = "https://op.nodecrew.me/api"; + +export async function POST(request: Request) { + try { + const body = await request.json(); + const response = await fetch(`${OPENPANEL_API_URL}/track`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body), + }); + + const data = await response.json(); + return NextResponse.json(data, { status: response.status }); + } catch (error) { + console.error("[OpenPanel] Track error:", error); + return NextResponse.json({ error: "Failed to track event" }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/op1/route.ts b/src/app/api/op1/route.ts new file mode 100644 index 0000000..a216637 --- /dev/null +++ b/src/app/api/op1/route.ts @@ -0,0 +1,24 @@ +import { NextResponse } from "next/server"; + +const OPENPANEL_SCRIPT_URL = "https://op.nodecrew.me/op1.js"; + +export async function GET(request: Request) { + const url = new URL(request.url); + const searchParams = url.search; + + try { + const response = await fetch(`${OPENPANEL_SCRIPT_URL}${searchParams}`); + const content = await response.text(); + + return new NextResponse(content, { + status: 200, + headers: { + "Content-Type": "application/javascript", + "Cache-Control": "public, max-age=86400, stale-while-revalidate=86400", + }, + }); + } catch (error) { + console.error("[OpenPanel] Failed to fetch script:", error); + return new NextResponse("/* OpenPanel script unavailable */", { status: 500 }); + } +} \ No newline at end of file