import { Utils } from "@meshtastic/core"; import type { Types } from "@meshtastic/core"; export class TransportWebSerial implements Types.Transport { private _toDevice: WritableStream; private _fromDevice: ReadableStream; public static async create(baudRate?: number): Promise { const port = await navigator.serial.requestPort(); await port.open({ baudRate: baudRate || 115200 }); return new TransportWebSerial(port); } public static async createFromPort( port: SerialPort, baudRate?: number, ): Promise { await port.open({ baudRate: baudRate || 115200 }); return new TransportWebSerial(port); } constructor(connection: SerialPort) { if (!connection.readable || !connection.writable) { throw new Error("Stream not accessible"); } Utils.toDeviceStream.readable.pipeTo(connection.writable); this._toDevice = Utils.toDeviceStream.writable; this._fromDevice = connection.readable.pipeThrough( Utils.fromDeviceStream(), ); } get toDevice(): WritableStream { return this._toDevice; } get fromDevice(): ReadableStream { return this._fromDevice; } }