Openstatus
www.openstatus.dev
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}