import {z} from 'zod' export type GetApiApiV2FleetAgentsAgentKeyArgs = {agent_key: string, include?: string | undefined}; export type GetApiApiV2FleetAgentsAgentKeyOptions = {baseUrl?: string | undefined, apiKeyAuth?: string | undefined, appKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const fleetOtelCollector = z.record(z.string(), z.unknown()); export const fleetAgentInfoDetailsV2 = z.object({active_ha_agent: z.string().optional(), agent_version: z.string().optional(), api_key_name: z.string().optional(), api_key_uuid: z.string().optional(), cloud_provider: z.string().optional(), cluster_name: z.string().optional(), config_id: z.string().optional(), datadog_agent_key: z.string().optional(), datadog_data_center: z.string().optional(), ecs_fargate_cluster_name: z.string().optional(), ecs_fargate_task_arn: z.string().optional(), enabled_products: z.array(z.string()).optional(), env: z.array(z.string()).optional(), first_seen_at: z.number().int().optional(), ha_agent_hosts: z.array(z.string()).optional(), ha_agent_state: z.string().optional(), hostname: z.string().optional(), hostname_aliases: z.array(z.string()).optional(), install_method_installer_version: z.string().optional(), install_method_tool: z.string().optional(), ip_addresses: z.array(z.string()).optional(), is_single_step_instrumentation_enabled: z.boolean().optional(), last_restart_at: z.number().int().optional(), os: z.string().optional(), os_version: z.string().optional(), otel_collectors: z.array(fleetOtelCollector).optional(), pod_name: z.string().optional(), preferred_ha_active_agent: z.string().optional(), python_version: z.string().optional(), region: z.array(z.string()).optional(), remote_agent_management: z.string().optional(), remote_config_status: z.string().optional(), services: z.array(z.string()).optional(), support_agent_upgrade: z.boolean().optional(), tags: z.array(z.string()).optional(), team: z.string().optional()}); export const fleetConfigurationLayer = z.object({compiled_configuration: z.string().optional(), env_configuration: z.string().optional(), file_configuration: z.string().optional(), remote_configuration: z.string().optional(), runtime_configuration: z.string().optional()}); export const fleetOtelCollectorConfigurationV2 = z.object({collector_id: z.string().optional(), compiled_configuration: z.string().optional(), distribution: z.string().optional()}); export const fleetAgentConfigurationFilesV2 = z.object({agent_configuration: fleetConfigurationLayer.optional(), application_monitoring_configuration: fleetConfigurationLayer.optional(), otel_collectors_configuration: z.array(fleetOtelCollectorConfigurationV2).optional(), security_agent_configuration: fleetConfigurationLayer.optional(), system_probe_configuration: fleetConfigurationLayer.optional()}); export const fleetConfigurationFileV2 = z.object({agent_hash: z.string().optional(), file_content: z.string().optional(), file_path: z.string().optional(), filename: z.string().optional()}); export const fleetIntegrationDetailsV2 = z.object({data_type: z.string().optional(), error_messages: z.array(z.string()).optional(), init_config: z.string().optional(), instance_config: z.string().optional(), is_custom_check: z.boolean().optional(), is_default: z.boolean().optional(), is_init: z.boolean().optional(), log_config: z.string().optional(), name: z.string().optional(), pod_count: z.number().int().optional(), source_index: z.number().int().optional(), source_path: z.string().optional(), type: z.string().optional()}); export const fleetDetectedIntegration = z.object({escaped_name: z.string().optional(), prefix: z.string().optional()}); export const fleetIntegrationsByStatusV2 = z.object({configuration_files: z.array(fleetConfigurationFileV2).optional(), error_integrations: z.array(fleetIntegrationDetailsV2).optional(), missing_integrations: z.array(fleetDetectedIntegration).optional(), warning_integrations: z.array(fleetIntegrationDetailsV2).optional(), working_integrations: z.array(fleetIntegrationDetailsV2).optional()}); export const fleetAgentDetailV2Attributes = z.object({agent_infos: fleetAgentInfoDetailsV2, configuration_files: fleetAgentConfigurationFilesV2.optional(), integrations: fleetIntegrationsByStatusV2.optional()}); export const fleetAgentV2ResourceType = z.literal("agent"); export const fleetAgentDetailV2 = z.object({attributes: fleetAgentDetailV2Attributes, id: z.string(), type: fleetAgentV2ResourceType}); export const fleetAgentDetailV2Response = z.object({data: fleetAgentDetailV2}); 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 detailed information about an agent * * GET /api/v2/fleet/agents/{agent_key} * * Also accepts auth: AuthZ */ export const getApiApiV2FleetAgentsAgentKey = async (args: GetApiApiV2FleetAgentsAgentKeyArgs, options?: GetApiApiV2FleetAgentsAgentKeyOptions) => { const {baseUrl = "https://api.datadoghq.com", fetch: fetchFn = fetch, apiKeyAuth, appKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.include != null) query.append("include", String(args.include)) if (apiKeyAuth !== undefined) headers.set("DD-API-KEY", apiKeyAuth) if (appKeyAuth !== undefined) headers.set("DD-APPLICATION-KEY", appKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/api/v2/fleet/agents/${encodeURIComponent(String(args.agent_key))}${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(fleetAgentDetailV2Response, await res.json()) };