export type ApiDomain = "json" | "pdf"; export type BodyEncoding = "json" | "form-urlencoded" | "none" | "binary" | "unknown"; export type RunStatus = "success" | "failure" | "not-testable" | "skipped"; export type ResolvedAuthStyle = "header" | "basic"; export interface TestCredentials { userId: string; apiKey: string; } export interface BirthScenario { day: number; month: number; year: number; hour: number; min: number; lat: number; lon: number; tzone: number; name?: string; place?: string; gender?: string; } export interface MatchScenario { male: BirthScenario; female: BirthScenario; name?: string; partner_name?: string; place?: string; } export interface CoupleScenario { person1: BirthScenario; person2: BirthScenario; name?: string; partner_name?: string; place?: string; } export interface NumerologyScenario { day: number; month: number; year: number; name: string; } export interface PDFBrandingScenario { logo_url?: string; company_name?: string; company_info?: string; domain_url?: string; company_email?: string; company_landline?: string; company_mobile?: string; footer_link?: string; chart_style?: string; } export interface ZodiacPair { zodiac: string; partnerZodiac: string; } export interface ZodiacScenarioSet { primary: ZodiacPair; alternates: ZodiacPair[]; } export interface TestScenarios { birthStandard: BirthScenario; birthNegativeTimezone: BirthScenario; birthFractionalTimezone: BirthScenario; birthDstSensitive: BirthScenario; birthEdgeDate: BirthScenario; matchBasic: MatchScenario; coupleBasic: CoupleScenario; numerologyBasic: NumerologyScenario; numerologyAlternate: NumerologyScenario; pdfBranding: PDFBrandingScenario; zodiacPairs: ZodiacScenarioSet; } export interface InvocationContext { birth: BirthScenario; match: MatchScenario; couple: CoupleScenario; numerology: NumerologyScenario; branding: PDFBrandingScenario; zodiacPair: ZodiacPair; planet: string; chartId: string; mahaDasha: string; vimshottariMahaDasha: string; vimshottariAntarDasha: string; vimshottariPratyantarDasha: string; vimshottariSookshmaDasha: string; placeQuery: string; maxRows: number; subjectName: string; partnerName: string; subjectPlace: string; } export interface InvocationPlan { args: unknown[]; context: InvocationContext; } export interface ModuleDescriptor { module: string; getTarget: (client: unknown) => Record; } export interface SDKMethodDescriptor { module: string; method: string; parameterNames: string[]; } export interface CapturedRequest { url: string; endpoint: string; normalizedEndpoint: string; domain: ApiDomain; headers: Record; body: Record; rawBody?: string; encoding: BodyEncoding; } export interface CapturedResponse { status: number; ok: boolean; headers: Record; body: unknown; bodyType: "json" | "text" | "pdf" | "unknown"; } export interface SDKMethodInventory { module: string; method: string; qualifiedName: string; parameterNames: string[]; endpoint: string; normalizedEndpoint: string; domain: ApiDomain; requestBody: Record; requestFields: string[]; requestEncoding: BodyEncoding; requestHeaders: Record; resolvedAuthStyle: ResolvedAuthStyle; invocationArgs: unknown[]; invocationError?: string; notes: string[]; } export interface PostmanParameter { key: string; value?: string; disabled: boolean; } export interface PostmanEndpointInventory { normalizedEndpoint: string; endpoint: string; domain: ApiDomain; method: string; displayNames: string[]; sourceFiles: string[]; bodyMode: string; bodyParameters: PostmanParameter[]; pathParameters: string[]; authStyles: ResolvedAuthStyle[]; headerKeys: string[]; } export interface ExecutionResult { module: string; method: string; qualifiedName: string; normalizedEndpoint: string; status: RunStatus; resolvedAuthStyle: ResolvedAuthStyle; invocationArgs: unknown[]; sdkRequest?: CapturedRequest; sdkResponse?: CapturedResponse; resultSnapshot?: unknown; responseShape?: unknown; errorName?: string; errorMessage?: string; errorStatus?: number; } export interface DirectExecutionResult { normalizedEndpoint: string; resolvedAuthStyle: ResolvedAuthStyle; status: RunStatus; request: CapturedRequest; response?: CapturedResponse; resultSnapshot?: unknown; errorName?: string; errorMessage?: string; errorStatus?: number; } export interface ComparisonResult { module: string; method: string; qualifiedName: string; normalizedEndpoint: string; resolvedAuthStyle: ResolvedAuthStyle; consistent: boolean; skippedReason?: string; sdk: ExecutionResult; direct?: DirectExecutionResult; diffLines: string[]; notes: string[]; }