docs: async function requestDevice({ // eslint-disable-line
  	filters = [],
  	optionalServices,
  	acceptAllDevices,
  	delegate
  } = {}) {
  	if (optionalServices) throw new Error('optionalServices is not yet supported');
  	if (acceptAllDevices) throw new Error('acceptAllDevices is not yet supported');
  
  	delegate = delegate || new InteractiveRequestDeviceDelegate();
  
  	const serviceUUIDs = [];
  	filters.forEach((filter) => {
  		if (filter.services) {
  			filter.services.forEach((service) => {
  				serviceUUIDs.push(toNobleUuid(serviceToUuid(service)));
  			});
  		}
  	});
  
  	const isAvailable = await getAvailability();
  	if (!isAvailable) throw new Error('Bluetooth is not enabled/available');
  
  	const devices = [];
  	const onDiscover = (peripheral) => {
  		const device = new BluetoothDevice(peripheral);
  		const filter = filters.find((filter) => isFilteredDevice(device, filter));
  		if (!filters.length || filter) {
  			const existingDevice = devices.find((d) => device.id === d.id);
  			if (existingDevice) {
  				existingDevice._updateFromDuplicate(device);
  				delegate.onUpdateDevice(existingDevice);
  			}
  			else {
  				devices.push(device);
  				delegate.onAddDevice(device);
  			}
  		}
  	};
  	noble.on('discover', onDiscover);
  
  	let resultDevice;
  	try {
  		delegate.onStartScan();
  		noble.startScanning(serviceUUIDs, true);
  		resultDevice = await delegate.getDevice();
  	}
  	catch (err) {
  		throw err;
  	}
  	noble.removeListener('discover', onDiscover);
  	noble.stopScanning();
  
  	return resultDevice;
  }