import type { RdiAiScope } from '../transformationAi'; export interface RdiTransformationDryRunRequest { scope?: RdiAiScope; yaml: string; sourceMetadata?: unknown; sampleRecords?: unknown[]; mockLookups?: Record; expectations?: RdiTransformationDryRunExpectations; } export interface RdiTransformationDryRunCountExpectations { emitted?: number; filtered?: number; dlq?: number; sourceMismatch?: number; } export interface RdiTransformationDryRunCommandExpectation { id: string; type?: string; key?: string; count?: number; } export interface RdiTransformationDryRunStateExpectation { id: string; key: string; exists?: boolean; dataType?: string; requiredFields?: string[]; absentFields?: string[]; values?: Record; ttlSeconds?: number; } export interface RdiTransformationDryRunExpectations { counts?: RdiTransformationDryRunCountExpectations; commands?: RdiTransformationDryRunCommandExpectation[]; finalState?: RdiTransformationDryRunStateExpectation[]; } export interface RdiTransformationDryRunSummary { inputRecords: number; emittedRecords: number; filteredRecords: number; dlqRecords: number; sourceMismatchRecords: number; outputPreviewRecords: number; } export interface RdiTransformationDryRunCommand { type: string; key?: string; command: string; arguments?: Record; event?: unknown; } export interface RdiTransformationDryRunDlq { stage?: string; code?: string; message?: string; source?: string; cause?: string; transformIndex?: number; } export interface RdiTransformationDryRunDiagnostic { code?: string; message?: string; transformIndex?: number; } export interface RdiTransformationDryRunInputResult { inputIndex: number; status: 'emitted' | 'filtered' | 'dlq' | 'source_mismatch' | 'no_output' | string; transformedEvent?: unknown; outputPreview: RdiTransformationDryRunCommand[]; dlq?: RdiTransformationDryRunDlq; diagnostics: RdiTransformationDryRunDiagnostic[]; } export interface RdiTransformationDryRunRedisState { key: string; dataType: string; value: unknown; ttlSeconds?: number; lastInputIndex?: number; } export interface RdiTransformationDryRunAssertion { id: string; status: 'passed' | 'failed' | string; message: string; expected?: Record; actual?: Record; } export interface RdiTransformationDryRunFinding { code: string; severity: 'warning' | 'error'; message: string; inputIndex?: number; transformIndex?: number; commandIndex?: number; key?: string; } export interface RdiTransformationDryRunResult { transformedRecords: unknown[]; redisCommands: Array<{ command: string; args?: string[]; key?: string; }>; validationErrors: Array<{ path?: string; code?: string; message: string; severity?: 'error' | 'warning'; }>; warnings: Array<{ code?: string; message: string; }>; metadata?: { engineVersion?: string; rdiVersion?: string; elapsedMs?: number; }; limitations?: string[]; schemaVersion?: string; catalogVersion?: string; summary?: RdiTransformationDryRunSummary; results?: RdiTransformationDryRunInputResult[]; finalState?: RdiTransformationDryRunRedisState[]; assertions?: RdiTransformationDryRunAssertion[]; findings?: RdiTransformationDryRunFinding[]; } export type RdiTransformationDryRunRecordResult = RdiTransformationDryRunInputResult; export type RdiTransformationRedisStateEntry = RdiTransformationDryRunRedisState; export interface RdiTransformationCapabilities { schemaVersion: string; catalogVersion: string; supportedTransforms: string[]; supportedOutputs: string[]; expressionLanguages: string[]; sampleMetadataFields: string[]; sampleValueFormats?: string[]; writerContracts: Record; features: Record; limits: Record; } export interface RdiTransformationDryRunCapability { getCapabilities?: (options?: { signal?: AbortSignal; }) => Promise; dryRun: (request: RdiTransformationDryRunRequest, options?: { signal?: AbortSignal; }) => Promise; } export interface ResolvedRdiTransformationDryRunCapability extends RdiTransformationDryRunCapability { isConfigured: boolean; getCapabilities: NonNullable; }