type USBTransferStatus = 'ok' | 'stall' | 'babble'; interface USBInTransferResult { data?: DataView; status: USBTransferStatus; } interface USBOutTransferResult { bytesWritten: number; status: USBTransferStatus; } interface USBDevice { vendorId: number; productId: number; productName?: string; manufacturerName?: string; serialNumber?: string; opened: boolean; configuration: { configurationValue: number } | null; configurations: Array<{ configurationValue: number; interfaces: Array<{ interfaceNumber: number; alternates: Array<{ alternateSetting: number; interfaceClass: number; interfaceSubclass: number; interfaceProtocol: number; endpoints: Array<{ endpointNumber: number; direction: 'in' | 'out'; type: string; packetSize: number; }>; }>; }>; }>; open(): Promise; close(): Promise; selectConfiguration(configurationValue: number): Promise; claimInterface(interfaceNumber: number): Promise; releaseInterface(interfaceNumber: number): Promise; selectAlternateInterface(interfaceNumber: number, alternateSetting: number): Promise; transferIn(endpointNumber: number, length: number): Promise; transferOut(endpointNumber: number, data: Uint8Array): Promise; } interface Navigator { usb?: { requestDevice(options: { filters: Array<{ vendorId: number }> }): Promise; getDevices(): Promise; }; }