import { ipcRenderer } from 'electron'; export type RendererMenuItem = {label?: string, type?: ('normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'), click?: () => any}; export function invokeMenu(menu: RendererMenuItem[]) { const menuWithoutClick = menu.map(m => { return { label: m.label, type: m.type }; }); ipcRenderer.invoke('openContextMenu', { menu: menuWithoutClick }).then((i: number) => { if (i !== -1) { menu[i].click(); } }); } export function isDev() { // ref: https://github.com/sindresorhus/electron-is-dev if ('ELECTRON_IS_DEV' in process.env) { return parseInt(process.env.ELECTRON_IS_DEV, 10) === 1; } return (process.defaultApp || /node_modules[\\/]electron[\\/]/.test(process.execPath)); } export function isAppImage() { return process.platform === 'linux' && 'APPIMAGE' in process.env; } export function isMac() { return process.platform === 'darwin'; } export function isMacAppStore() { return isMac() && process.mas && process.mas === true; } export function isWindowsStore() { const isWindows = process.platform === 'win32'; let windowsStore = process.windowsStore; if (isWindows && !windowsStore && process.resourcesPath.indexOf('8bitSolutionsLLC.bitwardendesktop_') > -1) { windowsStore = true; } return isWindows && windowsStore === true; } export function isSnapStore() { return process.platform === 'linux' && process.env.SNAP_USER_DATA != null; } export function isWindowsPortable() { return process.platform === 'win32' && process.env.PORTABLE_EXECUTABLE_DIR != null; } /** * Sanitize user agent so external resources used by the app can't built data on our users. */ export function cleanUserAgent(userAgent: string): string { const userAgentItem = (startString: string, endString: string) => { const startIndex = userAgent.indexOf(startString); return userAgent.substring(startIndex, userAgent.indexOf(endString, startIndex) + 1); }; const systemInformation = '(Windows NT 10.0; Win64; x64)'; // Set system information, remove bitwarden, and electron information return userAgent.replace(userAgentItem('(', ')'), systemInformation) .replace(userAgentItem('Bitwarden', ' '), '') .replace(userAgentItem('Electron', ' '), ''); }