diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 9e975e1..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Build/release - -on: push - -jobs: - release: - runs-on: ${{ matrix.os }} - - strategy: - matrix: - os: [macos-latest, ubuntu-latest, windows-latest] - - steps: - - name: Check out Git repository - uses: actions/checkout@v1 - - - name: Install Node.js, NPM and Yarn - uses: actions/setup-node@v1 - with: - node-version: 16 - - - name: Build/release Electron app - uses: samuelmeuli/action-electron-builder@v1 - with: - # GitHub token, automatically provided to the action - # (No need to define this secret in the repo settings) - github_token: ${{ secrets.github_token }} - # skip npm run build as there's no script like that - skip_build: false - # If the commit is tagged with a version (e.g. "v1.0.0"), - # release the app after building - release: ${{ startsWith(github.ref, 'refs/tags/v') }} #disabled for now as it caused problems (nvm) - - name: Archive production builds - uses: actions/upload-artifact@v2 - with: - name: dist folder - path: dist/** diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 0000000..31354ec --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..a31ede1 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,5 @@ +#!/bin/sh +. "$(dirname $0)/_/husky.sh" + +npm run format +git add -A diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..bac5ad4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,11 @@ +# Some prettier-specific files so it doesn't die. +**/*.png +**/*.ico +LICENSE +.gitignore + +node_modules +out/ +dist +ts-out/ +ts-out \ No newline at end of file diff --git a/README.md b/README.md index dd33b82..dc310fb 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ # How to run/install it? ### Recommended: - Check releases tab for precompiled packages for Linux, Windows and ~~Mac OS~~ (Mac OS is broken see [#48](https://github.com/ArmCord/ArmCord/issues/48)). - + Check releases tab for precompiled packages for Linux, Windows and ~~Mac OS~~ (Mac OS is broken see [#48](https://github.com/ArmCord/ArmCord/issues/48)). Alternatively use our Sourceforge mirror. + Download ArmCord ### AUR Package Armcord is also available on the Arch User Repository (AUR) [here](https://aur.archlinux.org/packages/armcord-bin/). diff --git a/package-lock.json b/package-lock.json index 6904b1a..fed925e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,17 +7,23 @@ "": { "name": "ArmCord", "version": "3.1.0", + "hasInstallScript": true, "license": "OSL-3.0", "dependencies": { + "electron-context-menu": "^3.1.2", "electron-json-storage": "^4.5.0", + "electron-tabs": "^0.15.0", + "glasstron": "^0.1.1", "v8-compile-cache": "^2.3.0" }, "devDependencies": { "@types/electron-json-storage": "^4.5.0", "@types/node": "^14.18.2", "copyfiles": "^2.4.1", - "electron": "^16.0.7", - "electron-builder": "^22.14.5", + "electron": "^17.1.0", + "electron-builder": "^22.14.13", + "husky": "^7.0.4", + "prettier": "^2.5.1", "typescript": "^4.5.4" } }, @@ -206,6 +212,15 @@ "node": ">=6" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -299,6 +314,18 @@ "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -337,7 +364,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -346,7 +372,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -364,9 +389,9 @@ "dev": true }, "node_modules/app-builder-lib": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.14.5.tgz", - "integrity": "sha512-k3VwKP4kpsnUaXoUkm1s4zaSHPHIMFnN4kPMU9yXaKmE1LfHHqBaEah5bXeTAX5V/BC41wFdg8CF5vOjvgy8Rg==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.14.13.tgz", + "integrity": "sha512-SufmrtxU+D0Tn948fjEwAOlCN9757UXLkzzTWXMwZKR/5hisvgqeeBepWfphMIE6OkDGz0fbzEhL1P2Pty4XMg==", "dev": true, "dependencies": { "@develar/schema-utils": "~2.6.5", @@ -375,13 +400,13 @@ "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "chromium-pickle-js": "^0.2.0", "debug": "^4.3.2", "ejs": "^3.1.6", "electron-osx-sign": "^0.5.0", - "electron-publish": "22.14.5", + "electron-publish": "22.14.13", "form-data": "^4.0.0", "fs-extra": "^10.0.0", "hosted-git-info": "^4.0.2", @@ -400,9 +425,9 @@ } }, "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -490,8 +515,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -690,9 +713,9 @@ "dev": true }, "node_modules/builder-util": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.14.5.tgz", - "integrity": "sha512-zqIHDFJwmA7jV7SC9aI+33MWwT2mWoijH+Ol9IntNAwuuRXoS+7XeJwnhLBXOhcDBzXT4kDzHnRk4JKeaygEYA==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.14.13.tgz", + "integrity": "sha512-oePC/qrrUuerhmH5iaCJzPRAKlSBylrhzuAJmRQClTyWnZUv6jbaHh+VoHMbEiE661wrj2S2aV7/bQh12cj1OA==", "dev": true, "dependencies": { "@types/debug": "^4.1.6", @@ -700,11 +723,13 @@ "7zip-bin": "~5.1.1", "app-builder-bin": "3.7.1", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.9.1", + "builder-util-runtime": "8.9.2", "chalk": "^4.1.1", "cross-spawn": "^7.0.3", "debug": "^4.3.2", "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.19", @@ -713,9 +738,9 @@ } }, "node_modules/builder-util-runtime": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz", - "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz", + "integrity": "sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==", "dev": true, "dependencies": { "debug": "^4.3.2", @@ -726,9 +751,9 @@ } }, "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -858,8 +883,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "optional": true, "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -895,7 +918,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -906,8 +928,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colors": { "version": "1.0.3", @@ -1179,14 +1200,14 @@ } }, "node_modules/dmg-builder": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.14.5.tgz", - "integrity": "sha512-1GvFGQE332bvPamcMwZDqWqfWfJTyyDLOsHMcGi0zs+Jh7JOn6/zuBkHJIWHdsj2QJbhzLVyd2/ZqttOKv7I8w==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.14.13.tgz", + "integrity": "sha512-xNOugB6AbIRETeU2uID15sUfjdZZcKdxK8xkFnwIggsM00PJ12JxpLNPTjcRoUnfwj3WrPjilrO64vRMwNItQg==", "dev": true, "dependencies": { - "app-builder-lib": "22.14.5", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "app-builder-lib": "22.14.13", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "fs-extra": "^10.0.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -1196,9 +1217,9 @@ } }, "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -1231,9 +1252,10 @@ } }, "node_modules/dmg-license": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.10.tgz", - "integrity": "sha512-SVeeyiOeinV5JCPHXMdKOgK1YVbak/4+8WL2rBnfqRYpA5FaeFaQnQWb25x628am1w70CbipGDv9S51biph63A==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "deprecated": "Disk image license agreements are deprecated by Apple and will probably be removed in a future macOS release. Discussion at: https://github.com/argv-minus-one/dmg-license/issues/11", "dev": true, "optional": true, "os": [ @@ -1305,9 +1327,9 @@ } }, "node_modules/electron": { - "version": "16.0.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.7.tgz", - "integrity": "sha512-/IMwpBf2svhA1X/7Q58RV+Nn0fvUJsHniG4TizaO7q4iKFYSQ6hBvsLz+cylcZ8hRMKmVy5G1XaMNJID2ah23w==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", + "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -1323,17 +1345,17 @@ } }, "node_modules/electron-builder": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.14.5.tgz", - "integrity": "sha512-N73hSbXFz6Mz5Z6h6C5ly6CB+dUN6k1LuCDJjI8VF47bMXv/QE0HE+Kkb0GPKqTqM7Hsk/yIYX+kHCfSkR5FGg==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.14.13.tgz", + "integrity": "sha512-3fgLxqF2TXVKiUPeg74O4V3l0l3j7ERLazo8sUbRkApw0+4iVAf2BJkHsHMaXiigsgCoEzK/F4/rB5rne/VAnw==", "dev": true, "dependencies": { "@types/yargs": "^17.0.1", - "app-builder-lib": "22.14.5", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "app-builder-lib": "22.14.13", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "chalk": "^4.1.1", - "dmg-builder": "22.14.5", + "dmg-builder": "22.14.13", "fs-extra": "^10.0.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", @@ -1411,6 +1433,40 @@ "node": ">=12" } }, + "node_modules/electron-context-menu": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.1.2.tgz", + "integrity": "sha512-nNzu4w14n7mOR+4cLjRC9cEFqGUsAY76seOm0sw3f4OxEfX/d75m7HYekyp5b+0m7Ixy2KN/Mrljw1zLmpyV2w==", + "dependencies": { + "cli-truncate": "^2.1.0", + "electron-dl": "^3.2.1", + "electron-is-dev": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-dl": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.3.0.tgz", + "integrity": "sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==", + "dependencies": { + "ext-name": "^5.0.0", + "pupa": "^2.0.1", + "unused-filename": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-is-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", + "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/electron-json-storage": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.5.0.tgz", @@ -1473,14 +1529,14 @@ "dev": true }, "node_modules/electron-publish": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.14.5.tgz", - "integrity": "sha512-h+NANRdaA0PqGF15GKvorseWPzh1PXa/zx4I37//PIokW8eKIov8ky23foUSb55ZFWUHGpxQJux7y2NCfBtQeg==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.14.13.tgz", + "integrity": "sha512-0oP3QiNj3e8ewOaEpEJV/o6Zrmy2VarVvZ/bH7kyO/S/aJf9x8vQsKVWpsdmSiZ5DJEHgarFIXrnO0ZQf0P9iQ==", "dev": true, "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "chalk": "^4.1.1", "fs-extra": "^10.0.0", "lazy-val": "^1.0.5", @@ -1488,9 +1544,9 @@ } }, "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -1522,11 +1578,15 @@ "node": ">= 10.0.0" } }, + "node_modules/electron-tabs": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/electron-tabs/-/electron-tabs-0.15.0.tgz", + "integrity": "sha512-pGW5V+V9X1+b2muKndn7xsce6D89D5j7kt0j/+5nX/gwsIAnZ86axJDriOxVP20f8yN4sQkrYdUana3Wi3Ea0w==" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1576,7 +1636,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, "engines": { "node": ">=8" } @@ -1594,6 +1653,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -1718,6 +1800,24 @@ "node": ">=6" } }, + "node_modules/glasstron": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/glasstron/-/glasstron-0.1.1.tgz", + "integrity": "sha512-oLEMQM5wwdAQ44NrXD3wjk+b3dsfQG1XtkLn5pCxQNa3ri1AtWvvzpnhFUd88ZTmguHvkY4c3JKzcPSYaJAKKA==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^4.0.0", + "x11": "^2.3.0" + }, + "funding": { + "url": "https://patreon.com/arytonex" + } + }, + "node_modules/glasstron/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1896,6 +1996,48 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -1999,7 +2141,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -2050,6 +2191,14 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2341,7 +2490,6 @@ "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -2394,6 +2542,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2482,6 +2638,14 @@ "wrappy": "1" } }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -2506,6 +2670,14 @@ "node": ">=8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2570,6 +2742,18 @@ "node": ">=4" } }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2615,7 +2799,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, "dependencies": { "escape-goat": "^2.0.0" }, @@ -2841,8 +3024,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "optional": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -2863,6 +3044,28 @@ "npm": ">= 3.0.0" } }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2911,7 +3114,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2925,7 +3127,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2977,9 +3178,9 @@ } }, "node_modules/temp-file/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -3156,6 +3357,18 @@ "node": ">=8" } }, + "node_modules/unused-filename": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-2.1.0.tgz", + "integrity": "sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==", + "dependencies": { + "modify-filename": "^1.1.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -3336,6 +3549,17 @@ "signal-exit": "^3.0.2" } }, + "node_modules/x11": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/x11/-/x11-2.3.0.tgz", + "integrity": "sha1-vazO3M2sJIL9Vg8FEee/K9nh2/I=", + "dependencies": { + "os-homedir": "^1.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -3554,6 +3778,12 @@ "defer-to-connect": "^1.0.1" } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -3647,6 +3877,15 @@ "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3678,14 +3917,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -3697,9 +3934,9 @@ "dev": true }, "app-builder-lib": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.14.5.tgz", - "integrity": "sha512-k3VwKP4kpsnUaXoUkm1s4zaSHPHIMFnN4kPMU9yXaKmE1LfHHqBaEah5bXeTAX5V/BC41wFdg8CF5vOjvgy8Rg==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.14.13.tgz", + "integrity": "sha512-SufmrtxU+D0Tn948fjEwAOlCN9757UXLkzzTWXMwZKR/5hisvgqeeBepWfphMIE6OkDGz0fbzEhL1P2Pty4XMg==", "dev": true, "requires": { "@develar/schema-utils": "~2.6.5", @@ -3708,13 +3945,13 @@ "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "chromium-pickle-js": "^0.2.0", "debug": "^4.3.2", "ejs": "^3.1.6", "electron-osx-sign": "^0.5.0", - "electron-publish": "22.14.5", + "electron-publish": "22.14.13", "form-data": "^4.0.0", "fs-extra": "^10.0.0", "hosted-git-info": "^4.0.2", @@ -3730,9 +3967,9 @@ }, "dependencies": { "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -3796,9 +4033,7 @@ "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "optional": true + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { "version": "2.6.3", @@ -3944,9 +4179,9 @@ "dev": true }, "builder-util": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.14.5.tgz", - "integrity": "sha512-zqIHDFJwmA7jV7SC9aI+33MWwT2mWoijH+Ol9IntNAwuuRXoS+7XeJwnhLBXOhcDBzXT4kDzHnRk4JKeaygEYA==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.14.13.tgz", + "integrity": "sha512-oePC/qrrUuerhmH5iaCJzPRAKlSBylrhzuAJmRQClTyWnZUv6jbaHh+VoHMbEiE661wrj2S2aV7/bQh12cj1OA==", "dev": true, "requires": { "@types/debug": "^4.1.6", @@ -3954,11 +4189,13 @@ "7zip-bin": "~5.1.1", "app-builder-bin": "3.7.1", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.9.1", + "builder-util-runtime": "8.9.2", "chalk": "^4.1.1", "cross-spawn": "^7.0.3", "debug": "^4.3.2", "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.19", @@ -3967,9 +4204,9 @@ }, "dependencies": { "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -3996,9 +4233,9 @@ } }, "builder-util-runtime": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz", - "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz", + "integrity": "sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==", "dev": true, "requires": { "debug": "^4.3.2", @@ -4075,8 +4312,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "optional": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -4106,7 +4341,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -4114,8 +4348,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colors": { "version": "1.0.3", @@ -4333,14 +4566,14 @@ } }, "dmg-builder": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.14.5.tgz", - "integrity": "sha512-1GvFGQE332bvPamcMwZDqWqfWfJTyyDLOsHMcGi0zs+Jh7JOn6/zuBkHJIWHdsj2QJbhzLVyd2/ZqttOKv7I8w==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.14.13.tgz", + "integrity": "sha512-xNOugB6AbIRETeU2uID15sUfjdZZcKdxK8xkFnwIggsM00PJ12JxpLNPTjcRoUnfwj3WrPjilrO64vRMwNItQg==", "dev": true, "requires": { - "app-builder-lib": "22.14.5", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "app-builder-lib": "22.14.13", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "dmg-license": "^1.0.9", "fs-extra": "^10.0.0", "iconv-lite": "^0.6.2", @@ -4348,9 +4581,9 @@ }, "dependencies": { "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -4377,9 +4610,9 @@ } }, "dmg-license": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.10.tgz", - "integrity": "sha512-SVeeyiOeinV5JCPHXMdKOgK1YVbak/4+8WL2rBnfqRYpA5FaeFaQnQWb25x628am1w70CbipGDv9S51biph63A==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", "dev": true, "optional": true, "requires": { @@ -4430,9 +4663,9 @@ } }, "electron": { - "version": "16.0.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.7.tgz", - "integrity": "sha512-/IMwpBf2svhA1X/7Q58RV+Nn0fvUJsHniG4TizaO7q4iKFYSQ6hBvsLz+cylcZ8hRMKmVy5G1XaMNJID2ah23w==", + "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", @@ -4441,17 +4674,17 @@ } }, "electron-builder": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.14.5.tgz", - "integrity": "sha512-N73hSbXFz6Mz5Z6h6C5ly6CB+dUN6k1LuCDJjI8VF47bMXv/QE0HE+Kkb0GPKqTqM7Hsk/yIYX+kHCfSkR5FGg==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.14.13.tgz", + "integrity": "sha512-3fgLxqF2TXVKiUPeg74O4V3l0l3j7ERLazo8sUbRkApw0+4iVAf2BJkHsHMaXiigsgCoEzK/F4/rB5rne/VAnw==", "dev": true, "requires": { "@types/yargs": "^17.0.1", - "app-builder-lib": "22.14.5", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "app-builder-lib": "22.14.13", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "chalk": "^4.1.1", - "dmg-builder": "22.14.5", + "dmg-builder": "22.14.13", "fs-extra": "^10.0.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", @@ -4510,6 +4743,31 @@ } } }, + "electron-context-menu": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.1.2.tgz", + "integrity": "sha512-nNzu4w14n7mOR+4cLjRC9cEFqGUsAY76seOm0sw3f4OxEfX/d75m7HYekyp5b+0m7Ixy2KN/Mrljw1zLmpyV2w==", + "requires": { + "cli-truncate": "^2.1.0", + "electron-dl": "^3.2.1", + "electron-is-dev": "^2.0.0" + } + }, + "electron-dl": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.3.0.tgz", + "integrity": "sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==", + "requires": { + "ext-name": "^5.0.0", + "pupa": "^2.0.1", + "unused-filename": "^2.1.0" + } + }, + "electron-is-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", + "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==" + }, "electron-json-storage": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.5.0.tgz", @@ -4564,14 +4822,14 @@ } }, "electron-publish": { - "version": "22.14.5", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.14.5.tgz", - "integrity": "sha512-h+NANRdaA0PqGF15GKvorseWPzh1PXa/zx4I37//PIokW8eKIov8ky23foUSb55ZFWUHGpxQJux7y2NCfBtQeg==", + "version": "22.14.13", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.14.13.tgz", + "integrity": "sha512-0oP3QiNj3e8ewOaEpEJV/o6Zrmy2VarVvZ/bH7kyO/S/aJf9x8vQsKVWpsdmSiZ5DJEHgarFIXrnO0ZQf0P9iQ==", "dev": true, "requires": { "@types/fs-extra": "^9.0.11", - "builder-util": "22.14.5", - "builder-util-runtime": "8.9.1", + "builder-util": "22.14.13", + "builder-util-runtime": "8.9.2", "chalk": "^4.1.1", "fs-extra": "^10.0.0", "lazy-val": "^1.0.5", @@ -4579,9 +4837,9 @@ }, "dependencies": { "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -4607,11 +4865,15 @@ } } }, + "electron-tabs": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/electron-tabs/-/electron-tabs-0.15.0.tgz", + "integrity": "sha512-pGW5V+V9X1+b2muKndn7xsce6D89D5j7kt0j/+5nX/gwsIAnZ86axJDriOxVP20f8yN4sQkrYdUana3Wi3Ea0w==" + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -4651,8 +4913,7 @@ "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-string-regexp": { "version": "4.0.0", @@ -4661,6 +4922,23 @@ "dev": true, "optional": true }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -4769,6 +5047,22 @@ "pump": "^3.0.0" } }, + "glasstron": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/glasstron/-/glasstron-0.1.1.tgz", + "integrity": "sha512-oLEMQM5wwdAQ44NrXD3wjk+b3dsfQG1XtkLn5pCxQNa3ri1AtWvvzpnhFUd88ZTmguHvkY4c3JKzcPSYaJAKKA==", + "requires": { + "node-addon-api": "^4.0.0", + "x11": "^2.3.0" + }, + "dependencies": { + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + } + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4906,6 +5200,33 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, "iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -4976,8 +5297,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-installed-globally": { "version": "0.4.0", @@ -5007,6 +5327,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -5239,8 +5564,7 @@ "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { "version": "2.1.34", @@ -5278,6 +5602,11 @@ "minimist": "^1.2.5" } }, + "modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5359,6 +5688,11 @@ "wrappy": "1" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -5377,6 +5711,11 @@ "semver": "^6.2.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5425,6 +5764,12 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -5464,7 +5809,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, "requires": { "escape-goat": "^2.0.0" } @@ -5648,8 +5992,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "optional": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -5663,6 +6005,22 @@ "dev": true, "optional": true }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5705,7 +6063,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5716,7 +6073,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -5756,9 +6112,9 @@ }, "dependencies": { "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -5894,6 +6250,15 @@ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, + "unused-filename": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-2.1.0.tgz", + "integrity": "sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==", + "requires": { + "modify-filename": "^1.1.0", + "path-exists": "^4.0.0" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -6042,6 +6407,14 @@ "signal-exit": "^3.0.2" } }, + "x11": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/x11/-/x11-2.3.0.tgz", + "integrity": "sha1-vazO3M2sJIL9Vg8FEee/K9nh2/I=", + "requires": { + "os-homedir": "^1.0.1" + } + }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", diff --git a/package.json b/package.json index a856ce4..4892560 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,15 @@ { "name": "ArmCord", - "version": "3.0.4", + "version": "3.1.0", "description": "ArmCord is a custom client designed to enhance your Discord experience while keeping everything lightweight.", "main": "ts-out/main.js", "scripts": { - "build": "tsc && copyfiles -u 1 src/**/*.html src/**/*.css ts-out/ && copyfiles package.json ts-out/ && copyfiles assets/** ts-out/", + "build": "tsc && copyfiles -u 1 src/**/*.html src/**/**/*.css ts-out/ && copyfiles package.json ts-out/ && copyfiles assets/** ts-out/", "watch": "tsc -w", "start": "npm run build && electron ./ts-out/main.js", - "package": "npm run build && electron-builder" + "package": "npm run build && electron-builder", + "format": "prettier --write src/**/*", + "postinstall": "husky install" }, "repository": { "type": "git", @@ -23,12 +25,17 @@ "@types/electron-json-storage": "^4.5.0", "@types/node": "^14.18.2", "copyfiles": "^2.4.1", - "electron": "^16.0.7", - "electron-builder": "^22.14.5", + "electron": "^17.1.0", + "electron-builder": "^22.14.13", + "husky": "^7.0.4", + "prettier": "^2.5.1", "typescript": "^4.5.4" }, "dependencies": { + "electron-context-menu": "^3.1.2", "electron-json-storage": "^4.5.0", + "electron-tabs": "^0.15.0", + "glasstron": "^0.1.1", "v8-compile-cache": "^2.3.0" }, "build": { diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..d8902c1 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,14 @@ +module.exports = { + printWidth: 120, + tabWidth: 4, + useTabs: false, + semi: true, + singleQuote: false, + quoteProps: "as-needed", + jsxSingleQuote: false, + trailingComma: "none", + bracketSpacing: false, + jsxBracketSameLine: false, + arrowParens: "always", + endOfLine: "auto" +}; diff --git a/src/content/css/discord.css b/src/content/css/discord.css index 2d3bdac..1b49a8b 100644 --- a/src/content/css/discord.css +++ b/src/content/css/discord.css @@ -1,12 +1,12 @@ -.info-1sUqUG:last-child:before { - content: "ArmCord Version: 3.1.0"!important; - height: auto; - line-height: 16px; - text-align: center; - color: var(--text-muted); - font-size: 12px; - text-transform: none; +.info-3pQQBb:last-child:before { + content: "ArmCord Version: 3.1.0" !important; + height: auto; + line-height: 16px; + text-align: center; + color: var(--text-muted); + font-size: 12px; + text-transform: none; } .notice-2HEN-u { display: none; -} \ No newline at end of file +} diff --git a/src/content/css/setup.css b/src/content/css/setup.css index b138257..d848205 100644 --- a/src/content/css/setup.css +++ b/src/content/css/setup.css @@ -2,68 +2,68 @@ @import url("https://kckarnige.github.io/femboi_owo/discord-font.css"); :root { - background-color: #2c2f33 !important; - --header-secondary: #b9bbbe !important; - --header-primary: #fff !important; - --background-tertiary: #202225 !important; + background-color: #2c2f33 !important; + --header-secondary: #b9bbbe !important; + --header-primary: #fff !important; + --background-tertiary: #202225 !important; } body { - background-color: #2c2f33; - color: white; + background-color: #2c2f33; + color: white; } p { - color: white; - text-align: center; - font-weight: 100; - font-family: Whitney, Helvetica Neue, Helvetica, Arial, sans-serif; - text-rendering: optimizeLegibility; + color: white; + text-align: center; + font-weight: 100; + font-family: Whitney, Helvetica Neue, Helvetica, Arial, sans-serif; + text-rendering: optimizeLegibility; } .logo { - font-size: 0px; - text-align: center; - transform: translateY(-105%); + font-size: 0px; + text-align: center; + transform: translateY(-105%); } .logo:before { - content: "ARM"; - color: #7289da; - font-weight: normal; - font-family: Helvetica, sans-serif; - font-size: 32px; + content: "ARM"; + color: #7289da; + font-weight: normal; + font-family: Helvetica, sans-serif; + font-size: 32px; } .logo:after { - content: "Cord"; - color: #ffffff; - font-weight: normal; - font-family: Discordinated; - font-size: 32px; + content: "Cord"; + color: #ffffff; + font-weight: normal; + font-family: Discordinated; + font-size: 32px; } span { - text-align: center; + text-align: center; } .logo { - display: block; - margin-left: auto; - margin-right: auto; - max-height: 204px; - max-width: 204px; - transform: translateY(5%); + display: block; + margin-left: auto; + margin-right: auto; + max-height: 204px; + max-width: 204px; + transform: translateY(5%); } .container { - position: fixed; - top: 50%; - left: 50%; - color: #fff; - transform: translate(-50%, -50%); + position: fixed; + top: 50%; + left: 50%; + color: #fff; + transform: translate(-50%, -50%); } button#express { - margin-right: 84px; + margin-right: 84px; } button { background-color: #7289da; @@ -72,13 +72,13 @@ button { padding: 4px; border-radius: 5px; margin-top: 5px; - + text-align: center; border-style: none; outline: none; } .setup-ask { - font-size: 20px; + font-size: 20px; } button:hover { background-color: #687dc6; @@ -87,25 +87,25 @@ button:hover { cursor: pointer; } select { - -webkit-appearance: button; - -moz-appearance: button; - -webkit-padding-end: 20px; - -moz-padding-end: 20px; - -webkit-padding-start: 2px; - -moz-padding-start: 2px; - background-color: #2c2f33; - background-position: center right; - background-repeat: no-repeat; - border: 1px solid #aaa; - border-radius: 2px; - box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1); - color: #fff; - font-size: inherit; - margin: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + -webkit-appearance: button; + -moz-appearance: button; + -webkit-padding-end: 20px; + -moz-padding-end: 20px; + -webkit-padding-start: 2px; + -moz-padding-start: 2px; + background-color: #2c2f33; + background-position: center right; + background-repeat: no-repeat; + border: 1px solid #aaa; + border-radius: 2px; + box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1); + color: #fff; + font-size: inherit; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .center { - text-align: center; -} \ No newline at end of file + text-align: center; +} diff --git a/src/content/css/splash.css b/src/content/css/splash.css index 710813e..88af543 100644 --- a/src/content/css/splash.css +++ b/src/content/css/splash.css @@ -20,95 +20,95 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/ :root { - --background-primary: #282b30; - --background-secondary: rgba(255, 255, 255, 0.1); - --brand-experiment: #5865f2; - --header-primary: #fff; - --text-muted: #72767d; + --background-primary: #282b30; + --background-secondary: rgba(255, 255, 255, 0.1); + --brand-experiment: #5865f2; + --header-primary: #fff; + --text-muted: #72767d; } @font-face { - font-family: Whitney; - font-weight: 400; - font-style: normal; - src: url(https://armcord.smartfridge.space/whitney_400.woff) format("woff"); + font-family: Whitney; + font-weight: 400; + font-style: normal; + src: url(https://armcord.smartfridge.space/whitney_400.woff) format("woff"); } html, body { - -webkit-app-region: drag; - overflow: hidden; + -webkit-app-region: drag; + overflow: hidden; - margin: 0; - padding: 0; - width: 100%; - height: 100%; + margin: 0; + padding: 0; + width: 100%; + height: 100%; - background: var(--background-primary); + background: var(--background-primary); - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } * { - font-family: "Whitney", sans-serif; + font-family: "Whitney", sans-serif; - box-sizing: border-box; - -webkit-user-select: none; - cursor: default; + box-sizing: border-box; + -webkit-user-select: none; + cursor: default; } video { - width: 200px; - height: 150px; - object-fit: cover; + width: 200px; + height: 150px; + object-fit: cover; } #text-splashscreen { - font-size: 7vw; - text-align: center; + font-size: 7vw; + text-align: center; - color: var(--header-primary); - font-weight: 400; - font-style: italic; - font-size: 16px; + color: var(--header-primary); + font-weight: 400; + font-style: italic; + font-size: 16px; - text-transform: uppercase; + text-transform: uppercase; - width: 100%; + width: 100%; } #bar-container, #bar-fill { - width: 180px; - height: 8px; + width: 180px; + height: 8px; - border-radius: 4px; + border-radius: 4px; - visibility: hidden; + visibility: hidden; } #bar-container { - background-color: var(--background-secondary); + background-color: var(--background-secondary); - position: relative; - margin-top: 12px; + position: relative; + margin-top: 12px; } #bar-fill { - background-color: var(--brand-experiment); - width: 0; + background-color: var(--brand-experiment); + width: 0; } #debug { - position: absolute; - bottom: 6px; - right: 6px; + position: absolute; + bottom: 6px; + right: 6px; - text-align: right; - font-size: 10px; - color: var(--text-muted); - white-space: pre; + text-align: right; + font-size: 10px; + color: var(--text-muted); + white-space: pre; } diff --git a/src/content/css/tabs.css b/src/content/css/tabs.css new file mode 100644 index 0000000..fe88f80 --- /dev/null +++ b/src/content/css/tabs.css @@ -0,0 +1,53 @@ +@import url("https://kckarnige.github.io/femboi_owo/discord-font.css"); +:root { + --window-buttons: var(--header-secondary); + --cord-color: var(--header-primary); + --armcord-color: #7289da; + --titlebar-color: var(--background-tertiary); +} +.tabs { + display: block; + top: 0; + left: 0; + right: 0; + flex-shrink: 0; + overflow: hidden; + zoom: 1; + box-sizing: border-box; + width: 100%; + clear: both; + height: 30px; + line-height: 30px; + background-color: #202225; + -webkit-app-region: drag; + width: 100%; + user-select: none; + -webkit-user-select: none; + position: fixed; + z-index: 99999; +} + +.tabs #tabs-controls-container { + float: left; + width: 150px; + height: 100%; + line-height: 30px; + background-color: #202225; + -webkit-app-region: no-drag; +} +.tabs-buttons { + color: white; + background-color: inherit; + float: left; + border: none; + outline: none; + cursor: pointer; + transition: 0.3s; + font-size: 20px; +} +.tabs-buttons:hover { + background-color: #4e515a; +} +.withFrame-haYltI { + height: 30px !important; +} diff --git a/src/content/css/titlebar.css b/src/content/css/titlebar.css index 6c5df04..d29f54f 100644 --- a/src/content/css/titlebar.css +++ b/src/content/css/titlebar.css @@ -1,108 +1,108 @@ -@import url("https://kckarnige.github.io/femboi_owo/discord-font.css"); +@import url("https://armcord.smartfridge.space/logofont.css"); :root { - --window-buttons: var(--header-secondary); - --cord-color: var(--header-primary); - --armcord-color: #7289da; - --titlebar-color: var(--background-tertiary); + --window-buttons: var(--header-secondary); + --cord-color: var(--header-primary); + --armcord-color: #7289da; + --titlebar-color: var(--background-tertiary); } .titlebar { - display: block; - top: 0; - left: 0; - right: 0; - flex-shrink: 0; - overflow: hidden; - zoom: 1; - box-sizing: border-box; - width: 100%; - clear: both; - height: 30px; - line-height: 30px; - background-color: #202225; - -webkit-app-region: drag; - width: 100%; - user-select: none; - -webkit-user-select: none; - position: fixed; - z-index: 99999; + display: block; + top: 0; + left: 0; + right: 0; + flex-shrink: 0; + overflow: hidden; + zoom: 1; + box-sizing: border-box; + width: 100%; + clear: both; + height: 30px; + line-height: 30px; + background-color: #202225; + -webkit-app-region: drag; + width: 100%; + user-select: none; + -webkit-user-select: none; + position: fixed; + z-index: 99999; } .titlebar #window-title { - width: 30%; - height: 100%; - line-height: 30px; - float: left; - padding: 0 0 0 1em; + width: 30%; + height: 100%; + line-height: 30px; + float: left; + padding: 0 0 0 1em; } .titlebar #window-controls-container { - float: right; - width: 150px; - height: 100%; - line-height: 30px; - background-color: #202225; - -webkit-app-region: no-drag; + float: right; + width: 150px; + height: 100%; + line-height: 30px; + background-color: #202225; + -webkit-app-region: no-drag; } .titlebar #window-controls-container #minimize, .titlebar #window-controls-container #maximize, .titlebar #window-controls-container #quit { - float: left; - height: 100%; - width: 33%; - text-align: center; - color: #f7f7f7; - cursor: default; + float: left; + height: 100%; + width: 33%; + text-align: center; + color: #f7f7f7; + cursor: default; } .titlebar #window-controls-container #minimize:hover { - background-color: #99aab5; + background-color: #99aab5; } .titlebar #window-controls-container #maximize:hover { - background-color: #99aab5; + background-color: #99aab5; } .titlebar #window-controls-container #quit:hover { - background-color: #f04747; + background-color: #f04747; } .titlebar #window-controls-container #quit { - background-color: #f7f7f7; - -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z' fill='%23000'/%3E%3C/svg%3E") - no-repeat 50% 50%; - mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z' fill='%23000'/%3E%3C/svg%3E") - no-repeat 50% 50%; + background-color: #f7f7f7; + -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z' fill='%23000'/%3E%3C/svg%3E") + no-repeat 50% 50%; + mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z' fill='%23000'/%3E%3C/svg%3E") + no-repeat 50% 50%; } .titlebar #window-controls-container #minimize { - background-color: #f7f7f7; - -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 4.399V5.5H0V4.399h11z' fill='%23000'/%3E%3C/svg%3E") - no-repeat 50% 50%; - mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 4.399V5.5H0V4.399h11z' fill='%23000'/%3E%3C/svg%3E") - no-repeat 50% 50%; + background-color: #f7f7f7; + -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 4.399V5.5H0V4.399h11z' fill='%23000'/%3E%3C/svg%3E") + no-repeat 50% 50%; + mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 4.399V5.5H0V4.399h11z' fill='%23000'/%3E%3C/svg%3E") + no-repeat 50% 50%; } .titlebar #window-controls-container #maximize { - background-color: #f7f7f7; - -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 0v11H0V0h11zM9.899 1.101H1.1V9.9h8.8V1.1z' fill='%23000'/%3E%3C/svg%3E") - no-repeat 50% 50%; - mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 0v11H0V0h11zM9.899 1.101H1.1V9.9h8.8V1.1z' fill='%23000'/%3E%3C/svg%3E") - no-repeat 50% 50%; + background-color: #f7f7f7; + -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 0v11H0V0h11zM9.899 1.101H1.1V9.9h8.8V1.1z' fill='%23000'/%3E%3C/svg%3E") + no-repeat 50% 50%; + mask: url("data:image/svg+xml;charset=utf-8,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 0v11H0V0h11zM9.899 1.101H1.1V9.9h8.8V1.1z' fill='%23000'/%3E%3C/svg%3E") + no-repeat 50% 50%; } .window-title:after { - content: "Cord"; - color: var(--cord-color) !important; - font-weight: normal; - font-size: 14px; - font-family: Discordinated; + content: "Cord"; + color: var(--cord-color) !important; + font-weight: normal; + font-size: 14px; + font-family: Discordinated; } .window-title:before { - content: "ARM"; - color: var(--armcord-color); - font-weight: normal; - font-size: 14px; - font-family: Helvetica, sans-serif; + content: "ARM"; + color: var(--armcord-color); + font-weight: normal; + font-size: 14px; + font-family: Helvetica, sans-serif; } .window-title { - font-size: 0px !important; - margin-left: initial !important; - transform: translate(10px, 0px); + font-size: 0px !important; + margin-left: initial !important; + transform: translate(10px, 0px); } .withFrame-haYltI { - height: 30px !important; + height: 30px !important; } diff --git a/src/content/settings.html b/src/content/settings.html deleted file mode 100644 index 6fe5ab8..0000000 --- a/src/content/settings.html +++ /dev/null @@ -1 +0,0 @@ -

