44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { documentBridgeErrorResponse } from "@/lib/documents/bridge";
|
|||
|
|
import {
|
||
|
|
buildMnoteWebForwardHeaders,
|
||
|
|
buildMnoteWebStreamUrl,
|
||
|
|
} from "@/lib/server/mnote-web";
|
||
|
|
|
||
|
|
export const dynamic = "force-dynamic";
|
||
|
|
|
||
|
|
export async function GET(request: Request) {
|
||
|
|
try {
|
||
|
|
const requestUrl = new URL(request.url);
|
||
|
|
const workspaceId = String(requestUrl.searchParams.get("workspaceId") || "").trim();
|
||
|
|
const cursor = String(requestUrl.searchParams.get("cursor") || "").trim() || null;
|
||
|
|
|
||
|
|
if (!workspaceId) {
|
||
|
|
return Response.json({ error: "缺少 workspaceId" }, { status: 400 });
|
||
|
|
}
|
||
|
|
|
||
|
|
const targetUrl = buildMnoteWebStreamUrl({ workspaceId, cursor });
|
||
|
|
const headers = await buildMnoteWebForwardHeaders(request);
|
||
|
|
headers.set("accept", "text/event-stream");
|
||
|
|
headers.set("x-mnote-workspace-id", workspaceId);
|
||
|
|
|
||
|
|
const upstream = await fetch(targetUrl.toString(), {
|
||
|
|
method: "GET",
|
||
|
|
headers,
|
||
|
|
cache: "no-store",
|
||
|
|
redirect: "follow",
|
||
|
|
});
|
||
|
|
|
||
|
|
const responseHeaders = new Headers(upstream.headers);
|
||
|
|
responseHeaders.delete("set-cookie");
|
||
|
|
responseHeaders.set("cache-control", "no-store");
|
||
|
|
|
||
|
|
return new Response(upstream.body, {
|
||
|
|
status: upstream.status,
|
||
|
|
statusText: upstream.statusText,
|
||
|
|
headers: responseHeaders,
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
return documentBridgeErrorResponse(error);
|
||
|
|
}
|
||
|
|
}
|