File size: 1,373 Bytes
6111b2b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import { requireManagementAuth } from "@/lib/api/requireManagementAuth";
import { getCommandCodeAuthSessionSafeStatus } from "@/lib/db/commandCodeAuth";
import { commandCodeStateSchema, noStoreJson, stateHashFromState } from "../shared";
async function readState(request: Request): Promise<string | null> {
const urlState = new URL(request.url).searchParams.get("state");
if (urlState) return urlState;
try {
const parsed = commandCodeStateSchema.safeParse(await request.json());
return parsed.success ? parsed.data.state : null;
} catch {
return null;
}
}
async function handle(request: Request) {
const authError = await requireManagementAuth(request);
if (authError) return authError;
const state = await readState(request);
const parsed = commandCodeStateSchema.safeParse({ state });
if (!parsed.success) return noStoreJson({ error: "Invalid state" }, { status: 400 });
const session = getCommandCodeAuthSessionSafeStatus(stateHashFromState(parsed.data.state));
if (!session) return noStoreJson({ status: "not_found" }, { status: 404 });
return noStoreJson({
status: session.status,
metadata: session.metadata,
expiresAt: session.expiresAt,
receivedAt: session.receivedAt,
appliedAt: session.appliedAt,
});
}
export const GET = handle;
export const POST = handle;
|