diff --git a/package.json b/package.json index 8770a7afca..686439473c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "compile-electron": "tsc --project tsconfig.electron.json", "eject": "rescripts eject", "electron-build": "yarn compile-electron && electron-builder --mac", - "electron-dev": "yarn compile-electron && concurrently \"cross-env BROWSER=none REACT_APP_BUILD_FOR_DESKTOP=true yarn start\" \"wait-on http://localhost:3000 && electron .\"", + "electron-dev": "yarn compile-electron && concurrently \"cross-env BROWSER=none REACT_APP_BUILD_FOR_DESKTOP=true yarn start\" \"wait-on http://localhost:3000 && ELECTRON_ENV=development electron .\"", "format:staged": "lint-staged", "generate-types": "yarn generate-types:spendingLimit && yarn generate-types:safeDeployments && yarn generate-types:erc20 && yarn generate-types:erc721", "generate-types:erc20": "cross-env typechain --target=web3-v1 --out-dir './src/types/contracts' './node_modules/@openzeppelin/contracts/build/contracts/ERC20.json'", @@ -194,7 +194,7 @@ "ethereumjs-abi": "0.6.8", "ethereumjs-util": "^7.0.10", "exponential-backoff": "^3.1.0", - "express": "^4.17.2", + "express": "^4.17.3", "final-form": "^4.20.2", "final-form-calculate": "^1.3.2", "framer-motion": "^4.1.17", @@ -244,7 +244,7 @@ "@testing-library/react": "^12.1.2", "@testing-library/react-hooks": "^7.0.2", "@typechain/web3-v1": "^3.0.0", - "@types/detect-port": "^1.3.1", + "@types/detect-port": "^1.3.2", "@types/express": "^4.17.13", "@types/history": "4.6.2", "@types/jest": "^27.0.1", @@ -263,8 +263,8 @@ "cross-env": "^7.0.3", "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", - "electron": "13.5.2", - "electron-builder": "22.14.5", + "electron": "13.6.9", + "electron-builder": "22.14.13", "electron-notarize": "1.1.1", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", diff --git a/public/electron.ts b/public/electron.ts index 6c943224bd..9711f07fd1 100644 --- a/public/electron.ts +++ b/public/electron.ts @@ -1,30 +1,34 @@ -import express from 'express' +import detect from 'detect-port' +import { app, BrowserWindow, Menu, nativeImage, session, shell, screen } from 'electron' import log from 'electron-log' +import { autoUpdater } from 'electron-updater' +import express from 'express' import fs from 'fs' -import electron from 'electron' import https from 'https' -import { autoUpdater } from 'electron-updater' -import detect from 'detect-port' import path from 'path' -const { app, session, BrowserWindow, shell, Menu } = electron -const isDev = !app.isPackaged const DEFAULT_PORT = 5000 -app.allowRendererProcessReuse = false +const trezorRegExp = new RegExp(`/https:\/\/((.+\.)*trezor\.io)/gi`) +const portisRegExp = new RegExp(`/https:\/\/((.+\.)*portis\.io)/gi`) + +const isDev = process.env.ELECTRON_ENV === 'development' const options = { key: fs.readFileSync(path.join(__dirname, './ssl/server.key')), cert: fs.readFileSync(path.join(__dirname, './ssl/server.crt')), ca: fs.readFileSync(path.join(__dirname, './ssl/rootCA.crt')), } -async function getFreePort(): Promise { +let mainWindow + +const getFreePort = async (): Promise => { const port = await detect(DEFAULT_PORT) return port } -function createServer(port: number): void { +const createServer = (port: number): void => { const app = express() + app.disable('x-powered-by') const staticRoute = path.join(__dirname, '../build') // We define same route as in package.json -> homepage @@ -33,12 +37,8 @@ function createServer(port: number): void { https.createServer(options, app).listen(port, '127.0.0.1') } -let mainWindow - -function getOpenedWindow(url: string, options) { - const display = electron.screen.getPrimaryDisplay() - const width = display.bounds.width - const height = display.bounds.height +const getOpenedWindow = (url: string, options) => { + const { width, height } = screen.getPrimaryDisplay().bounds // filter all requests to trezor-bridge and change origin to make it work const filter = { @@ -47,14 +47,14 @@ function getOpenedWindow(url: string, options) { options.webPreferences.affinity = 'main-window' - if (url.includes('trezor')) { + if (trezorRegExp.test(url)) { session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => { details.requestHeaders['Origin'] = 'https://connect.trezor.io' callback({ cancel: false, requestHeaders: details.requestHeaders }) }) } - if (url.includes('wallet.portis') || url.includes('trezor') || url.includes('app.tor.us')) { + if (portisRegExp.test(url) || trezorRegExp.test(url) || url.includes('app.tor.us')) { const win = new BrowserWindow({ width: 350, height: 700, @@ -64,33 +64,39 @@ function getOpenedWindow(url: string, options) { fullscreen: false, show: false, }) - win.webContents.on('new-window', function (event, url) { - if (url.includes('trezor') && url.includes('bridge')) shell.openExternal(url) + + win.webContents.on('new-window', (event, url) => { + if (trezorRegExp.test(url) && url.includes('bridge')) { + shell.openExternal(url) + } }) + win.once('ready-to-show', () => win.show()) if (!options.webPreferences) { win.loadURL(url) } + return win } return null } -function createWindow(port = DEFAULT_PORT) { +const createWindow = (port = DEFAULT_PORT) => { mainWindow = new BrowserWindow({ show: false, width: 1366, height: 768, webPreferences: { preload: path.join(__dirname, '../scripts/preload.js'), - experimentalFeatures: true, - enableRemoteModule: true, + // experimentalFeatures not needed now unless migrating to WebHID Electron >= 16 + // experimentalFeatures: true, + // Needed to load Ledger from preload scripts, sharing context with main window contextIsolation: false, - nativeWindowOpen: true, // need to be set in order to display modal + nativeWindowOpen: true, // need to be set in order to display modal. Not needed for Electron >= 15 }, - icon: electron.nativeImage.createFromPath(path.join(__dirname, '../build/resources/safe.png')), + icon: nativeImage.createFromPath(path.join(__dirname, '../build/resources/safe.png')), }) mainWindow.once('ready-to-show', () => { @@ -110,7 +116,7 @@ function createWindow(port = DEFAULT_PORT) { mainWindow.setMenu(null) mainWindow.setMenuBarVisibility(false) - mainWindow.webContents.on('new-window', function (event, url, frameName, disposition, options) { + mainWindow.webContents.on('new-window', (event, url, frameName, disposition, options) => { const win = getOpenedWindow(url, options) if (win) { win.once('ready-to-show', () => win.show()) @@ -120,7 +126,8 @@ function createWindow(port = DEFAULT_PORT) { } event.newGuest = win - } else shell.openExternal(url) + } + // else shell.openExternal(url) }) mainWindow.webContents.on('did-finish-load', () => { @@ -135,12 +142,14 @@ function createWindow(port = DEFAULT_PORT) { mainWindow.on('closed', () => (mainWindow = null)) } -process.on('uncaughtException', function (error) { +process.on('uncaughtException', (error) => { log.error(error) }) +app.allowRendererProcessReuse = false + app.userAgentFallback = - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) old-airport-include/1.0.0 Chrome Electron/13.5.2 Safari/537.36' + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) old-airport-include/1.0.0 Chrome Electron/13.6.9 Safari/537.36' app.whenReady().then(async () => { // Hide the menu diff --git a/scripts/preload.js b/scripts/preload.js index 0f2a3683c0..4c0694550a 100644 --- a/scripts/preload.js +++ b/scripts/preload.js @@ -1,14 +1,7 @@ -// All of the Node.js APIs are available in the preload process. -// It has the same sandbox as a Chrome extension. -// https://stackoverflow.com/a/58164407/7820085 -const { - remote: { app }, -} = require('electron') const log = require('electron-log') const TransportNodeHid = require('@ledgerhq/hw-transport-node-hid-singleton').default -const isDev = !app.isPackaged -global.isDesktop = true +const isDev = process.env.ELECTRON_ENV === 'development' global.TransportNodeHid = TransportNodeHid window.addEventListener('DOMContentLoaded', () => { diff --git a/src/components/CookiesBanner/index.tsx b/src/components/CookiesBanner/index.tsx index a0b1f1868a..c6a796091a 100644 --- a/src/components/CookiesBanner/index.tsx +++ b/src/components/CookiesBanner/index.tsx @@ -16,8 +16,7 @@ import AlertRedIcon from './assets/alert-red.svg' import IntercomIcon from './assets/intercom.png' import { useSafeAppUrl } from 'src/logic/hooks/useSafeAppUrl' import { CookieAttributes } from 'js-cookie' - -const isDesktop = process.env.REACT_APP_BUILD_FOR_DESKTOP +import { IS_DESKTOP } from 'src/utils/constants' const useStyles = makeStyles({ container: { @@ -150,7 +149,7 @@ const CookiesBanner = (): ReactElement => { setLocalAnalytics(acceptedAnalytics) setLocalNecessary(acceptedNecessary) - if (acceptedAnalytics && !isDesktop) { + if (acceptedAnalytics && !IS_DESKTOP) { loadGoogleAnalytics() } } @@ -161,14 +160,14 @@ const CookiesBanner = (): ReactElement => { const acceptCookiesHandler = async () => { const newState = { acceptedNecessary: true, - acceptedAnalytics: !isDesktop, + acceptedAnalytics: !IS_DESKTOP, acceptedIntercom: true, } const cookieConfig: CookieAttributes = { expires: 365, } await saveCookie(COOKIES_KEY, newState, cookieConfig) - setShowAnalytics(!isDesktop) + setShowAnalytics(!IS_DESKTOP) setShowIntercom(true) dispatch.current(openCookieBanner({ cookieBannerOpen: false })) } @@ -276,14 +275,14 @@ const CookiesBanner = (): ReactElement => { return ( <> - {!isDesktop && !showIntercom && !isSafeAppView && ( + {!IS_DESKTOP && !showIntercom && !isSafeAppView && ( dispatch.current(openCookieBanner({ cookieBannerOpen: true, intercomAlertDisplayed: true }))} /> )} - {!isDesktop && showBanner?.cookieBannerOpen && ( + {!IS_DESKTOP && showBanner?.cookieBannerOpen && ( )} diff --git a/src/logic/wallets/utils/walletList.ts b/src/logic/wallets/utils/walletList.ts index e2dbf1dc11..c0ea098b49 100644 --- a/src/logic/wallets/utils/walletList.ts +++ b/src/logic/wallets/utils/walletList.ts @@ -2,7 +2,7 @@ import { WalletInitOptions } from 'bnc-onboard/dist/src/interfaces' import { getRpcServiceUrl, getDisabledWallets, _getChainId } from 'src/config' import { WALLETS } from 'src/config/chain.d' -import { FORTMATIC_KEY, PORTIS_ID } from 'src/utils/constants' +import { IS_DESKTOP, FORTMATIC_KEY, PORTIS_ID } from 'src/utils/constants' type Wallet = WalletInitOptions & { desktop: boolean @@ -72,7 +72,7 @@ const wallets = (): Wallet[] => { } export const getSupportedWallets = (): WalletInitOptions[] => { - if (window.isDesktop) { + if (IS_DESKTOP) { return wallets() .filter(({ desktop }) => desktop) .filter(({ walletName }) => !getDisabledWallets().includes(walletName)) diff --git a/src/types/definitions.d.ts b/src/types/definitions.d.ts index 69e1e613d8..a49827da15 100644 --- a/src/types/definitions.d.ts +++ b/src/types/definitions.d.ts @@ -6,7 +6,6 @@ type Theme = typeof theme export {} declare global { interface Window { - isDesktop?: boolean ethereum?: { autoRefreshOnNetworkChange: boolean isMetaMask: boolean diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 937376424b..b0611417d6 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -3,6 +3,7 @@ import { CHAIN_ID } from 'src/config/chain.d' export const APP_ENV = process.env.REACT_APP_ENV export const NODE_ENV = process.env.NODE_ENV export const IS_PRODUCTION = APP_ENV === 'production' +export const IS_DESKTOP = process.env.REACT_APP_BUILD_FOR_DESKTOP === 'true' export const DEFAULT_CHAIN_ID = IS_PRODUCTION ? CHAIN_ID.ETHEREUM : CHAIN_ID.RINKEBY export const PUBLIC_URL = process.env.PUBLIC_URL export const TX_SERVICE_VERSION = '1' diff --git a/yarn.lock b/yarn.lock index 855d2e5d04..a56c2b4acb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3822,6 +3822,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@toruslabs/eccrypto@^1.1.7": version "1.1.7" resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.7.tgz#962954d6416f56ca2ba9bb9948cd08bd3b8cd0c4" @@ -4005,10 +4010,10 @@ dependencies: "@types/ms" "*" -"@types/detect-port@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.1.tgz#a1af9bb9e8e43f5a2190f876cfd4120a5fae41ab" - integrity sha512-evutJ8HynqPgm07LaG7nj7VqFqfAYpAjpKYYjhj5rlD5ukdF0hFiqHQo94Tu1FBJQkWDQPt3f1DaXLOGEL1nAw== +"@types/detect-port@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae" + integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g== "@types/eslint@^7.2.6": version "7.28.2" @@ -5055,6 +5060,14 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-dynamic-import@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" @@ -5333,10 +5346,10 @@ app-builder-bin@3.7.1: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.7.1.tgz#cb0825c5e12efc85b196ac3ed9c89f076c61040e" integrity sha512-ql93vEUq6WsstGXD+SBLSIQw6SNnhbDEM0swzgugytMxLp3rT24Ag/jcC80ZHxiPRTdew1niuR7P3/FCrDqIjw== -app-builder-lib@22.14.5: - version "22.14.5" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.14.5.tgz#a61a50b132b858e98fdc70b6b88994ae99b4f96d" - integrity sha512-k3VwKP4kpsnUaXoUkm1s4zaSHPHIMFnN4kPMU9yXaKmE1LfHHqBaEah5bXeTAX5V/BC41wFdg8CF5vOjvgy8Rg== +app-builder-lib@22.14.13: + version "22.14.13" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.14.13.tgz#c1f5b6afc86596357598bb90b69eef06c7c2eeb3" + integrity sha512-SufmrtxU+D0Tn948fjEwAOlCN9757UXLkzzTWXMwZKR/5hisvgqeeBepWfphMIE6OkDGz0fbzEhL1P2Pty4XMg== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" @@ -5344,13 +5357,13 @@ app-builder-lib@22.14.5: "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.14.5" - builder-util-runtime "8.9.1" + builder-util "22.14.13" + builder-util-runtime "8.9.2" chromium-pickle-js "^0.2.0" debug "^4.3.2" ejs "^3.1.6" electron-osx-sign "^0.5.0" - electron-publish "22.14.5" + electron-publish "22.14.13" form-data "^4.0.0" fs-extra "^10.0.0" hosted-git-info "^4.0.2" @@ -6543,6 +6556,22 @@ body-parser@1.19.1, body-parser@^1.16.0: raw-body "2.4.2" type-is "~1.6.18" +body-parser@1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" + integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.9.7" + raw-body "2.4.3" + type-is "~1.6.18" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -6896,21 +6925,31 @@ builder-util-runtime@8.9.1: debug "^4.3.2" sax "^1.2.4" -builder-util@22.14.5: - version "22.14.5" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.14.5.tgz#42a18608d2a566c0846e91266464776c8bfb0cc9" - integrity sha512-zqIHDFJwmA7jV7SC9aI+33MWwT2mWoijH+Ol9IntNAwuuRXoS+7XeJwnhLBXOhcDBzXT4kDzHnRk4JKeaygEYA== +builder-util-runtime@8.9.2: + version "8.9.2" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz#a9669ae5b5dcabfe411ded26678e7ae997246c28" + integrity sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A== + dependencies: + debug "^4.3.2" + sax "^1.2.4" + +builder-util@22.14.13: + version "22.14.13" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.14.13.tgz#41b5b7b4ee53aff4e09cc007fb144522598f3ce6" + integrity sha512-oePC/qrrUuerhmH5iaCJzPRAKlSBylrhzuAJmRQClTyWnZUv6jbaHh+VoHMbEiE661wrj2S2aV7/bQh12cj1OA== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.6" "@types/fs-extra" "^9.0.11" app-builder-bin "3.7.1" bluebird-lst "^1.0.9" - builder-util-runtime "8.9.1" + builder-util-runtime "8.9.2" chalk "^4.1.1" cross-spawn "^7.0.3" debug "^4.3.2" fs-extra "^10.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" is-ci "^3.0.0" js-yaml "^4.1.0" source-map-support "^0.5.19" @@ -6944,6 +6983,11 @@ bytes@3.1.1: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + c8@^7.6.0: version "7.10.0" resolved "https://registry.yarnpkg.com/c8/-/c8-7.10.0.tgz#c539ebb15d246b03b0c887165982c49293958a73" @@ -7818,6 +7862,11 @@ cookie@0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +cookie@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + cookiejar@^2.1.0, cookiejar@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" @@ -8744,14 +8793,14 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dmg-builder@22.14.5: - version "22.14.5" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.14.5.tgz#137c0b55e639badcc0b119eb060e6fa4ed61d948" - integrity sha512-1GvFGQE332bvPamcMwZDqWqfWfJTyyDLOsHMcGi0zs+Jh7JOn6/zuBkHJIWHdsj2QJbhzLVyd2/ZqttOKv7I8w== +dmg-builder@22.14.13: + version "22.14.13" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.14.13.tgz#cc613f3c18e889b8777d525991fd52f50a564f8c" + integrity sha512-xNOugB6AbIRETeU2uID15sUfjdZZcKdxK8xkFnwIggsM00PJ12JxpLNPTjcRoUnfwj3WrPjilrO64vRMwNItQg== dependencies: - app-builder-lib "22.14.5" - builder-util "22.14.5" - builder-util-runtime "8.9.1" + app-builder-lib "22.14.13" + builder-util "22.14.13" + builder-util-runtime "8.9.2" fs-extra "^10.0.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -9025,17 +9074,17 @@ ejs@^3.1.2, ejs@^3.1.6: dependencies: jake "^10.6.1" -electron-builder@22.14.5: - version "22.14.5" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.14.5.tgz#3a25547bd4fe3728d4704da80956a794c5c31496" - integrity sha512-N73hSbXFz6Mz5Z6h6C5ly6CB+dUN6k1LuCDJjI8VF47bMXv/QE0HE+Kkb0GPKqTqM7Hsk/yIYX+kHCfSkR5FGg== +electron-builder@22.14.13: + version "22.14.13" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.14.13.tgz#fd40564685cf5422a8f8d667940af3d3776f4fb8" + integrity sha512-3fgLxqF2TXVKiUPeg74O4V3l0l3j7ERLazo8sUbRkApw0+4iVAf2BJkHsHMaXiigsgCoEzK/F4/rB5rne/VAnw== dependencies: "@types/yargs" "^17.0.1" - app-builder-lib "22.14.5" - builder-util "22.14.5" - builder-util-runtime "8.9.1" + app-builder-lib "22.14.13" + builder-util "22.14.13" + builder-util-runtime "8.9.2" chalk "^4.1.1" - dmg-builder "22.14.5" + dmg-builder "22.14.13" fs-extra "^10.0.0" is-ci "^3.0.0" lazy-val "^1.0.5" @@ -9068,14 +9117,14 @@ electron-osx-sign@^0.5.0: minimist "^1.2.0" plist "^3.0.1" -electron-publish@22.14.5: - version "22.14.5" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.14.5.tgz#34bcdce671f0e651330db20040d6919c77c94bd6" - integrity sha512-h+NANRdaA0PqGF15GKvorseWPzh1PXa/zx4I37//PIokW8eKIov8ky23foUSb55ZFWUHGpxQJux7y2NCfBtQeg== +electron-publish@22.14.13: + version "22.14.13" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.14.13.tgz#8b71e6975af8cc6ac5b21f293ade23f8704047c7" + integrity sha512-0oP3QiNj3e8ewOaEpEJV/o6Zrmy2VarVvZ/bH7kyO/S/aJf9x8vQsKVWpsdmSiZ5DJEHgarFIXrnO0ZQf0P9iQ== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "22.14.5" - builder-util-runtime "8.9.1" + builder-util "22.14.13" + builder-util-runtime "8.9.2" chalk "^4.1.1" fs-extra "^10.0.0" lazy-val "^1.0.5" @@ -9112,10 +9161,10 @@ electron-updater@4.6.1: lodash.isequal "^4.5.0" semver "^7.3.5" -electron@13.5.2: - version "13.5.2" - resolved "https://registry.yarnpkg.com/electron/-/electron-13.5.2.tgz#5c5826e58a5e12bb5ca8047b789d07b45260ecbc" - integrity sha512-CPakwDpy5m8dL0383F5uJboQcVtn9bT/+6/wdDKo8LuTUO9aER1TF41v7feZgZW2c+UwoGPWa814ElSQ3qta2A== +electron@13.6.9: + version "13.6.9" + resolved "https://registry.yarnpkg.com/electron/-/electron-13.6.9.tgz#7bd83cc1662ceaaa09dcd132a7b507cec888b028" + integrity sha512-Es/sBy85NIuqsO9MW41PUCpwIkeinlTQ7g0ainfnmRAM2rmog3GBxVCaoV5dzEjwTF7TKG1Yr/E7Z3qHmlfWAg== dependencies: "@electron/get" "^1.0.1" "@types/node" "^14.6.2" @@ -10433,7 +10482,7 @@ exponential-backoff@^3.1.0: resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.0.tgz#9409c7e579131f8bd4b32d7d8094a911040f2e68" integrity sha512-oBuz5SYz5zzyuHINoe9ooePwSu0xApKWgeNzok4hZ5YKXFh9zrQBEM15CXqoZkJJPuI2ArvqjPQd8UKJA753XA== -express@^4.14.0, express@^4.17.0, express@^4.17.1, express@^4.17.2: +express@^4.14.0, express@^4.17.0, express@^4.17.1: version "4.17.2" resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== @@ -10469,6 +10518,42 @@ express@^4.14.0, express@^4.17.0, express@^4.17.1, express@^4.17.2: utils-merge "1.0.1" vary "~1.1.2" +express@^4.17.3: + version "4.17.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" + integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.19.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.4.2" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.9.7" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext@^1.1.2: version "1.6.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" @@ -11972,6 +12057,15 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -14749,6 +14843,11 @@ mime-db@1.50.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.33" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" @@ -14756,6 +14855,13 @@ mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@~2.1.17, dependencies: mime-db "1.50.0" +mime-types@~2.1.34: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + mime@1.6.0, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -15128,6 +15234,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -17317,6 +17428,11 @@ qs@6.9.6: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== +qs@6.9.7: + version "6.9.7" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" + integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== + qs@^6.10.0, qs@^6.5.1, qs@^6.6.0: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" @@ -17452,6 +17568,16 @@ raw-body@2.4.2: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" + integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== + dependencies: + bytes "3.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + unpipe "1.0.0" + raw-loader@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"