import {z} from 'zod' export type GetApiApiV1ChecksPkArgs = {pk: string}; export type GetApiApiV1ChecksPkOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const checksExtraConfig = z.object({pk: z.number().int().optional(), url: z.string().optional(), stats_url: z.string().optional(), alerts_url: z.string().optional(), share_url: z.string().optional(), name: z.string().max(100).optional(), cached_response_time: z.number().optional(), contact_groups: z.array(z.string()), created_at: z.string().optional(), modified_at: z.string().optional(), locations: z.array(z.string()).optional(), tags: z.array(z.string()).optional(), check_type: z.string().optional(), escalations: z.string().optional(), monitoring_service_type: z.string().optional(), is_paused: z.boolean().optional(), send_resolved_notifications: z.boolean().optional(), is_under_maintenance: z.string().optional(), state_is_up: z.boolean().optional(), state_changed_at: z.string().optional(), maintenance_schedules: z.array(z.number().int()).optional(), msp_interval: z.number().int().gte(0).lte(2147483647).optional(), msp_address: z.string(), msp_port: z.number().int().gte(1).lte(65535).nullable().optional(), msp_username: z.string().max(255).optional(), msp_password: z.string().max(255).optional(), msp_proxy: z.string().max(255).optional(), msp_dns_server: z.string().max(255).optional(), msp_dns_record_type: z.enum(["A", "AAAA", "CNAME", "MX", "NS", "PTR", "SOA", "TXT", "ANY"]).optional(), msp_status_code: z.string().max(255).optional(), msp_send_string: z.string().optional(), msp_expect_string: z.string().optional(), msp_expect_string_type: z.enum(["STRING", "REGEX", "INVERSE_REGEX"]).optional(), msp_encryption: z.enum(["", "SSL_TLS"]).optional(), msp_threshold: z.number().int().gte(0).lte(2147483647).nullable().optional(), msp_headers: z.string().optional(), msp_script: z.string().optional(), msp_version: z.number().int().gte(0).lte(2147483647).optional(), msp_sensitivity: z.number().int().gte(0).lte(2147483647).optional(), msp_num_retries: z.number().int().gte(0).lte(3).optional(), msp_use_ip_version: z.enum(["", "IPV4", "IPV6"]).optional(), msp_uptime_sla: z.string().optional(), msp_response_time_sla: z.string().nullable().optional(), msp_notes: z.string().optional(), msp_include_in_global_metrics: z.boolean().optional(), webhook_url: z.string().optional(), heartbeat_url: z.string().optional(), rumconfig: z.object({aggregation_type: z.enum(["MED", "AVG", "P75", "P90", "P95", "P98", "P99"]).optional(), exclude_useragents: z.string().max(255).optional(), apdex_threshold: z.number().int().gte(-2147483648).lte(2147483647).optional(), url_groups: z.string().optional(), external_domains: z.string().max(255).optional(), exclude_get_params: z.string().max(255).optional(), is_ajax_disabled: z.boolean().optional()}).nullable().optional(), groupcheckconfig: z.object({group_check_services: z.array(z.string()).optional(), group_check_tags: z.array(z.string()).optional(), group_check_down_condition: z.enum(["ANY", "TWO", "THREE", "FOUR", "FIVE", "TEN", "ONE_PCT", "THREE_PCT", "FIVE_PCT", "TEN_PCT", "TWENTYFIVE_PCT", "FIFTY_PCT", "ALL"]).optional(), group_uptime_percent_calculation: z.enum(["UP_DOWN_STATES", "AVERAGE"]).optional(), group_response_time_calculation_mode: z.enum(["NONE", "COPY", "AVERAGE"]).optional(), group_response_time_check_type: z.enum(["HTTP", "TRANSACTION", "API", "ICMP", "HEARTBEAT", "WEBHOOK"]).optional(), group_response_time_single_check: z.string().nullable().optional()}).nullable().optional(), sslconfig: z.object({ssl_cert_protocol: z.enum(["https", "ftp", "ftps", "http", "h2", "imap", "imaps", "irc", "ircs", "ldap", "ldaps", "mysql", "pop3", "pop3s", "postgres", "sieve", "smtp", "smtps", "xmpp", "xmpp-server"]).optional(), ssl_cert_crl: z.boolean().optional(), ssl_cert_first_element_only: z.boolean().optional(), ssl_cert_match: z.string().optional(), ssl_cert_issuer: z.string().optional(), ssl_cert_resolve: z.string().optional(), ssl_cert_minimum_ssl_tls_version: z.enum(["sslv3", "tlsv1", "tlsv11", "tlsv12", "tlsv13"]).optional(), ssl_cert_fingerprint: z.string().optional(), ssl_cert_selfsigned: z.boolean().optional(), ssl_cert_file: z.string().max(200).nullable().optional(), ssl_ignore_authority_warnings: z.boolean().optional(), ssl_ignore_sct: z.boolean().optional()}).nullable().optional(), pagespeedconfig: z.object({emulated_device: z.enum(["DEFAULT", "DESKTOP_LOW_END", "IPHONE_17_PRO_MAX", "IPHONE_17", "IPHONE_16_PRO_MAX", "IPHONE_16", "IPHONE_15_PRO_MAX", "IPHONE_15", "IPHONE_14_PRO_MAX", "IPHONE_13_PRO_MAX", "IPHONE_13", "IPHONE_12_PRO_MAX", "IPHONE_12", "IPHONE_11_PRO_MAX", "IPHONE_11_PRO", "IPHONE_11", "GOOGLE_PIXEL_10", "GOOGLE_PIXEL_10_PRO", "GOOGLE_PIXEL_9", "GOOGLE_PIXEL_9_PRO", "GOOGLE_PIXEL_8_PRO", "GOOGLE_PIXEL_7", "GOOGLE_PIXEL_6", "GOOGLE_PIXEL_6_PRO", "SAMSUNG_GALAXY_S24_ULTRA", "SAMSUNG_GALAXY_S23", "SAMSUNG_GALAXY_Z_FOLD_5", "SAMSUNG_GALAXY_S10", "SAMSUNG_GALAXY_S10_PLUS", "SAMSUNG_GALAXY_S21", "SAMSUNG_GALAXY_S21_PLUS", "SAMSUNG_GALAXY_S21_ULTRA", "SAMSUNG_GALAXY_S22", "IPAD_PRO_12_9", "IPAD_AIR", "IPAD_MINI", "IPAD_PRO_11", "MOBILE_MID_TIER", "MOBILE_LOW_END"]).optional(), connection_throttling: z.enum(["UNTHROTTLED", "BROADBAND_FAST", "BROADBAND", "BROADBAND_SLOW", "LTE", "FOUR_G", "FOUR_G_SLOW", "THREE_G", "THREE_G_SLOW"]).optional(), exclude_urls: z.string().max(255).optional(), uptime_grade_threshold: z.enum(["", "A", "B", "C", "D", "E", "F"]).optional(), cached_uptime_grade: z.string().nullable().optional(), cached_performance_score: z.number().int().nullable().optional(), cached_best_practices_score: z.number().int().nullable().optional()}).nullable().optional(), cloudstatusconfig: z.object({notify_only_on_down: z.boolean().optional(), service_name: z.string().nullable().optional(), group: z.number().int().nullable().optional(), monitoring_type: z.enum(["ALL", "SPECIFIC"]).nullable().optional(), services: z.array(z.number().int()).optional(), service_titles: z.array(z.string()).optional()}), ftpconfig: z.object({ftp_paths: z.string().nullable().optional(), ftp_skip_cert_verification: z.boolean().optional(), ftp_explicit_tls: z.boolean().optional()}).nullable().optional(), sftpconfig: z.object({ftp_paths: z.string().nullable().optional(), sftp_private_key: z.string().nullable().optional(), sftp_passphrase: z.string().nullable().optional(), sftp_known_hosts: z.string().nullable().optional()}).nullable().optional(), networkconfig: z.object({network_locations: z.array(z.object({})).optional(), network_name: z.string().optional(), network_capture_traceroute: z.boolean().optional(), network_no_probe_fallback: z.enum(["UP", "DOWN"]).optional()}).nullable().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get a single check * * GET /api/v1/checks/{pk}/ */ export const getApiApiV1ChecksPk = async (args: GetApiApiV1ChecksPkArgs, options: GetApiApiV1ChecksPkOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/checks/${encodeURIComponent(String(args.pk))}/${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(checksExtraConfig, await res.json()) };