import type { SdkFrame } from "./types"; export declare const REVERSE_HEARTBEAT_MS = 5000; export declare const REVERSE_LEASE_TTL_MS = 15000; export declare const REVERSE_RECLAIM_GRACE_MS = 15000; export declare const MAX_REVERSE_OUTSTANDING = 64; export declare const MAX_REVERSE_PAYLOAD_BYTES: number; /** * Matches the raw WebSocket frame ceiling in crates/gjc-sdk/src/server.rs. * Reverse responses must fit after their protocol envelope is serialized. */ export declare function assertReverseResponseFrame(frame: SdkFrame): void; export declare class ReverseLeaseError extends Error { readonly code: "lease_unavailable" | "lease_expired" | "provider_lease_conflict" | "provider_required" | "not_lease_owner" | "payload_too_large" | "too_many_outstanding" | "unknown_request" | "idempotency_conflict"; constructor(code: "lease_unavailable" | "lease_expired" | "provider_lease_conflict" | "provider_required" | "not_lease_owner" | "payload_too_large" | "too_many_outstanding" | "unknown_request" | "idempotency_conflict", message?: "idempotency_conflict" | "lease_expired" | "lease_unavailable" | "not_lease_owner" | "payload_too_large" | "provider_lease_conflict" | "provider_required" | "too_many_outstanding" | "unknown_request"); } export interface ProviderLease { leaseId: string; connectionId: string; capability: string; definitions: unknown; expiresAt: number; graceUntil?: number; active: boolean; } export interface ReverseLeaseOptions { now?: () => number; leaseTtlMs?: number; sendFrame: (connectionId: string, frame: SdkFrame) => unknown; installDefinitions?: (capability: string, definitions: unknown) => void; onCancel?: (requestId: string, reason: "provider_disconnected" | "lease_released") => void; onDefinitionsRemoved?: (capability: string) => void; } /** Session-local directed reverse RPC lease registry. */ export declare class ReverseLeaseRuntime { #private; constructor(options: ReverseLeaseOptions); registerProvider(connectionId: string, capability: string, definitions: unknown, expectedLeaseId?: string, idempotencyKey?: string): ProviderLease; heartbeat(connectionId: string, leaseId: string): ProviderLease; release(connectionId: string, leaseId: string, handoffTo?: string): ProviderLease; disconnect(connectionId: string): void; request(capability: string, method: string, payload: unknown, signal?: AbortSignal): Promise; respond(connectionId: string, id: string, leaseId: string, result: unknown, error?: { code: string; message: string; }): void; getLease(capability: string): ProviderLease | undefined; /** Installed definitions are observable only while their provider lease is live. */ getInstalledDefinitions(capability: string): unknown | undefined; dispose(): void; }