const { app, BrowserWindow } = require('electron/main') function createWindow () { const mainWindow = new BrowserWindow({ width: 800, height: 600 }) let grantedDeviceThroughPermHandler mainWindow.webContents.session.on('select-usb-device', (event, details, callback) => { // Add events to handle devices being added or removed before the callback on // `select-usb-device` is called. mainWindow.webContents.session.on('usb-device-added', (event, device) => { console.log('usb-device-added FIRED WITH', device) // Optionally update details.deviceList }) mainWindow.webContents.session.on('usb-device-removed', (event, device) => { console.log('usb-device-removed FIRED WITH', device) // Optionally update details.deviceList }) event.preventDefault() if (details.deviceList && details.deviceList.length > 0) { const deviceToReturn = details.deviceList.find((device) => { return !grantedDeviceThroughPermHandler || (device.deviceId !== grantedDeviceThroughPermHandler.deviceId) }) if (deviceToReturn) { callback(deviceToReturn.deviceId) } else { callback() } } }) mainWindow.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => { if (permission === 'usb' && details.securityOrigin === 'file:///') { return true } }) mainWindow.webContents.session.setDevicePermissionHandler((details) => { if (details.deviceType === 'usb' && details.origin === 'file://') { if (!grantedDeviceThroughPermHandler) { grantedDeviceThroughPermHandler = details.device return true } else { return false } } }) mainWindow.webContents.session.setUSBProtectedClassesHandler((details) => { return details.protectedClasses.filter((usbClass) => { // Exclude classes except for audio classes return usbClass.indexOf('audio') === -1 }) }) mainWindow.loadFile('index.html') } app.whenReady().then(() => { createWindow() app.on('activate', function () { if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit() })