interface WalletProvider { request(method: string, params?: any): Promise; disconnect?(): void; } /** WalletConnect v2 protocol types */ interface WcMetadata { name: string; description: string; url: string; icons: string[]; } interface WcNamespace { chains: string[]; methods: string[]; events: string[]; } interface WcSessionSettled { relay: { protocol: string }; namespaces: Record; controller: { publicKey: string metadata: WcMetadata }; expiry: number; } interface WcRelayMessage { topic: string; message: string; publishedAt: number; tag: number; } interface WcPairResult { uri: string; approval: Promise; } interface WcProviderConfig { projectId: string; metadata: WcMetadata; relayUrl?: string; /** CAIP-2 chain IDs. Default: ["stacks:1"] */ chains?: string[]; } /** Persisted session data */ interface WcSessionData { topic: string; symKey: string; peerMeta: WcMetadata; expiry: number; accounts: string[]; controllerPublicKey: string; } declare class WalletConnectProvider implements WalletProvider { private session; constructor(config: WcProviderConfig); /** Try restoring a persisted session. Returns true if valid. */ restore(): boolean; /** Initiate pairing. Returns URI for QR + approval promise. */ pair(): Promise; request(method: string, params?: any): Promise; disconnect(): void; get sessionData(): WcSessionData | null; } declare class WcSession { private relay; private config; private chains; private pairingSymKey; private pairingTopic; private selfKeyPair; private sessionData; private sessionSymKey; private pending; private nextId; constructor(config: WcProviderConfig); /** Try restoring a persisted session. Returns true if valid session found. */ restore(): boolean; /** Initiate pairing. Returns URI for QR code + approval promise. */ pair(): Promise; /** Send a JSON-RPC request over the session. */ request(method: string, params?: unknown): Promise; disconnect(): void; get session(): WcSessionData | null; private handlePairingMessage; private handleProposal; private subscribeSession; } type SubscriptionHandler = (message: WcRelayMessage) => void; declare class WcRelay { private ws; private url; private projectId; private nextId; private pending; private subscriptions; /** Map subscription ID (from server) → topic */ private subIdToTopic; private destroyed; private reconnecting; private reconnectAttempt; private reconnectTimer; private connectPromise; private connectReject; constructor(projectId: string, relayUrl?: string); connect(): Promise; subscribe(topic: string, handler: SubscriptionHandler): Promise; publish(topic: string, message: string, tag: number, ttl?: number): Promise; /** Encrypt + publish a type-0 envelope */ publishEncrypted(topic: string, symKey: Uint8Array, payload: unknown, tag: number, ttl?: number): Promise; private rpc; private handleMessage; private handleDisconnect; private scheduleReconnect; destroy(): void; } /** Generate a QR code as an SVG string for the given data. */ declare function qrSvg(data: string, opts?: { size?: number dark?: string light?: string }): string; interface ModalOptions { wcUri?: string; onSelectInjected?: () => void; onClose?: () => void; } declare function showModal(opts: ModalOptions): () => void; declare function hideModal(): void; export { showModal, qrSvg, hideModal, WcSessionSettled, WcSessionData, WcSession, WcRelay, WcProviderConfig, WcPairResult, WcMetadata, WalletConnectProvider };