import { ZodType } from 'zod'; import { Environment } from './environment'; export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'; export interface SdkConfig { baseUrl?: string; environment?: Environment; apiKey?: string; retry?: RetryOptions; } export interface HttpRequest extends Options { method: HttpMethod; url: string; headers?: Record; retry: Required; config: SdkConfig; } export interface HttpMetadata { status: number; statusText: string; headers: Record; } export interface HttpResponse { data?: T; metadata: HttpMetadata; raw: ArrayBuffer; } export interface RequestHandler { next?: RequestHandler; handle(request: HttpRequest): Promise>; } export enum ContentType { Json = 'json', Xml = 'xml', Pdf = 'pdf', Image = 'image', File = 'file', Binary = 'binary', FormUrlEncoded = 'form', Text = 'text', MultipartFormData = 'multipartFormData', } export interface Options { responseSchema: ZodType; requestSchema?: ZodType; body?: any; requestContentType?: ContentType; responseContentType?: ContentType; abortSignal?: AbortSignal; queryParams?: Record; retry?: RetryOptions; } export interface RequestConfig { retry?: RetryOptions; } export interface RetryOptions { attempts: number; delayMs?: number; }