trptk/app/api/checkout/downloads/route.ts
2026-02-24 17:14:07 +01:00

47 lines
1.5 KiB
TypeScript

import { NextResponse } from "next/server";
import { isNonEmptyString } from "@/lib/apiUtils";
import { getAuthToken } from "@/lib/auth";
const MEDUSA_URL = process.env.MEDUSA_URL ?? process.env.NEXT_PUBLIC_MEDUSA_URL ?? "http://localhost:9000";
const API_KEY = process.env.MEDUSA_PUBLISHABLE_KEY ?? process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY ?? "";
// GET /api/checkout/downloads?orderId=xxx
export async function GET(request: Request) {
const token = await getAuthToken();
if (!token) {
return NextResponse.json({ error: "Not authenticated" }, { status: 401 });
}
const { searchParams } = new URL(request.url);
const orderId = searchParams.get("orderId");
if (!isNonEmptyString(orderId)) {
return NextResponse.json({ error: "Missing orderId" }, { status: 400 });
}
try {
const res = await fetch(
`${MEDUSA_URL}/store/order-downloads?order_id=${encodeURIComponent(orderId)}`,
{
headers: {
"x-publishable-api-key": API_KEY,
Authorization: `Bearer ${token}`,
},
},
);
if (!res.ok) {
console.error("[downloads]", `Medusa returned ${res.status} for order ${orderId}`);
return NextResponse.json(
{ error: "Failed to fetch downloads" },
{ status: res.status >= 400 && res.status < 500 ? res.status : 500 },
);
}
const data = await res.json();
return NextResponse.json(data);
} catch (e) {
console.error("[downloads]", (e as Error).message);
return NextResponse.json({ error: "Failed to fetch downloads" }, { status: 500 });
}
}