summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2021-07-12 10:09:43 +0200
committerOskar Nyberg <oskar@mullvad.net>2021-07-12 10:09:43 +0200
commit51c3233e7f2f7dbf11f11345b378ff58190b72fc (patch)
treed98f0670439d2e208028e532041635c0d862196a
parent2f303f7158be3256f94ad437b72ab8628cfceaee (diff)
parentffe0c6e418001f532469ce307edea7b82a663cdd (diff)
downloadmullvadvpn-51c3233e7f2f7dbf11f11345b378ff58190b72fc.tar.xz
mullvadvpn-51c3233e7f2f7dbf11f11345b378ff58190b72fc.zip
Merge branch 'update-to-electron-11.4.9'
-rw-r--r--CHANGELOG.md1
-rw-r--r--gui/package-lock.json465
-rw-r--r--gui/package.json5
-rw-r--r--gui/src/main/index.ts21
-rw-r--r--gui/src/renderer/app.tsx7
-rw-r--r--gui/src/renderer/components/AdvancedSettings.tsx4
-rw-r--r--gui/src/renderer/components/CustomScrollbars.tsx2
-rw-r--r--gui/src/renderer/components/HeaderBar.tsx2
-rw-r--r--gui/src/renderer/components/NavigationBarStyles.tsx2
-rw-r--r--gui/src/renderer/components/PlatformWindow.tsx2
-rw-r--r--gui/src/renderer/components/Preferences.tsx4
-rw-r--r--gui/src/renderer/components/SplitTunnelingSettings.tsx4
-rw-r--r--gui/src/renderer/context.tsx4
-rw-r--r--gui/src/renderer/preload.ts5
-rw-r--r--gui/src/renderer/redux/settings/reducers.ts2
-rw-r--r--gui/src/renderer/redux/store.ts43
-rw-r--r--gui/src/shared/ipc-schema.ts2
-rw-r--r--gui/src/shared/notifications/error.ts4
-rw-r--r--gui/src/shared/notifications/no-valid-key.ts3
-rw-r--r--gui/tasks/dev-server.js40
-rw-r--r--gui/tasks/scripts.js1
-rw-r--r--gui/tasks/watch.js2
-rw-r--r--gui/types/global/index.d.ts3
23 files changed, 92 insertions, 536 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ebcf980a84..93bcfc5c67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@ Line wrap the file at 100 chars. Th
- Change the app update notification when the suggested version is a beta, to include that it's a
beta.
- Upgrade OpenVPN from 2.5.1 to 2.5.3.
+- Update Electron from 11.2.3 to 11.4.9.
### Fixed
- Fix link to download page not always using the beta URL when it should.
diff --git a/gui/package-lock.json b/gui/package-lock.json
index 52b5717894..b6e09dc79b 100644
--- a/gui/package-lock.json
+++ b/gui/package-lock.json
@@ -56,9 +56,9 @@
"chai-as-promised": "^7.1.1",
"chai-spies": "^1.0.0",
"cross-env": "^5.1.3",
- "electron": "^11.2.3",
- "electron-builder": "^22.10.4",
- "electron-devtools-installer": "^3.1.1",
+ "electron": "^11.4.10",
+ "electron-builder": "^22.11.7",
+ "electron-devtools-installer": "^3.2.0",
"electron-mocha": "^9.3.3",
"electron-notarize": "^0.1.1",
"eslint": "^7.27.0",
@@ -73,7 +73,6 @@
"prettier": "^2.2.1",
"semver": "^7.3.2",
"sinon": "^7.1.1",
- "spa-server": "^1.0.0",
"ts-node": "^10.0.0",
"tsc-watch": "^4.2.9",
"typescript": "^4.3.2",
@@ -3451,21 +3450,6 @@
"node": ">=8"
}
},
- "node_modules/connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
"node_modules/console-browserify": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
@@ -4028,15 +4012,6 @@
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"optional": true
},
- "node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/deps-sort": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
@@ -4062,12 +4037,6 @@
"minimalistic-assert": "^1.0.0"
}
},
- "node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
"node_modules/detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -4398,12 +4367,6 @@
"object.defaults": "^1.1.0"
}
},
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
"node_modules/ejs": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
@@ -4420,9 +4383,9 @@
}
},
"node_modules/electron": {
- "version": "11.2.3",
- "resolved": "https://registry.npmjs.org/electron/-/electron-11.2.3.tgz",
- "integrity": "sha512-6yxOc42nDAptHKNlUG/vcOh2GI9x2fqp2nQbZO0/3sz2CrwsJkwR3i3oMN9XhVJaqI7GK1vSCJz0verOkWlXcQ==",
+ "version": "11.4.10",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-11.4.10.tgz",
+ "integrity": "sha512-aQTRgRdHwCW68gxz9qvGCfOUvR4NBbdecLB/mEWX8fMncDFvPMmm+dq2D6zSWWVEKywmsj3+wMMVn3UV2Cl2CQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
@@ -4553,13 +4516,14 @@
}
},
"node_modules/electron-devtools-installer": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.1.1.tgz",
- "integrity": "sha512-g2D4J6APbpsiIcnLkFMyKZ6bOpEJ0Ltcc2m66F7oKUymyGAt628OWeU9nRZoh1cNmUs/a6Cls2UfOmsZtE496Q==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz",
+ "integrity": "sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ==",
"dev": true,
"dependencies": {
"rimraf": "^3.0.2",
"semver": "^7.2.1",
+ "tslib": "^2.1.0",
"unzip-crx-3": "^0.2.0"
}
},
@@ -4575,6 +4539,12 @@
"rimraf": "bin.js"
}
},
+ "node_modules/electron-devtools-installer/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "dev": true
+ },
"node_modules/electron-mocha": {
"version": "9.3.3",
"resolved": "https://registry.npmjs.org/electron-mocha/-/electron-mocha-9.3.3.tgz",
@@ -4992,6 +4962,7 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true,
+ "optional": true,
"engines": {
"node": ">= 0.8"
}
@@ -5179,12 +5150,6 @@
"node": ">=8"
}
},
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -5666,15 +5631,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/event-emitter": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
@@ -6153,24 +6109,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
@@ -6316,15 +6254,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/from": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
@@ -8814,15 +8743,6 @@
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
"dev": true
},
- "node_modules/mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- }
- },
"node_modules/mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -9692,9 +9612,9 @@
}
},
"node_modules/normalize-url": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz",
- "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
+ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
"dev": true,
"engines": {
"node": ">=8"
@@ -9993,18 +9913,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -10212,15 +10120,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -10712,15 +10611,6 @@
"safe-buffer": "^5.1.0"
}
},
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/rbush": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz",
@@ -11424,60 +11314,6 @@
"node": ">= 0.10"
}
},
- "node_modules/send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/send/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "node_modules/send/node_modules/statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/serialize-error": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
@@ -11510,21 +11346,6 @@
"randombytes": "^2.1.0"
}
},
- "node_modules/serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "dev": true,
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -11918,18 +11739,6 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
- "node_modules/spa-server": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/spa-server/-/spa-server-1.0.0.tgz",
- "integrity": "sha1-JTL6vI8SJKSLaFuS47HzOoYV2II=",
- "dev": true,
- "dependencies": {
- "connect": "^3.3.5",
- "mime": "^1.3.4",
- "serve-static": "^1.9.2",
- "xtend": "^4.0.0"
- }
- },
"node_modules/sparkles": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
@@ -12043,15 +11852,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/stream-browserify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
@@ -13177,15 +12977,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -13448,15 +13239,6 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -16885,18 +16667,6 @@
"xdg-basedir": "^4.0.0"
}
},
- "connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
- }
- },
"console-browserify": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
@@ -17396,12 +17166,6 @@
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"optional": true
},
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
"deps-sort": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
@@ -17424,12 +17188,6 @@
"minimalistic-assert": "^1.0.0"
}
},
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
"detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -17694,12 +17452,6 @@
"object.defaults": "^1.1.0"
}
},
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
"ejs": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
@@ -17710,9 +17462,9 @@
}
},
"electron": {
- "version": "11.2.3",
- "resolved": "https://registry.npmjs.org/electron/-/electron-11.2.3.tgz",
- "integrity": "sha512-6yxOc42nDAptHKNlUG/vcOh2GI9x2fqp2nQbZO0/3sz2CrwsJkwR3i3oMN9XhVJaqI7GK1vSCJz0verOkWlXcQ==",
+ "version": "11.4.10",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-11.4.10.tgz",
+ "integrity": "sha512-aQTRgRdHwCW68gxz9qvGCfOUvR4NBbdecLB/mEWX8fMncDFvPMmm+dq2D6zSWWVEKywmsj3+wMMVn3UV2Cl2CQ==",
"dev": true,
"requires": {
"@electron/get": "^1.0.1",
@@ -17815,13 +17567,14 @@
}
},
"electron-devtools-installer": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.1.1.tgz",
- "integrity": "sha512-g2D4J6APbpsiIcnLkFMyKZ6bOpEJ0Ltcc2m66F7oKUymyGAt628OWeU9nRZoh1cNmUs/a6Cls2UfOmsZtE496Q==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz",
+ "integrity": "sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ==",
"dev": true,
"requires": {
"rimraf": "^3.0.2",
"semver": "^7.2.1",
+ "tslib": "^2.1.0",
"unzip-crx-3": "^0.2.0"
},
"dependencies": {
@@ -17833,6 +17586,12 @@
"requires": {
"glob": "^7.1.3"
}
+ },
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "dev": true
}
}
},
@@ -18170,7 +17929,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"encoding": {
"version": "0.1.13",
@@ -18329,12 +18089,6 @@
"integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
"dev": true
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -18695,12 +18449,6 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
- },
"event-emitter": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
@@ -19107,21 +18855,6 @@
}
}
},
- "finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- }
- },
"find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
@@ -19236,12 +18969,6 @@
"map-cache": "^0.2.2"
}
},
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
"from": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
@@ -21231,12 +20958,6 @@
}
}
},
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "dev": true
- },
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -21942,9 +21663,9 @@
"dev": true
},
"normalize-url": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz",
- "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
+ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
"dev": true
},
"now-and-later": {
@@ -22174,15 +21895,6 @@
"es-abstract": "^1.18.2"
}
},
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -22353,12 +22065,6 @@
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -22743,12 +22449,6 @@
"safe-buffer": "^5.1.0"
}
},
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
"rbush": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz",
@@ -23328,53 +23028,6 @@
"sver-compat": "^1.5.0"
}
},
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "dependencies": {
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
- "dev": true
- }
- }
- },
"serialize-error": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
@@ -23403,18 +23056,6 @@
"randombytes": "^2.1.0"
}
},
- "serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "dev": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
- }
- },
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -23738,18 +23379,6 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
- "spa-server": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/spa-server/-/spa-server-1.0.0.tgz",
- "integrity": "sha1-JTL6vI8SJKSLaFuS47HzOoYV2II=",
- "dev": true,
- "requires": {
- "connect": "^3.3.5",
- "mime": "^1.3.4",
- "serve-static": "^1.9.2",
- "xtend": "^4.0.0"
- }
- },
"sparkles": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
@@ -23844,12 +23473,6 @@
}
}
},
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "dev": true
- },
"stream-browserify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
@@ -24760,12 +24383,6 @@
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
- },
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -24986,12 +24603,6 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true
- },
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
diff --git a/gui/package.json b/gui/package.json
index d786d7017d..476b460ce8 100644
--- a/gui/package.json
+++ b/gui/package.json
@@ -62,9 +62,9 @@
"chai-as-promised": "^7.1.1",
"chai-spies": "^1.0.0",
"cross-env": "^5.1.3",
- "electron": "^11.2.3",
+ "electron": "^11.4.10",
"electron-builder": "^22.11.7",
- "electron-devtools-installer": "^3.1.1",
+ "electron-devtools-installer": "^3.2.0",
"electron-mocha": "^9.3.3",
"electron-notarize": "^0.1.1",
"eslint": "^7.27.0",
@@ -79,7 +79,6 @@
"prettier": "^2.2.1",
"semver": "^7.3.2",
"sinon": "^7.1.1",
- "spa-server": "^1.0.0",
"ts-node": "^10.0.0",
"tsc-watch": "^4.2.9",
"typescript": "^4.3.2",
diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts
index 8b047cb6c3..8cacf4a7b7 100644
--- a/gui/src/main/index.ts
+++ b/gui/src/main/index.ts
@@ -503,13 +503,7 @@ class ApplicationMain {
const filePath = path.resolve(path.join(__dirname, '../renderer/index.html'));
try {
- if (process.env.NODE_ENV === 'development') {
- await this.windowController.window.loadURL(
- 'http://localhost:8080/src/renderer/index.html',
- );
- } else {
- await this.windowController.window.loadFile(filePath);
- }
+ await this.windowController.window.loadFile(filePath);
} catch (error) {
log.error(`Failed to load index file: ${error.message}`);
}
@@ -1091,8 +1085,6 @@ class ApplicationMain {
guiSettings: this.guiSettings.state,
wireguardPublicKey: this.wireguardPublicKey,
translations: this.translations,
- platform: process.platform,
- runningInDevelopment: process.env.NODE_ENV === 'development',
windowsSplitTunnelingApplications: this.windowsSplitTunnelingApplications,
}));
@@ -1588,10 +1580,8 @@ class ApplicationMain {
private allowDevelopmentRequest(url: string): boolean {
return (
process.env.NODE_ENV === 'development' &&
- // Local web server providing assests (index.html, index.js and css files)
- (url.startsWith('http://localhost:8080/') ||
- // Downloading of React and Redux developer tools.
- url.startsWith('devtools://devtools/') ||
+ // Downloading of React and Redux developer tools.
+ (url.startsWith('devtools://devtools/') ||
url.startsWith('chrome-extension://') ||
url.startsWith('https://clients2.google.com') ||
url.startsWith('https://clients2.googleusercontent.com'))
@@ -1613,7 +1603,10 @@ class ApplicationMain {
const forceDownload = !!process.env.UPGRADE_EXTENSIONS;
for (const name of extensions) {
try {
- await installer.default(installer[name], forceDownload);
+ await installer.default(installer[name], {
+ forceDownload,
+ loadExtensionOptions: { allowFileAccess: true },
+ });
} catch (e) {
log.info(`Error installing ${name} extension: ${e.message}`);
}
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx
index febcaf8bc8..5b4f4be972 100644
--- a/gui/src/renderer/app.tsx
+++ b/gui/src/renderer/app.tsx
@@ -208,9 +208,6 @@ export default class AppRenderer {
// Request the initial state from the main process
const initialState = IpcRendererEventChannel.state.get();
- window.platform = initialState.platform;
- window.runningInDevelopment = initialState.runningInDevelopment;
-
this.setLocale(initialState.locale);
loadTranslations(
messages,
@@ -563,7 +560,7 @@ export default class AppRenderer {
let expectedContentHeight = 568;
// The app content is 12px taller on macOS to fit the top arrow.
- if (window.platform === 'darwin' && !this.guiSettings.unpinnedWindow) {
+ if (window.env.platform === 'darwin' && !this.guiSettings.unpinnedWindow) {
expectedContentHeight += 12;
}
@@ -676,7 +673,7 @@ export default class AppRenderer {
}
private async autoConnect() {
- if (window.runningInDevelopment) {
+ if (window.env.development) {
log.info('Skip autoconnect in development');
} else if (this.autoConnected) {
log.info('Skip autoconnect because it was done before');
diff --git a/gui/src/renderer/components/AdvancedSettings.tsx b/gui/src/renderer/components/AdvancedSettings.tsx
index 77c815fe61..62232b6b8c 100644
--- a/gui/src/renderer/components/AdvancedSettings.tsx
+++ b/gui/src/renderer/components/AdvancedSettings.tsx
@@ -441,11 +441,11 @@ export default class AdvancedSettings extends React.Component<IProps, IState> {
</Cell.CellButton>
</StyledButtonCellGroup>
- {(window.platform === 'linux' || window.platform === 'win32') && (
+ {(window.env.platform === 'linux' || window.env.platform === 'win32') && (
<StyledButtonCellGroup>
<Cell.CellButton onClick={this.props.onViewSplitTunneling}>
<Cell.Label>
- {window.platform === 'win32' && <StyledBetaLabel />}
+ {window.env.platform === 'win32' && <StyledBetaLabel />}
{messages.pgettext('advanced-settings-view', 'Split tunneling')}
</Cell.Label>
<Cell.Icon height={12} width={7} source="icon-chevron" />
diff --git a/gui/src/renderer/components/CustomScrollbars.tsx b/gui/src/renderer/components/CustomScrollbars.tsx
index 2b5119839c..3dacd26626 100644
--- a/gui/src/renderer/components/CustomScrollbars.tsx
+++ b/gui/src/renderer/components/CustomScrollbars.tsx
@@ -47,7 +47,7 @@ interface IScrollbarUpdateContext {
export default class CustomScrollbars extends React.Component<IProps, IState> {
public static defaultProps: IProps = {
// auto-hide on macOS by default
- autoHide: window.platform === 'darwin',
+ autoHide: window.env.platform === 'darwin',
trackPadding: { x: 2, y: 2 },
};
diff --git a/gui/src/renderer/components/HeaderBar.tsx b/gui/src/renderer/components/HeaderBar.tsx
index f3a69f5af2..0dcd2e7ea9 100644
--- a/gui/src/renderer/components/HeaderBar.tsx
+++ b/gui/src/renderer/components/HeaderBar.tsx
@@ -31,7 +31,7 @@ interface IHeaderBarContainerProps {
const HeaderBarContainer = styled.header({}, (props: IHeaderBarContainerProps) => ({
padding: '12px 16px',
- paddingTop: window.platform === 'darwin' && !props.unpinnedWindow ? '24px' : '12px',
+ paddingTop: window.env.platform === 'darwin' && !props.unpinnedWindow ? '24px' : '12px',
backgroundColor: headerBarStyleColorMap[props.barStyle ?? HeaderBarStyle.default],
}));
diff --git a/gui/src/renderer/components/NavigationBarStyles.tsx b/gui/src/renderer/components/NavigationBarStyles.tsx
index f8ac87f3e2..52aefe323d 100644
--- a/gui/src/renderer/components/NavigationBarStyles.tsx
+++ b/gui/src/renderer/components/NavigationBarStyles.tsx
@@ -20,7 +20,7 @@ export const StyledNavigationItems = styled.div({
export const StyledNavigationBar = styled.nav((props: { unpinnedWindow: boolean }) => ({
flex: 0,
padding: '12px',
- paddingTop: window.platform === 'darwin' && !props.unpinnedWindow ? '24px' : '12px',
+ paddingTop: window.env.platform === 'darwin' && !props.unpinnedWindow ? '24px' : '12px',
}));
export const StyledNavigationBarWrapper = styled.div({
diff --git a/gui/src/renderer/components/PlatformWindow.tsx b/gui/src/renderer/components/PlatformWindow.tsx
index 83aa7b3f7f..9b18f5f726 100644
--- a/gui/src/renderer/components/PlatformWindow.tsx
+++ b/gui/src/renderer/components/PlatformWindow.tsx
@@ -10,7 +10,7 @@ interface IPlatformWindowProps {
export default styled.div({}, (props: IPlatformWindowProps) => {
let mask: string | undefined;
- if (window.platform === 'darwin' && !props.unpinnedWindow) {
+ if (window.env.platform === 'darwin' && !props.unpinnedWindow) {
const arrowPositionCss =
props.arrowPosition !== undefined ? `${props.arrowPosition - ARROW_WIDTH * 0.5}px` : '50%';
diff --git a/gui/src/renderer/components/Preferences.tsx b/gui/src/renderer/components/Preferences.tsx
index c91330aee0..ebaa2da359 100644
--- a/gui/src/renderer/components/Preferences.tsx
+++ b/gui/src/renderer/components/Preferences.tsx
@@ -225,8 +225,8 @@ export default class Preferences extends React.Component<IProps> {
</Cell.Footer>
</AriaInputGroup>
- {(window.platform === 'win32' ||
- (window.platform === 'darwin' && window.runningInDevelopment)) && (
+ {(window.env.platform === 'win32' ||
+ (window.env.platform === 'darwin' && window.env.development)) && (
<AriaInputGroup>
<Cell.Container>
<AriaLabel>
diff --git a/gui/src/renderer/components/SplitTunnelingSettings.tsx b/gui/src/renderer/components/SplitTunnelingSettings.tsx
index d6f2bbbdcf..30948dae35 100644
--- a/gui/src/renderer/components/SplitTunnelingSettings.tsx
+++ b/gui/src/renderer/components/SplitTunnelingSettings.tsx
@@ -102,13 +102,13 @@ interface IPlatformSplitTunnelingSettingsProps {
}
function PlatformSpecificSplitTunnelingSettings(props: IPlatformSplitTunnelingSettingsProps) {
- switch (window.platform) {
+ switch (window.env.platform) {
case 'linux':
return <LinuxSplitTunnelingSettings {...props} />;
case 'win32':
return <WindowsSplitTunnelingSettings {...props} />;
default:
- throw new Error(`Split tunneling not implemented on ${window.platform}`);
+ throw new Error(`Split tunneling not implemented on ${window.env.platform}`);
}
}
diff --git a/gui/src/renderer/context.tsx b/gui/src/renderer/context.tsx
index d4b20daeb1..341ddda893 100644
--- a/gui/src/renderer/context.tsx
+++ b/gui/src/renderer/context.tsx
@@ -6,7 +6,7 @@ export interface IAppContext {
}
export const AppContext = React.createContext<IAppContext | undefined>(undefined);
-if (window.runningInDevelopment) {
+if (window.env.development) {
AppContext.displayName = 'AppContext';
}
@@ -34,7 +34,7 @@ export default function withAppContext<Props>(BaseComponent: React.ComponentType
);
};
- if (window.runningInDevelopment) {
+ if (window.env.development) {
wrappedComponent.displayName =
'withAppContext(' + (BaseComponent.displayName || BaseComponent.name) + ')';
}
diff --git a/gui/src/renderer/preload.ts b/gui/src/renderer/preload.ts
index 5c44b71eeb..4df178fcc2 100644
--- a/gui/src/renderer/preload.ts
+++ b/gui/src/renderer/preload.ts
@@ -2,3 +2,8 @@ import { contextBridge } from 'electron';
import { IpcRendererEventChannel } from './lib/ipc-event-channel';
contextBridge.exposeInMainWorld('ipc', IpcRendererEventChannel);
+
+contextBridge.exposeInMainWorld('env', {
+ development: process.env.NODE_ENV === 'development',
+ platform: process.platform,
+});
diff --git a/gui/src/renderer/redux/settings/reducers.ts b/gui/src/renderer/redux/settings/reducers.ts
index 1b07e805fa..8f61721a6e 100644
--- a/gui/src/renderer/redux/settings/reducers.ts
+++ b/gui/src/renderer/redux/settings/reducers.ts
@@ -149,7 +149,7 @@ const initialState: ISettingsReduxState = {
autoConnect: true,
monochromaticIcon: false,
startMinimized: false,
- unpinnedWindow: window.platform !== 'win32' && window.platform !== 'darwin',
+ unpinnedWindow: window.env.platform !== 'win32' && window.env.platform !== 'darwin',
browsedForSplitTunnelingApplications: [],
},
relaySettings: {
diff --git a/gui/src/renderer/redux/store.ts b/gui/src/renderer/redux/store.ts
index 92d85e4dbe..3579978425 100644
--- a/gui/src/renderer/redux/store.ts
+++ b/gui/src/renderer/redux/store.ts
@@ -32,16 +32,7 @@ export type ReduxAction =
export type ReduxStore = ReturnType<typeof configureStore>;
export type ReduxDispatch = Dispatch<ReduxAction>;
-export default function configureStore(initialState?: IReduxState) {
- const actionCreators = {
- ...accountActions,
- ...connectionActions,
- ...settingsActions,
- ...supportActions,
- ...versionActions,
- ...userInterfaceActions,
- };
-
+export default function configureStore() {
const reducers = {
account: accountReducer,
connection: connectionReducer,
@@ -51,21 +42,23 @@ export default function configureStore(initialState?: IReduxState) {
userInterface: userInterfaceReducer,
};
- const composeEnhancers: typeof compose = (() => {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const reduxCompose = window && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;
- if (window.runningInDevelopment && reduxCompose) {
- return reduxCompose({ actionCreators });
- }
- return compose;
- })();
-
- const enhancer = composeEnhancers();
const rootReducer = combineReducers(reducers);
- if (initialState) {
- return createStore(rootReducer, initialState, enhancer);
- } else {
- return createStore(rootReducer, enhancer);
- }
+ return createStore(rootReducer, composeEnhancers());
+}
+
+function composeEnhancers(): typeof compose {
+ const actionCreators = {
+ ...accountActions,
+ ...connectionActions,
+ ...settingsActions,
+ ...supportActions,
+ ...versionActions,
+ ...userInterfaceActions,
+ };
+
+ return window.env.development
+ ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ actionCreators })()
+ : compose();
}
diff --git a/gui/src/shared/ipc-schema.ts b/gui/src/shared/ipc-schema.ts
index e2b3ebbed3..f463765a32 100644
--- a/gui/src/shared/ipc-schema.ts
+++ b/gui/src/shared/ipc-schema.ts
@@ -54,8 +54,6 @@ export interface IAppStateSnapshot {
guiSettings: IGuiSettingsState;
wireguardPublicKey?: IWireguardPublicKey;
translations: ITranslations;
- platform: NodeJS.Platform;
- runningInDevelopment: boolean;
windowsSplitTunnelingApplications?: IApplication[];
}
diff --git a/gui/src/shared/notifications/error.ts b/gui/src/shared/notifications/error.ts
index 97e5e2ce93..066c9c333e 100644
--- a/gui/src/shared/notifications/error.ts
+++ b/gui/src/shared/notifications/error.ts
@@ -66,7 +66,7 @@ export class ErrorNotificationProvider
function getMessage(errorDetails: IErrorState, accountExpiry?: string): string {
if (errorDetails.blockFailure) {
if (errorDetails.cause.reason === 'set_firewall_policy_error') {
- switch (process.platform ?? window.platform) {
+ switch (process.platform ?? window.env.platform) {
case 'win32':
return messages.pgettext(
'notifications',
@@ -107,7 +107,7 @@ function getMessage(errorDetails: IErrorState, accountExpiry?: string): string {
'Could not configure IPv6. Disable it in the app or enable it on your device.',
);
case 'set_firewall_policy_error':
- switch (process.platform ?? window.platform) {
+ switch (process.platform ?? window.env.platform) {
case 'win32':
return messages.pgettext(
'notifications',
diff --git a/gui/src/shared/notifications/no-valid-key.ts b/gui/src/shared/notifications/no-valid-key.ts
index 8da145a1f0..6de28ab8df 100644
--- a/gui/src/shared/notifications/no-valid-key.ts
+++ b/gui/src/shared/notifications/no-valid-key.ts
@@ -14,7 +14,8 @@ export class NoValidKeyNotificationProvider implements InAppNotificationProvider
public mayDisplay() {
const usingWireGuard =
this.context.tunnelProtocol === 'wireguard' ||
- (this.context.tunnelProtocol === 'any' && (process.platform ?? window.platform) !== 'win32');
+ (this.context.tunnelProtocol === 'any' &&
+ (process.platform ?? window.env.platform) !== 'win32');
const keyInvalid =
this.context.wireGuardKey.type === 'key-not-set' ||
this.context.wireGuardKey.type === 'too-many-keys' ||
diff --git a/gui/tasks/dev-server.js b/gui/tasks/dev-server.js
deleted file mode 100644
index 067174ab17..0000000000
--- a/gui/tasks/dev-server.js
+++ /dev/null
@@ -1,40 +0,0 @@
-const serverFactory = require('spa-server');
-
-function startWebServer(done) {
- serverFactory
- .create({
- path: './build',
- port: 8080,
- middleware: [correctWorkingDirectory],
- })
- .start(done);
-}
-
-function correctWorkingDirectory(request, response, next) {
- if (request.url === '/src/renderer/index.js') {
- const write = response.write.bind(response);
- response.write = (data) => {
- let s = data.toString();
-
- // Add code that changes to the correct working directory after `"use strict";` which is
- // located on the first line of the source file.
- const index = s.indexOf('\n');
-
- if (index !== -1) {
- const insertionIndex = index + 1;
- s =
- s.slice(0, insertionIndex) +
- 'try{process.chdir("build/src/renderer")}catch(e){}\n' +
- s.slice(insertionIndex);
- }
-
- write(s);
- };
- }
-
- next();
-}
-
-startWebServer.displayName = 'start-dev-server';
-
-exports.start = startWebServer;
diff --git a/gui/tasks/scripts.js b/gui/tasks/scripts.js
index eda057d983..ec38c7c3fa 100644
--- a/gui/tasks/scripts.js
+++ b/gui/tasks/scripts.js
@@ -82,6 +82,7 @@ function makeBrowserifyPreload(debug) {
let stream = browserify({
entries: './build/src/renderer/preload.js',
debug,
+ detectGlobals: false,
})
.exclude('electron')
.bundle()
diff --git a/gui/tasks/watch.js b/gui/tasks/watch.js
index 543e5f7b08..7badef949e 100644
--- a/gui/tasks/watch.js
+++ b/gui/tasks/watch.js
@@ -1,6 +1,5 @@
const { parallel, series, watch } = require('gulp');
const electron = require('./electron');
-const devServer = require('./dev-server');
const assets = require('./assets');
const scripts = require('./scripts');
@@ -39,7 +38,6 @@ exports.start = series(
// set up hotreload, run electron and begin watching filesystem for changes, after the first
// successful build
series(
- devServer.start,
electron.start,
parallel(watchMainScripts, watchCss, watchConfig, watchHtml, watchStaticAssets),
),
diff --git a/gui/types/global/index.d.ts b/gui/types/global/index.d.ts
index 9065f4d8a5..fe60baf4ca 100644
--- a/gui/types/global/index.d.ts
+++ b/gui/types/global/index.d.ts
@@ -3,7 +3,6 @@ import { IpcRendererEventChannel } from '../../src/renderer/lib/ipc-event-channe
declare global {
interface Window {
ipc: typeof IpcRendererEventChannel;
- platform: NodeJS.Platform;
- runningInDevelopment: boolean;
+ env: { platform: NodeJS.Platform; development: boolean };
}
}