wsbridge-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transport/base.ts","../src/errors.ts","../src/transport/ws-transport.ts","../src/transport/ipc-transport.ts","../src/transport/index.ts","../src/rpc/rpc-engine.ts","../src/subscription/subscription.ts","../src/subscription/manager.ts","../src/namespaces/base.ts","../src/namespaces/dht.ts","../src/namespaces/lite.ts","../src/namespaces/subscribe.ts","../src/namespaces/jetton.ts","../src/namespaces/nft.ts","../src/namespaces/dns.ts","../src/namespaces/adnl.ts","../src/namespaces/network.ts","../src/namespaces/overlay.ts","../src/namespaces/wallet.ts","../src/namespaces/sbt.ts","../src/namespaces/payment.ts","../src/client.ts"],"names":["TransportState","call","EVENT_LOOKUP"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Transport state machine.\n * Transitions: DISCONNECTED → CONNECTING → CONNECTED → RECONNECTING → CONNECTED\n * → DESTROYED (terminal)\n */\nexport enum TransportState {\n DISCONNECTED = 'DISCONNECTED',\n CONNECTING = 'CONNECTING',\n CONNECTED = 'CONNECTED',\n RECONNECTING = 'RECONNECTING',\n DESTROYED = 'DESTROYED',\n}\n\nexport interface TransportEvents {\n open: () => void\n close: (code: number, reason: string) => void\n error: (error: Error) => void\n message: (data: string) => void\n stateChange: (newState: TransportState, oldState: TransportState) => void\n reconnectFailed: () => void\n}\n\nexport type TransportEventName = keyof TransportEvents\n\n/**\n * Base class for all transports. Provides a typed event emitter and lifecycle contract.\n */\nexport abstract class AbstractTransport {\n protected listeners = new Map<TransportEventName, Set<TransportEvents[TransportEventName]>>()\n\n abstract connect(): Promise<void>\n abstract disconnect(): void\n abstract send(data: string): void\n abstract get state(): TransportState\n\n /** Whether the transport is currently connected. */\n get isConnected(): boolean {\n return this.state === TransportState.CONNECTED\n }\n\n /** Register an event listener. */\n on<E extends TransportEventName>(event: E, listener: TransportEvents[E]): this {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set())\n this.listeners.get(event)!.add(listener)\n return this\n }\n\n /** Remove an event listener. */\n off<E extends TransportEventName>(event: E, listener: TransportEvents[E]): this {\n this.listeners.get(event)?.delete(listener)\n return this\n }\n\n /** Register a one-shot event listener that auto-removes after the first call. */\n once<E extends TransportEventName>(event: E, listener: TransportEvents[E]): this {\n const wrapper = ((...args: unknown[]) => {\n this.off(event, wrapper as TransportEvents[E])\n ;(listener as (...a: unknown[]) => void)(...args)\n }) as TransportEvents[E]\n return this.on(event, wrapper)\n }\n\n /** Permanently tear down the transport. After this call, connect() will throw. */\n abstract destroy(): void\n\n protected emit<E extends TransportEventName>(event: E, ...args: Parameters<TransportEvents[E]>): void {\n const fns = this.listeners.get(event)\n if (fns) for (const fn of fns) (fn as (...a: unknown[]) => void)(...args)\n }\n}\n","/** Base error class for all SDK errors. */\nexport class Web3SocketsError extends Error {\n constructor(message: string, public code: string) {\n super(message)\n this.name = 'Web3SocketsError'\n Object.setPrototypeOf(this, Web3SocketsError.prototype)\n }\n}\n\n/** Thrown when the WebSocket connection cannot be established. */\nexport class ConnectionError extends Web3SocketsError {\n constructor(message: string, public url: string) {\n super(message, 'CONNECTION_ERROR')\n this.name = 'ConnectionError'\n Object.setPrototypeOf(this, ConnectionError.prototype)\n }\n}\n\n/** Thrown when the WebSocket connection is closed unexpectedly. */\nexport class ConnectionClosedError extends Web3SocketsError {\n constructor(public closeCode: number, reason: string) {\n super(reason || `Connection closed with code ${closeCode}`, 'CONNECTION_CLOSED')\n this.name = 'ConnectionClosedError'\n Object.setPrototypeOf(this, ConnectionClosedError.prototype)\n }\n}\n\n/** Thrown when the bridge returns a JSON-RPC error response. */\nexport class RpcError extends Web3SocketsError {\n constructor(message: string, public rpcCode?: number) {\n super(message, 'RPC_ERROR')\n this.name = 'RpcError'\n Object.setPrototypeOf(this, RpcError.prototype)\n }\n}\n\n/** Thrown when a JSON-RPC request exceeds its deadline. */\nexport class TimeoutError extends Web3SocketsError {\n constructor(method: string, timeoutMs: number) {\n super(`Request \"${method}\" timed out after ${timeoutMs}ms`, 'TIMEOUT')\n this.name = 'TimeoutError'\n Object.setPrototypeOf(this, TimeoutError.prototype)\n }\n}\n\n/** Thrown when request parameters fail client-side validation. */\nexport class ValidationError extends Web3SocketsError {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR')\n this.name = 'ValidationError'\n Object.setPrototypeOf(this, ValidationError.prototype)\n }\n}\n","import { AbstractTransport, TransportState } from './base'\nimport { ConnectionError } from '../errors'\n\nexport interface WsTransportOptions {\n url?: string\n autoReconnect?: boolean\n reconnectDelay?: number\n reconnectMaxDelay?: number\n reconnectMaxRetries?: number\n /** Keepalive ping interval in ms. 0 disables. Default: 30 000. Only works in Node.js. */\n keepaliveInterval?: number\n}\n\n/**\n * WebSocket-based transport with auto-reconnect, keepalive, and state tracking.\n */\nexport class WsTransport extends AbstractTransport {\n private ws: WebSocket | null = null\n private readonly url: string\n private readonly autoReconnect: boolean\n private readonly reconnectDelay: number\n private readonly reconnectMaxDelay: number\n private readonly reconnectMaxRetries: number\n private readonly keepaliveInterval: number\n private reconnectAttempt = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n private keepaliveTimer: ReturnType<typeof setInterval> | null = null\n private intentionalClose = false\n private _state: TransportState = TransportState.DISCONNECTED\n\n constructor(options: WsTransportOptions = {}) {\n super()\n this.url = options.url ?? 'ws://127.0.0.1:8081'\n this.autoReconnect = options.autoReconnect ?? true\n this.reconnectDelay = options.reconnectDelay ?? 1000\n this.reconnectMaxDelay = options.reconnectMaxDelay ?? 30000\n this.reconnectMaxRetries = options.reconnectMaxRetries ?? Infinity\n this.keepaliveInterval = options.keepaliveInterval ?? 30_000\n }\n\n /** Current transport state. */\n get state(): TransportState {\n return this._state\n }\n\n /** Open a WebSocket connection. Throws if already connecting or destroyed. */\n async connect(): Promise<void> {\n if (this._state === TransportState.CONNECTED) return\n if (this._state === TransportState.CONNECTING || this._state === TransportState.RECONNECTING) {\n throw new ConnectionError('Already connecting', this.url)\n }\n if (this._state === TransportState.DESTROYED) {\n throw new ConnectionError('Transport destroyed', this.url)\n }\n\n this.intentionalClose = false\n this.setState(TransportState.CONNECTING)\n\n const WebSocketImpl = await this.getWebSocketImpl()\n\n return new Promise<void>((resolve, reject) => {\n try {\n this.ws = new WebSocketImpl(this.url) as WebSocket\n } catch (err) {\n this.setState(TransportState.DISCONNECTED)\n reject(new ConnectionError((err as Error).message, this.url))\n return\n }\n\n // Always attach close listener immediately to guarantee reconnect scheduling\n this.ws.addEventListener('close', (event: CloseEvent) => {\n this.stopKeepalive()\n this.emit('close', event.code, event.reason)\n if (!this.intentionalClose && this.autoReconnect && this._state !== TransportState.DESTROYED) {\n this.scheduleReconnect()\n } else if (this._state !== TransportState.DESTROYED) {\n this.setState(TransportState.DISCONNECTED)\n }\n })\n\n const onOpen = () => {\n this.ws?.removeEventListener('error', onError)\n this.reconnectAttempt = 0\n this.setState(TransportState.CONNECTED)\n this.setupListeners()\n this.startKeepalive()\n this.emit('open')\n resolve()\n }\n\n const onError = (event: Event) => {\n this.ws?.removeEventListener('open', onOpen)\n const err = new ConnectionError(\n (event as ErrorEvent).message || 'WebSocket connection failed',\n this.url\n )\n // State will transition via the close handler\n reject(err)\n }\n\n this.ws.addEventListener('open', onOpen)\n this.ws.addEventListener('error', onError)\n })\n }\n\n /** Close the connection without triggering auto-reconnect. */\n disconnect(): void {\n this.intentionalClose = true\n this.clearReconnectTimer()\n this.stopKeepalive()\n if (this.ws) {\n this.ws.close(1000, 'client disconnect')\n this.ws = null\n }\n if (this._state !== TransportState.DESTROYED) {\n this.setState(TransportState.DISCONNECTED)\n }\n }\n\n /** Permanently destroy the transport. No further connect() calls are allowed. */\n destroy(): void {\n this.disconnect()\n this.setState(TransportState.DESTROYED)\n this.listeners.clear()\n }\n\n /** Send data over the WebSocket. Throws if not connected. */\n send(data: string): void {\n if (this._state !== TransportState.CONNECTED || !this.ws) {\n throw new ConnectionError('Not connected', this.url)\n }\n this.ws.send(data)\n }\n\n // ── Private helpers ──────────────────────────────────────────────\n\n private setState(next: TransportState): void {\n const prev = this._state\n if (prev === next) return\n this._state = next\n this.emit('stateChange', next, prev)\n }\n\n private setupListeners(): void {\n if (!this.ws) return\n\n this.ws.addEventListener('message', (event: MessageEvent) => {\n const data = typeof event.data === 'string' ? event.data : event.data.toString()\n this.emit('message', data)\n })\n\n this.ws.addEventListener('error', () => {\n this.emit('error', new ConnectionError('WebSocket error', this.url))\n })\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectAttempt >= this.reconnectMaxRetries) {\n this.setState(TransportState.DISCONNECTED)\n this.emit('reconnectFailed')\n return\n }\n\n this.setState(TransportState.RECONNECTING)\n\n const delay = Math.min(\n this.reconnectDelay * Math.pow(2, this.reconnectAttempt),\n this.reconnectMaxDelay,\n )\n this.reconnectAttempt++\n\n this.reconnectTimer = setTimeout(async () => {\n // Reset to allow connect() through the state guard\n this._state = TransportState.DISCONNECTED\n try {\n await this.connect()\n } catch {\n // close handler will trigger another scheduleReconnect\n }\n }, delay)\n }\n\n private clearReconnectTimer(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n }\n\n private startKeepalive(): void {\n if (this.keepaliveInterval <= 0) return\n // ws.ping() only exists on the Node `ws` package — browsers handle pings natively\n if (typeof globalThis.WebSocket !== 'undefined' && this.ws instanceof globalThis.WebSocket) return\n\n this.keepaliveTimer = setInterval(() => {\n if (this.ws && this._state === TransportState.CONNECTED) {\n try {\n (this.ws as unknown as { ping: () => void }).ping()\n } catch {\n // ignore — not available\n }\n }\n }, this.keepaliveInterval)\n }\n\n private stopKeepalive(): void {\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer)\n this.keepaliveTimer = null\n }\n }\n\n private async getWebSocketImpl(): Promise<typeof WebSocket> {\n if (typeof globalThis.WebSocket !== 'undefined') {\n return globalThis.WebSocket\n }\n // Node.js — dynamic import\n try {\n const { default: WS } = await import('ws')\n return WS as unknown as typeof WebSocket\n } catch {\n throw new ConnectionError(\n 'WebSocket implementation not found. Install the \"ws\" package for Node.js.',\n this.url,\n )\n }\n }\n}\n","import { AbstractTransport, TransportState } from './base'\nimport { ConnectionError } from '../errors'\n\ndeclare global {\n interface Window {\n ton?: {\n adnl?: {\n send: (data: string) => void\n onMessage: (callback: (data: string) => void) => () => void\n }\n }\n }\n}\n\n/**\n * IPC transport for Electron/browser preload environments that expose `window.ton.adnl`.\n */\nexport class IpcTransport extends AbstractTransport {\n private unsubscribe: (() => void) | null = null\n private _state: TransportState = TransportState.DISCONNECTED\n\n /** Current transport state. */\n get state(): TransportState {\n return this._state\n }\n\n /** Connect to the IPC bridge via `window.ton.adnl`. */\n async connect(): Promise<void> {\n if (this._state === TransportState.CONNECTED) return\n if (this._state === TransportState.CONNECTING) {\n throw new ConnectionError('Already connecting', 'ipc')\n }\n if (this._state === TransportState.DESTROYED) {\n throw new ConnectionError('Transport destroyed', 'ipc')\n }\n\n if (typeof window === 'undefined' || !window.ton?.adnl) {\n throw new ConnectionError('window.ton.adnl not available', 'ipc')\n }\n\n this.setState(TransportState.CONNECTING)\n\n this.unsubscribe = window.ton.adnl.onMessage((data: string) => {\n this.emit('message', data)\n })\n\n this.setState(TransportState.CONNECTED)\n this.emit('open')\n }\n\n /** Disconnect from the IPC bridge. */\n disconnect(): void {\n if (this.unsubscribe) {\n this.unsubscribe()\n this.unsubscribe = null\n }\n if (this._state !== TransportState.DESTROYED) {\n this.setState(TransportState.DISCONNECTED)\n }\n this.emit('close', 1000, 'client disconnect')\n }\n\n /** Permanently destroy the transport. */\n destroy(): void {\n this.disconnect()\n this.setState(TransportState.DESTROYED)\n this.listeners.clear()\n }\n\n /** Send data over the IPC bridge. */\n send(data: string): void {\n if (this._state !== TransportState.CONNECTED) {\n throw new ConnectionError('IPC transport not connected', 'ipc')\n }\n if (typeof window === 'undefined' || !window.ton?.adnl) {\n throw new ConnectionError('window.ton.adnl not available', 'ipc')\n }\n window.ton.adnl.send(data)\n }\n\n private setState(next: TransportState): void {\n const prev = this._state\n if (prev === next) return\n this._state = next\n this.emit('stateChange', next, prev)\n }\n}\n","export { AbstractTransport, TransportState } from './base'\nexport type { TransportEvents, TransportEventName } from './base'\nexport { WsTransport } from './ws-transport'\nexport type { WsTransportOptions } from './ws-transport'\nexport { IpcTransport } from './ipc-transport'\n\nimport { AbstractTransport } from './base'\nimport { WsTransport, WsTransportOptions } from './ws-transport'\nimport { IpcTransport } from './ipc-transport'\n\n/** Auto-detect the best transport: prefer IPC in Electron preload, otherwise WebSocket. */\nexport function createTransport(options?: WsTransportOptions): AbstractTransport {\n if (typeof window !== 'undefined' && window.ton?.adnl) {\n return new IpcTransport()\n }\n return new WsTransport(options)\n}\n","import { AbstractTransport } from '../transport'\nimport { RpcError, ConnectionClosedError, TimeoutError } from '../errors'\n\ninterface PendingCall<T = unknown> {\n resolve: (value: T) => void\n reject: (error: Error) => void\n timer: ReturnType<typeof setTimeout>\n method: string\n abortHandler?: () => void\n signal?: AbortSignal\n}\n\nexport type PushHandler = (event: string, data: unknown) => void\n\n/** Logger interface accepted by RpcEngine. */\nexport interface Logger {\n debug: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n}\n\nexport interface RpcEngineOptions {\n requestTimeout?: number\n logger?: Logger\n}\n\n/** Options for individual RPC calls. */\nexport interface CallOptions {\n signal?: AbortSignal\n}\n\n/** Counter-based fallback for ID generation when crypto.randomUUID is unavailable. */\nlet idCounter = 0\nfunction generateId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID()\n }\n idCounter = (idCounter + 1) % 0x80000000 // wrap at 2^31\n return String(idCounter)\n}\n\n/**\n * JSON-RPC 2.0 engine over an AbstractTransport.\n * Handles request/response correlation, timeouts, push events, and abort signals.\n */\nexport class RpcEngine {\n private pending = new Map<string, PendingCall>()\n private pushHandler: PushHandler | null = null\n private readonly requestTimeout: number\n private readonly logger: Logger | null\n\n constructor(\n private transport: AbstractTransport,\n options: RpcEngineOptions = {},\n ) {\n this.requestTimeout = options.requestTimeout ?? 30_000\n this.logger = options.logger ?? null\n this.transport.on('message', (data) => this.handleMessage(data))\n this.transport.on('close', () => this.rejectAll('Connection closed'))\n }\n\n /** Register a handler for push events (subscriptions, ADNL). */\n setPushHandler(handler: PushHandler): void {\n this.pushHandler = handler\n }\n\n /**\n * Send a JSON-RPC 2.0 request and return the result.\n * @param method - The RPC method name.\n * @param params - Optional parameters.\n * @param options - Optional call options (abort signal).\n */\n call<T>(method: string, params?: unknown, options?: CallOptions): Promise<T> {\n const id = generateId()\n\n // Reject immediately if already aborted\n if (options?.signal?.aborted) {\n return Promise.reject(new TimeoutError(method, 0))\n }\n\n return new Promise<T>((resolve, reject) => {\n const cleanup = () => {\n const call = this.pending.get(id)\n if (call?.abortHandler && options?.signal) {\n options.signal.removeEventListener('abort', call.abortHandler)\n }\n this.pending.delete(id)\n }\n\n const timer = setTimeout(() => {\n cleanup()\n this.logger?.warn('RPC timeout', method, id)\n reject(new TimeoutError(method, this.requestTimeout))\n }, this.requestTimeout)\n\n const call: PendingCall = {\n resolve: resolve as (v: unknown) => void,\n reject,\n timer,\n method,\n }\n\n // Abort signal support\n if (options?.signal) {\n const abortHandler = () => {\n clearTimeout(timer)\n cleanup()\n reject(new TimeoutError(method, 0))\n }\n call.abortHandler = abortHandler\n call.signal = options.signal\n options.signal.addEventListener('abort', abortHandler, { once: true })\n }\n\n this.pending.set(id, call)\n\n const msg = JSON.stringify({ jsonrpc: '2.0', id, method, params: params ?? {} })\n this.logger?.debug('RPC →', method, id)\n\n try {\n this.transport.send(msg)\n } catch (err) {\n clearTimeout(timer)\n cleanup()\n reject(err)\n }\n })\n }\n\n private handleMessage(raw: string): void {\n let msg: {\n jsonrpc?: string\n id?: string | number | null\n result?: unknown\n error?: { code: number; message: string } | null\n event?: string\n data?: unknown\n }\n try {\n msg = JSON.parse(raw)\n } catch {\n return // malformed JSON, ignore\n }\n\n // Response to a pending call — use != null for falsy-safe check (id could be 0 or \"\")\n if (msg.id != null && this.pending.has(String(msg.id))) {\n const id = String(msg.id)\n const call = this.pending.get(id)!\n clearTimeout(call.timer)\n if (call.abortHandler && call.signal) {\n call.signal.removeEventListener('abort', call.abortHandler)\n }\n this.pending.delete(id)\n\n if (msg.error) {\n this.logger?.error('RPC error', call.method, msg.error)\n call.reject(new RpcError(msg.error.message, msg.error.code))\n } else {\n this.logger?.debug('RPC ←', call.method, id)\n call.resolve(msg.result)\n }\n return\n }\n\n // Push event (subscription or ADNL)\n if (msg.event && this.pushHandler) {\n this.pushHandler(msg.event, msg.data)\n }\n }\n\n private rejectAll(reason: string): void {\n for (const [, call] of this.pending) {\n clearTimeout(call.timer)\n call.reject(new ConnectionClosedError(1006, `${reason} (pending: ${call.method})`))\n }\n this.pending.clear()\n }\n\n /** Destroy the engine, rejecting all pending calls. */\n destroy(): void {\n this.rejectAll('RPC engine destroyed')\n this.pushHandler = null\n }\n}\n","/** Default maximum buffer size before oldest events are dropped. */\nconst DEFAULT_HIGH_WATER_MARK = 1000\n\nexport interface SubscriptionOptions {\n /** Maximum buffered events for the async iterator. Oldest are dropped when exceeded. Default: 1000. */\n highWaterMark?: number\n}\n\n/**\n * A typed subscription to push events from the bridge.\n * Supports both listener-based and async-iterator consumption.\n */\nexport class Subscription<T> {\n private listeners = new Set<(data: T) => void>()\n private errorListeners = new Set<(error: Error) => void>()\n private _active = true\n private _iteratorResolve: (() => void) | null = null\n private readonly highWaterMark: number\n\n constructor(\n public readonly event: string,\n private onUnsubscribe: () => void,\n options?: SubscriptionOptions,\n ) {\n this.highWaterMark = options?.highWaterMark ?? DEFAULT_HIGH_WATER_MARK\n }\n\n /** Whether the subscription is still active. */\n get active(): boolean { return this._active }\n\n /** Register a data or error listener. */\n on(event: 'data', listener: (data: T) => void): this\n on(event: 'error', listener: (error: Error) => void): this\n on(event: string, listener: (...args: never[]) => void): this {\n if (event === 'data') this.listeners.add(listener as (data: T) => void)\n else if (event === 'error') this.errorListeners.add(listener as (error: Error) => void)\n return this\n }\n\n /** Remove a data or error listener. */\n off(event: 'data', listener: (data: T) => void): this\n off(event: 'error', listener: (error: Error) => void): this\n off(event: string, listener: (...args: never[]) => void): this {\n if (event === 'data') this.listeners.delete(listener as (data: T) => void)\n else if (event === 'error') this.errorListeners.delete(listener as (error: Error) => void)\n return this\n }\n\n /** @internal Called by SubscriptionManager to deliver push events. */\n _deliver(data: T): void {\n if (!this._active) return\n for (const fn of this.listeners) fn(data)\n }\n\n /** @internal Called by SubscriptionManager on error. */\n _error(error: Error): void {\n for (const fn of this.errorListeners) fn(error)\n }\n\n /** Unsubscribe, releasing all listeners and unblocking any active async iterator. */\n async unsubscribe(): Promise<void> {\n if (!this._active) return\n this._active = false\n this.listeners.clear()\n this.errorListeners.clear()\n if (this._iteratorResolve) {\n this._iteratorResolve()\n this._iteratorResolve = null\n }\n this.onUnsubscribe()\n }\n\n /** Consume events as an async iterable. Respects backpressure via highWaterMark. */\n async *[Symbol.asyncIterator](): AsyncIterableIterator<T> {\n const buffer: T[] = []\n let resolve: (() => void) | null = null\n\n const listener = (data: T) => {\n buffer.push(data)\n // Backpressure: drop oldest events if buffer exceeds highWaterMark\n while (buffer.length > this.highWaterMark) {\n buffer.shift()\n }\n if (resolve) { resolve(); resolve = null }\n }\n\n this.on('data', listener)\n\n try {\n while (this._active) {\n if (buffer.length > 0) {\n yield buffer.shift()!\n } else {\n await new Promise<void>(r => {\n resolve = r\n this._iteratorResolve = r\n })\n }\n }\n } finally {\n this._iteratorResolve = null\n this.off('data', listener)\n await this.unsubscribe()\n }\n }\n}\n","import { Subscription, SubscriptionOptions } from './subscription'\n\n/** Listener type for raw ADNL events. */\nexport type AdnlListener = (data: unknown) => void\n\n/**\n * Manages subscriptions and ADNL event listeners.\n * Routes push events from the RPC engine to the correct subscription or listener.\n */\nexport class SubscriptionManager {\n private subscriptions = new Map<string, Set<Subscription<unknown>>>()\n private adnlListeners = new Map<string, Set<AdnlListener>>()\n private subscriptionIds = new Map<string, Subscription<unknown>>()\n\n /** Register a subscription for a push event type. */\n register<T>(\n eventType: string,\n onUnsubscribe: () => void,\n options?: SubscriptionOptions,\n ): Subscription<T> {\n const sub = new Subscription<T>(eventType, () => {\n const subs = this.subscriptions.get(eventType)\n if (subs) {\n subs.delete(sub as Subscription<unknown>)\n if (subs.size === 0) this.subscriptions.delete(eventType)\n }\n // Remove subscription ID mapping\n for (const [id, s] of this.subscriptionIds) {\n if (s === (sub as Subscription<unknown>)) {\n this.subscriptionIds.delete(id)\n break\n }\n }\n onUnsubscribe()\n }, options)\n\n if (!this.subscriptions.has(eventType)) {\n this.subscriptions.set(eventType, new Set())\n }\n this.subscriptions.get(eventType)!.add(sub as Subscription<unknown>)\n return sub\n }\n\n /** Store the bridge-assigned subscription ID for a subscription. */\n setSubscriptionId(subscriptionId: string, subscription: Subscription<unknown>): void {\n this.subscriptionIds.set(subscriptionId, subscription)\n }\n\n /** Get a subscription by its bridge-assigned ID. */\n getBySubscriptionId(subscriptionId: string): Subscription<unknown> | undefined {\n return this.subscriptionIds.get(subscriptionId)\n }\n\n /** Route a push event to all matching subscriptions. */\n handleEvent(event: string, data: unknown): void {\n const subs = this.subscriptions.get(event)\n if (subs) {\n for (const sub of subs) sub._deliver(data)\n }\n\n const listeners = this.adnlListeners.get(event)\n if (listeners) {\n for (const fn of listeners) fn(data)\n }\n }\n\n /** Register an ADNL event listener. */\n onAdnl(event: string, listener: AdnlListener): void {\n if (!this.adnlListeners.has(event)) {\n this.adnlListeners.set(event, new Set())\n }\n this.adnlListeners.get(event)!.add(listener)\n }\n\n /** Remove an ADNL event listener. */\n offAdnl(event: string, listener: AdnlListener): void {\n this.adnlListeners.get(event)?.delete(listener)\n }\n\n /**\n * Returns all active subscriptions as event-type entries for resubscription after reconnect.\n * The caller (typically the client) should iterate this list and re-send subscribe RPCs\n * to the bridge, then update subscription IDs via setSubscriptionId().\n */\n getResubscribeEntries(): Array<{ eventType: string; subscription: Subscription<unknown> }> {\n const entries: Array<{ eventType: string; subscription: Subscription<unknown> }> = []\n for (const [eventType, subs] of this.subscriptions) {\n for (const sub of subs) {\n if (sub.active) {\n entries.push({ eventType, subscription: sub })\n }\n }\n }\n return entries\n }\n\n /**\n * Resubscribe all active subscriptions after a reconnect.\n * Accepts a callback that performs the actual RPC subscribe call for each entry\n * and returns the new subscription_id from the bridge.\n * Old subscription IDs are cleared and replaced with new ones.\n */\n async resubscribe(\n doSubscribe: (eventType: string) => Promise<string>,\n ): Promise<void> {\n // Clear stale bridge-assigned IDs\n this.subscriptionIds.clear()\n\n const entries = this.getResubscribeEntries()\n for (const { eventType, subscription } of entries) {\n const newId = await doSubscribe(eventType)\n this.subscriptionIds.set(newId, subscription)\n }\n }\n\n /** Number of active subscriptions (for debugging). */\n get activeCount(): number {\n let count = 0\n for (const subs of this.subscriptions.values()) count += subs.size\n return count\n }\n\n /** Clear all subscriptions and ADNL listeners (e.g. on disconnect). */\n clear(): void {\n for (const [, subs] of this.subscriptions) {\n for (const sub of subs) {\n sub._error(new Error('Connection closed'))\n }\n }\n this.subscriptions.clear()\n this.adnlListeners.clear()\n this.subscriptionIds.clear()\n }\n}\n","import { RpcEngine, CallOptions } from '../rpc'\nimport type { MethodMap } from '../types'\n\n/**\n * Base class for all namespace implementations.\n * Provides a type-safe `call` helper wired to the MethodMap.\n */\nexport abstract class BaseNamespace {\n constructor(protected rpc: RpcEngine) {}\n\n /** Send a typed JSON-RPC call through the engine. */\n protected call<M extends keyof MethodMap>(\n method: M,\n params?: MethodMap[M]['params'],\n options?: CallOptions,\n ): Promise<MethodMap[M]['result']> {\n return this.rpc.call(method, params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport type {\n DhtFindAddressesParams, DhtFindAddressesResult,\n DhtFindOverlayNodesParams, DhtFindOverlayNodesResult,\n DhtFindTunnelNodesResult,\n DhtFindValueParams, DhtFindValueResult,\n} from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** DHT namespace — distributed hash table lookups. */\nexport class DhtNamespace extends BaseNamespace {\n /** Look up ADNL addresses for a given key. */\n findAddresses(params: DhtFindAddressesParams, options?: CallOptions): Promise<DhtFindAddressesResult> {\n return this.call('dht.findAddresses', params, options)\n }\n\n /** Find overlay nodes for a given overlay key. */\n findOverlayNodes(params: DhtFindOverlayNodesParams, options?: CallOptions): Promise<DhtFindOverlayNodesResult> {\n return this.call('dht.findOverlayNodes', params, options)\n }\n\n /** Discover tunnel relay nodes from the DHT. */\n findTunnelNodes(options?: CallOptions): Promise<DhtFindTunnelNodesResult> {\n return this.call('dht.findTunnelNodes', undefined, options)\n }\n\n /** Look up an arbitrary value in the DHT. */\n findValue(params: DhtFindValueParams, options?: CallOptions): Promise<DhtFindValueResult> {\n return this.call('dht.findValue', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport { SubscriptionManager, Subscription } from '../subscription'\nimport { RpcEngine, CallOptions } from '../rpc'\nimport type {\n LiteGetMasterchainInfoResult,\n LiteGetAccountStateParams, LiteGetAccountStateResult,\n LiteRunMethodParams, LiteRunMethodResult,\n LiteSendMessageParams, LiteSendMessageResult,\n LiteGetTransactionsParams, LiteGetTransactionsResult,\n LiteGetTransactionParams, LiteTransaction,\n LiteFindTxByInMsgHashParams,\n LiteFindTxByOutMsgHashParams,\n LiteGetTimeResult,\n LiteLookupBlockParams, LiteLookupBlockResult,\n LiteGetBlockTransactionsParams, LiteGetBlockTransactionsResult,\n LiteGetShardsResult,\n LiteGetBlockchainConfigParams, LiteGetBlockchainConfigResult,\n LiteSendAndWatchParams, LiteSendAndWatchResult,\n LiteGetBlockDataParams, LiteGetBlockDataResult,\n LiteGetBlockHeaderParams, LiteGetBlockHeaderResult,\n LiteGetLibrariesParams, LiteGetLibrariesResult,\n TxConfirmedEvent, TxTimeoutEvent,\n} from '../types'\n\n/** Union of events delivered to a sendAndWatch subscription. */\nexport type SendAndWatchEvent = TxConfirmedEvent | TxTimeoutEvent\n\n/** Liteserver namespace — blockchain queries and transaction submission. */\nexport class LiteNamespace extends BaseNamespace {\n private manager: SubscriptionManager\n\n constructor(rpc: RpcEngine, manager: SubscriptionManager) {\n super(rpc)\n this.manager = manager\n }\n\n /** Get the latest masterchain block info. */\n getMasterchainInfo(options?: CallOptions): Promise<LiteGetMasterchainInfoResult> {\n return this.call('lite.getMasterchainInfo', undefined, options)\n }\n\n /** Get the state of an account. */\n getAccountState(params: LiteGetAccountStateParams, options?: CallOptions): Promise<LiteGetAccountStateResult> {\n return this.call('lite.getAccountState', params, options)\n }\n\n /** Run a get-method on a smart contract. */\n runMethod(params: LiteRunMethodParams, options?: CallOptions): Promise<LiteRunMethodResult> {\n return this.call('lite.runMethod', params, options)\n }\n\n /** Send an external message (fire and forget). */\n sendMessage(params: LiteSendMessageParams, options?: CallOptions): Promise<LiteSendMessageResult> {\n return this.call('lite.sendMessage', params, options)\n }\n\n /** Send an external message and wait for processing confirmation. */\n sendMessageWait(params: LiteSendMessageParams, options?: CallOptions): Promise<LiteSendMessageResult> {\n return this.call('lite.sendMessageWait', params, options)\n }\n\n /** Get account transactions with optional pagination. */\n getTransactions(params: LiteGetTransactionsParams, options?: CallOptions): Promise<LiteGetTransactionsResult> {\n return this.call('lite.getTransactions', params, options)\n }\n\n /** Get a single transaction by address and LT. */\n getTransaction(params: LiteGetTransactionParams, options?: CallOptions): Promise<LiteTransaction> {\n return this.call('lite.getTransaction', params, options)\n }\n\n /** Find a transaction by its inbound message hash. */\n findTxByInMsgHash(params: LiteFindTxByInMsgHashParams, options?: CallOptions): Promise<LiteTransaction> {\n return this.call('lite.findTxByInMsgHash', params, options)\n }\n\n /** Find a transaction by its outbound message hash. */\n findTxByOutMsgHash(params: LiteFindTxByOutMsgHashParams, options?: CallOptions): Promise<LiteTransaction> {\n return this.call('lite.findTxByOutMsgHash', params, options)\n }\n\n /** Get the current liteserver time. */\n getTime(options?: CallOptions): Promise<LiteGetTimeResult> {\n return this.call('lite.getTime', undefined, options)\n }\n\n /** Look up a block by workchain, shard, and seqno. */\n lookupBlock(params: LiteLookupBlockParams, options?: CallOptions): Promise<LiteLookupBlockResult> {\n return this.call('lite.lookupBlock', params, options)\n }\n\n /** Get short transaction references from a block. */\n getBlockTransactions(params: LiteGetBlockTransactionsParams, options?: CallOptions): Promise<LiteGetBlockTransactionsResult> {\n return this.call('lite.getBlockTransactions', params, options)\n }\n\n /** Get current shard descriptors. */\n getShards(options?: CallOptions): Promise<LiteGetShardsResult> {\n return this.call('lite.getShards', undefined, options)\n }\n\n /** Get blockchain configuration parameters. */\n getBlockchainConfig(params?: LiteGetBlockchainConfigParams, options?: CallOptions): Promise<LiteGetBlockchainConfigResult> {\n return this.call('lite.getBlockchainConfig', params, options)\n }\n\n /**\n * Send a message and subscribe to tx_confirmed / tx_timeout events.\n * Returns a Subscription that delivers {@link SendAndWatchEvent} push events.\n */\n async sendAndWatch(params: LiteSendAndWatchParams, options?: CallOptions): Promise<{ confirmation: LiteSendAndWatchResult; subscription: Subscription<SendAndWatchEvent> }> {\n const confirmation = await this.call('lite.sendAndWatch', params, options)\n if (!confirmation.watching) throw new Error('sendAndWatch rejected by bridge')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<SendAndWatchEvent>('tx_confirmed', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n\n // Also route tx_timeout events to this subscription\n const timeoutSub = this.manager.register<SendAndWatchEvent>('tx_timeout', () => {})\n this.manager.setSubscriptionId(`${subId}:timeout`, timeoutSub as Subscription<unknown>)\n // Forward timeout events to the main subscription\n timeoutSub.on('data', (data) => sub._deliver(data))\n\n return { confirmation, subscription: sub }\n }\n\n /** Get the raw block BOC. */\n getBlockData(params: LiteGetBlockDataParams, options?: CallOptions): Promise<LiteGetBlockDataResult> {\n return this.call('lite.getBlockData', params, options)\n }\n\n /** Get the block header proof BOC. */\n getBlockHeader(params: LiteGetBlockHeaderParams, options?: CallOptions): Promise<LiteGetBlockHeaderResult> {\n return this.call('lite.getBlockHeader', params, options)\n }\n\n /** Get library cells by their hashes. */\n getLibraries(params: LiteGetLibrariesParams, options?: CallOptions): Promise<LiteGetLibrariesResult> {\n return this.call('lite.getLibraries', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport { SubscriptionManager, Subscription } from '../subscription'\nimport { RpcEngine, CallOptions } from '../rpc'\nimport type {\n SubscribeTransactionsParams,\n SubscribeAccountStateParams,\n SubscribeConfigChangesParams,\n SubscribeMultiAccountParams,\n SubscribeTraceParams,\n LiteTransaction, SubscribeBlockEvent,\n SubscribeAccountStateEvent, SubscribeNewTransactionEvent,\n SubscribeConfigChangedEvent,\n TraceStartedEvent, TraceTxEvent, TraceCompleteEvent, TraceTimeoutEvent,\n} from '../types'\n\n/** Union of all trace push events. */\nexport type TraceEvent = TraceStartedEvent | TraceTxEvent | TraceCompleteEvent | TraceTimeoutEvent\n\n/** Subscribe namespace — real-time event subscriptions. */\nexport class SubscribeNamespace extends BaseNamespace {\n private manager: SubscriptionManager\n\n constructor(rpc: RpcEngine, manager: SubscriptionManager) {\n super(rpc)\n this.manager = manager\n }\n\n /** Subscribe to transactions for a specific account. */\n async transactions(params: SubscribeTransactionsParams, options?: CallOptions): Promise<Subscription<LiteTransaction>> {\n const confirmation = await this.call('subscribe.transactions', params, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<LiteTransaction>('transaction', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n return sub\n }\n\n /** Subscribe to new masterchain blocks. */\n async blocks(options?: CallOptions): Promise<Subscription<SubscribeBlockEvent>> {\n const confirmation = await this.call('subscribe.blocks', undefined, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<SubscribeBlockEvent>('block', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n return sub\n }\n\n /** Subscribe to account state changes. */\n async accountState(params: SubscribeAccountStateParams, options?: CallOptions): Promise<Subscription<SubscribeAccountStateEvent>> {\n const confirmation = await this.call('subscribe.accountState', params, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<SubscribeAccountStateEvent>('account_state', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n return sub\n }\n\n /** Subscribe to all new transactions across the blockchain. */\n async newTransactions(options?: CallOptions): Promise<Subscription<SubscribeNewTransactionEvent>> {\n const confirmation = await this.call('subscribe.newTransactions', undefined, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<SubscribeNewTransactionEvent>('new_transaction', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n return sub\n }\n\n /** Subscribe to blockchain config parameter changes. */\n async configChanges(params: SubscribeConfigChangesParams, options?: CallOptions): Promise<Subscription<SubscribeConfigChangedEvent>> {\n const confirmation = await this.call('subscribe.configChanges', params, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<SubscribeConfigChangedEvent>('config_changed', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n return sub\n }\n\n /** Subscribe to transactions across multiple accounts. */\n async multiAccount(params: SubscribeMultiAccountParams, options?: CallOptions): Promise<Subscription<LiteTransaction>> {\n const confirmation = await this.call('subscribe.multiAccount', params, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<LiteTransaction>('transaction', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n return sub\n }\n\n /**\n * Subscribe to transaction traces (internal message chains).\n * Returns a subscription that delivers trace_started, trace_tx, trace_complete, and trace_timeout events.\n */\n async trace(params: SubscribeTraceParams, options?: CallOptions): Promise<Subscription<TraceEvent>> {\n const confirmation = await this.call('subscribe.trace', params, options)\n if (!confirmation.subscribed) throw new Error('Subscription rejected')\n\n const subId = confirmation.subscription_id\n const sub = this.manager.register<TraceEvent>('trace_started', () => {\n this.rpc.call('subscribe.unsubscribe', { subscription_id: subId }).catch(() => {})\n })\n this.manager.setSubscriptionId(subId, sub as Subscription<unknown>)\n\n // Route additional trace events to the same subscription\n const traceEvents = ['trace_tx', 'trace_complete', 'trace_timeout'] as const\n for (const evt of traceEvents) {\n const aux = this.manager.register<TraceEvent>(evt, () => {})\n aux.on('data', (data) => sub._deliver(data))\n }\n\n return sub\n }\n}\n","import { BaseNamespace } from './base'\nimport type {\n JettonGetDataParams, JettonGetDataResult,\n JettonGetWalletAddressParams, JettonGetWalletAddressResult,\n JettonGetBalanceParams, JettonGetBalanceResult,\n} from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** Jetton namespace — fungible token queries (TEP-74). */\nexport class JettonNamespace extends BaseNamespace {\n /** Get jetton master data (supply, admin, content). */\n getData(params: JettonGetDataParams, options?: CallOptions): Promise<JettonGetDataResult> {\n return this.call('jetton.getData', params, options)\n }\n\n /** Compute the jetton wallet address for an owner. */\n getWalletAddress(params: JettonGetWalletAddressParams, options?: CallOptions): Promise<JettonGetWalletAddressResult> {\n return this.call('jetton.getWalletAddress', params, options)\n }\n\n /** Get balance of a jetton wallet. */\n getBalance(params: JettonGetBalanceParams, options?: CallOptions): Promise<JettonGetBalanceResult> {\n return this.call('jetton.getBalance', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport type {\n NftGetDataParams, NftGetDataResult,\n NftGetCollectionDataParams, NftGetCollectionDataResult,\n NftGetAddressByIndexParams, NftGetAddressByIndexResult,\n NftGetRoyaltyParamsParams, NftGetRoyaltyParamsResult,\n NftGetContentParams, NftGetContentResult,\n} from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** NFT namespace — non-fungible token queries (TEP-62). */\nexport class NftNamespace extends BaseNamespace {\n /** Get individual NFT item data. */\n getData(params: NftGetDataParams, options?: CallOptions): Promise<NftGetDataResult> {\n return this.call('nft.getData', params, options)\n }\n\n /** Get NFT collection data. */\n getCollectionData(params: NftGetCollectionDataParams, options?: CallOptions): Promise<NftGetCollectionDataResult> {\n return this.call('nft.getCollectionData', params, options)\n }\n\n /** Get the NFT item address by collection index. */\n getAddressByIndex(params: NftGetAddressByIndexParams, options?: CallOptions): Promise<NftGetAddressByIndexResult> {\n return this.call('nft.getAddressByIndex', params, options)\n }\n\n /** Get royalty parameters for a collection. */\n getRoyaltyParams(params: NftGetRoyaltyParamsParams, options?: CallOptions): Promise<NftGetRoyaltyParamsResult> {\n return this.call('nft.getRoyaltyParams', params, options)\n }\n\n /** Resolve the full content URI for an NFT by combining collection and individual content. */\n getContent(params: NftGetContentParams, options?: CallOptions): Promise<NftGetContentResult> {\n return this.call('nft.getContent', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport type { DnsResolveParams, DnsResolveResult } from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** DNS namespace — TON DNS domain resolution. */\nexport class DnsNamespace extends BaseNamespace {\n /** Resolve a .ton domain to wallet, site ADNL, text records, etc. */\n resolve(params: DnsResolveParams, options?: CallOptions): Promise<DnsResolveResult> {\n return this.call('dns.resolve', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport { SubscriptionManager } from '../subscription'\nimport { RpcEngine, CallOptions } from '../rpc'\nimport type {\n AdnlConnectParams, AdnlConnectResult,\n AdnlConnectByAdnlParams,\n AdnlSendMessageParams, AdnlSendMessageResult,\n AdnlPingParams, AdnlPingResult,\n AdnlDisconnectParams, AdnlDisconnectResult,\n AdnlPeersResult,\n AdnlQueryParams, AdnlQueryResult,\n AdnlSetQueryHandlerParams, AdnlSetQueryHandlerResult,\n AdnlAnswerParams, AdnlAnswerResult,\n AdnlMessageEvent, AdnlDisconnectedEvent,\n AdnlIncomingConnectionEvent, AdnlQueryReceivedEvent,\n} from '../types'\n\n/** Map of friendly event names to their wire event names and data types. */\ntype AdnlEventMap = {\n 'message': AdnlMessageEvent\n 'disconnected': AdnlDisconnectedEvent\n 'incomingConnection': AdnlIncomingConnectionEvent\n 'queryReceived': AdnlQueryReceivedEvent\n}\n\nconst EVENT_LOOKUP: Record<keyof AdnlEventMap, string> = {\n message: 'adnl.message',\n disconnected: 'adnl.disconnected',\n incomingConnection: 'adnl.incomingConnection',\n queryReceived: 'adnl.queryReceived',\n}\n\n/** ADNL namespace — low-level peer-to-peer messaging. */\nexport class AdnlNamespace extends BaseNamespace {\n private manager: SubscriptionManager\n\n constructor(rpc: RpcEngine, manager: SubscriptionManager) {\n super(rpc)\n this.manager = manager\n }\n\n /** Connect to a peer by IP address and public key. */\n connect(params: AdnlConnectParams, options?: CallOptions): Promise<AdnlConnectResult> {\n return this.call('adnl.connect', params, options)\n }\n\n /** Connect to a peer by ADNL ID (resolved via DHT). */\n connectByADNL(params: AdnlConnectByAdnlParams, options?: CallOptions): Promise<AdnlConnectResult> {\n return this.call('adnl.connectByADNL', params, options)\n }\n\n /** Send an unreliable message to a connected peer. */\n sendMessage(params: AdnlSendMessageParams, options?: CallOptions): Promise<AdnlSendMessageResult> {\n return this.call('adnl.sendMessage', params, options)\n }\n\n /** Ping a connected peer. */\n ping(params: AdnlPingParams, options?: CallOptions): Promise<AdnlPingResult> {\n return this.call('adnl.ping', params, options)\n }\n\n /** Disconnect from a peer. */\n disconnect(params: AdnlDisconnectParams, options?: CallOptions): Promise<AdnlDisconnectResult> {\n return this.call('adnl.disconnect', params, options)\n }\n\n /** List all connected ADNL peers. */\n peers(options?: CallOptions): Promise<AdnlPeersResult> {\n return this.call('adnl.peers', undefined, options)\n }\n\n /** Send a TL query to a peer and wait for the response. */\n query(params: AdnlQueryParams, options?: CallOptions): Promise<AdnlQueryResult> {\n return this.call('adnl.query', params, options)\n }\n\n /** Enable the query handler for a peer (receive queryReceived events). */\n setQueryHandler(params: AdnlSetQueryHandlerParams, options?: CallOptions): Promise<AdnlSetQueryHandlerResult> {\n return this.call('adnl.setQueryHandler', params, options)\n }\n\n /** Answer a received query. */\n answer(params: AdnlAnswerParams, options?: CallOptions): Promise<AdnlAnswerResult> {\n return this.call('adnl.answer', params, options)\n }\n\n /** Register a listener for ADNL push events. */\n on<K extends keyof AdnlEventMap>(event: K, listener: (data: AdnlEventMap[K]) => void): this {\n this.manager.onAdnl(EVENT_LOOKUP[event], listener as (data: unknown) => void)\n return this\n }\n\n /** Remove a listener for ADNL push events. */\n off<K extends keyof AdnlEventMap>(event: K, listener: (data: AdnlEventMap[K]) => void): this {\n this.manager.offAdnl(EVENT_LOOKUP[event], listener as (data: unknown) => void)\n return this\n }\n}\n","import { BaseNamespace } from './base'\nimport type { NetworkInfoResult } from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** Network namespace — bridge and DHT status. */\nexport class NetworkNamespace extends BaseNamespace {\n /** Get bridge network information (DHT status, connected WS clients). */\n info(options?: CallOptions): Promise<NetworkInfoResult> {\n return this.call('network.info', undefined, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport { SubscriptionManager } from '../subscription'\nimport { RpcEngine, CallOptions } from '../rpc'\nimport type {\n OverlayJoinParams, OverlayJoinResult,\n OverlayLeaveParams, OverlayLeaveResult,\n OverlayGetPeersParams, OverlayGetPeersResult,\n OverlaySendMessageParams, OverlaySendMessageResult,\n OverlayQueryParams, OverlayQueryResult,\n OverlaySetQueryHandlerParams, OverlaySetQueryHandlerResult,\n OverlayAnswerParams, OverlayAnswerResult,\n OverlayBroadcastEvent, OverlayMessageEvent, OverlayQueryReceivedEvent,\n} from '../types'\n\n/** Map of friendly event names to their wire event names and data types. */\ntype OverlayEventMap = {\n 'broadcast': OverlayBroadcastEvent\n 'message': OverlayMessageEvent\n 'queryReceived': OverlayQueryReceivedEvent\n}\n\nconst EVENT_LOOKUP: Record<keyof OverlayEventMap, string> = {\n broadcast: 'overlay.broadcast',\n message: 'overlay.message',\n queryReceived: 'overlay.queryReceived',\n}\n\n/** Overlay namespace — P2P pubsub overlay networks. */\nexport class OverlayNamespace extends BaseNamespace {\n private manager: SubscriptionManager\n\n constructor(rpc: RpcEngine, manager: SubscriptionManager) {\n super(rpc)\n this.manager = manager\n }\n\n /** Join an overlay network. */\n join(params: OverlayJoinParams, options?: CallOptions): Promise<OverlayJoinResult> {\n return this.call('overlay.join', params, options)\n }\n\n /** Leave an overlay network. */\n leave(params: OverlayLeaveParams, options?: CallOptions): Promise<OverlayLeaveResult> {\n return this.call('overlay.leave', params, options)\n }\n\n /** Get peers in an overlay network. */\n getPeers(params: OverlayGetPeersParams, options?: CallOptions): Promise<OverlayGetPeersResult> {\n return this.call('overlay.getPeers', params, options)\n }\n\n /** Send a broadcast message to all overlay peers. */\n sendMessage(params: OverlaySendMessageParams, options?: CallOptions): Promise<OverlaySendMessageResult> {\n return this.call('overlay.sendMessage', params, options)\n }\n\n /** Send a TL query through the overlay and wait for the response. */\n query(params: OverlayQueryParams, options?: CallOptions): Promise<OverlayQueryResult> {\n return this.call('overlay.query', params, options)\n }\n\n /** Enable the query handler for an overlay (receive queryReceived events). */\n setQueryHandler(params: OverlaySetQueryHandlerParams, options?: CallOptions): Promise<OverlaySetQueryHandlerResult> {\n return this.call('overlay.setQueryHandler', params, options)\n }\n\n /** Answer a received overlay query. */\n answer(params: OverlayAnswerParams, options?: CallOptions): Promise<OverlayAnswerResult> {\n return this.call('overlay.answer', params, options)\n }\n\n /** Register a listener for overlay push events. */\n on<K extends keyof OverlayEventMap>(event: K, listener: (data: OverlayEventMap[K]) => void): this {\n this.manager.onAdnl(EVENT_LOOKUP[event], listener as (data: unknown) => void)\n return this\n }\n\n /** Remove a listener for overlay push events. */\n off<K extends keyof OverlayEventMap>(event: K, listener: (data: OverlayEventMap[K]) => void): this {\n this.manager.offAdnl(EVENT_LOOKUP[event], listener as (data: unknown) => void)\n return this\n }\n}\n","import { BaseNamespace } from './base'\nimport type {\n WalletGetSeqnoParams, WalletGetSeqnoResult,\n WalletGetPublicKeyParams, WalletGetPublicKeyResult,\n} from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** Wallet namespace — standard wallet contract queries. */\nexport class WalletNamespace extends BaseNamespace {\n /** Get the current seqno of a wallet contract. */\n getSeqno(params: WalletGetSeqnoParams, options?: CallOptions): Promise<WalletGetSeqnoResult> {\n return this.call('wallet.getSeqno', params, options)\n }\n\n /** Get the public key stored in a wallet contract. */\n getPublicKey(params: WalletGetPublicKeyParams, options?: CallOptions): Promise<WalletGetPublicKeyResult> {\n return this.call('wallet.getPublicKey', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport type {\n SbtGetAuthorityAddressParams, SbtGetAuthorityAddressResult,\n SbtGetRevokedTimeParams, SbtGetRevokedTimeResult,\n} from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** SBT namespace — soulbound token queries (TEP-85). */\nexport class SbtNamespace extends BaseNamespace {\n /** Get the authority address of a soulbound token. */\n getAuthorityAddress(params: SbtGetAuthorityAddressParams, options?: CallOptions): Promise<SbtGetAuthorityAddressResult> {\n return this.call('sbt.getAuthorityAddress', params, options)\n }\n\n /** Get the revocation timestamp of a soulbound token (0 = not revoked). */\n getRevokedTime(params: SbtGetRevokedTimeParams, options?: CallOptions): Promise<SbtGetRevokedTimeResult> {\n return this.call('sbt.getRevokedTime', params, options)\n }\n}\n","import { BaseNamespace } from './base'\nimport type {\n PaymentGetChannelStateParams, PaymentGetChannelStateResult,\n} from '../types'\nimport type { CallOptions } from '../rpc'\n\n/** Payment namespace — payment channel queries. */\nexport class PaymentNamespace extends BaseNamespace {\n /** Get the state of a payment channel contract. */\n getChannelState(params: PaymentGetChannelStateParams, options?: CallOptions): Promise<PaymentGetChannelStateResult> {\n return this.call('payment.getChannelState', params, options)\n }\n}\n","import { createTransport, AbstractTransport, TransportState, WsTransportOptions } from './transport'\nimport { RpcEngine, Logger } from './rpc'\nimport { SubscriptionManager } from './subscription'\nimport { DhtNamespace } from './namespaces/dht'\nimport { LiteNamespace } from './namespaces/lite'\nimport { SubscribeNamespace } from './namespaces/subscribe'\nimport { JettonNamespace } from './namespaces/jetton'\nimport { NftNamespace } from './namespaces/nft'\nimport { DnsNamespace } from './namespaces/dns'\nimport { AdnlNamespace } from './namespaces/adnl'\nimport { NetworkNamespace } from './namespaces/network'\nimport { OverlayNamespace } from './namespaces/overlay'\nimport { WalletNamespace } from './namespaces/wallet'\nimport { SbtNamespace } from './namespaces/sbt'\nimport { PaymentNamespace } from './namespaces/payment'\n\n/** Options for creating a {@link Web3SocketsClient}. */\nexport interface ClientOptions extends WsTransportOptions {\n /** Pre-built transport instance (overrides URL-based auto-detection). */\n transport?: AbstractTransport\n /** RPC request timeout in milliseconds (default: 30 000). */\n requestTimeout?: number\n /** Optional logger for debug/warn/error output. */\n logger?: Logger\n}\n\n/** Typed client event map. */\ninterface ClientEventMap {\n connected: () => void\n disconnected: (code: number, reason: string) => void\n error: (err: Error) => void\n stateChange: (newState: TransportState, oldState: TransportState) => void\n}\n\ntype ClientEventName = keyof ClientEventMap\n\n/**\n * High-level client for the TON WebSocket JSON-RPC bridge.\n * Provides typed namespace accessors for all 58+ bridge methods.\n */\nexport class Web3SocketsClient {\n private transport: AbstractTransport\n private rpc: RpcEngine\n private subscriptionManager: SubscriptionManager\n private clientListeners = new Map<ClientEventName, Set<ClientEventMap[ClientEventName]>>()\n\n /** DHT namespace — distributed hash table lookups. */\n readonly dht: DhtNamespace\n /** Liteserver namespace — blockchain queries and transaction submission. */\n readonly lite: LiteNamespace\n /** Subscribe namespace — real-time event subscriptions. */\n readonly subscribe: SubscribeNamespace\n /** Jetton namespace — fungible token queries. */\n readonly jetton: JettonNamespace\n /** NFT namespace — non-fungible token queries. */\n readonly nft: NftNamespace\n /** DNS namespace — TON DNS domain resolution. */\n readonly dns: DnsNamespace\n /** ADNL namespace — low-level peer-to-peer messaging. */\n readonly adnl: AdnlNamespace\n /** Network namespace — bridge status. */\n readonly network: NetworkNamespace\n /** Overlay namespace — P2P pubsub overlay networks. */\n readonly overlay: OverlayNamespace\n /** Wallet namespace — standard wallet contract queries. */\n readonly wallet: WalletNamespace\n /** SBT namespace — soulbound token queries. */\n readonly sbt: SbtNamespace\n /** Payment namespace — payment channel queries. */\n readonly payment: PaymentNamespace\n\n constructor(options: ClientOptions = {}) {\n this.transport = options.transport ?? createTransport(options)\n this.rpc = new RpcEngine(this.transport, {\n requestTimeout: options.requestTimeout,\n logger: options.logger,\n })\n this.subscriptionManager = new SubscriptionManager()\n\n this.rpc.setPushHandler((event, data) => {\n this.subscriptionManager.handleEvent(event, data)\n })\n\n this.transport.on('open', () => this.emitClient('connected'))\n this.transport.on('close', (code: number, reason: string) => {\n this.subscriptionManager.clear()\n this.emitClient('disconnected', code, reason)\n })\n this.transport.on('error', (err: Error) => this.emitClient('error', err))\n this.transport.on('stateChange', (newState: TransportState, oldState: TransportState) => {\n this.emitClient('stateChange', newState, oldState)\n })\n\n this.dht = new DhtNamespace(this.rpc)\n this.lite = new LiteNamespace(this.rpc, this.subscriptionManager)\n this.subscribe = new SubscribeNamespace(this.rpc, this.subscriptionManager)\n this.jetton = new JettonNamespace(this.rpc)\n this.nft = new NftNamespace(this.rpc)\n this.dns = new DnsNamespace(this.rpc)\n this.adnl = new AdnlNamespace(this.rpc, this.subscriptionManager)\n this.network = new NetworkNamespace(this.rpc)\n this.overlay = new OverlayNamespace(this.rpc, this.subscriptionManager)\n this.wallet = new WalletNamespace(this.rpc)\n this.sbt = new SbtNamespace(this.rpc)\n this.payment = new PaymentNamespace(this.rpc)\n }\n\n /** Open the transport connection. */\n async connect(): Promise<void> {\n await this.transport.connect()\n }\n\n /** Gracefully close the transport connection. */\n disconnect(): void {\n this.transport.disconnect()\n }\n\n /** Whether the transport is currently connected. */\n get isConnected(): boolean {\n return this.transport.isConnected\n }\n\n /** Current transport state. */\n get state(): TransportState {\n return this.transport.state\n }\n\n /** Permanently tear down the client, releasing all resources. */\n destroy(): void {\n this.rpc.destroy()\n this.transport.destroy()\n this.clientListeners.clear()\n }\n\n /** Register a client event listener. */\n on<E extends ClientEventName>(event: E, listener: ClientEventMap[E]): this {\n if (!this.clientListeners.has(event)) {\n this.clientListeners.set(event, new Set())\n }\n this.clientListeners.get(event)!.add(listener)\n return this\n }\n\n /** Remove a client event listener. */\n off<E extends ClientEventName>(event: E, listener: ClientEventMap[E]): this {\n this.clientListeners.get(event)?.delete(listener)\n return this\n }\n\n private emitClient<E extends ClientEventName>(event: E, ...args: Parameters<ClientEventMap[E]>): void {\n const fns = this.clientListeners.get(event)\n if (fns) for (const fn of fns) (fn as (...a: unknown[]) => void)(...args)\n }\n}\n"]}