import {z} from 'zod' export type CreateApiV2CustomFieldsBulkArgs = {body: {customFields?: (Array<{label: string, fieldName: string, description?: string | undefined, type?: ('DROPDOWN' | 'MULTI_SELECT' | 'CHECKBOX' | 'TEXT' | 'TEXT_MULTILINE' | 'TEXT_ENCRYPTED' | 'NUMERIC' | 'DECIMAL' | 'DATE' | 'DATE_TIME' | 'TIME' | 'ATTACHMENT' | 'NODE_DROPDOWN' | 'NODE_MULTI_SELECT' | 'CLIENT_DROPDOWN' | 'CLIENT_MULTI_SELECT' | 'CLIENT_LOCATION_DROPDOWN' | 'CLIENT_LOCATION_MULTI_SELECT' | 'CLIENT_DOCUMENT_DROPDOWN' | 'CLIENT_DOCUMENT_MULTI_SELECT' | 'EMAIL' | 'PHONE' | 'IP_ADDRESS' | 'WYSIWYG' | 'URL' | 'MONETARY' | 'IDENTIFIER' | 'TOTP' | 'HEALTH_STATUS') | undefined, technicianPermission?: ('NONE' | 'EDITABLE' | 'READ_ONLY' | 'ROLE_BASED') | undefined, scriptPermission?: ('NONE' | 'READ_ONLY' | 'WRITE_ONLY' | 'READ_WRITE') | undefined, apiPermission?: ('NONE' | 'READ_ONLY' | 'WRITE_ONLY' | 'READ_WRITE') | undefined, defaultValue?: string | undefined, content?: ({values?: (Array<{name?: string | undefined}>) | undefined, required?: boolean | undefined, footerText?: string | undefined, tooltipText?: string | undefined, advancedSettings?: ({fileMaxSize?: number | undefined, fileExtensions?: Array | undefined, dateFilters?: ({type?: ('NONE' | 'INCLUDE' | 'EXCLUDE' | 'PAST_DATES_ONLY' | 'FUTURE_DATES_ONLY' | 'RANGE') | undefined, selected?: Array | undefined}) | undefined, maxCharacters?: number | undefined, maxWysiwygHtmlCharacters?: number | undefined, complexityRules?: ({mustContainOneInteger?: boolean | undefined, mustContainOneLowercaseLetter?: boolean | undefined, mustContainOneUppercaseLetter?: boolean | undefined, greaterOrEqualThanSixCharacters?: boolean | undefined}) | undefined, numericRange?: ({min?: number | undefined, max?: number | undefined}) | undefined, org?: Array | undefined, nodeClass?: (Array<'WINDOWS_SERVER' | 'WINDOWS_WORKSTATION' | 'LINUX_WORKSTATION' | 'MAC' | 'ANDROID' | 'APPLE_IOS' | 'APPLE_IPADOS' | 'AOSP' | 'CHROMEOS' | 'VMWARE_VM_HOST' | 'VMWARE_VM_GUEST' | 'HYPERV_VMM_HOST' | 'HYPERV_VMM_GUEST' | 'LINUX_SERVER' | 'MAC_SERVER' | 'CLOUD_MONITOR_TARGET' | 'NMS_SWITCH' | 'NMS_ROUTER' | 'NMS_FIREWALL' | 'NMS_PRIVATE_NETWORK_GATEWAY' | 'NMS_PRINTER' | 'NMS_SCANNER' | 'NMS_DIAL_MANAGER' | 'NMS_WAP' | 'NMS_IPSLA' | 'NMS_COMPUTER' | 'NMS_VM_HOST' | 'NMS_APPLIANCE' | 'NMS_OTHER' | 'NMS_SERVER' | 'NMS_PHONE' | 'NMS_VIRTUAL_MACHINE' | 'NMS_NETWORK_MANAGEMENT_AGENT' | 'UNMANAGED_DEVICE' | 'MANAGED_DEVICE'>) | undefined, ipAddressType?: ('ALL' | 'IPV4' | 'IPV6') | undefined, expandLargeValueOnRender?: boolean | undefined, identifier?: ({automaticGenerationEnabled?: boolean | undefined, scope?: ('NONE' | 'GLOBAL' | 'ORGANIZATION') | undefined, assignTo?: ('NEW_ASSETS_ONLY' | 'NEW_AND_EXISTING_ASSETS') | undefined, type?: ('CUSTOM' | 'SEQUENCE') | undefined, nextSequenceNumber?: number | undefined, prefix?: string | undefined, suffix?: string | undefined}) | undefined, monetary?: ({currency?: ('USD' | 'EUR' | 'CAD' | 'GBP' | 'AUD' | 'JPY' | 'SEK' | 'NOK' | 'DKK' | 'CHF' | 'AED' | 'AFN' | 'ALL' | 'AMD' | 'AOA' | 'ARS' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CDF' | 'CHE' | 'CHW' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CVE' | 'CZK' | 'DJF' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'FJD' | 'FKP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SGD' | 'SHP' | 'SLE' | 'SOS' | 'SRD' | 'SSP' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'UYI' | 'UYU' | 'UZS' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAD' | 'XAF' | 'XCD' | 'XPF' | 'YER' | 'ZAR' | 'ZMW' | 'ZWG') | undefined}) | undefined, templates?: Array | undefined, nodeRole?: Array | undefined, healthStatus?: ({allowedStatuses?: (Array<'UNHEALTHY' | 'NEEDS_ATTENTION' | 'HEALTHY' | 'UNKNOWN'>) | undefined}) | undefined}) | undefined}) | undefined, scope?: ('NODE_GLOBAL' | 'NODE_ROLE' | 'NODE_CLASS') | undefined, definitionScope?: (Array<'NODE' | 'END_USER' | 'LOCATION' | 'ORGANIZATION' | 'GLOBAL'>) | undefined, groupId?: number | undefined, addToDefaultTab?: boolean | undefined}>) | undefined}}; export type CreateApiV2CustomFieldsBulkOptions = {baseUrl: string, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const createApiV2CustomFieldsBulkResponse = z.array(z.object({entityType: z.enum(["USER", "NODE", "TICKET", "DOCUMENT", "INPUT_FIELD_FORM"]).optional(), scope: z.enum(["NODE_GLOBAL", "NODE_ROLE", "NODE_CLASS"]).optional(), definitionScope: z.array(z.enum(["NODE", "END_USER", "LOCATION", "ORGANIZATION", "GLOBAL"])).optional(), type: z.enum(["DROPDOWN", "MULTI_SELECT", "CHECKBOX", "TEXT", "TEXT_MULTILINE", "TEXT_ENCRYPTED", "NUMERIC", "DECIMAL", "DATE", "DATE_TIME", "TIME", "ATTACHMENT", "NODE_DROPDOWN", "NODE_MULTI_SELECT", "CLIENT_DROPDOWN", "CLIENT_MULTI_SELECT", "CLIENT_LOCATION_DROPDOWN", "CLIENT_LOCATION_MULTI_SELECT", "CLIENT_DOCUMENT_DROPDOWN", "CLIENT_DOCUMENT_MULTI_SELECT", "EMAIL", "PHONE", "IP_ADDRESS", "WYSIWYG", "URL", "MONETARY", "IDENTIFIER", "TOTP", "HEALTH_STATUS"]).optional(), label: z.string().optional(), description: z.string().optional(), name: z.string().optional(), defaultValue: z.string().optional(), endUserPermission: z.enum(["HIDDEN", "EDITABLE_OPTIONAL", "EDITABLE_REQUIRED", "READ_ONLY"]).optional(), technicianPermission: z.enum(["NONE", "EDITABLE", "READ_ONLY", "ROLE_BASED"]).optional(), scriptPermission: z.enum(["NONE", "READ_ONLY", "WRITE_ONLY", "READ_WRITE"]).optional(), apiPermission: z.enum(["NONE", "READ_ONLY", "WRITE_ONLY", "READ_WRITE"]).optional(), content: z.object({customizeForEndUser: z.boolean().optional(), endUserCustomization: z.object({name: z.string().optional(), description: z.string().optional(), label: z.string().optional()}).optional(), values: z.array(z.object({id: z.string().optional(), name: z.string().optional(), active: z.boolean().optional(), system: z.boolean().optional()})).optional(), required: z.boolean().optional(), footerText: z.string().optional(), tooltipText: z.string().optional(), advancedSettings: z.object({fileMaxSize: z.number().int().optional(), fileExtensions: z.array(z.string()).optional(), dateFilters: z.object({type: z.enum(["NONE", "INCLUDE", "EXCLUDE", "PAST_DATES_ONLY", "FUTURE_DATES_ONLY", "RANGE"]).optional(), selected: z.array(z.string()).optional()}).optional(), maxCharacters: z.number().int().optional(), maxWysiwygHtmlCharacters: z.number().int().optional(), complexityRules: z.object({mustContainOneInteger: z.boolean().optional(), mustContainOneLowercaseLetter: z.boolean().optional(), mustContainOneUppercaseLetter: z.boolean().optional(), greaterOrEqualThanSixCharacters: z.boolean().optional()}).optional(), numericRange: z.object({min: z.number().optional(), max: z.number().optional()}).optional(), org: z.array(z.number().int()).optional(), nodeClass: z.array(z.enum(["WINDOWS_SERVER", "WINDOWS_WORKSTATION", "LINUX_WORKSTATION", "MAC", "ANDROID", "APPLE_IOS", "APPLE_IPADOS", "AOSP", "CHROMEOS", "VMWARE_VM_HOST", "VMWARE_VM_GUEST", "HYPERV_VMM_HOST", "HYPERV_VMM_GUEST", "LINUX_SERVER", "MAC_SERVER", "CLOUD_MONITOR_TARGET", "NMS_SWITCH", "NMS_ROUTER", "NMS_FIREWALL", "NMS_PRIVATE_NETWORK_GATEWAY", "NMS_PRINTER", "NMS_SCANNER", "NMS_DIAL_MANAGER", "NMS_WAP", "NMS_IPSLA", "NMS_COMPUTER", "NMS_VM_HOST", "NMS_APPLIANCE", "NMS_OTHER", "NMS_SERVER", "NMS_PHONE", "NMS_VIRTUAL_MACHINE", "NMS_NETWORK_MANAGEMENT_AGENT", "UNMANAGED_DEVICE", "MANAGED_DEVICE"])).optional(), ipAddressType: z.enum(["ALL", "IPV4", "IPV6"]).optional(), expandLargeValueOnRender: z.boolean().optional(), identifier: z.object({automaticGenerationEnabled: z.boolean().optional(), scope: z.enum(["NONE", "GLOBAL", "ORGANIZATION"]).optional(), assignTo: z.enum(["NEW_ASSETS_ONLY", "NEW_AND_EXISTING_ASSETS"]).optional(), type: z.enum(["CUSTOM", "SEQUENCE"]).optional(), nextSequenceNumber: z.number().int().optional(), prefix: z.string().optional(), suffix: z.string().optional()}).optional(), monetary: z.object({currency: z.enum(["USD", "EUR", "CAD", "GBP", "AUD", "JPY", "SEK", "NOK", "DKK", "CHF", "AED", "AFN", "ALL", "AMD", "AOA", "ARS", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BRL", "BSD", "BTN", "BWP", "BYN", "BZD", "CDF", "CHE", "CHW", "CLF", "CLP", "CNY", "COP", "CRC", "CVE", "CZK", "DJF", "DOP", "DZD", "EGP", "ERN", "ETB", "FJD", "FKP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HTG", "HUF", "IDR", "ILS", "INR", "IRR", "ISK", "JMD", "JOD", "KES", "KGS", "KHR", "KMF", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SGD", "SHP", "SLE", "SOS", "SRD", "SSP", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "UYI", "UYU", "UZS", "VES", "VND", "VUV", "WST", "XAD", "XAF", "XCD", "XPF", "YER", "ZAR", "ZMW", "ZWG"]).optional()}).optional(), templates: z.array(z.number().int()).optional(), nodeRole: z.array(z.number().int()).optional(), healthStatus: z.object({allowedStatuses: z.array(z.enum(["UNHEALTHY", "NEEDS_ATTENTION", "HEALTHY", "UNKNOWN"])).optional()}).optional()}).optional()}).optional(), system: z.boolean().optional(), active: z.boolean().optional(), createTime: z.number().optional(), updateTime: z.number().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 }; /** * Bulk create custom fields * * POST /v2/custom-fields/bulk * * Also accepts auth: sessionKey */ export const createApiV2CustomFieldsBulk = async (args: CreateApiV2CustomFieldsBulkArgs, options: CreateApiV2CustomFieldsBulkOptions) => { const {baseUrl, fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/v2/custom-fields/bulk${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(createApiV2CustomFieldsBulkResponse, await res.json()) };