Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071import { type Region, monitorRegionSchema,} from "@openstatus/db/src/schema/constants";import { NextResponse } from "next/server";import { z } from "zod";
import { TCPResponse, tcpPayload } from "./schema";
export const runtime = "edge";export const preferredRegion = "auto";export const dynamic = "force-dynamic";export const revalidate = 0;
export function GET() { return NextResponse.json({ success: true });}
export async function POST(request: Request) { try { const json = await request.json(); const _valid = tcpPayload .pick({ url: true }) .extend(z.object({ region: monitorRegionSchema.prefault("ams") }).shape) .safeParse(json);
if (!_valid.success) { return NextResponse.json({ success: false }, { status: 400 }); }
const { url, region } = _valid.data;
const res = await checkTCP(url, region);
return NextResponse.json(res); } catch (e) { console.error(e); return NextResponse.json({ success: false }, { status: 400 }); }}async function checkTCP(url: string, region: Region) { // const res = await fetch(`https://checker.openstatus.dev/tcp/${region}`, { headers: { Authorization: `Basic ${process.env.CRON_SECRET}`, "Content-Type": "application/json", "fly-prefer-region": region, }, method: "POST", body: JSON.stringify({ uri: url, }), next: { revalidate: 0 }, });
const json = await res.json();
const data = TCPResponse.safeParse(json);
if (!data.success) { console.error(res); console.error(JSON.stringify(json)); console.error( `something went wrong with request to ${url} error ${data.error.message}`, ); throw new Error(data.error.message); }
return data.data;}