import {z} from 'zod' export type ReportEmailSmtp = {global?: boolean | undefined, relay?: string | undefined, sender?: string | undefined}; export type ReportEmail = {access?: ('file' | 'zip' | 'url' | 'none') | undefined, additional?: ('file' | 'zip' | 'none') | undefined, additionalRecipients?: Array | undefined, assetAccess?: boolean | undefined, owner?: ('file' | 'url' | 'zip' | 'none') | undefined, smtp?: ReportEmailSmtp | undefined}; export type Link = {deprecation?: string | undefined, href?: string | undefined, hreflang?: string | undefined, media?: string | undefined, rel?: string | undefined, title?: string | undefined, type?: string | undefined}; export type ReportConfigCategoryFilters = {excluded?: Array | undefined, included?: Array | undefined, links: Array}; export type ReportConfigFiltersResource = {categories?: ReportConfigCategoryFilters | undefined, severity?: ('all' | 'critical' | 'critical-and-severe') | undefined, statuses?: (Array<'vulnerable' | 'vulnerable-version' | 'potentially-vulnerable' | 'vulnerable-and-validated'>) | undefined}; export type ReportRepeat = {dayOfWeek?: ('sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday') | undefined, every: 'hour' | 'day' | 'week' | 'date-of-month' | 'day-of-month', interval: number, weekOfMonth?: number | undefined}; export type ReportFrequencyResource = 'scan' | 'schedule' | 'none'; export type ReportFrequency = {nextRuntimes?: Array | undefined, repeat?: ReportRepeat | undefined, start?: string | undefined, type?: ReportFrequencyResource | undefined}; export type RangeIntervalResource = 'day' | 'month' | 'year'; export type RangeResource = {every?: RangeIntervalResource | undefined, from?: Record | undefined, interval?: number | undefined, to?: string | undefined}; export type RemediationSortResource = 'assets' | 'vulnerabilities' | 'malware_kits' | 'exploits' | 'riskscore'; export type RemediationResource = {solutions?: number | undefined, sort?: RemediationSortResource | undefined}; export type AllAssetsTrendOptionResource = 'average-risk' | 'number-of-assets' | 'none'; export type RiskTrendAllAssetsResource = {total?: boolean | undefined, trend?: AllAssetsTrendOptionResource | undefined}; export type AssetCollectionRiskTrendMembershipOptionResource = 'historical' | 'generation'; export type AssetCollectionRiskTrendOptionResource = 'average' | 'total'; export type RiskTrendResource = {allAssets?: RiskTrendAllAssetsResource | undefined, assetGroupMembership?: AssetCollectionRiskTrendMembershipOptionResource | undefined, assetGroups?: AssetCollectionRiskTrendOptionResource | undefined, assets?: boolean | undefined, from?: Record | undefined, sites?: AssetCollectionRiskTrendOptionResource | undefined, tagMembership?: AssetCollectionRiskTrendMembershipOptionResource | undefined, tags?: AssetCollectionRiskTrendOptionResource | undefined, to?: string | undefined}; export type ReportConfigScopeResource = {assetGroups?: Array | undefined, assets?: Array | undefined, scan?: Record | undefined, sites?: Array | undefined, tags?: Array | undefined}; export type ReportStorage = {location?: string | undefined, path?: string | undefined}; export type Report = {baseline?: Record | undefined, bureau?: string | undefined, component?: string | undefined, email?: ReportEmail | undefined, enclave?: string | undefined, filters?: ReportConfigFiltersResource | undefined, format?: ('sql-query' | 'arf-xml' | 'csv-export' | 'cyberscope-xml' | 'nexpose-simple-xml' | 'oval-xml' | 'qualys-xml' | 'scap-xml' | 'xccdf-csv' | 'xccdf-xml' | 'xml-export' | 'xml-export-v2' | 'pdf' | 'rtf' | 'xml' | 'html' | 'text') | undefined, frequency?: ReportFrequency | undefined, id?: number | undefined, language?: string | undefined, links?: Array | undefined, name?: string | undefined, organization?: string | undefined, owner?: number | undefined, policies?: Array> | undefined, policy?: Record | undefined, query?: string | undefined, range?: RangeResource | undefined, remediation?: RemediationResource | undefined, riskTrend?: RiskTrendResource | undefined, scope?: ReportConfigScopeResource | undefined, storage?: ReportStorage | undefined, template?: string | undefined, timezone?: string | undefined, users?: Array | undefined, version?: string | undefined}; export type UpdateApiApi3ReportsIdArgs = {id: number, body: Report}; export type UpdateApiApi3ReportsIdOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const link = z.object({deprecation: z.string().optional(), href: z.string().optional(), hreflang: z.string().optional(), media: z.string().optional(), rel: z.string().optional(), title: z.string().optional(), type: z.string().optional()}); export const links = z.object({links: z.array(link).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 }; /** * Report * * PUT /api/3/reports/{id} */ export const updateApiApi3ReportsId = async (args: UpdateApiApi3ReportsIdArgs, options?: UpdateApiApi3ReportsIdOptions) => { const {baseUrl = "https://:", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json;charset=UTF-8") const url = `${baseUrl.replace(/\/+$/, '')}/api/3/reports/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", 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(links, await res.json()) };