From 8cbd812a2c04706f8f46de5355209b96783723b9 Mon Sep 17 00:00:00 2001 From: Cafe137 <77121044+Cafe137@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:07:01 -0700 Subject: [PATCH] feat: merge api (#658) --- .github/workflows/check.yaml | 3 +- README.md | 43 +++-- package-lock.json | 173 +++++------------- package.json | 4 +- src/App.tsx | 5 +- src/components/CashoutModal.tsx | 8 +- src/components/Map.tsx | 4 +- src/components/SideBar.tsx | 15 +- src/components/StampExtensionModal.tsx | 10 +- src/constants.ts | 1 - src/containers/DepositModal.tsx | 8 +- src/containers/StakeModal.tsx | 8 +- src/containers/WithdrawModal.tsx | 8 +- src/hooks/accounting.ts | 12 +- src/index.tsx | 11 +- src/layout/Dashboard.tsx | 51 +----- .../account/chequebook/AccountChequebook.tsx | 8 +- src/pages/account/wallet/AccountWallet.tsx | 2 +- src/pages/feeds/CreateNewFeed.tsx | 6 +- src/pages/feeds/UpdateFeed.tsx | 12 +- src/pages/files/Download.tsx | 2 +- src/pages/files/Upload.tsx | 18 +- src/pages/info/index.tsx | 46 +---- src/pages/settings/index.tsx | 8 - .../stamps/PostageStampAdvancedCreation.tsx | 8 +- .../stamps/PostageStampStandardCreation.tsx | 8 +- src/pages/stamps/StampsTable.tsx | 8 +- .../SetupSteps/ChequebookDeployFund.tsx | 11 +- .../SetupSteps/DebugConnectionCheck.tsx | 88 --------- .../SetupSteps/EthereumConnectionCheck.tsx | 44 ----- .../status/SetupSteps/PeerConnection.tsx | 7 +- src/pages/status/SetupSteps/VersionCheck.tsx | 49 ----- src/pages/status/index.tsx | 11 +- src/pages/top-up/Swap.tsx | 4 +- src/pages/top-up/index.tsx | 2 +- src/providers/Bee.tsx | 156 +++------------- src/providers/Settings.tsx | 31 +--- src/providers/Stamps.tsx | 13 +- src/utils/desktop.ts | 2 - src/utils/file.ts | 4 +- src/utils/identity.ts | 7 +- src/utils/index.ts | 14 +- src/utils/manifest.ts | 2 +- 43 files changed, 218 insertions(+), 717 deletions(-) delete mode 100644 src/pages/status/SetupSteps/DebugConnectionCheck.tsx delete mode 100644 src/pages/status/SetupSteps/EthereumConnectionCheck.tsx delete mode 100644 src/pages/status/SetupSteps/VersionCheck.tsx diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 0bc71ef..4f46b52 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -18,7 +18,6 @@ jobs: env: REACT_APP_BEE_HOST: https://api.test-node.staging.ethswarm.org/ - REACT_APP_BEE_DEBUG_HOST: https://debug.test-node.staging.ethswarm.org/ steps: - uses: actions/checkout@v2 @@ -77,7 +76,7 @@ jobs: bee-url: https://unlimited.gateway.ethswarm.org token: ${{ secrets.GHA_PAT_BASIC }} error-document: index.html - headers: "${{ secrets.GATEWAY_AUTHORIZATION_HEADER }}" + headers: '${{ secrets.GATEWAY_AUTHORIZATION_HEADER }}' - name: Upload to testnet uses: ethersphere/swarm-actions/upload-dir@v0 diff --git a/README.md b/README.md index 0c8564f..d952d1a 100644 --- a/README.md +++ b/README.md @@ -13,15 +13,17 @@ **Warning: This project is in alpha state. There might (and most probably will) be changes in the future to its API and working. Also, no guarantees can be made about its stability, efficiency, and security at this stage.** -This project is intended to be used with **Bee version 1.12.0-88c1d236**. -Using it with older or newer Bee versions is not recommended and may not work. Stay up to date by joining the -[official Discord](https://discord.gg/GU22h2utj6) and by keeping an eye on the -[releases tab](https://github.com/ethersphere/bee-dashboard/releases). +This project is intended to be used with \*\*Bee version + +1.12.0-88c1d236**. Using it with older or newer Bee versions is + +not recommended and may not work. Stay up to date by joining the [official Discord](https://discord.gg/GU22h2utj6) and +by keeping an eye on the [releases tab](https://github.com/ethersphere/bee-dashboard/releases). ![Status page](/ui_samples/info.png) -| Node Setup | Upload Files | Download Content | Accounting | Settings | -| ------------------------------------ | -------------------------------------- | ------------------------------------------ | ----------------------------------------- | ---------------------------------------- | +| Node Setup | Upload Files | Download Content | Accounting | Settings | +| ------------------------------------ | -------------------------------------- | ------------------------------------------ | ----------------------------------------- | ------------------------------------- | | ![Setup](/ui_samples/node_setup.png) | ![Upload](/ui_samples/file_upload.png) | ![Download](/ui_samples/file_download.png) | ![Accounting](/ui_samples/accounting.png) | ![Settings](/ui_samples/settings.png) | ## Table of Contents @@ -45,9 +47,9 @@ npm install -g @ethersphere/bee-dashboard ## Usage -:warning: To successfully connect to the Bee node, you will need to enable the Debug API and CORS. You can do so by -setting `cors-allowed-origins: ['*']` and `debug-api-enable: true` in the Bee config file and then restart the Bee node. -To see where the config file is, consult the +:warning: To successfully connect to the Bee node, you will need to enable CORS. You can do so by setting +`cors-allowed-origins: ['*']` in the Bee config file and then restart the Bee node. To see where the config file is, +consult the [official Bee documentation](https://docs.ethswarm.org/docs/working-with-bee/configuration#configuring-bee-installed-using-a-package-manager) ### Terminal @@ -96,25 +98,29 @@ The Bee Dashboard runs in development mode on [http://localhost:3031/](http://lo #### Environmental variables -The CRA supports to specify "environmental variables" during build time which are then hardcoded into the served static files. -We support following variables: +The CRA supports to specify "environmental variables" during build time which are then hardcoded into the served static +files. We support following variables: - - `REACT_APP_BEE_DESKTOP_ENABLED` (`boolean`) that toggles if the Dashboard is in Desktop mode or not. - - `REACT_APP_BEE_DESKTOP_URL` (`string`) defines custom URL where the Desktop API is expected. By default, it is same origin under which the Dashboard is served. - - `REACT_APP_BEE_HOST` (`string`) defines custom Bee API URL to be used as default one. By default, the `http://localhost:1633` is used. - - `REACT_APP_BEE_DEBUG_HOST` (`string`) defines custom Bee Debug API URL to be used as default one. By default, the `http://localhost:1635` is used. - - `REACT_APP_DEFAULT_RPC_URL` (`string`) defines the default RPC provider URL. Be aware, that his only configures the default value. The user can override this in Settings, which is then persisted in local store and has priority over the value set in this env. variable. By default `https://xdai.fairdatasociety.org` is used. +- `REACT_APP_BEE_DESKTOP_ENABLED` (`boolean`) that toggles if the Dashboard is in Desktop mode or not. +- `REACT_APP_BEE_DESKTOP_URL` (`string`) defines custom URL where the Desktop API is expected. By default, it is same + origin under which the Dashboard is served. +- `REACT_APP_BEE_HOST` (`string`) defines custom Bee API URL to be used as default one. By default, the + `http://localhost:1633` is used. +- `REACT_APP_DEFAULT_RPC_URL` (`string`) defines the default RPC provider URL. Be aware, that his only configures the + default value. The user can override this in Settings, which is then persisted in local store and has priority over + the value set in this env. variable. By default `https://xdai.fairdatasociety.org` is used. #### Swarm Desktop development -If you want to develop Bee Dashboard in the Swarm Desktop mode, then spin up `swarm-desktop` to the point where Desktop is initialized (eq. the splash screen disappear) and: +If you want to develop Bee Dashboard in the Swarm Desktop mode, then spin up `swarm-desktop` to the point where Desktop +is initialized (eq. the splash screen disappear) and: ```sh echo "REACT_APP_BEE_DESKTOP_URL=http://localhost:3054 REACT_APP_BEE_DESKTOP_ENABLED=true" > .env.development.local npm start -npm run desktop # This will inject the API key to the Dashboard +npm run desktop # This will inject the API key to the Dashboard ``` ## Contribute @@ -136,5 +142,4 @@ See what "Maintainer" means [here](https://github.com/ethersphere/repo-maintaine [BSD-3-Clause](./LICENSE) - [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fethersphere%2Fbee-dashboard.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fethersphere%2Fbee-dashboard?ref=badge_large) diff --git a/package-lock.json b/package-lock.json index b5f99e8..8c4e77c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.25.0", "license": "BSD-3-Clause", "dependencies": { - "@ethersphere/bee-js": "^6.7.0", + "@ethersphere/bee-js": "^7.0.0", "@ethersphere/swarm-cid": "^0.1.0", "@material-ui/core": "4.12.3", "@material-ui/icons": "4.11.2", @@ -39,7 +39,6 @@ "react-router-dom": "6.2.1", "react-syntax-highlighter": "15.4.4", "remixicon-react": "^1.0.0", - "semver": "7.3.5", "serve-handler": "6.1.3", "stream": "npm:stream-browserify", "stream-browserify": "^3.0.0" @@ -69,7 +68,6 @@ "@types/react-router": "5.1.18", "@types/react-router-dom": "5.3.2", "@types/react-syntax-highlighter": "13.5.2", - "@types/semver": "7.3.9", "@typescript-eslint/eslint-plugin": "5.28.0", "@typescript-eslint/parser": "5.28.0", "babel-eslint": "10.1.0", @@ -2440,38 +2438,28 @@ } }, "node_modules/@ethersphere/bee-js": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-6.7.0.tgz", - "integrity": "sha512-t1bsUj9BmICuRL6XENTVyZZCfkFuCjc6pQxOekuVFLBd0Qpmyf87iRpVizvZN5IKhVqqw9xCzkg8otJKQdAKNA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-7.0.0.tgz", + "integrity": "sha512-SbWsV/FBOu42SB3oBWiZluD5rLbnHlS+vfHSPiWmbFrqyRh8ZtM/NA8nxRF7IOstP7tXl6RYAQnAHrAei+54lQ==", "dependencies": { "@ethersphere/swarm-cid": "^0.1.0", - "@types/readable-stream": "^2.3.13", - "axios": "^0.27.2", - "cafe-utility": "^10.8.1", + "axios": "^0.28.1", + "cafe-utility": "^21.3.1", "elliptic": "^6.5.4", - "fetch-blob": "2.1.2", "isomorphic-ws": "^4.0.1", "js-sha3": "^0.8.0", "semver": "^7.3.5", - "tar-js": "^0.3.0", - "web-streams-polyfill": "^4.0.0-beta.3", "ws": "^8.7.0" - }, - "engines": { - "bee": "1.13.0-f1067884", - "beeApiVersion": "4.0.0", - "beeDebugApiVersion": "4.0.0", - "node": ">=14.0.0", - "npm": ">=6.0.0" } }, "node_modules/@ethersphere/bee-js/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", + "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/@ethersphere/bee-js/node_modules/form-data": { @@ -2487,24 +2475,16 @@ "node": ">= 6" } }, - "node_modules/@ethersphere/bee-js/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, "node_modules/@ethersphere/bee-js/node_modules/ws": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -4891,7 +4871,8 @@ "node_modules/@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -5008,15 +4989,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" }, - "node_modules/@types/readable-stream": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.13.tgz", - "integrity": "sha512-4JSCx8EUzaW9Idevt+9lsRAt1lcSccoQfE+AouM1gk8sFxnnytKNIO3wTl9Dy+4m6jRJ1yXhboLHHT/LXBQiEw==", - "dependencies": { - "@types/node": "*", - "safe-buffer": "*" - } - }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -5037,12 +5009,6 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, - "node_modules/@types/semver": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", - "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", - "dev": true - }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -6921,9 +6887,9 @@ } }, "node_modules/cafe-utility": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/cafe-utility/-/cafe-utility-10.9.1.tgz", - "integrity": "sha512-/gq+ANoYvMJKrXXI/2YAiB2KhNlRhxB5XcWbbMWFA39LLCxkPhG5A9Ehy4QGv28EvndZLbBV44lJyCG+JIoDuw==" + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/cafe-utility/-/cafe-utility-21.3.1.tgz", + "integrity": "sha512-6e5dovyMdaWNbWOY+gvpb8LnIwyO7D53uf5At0abjeAbp998B3hohE5aePRSPRSY8nzbNNTsUFmExKpUQaR7Bw==" }, "node_modules/call-bind": { "version": "1.0.2", @@ -10206,19 +10172,6 @@ "pend": "~1.2.0" } }, - "node_modules/fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", - "engines": { - "node": "^10.17.0 || >=12.3.0" - }, - "peerDependenciesMeta": { - "domexception": { - "optional": true - } - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -16490,8 +16443,7 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/psl": { "version": "1.8.0", @@ -18837,14 +18789,6 @@ "tar-stream": "^2.1.4" } }, - "node_modules/tar-js": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tar-js/-/tar-js-0.3.0.tgz", - "integrity": "sha1-aUmqv7C6GLsVYq5RpDn9DzAYOhc=", - "engines": { - "node": "*" - } - }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", @@ -22305,31 +22249,28 @@ } }, "@ethersphere/bee-js": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-6.7.0.tgz", - "integrity": "sha512-t1bsUj9BmICuRL6XENTVyZZCfkFuCjc6pQxOekuVFLBd0Qpmyf87iRpVizvZN5IKhVqqw9xCzkg8otJKQdAKNA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-7.0.0.tgz", + "integrity": "sha512-SbWsV/FBOu42SB3oBWiZluD5rLbnHlS+vfHSPiWmbFrqyRh8ZtM/NA8nxRF7IOstP7tXl6RYAQnAHrAei+54lQ==", "requires": { "@ethersphere/swarm-cid": "^0.1.0", - "@types/readable-stream": "^2.3.13", - "axios": "^0.27.2", - "cafe-utility": "^10.8.1", + "axios": "^0.28.1", + "cafe-utility": "^21.3.1", "elliptic": "^6.5.4", - "fetch-blob": "2.1.2", "isomorphic-ws": "^4.0.1", "js-sha3": "^0.8.0", "semver": "^7.3.5", - "tar-js": "^0.3.0", - "web-streams-polyfill": "^4.0.0-beta.3", "ws": "^8.7.0" }, "dependencies": { "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", + "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "form-data": { @@ -22342,15 +22283,10 @@ "mime-types": "^2.1.12" } }, - "web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" - }, "ws": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "requires": {} } } @@ -23963,7 +23899,8 @@ "@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", + "dev": true }, "@types/parse-json": { "version": "4.0.0", @@ -24082,15 +24019,6 @@ "@types/react": "*" } }, - "@types/readable-stream": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.13.tgz", - "integrity": "sha512-4JSCx8EUzaW9Idevt+9lsRAt1lcSccoQfE+AouM1gk8sFxnnytKNIO3wTl9Dy+4m6jRJ1yXhboLHHT/LXBQiEw==", - "requires": { - "@types/node": "*", - "safe-buffer": "*" - } - }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -24111,12 +24039,6 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, - "@types/semver": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", - "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", - "dev": true - }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -25566,9 +25488,9 @@ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "cafe-utility": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/cafe-utility/-/cafe-utility-10.9.1.tgz", - "integrity": "sha512-/gq+ANoYvMJKrXXI/2YAiB2KhNlRhxB5XcWbbMWFA39LLCxkPhG5A9Ehy4QGv28EvndZLbBV44lJyCG+JIoDuw==" + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/cafe-utility/-/cafe-utility-21.3.1.tgz", + "integrity": "sha512-6e5dovyMdaWNbWOY+gvpb8LnIwyO7D53uf5At0abjeAbp998B3hohE5aePRSPRSY8nzbNNTsUFmExKpUQaR7Bw==" }, "call-bind": { "version": "1.0.2", @@ -28080,11 +28002,6 @@ "pend": "~1.2.0" } }, - "fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==" - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -32619,8 +32536,7 @@ "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "psl": { "version": "1.8.0", @@ -34440,11 +34356,6 @@ "tar-stream": "^2.1.4" } }, - "tar-js": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tar-js/-/tar-js-0.3.0.tgz", - "integrity": "sha1-aUmqv7C6GLsVYq5RpDn9DzAYOhc=" - }, "tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", diff --git a/package.json b/package.json index d6e7fc1..e95eec0 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/ethersphere/bee-dashboard.git" }, "dependencies": { - "@ethersphere/bee-js": "^6.7.0", + "@ethersphere/bee-js": "^7.0.0", "@ethersphere/swarm-cid": "^0.1.0", "@material-ui/core": "4.12.3", "@material-ui/icons": "4.11.2", @@ -56,7 +56,6 @@ "react-router-dom": "6.2.1", "react-syntax-highlighter": "15.4.4", "remixicon-react": "^1.0.0", - "semver": "7.3.5", "serve-handler": "6.1.3", "stream": "npm:stream-browserify", "stream-browserify": "^3.0.0" @@ -83,7 +82,6 @@ "@types/react-router": "5.1.18", "@types/react-router-dom": "5.3.2", "@types/react-syntax-highlighter": "13.5.2", - "@types/semver": "7.3.9", "@typescript-eslint/eslint-plugin": "5.28.0", "@typescript-eslint/parser": "5.28.0", "babel-eslint": "10.1.0", diff --git a/src/App.tsx b/src/App.tsx index 6c85f56..41125ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -18,7 +18,6 @@ import { theme } from './theme' interface Props { beeApiUrl?: string - beeDebugApiUrl?: string defaultRpcUrl?: string lockedApiSettings?: boolean isDesktop?: boolean @@ -28,7 +27,6 @@ interface Props { const App = ({ beeApiUrl, - beeDebugApiUrl, defaultRpcUrl, lockedApiSettings, isDesktop, @@ -40,14 +38,13 @@ const App = ({ - + diff --git a/src/components/CashoutModal.tsx b/src/components/CashoutModal.tsx index ff3586d..28eaaf1 100644 --- a/src/components/CashoutModal.tsx +++ b/src/components/CashoutModal.tsx @@ -19,8 +19,8 @@ interface Props { export default function CheckoutModal({ peerId, uncashedAmount }: Props): ReactElement { const [open, setOpen] = useState(false) const [loadingCashout, setLoadingCashout] = useState(false) + const { beeApi } = useContext(SettingsContext) const { enqueueSnackbar } = useSnackbar() - const { beeDebugApi } = useContext(SettingsContext) const handleClickOpen = () => { setOpen(true) @@ -31,11 +31,9 @@ export default function CheckoutModal({ peerId, uncashedAmount }: Props): ReactE } const handleCashout = () => { - if (!beeDebugApi) return - - if (peerId) { + if (peerId && beeApi) { setLoadingCashout(true) - beeDebugApi + beeApi .cashoutLastCheque(peerId) .then(res => { setOpen(false) diff --git a/src/components/Map.tsx b/src/components/Map.tsx index 30c4234..43f2323 100644 --- a/src/components/Map.tsx +++ b/src/components/Map.tsx @@ -1,9 +1,9 @@ -import { ReactElement, CSSProperties, useContext, useState, useEffect } from 'react' import type { Peer } from '@ethersphere/bee-js' import DottedMap, { DottedMapWithoutCountriesLib } from 'dotted-map/without-countries' +import { CSSProperties, ReactElement, useContext, useEffect, useState } from 'react' +import mapData from '../assets/data/map-data.json' import nodesDb from '../assets/data/nodes-db.json' import { Context } from '../providers/Bee' -import mapData from '../assets/data/map-data.json' interface Props { style?: CSSProperties diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index d0140b7..d63abf4 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -1,24 +1,23 @@ -import { Divider, Drawer, Grid, Link as MUILink, List } from '@material-ui/core' -import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' +import { BeeModes } from '@ethersphere/bee-js' +import { Divider, Drawer, Grid, List, Link as MUILink } from '@material-ui/core' +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles' import { ReactElement, useContext } from 'react' import { Link } from 'react-router-dom' import FilesIcon from 'remixicon-react/ArrowUpDownLineIcon' import DocsIcon from 'remixicon-react/BookOpenLineIcon' -import GithubIcon from 'remixicon-react/GithubFillIcon' import ExternalLinkIcon from 'remixicon-react/ExternalLinkLineIcon' +import GithubIcon from 'remixicon-react/GithubFillIcon' import HomeIcon from 'remixicon-react/Home3LineIcon' import SettingsIcon from 'remixicon-react/Settings2LineIcon' import AccountIcon from 'remixicon-react/Wallet3LineIcon' -import { Context as BeeContext } from '../providers/Bee' -import { Context as SettingsContext } from '../providers/Settings' import DashboardLogo from '../assets/dashboard-logo.svg' import DesktopLogo from '../assets/desktop-logo.svg' +import { BEE_DOCS_HOST, GITHUB_BEE_DASHBOARD_URL } from '../constants' +import { Context as BeeContext } from '../providers/Bee' +import { Context as SettingsContext } from '../providers/Settings' import { ROUTES } from '../routes' import SideBarItem from './SideBarItem' import SideBarStatus from './SideBarStatus' -import { BeeModes } from '@ethersphere/bee-js' -import { BEE_DOCS_HOST } from '../constants' -import { GITHUB_BEE_DASHBOARD_URL } from '../constants' const drawerWidth = 300 diff --git a/src/components/StampExtensionModal.tsx b/src/components/StampExtensionModal.tsx index d86a087..c71d83d 100644 --- a/src/components/StampExtensionModal.tsx +++ b/src/components/StampExtensionModal.tsx @@ -1,4 +1,4 @@ -import { BeeDebug } from '@ethersphere/bee-js' +import { Bee } from '@ethersphere/bee-js' import { Box } from '@material-ui/core' import Button from '@material-ui/core/Button' import Dialog from '@material-ui/core/Dialog' @@ -12,11 +12,11 @@ import { ReactElement, ReactNode, useState } from 'react' interface Props { type: 'Topup' | 'Dilute' icon: ReactNode - beeDebug: BeeDebug + bee: Bee stamp: string } -export default function StampExtensionModal({ type, icon, beeDebug, stamp }: Props): ReactElement { +export default function StampExtensionModal({ type, icon, bee, stamp }: Props): ReactElement { const [open, setOpen] = useState(false) const [amount, setAmount] = useState('') const { enqueueSnackbar } = useSnackbar() @@ -34,7 +34,7 @@ export default function StampExtensionModal({ type, icon, beeDebug, stamp }: Pro const handleAction = async () => { if (type === 'Topup') { try { - await beeDebug.topUpBatch(stamp, amount) + await bee.topUpBatch(stamp, amount) enqueueSnackbar(`Successfully topped up stamp, your changes will appear soon`, { variant: 'success' }) } catch (error) { enqueueSnackbar(`Failed to topup stamp: ${error || 'Unknown reason'}`, { variant: 'error' }) @@ -43,7 +43,7 @@ export default function StampExtensionModal({ type, icon, beeDebug, stamp }: Pro if (type === 'Dilute') { try { - await beeDebug.diluteBatch(stamp, parseInt(amount, 10)) + await bee.diluteBatch(stamp, parseInt(amount, 10)) enqueueSnackbar(`Successfully diluted stamp, your changes will appear soon`, { variant: 'success' }) } catch (error) { enqueueSnackbar(`Failed to dilute stamp: ${error || 'Unknown reason'}`, { variant: 'error' }) diff --git a/src/constants.ts b/src/constants.ts index 6359e8a..daa3df8 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -11,5 +11,4 @@ export const BEE_DESKTOP_LATEST_RELEASE_PAGE = 'https://github.com/ethersphere/b export const BEE_DESKTOP_LATEST_RELEASE_PAGE_API = 'https://api.github.com/repos/ethersphere/bee-desktop/releases/latest' export const DEFAULT_BEE_API_HOST = 'http://localhost:1633' -export const DEFAULT_BEE_DEBUG_API_HOST = 'http://localhost:1635' export const DEFAULT_RPC_URL = 'https://xdai.fairdatasociety.org' diff --git a/src/containers/DepositModal.tsx b/src/containers/DepositModal.tsx index 5c3aeee..9705a99 100644 --- a/src/containers/DepositModal.tsx +++ b/src/containers/DepositModal.tsx @@ -6,7 +6,7 @@ import { Context as BeeContext } from '../providers/Bee' import { Context as SettingsContext } from '../providers/Settings' export default function DepositModal(): ReactElement { - const { beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const { refresh } = useContext(BeeContext) return ( @@ -18,9 +18,11 @@ export default function DepositModal(): ReactElement { icon={} min={new BigNumber(0)} action={async (amount: bigint) => { - if (!beeDebugApi) throw new Error('Bee Debug URL is not valid') + if (!beeApi) { + throw new Error('Bee URL is not valid') + } - const transactionHash = await beeDebugApi.depositTokens(amount.toString()) + const transactionHash = await beeApi.depositTokens(amount.toString()) refresh() return transactionHash diff --git a/src/containers/StakeModal.tsx b/src/containers/StakeModal.tsx index 463a40f..6af3052 100644 --- a/src/containers/StakeModal.tsx +++ b/src/containers/StakeModal.tsx @@ -11,7 +11,7 @@ interface Props { } export default function StakeModal({ onStarted, onFinished }: Props): ReactElement { - const { beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const { refresh } = useContext(BeeContext) return ( @@ -23,12 +23,14 @@ export default function StakeModal({ onStarted, onFinished }: Props): ReactEleme icon={} min={new BigNumber(0)} action={async (amount: bigint) => { - if (!beeDebugApi) throw new Error('Bee Debug URL is not valid') + if (!beeApi) { + throw new Error('Bee URL is not valid') + } onStarted() try { - await beeDebugApi.depositStake(amount.toString()) + await beeApi.depositStake(amount.toString()) } finally { refresh() onFinished() diff --git a/src/containers/WithdrawModal.tsx b/src/containers/WithdrawModal.tsx index 97162c9..1fe6b39 100644 --- a/src/containers/WithdrawModal.tsx +++ b/src/containers/WithdrawModal.tsx @@ -6,7 +6,7 @@ import { Context as BeeContext } from '../providers/Bee' import { Context as SettingsContext } from '../providers/Settings' export default function WithdrawModal(): ReactElement { - const { beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const { refresh } = useContext(BeeContext) return ( @@ -18,9 +18,11 @@ export default function WithdrawModal(): ReactElement { icon={} min={new BigNumber(0)} action={async (amount: bigint) => { - if (!beeDebugApi) throw new Error('Bee Debug URL is not valid') + if (!beeApi) { + throw new Error('Bee URL is not valid') + } - const transactionHash = await beeDebugApi.withdrawTokens(amount.toString()) + const transactionHash = await beeApi.withdrawTokens(amount.toString()) refresh() return transactionHash diff --git a/src/hooks/accounting.ts b/src/hooks/accounting.ts index 959686d..c379621 100644 --- a/src/hooks/accounting.ts +++ b/src/hooks/accounting.ts @@ -1,8 +1,8 @@ -import { LastCashoutActionResponse, BeeDebug } from '@ethersphere/bee-js' +import { Bee, LastCashoutActionResponse } from '@ethersphere/bee-js' import { useEffect, useState } from 'react' import { Token } from '../models/Token' +import { Balance, Settlement, Settlements } from '../types' import { makeRetriablePromise, unwrapPromiseSettlements } from '../utils' -import { Balance, Settlements, Settlement } from '../types' interface UseAccountingHook { isLoadingUncashed: boolean @@ -79,7 +79,7 @@ function mergeAccounting( } export const useAccounting = ( - beeDebugApi: BeeDebug | null, + beeApi: Bee | null, settlements: Settlements | null, balances: Balance[] | null, ): UseAccountingHook => { @@ -88,19 +88,19 @@ export const useAccounting = ( useEffect(() => { // We don't have any settlements loaded yet or we are already loading/have loaded the uncashed amounts - if (isLoadingUncashed || !beeDebugApi || !settlements || uncashedAmounts) return + if (isLoadingUncashed || !beeApi || !settlements || uncashedAmounts) return setIsloadingUncashed(true) const promises = settlements.settlements .filter(({ received }) => received.toBigNumber.gt('0')) - .map(({ peer }) => makeRetriablePromise(() => beeDebugApi.getLastCashoutAction(peer))) + .map(({ peer }) => makeRetriablePromise(() => beeApi.getLastCashoutAction(peer))) Promise.allSettled(promises).then(settlements => { const results = unwrapPromiseSettlements(settlements) setUncashedAmounts(results.fulfilled) setIsloadingUncashed(false) }) - }, [settlements, isLoadingUncashed, uncashedAmounts, beeDebugApi]) + }, [settlements, isLoadingUncashed, uncashedAmounts, beeApi]) const accounting = mergeAccounting(balances, settlements?.settlements, uncashedAmounts) diff --git a/src/index.tsx b/src/index.tsx index 01b8629..089e4fd 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,24 +1,17 @@ import React from 'react' import ReactDOM from 'react-dom' -import './index.css' import App from './App' +import './index.css' import reportWebVitals from './reportWebVitals' const desktopEnabled = Boolean(process.env.REACT_APP_BEE_DESKTOP_ENABLED) const desktopUrl = process.env.REACT_APP_BEE_DESKTOP_URL const beeApiUrl = process.env.REACT_APP_BEE_HOST -const beeDebugApiUrl = process.env.REACT_APP_BEE_DEBUG_HOST const defaultRpcUrl = process.env.REACT_APP_DEFAULT_RPC_URL ReactDOM.render( - + , document.getElementById('root'), ) diff --git a/src/layout/Dashboard.tsx b/src/layout/Dashboard.tsx index d2e8bd5..7544029 100644 --- a/src/layout/Dashboard.tsx +++ b/src/layout/Dashboard.tsx @@ -1,14 +1,14 @@ import { Button, CircularProgress, Container, IconButton } from '@material-ui/core' -import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' -import React, { ReactElement, useContext, useEffect } from 'react' +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles' import { useSnackbar } from 'notistack' +import React, { ReactElement, useContext, useEffect } from 'react' import CloseIcon from 'remixicon-react/CloseCircleLineIcon' import ErrorBoundary from '../components/ErrorBoundary' import SideBar from '../components/SideBar' +import { BEE_DESKTOP_LATEST_RELEASE_PAGE } from '../constants' +import { useBeeDesktop, useNewBeeDesktopVersion } from '../hooks/apiHooks' import { Context as BeeContext } from '../providers/Bee' import { Context as SettingsContext } from '../providers/Settings' -import { useBeeDesktop, useNewBeeDesktopVersion } from '../hooks/apiHooks' -import { BEE_DESKTOP_LATEST_RELEASE_PAGE } from '../constants' const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -27,53 +27,12 @@ interface Props { const Dashboard = (props: Props): ReactElement => { const classes = useStyles() - const { isLoading, isLatestBeeVersion, latestBeeRelease, latestBeeVersionUrl, latestUserVersion } = - useContext(BeeContext) + const { isLoading } = useContext(BeeContext) const { isDesktop, desktopUrl } = useContext(SettingsContext) const { desktopAutoUpdateEnabled } = useBeeDesktop(isDesktop, desktopUrl) const { newBeeDesktopVersion } = useNewBeeDesktopVersion(isDesktop, desktopUrl, desktopAutoUpdateEnabled) const { enqueueSnackbar, closeSnackbar } = useSnackbar() - // New version of Bee client notification - useEffect(() => { - if (!isLoading && !isDesktop && !isLatestBeeVersion && latestBeeRelease && latestUserVersion) { - enqueueSnackbar(`There is new Bee version ${latestBeeRelease?.name}!`, { - variant: 'warning', - preventDuplicate: true, - key: 'beeNewVersion', - persist: true, - action: key => ( - - - { - closeSnackbar(key) - }} - > - - - - ), - }) - } - }, [ - closeSnackbar, - enqueueSnackbar, - isLatestBeeVersion, - isDesktop, - latestBeeRelease, - latestBeeVersionUrl, - isLoading, - latestUserVersion, - ]) - useEffect(() => { // When autoupdate is enabled then we leave the version check for the built-in Electron update mechanism if (desktopAutoUpdateEnabled) { diff --git a/src/pages/account/chequebook/AccountChequebook.tsx b/src/pages/account/chequebook/AccountChequebook.tsx index d90f3ad..8d9a6e5 100644 --- a/src/pages/account/chequebook/AccountChequebook.tsx +++ b/src/pages/account/chequebook/AccountChequebook.tsx @@ -1,3 +1,4 @@ +import { Box } from '@material-ui/core' import { ReactElement, useContext } from 'react' import ExpandableList from '../../../components/ExpandableList' import ExpandableListItem from '../../../components/ExpandableListItem' @@ -7,19 +8,18 @@ import TroubleshootConnectionCard from '../../../components/TroubleshootConnecti import DepositModal from '../../../containers/DepositModal' import WithdrawModal from '../../../containers/WithdrawModal' import { useAccounting } from '../../../hooks/accounting' -import { CheckState, Context as BeeContext } from '../../../providers/Bee' +import { Context as BeeContext, CheckState } from '../../../providers/Bee' import { Context as SettingsContext } from '../../../providers/Settings' import PeerBalances from '../../accounting/PeerBalances' import { AccountNavigation } from '../AccountNavigation' import { Header } from '../Header' -import { Box } from '@material-ui/core' export function AccountChequebook(): ReactElement { const { status, nodeAddresses, chequebookAddress, chequebookBalance, settlements, peerBalances } = useContext(BeeContext) - const { beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) - const { accounting, totalUncashed, isLoadingUncashed } = useAccounting(beeDebugApi, settlements, peerBalances) + const { accounting, totalUncashed, isLoadingUncashed } = useAccounting(beeApi, settlements, peerBalances) if (status.all === CheckState.ERROR) return diff --git a/src/pages/account/wallet/AccountWallet.tsx b/src/pages/account/wallet/AccountWallet.tsx index df8b1cd..35dc1a4 100644 --- a/src/pages/account/wallet/AccountWallet.tsx +++ b/src/pages/account/wallet/AccountWallet.tsx @@ -11,7 +11,7 @@ import ExpandableListItemKey from '../../../components/ExpandableListItemKey' import { Loading } from '../../../components/Loading' import { SwarmButton } from '../../../components/SwarmButton' import TroubleshootConnectionCard from '../../../components/TroubleshootConnectionCard' -import { CheckState, Context as BeeContext } from '../../../providers/Bee' +import { Context as BeeContext, CheckState } from '../../../providers/Bee' import { Context as SettingsContext } from '../../../providers/Settings' import { Context as BalanceProvider } from '../../../providers/WalletBalance' import { ROUTES } from '../../../routes' diff --git a/src/pages/feeds/CreateNewFeed.tsx b/src/pages/feeds/CreateNewFeed.tsx index fdd8f1a..fb81db2 100644 --- a/src/pages/feeds/CreateNewFeed.tsx +++ b/src/pages/feeds/CreateNewFeed.tsx @@ -2,9 +2,9 @@ import { Box, Grid, Typography } from '@material-ui/core' import { Form, Formik } from 'formik' import { useSnackbar } from 'notistack' import { ReactElement, useContext, useState } from 'react' +import { useNavigate } from 'react-router' import Check from 'remixicon-react/CheckLineIcon' import X from 'remixicon-react/CloseLineIcon' -import { useNavigate } from 'react-router' import { DocumentationText } from '../../components/DocumentationText' import ExpandableListItemActions from '../../components/ExpandableListItemActions' import ExpandableListItemKey from '../../components/ExpandableListItemKey' @@ -30,7 +30,7 @@ const initialValues: FormValues = { } export default function CreateNewFeed(): ReactElement { - const { beeApi, beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const { identities, setIdentities } = useContext(FeedsContext) const [loading, setLoading] = useState(false) const { enqueueSnackbar } = useSnackbar() @@ -47,7 +47,7 @@ export default function CreateNewFeed(): ReactElement { return } const wallet = generateWallet() - const stamps = await beeDebugApi?.getAllPostageBatch() + const stamps = await beeApi.getAllPostageBatch() if (!stamps || !stamps.length) { enqueueSnackbar(No stamp available, { variant: 'error' }) diff --git a/src/pages/feeds/UpdateFeed.tsx b/src/pages/feeds/UpdateFeed.tsx index 851939f..bf108e5 100644 --- a/src/pages/feeds/UpdateFeed.tsx +++ b/src/pages/feeds/UpdateFeed.tsx @@ -1,16 +1,16 @@ import { Box, Grid, Typography } from '@material-ui/core' import { useSnackbar } from 'notistack' import { ReactElement, useContext, useEffect, useState } from 'react' -import X from 'remixicon-react/CloseLineIcon' -import Bookmark from 'remixicon-react/BookmarkLineIcon' import { useNavigate, useParams } from 'react-router' +import Bookmark from 'remixicon-react/BookmarkLineIcon' +import X from 'remixicon-react/CloseLineIcon' import ExpandableListItemActions from '../../components/ExpandableListItemActions' import { HistoryHeader } from '../../components/HistoryHeader' import { SwarmButton } from '../../components/SwarmButton' import { SelectEvent, SwarmSelect } from '../../components/SwarmSelect' import TroubleshootConnectionCard from '../../components/TroubleshootConnectionCard' import { Context as BeeContext } from '../../providers/Bee' -import { Context as IdentityContext, Identity } from '../../providers/Feeds' +import { Identity, Context as IdentityContext } from '../../providers/Feeds' import { Context as SettingsContext } from '../../providers/Settings' import { Context as StampContext } from '../../providers/Stamps' import { ROUTES } from '../../routes' @@ -19,7 +19,7 @@ import { FeedPasswordDialog } from './FeedPasswordDialog' export default function UpdateFeed(): ReactElement { const { identities, setIdentities } = useContext(IdentityContext) - const { beeApi, beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const { stamps, refresh } = useContext(StampContext) const { status } = useContext(BeeContext) const { hash } = useParams() @@ -66,7 +66,7 @@ export default function UpdateFeed(): ReactElement { async function onFeedUpdate(identity: Identity, password?: string) { setLoading(true) - if (!beeApi || !beeDebugApi || !selectedStamp) { + if (!beeApi || !selectedStamp) { enqueueSnackbar(Bee API unavailabe, { variant: 'error' }) setLoading(false) @@ -74,7 +74,7 @@ export default function UpdateFeed(): ReactElement { } try { - await updateFeed(beeApi, beeDebugApi, identity, hash!, selectedStamp, password as string) // eslint-disable-line + await updateFeed(beeApi, identity, hash!, selectedStamp, password as string) // eslint-disable-line persistIdentity(identities, identity) setIdentities([...identities]) navigate(ROUTES.ACCOUNT_FEEDS_VIEW.replace(':uuid', identity.uuid)) diff --git a/src/pages/files/Download.tsx b/src/pages/files/Download.tsx index bd3f87e..31a482d 100644 --- a/src/pages/files/Download.tsx +++ b/src/pages/files/Download.tsx @@ -10,7 +10,7 @@ import { Context as FileContext, defaultUploadOrigin } from '../../providers/Fil import { Context as SettingsContext } from '../../providers/Settings' import { ROUTES } from '../../routes' import { recognizeEnsOrSwarmHash, regexpEns } from '../../utils' -import { determineHistoryName, HISTORY_KEYS, putHistory } from '../../utils/local-storage' +import { HISTORY_KEYS, determineHistoryName, putHistory } from '../../utils/local-storage' import { ManifestJs } from '../../utils/manifest' import { FileNavigation } from './FileNavigation' diff --git a/src/pages/files/Upload.tsx b/src/pages/files/Upload.tsx index 6452c13..8518fd7 100644 --- a/src/pages/files/Upload.tsx +++ b/src/pages/files/Upload.tsx @@ -32,7 +32,7 @@ export function Upload(): ReactElement { const [showPasswordPrompt, setShowPasswordPrompt] = useState(false) const { stamps, refresh } = useContext(StampsContext) - const { beeApi, beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const { files, setFiles, uploadOrigin, metadata, previewUri, previewBlob } = useContext(FileContext) const { identities, setIdentities } = useContext(IdentityContext) const { status } = useContext(BeeContext) @@ -125,9 +125,7 @@ export function Upload(): ReactElement { setUploading(true) - if (beeDebugApi) { - await waitUntilStampUsable(stamp.batchID, beeDebugApi) - } + await waitUntilStampUsable(stamp.batchID, beeApi) beeApi .uploadFiles(stamp.batchID, fls, { indexDocument, deferred: true }) @@ -137,13 +135,11 @@ export function Upload(): ReactElement { if (uploadOrigin.origin === 'UPLOAD') { navigate(ROUTES.HASH.replace(':hash', hash.reference), { replace: true }) } else { - updateFeed(beeApi, beeDebugApi, identity as Identity, hash.reference, stamp.batchID, password as string).then( - () => { - persistIdentity(identities, identity as Identity) - setIdentities([...identities]) - navigate(ROUTES.ACCOUNT_FEEDS_VIEW.replace(':uuid', uploadOrigin.uuid as string), { replace: true }) - }, - ) + updateFeed(beeApi, identity as Identity, hash.reference, stamp.batchID, password as string).then(() => { + persistIdentity(identities, identity as Identity) + setIdentities([...identities]) + navigate(ROUTES.ACCOUNT_FEEDS_VIEW.replace(':uuid', uploadOrigin.uuid as string), { replace: true }) + }) } }) .catch(e => { diff --git a/src/pages/info/index.tsx b/src/pages/info/index.tsx index 9c9d5eb..b71a92c 100644 --- a/src/pages/info/index.tsx +++ b/src/pages/info/index.tsx @@ -12,16 +12,7 @@ import NodeInfoCard from './NodeInfoCard' import { WalletInfoCard } from './WalletInfoCard' export default function Status(): ReactElement { - const { - debugApiReadiness, - status, - latestUserVersion, - isLatestBeeVersion, - latestBeeVersionUrl, - topology, - nodeInfo, - chainId, - } = useContext(BeeContext) + const { status, topology, nodeInfo, chainId } = useContext(BeeContext) const { isDesktop, desktopUrl } = useContext(SettingsContext) const { beeDesktopVersion } = useBeeDesktop(isDesktop, desktopUrl) const { newBeeDesktopVersion } = useNewBeeDesktopVersion(isDesktop, desktopUrl, false) @@ -30,14 +21,10 @@ export default function Status(): ReactElement {
- {debugApiReadiness && ( - <> -
- -
- - - )} +
+ +
+
@@ -65,29 +52,6 @@ export default function Status(): ReactElement { } /> )} - - - Bee - - {` ${latestUserVersion ?? '-'} `} - {latestUserVersion && !isDesktop && ( - - )} -
- } - /> {chainId !== null && }
diff --git a/src/pages/settings/index.tsx b/src/pages/settings/index.tsx index b81cdd7..7881318 100644 --- a/src/pages/settings/index.tsx +++ b/src/pages/settings/index.tsx @@ -10,9 +10,7 @@ import { getDesktopConfiguration, restartBeeNode, setJsonRpcInDesktop } from '.. export default function SettingsPage(): ReactElement { const { apiUrl, - apiDebugUrl, setApiUrl, - setDebugApiUrl, lockedApiSettings, cors, dataDir, @@ -68,12 +66,6 @@ export default function SettingsPage(): ReactElement { onConfirm={setApiUrl} locked={lockedApiSettings || isDesktop} /> - ('') const [amountInput, setAmountInput] = useState('') @@ -94,7 +94,7 @@ export function PostageStampAdvancedCreation({ onFinished }: Props): ReactElemen return } - if (!beeDebugApi) { + if (!beeApi) { return } @@ -107,8 +107,8 @@ export function PostageStampAdvancedCreation({ onFinished }: Props): ReactElemen immutableFlag: immutable, } - const batchId = await beeDebugApi.createPostageBatch(amount.toString(), depth, options) - await waitUntilStampExists(batchId, beeDebugApi) + const batchId = await beeApi.createPostageBatch(amount.toString(), depth, options) + await waitUntilStampExists(batchId, beeApi) await refresh() onFinished() } catch (e) { diff --git a/src/pages/stamps/PostageStampStandardCreation.tsx b/src/pages/stamps/PostageStampStandardCreation.tsx index e3c2d43..cf58189 100644 --- a/src/pages/stamps/PostageStampStandardCreation.tsx +++ b/src/pages/stamps/PostageStampStandardCreation.tsx @@ -44,7 +44,7 @@ const marks = [ export function PostageStampStandardCreation({ onFinished }: Props): ReactElement { const classes = useStyles() const { refresh } = useContext(StampsContext) - const { beeDebugApi } = useContext(SettingsContext) + const { beeApi } = useContext(SettingsContext) const [depthInput, setDepthInput] = useState(Utils.getDepthForCapacity(4)) const [amountInput, setAmountInput] = useState(Utils.getAmountForTtl(30)) @@ -83,7 +83,7 @@ export function PostageStampStandardCreation({ onFinished }: Props): ReactElemen return } - if (!beeDebugApi) { + if (!beeApi) { return } @@ -96,8 +96,8 @@ export function PostageStampStandardCreation({ onFinished }: Props): ReactElemen immutableFlag: true, } - const batchId = await beeDebugApi.createPostageBatch(amount.toString(), depth, options) - await waitUntilStampExists(batchId, beeDebugApi) + const batchId = await beeApi.createPostageBatch(amount.toString(), depth, options) + await waitUntilStampExists(batchId, beeApi) await refresh() onFinished() } catch (e) { diff --git a/src/pages/stamps/StampsTable.tsx b/src/pages/stamps/StampsTable.tsx index 8d7070a..ec209d7 100644 --- a/src/pages/stamps/StampsTable.tsx +++ b/src/pages/stamps/StampsTable.tsx @@ -18,9 +18,9 @@ interface Props { } function StampsTable({ postageStamps }: Props): ReactElement | null { - const { beeDebugApi } = useContext(Context) + const { beeApi } = useContext(Context) - if (!postageStamps || !beeDebugApi) { + if (!postageStamps || !beeApi) { return null } @@ -53,13 +53,13 @@ function StampsTable({ postageStamps }: Props): ReactElement | null { } - beeDebug={beeDebugApi} + bee={beeApi} stamp={stamp.batchID} /> } - beeDebug={beeDebugApi} + bee={beeApi} stamp={stamp.batchID} /> diff --git a/src/pages/status/SetupSteps/ChequebookDeployFund.tsx b/src/pages/status/SetupSteps/ChequebookDeployFund.tsx index cc3ff1c..2a1ff22 100644 --- a/src/pages/status/SetupSteps/ChequebookDeployFund.tsx +++ b/src/pages/status/SetupSteps/ChequebookDeployFund.tsx @@ -1,19 +1,20 @@ -import { useContext } from 'react' -import DepositModal from '../../../containers/DepositModal' import type { ReactElement, ReactNode } from 'react' +import { useContext } from 'react' import ExpandableList from '../../../components/ExpandableList' -import ExpandableListItemKey from '../../../components/ExpandableListItemKey' import ExpandableListItemActions from '../../../components/ExpandableListItemActions' +import ExpandableListItemKey from '../../../components/ExpandableListItemKey' import ExpandableListItemNote from '../../../components/ExpandableListItemNote' import StatusIcon from '../../../components/StatusIcon' +import DepositModal from '../../../containers/DepositModal' import { CheckState, Context } from '../../../providers/Bee' const ChequebookDeployFund = (): ReactElement | null => { const { status, isLoading, chequebookAddress } = useContext(Context) const { checkState, isEnabled } = status.chequebook - const { checkState: debugApiCheckState } = status.debugApiConnection - if (!isEnabled || debugApiCheckState === CheckState.ERROR) return null + if (!isEnabled) { + return null + } let text: ReactNode diff --git a/src/pages/status/SetupSteps/DebugConnectionCheck.tsx b/src/pages/status/SetupSteps/DebugConnectionCheck.tsx deleted file mode 100644 index 2735127..0000000 --- a/src/pages/status/SetupSteps/DebugConnectionCheck.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import MuiAlert from '@material-ui/lab/Alert' -import { ReactElement, useContext } from 'react' -import CodeBlockTabs from '../../../components/CodeBlockTabs' -import ExpandableList from '../../../components/ExpandableList' -import ExpandableListItem from '../../../components/ExpandableListItem' -import ExpandableListItemInput from '../../../components/ExpandableListItemInput' -import ExpandableListItemNote from '../../../components/ExpandableListItemNote' -import StatusIcon from '../../../components/StatusIcon' -import { CheckState, Context } from '../../../providers/Bee' -import { Context as SettingsContext } from '../../../providers/Settings' - -export default function NodeConnectionCheck(): ReactElement | null { - const { status, isLoading } = useContext(Context) - const { setDebugApiUrl, apiDebugUrl, isDesktop } = useContext(SettingsContext) - const { checkState, isEnabled } = status.debugApiConnection - - if (!isEnabled) return null - - return ( - - Connection to Bee Debug API - - } - > - - {checkState === CheckState.OK - ? 'The connection to the Bee node debug API has been successful' - : 'Could not connect to your Bee node debug API.'} - - - - {checkState === CheckState.ERROR && !isDesktop && ( - - -
  • Check the status of your node by running the below command to see if your node is running.
  • - -
  • - If your node is running, check your firewall settings to make sure that port 1635 (or your custom - specified port) is bound to localhost. If your node is not running try executing the below command to - start your bee node -
  • - - Your debug node API should never be completely open to the internet. If you want to connect remotely, - make sure your firewall settings are set to only allow specific trusted IP addresses and block all - other ports. A simple google search for "what is my ip" will show you your computers public - IP address to allow. - - -
  • Run the commands to validate your node is running and see the log output.
  • - -
  • - Lastly, check your nodes configuration settings to validate the debug API is enabled and the Cross - Origin Resource Sharing (CORS) setting is configured to allow your host. Config parameter{' '} - debug-api-enable must be set to true and{' '} - cors-allowed-origins must be set to your host domain or IP (you can also use the - wildcard {"cors-allowed-origins: ['*']"}). If edits are made to the configuration run the - restart command below for changes to take effect. -
  • - - - } - /> -
    - )} -
    - ) -} diff --git a/src/pages/status/SetupSteps/EthereumConnectionCheck.tsx b/src/pages/status/SetupSteps/EthereumConnectionCheck.tsx deleted file mode 100644 index c10a351..0000000 --- a/src/pages/status/SetupSteps/EthereumConnectionCheck.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { ReactElement, useContext } from 'react' -import ExpandableList from '../../../components/ExpandableList' -import ExpandableListItemKey from '../../../components/ExpandableListItemKey' -import ExpandableListItemNote from '../../../components/ExpandableListItemNote' -import StatusIcon from '../../../components/StatusIcon' -import { CheckState, Context } from '../../../providers/Bee' - -export default function EthereumConnectionCheck(): ReactElement | null { - const { status, isLoading, nodeAddresses } = useContext(Context) - const { checkState, isEnabled } = status.blockchainConnection - - if (!isEnabled) return null - - return ( - - Connection to Blockchain - - } - > - - {checkState === CheckState.OK ? ( - 'Your node is connected to the xDai blockchain' - ) : ( - <> - Your Bee node must have access to the xDai blockchain, so that it can interact and deploy your chequebook - contract. You can run{' '} - - your own xDai node - - , or use a provider instead - we recommend{' '} - - Getblock - - . By default, Bee expects a local node at http://localhost:8545. To use a provider instead, simply change - the blockchain-rpc-endpoint in your configuration file. - - )} - - {nodeAddresses?.ethereum && } - - ) -} diff --git a/src/pages/status/SetupSteps/PeerConnection.tsx b/src/pages/status/SetupSteps/PeerConnection.tsx index a55bc3b..2a903fa 100644 --- a/src/pages/status/SetupSteps/PeerConnection.tsx +++ b/src/pages/status/SetupSteps/PeerConnection.tsx @@ -1,16 +1,17 @@ import { ReactElement, ReactNode, useContext } from 'react' import ExpandableList from '../../../components/ExpandableList' import ExpandableListItemNote from '../../../components/ExpandableListItemNote' -import TopologyStats from '../../../components/TopologyStats' import StatusIcon from '../../../components/StatusIcon' +import TopologyStats from '../../../components/TopologyStats' import { CheckState, Context } from '../../../providers/Bee' export default function PeerConnection(): ReactElement | null { const { status, isLoading, topology } = useContext(Context) const { isEnabled, checkState } = status.topology - const { checkState: debugApiCheckState } = status.debugApiConnection - if (!isEnabled || debugApiCheckState === CheckState.ERROR) return null + if (!isEnabled) { + return null + } let text: ReactNode switch (checkState) { diff --git a/src/pages/status/SetupSteps/VersionCheck.tsx b/src/pages/status/SetupSteps/VersionCheck.tsx deleted file mode 100644 index f1d57dc..0000000 --- a/src/pages/status/SetupSteps/VersionCheck.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { ReactElement, useContext } from 'react' -import CodeBlockTabs from '../../../components/CodeBlockTabs' -import ExpandableList from '../../../components/ExpandableList' -import ExpandableListItem from '../../../components/ExpandableListItem' -import ExpandableListItemNote from '../../../components/ExpandableListItemNote' -import StatusIcon from '../../../components/StatusIcon' -import { CheckState, Context } from '../../../providers/Bee' - -export default function VersionCheck(): ReactElement | null { - const { status, isLoading, latestUserVersion, latestPublishedVersion, latestBeeVersionUrl } = useContext(Context) - const { isEnabled, checkState } = status.version - - if (!isEnabled) return null - - return ( - - Bee Version - - } - > - - {checkState === CheckState.OK ? ( - 'You are running the latest version of Bee.' - ) : ( - <> - Your Bee version is out of date. Please update to the{' '} - - latest - {' '} - before continuing. Rerun the installation script below to upgrade. For more information please see the{' '} - - Docs - - . - - - )} - - - - - ) -} diff --git a/src/pages/status/index.tsx b/src/pages/status/index.tsx index bcfb292..bc6ddcc 100644 --- a/src/pages/status/index.tsx +++ b/src/pages/status/index.tsx @@ -1,12 +1,8 @@ -import { Context } from '../../providers/Settings' import { ReactElement, useContext } from 'react' - -import DebugConnectionCheck from './SetupSteps/DebugConnectionCheck' +import { Context } from '../../providers/Settings' +import ChequebookDeployFund from './SetupSteps/ChequebookDeployFund' import DesktopConnection from './SetupSteps/DesktopConnectionCheck' import NodeConnectionCheck from './SetupSteps/NodeConnectionCheck' -import VersionCheck from './SetupSteps/VersionCheck' -import EthereumConnectionCheck from './SetupSteps/EthereumConnectionCheck' -import ChequebookDeployFund from './SetupSteps/ChequebookDeployFund' import PeerConnection from './SetupSteps/PeerConnection' export default function NodeSetupWorkflow(): ReactElement { @@ -16,9 +12,6 @@ export default function NodeSetupWorkflow(): ReactElement {
    {isDesktop && } - - {!isDesktop && } -
    diff --git a/src/pages/top-up/Swap.tsx b/src/pages/top-up/Swap.tsx index 86b8ed6..ffe0bc5 100644 --- a/src/pages/top-up/Swap.tsx +++ b/src/pages/top-up/Swap.tsx @@ -13,13 +13,14 @@ import { Loading } from '../../components/Loading' import { SwarmButton } from '../../components/SwarmButton' import { SwarmDivider } from '../../components/SwarmDivider' import { SwarmTextInput } from '../../components/SwarmTextInput' -import { BzzToken, BZZ_DECIMAL_PLACES } from '../../models/BzzToken' +import { BZZ_DECIMAL_PLACES, BzzToken } from '../../models/BzzToken' import { DaiToken } from '../../models/DaiToken' import { Context as BeeContext } from '../../providers/Bee' import { Context as SettingsContext } from '../../providers/Settings' import { Context as BalanceProvider } from '../../providers/WalletBalance' import { ROUTES } from '../../routes' import { sleepMs } from '../../utils' +import { SwapError, isSwapError, wrapWithSwapError } from '../../utils/SwapError' import { getBzzPriceAsDai, getDesktopConfiguration, @@ -28,7 +29,6 @@ import { upgradeToLightNode, } from '../../utils/desktop' import { Rpc } from '../../utils/rpc' -import { isSwapError, SwapError, wrapWithSwapError } from '../../utils/SwapError' import { TopUpProgressIndicator } from './TopUpProgressIndicator' const MINIMUM_XDAI = '0.1' diff --git a/src/pages/top-up/index.tsx b/src/pages/top-up/index.tsx index 3e7041a..c9d16ec 100644 --- a/src/pages/top-up/index.tsx +++ b/src/pages/top-up/index.tsx @@ -13,7 +13,7 @@ import { HistoryHeader } from '../../components/HistoryHeader' import { Loading } from '../../components/Loading' import { SwarmButton } from '../../components/SwarmButton' import TroubleshootConnectionCard from '../../components/TroubleshootConnectionCard' -import { CheckState, Context as BeeContext } from '../../providers/Bee' +import { Context as BeeContext, CheckState } from '../../providers/Bee' import { Context as SettingsContext } from '../../providers/Settings' import { Context as BalanceProvider } from '../../providers/WalletBalance' import { ROUTES } from '../../routes' diff --git a/src/providers/Bee.tsx b/src/providers/Bee.tsx index 3279e9c..0013021 100644 --- a/src/providers/Bee.tsx +++ b/src/providers/Bee.tsx @@ -2,7 +2,6 @@ import { BeeModes, ChainState, ChequebookAddressResponse, - Health, LastChequesResponse, NodeAddresses, NodeInfo, @@ -10,8 +9,6 @@ import { Topology, } from '@ethersphere/bee-js' import { ReactChild, ReactElement, createContext, useContext, useEffect, useState } from 'react' -import semver from 'semver' -import PackageJson from '../../package.json' import { useLatestBeeRelease } from '../hooks/apiHooks' import { BzzToken } from '../models/BzzToken' import { Token } from '../models/Token' @@ -38,9 +35,6 @@ interface StatusItem { interface Status { all: CheckState - version: StatusItem - blockchainConnection: StatusItem - debugApiConnection: StatusItem apiConnection: StatusItem topology: StatusItem chequebook: StatusItem @@ -48,15 +42,8 @@ interface Status { interface ContextInterface { status: Status - latestPublishedVersion?: string - latestUserVersion?: string - latestUserVersionExact?: string - isLatestBeeVersion: boolean - latestBeeVersionUrl: string error: Error | null apiHealth: boolean - debugApiHealth: Health | null - debugApiReadiness: boolean nodeAddresses: NodeAddresses | null nodeInfo: NodeInfo | null topology: Topology | null @@ -80,22 +67,12 @@ interface ContextInterface { const initialValues: ContextInterface = { status: { all: CheckState.ERROR, - version: { isEnabled: false, checkState: CheckState.ERROR }, - blockchainConnection: { isEnabled: false, checkState: CheckState.ERROR }, - debugApiConnection: { isEnabled: false, checkState: CheckState.ERROR }, apiConnection: { isEnabled: false, checkState: CheckState.ERROR }, topology: { isEnabled: false, checkState: CheckState.ERROR }, chequebook: { isEnabled: false, checkState: CheckState.ERROR }, }, - latestPublishedVersion: undefined, - latestUserVersion: undefined, - latestUserVersionExact: undefined, - isLatestBeeVersion: false, - latestBeeVersionUrl: 'https://github.com/ethersphere/bee/releases/latest', error: null, apiHealth: false, - debugApiHealth: null, - debugApiReadiness: false, nodeAddresses: null, nodeInfo: null, topology: null, @@ -124,40 +101,16 @@ interface Props { } function getStatus( - debugApiHealth: Health | null, - debugApiReadiness: boolean, nodeInfo: NodeInfo | null, apiHealth: boolean, topology: Topology | null, chequebookAddress: ChequebookAddressResponse | null, chequebookBalance: ChequebookBalance | null, error: Error | null, - isDesktop: boolean, startedAt: number, - latestPublishedVersion: string | undefined, - latestUserVersion: string | undefined, ): Status { const status: Status = { ...initialValues.status } - // Version check - status.version.isEnabled = !isDesktop - status.version.checkState = - latestPublishedVersion && - latestUserVersion && - semver.satisfies(latestPublishedVersion, latestUserVersion, { - includePrerelease: true, - }) - ? CheckState.OK - : CheckState.WARNING - - // Blockchain connection check - status.blockchainConnection.isEnabled = true - status.blockchainConnection.checkState = Boolean(debugApiHealth?.status === 'ok') ? CheckState.OK : CheckState.ERROR - - // Debug API connection check - status.debugApiConnection.isEnabled = true - status.debugApiConnection.checkState = Boolean(debugApiHealth?.status === 'ok') ? CheckState.OK : CheckState.ERROR - // API connection check status.apiConnection.isEnabled = true status.apiConnection.checkState = apiHealth ? CheckState.OK : CheckState.ERROR @@ -177,17 +130,12 @@ function getStatus( } else status.chequebook.checkState = CheckState.OK } - status.all = determineOverallStatus(debugApiHealth, debugApiReadiness, status, startedAt) + status.all = determineOverallStatus(status, startedAt) return status } -function determineOverallStatus( - debugApiHealth: Health | null, - debugApiReadiness: boolean, - status: Status, - startedAt: number, -): CheckState { +function determineOverallStatus(status: Status, startedAt: number): CheckState { const hasErrors = Object.values(status).some( ({ isEnabled, checkState }) => isEnabled && checkState === CheckState.ERROR, ) @@ -196,9 +144,7 @@ function determineOverallStatus( ) const isInGracePeriod = Date.now() - startedAt < LAUNCH_GRACE_PERIOD - if (debugApiHealth?.status === 'ok' && !debugApiReadiness) { - return CheckState.STARTING - } else if (hasErrors && isInGracePeriod) { + if (hasErrors && isInGracePeriod) { return CheckState.CONNECTING } else if (hasErrors) { return CheckState.ERROR @@ -212,19 +158,13 @@ function determineOverallStatus( // This does not need to be exposed and works much better as variable than state variable which may trigger some unnecessary re-renders let isRefreshing = false -interface InitialSettings { - isDesktop?: boolean -} - -interface Props extends InitialSettings { +interface Props { children: ReactChild } -export function Provider({ children, isDesktop }: Props): ReactElement { - const { beeApi, beeDebugApi } = useContext(SettingsContext) +export function Provider({ children }: Props): ReactElement { + const { beeApi } = useContext(SettingsContext) const [apiHealth, setApiHealth] = useState(false) - const [debugApiHealth, setDebugApiHealth] = useState(null) - const [debugApiReadiness, setDebugApiReadiness] = useState(false) const [nodeAddresses, setNodeAddresses] = useState(null) const [nodeInfo, setNodeInfo] = useState(null) const [topology, setNodeTopology] = useState(null) @@ -246,10 +186,6 @@ export function Provider({ children, isDesktop }: Props): ReactElement { const [lastUpdate, setLastUpdate] = useState(initialValues.lastUpdate) const [frequency, setFrequency] = useState(30000) - const latestPublishedVersion = semver.coerce(latestBeeRelease?.name)?.version - const latestUserVersion = semver.coerce(debugApiHealth?.version)?.version - const latestUserVersionExact = debugApiHealth?.version - useEffect(() => { setIsLoading(true) @@ -260,8 +196,6 @@ export function Provider({ children, isDesktop }: Props): ReactElement { useEffect(() => { setIsLoading(true) - - setDebugApiHealth(null) setNodeAddresses(null) setNodeTopology(null) setNodeInfo(null) @@ -273,15 +207,19 @@ export function Provider({ children, isDesktop }: Props): ReactElement { setSettlements(null) setChainState(null) - if (beeDebugApi !== null) refresh() - }, [beeDebugApi]) // eslint-disable-line react-hooks/exhaustive-deps + if (beeApi !== null) { + refresh() + } + }, [beeApi]) // eslint-disable-line react-hooks/exhaustive-deps const refresh = async () => { // Don't want to refresh when already refreshing - if (isRefreshing) return + if (isRefreshing) { + return + } // Not a valid bee api - if (!beeApi || !beeDebugApi) { + if (!beeApi) { setIsLoading(false) return @@ -293,7 +231,7 @@ export function Provider({ children, isDesktop }: Props): ReactElement { // Wrap the chequebook balance call to return BZZ values as Token object const chequeBalanceWrapper = async () => { - const { totalBalance, availableBalance } = await beeDebugApi.getChequebookBalance({ timeout: TIMEOUT }) + const { totalBalance, availableBalance } = await beeApi.getChequebookBalance({ timeout: TIMEOUT }) return { totalBalance: new Token(totalBalance), @@ -303,14 +241,14 @@ export function Provider({ children, isDesktop }: Props): ReactElement { // Wrap the balances call to return BZZ values as Token object const peerBalanceWrapper = async () => { - const { balances } = await beeDebugApi.getAllBalances({ timeout: TIMEOUT }) + const { balances } = await beeApi.getAllBalances({ timeout: TIMEOUT }) return balances.map(({ peer, balance }) => ({ peer, balance: new Token(balance) })) } // Wrap the settlements call to return BZZ values as Token object const settlementsWrapper = async () => { - const { totalReceived, settlements, totalSent } = await beeDebugApi.getAllSettlements({ timeout: TIMEOUT }) + const { totalReceived, settlements, totalSent } = await beeApi.getAllSettlements({ timeout: TIMEOUT }) return { totalReceived: new Token(totalReceived), @@ -330,62 +268,50 @@ export function Provider({ children, isDesktop }: Props): ReactElement { .then(setApiHealth) .catch(() => setApiHealth(false)), - // Debug API health - beeDebugApi - .getHealth({ timeout: TIMEOUT }) - .then(setDebugApiHealth) - .catch(() => setDebugApiHealth(null)), - - // Debug API readiness - beeDebugApi - .getReadiness({ timeout: TIMEOUT }) - .then(setDebugApiReadiness) - .catch(() => setDebugApiReadiness(false)), - // Node Addresses - beeDebugApi + beeApi .getNodeAddresses({ timeout: TIMEOUT }) .then(setNodeAddresses) .catch(() => setNodeAddresses(null)), // NodeInfo - beeDebugApi + beeApi .getNodeInfo({ timeout: TIMEOUT }) .then(setNodeInfo) .catch(() => setNodeInfo(null)), // Network Topology - beeDebugApi + beeApi .getTopology({ timeout: TIMEOUT }) .then(setNodeTopology) .catch(() => setNodeTopology(null)), // Peers - beeDebugApi + beeApi .getPeers({ timeout: TIMEOUT }) .then(setPeers) .catch(() => setPeers(null)), // Chequebook address - beeDebugApi + beeApi .getChequebookAddress({ timeout: TIMEOUT }) .then(setChequebookAddress) .catch(() => setChequebookAddress(null)), // Cheques - beeDebugApi + beeApi .getLastCheques({ timeout: TIMEOUT }) .then(setPeerCheques) .catch(() => setPeerCheques(null)), // Chain state - beeDebugApi + beeApi .getChainState({ timeout: TIMEOUT }) .then(setChainState) .catch(() => setChainState(null)), // Wallet - beeDebugApi + beeApi .getWalletBalance({ timeout: TIMEOUT }) .then(({ chainID }) => setChainId(chainID)) .catch(() => setChainId(null)), @@ -395,7 +321,7 @@ export function Provider({ children, isDesktop }: Props): ReactElement { .then(setChequebookBalance) .catch(() => setChequebookBalance(null)), - beeDebugApi + beeApi .getStake({ timeout: TIMEOUT }) .then(stake => setStake(new BzzToken(stake))) .catch(() => setStake(null)), @@ -427,20 +353,7 @@ export function Provider({ children, isDesktop }: Props): ReactElement { } const stop = () => setFrequency(null) - const status = getStatus( - debugApiHealth, - debugApiReadiness, - nodeInfo, - apiHealth, - topology, - chequebookAddress, - chequebookBalance, - error, - Boolean(isDesktop), - startedAt, - latestPublishedVersion, - latestUserVersion, - ) + const status = getStatus(nodeInfo, apiHealth, topology, chequebookAddress, chequebookBalance, error, startedAt) useEffect(() => { let newFrequency = REFRESH_WHEN_OK @@ -458,27 +371,14 @@ export function Provider({ children, isDesktop }: Props): ReactElement { return () => clearInterval(interval) } - }, [frequency, beeDebugApi, beeApi]) // eslint-disable-line react-hooks/exhaustive-deps + }, [frequency, beeApi]) // eslint-disable-line react-hooks/exhaustive-deps return ( void - setDebugApiUrl: (url: string) => void setAndPersistJsonRpcProvider: (url: string) => void isLoading: boolean error: Error | null @@ -31,11 +28,8 @@ interface ContextInterface { const initialValues: ContextInterface = { beeApi: null, - beeDebugApi: null, apiUrl: DEFAULT_BEE_API_HOST, - apiDebugUrl: DEFAULT_BEE_DEBUG_API_HOST, setApiUrl: () => {}, // eslint-disable-line - setDebugApiUrl: () => {}, // eslint-disable-line lockedApiSettings: false, isDesktop: false, desktopApiKey: '', @@ -55,7 +49,6 @@ export const Consumer = Context.Consumer interface InitialSettings { beeApiUrl?: string - beeDebugApiUrl?: string lockedApiSettings?: boolean isDesktop?: boolean desktopUrl?: string @@ -73,9 +66,7 @@ export function Provider({ children, ...propsSettings }: Props): ReactElement { localStorage.getItem(LocalStorageKeys.providerUrl) || propsSettings.defaultRpcUrl || DEFAULT_RPC_URL const [apiUrl, setApiUrl] = useState(initialValues.apiUrl) - const [apiDebugUrl, setDebugApiUrl] = useState(initialValues.apiDebugUrl) const [beeApi, setBeeApi] = useState(null) - const [beeDebugApi, setBeeDebugApi] = useState(null) const [desktopApiKey, setDesktopApiKey] = useState(initialValues.desktopApiKey) const [rpcProviderUrl, setRpcProviderUrl] = useState(propsProviderUrl) const [rpcProvider, setRpcProvider] = useState(new providers.JsonRpcProvider(propsProviderUrl)) @@ -84,12 +75,6 @@ export function Provider({ children, ...propsSettings }: Props): ReactElement { const url = makeHttpUrl( config?.['api-addr'] ?? sessionStorage.getItem('api_host') ?? propsSettings.beeApiUrl ?? apiUrl, ) - const debugUrl = makeHttpUrl( - config?.['debug-api-addr'] ?? - sessionStorage.getItem('debug_api_host') ?? - propsSettings.beeDebugApiUrl ?? - apiDebugUrl, - ) useEffect(() => { const urlSearchParams = new URLSearchParams(window.location.search) @@ -111,24 +96,12 @@ export function Provider({ children, ...propsSettings }: Props): ReactElement { } }, [url]) - useEffect(() => { - try { - setBeeDebugApi(new BeeDebug(debugUrl)) - sessionStorage.setItem('debug_api_host', debugUrl) - } catch (e) { - setBeeDebugApi(null) - } - }, [debugUrl]) - return ( (initialValues.stamps) const [error, setError] = useState(initialValues.error) const [isLoading, setIsLoading] = useState(initialValues.isLoading) @@ -56,14 +56,17 @@ export function Provider({ children }: Props): ReactElement { const [frequency, setFrequency] = useState(null) const refresh = async () => { - // Don't want to refresh when already refreshing - if (isLoading) return + if (isLoading) { + return + } - if (!beeDebugApi) return + if (!beeApi) { + return + } try { setIsLoading(true) - const stamps = await beeDebugApi.getAllPostageBatch() + const stamps = await beeApi.getAllPostageBatch() setStamps(stamps.filter(x => x.exists).map(enrichStamp)) setLastUpdate(Date.now()) diff --git a/src/utils/desktop.ts b/src/utils/desktop.ts index 6439152..a57a1f3 100644 --- a/src/utils/desktop.ts +++ b/src/utils/desktop.ts @@ -6,8 +6,6 @@ import { getJson, postJson } from './net' export interface BeeConfig { 'api-addr': string - 'debug-api-addr': string - 'debug-api-enable': boolean password: string 'swap-enable': boolean 'swap-initial-deposit': bigint diff --git a/src/utils/file.ts b/src/utils/file.ts index 9f6ea2f..d33b672 100644 --- a/src/utils/file.ts +++ b/src/utils/file.ts @@ -114,8 +114,8 @@ export function packageFile(file: FilePath, pathOverwrite?: string): FilePath { size: file.size, type: file.type, stream: file.stream, - slice: file.slice, + slice: (start: number, end: number) => file.slice(start, end), text: file.text, - arrayBuffer: async () => await file.arrayBuffer(), // This is needed for successful upload and can not simply be { arrayBuffer: file.arrayBuffer } + arrayBuffer: async () => await file.arrayBuffer(), } } diff --git a/src/utils/identity.ts b/src/utils/identity.ts index ccfa403..7c175de 100644 --- a/src/utils/identity.ts +++ b/src/utils/identity.ts @@ -1,4 +1,4 @@ -import { BatchId, Bee, BeeDebug, Reference } from '@ethersphere/bee-js' +import { BatchId, Bee, Reference } from '@ethersphere/bee-js' import { Wallet } from 'ethers' import { uuidV4, waitUntilStampUsable } from '.' import { Identity, IdentityType } from '../providers/Feeds' @@ -79,7 +79,6 @@ async function getWallet(type: IdentityType, data: string, password?: string): P export async function updateFeed( beeApi: Bee, - beeDebugApi: BeeDebug | null, identity: Identity, hash: string, stamp: string, @@ -93,8 +92,6 @@ export async function updateFeed( const writer = beeApi.makeFeedWriter('sequence', '00'.repeat(32), wallet.privateKey) - if (beeDebugApi) { - await waitUntilStampUsable(stamp as BatchId, beeDebugApi) - } + await waitUntilStampUsable(stamp as BatchId, beeApi) await writer.upload(stamp, hash as Reference) } diff --git a/src/utils/index.ts b/src/utils/index.ts index ab86d67..d539528 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,4 @@ -import { BatchId, BeeDebug, PostageBatch } from '@ethersphere/bee-js' +import { BatchId, Bee, PostageBatch } from '@ethersphere/bee-js' import { decodeCid } from '@ethersphere/swarm-cid' import { BigNumber } from 'bignumber.js' import { BZZ_LINK_DOMAIN } from '../constants' @@ -232,17 +232,17 @@ interface Options { timeout?: number } -export function waitUntilStampUsable(batchId: BatchId, beeDebug: BeeDebug, options?: Options): Promise { - return waitForStamp(batchId, beeDebug, 'usable', options) +export function waitUntilStampUsable(batchId: BatchId, bee: Bee, options?: Options): Promise { + return waitForStamp(batchId, bee, 'usable', options) } -export function waitUntilStampExists(batchId: BatchId, beeDebug: BeeDebug, options?: Options): Promise { - return waitForStamp(batchId, beeDebug, 'exists', options) +export function waitUntilStampExists(batchId: BatchId, bee: Bee, options?: Options): Promise { + return waitForStamp(batchId, bee, 'exists', options) } async function waitForStamp( batchId: BatchId, - beeDebug: BeeDebug, + bee: Bee, field: 'exists' | 'usable', options?: Options, ): Promise { @@ -251,7 +251,7 @@ async function waitForStamp( for (let i = 0; i < timeout; i += pollingFrequency) { try { - const stamp = await beeDebug.getPostageBatch(batchId) + const stamp = await bee.getPostageBatch(batchId) if (stamp[field]) return stamp } catch { diff --git a/src/utils/manifest.ts b/src/utils/manifest.ts index 47e631e..911b3b0 100644 --- a/src/utils/manifest.ts +++ b/src/utils/manifest.ts @@ -1,5 +1,5 @@ import { Bee, Utils } from '@ethersphere/bee-js' -import { loadAllNodes, MantarayNode, MetadataMapping, Reference } from 'mantaray-js' +import { MantarayNode, MetadataMapping, Reference, loadAllNodes } from 'mantaray-js' interface ValueNode extends MantarayNode { getEntry: Reference