export declare interface APIError { code: string; message: string; details?: any; detail?: string; } export declare interface APIResponse { success: boolean; data: T; metadata?: Metadata; error?: APIError; } /** * Build HTTP headers from Options, matching Go's restheadspec handler conventions. * * Header mapping: * - X-Select-Fields: comma-separated columns * - X-Not-Select-Fields: comma-separated omit_columns * - X-FieldFilter-{col}: exact match (eq) * - X-SearchOp-{operator}-{col}: AND filter * - X-SearchOr-{operator}-{col}: OR filter * - X-Sort: +col (asc), -col (desc) * - X-Limit, X-Offset: pagination * - X-Cursor-Forward, X-Cursor-Backward: cursor pagination * - X-Preload: RelationName:field1,field2 pipe-separated * - X-Fetch-RowNumber: row number fetch * - X-CQL-SEL-{col}: computed columns * - X-Custom-SQL-W: custom operators (AND) */ export declare function buildHeaders(options: Options): Record; export declare interface ClientConfig { baseUrl: string; token?: string; } export declare interface Column { name: string; type: string; is_nullable: boolean; is_primary: boolean; is_unique: boolean; has_index: boolean; } export declare interface ComputedColumn { name: string; expression: string; } export declare type ConnectionState = 'connecting' | 'connected' | 'disconnecting' | 'disconnected' | 'reconnecting'; export declare interface CustomOperator { name: string; sql: string; } /** * Decode a header value that may be base64 encoded with ZIP_ or __ prefix. */ export declare function decodeHeaderValue(value: string): string; /** * Encode a value with base64 and ZIP_ prefix for complex header values. */ export declare function encodeHeaderValue(value: string): string; export declare interface FilterOption { column: string; operator: Operator | string; value: any; logic_operator?: 'AND' | 'OR'; } export declare function getHeaderSpecClient(config: ClientConfig): HeaderSpecClient; export declare function getResolveSpecClient(config: ClientConfig): ResolveSpecClient; export declare function getWebSocketClient(config: WebSocketClientConfig): WebSocketClient; /** * HeaderSpec REST client. * Sends query options via HTTP headers instead of request body, matching the Go restheadspec handler. * * HTTP methods: GET=read, POST=create, PUT=update, DELETE=delete */ export declare class HeaderSpecClient { private config; constructor(config: ClientConfig); private buildUrl; private baseHeaders; private fetchWithError; read(schema: string, entity: string, id?: string, options?: Options): Promise>; create(schema: string, entity: string, data: any, options?: Options): Promise>; update(schema: string, entity: string, id: string, data: any, options?: Options): Promise>; delete(schema: string, entity: string, id: string): Promise>; } export declare type MessageType = 'request' | 'response' | 'notification' | 'subscription' | 'error' | 'ping' | 'pong'; export declare interface Metadata { total: number; count: number; filtered: number; limit: number; offset: number; row_number?: number; } export declare type Operation = 'read' | 'create' | 'update' | 'delete'; export declare type Operator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'in' | 'contains' | 'startswith' | 'endswith' | 'between' | 'between_inclusive' | 'is_null' | 'is_not_null'; export declare interface Options { preload?: PreloadOption[]; columns?: string[]; omit_columns?: string[]; filters?: FilterOption[]; sort?: SortOption[]; limit?: number; offset?: number; customOperators?: CustomOperator[]; computedColumns?: ComputedColumn[]; parameters?: Parameter[]; cursor_forward?: string; cursor_backward?: string; fetch_row_number?: string; } export declare interface Parameter { name: string; value: string; sequence?: number; } export declare interface PreloadOption { relation: string; table_name?: string; columns?: string[]; omit_columns?: string[]; sort?: SortOption[]; filters?: FilterOption[]; where?: string; limit?: number; offset?: number; updatable?: boolean; computed_ql?: Record; recursive?: boolean; primary_key?: string; related_key?: string; foreign_key?: string; recursive_child_key?: string; sql_joins?: string[]; join_aliases?: string[]; } export declare interface RequestBody { operation: Operation; id?: number | string | string[]; data?: any | any[]; options?: Options; } export declare class ResolveSpecClient { private config; constructor(config: ClientConfig); private buildUrl; private baseHeaders; private fetchWithError; getMetadata(schema: string, entity: string): Promise>; read(schema: string, entity: string, id?: number | string | string[], options?: Options): Promise>; create(schema: string, entity: string, data: any | any[], options?: Options): Promise>; update(schema: string, entity: string, data: any | any[], id?: number | string | string[], options?: Options): Promise>; delete(schema: string, entity: string, id: number | string): Promise>; } export declare type SortDirection = 'asc' | 'desc' | 'ASC' | 'DESC'; export declare interface SortOption { column: string; direction: SortDirection; } export declare interface Subscription { id: string; entity: string; schema?: string; options?: WSOptions; callback?: (notification: WSNotificationMessage) => void; } export declare interface SubscriptionOptions { filters?: FilterOption[]; onNotification?: (notification: WSNotificationMessage) => void; } export declare interface TableMetadata { schema: string; table: string; columns: Column[]; relations: string[]; } export declare class WebSocketClient { private ws; private config; private messageHandlers; private subscriptions; private eventListeners; private state; private reconnectAttempts; private reconnectTimer; private heartbeatTimer; private isManualClose; constructor(config: WebSocketClientConfig); connect(): Promise; disconnect(): void; request(operation: WSOperation, entity: string, options?: { schema?: string; record_id?: string; data?: any; options?: WSOptions; }): Promise; read(entity: string, options?: { schema?: string; record_id?: string; filters?: FilterOption[]; columns?: string[]; sort?: SortOption[]; preload?: PreloadOption[]; limit?: number; offset?: number; }): Promise; create(entity: string, data: any, options?: { schema?: string; }): Promise; update(entity: string, id: string, data: any, options?: { schema?: string; }): Promise; delete(entity: string, id: string, options?: { schema?: string; }): Promise; meta(entity: string, options?: { schema?: string; }): Promise; subscribe(entity: string, callback: (notification: WSNotificationMessage) => void, options?: { schema?: string; filters?: FilterOption[]; }): Promise; unsubscribe(subscriptionId: string): Promise; getSubscriptions(): Subscription[]; getState(): ConnectionState; isConnected(): boolean; on(event: K, callback: WebSocketClientEvents[K]): void; off(event: K): void; private handleMessage; private handleResponse; private handleNotification; private send; private startHeartbeat; private stopHeartbeat; private setState; private ensureConnected; private emit; private log; } export declare interface WebSocketClientConfig { url: string; reconnect?: boolean; reconnectInterval?: number; maxReconnectAttempts?: number; heartbeatInterval?: number; debug?: boolean; } export declare interface WebSocketClientEvents { connect: () => void; disconnect: (event: CloseEvent) => void; error: (error: Error) => void; message: (message: WSMessage) => void; stateChange: (state: ConnectionState) => void; } export declare interface WSErrorInfo { code: string; message: string; details?: Record; } export declare interface WSMessage { id?: string; type: MessageType; operation?: WSOperation; schema?: string; entity?: string; record_id?: string; data?: any; options?: WSOptions; subscription_id?: string; success?: boolean; error?: WSErrorInfo; metadata?: Record; timestamp?: string; } export declare interface WSNotificationMessage { type: 'notification'; operation: WSOperation; subscription_id: string; schema?: string; entity: string; data: any; timestamp: string; } export declare type WSOperation = 'read' | 'create' | 'update' | 'delete' | 'subscribe' | 'unsubscribe' | 'meta'; export declare interface WSOptions { filters?: FilterOption[]; columns?: string[]; omit_columns?: string[]; preload?: PreloadOption[]; sort?: SortOption[]; limit?: number; offset?: number; parameters?: Parameter[]; cursor_forward?: string; cursor_backward?: string; fetch_row_number?: string; } export declare interface WSRequestMessage { id: string; type: 'request'; operation: WSOperation; schema?: string; entity: string; record_id?: string; data?: any; options?: WSOptions; } export declare interface WSResponseMessage { id: string; type: 'response'; success: boolean; data?: any; error?: WSErrorInfo; metadata?: Record; timestamp: string; } export declare interface WSSubscriptionMessage { id: string; type: 'subscription'; operation: 'subscribe' | 'unsubscribe'; schema?: string; entity: string; options?: WSOptions; subscription_id?: string; } export { }