From bf631ca7de985dab3aaf40ed4edc7c58cc88f8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Uhl=C3=AD=C5=99?= Date: Thu, 16 Jun 2022 08:56:23 +0200 Subject: [PATCH 1/2] feat: sentry support --- .github/workflows/release.yml | 48 +++--- README.md | 14 +- package-lock.json | 271 ++++++++++++++++++++++++++++++++-- package.json | 6 +- src/.sentry.json | 3 + src/index.ts | 33 +++++ src/logger.ts | 9 ++ src/server.ts | 27 +++- 8 files changed, 362 insertions(+), 49 deletions(-) create mode 100644 src/.sentry.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8e84277..4b7ed73 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,44 +5,34 @@ on: - created jobs: - publish_on_linux: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@master - with: - node-version: 14 - - name: install dependencies - run: npm install - - name: publish - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: npm run publish + publish: + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] - publish_on_mac: - runs-on: macos-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@master with: node-version: 14 - - name: install dependencies + - name: Install dependencies run: npm install - - name: publish - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: npm run publish - - publish_on_win: - runs-on: windows-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@master + - name: Configure secrets + uses: jossef/action-set-json-field@v1 with: - node-version: 14 - - name: install dependencies - run: npm install + file: src/.sentry.json + field: KEY + value: ${{ secrets.SENTRY_KEY }} - name: publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npm run publish + - name: Create Sentry release + uses: getsentry/action-release@v1 + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + with: + sourcemaps: ./dist/src diff --git a/README.md b/README.md index e79c7e2..311384c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Downloading the corresponding version +# Bee Desktop + +## Downloading the corresponding version Go to the [releases page](https://github.com/ethersphere/bee-desktop/releases/tag/v0.4.0) @@ -10,7 +12,11 @@ Linux: `bee-desktop-0.4.0-1.x86_64.rpm` or `bee-desktop_0.4.0_amd64.deb` > You can alternatively clone this repository and run `npm install` and then `npm start` -# Logs +**Until 1.0 release, all our developer releases has enabled error tracking and reporting using [sentry.io](https://sentry.io/)!** + +After the 1.0 release this will be changed to opt-in instead. + +## Logs If you run the build version you can access logs of Bee Desktop at: @@ -18,7 +24,7 @@ If you run the build version you can access logs of Bee Desktop at: - Windows: `%LOCALAPPDATA%\bee-desktop-nodejs\Log\bee-desktop.log` (for example, `C:\Users\USERNAME\AppData\Local\MyApp-nodejs\Log\bee-desktop.log`) - Linux: `~/.local/state/bee-desktop-nodejs/bee-desktop.log` -# If you have a previous installation +## If you have a previous installation You need to delete the previous assets first to receive updates @@ -31,7 +37,7 @@ Mac OS: `~/Library/Application Support/bee-desktop-nodejs` Linux: `~/.local/share/bee-desktop-nodejs` (or `$XDG_DATA_HOME/bee-desktop-nodejs`) -# Allow running on Mac OS +## Allow running on Mac OS Mac OS may not allow you to run the `.app` after unzipping. To solve this, right click the `.app` and click Open. You will have an option to ignore the warning. diff --git a/package-lock.json b/package-lock.json index b90d4dd..a0af51a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "BSD-3-Clause", "dependencies": { "@koa/router": "^10.1.1", + "@sentry/electron": "^3.0.7", "cross-zip": "^4.0.0", "env-paths": "2", "ethereumjs-wallet": "^1.0.2", @@ -48,6 +49,7 @@ "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", + "cross-env": "^7.0.3", "depcheck": "^1.4.3", "electron": "18.0.1", "eslint": "^8.12.0", @@ -2711,6 +2713,118 @@ "@octokit/openapi-types": "^11.2.0" } }, + "node_modules/@sentry/browser": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.2.tgz", + "integrity": "sha512-5VC44p5Vu2eJhVT39nLAJFgha5MjHDYCyZRR1ieeZt3a++otojPGBBAKNAtrEMGV+A2Z9AoneD6ZnDVlyb3GKg==", + "dependencies": { + "@sentry/core": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.2.tgz", + "integrity": "sha512-yu1R3ewBT4udmB4v7sc4biQZ0Z0rfB9+TzB5ZKoCftbe6kqXjFMMaFRYNUF9HicVldKAsBktgkWw3+yfqGkw/A==", + "dependencies": { + "@sentry/hub": "6.19.2", + "@sentry/minimal": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/electron": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-3.0.7.tgz", + "integrity": "sha512-Rahi1jgvjHnx1jGkkPPvDCxSCAME7xc2eBcFCLb4R/WDuNblR7tgJUuAtzv9JpxUgRHy1oLNct0wcvIu1mcXoA==", + "dependencies": { + "@sentry/browser": "6.19.2", + "@sentry/core": "6.19.2", + "@sentry/node": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "deepmerge": "^4.2.2", + "tslib": "^2.3.1" + } + }, + "node_modules/@sentry/electron/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@sentry/hub": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.2.tgz", + "integrity": "sha512-W7KCgNBgdBIMagOxy5J5KQPe+maYxSqfE8a5ncQ3R8BcZDQEKnkW/1FplNbfRLZqA/tL/ndKb7pTPqVtzsbARw==", + "dependencies": { + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.2.tgz", + "integrity": "sha512-ClwxKm77iDHET7kpzv1JvzDx1er5DoNu+EUjst0kQzARIrXvu9xuZuE2/CnBWycQWqw8o3HoGoKz65uIhsUCzQ==", + "dependencies": { + "@sentry/hub": "6.19.2", + "@sentry/types": "6.19.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.2.tgz", + "integrity": "sha512-Z1qREpTpYHxaeWjc1zMUk8ZTAp1WbxMiI2TVNc+a14DVT19Z2xNXb06MiRfeLgNc9lVGdmzR62dPmMBjVgPJYg==", + "dependencies": { + "@sentry/core": "6.19.2", + "@sentry/hub": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.2.tgz", + "integrity": "sha512-XO5qmVBdTs+7PdCz7fAwn1afWxSnRE2KLBFg5/vOdKosPSSHsSHUURSkxiEZc2QsR+JpRB4AeQ26AkIRX38qTg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.2.tgz", + "integrity": "sha512-2DQQ2OJaxjtyxGq5FmMlqb6hptsqMs2xoBiVRMkTS/rvyTrk1oQdKZ8ePwjtgX3nJ728ni3IXIyXV+vfGp4EBw==", + "dependencies": { + "@sentry/types": "6.19.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -3705,7 +3819,6 @@ "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" }, @@ -4905,6 +5018,14 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookies": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", @@ -5130,6 +5251,24 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5369,7 +5508,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8326,7 +8464,6 @@ "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" @@ -10211,6 +10348,11 @@ "node": ">=0.10.0" } }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -13232,8 +13374,7 @@ "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -15954,6 +16095,99 @@ "@octokit/openapi-types": "^11.2.0" } }, + "@sentry/browser": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.2.tgz", + "integrity": "sha512-5VC44p5Vu2eJhVT39nLAJFgha5MjHDYCyZRR1ieeZt3a++otojPGBBAKNAtrEMGV+A2Z9AoneD6ZnDVlyb3GKg==", + "requires": { + "@sentry/core": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "tslib": "^1.9.3" + } + }, + "@sentry/core": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.2.tgz", + "integrity": "sha512-yu1R3ewBT4udmB4v7sc4biQZ0Z0rfB9+TzB5ZKoCftbe6kqXjFMMaFRYNUF9HicVldKAsBktgkWw3+yfqGkw/A==", + "requires": { + "@sentry/hub": "6.19.2", + "@sentry/minimal": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "tslib": "^1.9.3" + } + }, + "@sentry/electron": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-3.0.7.tgz", + "integrity": "sha512-Rahi1jgvjHnx1jGkkPPvDCxSCAME7xc2eBcFCLb4R/WDuNblR7tgJUuAtzv9JpxUgRHy1oLNct0wcvIu1mcXoA==", + "requires": { + "@sentry/browser": "6.19.2", + "@sentry/core": "6.19.2", + "@sentry/node": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "deepmerge": "^4.2.2", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "@sentry/hub": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.2.tgz", + "integrity": "sha512-W7KCgNBgdBIMagOxy5J5KQPe+maYxSqfE8a5ncQ3R8BcZDQEKnkW/1FplNbfRLZqA/tL/ndKb7pTPqVtzsbARw==", + "requires": { + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "tslib": "^1.9.3" + } + }, + "@sentry/minimal": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.2.tgz", + "integrity": "sha512-ClwxKm77iDHET7kpzv1JvzDx1er5DoNu+EUjst0kQzARIrXvu9xuZuE2/CnBWycQWqw8o3HoGoKz65uIhsUCzQ==", + "requires": { + "@sentry/hub": "6.19.2", + "@sentry/types": "6.19.2", + "tslib": "^1.9.3" + } + }, + "@sentry/node": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.2.tgz", + "integrity": "sha512-Z1qREpTpYHxaeWjc1zMUk8ZTAp1WbxMiI2TVNc+a14DVT19Z2xNXb06MiRfeLgNc9lVGdmzR62dPmMBjVgPJYg==", + "requires": { + "@sentry/core": "6.19.2", + "@sentry/hub": "6.19.2", + "@sentry/types": "6.19.2", + "@sentry/utils": "6.19.2", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.2.tgz", + "integrity": "sha512-XO5qmVBdTs+7PdCz7fAwn1afWxSnRE2KLBFg5/vOdKosPSSHsSHUURSkxiEZc2QsR+JpRB4AeQ26AkIRX38qTg==" + }, + "@sentry/utils": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.2.tgz", + "integrity": "sha512-2DQQ2OJaxjtyxGq5FmMlqb6hptsqMs2xoBiVRMkTS/rvyTrk1oQdKZ8ePwjtgX3nJ728ni3IXIyXV+vfGp4EBw==", + "requires": { + "@sentry/types": "6.19.2", + "tslib": "^1.9.3" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -16780,7 +17014,6 @@ "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" } @@ -17735,6 +17968,11 @@ } } }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, "cookies": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", @@ -17932,6 +18170,15 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -18098,8 +18345,7 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "defaults": { "version": "1.0.3", @@ -20395,7 +20641,6 @@ "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" @@ -21859,6 +22104,11 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -24160,8 +24410,7 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "tsscmp": { "version": "1.0.6", diff --git a/package.json b/package.json index 7fcfab5..787ff69 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,9 @@ }, "version": "0.8.1", "description": "Desktop client for running and managing bee", - "main": "dist/index.js", + "main": "dist/src/index.js", "scripts": { - "start": "npm run clean && tsc && electron-forge start", + "start": "cross-env-shell NODE_ENV=development \"npm run clean && tsc && electron-forge start\"", "package": "npm run clean && tsc && electron-forge package", "make": "npm run clean && tsc && electron-forge make", "publish": "npm run clean && tsc && electron-forge publish", @@ -94,6 +94,7 @@ "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", + "cross-env": "^7.0.3", "depcheck": "^1.4.3", "electron": "18.0.1", "eslint": "^8.12.0", @@ -110,6 +111,7 @@ }, "dependencies": { "@koa/router": "^10.1.1", + "@sentry/electron": "^3.0.7", "cross-zip": "^4.0.0", "env-paths": "2", "ethereumjs-wallet": "^1.0.2", diff --git a/src/.sentry.json b/src/.sentry.json new file mode 100644 index 0000000..2f65237 --- /dev/null +++ b/src/.sentry.json @@ -0,0 +1,3 @@ +{ + "KEY": "" +} diff --git a/src/index.ts b/src/index.ts index adb7b78..b318f62 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,8 +5,41 @@ import { runKeepAliveLoop, runLauncher } from './launcher' import { findFreePort } from './port' import { runServer } from './server' import { getStatus } from './status' +import * as Sentry from '@sentry/electron' + +import SENTRY from './.sentry.json' +import PACKAGE_JSON from '../package.json' +import { logger } from './logger' async function main() { + logger.info(`Bee Desktop version: ${PACKAGE_JSON.version} (${process.env.NODE_ENV ?? 'production'})`) + const sentryKey = SENTRY.KEY || process.env.SENTRY_KEY + + if (sentryKey) { + logger.info('Sentry enabled') + Sentry.init({ + dsn: sentryKey, + release: PACKAGE_JSON.version, + // TODO: Once SDK support attachment https://github.com/getsentry/sentry-electron/issues/496 + // beforeSend(event, hint) { + // const attachments = [] + // + // if (existsSync(getLogPath('bee.log'))) { + // attachments.push({ filename: 'bee.log', data: readFileSync(getLogPath('bee.log'), { encoding: 'utf8' }) }) + // } + // + // if (existsSync(getLogPath('bee-desktop.log'))) { + // attachments.push({ + // filename: 'bee-desktop.log', + // data: readFileSync(getLogPath('bee-desktop.log'), { encoding: 'utf8' }), + // }) + // } + // + // return event + // }, + }) + } + runDownloader() await Promise.all([waitForInstallerReadiness(), findFreePort()]) runServer() diff --git a/src/logger.ts b/src/logger.ts index 5fb56f9..9c61c96 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,3 +1,4 @@ +import { readFile } from 'node:fs/promises' import { createLogger, format, transports, Logger, Logform } from 'winston' import requestStats from 'request-stats' import type { Server } from 'http' @@ -66,3 +67,11 @@ export function subscribeLogServerRequests(server: Server): void { }) }) } + +export async function readBeeDesktopLogs(): Promise { + return readFile(getLogPath('bee-desktop.log'), { encoding: 'utf8' }) +} + +export async function readBeeLogs(): Promise { + return readFile(getLogPath('bee.log'), { encoding: 'utf8' }) +} diff --git a/src/server.ts b/src/server.ts index 1af9c45..5e801d9 100644 --- a/src/server.ts +++ b/src/server.ts @@ -12,7 +12,7 @@ import { readConfigYaml, writeConfigYaml } from './config-yaml' import { rebuildElectronTray } from './electron' import { createConfigFileAndAddress, createInitialTransaction, runLauncher } from './launcher' import { BeeManager } from './lifecycle' -import { logger, subscribeLogServerRequests } from './logger' +import { logger, readBeeDesktopLogs, readBeeLogs, subscribeLogServerRequests } from './logger' import { getPath } from './path' import { port } from './port' import { getStatus } from './status' @@ -22,9 +22,13 @@ export function runServer() { const app = new Koa() app.use(serve(getPath('static'))) app.use(async (context, next) => { - context.set('Access-Control-Allow-Origin', `http://localhost:${port.value}`) + const corsOrigin = process.env.NODE_ENV === 'development' ? '*' : `http://localhost:${port.value}` + context.set('Access-Control-Allow-Origin', corsOrigin) context.set('Access-Control-Allow-Credentials', 'true') - context.set('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With') + context.set( + 'Access-Control-Allow-Headers', + 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With, Referer, Baggage, Sentry-Trace', + ) context.set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS') await next() }) @@ -79,6 +83,23 @@ export function runServer() { router.get('/config', context => { context.body = readConfigYaml() }) + router.get('/logs/bee-desktop', async context => { + context.body = await readBeeDesktopLogs() + }) + router.get('/logs/bee', async context => { + try { + context.body = await readBeeLogs() + } catch (e) { + // Bee might not be started and hence the logs might not be available + if ((e as NodeJS.ErrnoException).code === 'ENOENT') { + context.status = 400 + + return + } + + throw e + } + }) router.post('/restart', async context => { BeeManager.stop() await BeeManager.waitForSigtermToFinish() From 444a5e8d67cd4a417bd288ac54a00070024f50a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Uhl=C3=AD=C5=99?= Date: Thu, 16 Jun 2022 09:34:15 +0200 Subject: [PATCH 2/2] fix: use latest bee logs --- src/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logger.ts b/src/logger.ts index 9c61c96..c9647a7 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -73,5 +73,5 @@ export async function readBeeDesktopLogs(): Promise { } export async function readBeeLogs(): Promise { - return readFile(getLogPath('bee.log'), { encoding: 'utf8' }) + return readFile(getLogPath('bee.current.log'), { encoding: 'utf8' }) }