import {z} from 'zod' export type GetApiApiOrgIdPipelinesPipelineIdArgs = {org_id: string, pipeline_id: string}; export type GetApiApiOrgIdPipelinesPipelineIdOptions = {baseUrl: string, Authorization?: string | undefined, fetch?: typeof fetch | undefined}; export const edge = z.object({id: z.string(), source: z.string(), source_handle: z.string().nullable().optional(), target: z.string()}); export const pipelineErrorInfo = z.object({error_summary: z.string().nullable().optional(), last_error_timestamp: z.number().int(), node_errors: z.unknown()}); export const position = z.object({x: z.number(), y: z.number()}); export const nodeStyle = z.object({backgroundColor: z.string().nullable().optional()}); export const node = z.object({data: z.object({}), id: z.string(), io_type: z.string(), is_disabled: z.boolean().optional(), meta: z.record(z.string(), z.string()).nullable().optional(), position: position, style: nodeStyle.nullable().optional()}); export const streamType = z.enum(["logs", "metrics", "traces", "profiles", "service_graph", "enrichment_tables", "file_list", "metadata", "index"]); export const aggFunction = z.enum(["avg", "min", "max", "sum", "count", "median", "p50", "p75", "p90", "p95", "p99"]); export const operator = z.enum(["=", "!=", ">", ">=", "<", "<=", "contains", "not_contains", "is_null", "is_not_null", "is_empty", "is_not_empty"]); export const condition = z.object({column: z.string(), ignore_case: z.boolean().optional(), operator: operator, value: z.object({})}); export const aggregation = z.object({function: aggFunction, group_by: z.array(z.string()).nullable().optional(), having: condition, multi_alert: z.boolean().optional(), warning_value: z.number().nullable().optional()}); export const compareHistoricData = z.object({offSet: z.string()}); export const searchEventType = z.enum(["ui", "dashboards", "reports", "alerts", "values", "other", "rum", "derivedstream", "searchjob", "download", "insights", "public_dashboard"]); export const sloAlertKind = z.enum(["error_budget", "burn_rate"]); export const sloCondition = z.object({critical: z.number(), kind: sloAlertKind, long_window_secs: z.number().int().nullable().optional(), multi_alert: z.boolean().optional(), operator: operator, short_window_secs: z.number().int().nullable().optional(), slo_id: z.string(), warning: z.number().nullable().optional()}); export const queryType = z.enum(["custom", "sql", "promql", "slo"]); export const queryCondition = z.object({aggregation: aggregation.nullable().optional(), conditions: z.object({}).nullable().optional(), multi_time_range: z.array(compareHistoricData).nullable().optional(), promql: z.string().nullable().optional(), promql_condition: condition.nullable().optional(), promql_multi_alert: z.boolean().optional(), promql_rule_mode: z.boolean().optional(), promql_warning_value: z.number().nullable().optional(), search_event_type: searchEventType.nullable().optional(), slo_condition: sloCondition.nullable().optional(), sql: z.string().nullable().optional(), type: queryType.optional(), vrl_function: z.string().nullable().optional()}); export const frequencyType = z.enum(["cron", "minutes"]); export const triggerCondition = z.object({align_time: z.boolean().optional(), cron: z.string().optional(), frequency: z.number().int().optional(), frequency_type: frequencyType.optional(), notify_on_warning: z.boolean().nullable().optional(), operator: operator.optional(), period: z.number().int().optional(), silence: z.number().int().optional(), threshold: z.number().int().optional(), timezone: z.string().nullable().optional(), tolerance_in_secs: z.number().int().nullable().optional(), warning_threshold: z.number().int().nullable().optional()}); export const pipelineSource = z.union([z.object({org_id: z.string().optional(), stream_name: z.string().optional(), stream_type: streamType.optional(), source_type: z.literal("realtime")}), z.object({delay: z.number().int().nullable().optional(), org_id: z.string().optional(), query_condition: queryCondition.optional(), start_at: z.number().int().nullable().optional(), stream_type: streamType.optional(), trigger_condition: triggerCondition.optional(), tz_offset: z.number().int().optional(), source_type: z.literal("scheduled")})]); export const getApiApiOrgIdPipelinesPipelineIdResponse = z.object({description: z.string().optional(), edges: z.array(edge), enabled: z.boolean().optional(), last_error: pipelineErrorInfo.nullable().optional(), name: z.string(), nodes: z.array(node), org: z.string().optional(), paused_at: z.number().int().nullable().optional(), pipeline_id: z.string().optional(), source: pipelineSource.optional(), version: z.number().int().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 }; /** * Get pipeline by ID * * GET /api/{org_id}/pipelines/{pipeline_id} */ export const getApiApiOrgIdPipelinesPipelineId = async (args: GetApiApiOrgIdPipelinesPipelineIdArgs, options: GetApiApiOrgIdPipelinesPipelineIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, Authorization} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (Authorization !== undefined) headers.set("Authorization", Authorization) const url = `${baseUrl.replace(/\/+$/, '')}/api/${encodeURIComponent(String(args.org_id))}/pipelines/${encodeURIComponent(String(args.pipeline_id))}${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(getApiApiOrgIdPipelinesPipelineIdResponse, await res.json()) };