Files

36 lines
1.2 KiB
TypeScript

import { errorResponse } from "@/lib/security/http";
import { limitRequest, trustedClientAddress } from "@/lib/security/rate-limit";
import { connection } from "next/server";
import { normalizeDeploymentId } from "@/lib/deployment/version";
import {
DEPLOYMENT_EVENT_TOPIC,
getLatestDeploymentStatus,
} from "@/lib/deployment/repository";
import { createRedisNamedEventResponse } from "@/lib/events/redis-stream";
export async function GET(request: Request) {
await connection();
try {
await limitRequest("stream-open", trustedClientAddress(request.headers), 60);
const deploymentId =
normalizeDeploymentId(process.env.NEXT_DEPLOYMENT_ID) ?? "development";
return await createRedisNamedEventResponse(
DEPLOYMENT_EVENT_TOPIC,
"deployment-status",
request.signal,
async () => {
const latestStatus = await getLatestDeploymentStatus();
return [
{ eventName: "deployment", data: deploymentId },
...(latestStatus
? [{ eventName: "deployment-status", data: JSON.stringify(latestStatus) }]
: []),
];
},
);
} catch (cause) {
return errorResponse(cause);
}
}