/** * WebTransport (HTTP/3) lane primitive. * * Standalone client for the platform's WebTransport endpoint, which carries * the same session as the WebSocket lane. * Browser-native `WebTransport` API; no polyfill ships with the SDK. * * Browser support as of 2026-05: * - Chromium 97+ (stable) * - Firefox 125+ (stable) * - Safari Technology Preview only (no stable release yet) * - Node 22+ has experimental WebTransport behind a flag * * v1 surface is intentionally narrow: this exposes the bytes lane only, * caller decodes protobuf. Full `init({ transport: 'webtransport' })` * MessagingClient integration lands later, mirroring the SSE roadmap. * * @example * ```ts * import { WebTransportTransport } from '@droponair/sdk-js'; * const wt = new WebTransportTransport({ * httpUrl: 'https://sdk.droponair.com', * getJwt: async () => myJwt, * }); * wt.onFrame((bytes) => { ... protobuf decode ... }); * await wt.connect(); * await wt.sendEnvelope(envelopeBytes); * ``` */ export interface WebTransportTransportOptions { /** Base URL of the platform's REST API. The WT endpoint is derived as * `/v1/transport/wt?token=`. */ httpUrl: string; /** Returns a fresh JWT. Called once per connect. */ getJwt: () => Promise; } export type WTFrameHandler = (frame: Uint8Array) => void; export type WTStateHandler = (state: 'connecting' | 'open' | 'closed' | 'error') => void; export declare class WebTransportTransport { private readonly httpUrl; private readonly getJwt; private session; private stream; private writer; private reader; private frameHandler; private stateHandler; private readLoopAbort; constructor(options: WebTransportTransportOptions); /** Subscribe to incoming protobuf frames. Replaces any previous handler. */ onFrame(handler: WTFrameHandler): void; /** Subscribe to lifecycle state changes. Replaces any previous handler. */ onState(handler: WTStateHandler): void; /** Open the WebTransport session + a single bidirectional stream. */ connect(): Promise; /** Write a single protobuf Envelope to the bidirectional stream. */ sendEnvelope(envelopeBytes: Uint8Array): Promise; /** Close the session. Idempotent. */ close(): void; private startReadLoop; }