import {z} from 'zod' export type TelemetryActivityBlock = {login_tracking_authoritative?: boolean | undefined, workload_inventory_authoritative?: boolean | undefined, tracking_started_at?: (string | null) | undefined, first_customer_login_at?: (string | null) | undefined, last_customer_login_at?: (string | null) | undefined, customer_login_count?: number | undefined, scheduled_automation_count?: number | undefined, scheduled_agent_count?: number | undefined} | {[key: string]: unknown}; export type TelemetryLlmTokenUsage = {provider: string, model: string, input_tokens?: number | undefined, cache_read_tokens?: number | undefined, cache_write_tokens?: number | undefined, output_tokens?: number | undefined}; export type TelemetryBillingBlock = {mode?: ('self_hosted' | 'definite_hosted' | null) | undefined, metering_tier?: (string | null) | undefined, query_compute_seconds_24h?: (number | null) | undefined, llm_tokens_24h?: (number | null) | undefined, llm_token_meter_version?: (number | null) | undefined, llm_input_tokens_24h?: (number | null) | undefined, llm_cache_read_tokens_24h?: (number | null) | undefined, llm_cache_write_tokens_24h?: (number | null) | undefined, llm_output_tokens_24h?: (number | null) | undefined, llm_token_usage_24h?: Array | undefined, estimated_compute_credits_24h?: (number | null) | undefined, estimated_ai_credits_24h?: (number | null) | undefined} | {[key: string]: unknown}; export type TelemetryComputeSourceTotals = {event_count?: number | undefined, duration_ms?: number | undefined, cpu_millicore_ms?: number | undefined, memory_byte_ms?: number | undefined}; export type TelemetryComputeMeterBlock = {meter_version: number, meter_instance_id: string | string, high_watermark: number, event_count_total: number, duration_ms_total: number, cpu_millicore_ms_total: number, memory_byte_ms_total: number, totals_by_source?: {[key: string]: TelemetryComputeSourceTotals} | undefined}; export type TelemetryRequest = {schema_version: number, captured_at: string, deployment?: {[key: string]: unknown} | undefined, structure?: {[key: string]: unknown} | undefined, data_scale?: {[key: string]: unknown} | undefined, usage_24h?: {[key: string]: unknown} | undefined, activity?: (TelemetryActivityBlock | null) | undefined, billing?: (TelemetryBillingBlock | null) | undefined, compute_meter?: (TelemetryComputeMeterBlock | null) | undefined} | {[key: string]: unknown}; export type CreateApiOnpremV1TelemetryArgs = {'X-Definite-License'?: (string | null) | undefined, body: TelemetryRequest}; export type CreateApiOnpremV1TelemetryOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const telemetryResponse = z.object({status: z.string().optional(), license_status: z.string(), compute_meter_status: z.string().nullable().optional(), compute_meter_instance_id: z.union([z.string(), z.string()]).nullable().optional(), accepted_compute_high_watermark: z.number().int().gte(0).nullable().optional(), capacity_summary: z.record(z.string(), z.unknown()).nullable().optional()}); export const responseMeta = z.object({requestId: z.string().optional(), timestamp: z.string().optional(), durationMs: z.number().int().nullable().optional()}); export const successResponseTelemetryResponse = z.object({success: z.literal(true), data: telemetryResponse, meta: responseMeta.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 }; /** * Ingest a daily on-prem telemetry snapshot * * POST /onprem/v1/telemetry */ export const createApiOnpremV1Telemetry = async (args: CreateApiOnpremV1TelemetryArgs, options: CreateApiOnpremV1TelemetryOptions) => { 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") if (args['X-Definite-License'] != null) headers.set("X-Definite-License", String(args['X-Definite-License'])) const url = `${baseUrl.replace(/\/+$/, '')}/onprem/v1/telemetry${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(successResponseTelemetryResponse, await res.json()) };