settings, really cool

\ No newline at end of file diff --git a/src/content/setup.html b/src/content/setup.html index f805f89..cdca768 100644 --- a/src/content/setup.html +++ b/src/content/setup.html @@ -1,55 +1,60 @@ + - - - - ArmCord Setup - - + + + + ArmCord Setup + + - -
-

-
-

Select what kind of setup you want to perform:

- - -
-
- - + document.getElementById("next").addEventListener("click", function () { + var mod = document.getElementById("mod").value; + window.armcordinternal.saveSettings({ + windowStyle: "default", + channel: branch, + armcordCSP: true, + minimizeToTray: true, + automaticPatches: false, + mods: mod, + blurType: "acrylic" + }); + fade(document.getElementById("setup")); + setTimeout(function () { + window.armcordinternal.restart(); + }, 5000); + }); + } else { + window.armcordinternal.saveSettings({ + windowStyle: "default", + channel: branch, + armcordCSP: true, + minimizeToTray: true, + automaticPatches: false, + mods: "none", + blurType: "acrylic" + }); + fade(document.getElementById("setup")); + setTimeout(function () { + window.armcordinternal.restart(); + }, 5000); + } + }); + }); + } + + diff --git a/src/content/splash.html b/src/content/splash.html index ba0327d..5d6f18c 100644 --- a/src/content/splash.html +++ b/src/content/splash.html @@ -1,68 +1,63 @@ - - - ArmCord - - + + + ArmCord + + - -
- -

