Skip to content

Class: WebUsbTransport

WebUSB transport for browser environments.

Defaults to interface 0 — the same default as Node's UsbTransport. Pass { interfaceNumber } to claim a different interface; this is needed for composite devices like the LabelWriter 450 Duo, which exposes one interface per engine. Callers obtain a USBDevice via navigator.usb.requestDevice() (prompts the user) or navigator.usb.getDevices() (previously paired).

Implements

Accessors

connected

Get Signature

ts
get connected(): boolean;

Whether the transport is currently connected.

Returns

boolean

Implementation of

ts
Transport.connected

Methods

close()

ts
close(): Promise<void>;

Close the connection.

Always safe to call multiple times. Always await the result.

Returns

Promise<void>

Implementation of

ts
Transport.close

read()

ts
read(length: number, timeout?: number): Promise<Uint8Array>;

Read bytes from the printer.

Buffers until length bytes are available or the timeout fires.

BLE implementations: there is no "read N bytes" primitive in BLE. Implementations must buffer incoming GATT notifications internally and satisfy read() calls from that buffer. Document this in your transport class — every BLE implementation must handle buffering consistently so drivers get the same pull-based API on every transport.

Parameters

ParameterType
lengthnumber
timeout?number

Returns

Promise<Uint8Array>

Throws

TransportTimeoutError on timeout.

Throws

TransportClosedError if the transport is closed mid-read.

Implementation of

ts
Transport.read

write()

ts
write(data: Uint8Array): Promise<void>;

Send bytes to the printer.

Parameters

ParameterType
dataUint8Array

Returns

Promise<void>

Implementation of

ts
Transport.write

fromDevice()

ts
static fromDevice(device: USBDevice, options?: WebUsbOpenOptions): Promise<WebUsbTransport>;

Wrap an already-selected USBDevice.

Opens the device, selects the requested configuration if it is not already active, claims the requested interface, and resolves the bulk IN / OUT endpoint numbers from that interface descriptor. Use this when the USBDevice came from navigator.usb.getDevices() (previously paired devices) or from external code.

Parameters

ParameterType
deviceUSBDevice
options?WebUsbOpenOptions

Returns

Promise<WebUsbTransport>


request()

ts
static request(filters: USBDeviceFilter[], options?: WebUsbOpenOptions): Promise<WebUsbTransport>;

Show the browser's USB picker and wrap the selected device.

Parameters

ParameterTypeDescription
filtersUSBDeviceFilter[]USB device filters (typically { vendorId, productId } pairs built by buildUsbFilters).
options?WebUsbOpenOptionsOptional interface/configuration selection.

Returns

Promise<WebUsbTransport>