47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { NextResponse } from "next/server";
|
||
import { getOrCreateSettings } from "@/lib/user-settings";
|
||
import { getActiveAccountId } from "@/lib/account-context";
|
||
import { buildThreadsOAuthUrl, getAppBaseUrl, getThreadsAppId } from "@/lib/threads-api";
|
||
|
||
export async function GET(request: Request) {
|
||
let homeUrl: URL;
|
||
try {
|
||
homeUrl = new URL("/", new URL(request.url).origin);
|
||
} catch {
|
||
return NextResponse.json({ error: "invalid request url" }, { status: 400 });
|
||
}
|
||
|
||
try {
|
||
const settings = await getOrCreateSettings();
|
||
const appId = getThreadsAppId();
|
||
homeUrl = new URL("/", getAppBaseUrl(request, settings.appUrl));
|
||
|
||
if (!appId) {
|
||
homeUrl.searchParams.set(
|
||
"threads_error",
|
||
"系統尚未設定 Threads App,請管理員在 .env 填入 THREADS_APP_ID"
|
||
);
|
||
return NextResponse.redirect(homeUrl);
|
||
}
|
||
|
||
const accountId = await getActiveAccountId();
|
||
if (!accountId) {
|
||
homeUrl.searchParams.set("threads_error", "no_active_account");
|
||
return NextResponse.redirect(homeUrl);
|
||
}
|
||
|
||
try {
|
||
const url = buildThreadsOAuthUrl(request, appId, accountId, settings.appUrl);
|
||
return NextResponse.redirect(url);
|
||
} catch (err) {
|
||
const message = err instanceof Error ? err.message : "invalid_app_id";
|
||
homeUrl.searchParams.set("threads_error", message);
|
||
return NextResponse.redirect(homeUrl);
|
||
}
|
||
} catch (err) {
|
||
const message = err instanceof Error ? err.message : "authorize_failed";
|
||
homeUrl.searchParams.set("threads_error", message);
|
||
return NextResponse.redirect(homeUrl);
|
||
}
|
||
}
|