-
- - + +
+ +

+
+ + diff --git a/src/extensions/mods.ts b/src/extensions/mods.ts index 6dfc5d6..4872cfb 100644 --- a/src/extensions/mods.ts +++ b/src/extensions/mods.ts @@ -11,59 +11,55 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI import electron from "electron"; import * as storage from "electron-json-storage"; const otherMods = { - generic: { - electronProxy: require("util").types.isProxy(electron), // Many modern mods overwrite electron with a proxy with a custom BrowserWindow (copied from PowerCord) - }, + generic: { + electronProxy: require("util").types.isProxy(electron) // Many modern mods overwrite electron with a proxy with a custom BrowserWindow (copied from PowerCord) + } }; const unstrictCSP = () => { - console.log("Setting up CSP unstricter..."); + console.log("Setting up CSP unstricter..."); - const cspAllowAll = ["connect-src", "style-src", "img-src", "font-src"]; + const cspAllowAll = ["connect-src", "style-src", "img-src", "font-src"]; - const corsAllowUrls = [ - "https://github.com/GooseMod/GooseMod/releases/download/dev/index.js", - "https://github-releases.githubusercontent.com/", - "https://api.goosemod.com/inject.js", - "https://raw.githubusercontent.com/Cumcord/Cumcord/stable/dist/build.js", - "https://raw.githubusercontent.com/Cumcord/Cumcord/master/dist/build.js", - "https://raw.githubusercontent.com/FlickerMod/dist/main/build.js", - ]; + const corsAllowUrls = [ + "https://github.com/GooseMod/GooseMod/releases/download/dev/index.js", + "https://github-releases.githubusercontent.com/", + "https://api.goosemod.com/inject.js", + "https://raw.githubusercontent.com/Cumcord/Cumcord/stable/dist/build.js", + "https://raw.githubusercontent.com/Cumcord/Cumcord/master/dist/build.js", + "https://raw.githubusercontent.com/FlickerMod/dist/main/build.js" + ]; - electron.session.defaultSession.webRequest.onHeadersReceived( - ({ responseHeaders, url }, done) => { - let csp = responseHeaders!["content-security-policy"]; + electron.session.defaultSession.webRequest.onHeadersReceived(({responseHeaders, url}, done) => { + let csp = responseHeaders!["content-security-policy"]; - if (otherMods.generic.electronProxy) { - // Since patch v16, override other mod's onHeadersRecieved (Electron only allows 1 listener); because they rely on 0 CSP at all (GM just unrestricts some areas), remove it fully if we detect other mods - delete responseHeaders!["content-security-policy"]; - csp = []; - } - - if (csp) { - for (let p of cspAllowAll) { - csp[0] = csp[0].replace(`${p}`, `${p} * blob: data:`); // * does not include data: URIs + if (otherMods.generic.electronProxy) { + // Since patch v16, override other mod's onHeadersRecieved (Electron only allows 1 listener); because they rely on 0 CSP at all (GM just unrestricts some areas), remove it fully if we detect other mods + delete responseHeaders!["content-security-policy"]; + csp = []; } - // Fix Discord's broken CSP which disallows unsafe-inline due to having a nonce (which they don't even use?) - csp[0] = csp[0].replace(/'nonce-.*?' /, ""); - } + if (csp) { + for (let p of cspAllowAll) { + csp[0] = csp[0].replace(`${p}`, `${p} * blob: data:`); // * does not include data: URIs + } - if (corsAllowUrls.some((x) => url.startsWith(x))) { - responseHeaders!["access-control-allow-origin"] = ["*"]; - } + // Fix Discord's broken CSP which disallows unsafe-inline due to having a nonce (which they don't even use?) + csp[0] = csp[0].replace(/'nonce-.*?' /, ""); + } - done({ responseHeaders }); - } - ); + if (corsAllowUrls.some((x) => url.startsWith(x))) { + responseHeaders!["access-control-allow-origin"] = ["*"]; + } + + done({responseHeaders}); + }); }; storage.get("settings", function (error, data: any) { - if (error) throw error; - if (data.armcordCSP) { - unstrictCSP(); - } else { - console.log( - "ArmCord CSP is disabled. The CSP should be managed by third-party plugin." - ); - } + if (error) throw error; + if (data.armcordCSP) { + unstrictCSP(); + } else { + console.log("ArmCord CSP is disabled. The CSP should be managed by third-party plugin."); + } }); diff --git a/src/extensions/plugin.ts b/src/extensions/plugin.ts index 18d85f2..cb1a064 100644 --- a/src/extensions/plugin.ts +++ b/src/extensions/plugin.ts @@ -1,26 +1,20 @@ -import * as fs from 'fs'; -import { app, session } from 'electron'; +import * as fs from "fs"; +import {app, session} from "electron"; const userDataPath = app.getPath("userData"); const pluginFolder = userDataPath + "/plugins/"; if (!fs.existsSync(pluginFolder)) { fs.mkdirSync(pluginFolder); console.log("Created missing plugin folder"); - } +} app.whenReady().then(() => { - fs.readdirSync(pluginFolder).forEach((file) => { - try { - const manifest = fs.readFileSync( - `${userDataPath}/plugins/${file}/manifest.json`, - "utf8" - ); - var pluginFile = JSON.parse(manifest); - session.defaultSession.loadExtension(`${userDataPath}/plugins/${file}`); - console.log( - `%cLoaded ${pluginFile.name} made by ${pluginFile.author}`, - "color:red" - ); - } catch (err) { - console.error(err); - } - }); + fs.readdirSync(pluginFolder).forEach((file) => { + try { + const manifest = fs.readFileSync(`${userDataPath}/plugins/${file}/manifest.json`, "utf8"); + var pluginFile = JSON.parse(manifest); + session.defaultSession.loadExtension(`${userDataPath}/plugins/${file}`); + console.log(`%cLoaded ${pluginFile.name} made by ${pluginFile.author}`, "color:red"); + } catch (err) { + console.error(err); + } + }); }); diff --git a/src/ipc.ts b/src/ipc.ts index 9b62ac0..f5cbcc2 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -1,70 +1,81 @@ //ipc stuff -import { app, ipcMain, shell, desktopCapturer } from "electron"; -import { mainWindow } from "./window"; -import { saveSettings, getVersion } from "./utils"; -import { settings, customTitlebar } from "./main"; -import { createSettingsWindow } from "./settings/main"; +import {app, ipcMain, shell, desktopCapturer} from "electron"; +import {createTabsGuest, mainWindow} from "./window"; +import {saveSettings, getVersion} from "./utils"; +import {settings, customTitlebar, tabs} from "./main"; +import {createSettingsWindow} from "./settings/main"; export function registerIpc() { - ipcMain.on("get-app-path", (event, arg) => { - event.reply("app-path", app.getAppPath()); - }); - ipcMain.on("open-external-link", (event, href: string) => { - shell.openExternal(href); - }); - ipcMain.on("win-maximize", (event, arg) => { - mainWindow.maximize(); - }); - ipcMain.on("win-isMaximized", (event, arg) => { - event.returnValue = mainWindow.isMaximized(); - }); - ipcMain.on("win-minimize", (event, arg) => { - mainWindow.minimize(); - }); - ipcMain.on("win-unmaximize", (event, arg) => { - mainWindow.unmaximize(); - }); - ipcMain.on("win-show", (event, arg) => { - mainWindow.show(); - }); - ipcMain.on("win-hide", (event, arg) => { - mainWindow.hide(); - }); - ipcMain.on("get-app-version", (event) => { - event.returnValue = getVersion(); - }); - ipcMain.on("splashEnd", (event, arg) => { - mainWindow.setSize(800, 600); - }); - ipcMain.on("restart", (event, arg) => { - app.relaunch(); - app.exit(); - }); - - ipcMain.on("saveSettings", (event, ...args) => { - //@ts-ignore - saveSettings(...args); - }); - ipcMain.on("channel", (event) => { - event.returnValue = settings.channel; - }); - ipcMain.on("clientmod", (event, arg) => { - event.returnValue = settings.mods; - }); - ipcMain.on("titlebar", (event, arg) => { - event.returnValue = customTitlebar; - }); - ipcMain.on("openSettingsWindow", (event, arg) => { - createSettingsWindow(); - }); - ipcMain.on("setting-armcordCSP", (event) => { - if (settings.armcordCSP) { - event.returnValue = true; - } else { - event.returnValue = false; - } - }); - ipcMain.handle("DESKTOP_CAPTURER_GET_SOURCES", (event, opts) => - desktopCapturer.getSources(opts) - ); - + ipcMain.on("get-app-path", (event, arg) => { + event.reply("app-path", app.getAppPath()); + }); + ipcMain.on("openTab", (event, number: number) => { + createTabsGuest(number); + }); + ipcMain.on("open-external-link", (event, href: string) => { + shell.openExternal(href); + }); + ipcMain.on("win-maximize", (event, arg) => { + mainWindow.maximize(); + }); + ipcMain.on("win-isMaximized", (event, arg) => { + event.returnValue = mainWindow.isMaximized(); + }); + ipcMain.on("win-minimize", (event, arg) => { + mainWindow.minimize(); + }); + ipcMain.on("win-unmaximize", (event, arg) => { + mainWindow.unmaximize(); + }); + ipcMain.on("win-show", (event, arg) => { + mainWindow.show(); + }); + ipcMain.on("win-hide", (event, arg) => { + mainWindow.hide(); + }); + ipcMain.on("win-quit", (event, arg) => { + app.exit(); + }); + ipcMain.on("get-app-version", (event) => { + event.returnValue = getVersion(); + }); + ipcMain.on("splashEnd", (event, arg) => { + mainWindow.setSize(800, 600); + }); + ipcMain.on("restart", (event, arg) => { + app.relaunch(); + app.exit(); + }); + ipcMain.on("saveSettings", (event, args) => { + saveSettings(args); + }); + ipcMain.on("minimizeToTray", (event) => { + console.log(settings.minimizeToTray); + event.returnValue = settings.minimizeToTray; + }); + ipcMain.on("channel", (event) => { + event.returnValue = settings.channel; + }); + ipcMain.on("clientmod", (event, arg) => { + event.returnValue = settings.mods; + }); + ipcMain.on("titlebar", (event, arg) => { + event.returnValue = customTitlebar; + }); + ipcMain.on("tabs", (event, arg) => { + event.returnValue = tabs; + }); + ipcMain.on("shouldPatch", (event, arg) => { + event.returnValue = settings.automaticPatches; + }); + ipcMain.on("openSettingsWindow", (event, arg) => { + createSettingsWindow(); + }); + ipcMain.on("setting-armcordCSP", (event) => { + if (settings.armcordCSP) { + event.returnValue = true; + } else { + event.returnValue = false; + } + }); + ipcMain.handle("DESKTOP_CAPTURER_GET_SOURCES", (event, opts) => desktopCapturer.getSources(opts)); } diff --git a/src/main.ts b/src/main.ts index de8e4db..3970428 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,90 +1,108 @@ // Modules to control application life and create native browser window -import { - app, - BrowserWindow, - session, -} from "electron"; +import {app, BrowserWindow, session} from "electron"; import * as path from "path"; import "v8-compile-cache"; import * as storage from "electron-json-storage"; -import { getConfigUnsafe, setup } from "./utils"; +import {getConfigUnsafe, setup} from "./utils"; import "./extensions/mods"; import "./extensions/plugin"; import "./tray"; -import { mainWindow, createCustomWindow, createNativeWindow } from "./window"; +import {mainWindow, createCustomWindow, createNativeWindow, createGlasstronWindow, createTabsHost} from "./window"; import "./shortcuts"; export var contentPath: string; var channel: string; export var settings: any; export var customTitlebar: boolean; +export var tabs: boolean; +async function appendSwitch() { + if ((await getConfigUnsafe("windowStyle")) == "glasstron") { + console.log("Enabling transparency visuals."); + app.commandLine.appendSwitch("enable-transparent-visuals"); + } +} +appendSwitch(); storage.has("settings", function (error, hasKey) { - if (error) throw error; + if (error) throw error; - if (!hasKey) { - console.log("First run of the ArmCord. Starting setup."); - setup(); - contentPath = path.join(__dirname, "/content/setup.html"); - if (!contentPath.includes("ts-out")) { - contentPath = path.join(__dirname, "/ts-out/content/setup.html"); + if (!hasKey) { + console.log("First run of the ArmCord. Starting setup."); + setup(); + contentPath = path.join(__dirname, "/content/setup.html"); + if (!contentPath.includes("ts-out")) { + contentPath = path.join(__dirname, "/ts-out/content/setup.html"); + } + } else { + console.log("ArmCord has been run before. Skipping setup."); + contentPath = path.join(__dirname, "/content/splash.html"); + if (!contentPath.includes("ts-out")) { + contentPath = path.join(__dirname, "/ts-out/content/splash.html"); + } } - } else { - console.log("ArmCord has been run before. Skipping setup."); - contentPath = path.join(__dirname, "/content/splash.html"); - if (!contentPath.includes("ts-out")) { - contentPath = path.join(__dirname, "/ts-out/content/splash.html"); - } - } }); storage.get("settings", function (error, data: any) { - if (error) throw error; - console.log(data); - channel = data.channel; - settings = data; + if (error) throw error; + console.log(data); + channel = data.channel; + settings = data; }); app.whenReady().then(async () => { - if (await getConfigUnsafe("customTitlebar") == true) { - console.log("Creating custom titlebar window."); - customTitlebar = true; - createCustomWindow(); - } else if (await getConfigUnsafe("customTitlebar") == "setup") { - //rare case of setup window - console.log("Creating setup window."); - customTitlebar = true; - createCustomWindow(); - } else { - console.log("Creating native titlebar window."); - customTitlebar = false; - createNativeWindow(); - } - session - .fromPartition("some-partition") - .setPermissionRequestHandler((webContents, permission, callback) => { - if (permission === "notifications") { - // Approves the permissions request - callback(true); - } - if (permission === "media") { - // Approves the permissions request - callback(true); - } - }); - mainWindow.webContents.session.webRequest.onBeforeRequest( - (details, callback) => { - if (/api\/v\d\/science$/g.test(details.url)) - return callback({ cancel: true }); - return callback({}); + switch (await getConfigUnsafe("windowStyle")) { + case "default": + createCustomWindow(); + customTitlebar = true; + break; + case "native": + createNativeWindow(); + break; + case "glasstron": + setTimeout( + createGlasstronWindow, + process.platform == "linux" ? 1000 : 0 + // Electron has a bug on linux where it + // won't initialize properly when using + // transparency. To work around that, it + // is necessary to delay the window + // spawn function. + ); + break; + case "tabs": + createTabsHost(); + tabs = true; + break; + default: + createCustomWindow(); + customTitlebar = true; + break; } - ); - app.on("activate", function () { - if (BrowserWindow.getAllWindows().length === 0) - if (!settings.customTitlebar) { - createNativeWindow(); - } else { - createCustomWindow(); - } - }); + session.fromPartition("some-partition").setPermissionRequestHandler((webContents, permission, callback) => { + if (permission === "notifications") { + // Approves the permissions request + callback(true); + } + if (permission === "media") { + // Approves the permissions request + callback(true); + } + }); + app.on("activate", async function () { + if (BrowserWindow.getAllWindows().length === 0) + switch (await getConfigUnsafe("windowStyle")) { + case "default": + createCustomWindow(); + break; + case "native": + createNativeWindow(); + break; + case "glasstron": + createGlasstronWindow(); + break; + default: + createCustomWindow(); + break; + } + }); }); app.on("window-all-closed", function () { - if (process.platform !== "darwin") app.quit(); + if (process.platform !== "darwin") app.quit(); }); diff --git a/src/preload/bridge.ts b/src/preload/bridge.ts index c65300f..23fe888 100644 --- a/src/preload/bridge.ts +++ b/src/preload/bridge.ts @@ -1,32 +1,30 @@ -import { contextBridge, ipcRenderer } from "electron"; -import { getDisplayMediaSelector } from "./capturer"; -import { injectTitlebar } from "./titlebar"; +import {contextBridge, ipcRenderer} from "electron"; +import {getDisplayMediaSelector} from "./capturer"; +import {injectTitlebar} from "./titlebar"; contextBridge.exposeInMainWorld("armcord", { - window: { - show: () => ipcRenderer.send("win-show"), - hide: () => ipcRenderer.send("win-hide"), - minimize: () => ipcRenderer.send("win-minimize"), - maximize: () => ipcRenderer.send("win-maximize"), - }, - titlebar: { - injectTitlebar: () => injectTitlebar(), - isTitlebar: ipcRenderer.sendSync("titlebar"), - }, - electron: process.versions.electron, - channel: ipcRenderer.sendSync("channel"), - version: ipcRenderer.sendSync("get-app-version", "app-version"), - getDisplayMediaSelector: getDisplayMediaSelector, - openSettingsWindow: () => ipcRenderer.send("openSettingsWindow"), + window: { + show: () => ipcRenderer.send("win-show"), + hide: () => ipcRenderer.send("win-hide"), + minimize: () => ipcRenderer.send("win-minimize"), + maximize: () => ipcRenderer.send("win-maximize") + }, + titlebar: { + injectTitlebar: () => injectTitlebar(), + isTitlebar: ipcRenderer.sendSync("titlebar") + }, + electron: process.versions.electron, + channel: ipcRenderer.sendSync("channel"), + openTab: (number: number) => ipcRenderer.sendSync("openTab", number), + version: ipcRenderer.sendSync("get-app-version", "app-version"), + getDisplayMediaSelector: getDisplayMediaSelector, + openSettingsWindow: () => ipcRenderer.send("openSettingsWindow") }); //to be only used inside armcord internal setup/splash etc -if ( - window.location.href.indexOf("splash.html") > -1 || - window.location.href.indexOf("setup.html") > -1 -) { - contextBridge.exposeInMainWorld("armcordinternal", { - restart: () => ipcRenderer.send("restart"), - saveSettings: (...args: any) => ipcRenderer.send("saveSettings", ...args), - splashEnd: () => ipcRenderer.send("splashEnd"), - }); -} \ No newline at end of file +if (window.location.href.indexOf("splash.html") > -1 || window.location.href.indexOf("setup.html") > -1) { + contextBridge.exposeInMainWorld("armcordinternal", { + restart: () => ipcRenderer.send("restart"), + saveSettings: (...args: any) => ipcRenderer.send("saveSettings", ...args), + splashEnd: () => ipcRenderer.send("splashEnd") + }); +} diff --git a/src/preload/capturer.ts b/src/preload/capturer.ts index 1369560..2f6d8ed 100644 --- a/src/preload/capturer.ts +++ b/src/preload/capturer.ts @@ -1,28 +1,36 @@ //Fixed context isolation version https://github.com/getferdi/ferdi/blob/develop/src/webview/screenshare.ts //original https://github.com/electron/electron/issues/16513#issuecomment-602070250 -import { desktopCapturer } from 'electron'; -import {addStyle, addScript} from '../utils'; +import {ipcRenderer} from "electron"; +import {addStyle, addScript} from "../utils"; +const desktopCapturer = { + getSources: (opts: any) => ipcRenderer.invoke("DESKTOP_CAPTURER_GET_SOURCES", opts) +}; +const CANCEL_ID = "desktop-capturer-selection__cancel"; -const CANCEL_ID = 'desktop-capturer-selection__cancel'; +interface IPCSources { + id: string; + name: string; + thumbnail: HTMLCanvasElement; +} export async function getDisplayMediaSelector() { - const sources = await desktopCapturer.getSources({ - types: ['screen', 'window'], - }); - return `
+ const sources: IPCSources[] = await desktopCapturer.getSources({ + types: ["screen", "window"] + }); + return `
+ `; + elem.classList.add("withFrame-haYltI"); + if (document.getElementById("app-mount") == null) { + document.body.appendChild(elem); + } else { + document.getElementById("app-mount")!.prepend(elem); + } + const cssPath = path.join(__dirname, "../", "/content/css/tabs.css"); + addStyle(fs.readFileSync(cssPath, "utf8")); + }); +} diff --git a/src/preload/titlebar.ts b/src/preload/titlebar.ts index a48952c..5e103ef 100644 --- a/src/preload/titlebar.ts +++ b/src/preload/titlebar.ts @@ -1,11 +1,11 @@ -import { ipcRenderer } from "electron"; -import { addStyle } from "../utils"; +import {ipcRenderer} from "electron"; +import {addStyle} from "../utils"; import * as fs from "fs"; import * as path from "path"; export function injectTitlebar() { - document.addEventListener("DOMContentLoaded", function (event) { - var elem = document.createElement("div"); - elem.innerHTML = `