import { base } from "@openstatus/assertions"; import { monitorMethods, monitorStatus } from "@openstatus/db/src/schema"; import { z } from "zod"; export const httpPayloadSchema = z.object({ workspaceId: z.string(), monitorId: z.string(), method: z.enum(monitorMethods), body: z.string().optional(), headers: z.array(z.object({ key: z.string(), value: z.string() })).optional(), url: z.string(), cronTimestamp: z.number(), status: z.enum(monitorStatus), assertions: z.array(base).nullable(), timeout: z.number().prefault(45000), degradedAfter: z.number().nullable(), trigger: z.enum(["cron", "api"]).optional().nullable().prefault("cron"), otelConfig: z .object({ endpoint: z.string(), headers: z.record(z.string(), z.string()), }) .optional(), retry: z.number().prefault(3), followRedirects: z.boolean().prefault(true), }); export type HttpPayload = z.infer; export const tpcPayloadSchema = z.object({ status: z.enum(monitorStatus), workspaceId: z.string(), uri: z.string(), monitorId: z.string(), assertions: z.array(base).nullable(), cronTimestamp: z.number(), timeout: z.number().prefault(45000), degradedAfter: z.number().nullable(), trigger: z.enum(["cron", "api"]).optional().nullable().prefault("cron"), otelConfig: z .object({ endpoint: z.string(), headers: z.record(z.string(), z.string()), }) .optional(), retry: z.number().prefault(3), }); export type TcpPayload = z.infer; export const DNSPayloadSchema = z.object({ status: z.enum(monitorStatus), workspaceId: z.string(), uri: z.string(), monitorId: z.string(), assertions: z.array(base).nullable(), cronTimestamp: z.number(), timeout: z.number().prefault(45000), degradedAfter: z.number().nullable(), trigger: z.enum(["cron", "api"]).optional().nullable().prefault("cron"), otelConfig: z .object({ endpoint: z.string(), headers: z.record(z.string(), z.string()), }) .optional(), retry: z.number().prefault(3), }); export type DNSPayload = z.infer; export function transformHeaders(headers: { key: string; value: string }[]) { return headers.length > 0 ? headers.reduce( (acc, curr) => { acc[curr.key] = curr.value; return acc; }, {} as Record, ) : {}; }