Openstatus www.openstatus.dev
at 4c0f4c00a38753a5d0dfd7e7b7b7706dec6f1503 83 lines 2.4 kB view raw
1import { base } from "@openstatus/assertions"; 2import { monitorMethods, monitorStatus } from "@openstatus/db/src/schema"; 3 4import { z } from "zod"; 5 6export const httpPayloadSchema = z.object({ 7 workspaceId: z.string(), 8 monitorId: z.string(), 9 method: z.enum(monitorMethods), 10 body: z.string().optional(), 11 headers: z.array(z.object({ key: z.string(), value: z.string() })).optional(), 12 url: z.string(), 13 cronTimestamp: z.number(), 14 status: z.enum(monitorStatus), 15 assertions: z.array(base).nullable(), 16 timeout: z.number().prefault(45000), 17 degradedAfter: z.number().nullable(), 18 trigger: z.enum(["cron", "api"]).optional().nullable().prefault("cron"), 19 otelConfig: z 20 .object({ 21 endpoint: z.string(), 22 headers: z.record(z.string(), z.string()), 23 }) 24 .optional(), 25 retry: z.number().prefault(3), 26 followRedirects: z.boolean().prefault(true), 27}); 28 29export type HttpPayload = z.infer<typeof httpPayloadSchema>; 30 31export const tpcPayloadSchema = z.object({ 32 status: z.enum(monitorStatus), 33 workspaceId: z.string(), 34 uri: z.string(), 35 monitorId: z.string(), 36 assertions: z.array(base).nullable(), 37 cronTimestamp: z.number(), 38 timeout: z.number().prefault(45000), 39 degradedAfter: z.number().nullable(), 40 trigger: z.enum(["cron", "api"]).optional().nullable().prefault("cron"), 41 otelConfig: z 42 .object({ 43 endpoint: z.string(), 44 headers: z.record(z.string(), z.string()), 45 }) 46 .optional(), 47 retry: z.number().prefault(3), 48}); 49 50export type TcpPayload = z.infer<typeof tpcPayloadSchema>; 51 52export const DNSPayloadSchema = z.object({ 53 status: z.enum(monitorStatus), 54 workspaceId: z.string(), 55 uri: z.string(), 56 monitorId: z.string(), 57 assertions: z.array(base).nullable(), 58 cronTimestamp: z.number(), 59 timeout: z.number().prefault(45000), 60 degradedAfter: z.number().nullable(), 61 trigger: z.enum(["cron", "api"]).optional().nullable().prefault("cron"), 62 otelConfig: z 63 .object({ 64 endpoint: z.string(), 65 headers: z.record(z.string(), z.string()), 66 }) 67 .optional(), 68 retry: z.number().prefault(3), 69}); 70 71export type DNSPayload = z.infer<typeof DNSPayloadSchema>; 72 73export function transformHeaders(headers: { key: string; value: string }[]) { 74 return headers.length > 0 75 ? headers.reduce( 76 (acc, curr) => { 77 acc[curr.key] = curr.value; 78 return acc; 79 }, 80 {} as Record<string, string>, 81 ) 82 : {}; 83}