From e7149eab9e7a609e8369ff1e5907e91ca9ef138d Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Mon, 6 Jun 2022 13:47:12 +0530 Subject: [PATCH 01/15] Add update-electron-app --- package-lock.json | 164 +++++++++++++++++------------------ package.json | 1 + src/dashboard/index.ts | 9 +- yarn.lock | 190 +++++++++-------------------------------- 4 files changed, 123 insertions(+), 241 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2178f4d..ac19902 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "rimraf": "^3.0.2", "tar-fs": "^2.1.1", "unbzip2-stream": "^1.4.3", + "update-electron-app": "^2.0.1", "web-ext": "^6.7.0", "which": "^2.0.2" }, @@ -3146,7 +3147,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz", "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==", - "dev": true, "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -7771,7 +7771,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "node_modules/boxen": { @@ -8777,7 +8776,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, "optional": true, "dependencies": { "ini": "^1.3.4", @@ -9752,7 +9750,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "devOptional": true }, "node_modules/diff-sequences": { "version": "26.6.2", @@ -10283,7 +10281,6 @@ "version": "17.1.0", "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", - "dev": true, "hasInstallScript": true, "dependencies": { "@electron/get": "^1.13.0", @@ -10640,6 +10637,11 @@ "node": ">=10" } }, + "node_modules/electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", + "integrity": "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==" + }, "node_modules/electron-log": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.6.tgz", @@ -11337,14 +11339,12 @@ "node_modules/electron/node_modules/@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", - "dev": true + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "node_modules/electron/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -11353,7 +11353,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, "dependencies": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -11368,7 +11367,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -11379,8 +11377,7 @@ "node_modules/electron/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/elliptic": { "version": "6.5.4", @@ -11517,7 +11514,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "engines": { "node": ">=6" } @@ -14008,6 +14004,14 @@ "assert-plus": "^1.0.0" } }, + "node_modules/github-url-to-object": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", + "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", + "dependencies": { + "is-url": "^1.1.0" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -14056,7 +14060,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -14074,7 +14077,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "optional": true, "dependencies": { "lru-cache": "^6.0.0" @@ -14154,7 +14156,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", - "dev": true, "optional": true, "dependencies": { "encodeurl": "^1.0.2", @@ -14178,7 +14179,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dev": true, "optional": true, "dependencies": { "define-properties": "^1.1.3" @@ -15597,6 +15597,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -18996,7 +19001,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -19938,7 +19942,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, "optional": true, "dependencies": { "config-chain": "^1.1.11", @@ -19952,7 +19955,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, "optional": true, "engines": { "node": ">=4" @@ -20734,8 +20736,6 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "inBundle": true, "license": "MIT" }, @@ -20887,9 +20887,7 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -20897,7 +20895,8 @@ "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0" + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { "node": ">=12" @@ -21417,9 +21416,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -21627,8 +21624,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "inBundle": true, "license": "ISC", "dependencies": { @@ -22125,8 +22120,6 @@ }, "node_modules/npm/node_modules/rimraf/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "inBundle": true, "license": "ISC", "dependencies": { @@ -22204,8 +22197,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "inBundle": true, "license": "ISC", "dependencies": { @@ -24068,7 +24059,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true, "optional": true }, "node_modules/protobufjs": { @@ -24975,7 +24965,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -24993,7 +24982,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, "optional": true }, "node_modules/run-async": { @@ -25203,7 +25191,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true, "optional": true }, "node_modules/semver-diff": { @@ -25262,7 +25249,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -25278,7 +25264,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true, "engines": { "node": ">=10" @@ -26303,7 +26288,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, "dependencies": { "debug": "^4.1.0" }, @@ -27206,7 +27190,6 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, "optional": true, "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" @@ -27431,6 +27414,20 @@ "yarn": "*" } }, + "node_modules/update-electron-app": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/update-electron-app/-/update-electron-app-2.0.1.tgz", + "integrity": "sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==", + "dependencies": { + "electron-is-dev": "^0.3.0", + "github-url-to-object": "^4.0.4", + "is-url": "^1.2.4", + "ms": "^2.1.1" + }, + "peerDependencies": { + "electron": ">= 6.0.0" + } + }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -31129,7 +31126,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz", "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==", - "dev": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -34691,7 +34687,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "boxen": { @@ -35470,7 +35465,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, "optional": true, "requires": { "ini": "^1.3.4", @@ -36195,7 +36189,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "devOptional": true }, "diff-sequences": { "version": "26.6.2", @@ -36638,7 +36632,6 @@ "version": "17.1.0", "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", - "dev": true, "requires": { "@electron/get": "^1.13.0", "@types/node": "^14.6.2", @@ -36648,14 +36641,12 @@ "@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", - "dev": true + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -36664,7 +36655,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, "requires": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -36676,7 +36666,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -36684,8 +36673,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -36927,6 +36915,11 @@ } } }, + "electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", + "integrity": "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==" + }, "electron-log": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.6.tgz", @@ -37570,8 +37563,7 @@ "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "err-code": { "version": "3.0.1", @@ -39449,6 +39441,14 @@ "assert-plus": "^1.0.0" } }, + "github-url-to-object": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", + "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", + "requires": { + "is-url": "^1.1.0" + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -39488,7 +39488,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -39503,7 +39502,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "optional": true, "requires": { "lru-cache": "^6.0.0" @@ -39565,7 +39563,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", - "dev": true, "optional": true, "requires": { "encodeurl": "^1.0.2", @@ -39583,7 +39580,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dev": true, "optional": true, "requires": { "define-properties": "^1.1.3" @@ -40639,6 +40635,11 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -43286,7 +43287,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "requires": { "escape-string-regexp": "^4.0.0" @@ -44452,8 +44452,6 @@ "dependencies": { "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "bundled": true } } @@ -44573,16 +44571,15 @@ } }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.0.1", "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0" + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -44963,9 +44960,7 @@ } }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.0.1", "bundled": true, "requires": { "brace-expansion": "^2.0.1" @@ -45113,8 +45108,6 @@ }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -45472,8 +45465,6 @@ }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -45519,8 +45510,6 @@ "dependencies": { "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "bundled": true, "requires": { "yallist": "^4.0.0" @@ -45782,7 +45771,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, "optional": true, "requires": { "config-chain": "^1.1.11", @@ -45793,7 +45781,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, "optional": true } } @@ -47023,7 +47010,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true, "optional": true }, "protobufjs": { @@ -47719,7 +47705,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -47734,7 +47719,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, "optional": true } } @@ -47891,7 +47875,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true, "optional": true }, "semver-diff": { @@ -47948,7 +47931,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "requires": { "type-fest": "^0.13.1" @@ -47958,7 +47940,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true } } @@ -48761,7 +48742,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, "requires": { "debug": "^4.1.0" } @@ -49496,7 +49476,6 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, "optional": true }, "tunnel-agent": { @@ -49662,6 +49641,17 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" }, + "update-electron-app": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/update-electron-app/-/update-electron-app-2.0.1.tgz", + "integrity": "sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==", + "requires": { + "electron-is-dev": "^0.3.0", + "github-url-to-object": "^4.0.4", + "is-url": "^1.2.4", + "ms": "^2.1.1" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", diff --git a/package.json b/package.json index 25e9d44..2275351 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "rimraf": "^3.0.2", "tar-fs": "^2.1.1", "unbzip2-stream": "^1.4.3", + "update-electron-app": "^2.0.1", "web-ext": "^6.7.0", "which": "^2.0.2" }, diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index f7f774f..9898a11 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -21,6 +21,12 @@ const path = require('path') const logger = new Logger() +require('update-electron-app')({ + repo: 'pointnetwork/pointnetwork-dashboard', + // updateInterval: '1 hour', + logger: require('electron-log'), +}) + let mainWindow: BrowserWindow | null let node: Node | null let uninstaller: Uninstaller | null @@ -35,8 +41,7 @@ declare const DASHBOARD_WINDOW_WEBPACK_ENTRY: string const MESSAGES = { closeConfirmation: { title: 'Are you sure you want to close?', - message: - 'Quit Point Network and Point Browser?', + message: 'Quit Point Network and Point Browser?', buttons: { confirm: 'Yes', cancel: 'No', diff --git a/yarn.lock b/yarn.lock index bdb9f17..bbcf803 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3396,7 +3396,7 @@ dependencies: "color-convert" "^1.9.0" -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0", "ansi-styles@^4.3.0": "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" "version" "4.3.0" @@ -4278,11 +4278,6 @@ "pascal-case" "^3.1.2" "tslib" "^2.0.3" -"camelcase@^5.0.0": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - "camelcase@^5.3.1": "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" @@ -4513,15 +4508,6 @@ "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" "version" "3.0.0" -"cliui@^6.0.0": - "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^6.2.0" - "cliui@^7.0.2": "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -5147,11 +5133,6 @@ "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" "version" "1.0.1" -"decamelize@^1.2.0": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - "decamelize@5.0.0": "integrity" "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==" "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz" @@ -5582,37 +5563,6 @@ "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" "version" "1.1.1" -"electron-installer-common@^0.10.2": - "integrity" "sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA==" - "resolved" "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.3.tgz" - "version" "0.10.3" - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - "asar" "^3.0.0" - "debug" "^4.1.1" - "fs-extra" "^9.0.0" - "glob" "^7.1.4" - "lodash" "^4.17.15" - "parse-author" "^2.0.0" - "semver" "^7.1.1" - "tmp-promise" "^3.0.2" - optionalDependencies: - "@types/fs-extra" "^9.0.1" - -"electron-installer-debian@^3.0.0": - "integrity" "sha512-k6KChvx0Fw8XTlCqwwbBfh19yGQaKjGdbugokmr1IpzINOm4QFyACKMTHAYFHW5LCBUZQShZD96hwxUZ+8Kx+w==" - "resolved" "https://registry.npmjs.org/electron-installer-debian/-/electron-installer-debian-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - "debug" "^4.1.1" - "electron-installer-common" "^0.10.2" - "fs-extra" "^9.0.0" - "get-folder-size" "^2.0.1" - "lodash" "^4.17.4" - "word-wrap" "^1.2.3" - "yargs" "^15.0.1" - "electron-installer-dmg@^3.0.0": "integrity" "sha512-a3z9ABUfLJtrLK1ize4j+wJKslodb0kRHgBuUN4GTckiUxtGdo49XCvvAHvQaOqQk3S5VTvuc6PoofnI9mKSCQ==" "resolved" "https://registry.npmjs.org/electron-installer-dmg/-/electron-installer-dmg-3.0.0.tgz" @@ -5624,18 +5574,10 @@ optionalDependencies: "appdmg" "^0.6.0" -"electron-installer-redhat@^3.2.0": - "integrity" "sha512-hXIXB3uQXmXZy/v3MpbwWN4Of28ALpPt9ZyUDNEoSe0w7QZceL9IqI2K6Q6imiBJCLRC0hmT94WhlKj1RyGOWg==" - "resolved" "https://registry.npmjs.org/electron-installer-redhat/-/electron-installer-redhat-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - "debug" "^4.1.1" - "electron-installer-common" "^0.10.2" - "fs-extra" "^9.0.0" - "lodash" "^4.17.15" - "word-wrap" "^1.2.3" - "yargs" "^16.0.2" +"electron-is-dev@^0.3.0": + "integrity" "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==" + "resolved" "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz" + "version" "0.3.0" "electron-log@^4.4.6": "integrity" "sha512-nirYgRdY+F+vclr8ijdwy2vW03IzFpDHTaKNWu76dEN21Y76+smcES5knS7cgHUUB0qNLOi8vZO36taakjbSXA==" @@ -5738,7 +5680,7 @@ optionalDependencies: "exe-icon-extractor" "^1.0.8" -"electron@^17.1.0": +"electron@^17.1.0", "electron@>= 6.0.0": "integrity" "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==" "resolved" "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz" "version" "17.1.0" @@ -6279,6 +6221,11 @@ "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" +"exe-icon-extractor@^1.0.8": + "integrity" "sha512-Ww9kDYN3goiWEMovTWV1s0p3we0Xp1jJyJSnW4KH+Z+0KxuhWTSL8f1u5bpPsSunSUeqC+RACbmBk6l5EuBR1g==" + "resolved" "https://registry.npmjs.org/exe-icon-extractor/-/exe-icon-extractor-1.0.8.tgz" + "version" "1.0.8" + "execa@^1.0.0": "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" @@ -6930,11 +6877,6 @@ "flora-colossus" "^1.0.0" "fs-extra" "^4.0.0" -"gar@^1.0.4": - "integrity" "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==" - "resolved" "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz" - "version" "1.0.4" - "gauge@^4.0.3": "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" @@ -6954,19 +6896,11 @@ "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" "version" "1.0.0-beta.2" -"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": +"get-caller-file@^2.0.5": "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" "version" "2.0.5" -"get-folder-size@^2.0.1": - "integrity" "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==" - "resolved" "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "gar" "^1.0.4" - "tiny-each-async" "2.0.3" - "get-installed-path@^2.0.3": "integrity" "sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==" "resolved" "https://registry.npmjs.org/get-installed-path/-/get-installed-path-2.1.1.tgz" @@ -7064,6 +6998,13 @@ dependencies: "assert-plus" "^1.0.0" +"github-url-to-object@^4.0.4": + "integrity" "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==" + "resolved" "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz" + "version" "4.0.6" + dependencies: + "is-url" "^1.1.0" + "glob-parent@^5.1.2", "glob-parent@~5.1.2": "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -7107,15 +7048,14 @@ "path-is-absolute" "^1.0.0" "glob@^8.0.1": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" + "version" "8.0.1" dependencies: "fs.realpath" "^1.0.0" "inflight" "^1.0.4" "inherits" "2" "minimatch" "^5.0.1" "once" "^1.3.0" + "path-is-absolute" "^1.0.0" "global-agent@^3.0.0": "integrity" "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==" @@ -8101,6 +8041,11 @@ "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" "version" "0.1.0" +"is-url@^1.1.0", "is-url@^1.2.4": + "integrity" "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + "resolved" "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz" + "version" "1.2.4" + "is-utf8@^0.2.1": "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" @@ -9290,7 +9235,7 @@ "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" "version" "4.4.2" -"lodash@^4.17.10", "lodash@^4.17.11", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.4", "lodash@^4.7.0", "lodash@4.x": +"lodash@^4.17.10", "lodash@^4.17.11", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.7.0", "lodash@4.x": "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" @@ -9602,9 +9547,7 @@ "brace-expansion" "^1.1.7" "minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" + "version" "5.0.1" dependencies: "brace-expansion" "^2.0.1" @@ -11701,11 +11644,6 @@ "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" "version" "2.0.2" -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" - "requires-port@^1.0.0": "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" @@ -13041,11 +12979,6 @@ "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" "version" "4.0.1" -"tiny-each-async@2.0.3": - "integrity" "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE=" - "resolved" "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz" - "version" "2.0.3" - "tiny-relative-date@^1.3.0": "integrity" "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==" "resolved" "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" @@ -13414,6 +13347,16 @@ "resolved" "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" "version" "2.0.1" +"update-electron-app@^2.0.1": + "integrity" "sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==" + "resolved" "https://registry.npmjs.org/update-electron-app/-/update-electron-app-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "electron-is-dev" "^0.3.0" + "github-url-to-object" "^4.0.4" + "is-url" "^1.2.4" + "ms" "^2.1.1" + "update-notifier@5.1.0": "integrity" "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==" "resolved" "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" @@ -13838,11 +13781,6 @@ "is-string" "^1.0.5" "is-symbol" "^1.0.3" -"which-module@^2.0.0": - "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" - "which@^1.2.14": "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -13901,15 +13839,6 @@ "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" "version" "1.2.3" -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "wrap-ansi@^7.0.0": "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -14017,11 +13946,6 @@ "resolved" "https://registry.npmjs.org/xterm/-/xterm-4.18.0.tgz" "version" "4.18.0" -"y18n@^4.0.0": - "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - "version" "4.0.3" - "y18n@^5.0.5": "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" @@ -14037,14 +13961,6 @@ "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" "version" "1.10.2" -"yargs-parser@^18.1.2": - "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - "version" "18.1.3" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - "yargs-parser@^20.0.0", "yargs-parser@^20.2.2", "yargs-parser@20.x": "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" @@ -14055,36 +13971,6 @@ "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" "version" "21.0.1" -"yargs@^15.0.1": - "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - "version" "15.4.1" - dependencies: - "cliui" "^6.0.0" - "decamelize" "^1.2.0" - "find-up" "^4.1.0" - "get-caller-file" "^2.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^4.2.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^18.1.2" - -"yargs@^16.0.2": - "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - "version" "16.2.0" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.0" - "y18n" "^5.0.5" - "yargs-parser" "^20.2.2" - "yargs@^16.2.0": "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" From 9b5f04a1107651a6e9e345002bf9eee1330f9765 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Mon, 6 Jun 2022 13:50:47 +0530 Subject: [PATCH 02/15] Add electron-squirrel-startup --- package-lock.json | 45 ++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/dashboard/index.ts | 3 +++ yarn.lock | 7 +++++++ 4 files changed, 56 insertions(+) diff --git a/package-lock.json b/package-lock.json index ac19902..5405734 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "dmg": "^0.1.0", "docker-compose": "^0.23.17", "electron-log": "^4.4.6", + "electron-squirrel-startup": "^1.0.0", "extract-zip": "^2.0.1", "find-process": "^1.4.7", "fs-extra": "8.1.0", @@ -11185,6 +11186,27 @@ "node": ">=12" } }, + "node_modules/electron-squirrel-startup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz", + "integrity": "sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==", + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/electron-squirrel-startup/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-squirrel-startup/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/electron-to-chromium": { "version": "1.4.72", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", @@ -37329,6 +37351,29 @@ } } }, + "electron-squirrel-startup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz", + "integrity": "sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==", + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "electron-to-chromium": { "version": "1.4.72", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", diff --git a/package.json b/package.json index 2275351..bf20dfd 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "dmg": "^0.1.0", "docker-compose": "^0.23.17", "electron-log": "^4.4.6", + "electron-squirrel-startup": "^1.0.0", "extract-zip": "^2.0.1", "find-process": "^1.4.7", "fs-extra": "8.1.0", diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index 9898a11..a760600 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -17,6 +17,9 @@ import Uninstaller from '../uninstaller' import { readFileSync, writeFileSync } from 'fs-extra' import process from 'node:process' +// @ts-ignore +if (require('electron-squirrel-startup')) return + const path = require('path') const logger = new Logger() diff --git a/yarn.lock b/yarn.lock index bbcf803..5e57d0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5648,6 +5648,13 @@ "tar" "^6.0.5" "yargs" "^17.0.1" +"electron-squirrel-startup@^1.0.0": + "integrity" "sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==" + "resolved" "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "debug" "^2.2.0" + "electron-to-chromium@^1.4.71": "integrity" "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz" From fa47ce5332cc861ecc323cf0e3f5114399b881d4 Mon Sep 17 00:00:00 2001 From: Amaury Hernandez-Aguila Date: Mon, 6 Jun 2022 01:23:45 -0700 Subject: [PATCH 03/15] GA test. --- .github/workflows/electron-builder.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/electron-builder.yml b/.github/workflows/electron-builder.yml index 0c51705..200b074 100644 --- a/.github/workflows/electron-builder.yml +++ b/.github/workflows/electron-builder.yml @@ -1,8 +1,8 @@ name: Build on: push: - tags: - - 'v*' + # tags: + # - 'v*' jobs: create_release: From b5dcaa179b30e5824dd3b63b690b7592a8f29e2b Mon Sep 17 00:00:00 2001 From: Amaury Hernandez-Aguila Date: Mon, 6 Jun 2022 03:43:55 -0700 Subject: [PATCH 04/15] Adding eslint ignore. --- src/dashboard/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index a760600..b2c5008 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -18,7 +18,10 @@ import { readFileSync, writeFileSync } from 'fs-extra' import process from 'node:process' // @ts-ignore -if (require('electron-squirrel-startup')) return +;(() => { + // eslint-disable-next-line no-useless-return + if (require('electron-squirrel-startup')) return +})() const path = require('path') From a008f011feaa4bc979004abe7f766219a1280302 Mon Sep 17 00:00:00 2001 From: Amaury Hernandez-Aguila Date: Thu, 9 Jun 2022 00:39:52 -0700 Subject: [PATCH 05/15] Adding repo url to package.json. --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index bf20dfd..2a86110 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,10 @@ "author": "Point Labs", "version": "0.2.27", "description": "PointNetwork", + "repository": { + "type": "git", + "url": "https://github.com/pointnetwork/pointnetwork-dashboard" + }, "main": "./.webpack/main", "scripts": { "start": "electron-forge start", From 37f670d0f26ef5353b4ad0ee83e4d497d470bdf7 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Fri, 10 Jun 2022 14:33:18 +0530 Subject: [PATCH 06/15] Working test implementation of auto-updates from GitHub --- package-lock.json | 744 ++++++++++++++++------------------------- package.json | 3 + src/dashboard/index.ts | 186 ++++++++++- yarn.lock | 74 ++-- 4 files changed, 502 insertions(+), 505 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5405734..ad174ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "decompress-zip": "^0.3.3", "dmg": "^0.1.0", "docker-compose": "^0.23.17", + "electron-github-autoupdater": "^2.0.0", "electron-log": "^4.4.6", "electron-squirrel-startup": "^1.0.0", "extract-zip": "^2.0.1", @@ -42,6 +43,7 @@ "react-dom": "17.0.2", "react-hot-loader": "4.13.0", "rimraf": "^3.0.2", + "semver": "^7.3.7", "tar-fs": "^2.1.1", "unbzip2-stream": "^1.4.3", "update-electron-app": "^2.0.1", @@ -73,6 +75,7 @@ "@types/progress-stream": "^2.0.2", "@types/react": "17.0.11", "@types/react-dom": "17.0.8", + "@types/semver": "^7.3.9", "@types/styled-components": "5.1.10", "@types/which": "^2.0.1", "@typescript-eslint/eslint-plugin": "4.27.0", @@ -163,6 +166,14 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", @@ -217,6 +228,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.17.6", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", @@ -273,6 +292,15 @@ "@babel/core": "^7.4.0-0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", @@ -1533,6 +1561,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", @@ -1744,6 +1781,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -2153,21 +2199,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@electron-forge/cli/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@electron-forge/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2328,21 +2359,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@electron-forge/core/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@electron-forge/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3165,6 +3181,14 @@ "global-tunnel-ng": "^2.7.1" } }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.7.2", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz", @@ -4490,21 +4514,6 @@ "semver": "^7.3.5" } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/move-file": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", @@ -5046,6 +5055,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@svgr/webpack/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -5712,6 +5730,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/semver": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -5853,21 +5877,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.27.0.tgz", @@ -5976,21 +5985,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz", @@ -7418,6 +7412,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", @@ -9151,21 +9154,6 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -10295,6 +10283,23 @@ "node": ">= 8.6" } }, + "node_modules/electron-github-autoupdater": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-github-autoupdater/-/electron-github-autoupdater-2.0.0.tgz", + "integrity": "sha512-ZnSQuWwv1lxyMqITiuI8vW4MlO24IoK9zZa4vo5NH/F0wskMGgDm0Kn4s1KAFq8XpzrxAjyjuE/TqE94cL9TAw==", + "dependencies": { + "axios": "^0.24.0", + "semver": "^7.3.5" + } + }, + "node_modules/electron-github-autoupdater/node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, "node_modules/electron-installer-common": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.3.tgz", @@ -10374,22 +10379,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/electron-installer-common/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/electron-installer-common/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10795,21 +10784,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/electron-packager/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/electron-packager/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -11114,21 +11088,6 @@ "lowercase-keys": "^2.0.0" } }, - "node_modules/electron-rebuild/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/electron-rebuild/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11358,6 +11317,15 @@ "node": ">= 8.0.0" } }, + "node_modules/electron-wix-msi/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/electron/node_modules/@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", @@ -12178,6 +12146,15 @@ "node": ">= 4" } }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-prettier": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", @@ -12420,20 +12397,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14095,21 +14058,6 @@ "node": ">=10.0" } }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/global-dirs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", @@ -15830,6 +15778,15 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -17736,21 +17693,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18962,6 +18904,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -19541,21 +19491,6 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -19571,21 +19506,6 @@ "semver": "^7.3.5" } }, - "node_modules/node-api-version/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -19685,21 +19605,6 @@ "node": ">=6" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -19719,20 +19624,6 @@ "which": "^2.0.2" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-notifier/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -21768,8 +21659,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz", - "integrity": "sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw==", "inBundle": true, "license": "ISC", "dependencies": { @@ -22270,8 +22159,6 @@ }, "node_modules/npm/node_modules/socks-proxy-agent": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", "inBundle": true, "license": "MIT", "dependencies": { @@ -23216,6 +23103,14 @@ "node": ">=8" } }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -25202,11 +25097,17 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-compare": { @@ -25226,6 +25127,14 @@ "node": ">=8" } }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", @@ -27134,21 +27043,6 @@ "typescript": ">=3.8 <5.0" } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -27530,20 +27424,6 @@ "node": ">=8" } }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/update-notifier/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28987,6 +28867,13 @@ "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@babel/generator": { @@ -29026,6 +28913,13 @@ "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@babel/helper-create-class-features-plugin": { @@ -29067,6 +28961,14 @@ "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-environment-visitor": { @@ -29904,6 +29806,14 @@ "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/plugin-transform-shorthand-properties": { @@ -30061,6 +29971,14 @@ "babel-plugin-polyfill-regenerator": "^0.2.2", "core-js-compat": "^3.14.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/preset-modules": { @@ -30368,15 +30286,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -30497,15 +30406,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -31158,6 +31058,13 @@ "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@emotion/babel-plugin": { @@ -32092,17 +31999,6 @@ "requires": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@npmcli/move-file": { @@ -32488,6 +32384,12 @@ "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -33098,6 +33000,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/semver": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true + }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -33221,17 +33129,6 @@ "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/experimental-utils": { @@ -33289,17 +33186,6 @@ "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/visitor-keys": { @@ -34398,6 +34284,14 @@ "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.2.4", "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "babel-plugin-polyfill-corejs3": { @@ -35763,17 +35657,6 @@ "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "css-select": { @@ -36699,6 +36582,25 @@ } } }, + "electron-github-autoupdater": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-github-autoupdater/-/electron-github-autoupdater-2.0.0.tgz", + "integrity": "sha512-ZnSQuWwv1lxyMqITiuI8vW4MlO24IoK9zZa4vo5NH/F0wskMGgDm0Kn4s1KAFq8XpzrxAjyjuE/TqE94cL9TAw==", + "requires": { + "axios": "^0.24.0", + "semver": "^7.3.5" + }, + "dependencies": { + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "requires": { + "follow-redirects": "^1.14.4" + } + } + } + }, "electron-installer-common": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.3.tgz", @@ -36752,16 +36654,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -37066,15 +36958,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -37298,15 +37181,6 @@ "lowercase-keys": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -37494,6 +37368,12 @@ "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.3.0.tgz", "integrity": "sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -37880,14 +37760,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -38173,6 +38045,12 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -39541,17 +39419,6 @@ "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "global-dirs": { @@ -40851,6 +40718,14 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "istanbul-lib-report": { @@ -42284,15 +42159,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -43275,6 +43141,13 @@ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "make-error": { @@ -43734,17 +43607,6 @@ "dev": true, "requires": { "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "node-addon-api": { @@ -43760,17 +43622,6 @@ "dev": true, "requires": { "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "node-fetch": { @@ -43837,15 +43688,6 @@ "requires": { "abbrev": "1" } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -43873,14 +43715,6 @@ "which": "^2.0.2" }, "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -45241,8 +45075,6 @@ }, "npm-packlist": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz", - "integrity": "sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw==", "bundled": true, "requires": { "glob": "^8.0.1", @@ -45592,8 +45424,6 @@ }, "socks-proxy-agent": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", "bundled": true, "requires": { "agent-base": "^6.0.2", @@ -46401,6 +46231,13 @@ "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "pako": { @@ -47912,9 +47749,12 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-compare": { "version": "1.0.0", @@ -47928,6 +47768,13 @@ "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "send": { @@ -49453,17 +49300,6 @@ "mkdirp": "1.x", "semver": "7.x", "yargs-parser": "20.x" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "tsconfig-paths": { @@ -49753,14 +49589,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", diff --git a/package.json b/package.json index 2a86110..4d289c8 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "decompress-zip": "^0.3.3", "dmg": "^0.1.0", "docker-compose": "^0.23.17", + "electron-github-autoupdater": "^2.0.0", "electron-log": "^4.4.6", "electron-squirrel-startup": "^1.0.0", "extract-zip": "^2.0.1", @@ -55,6 +56,7 @@ "react-dom": "17.0.2", "react-hot-loader": "4.13.0", "rimraf": "^3.0.2", + "semver": "^7.3.7", "tar-fs": "^2.1.1", "unbzip2-stream": "^1.4.3", "update-electron-app": "^2.0.1", @@ -86,6 +88,7 @@ "@types/progress-stream": "^2.0.2", "@types/react": "17.0.11", "@types/react-dom": "17.0.8", + "@types/semver": "^7.3.9", "@types/styled-components": "5.1.10", "@types/which": "^2.0.1", "@typescript-eslint/eslint-plugin": "4.27.0", diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index b2c5008..573de69 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -16,21 +16,175 @@ import Logger from '../../shared/logger' import Uninstaller from '../uninstaller' import { readFileSync, writeFileSync } from 'fs-extra' import process from 'node:process' +import { autoUpdater } from 'electron-github-autoupdater' +import { rcompare as semverCompare } from 'semver' +import { + GithubRelease, + GithubReleaseAsset, +} from 'electron-github-autoupdater/dist/types' +import fs from 'node:fs' // @ts-ignore -;(() => { - // eslint-disable-next-line no-useless-return - if (require('electron-squirrel-startup')) return -})() +// ;(() => { +// // eslint-disable-next-line no-useless-return +// if (require('electron-squirrel-startup')) return +// })() + +let isUpdateAvailable = false const path = require('path') const logger = new Logger() -require('update-electron-app')({ - repo: 'pointnetwork/pointnetwork-dashboard', - // updateInterval: '1 hour', - logger: require('electron-log'), +// ===================== AutoUpdater ===================== +const updater = autoUpdater({ + owner: 'pointnetwork', + repo: 'pointnetwork-dashboard', + accessToken: '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', + // Remove this later on after testing + allowPrerelease: true, +}) + +updater.getLatestRelease = async () => { + logger.info('[autoUpdater] Getting releases from GitHub') + const response = await axios.get( + `${updater.baseUrl}/repos/${updater.owner}/${updater.repo}/releases?per_page=100`, + { + headers: updater._headers, + } + ) + const releases: GithubRelease[] = response.data.filter( + (release: GithubRelease) => !release.draft + ) + + if (releases.length === 0) { + throw new Error('No releases found') + } + + releases + .map(f => f.name.replace('Release v', '')) + .filter(f => f.match(/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/g)) + .sort((a, b) => semverCompare(a, b)) + + if (updater.allowPrerelease) { + updater.latestRelease = releases[0] + return releases[0] + } else { + const matchedRelease: GithubRelease | undefined = releases.find( + release => !release.prerelease + ) + if (!matchedRelease) throw new Error('No non-preproduction releases found') + updater.latestRelease = matchedRelease + + logger.info('[autoUpdater] Matched release', matchedRelease.name) + return matchedRelease + } +} + +updater.downloadUpdateFromRelease = async (release: GithubRelease) => { + logger.info('[autoUpdater] Checking if able to download the release') + try { + // Find the required files in the release + const assets = updater.platformConfig.requiredFiles.map(filePattern => { + const match = release.assets.find(asset => asset.name.match(filePattern)) + if (!match) + throw new Error( + `Release is missing a required update file for current platform (${global.platform})` + ) + else return match + }) + + logger.info('[autoUpdater] Able to download') + // Set variables to track download progress, including calculating the total download size + const totalSize = assets.reduce((prev, asset) => (prev += asset.size), 0) + let downloaded = 0 + let lastEmitPercent = -1 + + const downloadFile = (asset: GithubReleaseAsset) => { + return new Promise(async (resolve, reject) => { + const outputPath = path.join(updater.downloadsDirectory, asset.name) + const assetUrl = `${updater.baseUrl}/repos/${updater.owner}/${updater.repo}/releases/assets/${asset.id}` + + const { data } = await axios.get(assetUrl, { + headers: { + ...updater._headers, + Accept: 'application/octet-stream', + }, + responseType: 'stream', + }) + + const writer = fs.createWriteStream(outputPath) + + // Emit a progress event when a chunk is downloaded + data.on('data', (chunk: Buffer) => { + downloaded += chunk.length + const percent = Math.round((downloaded * 100) / totalSize) + + // Only emit once the value is greater, to prevent TONS of IPC events + if (percent > lastEmitPercent) { + updater.emit('update-downloading', { + downloadStatus: { + size: totalSize, + progress: downloaded, + percent: Math.round((downloaded * 100) / totalSize), + }, + releaseName: release.name, + releaseNotes: release.body || '', + releaseDate: new Date(release.published_at), + updateUrl: release.html_url, + }) + + lastEmitPercent = percent + } + }) + + // Pipe data into a writer to save it to the disk rather than keeping it in memory + data.pipe(writer) + + data.on('end', () => { + resolve(true) + }) + }) + } + + for await (const asset of assets) { + await downloadFile(asset) + } + + fs.writeFileSync(updater.cacheFilePath, release.id.toString(), { + encoding: 'utf-8', + }) + } catch (e) { + updater._emitError(e) + } +} + +updater.on('error', err => { + logger.error('[autoUpdater]: Error in auto-updater.', err) +}) +updater.on('checking-for-update', () => { + logger.info('[autoUpdater]: Checking for update...') +}) +updater.on('update-downloading', info => { + isUpdateAvailable = true + logger.info( + '[autoUpdater]: Update downloading.', + `${info.downloadStatus.percent}%` + ) +}) +updater.on('update-available', info => { + isUpdateAvailable = true + logger.info('[autoUpdater]: Update available.', info) +}) +updater.on('update-not-available', info => { + logger.info('[autoUpdater]: Update not available.', info) +}) +updater.on('before-quit-for-update', info => { + logger.info('[autoUpdater]: before-quit-for-update', info) +}) +updater.on('update-downloaded', info => { + isUpdateAvailable = true + logger.info('[autoUpdater]: Update downloaded.') }) let mainWindow: BrowserWindow | null @@ -163,6 +317,9 @@ export default function (isExplicitRun = false) { try { await Promise.all([firefox?.close(), Node.stopNode()]) + if (isUpdateAvailable) { + updater.quitAndInstall() + } } catch (err) { logger.error('[dashboard:index.ts] Error in `close` handler', err) } finally { @@ -502,6 +659,19 @@ export default function (isExplicitRun = false) { .on('ready', createWindow) .whenReady() .then(registerListeners) + .then(() => + setTimeout(async function () { + logger.info('[autoUpdater] Starting update check') + try { + // await updater.downloadUpdateFromRelease( + // await updater.getLatestRelease() + // ) + updater.checkForUpdates() + } catch (error) { + logger.error('Unable to check for updates', error) + } + }, 1000) + ) .catch(e => logger.error(e)) app.on('window-all-closed', () => { diff --git a/yarn.lock b/yarn.lock index 5e57d0f..458bf5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2833,6 +2833,11 @@ "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" "version" "0.16.2" +"@types/semver@^7.3.9": + "integrity" "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" + "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz" + "version" "7.3.9" + "@types/serve-index@^1.9.1": "integrity" "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==" "resolved" "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" @@ -3656,6 +3661,13 @@ dependencies: "follow-redirects" "^1.14.0" +"axios@^0.24.0": + "integrity" "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz" + "version" "0.24.0" + dependencies: + "follow-redirects" "^1.14.4" + "axios@^0.25.0": "integrity" "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==" "resolved" "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz" @@ -5563,6 +5575,14 @@ "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" "version" "1.1.1" +"electron-github-autoupdater@^2.0.0": + "integrity" "sha512-ZnSQuWwv1lxyMqITiuI8vW4MlO24IoK9zZa4vo5NH/F0wskMGgDm0Kn4s1KAFq8XpzrxAjyjuE/TqE94cL9TAw==" + "resolved" "https://registry.npmjs.org/electron-github-autoupdater/-/electron-github-autoupdater-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "axios" "^0.24.0" + "semver" "^7.3.5" + "electron-installer-dmg@^3.0.0": "integrity" "sha512-a3z9ABUfLJtrLK1ize4j+wJKslodb0kRHgBuUN4GTckiUxtGdo49XCvvAHvQaOqQk3S5VTvuc6PoofnI9mKSCQ==" "resolved" "https://registry.npmjs.org/electron-installer-dmg/-/electron-installer-dmg-3.0.0.tgz" @@ -6680,7 +6700,7 @@ "resolved" "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz" "version" "0.13.0" -"follow-redirects@^1.0.0", "follow-redirects@^1.14.0", "follow-redirects@^1.14.7": +"follow-redirects@^1.0.0", "follow-redirects@^1.14.0", "follow-redirects@^1.14.4", "follow-redirects@^1.14.7": "integrity" "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz" "version" "1.14.9" @@ -10032,8 +10052,6 @@ "validate-npm-package-name" "^4.0.0" "npm-packlist@^5.0.0": - "integrity" "sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw==" - "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz" "version" "5.0.3" dependencies: "glob" "^8.0.1" @@ -11979,40 +11997,27 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" "version" "5.7.1" -"semver@^6.0.0", "semver@^6.1.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.2.0", "semver@^6.3.0": +"semver@^6.0.0": "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" "version" "6.3.0" -"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.5", "semver@^7.3.7": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - -"semver@^7.1.3": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.1.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.2.1": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.3.2": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.2.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.3.4": +"semver@^7.0.0", "semver@^7.1.1", "semver@^7.1.3", "semver@^7.2.1", "semver@^7.3.2", "semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7", "semver@7.x": "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" "version" "7.3.7" @@ -12036,13 +12041,6 @@ dependencies: "lru-cache" "^6.0.0" -"semver@7.x": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - "send@0.17.2": "integrity" "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==" "resolved" "https://registry.npmjs.org/send/-/send-0.17.2.tgz" @@ -12267,8 +12265,6 @@ "socks" "^2.6.2" "socks-proxy-agent@^6.1.1": - "integrity" "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz" "version" "6.2.0" dependencies: "agent-base" "^6.0.2" From 300e9c4a137461ad3992581924a541d5a22f93d2 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Mon, 13 Jun 2022 11:04:35 +0530 Subject: [PATCH 07/15] Update the token with a new one --- src/dashboard/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index 573de69..a4e4c08 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -40,7 +40,7 @@ const logger = new Logger() const updater = autoUpdater({ owner: 'pointnetwork', repo: 'pointnetwork-dashboard', - accessToken: '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', + accessToken: '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', // Remove this later on after testing allowPrerelease: true, }) From bd4abfe48958c0ee3be3001d9c3edb8514767256 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Tue, 14 Jun 2022 17:25:32 +0530 Subject: [PATCH 08/15] Prevent node from launching as soon as Node instance is created: fixes issues with Node not starting and dashboard hanging on "Starting..." message --- src/node/index.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/node/index.ts b/src/node/index.ts index b5a0e9d..cc46fed 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -23,7 +23,6 @@ export default class Node { constructor(window: BrowserWindow) { this.window = window this.installationLogger = new Logger({ window, channel: 'installer' }) - this.launch() } getURL(filename: string, version: string) { @@ -169,15 +168,15 @@ export default class Node { const nodeProcess = spawn(cmd) - nodeProcess.stdout.on('data', (data) => { + nodeProcess.stdout.on('data', data => { logger.info(`Launched Node: ${data}`) }) - nodeProcess.stderr.on('data', (data) => { + nodeProcess.stderr.on('data', data => { logger.info(`pointnode launch exec error: ${data}`) }) - nodeProcess.on('close', (code) => { + nodeProcess.on('close', code => { logger.info(`pointnode closed. code ${code}`) }) @@ -249,7 +248,10 @@ export default class Node { const pointPath = helpers.getPointPath() const installedVersion = helpers.getInstalledNodeVersion() const lastCheck = moment.unix(installedVersion.lastCheck) - if (moment().diff(lastCheck, 'hours') >= 1 || installedVersion.lastCheck === undefined) { + if ( + moment().diff(lastCheck, 'hours') >= 1 || + installedVersion.lastCheck === undefined + ) { const latestReleaseVersion = await helpers.getlatestNodeReleaseVersion() logger.info('installed', installedVersion.installedReleaseVersion) From e7e5948b5fd01a668a6d20debe89ee52a9deb0f8 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Tue, 14 Jun 2022 17:26:16 +0530 Subject: [PATCH 09/15] Create the Autoupdater --- src/autoupdater/index.ts | 239 +++++++++++++++++++++++++++++++++++++++ src/autoupdater/types.ts | 58 ++++++++++ 2 files changed, 297 insertions(+) create mode 100644 src/autoupdater/index.ts create mode 100644 src/autoupdater/types.ts diff --git a/src/autoupdater/index.ts b/src/autoupdater/index.ts new file mode 100644 index 0000000..fb881d4 --- /dev/null +++ b/src/autoupdater/index.ts @@ -0,0 +1,239 @@ +import { autoUpdater, BrowserWindow, app } from 'electron' +import axios from 'axios' +import path from 'node:path' +import Logger from '../../shared/logger' +import { gte as semverGte, rcompare as semverCompare } from 'semver' +import { GithubRelease, GithubReleaseAsset } from './types' +import fs from 'node:fs' + +export default class AutoUpdater { + private window: BrowserWindow + private baseUrl: string = 'https://api.github.com' + private owner: string = 'pointnetwork' + private repo: string = 'pointnetwork-dashboard' + private logger: Logger + private currentVersion: string + private feedUrl: string + private downloadsDirectory = path.join( + app.getPath('temp'), + app.getName(), + 'updates', + 'downloads' + ) + + constructor({ window }: { window: BrowserWindow }) { + this.window = window + this.logger = new Logger() + this.currentVersion = app.getVersion() + this.feedUrl = '' + if (global.platform.win32) { + this.feedUrl = this.downloadsDirectory + } + if (global.platform.darwin) { + this.feedUrl = path.join(this.downloadsDirectory, 'feed.json') + } + } + + getLatestRelease: () => Promise = () => + // eslint-disable-next-line no-async-promise-executor + new Promise(async (resolve, reject) => { + try { + this.logger.info('[autoUpdater]:', 'Getting latest release from GitHub') + const response = await axios.get( + `${this.baseUrl}/repos/${this.owner}/${this.repo}/releases?per_page=100` + ) + const releases: GithubRelease[] = response.data.filter( + (release: GithubRelease) => !release.draft + ) + + if (releases.length === 0) { + throw new Error('No releases found') + } + + releases + .map(f => f.name.replace('Release v', '')) + .filter(f => f.match(/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/g)) + .sort((a, b) => semverCompare(a, b)) + + const matchedRelease: GithubRelease | undefined = releases.find( + release => !release.prerelease + ) + if (!matchedRelease) + throw new Error('No non-preproduction releases found') + + this.logger.info( + '[autoUpdater]:', + 'Latest release from GitHub', + matchedRelease.tag_name + ) + resolve(matchedRelease) + } catch (error: any) { + this.logger.error('[autoUpdater]:', 'Error: ', error) + reject(new Error(error)) + } + }) + + downloadUpdateFromRelease: (release: GithubRelease) => Promise = + release => + // eslint-disable-next-line no-async-promise-executor + new Promise(async (resolve, reject) => { + this.logger.info( + '[autoUpdater]:', + 'Downloading the release', + release.tag_name + ) + + try { + let requiredFiles: string[] | RegExp[] = [] + if (global.platform.win32) + requiredFiles = [/[^ ]*-full\.nupkg/gim, /RELEASES/] + + if (global.platform.darwin) + requiredFiles = [/[^ ]*\.zip/gim, /feed.json/] + // Find the required files in the release + this.logger.info('[autoUpdater]:', 'Checking for required files') + const assets = requiredFiles.map(filePattern => { + const match = release.assets.find(asset => + asset.name.match(filePattern) + ) + if (!match) + throw new Error( + `Release is missing a required update file for current platform (${global.platform})` + ) + else { + this.logger.info( + '[autoUpdater]:', + 'Required file found', + match.name + ) + return match + } + }) + + // Set variables to track download progress, including calculating the total download size + const totalSize = assets.reduce( + (prev, asset) => (prev += asset.size), + 0 + ) + let downloaded = 0 + let lastEmitPercent = -1 + + const downloadFile = (asset: GithubReleaseAsset) => { + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve, reject) => { + this.logger.info( + '[autoUpdater]:', + 'Starting to download asset', + asset.name + ) + + const outputPath = path.join(this.downloadsDirectory, asset.name) + const assetUrl = `${this.baseUrl}/repos/${this.owner}/${this.repo}/releases/assets/${asset.id}` + + const { data } = await axios.get(assetUrl, { + headers: { + Accept: 'application/octet-stream', + }, + responseType: 'stream', + }) + + const writer = fs.createWriteStream(outputPath) + + // Emit a progress event when a chunk is downloaded + data.on('data', (chunk: Buffer) => { + downloaded += chunk.length + const percent = Math.round((downloaded * 100) / totalSize) + + if (percent > lastEmitPercent) { + this.logger.info( + '[autoUpdater]:', + 'Downloading asset', + asset.name, + percent.toString(), + '%' + ) + this.window.webContents.send( + 'autoupdater:downloading', + percent + ) + lastEmitPercent = percent + } + }) + + // Pipe data into a writer to save it to the disk rather than keeping it in memory + data.pipe(writer) + + data.on('end', () => { + this.logger.info( + '[autoUpdater]:', + 'Downloaded asset', + release.name + ) + writer.end() + }) + writer.on('finish', () => { + resolve(true) + }) + }) + } + + for await (const asset of assets) { + await downloadFile(asset) + } + + this.window.webContents.send('autoupdater:downloaded') + resolve() + } catch (error: any) { + this.logger.error('[autoUpdater]:', 'Error: ', error) + reject(new Error(error)) + } + }) + + checkForUpdates = () => + new Promise( + // eslint-disable-next-line no-async-promise-executor + async (resolve, reject) => { + try { + this.logger.info('[autoUpdater]:', 'Checking for updates') + const latestRelease = await this.getLatestRelease() + const latestVersion = latestRelease.tag_name + + if (semverGte(this.currentVersion, latestVersion)) { + this.logger.info('[autoUpdater]:', 'Already upto date') + return this.window.webContents.send('autoupdater:up-to-date') + } else { + await this.downloadUpdateFromRelease(latestRelease) + autoUpdater.setFeedURL({ url: this.feedUrl }) + this.logger.info( + `[autoUpdater]: Calling electron autoUpdater's checkForUpdates()` + ) + autoUpdater.checkForUpdates() + + autoUpdater.on('update-downloaded', () => { + this.logger.info( + `[autoUpdater]: Electron autoUpdater's "update-downloaded" event. Calling electron autoUpdater's quitAndInstall()` + ) + this.window.webContents.send('autoupdater:updating') + autoUpdater.quitAndInstall() + }) + autoUpdater.on('before-quit-for-update', () => { + this.logger.info( + `[autoUpdater]: Electron autoUpdater's "before-quit-for-update" event. Called electron autoUpdater's quitAndInstall()` + ) + }) + autoUpdater.on('error', error => { + this.logger.info( + `[autoUpdater]: Electron autoUpdater's "error" event.` + ) + throw error + }) + } + resolve(0) + } catch (error: any) { + this.window.webContents.send('autoupdater:error') + this.logger.error('[autoUpdater]: Error', error) + reject(new Error(error)) + } + } + ) +} diff --git a/src/autoupdater/types.ts b/src/autoupdater/types.ts new file mode 100644 index 0000000..44195a0 --- /dev/null +++ b/src/autoupdater/types.ts @@ -0,0 +1,58 @@ +/* eslint-disable camelcase */ +export interface GithubReleaseAssetAuthor { + login: string + id: number + node_id: string + avatar_url: string + gravatar_id: string + url: string + html_url: string + followers_url: string + following_url: string + gists_url: string + starred_url: string + subscriptions_url: string + organizations_url: string + repos_url: string + events_url: string + received_events_url: string + type: string + site_admin: boolean +} + +export interface GithubReleaseAsset { + url: string + id: number + node_id: string + name: string + label?: any + uploader: GithubReleaseAssetAuthor + content_type: string + state: string + size: number + download_count: number + created_at: string + updated_at: string + browser_download_url: string +} + +export interface GithubRelease { + url: string + assets_url: string + upload_url: string + html_url: string + id: number + node_id: string + tag_name: string + target_commitish: string + name: string + draft: boolean + author: GithubReleaseAssetAuthor + prerelease: boolean + created_at: string + published_at: string + assets: GithubReleaseAsset[] + tarball_url: string + zipball_url: string + body: string +} From 949ec127de21b8d04602a450e24db02511b2a998 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Tue, 14 Jun 2022 17:28:01 +0530 Subject: [PATCH 10/15] Remove the test autoupdate implementation and wire up the IPC methods to call for updates --- src/dashboard/bridge.ts | 8 +- src/dashboard/index.ts | 216 +--------------------------------------- 2 files changed, 7 insertions(+), 217 deletions(-) diff --git a/src/dashboard/bridge.ts b/src/dashboard/bridge.ts index 8fd9f95..8c8683a 100644 --- a/src/dashboard/bridge.ts +++ b/src/dashboard/bridge.ts @@ -40,9 +40,6 @@ export const api = { getIdentifier: () => { ipcRenderer.send('dashboard:getIdentifier') }, - isNewDashboardReleaseAvailable: () => { - ipcRenderer.send('dashboard:isNewDashboardReleaseAvailable') - }, changeFirefoxStatus: (isRunning: boolean) => { ipcRenderer.send('firefox:status', isRunning) }, @@ -63,9 +60,6 @@ export const api = { getNodeVersion: (): string => { return ipcRenderer.sendSync('node:getVersion') }, - openDashboardDownloadLink: (url: string) => { - ipcRenderer.send('dashboard:openDownloadLink', url) - }, sendBountyRequest: () => { ipcRenderer.send('dashboard:bounty_request') }, @@ -75,6 +69,8 @@ export const api = { closeWindow: () => { ipcRenderer.send(`dashboard:closeWindow`) }, + checkForDashboardUpdates: () => + ipcRenderer.send('autoupdater:check_for_updates'), on: (channel: string, callback: Function) => { ipcRenderer.on(channel, (_, data) => callback(data)) diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index a4e4c08..ece6f27 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -1,11 +1,4 @@ -import { - app, - BrowserWindow, - ipcMain, - dialog, - IpcMainEvent, - shell, -} from 'electron' +import { app, BrowserWindow, ipcMain, dialog, IpcMainEvent } from 'electron' import Firefox from '../firefox' import Node from '../node' import helpers from '../../shared/helpers' @@ -16,177 +9,12 @@ import Logger from '../../shared/logger' import Uninstaller from '../uninstaller' import { readFileSync, writeFileSync } from 'fs-extra' import process from 'node:process' -import { autoUpdater } from 'electron-github-autoupdater' -import { rcompare as semverCompare } from 'semver' -import { - GithubRelease, - GithubReleaseAsset, -} from 'electron-github-autoupdater/dist/types' -import fs from 'node:fs' - -// @ts-ignore -// ;(() => { -// // eslint-disable-next-line no-useless-return -// if (require('electron-squirrel-startup')) return -// })() - -let isUpdateAvailable = false +import AutoUpdater from '../autoupdater' const path = require('path') const logger = new Logger() -// ===================== AutoUpdater ===================== -const updater = autoUpdater({ - owner: 'pointnetwork', - repo: 'pointnetwork-dashboard', - accessToken: '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', - // Remove this later on after testing - allowPrerelease: true, -}) - -updater.getLatestRelease = async () => { - logger.info('[autoUpdater] Getting releases from GitHub') - const response = await axios.get( - `${updater.baseUrl}/repos/${updater.owner}/${updater.repo}/releases?per_page=100`, - { - headers: updater._headers, - } - ) - const releases: GithubRelease[] = response.data.filter( - (release: GithubRelease) => !release.draft - ) - - if (releases.length === 0) { - throw new Error('No releases found') - } - - releases - .map(f => f.name.replace('Release v', '')) - .filter(f => f.match(/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/g)) - .sort((a, b) => semverCompare(a, b)) - - if (updater.allowPrerelease) { - updater.latestRelease = releases[0] - return releases[0] - } else { - const matchedRelease: GithubRelease | undefined = releases.find( - release => !release.prerelease - ) - if (!matchedRelease) throw new Error('No non-preproduction releases found') - updater.latestRelease = matchedRelease - - logger.info('[autoUpdater] Matched release', matchedRelease.name) - return matchedRelease - } -} - -updater.downloadUpdateFromRelease = async (release: GithubRelease) => { - logger.info('[autoUpdater] Checking if able to download the release') - try { - // Find the required files in the release - const assets = updater.platformConfig.requiredFiles.map(filePattern => { - const match = release.assets.find(asset => asset.name.match(filePattern)) - if (!match) - throw new Error( - `Release is missing a required update file for current platform (${global.platform})` - ) - else return match - }) - - logger.info('[autoUpdater] Able to download') - // Set variables to track download progress, including calculating the total download size - const totalSize = assets.reduce((prev, asset) => (prev += asset.size), 0) - let downloaded = 0 - let lastEmitPercent = -1 - - const downloadFile = (asset: GithubReleaseAsset) => { - return new Promise(async (resolve, reject) => { - const outputPath = path.join(updater.downloadsDirectory, asset.name) - const assetUrl = `${updater.baseUrl}/repos/${updater.owner}/${updater.repo}/releases/assets/${asset.id}` - - const { data } = await axios.get(assetUrl, { - headers: { - ...updater._headers, - Accept: 'application/octet-stream', - }, - responseType: 'stream', - }) - - const writer = fs.createWriteStream(outputPath) - - // Emit a progress event when a chunk is downloaded - data.on('data', (chunk: Buffer) => { - downloaded += chunk.length - const percent = Math.round((downloaded * 100) / totalSize) - - // Only emit once the value is greater, to prevent TONS of IPC events - if (percent > lastEmitPercent) { - updater.emit('update-downloading', { - downloadStatus: { - size: totalSize, - progress: downloaded, - percent: Math.round((downloaded * 100) / totalSize), - }, - releaseName: release.name, - releaseNotes: release.body || '', - releaseDate: new Date(release.published_at), - updateUrl: release.html_url, - }) - - lastEmitPercent = percent - } - }) - - // Pipe data into a writer to save it to the disk rather than keeping it in memory - data.pipe(writer) - - data.on('end', () => { - resolve(true) - }) - }) - } - - for await (const asset of assets) { - await downloadFile(asset) - } - - fs.writeFileSync(updater.cacheFilePath, release.id.toString(), { - encoding: 'utf-8', - }) - } catch (e) { - updater._emitError(e) - } -} - -updater.on('error', err => { - logger.error('[autoUpdater]: Error in auto-updater.', err) -}) -updater.on('checking-for-update', () => { - logger.info('[autoUpdater]: Checking for update...') -}) -updater.on('update-downloading', info => { - isUpdateAvailable = true - logger.info( - '[autoUpdater]: Update downloading.', - `${info.downloadStatus.percent}%` - ) -}) -updater.on('update-available', info => { - isUpdateAvailable = true - logger.info('[autoUpdater]: Update available.', info) -}) -updater.on('update-not-available', info => { - logger.info('[autoUpdater]: Update not available.', info) -}) -updater.on('before-quit-for-update', info => { - logger.info('[autoUpdater]: before-quit-for-update', info) -}) -updater.on('update-downloaded', info => { - isUpdateAvailable = true - logger.info('[autoUpdater]: Update downloaded.') -}) - let mainWindow: BrowserWindow | null let node: Node | null let uninstaller: Uninstaller | null @@ -317,9 +145,6 @@ export default function (isExplicitRun = false) { try { await Promise.all([firefox?.close(), Node.stopNode()]) - if (isUpdateAvailable) { - updater.quitAndInstall() - } } catch (err) { logger.error('[dashboard:index.ts] Error in `close` handler', err) } finally { @@ -329,6 +154,7 @@ export default function (isExplicitRun = false) { }) mainWindow.on('closed', () => { + logger.info('[mainWindow]: Closed event') node = null firefox = null mainWindow = null @@ -439,25 +265,6 @@ export default function (isExplicitRun = false) { node!.getIdentity() }, }, - { - channel: 'dashboard:openDownloadLink', - listener(event: IpcMainEvent, url: string) { - try { - shell.openExternal(url) - } catch (error) { - logger.error(error) - } - }, - }, - { - channel: 'dashboard:isNewDashboardReleaseAvailable', - async listener() { - mainWindow!.webContents.send( - 'dashboard:isNewDashboardReleaseAvailable', - await helpers.isNewDashboardReleaseAvailable() - ) - }, - }, { channel: 'node:getDashboardVersion', listener() { @@ -623,9 +430,9 @@ export default function (isExplicitRun = false) { }, }, { - channel: `dashboard:minimizeWindow`, + channel: 'autoupdater:check_for_updates', listener() { - mainWindow!.minimize() + new AutoUpdater({ window: mainWindow! }).checkForUpdates() }, }, { @@ -659,19 +466,6 @@ export default function (isExplicitRun = false) { .on('ready', createWindow) .whenReady() .then(registerListeners) - .then(() => - setTimeout(async function () { - logger.info('[autoUpdater] Starting update check') - try { - // await updater.downloadUpdateFromRelease( - // await updater.getLatestRelease() - // ) - updater.checkForUpdates() - } catch (error) { - logger.error('Unable to check for updates', error) - } - }, 1000) - ) .catch(e => logger.error(e)) app.on('window-all-closed', () => { From f15bbbf630cf5af14498440d49a32031a6326463 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Tue, 14 Jun 2022 17:28:34 +0530 Subject: [PATCH 11/15] Remove the previous update alert and create a new dialog to handle update process --- src/dashboard/ui/App.tsx | 157 +++++++++--------- .../ui/components/DashboardUpdateAlert.tsx | 56 ------- .../ui/components/DashboardUpdateDialog.tsx | 87 ++++++++++ 3 files changed, 169 insertions(+), 131 deletions(-) delete mode 100644 src/dashboard/ui/components/DashboardUpdateAlert.tsx create mode 100644 src/dashboard/ui/components/DashboardUpdateDialog.tsx diff --git a/src/dashboard/ui/App.tsx b/src/dashboard/ui/App.tsx index f1dace9..599dd6b 100644 --- a/src/dashboard/ui/App.tsx +++ b/src/dashboard/ui/App.tsx @@ -1,6 +1,7 @@ import { MouseEventHandler, useEffect, useState, useRef } from 'react' // Material UI import Box from '@mui/material/Box' +import Typography from '@mui/material/Typography' import UIThemeProvider from '../../../shared/UIThemeProvider' // Icons import { ReactComponent as FirefoxLogo } from '../../../assets/firefox-logo.svg' @@ -8,12 +9,11 @@ import { ReactComponent as PointLogo } from '../../../assets/point-logo.svg' // Components import TopBar from './components/TopBar' import ResourceItemCard from './components/ResourceItemCard' -import DashboardUpdateAlert from './components/DashboardUpdateAlert' import DashboardTitle from './components/DashboardTitle' import WalletInfo from './components/WalletInfo' import UpdateProgress from './components/UpdateProgress' import DefaultLoader from './components/DefaultLoader' -import Typography from '@mui/material/Typography' +import DashboardUpdateDialog from './components/DashboardUpdateDialog' export default function App() { const [isLoading, setIsLoading] = useState(true) @@ -21,6 +21,7 @@ export default function App() { 'Checking for updates' ) // Update state variables + const [isDashboardUpdating, setIsDashboardUpdating] = useState(true) const [isNodeUpdating, setIsNodeUpdating] = useState(true) const [isFirefoxUpdating, setIsFirefoxUpdating] = useState(true) const [isSdkUpdating, setIsSdkUpdating] = useState(true) @@ -51,92 +52,94 @@ export default function App() { const [identifier, setIdentifier] = useState('') useEffect(() => { - setIsLoading(true) + if (!isDashboardUpdating) { + setIsLoading(true) - // Check for updates - window.Dashboard.checkUpdate() - window.Dashboard.checkUnistaller() + // Check for updates + window.Dashboard.checkUpdate() + window.Dashboard.checkUnistaller() - window.Dashboard.on('uninstaller:check', (status: boolean) => { - setUninstallerUpt(status) - }) + window.Dashboard.on('uninstaller:check', (status: boolean) => { + setUninstallerUpt(status) + }) - window.Dashboard.on('node:update', (status: boolean) => { - setIsNodeUpdating(status) - if (status) { - window.Dashboard.DownloadNode() - window.Dashboard.on('installer:log', ([msg]: string[]) => { - if (msg.includes('POINT_NODE:')) { - setNodeUpdateProgress(Number(msg.replace('POINT_NODE:', ''))) - } - }) - } - }) + window.Dashboard.on('node:update', (status: boolean) => { + setIsNodeUpdating(status) + if (status) { + window.Dashboard.DownloadNode() + window.Dashboard.on('installer:log', ([msg]: string[]) => { + if (msg.includes('POINT_NODE:')) { + setNodeUpdateProgress(Number(msg.replace('POINT_NODE:', ''))) + } + }) + } + }) - window.Dashboard.on('firefox:update', (status: boolean) => { - setIsFirefoxUpdating(status) - if (status) { - window.Dashboard.DownloadFirefox() - window.Dashboard.on('installer:log', ([msg]: string[]) => { - if (msg.includes('BROWSER:')) { - setFirefoxUpdateProgress(Number(msg.replace('BROWSER:', ''))) - } - }) - } - }) + window.Dashboard.on('firefox:update', (status: boolean) => { + setIsFirefoxUpdating(status) + if (status) { + window.Dashboard.DownloadFirefox() + window.Dashboard.on('installer:log', ([msg]: string[]) => { + if (msg.includes('BROWSER:')) { + setFirefoxUpdateProgress(Number(msg.replace('BROWSER:', ''))) + } + }) + } + }) - window.Dashboard.on('sdk:update', (status: boolean) => { - setIsSdkUpdating(status) - }) + window.Dashboard.on('sdk:update', (status: boolean) => { + setIsSdkUpdating(status) + }) - // Check if updates have finished downloading - window.Dashboard.on('pointNode:finishDownload', () => { - setIsNodeUpdating(false) - }) + // Check if updates have finished downloading + window.Dashboard.on('pointNode:finishDownload', () => { + setIsNodeUpdating(false) + }) - window.Dashboard.on('pointSDK:finishDownload', () => { - setIsSdkUpdating(false) - }) + window.Dashboard.on('pointSDK:finishDownload', () => { + setIsSdkUpdating(false) + }) - window.Dashboard.on('firefox:finishDownload', () => { - setIsFirefoxUpdating(false) - }) + window.Dashboard.on('firefox:finishDownload', () => { + setIsFirefoxUpdating(false) + }) - // Get the versions - window.Dashboard.getDashboardVersion() + // Get the versions + window.Dashboard.getDashboardVersion() - window.Dashboard.on('firefox:setVersion', (firefoxVersion: string) => { - setFirefoxVersion(firefoxVersion) - }) + window.Dashboard.on('firefox:setVersion', (firefoxVersion: string) => { + setFirefoxVersion(firefoxVersion) + }) - window.Dashboard.on('node:identity', (identity: string) => { - setIdentity(identity) - if (!identity) { - window.Dashboard.sendBountyRequest() - } - }) + window.Dashboard.on('node:identity', (identity: string) => { + setIdentity(identity) + if (!identity) { + window.Dashboard.sendBountyRequest() + } + }) - window.Dashboard.on('firefox:active', (status: boolean) => { - setIsFirefoxRunning(status) - window.Dashboard.changeFirefoxStatus(status) - window.Dashboard.getIdentity() - }) + window.Dashboard.on('firefox:active', (status: boolean) => { + setIsFirefoxRunning(status) + window.Dashboard.changeFirefoxStatus(status) + window.Dashboard.getIdentity() + }) - window.Dashboard.on('node:wallet_info', (message: string) => { - setWalletInfo(JSON.parse(message)) - setIsLoadingWalletInfo(false) - }) + window.Dashboard.on('node:wallet_info', (message: string) => { + setWalletInfo(JSON.parse(message)) + setIsLoadingWalletInfo(false) + }) - window.Dashboard.on('dashboard:close', () => { - setLoadingMessage('Closing Dashboard') - setIsLoading(true) - }) + window.Dashboard.on('dashboard:close', () => { + setLoadingMessage('Closing Dashboard') + setIsLoading(true) + }) - window.Dashboard.getIdentifier() - window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => - setIdentifier(identifier) - ) - }, []) + window.Dashboard.getIdentifier() + window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => + setIdentifier(identifier) + ) + } + }, [isDashboardUpdating]) useEffect(() => { if (!isFirefoxUpdating && !isNodeUpdating && !isSdkUpdating) { @@ -160,7 +163,8 @@ export default function App() { !isRunning && new Date().getTime() - checkStartTime.current < 120000 ) { - setTimeout(checkNode, 1000) + setTimeout(window.Dashboard.launchNode, 5000) + setTimeout(checkNode, 10000) } else { console.error('Failed to start node in 2 minutes') setIsLoading(false) @@ -233,7 +237,10 @@ export default function App() { - + { - const [showAlert, setShowAlert] = useState(false) - const [status, setStatus] = useState<{ - isUpdateAvailable: boolean - latestVersion: string - }>({ - isUpdateAvailable: false, - latestVersion: '', - }) - - useEffect(() => { - window.Dashboard.on( - 'dashboard:isNewDashboardReleaseAvailable', - (message: { isUpdateAvailable: boolean; latestVersion: string }) => { - setStatus(message) - if (message.isUpdateAvailable) setShowAlert(true) - } - ) - window.Dashboard.isNewDashboardReleaseAvailable() - }, []) - - const openDonwloadLink: ReactEventHandler = () => { - window.Dashboard.openDashboardDownloadLink( - `https://pointnetwork.io/download` - ) - } - - const handleCloseAlert: ReactEventHandler = () => { - setShowAlert(false) - // Alerts the user once again after 2 mins if they close the alert without updating - setTimeout(window.Dashboard.isNewDashboardReleaseAvailable, 120000) - } - - if (!status.isUpdateAvailable) return null - - return showAlert ? ( - - New Update Available - Click{' '} - - here - {' '} - to download the latest version - - ) : null -} - -export default DashboardUpdateAlert diff --git a/src/dashboard/ui/components/DashboardUpdateDialog.tsx b/src/dashboard/ui/components/DashboardUpdateDialog.tsx new file mode 100644 index 0000000..bbdf71d --- /dev/null +++ b/src/dashboard/ui/components/DashboardUpdateDialog.tsx @@ -0,0 +1,87 @@ +import { Dispatch, SetStateAction, useEffect, useState } from 'react' +// MUI +import Box from '@mui/material/Box' +import CircularProgress from '@mui/material/CircularProgress' +import Dialog from '@mui/material/Dialog' +import Typography from '@mui/material/Typography' +// Icons +import CheckCircleIcon from '@mui/icons-material/CheckCircle' +import ErrorIcon from '@mui/icons-material/Error' + +// eslint-disable-next-line no-unused-vars +enum Messages { + _1 = 'Checking for updates', + _2 = 'Downloading update', + _3 = 'Update downloaded. Unpacking the updates', + _4 = 'Applying update and restarting', + _5 = 'Error updating the app. Will retry updating on next startup', + _6 = 'Already up to date', +} + +const DashboardUpdateDialog = ({ + open, + setOpen, +}: { + open: boolean + setOpen: Dispatch> +}) => { + const [title, setTitle] = useState(Messages._1) + const [percent, setPercent] = useState('0') + + useEffect(() => { + window.Dashboard.on('autoupdater:up-to-date', () => { + setTitle(Messages._6) + setOpen(false) + }) + window.Dashboard.on('autoupdater:error', () => { + setTitle(Messages._5) + setTimeout(() => { + setOpen(false) + }, 3000) + }) + window.Dashboard.on('autoupdater:downloading', (percent: string) => { + setPercent(percent) + setTitle(`${Messages._2}...${percent}%`) + }) + window.Dashboard.on('autoupdater:downloaded', () => setTitle(Messages._3)) + window.Dashboard.on('autoupdater:updating', () => setTitle(Messages._4)) + window.Dashboard.checkForDashboardUpdates() + }, []) + + return ( + + + + {(title.includes(Messages._1) || title.includes(Messages._4)) && ( + + )} + {title.includes(Messages._2) && ( + + )} + {(title.includes(Messages._3) || title.includes(Messages._6)) && ( + + )} + {title.includes(Messages._5) && ( + + )} + + {title}... + + + + + ) +} + +export default DashboardUpdateDialog From 082bee5306d724dc3a144294373f051258a2036f Mon Sep 17 00:00:00 2001 From: Jatin Bumbra <56374584+JatinBumbra@users.noreply.github.com> Date: Tue, 14 Jun 2022 19:46:08 +0530 Subject: [PATCH 12/15] Update App.tsx Add the missing curly brace --- src/dashboard/ui/App.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dashboard/ui/App.tsx b/src/dashboard/ui/App.tsx index 4e21faa..ce8c44e 100644 --- a/src/dashboard/ui/App.tsx +++ b/src/dashboard/ui/App.tsx @@ -149,6 +149,7 @@ export default function App() { window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => setIdentifier(identifier) ) + } }, [isDashboardUpdating]) useEffect(() => { From db15cf52b95035a41f44dc0fbe09d14d3ba337c4 Mon Sep 17 00:00:00 2001 From: Amaury Hernandez-Aguila Date: Tue, 14 Jun 2022 21:34:50 -0700 Subject: [PATCH 13/15] No triggering releases for any git-push. --- .github/workflows/electron-builder.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/electron-builder.yml b/.github/workflows/electron-builder.yml index 200b074..0c51705 100644 --- a/.github/workflows/electron-builder.yml +++ b/.github/workflows/electron-builder.yml @@ -1,8 +1,8 @@ name: Build on: push: - # tags: - # - 'v*' + tags: + - 'v*' jobs: create_release: From 3e3f3e73b84780fa7ce20ca219175d5325a50d15 Mon Sep 17 00:00:00 2001 From: JatinBumbra Date: Wed, 15 Jun 2022 12:12:00 +0530 Subject: [PATCH 14/15] Make a separate Alert for linux to notify the user when an update is available --- src/autoupdater/index.ts | 3 ++ src/dashboard/bridge.ts | 2 + src/dashboard/index.ts | 17 +++++- src/dashboard/ui/App.tsx | 31 ++++++----- .../DashboardUpdateAlertForLinux.tsx | 54 +++++++++++++++++++ .../ui/components/DashboardUpdateDialog.tsx | 1 + 6 files changed, 93 insertions(+), 15 deletions(-) create mode 100644 src/dashboard/ui/components/DashboardUpdateAlertForLinux.tsx diff --git a/src/autoupdater/index.ts b/src/autoupdater/index.ts index fb881d4..e66e046 100644 --- a/src/autoupdater/index.ts +++ b/src/autoupdater/index.ts @@ -202,6 +202,9 @@ export default class AutoUpdater { this.logger.info('[autoUpdater]:', 'Already upto date') return this.window.webContents.send('autoupdater:up-to-date') } else { + if (global.platform.linux) + resolve(this.window.webContents.send('autoupdater:linux-update')) + await this.downloadUpdateFromRelease(latestRelease) autoUpdater.setFeedURL({ url: this.feedUrl }) this.logger.info( diff --git a/src/dashboard/bridge.ts b/src/dashboard/bridge.ts index 8c8683a..58420a4 100644 --- a/src/dashboard/bridge.ts +++ b/src/dashboard/bridge.ts @@ -71,6 +71,8 @@ export const api = { }, checkForDashboardUpdates: () => ipcRenderer.send('autoupdater:check_for_updates'), + openDashboardDownloadLink: (link: string) => + ipcRenderer.send('dashboard:open_url', link), on: (channel: string, callback: Function) => { ipcRenderer.on(channel, (_, data) => callback(data)) diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index 0eaadc7..c411c73 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -1,4 +1,12 @@ -import { app, BrowserWindow, ipcMain, dialog, IpcMainEvent } from 'electron' +import { + app, + BrowserWindow, + ipcMain, + dialog, + IpcMainEvent, + shell, + Event, +} from 'electron' import Firefox from '../firefox' import Node from '../node' import helpers from '../../shared/helpers' @@ -444,6 +452,13 @@ export default function (isExplicitRun = false) { new AutoUpdater({ window: mainWindow! }).checkForUpdates() }, }, + { + channel: 'dashboard:open_url', + listener(ev: Event, link: string) { + logger.info('[dashboard:open_url] Opening download URL', link) + shell.openExternal(link) + }, + }, { channel: `dashboard:closeWindow`, listener() { diff --git a/src/dashboard/ui/App.tsx b/src/dashboard/ui/App.tsx index ce8c44e..c76ff7b 100644 --- a/src/dashboard/ui/App.tsx +++ b/src/dashboard/ui/App.tsx @@ -15,6 +15,7 @@ import UpdateProgress from './components/UpdateProgress' import DefaultLoader from './components/DefaultLoader' import DashboardUpdateDialog from './components/DashboardUpdateDialog' import NodeRestartAlert from './components/NodeRestartAlert' +import DashboardUpdateAlertForLinux from './components/DashboardUpdateAlertForLinux' export default function App() { const [isLoading, setIsLoading] = useState(true) @@ -135,20 +136,20 @@ export default function App() { setIsLoading(true) }) - window.Dashboard.on('dashboard:launch_uninstaller', (status: boolean) => { - if (status) { - setLoadingMessage('Launching Uninstaller') - setIsLoading(true) - } else { - setLoadingMessage('') - setIsLoading(false) - } - }) - - window.Dashboard.getIdentifier() - window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => - setIdentifier(identifier) - ) + window.Dashboard.on('dashboard:launch_uninstaller', (status: boolean) => { + if (status) { + setLoadingMessage('Launching Uninstaller') + setIsLoading(true) + } else { + setLoadingMessage('') + setIsLoading(false) + } + }) + + window.Dashboard.getIdentifier() + window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => + setIdentifier(identifier) + ) } }, [isDashboardUpdating]) @@ -247,11 +248,13 @@ export default function App() { {identifier} + + { + const [showAlert, setShowAlert] = useState(false) + + useEffect(() => { + window.Dashboard.on('autoupdater:linux-update', () => { + setTimeout(() => setShowAlert(true), 1000) + }) + }, []) + + const handleCloseAlert: ReactEventHandler = () => { + setShowAlert(false) + setTimeout(() => setShowAlert(true), 120000) + } + + return showAlert ? ( + + New Update is available. + + + Click{' '} + + window.Dashboard.openDashboardDownloadLink( + 'https://github.com/pointnetwork/pointnetwork-dashboard/releases/latest' + ) + } + > + here + {' '} + to download the latest version of Point + + + + ) : null +} + +export default DashboardUpdateAlertForLinux diff --git a/src/dashboard/ui/components/DashboardUpdateDialog.tsx b/src/dashboard/ui/components/DashboardUpdateDialog.tsx index bbdf71d..ebedceb 100644 --- a/src/dashboard/ui/components/DashboardUpdateDialog.tsx +++ b/src/dashboard/ui/components/DashboardUpdateDialog.tsx @@ -45,6 +45,7 @@ const DashboardUpdateDialog = ({ }) window.Dashboard.on('autoupdater:downloaded', () => setTitle(Messages._3)) window.Dashboard.on('autoupdater:updating', () => setTitle(Messages._4)) + window.Dashboard.on('autoupdater:linux-update', () => setOpen(false)) window.Dashboard.checkForDashboardUpdates() }, []) From 648ece3e767885b4568198b9a362444e8c472fe6 Mon Sep 17 00:00:00 2001 From: Amaury Hernandez-Aguila Date: Wed, 15 Jun 2022 01:18:35 -0700 Subject: [PATCH 15/15] Triggering build. --- .github/workflows/electron-builder.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/electron-builder.yml b/.github/workflows/electron-builder.yml index 0c51705..200b074 100644 --- a/.github/workflows/electron-builder.yml +++ b/.github/workflows/electron-builder.yml @@ -1,8 +1,8 @@ name: Build on: push: - tags: - - 'v*' + # tags: + # - 'v*' jobs: create_release: