36 lines
1.2 KiB
TypeScript
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);
|
|
}
|
|
}
|