import {z} from 'zod' export type ChecksPAGESPEED = {pk?: number | undefined, url?: string | undefined, stats_url?: string | undefined, alerts_url?: string | undefined, share_url?: string | undefined, name?: string | undefined, cached_response_time?: number | undefined, contact_groups: Array, created_at?: string | undefined, modified_at?: string | undefined, locations?: Array | undefined, tags?: Array | undefined, check_type?: string | undefined, escalations?: string | undefined, monitoring_service_type?: string | undefined, is_paused?: boolean | undefined, send_resolved_notifications?: boolean | undefined, is_under_maintenance?: string | undefined, state_is_up?: boolean | undefined, state_changed_at?: string | undefined, maintenance_schedules?: Array | undefined, msp_interval: number, msp_username?: string | undefined, msp_password?: string | undefined, msp_headers?: string | undefined, msp_script: string, msp_num_retries?: number | undefined, msp_notes?: string | undefined, pagespeedconfig?: ({emulated_device?: ('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') | undefined, connection_throttling?: ('UNTHROTTLED' | 'BROADBAND_FAST' | 'BROADBAND' | 'BROADBAND_SLOW' | 'LTE' | 'FOUR_G' | 'FOUR_G_SLOW' | 'THREE_G' | 'THREE_G_SLOW') | undefined, exclude_urls?: string | undefined, uptime_grade_threshold?: ('' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F') | undefined, cached_uptime_grade?: (string | null) | undefined, cached_performance_score?: (number | null) | undefined, cached_best_practices_score?: (number | null) | undefined} | null) | undefined}; export type CreateApiApiV1ChecksAddPagespeedArgs = {body: ChecksPAGESPEED}; export type CreateApiApiV1ChecksAddPagespeedOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const checksPAGESPEED = 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), msp_username: z.string().max(255).optional(), msp_password: z.string().max(255).optional(), msp_headers: z.string().optional(), msp_script: z.string(), msp_num_retries: z.number().int().gte(0).lte(3).optional(), msp_notes: z.string().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()}); 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 }; /** * Create a new Page Speed check * * POST /api/v1/checks/add-pagespeed/ */ export const createApiApiV1ChecksAddPagespeed = async (args: CreateApiApiV1ChecksAddPagespeedArgs, options: CreateApiApiV1ChecksAddPagespeedOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/checks/add-pagespeed/${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(checksPAGESPEED, await res.json()) };