From 296cf303841828af02c8a007356c5a4bd088bd74 Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Fri, 6 Nov 2020 08:36:26 +0100 Subject: [PATCH 1/7] Fix development deployment to always use rinkeby network (#1573) --- .travis.yml | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index 33d3f0e2..0d0c883c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -72,7 +72,7 @@ after_success: - yarn coveralls deploy: - # Development environment + # Development environment only on rinkeby - provider: s3 bucket: $DEV_BUCKET_NAME access_key_id: $AWS_ACCESS_KEY_ID @@ -83,6 +83,7 @@ deploy: region: $AWS_DEFAULT_REGION on: branch: development + condition: $REACT_APP_NETWORK = rinkeby # Staging environment - provider: s3 @@ -95,19 +96,6 @@ deploy: region: $AWS_DEFAULT_REGION on: branch: master - - # EWC testing on staging - - provider: s3 - bucket: $STAGING_BUCKET_NAME - access_key_id: $AWS_ACCESS_KEY_ID - secret_access_key: $AWS_SECRET_ACCESS_KEY - skip_cleanup: true - local_dir: build - upload_dir: current/app - region: $AWS_DEFAULT_REGION - on: - branch: release/v2.14.0 - condition: $REACT_APP_NETWORK = energy_web_chain # Prepare production deployment - provider: s3 From 0c67c48648a37f88aace6625ce8a9bc164c63556 Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Fri, 6 Nov 2020 17:01:40 +0100 Subject: [PATCH 2/7] Upgrade dependencies (#1572) * Upgrade web3 to v1.3.0 * Remove polished direct dependency * Upgrade types dependencies * Upgrade ledger and electron related dependencies * Update gnosis-safe-components to latest version * Upgrade sentry dependencies to latest version * Upgrade truffle-contract and axios * Upgrade electron dependencies * Use fade instead rgba with hex value Co-authored-by: nicolas --- package.json | 41 +- src/theme/mui.ts | 4 +- yarn.lock | 1047 ++++++++++++++++------------------------------ 3 files changed, 379 insertions(+), 713 deletions(-) diff --git a/package.json b/package.json index fbb93c12..d21e2f26 100644 --- a/package.json +++ b/package.json @@ -168,18 +168,18 @@ "dependencies": { "@gnosis.pm/safe-apps-sdk": "https://github.com/gnosis/safe-apps-sdk.git#3f0689f", "@gnosis.pm/safe-contracts": "1.1.1-dev.2", - "@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#8d8508e", + "@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#03ff672d6f73366297986d58631f9582fe2ed4a3", "@gnosis.pm/util-contracts": "2.0.6", - "@ledgerhq/hw-transport-node-hid": "5.26.0", + "@ledgerhq/hw-transport-node-hid": "5.28.0", "@material-ui/core": "4.11.0", "@material-ui/icons": "4.9.1", "@material-ui/lab": "4.0.0-alpha.56", "@openzeppelin/contracts": "3.1.0", - "@sentry/react": "^5.27.1", - "@sentry/tracing": "^5.27.1", - "@truffle/contract": "4.2.26", + "@sentry/react": "^5.27.3", + "@sentry/tracing": "^5.27.3", + "@truffle/contract": "4.2.28", "async-sema": "^3.1.0", - "axios": "0.20.0", + "axios": "0.21.0", "bignumber.js": "9.0.1", "bnc-onboard": "1.14.0", "classnames": "^2.2.6", @@ -190,7 +190,7 @@ "date-fns": "2.16.1", "detect-port": "^1.3.0", "electron-is-dev": "^1.2.0", - "electron-log": "4.2.4", + "electron-log": "4.3.0", "electron-settings": "^4.0.2", "electron-updater": "4.3.5", "eth-sig-util": "^2.5.3", @@ -208,7 +208,6 @@ "lodash.memoize": "^4.1.2", "material-ui-search-bar": "^1.0.0", "notistack": "https://github.com/gnosis/notistack.git#v0.9.4", - "polished": "3.6.7", "qrcode.react": "1.0.0", "query-string": "6.13.6", "react": "16.13.1", @@ -229,13 +228,13 @@ "reselect": "^4.0.0", "semver": "7.3.2", "styled-components": "^5.2.0", - "web3": "1.2.9", - "web3-core": "^1.2.11", - "web3-eth-contract": "^1.2.11", - "web3-utils": "^1.2.11" + "web3": "^1.3.0", + "web3-core": "^1.3.0", + "web3-eth-contract": "^1.3.0", + "web3-utils": "^1.3.0" }, "devDependencies": { - "@sentry/cli": "^1.58.0", + "@sentry/cli": "^1.59.0", "@storybook/addon-actions": "^5.3.19", "@storybook/addon-links": "^5.3.19", "@storybook/addons": "^5.3.19", @@ -247,20 +246,20 @@ "@types/history": "4.6.2", "@types/jest": "^26.0.15", "@types/lodash.memoize": "^4.1.6", - "@types/node": "^14.14.5", - "@types/react": "^16.9.54", + "@types/node": "^14.14.6", + "@types/react": "^16.9.55", "@types/react-dom": "^16.9.9", - "@types/react-redux": "^7.1.9", + "@types/react-redux": "^7.1.11", "@types/react-router-dom": "^5.1.6", "@types/styled-components": "^5.1.4", - "@typescript-eslint/eslint-plugin": "4.6.0", - "@typescript-eslint/parser": "4.6.0", + "@typescript-eslint/eslint-plugin": "4.6.1", + "@typescript-eslint/parser": "4.6.1", "autoprefixer": "9.8.6", "cross-env": "^7.0.2", "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", - "electron": "9.3.1", - "electron-builder": "22.8.1", + "electron": "9.3.3", + "electron-builder": "22.9.1", "electron-notarize": "1.0.0", "eslint": "6.8.0", "eslint-config-prettier": "6.14.0", @@ -271,7 +270,7 @@ "eslint-plugin-sort-destructure-keys": "1.3.5", "ethereumjs-abi": "0.6.8", "husky": "^4.3.0", - "lint-staged": "^10.4.2", + "lint-staged": "^10.5.1", "node-sass": "^4.14.1", "prettier": "2.1.2", "react-app-rewired": "^2.1.6", diff --git a/src/theme/mui.ts b/src/theme/mui.ts index bee2a175..54562d69 100644 --- a/src/theme/mui.ts +++ b/src/theme/mui.ts @@ -1,5 +1,5 @@ import { createMuiTheme } from '@material-ui/core/styles' -import { rgba } from 'polished' +import { fade } from '@material-ui/core/styles/colorManipulator' import { boldFont, @@ -407,7 +407,7 @@ const theme = createMuiTheme({ MuiCheckbox: { colorSecondary: { '&$disabled': { - color: rgba(secondary, 0.5), + color: fade(secondary, 0.5), }, }, }, diff --git a/yarn.lock b/yarn.lock index 6c22dea9..cdbc75d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1522,15 +1522,13 @@ solc "0.5.14" truffle "^5.1.21" -"@gnosis.pm/safe-react-components@https://github.com/gnosis/safe-react-components.git#8d8508e": +"@gnosis.pm/safe-react-components@https://github.com/gnosis/safe-react-components.git#03ff672d6f73366297986d58631f9582fe2ed4a3": version "0.4.0" - resolved "https://github.com/gnosis/safe-react-components.git#8d8508ea01bf660bfd75a95ed7fff277caa9ac30" + resolved "https://github.com/gnosis/safe-react-components.git#03ff672d6f73366297986d58631f9582fe2ed4a3" dependencies: classnames "^2.2.6" - polished "3.6.5" - react-docgen-typescript-loader "^3.7.2" + polished "^3.6.7" react-media "^1.10.0" - url-loader "^4.1.0" "@gnosis.pm/util-contracts@2.0.6": version "2.0.6" @@ -1731,6 +1729,27 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.5.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + "@jest/types@^26.6.1": version "26.6.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.1.tgz#2638890e8031c0bc8b4681e0357ed986e2f866c5" @@ -1749,7 +1768,7 @@ dependencies: invariant "2" -"@ledgerhq/devices@^5.26.0", "@ledgerhq/devices@^5.28.0": +"@ledgerhq/devices@^5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.28.0.tgz#e02ef8f98865b6fd46ad90d6d40d8112ccfc14cf" integrity sha512-Tkygc1nfioxfv4YWF5VGHito3ZHQAiNM7YV+Kqr3n/gz4meT5f9DfvqvikTF5XxX+mXpCMc4IlzwbUAoeNOHiQ== @@ -1758,7 +1777,7 @@ "@ledgerhq/logs" "^5.28.0" rxjs "^6.6.3" -"@ledgerhq/errors@^5.26.0", "@ledgerhq/errors@^5.28.0": +"@ledgerhq/errors@^5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.28.0.tgz#117f36d3f9aa7388de31a1d633c3e99ccba0b175" integrity sha512-dNBVriJbdiTerT7I102sAMBxuJqmuMCQSfIdQ+3euvb+2Fx7UPM/w9RHZ0HZGsz/SdeBblWAH0aIQmtDX/vW9g== @@ -1774,7 +1793,7 @@ bignumber.js "^9.0.1" rlp "^2.2.6" -"@ledgerhq/hw-transport-node-hid-noevents@^5.26.0": +"@ledgerhq/hw-transport-node-hid-noevents@^5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.28.0.tgz#fad766b876e4299b47ea3838370e78b21db486cb" integrity sha512-NPxrY0YLfT9fDL5KXY4jIwKPXjpOOS5XEUDYuvfRQLg7yGeDsn9tJbbkP/8FKOap+oKFXCkgOl9rs0VU2khYqg== @@ -1785,16 +1804,16 @@ "@ledgerhq/logs" "^5.28.0" node-hid "1.3.0" -"@ledgerhq/hw-transport-node-hid@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.26.0.tgz#69bc4f8067cdd9c09ef4aed0e0b3c58328936e4b" - integrity sha512-qhaefZVZatJ6UuK8Wb6WSFNOLWc2mxcv/xgsfKi5HJCIr4bPF/ecIeN+7fRcEaycxj4XykY6Z4A7zDVulfFH4w== +"@ledgerhq/hw-transport-node-hid@5.28.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.28.0.tgz#9692b97bbf1dba370fa1a38b3079096ed02bfc78" + integrity sha512-ZCOsJs4PL4ndXiyZY++W8als10ARfObE20N92j+/ikvwU5bHjbSFOnoRK23xNj9NawO7aCm0F8ftCrZfYOSq/Q== dependencies: - "@ledgerhq/devices" "^5.26.0" - "@ledgerhq/errors" "^5.26.0" - "@ledgerhq/hw-transport" "^5.26.0" - "@ledgerhq/hw-transport-node-hid-noevents" "^5.26.0" - "@ledgerhq/logs" "^5.26.0" + "@ledgerhq/devices" "^5.28.0" + "@ledgerhq/errors" "^5.28.0" + "@ledgerhq/hw-transport" "^5.28.0" + "@ledgerhq/hw-transport-node-hid-noevents" "^5.28.0" + "@ledgerhq/logs" "^5.28.0" lodash "^4.17.20" node-hid "1.3.0" usb "^1.6.3" @@ -1809,7 +1828,7 @@ "@ledgerhq/logs" "^5.28.0" u2f-api "0.2.7" -"@ledgerhq/hw-transport@^5.26.0", "@ledgerhq/hw-transport@^5.28.0": +"@ledgerhq/hw-transport@^5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.28.0.tgz#69a2572a38a3a2bb16b9f14352f0d6a8b36b1ea3" integrity sha512-dQm45axzWSJhiaDB2csBCFPH/PGjE8kB+3uSeoUJ752FqgndZgrN9UKOPPxcmaf69jnQeTZAFEWc8g63yMPYOg== @@ -1818,7 +1837,7 @@ "@ledgerhq/errors" "^5.28.0" events "^3.2.0" -"@ledgerhq/logs@^5.26.0", "@ledgerhq/logs@^5.28.0": +"@ledgerhq/logs@^5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.28.0.tgz#bbbd54598fbf9436e02d3b5033c9151fc465295a" integrity sha512-O+p30yQCJVMHkYRt4mEy2My61JNTyqg9FEs9ZmXXPvXbod85snD6oGaKtDtcvbWCYjiaQt4alD+w/J56hkNBWQ== @@ -1997,20 +2016,20 @@ resolved "https://registry.yarnpkg.com/@restless/sanitizers/-/sanitizers-0.2.5.tgz#96a5cfa3edb52abd8fa14e77798738f3a067dbec" integrity sha512-utsOFwv5owNnbj8HijF7uML/AURgUl5YvY4S2gpxQsrp2D1EP/4rQU/HSyYdIQaL89BoZ/5NHveRJrcFyuHo/w== -"@sentry/browser@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.27.1.tgz#67da0cb9680ed54ecdb56a66abd8183b5a8ee174" - integrity sha512-OPBtKKJDgpJOJILaXntGp0z5KT2I1fmtePnHDdgPd7uNqXfTw0E6bvSjY9bR0pSJSooSwqZAAnsAZg8t4772ow== +"@sentry/browser@5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.27.3.tgz#02e78a4502ee99988d3cbb0075a11ec44b503871" + integrity sha512-vczS+XTW4Nk2A7TIpAw8IVFHpp+NK6mV9euBG2I61Bs2QbQY9yKLfbjiln/yH2Q8X4THX6MKa0GuiPoCEeq3uw== dependencies: - "@sentry/core" "5.27.1" - "@sentry/types" "5.27.1" - "@sentry/utils" "5.27.1" + "@sentry/core" "5.27.3" + "@sentry/types" "5.27.3" + "@sentry/utils" "5.27.3" tslib "^1.9.3" -"@sentry/cli@^1.58.0": - version "1.58.0" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.58.0.tgz#b1609f10e71539951499866502b13bf3a270fe79" - integrity sha512-bUBKBYyKVzjNhQpAfPJ3XAvAyNNvrD2Rtpo6B0MR3Okw3prdLFgv9Ta8TN19IXT7u9w13B2EdMnNA6dQDtrD4g== +"@sentry/cli@^1.59.0": + version "1.59.0" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.59.0.tgz#8154c6426a105c6c8a2437db085837aff8e29834" + integrity sha512-9nK4uVHW7HIbOwFZNvHRWFJcD+bqjW3kMWK2UUMqQWse0Lf3xM+2o+REGGkk0S69+E4elSiukVjUPTI5aijNlA== dependencies: https-proxy-agent "^5.0.0" mkdirp "^0.5.5" @@ -2018,69 +2037,69 @@ progress "^2.0.3" proxy-from-env "^1.1.0" -"@sentry/core@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.27.1.tgz#489604054d821e1de155f80fe650085b37cad235" - integrity sha512-n5CxzMbOAT6HZK4U4cOUAAikkRnnHhMNhInrjfZh7BoiuX1k63Hru2H5xk5WDuEaTTr5RaBA/fqPl7wxHySlwQ== +"@sentry/core@5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.27.3.tgz#d7a175b71596b7eb4b2e8b4cd1858a60d95813bb" + integrity sha512-yqepQO88jSt5hy0awpk61AxI4oHB09LjVbUEk4nJDg+1YXuND23cuZvH+Sp2jCZX2vrsw2tefwflToYfA8/U2w== dependencies: - "@sentry/hub" "5.27.1" - "@sentry/minimal" "5.27.1" - "@sentry/types" "5.27.1" - "@sentry/utils" "5.27.1" + "@sentry/hub" "5.27.3" + "@sentry/minimal" "5.27.3" + "@sentry/types" "5.27.3" + "@sentry/utils" "5.27.3" tslib "^1.9.3" -"@sentry/hub@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.27.1.tgz#c95faaf18257c365acc09246fafd27276bfd6a2f" - integrity sha512-RBHo3T92s6s4Ian1pZcPlmNtFqB+HAP6xitU+ZNA48bYUK+R1vvqEcI8Xs83FyNaRGCgclp9erDFQYyAuxY4vw== +"@sentry/hub@5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.27.3.tgz#f509c2fd38f500afef6030504e82510dbd0649d6" + integrity sha512-icEH3hr6NVQkpowXZcPOs9IgJZP5lMKtvud4mVioSpkd+NxtRdKrGEX4eF2TCviOJc9Md0mV4K+aL5Au7hxggQ== dependencies: - "@sentry/types" "5.27.1" - "@sentry/utils" "5.27.1" + "@sentry/types" "5.27.3" + "@sentry/utils" "5.27.3" tslib "^1.9.3" -"@sentry/minimal@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.27.1.tgz#d6ce881ba3c262db29520177a4c1f0e0f5388697" - integrity sha512-MHXCeJdA1NAvaJuippcM8nrWScul8iTN0Q5nnFkGctGIGmmiZHTXAYkObqJk7H3AK+CP7r1jqN2aQj5Nd9CtyA== +"@sentry/minimal@5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.27.3.tgz#c9263bdd6270bfeae64137177448911dff568e53" + integrity sha512-ng01cM0rsE1RMjqVTpPLN0ZVkTo0I675usM1krkpQe8ddW6tfQ6EJWpt02/BrpQZRQzTtfWp6/RyB1KFXg6icg== dependencies: - "@sentry/hub" "5.27.1" - "@sentry/types" "5.27.1" + "@sentry/hub" "5.27.3" + "@sentry/types" "5.27.3" tslib "^1.9.3" -"@sentry/react@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.27.1.tgz#1accad75dd7302d6486b8d4657673d56ebfb7fa7" - integrity sha512-iKJgF3ZfIbKC9pCTip+xnu7JYAYryDgobknj/NmT7nbfeSE2oJHFZYsMk+BzxxKaEFcYfMeJvtm3Ijq1Nm1Khw== +"@sentry/react@^5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.27.3.tgz#aefff1cb2249a4e7f123c7467d1da205d5c02e92" + integrity sha512-p7E+djSUVKz02HoRVDX+zamjV8+RL4bqoPnS9JQESweB0sRTYlpvi+CqWLYWNWnamWQWOl97hOw/lLDpo4kUSA== dependencies: - "@sentry/browser" "5.27.1" - "@sentry/minimal" "5.27.1" - "@sentry/types" "5.27.1" - "@sentry/utils" "5.27.1" + "@sentry/browser" "5.27.3" + "@sentry/minimal" "5.27.3" + "@sentry/types" "5.27.3" + "@sentry/utils" "5.27.3" hoist-non-react-statics "^3.3.2" tslib "^1.9.3" -"@sentry/tracing@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.27.1.tgz#198cd97514363369d29eef9b597be9332ab170c4" - integrity sha512-GBmdR8Ky/nv4KOa6+DEnOSBkFOFhM+asR8Y/gw2qSUWCwzKuWHh9BEnDwxtSI8CMvgUwOIZ5wiiqJGc1unYfCw== +"@sentry/tracing@^5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.27.3.tgz#787e57a2f7071e375f4fad0f3c3a5ff3381928e7" + integrity sha512-UWrHMdGxPfx1u558CWm1tptc2z0BuqCHVe2+BNN7POahq5BkpbGqaotyPQTBHbfmcs6QGfsMG57ou8HQFrBxyA== dependencies: - "@sentry/hub" "5.27.1" - "@sentry/minimal" "5.27.1" - "@sentry/types" "5.27.1" - "@sentry/utils" "5.27.1" + "@sentry/hub" "5.27.3" + "@sentry/minimal" "5.27.3" + "@sentry/types" "5.27.3" + "@sentry/utils" "5.27.3" tslib "^1.9.3" -"@sentry/types@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.27.1.tgz#031480a4cf8f0b6e6337fb03ee884deedcef6f40" - integrity sha512-g1aX0V0fz5BTo0mjgSVY9XmPLGZ6p+8OEzq3ubKzDUf59VHl+Vt8viZ8VXw/vsNtfAjBHn7BzSuzJo7cXJJBtA== +"@sentry/types@5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.27.3.tgz#d377508769bc658d672c287166c7f6c5db45660c" + integrity sha512-PkWhMArFMxBb1g3HtMEL8Ea9PYae2MU0z9CMIWiqzerFy2ZpKG98IU3pt8ic4JkmKQdwB8hDiZpRPMHhW0WYwQ== -"@sentry/utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.27.1.tgz#0ed9d9685aae6f4ef9eb6b9ebb81e361fd1c5452" - integrity sha512-VIzK8utuvFO9EogZcKJPgmLnlJtYbaPQ0jCw7od9HRw1ckrSBc84sA0uuuY6pB6KSM+7k6EjJ5IdIBaCz5ep/A== +"@sentry/utils@5.27.3": + version "5.27.3" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.27.3.tgz#1fc45dfad1f1e4398bee58684d8947666d8d3003" + integrity sha512-R9WvFrRBALZvCzu/9BsuXBCfkNxz4MwdBNSXaBsJo4afQw1ljkjIc9DpHzlL9S9goIwXo81Buwmr5gGDO6aH+Q== dependencies: - "@sentry/types" "5.27.1" + "@sentry/types" "5.27.3" tslib "^1.9.3" "@sideway/address@^4.1.0": @@ -2718,33 +2737,33 @@ crypto-js "^3.1.9-1" debug "^4.1.0" -"@truffle/contract@4.2.26": - version "4.2.26" - resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.2.26.tgz#c68ae32ff5c96a3dccafb3a196a21ba7374151e2" - integrity sha512-MKVb7Prf6IsY8rVjIBGrcAJoSTbw3Hx18htq+PuGZT/12r6ntzhnehKplaQbZC7thTFn7Yv1qrj3cdJ6insZ2A== +"@truffle/contract@4.2.28": + version "4.2.28" + resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.2.28.tgz#1cde9706b41b77ac9070de1aa0f1bd7663705ddc" + integrity sha512-fjHcrVx/ZsAJD2ICNbn2dytwAqzcQUjHBB2k9/laCnk0S59TOK2md/NPGdapzXrbmlRzqWoWBNJXvbPHPbuACA== dependencies: "@truffle/blockchain-utils" "^0.0.25" "@truffle/contract-schema" "^3.3.1" - "@truffle/debug-utils" "^4.2.12" + "@truffle/debug-utils" "^4.2.14" "@truffle/error" "^0.0.11" - "@truffle/interface-adapter" "^0.4.17" + "@truffle/interface-adapter" "^0.4.18" bignumber.js "^7.2.1" ethereum-ens "^0.8.0" ethers "^4.0.0-beta.1" source-map-support "^0.5.19" - web3 "1.2.1" - web3-core-helpers "1.2.1" - web3-core-promievent "1.2.1" - web3-eth-abi "1.2.1" - web3-utils "1.2.1" + web3 "1.2.9" + web3-core-helpers "1.2.9" + web3-core-promievent "1.2.9" + web3-eth-abi "1.2.9" + web3-utils "1.2.9" -"@truffle/debug-utils@^4.2.12": - version "4.2.13" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-4.2.13.tgz#d4014c0c089ad5b6ff5441f07ddadf5579f4f504" - integrity sha512-c2NG2JINg6tWufNQHUl5mFStLJ8IyG8TV5gu8DTkKSdV8/7D6NwYqFPoqQr9OjO3jJ+siFhXIYUUBd3WEw7vlQ== +"@truffle/debug-utils@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-4.2.14.tgz#28431691bc3a96bad19e31733d957ac79059d4e7" + integrity sha512-g5UTX2DPTzrjRjBJkviGI2IrQRTTSvqjmNWCNZNXP+vgQKNxL9maLZhQ6oA3BuuByVW/kusgYeXt8+W1zynC8g== dependencies: "@truffle/codec" "^0.7.1" - "@trufflesuite/chromafi" "^2.2.0" + "@trufflesuite/chromafi" "^2.2.1" chalk "^2.4.2" debug "^4.1.0" highlight.js "^9.15.8" @@ -2771,7 +2790,7 @@ ethereumjs-wallet "^0.6.3" source-map-support "^0.5.19" -"@truffle/interface-adapter@^0.4.17": +"@truffle/interface-adapter@^0.4.18": version "0.4.18" resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.18.tgz#1aac45596997d208085d5168f82b990624610646" integrity sha512-P9JVSYD/CX3V+NgTWu+Bf71sLh8pMwrCpbiYRB93pRw/1H3ZTvt5iDC2MVvVxCs8FkSiy4OZzQK/DJ8+hXAmYw== @@ -2781,10 +2800,10 @@ source-map-support "^0.5.19" web3 "1.2.9" -"@trufflesuite/chromafi@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-2.2.0.tgz#18cceacbb44f1e22ec956dd7ad21a2ed414b09c7" - integrity sha512-km4Px34wZ015PDjAK0wfYBx+zoCE4qR3AY9NWLUvtjnnzhCUkaRFCpZdvwDEyB75EzFBoLwV9iiqboz+mMXwBA== +"@trufflesuite/chromafi@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-2.2.1.tgz#6bad90d7cb52b3a414c9640346085482dbd41fd9" + integrity sha512-kODhM/LsjPrSRGQdaHe113v4xob/aheRmdwN0i6seVNavmHGBvC4ob3COlD1GjaklXsl9QWw4fengowIx1+07Q== dependencies: ansi-mark "^1.0.0" ansi-regex "^3.0.0" @@ -2795,7 +2814,6 @@ detect-indent "^5.0.0" he "^1.1.1" highlight.js "^9.12.0" - husky "^0.14.3" lodash.merge "^4.6.2" min-indent "^1.0.0" strip-ansi "^4.0.0" @@ -3026,7 +3044,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== @@ -3060,20 +3078,20 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^14.14.5": +"@types/node@*", "@types/node@^14.14.6": version "14.14.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== -"@types/node@^10.12.18", "@types/node@^10.3.2": - version "10.17.44" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.44.tgz#3945e6b702cb6403f22b779c8ea9e5c3f44ead40" - integrity sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw== +"@types/node@^10.12.18": + version "10.17.39" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.39.tgz#ce1122758d0608de8303667cebf171f44192629b" + integrity sha512-dJLCxrpQmgyxYGcl0Ae9MTsQgI22qHHcGFj/8VKu7McJA5zQpnuGjoksnxbo1JxSjW/Nahnl13W8MYZf01CZHA== "@types/node@^12.0.12", "@types/node@^12.12.6", "@types/node@^12.6.1": - version "12.19.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.3.tgz#a6e252973214079155f749e8bef99cc80af182fa" - integrity sha512-8Jduo8wvvwDzEVJCOvS/G6sgilOLvvhn1eMmK3TW8/T217O7u1jdrK6ImKLv80tVryaPSVeKu6sjDEiFjd4/eg== + version "12.12.67" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.67.tgz#4f86badb292e822e3b13730a1f9713ed2377f789" + integrity sha512-R48tgL2izApf+9rYNH+3RBMbRpPeW3N8f0I9HMhggeq4UXwBDqumJ14SDs4ctTMhG11pIOduZ4z3QWGOiMc9Vg== "@types/npmlog@^4.1.2": version "4.1.2" @@ -3129,10 +3147,10 @@ dependencies: "@types/react" "*" -"@types/react-redux@^7.1.9": - version "7.1.9" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.9.tgz#280c13565c9f13ceb727ec21e767abe0e9b4aec3" - integrity sha512-mpC0jqxhP4mhmOl3P4ipRsgTgbNofMRXJb08Ms6gekViLj61v1hOZEKWDCyWsdONr6EjEA6ZHXC446wdywDe0w== +"@types/react-redux@^7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.11.tgz#a18e8ab3651e8e8cc94798934927937c66021217" + integrity sha512-OjaFlmqy0CRbYKBoaWF84dub3impqnLJUrz4u8PRjDzaa4n1A2cVmjMV81shwXyAD5x767efhA8STFGJz/r1Zg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -3177,7 +3195,15 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.9.54": +"@types/react@*": + version "16.9.46" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.46.tgz#f0326cd7adceda74148baa9bff6e918632f5069e" + integrity sha512-dbHzO3aAq1lB3jRQuNpuZ/mnu+CdD3H0WVaaBQA8LTT3S33xhVBUj232T8M3tAhSWJs/D/UqORYUlJNl/8VQZg== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/react@^16.9.55": version "16.9.55" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.55.tgz#47078587f5bfe028a23b6b46c7b94ac0d436acff" integrity sha512-6KLe6lkILeRwyyy7yG9rULKJ0sXplUsl98MGoCfpteXf9sPWFWWMknDcsvubcpaTdBuxtsLF6HDUwdApZL/xIg== @@ -3295,7 +3321,20 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@4.6.0", "@typescript-eslint/eslint-plugin@^2.10.0", "@typescript-eslint/eslint-plugin@^4.5.0": +"@typescript-eslint/eslint-plugin@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.1.tgz#99d77eb7a016fd5a5e749d2c44a7e4c317eb7da3" + integrity sha512-SNZyflefTMK2JyrPfFFzzoy2asLmZvZJ6+/L5cIqg4HfKGiW2Gr1Go1OyEVqne/U4QwmoasuMwppoBHWBWF2nA== + dependencies: + "@typescript-eslint/experimental-utils" "4.6.1" + "@typescript-eslint/scope-manager" "4.6.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/eslint-plugin@^2.10.0", "@typescript-eslint/eslint-plugin@^4.5.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.0.tgz#210cd538bb703f883aff81d3996961f5dba31fdb" integrity sha512-1+419X+Ynijytr1iWI+/IcX/kJryc78YNpdaXR1aRO1sU3bC0vZrIAF1tIX7rudVI84W7o7M4zo5p1aVt70fAg== @@ -3320,7 +3359,29 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@4.6.0", "@typescript-eslint/parser@^2.10.0", "@typescript-eslint/parser@^4.5.0": +"@typescript-eslint/experimental-utils@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.6.1.tgz#a9c691dfd530a9570274fe68907c24c07a06c4aa" + integrity sha512-qyPqCFWlHZXkEBoV56UxHSoXW2qnTr4JrWVXOh3soBP3q0o7p4pUEMfInDwIa0dB/ypdtm7gLOS0hg0a73ijfg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.6.1" + "@typescript-eslint/types" "4.6.1" + "@typescript-eslint/typescript-estree" "4.6.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.6.1.tgz#b801bff67b536ecc4a840ac9289ba2be57e02428" + integrity sha512-lScKRPt1wM9UwyKkGKyQDqf0bh6jm8DQ5iN37urRIXDm16GEv+HGEmum2Fc423xlk5NUOkOpfTnKZc/tqKZkDQ== + dependencies: + "@typescript-eslint/scope-manager" "4.6.1" + "@typescript-eslint/types" "4.6.1" + "@typescript-eslint/typescript-estree" "4.6.1" + debug "^4.1.1" + +"@typescript-eslint/parser@^2.10.0", "@typescript-eslint/parser@^4.5.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.6.0.tgz#7e9ff7df2f21d5c8f65f17add3b99eeeec33199d" integrity sha512-Dj6NJxBhbdbPSZ5DYsQqpR32MwujF772F2H3VojWU6iT4AqL4BKuoNWOPFCoSZvCcADDvQjDpa6OLDAaiZPz2Q== @@ -3338,11 +3399,24 @@ "@typescript-eslint/types" "4.6.0" "@typescript-eslint/visitor-keys" "4.6.0" +"@typescript-eslint/scope-manager@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.6.1.tgz#21872b91cbf7adfc7083f17b8041149148baf992" + integrity sha512-f95+80r6VdINYscJY1KDUEDcxZ3prAWHulL4qRDfNVD0I5QAVSGqFkwHERDoLYJJWmEAkUMdQVvx7/c2Hp+Bjg== + dependencies: + "@typescript-eslint/types" "4.6.1" + "@typescript-eslint/visitor-keys" "4.6.1" + "@typescript-eslint/types@4.6.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.6.0.tgz#157ca925637fd53c193c6bf226a6c02b752dde2f" integrity sha512-5FAgjqH68SfFG4UTtIFv+rqYJg0nLjfkjD0iv+5O27a0xEeNZ5rZNDvFGZDizlCD1Ifj7MAbSW2DPMrf0E9zjA== +"@typescript-eslint/types@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.6.1.tgz#d3ad7478f53f22e7339dc006ab61aac131231552" + integrity sha512-k2ZCHhJ96YZyPIsykickez+OMHkz06xppVLfJ+DY90i532/Cx2Z+HiRMH8YZQo7a4zVd/TwNBuRCdXlGK4yo8w== + "@typescript-eslint/typescript-estree@4.6.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.0.tgz#85bd98dcc8280511cfc5b2ce7b03a9ffa1732b08" @@ -3357,6 +3431,20 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.1.tgz#6025cce724329413f57e4959b2d676fceeca246f" + integrity sha512-/J/kxiyjQQKqEr5kuKLNQ1Finpfb8gf/NpbwqFFYEBjxOsZ621r9AqwS9UDRA1Rrr/eneX/YsbPAIhU2rFLjXQ== + dependencies: + "@typescript-eslint/types" "4.6.1" + "@typescript-eslint/visitor-keys" "4.6.1" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + "@typescript-eslint/visitor-keys@4.6.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.0.tgz#fb05d6393891b0a089b243fc8f9fb8039383d5da" @@ -3365,6 +3453,14 @@ "@typescript-eslint/types" "4.6.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.1.tgz#6b125883402d8939df7b54528d879e88f7ba3614" + integrity sha512-owABze4toX7QXwOLT3/D5a8NecZEjEWU1srqxENTfqsY3bwVnl3YYbOh6s1rp2wQKO9RTHFGjKes08FgE7SVMw== + dependencies: + "@typescript-eslint/types" "4.6.1" + eslint-visitor-keys "^2.0.0" + "@unilogin/provider@^0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@unilogin/provider/-/provider-0.6.1.tgz#427247f0cb0899d8b0d00c04a4b90ae2a3c2cb40" @@ -3915,7 +4011,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -4026,7 +4122,7 @@ ansi-to-html@^0.6.11: dependencies: entities "^1.1.2" -any-promise@1.3.0, any-promise@^1.3.0: +any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= @@ -4052,21 +4148,21 @@ app-builder-bin@3.5.10: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.10.tgz#4a7f9999fccc0c435b6284ae1366bc76a17c4a7d" integrity sha512-Jd+GW68lR0NeetgZDo47PdWBEPdnD+p0jEa7XaxjRC8u6Oo/wgJsfKUkORRgr2NpkD19IFKN50P6JYy04XHFLQ== -app-builder-lib@22.8.1: - version "22.8.1" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.8.1.tgz#02cd14c0a83d3a758675d28c327731832b2c0bc1" - integrity sha512-D/ac1+vuGIAAwEeTtXl8b+qWl7Gz/IQatFyzYl2ocag/7N8LqUjKzZFJJISQPWt6PFDPDH0oCj8/GMh63aV0yw== +app-builder-lib@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.9.1.tgz#ccb8f1a02b628514a5dfab9401fa2a976689415c" + integrity sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A== dependencies: "7zip-bin" "~5.0.3" "@develar/schema-utils" "~2.6.5" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.8.1" + builder-util "22.9.1" builder-util-runtime "8.7.2" chromium-pickle-js "^0.2.0" - debug "^4.2.0" - ejs "^3.1.3" - electron-publish "22.8.1" + debug "^4.3.0" + ejs "^3.1.5" + electron-publish "22.9.1" fs-extra "^9.0.1" hosted-git-info "^3.0.5" is-ci "^2.0.0" @@ -4427,10 +4523,10 @@ axe-core@^4.0.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== -axios@0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd" - integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA== +axios@0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.0.tgz#26df088803a2350dff2c27f96fef99fe49442aca" + integrity sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw== dependencies: follow-redirects "^1.10.0" @@ -5447,14 +5543,6 @@ bip66@^1.1.5: dependencies: safe-buffer "^5.0.1" -bl@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - bl@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" @@ -5864,10 +5952,10 @@ builder-util-runtime@8.7.2: debug "^4.1.1" sax "^1.2.4" -builder-util@22.8.1: - version "22.8.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.8.1.tgz#efdfb327dbc22c59aa1e2f55adbe0e771086e839" - integrity sha512-LZG+E1xszMdut5hL5h7RkJQ7yOsQqdhJYgn1wvOP7MmF3MoUPRNDiRodLpYiWlaqZmgYhcfaipR/Mb8F/RqK8w== +builder-util@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.9.1.tgz#b7087a5cde477f90d718ca5d7fafb6ae261b16af" + integrity sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw== dependencies: "7zip-bin" "~5.0.3" "@types/debug" "^4.1.5" @@ -5876,7 +5964,7 @@ builder-util@22.8.1: bluebird-lst "^1.0.9" builder-util-runtime "8.7.2" chalk "^4.1.0" - debug "^4.2.0" + debug "^4.3.0" fs-extra "^9.0.1" is-ci "^2.0.0" js-yaml "^3.14.0" @@ -6229,11 +6317,6 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -6355,14 +6438,14 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981" + integrity sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + wrap-ansi "^7.0.0" clone-deep@^0.2.4: version "0.2.4" @@ -6509,7 +6592,7 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.11.0, commander@^2.15.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1: +commander@^2.11.0, commander@^2.15.0, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -6519,7 +6602,7 @@ commander@^4.0.1, commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.0.0: +commander@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== @@ -7320,6 +7403,13 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: dependencies: ms "^2.1.1" +debug@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.0.tgz#efa41cbf14fc9448075367fdaaddf82376da211e" + integrity sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg== + dependencies: + ms "2.1.2" + decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -7352,59 +7442,6 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" -decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - -decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - -decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - -decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - -decompress@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" - integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -7605,6 +7642,11 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + diff-sequences@^26.5.0: version "26.5.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" @@ -7644,13 +7686,13 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dmg-builder@22.8.1: - version "22.8.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.8.1.tgz#9b3bcbbc43e5fed232525d61a5567ea4b66085c3" - integrity sha512-WeGom1moM00gBII6swljl4DQGrlJuEivoUhOmh8U9p1ALgeJL+EiTHbZFERlj8Ejy62xUUjURV+liOxUKmJFWg== +dmg-builder@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.9.1.tgz#64647224f37ee47fc9bd01947c21cc010a30511f" + integrity sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ== dependencies: - app-builder-lib "22.8.1" - builder-util "22.8.1" + app-builder-lib "22.9.1" + builder-util "22.9.1" fs-extra "^9.0.1" iconv-lite "^0.6.2" js-yaml "^3.14.0" @@ -7894,42 +7936,42 @@ ejs@^2.7.4: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -ejs@^3.1.3: +ejs@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== dependencies: jake "^10.6.1" -electron-builder@22.8.1: - version "22.8.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.8.1.tgz#84295190dae17b3892df7aa39ac334983aeaea06" - integrity sha512-Hs7KTMq1rGSvT0fwGKXrjbLiJkK6sAKDQooUSwklOkktUgWi4ATjlP0fVE3l8SmS7zcLoww2yDZonSDqxEFhaQ== +electron-builder@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.9.1.tgz#a2962db6f2757bc01d02489f38fafe0809f68f60" + integrity sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA== dependencies: "@types/yargs" "^15.0.5" - app-builder-lib "22.8.1" + app-builder-lib "22.9.1" bluebird-lst "^1.0.9" - builder-util "22.8.1" + builder-util "22.9.1" builder-util-runtime "8.7.2" chalk "^4.1.0" - dmg-builder "22.8.1" + dmg-builder "22.9.1" fs-extra "^9.0.1" is-ci "^2.0.0" lazy-val "^1.0.4" read-config-file "6.0.0" sanitize-filename "^1.6.3" - update-notifier "^4.1.0" - yargs "^15.4.1" + update-notifier "^4.1.1" + yargs "^16.0.3" electron-is-dev@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-1.2.0.tgz#2e5cea0a1b3ccf1c86f577cee77363ef55deb05e" integrity sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw== -electron-log@4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.2.4.tgz#a13e42a9fc42ca2cc7d2603c3746352efa82112e" - integrity sha512-CXbDU+Iwi+TjKzugKZmTRIORIPe3uQRqgChUl19fkW/reFUn5WP7dt+cNGT3bkLV8xfPilpkPFv33HgtmLLewQ== +electron-log@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.3.0.tgz#6e841a5c9af34ed3ca83e5a8a4156fdc39bed464" + integrity sha512-iuJjH/ZEJkDyCbuAMvvFxAjCMDLMXIQ5NqvppETGrbtf4b/007r5P36BSvexdy0UzwDNzDtIuEXLR34vRXWZrg== electron-notarize@1.0.0: version "1.0.0" @@ -7939,14 +7981,14 @@ electron-notarize@1.0.0: debug "^4.1.1" fs-extra "^9.0.1" -electron-publish@22.8.1: - version "22.8.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.8.1.tgz#747e0d7f921cd1808f999713d29f599dbb390c4f" - integrity sha512-zqI66vl7j1CJZJ60J+1ez1tQNQeuqVspW44JvYDa5kZbM5wSFDAJFMK9RWHOqRF1Ezd4LDeiBa4aeTOwOt9syA== +electron-publish@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.9.1.tgz#7cc76ac4cc53efd29ee31c1e5facb9724329068e" + integrity sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w== dependencies: "@types/fs-extra" "^9.0.1" bluebird-lst "^1.0.9" - builder-util "22.8.1" + builder-util "22.9.1" builder-util-runtime "8.7.2" chalk "^4.1.0" fs-extra "^9.0.1" @@ -7983,10 +8025,10 @@ electron-updater@4.3.5: lodash.isequal "^4.5.0" semver "^7.3.2" -electron@9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.1.tgz#e301932c5c0537d8c9a8850d216d3ba454dbf55c" - integrity sha512-DScrhqBT4a54KfdF0EoipALpHmdQTn3m7SSCtbpTcEcG+UDUiXad2cOfW6DHeVH7N+CVDKDG12q2PhVJjXkFAA== +electron@9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.3.tgz#99a6619d5df68f97697a5d1d82ef3a8a63fcdf36" + integrity sha512-xghKeUY1qgnEcJ5w2rXo/toH+8NT2Dktx2aAxBNPV7CIJr3mejJJAPwLbycwtddzr37tgKxHeHlc8ivfKtMkJQ== dependencies: "@electron/get" "^1.0.1" "@types/node" "^12.0.12" @@ -7999,16 +8041,6 @@ element-resize-detector@^1.2.1: dependencies: batch-processor "1.0.0" -elliptic@6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" - integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8= - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - inherits "^2.0.1" - elliptic@6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" @@ -8259,7 +8291,7 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -escalade@^3.1.0: +escalade@^3.1.0, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== @@ -9099,22 +9131,6 @@ ethereumjs-wallet@^0.6.3: utf8 "^3.0.0" uuid "^3.3.2" -ethers@4.0.0-beta.3: - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.3.tgz#15bef14e57e94ecbeb7f9b39dd0a4bd435bc9066" - integrity sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog== - dependencies: - "@types/node" "^10.3.2" - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.3.3" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.3" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - ethers@4.0.47: version "4.0.47" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.47.tgz#91b9cd80473b1136dd547095ff9171bd1fc68c85" @@ -9219,7 +9235,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.3: +execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -9556,21 +9572,6 @@ file-system-cache@^1.0.5: fs-extra "^0.30.0" ramda "^0.21.0" -file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - -file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - integrity sha1-LdvqfHP/42No365J3DOMBYwritY= - -file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== - file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -10041,7 +10042,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -10061,14 +10062,6 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -10327,7 +10320,7 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -10796,15 +10789,6 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -husky@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" - integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA== - dependencies: - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" - husky@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de" @@ -11209,13 +11193,6 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -11410,11 +11387,6 @@ is-map@^2.0.1: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== -is-natural-number@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" - integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= - is-negative-zero@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" @@ -11795,6 +11767,16 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + jest-diff@^26.0.0: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.1.tgz#38aa194979f454619bb39bdee299fb64ede5300c" @@ -11863,6 +11845,11 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + jest-get-type@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" @@ -12742,20 +12729,20 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^10.4.2: - version "10.5.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.0.tgz#c923c2447a84c595874f3de696778736227e7a7a" - integrity sha512-gjC9+HGkBubOF+Yyoj9pd52Qfm/kYB+dRX1UOgWjHKvSDYl+VHkZXlBMlqSZa2cH3Kp5/uNL480sV6e2dTgXSg== +lint-staged@^10.5.1: + version "10.5.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.1.tgz#901e915c2360072dded0e7d752a0d9a49e079daa" + integrity sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" - commander "^6.0.0" + commander "^6.2.0" cosmiconfig "^7.0.0" - debug "^4.1.1" + debug "^4.2.0" dedent "^0.7.0" enquirer "^2.3.6" - execa "^4.0.3" - listr2 "^2.6.0" + execa "^4.1.0" + listr2 "^3.2.2" log-symbols "^4.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" @@ -12763,10 +12750,10 @@ lint-staged@^10.4.2: string-argv "0.3.1" stringify-object "^3.3.0" -listr2@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a" - integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA== +listr2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.2.tgz#d20feb75015e506992b55af40722ba1af168b8f1" + integrity sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -12774,7 +12761,7 @@ listr2@^2.6.0: indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.2" + rxjs "^6.6.3" through "^2.3.8" load-json-file@^1.0.0: @@ -13102,13 +13089,6 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -13384,7 +13364,7 @@ mime-db@1.44.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== @@ -13978,11 +13958,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -14756,7 +14731,7 @@ pify@4.0.1, pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -14870,14 +14845,7 @@ pocket-js-core@0.0.3: dependencies: axios "^0.18.0" -polished@3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.5.tgz#dbefdde64c675935ec55119fe2a2ab627ca82e9c" - integrity sha512-VwhC9MlhW7O5dg/z7k32dabcAFW1VI2+7fSe8cE/kXcfL7mVdoa5UxciYGW2sJU78ldDLT6+ROEKIZKFNTnUXQ== - dependencies: - "@babel/runtime" "^7.9.2" - -polished@3.6.7, polished@^3.3.1: +polished@^3.3.1, polished@^3.6.7: version "3.6.7" resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.7.tgz#44cbd0047f3187d83db0c479ef0c7d5583af5fb6" integrity sha512-b4OViUOihwV0icb9PHmWbR+vPqaSzSAEbgLskvb7ANPATVXGiYv/TQFHQo65S53WU9i5EQ1I03YDOJW7K0bmYg== @@ -15675,6 +15643,16 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + pretty-format@^26.0.0, pretty-format@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.1.tgz#af9a2f63493a856acddeeb11ba6bcf61989660a8" @@ -16316,7 +16294,7 @@ react-inspector@^4.0.0: is-dom "^1.0.9" prop-types "^15.6.1" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -16620,7 +16598,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -17248,7 +17226,7 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3, rxjs@^6.5.4, rxjs@^6.5.5, rxjs@^6.6.0, rxjs@^6.6.2, rxjs@^6.6.3: +rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3, rxjs@^6.5.4, rxjs@^6.5.5, rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== @@ -17380,20 +17358,6 @@ schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6 ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -scrypt-js@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" - integrity sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q= - scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" @@ -17404,11 +17368,6 @@ scrypt-js@^3.0.0, scrypt-js@^3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -scryptsy@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" - integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== - scryptsy@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" @@ -17452,13 +17411,6 @@ secp256k1@4.0.2, secp256k1@^4.0.0, secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -seek-bzip@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" - integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== - dependencies: - commander "^2.8.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -17503,11 +17455,6 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" - integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== - semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -18400,13 +18347,6 @@ strip-comments@^1.0.2: babel-extract-comments "^1.0.0" babel-plugin-transform-object-rest-spread "^6.26.0" -strip-dirs@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" - integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== - dependencies: - is-natural-number "^4.0.1" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -18591,24 +18531,6 @@ svgo@^1.0.0, svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" -swarm-js@0.1.39: - version "0.1.39" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" - integrity sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - decompress "^4.0.0" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^7.1.0" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request-promise "^0.1.2" - swarm-js@^0.1.40: version "0.1.40" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" @@ -18690,19 +18612,6 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.0.0" -tar-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - tar-stream@^2.0.0: version "2.1.4" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" @@ -18893,11 +18802,6 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - to-camel-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-camel-case/-/to-camel-case-1.0.0.tgz#1a56054b2f9d696298ce66a60897322b6f423e46" @@ -19242,14 +19146,6 @@ ultron@~1.1.0: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== -unbzip2-stream@^1.0.9: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" @@ -19362,7 +19258,7 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.1.0: +update-notifier@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== @@ -19402,15 +19298,6 @@ url-loader@2.3.0, url-loader@^2.0.1: mime "^2.4.4" schema-utils "^2.5.0" -url-loader@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -19698,15 +19585,6 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web3-bzz@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.1.tgz#c3bd1e8f0c02a13cd6d4e3c3e9e1713f144f6f0d" - integrity sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw== - dependencies: - got "9.6.0" - swarm-js "0.1.39" - underscore "1.9.1" - web3-bzz@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" @@ -19727,15 +19605,6 @@ web3-bzz@1.3.0: swarm-js "^0.1.40" underscore "1.9.1" -web3-core-helpers@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz#f5f32d71c60a4a3bd14786118e633ce7ca6d5d0d" - integrity sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.1" - web3-utils "1.2.1" - web3-core-helpers@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" @@ -19754,17 +19623,6 @@ web3-core-helpers@1.3.0: web3-eth-iban "1.3.0" web3-utils "1.3.0" -web3-core-method@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.1.tgz#9df1bafa2cd8be9d9937e01c6a47fc768d15d90a" - integrity sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.1" - web3-core-promievent "1.2.1" - web3-core-subscriptions "1.2.1" - web3-utils "1.2.1" - web3-core-method@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" @@ -19789,14 +19647,6 @@ web3-core-method@1.3.0: web3-core-subscriptions "1.3.0" web3-utils "1.3.0" -web3-core-promievent@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz#003e8a3eb82fb27b6164a6d5b9cad04acf733838" - integrity sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw== - dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" - web3-core-promievent@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" @@ -19811,17 +19661,6 @@ web3-core-promievent@1.3.0: dependencies: eventemitter3 "4.0.4" -web3-core-requestmanager@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz#fa2e2206c3d738db38db7c8fe9c107006f5c6e3d" - integrity sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.1" - web3-providers-http "1.2.1" - web3-providers-ipc "1.2.1" - web3-providers-ws "1.2.1" - web3-core-requestmanager@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" @@ -19844,15 +19683,6 @@ web3-core-requestmanager@1.3.0: web3-providers-ipc "1.3.0" web3-providers-ws "1.3.0" -web3-core-subscriptions@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz#8c2368a839d4eec1c01a4b5650bbeb82d0e4a099" - integrity sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g== - dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.1" - web3-core-subscriptions@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" @@ -19871,16 +19701,6 @@ web3-core-subscriptions@1.3.0: underscore "1.9.1" web3-core-helpers "1.3.0" -web3-core@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.1.tgz#7278b58fb6495065e73a77efbbce781a7fddf1a9" - integrity sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg== - dependencies: - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-core-requestmanager "1.2.1" - web3-utils "1.2.1" - web3-core@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" @@ -19894,7 +19714,7 @@ web3-core@1.2.9: web3-core-requestmanager "1.2.9" web3-utils "1.2.9" -web3-core@1.3.0, web3-core@^1.2.11, web3-core@^1.3.0: +web3-core@1.3.0, web3-core@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.0.tgz#b818903738461c1cca0163339e1d6d3fa51242cf" integrity sha512-BwWvAaKJf4KFG9QsKRi3MNoNgzjI6szyUlgme1qNPxUdCkaS3Rdpa0VKYNHP7M/YTk82/59kNE66mH5vmoaXjA== @@ -19907,15 +19727,6 @@ web3-core@1.3.0, web3-core@^1.2.11, web3-core@^1.3.0: web3-core-requestmanager "1.3.0" web3-utils "1.3.0" -web3-eth-abi@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz#9b915b1c9ebf82f70cca631147035d5419064689" - integrity sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g== - dependencies: - ethers "4.0.0-beta.3" - underscore "1.9.1" - web3-utils "1.2.1" - web3-eth-abi@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" @@ -19934,23 +19745,6 @@ web3-eth-abi@1.3.0: underscore "1.9.1" web3-utils "1.3.0" -web3-eth-accounts@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz#2741a8ef337a7219d57959ac8bd118b9d68d63cf" - integrity sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ== - dependencies: - any-promise "1.3.0" - crypto-browserify "3.12.0" - eth-lib "0.2.7" - scryptsy "2.1.0" - semver "6.2.0" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-utils "1.2.1" - web3-eth-accounts@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" @@ -19985,20 +19779,6 @@ web3-eth-accounts@1.3.0: web3-core-method "1.3.0" web3-utils "1.3.0" -web3-eth-contract@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz#3542424f3d341386fd9ff65e78060b85ac0ea8c4" - integrity sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g== - dependencies: - underscore "1.9.1" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-core-promievent "1.2.1" - web3-core-subscriptions "1.2.1" - web3-eth-abi "1.2.1" - web3-utils "1.2.1" - web3-eth-contract@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" @@ -20014,7 +19794,7 @@ web3-eth-contract@1.2.9: web3-eth-abi "1.2.9" web3-utils "1.2.9" -web3-eth-contract@1.3.0, web3-eth-contract@^1.2.11, web3-eth-contract@^1.2.9: +web3-eth-contract@1.3.0, web3-eth-contract@^1.2.9, web3-eth-contract@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.0.tgz#c758340ac800788e29fa29edc8b0c0ac957b741c" integrity sha512-3SCge4SRNCnzLxf0R+sXk6vyTOl05g80Z5+9/B5pERwtPpPWaQGw8w01vqYqsYBKC7zH+dxhMaUgVzU2Dgf7bQ== @@ -20029,20 +19809,6 @@ web3-eth-contract@1.3.0, web3-eth-contract@^1.2.11, web3-eth-contract@^1.2.9: web3-eth-abi "1.3.0" web3-utils "1.3.0" -web3-eth-ens@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz#a0e52eee68c42a8b9865ceb04e5fb022c2d971d5" - integrity sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q== - dependencies: - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-promievent "1.2.1" - web3-eth-abi "1.2.1" - web3-eth-contract "1.2.1" - web3-utils "1.2.1" - web3-eth-ens@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" @@ -20073,14 +19839,6 @@ web3-eth-ens@1.3.0: web3-eth-contract "1.3.0" web3-utils "1.3.0" -web3-eth-iban@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz#2c3801718946bea24e9296993a975c80b5acf880" - integrity sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.1" - web3-eth-iban@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" @@ -20097,17 +19855,6 @@ web3-eth-iban@1.3.0: bn.js "^4.11.9" web3-utils "1.3.0" -web3-eth-personal@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz#244e9911b7b482dc17c02f23a061a627c6e47faf" - integrity sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg== - dependencies: - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-net "1.2.1" - web3-utils "1.2.1" - web3-eth-personal@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" @@ -20132,25 +19879,6 @@ web3-eth-personal@1.3.0: web3-net "1.3.0" web3-utils "1.3.0" -web3-eth@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.1.tgz#b9989e2557c73a9e8ffdc107c6dafbe72c79c1b0" - integrity sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA== - dependencies: - underscore "1.9.1" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-core-subscriptions "1.2.1" - web3-eth-abi "1.2.1" - web3-eth-accounts "1.2.1" - web3-eth-contract "1.2.1" - web3-eth-ens "1.2.1" - web3-eth-iban "1.2.1" - web3-eth-personal "1.2.1" - web3-net "1.2.1" - web3-utils "1.2.1" - web3-eth@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" @@ -20189,15 +19917,6 @@ web3-eth@1.3.0: web3-net "1.3.0" web3-utils "1.3.0" -web3-net@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.1.tgz#edd249503315dd5ab4fa00220f6509d95bb7ab10" - integrity sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw== - dependencies: - web3-core "1.2.1" - web3-core-method "1.2.1" - web3-utils "1.2.1" - web3-net@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" @@ -20272,14 +19991,6 @@ web3-provider-engine@15.0.4: xhr "^2.2.0" xtend "^4.0.1" -web3-providers-http@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.1.tgz#c93ea003a42e7b894556f7e19dd3540f947f5013" - integrity sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ== - dependencies: - web3-core-helpers "1.2.1" - xhr2-cookies "1.1.0" - web3-providers-http@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" @@ -20296,15 +20007,6 @@ web3-providers-http@1.3.0: web3-core-helpers "1.3.0" xhr2-cookies "1.1.0" -web3-providers-ipc@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz#017bfc687a8fc5398df2241eb98f135e3edd672c" - integrity sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.1" - web3-providers-ipc@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" @@ -20323,15 +20025,6 @@ web3-providers-ipc@1.3.0: underscore "1.9.1" web3-core-helpers "1.3.0" -web3-providers-ws@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz#2d941eaf3d5a8caa3214eff8dc16d96252b842cb" - integrity sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.1" - websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" - web3-providers-ws@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" @@ -20352,16 +20045,6 @@ web3-providers-ws@1.3.0: web3-core-helpers "1.3.0" websocket "^1.0.32" -web3-shh@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.1.tgz#4460e3c1e07faf73ddec24ccd00da46f89152b0c" - integrity sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA== - dependencies: - web3-core "1.2.1" - web3-core-method "1.2.1" - web3-core-subscriptions "1.2.1" - web3-net "1.2.1" - web3-shh@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" @@ -20409,7 +20092,7 @@ web3-utils@1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.0, web3-utils@^1.2.11, web3-utils@^1.2.9: +web3-utils@1.3.0, web3-utils@^1.2.11, web3-utils@^1.2.9, web3-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.0.tgz#5bac16e5e0ec9fe7bdcfadb621655e8aa3cf14e1" integrity sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA== @@ -20423,7 +20106,7 @@ web3-utils@1.3.0, web3-utils@^1.2.11, web3-utils@^1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3@*, web3@^1.0.0-beta.34: +web3@*, web3@^1.0.0-beta.34, web3@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.0.tgz#8fe4cd6e2a21c91904f343ba75717ee4c76bb349" integrity sha512-4q9dna0RecnrlgD/bD1C5S+81Untbd6Z/TBD7rb+D5Bvvc0Wxjr4OP70x+LlnwuRDjDtzBwJbNUblh2grlVArw== @@ -20436,19 +20119,6 @@ web3@*, web3@^1.0.0-beta.34: web3-shh "1.3.0" web3-utils "1.3.0" -web3@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.1.tgz#5d8158bcca47838ab8c2b784a2dee4c3ceb4179b" - integrity sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw== - dependencies: - web3-bzz "1.2.1" - web3-core "1.2.1" - web3-eth "1.2.1" - web3-eth-personal "1.2.1" - web3-net "1.2.1" - web3-shh "1.2.1" - web3-utils "1.2.1" - web3@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" @@ -20680,16 +20350,6 @@ websocket@^1.0.31, websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" -"websocket@github:web3-js/WebSocket-Node#polyfill/globalThis": - version "1.0.29" - resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400" - dependencies: - debug "^2.2.0" - es5-ext "^0.10.50" - nan "^2.14.0" - typedarray-to-buffer "^3.1.5" - yaeti "^0.0.6" - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -20962,6 +20622,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -21102,6 +20771,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" @@ -21150,13 +20824,10 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" + integrity sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww== yargs-unparser@1.6.1: version "1.6.1" @@ -21202,24 +20873,20 @@ yargs@^14.2.3: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== +yargs@^16.0.3: + version "16.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.0.tgz#fc333fe4791660eace5a894b39d42f851cd48f2a" + integrity sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + y18n "^5.0.2" + yargs-parser "^20.2.2" -yauzl@^2.10.0, yauzl@^2.4.2: +yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= From 325adda00da0341fd01d8ebe9637e9052021580b Mon Sep 17 00:00:00 2001 From: Fernando Date: Mon, 9 Nov 2020 17:04:28 -0300 Subject: [PATCH 3/7] (Fix) Error when using up to the max amount of decimals for token transfer (#1576) --- .../utils/__tests__/tokenHelpers.test.ts | 28 +++++++++++++++++++ src/logic/tokens/utils/humanReadableValue.ts | 12 ++------ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/logic/tokens/utils/__tests__/tokenHelpers.test.ts b/src/logic/tokens/utils/__tests__/tokenHelpers.test.ts index 0351af13..52ae9253 100644 --- a/src/logic/tokens/utils/__tests__/tokenHelpers.test.ts +++ b/src/logic/tokens/utils/__tests__/tokenHelpers.test.ts @@ -203,4 +203,32 @@ describe('isERC721Contract', () => { // then expect(txValue).toEqual(expectedResult) }) + + it('It should return the right conversion from token to unit with exceeding decimals', () => { + // given + const decimals = Number(18) + + const expectedResult = '333333333333333398' + const VALUE = '0.33333333333333339878798333' + + // when + const txValue = toTokenUnit(VALUE, decimals) + + // then + expect(txValue).toEqual(expectedResult) + }) + + it('It should return the right conversion from token to unit with exact decimals', () => { + // given + const decimals = Number(18) + + const expectedResult = '333333333333333399' + const VALUE = '0.333333333333333399' + + // when + const txValue = toTokenUnit(VALUE, decimals) + + // then + expect(txValue).toEqual(expectedResult) + }) }) diff --git a/src/logic/tokens/utils/humanReadableValue.ts b/src/logic/tokens/utils/humanReadableValue.ts index 2d2afc17..b3c4ffac 100644 --- a/src/logic/tokens/utils/humanReadableValue.ts +++ b/src/logic/tokens/utils/humanReadableValue.ts @@ -7,13 +7,5 @@ export const humanReadableValue = (value: number | string, decimals = 18): strin export const fromTokenUnit = (amount: number | string, decimals: string | number): string => new BigNumber(amount).times(`1e-${decimals}`).toFixed() -export const toTokenUnit = (amount: number | string, decimals: string | number): string => { - const amountBN = new BigNumber(amount).times(`1e${decimals}`) - const [, amountDecimalPlaces] = amount.toString().split('.') - - if (amountDecimalPlaces?.length >= +decimals) { - return amountBN.toFixed(+decimals, BigNumber.ROUND_DOWN) - } - - return amountBN.toFixed() -} +export const toTokenUnit = (amount: number | string, decimals: string | number): string => + new BigNumber(amount).times(`1e${decimals}`).toFixed(0, BigNumber.ROUND_DOWN) From 2a01470d2dcf855eb708d3ce90f90fec053bfedd Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Tue, 10 Nov 2020 11:51:14 -0300 Subject: [PATCH 4/7] (Fix) - #1542 CopyBtn content in addressbook (#1579) * Fix CopyBtn content * Fix explorer url Co-authored-by: Daniel Sanchez --- .../components/Settings/ManageOwners/EditOwnerModal/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx index 0d8b33bb..26157c4b 100644 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx @@ -93,8 +93,8 @@ const EditOwnerComponent = ({ isOpen, onClose, ownerAddress, selectedOwnerName } {ownerAddress} - - + + From 325864cffb3a79c7033c21f47cc0f7d4ce55e900 Mon Sep 17 00:00:00 2001 From: Fernando Date: Tue, 10 Nov 2020 16:16:44 -0300 Subject: [PATCH 5/7] (Fix) Prevent ENS check when not supported (#1570) --- docs/networks.md | 5 +- src/components/forms/validator.ts | 18 +- src/config/index.ts | 20 +- src/config/networks/energy_web_chain.ts | 11 +- src/config/networks/network.d.ts | 3 +- src/config/networks/volta.ts | 11 +- src/config/networks/xdai.ts | 11 +- src/logic/addressBook/utils/index.ts | 39 +- src/logic/safe/utils/safeVersion.ts | 5 +- .../screens/AddressBookInput/index.tsx | 372 ++++++++---------- .../screens/AddressBookInput/style.ts | 41 +- .../EthAddressInput/index.tsx | 5 +- .../SendCustomTx/index.tsx | 13 +- .../screens/SendCollectible/index.tsx | 50 ++- .../SendModal/screens/SendFunds/index.tsx | 117 +++--- 15 files changed, 381 insertions(+), 340 deletions(-) diff --git a/docs/networks.md b/docs/networks.md index e3c4afec..e1519441 100644 --- a/docs/networks.md +++ b/docs/networks.md @@ -72,7 +72,8 @@ export enum FEATURES { ERC721 = 'ERC721', ERC1155 = 'ERC1155', SAFE_APPS = 'SAFE_APPS', - CONTRACT_INTERACTION = 'CONTRACT_INTERACTION' + CONTRACT_INTERACTION = 'CONTRACT_INTERACTION', + ENS_LOOKUP = 'ENS_LOOKUP' } ``` @@ -235,7 +236,7 @@ const rinkeby: NetworkConfig = { address: '', name: '', symbol: '', - decimals: ?, + decimals: 0, logoUri: '', }, }, diff --git a/src/components/forms/validator.ts b/src/components/forms/validator.ts index 0d50cb93..e6f2d9d5 100644 --- a/src/components/forms/validator.ts +++ b/src/components/forms/validator.ts @@ -1,8 +1,10 @@ import { List } from 'immutable' +import memoize from 'lodash.memoize' +import { isFeatureEnabled } from 'src/config' +import { FEATURES } from 'src/config/networks/network.d' import { sameAddress } from 'src/logic/wallets/ethAddresses' import { getWeb3 } from 'src/logic/wallets/getWeb3' -import memoize from 'lodash.memoize' type ValidatorReturnType = string | undefined type GenericValidatorType = (...args: unknown[]) => ValidatorReturnType @@ -62,7 +64,11 @@ export const mustBeEthereumAddress = memoize( const startsWith0x = address?.startsWith('0x') const isAddress = getWeb3().utils.isAddress(address) - return startsWith0x && isAddress ? undefined : 'Address should be a valid Ethereum address or ENS name' + const errorMessage = `Address should be a valid Ethereum address${ + isFeatureEnabled(FEATURES.ENS_LOOKUP) ? ' or ENS name' : '' + }` + + return startsWith0x && isAddress ? undefined : errorMessage }, ) @@ -70,9 +76,11 @@ export const mustBeEthereumContractAddress = memoize( async (address: string): Promise => { const contractCode = await getWeb3().eth.getCode(address) - return !contractCode || contractCode.replace('0x', '').replace(/0/g, '') === '' - ? 'Address should be a valid Ethereum contract address or ENS name' - : undefined + const errorMessage = `Address should be a valid Ethereum contract address${ + isFeatureEnabled(FEATURES.ENS_LOOKUP) ? ' or ENS name' : '' + }` + + return !contractCode || contractCode.replace('0x', '').replace(/0/g, '') === '' ? errorMessage : undefined }, ) diff --git a/src/config/index.ts b/src/config/index.ts index ba2d718e..5dd3dcd6 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,7 +1,15 @@ import memoize from 'lodash.memoize' import networks from 'src/config/networks' -import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkSettings, SafeFeatures, Wallets, GasPriceOracle } from 'src/config/networks/network.d' +import { + EnvironmentSettings, + ETHEREUM_NETWORK, + FEATURES, + GasPriceOracle, + NetworkSettings, + SafeFeatures, + Wallets, +} from 'src/config/networks/network.d' import { APP_ENV, ETHERSCAN_API_KEY, GOOGLE_ANALYTICS_ID, INFURA_TOKEN, NETWORK, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' @@ -90,6 +98,16 @@ export const getNetworkExplorerInfo = (): { name: string; url: string; apiUrl: s export const getNetworkConfigDisabledFeatures = (): SafeFeatures => getConfig().disabledFeatures || [] +/** + * Checks if a particular feature is enabled in the current network configuration + * @params {FEATURES} feature + * @returns boolean + */ +export const isFeatureEnabled = memoize((feature: FEATURES): boolean => { + const disabledFeatures = getNetworkConfigDisabledFeatures() + return !disabledFeatures.some((disabledFeature) => disabledFeature === feature) +}) + export const getNetworkConfigDisabledWallets = (): Wallets => getConfig()?.disabledWallets || [] export const getNetworkInfo = (): NetworkSettings => getConfig().network diff --git a/src/config/networks/energy_web_chain.ts b/src/config/networks/energy_web_chain.ts index 2ddcf30e..ececc4bf 100644 --- a/src/config/networks/energy_web_chain.ts +++ b/src/config/networks/energy_web_chain.ts @@ -1,5 +1,5 @@ import EwcLogo from 'src/config/assets/token_ewc.svg' -import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig, WALLETS } from 'src/config/networks/network.d' +import { EnvironmentSettings, ETHEREUM_NETWORK, FEATURES, NetworkConfig, WALLETS } from 'src/config/networks/network.d' // @todo (agustin) we need to use fixed gasPrice because the oracle is not working right now and it's returning 0 // once the oracle is fixed we need to remove the fixed value @@ -44,7 +44,7 @@ const mainnet: NetworkConfig = { logoUri: EwcLogo, }, }, - disabledWallets:[ + disabledWallets: [ WALLETS.TREZOR, WALLETS.LEDGER, WALLETS.COINBASE, @@ -59,8 +59,11 @@ const mainnet: NetworkConfig = { WALLETS.WALLET_CONNECT, WALLETS.WALLET_LINK, WALLETS.AUTHEREUM, - WALLETS.LATTICE - ] + WALLETS.LATTICE, + ], + disabledFeatures: [ + FEATURES.ENS_LOOKUP, + ], } export default mainnet diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index b4609565..fed876bb 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -23,7 +23,8 @@ export enum FEATURES { ERC721 = 'ERC721', ERC1155 = 'ERC1155', SAFE_APPS = 'SAFE_APPS', - CONTRACT_INTERACTION = 'CONTRACT_INTERACTION' + CONTRACT_INTERACTION = 'CONTRACT_INTERACTION', + ENS_LOOKUP = 'ENS_LOOKUP', } type Token = { diff --git a/src/config/networks/volta.ts b/src/config/networks/volta.ts index b9466a46..350ad99a 100644 --- a/src/config/networks/volta.ts +++ b/src/config/networks/volta.ts @@ -1,5 +1,5 @@ import EwcLogo from 'src/config/assets/token_ewc.svg' -import { EnvironmentSettings, ETHEREUM_NETWORK, WALLETS, NetworkConfig } from 'src/config/networks/network.d' +import { EnvironmentSettings, ETHEREUM_NETWORK, FEATURES, NetworkConfig, WALLETS } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { txServiceUrl: 'https://safe-transaction.volta.gnosis.io/api/v1', @@ -41,7 +41,7 @@ const mainnet: NetworkConfig = { logoUri: EwcLogo, }, }, - disabledWallets:[ + disabledWallets: [ WALLETS.TREZOR, WALLETS.LEDGER, WALLETS.COINBASE, @@ -56,8 +56,11 @@ const mainnet: NetworkConfig = { WALLETS.WALLET_CONNECT, WALLETS.WALLET_LINK, WALLETS.AUTHEREUM, - WALLETS.LATTICE - ] + WALLETS.LATTICE, + ], + disabledFeatures: [ + FEATURES.ENS_LOOKUP, + ], } export default mainnet diff --git a/src/config/networks/xdai.ts b/src/config/networks/xdai.ts index 9fb2295f..b6aa7b24 100644 --- a/src/config/networks/xdai.ts +++ b/src/config/networks/xdai.ts @@ -1,5 +1,5 @@ -import { EnvironmentSettings, ETHEREUM_NETWORK, WALLETS, NetworkConfig } from 'src/config/networks/network.d' import xDaiLogo from 'src/config/assets/token_xdai.svg' +import { EnvironmentSettings, ETHEREUM_NETWORK, FEATURES, NetworkConfig, WALLETS } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { txServiceUrl: 'https://safe-transaction.xdai.gnosis.io/api/v1', @@ -36,7 +36,7 @@ const xDai: NetworkConfig = { logoUri: xDaiLogo, }, }, - disabledWallets:[ + disabledWallets: [ WALLETS.TREZOR, WALLETS.LEDGER, WALLETS.COINBASE, @@ -50,8 +50,11 @@ const xDai: NetworkConfig = { WALLETS.WALLET_CONNECT, WALLETS.WALLET_LINK, WALLETS.AUTHEREUM, - WALLETS.LATTICE - ] + WALLETS.LATTICE, + ], + disabledFeatures: [ + FEATURES.ENS_LOOKUP, + ], } export default xDai diff --git a/src/logic/addressBook/utils/index.ts b/src/logic/addressBook/utils/index.ts index fed359a9..11656a8b 100644 --- a/src/logic/addressBook/utils/index.ts +++ b/src/logic/addressBook/utils/index.ts @@ -1,8 +1,9 @@ import { List } from 'immutable' -import { loadFromStorage, saveToStorage } from 'src/utils/storage' +import { mustBeEthereumContractAddress } from 'src/components/forms/validator' import { AddressBookEntry, AddressBookState, makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook' import { SafeOwner } from 'src/logic/safe/store/models/safe' import { sameAddress } from 'src/logic/wallets/ethAddresses' +import { loadFromStorage, saveToStorage } from 'src/utils/storage' const ADDRESS_BOOK_STORAGE_KEY = 'ADDRESS_BOOK_STORAGE_KEY' @@ -138,3 +139,39 @@ export const checkIfEntryWasDeletedFromAddressBook = ( const isAlreadyInAddressBook = !!addressBook.find((entry) => sameAddress(entry.address, address)) return addressShouldBeOnTheAddressBook && !isAlreadyInAddressBook } + +/** + * Returns a filtered list of AddressBookEntries whose addresses are contracts + * @param {Array} addressBook + * @returns Array + */ +export const filterContractAddressBookEntries = async (addressBook: AddressBookState): Promise => { + const abFlags = await Promise.all( + addressBook.map( + async ({ address }: AddressBookEntry): Promise => { + return (await mustBeEthereumContractAddress(address)) === undefined + }, + ), + ) + + return addressBook.filter((_, index) => abFlags[index]) +} + +/** + * Filters the AddressBookEntries by `address` or `name` based on the `inputValue` + * @param {Array} addressBookEntries + * @param {Object} filterParams + * @param {String} filterParams.inputValue + * @return Array + */ +export const filterAddressEntries = ( + addressBookEntries: AddressBookEntry[], + { inputValue }: { inputValue: string }, +): AddressBookEntry[] => + addressBookEntries.filter(({ address, name }) => { + const inputLowerCase = inputValue.toLowerCase() + const foundName = name.toLowerCase().includes(inputLowerCase) + const foundAddress = address?.toLowerCase().includes(inputLowerCase) + + return foundName || foundAddress + }) diff --git a/src/logic/safe/utils/safeVersion.ts b/src/logic/safe/utils/safeVersion.ts index bdfa6080..00d9884d 100644 --- a/src/logic/safe/utils/safeVersion.ts +++ b/src/logic/safe/utils/safeVersion.ts @@ -5,7 +5,7 @@ import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' import { getGnosisSafeInstanceAt, getSafeMasterContract } from 'src/logic/contracts/safeContracts' import { LATEST_SAFE_VERSION } from 'src/utils/constants' -import { getNetworkConfigDisabledFeatures } from 'src/config' +import { isFeatureEnabled } from 'src/config' import { FEATURES } from 'src/config/networks/network.d' type FeatureConfigByVersion = { @@ -41,9 +41,8 @@ const checkFeatureEnabledByVersion = (featureConfig: FeatureConfigByVersion, ver } export const enabledFeatures = (version?: string): FEATURES[] => { - const disabledFeatures = getNetworkConfigDisabledFeatures() return FEATURES_BY_VERSION.reduce((acc: FEATURES[], feature: Feature) => { - if (!disabledFeatures.includes(feature.name) && version && checkFeatureEnabledByVersion(feature, version)) { + if (isFeatureEnabled(feature.name) && version && checkFeatureEnabledByVersion(feature, version)) { acc.push(feature.name) } return acc diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index db9b9c90..2d520060 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -1,246 +1,204 @@ +import { EthHashInfo } from '@gnosis.pm/safe-react-components' import MuiTextField from '@material-ui/core/TextField' -import makeStyles from '@material-ui/core/styles/makeStyles' -import Autocomplete from '@material-ui/lab/Autocomplete' -import React, { useEffect, useState } from 'react' +import Autocomplete, { AutocompleteProps } from '@material-ui/lab/Autocomplete' +import React, { Dispatch, ReactElement, SetStateAction, useEffect, useState } from 'react' import { useSelector } from 'react-redux' -import { trimSpaces } from 'src/utils/strings' -import { styles } from './style' - -import Identicon from 'src/components/Identicon' import { mustBeEthereumAddress, mustBeEthereumContractAddress } from 'src/components/forms/validator' +import { isFeatureEnabled } from 'src/config' +import { FEATURES } from 'src/config/networks/network.d' +import { AddressBookEntry } from 'src/logic/addressBook/model/addressBook' import { addressBookSelector } from 'src/logic/addressBook/store/selectors' -import { getAddressFromENS } from 'src/logic/wallets/getWeb3' +import { filterContractAddressBookEntries, filterAddressEntries } from 'src/logic/addressBook/utils' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' -import { AddressBookEntry, AddressBookState } from 'src/logic/addressBook/model/addressBook' +import { getAddressFromENS } from 'src/logic/wallets/getWeb3' +import { + useTextFieldInputStyle, + useTextFieldLabelStyle, +} from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style' +import { trimSpaces } from 'src/utils/strings' export interface AddressBookProps { fieldMutator: (address: string) => void - isCustomTx?: boolean - pristine: boolean + pristine?: boolean recipientAddress?: string - setSelectedEntry: ( - entry: { address?: string; name?: string } | React.SetStateAction<{ address?: string; name? }> | null, - ) => void setIsValidAddress: (valid: boolean) => void + setSelectedEntry: Dispatch | null> } -const useStyles = makeStyles(styles) - -const textFieldLabelStyle = makeStyles(() => ({ - root: { - overflow: 'hidden', - borderRadius: 4, - fontSize: '15px', - width: '500px', - }, -})) - -const textFieldInputStyle = makeStyles(() => ({ - root: { - fontSize: '14px', - width: '420px', - }, -})) - -const filterAddressBookWithContractAddresses = async (addressBook: AddressBookState): Promise => { - const abFlags = await Promise.all( - addressBook.map( - async ({ address }: AddressBookEntry): Promise => { - return (await mustBeEthereumContractAddress(address)) === undefined - }, - ), - ) - - return addressBook.filter((_, index) => abFlags[index]) +export interface BaseAddressBookInputProps extends AddressBookProps { + addressBookEntries: AddressBookEntry[] + setSelectedEntry: (args: { address: string; name: string } | null) => void + setValidationText: Dispatch> + validationText: string | undefined } -const AddressBookInput = ({ +const BaseAddressBookInput = ({ + addressBookEntries, fieldMutator, - isCustomTx, - pristine, - recipientAddress, setIsValidAddress, setSelectedEntry, -}: AddressBookProps): React.ReactElement => { - const classes = useStyles() - const addressBook = useSelector(addressBookSelector) - const [isValidForm, setIsValidForm] = useState(true) - const [validationText, setValidationText] = useState('') - const [inputTouched, setInputTouched] = useState(false) - const [blurred, setBlurred] = useState(pristine) - const [adbkList, setADBKList] = useState([]) + setValidationText, + validationText, +}: BaseAddressBookInputProps): ReactElement => { + const updateAddressInfo = (addressEntry: AddressBookEntry): void => { + setSelectedEntry(addressEntry) + fieldMutator(addressEntry.address) + } - const [inputAddValue, setInputAddValue] = useState(recipientAddress) + const validateAddress = (address: string): AddressBookEntry | string | undefined => { + const addressErrorMessage = mustBeEthereumAddress(address) + setIsValidAddress(!addressErrorMessage) - const onAddressInputChanged = async (value: string): Promise => { - const normalizedAddress = trimSpaces(value) - const isENSDomain = isValidEnsName(normalizedAddress) - setInputAddValue(normalizedAddress) - let resolvedAddress = normalizedAddress - let addressErrorMessage - if (inputTouched && !normalizedAddress) { - setIsValidForm(false) - setValidationText('Required') - setIsValidAddress(false) + if (addressErrorMessage) { + setValidationText(addressErrorMessage) return } - if (normalizedAddress) { - if (isENSDomain) { - resolvedAddress = await getAddressFromENS(normalizedAddress) - setInputAddValue(resolvedAddress) + + const filteredEntries = filterAddressEntries(addressBookEntries, { inputValue: address }) + return filteredEntries.length === 1 ? filteredEntries[0] : address + } + + const onChange: AutocompleteProps['onChange'] = (_, value, reason) => { + switch (reason) { + case 'select-option': { + const { address, name } = value as AddressBookEntry + updateAddressInfo({ address, name }) + break } + } + } - addressErrorMessage = mustBeEthereumAddress(resolvedAddress) - if (isCustomTx && addressErrorMessage === undefined) { - addressErrorMessage = await mustBeEthereumContractAddress(resolvedAddress) - } + const onInputChange: AutocompleteProps['onInputChange'] = async ( + _, + value, + reason, + ) => { + switch (reason) { + case 'input': { + const normalizedValue = trimSpaces(value) - // First removes the entries that are not contracts if the operation is custom tx - const adbkToFilter = isCustomTx ? await filterAddressBookWithContractAddresses(addressBook) : addressBook - // Then Filters the entries based on the input of the user - const filteredADBK = adbkToFilter.filter((adbkEntry) => { - const { address, name } = adbkEntry - return ( - name.toLowerCase().includes(normalizedAddress.toLowerCase()) || - address.toLowerCase().includes(resolvedAddress.toLowerCase()) - ) - }) - setADBKList(filteredADBK) - if (!addressErrorMessage) { - // base case if isENSDomain we set the domain as the name - // if address does not exist in address book we use blank name - let addressName = isENSDomain ? normalizedAddress : '' - - // if address is valid, and is in the address book, then we use the stored values - if (filteredADBK.length === 1) { - const addressBookContact = filteredADBK[0] - addressName = addressBookContact.name ?? addressName + if (!normalizedValue) { + break } - setSelectedEntry({ - name: addressName, - address: resolvedAddress, - }) + // ENS-enabled resolve/validation + if (isFeatureEnabled(FEATURES.ENS_LOOKUP) && isValidEnsName(normalizedValue)) { + const address = await getAddressFromENS(normalizedValue).catch(() => normalizedValue) + + const validatedAddress = validateAddress(address) + + if (!validatedAddress) { + fieldMutator('') + break + } + + const newEntry = typeof validatedAddress === 'string' ? { address, name: normalizedValue } : validatedAddress + + updateAddressInfo(newEntry) + break + } + + // ETH address validation + const validatedAddress = validateAddress(normalizedValue) + + if (!validatedAddress) { + fieldMutator('') + break + } + + const newEntry = + typeof validatedAddress === 'string' ? { address: validatedAddress, name: '' } : validatedAddress + + updateAddressInfo(newEntry) + + break } } - setIsValidForm(addressErrorMessage === undefined) - setValidationText(addressErrorMessage) - fieldMutator(resolvedAddress) - setIsValidAddress(addressErrorMessage === undefined) } + const labelStyles = useTextFieldLabelStyle() + const inputStyles = useTextFieldInputStyle() + + return ( + + closeIcon={null} + openOnFocus={false} + filterOptions={filterAddressEntries} + freeSolo + onChange={onChange} + onInputChange={onInputChange} + options={addressBookEntries} + renderInput={(params) => ( + + )} + getOptionLabel={({ address }) => address} + renderOption={({ address, name }) => } + role="listbox" + style={{ display: 'flex', flexGrow: 1 }} + /> + ) +} + +export const AddressBookInput = (props: AddressBookProps): ReactElement => { + const addressBookEntries = useSelector(addressBookSelector) + const [validationText, setValidationText] = useState('') + + return ( + + ) +} + +export const ContractsAddressBookInput = ({ + setIsValidAddress, + setSelectedEntry, + ...props +}: AddressBookProps): ReactElement => { + const addressBookEntries = useSelector(addressBookSelector) + const [filteredEntries, setFilteredEntries] = useState([]) + const [validationText, setValidationText] = useState('') + useEffect(() => { - const filterAdbkContractAddresses = async (): Promise => { - if (!isCustomTx) { - setADBKList(addressBook) - return - } - - const filteredADBK = await filterAddressBookWithContractAddresses(addressBook) - setADBKList(filteredADBK) + const filterContractAddresses = async (): Promise => { + const filteredADBK = await filterContractAddressBookEntries(addressBookEntries) + setFilteredEntries(filteredADBK) } - filterAdbkContractAddresses() - }, [addressBook, isCustomTx]) + filterContractAddresses() + }, [addressBookEntries]) - const labelStyling = textFieldLabelStyle() - const txInputStyling = textFieldInputStyle() - - let statusClasses = '' - if (!isValidForm) { - statusClasses = 'isInvalid' - } - if (isValidForm && inputTouched) { - statusClasses = 'isValid' + const onSetSelectedEntry = async (selectedEntry) => { + if (selectedEntry?.address) { + // verify if `address` is a contract + const contractAddressErrorMessage = await mustBeEthereumContractAddress(selectedEntry.address) + setIsValidAddress(!contractAddressErrorMessage) + setValidationText(contractAddressErrorMessage ?? '') + setSelectedEntry(selectedEntry) + } } return ( - <> - - optionsArray.filter((item) => { - const inputLowerCase = inputValue.toLowerCase() - const foundName = item.name.toLowerCase().includes(inputLowerCase) - const foundAddress = item.address?.toLowerCase().includes(inputLowerCase) - return foundName || foundAddress - }) - } - freeSolo - getOptionLabel={(adbkEntry) => adbkEntry.address || ''} - id="free-solo-demo" - onChange={(_, value: AddressBookEntry) => { - let address = '' - let name = '' - if (value) { - address = value.address - name = value.name - } - setSelectedEntry({ address, name }) - fieldMutator(address) - }} - onClose={() => setBlurred(true)} - onOpen={() => { - setSelectedEntry(null) - setBlurred(false) - }} - open={!blurred} - options={adbkList} - renderInput={(params) => ( - { - setInputTouched(true) - onAddressInputChanged(event.target.value) - }} - value={{ address: inputAddValue }} - variant="filled" - /> - )} - renderOption={(adbkEntry) => { - const { address, name } = adbkEntry - - if (!address) { - return - } - - return ( -
-
- -
-
- {name} - {address} -
-
- ) - }} - role="listbox" - style={{ display: 'flex', flexGrow: 1 }} - value={{ address: inputAddValue, name: '' }} - /> - + ) } - -export default AddressBookInput diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts index b6d2d076..870b9485 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts @@ -1,24 +1,21 @@ -import { createStyles } from '@material-ui/core' +import { createStyles, makeStyles } from '@material-ui/core' -export const styles = createStyles({ - itemOptionList: { - display: 'flex', - }, +export const useTextFieldLabelStyle = makeStyles( + createStyles({ + root: { + overflow: 'hidden', + borderRadius: 4, + fontSize: '15px', + width: '500px', + }, + }), +) - adbkEntryName: { - display: 'flex', - flexDirection: 'column', - fontSize: '14px', - }, - identicon: { - display: 'flex', - padding: '5px', - flexDirection: 'column', - justifyContent: 'center', - }, - - root: { - fontSize: '14px', - backgroundColor: 'red', - }, -}) +export const useTextFieldInputStyle = makeStyles( + createStyles({ + root: { + fontSize: '14px', + width: '420px', + }, + }), +) diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx index 3a1f20d0..de80622b 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx @@ -3,7 +3,7 @@ import React, { useState } from 'react' import { useFormState, useField } from 'react-final-form' import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' -import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' +import { ContractsAddressBookInput } from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' import Field from 'src/components/forms/Field' import TextField from 'src/components/forms/TextField' import { @@ -82,11 +82,10 @@ const EthAddressInput = ({ validate={validate} /> ) : ( - {}} fieldMutator={onScannedValue} - isCustomTx pristine={pristine} /> )} diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx index 0a2751c0..a7e1ff24 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx @@ -25,7 +25,7 @@ import Row from 'src/components/layout/Row' import ScanQRModal from 'src/components/ScanQRModal' import { safeSelector } from 'src/logic/safe/store/selectors' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' -import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' +import { ContractsAddressBookInput } from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' import { sm } from 'src/theme/variables' import ArrowDown from '../../assets/arrow-down.svg' @@ -147,9 +147,13 @@ const SendCustomTx: React.FC = ({ initialValues, onClose, onNext, contrac {selectedEntry && selectedEntry.address ? (
{ - if (e.keyCode !== 9) { - setSelectedEntry(null) + if (e.key === 'Tab') { + return } + setSelectedEntry(null) + }} + onClick={() => { + setSelectedEntry(null) }} role="listbox" tabIndex={0} @@ -193,9 +197,8 @@ const SendCustomTx: React.FC = ({ initialValues, onClose, onNext, contrac <> - { @@ -71,9 +72,27 @@ const SendCollectible = ({ const nftAssets = useSelector(safeActiveSelectorMap) const nftTokens = useSelector(nftTokensSelector) const addressBook = useSelector(addressBookSelector) - const [selectedEntry, setSelectedEntry] = useState<{ address?: string; name?: string | null } | null>({ - address: recipientAddress || initialValues.recipientAddress, - name: '', + const [selectedEntry, setSelectedEntry] = useState<{ address: string; name: string } | null>(() => { + const defaultEntry = { address: '', name: '' } + + // if there's nothing to lookup for, we return the default entry + if (!initialValues?.recipientAddress && !recipientAddress) { + return defaultEntry + } + + // if there's something to lookup for, `initialValues` has precedence over `recipientAddress` + const predefinedAddress = initialValues?.recipientAddress ?? recipientAddress + const addressBookEntry = addressBook.find(({ address }) => { + return sameAddress(predefinedAddress, address) + }) + + // if found in the Address Book, then we return the entry + if (addressBookEntry) { + return addressBookEntry + } + + // otherwise we return the default entry + return defaultEntry }) const [pristine, setPristine] = useState(true) const [isValidAddress, setIsValidAddress] = useState(false) @@ -123,7 +142,7 @@ const SendCollectible = ({ const scannedName = addressBook ? getNameFromAddressBook(addressBook, scannedAddress) : '' mutators.setRecipient(scannedAddress) setSelectedEntry({ - name: scannedName, + name: scannedName ?? '', address: scannedAddress, }) closeQrModal() @@ -151,9 +170,13 @@ const SendCollectible = ({ {selectedEntry && selectedEntry.address ? (
{ - if (e.keyCode !== 9) { - setSelectedEntry({ address: '', name: 'string' }) + if (e.key === 'Tab') { + return } + setSelectedEntry({ address: '', name: '' }) + }} + onClick={() => { + setSelectedEntry({ address: '', name: '' }) }} role="listbox" tabIndex={0} @@ -200,7 +223,6 @@ const SendCollectible = ({ diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx index 8d11b552..0d85e87a 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx @@ -3,16 +3,14 @@ import InputAdornment from '@material-ui/core/InputAdornment' import { makeStyles } from '@material-ui/core/styles' import Close from '@material-ui/icons/Close' import { getExplorerInfo, getNetworkInfo } from 'src/config' -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import { OnChange } from 'react-final-form-listeners' import { useSelector } from 'react-redux' -import CopyBtn from 'src/components/CopyBtn' import Field from 'src/components/forms/Field' import GnoForm from 'src/components/forms/GnoForm' import TextField from 'src/components/forms/TextField' import { composeValidators, maxValue, minValue, mustBeFloat, required } from 'src/components/forms/validator' -import Identicon from 'src/components/Identicon' import Block from 'src/components/layout/Block' import Button from 'src/components/layout/Button' import ButtonLink from 'src/components/layout/ButtonLink' @@ -23,9 +21,10 @@ import Row from 'src/components/layout/Row' import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' import { addressBookSelector } from 'src/logic/addressBook/store/selectors' import { getNameFromAddressBook } from 'src/logic/addressBook/utils' +import { sameAddress } from 'src/logic/wallets/ethAddresses' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' -import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' +import { AddressBookInput } from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' import TokenSelectField from 'src/routes/safe/components/Balances/SendModal/screens/SendFunds/TokenSelectField' import { extendedSafeTokensSelector } from 'src/routes/safe/container/selector' import { sm } from 'src/theme/variables' @@ -33,7 +32,7 @@ import { sm } from 'src/theme/variables' import ArrowDown from '../assets/arrow-down.svg' import { styles } from './style' -import { ExplorerButton } from '@gnosis.pm/safe-react-components' +import { EthHashInfo } from '@gnosis.pm/safe-react-components' const formMutators = { setMax: (args, state, utils) => { @@ -75,15 +74,32 @@ const SendFunds = ({ const classes = useStyles() const tokens = useSelector(extendedSafeTokensSelector) const addressBook = useSelector(addressBookSelector) - const [selectedEntry, setSelectedEntry] = useState<{ address?: string; name?: string | null } | null>({ - address: recipientAddress || initialValues.recipientAddress, - name: '', - }) + const [selectedEntry, setSelectedEntry] = useState<{ address: string; name: string } | null>(() => { + const defaultEntry = { address: '', name: '' } + // if there's nothing to lookup for, we return the default entry + if (!initialValues?.recipientAddress && !recipientAddress) { + return defaultEntry + } + + // if there's something to lookup for, `initialValues` has precedence over `recipientAddress` + const predefinedAddress = initialValues?.recipientAddress ?? recipientAddress + const addressBookEntry = addressBook.find(({ address }) => { + return sameAddress(predefinedAddress, address) + }) + + // if found in the Address Book, then we return the entry + if (addressBookEntry) { + return addressBookEntry + } + + // otherwise we return the default entry + return defaultEntry + }) const [pristine, setPristine] = useState(true) const [isValidAddress, setIsValidAddress] = useState(false) - React.useMemo(() => { + useEffect(() => { if (selectedEntry === null && pristine) { setPristine(false) } @@ -152,9 +168,13 @@ const SendFunds = ({ {selectedEntry && selectedEntry.address ? (
{ - if (e.keyCode !== 9) { - setSelectedEntry({ address: '', name: 'string' }) + if (e.key === 'Tab') { + return } + setSelectedEntry({ address: '', name: '' }) + }} + onClick={() => { + setSelectedEntry({ address: '', name: '' }) }} role="listbox" tabIndex={0} @@ -165,52 +185,29 @@ const SendFunds = ({ - - - - - - - setSelectedEntry({ address: '', name: 'string' })} - weight="bolder" - > - {selectedEntry.name} - - setSelectedEntry({ address: '', name: 'string' })} - weight="bolder" - > - {selectedEntry.address} - - - - - - +
) : ( - <> - - - - - - - - - + + + + + + + + )} @@ -256,15 +253,7 @@ const SendFunds = ({ maxValue(selectedTokenRecord?.balance || 0), )} /> - - {() => { - setSelectedEntry({ - name: selectedEntry?.name, - address: selectedEntry?.address, - }) - mutators.onTokenChange() - }} - + {() => mutators.onTokenChange()} From ca732001bfb68e0f440c28dda8acd22c7f5f3c75 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Tue, 10 Nov 2020 17:09:41 -0300 Subject: [PATCH 6/7] (Fix) - #1561 Outgoing instead of custom tx for sending collectibles (#1567) * Refactor getTxData * Add SAFE_TRANSFER_FROM in SAFE_METHODS_NAMES * Adds check on isSendERC721Transaction for erc721 send * Adds TOKEN_TRANSFER_METHODS_NAMES types * Replace type SAFE_TRANSFER_FROM * Fix import * Adds nftAssetsListAddressSelector * Remove txCode and knownTokens from isSendERC721Transaction Now it directly checks agains the list of nftAssets on the store * Refactor ENS_TOKEN_CONTRACT usage check * Add TODO * Add return for ENS symbol Co-authored-by: Daniel Sanchez Co-authored-by: Fernando --- .../collectibles/store/selectors/index.ts | 4 + .../__tests__/transactionHelpers.test.ts | 14 +- .../loadOutgoingTransactions.ts | 14 +- .../transactions/utils/transactionHelpers.ts | 27 +-- .../safe/store/models/types/transactions.d.ts | 8 +- src/logic/tokens/utils/tokenHelpers.ts | 38 ++-- .../ExpandedTx/TxDescription/utils.ts | 199 ++++++++++++------ 7 files changed, 179 insertions(+), 125 deletions(-) diff --git a/src/logic/collectibles/store/selectors/index.ts b/src/logic/collectibles/store/selectors/index.ts index 1c5e6412..d6737a6a 100644 --- a/src/logic/collectibles/store/selectors/index.ts +++ b/src/logic/collectibles/store/selectors/index.ts @@ -16,6 +16,10 @@ export const nftAssetsListSelector = createSelector(nftAssets, (assets): NFTAsse return assets ? Object.values(assets) : [] }) +export const nftAssetsListAddressesSelector = createSelector(nftAssetsListSelector, (assets): string[] => { + return Array.from(new Set(assets.map((nftAsset) => nftAsset.address))) +}) + export const availableNftAssetsAddresses = createSelector(nftTokensSelector, (userNftTokens): string[] => { return Array.from(new Set(userNftTokens.map((nftToken) => nftToken.assetAddress))) }) diff --git a/src/logic/safe/store/actions/__tests__/transactionHelpers.test.ts b/src/logic/safe/store/actions/__tests__/transactionHelpers.test.ts index 6fb7a15d..43a76e6a 100644 --- a/src/logic/safe/store/actions/__tests__/transactionHelpers.test.ts +++ b/src/logic/safe/store/actions/__tests__/transactionHelpers.test.ts @@ -281,7 +281,6 @@ describe('isCustomTransaction', () => { it('It should return true if Is outgoing transaction, is not an erc20 transaction, not an upgrade transaction and not and erc721 transaction', async () => { // given const transaction = getMockedTxServiceModel({ to: safeAddress2, value: '0', data: 'test' }) - const txCode = '' const knownTokens = Map & Readonly>() const token = makeToken({ address: '0x00Df91984582e6e96288307E9c2f20b38C8FeCE9', @@ -299,7 +298,7 @@ describe('isCustomTransaction', () => { txHelpers.isSendERC721Transaction.mockImplementationOnce(() => false) // when - const result = await isCustomTransaction(transaction, txCode, safeAddress, knownTokens) + const result = await isCustomTransaction(transaction, safeAddress) // then expect(result).toBe(true) @@ -309,7 +308,6 @@ describe('isCustomTransaction', () => { it('It should return true if is outgoing transaction, is not SendERC20Transaction, is not isUpgradeTransaction and not isSendERC721Transaction', async () => { // given const transaction = getMockedTxServiceModel({ to: safeAddress2, value: '0', data: 'test' }) - const txCode = '' const knownTokens = Map & Readonly>() const token = makeToken({ address: '0x00Df91984582e6e96288307E9c2f20b38C8FeCE9', @@ -327,7 +325,7 @@ describe('isCustomTransaction', () => { txHelpers.isSendERC721Transaction.mockImplementationOnce(() => false) // when - const result = await isCustomTransaction(transaction, txCode, safeAddress, knownTokens) + const result = await isCustomTransaction(transaction, safeAddress) // then expect(result).toBe(true) @@ -338,7 +336,6 @@ describe('isCustomTransaction', () => { // given const upgradeTxData = `0x8d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f200dfa693da0d16f5e7e78fdcbede8fc6ebea44f1cf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247de7edef000000000000000000000000d5d82b6addc9027b22dca772aa68d5d74cdbdf4400dfa693da0d16f5e7e78fdcbede8fc6ebea44f1cf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f08a032300000000000000000000000034cfac646f301356faa8b21e94227e3583fe3f5f0000000000000000000000000000` const transaction = getMockedTxServiceModel({ to: safeAddress2, value: '0', data: upgradeTxData }) - const txCode = '' const knownTokens = Map & Readonly>() const token = makeToken({ address: '0x00Df91984582e6e96288307E9c2f20b38C8FeCE9', @@ -356,7 +353,7 @@ describe('isCustomTransaction', () => { txHelpers.isSendERC721Transaction.mockImplementationOnce(() => false) // when - const result = await isCustomTransaction(transaction, txCode, safeAddress, knownTokens) + const result = await isCustomTransaction(transaction, safeAddress) // then expect(result).toBe(false) @@ -365,7 +362,6 @@ describe('isCustomTransaction', () => { it('It should return false if is outgoing transaction, is not SendERC20Transaction, not isUpgradeTransaction and isSendERC721Transaction', async () => { // given const transaction = getMockedTxServiceModel({ to: safeAddress2, value: '0', data: 'test' }) - const txCode = '' const knownTokens = Map & Readonly>() const token = makeToken({ address: '0x00Df91984582e6e96288307E9c2f20b38C8FeCE9', @@ -383,7 +379,7 @@ describe('isCustomTransaction', () => { txHelpers.isSendERC721Transaction.mockImplementationOnce(() => true) // when - const result = await isCustomTransaction(transaction, txCode, safeAddress, knownTokens) + const result = await isCustomTransaction(transaction, safeAddress) // then expect(result).toBe(false) @@ -839,11 +835,9 @@ describe('buildTx', () => { const txResult = await buildTx({ cancellationTxs, currentUser: userAddress, - knownTokens, outgoingTxs, safe: safeInstance, tx: transaction, - txCode: undefined, }) // then diff --git a/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts b/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts index 4dca08fb..60e5e6ad 100644 --- a/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts +++ b/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts @@ -1,7 +1,6 @@ import { fromJS, List, Map } from 'immutable' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' -import { TOKEN_REDUCER_ID, TokenState } from 'src/logic/tokens/store/reducer/tokens' import { web3ReadOnly } from 'src/logic/wallets/getWeb3' import { PROVIDER_REDUCER_ID } from 'src/logic/wallets/store/reducer/provider' import { buildTx, isCancelTransaction } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' @@ -9,7 +8,6 @@ import { SAFE_REDUCER_ID } from 'src/logic/safe/store/reducer/safe' import { store } from 'src/store' import fetchTransactions from 'src/logic/safe/store/actions/transactions/fetchTransactions/fetchTransactions' import { Transaction, TransactionTypes } from 'src/logic/safe/store/models/types/transaction' -import { Token } from 'src/logic/tokens/store/model/token' import { SafeRecord } from 'src/logic/safe/store/models/safe' import { DataDecoded } from 'src/logic/safe/store/models/types/transactions.d' @@ -65,7 +63,6 @@ export type OutgoingTxs = { export type BatchProcessTxsProps = OutgoingTxs & { currentUser?: string - knownTokens: Map safe: SafeRecord } @@ -138,7 +135,6 @@ const batchRequestContractCode = (transactions: TxServiceModel[]): Promise => { +export const isCustomTransaction = async (tx: TxServiceModel, safeAddress?: string): Promise => { const isOutgoing = isOutgoingTransaction(tx, safeAddress) - const isErc20 = await isSendERC20Transaction(tx, txCode, knownTokens) + const isErc20 = await isSendERC20Transaction(tx) const isUpgrade = isUpgradeTransaction(tx) - const isErc721 = isSendERC721Transaction(tx, txCode, knownTokens) + const isErc721 = isSendERC721Transaction(tx) return isOutgoing && !isErc20 && !isUpgrade && !isErc721 } @@ -232,27 +225,24 @@ export const calculateTransactionType = (tx: Transaction): TransactionTypeValues export type BuildTx = BatchProcessTxsProps & { tx: TxServiceModel - txCode?: string } export const buildTx = async ({ cancellationTxs, currentUser, - knownTokens, outgoingTxs, safe, tx, - txCode, }: BuildTx): Promise => { const safeAddress = safe.address const { nativeCoin } = getNetworkInfo() const isModifySettingsTx = isModifySettingsTransaction(tx, safeAddress) const isTxCancelled = isTransactionCancelled(tx, outgoingTxs, cancellationTxs) - const isSendERC721Tx = isSendERC721Transaction(tx, txCode, knownTokens) - const isSendERC20Tx = await isSendERC20Transaction(tx, txCode, knownTokens) + const isSendERC721Tx = isSendERC721Transaction(tx) + const isSendERC20Tx = await isSendERC20Transaction(tx) const isMultiSendTx = isMultiSendTransaction(tx) const isUpgradeTx = isUpgradeTransaction(tx) - const isCustomTx = await isCustomTransaction(tx, txCode, safeAddress, knownTokens) + const isCustomTx = await isCustomTransaction(tx, safeAddress) const isCancellationTx = isCancelTransaction(tx, safeAddress) const refundParams = await getRefundParams(tx, getERC20DecimalsAndSymbol) const decodedParams = getDecodedParams(tx) @@ -323,7 +313,6 @@ export type TxToMock = TxArgs & { } export const mockTransaction = (tx: TxToMock, safeAddress: string, state: AppReduxState): Promise => { - const knownTokens: Map = state[TOKEN_REDUCER_ID] const safe = safeSelector(state) const cancellationTxs = safeCancellationTransactionsSelector(state) const outgoingTxs = safeTransactionsSelector(state) @@ -335,11 +324,9 @@ export const mockTransaction = (tx: TxToMock, safeAddress: string, state: AppRed return buildTx({ cancellationTxs, currentUser: undefined, - knownTokens, outgoingTxs, safe, tx: (tx as unknown) as TxServiceModel, - txCode: EMPTY_DATA, }) } diff --git a/src/logic/safe/store/models/types/transactions.d.ts b/src/logic/safe/store/models/types/transactions.d.ts index a9fcc709..b606d49b 100644 --- a/src/logic/safe/store/models/types/transactions.d.ts +++ b/src/logic/safe/store/models/types/transactions.d.ts @@ -241,7 +241,13 @@ export const METHOD_TO_ID = { export type SafeMethods = typeof SAFE_METHODS_NAMES[keyof typeof SAFE_METHODS_NAMES] -type TokenMethods = 'transfer' | 'transferFrom' | 'safeTransferFrom' +export const TOKEN_TRANSFER_METHODS_NAMES = { + TRANSFER: 'transfer', + TRANSFER_FROM: 'transferFrom', + SAFE_TRANSFER_FROM: 'safeTransferFrom', +} as const + +type TokenMethods = typeof TOKEN_TRANSFER_METHODS_NAMES[keyof typeof TOKEN_TRANSFER_METHODS_NAMES] type SafeDecodedParams = { [key in SafeMethods]?: Record diff --git a/src/logic/tokens/utils/tokenHelpers.ts b/src/logic/tokens/utils/tokenHelpers.ts index b7bb4b2f..ef2f7852 100644 --- a/src/logic/tokens/utils/tokenHelpers.ts +++ b/src/logic/tokens/utils/tokenHelpers.ts @@ -8,11 +8,14 @@ import { getERC721TokenContract, } from 'src/logic/tokens/store/actions/fetchTokens' import { makeToken, Token } from 'src/logic/tokens/store/model/token' -import { TokenState } from 'src/logic/tokens/store/reducer/tokens' import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi' import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' import { isEmptyData } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { TxServiceModel } from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions' +import { sameString } from 'src/utils/strings' +import { TOKEN_TRANSFER_METHODS_NAMES } from 'src/logic/safe/store/models/types/transactions.d' +import { store } from 'src/store' +import { nftAssetsListAddressesSelector } from 'src/logic/collectibles/store/selectors' export const SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH = '42842e0e' @@ -42,14 +45,17 @@ export const isTokenTransfer = (tx: TxServiceModel): boolean => { return !isEmptyData(tx.data) && tx.data?.substring(0, 10) === '0xa9059cbb' && Number(tx.value) === 0 } -export const isSendERC721Transaction = (tx: TxServiceModel, txCode?: string, knownTokens?: TokenState): boolean => { - // "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" - ens token contract, includes safeTransferFrom - // but no proper ERC721 standard implemented - return ( - (txCode?.includes(SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH) && - tx.to !== '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85') || - (isTokenTransfer(tx) && !knownTokens?.get(tx.to)) - ) +export const isSendERC721Transaction = (tx: TxServiceModel): boolean => { + let hasERC721Transfer = false + + if (tx.dataDecoded && sameString(tx.dataDecoded.method, TOKEN_TRANSFER_METHODS_NAMES.SAFE_TRANSFER_FROM)) { + hasERC721Transfer = tx.dataDecoded.parameters.findIndex((param) => sameString(param.name, 'tokenId')) !== -1 + } + + // Note: this is only valid with our current case (client rendering), if we move to server side rendering we need to refactor this + const state = store.getState() + const knownAssets = nftAssetsListAddressesSelector(state) + return knownAssets.includes(tx.to) || hasERC721Transfer } export const getERC721Symbol = async (contractAddress: string): Promise => { @@ -59,6 +65,12 @@ export const getERC721Symbol = async (contractAddress: string): Promise const tokenInstance = await ERC721token.at(contractAddress) tokenSymbol = tokenInstance.symbol() } catch (err) { + // If the contract address is an ENS token contract, we know that the ERC721 standard is not proper implemented + // The method symbol() is missing + const ENS_TOKEN_CONTRACT = '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85' + if (sameString(contractAddress, ENS_TOKEN_CONTRACT)) { + return 'ENS' + } console.error(`Failed to retrieve token symbol for ERC721 token ${contractAddress}`) } return tokenSymbol @@ -89,12 +101,8 @@ export const getERC20DecimalsAndSymbol = async ( return tokenInfo } -export const isSendERC20Transaction = async ( - tx: TxServiceModel, - txCode?: string, - knownTokens?: TokenState, -): Promise => { - let isSendTokenTx = !isSendERC721Transaction(tx, txCode, knownTokens) && isTokenTransfer(tx) +export const isSendERC20Transaction = async (tx: TxServiceModel): Promise => { + let isSendTokenTx = !isSendERC721Transaction(tx) && isTokenTransfer(tx) if (isSendTokenTx) { const { decimals, symbol } = await getERC20DecimalsAndSymbol(tx.to) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.ts b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.ts index d204b863..2ba34f22 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.ts +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.ts @@ -29,77 +29,142 @@ interface TxData { upgradeTx?: boolean } -export const getTxData = (tx: Transaction): TxData => { +const getTxDataForModifySettingsTxs = (tx: Transaction): TxData => { const txData: TxData = {} - if (tx.decodedParams) { - if (tx.isTokenTransfer) { - const { to } = tx.decodedParams.transfer || {} - txData.recipient = to - txData.isTokenTransfer = true - } else if (tx.isCollectibleTransfer) { - const { safeTransferFrom, transfer, transferFrom } = tx.decodedParams - const { to, value } = safeTransferFrom || transferFrom || transfer || {} - txData.recipient = to - txData.tokenId = value - txData.isCollectibleTransfer = true - } else if (tx.modifySettingsTx) { - txData.recipient = tx.recipient - txData.modifySettingsTx = true + if (!tx.modifySettingsTx || !tx.decodedParams) { + return txData + } - if (tx.decodedParams[SAFE_METHODS_NAMES.REMOVE_OWNER]) { - const { _threshold, owner } = tx.decodedParams[SAFE_METHODS_NAMES.REMOVE_OWNER] - txData.action = SAFE_METHODS_NAMES.REMOVE_OWNER - txData.removedOwner = owner - txData.newThreshold = _threshold - } else if (tx.decodedParams[SAFE_METHODS_NAMES.CHANGE_THRESHOLD]) { - const { _threshold } = tx.decodedParams[SAFE_METHODS_NAMES.CHANGE_THRESHOLD] - txData.action = SAFE_METHODS_NAMES.CHANGE_THRESHOLD - txData.newThreshold = _threshold - } else if (tx.decodedParams[SAFE_METHODS_NAMES.ADD_OWNER_WITH_THRESHOLD]) { - const { _threshold, owner } = tx.decodedParams[SAFE_METHODS_NAMES.ADD_OWNER_WITH_THRESHOLD] - txData.action = SAFE_METHODS_NAMES.ADD_OWNER_WITH_THRESHOLD - txData.addedOwner = owner - txData.newThreshold = _threshold - } else if (tx.decodedParams[SAFE_METHODS_NAMES.SWAP_OWNER]) { - const { newOwner, oldOwner } = tx.decodedParams[SAFE_METHODS_NAMES.SWAP_OWNER] - txData.action = SAFE_METHODS_NAMES.SWAP_OWNER - txData.removedOwner = oldOwner - txData.addedOwner = newOwner - } else if (tx.decodedParams[SAFE_METHODS_NAMES.ENABLE_MODULE]) { - const { module } = tx.decodedParams[SAFE_METHODS_NAMES.ENABLE_MODULE] - txData.action = SAFE_METHODS_NAMES.ENABLE_MODULE - txData.module = module - } else if (tx.decodedParams[SAFE_METHODS_NAMES.DISABLE_MODULE]) { - const { module } = tx.decodedParams[SAFE_METHODS_NAMES.DISABLE_MODULE] - txData.action = SAFE_METHODS_NAMES.DISABLE_MODULE - txData.module = module - } - } else if (tx.multiSendTx) { - txData.recipient = tx.recipient - txData.data = tx.data - txData.customTx = true - } else { - txData.recipient = tx.recipient - txData.data = tx.data - txData.customTx = true - } - } else if (tx.customTx) { - txData.recipient = tx.recipient - txData.data = tx.data - txData.customTx = true - } else if (Number(tx.value) > 0) { - txData.recipient = tx.recipient - } else if (tx.isCancellationTx) { - txData.cancellationTx = true - } else if (tx.creationTx) { - txData.creationTx = true - } else if (tx.upgradeTx) { - txData.upgradeTx = true - txData.data = `The contract of this Safe is upgraded to Version ${getSafeVersion(tx.data)}` - } else { - txData.recipient = tx.recipient + txData.recipient = tx.recipient + txData.modifySettingsTx = true + + if (tx.decodedParams[SAFE_METHODS_NAMES.REMOVE_OWNER]) { + const { _threshold, owner } = tx.decodedParams[SAFE_METHODS_NAMES.REMOVE_OWNER] + txData.action = SAFE_METHODS_NAMES.REMOVE_OWNER + txData.removedOwner = owner + txData.newThreshold = _threshold + + return txData + } + if (tx.decodedParams[SAFE_METHODS_NAMES.CHANGE_THRESHOLD]) { + const { _threshold } = tx.decodedParams[SAFE_METHODS_NAMES.CHANGE_THRESHOLD] + txData.action = SAFE_METHODS_NAMES.CHANGE_THRESHOLD + txData.newThreshold = _threshold + return txData + } + if (tx.decodedParams[SAFE_METHODS_NAMES.ADD_OWNER_WITH_THRESHOLD]) { + const { _threshold, owner } = tx.decodedParams[SAFE_METHODS_NAMES.ADD_OWNER_WITH_THRESHOLD] + txData.action = SAFE_METHODS_NAMES.ADD_OWNER_WITH_THRESHOLD + txData.addedOwner = owner + txData.newThreshold = _threshold + return txData + } + + if (tx.decodedParams[SAFE_METHODS_NAMES.SWAP_OWNER]) { + const { newOwner, oldOwner } = tx.decodedParams[SAFE_METHODS_NAMES.SWAP_OWNER] + txData.action = SAFE_METHODS_NAMES.SWAP_OWNER + txData.removedOwner = oldOwner + txData.addedOwner = newOwner + return txData + } + + if (tx.decodedParams[SAFE_METHODS_NAMES.ENABLE_MODULE]) { + const { module } = tx.decodedParams[SAFE_METHODS_NAMES.ENABLE_MODULE] + txData.action = SAFE_METHODS_NAMES.ENABLE_MODULE + txData.module = module + return txData + } + + if (tx.decodedParams[SAFE_METHODS_NAMES.DISABLE_MODULE]) { + const { module } = tx.decodedParams[SAFE_METHODS_NAMES.DISABLE_MODULE] + txData.action = SAFE_METHODS_NAMES.DISABLE_MODULE + txData.module = module + return txData } return txData } + +const getTxDataForTxsWithDecodedParams = (tx: Transaction): TxData => { + const txData: TxData = {} + + if (!tx.decodedParams) { + return txData + } + + if (tx.isTokenTransfer) { + const { to } = tx.decodedParams.transfer || {} + txData.recipient = to + txData.isTokenTransfer = true + return txData + } + + if (tx.isCollectibleTransfer) { + const { safeTransferFrom, transfer, transferFrom } = tx.decodedParams + const { to, value } = safeTransferFrom || transferFrom || transfer || {} + txData.recipient = to + txData.tokenId = value + txData.isCollectibleTransfer = true + + return txData + } + + if (tx.modifySettingsTx) { + return getTxDataForModifySettingsTxs(tx) + } + + if (tx.multiSendTx) { + txData.recipient = tx.recipient + txData.data = tx.data + txData.customTx = true + return txData + } + + txData.recipient = tx.recipient + txData.data = tx.data + txData.customTx = true + + return txData +} + +// @todo (agustin) this function does not makes much sense +// it should be refactored to simplify unnecessary if's checks and re-asigning props to the txData object +export const getTxData = (tx: Transaction): TxData => { + const txData: TxData = {} + + if (tx.decodedParams) { + return getTxDataForTxsWithDecodedParams(tx) + } + + if (tx.customTx) { + txData.recipient = tx.recipient + txData.data = tx.data + txData.customTx = true + return txData + } + if (Number(tx.value) > 0) { + txData.recipient = tx.recipient + return txData + } + + if (tx.isCancellationTx) { + txData.cancellationTx = true + return txData + } + + if (tx.creationTx) { + txData.creationTx = true + return txData + } + + if (tx.upgradeTx) { + txData.upgradeTx = true + txData.data = `The contract of this Safe is upgraded to Version ${getSafeVersion(tx.data)}` + + return txData + } + txData.recipient = tx.recipient + + return txData +} From 19e6df725acc46de4ba5e95d2f7e2238c1281d00 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Wed, 11 Nov 2020 11:44:14 -0300 Subject: [PATCH 7/7] Add tracking info to Google analytics (#1584) Add extra information to Google Analytics (#1510 ) --- src/utils/googleAnalytics.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/utils/googleAnalytics.ts b/src/utils/googleAnalytics.ts index 091f6a40..6db5ebfa 100644 --- a/src/utils/googleAnalytics.ts +++ b/src/utils/googleAnalytics.ts @@ -1,5 +1,6 @@ import { useCallback, useEffect, useState } from 'react' import GoogleAnalytics, { EventArgs } from 'react-ga' +import { getNetworkInfo } from 'src/config' import { getGoogleAnalyticsTrackingID } from 'src/config' import { COOKIES_KEY } from 'src/logic/cookies/model/cookie' @@ -15,11 +16,17 @@ export const loadGoogleAnalytics = (): void => { // eslint-disable-next-line no-console console.log('Loading google analytics...') const trackingID = getGoogleAnalyticsTrackingID() + const networkInfo = getNetworkInfo() if (!trackingID) { console.error('[GoogleAnalytics] - In order to use google analytics you need to add an trackingID') } else { GoogleAnalytics.initialize(trackingID) - GoogleAnalytics.set({ anonymizeIp: true }) + GoogleAnalytics.set({ + anonymizeIp: true, + appName: `Gnosis Safe Multisig (${networkInfo.label})`, + appId: `io.gnosis.safe.${networkInfo.label.toLowerCase()}`, + appVersion: process.env.REACT_APP_APP_VERSION, + }) analyticsLoaded = true } }