From a0f1d1c50a3e8b45ca6c5935da461766b2f7e26b Mon Sep 17 00:00:00 2001 From: Vojtech Simetka Date: Fri, 23 Apr 2021 11:43:48 +0200 Subject: [PATCH] chore: update bee-js to `0.8.1` version (#78) * chore: upgrade to bee-js 0.8.1 * refactor: removed toString on number types, Token now accepts numbers * test: removed fromBZZbaseUnit test, makeBigNumber accepts number now * chore: fix logic error when displaying Cashout button --- package-lock.json | 190 ++++++++++-------- package.json | 20 +- src/components/CashoutModal.tsx | 10 +- src/components/WDModal.tsx | 2 +- src/hooks/accounting.ts | 60 ++++-- src/hooks/apiHooks.tsx | 77 +++++-- src/hooks/status.ts | 11 +- src/models/Token.ts | 10 +- src/pages/accounting/AccountCard.tsx | 21 +- src/pages/accounting/BalancesTable.tsx | 20 +- src/pages/accounting/index.tsx | 2 +- src/pages/status/NodeSetupWorkflow.tsx | 1 + .../SetupSteps/ChequebookDeployFund.tsx | 3 +- src/react-app-env.d.ts | 14 -- src/utils/index.test.ts | 21 +- src/utils/index.ts | 24 +-- 16 files changed, 276 insertions(+), 210 deletions(-) diff --git a/package-lock.json b/package-lock.json index e3c43ff..2a2567c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { - "name": "bee-status", + "name": "bee-dashboard", "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "bee-dashboard", "version": "0.1.0", "license": "BSD-3-Clause", "dependencies": { - "@ethersphere/bee-js": "^0.7.1", + "@ethersphere/bee-js": "^0.8.1", "@material-ui/core": "^4.11.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.57", @@ -28,24 +29,24 @@ "react-syntax-highlighter": "^15.4.3" }, "devDependencies": { - "@testing-library/jest-dom": "^5.11.10", + "@testing-library/jest-dom": "^5.12.0", "@testing-library/react": "^11.2.6", - "@testing-library/user-event": "^13.1.1", + "@testing-library/user-event": "^13.1.5", "@types/jest": "^26.0.22", - "@types/node": "^14.14.37", + "@types/node": "^14.14.41", "@types/qrcode.react": "^1.0.1", "@types/react": "^17.0.3", "@types/react-copy-to-clipboard": "^5.0.0", "@types/react-dom": "^17.0.3", "@types/react-syntax-highlighter": "^13.5.0", - "eslint": "^7.23.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-jest": "^24.3.2", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-react": "^7.23.1", + "eslint": "^7.24.0", + "eslint-config-prettier": "^8.2.0", + "eslint-plugin-jest": "^24.3.5", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react": "^7.23.2", "prettier": "^2.2.1", "react-scripts": "4.0.3", - "typescript": "^4.2.3", + "typescript": "^4.2.4", "web-vitals": "^1.1.1" } }, @@ -1444,16 +1445,17 @@ } }, "node_modules/@ethersphere/bee-js": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-0.7.1.tgz", - "integrity": "sha512-TztFVpzhno4oQ4l12LeB67eplQeEw2FR/3OcjdkX22uWh5Dz5wunOD7bVKdLPyJVKbUSqgd/8dC9pcljOdpt5A==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-0.8.1.tgz", + "integrity": "sha512-fbxdvAh19hObRrWoim86a+AY8XJOFwE+mla2xvUWewodi8ZfPcZKgTf0YuNftk0M9Z/Q6IfZakEcBaTl1mXj0g==", "dependencies": { "axios": "^0.21.1", "elliptic": "^6.5.4", "isomorphic-ws": "^4.0.1", "js-sha3": "^0.8.0", + "json-bigint": "^1.0.0", "tar-js": "^0.3.0", - "ws": "^7.4.1" + "ws": "^7.4.4" }, "engines": { "bee": "0.5.3-acbd0e2", @@ -2423,9 +2425,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "5.11.10", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz", - "integrity": "sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz", + "integrity": "sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow==", "dev": true, "dependencies": { "@babel/runtime": "^7.9.2", @@ -2461,9 +2463,9 @@ } }, "node_modules/@testing-library/user-event": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.1.1.tgz", - "integrity": "sha512-B4roX+0mpXKGj8ndd38YoIo3IV9pmTTWxr/2cOke5apTtrNabEUE0KMBccpcAcYlfPcr7uMu+dxeeC3HdXd9qQ==", + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.1.5.tgz", + "integrity": "sha512-dD1FRHuWhfdcnb6H9/oaIIZHx9LQKGxbTtYV3i5Zru8I3GWWJoG2WtlAlXZ/56djO+6TvfsWPj5cXQvoTFQATQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.5" @@ -2636,9 +2638,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "version": "14.14.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", + "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -6888,9 +6890,9 @@ } }, "node_modules/eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -6942,9 +6944,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz", - "integrity": "sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.2.0.tgz", + "integrity": "sha512-dWV9EVeSo2qodOPi1iBYU/x6F6diHv8uujxbxr77xExs3zTAlNXvVZKiyLsQGNz7yPV2K49JY5WjPzNIuDc2Bw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -7163,9 +7165,9 @@ "dev": true }, "node_modules/eslint-plugin-jest": { - "version": "24.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.2.tgz", - "integrity": "sha512-cicWDr+RvTAOKS3Q/k03+Z3odt3VCiWamNUHWd6QWbVQWcYJyYgUTu8x0mx9GfeDEimawU5kQC+nQ3MFxIM6bw==", + "version": "24.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.5.tgz", + "integrity": "sha512-XG4rtxYDuJykuqhsOqokYIR84/C8pRihRtEpVskYLbIIKGwPNW2ySxdctuVzETZE+MbF/e7wmsnbNVpzM0rDug==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -7212,9 +7214,9 @@ "dev": true }, "node_modules/eslint-plugin-prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", - "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" @@ -7233,9 +7235,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", - "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "dev": true, "dependencies": { "array-includes": "^3.1.3", @@ -11650,6 +11652,14 @@ "node": ">=4" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -18974,9 +18984,9 @@ } }, "node_modules/typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -21233,11 +21243,23 @@ } }, "node_modules/ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "engines": { "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/xml-name-validator": { @@ -22682,16 +22704,17 @@ } }, "@ethersphere/bee-js": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-0.7.1.tgz", - "integrity": "sha512-TztFVpzhno4oQ4l12LeB67eplQeEw2FR/3OcjdkX22uWh5Dz5wunOD7bVKdLPyJVKbUSqgd/8dC9pcljOdpt5A==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-0.8.1.tgz", + "integrity": "sha512-fbxdvAh19hObRrWoim86a+AY8XJOFwE+mla2xvUWewodi8ZfPcZKgTf0YuNftk0M9Z/Q6IfZakEcBaTl1mXj0g==", "requires": { "axios": "^0.21.1", "elliptic": "^6.5.4", "isomorphic-ws": "^4.0.1", "js-sha3": "^0.8.0", + "json-bigint": "^1.0.0", "tar-js": "^0.3.0", - "ws": "^7.4.1" + "ws": "^7.4.4" } }, "@hapi/address": { @@ -23502,9 +23525,9 @@ } }, "@testing-library/jest-dom": { - "version": "5.11.10", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz", - "integrity": "sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz", + "integrity": "sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow==", "dev": true, "requires": { "@babel/runtime": "^7.9.2", @@ -23528,9 +23551,9 @@ } }, "@testing-library/user-event": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.1.1.tgz", - "integrity": "sha512-B4roX+0mpXKGj8ndd38YoIo3IV9pmTTWxr/2cOke5apTtrNabEUE0KMBccpcAcYlfPcr7uMu+dxeeC3HdXd9qQ==", + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.1.5.tgz", + "integrity": "sha512-dD1FRHuWhfdcnb6H9/oaIIZHx9LQKGxbTtYV3i5Zru8I3GWWJoG2WtlAlXZ/56djO+6TvfsWPj5cXQvoTFQATQ==", "dev": true, "requires": { "@babel/runtime": "^7.12.5" @@ -23696,9 +23719,9 @@ "dev": true }, "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "version": "14.14.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", + "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==", "dev": true }, "@types/normalize-package-data": { @@ -27415,9 +27438,9 @@ } }, "eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -27543,9 +27566,9 @@ } }, "eslint-config-prettier": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz", - "integrity": "sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.2.0.tgz", + "integrity": "sha512-dWV9EVeSo2qodOPi1iBYU/x6F6diHv8uujxbxr77xExs3zTAlNXvVZKiyLsQGNz7yPV2K49JY5WjPzNIuDc2Bw==", "dev": true, "requires": {} }, @@ -27729,9 +27752,9 @@ } }, "eslint-plugin-jest": { - "version": "24.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.2.tgz", - "integrity": "sha512-cicWDr+RvTAOKS3Q/k03+Z3odt3VCiWamNUHWd6QWbVQWcYJyYgUTu8x0mx9GfeDEimawU5kQC+nQ3MFxIM6bw==", + "version": "24.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.5.tgz", + "integrity": "sha512-XG4rtxYDuJykuqhsOqokYIR84/C8pRihRtEpVskYLbIIKGwPNW2ySxdctuVzETZE+MbF/e7wmsnbNVpzM0rDug==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -27765,18 +27788,18 @@ } }, "eslint-plugin-prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", - "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", - "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "dev": true, "requires": { "array-includes": "^3.1.3", @@ -31366,6 +31389,14 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -37616,9 +37647,9 @@ } }, "typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, "unicode-canonical-property-names-ecmascript": { @@ -39554,9 +39585,10 @@ } }, "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/package.json b/package.json index 5b3f48b..77e6cb0 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "url": "https://github.com/ethersphere/bee-dashboard.git" }, "dependencies": { - "@ethersphere/bee-js": "^0.7.1", + "@ethersphere/bee-js": "^0.8.1", "@material-ui/core": "^4.11.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.57", @@ -41,24 +41,24 @@ "react-syntax-highlighter": "^15.4.3" }, "devDependencies": { - "@testing-library/jest-dom": "^5.11.10", + "@testing-library/jest-dom": "^5.12.0", "@testing-library/react": "^11.2.6", - "@testing-library/user-event": "^13.1.1", + "@testing-library/user-event": "^13.1.5", "@types/jest": "^26.0.22", - "@types/node": "^14.14.37", + "@types/node": "^14.14.41", "@types/qrcode.react": "^1.0.1", "@types/react": "^17.0.3", "@types/react-copy-to-clipboard": "^5.0.0", "@types/react-dom": "^17.0.3", "@types/react-syntax-highlighter": "^13.5.0", - "eslint": "^7.23.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-jest": "^24.3.2", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-react": "^7.23.1", + "eslint": "^7.24.0", + "eslint-config-prettier": "^8.2.0", + "eslint-plugin-jest": "^24.3.5", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react": "^7.23.2", "prettier": "^2.2.1", "react-scripts": "4.0.3", - "typescript": "^4.2.3", + "typescript": "^4.2.4", "web-vitals": "^1.1.1" }, "scripts": { diff --git a/src/components/CashoutModal.tsx b/src/components/CashoutModal.tsx index 510e38a..f355a6c 100644 --- a/src/components/CashoutModal.tsx +++ b/src/components/CashoutModal.tsx @@ -10,11 +10,10 @@ import { Snackbar, Container, CircularProgress } from '@material-ui/core' import { beeDebugApi } from '../services/bee' import EthereumAddress from './EthereumAddress' -import { fromBZZbaseUnit } from '../utils' interface Props { peerId: string - uncashedAmount: number + uncashedAmount: string } export default function DepositModal({ peerId, uncashedAmount }: Props): ReactElement { @@ -76,8 +75,7 @@ export default function DepositModal({ peerId, uncashedAmount }: Props): ReactEl {loadingCashout && ( <> - Cashing out {fromBZZbaseUnit(uncashedAmount).toFixed(7)} from Peer{' '} - {peerId}. Please wait... + Cashing out {uncashedAmount} from Peer {peerId}. Please wait... @@ -86,8 +84,8 @@ export default function DepositModal({ peerId, uncashedAmount }: Props): ReactEl )} {!loadingCashout && ( - Are you sure you want to cashout {fromBZZbaseUnit(uncashedAmount).toFixed(7)} BZZ from - Peer {peerId}? + Are you sure you want to cashout {uncashedAmount} BZZ from Peer{' '} + {peerId}? )} diff --git a/src/components/WDModal.tsx b/src/components/WDModal.tsx index fda8948..50d7d64 100644 --- a/src/components/WDModal.tsx +++ b/src/components/WDModal.tsx @@ -48,7 +48,7 @@ export default function WithdrawModal({ if (amountToken === null) return try { - const { transactionHash } = await action(amountToken.toBigInt) + const { transactionHash } = await action(amountToken.toBigInt as bigint) setOpen(false) handleToast(`${successMessage} Transaction ${transactionHash}`) } catch (e) { diff --git a/src/hooks/accounting.ts b/src/hooks/accounting.ts index e258422..362e831 100644 --- a/src/hooks/accounting.ts +++ b/src/hooks/accounting.ts @@ -1,17 +1,27 @@ -import { LastCashoutActionResponse, PeerBalance, Settlements } from '@ethersphere/bee-js' +import { LastCashoutActionResponse } from '@ethersphere/bee-js' import { useEffect, useState } from 'react' +import { Token } from '../models/Token' import { beeDebugApi } from '../services/bee' -import { useApiPeerBalances, useApiSettlements } from './apiHooks' +import { Balance, Settlement, useApiPeerBalances, useApiSettlements } from './apiHooks' interface UseAccountingHook { isLoading: boolean isLoadingUncashed: boolean error: Error | null - totalsent: number - totalreceived: number + totalsent: Token + totalreceived: Token accounting: Accounting[] | null } +export interface Accounting { + peer: string + uncashedAmount: Token + balance: Token + received: Token + sent: Token + total: Token +} + /** * Merges the balances, settlements and uncashedAmounts arrays into single array which is sorted by uncashed amounts (if any) * @@ -22,8 +32,8 @@ interface UseAccountingHook { * @returns */ function mergeAccounting( - balances?: PeerBalance[], - settlements?: Settlements[], + balances: Balance[] | null, + settlements?: Settlement[], uncashedAmounts?: LastCashoutActionResponse[], ): Accounting[] | null { // Settlements or balances are still loading or there is an error -> return null @@ -34,22 +44,38 @@ function mergeAccounting( balances.forEach( // Some peers may not have settlement but all have balance (therefore initialize sent, received and uncashed to 0) ({ peer, balance }) => - (accounting[peer] = { peer, balance, sent: 0, received: 0, uncashedAmount: 0, total: balance }), + (accounting[peer] = { + peer, + balance, + sent: new Token('0'), + received: new Token('0'), + uncashedAmount: new Token('0'), + total: balance, + }), ) settlements.forEach( ({ peer, sent, received }) => - (accounting[peer] = { ...accounting[peer], sent, received, total: accounting[peer].balance + received - sent }), + (accounting[peer] = { + ...accounting[peer], + sent, + received, + total: new Token(accounting[peer].balance.toBigNumber.plus(received.toBigNumber).minus(sent.toBigNumber)), + }), ) // If there are no cheques (and hence last cashout actions), we don't need to sort and can return values right away if (!uncashedAmounts) return Object.values(accounting) - uncashedAmounts?.forEach( - ({ peer, cumulativePayout }) => (accounting[peer].uncashedAmount = accounting[peer].received - cumulativePayout), - ) + uncashedAmounts?.forEach(({ peer, cumulativePayout }) => { + accounting[peer].uncashedAmount = new Token( + accounting[peer].received.toBigNumber.minus(cumulativePayout.toString()), + ) + }) - return Object.values(accounting).sort((a, b) => b.uncashedAmount - a.uncashedAmount) + return Object.values(accounting).sort((a, b) => + b.uncashedAmount.toBigNumber.minus(a.uncashedAmount.toBigNumber).toNumber(), + ) } export const useAccounting = (): UseAccountingHook => { @@ -76,18 +102,14 @@ export const useAccounting = (): UseAccountingHook => { .finally(() => setIsloadingUncashed(false)) }, [settlements, isLoadingUncashed, uncashedAmounts, error]) - const accounting = mergeAccounting( - balances.peerBalances?.balances, - settlements.settlements?.settlements, - uncashedAmounts, - ) + const accounting = mergeAccounting(balances.peerBalances, settlements.settlements?.settlements, uncashedAmounts) return { isLoading: settlements.isLoadingSettlements || balances.isLoadingPeerBalances, isLoadingUncashed, error, accounting, - totalsent: settlements.settlements?.totalsent || 0, - totalreceived: settlements.settlements?.totalreceived || 0, + totalsent: settlements.settlements?.totalsent || new Token('0'), + totalreceived: settlements.settlements?.totalreceived || new Token('0'), } } diff --git a/src/hooks/apiHooks.tsx b/src/hooks/apiHooks.tsx index 7c27d23..6c6bbbd 100644 --- a/src/hooks/apiHooks.tsx +++ b/src/hooks/apiHooks.tsx @@ -3,11 +3,7 @@ import { useState, useEffect } from 'react' import { NodeAddresses, ChequebookAddressResponse, - ChequebookBalanceResponse, - BalanceResponse, LastChequesResponse, - AllSettlements, - LastCashoutActionResponse, Health, Peer, Topology, @@ -16,6 +12,7 @@ import { import { beeDebugApi, beeApi } from '../services/bee' import axios from 'axios' +import { Token } from '../models/Token' export interface HealthHook { health: boolean @@ -189,14 +186,19 @@ export const useApiNodePeers = (): NodePeersHook => { return { peers, isLoading, error } } +export interface ChequebookBalance { + totalBalance: Token + availableBalance: Token +} + export interface ChequebookBalanceHook { - chequebookBalance: ChequebookBalanceResponse | null + chequebookBalance: ChequebookBalance | null isLoadingChequebookBalance: boolean error: Error | null } export const useApiChequebookBalance = (): ChequebookBalanceHook => { - const [chequebookBalance, setChequebookBalance] = useState(null) + const [chequebookBalance, setChequebookBalance] = useState(null) const [isLoadingChequebookBalance, setLoading] = useState(true) const [error, setError] = useState(null) @@ -204,8 +206,12 @@ export const useApiChequebookBalance = (): ChequebookBalanceHook => { setLoading(true) beeDebugApi.chequebook .balance() - .then(res => { - setChequebookBalance(res) + .then(({ totalBalance, availableBalance }) => { + const balance = { + totalBalance: new Token(totalBalance), + availableBalance: new Token(availableBalance), + } + setChequebookBalance(balance) }) .catch(error => { setError(error) @@ -218,14 +224,19 @@ export const useApiChequebookBalance = (): ChequebookBalanceHook => { return { chequebookBalance, isLoadingChequebookBalance, error } } +export interface Balance { + peer: string + balance: Token +} + export interface PeerBalanceHook { - peerBalances: BalanceResponse | null + peerBalances: Balance[] | null isLoadingPeerBalances: boolean error: Error | null } export const useApiPeerBalances = (): PeerBalanceHook => { - const [peerBalances, setPeerBalances] = useState(null) + const [peerBalances, setPeerBalances] = useState(null) const [isLoadingPeerBalances, setLoading] = useState(true) const [error, setError] = useState(null) @@ -234,7 +245,9 @@ export const useApiPeerBalances = (): PeerBalanceHook => { beeDebugApi.balance .balances() .then(res => { - setPeerBalances(res) + // for some reason sometimes these are numbers and not BigInts + const balances = res.balances.map(({ peer, balance }) => ({ peer, balance: new Token(balance) })) + setPeerBalances(balances) }) .catch(error => { setError(error) @@ -305,14 +318,26 @@ export const useApiPeerLastCheque = (peerId: string): PeerLastChequesHook => { return { peerCheque, isLoadingPeerCheque, error } } +export interface Settlement { + peer: string + received: Token + sent: Token +} + +export interface Settlements { + totalreceived: Token + totalsent: Token + settlements: Settlement[] +} + export interface SettlementsHook { - settlements: AllSettlements | null + settlements: Settlements | null isLoadingSettlements: boolean error: Error | null } export const useApiSettlements = (): SettlementsHook => { - const [settlements, setSettlements] = useState(null) + const [settlements, setSettlements] = useState(null) const [isLoadingSettlements, setLoading] = useState(true) const [error, setError] = useState(null) @@ -320,8 +345,17 @@ export const useApiSettlements = (): SettlementsHook => { setLoading(true) beeDebugApi.settlements .getSettlements() - .then(res => { - setSettlements(res) + .then(({ totalreceived, settlements, totalsent }) => { + const set = { + totalreceived: new Token(totalreceived), + totalsent: new Token(totalsent), + settlements: settlements.map(({ peer, received, sent }) => ({ + peer, + received: new Token(received), + sent: new Token(sent), + })), + } + setSettlements(set) }) .catch(error => { setError(error) @@ -334,14 +368,19 @@ export const useApiSettlements = (): SettlementsHook => { return { settlements, isLoadingSettlements, error } } +export interface LastCashout { + peer: string + cumulativePayout: Token +} + export interface PeerLastCashoutHook { - peerCashout: LastCashoutActionResponse | null + peerCashout: LastCashout | null isLoadingPeerCashout: boolean error: Error | null } export const useApiPeerLastCashout = (peerId: string): PeerLastCashoutHook => { - const [peerCashout, setPeerCashout] = useState(null) + const [peerCashout, setPeerCashout] = useState(null) const [isLoadingPeerCashout, setLoading] = useState(true) const [error, setError] = useState(null) @@ -349,8 +388,8 @@ export const useApiPeerLastCashout = (peerId: string): PeerLastCashoutHook => { setLoading(true) beeDebugApi.chequebook .getPeerLastCashout(peerId) - .then(res => { - setPeerCashout(res) + .then(({ peer, cumulativePayout }) => { + setPeerCashout({ peer, cumulativePayout: new Token(cumulativePayout) }) }) .catch(error => { setError(error) diff --git a/src/hooks/status.ts b/src/hooks/status.ts index 26ac6ce..917f44c 100644 --- a/src/hooks/status.ts +++ b/src/hooks/status.ts @@ -1,4 +1,6 @@ +import { ChequebookAddressResponse } from '@ethersphere/bee-js' import { + ChequebookBalance, useApiChequebookAddress, useApiChequebookBalance, useApiHealth, @@ -8,6 +10,11 @@ import { useLatestBeeRelease, } from './apiHooks' +export interface StatusChequebookHook extends StatusHookCommon { + chequebookBalance: ChequebookBalance | null + chequebookAddress: ChequebookAddressResponse | null +} + export const useStatusNodeVersion = (): StatusNodeVersionHook => { const { latestBeeRelease, isLoadingLatestBeeRelease } = useLatestBeeRelease() const { nodeHealth, isLoadingNodeHealth } = useDebugApiHealth() @@ -66,7 +73,9 @@ export const useStatusChequebook = (): StatusChequebookHook => { return { isLoading: isLoadingChequebookAddress || isLoadingChequebookBalance, isOk: - Boolean(chequebookAddress?.chequebookaddress) && chequebookBalance !== null && chequebookBalance.totalBalance > 0, + Boolean(chequebookAddress?.chequebookaddress) && + chequebookBalance !== null && + chequebookBalance?.totalBalance.toBigNumber.isGreaterThan(0), chequebookBalance, chequebookAddress, } diff --git a/src/models/Token.ts b/src/models/Token.ts index 3afbdd1..f42e56d 100644 --- a/src/models/Token.ts +++ b/src/models/Token.ts @@ -10,7 +10,7 @@ export class Token { private amount: BigNumber // Represented in the base units, so it is always an integer value private readonly decimals: digits - constructor(amount: BigNumber | string | bigint, decimals: digits = BZZ_DECIMALS) { + constructor(amount: BigNumber | string | BigInt, decimals: digits = BZZ_DECIMALS) { const a = makeBigNumber(amount) if (!isInteger(a) || !POSSIBLE_DECIMALS.includes(decimals)) throw new TypeError('Not a valid token values') @@ -29,7 +29,7 @@ export class Token { * * @returns new Token */ - static fromDecimal(amount: BigNumber | string | bigint, decimals: digits = BZZ_DECIMALS): Token | never { + static fromDecimal(amount: BigNumber | string | BigInt, decimals: digits = BZZ_DECIMALS): Token | never { const a = makeBigNumber(amount) // No need to do any validation here, it is done when the new token is created @@ -38,7 +38,7 @@ export class Token { return new Token(t, decimals) } - get toBigInt(): bigint { + get toBigInt(): BigInt { return BigInt(this.amount.toFixed(0)) } @@ -53,4 +53,8 @@ export class Token { get toDecimal(): BigNumber { return this.amount.dividedBy(new BigNumber(10).pow(this.decimals)) } + + toFixedDecimal(digits = 7): string { + return this.toDecimal.toFixed(digits) + } } diff --git a/src/pages/accounting/AccountCard.tsx b/src/pages/accounting/AccountCard.tsx index d0e16af..92cbf9e 100644 --- a/src/pages/accounting/AccountCard.tsx +++ b/src/pages/accounting/AccountCard.tsx @@ -6,9 +6,8 @@ import { Skeleton } from '@material-ui/lab' import WithdrawModal from '../../containers/WithdrawModal' import DepositModal from '../../containers/DepositModal' -import { fromBZZbaseUnit } from '../../utils' - import type { ChequebookAddressResponse } from '@ethersphere/bee-js' +import { Token } from '../../models/Token' const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -34,15 +33,15 @@ const useStyles = makeStyles((theme: Theme) => ) interface ChequebookBalance { - totalBalance: number - availableBalance: number + totalBalance: Token + availableBalance: Token } interface Props { chequebookAddress: ChequebookAddressResponse | null chequebookBalance: ChequebookBalance | null - totalsent: number - totalreceived: number + totalsent: Token + totalreceived: Token isLoading: boolean } @@ -66,24 +65,20 @@ function AccountCard({ totalreceived, totalsent, chequebookBalance, isLoading }: Total Balance - - {fromBZZbaseUnit(chequebookBalance?.totalBalance || 0).toFixed(7)} BZZ - + {chequebookBalance?.totalBalance.toFixedDecimal()} BZZ
Available Uncommitted Balance - - {fromBZZbaseUnit(chequebookBalance?.availableBalance || 0).toFixed(7)} BZZ - + {chequebookBalance?.availableBalance.toFixedDecimal()} BZZ
Total Sent / Received - {fromBZZbaseUnit(totalsent).toFixed(7)} / {fromBZZbaseUnit(totalreceived).toFixed(7)} BZZ + {totalsent.toFixedDecimal()} / {totalreceived.toFixedDecimal()} BZZ
diff --git a/src/pages/accounting/BalancesTable.tsx b/src/pages/accounting/BalancesTable.tsx index 06e556b..b35dd7d 100644 --- a/src/pages/accounting/BalancesTable.tsx +++ b/src/pages/accounting/BalancesTable.tsx @@ -2,10 +2,10 @@ import type { ReactElement } from 'react' import { makeStyles } from '@material-ui/core/styles' import { Table, TableBody, TableCell, TableContainer, TableRow, TableHead, Paper } from '@material-ui/core' -import { fromBZZbaseUnit } from '../../utils' import ClipboardCopy from '../../components/ClipboardCopy' import CashoutModal from '../../components/CashoutModal' import PeerDetailDrawer from './PeerDetail' +import { Accounting } from '../../hooks/accounting' const useStyles = makeStyles({ table: { @@ -52,32 +52,36 @@ function BalancesTable({ accounting, isLoadingUncashed }: Props): ReactElement | 0 ? '#32c48d' : '#c9201f', + color: balance.toBigNumber.isPositive() ? '#32c48d' : '#c9201f', }} > - {fromBZZbaseUnit(balance).toFixed(7).toLocaleString()} + {balance.toFixedDecimal()} {' '} BZZ - -{fromBZZbaseUnit(sent).toFixed(7)} / {fromBZZbaseUnit(received).toFixed(7)} BZZ + -{sent.toFixedDecimal()} / {received.toFixedDecimal()} BZZ 0 ? '#32c48d' : '#c9201f', + color: total.toBigNumber.isPositive() ? '#32c48d' : '#c9201f', }} > - {fromBZZbaseUnit(total).toFixed(7)} + {total.toFixedDecimal()} {' '} BZZ {isLoadingUncashed && 'loading...'} - {!isLoadingUncashed && <>{uncashedAmount > 0 ? fromBZZbaseUnit(uncashedAmount).toFixed(7) : '0'} BZZ} + {!isLoadingUncashed && ( + <>{uncashedAmount.toBigNumber.isGreaterThan('0') ? uncashedAmount.toFixedDecimal() : '0'} BZZ + )} - {uncashedAmount > 0 && } + {uncashedAmount.toBigNumber.isGreaterThan('0') && ( + + )} ))} diff --git a/src/pages/accounting/index.tsx b/src/pages/accounting/index.tsx index 554f630..f54dc17 100644 --- a/src/pages/accounting/index.tsx +++ b/src/pages/accounting/index.tsx @@ -63,7 +63,7 @@ export default function Accounting(): ReactElement { /> {error && ( - Error loading accountin details: {error.message} + Error loading accounting details: {error.message} )} {!error && } diff --git a/src/pages/status/NodeSetupWorkflow.tsx b/src/pages/status/NodeSetupWorkflow.tsx index ec81ce5..3a418c4 100644 --- a/src/pages/status/NodeSetupWorkflow.tsx +++ b/src/pages/status/NodeSetupWorkflow.tsx @@ -9,6 +9,7 @@ import VersionCheck from './SetupSteps/VersionCheck' import EthereumConnectionCheck from './SetupSteps/EthereumConnectionCheck' import ChequebookDeployFund from './SetupSteps/ChequebookDeployFund' import PeerConnection from './SetupSteps/PeerConnection' +import { StatusChequebookHook } from '../../hooks/status' const useStyles = makeStyles((theme: Theme) => createStyles({ diff --git a/src/pages/status/SetupSteps/ChequebookDeployFund.tsx b/src/pages/status/SetupSteps/ChequebookDeployFund.tsx index 2a0804e..039302f 100644 --- a/src/pages/status/SetupSteps/ChequebookDeployFund.tsx +++ b/src/pages/status/SetupSteps/ChequebookDeployFund.tsx @@ -2,6 +2,7 @@ import { Typography } from '@material-ui/core/' import EthereumAddress from '../../../components/EthereumAddress' import DepositModal from '../../../containers/DepositModal' import type { ReactElement } from 'react' +import type { StatusChequebookHook } from '../../../hooks/status' interface Props extends StatusChequebookHook { ethereumAddress?: string @@ -21,7 +22,7 @@ const ChequebookDeployFund = ({ {chequebookAddress?.chequebookaddress && }

- {!(chequebookAddress?.chequebookaddress && chequebookBalance?.totalBalance > 0) && ( + {!(chequebookAddress?.chequebookaddress && chequebookBalance?.totalBalance.toBigNumber.isGreaterThan(0)) && (
Your chequebook is either not deployed or funded. Join{' '} diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts index 9aba9fd..88ef93f 100644 --- a/src/react-app-env.d.ts +++ b/src/react-app-env.d.ts @@ -21,17 +21,3 @@ interface StatusEthereumConnectionHook extends StatusHookCommon { interface StatusTopologyHook extends StatusHookCommon { topology: Topology | null } - -interface StatusChequebookHook extends StatusHookCommon { - chequebookBalance: ChequebookBalanceResponse | null - chequebookAddress: ChequebookAddressResponse | null -} - -interface Accounting { - peer: string - uncashedAmount: number - balance: number - received: number - sent: number - total: number -} diff --git a/src/utils/index.test.ts b/src/utils/index.test.ts index bf9dc45..859b6d1 100644 --- a/src/utils/index.test.ts +++ b/src/utils/index.test.ts @@ -1,21 +1,7 @@ import BigNumber from 'bignumber.js' -import { fromBZZbaseUnit, isInteger, makeBigNumber } from './index' +import { isInteger, makeBigNumber } from './index' describe('utils', () => { - describe('fromBZZbaseUnit', () => { - const values = [ - { bzz: 0, baseUnits: 0 }, - { bzz: 0.1, baseUnits: 1e15 }, - { bzz: 0.9, baseUnits: 9e15 }, - ] - - values.forEach(({ bzz, baseUnits }) => { - test(`converting ${bzz} => ${baseUnits}`, () => { - expect(fromBZZbaseUnit(baseUnits)).toBe(bzz) - }) - }) - }) - describe('isInteger', () => { const correctValues = [ BigInt(0), @@ -52,8 +38,11 @@ describe('utils', () => { new BigNumber('1'), new BigNumber('0'), new BigNumber('-1'), + 0, + 1, + -1, ] - const wrongValues = [new Function(), 0, 1] + const wrongValues = [new Function()] correctValues.forEach(v => { test(`testing ${v}`, () => { diff --git a/src/utils/index.ts b/src/utils/index.ts index 5ea2dca..618cfd4 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,22 +1,5 @@ import { BigNumber } from 'bignumber.js' -/** - * @deprecated Should be removed in favour of Token class - */ -const BZZ_BASE_UNIT = 1e16 - -/** - * Convert from base units of BZZ token to BZZ - * @deprecated This should only be used for displaying values, it's unsafe and should be replaced with Token class - * - * @param amount Amount in base units of BZZ token - * - * @returns amount in BZZ - */ -export const fromBZZbaseUnit = (amount: number): number => { - return amount / BZZ_BASE_UNIT -} - /** * Test if value is an integer * @@ -37,12 +20,15 @@ export function isInteger(value: unknown): value is BigNumber | bigint { * * @returns BigNumber - but it may still be NaN or Infinite */ -export function makeBigNumber(value: BigNumber | bigint | string): BigNumber | never { +export function makeBigNumber(value: BigNumber | BigInt | number | string): BigNumber | never { if (BigNumber.isBigNumber(value)) return value if (typeof value === 'string') return new BigNumber(value) if (typeof value === 'bigint') return new BigNumber(value.toString()) - throw new TypeError('Not a BigNumber or BigNumber convertible value') + // FIXME: bee-js still returns some values as numbers and even outside of SAFE INTEGER bounds + if (typeof value === 'number' /* && Number.isSafeInteger(value)*/) return new BigNumber(value) + + throw new TypeError(`Not a BigNumber or BigNumber convertible value. Type: ${typeof value} value: ${value}`) }