From 90b6dbd3799364c648742ee782e852d17eefc87f Mon Sep 17 00:00:00 2001 From: George Marshall Date: Mon, 3 Oct 2022 11:00:19 -0700 Subject: [PATCH 001/104] Some icon fixes (#16044) --- app/images/icons/icon-search-filled.svg | 2 +- ui/components/component-library/icon/icon.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/images/icons/icon-search-filled.svg b/app/images/icons/icon-search-filled.svg index 88b36fc08..267caca92 100644 --- a/app/images/icons/icon-search-filled.svg +++ b/app/images/icons/icon-search-filled.svg @@ -1,3 +1,3 @@ - + diff --git a/ui/components/component-library/icon/icon.js b/ui/components/component-library/icon/icon.js index 9318c4706..8b18b183a 100644 --- a/ui/components/component-library/icon/icon.js +++ b/ui/components/component-library/icon/icon.js @@ -61,7 +61,7 @@ Icon.propTypes = { * Addition style properties to apply to the icon. * The Icon component uses inline styles to apply the icon's mask-image so be wary of overriding */ - style: PropTypes.style, + style: PropTypes.object, /** * Icon accepts all the props from Box */ From 5cc411967c29116612c1c4297549529603f4aa5b Mon Sep 17 00:00:00 2001 From: George Marshall Date: Mon, 3 Oct 2022 11:01:38 -0700 Subject: [PATCH 002/104] Fixes display of avatr in flex display with elements of different heights (#16047) --- ui/components/component-library/base-avatar/base-avatar.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/components/component-library/base-avatar/base-avatar.scss b/ui/components/component-library/base-avatar/base-avatar.scss index 7ead0dafb..cf558da6f 100644 --- a/ui/components/component-library/base-avatar/base-avatar.scss +++ b/ui/components/component-library/base-avatar/base-avatar.scss @@ -23,6 +23,8 @@ height: var(--avatar-size); width: var(--avatar-size); + max-width: var(--avatar-size); + flex: 0 0 var(--avatar-size); border-radius: 100%; overflow: hidden; display: flex; From 02d7eb34c90736cdc9b4ae1bc8d44115eb88e79d Mon Sep 17 00:00:00 2001 From: Filip Sekulic Date: Mon, 3 Oct 2022 21:55:54 +0200 Subject: [PATCH 003/104] Add Aurora to the popular custom network list (#16039) Co-authored-by: Brad Decker --- app/images/aurora.png | Bin 0 -> 48350 bytes shared/constants/network.ts | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 app/images/aurora.png diff --git a/app/images/aurora.png b/app/images/aurora.png new file mode 100644 index 0000000000000000000000000000000000000000..5c59ca5eb91bcc267f758fea78d0c451892efd13 GIT binary patch literal 48350 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 Date: Mon, 3 Oct 2022 19:02:38 -0500 Subject: [PATCH 004/104] Update eth-lattice-keyring to v0.12.3 (#15997) --- lavamoat/browserify/beta/policy.json | 131 +-- lavamoat/browserify/flask/policy.json | 123 +-- lavamoat/browserify/main/policy.json | 131 +-- lavamoat/build-system/policy.json | 1421 ++++++------------------- package.json | 2 +- yarn.lock | 84 +- 6 files changed, 460 insertions(+), 1432 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 2e9433adf..2e1e455bc 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -2405,36 +2405,13 @@ }, "@keystonehq/bc-ur-registry-eth": { "packages": { - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, "@keystonehq/bc-ur-registry-eth>hdkey": true, "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, "uuid": true } }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": { - "packages": { - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>@ethereumjs/rlp": true, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>ethereum-cryptography": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true - } - }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>@ethereumjs/rlp": { - "globals": { - "TextEncoder": true - } - }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "@metamask/rpc-methods>@metamask/key-tree>@noble/hashes": true, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": true - } - }, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": { "globals": { "define": true @@ -2481,10 +2458,10 @@ "packages": { "@ethereumjs/tx": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, "uuid": true } }, @@ -3425,14 +3402,6 @@ "crypto": true } }, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, "@metamask/smart-transactions-controller": { "globals": { "URLSearchParams": true, @@ -3691,11 +3660,6 @@ "localStorage": true } }, - "@storybook/components>qs": { - "packages": { - "string.prototype.matchall>side-channel": true - } - }, "@storybook/react>@storybook/store>stable": { "globals": { "define": true @@ -4500,15 +4464,6 @@ "string.prototype.matchall>call-bind": true } }, - "enzyme>object-inspect": { - "globals": { - "HTMLElement": true, - "WeakRef": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, "enzyme>object-is": { "packages": { "globalthis>define-properties": true, @@ -4766,44 +4721,56 @@ "clearInterval": true, "fetch": true, "open": true, - "setInterval": true, - "txData.type": true + "setInterval": true }, "packages": { "browserify>buffer": true, "browserify>crypto-browserify": true, "browserify>events": true, - "eth-lattice-keyring>@ethereumjs/common": true, "eth-lattice-keyring>@ethereumjs/tx": true, + "eth-lattice-keyring>@ethereumjs/util": true, "eth-lattice-keyring>bn.js": true, "eth-lattice-keyring>gridplus-sdk": true, - "eth-lattice-keyring>rlp": true, - "eth-lattice-keyring>secp256k1": true, - "ethereumjs-util": true + "eth-lattice-keyring>rlp": true } }, - "eth-lattice-keyring>@ethereumjs/common": { + "eth-lattice-keyring>@ethereumjs/tx": { "packages": { - "@ethereumjs/common>crc-32": true, + "@ethereumjs/common": true, "browserify>buffer": true, - "browserify>events": true, + "browserify>insert-module-globals>is-buffer": true, "ethereumjs-util": true } }, - "eth-lattice-keyring>@ethereumjs/tx": { + "eth-lattice-keyring>@ethereumjs/util": { "packages": { "browserify>buffer": true, "browserify>insert-module-globals>is-buffer": true, - "eth-lattice-keyring>@ethereumjs/tx>@ethereumjs/common": true, - "ethereumjs-util": true + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": { + "globals": { + "TextEncoder": true } }, - "eth-lattice-keyring>@ethereumjs/tx>@ethereumjs/common": { + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, "packages": { - "@ethereumjs/common>crc-32": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true + "@metamask/rpc-methods>@metamask/key-tree>@noble/hashes": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true } }, "eth-lattice-keyring>bn.js": { @@ -4816,9 +4783,15 @@ }, "eth-lattice-keyring>gridplus-sdk": { "globals": { + "AbortController": true, + "Request": true, "__values": true, + "caches": true, + "clearTimeout": true, + "console.error": true, "console.log": true, "console.warn": true, + "fetch": true, "setTimeout": true }, "packages": { @@ -4837,7 +4810,6 @@ "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true, "eth-lattice-keyring>gridplus-sdk>rlp": true, "eth-lattice-keyring>gridplus-sdk>secp256k1": true, - "eth-lattice-keyring>gridplus-sdk>superagent": true, "ethereumjs-wallet>aes-js": true, "ethereumjs-wallet>bs58check": true, "ethers>@ethersproject/keccak256>js-sha3": true, @@ -4934,33 +4906,11 @@ "3box>ethers>elliptic": true } }, - "eth-lattice-keyring>gridplus-sdk>superagent": { - "globals": { - "XMLHttpRequest": true, - "btoa": true, - "clearTimeout": true, - "console.error": true, - "console.warn": true, - "setTimeout": true - }, - "packages": { - "@storybook/components>qs": true, - "browserify>browser-resolve": true, - "browserify>process": true, - "eth-rpc-errors>fast-safe-stringify": true, - "pubnub>superagent>component-emitter": true - } - }, "eth-lattice-keyring>rlp": { "globals": { "TextEncoder": true } }, - "eth-lattice-keyring>secp256k1": { - "packages": { - "3box>ethers>elliptic": true - } - }, "eth-method-registry": { "packages": { "ethjs": true @@ -7449,13 +7399,6 @@ "string.prototype.matchall>call-bind": true } }, - "string.prototype.matchall>side-channel": { - "packages": { - "enzyme>object-inspect": true, - "string.prototype.matchall>call-bind": true, - "string.prototype.matchall>get-intrinsic": true - } - }, "stylelint>write-file-atomic>typedarray-to-buffer": { "packages": { "browserify>buffer": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 3613d9de2..6ba23b6c3 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -2566,36 +2566,13 @@ }, "@keystonehq/bc-ur-registry-eth": { "packages": { - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, "@keystonehq/bc-ur-registry-eth>hdkey": true, "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, "uuid": true } }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": { - "packages": { - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>@ethereumjs/rlp": true, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>ethereum-cryptography": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true - } - }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>@ethereumjs/rlp": { - "globals": { - "TextEncoder": true - } - }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "@metamask/rpc-methods>@metamask/key-tree>@noble/hashes": true, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": true - } - }, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": { "globals": { "define": true @@ -2642,10 +2619,10 @@ "packages": { "@ethereumjs/tx": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, "uuid": true } }, @@ -4469,11 +4446,6 @@ "localStorage": true } }, - "@storybook/components>qs": { - "packages": { - "string.prototype.matchall>side-channel": true - } - }, "@storybook/react>@storybook/store>stable": { "globals": { "define": true @@ -5312,15 +5284,6 @@ "string.prototype.matchall>call-bind": true } }, - "enzyme>object-inspect": { - "globals": { - "HTMLElement": true, - "WeakRef": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, "enzyme>object-is": { "packages": { "globalthis>define-properties": true, @@ -5578,44 +5541,56 @@ "clearInterval": true, "fetch": true, "open": true, - "setInterval": true, - "txData.type": true + "setInterval": true }, "packages": { "browserify>buffer": true, "browserify>crypto-browserify": true, "browserify>events": true, - "eth-lattice-keyring>@ethereumjs/common": true, "eth-lattice-keyring>@ethereumjs/tx": true, + "eth-lattice-keyring>@ethereumjs/util": true, "eth-lattice-keyring>bn.js": true, "eth-lattice-keyring>gridplus-sdk": true, - "eth-lattice-keyring>rlp": true, - "eth-lattice-keyring>secp256k1": true, - "ethereumjs-util": true + "eth-lattice-keyring>rlp": true } }, - "eth-lattice-keyring>@ethereumjs/common": { + "eth-lattice-keyring>@ethereumjs/tx": { "packages": { - "@ethereumjs/common>crc-32": true, + "@ethereumjs/common": true, "browserify>buffer": true, - "browserify>events": true, + "browserify>insert-module-globals>is-buffer": true, "ethereumjs-util": true } }, - "eth-lattice-keyring>@ethereumjs/tx": { + "eth-lattice-keyring>@ethereumjs/util": { "packages": { "browserify>buffer": true, "browserify>insert-module-globals>is-buffer": true, - "eth-lattice-keyring>@ethereumjs/tx>@ethereumjs/common": true, - "ethereumjs-util": true + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true } }, - "eth-lattice-keyring>@ethereumjs/tx>@ethereumjs/common": { + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": { + "globals": { + "TextEncoder": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, "packages": { - "@ethereumjs/common>crc-32": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true + "@metamask/rpc-methods>@metamask/key-tree>@noble/hashes": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true } }, "eth-lattice-keyring>bn.js": { @@ -5628,9 +5603,15 @@ }, "eth-lattice-keyring>gridplus-sdk": { "globals": { + "AbortController": true, + "Request": true, "__values": true, + "caches": true, + "clearTimeout": true, + "console.error": true, "console.log": true, "console.warn": true, + "fetch": true, "setTimeout": true }, "packages": { @@ -5649,7 +5630,6 @@ "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true, "eth-lattice-keyring>gridplus-sdk>rlp": true, "eth-lattice-keyring>gridplus-sdk>secp256k1": true, - "eth-lattice-keyring>gridplus-sdk>superagent": true, "ethereumjs-wallet>aes-js": true, "ethereumjs-wallet>bs58check": true, "ethers>@ethersproject/keccak256>js-sha3": true, @@ -5746,33 +5726,11 @@ "3box>ethers>elliptic": true } }, - "eth-lattice-keyring>gridplus-sdk>superagent": { - "globals": { - "XMLHttpRequest": true, - "btoa": true, - "clearTimeout": true, - "console.error": true, - "console.warn": true, - "setTimeout": true - }, - "packages": { - "@storybook/components>qs": true, - "browserify>browser-resolve": true, - "browserify>process": true, - "eth-rpc-errors>fast-safe-stringify": true, - "pubnub>superagent>component-emitter": true - } - }, "eth-lattice-keyring>rlp": { "globals": { "TextEncoder": true } }, - "eth-lattice-keyring>secp256k1": { - "packages": { - "3box>ethers>elliptic": true - } - }, "eth-method-registry": { "packages": { "ethjs": true @@ -8293,13 +8251,6 @@ "string.prototype.matchall>call-bind": true } }, - "string.prototype.matchall>side-channel": { - "packages": { - "enzyme>object-inspect": true, - "string.prototype.matchall>call-bind": true, - "string.prototype.matchall>get-intrinsic": true - } - }, "stylelint>autoprefixer>browserslist": { "packages": { "browserify>browser-resolve": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 2e9433adf..2e1e455bc 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -2405,36 +2405,13 @@ }, "@keystonehq/bc-ur-registry-eth": { "packages": { - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, "@keystonehq/bc-ur-registry-eth>hdkey": true, "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, "uuid": true } }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": { - "packages": { - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>@ethereumjs/rlp": true, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>ethereum-cryptography": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true - } - }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>@ethereumjs/rlp": { - "globals": { - "TextEncoder": true - } - }, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "@metamask/rpc-methods>@metamask/key-tree>@noble/hashes": true, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": true - } - }, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": { "globals": { "define": true @@ -2481,10 +2458,10 @@ "packages": { "@ethereumjs/tx": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, "uuid": true } }, @@ -3425,14 +3402,6 @@ "crypto": true } }, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, "@metamask/smart-transactions-controller": { "globals": { "URLSearchParams": true, @@ -3691,11 +3660,6 @@ "localStorage": true } }, - "@storybook/components>qs": { - "packages": { - "string.prototype.matchall>side-channel": true - } - }, "@storybook/react>@storybook/store>stable": { "globals": { "define": true @@ -4500,15 +4464,6 @@ "string.prototype.matchall>call-bind": true } }, - "enzyme>object-inspect": { - "globals": { - "HTMLElement": true, - "WeakRef": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, "enzyme>object-is": { "packages": { "globalthis>define-properties": true, @@ -4766,44 +4721,56 @@ "clearInterval": true, "fetch": true, "open": true, - "setInterval": true, - "txData.type": true + "setInterval": true }, "packages": { "browserify>buffer": true, "browserify>crypto-browserify": true, "browserify>events": true, - "eth-lattice-keyring>@ethereumjs/common": true, "eth-lattice-keyring>@ethereumjs/tx": true, + "eth-lattice-keyring>@ethereumjs/util": true, "eth-lattice-keyring>bn.js": true, "eth-lattice-keyring>gridplus-sdk": true, - "eth-lattice-keyring>rlp": true, - "eth-lattice-keyring>secp256k1": true, - "ethereumjs-util": true + "eth-lattice-keyring>rlp": true } }, - "eth-lattice-keyring>@ethereumjs/common": { + "eth-lattice-keyring>@ethereumjs/tx": { "packages": { - "@ethereumjs/common>crc-32": true, + "@ethereumjs/common": true, "browserify>buffer": true, - "browserify>events": true, + "browserify>insert-module-globals>is-buffer": true, "ethereumjs-util": true } }, - "eth-lattice-keyring>@ethereumjs/tx": { + "eth-lattice-keyring>@ethereumjs/util": { "packages": { "browserify>buffer": true, "browserify>insert-module-globals>is-buffer": true, - "eth-lattice-keyring>@ethereumjs/tx>@ethereumjs/common": true, - "ethereumjs-util": true + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": { + "globals": { + "TextEncoder": true } }, - "eth-lattice-keyring>@ethereumjs/tx>@ethereumjs/common": { + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, "packages": { - "@ethereumjs/common>crc-32": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true + "@metamask/rpc-methods>@metamask/key-tree>@noble/hashes": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true } }, "eth-lattice-keyring>bn.js": { @@ -4816,9 +4783,15 @@ }, "eth-lattice-keyring>gridplus-sdk": { "globals": { + "AbortController": true, + "Request": true, "__values": true, + "caches": true, + "clearTimeout": true, + "console.error": true, "console.log": true, "console.warn": true, + "fetch": true, "setTimeout": true }, "packages": { @@ -4837,7 +4810,6 @@ "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true, "eth-lattice-keyring>gridplus-sdk>rlp": true, "eth-lattice-keyring>gridplus-sdk>secp256k1": true, - "eth-lattice-keyring>gridplus-sdk>superagent": true, "ethereumjs-wallet>aes-js": true, "ethereumjs-wallet>bs58check": true, "ethers>@ethersproject/keccak256>js-sha3": true, @@ -4934,33 +4906,11 @@ "3box>ethers>elliptic": true } }, - "eth-lattice-keyring>gridplus-sdk>superagent": { - "globals": { - "XMLHttpRequest": true, - "btoa": true, - "clearTimeout": true, - "console.error": true, - "console.warn": true, - "setTimeout": true - }, - "packages": { - "@storybook/components>qs": true, - "browserify>browser-resolve": true, - "browserify>process": true, - "eth-rpc-errors>fast-safe-stringify": true, - "pubnub>superagent>component-emitter": true - } - }, "eth-lattice-keyring>rlp": { "globals": { "TextEncoder": true } }, - "eth-lattice-keyring>secp256k1": { - "packages": { - "3box>ethers>elliptic": true - } - }, "eth-method-registry": { "packages": { "ethjs": true @@ -7449,13 +7399,6 @@ "string.prototype.matchall>call-bind": true } }, - "string.prototype.matchall>side-channel": { - "packages": { - "enzyme>object-inspect": true, - "string.prototype.matchall>call-bind": true, - "string.prototype.matchall>get-intrinsic": true - } - }, "stylelint>write-file-atomic>typedarray-to-buffer": { "packages": { "browserify>buffer": true, diff --git a/lavamoat/build-system/policy.json b/lavamoat/build-system/policy.json index d83c594a8..d05fa519b 100644 --- a/lavamoat/build-system/policy.json +++ b/lavamoat/build-system/policy.json @@ -1809,7 +1809,6 @@ }, "packages": { "chokidar>braces": true, - "chokidar>fsevents": true, "chokidar>glob-parent": true, "chokidar>is-binary-path": true, "chokidar>normalize-path": true, @@ -1836,12 +1835,6 @@ "chokidar>braces>fill-range>to-regex-range>is-number": true } }, - "chokidar>fsevents": { - "globals": { - "process.platform": true - }, - "native": true - }, "chokidar>glob-parent": { "builtin": { "os.platform": true, @@ -4235,7 +4228,6 @@ "gulp-watch>chokidar>anymatch": true, "gulp-watch>chokidar>async-each": true, "gulp-watch>chokidar>braces": true, - "gulp-watch>chokidar>fsevents": true, "gulp-watch>chokidar>is-binary-path": true, "gulp-watch>chokidar>normalize-path": true, "gulp-watch>chokidar>readdirp": true, @@ -4384,1319 +4376,552 @@ "webpack>micromatch>braces>fill-range>repeat-string": true } }, - "gulp-watch>chokidar>fsevents": { + "gulp-watch>chokidar>is-binary-path": { "builtin": { - "events.EventEmitter": true, - "fs.stat": true, - "path.join": true, - "util.inherits": true - }, - "globals": { - "__dirname": true, - "process.nextTick": true, - "process.platform": true, - "setImmediate": true + "path.extname": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp": true + "gulp-watch>chokidar>is-binary-path>binary-extensions": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp": { + "gulp-watch>chokidar>readdirp": { "builtin": { - "events.EventEmitter": true, - "fs.existsSync": true, - "fs.readFileSync": true, - "fs.renameSync": true, - "path.dirname": true, - "path.existsSync": true, "path.join": true, - "path.resolve": true, - "url.parse": true, - "url.resolve": true, + "path.relative": true, "util.inherits": true }, "globals": { - "__dirname": true, - "console.log": true, - "process.arch": true, - "process.cwd": true, - "process.env": true, - "process.platform": true, - "process.version.substr": true, - "process.versions": true + "setImmediate": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>detect-libc": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>semver": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>detect-libc": { - "builtin": { - "child_process.spawnSync": true, - "fs.readdirSync": true, - "os.platform": true - }, - "globals": { - "process.env": true + "fs-extra>graceful-fs": true, + "gulp-watch>chokidar>readdirp>micromatch": true, + "readable-stream": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt": { + "gulp-watch>chokidar>readdirp>micromatch": { "builtin": { - "path": true, - "stream.Stream": true, - "url": true + "path.basename": true, + "path.sep": true, + "util.inspect": true }, "globals": { - "console": true, - "process.argv": true, - "process.env.DEBUG_NOPT": true, - "process.env.NOPT_DEBUG": true, "process.platform": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>abbrev": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>osenv": true + "gulp-watch>chokidar>braces": true, + "gulp-watch>chokidar>readdirp>micromatch>arr-diff": true, + "gulp-watch>chokidar>readdirp>micromatch>array-unique": true, + "gulp-watch>chokidar>readdirp>micromatch>define-property": true, + "gulp-watch>chokidar>readdirp>micromatch>extend-shallow": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob": true, + "gulp-watch>chokidar>readdirp>micromatch>kind-of": true, + "webpack>micromatch>fragment-cache": true, + "webpack>micromatch>nanomatch": true, + "webpack>micromatch>object.pick": true, + "webpack>micromatch>regex-not": true, + "webpack>micromatch>snapdragon": true, + "webpack>micromatch>to-regex": true + } + }, + "gulp-watch>chokidar>readdirp>micromatch>define-property": { + "packages": { + "gulp>gulp-cli>isobject": true, + "webpack>micromatch>define-property>is-descriptor": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>osenv": { - "builtin": { - "child_process.exec": true, - "path": true - }, - "globals": { - "process.env.COMPUTERNAME": true, - "process.env.ComSpec": true, - "process.env.EDITOR": true, - "process.env.HOSTNAME": true, - "process.env.PATH": true, - "process.env.PROMPT": true, - "process.env.PS1": true, - "process.env.Path": true, - "process.env.SHELL": true, - "process.env.USER": true, - "process.env.USERDOMAIN": true, - "process.env.USERNAME": true, - "process.env.VISUAL": true, - "process.env.path": true, - "process.nextTick": true, - "process.platform": true - }, + "gulp-watch>chokidar>readdirp>micromatch>extend-shallow": { "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-homedir": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-tmpdir": true + "gulp-watch>chokidar>readdirp>micromatch>extend-shallow>is-extendable": true, + "webpack>micromatch>extend-shallow>assign-symbols": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-homedir": { - "builtin": { - "os.homedir": true - }, - "globals": { - "process.env": true, - "process.getuid": true, - "process.platform": true + "gulp-watch>chokidar>readdirp>micromatch>extend-shallow>is-extendable": { + "packages": { + "@babel/register>clone-deep>is-plain-object": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-tmpdir": { - "globals": { - "process.env.SystemRoot": true, - "process.env.TEMP": true, - "process.env.TMP": true, - "process.env.TMPDIR": true, - "process.env.windir": true, - "process.platform": true + "gulp-watch>chokidar>readdirp>micromatch>extglob": { + "packages": { + "gulp-watch>chokidar>readdirp>micromatch>array-unique": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>define-property": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>extend-shallow": true, + "webpack>micromatch>fragment-cache": true, + "webpack>micromatch>regex-not": true, + "webpack>micromatch>snapdragon": true, + "webpack>micromatch>to-regex": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog": { - "builtin": { - "events.EventEmitter": true, - "util": true - }, - "globals": { - "process.nextTick": true, - "process.stderr": true - }, + "gulp-watch>chokidar>readdirp>micromatch>extglob>define-property": { "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>console-control-strings": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>set-blocking": true + "webpack>micromatch>define-property>is-descriptor": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet": { - "builtin": { - "events.EventEmitter": true, - "util.inherits": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets": { + "globals": { + "__filename": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>delegates": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>debug": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>extend-shallow": true, + "webpack>micromatch>extglob>expand-brackets>posix-character-classes": true, + "webpack>micromatch>regex-not": true, + "webpack>micromatch>snapdragon": true, + "webpack>micromatch>to-regex": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream": { + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>debug": { "builtin": { - "events.EventEmitter": true, - "stream": true, + "fs.SyncWriteStream": true, + "net.Socket": true, + "tty.WriteStream": true, + "tty.isatty": true, "util": true }, "globals": { - "process.browser": true, - "process.env.READABLE_STREAM": true, - "process.stderr": true, - "process.stdout": true, - "process.version.slice": true, - "setImmediate": true + "chrome": true, + "console": true, + "document": true, + "localStorage": true, + "navigator": true, + "process": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>core-util-is": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>isarray": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>process-nextick-args": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>string_decoder": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>util-deprecate": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>inherits": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>tar>safe-buffer": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>debug>ms": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>core-util-is": { - "globals": { - "Buffer.isBuffer": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property": { + "packages": { + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>process-nextick-args": { - "globals": { - "process": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor": { + "packages": { + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-accessor-descriptor": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-data-descriptor": true, + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>kind-of": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>string_decoder": { + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-accessor-descriptor": { "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>tar>safe-buffer": true + "gulp-watch>anymatch>micromatch>kind-of": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>util-deprecate": { - "builtin": { - "util.deprecate": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-data-descriptor": { + "packages": { + "gulp-watch>anymatch>micromatch>kind-of": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge": { - "builtin": { - "util.format": true - }, - "globals": { - "clearInterval": true, - "process": true, - "setImmediate": true, - "setInterval": true - }, + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>extend-shallow": { "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>console-control-strings": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>aproba": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>has-unicode": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>object-assign": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>signal-exit": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>wide-align": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>extend-shallow>is-extendable": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>has-unicode": { - "builtin": { - "os.type": true - }, - "globals": { - "process.env.LANG": true, - "process.env.LC_ALL": true, - "process.env.LC_CTYPE": true + "gulp-watch>chokidar>readdirp>micromatch>extglob>extend-shallow": { + "packages": { + "gulp-watch>chokidar>readdirp>micromatch>extglob>extend-shallow>is-extendable": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>signal-exit": { + "gulp-watch>chokidar>upath": { "builtin": { - "assert.equal": true, - "events": true - }, - "globals": { - "process": true + "path": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width": { + "gulp-watch>fancy-log": { + "globals": { + "console": true, + "process.argv.indexOf": true, + "process.stderr.write": true, + "process.stdout.write": true + }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>code-point-at": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>is-fullwidth-code-point": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi": true + "fancy-log>ansi-gray": true, + "fancy-log>color-support": true, + "fancy-log>time-stamp": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>is-fullwidth-code-point": { + "gulp-watch>glob-parent": { + "builtin": { + "os.platform": true, + "path": true + }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>is-fullwidth-code-point>number-is-nan": true + "gulp-watch>glob-parent>is-glob": true, + "gulp-watch>glob-parent>path-dirname": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi": { + "gulp-watch>glob-parent>is-glob": { "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi>ansi-regex": true + "gulp-watch>glob-parent>is-glob>is-extglob": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>wide-align": { - "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width": true + "gulp-watch>glob-parent>path-dirname": { + "builtin": { + "path": true, + "util.inspect": true + }, + "globals": { + "process.platform": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>npmlog>set-blocking": { + "gulp-watch>path-is-absolute": { "globals": { - "process.stderr": true, - "process.stdout": true + "process.platform": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf": { + "gulp-watch>vinyl-file": { "builtin": { - "assert": true, - "fs": true, - "path.join": true + "path.resolve": true }, "globals": { - "process.platform": true, - "setTimeout": true + "process.cwd": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob": true + "del>globby>pinkie-promise": true, + "fs-extra>graceful-fs": true, + "gulp-watch>vinyl-file>pify": true, + "gulp-watch>vinyl-file>strip-bom": true, + "gulp-watch>vinyl-file>strip-bom-stream": true, + "gulp-watch>vinyl-file>vinyl": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob": { - "builtin": { - "assert": true, - "events.EventEmitter": true, - "fs.lstat": true, - "fs.lstatSync": true, - "fs.readdir": true, - "fs.readdirSync": true, - "fs.stat": true, - "fs.statSync": true, - "path.join": true, - "path.resolve": true, - "util": true - }, + "gulp-watch>vinyl-file>strip-bom": { "globals": { - "console.error": true, - "process.cwd": true, - "process.nextTick": true, - "process.platform": true + "Buffer.isBuffer": true }, "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>fs.realpath": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>inflight": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>inherits": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>once": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>path-is-absolute": true + "gulp>vinyl-fs>remove-bom-buffer>is-utf8": true } }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>fs.realpath": { - "builtin": { - "fs.lstat": true, - "fs.lstatSync": true, - "fs.readlink": true, - "fs.readlinkSync": true, - "fs.realpath": true, - "fs.realpathSync": true, - "fs.stat": true, - "fs.statSync": true, - "path.normalize": true, - "path.resolve": true - }, - "globals": { - "console.error": true, - "console.trace": true, - "process.env.NODE_DEBUG": true, - "process.nextTick": true, - "process.noDeprecation": true, - "process.platform": true, - "process.throwDeprecation": true, - "process.traceDeprecation": true, - "process.version": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>inflight": { - "globals": { - "process.nextTick": true - }, - "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>once": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>once>wrappy": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>inherits": { - "builtin": { - "util.inherits": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch": { - "builtin": { - "path": true - }, - "globals": { - "console.error": true - }, - "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion": { - "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion>balanced-match": true, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion>concat-map": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>once": { - "packages": { - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>once>wrappy": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>rimraf>glob>path-is-absolute": { - "globals": { - "process.platform": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>semver": { - "globals": { - "console": true, - "process": true - } - }, - "gulp-watch>chokidar>fsevents>node-pre-gyp>tar>safe-buffer": { - "builtin": { - "buffer": true - } - }, - "gulp-watch>chokidar>is-binary-path": { - "builtin": { - "path.extname": true - }, - "packages": { - "gulp-watch>chokidar>is-binary-path>binary-extensions": true - } - }, - "gulp-watch>chokidar>readdirp": { - "builtin": { - "path.join": true, - "path.relative": true, - "util.inherits": true - }, - "globals": { - "setImmediate": true - }, - "packages": { - "fs-extra>graceful-fs": true, - "gulp-watch>chokidar>readdirp>micromatch": true, - "readable-stream": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch": { - "builtin": { - "path.basename": true, - "path.sep": true, - "util.inspect": true - }, - "globals": { - "process.platform": true - }, - "packages": { - "gulp-watch>chokidar>braces": true, - "gulp-watch>chokidar>readdirp>micromatch>arr-diff": true, - "gulp-watch>chokidar>readdirp>micromatch>array-unique": true, - "gulp-watch>chokidar>readdirp>micromatch>define-property": true, - "gulp-watch>chokidar>readdirp>micromatch>extend-shallow": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob": true, - "gulp-watch>chokidar>readdirp>micromatch>kind-of": true, - "webpack>micromatch>fragment-cache": true, - "webpack>micromatch>nanomatch": true, - "webpack>micromatch>object.pick": true, - "webpack>micromatch>regex-not": true, - "webpack>micromatch>snapdragon": true, - "webpack>micromatch>to-regex": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>define-property": { - "packages": { - "gulp>gulp-cli>isobject": true, - "webpack>micromatch>define-property>is-descriptor": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extend-shallow": { - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extend-shallow>is-extendable": true, - "webpack>micromatch>extend-shallow>assign-symbols": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extend-shallow>is-extendable": { - "packages": { - "@babel/register>clone-deep>is-plain-object": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob": { - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>array-unique": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>define-property": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>extend-shallow": true, - "webpack>micromatch>fragment-cache": true, - "webpack>micromatch>regex-not": true, - "webpack>micromatch>snapdragon": true, - "webpack>micromatch>to-regex": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>define-property": { - "packages": { - "webpack>micromatch>define-property>is-descriptor": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets": { - "globals": { - "__filename": true - }, - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>debug": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>extend-shallow": true, - "webpack>micromatch>extglob>expand-brackets>posix-character-classes": true, - "webpack>micromatch>regex-not": true, - "webpack>micromatch>snapdragon": true, - "webpack>micromatch>to-regex": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>debug": { - "builtin": { - "fs.SyncWriteStream": true, - "net.Socket": true, - "tty.WriteStream": true, - "tty.isatty": true, - "util": true - }, - "globals": { - "chrome": true, - "console": true, - "document": true, - "localStorage": true, - "navigator": true, - "process": true - }, - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>debug>ms": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property": { - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor": { - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-accessor-descriptor": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-data-descriptor": true, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>kind-of": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-accessor-descriptor": { - "packages": { - "gulp-watch>anymatch>micromatch>kind-of": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>define-property>is-descriptor>is-data-descriptor": { - "packages": { - "gulp-watch>anymatch>micromatch>kind-of": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>extend-shallow": { - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extglob>expand-brackets>extend-shallow>is-extendable": true - } - }, - "gulp-watch>chokidar>readdirp>micromatch>extglob>extend-shallow": { - "packages": { - "gulp-watch>chokidar>readdirp>micromatch>extglob>extend-shallow>is-extendable": true - } - }, - "gulp-watch>chokidar>upath": { - "builtin": { - "path": true - } - }, - "gulp-watch>fancy-log": { - "globals": { - "console": true, - "process.argv.indexOf": true, - "process.stderr.write": true, - "process.stdout.write": true - }, - "packages": { - "fancy-log>ansi-gray": true, - "fancy-log>color-support": true, - "fancy-log>time-stamp": true - } - }, - "gulp-watch>glob-parent": { - "builtin": { - "os.platform": true, - "path": true - }, - "packages": { - "gulp-watch>glob-parent>is-glob": true, - "gulp-watch>glob-parent>path-dirname": true - } - }, - "gulp-watch>glob-parent>is-glob": { - "packages": { - "gulp-watch>glob-parent>is-glob>is-extglob": true - } - }, - "gulp-watch>glob-parent>path-dirname": { - "builtin": { - "path": true, - "util.inspect": true - }, - "globals": { - "process.platform": true - } - }, - "gulp-watch>path-is-absolute": { - "globals": { - "process.platform": true - } - }, - "gulp-watch>vinyl-file": { - "builtin": { - "path.resolve": true - }, - "globals": { - "process.cwd": true - }, - "packages": { - "del>globby>pinkie-promise": true, - "fs-extra>graceful-fs": true, - "gulp-watch>vinyl-file>pify": true, - "gulp-watch>vinyl-file>strip-bom": true, - "gulp-watch>vinyl-file>strip-bom-stream": true, - "gulp-watch>vinyl-file>vinyl": true - } - }, - "gulp-watch>vinyl-file>strip-bom": { - "globals": { - "Buffer.isBuffer": true - }, - "packages": { - "gulp>vinyl-fs>remove-bom-buffer>is-utf8": true - } - }, - "gulp-watch>vinyl-file>strip-bom-stream": { - "packages": { - "gulp-watch>vinyl-file>strip-bom": true, - "gulp-watch>vinyl-file>strip-bom-stream>first-chunk-stream": true - } - }, - "gulp-watch>vinyl-file>strip-bom-stream>first-chunk-stream": { - "builtin": { - "util.inherits": true - }, - "globals": { - "Buffer.concat": true, - "setImmediate": true - }, - "packages": { - "readable-stream": true - } - }, - "gulp-watch>vinyl-file>vinyl": { - "builtin": { - "buffer.Buffer": true, - "path.basename": true, - "path.dirname": true, - "path.extname": true, - "path.join": true, - "path.relative": true, - "stream.PassThrough": true, - "stream.Stream": true - }, - "globals": { - "process.cwd": true - }, - "packages": { - "gulp-watch>vinyl-file>vinyl>clone": true, - "gulp-watch>vinyl-file>vinyl>clone-stats": true, - "gulp-watch>vinyl-file>vinyl>replace-ext": true - } - }, - "gulp-watch>vinyl-file>vinyl>clone": { - "globals": { - "Buffer": true - } - }, - "gulp-watch>vinyl-file>vinyl>clone-stats": { - "builtin": { - "fs.Stats": true - } - }, - "gulp-watch>vinyl-file>vinyl>replace-ext": { - "builtin": { - "path.basename": true, - "path.dirname": true, - "path.extname": true, - "path.join": true - } - }, - "gulp-zip": { - "builtin": { - "buffer.constants.MAX_LENGTH": true, - "path.join": true - }, - "packages": { - "gulp-zip>get-stream": true, - "gulp-zip>plugin-error": true, - "gulp-zip>through2": true, - "gulp-zip>yazl": true, - "vinyl": true - } - }, - "gulp-zip>get-stream": { - "builtin": { - "buffer.constants.MAX_LENGTH": true, - "stream.PassThrough": true - }, - "globals": { - "Buffer.concat": true - }, - "packages": { - "pump": true - } - }, - "gulp-zip>plugin-error": { - "builtin": { - "util.inherits": true - }, - "packages": { - "gulp-watch>ansi-colors": true, - "gulp-zip>plugin-error>arr-union": true, - "gulp-zip>plugin-error>extend-shallow": true, - "webpack>micromatch>arr-diff": true - } - }, - "gulp-zip>plugin-error>extend-shallow": { - "packages": { - "gulp-zip>plugin-error>extend-shallow>is-extendable": true, - "webpack>micromatch>extend-shallow>assign-symbols": true - } - }, - "gulp-zip>plugin-error>extend-shallow>is-extendable": { - "packages": { - "@babel/register>clone-deep>is-plain-object": true - } - }, - "gulp-zip>through2": { - "builtin": { - "util.inherits": true - }, - "globals": { - "process.nextTick": true - }, - "packages": { - "gulp-zip>through2>readable-stream": true - } - }, - "gulp-zip>through2>readable-stream": { - "builtin": { - "buffer.Buffer": true, - "events.EventEmitter": true, - "stream": true, - "util": true - }, - "globals": { - "process.env.READABLE_STREAM": true, - "process.nextTick": true, - "process.stderr": true, - "process.stdout": true - }, - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "gulp-zip>yazl": { - "builtin": { - "events.EventEmitter": true, - "fs.createReadStream": true, - "fs.stat": true, - "stream.PassThrough": true, - "stream.Transform": true, - "util.inherits": true, - "zlib.DeflateRaw": true, - "zlib.deflateRaw": true - }, - "globals": { - "Buffer": true, - "setImmediate": true, - "utf8FileName.length": true - }, - "packages": { - "gulp-zip>yazl>buffer-crc32": true - } - }, - "gulp-zip>yazl>buffer-crc32": { - "builtin": { - "buffer.Buffer": true - } - }, - "gulp>glob-watcher": { - "packages": { - "gulp>glob-watcher>anymatch": true, - "gulp>glob-watcher>async-done": true, - "gulp>glob-watcher>chokidar": true, - "gulp>glob-watcher>is-negated-glob": true, - "gulp>glob-watcher>just-debounce": true, - "gulp>undertaker>object.defaults": true - } - }, - "gulp>glob-watcher>anymatch": { - "builtin": { - "path.sep": true - }, - "packages": { - "gulp>glob-watcher>anymatch>micromatch": true, - "gulp>glob-watcher>anymatch>normalize-path": true - } - }, - "gulp>glob-watcher>anymatch>micromatch": { - "builtin": { - "path.basename": true, - "path.sep": true, - "util.inspect": true - }, - "globals": { - "process.platform": true - }, - "packages": { - "3box>ipfs>kind-of": true, - "gulp>glob-watcher>anymatch>micromatch>define-property": true, - "gulp>glob-watcher>anymatch>micromatch>extend-shallow": true, - "gulp>glob-watcher>chokidar>braces": true, - "webpack>micromatch>arr-diff": true, - "webpack>micromatch>array-unique": true, - "webpack>micromatch>extglob": true, - "webpack>micromatch>fragment-cache": true, - "webpack>micromatch>nanomatch": true, - "webpack>micromatch>object.pick": true, - "webpack>micromatch>regex-not": true, - "webpack>micromatch>snapdragon": true, - "webpack>micromatch>to-regex": true - } - }, - "gulp>glob-watcher>anymatch>micromatch>define-property": { - "packages": { - "gulp>gulp-cli>isobject": true, - "webpack>micromatch>define-property>is-descriptor": true - } - }, - "gulp>glob-watcher>anymatch>micromatch>extend-shallow": { - "packages": { - "gulp>glob-watcher>anymatch>micromatch>extend-shallow>is-extendable": true, - "webpack>micromatch>extend-shallow>assign-symbols": true - } - }, - "gulp>glob-watcher>anymatch>micromatch>extend-shallow>is-extendable": { - "packages": { - "@babel/register>clone-deep>is-plain-object": true - } - }, - "gulp>glob-watcher>anymatch>normalize-path": { - "packages": { - "vinyl>remove-trailing-separator": true - } - }, - "gulp>glob-watcher>async-done": { - "builtin": { - "domain.create": true - }, - "globals": { - "process.nextTick": true - }, + "gulp-watch>vinyl-file>strip-bom-stream": { "packages": { - "end-of-stream": true, - "gulp>glob-watcher>async-done>process-nextick-args": true, - "gulp>glob-watcher>async-done>stream-exhaust": true, - "pump>once": true - } - }, - "gulp>glob-watcher>async-done>process-nextick-args": { - "globals": { - "process": true + "gulp-watch>vinyl-file>strip-bom": true, + "gulp-watch>vinyl-file>strip-bom-stream>first-chunk-stream": true } }, - "gulp>glob-watcher>async-done>stream-exhaust": { + "gulp-watch>vinyl-file>strip-bom-stream>first-chunk-stream": { "builtin": { - "stream.Writable": true, "util.inherits": true }, "globals": { + "Buffer.concat": true, "setImmediate": true + }, + "packages": { + "readable-stream": true } }, - "gulp>glob-watcher>chokidar": { + "gulp-watch>vinyl-file>vinyl": { "builtin": { - "events.EventEmitter": true, - "fs": true, + "buffer.Buffer": true, "path.basename": true, "path.dirname": true, "path.extname": true, "path.join": true, "path.relative": true, - "path.resolve": true, - "path.sep": true + "stream.PassThrough": true, + "stream.Stream": true }, "globals": { - "clearTimeout": true, - "console.error": true, - "process.env.CHOKIDAR_INTERVAL": true, - "process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR": true, - "process.env.CHOKIDAR_USEPOLLING": true, - "process.nextTick": true, - "process.platform": true, - "setTimeout": true - }, - "packages": { - "eslint>is-glob": true, - "gulp-watch>chokidar>async-each": true, - "gulp-watch>glob-parent": true, - "gulp-watch>path-is-absolute": true, - "gulp>glob-watcher>anymatch": true, - "gulp>glob-watcher>chokidar>braces": true, - "gulp>glob-watcher>chokidar>fsevents": true, - "gulp>glob-watcher>chokidar>is-binary-path": true, - "gulp>glob-watcher>chokidar>normalize-path": true, - "gulp>glob-watcher>chokidar>readdirp": true, - "gulp>glob-watcher>chokidar>upath": true, - "pumpify>inherits": true - } - }, - "gulp>glob-watcher>chokidar>braces": { - "packages": { - "gulp>glob-watcher>chokidar>braces>fill-range": true, - "gulp>gulp-cli>isobject": true, - "gulp>undertaker>arr-flatten": true, - "webpack>micromatch>array-unique": true, - "webpack>micromatch>braces>repeat-element": true, - "webpack>micromatch>braces>snapdragon-node": true, - "webpack>micromatch>braces>split-string": true, - "webpack>micromatch>extglob>extend-shallow": true, - "webpack>micromatch>snapdragon": true, - "webpack>micromatch>to-regex": true - } - }, - "gulp>glob-watcher>chokidar>braces>fill-range": { - "builtin": { - "util.inspect": true + "process.cwd": true }, "packages": { - "gulp>glob-watcher>chokidar>braces>fill-range>is-number": true, - "gulp>glob-watcher>chokidar>braces>fill-range>to-regex-range": true, - "webpack>micromatch>braces>fill-range>repeat-string": true, - "webpack>micromatch>extglob>extend-shallow": true - } - }, - "gulp>glob-watcher>chokidar>braces>fill-range>is-number": { - "packages": { - "gulp>glob-watcher>chokidar>braces>fill-range>is-number>kind-of": true - } - }, - "gulp>glob-watcher>chokidar>braces>fill-range>is-number>kind-of": { - "packages": { - "browserify>insert-module-globals>is-buffer": true - } - }, - "gulp>glob-watcher>chokidar>braces>fill-range>to-regex-range": { - "packages": { - "gulp>glob-watcher>chokidar>braces>fill-range>is-number": true, - "webpack>micromatch>braces>fill-range>repeat-string": true + "gulp-watch>vinyl-file>vinyl>clone": true, + "gulp-watch>vinyl-file>vinyl>clone-stats": true, + "gulp-watch>vinyl-file>vinyl>replace-ext": true } }, - "gulp>glob-watcher>chokidar>fsevents": { - "builtin": { - "events.EventEmitter": true, - "fs.stat": true, - "path.join": true, - "util.inherits": true - }, + "gulp-watch>vinyl-file>vinyl>clone": { "globals": { - "__dirname": true, - "process.nextTick": true, - "process.platform": true, - "setImmediate": true - }, - "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp": true + "Buffer": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp": { + "gulp-watch>vinyl-file>vinyl>clone-stats": { "builtin": { - "events.EventEmitter": true, - "fs.existsSync": true, - "fs.readFileSync": true, - "fs.renameSync": true, - "path.dirname": true, - "path.existsSync": true, - "path.join": true, - "path.resolve": true, - "url.parse": true, - "url.resolve": true, - "util.inherits": true - }, - "globals": { - "__dirname": true, - "console.log": true, - "process.arch": true, - "process.cwd": true, - "process.env": true, - "process.platform": true, - "process.version.substr": true, - "process.versions": true - }, - "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>detect-libc": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>semver": true + "fs.Stats": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>detect-libc": { + "gulp-watch>vinyl-file>vinyl>replace-ext": { "builtin": { - "child_process.spawnSync": true, - "fs.readdirSync": true, - "os.platform": true - }, - "globals": { - "process.env": true + "path.basename": true, + "path.dirname": true, + "path.extname": true, + "path.join": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt": { + "gulp-zip": { "builtin": { - "path": true, - "stream.Stream": true, - "url": true - }, - "globals": { - "console": true, - "process.argv": true, - "process.env.DEBUG_NOPT": true, - "process.env.NOPT_DEBUG": true, - "process.platform": true + "buffer.constants.MAX_LENGTH": true, + "path.join": true }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>abbrev": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>osenv": true + "gulp-zip>get-stream": true, + "gulp-zip>plugin-error": true, + "gulp-zip>through2": true, + "gulp-zip>yazl": true, + "vinyl": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>osenv": { + "gulp-zip>get-stream": { "builtin": { - "child_process.exec": true, - "path": true + "buffer.constants.MAX_LENGTH": true, + "stream.PassThrough": true }, "globals": { - "process.env.COMPUTERNAME": true, - "process.env.ComSpec": true, - "process.env.EDITOR": true, - "process.env.HOSTNAME": true, - "process.env.PATH": true, - "process.env.PROMPT": true, - "process.env.PS1": true, - "process.env.Path": true, - "process.env.SHELL": true, - "process.env.USER": true, - "process.env.USERDOMAIN": true, - "process.env.USERNAME": true, - "process.env.VISUAL": true, - "process.env.path": true, - "process.nextTick": true, - "process.platform": true + "Buffer.concat": true }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-homedir": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-tmpdir": true + "pump": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-homedir": { + "gulp-zip>plugin-error": { "builtin": { - "os.homedir": true + "util.inherits": true }, - "globals": { - "process.env": true, - "process.getuid": true, - "process.platform": true + "packages": { + "gulp-watch>ansi-colors": true, + "gulp-zip>plugin-error>arr-union": true, + "gulp-zip>plugin-error>extend-shallow": true, + "webpack>micromatch>arr-diff": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>nopt>osenv>os-tmpdir": { - "globals": { - "process.env.SystemRoot": true, - "process.env.TEMP": true, - "process.env.TMP": true, - "process.env.TMPDIR": true, - "process.env.windir": true, - "process.platform": true + "gulp-zip>plugin-error>extend-shallow": { + "packages": { + "gulp-zip>plugin-error>extend-shallow>is-extendable": true, + "webpack>micromatch>extend-shallow>assign-symbols": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog": { - "builtin": { - "events.EventEmitter": true, - "util": true - }, - "globals": { - "process.nextTick": true, - "process.stderr": true - }, + "gulp-zip>plugin-error>extend-shallow>is-extendable": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>console-control-strings": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>set-blocking": true + "@babel/register>clone-deep>is-plain-object": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet": { + "gulp-zip>through2": { "builtin": { - "events.EventEmitter": true, "util.inherits": true }, + "globals": { + "process.nextTick": true + }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>delegates": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream": true + "gulp-zip>through2>readable-stream": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream": { + "gulp-zip>through2>readable-stream": { "builtin": { + "buffer.Buffer": true, "events.EventEmitter": true, "stream": true, "util": true }, "globals": { - "process.browser": true, "process.env.READABLE_STREAM": true, + "process.nextTick": true, "process.stderr": true, - "process.stdout": true, - "process.version.slice": true, - "setImmediate": true + "process.stdout": true }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>core-util-is": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>isarray": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>process-nextick-args": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>string_decoder": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>util-deprecate": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>inherits": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>tar>safe-buffer": true - } - }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>core-util-is": { - "globals": { - "Buffer.isBuffer": true + "@storybook/api>util-deprecate": true, + "browserify>string_decoder": true, + "pumpify>inherits": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>process-nextick-args": { + "gulp-zip>yazl": { + "builtin": { + "events.EventEmitter": true, + "fs.createReadStream": true, + "fs.stat": true, + "stream.PassThrough": true, + "stream.Transform": true, + "util.inherits": true, + "zlib.DeflateRaw": true, + "zlib.deflateRaw": true + }, "globals": { - "process": true - } - }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>string_decoder": { + "Buffer": true, + "setImmediate": true, + "utf8FileName.length": true + }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>tar>safe-buffer": true + "gulp-zip>yazl>buffer-crc32": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>are-we-there-yet>readable-stream>util-deprecate": { + "gulp-zip>yazl>buffer-crc32": { "builtin": { - "util.deprecate": true + "buffer.Buffer": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge": { - "builtin": { - "util.format": true - }, - "globals": { - "clearInterval": true, - "process": true, - "setImmediate": true, - "setInterval": true - }, + "gulp>glob-watcher": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>console-control-strings": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>aproba": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>has-unicode": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>object-assign": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>signal-exit": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>wide-align": true + "gulp>glob-watcher>anymatch": true, + "gulp>glob-watcher>async-done": true, + "gulp>glob-watcher>chokidar": true, + "gulp>glob-watcher>is-negated-glob": true, + "gulp>glob-watcher>just-debounce": true, + "gulp>undertaker>object.defaults": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>has-unicode": { + "gulp>glob-watcher>anymatch": { "builtin": { - "os.type": true + "path.sep": true }, - "globals": { - "process.env.LANG": true, - "process.env.LC_ALL": true, - "process.env.LC_CTYPE": true + "packages": { + "gulp>glob-watcher>anymatch>micromatch": true, + "gulp>glob-watcher>anymatch>normalize-path": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>signal-exit": { + "gulp>glob-watcher>anymatch>micromatch": { "builtin": { - "assert.equal": true, - "events": true + "path.basename": true, + "path.sep": true, + "util.inspect": true }, "globals": { - "process": true - } - }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width": { + "process.platform": true + }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>code-point-at": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>is-fullwidth-code-point": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi": true + "3box>ipfs>kind-of": true, + "gulp>glob-watcher>anymatch>micromatch>define-property": true, + "gulp>glob-watcher>anymatch>micromatch>extend-shallow": true, + "gulp>glob-watcher>chokidar>braces": true, + "webpack>micromatch>arr-diff": true, + "webpack>micromatch>array-unique": true, + "webpack>micromatch>extglob": true, + "webpack>micromatch>fragment-cache": true, + "webpack>micromatch>nanomatch": true, + "webpack>micromatch>object.pick": true, + "webpack>micromatch>regex-not": true, + "webpack>micromatch>snapdragon": true, + "webpack>micromatch>to-regex": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>is-fullwidth-code-point": { + "gulp>glob-watcher>anymatch>micromatch>define-property": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width>is-fullwidth-code-point>number-is-nan": true + "gulp>gulp-cli>isobject": true, + "webpack>micromatch>define-property>is-descriptor": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi": { + "gulp>glob-watcher>anymatch>micromatch>extend-shallow": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>strip-ansi>ansi-regex": true + "gulp>glob-watcher>anymatch>micromatch>extend-shallow>is-extendable": true, + "webpack>micromatch>extend-shallow>assign-symbols": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>wide-align": { + "gulp>glob-watcher>anymatch>micromatch>extend-shallow>is-extendable": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>gauge>string-width": true + "@babel/register>clone-deep>is-plain-object": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>npmlog>set-blocking": { - "globals": { - "process.stderr": true, - "process.stdout": true + "gulp>glob-watcher>anymatch>normalize-path": { + "packages": { + "vinyl>remove-trailing-separator": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf": { + "gulp>glob-watcher>async-done": { "builtin": { - "assert": true, - "fs": true, - "path.join": true + "domain.create": true }, "globals": { - "process.platform": true, - "setTimeout": true + "process.nextTick": true }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob": true + "end-of-stream": true, + "gulp>glob-watcher>async-done>process-nextick-args": true, + "gulp>glob-watcher>async-done>stream-exhaust": true, + "pump>once": true + } + }, + "gulp>glob-watcher>async-done>process-nextick-args": { + "globals": { + "process": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob": { + "gulp>glob-watcher>async-done>stream-exhaust": { "builtin": { - "assert": true, - "events.EventEmitter": true, - "fs.lstat": true, - "fs.lstatSync": true, - "fs.readdir": true, - "fs.readdirSync": true, - "fs.stat": true, - "fs.statSync": true, - "path.join": true, - "path.resolve": true, - "util": true + "stream.Writable": true, + "util.inherits": true }, "globals": { - "console.error": true, - "process.cwd": true, - "process.nextTick": true, - "process.platform": true - }, - "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>fs.realpath": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>inflight": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>inherits": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>once": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>path-is-absolute": true + "setImmediate": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>fs.realpath": { + "gulp>glob-watcher>chokidar": { "builtin": { - "fs.lstat": true, - "fs.lstatSync": true, - "fs.readlink": true, - "fs.readlinkSync": true, - "fs.realpath": true, - "fs.realpathSync": true, - "fs.stat": true, - "fs.statSync": true, - "path.normalize": true, - "path.resolve": true + "events.EventEmitter": true, + "fs": true, + "path.basename": true, + "path.dirname": true, + "path.extname": true, + "path.join": true, + "path.relative": true, + "path.resolve": true, + "path.sep": true }, "globals": { + "clearTimeout": true, "console.error": true, - "console.trace": true, - "process.env.NODE_DEBUG": true, + "process.env.CHOKIDAR_INTERVAL": true, + "process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR": true, + "process.env.CHOKIDAR_USEPOLLING": true, "process.nextTick": true, - "process.noDeprecation": true, "process.platform": true, - "process.throwDeprecation": true, - "process.traceDeprecation": true, - "process.version": true - } - }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>inflight": { - "globals": { - "process.nextTick": true + "setTimeout": true }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>once": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>once>wrappy": true + "eslint>is-glob": true, + "gulp-watch>chokidar>async-each": true, + "gulp-watch>glob-parent": true, + "gulp-watch>path-is-absolute": true, + "gulp>glob-watcher>anymatch": true, + "gulp>glob-watcher>chokidar>braces": true, + "gulp>glob-watcher>chokidar>is-binary-path": true, + "gulp>glob-watcher>chokidar>normalize-path": true, + "gulp>glob-watcher>chokidar>readdirp": true, + "gulp>glob-watcher>chokidar>upath": true, + "pumpify>inherits": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>inherits": { - "builtin": { - "util.inherits": true + "gulp>glob-watcher>chokidar>braces": { + "packages": { + "gulp>glob-watcher>chokidar>braces>fill-range": true, + "gulp>gulp-cli>isobject": true, + "gulp>undertaker>arr-flatten": true, + "webpack>micromatch>array-unique": true, + "webpack>micromatch>braces>repeat-element": true, + "webpack>micromatch>braces>snapdragon-node": true, + "webpack>micromatch>braces>split-string": true, + "webpack>micromatch>extglob>extend-shallow": true, + "webpack>micromatch>snapdragon": true, + "webpack>micromatch>to-regex": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch": { + "gulp>glob-watcher>chokidar>braces>fill-range": { "builtin": { - "path": true - }, - "globals": { - "console.error": true + "util.inspect": true }, "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion": true + "gulp>glob-watcher>chokidar>braces>fill-range>is-number": true, + "gulp>glob-watcher>chokidar>braces>fill-range>to-regex-range": true, + "webpack>micromatch>braces>fill-range>repeat-string": true, + "webpack>micromatch>extglob>extend-shallow": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion": { + "gulp>glob-watcher>chokidar>braces>fill-range>is-number": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion>balanced-match": true, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>minimatch>brace-expansion>concat-map": true + "gulp>glob-watcher>chokidar>braces>fill-range>is-number>kind-of": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>once": { + "gulp>glob-watcher>chokidar>braces>fill-range>is-number>kind-of": { "packages": { - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>once>wrappy": true - } - }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>rimraf>glob>path-is-absolute": { - "globals": { - "process.platform": true - } - }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>semver": { - "globals": { - "console": true, - "process": true + "browserify>insert-module-globals>is-buffer": true } }, - "gulp>glob-watcher>chokidar>fsevents>node-pre-gyp>tar>safe-buffer": { - "builtin": { - "buffer": true + "gulp>glob-watcher>chokidar>braces>fill-range>to-regex-range": { + "packages": { + "gulp>glob-watcher>chokidar>braces>fill-range>is-number": true, + "webpack>micromatch>braces>fill-range>repeat-string": true } }, "gulp>glob-watcher>chokidar>is-binary-path": { diff --git a/package.json b/package.json index 402ad0c25..78505dd26 100644 --- a/package.json +++ b/package.json @@ -168,7 +168,7 @@ "eth-json-rpc-filters": "^4.2.1", "eth-json-rpc-middleware": "^9.0.0", "eth-keyring-controller": "^7.0.2", - "eth-lattice-keyring": "^0.12.0", + "eth-lattice-keyring": "^0.12.3", "eth-method-registry": "^2.0.0", "eth-query": "^2.1.2", "eth-rpc-errors": "^4.0.2", diff --git a/yarn.lock b/yarn.lock index 032905d61..79ad448d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3598,11 +3598,16 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== -"@noble/secp256k1@1.6.3", "@noble/secp256k1@^1.5.5", "@noble/secp256k1@~1.6.0": +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": version "1.6.3" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== +"@noble/secp256k1@^1.5.5", "@noble/secp256k1@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1" + integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -9430,7 +9435,7 @@ component-emitter@1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0: +component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -9649,7 +9654,7 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== -cookiejar@^2.1.0, cookiejar@^2.1.1, cookiejar@^2.1.3: +cookiejar@^2.1.0, cookiejar@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== @@ -10751,7 +10756,7 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" -dezalgo@1.0.3, dezalgo@^1.0.0: +dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== @@ -12113,18 +12118,17 @@ eth-keyring-controller@^7.0.2: eth-simple-keyring "^4.2.0" obs-store "^4.0.3" -eth-lattice-keyring@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/eth-lattice-keyring/-/eth-lattice-keyring-0.12.0.tgz#d71bfd2dec031de2b63fc45a8c19d22953e82a3d" - integrity sha512-f3w1H3nRbwi5gD/ivdeLlAv3mC5/bGigwHM7WRGV99pDi8nVLxaQQx11n+XFB5f7/4CcNNi0gbFP6JJurN2oRw== +eth-lattice-keyring@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/eth-lattice-keyring/-/eth-lattice-keyring-0.12.3.tgz#32ee3db427d15f1d76f907a36ddc34f4aab205ba" + integrity sha512-Z7HBEVx7RkbQXoITO1pjZqdliCti3UpjO5ClETA/V4iqIz3VnAeub1LHRcEGBDv5EaDNnHJZmz7drLth2609Kw== dependencies: - "@ethereumjs/common" "2.4.0" "@ethereumjs/tx" "3.3.0" + "@ethereumjs/util" "^8.0.0" + "@noble/secp256k1" "^1.7.0" bn.js "^5.2.0" - ethereumjs-util "^7.0.10" - gridplus-sdk "^2.2.7" + gridplus-sdk "^2.2.9" rlp "^3.0.0" - secp256k1 "4.0.2" eth-lib@0.2.8: version "0.2.8" @@ -13061,7 +13065,7 @@ fast-redact@^3.0.0: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.1.tgz#790fcff8f808c2e12fabbfb2be5cb2deda448fa0" integrity sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A== -fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1: +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7: version "2.1.1" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== @@ -13573,16 +13577,6 @@ formidable@^1.2.0: resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg== -formidable@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" - integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== - dependencies: - dezalgo "1.0.3" - hexoid "1.0.0" - once "1.4.0" - qs "6.9.3" - forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -14394,10 +14388,10 @@ graphviz@0.0.9: dependencies: temp "~0.4.0" -gridplus-sdk@^2.2.7: - version "2.2.7" - resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-2.2.7.tgz#d916b25a77358aed8d6fc5f1ed887ba32d51efb4" - integrity sha512-acpMxOkqubJRGcCRrYm1DA40utwIATjpWj/Wyismw16nAF3wGeQ79zUo5KwddtA+OYcwmqfPQMaAQ58qE0VpYg== +gridplus-sdk@^2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-2.2.9.tgz#bd98257fee13d82e19ee267dfa21cd12f81eea21" + integrity sha512-U39YxeLisEJmw9KCtKCQB6C8UTVRKTonhDxwcDpN8T23VZuxk2SOzdmvq/HS01l5N+p1QEKKzQF6OCFQ7nVcYA== dependencies: "@ethereumjs/common" "2.4.0" "@ethereumjs/tx" "3.3.0" @@ -14415,7 +14409,6 @@ gridplus-sdk@^2.2.7: js-sha3 "^0.8.0" rlp "^3.0.0" secp256k1 "4.0.2" - superagent "^7.1.3" growl@1.10.5: version "1.10.5" @@ -14907,11 +14900,6 @@ heap@~0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -hexoid@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" - integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== - hi-base32@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.0.tgz#61329f76a31f31008533f1c36f2473e259d64571" @@ -19807,7 +19795,7 @@ mersenne-twister@^1.0.1, mersenne-twister@^1.1.0: resolved "https://registry.yarnpkg.com/mersenne-twister/-/mersenne-twister-1.1.0.tgz#f916618ee43d7179efcf641bec4531eb9670978a" integrity sha1-+RZhjuQ9cXnvz2Qb7EUx65Zwl4o= -methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: +methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== @@ -19905,7 +19893,7 @@ mime@1.6.0, mime@^1.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@2.6.0, mime@^2.4.4: +mime@^2.4.4: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -21312,7 +21300,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -23509,17 +23497,12 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@6.9.3: - version "6.9.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" - integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== - qs@6.9.6: version "6.9.6" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== -qs@^6.10.0, qs@^6.10.3, qs@^6.4.0, qs@^6.5.1, qs@^6.5.2: +qs@^6.10.0, qs@^6.4.0, qs@^6.5.1, qs@^6.5.2: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -26706,23 +26689,6 @@ superagent@^3.8.1: qs "^6.5.1" readable-stream "^2.3.5" -superagent@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-7.1.6.tgz#64f303ed4e4aba1e9da319f134107a54cacdc9c6" - integrity sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g== - dependencies: - component-emitter "^1.3.0" - cookiejar "^2.1.3" - debug "^4.3.4" - fast-safe-stringify "^2.1.1" - form-data "^4.0.0" - formidable "^2.0.1" - methods "^1.1.2" - mime "2.6.0" - qs "^6.10.3" - readable-stream "^3.6.0" - semver "^7.3.7" - superstruct@^0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.16.0.tgz#9af5e059acd08e774789ad8880962427ef68dace" From fc38f11580663abe92eb472576c4ead8feba9c7d Mon Sep 17 00:00:00 2001 From: Alex Donesky Date: Tue, 4 Oct 2022 10:14:46 -0500 Subject: [PATCH 005/104] ensure phishing-detection page preload works in MV3 (#16029) * ensure phishing-detection page preload works in MV3 * remove stored flag for FireFox in MV3 solution --- app/scripts/background.js | 4 +- app/scripts/ui.js | 107 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 107 insertions(+), 4 deletions(-) diff --git a/app/scripts/background.js b/app/scripts/background.js index 084a0f0e6..55d51d19f 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -172,7 +172,9 @@ async function initialize(remotePort) { const initState = await loadStateFromPersistence(); const initLangCode = await getFirstPreferredLangCode(); await setupController(initState, initLangCode, remotePort); - await loadPhishingWarningPage(); + if (!isManifestV3) { + await loadPhishingWarningPage(); + } log.info('MetaMask initialization complete.'); } diff --git a/app/scripts/ui.js b/app/scripts/ui.js index deb12f6c1..d9569f043 100644 --- a/app/scripts/ui.js +++ b/app/scripts/ui.js @@ -15,20 +15,28 @@ import launchMetaMaskUi, { updateBackgroundConnection } from '../../ui'; import { ENVIRONMENT_TYPE_FULLSCREEN, ENVIRONMENT_TYPE_POPUP, + PLATFORM_FIREFOX, } from '../../shared/constants/app'; import { isManifestV3 } from '../../shared/modules/mv3.utils'; import { SUPPORT_LINK } from '../../shared/lib/ui-utils'; import { getErrorHtml } from '../../shared/lib/error-utils'; import ExtensionPlatform from './platforms/extension'; import { setupMultiplex } from './lib/stream-utils'; -import { getEnvironmentType } from './lib/util'; +import { getEnvironmentType, getPlatform } from './lib/util'; import metaRPCClientFactory from './lib/metaRPCClientFactory'; const container = document.getElementById('app-content'); -const WORKER_KEEP_ALIVE_INTERVAL = 1000; +const ONE_SECOND_IN_MILLISECONDS = 1_000; + +const WORKER_KEEP_ALIVE_INTERVAL = ONE_SECOND_IN_MILLISECONDS; const WORKER_KEEP_ALIVE_MESSAGE = 'WORKER_KEEP_ALIVE_MESSAGE'; +// Timeout for initializing phishing warning page. +const PHISHING_WARNING_PAGE_TIMEOUT = ONE_SECOND_IN_MILLISECONDS; + +const PHISHING_WARNING_SW_STORAGE_KEY = 'phishing-warning-sw-registered'; + /* * As long as UI is open it will keep sending messages to service worker * In service worker as this message is received @@ -58,6 +66,7 @@ async function start() { const activeTab = await queryCurrentActiveTab(windowType); + let loadPhishingWarningPage; /** * In case of MV3 the issue of blank screen was very frequent, it is caused by UI initialising before background is ready to send state. * Code below ensures that UI is rendered only after background is ready. @@ -68,7 +77,7 @@ async function start() { * Code below ensures that UI is rendered only after CONNECTION_READY message is received thus background is ready. * In case the UI is already rendered, only update the streams. */ - const messageListener = (message) => { + const messageListener = async (message) => { if (message?.name === 'CONNECTION_READY') { if (isUIInitialised) { // Currently when service worker is revived we create new streams @@ -77,6 +86,98 @@ async function start() { } else { initializeUiWithTab(activeTab); } + await loadPhishingWarningPage(); + } + }; + + /** + * An error thrown if the phishing warning page takes too long to load. + */ + class PhishingWarningPageTimeoutError extends Error { + constructor() { + super('Timeout failed'); + } + } + + /** + * Load the phishing warning page temporarily to ensure the service + * worker has been registered, so that the warning page works offline. + */ + loadPhishingWarningPage = async function () { + const currentPlatform = getPlatform(); + + // Check session storage for whether we've already initalized the phishing warning + // service worker this browser session and do not attempt to re-initialize if so. + const phishingSWMemoryFetch = await browser.storage.session.get( + PHISHING_WARNING_SW_STORAGE_KEY, + ); + + if (phishingSWMemoryFetch[PHISHING_WARNING_SW_STORAGE_KEY]) { + return; + } + + let iframe; + try { + const extensionStartupPhishingPageUrl = new URL( + process.env.PHISHING_WARNING_PAGE_URL, + ); + // The `extensionStartup` hash signals to the phishing warning page that it should not bother + // setting up streams for user interaction. Otherwise this page load would cause a console + // error. + extensionStartupPhishingPageUrl.hash = '#extensionStartup'; + + iframe = window.document.createElement('iframe'); + iframe.setAttribute('src', extensionStartupPhishingPageUrl.href); + iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin'); + + // Create "deferred Promise" to allow passing resolve/reject to event handlers + let deferredResolve; + let deferredReject; + const loadComplete = new Promise((resolve, reject) => { + deferredResolve = resolve; + deferredReject = reject; + }); + + // The load event is emitted once loading has completed, even if the loading failed. + // If loading failed we can't do anything about it, so we don't need to check. + iframe.addEventListener('load', deferredResolve); + + // This step initiates the page loading. + window.document.body.appendChild(iframe); + + // This timeout ensures that this iframe gets cleaned up in a reasonable + // timeframe, and ensures that the "initialization complete" message + // doesn't get delayed too long. + setTimeout( + () => deferredReject(new PhishingWarningPageTimeoutError()), + PHISHING_WARNING_PAGE_TIMEOUT, + ); + await loadComplete; + // store a flag in sessions storage that we've already loaded the service worker + // and don't need to try again + if (currentPlatform === PLATFORM_FIREFOX) { + // Firefox does not yet support the storage.session API introduced in MV3 + // Tracked here: https://bugzilla.mozilla.org/show_bug.cgi?id=1687778 + console.error( + 'Firefox does not support required MV3 APIs: Phishing warning page iframe and service worker will reload each page refresh', + ); + } else { + browser.storage.session.set({ + [PHISHING_WARNING_SW_STORAGE_KEY]: true, + }); + } + } catch (error) { + if (error instanceof PhishingWarningPageTimeoutError) { + console.warn( + 'Phishing warning page timeout; page not guaranteed to work offline.', + ); + } else { + console.error('Failed to initialize phishing warning page', error); + } + } finally { + if (iframe) { + iframe.remove(); + } } }; From 0a0eb207e87bdce8b4adc9891ddac68efc676558 Mon Sep 17 00:00:00 2001 From: Alex Jupiter Date: Tue, 4 Oct 2022 12:16:57 -0300 Subject: [PATCH 006/104] Hardware wallet copy updates, referral and tutorial buttons (#14738) Co-authored-by: ryanml Co-authored-by: Alex Donesky --- app/_locales/de/messages.json | 6 - app/_locales/el/messages.json | 6 - app/_locales/en/messages.json | 37 +-- app/_locales/es/messages.json | 6 - app/_locales/es_419/messages.json | 3 - app/_locales/fr/messages.json | 6 - app/_locales/hi/messages.json | 6 - app/_locales/id/messages.json | 6 - app/_locales/ja/messages.json | 6 - app/_locales/ko/messages.json | 6 - app/_locales/pt/messages.json | 6 - app/_locales/pt_BR/messages.json | 3 - app/_locales/ru/messages.json | 6 - app/_locales/tl/messages.json | 6 - app/_locales/tr/messages.json | 6 - app/_locales/vi/messages.json | 6 - app/_locales/zh_CN/messages.json | 6 - shared/constants/hardware-wallets.js | 25 ++ .../connect-hardware/index.scss | 26 ++ .../connect-hardware/select-hardware.js | 236 +++++++++++++++--- 20 files changed, 278 insertions(+), 136 deletions(-) diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json index 76c3c75ad..05d837044 100644 --- a/app/_locales/de/messages.json +++ b/app/_locales/de/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap-Tresor" }, - "airgapVaultTutorial": { - "message": " (Tutorials)" - }, "alertDisableTooltip": { "message": "Dies kann in \"Einstellungen > Warnungen\" geändert werden" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutorials)" - }, "knownAddressRecipient": { "message": "Bekannte Vertragsadresse." }, diff --git a/app/_locales/el/messages.json b/app/_locales/el/messages.json index 8080b314f..d42097345 100644 --- a/app/_locales/el/messages.json +++ b/app/_locales/el/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "Θησαυροφυλάκιο AirGap" }, - "airgapVaultTutorial": { - "message": " (Μαθήματα)" - }, "alertDisableTooltip": { "message": "Αυτό μπορεί να αλλάξει στο \"Ρυθμίσεις > Ειδοποιήσεις\"" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Εκμάθηση)" - }, "knownAddressRecipient": { "message": "Γνωστή διεύθυνση συμβολαίου." }, diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 8d643deed..426bcd814 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -36,10 +36,10 @@ "message": "Scan QR code" }, "QRHardwareWalletSteps1Description": { - "message": "Connect an airgapped hardware wallet that communicates through QR-codes. Officially supported airgapped hardware wallets include:" + "message": "You can choose from a list of official QR-code supporting partners below." }, "QRHardwareWalletSteps1Title": { - "message": "QR-based HW wallet" + "message": "Connect your QR hardware wallet" }, "QRHardwareWalletSteps2Description": { "message": "Ngrave (coming soon)" @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Vault" }, - "airgapVaultTutorial": { - "message": " (Tutorials)" - }, "alertDisableTooltip": { "message": "This can be changed in \"Settings > Alerts\"" }, @@ -521,6 +518,9 @@ "message": "Transak supports credit & debit cards, Apple Pay, MobiKwik, and bank transfers (depending on location) in 100+ countries. $1 deposits directly into your MetaMask account.", "description": "$1 represents the crypto symbol to be purchased" }, + "buyNow": { + "message": "Buy Now" + }, "buyWithWyre": { "message": "Buy $1 with Wyre" }, @@ -768,6 +768,9 @@ "convertTokenToNFTExistDescription": { "message": "We’ve detected that this asset has been added as an NFT. Would you like to remove it from your token list?" }, + "coolWallet": { + "message": "CoolWallet" + }, "copiedExclamation": { "message": "Copied!" }, @@ -897,6 +900,9 @@ "dataHex": { "message": "Hex" }, + "dcent": { + "message": "D'Cent" + }, "decimal": { "message": "Token decimal" }, @@ -1000,6 +1006,9 @@ "downloadGoogleChrome": { "message": "Download Google Chrome" }, + "downloadNow": { + "message": "Download Now" + }, "downloadSecretBackup": { "message": "Download this Secret Recovery Phrase and keep it stored safely on an external encrypted hard drive or storage medium." }, @@ -1798,9 +1807,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutorials)" - }, "knownAddressRecipient": { "message": "Known contract address." }, @@ -3370,10 +3376,10 @@ "message": "Not connected" }, "step1LatticeWallet": { - "message": "Make sure your Lattice1 is ready to connect" + "message": "Connect your Lattice1" }, "step1LatticeWalletMsg": { - "message": "You can connect MetaMask to your Lattice1 device once it is set up and online. Unlock your device and have your Device ID ready. For more on using hardware wallets, $1", + "message": "You can connect MetaMask to your Lattice1 device once it is set up and online. Unlock your device and have your Device ID ready.", "description": "$1 represents the `hardwareWalletSupportLinkConversion` localization key" }, "step1LedgerWallet": { @@ -3384,17 +3390,17 @@ "description": "$1 represents the `ledgerLiveApp` localization value" }, "step1TrezorWallet": { - "message": "Plug in Trezor wallet" + "message": "Connect your Trezor" }, "step1TrezorWalletMsg": { - "message": "Connect your wallet directly to your computer. For more on using your hardware wallet device, $1", + "message": "Plug your Trezor directly into your computer and unlock it. Make sure you use the correct passphrase.", "description": "$1 represents the `hardwareWalletSupportLinkConversion` localization key" }, "step2LedgerWallet": { - "message": "Plug in Ledger wallet" + "message": "Connect your Ledger" }, "step2LedgerWalletMsg": { - "message": "Connect your wallet directly to your computer. Unlock your Ledger and open the Ethereum app. For more on using your hardware wallet device, $1.", + "message": "Plug your Ledger directly into your computer, then unlock it and open the Ethereum app.", "description": "$1 represents the `hardwareWalletSupportLinkConversion` localization key" }, "stillGettingMessage": { @@ -4116,6 +4122,9 @@ "turnOnTokenDetection": { "message": "Turn on enhanced token detection" }, + "tutorial": { + "message": "Tutorial" + }, "twelveHrTitle": { "message": "12hr:" }, diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index b0250932b..c8f10fb99 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "Bóveda AirGap" }, - "airgapVaultTutorial": { - "message": " (Tutoriales)" - }, "alertDisableTooltip": { "message": "Esto se puede modificar en \"Configuración > Alertas\"" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutoriales)" - }, "knownAddressRecipient": { "message": "Dirección de contrato conocida." }, diff --git a/app/_locales/es_419/messages.json b/app/_locales/es_419/messages.json index 738d51536..92fd1dcec 100644 --- a/app/_locales/es_419/messages.json +++ b/app/_locales/es_419/messages.json @@ -1392,9 +1392,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutoriales)" - }, "knownAddressRecipient": { "message": "Dirección de contrato conocida." }, diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index 101698d35..6c98ad336 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "Coffre-fort AirGap" }, - "airgapVaultTutorial": { - "message": " (Tutoriels)" - }, "alertDisableTooltip": { "message": "Vous pouvez modifier ceci dans « Paramètres > Alertes »" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutoriels)" - }, "knownAddressRecipient": { "message": "Adresse contractuelle connue." }, diff --git a/app/_locales/hi/messages.json b/app/_locales/hi/messages.json index cb2c66d3c..76664e7fc 100644 --- a/app/_locales/hi/messages.json +++ b/app/_locales/hi/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap का वॉल्ट" }, - "airgapVaultTutorial": { - "message": " (ट्यूटोरियल्स)" - }, "alertDisableTooltip": { "message": "इसे \"सेटिंग > अलर्ट\" में बदला जा सकता है" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (ट्यूटोरियल)" - }, "knownAddressRecipient": { "message": "ज्ञात अनुबंध पता।" }, diff --git a/app/_locales/id/messages.json b/app/_locales/id/messages.json index 4d577cb2a..974073843 100644 --- a/app/_locales/id/messages.json +++ b/app/_locales/id/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "Brankas AirGap" }, - "airgapVaultTutorial": { - "message": " (Tutorial)" - }, "alertDisableTooltip": { "message": "Ini dapat diubah dalam \"Pengaturan > Peringatan\"" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutorial)" - }, "knownAddressRecipient": { "message": "Alamat kontrak yang diketahui." }, diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index 781b55da8..e1023b070 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Vault" }, - "airgapVaultTutorial": { - "message": " (チュートリアル)" - }, "alertDisableTooltip": { "message": "これは、[設定 > 警告] で変更できます" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": "(チュートリアル)" - }, "knownAddressRecipient": { "message": "既知のコントラクトアドレスです。" }, diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 00d49f447..ecfa86120 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "에어갭 볼트" }, - "airgapVaultTutorial": { - "message": " (튜토리얼)" - }, "alertDisableTooltip": { "message": "\"설정 > 경고\"에서 변경할 수 있습니다." }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (튜토리얼)" - }, "knownAddressRecipient": { "message": "알려진 계약 주소입니다." }, diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json index 21f8d79a7..eb4fdd630 100644 --- a/app/_locales/pt/messages.json +++ b/app/_locales/pt/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Vault" }, - "airgapVaultTutorial": { - "message": " (Tutoriais)" - }, "alertDisableTooltip": { "message": "Isso pode ser alterado em \"Configurações > Alertas\"" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutoriais)" - }, "knownAddressRecipient": { "message": "Endereço de contrato conhecido." }, diff --git a/app/_locales/pt_BR/messages.json b/app/_locales/pt_BR/messages.json index 245a0ad7b..2755f4967 100644 --- a/app/_locales/pt_BR/messages.json +++ b/app/_locales/pt_BR/messages.json @@ -1376,9 +1376,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Tutoriais)" - }, "knownAddressRecipient": { "message": "Endereço de contrato conhecido." }, diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json index 82410531b..f4542bd32 100644 --- a/app/_locales/ru/messages.json +++ b/app/_locales/ru/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "Хранилище AirGap" }, - "airgapVaultTutorial": { - "message": "(Руководства)" - }, "alertDisableTooltip": { "message": "Это можно изменить в разделе «Настройки» > «Предупреждения»" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Руководства)" - }, "knownAddressRecipient": { "message": "Известный адрес контракта." }, diff --git a/app/_locales/tl/messages.json b/app/_locales/tl/messages.json index 5ef6c7fbc..a08952f65 100644 --- a/app/_locales/tl/messages.json +++ b/app/_locales/tl/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Vault" }, - "airgapVaultTutorial": { - "message": " (Mga Tutorial)" - }, "alertDisableTooltip": { "message": "Puwede itong baguhin sa \"Mga Setting > Mga Alerto\"" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Mga Tutorial)" - }, "knownAddressRecipient": { "message": "Kilalang address ng kontrata." }, diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json index fd9e1ebe2..c0b7c054a 100644 --- a/app/_locales/tr/messages.json +++ b/app/_locales/tr/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Kasası" }, - "airgapVaultTutorial": { - "message": "(Öğreticiler)" - }, "alertDisableTooltip": { "message": "\"Ayarlar > Uyarılar\" kısmında değiştirilebilir" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Ana İlke" }, - "keystoneTutorial": { - "message": " (Öğreticiler)" - }, "knownAddressRecipient": { "message": "Bilinen sözleşme adresi." }, diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json index ad00eb4b4..e7f5d4cf8 100644 --- a/app/_locales/vi/messages.json +++ b/app/_locales/vi/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Vault" }, - "airgapVaultTutorial": { - "message": " (Hướng dẫn)" - }, "alertDisableTooltip": { "message": "Bạn có thể thay đổi trong phần \"Cài đặt > Cảnh báo\"" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (Hướng dẫn)" - }, "knownAddressRecipient": { "message": "Địa chỉ hợp đồng đã biết." }, diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index eb1e1be9c..981cbcdfe 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -263,9 +263,6 @@ "airgapVault": { "message": "AirGap Vault" }, - "airgapVaultTutorial": { - "message": " (使用教程)" - }, "alertDisableTooltip": { "message": "这可以在“设置 > 提醒”中进行更改" }, @@ -1782,9 +1779,6 @@ "keystone": { "message": "Keystone" }, - "keystoneTutorial": { - "message": " (使用教程)" - }, "knownAddressRecipient": { "message": "已知合约地址。" }, diff --git a/shared/constants/hardware-wallets.js b/shared/constants/hardware-wallets.js index 48bc65d3d..aa4d86d58 100644 --- a/shared/constants/hardware-wallets.js +++ b/shared/constants/hardware-wallets.js @@ -48,3 +48,28 @@ export const TRANSPORT_STATES = { DEVICE_OPEN_FAILURE: 'DEVICE_OPEN_FAILURE', UNKNOWN_FAILURE: 'UNKNOWN_FAILURE', }; + +export const AFFILIATE_LINKS = { + LEDGER: 'https://shop.ledger.com/?r=17c4991a03fa', + GRIDPLUS: 'https://gridplus.io/?afmc=7p', + TREZOR: + 'https://shop.trezor.io/product/trezor-one-black?offer_id=35&aff_id=11009', + KEYSTONE: + 'https://shop.keyst.one/?rfsn=6088257.656b3e9&utm_source=refersion&utm_medium=affiliate&utm_campaign=6088257.656b3e9', + AIRGAP: 'https://airgap.it/', + COOLWALLET: 'https://www.coolwallet.io/', + DCENT: 'https://dcentwallet.com/', +}; + +export const AFFILIATE_TUTORIAL_LINKS = { + LEDGER: + 'https://support.ledger.com/hc/en-us/articles/4404366864657-Set-up-and-use-MetaMask-to-access-your-Ledger-Ethereum-ETH-account?docs=true', + GRIDPLUS: 'https://docs.gridplus.io/setup/metamask', + TREZOR: 'https://wiki.trezor.io/Apps:MetaMask', + KEYSTONE: + 'https://support.keyst.one/3rd-party-wallets/eth-and-web3-wallets-keystone/bind-metamask-with-keystone', + AIRGAP: 'https://support.airgap.it/guides/metamask/', + COOLWALLET: 'https://www.coolwallet.io/metamask-step-by-step-guides/', + DCENT: + 'https://medium.com/dcentwallet/dcent-wallet-now-supports-qr-based-protocol-to-link-with-metamask-57555f02603f', +}; diff --git a/ui/pages/create-account/connect-hardware/index.scss b/ui/pages/create-account/connect-hardware/index.scss index 961844530..5bed01b4d 100644 --- a/ui/pages/create-account/connect-hardware/index.scss +++ b/ui/pages/create-account/connect-hardware/index.scss @@ -25,6 +25,13 @@ } } + &__QR-subtitle { + @include H5; + + margin-top: 10px; + color: var(--color-text-default); + } + &__btn-wrapper { flex: 1; flex-direction: row; @@ -41,6 +48,25 @@ opacity: 0.5; } + &__external-btn-first { + @include H7; + + padding: 5px 10px; + width: auto; + display: inline; + margin-top: 10px; + margin-right: 20px; + } + + &__external-btn { + @include H7; + + padding: 5px 10px; + width: auto; + display: inline; + margin-top: 10px; + } + &__btn { background: var(--color-background-alternative); border: 1px solid var(--color-border-muted); diff --git a/ui/pages/create-account/connect-hardware/select-hardware.js b/ui/pages/create-account/connect-hardware/select-hardware.js index 392665b69..d91a716c1 100644 --- a/ui/pages/create-account/connect-hardware/select-hardware.js +++ b/ui/pages/create-account/connect-hardware/select-hardware.js @@ -10,12 +10,16 @@ import LogoLattice from '../../../components/ui/logo/logo-lattice'; import { DEVICE_NAMES, LEDGER_TRANSPORT_TYPES, + AFFILIATE_LINKS, + AFFILIATE_TUTORIAL_LINKS, } from '../../../../shared/constants/hardware-wallets'; import ZENDESK_URLS from '../../../helpers/constants/zendesk-url'; +import { EVENT } from '../../../../shared/constants/metametrics'; export default class SelectHardware extends Component { static contextTypes = { t: PropTypes.func, + trackEvent: PropTypes.func, }; static propTypes = { @@ -214,6 +218,32 @@ export default class SelectHardware extends Component { {steps.map((step, index) => (

{step.title}

+ +

{step.message}

{step.asset && ( (

{step.title}

+ +

{step.message}

{step.asset && ( (

{step.title}

+ +

{step.message}

{step.asset && ( - +

{this.context.t('keystone')} - - + + ), }, { message: ( <> - +

{this.context.t('airgapVault')} - - + + + + ), + }, + { + message: ( + <> +

+ {this.context.t('coolWallet')} +

+ + + + ), + }, + { + message: ( + <> +

{this.context.t('dcent')}

+ +
), }, From 392b08a5c4e4e3a72910c1069795cc4dd2351604 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Tue, 4 Oct 2022 13:22:42 -0230 Subject: [PATCH 007/104] =?UTF-8?q?Fix:=20show=20whats=20new=20to=20users?= =?UTF-8?q?=20who=20created,=20not=20imported,=20a=20new=20wallet,?= =?UTF-8?q?=E2=80=A6=20(#16042)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: show whats new to users who created, not imported, a new wallet, but not on their first session * Fix tests Hide `Improved token detection is here` & `Scam and security risks` whats new * Fix unit test Co-authored-by: PeterYinusa --- test/e2e/fixtures/special-settings/state.json | 6 ++++++ ui/ducks/app/app.js | 10 ++++++++++ .../end-of-flow/end-of-flow.component.js | 5 ++++- .../end-of-flow/end-of-flow.container.js | 3 +++ .../first-time-flow/end-of-flow/end-of-flow.test.js | 1 + ui/pages/home/home.component.js | 6 ++++-- ui/pages/home/home.container.js | 1 + ui/store/actionConstants.js | 1 + 8 files changed, 30 insertions(+), 3 deletions(-) diff --git a/test/e2e/fixtures/special-settings/state.json b/test/e2e/fixtures/special-settings/state.json index b1bdad525..f4fa15647 100644 --- a/test/e2e/fixtures/special-settings/state.json +++ b/test/e2e/fixtures/special-settings/state.json @@ -53,6 +53,12 @@ "8": { "isShown": true }, + "10": { + "isShown": true + }, + "11": { + "isShown": true + }, "12": { "isShown": true }, diff --git a/ui/ducks/app/app.js b/ui/ducks/app/app.js index 186af52f0..78fb56fb6 100644 --- a/ui/ducks/app/app.js +++ b/ui/ducks/app/app.js @@ -62,6 +62,7 @@ export default function reduceApp(state = {}, action) { sendInputCurrencySwitched: false, newTokensImported: '', newCustomNetworkAdded: {}, + onboardedInThisUISession: false, ...state, }; @@ -406,6 +407,11 @@ export default function reduceApp(state = {}, action) { ...appState, newCustomNetworkAdded: action.value, }; + case actionConstants.ONBOARDED_IN_THIS_UI_SESSION: + return { + ...appState, + onboardedInThisUISession: action.value, + }; default: return appState; } @@ -471,3 +477,7 @@ export function toggleCurrencySwitch() { export function setNewCustomNetworkAdded(value) { return { type: actionConstants.SET_NEW_CUSTOM_NETWORK_ADDED, value }; } + +export function setOnBoardedInThisUISession(value) { + return { type: actionConstants.ONBOARDED_IN_THIS_UI_SESSION, value }; +} diff --git a/ui/pages/first-time-flow/end-of-flow/end-of-flow.component.js b/ui/pages/first-time-flow/end-of-flow/end-of-flow.component.js index 1b3938fc7..8fb2dabd5 100644 --- a/ui/pages/first-time-flow/end-of-flow/end-of-flow.component.js +++ b/ui/pages/first-time-flow/end-of-flow/end-of-flow.component.js @@ -17,6 +17,7 @@ export default class EndOfFlowScreen extends PureComponent { static contextTypes = { t: PropTypes.func, trackEvent: PropTypes.func, + setOnBoardedInThisUISession: PropTypes.func, }; static propTypes = { @@ -26,6 +27,7 @@ export default class EndOfFlowScreen extends PureComponent { location: PropTypes.string, tabId: PropTypes.number, }), + setOnBoardedInThisUISession: PropTypes.func, }; async _beforeUnload() { @@ -37,7 +39,8 @@ export default class EndOfFlowScreen extends PureComponent { } async _onOnboardingComplete() { - const { setCompletedOnboarding } = this.props; + const { setCompletedOnboarding, setOnBoardedInThisUISession } = this.props; + setOnBoardedInThisUISession(true); await setCompletedOnboarding(); } diff --git a/ui/pages/first-time-flow/end-of-flow/end-of-flow.container.js b/ui/pages/first-time-flow/end-of-flow/end-of-flow.container.js index 6df628ee9..0e8b8db0e 100644 --- a/ui/pages/first-time-flow/end-of-flow/end-of-flow.container.js +++ b/ui/pages/first-time-flow/end-of-flow/end-of-flow.container.js @@ -2,6 +2,7 @@ import { connect } from 'react-redux'; import { getOnboardingInitiator } from '../../../selectors'; import { setCompletedOnboarding } from '../../../store/actions'; +import { setOnBoardedInThisUISession } from '../../../ducks/app/app'; import EndOfFlow from './end-of-flow.component'; const mapStateToProps = (state) => { @@ -13,6 +14,8 @@ const mapStateToProps = (state) => { const mapDispatchToProps = (dispatch) => { return { setCompletedOnboarding: () => dispatch(setCompletedOnboarding()), + setOnBoardedInThisUISession: (value) => + dispatch(setOnBoardedInThisUISession(value)), }; }; diff --git a/ui/pages/first-time-flow/end-of-flow/end-of-flow.test.js b/ui/pages/first-time-flow/end-of-flow/end-of-flow.test.js index 4f645e149..c862704f7 100644 --- a/ui/pages/first-time-flow/end-of-flow/end-of-flow.test.js +++ b/ui/pages/first-time-flow/end-of-flow/end-of-flow.test.js @@ -12,6 +12,7 @@ describe('End of Flow Screen', () => { push: sinon.stub(), }, setCompletedOnboarding: sinon.stub().resolves(), + setOnBoardedInThisUISession: sinon.stub(), }; beforeEach(() => { diff --git a/ui/pages/home/home.component.js b/ui/pages/home/home.component.js index 935f01ff6..8318ddd25 100644 --- a/ui/pages/home/home.component.js +++ b/ui/pages/home/home.component.js @@ -153,6 +153,7 @@ export default class Home extends PureComponent { newCustomNetworkAdded: PropTypes.object, clearNewCustomNetworkAdded: PropTypes.func, setRpcTarget: PropTypes.func, + onboardedInThisUISession: PropTypes.bool, }; state = { @@ -613,6 +614,7 @@ export default class Home extends PureComponent { firstTimeFlowType, completedOnboarding, shouldShowSeedPhraseReminder, + onboardedInThisUISession, } = this.props; if (forgottenPassword) { @@ -622,8 +624,8 @@ export default class Home extends PureComponent { } const showWhatsNew = - ((completedOnboarding && firstTimeFlowType === 'import') || - !completedOnboarding) && + completedOnboarding && + (!onboardedInThisUISession || firstTimeFlowType === 'import') && announcementsToShow && showWhatsNewPopup && !showPortfolioTooltip && diff --git a/ui/pages/home/home.container.js b/ui/pages/home/home.container.js index 1417ec97a..11d27407f 100644 --- a/ui/pages/home/home.container.js +++ b/ui/pages/home/home.container.js @@ -157,6 +157,7 @@ const mapStateToProps = (state) => { newCollectibleAddedMessage: getNewCollectibleAddedMessage(state), newTokensImported: getNewTokensImported(state), newCustomNetworkAdded: appState.newCustomNetworkAdded, + onboardedInThisUISession: appState.onboardedInThisUISession, }; }; diff --git a/ui/store/actionConstants.js b/ui/store/actionConstants.js index 6d7bb77cf..f9878968e 100644 --- a/ui/store/actionConstants.js +++ b/ui/store/actionConstants.js @@ -74,6 +74,7 @@ export const UPDATE_PREFERENCES = 'UPDATE_PREFERENCES'; // Onboarding export const COMPLETE_ONBOARDING = 'COMPLETE_ONBOARDING'; +export const ONBOARDED_IN_THIS_UI_SESSION = 'ONBOARDED_IN_THIS_UI_SESSION'; export const SET_MOUSE_USER_STATE = 'SET_MOUSE_USER_STATE'; From 22f07aefe31a5b07720c3204c1a5fa3116f730b8 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Tue, 4 Oct 2022 17:58:22 +0200 Subject: [PATCH 008/104] Update Jest config to avoid transpiling dependencies (#16068) * Use stable version of Jest * Update Jest config --- jest.config.js | 14 +- jest.stories.config.js | 3 + package.json | 6 +- yarn.lock | 735 +++++++++++++++++++++-------------------- 4 files changed, 379 insertions(+), 379 deletions(-) diff --git a/jest.config.js b/jest.config.js index 1c8cfe7ff..38f289e50 100644 --- a/jest.config.js +++ b/jest.config.js @@ -58,17 +58,11 @@ module.exports = { testTimeout: 2500, // We have to specify the environment we are running in, which is jsdom. The // default is 'node'. This can be modified *per file* using a comment at the - // head of the file. So it may be worth while to switch to 'node' in any + // head of the file. So it may be worthwhile to switch to 'node' in any // background tests. testEnvironment: 'jsdom', - // Our configuration somehow is calling into the esm folder / files of - // some modules. Jest supports ESM but our code is not set to emit ESM files - // so we are telling jest to use babel to transform the node_modules listed. - // Note: for some reason I could not hammer down to the node_modules - // installed in @metamask/controllers so I had to just blanket specify all - // of the @metamask/controllers folder. - transformIgnorePatterns: [ - '/node_modules/(?!(multiformats|uuid|nanoid|@metamask/controllers|@metamask/snap-controllers|@metamask/rpc-methods)/)', - ], + testEnvironmentOptions: { + customExportConditions: ['node', 'node-addons'], + }, workerIdleMemoryLimit: '500MB', }; diff --git a/jest.stories.config.js b/jest.stories.config.js index dd4d5a6cf..ef79237f9 100644 --- a/jest.stories.config.js +++ b/jest.stories.config.js @@ -14,4 +14,7 @@ module.exports = { '^.+\\.mdx$': '@storybook/addon-docs/jest-transform-mdx', }, testEnvironment: 'jsdom', + testEnvironmentOptions: { + customExportConditions: ['node', 'node-addons'], + }, }; diff --git a/package.json b/package.json index 78505dd26..0a64aad1e 100644 --- a/package.json +++ b/package.json @@ -136,9 +136,9 @@ "@metamask/providers": "^9.0.0", "@metamask/rpc-methods": "^0.21.0", "@metamask/slip44": "^2.1.0", + "@metamask/smart-transactions-controller": "^2.3.2", "@metamask/snap-controllers": "^0.21.0", "@metamask/snap-utils": "^0.21.0", - "@metamask/smart-transactions-controller": "^2.3.2", "@ngraveio/bc-ur": "^1.1.6", "@popperjs/core": "^2.4.0", "@reduxjs/toolkit": "^1.6.2", @@ -350,9 +350,9 @@ "history": "^5.0.0", "improved-yarn-audit": "^3.0.0", "ini": "^3.0.0", - "jest": "^29.0.0-alpha.5", + "jest": "^29.1.2", "jest-canvas-mock": "^2.3.1", - "jest-environment-jsdom": "^29.0.0-alpha.4", + "jest-environment-jsdom": "^29.1.2", "jest-it-up": "^2.0.2", "jsdom": "^11.2.0", "koa": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 79ad448d4..08a73a300 100644 --- a/yarn.lock +++ b/yarn.lock @@ -663,7 +663,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.18.6": +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.7.2": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== @@ -2528,110 +2528,110 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^29.0.0-alpha.4": - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.0.0-alpha.4.tgz#38882bd93a19f324a0f48e7f72b74bc455f36ba9" - integrity sha512-kH2ha7n6De0AwnFAQBvIRYrzGFR6AKcAh+Hh7m+kQ7vCK+++5y2nA1hZtYlLqybZ4COIafUmYB7nnH/5CO//7Q== +"@jest/console@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.2.tgz#0ae975a70004696f8320490fcaa1a4152f7b62e4" + integrity sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" + jest-message-util "^29.1.2" + jest-util "^29.1.2" slash "^3.0.0" -"@jest/core@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.0.0-alpha.5.tgz#fe26ddd1fbd59e3eb067786d3c0016a495121d37" - integrity sha512-UDDQFflfGcY7OjNm/y9WU5/zSakiazYcA6YX18kaRc90Dlhn4vMXLYPtTOSatJnAe+9/j5PHFFzS6gFAbKD9Ig== +"@jest/core@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.2.tgz#e5ce7a71e7da45156a96fb5eeed11d18b67bd112" + integrity sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA== dependencies: - "@jest/console" "^29.0.0-alpha.4" - "@jest/reporters" "^29.0.0-alpha.5" - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/transform" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" + "@jest/console" "^29.1.2" + "@jest/reporters" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.0.0-alpha.3" - jest-config "^29.0.0-alpha.5" - jest-haste-map "^29.0.0-alpha.5" - jest-message-util "^29.0.0-alpha.4" - jest-regex-util "^29.0.0-alpha.3" - jest-resolve "^29.0.0-alpha.5" - jest-resolve-dependencies "^29.0.0-alpha.5" - jest-runner "^29.0.0-alpha.5" - jest-runtime "^29.0.0-alpha.5" - jest-snapshot "^29.0.0-alpha.5" - jest-util "^29.0.0-alpha.4" - jest-validate "^29.0.0-alpha.4" - jest-watcher "^29.0.0-alpha.4" + jest-changed-files "^29.0.0" + jest-config "^29.1.2" + jest-haste-map "^29.1.2" + jest-message-util "^29.1.2" + jest-regex-util "^29.0.0" + jest-resolve "^29.1.2" + jest-resolve-dependencies "^29.1.2" + jest-runner "^29.1.2" + jest-runtime "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" + jest-watcher "^29.1.2" micromatch "^4.0.4" - pretty-format "^29.0.0-alpha.4" - rimraf "^3.0.0" + pretty-format "^29.1.2" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.0.0-alpha.4": - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.0.0-alpha.4.tgz#41bd9c9e5ef4036fcb1be857b481018070767129" - integrity sha512-RhyjSuJgnJnRuVGHn/c1/U+l5zFDaWWFlnm+L25d24/+MEu0aJoHUEhTBBeJ9aarA0GyFVqNyKgDs9YzDUMyoA== +"@jest/environment@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.2.tgz#bb51a43fce9f960ba9a48f0b5b556f30618ebc0a" + integrity sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ== dependencies: - "@jest/fake-timers" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-mock "^29.0.0-alpha.4" + jest-mock "^29.1.2" -"@jest/expect-utils@^29.0.0-alpha.4": - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.0-alpha.4.tgz#b45915a5ffc1ad6c18e15fab91eee6984084de24" - integrity sha512-KUeHD+8w+Q9gP2XHwf1biOuCp22GRFOovs71HJRHe3LfCP+yITNbLPyJPPVq6U+a1R+kznNWGOkfd4wljT6RGA== +"@jest/expect-utils@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.2.tgz#66dbb514d38f7d21456bc774419c9ae5cca3f88d" + integrity sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg== dependencies: - jest-get-type "^29.0.0-alpha.3" + jest-get-type "^29.0.0" -"@jest/expect@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.0.0-alpha.5.tgz#fa89aaf8d120b371d6deb62e2cc65d15d117d7cf" - integrity sha512-tbN8bAgUNQbGuGkFiszi0joja5Ftl1Px/BFudnkE6G8DUk4sTA+7fMjRRu/Uz/fHNf+HyDIRGkJZf4JoOSQntg== +"@jest/expect@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.2.tgz#334a86395f621f1ab63ad95b06a588b9114d7b7a" + integrity sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ== dependencies: - expect "^29.0.0-alpha.4" - jest-snapshot "^29.0.0-alpha.5" + expect "^29.1.2" + jest-snapshot "^29.1.2" -"@jest/fake-timers@^29.0.0-alpha.4": - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.0.0-alpha.4.tgz#a30f3484a28b5f70d30df3e0e66e74e2e8259457" - integrity sha512-eiOfl5ZIfXxFoOYAeaQwpFf648vnD/Imw7u+I2WoA/ujIDajrogzuvwbCMmKmnh+bSLuUrFHcWJ18KWqRkYR2g== +"@jest/fake-timers@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.2.tgz#f157cdf23b4da48ce46cb00fea28ed1b57fc271a" + integrity sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^29.0.0-alpha.4" - jest-mock "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" + jest-message-util "^29.1.2" + jest-mock "^29.1.2" + jest-util "^29.1.2" -"@jest/globals@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.0.0-alpha.5.tgz#0d5d304a3b628bf08ee6a7290723a49dab68dfff" - integrity sha512-yVKcxiJ1LrzgAApTCVI2htkfZmOwax6mW9FON+DH5vhrD08OtSNpn97tl3jbdt3evevKKPakwQJ1XSnVT5K2tw== +"@jest/globals@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.2.tgz#826ede84bc280ae7f789cb72d325c48cd048b9d3" + integrity sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g== dependencies: - "@jest/environment" "^29.0.0-alpha.4" - "@jest/expect" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" + "@jest/environment" "^29.1.2" + "@jest/expect" "^29.1.2" + "@jest/types" "^29.1.2" + jest-mock "^29.1.2" -"@jest/reporters@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.0.0-alpha.5.tgz#1b9909d5680cf8d7b98ce1f04b209ea52b338c73" - integrity sha512-smDOKZ+dv2istlYaNwQGL0QuY4lCFegovs+ANBs6Z9j1tMq/QEWxGsfbXCU5kP8QZUaRN55ZZsMQpRFldun0Yg== +"@jest/reporters@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.2.tgz#5520898ed0a4ecf69d8b671e1dc8465d0acdfa6e" + integrity sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.0.0-alpha.4" - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/transform" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" - "@jridgewell/trace-mapping" "^0.3.14" + "@jest/console" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" + "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -2643,49 +2643,49 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" - jest-worker "^29.0.0-alpha.5" + jest-message-util "^29.1.2" + jest-util "^29.1.2" + jest-worker "^29.1.2" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.0.0-alpha.3": - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0-alpha.3.tgz#235bb9d7b69b459616304081285e43d00fd90f72" - integrity sha512-qfCWn5SYMp7tJkzF2wG6eBfugaZKdQoREw/b3bXR8ePHzwXpm1BWKWvZSan6/sQngyo9cozRkE1e45O30HYtzA== +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== dependencies: "@sinclair/typebox" "^0.24.1" -"@jest/source-map@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.0.0-alpha.5.tgz#5b257b26bd90e2d04d01ea9238be23f818faf567" - integrity sha512-CkdJt84AWgTmBYChib/H4FeXYRxi5YDyhRJzsE3Dj13GL84jKSqftBgzmS32fZv6HsLTle/BgCS1J+xRdrVtKw== +"@jest/source-map@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.0.0.tgz#f8d1518298089f8ae624e442bbb6eb870ee7783c" + integrity sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.0.0-alpha.4": - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.0.0-alpha.4.tgz#403a43048374ffe0a4ea6309e3c265ef426ce8b6" - integrity sha512-PlHp0HoTahXr14Kbj9H40nzLawq9H280PMfsu2Itc7VQElKz6e3suDhb3Gv8wqC+QP3swyTL54fuxOt4BhPiEA== +"@jest/test-result@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.2.tgz#6a8d006eb2b31ce0287d1fc10d12b8ff8504f3c8" + integrity sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg== dependencies: - "@jest/console" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + "@jest/console" "^29.1.2" + "@jest/types" "^29.1.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.0.0-alpha.5.tgz#bd064ee6225a66c88936efdb828acdfd024012a8" - integrity sha512-RpIZ8OqCtG0ZlJBA0CgWjj5BFQ/5IwgbO9lr5/JrfjHlIOuddxFVdc90j0ZZUL0QoF5YVaVuUZaXQVfLylJxtA== +"@jest/test-sequencer@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz#10bfd89c08bfdba382eb05cc79c1d23a01238a93" + integrity sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q== dependencies: - "@jest/test-result" "^29.0.0-alpha.4" + "@jest/test-result" "^29.1.2" graceful-fs "^4.2.9" - jest-haste-map "^29.0.0-alpha.5" + jest-haste-map "^29.1.2" slash "^3.0.0" "@jest/transform@^26.6.2": @@ -2709,22 +2709,22 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^29.0.0-alpha.5": - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.0.0-alpha.5.tgz#61274696d596e71533ee104cb8ddca05c05a11b2" - integrity sha512-NEi/qLWfjjKrXWMFXRpWk1/UdQDQg2b0ePwIakBrsVozru/kzUSXfDYaPCU6QeH6Punadtp7d9NytngIb77feQ== +"@jest/transform@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.2.tgz#20f814696e04f090421f6d505c14bbfe0157062a" + integrity sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.0.0-alpha.4" - "@jridgewell/trace-mapping" "^0.3.14" + "@jest/types" "^29.1.2" + "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.0-alpha.5" - jest-regex-util "^29.0.0-alpha.3" - jest-util "^29.0.0-alpha.4" + jest-haste-map "^29.1.2" + jest-regex-util "^29.0.0" + jest-util "^29.1.2" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -2751,12 +2751,12 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^29.0.0-alpha.4": - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.0-alpha.4.tgz#1c7d1c8eb98392877f58e177cc44c3a45883b30f" - integrity sha512-sqTHma0qpP8yeOR/e1xqZY/4CCd2vCBkpHDENOI1YfMeW6Lk/y1AFeWFFhobnl7zmI0QReilrx1x2Hayo54HjA== +"@jest/types@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.2.tgz#7442d32b16bcd7592d9614173078b8c334ec730a" + integrity sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg== dependencies: - "@jest/schemas" "^29.0.0-alpha.3" + "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -2803,7 +2803,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": version "0.3.15" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== @@ -7331,15 +7331,15 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -babel-jest@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.0.0-alpha.5.tgz#954507b7a4c74c08095826c0a10945c8b8f5eabe" - integrity sha512-RPIQOFXKGIciU7TIDr6KvwMFShAB9iD6/OJDxylpLo++oTw5AVn2luDmkoP6DPNhh+QaeUHa7lf1hI2sbAwH3w== +babel-jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.2.tgz#540d3241925c55240fb0c742e3ffc5f33a501978" + integrity sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q== dependencies: - "@jest/transform" "^29.0.0-alpha.5" + "@jest/transform" "^29.1.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.0.0-alpha.3" + babel-preset-jest "^29.0.2" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -7408,10 +7408,10 @@ babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.0-alpha.3.tgz#7544706abeff87b207b3a90d52126706f34f1f35" - integrity sha512-fx9ij7e4Gubr4knij8Fiq/YsqK+Ny0rzEmLGYw+MnXqDr/JT01gBuRVU41qo/RkNiNiTRVbzIfimO4rZK4LIzQ== +babel-plugin-jest-hoist@^29.0.2: + version "29.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz#ae61483a829a021b146c016c6ad39b8bcc37c2c8" + integrity sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -7500,12 +7500,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.0-alpha.3.tgz#1af43d982f05ab42c356ea3075bbbc4e4aaba74c" - integrity sha512-zWMK2x9fZsdlRDcpRrjeMXSHEXt+RR9fKvMRxSny3mAhjcS+wyaTiE0kQmTx9F1G2XJlxxXOg8ZR9cTpNMsX+A== +babel-preset-jest@^29.0.2: + version "29.0.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz#e14a7124e22b161551818d89e5bdcfb3b2b0eac7" + integrity sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA== dependencies: - babel-plugin-jest-hoist "^29.0.0-alpha.3" + babel-plugin-jest-hoist "^29.0.2" babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.26.0: @@ -10811,10 +10811,10 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff-sequences@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0-alpha.3.tgz#e27332f282e5142d4d03804ae6778ddd90dbb3e1" - integrity sha512-+1kCbnF4gWfTIuhznRtta+aLwy2myGELtWlS38WUNcXg98meRVn4PeE8QuM1wQ1yVEwM8E3FDANVZRDekAQW6w== +diff-sequences@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f" + integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA== diff@3.5.0: version "3.5.0" @@ -12806,16 +12806,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.0-alpha.4.tgz#1b650671d58fdc78429ef723ac7cc2d73d354052" - integrity sha512-iqE+4zgo6kXJrkHCoEq5EwwUOqFPXUhzMy4/IRe5HWsJ3gpZTi6VHtkVCRwCmFPMEsIMiCfrXmFYw5QQhsHisw== +expect@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.2.tgz#82f8f28d7d408c7c68da3a386a490ee683e1eced" + integrity sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw== dependencies: - "@jest/expect-utils" "^29.0.0-alpha.4" - jest-get-type "^29.0.0-alpha.3" - jest-matcher-utils "^29.0.0-alpha.4" - jest-message-util "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" + "@jest/expect-utils" "^29.1.2" + jest-get-type "^29.0.0" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-util "^29.1.2" explain-error@^1.0.4: version "1.0.4" @@ -16981,82 +16981,82 @@ jest-canvas-mock@^2.3.1: cssfontparser "^1.2.1" moo-color "^1.0.2" -jest-changed-files@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.0.0-alpha.3.tgz#75eec5fc33e708697df83c7e7fbfc4a534ee24f1" - integrity sha512-qR9Tl9SZ+hoet7XpnBPoTsYi+E9XKXukqg28f/4GH8oltapQpZxcBQ47XwpHURn0+BzGZcfXvQr+/OuxTmE7Xg== +jest-changed-files@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.0.0.tgz#aa238eae42d9372a413dd9a8dadc91ca1806dce0" + integrity sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ== dependencies: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.0.0-alpha.5.tgz#e6660de482f91773438c41273644db326ef7bd10" - integrity sha512-jFQ2pUBm86L90P+TYMBvxwzCsiP2+8SSaokv/z4gmtrbpiCzjMkUyoM17IWpfP95icCPTRO2QkTg7lpr4JMPSQ== +jest-circus@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.2.tgz#4551068e432f169a53167fe1aef420cf51c8a735" + integrity sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA== dependencies: - "@jest/environment" "^29.0.0-alpha.4" - "@jest/expect" "^29.0.0-alpha.5" - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + "@jest/environment" "^29.1.2" + "@jest/expect" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.0.0-alpha.4" - jest-matcher-utils "^29.0.0-alpha.4" - jest-message-util "^29.0.0-alpha.4" - jest-runtime "^29.0.0-alpha.5" - jest-snapshot "^29.0.0-alpha.5" - jest-util "^29.0.0-alpha.4" + jest-each "^29.1.2" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-runtime "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" p-limit "^3.1.0" - pretty-format "^29.0.0-alpha.4" + pretty-format "^29.1.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.0.0-alpha.5.tgz#a4b9f22580a3d482b6a23989439bbcdbcbabda19" - integrity sha512-cjhO2oa8BEgWQPGCQjwDgcOPQUt3CiBpKgWGHP78ZhvKXXafkYNmnnjvkYKuKKX1/TFnk4pyTSXE1nsAEGIYbA== +jest-cli@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.2.tgz#423b9c5d3ea20a50b1354b8bf3f2a20e72110e89" + integrity sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw== dependencies: - "@jest/core" "^29.0.0-alpha.5" - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + "@jest/core" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.0.0-alpha.5" - jest-util "^29.0.0-alpha.4" - jest-validate "^29.0.0-alpha.4" + jest-config "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.0.0-alpha.5.tgz#07bc61a730377a6b5d5b9e6910dd1a3fdb45bbc4" - integrity sha512-OYcpvKIw/E58h5m8oX8TK4l+115rMAGluJGm5/UqXwBYg+Nla3EwwW/VMWPtaUzeswXCw0lvS6DaNzHOP3Xbig== +jest-config@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.2.tgz#7d004345ca4c09f5d8f802355f54494e90842f4d" + integrity sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" - babel-jest "^29.0.0-alpha.5" + "@jest/test-sequencer" "^29.1.2" + "@jest/types" "^29.1.2" + babel-jest "^29.1.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.0.0-alpha.5" - jest-environment-node "^29.0.0-alpha.4" - jest-get-type "^29.0.0-alpha.3" - jest-regex-util "^29.0.0-alpha.3" - jest-resolve "^29.0.0-alpha.5" - jest-runner "^29.0.0-alpha.5" - jest-util "^29.0.0-alpha.4" - jest-validate "^29.0.0-alpha.4" + jest-circus "^29.1.2" + jest-environment-node "^29.1.2" + jest-get-type "^29.0.0" + jest-regex-util "^29.0.0" + jest-resolve "^29.1.2" + jest-runner "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.0.0-alpha.4" + pretty-format "^29.1.2" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -17070,69 +17070,69 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.0-alpha.4.tgz#af0df7cff23b5782254ec1a128b1ef39f2556a23" - integrity sha512-mo0STcllS+Y9Nfy8yPPQHqxw14VxmjITxX0YCkIcveNh4DwW3rtsFfXNFyTLG0VUFWii6fBl6yjqQD26QMA/VQ== +jest-diff@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.2.tgz#bb7aaf5353227d6f4f96c5e7e8713ce576a607dc" + integrity sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ== dependencies: chalk "^4.0.0" - diff-sequences "^29.0.0-alpha.3" - jest-get-type "^29.0.0-alpha.3" - pretty-format "^29.0.0-alpha.4" + diff-sequences "^29.0.0" + jest-get-type "^29.0.0" + pretty-format "^29.1.2" -jest-docblock@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.0.0-alpha.3.tgz#6fec7deb660713e446bf99946bfbf70ce710a8ab" - integrity sha512-qA7iesYq4EIitMwDB8+j2D0CKbj/tyeFjID9fC5pX8+fcqlJ/ecbN2Se3uAbBBtOS99tTcblprA2MJzlTcrgCw== +jest-docblock@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.0.0.tgz#3151bcc45ed7f5a8af4884dcc049aee699b4ceae" + integrity sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw== dependencies: detect-newline "^3.0.0" -jest-each@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.0.0-alpha.4.tgz#4a606e31911f933ec10c473c253af954f45dd306" - integrity sha512-/9b51h/5VqQgi4agyeWEVqsH1foflBiFecuEOI1dX6AIHZDw3sZMW+XNZbGYwquHvQtFyJJXYKA/HosR6yo6jA== +jest-each@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.2.tgz#d4c8532c07a846e79f194f7007ce7cb1987d1cd0" + integrity sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" chalk "^4.0.0" - jest-get-type "^29.0.0-alpha.3" - jest-util "^29.0.0-alpha.4" - pretty-format "^29.0.0-alpha.4" - -jest-environment-jsdom@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.0.0-alpha.4.tgz#23c51a1f2f28cfa2163491543465c43e67bb84c9" - integrity sha512-3U5YsCSyuWJxhq3Xp0sEs2PTp3mcEnnYRfkVuwP6tsigSlfLnZ6/vbdxqzVxCZ1mgKEoovOZMkBBixMHwQJXAQ== - dependencies: - "@jest/environment" "^29.0.0-alpha.4" - "@jest/fake-timers" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + jest-get-type "^29.0.0" + jest-util "^29.1.2" + pretty-format "^29.1.2" + +jest-environment-jsdom@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.1.2.tgz#59c5d7c53c999e1518cc2f1cd4ee19ab4b68eb68" + integrity sha512-D+XNIKia5+uDjSMwL/G1l6N9MCb7LymKI8FpcLo7kkISjc/Sa9w+dXXEa7u1Wijo3f8sVLqfxdGqYtRhmca+Xw== + dependencies: + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/jsdom" "^20.0.0" "@types/node" "*" - jest-mock "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" + jest-mock "^29.1.2" + jest-util "^29.1.2" jsdom "^20.0.0" -jest-environment-node@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.0.0-alpha.4.tgz#3e10199722f957b2531d2c0145201373eeb2454e" - integrity sha512-/5Raib0a9KDXcHY85vdzAdlSLKCa49wQW41JO2Fo8zxSu3bAyoQ0LoTCWBcf6QUHKdkpjlzwx3ddBdsHKjRFoQ== +jest-environment-node@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.2.tgz#005e05cc6ea4b9b5ba55906ab1ce53c82f6907a7" + integrity sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ== dependencies: - "@jest/environment" "^29.0.0-alpha.4" - "@jest/fake-timers" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-mock "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" + jest-mock "^29.1.2" + jest-util "^29.1.2" 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" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-get-type@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0-alpha.3.tgz#99cdc101e6725ad2615c3c0af1c476856205f93d" - integrity sha512-1pZtOPR0YZPGSr718qOvBR2OH1ZQjq6FmA1B5KHBghzHRUUSKty82/21fAhSk0fLkUJDeenva/7i7stTmCQpsw== +jest-get-type@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" + integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== jest-haste-map@^26.6.2: version "26.6.2" @@ -17155,20 +17155,20 @@ jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" -jest-haste-map@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.0.0-alpha.5.tgz#37f0af68b539bbf1df98ba41a1039053b81f24a6" - integrity sha512-iy1K4aQaviXSgjN+pePZvYLQQuIeifXTCs8rZcztlzAY6Fwp/2vD28oVjdyjU8U9IN35ctqbwRZpT+btiZIBdg== +jest-haste-map@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.2.tgz#93f3634aa921b6b654e7c94137b24e02e7ca6ac9" + integrity sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^29.0.0-alpha.3" - jest-util "^29.0.0-alpha.4" - jest-worker "^29.0.0-alpha.5" + jest-regex-util "^29.0.0" + jest-util "^29.1.2" + jest-worker "^29.1.2" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: @@ -17193,46 +17193,47 @@ jest-junit@^14.0.1: uuid "^8.3.2" xml "^1.0.1" -jest-leak-detector@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.0.0-alpha.4.tgz#a07483a16736a126e14227505c5d62abe9c16cc0" - integrity sha512-fpNxKOAvYEddZPBHaxkQ5AfNvNUaY/hkiLrstMjUr223OmeXlIBd1vq2b8DpjNGFYSq4jxZ4+M6KyPASwfFM9w== +jest-leak-detector@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz#4c846db14c58219430ccbc4f01a1ec52ebee4fc2" + integrity sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ== dependencies: - jest-get-type "^29.0.0-alpha.3" - pretty-format "^29.0.0-alpha.4" + jest-get-type "^29.0.0" + pretty-format "^29.1.2" -jest-matcher-utils@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.0-alpha.4.tgz#873b33d8a30f5b059d55b4e48d6a654632557de2" - integrity sha512-W8FGid9bp45CulR80SnGTthClKLoGocVlo5GXuAcpsGa3yLbuKoIRPZJ1xYCmE+xUDmffXY5sLK3RTRzKgk24A== +jest-matcher-utils@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz#e68c4bcc0266e70aa1a5c13fb7b8cd4695e318a1" + integrity sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw== dependencies: chalk "^4.0.0" - jest-diff "^29.0.0-alpha.4" - jest-get-type "^29.0.0-alpha.3" - pretty-format "^29.0.0-alpha.4" + jest-diff "^29.1.2" + jest-get-type "^29.0.0" + pretty-format "^29.1.2" -jest-message-util@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.0-alpha.4.tgz#b1d5d701b7d260dc7c8aa2fdf4c62b086d6aaa34" - integrity sha512-1rm6hSS/VkEpai2N+EGg8HMHanxVo0otC6hWFoCpAN6WBHGRbURy/Ok4TI5okFVE/iClh3QJW+nCB+VuGCBjiw== +jest-message-util@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.2.tgz#c21a33c25f9dc1ebfcd0f921d89438847a09a501" + integrity sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.0.0-alpha.4" + pretty-format "^29.1.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.0.0-alpha.4.tgz#4c7480bf5652b83a7021f91469992892396c4eb3" - integrity sha512-se8SALiOvteJhMBSUhI3MKrAyj66wT+FSSXS2EcDwq+CCQa9BQwxjHlLW34l8dK6K/qfxaVhXCJRfLDDTRCqjQ== +jest-mock@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.2.tgz#de47807edbb9d4abf8423f1d8d308d670105678c" + integrity sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" "@types/node" "*" + jest-util "^29.1.2" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -17244,86 +17245,86 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-regex-util@^29.0.0-alpha.3: - version "29.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0-alpha.3.tgz#be56b94f0cc4fcd785f12dcdf4be178fb5b80fb9" - integrity sha512-lPeBxm14mDlHOHpq+63Ljr5WIQ4eJ4Gs7TAVa4mqE+kOlGIg50yrgURI/moPhkDU8P8s/4NAi0Z1ODQ6ha9qkA== +jest-regex-util@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" + integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== -jest-resolve-dependencies@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.0-alpha.5.tgz#038fe257110a5fdb76db9dba89a98d4391cf8070" - integrity sha512-mssialfVRh2+jFySllvDmPa5BKd5KmTRUwpRKOunjJLwFDrEM7q6M0QExzDxBQ9OFJvHEfHf8YB8Q1jsyt2a4w== +jest-resolve-dependencies@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz#a6919e58a0c7465582cb8ec2d745b4e64ae8647f" + integrity sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ== dependencies: - jest-regex-util "^29.0.0-alpha.3" - jest-snapshot "^29.0.0-alpha.5" + jest-regex-util "^29.0.0" + jest-snapshot "^29.1.2" -jest-resolve@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.0.0-alpha.5.tgz#82eda6b89eb20a8eb103b377ba750a40250a8a08" - integrity sha512-vGIXSdqwyYa7TrFMVnmSadxOkTG0+cmkZKT23wknC3ZFh6RofKF6dcDREaBnZcCFj2gMNqdXEOnoMTjvCKIIMw== +jest-resolve@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.2.tgz#9dd8c2fc83e59ee7d676b14bd45a5f89e877741d" + integrity sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.0-alpha.5" + jest-haste-map "^29.1.2" jest-pnp-resolver "^1.2.2" - jest-util "^29.0.0-alpha.4" - jest-validate "^29.0.0-alpha.4" + jest-util "^29.1.2" + jest-validate "^29.1.2" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.0.0-alpha.5.tgz#7bf81fc22826b11ccca6d187e886606963cf9e60" - integrity sha512-I1g+eO5ZIpv0CxOtkjMFB3yfVqEIWm8UIiS2vJxJ2xar7bIsKguheoL5wlMvZi9FBsB0R+AkBYNNMa5Ct0kQqA== +jest-runner@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.2.tgz#f18b2b86101341e047de8c2f51a5fdc4e97d053a" + integrity sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q== dependencies: - "@jest/console" "^29.0.0-alpha.4" - "@jest/environment" "^29.0.0-alpha.4" - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/transform" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" + "@jest/console" "^29.1.2" + "@jest/environment" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" - jest-docblock "^29.0.0-alpha.3" - jest-environment-node "^29.0.0-alpha.4" - jest-haste-map "^29.0.0-alpha.5" - jest-leak-detector "^29.0.0-alpha.4" - jest-message-util "^29.0.0-alpha.4" - jest-resolve "^29.0.0-alpha.5" - jest-runtime "^29.0.0-alpha.5" - jest-util "^29.0.0-alpha.4" - jest-watcher "^29.0.0-alpha.4" - jest-worker "^29.0.0-alpha.5" + jest-docblock "^29.0.0" + jest-environment-node "^29.1.2" + jest-haste-map "^29.1.2" + jest-leak-detector "^29.1.2" + jest-message-util "^29.1.2" + jest-resolve "^29.1.2" + jest-runtime "^29.1.2" + jest-util "^29.1.2" + jest-watcher "^29.1.2" + jest-worker "^29.1.2" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.0.0-alpha.5.tgz#0ffaf3b803b1693cec1c9247381570ecd9754c65" - integrity sha512-P5bt+UFLiLVR7uXxZWjo+0YoIeWbi04I5il5G1dPoPWIhXZ/Ag6FEjU8Mf83pjLr8rUxDUvCvI0e2EEC+G/9iQ== - dependencies: - "@jest/environment" "^29.0.0-alpha.4" - "@jest/fake-timers" "^29.0.0-alpha.4" - "@jest/globals" "^29.0.0-alpha.5" - "@jest/source-map" "^29.0.0-alpha.5" - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/transform" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" +jest-runtime@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.2.tgz#dbcd57103d61115479108d5864bdcd661d9c6783" + integrity sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw== + dependencies: + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/globals" "^29.1.2" + "@jest/source-map" "^29.0.0" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.0.0-alpha.5" - jest-message-util "^29.0.0-alpha.4" - jest-mock "^29.0.0-alpha.4" - jest-regex-util "^29.0.0-alpha.3" - jest-resolve "^29.0.0-alpha.5" - jest-snapshot "^29.0.0-alpha.5" - jest-util "^29.0.0-alpha.4" + jest-haste-map "^29.1.2" + jest-message-util "^29.1.2" + jest-mock "^29.1.2" + jest-regex-util "^29.0.0" + jest-resolve "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" slash "^3.0.0" strip-bom "^4.0.0" @@ -17335,33 +17336,34 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.0.0-alpha.5.tgz#5643bc0774cfd577231f37c50b52d138f92b24da" - integrity sha512-2izwyvAi6E+KCbt/glgazO4NxZnisq9Z339JnjIwWAysbSr8SpiJpfIlTiIIb61xkmnfpYpHf3bwgbBrpDq2ig== +jest-snapshot@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.2.tgz#7dd277e88c45f2d2ff5888de1612e63c7ceb575b" + integrity sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.0.0-alpha.4" - "@jest/transform" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" + "@jest/expect-utils" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.0.0-alpha.4" + expect "^29.1.2" graceful-fs "^4.2.9" - jest-diff "^29.0.0-alpha.4" - jest-get-type "^29.0.0-alpha.3" - jest-haste-map "^29.0.0-alpha.5" - jest-matcher-utils "^29.0.0-alpha.4" - jest-message-util "^29.0.0-alpha.4" - jest-util "^29.0.0-alpha.4" + jest-diff "^29.1.2" + jest-get-type "^29.0.0" + jest-haste-map "^29.1.2" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-util "^29.1.2" natural-compare "^1.4.0" - pretty-format "^29.0.0-alpha.4" + pretty-format "^29.1.2" semver "^7.3.5" jest-util@^26.6.2: @@ -17376,42 +17378,42 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.0-alpha.4.tgz#234df349f1d4bf676c1a3a6cd4eb389bc0eb00cf" - integrity sha512-iF0ViQzzC/FNE97oYMz61hL/ZmpJmYpzCpc5Z3ieoirCymtBdirjM+ipJldFpzhj0RttsQqdp6sXtGo48M0dNw== +jest-util@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.2.tgz#ac5798e93cb6a6703084e194cfa0898d66126df1" + integrity sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.0.0-alpha.4.tgz#f451455f9b0a0d55ba1422764fe6e40ceb3a1fcb" - integrity sha512-SiYYWfIliXjCKoCykFQxObqO501rTB/Id2mD38YzPYSoIGoSgf+iNx3msDiIuqVBh+r0dqlympHUO8YErXcZJA== +jest-validate@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.2.tgz#83a728b8f6354da2e52346878c8bc7383516ca51" + integrity sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA== dependencies: - "@jest/types" "^29.0.0-alpha.4" + "@jest/types" "^29.1.2" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.0.0-alpha.3" + jest-get-type "^29.0.0" leven "^3.1.0" - pretty-format "^29.0.0-alpha.4" + pretty-format "^29.1.2" -jest-watcher@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.0.0-alpha.4.tgz#72c9f72c53eb09cab1eb3a64cafc60563ba01858" - integrity sha512-s9szd+N6l/kqb+lMaSG3FcLKeg0S7vrUXsfU62LuRexdl4daGbqMpjaRVZ4fCN6owuDuuQLWXjtvLYImN6ZbMg== +jest-watcher@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.2.tgz#de21439b7d889e2fcf62cc2a4779ef1a3f1f3c62" + integrity sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w== dependencies: - "@jest/test-result" "^29.0.0-alpha.4" - "@jest/types" "^29.0.0-alpha.4" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^29.0.0-alpha.4" + jest-util "^29.1.2" string-length "^4.0.1" jest-worker@^26.5.0, jest-worker@^26.6.2: @@ -17432,24 +17434,25 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.0.0-alpha.5.tgz#72ac6c2c0f157008a11b58ac31d02c951e0fa285" - integrity sha512-DM6rCc+fpl49Buun6IRO9g4eEDgYVra3r0xsy/Rm7cb2ycazaGOXZIqzqV3dSDMVe6uaGszlDk5OONn3OwtIRw== +jest-worker@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.2.tgz#a68302af61bce82b42a9a57285ca7499d29b2afc" + integrity sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA== dependencies: "@types/node" "*" + jest-util "^29.1.2" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.0.0-alpha.5: - version "29.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.0.0-alpha.5.tgz#aac7a499c2aa279ee28ff50959e7a54bdb36c380" - integrity sha512-ALrHqBWttJqP4igLUAhE3iM42BqLM9z7oSFl9J/gpBw6sAVrV6M/V8XArvHlexfsS73IYMFNOjoPtSD5iQh+0w== +jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.2.tgz#f821a1695ffd6cd0efc3b59d2dfcc70a98582499" + integrity sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw== dependencies: - "@jest/core" "^29.0.0-alpha.5" - "@jest/types" "^29.0.0-alpha.4" + "@jest/core" "^29.1.2" + "@jest/types" "^29.1.2" import-local "^3.0.2" - jest-cli "^29.0.0-alpha.5" + jest-cli "^29.1.2" jmespath@^0.15.0: version "0.15.0" @@ -22923,12 +22926,12 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^29.0.0-alpha.4: - version "29.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.0-alpha.4.tgz#a185eeef2831a3986459b4b23fdc5ecacb844a87" - integrity sha512-9EWTLT9Wsid/x4EX6En0YEbK4pbqpfPs60X44V7a61EePm2WXfJcoRmFfBQsgqSYRQMeiSV/T3dB0Jv0F1aZ1g== +pretty-format@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.2.tgz#b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a" + integrity sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg== dependencies: - "@jest/schemas" "^29.0.0-alpha.3" + "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" react-is "^18.0.0" From c8067e93518ace6d2472f026e94672b457bafb3a Mon Sep 17 00:00:00 2001 From: Daniel <80175477+dan437@users.noreply.github.com> Date: Tue, 4 Oct 2022 18:55:05 +0200 Subject: [PATCH 009/104] Add more unit / integration tests for Swaps (#16040) --- jest.config.js | 2 +- test/jest/mock-store.js | 17 +- ui/ducks/swaps/swaps.js | 2 +- ui/ducks/swaps/swaps.test.js | 708 +++++++++++++++++- .../__snapshots__/awaiting-swap.test.js.snap | 2 +- ui/pages/swaps/awaiting-swap/awaiting-swap.js | 1 + .../swaps/awaiting-swap/awaiting-swap.test.js | 128 +++- ui/pages/swaps/build-quote/build-quote.js | 54 +- .../swaps/build-quote/build-quote.test.js | 120 ++- .../create-new-swap/create-new-swap.test.js | 53 ++ .../dropdown-input-pair.test.js | 15 + .../dropdown-search-list.test.js.snap | 1 + .../dropdown-search-list.js | 4 + .../dropdown-search-list.test.js | 19 + .../exchange-rate-display.test.js.snap | 2 + .../exchange-rate-display.js | 2 + .../exchange-rate-display.test.js | 16 +- .../__snapshots__/fee-card.test.js.snap | 29 + ui/pages/swaps/fee-card/fee-card.js | 2 + ui/pages/swaps/fee-card/fee-card.test.js | 22 + .../main-quote-summary.test.js.snap | 2 + .../searchable-item-list.test.js.snap | 1 + .../item-list.component.test.js.snap | 47 ++ .../item-list/item-list.component.js | 2 + .../item-list/item-list.component.test.js | 82 ++ .../list-item-search.component.test.js | 107 +++ .../quote-details/quote-details.test.js | 33 + .../__snapshots__/sort-list.test.js.snap | 4 + .../sort-list/sort-list.js | 5 + .../sort-list/sort-list.test.js | 30 +- .../slippage-buttons.test.js.snap | 4 +- .../slippage-buttons/slippage-buttons.js | 1 + .../slippage-buttons/slippage-buttons.test.js | 85 ++- .../smart-transaction-status.test.js | 129 ++++ .../swaps/swaps-footer/swaps-footer.test.js | 13 +- ui/pages/swaps/swaps.util.test.js | 51 +- .../view-on-block-explorer.test.js | 15 +- .../__snapshots__/view-quote.test.js.snap | 4 + ui/pages/swaps/view-quote/view-quote.js | 104 +-- 39 files changed, 1799 insertions(+), 119 deletions(-) create mode 100644 ui/pages/swaps/searchable-item-list/item-list/__snapshots__/item-list.component.test.js.snap create mode 100644 ui/pages/swaps/searchable-item-list/item-list/item-list.component.test.js create mode 100644 ui/pages/swaps/searchable-item-list/list-item-search/list-item-search.component.test.js create mode 100644 ui/pages/swaps/select-quote-popover/quote-details/quote-details.test.js diff --git a/jest.config.js b/jest.config.js index 38f289e50..1f687bb81 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,7 +11,7 @@ module.exports = { coverageThreshold: { global: { branches: 44, - functions: 42, + functions: 46.8, lines: 52, statements: 52, }, diff --git a/test/jest/mock-store.js b/test/jest/mock-store.js index 54345e831..334d3fe85 100644 --- a/test/jest/mock-store.js +++ b/test/jest/mock-store.js @@ -120,6 +120,13 @@ export const createSwapsMockStore = () => { }, }, fromToken: 'ETH', + toToken: { + symbol: 'USDC', + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + occurances: 4, + }, + currentSmartTransactionsErrorMessageDismissed: false, + swapsSTXLoading: false, }, metamask: { networkDetails: { @@ -314,10 +321,10 @@ export const createSwapsMockStore = () => { fetchParams: { metaData: { sourceTokenInfo: { - symbol: 'BAT', + symbol: 'ETH', }, destinationTokenInfo: { - symbol: 'ETH', + symbol: 'USDC', }, }, }, @@ -326,6 +333,10 @@ export const createSwapsMockStore = () => { quotesLastFetched: 1519211809934, swapsQuoteRefreshTime: 60000, swapsQuotePrefetchingRefreshTime: 60000, + swapsStxBatchStatusRefreshTime: 5000, + swapsStxGetTransactionsRefreshTime: 5000, + swapsStxMaxFeeMultiplier: 1.5, + swapsStxStatusDeadline: 150000, customMaxGas: '', customGasPrice: null, selectedAggId: 'TEST_AGG_2', @@ -412,6 +423,7 @@ export const createSwapsMockStore = () => { { uuid: 'uuid2', status: 'success', + cancellable: false, statusMetadata: { cancellationFeeWei: 36777567771000, cancellationReason: 'not_cancelled', @@ -424,6 +436,7 @@ export const createSwapsMockStore = () => { { uuid: 'uuid2', status: 'pending', + cancellable: true, statusMetadata: { cancellationFeeWei: 36777567771000, cancellationReason: 'not_cancelled', diff --git a/ui/ducks/swaps/swaps.js b/ui/ducks/swaps/swaps.js index 0cfc8ae76..87303d980 100644 --- a/ui/ducks/swaps/swaps.js +++ b/ui/ducks/swaps/swaps.js @@ -92,7 +92,7 @@ import { hexWEIToDecGWEI, } from '../../../shared/lib/transactions-controller-utils'; -const GAS_PRICES_LOADING_STATES = { +export const GAS_PRICES_LOADING_STATES = { INITIAL: 'INITIAL', LOADING: 'LOADING', FAILED: 'FAILED', diff --git a/ui/ducks/swaps/swaps.test.js b/ui/ducks/swaps/swaps.test.js index e103ed37b..547fa2af1 100644 --- a/ui/ducks/swaps/swaps.test.js +++ b/ui/ducks/swaps/swaps.test.js @@ -1,10 +1,14 @@ import nock from 'nock'; +import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; import { MOCKS, createSwapsMockStore } from '../../../test/jest'; import { setSwapsLiveness, setSwapsFeatureFlags } from '../../store/actions'; import { CHAIN_IDS } from '../../../shared/constants/network'; import { setStorageItem } from '../../../shared/lib/storage-helpers'; -import * as swaps from './swaps'; +import swapsReducer, * as swaps from './swaps'; + +const middleware = [thunk]; jest.mock('../../store/actions.js', () => ({ setSwapsLiveness: jest.fn(), @@ -176,36 +180,200 @@ describe('Ducks - Swaps', () => { }); }); - describe('getCustomSwapsGas', () => { - it('returns "customMaxGas"', () => { + describe('getCustomMaxPriorityFeePerGas', () => { + it('returns "customMaxPriorityFeePerGas"', () => { const state = createSwapsMockStore(); - const customMaxGas = '29000'; - state.metamask.swapsState.customMaxGas = customMaxGas; - expect(swaps.getCustomSwapsGas(state)).toBe(customMaxGas); + const customMaxPriorityFeePerGas = '3'; + state.metamask.swapsState.customMaxPriorityFeePerGas = + customMaxPriorityFeePerGas; + expect(swaps.getCustomMaxPriorityFeePerGas(state)).toBe( + customMaxPriorityFeePerGas, + ); }); }); - describe('getCustomMaxFeePerGas', () => { - it('returns "customMaxFeePerGas"', () => { + describe('getAggregatorMetadata', () => { + it('returns agg metadata', () => { const state = createSwapsMockStore(); - const customMaxFeePerGas = '20'; - state.metamask.swapsState.customMaxFeePerGas = customMaxFeePerGas; - expect(swaps.getCustomMaxFeePerGas(state)).toBe(customMaxFeePerGas); + expect(swaps.getAggregatorMetadata(state)).toBe( + state.swaps.aggregatorMetadata, + ); }); }); - describe('getCustomMaxPriorityFeePerGas', () => { - it('returns "customMaxPriorityFeePerGas"', () => { + describe('getBalanceError', () => { + it('returns a balance error', () => { const state = createSwapsMockStore(); - const customMaxPriorityFeePerGas = '3'; - state.metamask.swapsState.customMaxPriorityFeePerGas = - customMaxPriorityFeePerGas; - expect(swaps.getCustomMaxPriorityFeePerGas(state)).toBe( - customMaxPriorityFeePerGas, + state.swaps.balanceError = 'balanceError'; + expect(swaps.getBalanceError(state)).toBe(state.swaps.balanceError); + }); + }); + + describe('getFromToken', () => { + it('returns fromToken', () => { + const state = createSwapsMockStore(); + expect(swaps.getFromToken(state)).toBe(state.swaps.fromToken); + }); + }); + + describe('getFromTokenError', () => { + it('returns fromTokenError', () => { + const state = createSwapsMockStore(); + state.swaps.fromTokenError = 'fromTokenError'; + expect(swaps.getFromTokenError(state)).toBe(state.swaps.fromTokenError); + }); + }); + + describe('getFromTokenInputValue', () => { + it('returns fromTokenInputValue', () => { + const state = createSwapsMockStore(); + expect(swaps.getFromTokenInputValue(state)).toBe( + state.swaps.fromTokenInputValue, + ); + }); + }); + + describe('getIsFeatureFlagLoaded', () => { + it('returns isFeatureFlagLoaded', () => { + const state = createSwapsMockStore(); + expect(swaps.getIsFeatureFlagLoaded(state)).toBe( + state.swaps.isFeatureFlagLoaded, + ); + }); + }); + + describe('getSwapsSTXLoading', () => { + it('returns swapsSTXLoading', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsSTXLoading(state)).toBe(state.swaps.swapsSTXLoading); + }); + }); + + describe('getMaxSlippage', () => { + it('returns maxSlippage', () => { + const state = createSwapsMockStore(); + expect(swaps.getMaxSlippage(state)).toBe(state.swaps.maxSlippage); + }); + }); + + describe('getTopAssets', () => { + it('returns topAssets', () => { + const state = createSwapsMockStore(); + expect(swaps.getTopAssets(state)).toBe(state.swaps.topAssets); + }); + }); + + describe('getToToken', () => { + it('returns toToken', () => { + const state = createSwapsMockStore(); + expect(swaps.getToToken(state)).toBe(state.swaps.toToken); + }); + }); + + describe('getFetchingQuotes', () => { + it('returns fetchingQuotes', () => { + const state = createSwapsMockStore(); + expect(swaps.getFetchingQuotes(state)).toBe(state.swaps.fetchingQuotes); + }); + }); + + describe('getQuotesFetchStartTime', () => { + it('returns quotesFetchStartTime', () => { + const state = createSwapsMockStore(); + expect(swaps.getQuotesFetchStartTime(state)).toBe( + state.swaps.quotesFetchStartTime, + ); + }); + }); + + describe('getReviewSwapClickedTimestamp', () => { + it('returns reviewSwapClickedTimestamp', () => { + const state = createSwapsMockStore(); + expect(swaps.getReviewSwapClickedTimestamp(state)).toBe( + state.swaps.reviewSwapClickedTimestamp, + ); + }); + }); + + describe('getSwapsCustomizationModalPrice', () => { + it('returns customGas.price', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsCustomizationModalPrice(state)).toBe( + state.swaps.customGas.price, + ); + }); + }); + + describe('getSwapsCustomizationModalLimit', () => { + it('returns customGas.limit', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsCustomizationModalLimit(state)).toBe( + state.swaps.customGas.limit, + ); + }); + }); + + describe('swapGasPriceEstimateIsLoading', () => { + it('returns true for swapGasPriceEstimateIsLoading', () => { + const state = createSwapsMockStore(); + state.swaps.customGas.loading = swaps.GAS_PRICES_LOADING_STATES.LOADING; + expect(swaps.swapGasPriceEstimateIsLoading(state)).toBe(true); + }); + }); + + describe('swapGasEstimateLoadingHasFailed', () => { + it('returns true for swapGasEstimateLoadingHasFailed', () => { + const state = createSwapsMockStore(); + state.swaps.customGas.loading = swaps.GAS_PRICES_LOADING_STATES.INITIAL; + expect(swaps.swapGasEstimateLoadingHasFailed(state)).toBe(true); + }); + }); + + describe('getSwapGasPriceEstimateData', () => { + it('returns customGas.priceEstimates', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapGasPriceEstimateData(state)).toBe( + state.swaps.customGas.priceEstimates, + ); + }); + }); + + describe('getSwapsFallbackGasPrice', () => { + it('returns customGas.fallBackPrice', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsFallbackGasPrice(state)).toBe( + state.swaps.customGas.fallBackPrice, + ); + }); + }); + + describe('getCurrentSmartTransactionsError', () => { + it('returns currentSmartTransactionsError', () => { + const state = createSwapsMockStore(); + state.swaps.currentSmartTransactionsError = + 'currentSmartTransactionsError'; + expect(swaps.getCurrentSmartTransactionsError(state)).toBe( + state.swaps.currentSmartTransactionsError, ); }); }); + describe('getCurrentSmartTransactionsErrorMessageDismissed', () => { + it('returns currentSmartTransactionsErrorMessageDismissed', () => { + const state = createSwapsMockStore(); + expect( + swaps.getCurrentSmartTransactionsErrorMessageDismissed(state), + ).toBe(state.swaps.currentSmartTransactionsErrorMessageDismissed); + }); + }); + + describe('shouldShowCustomPriceTooLowWarning', () => { + it('returns false for showCustomPriceTooLowWarning', () => { + const state = createSwapsMockStore(); + expect(swaps.shouldShowCustomPriceTooLowWarning(state)).toBe(false); + }); + }); + describe('getSwapsFeatureIsLive', () => { it('returns true for "swapsFeatureIsLive"', () => { const state = createSwapsMockStore(); @@ -222,19 +390,22 @@ describe('Ducks - Swaps', () => { }); }); - describe('getUsedQuote', () => { - it('returns selected quote', () => { + describe('getSmartTransactionsError', () => { + it('returns smartTransactionsError', () => { const state = createSwapsMockStore(); - expect(swaps.getUsedQuote(state)).toMatchObject( - state.metamask.swapsState.quotes.TEST_AGG_2, + state.appState.smartTransactionsError = 'stxError'; + expect(swaps.getSmartTransactionsError(state)).toBe( + state.appState.smartTransactionsError, ); }); + }); - it('returns best quote', () => { + describe('getSmartTransactionsErrorMessageDismissed', () => { + it('returns smartTransactionsErrorMessageDismissed', () => { const state = createSwapsMockStore(); - state.metamask.swapsState.selectedAggId = null; - expect(swaps.getUsedQuote(state)).toMatchObject( - state.metamask.swapsState.quotes.TEST_AGG_BEST, + state.appState.smartTransactionsErrorMessageDismissed = true; + expect(swaps.getSmartTransactionsErrorMessageDismissed(state)).toBe( + state.appState.smartTransactionsErrorMessageDismissed, ); }); }); @@ -288,6 +459,234 @@ describe('Ducks - Swaps', () => { }); }); + describe('getCurrentSmartTransactionsEnabled', () => { + it('returns true if STX are enabled and there is no current STX error', () => { + const state = createSwapsMockStore(); + expect(swaps.getCurrentSmartTransactionsEnabled(state)).toBe(true); + }); + + it('returns false if STX are enabled and there is an current STX error', () => { + const state = createSwapsMockStore(); + state.swaps.currentSmartTransactionsError = + 'currentSmartTransactionsError'; + expect(swaps.getCurrentSmartTransactionsEnabled(state)).toBe(false); + }); + }); + + describe('getSwapsQuoteRefreshTime', () => { + it('returns swapsQuoteRefreshTime', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsQuoteRefreshTime(state)).toBe( + state.metamask.swapsState.swapsQuoteRefreshTime, + ); + }); + }); + + describe('getSwapsQuotePrefetchingRefreshTime', () => { + it('returns swapsQuotePrefetchingRefreshTime', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsQuotePrefetchingRefreshTime(state)).toBe( + state.metamask.swapsState.swapsQuotePrefetchingRefreshTime, + ); + }); + }); + + describe('getBackgroundSwapRouteState', () => { + it('returns routeState', () => { + const state = createSwapsMockStore(); + expect(swaps.getBackgroundSwapRouteState(state)).toBe( + state.metamask.swapsState.routeState, + ); + }); + }); + + describe('getCustomSwapsGas', () => { + it('returns "customMaxGas"', () => { + const state = createSwapsMockStore(); + const customMaxGas = '29000'; + state.metamask.swapsState.customMaxGas = customMaxGas; + expect(swaps.getCustomSwapsGas(state)).toBe(customMaxGas); + }); + }); + + describe('getCustomSwapsGasPrice', () => { + it('returns customGasPrice', () => { + const state = createSwapsMockStore(); + expect(swaps.getCustomSwapsGasPrice(state)).toBe( + state.metamask.swapsState.customGasPrice, + ); + }); + }); + + describe('getCustomMaxFeePerGas', () => { + it('returns "customMaxFeePerGas"', () => { + const state = createSwapsMockStore(); + const customMaxFeePerGas = '20'; + state.metamask.swapsState.customMaxFeePerGas = customMaxFeePerGas; + expect(swaps.getCustomMaxFeePerGas(state)).toBe(customMaxFeePerGas); + }); + }); + + describe('getSwapsUserFeeLevel', () => { + it('returns swapsUserFeeLevel', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsUserFeeLevel(state)).toBe( + state.metamask.swapsState.swapsUserFeeLevel, + ); + }); + }); + + describe('getFetchParams', () => { + it('returns fetchParams', () => { + const state = createSwapsMockStore(); + expect(swaps.getFetchParams(state)).toBe( + state.metamask.swapsState.fetchParams, + ); + }); + }); + + describe('getQuotes', () => { + it('returns quotes for Swaps', () => { + const state = createSwapsMockStore(); + expect(swaps.getQuotes(state)).toBe(state.metamask.swapsState.quotes); + }); + }); + + describe('getQuotesLastFetched', () => { + it('returns quotesLastFetched', () => { + const state = createSwapsMockStore(); + expect(swaps.getQuotesLastFetched(state)).toBe( + state.metamask.swapsState.quotesLastFetched, + ); + }); + }); + + describe('getSelectedQuote', () => { + it('returns selected quote', () => { + const state = createSwapsMockStore(); + expect(swaps.getSelectedQuote(state)).toBe( + state.metamask.swapsState.quotes.TEST_AGG_2, + ); + }); + }); + + describe('getSwapsErrorKey', () => { + it('returns errorKey', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsErrorKey(state)).toBe( + state.metamask.swapsState.errorKey, + ); + }); + }); + + describe('getShowQuoteLoadingScreen', () => { + it('returns showQuoteLoadingScreen', () => { + const state = createSwapsMockStore(); + expect(swaps.getShowQuoteLoadingScreen(state)).toBe( + state.swaps.showQuoteLoadingScreen, + ); + }); + }); + + describe('getSwapsTokens', () => { + it('returns tokens', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsTokens(state)).toBe( + state.metamask.swapsState.tokens, + ); + }); + }); + + describe('getSwapsWelcomeMessageSeenStatus', () => { + it('returns', () => { + const state = createSwapsMockStore(); + expect(swaps.getSwapsWelcomeMessageSeenStatus(state)).toBe( + state.metamask.swapsState.swapsWelcomeMessageHasBeenShown, + ); + }); + }); + + describe('getTopQuote', () => { + it('returns a top quote', () => { + const state = createSwapsMockStore(); + expect(swaps.getTopQuote(state)).toBe( + state.metamask.swapsState.quotes.TEST_AGG_BEST, + ); + }); + }); + + describe('getApproveTxId', () => { + it('returns approveTxId', () => { + const state = createSwapsMockStore(); + expect(swaps.getApproveTxId(state)).toBe( + state.metamask.swapsState.approveTxId, + ); + }); + }); + + describe('getTradeTxId', () => { + it('returns tradeTxId', () => { + const state = createSwapsMockStore(); + expect(swaps.getTradeTxId(state)).toBe( + state.metamask.swapsState.tradeTxId, + ); + }); + }); + + describe('getUsedQuote', () => { + it('returns selected quote', () => { + const state = createSwapsMockStore(); + expect(swaps.getUsedQuote(state)).toMatchObject( + state.metamask.swapsState.quotes.TEST_AGG_2, + ); + }); + + it('returns best quote', () => { + const state = createSwapsMockStore(); + state.metamask.swapsState.selectedAggId = null; + expect(swaps.getUsedQuote(state)).toMatchObject( + state.metamask.swapsState.quotes.TEST_AGG_BEST, + ); + }); + }); + + describe('getDestinationTokenInfo', () => { + it('returns destinationTokenInfo', () => { + const state = createSwapsMockStore(); + expect(swaps.getDestinationTokenInfo(state)).toBe( + state.metamask.swapsState.fetchParams.metaData.destinationTokenInfo, + ); + }); + }); + + describe('getUsedSwapsGasPrice', () => { + it('returns customGasPrice', () => { + const state = createSwapsMockStore(); + state.metamask.swapsState.customGasPrice = 5; + expect(swaps.getUsedSwapsGasPrice(state)).toBe( + state.metamask.swapsState.customGasPrice, + ); + }); + }); + + describe('getApproveTxParams', () => { + it('returns approveTxParams', () => { + const state = createSwapsMockStore(); + state.metamask.swapsState.quotes.TEST_AGG_2.approvalNeeded = { + data: '0x095ea7b300000000000000000000000095e6f48254609a6ee006f7d493c8e5fb97094cef0000000000000000000000000000000000000000004a817c7ffffffdabf41c00', + to: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + value: '0x0', + from: '0x2369267687A84ac7B494daE2f1542C40E37f4455', + gas: '0x12', + gasPrice: '0x34', + }; + expect(swaps.getApproveTxParams(state)).toMatchObject({ + ...state.metamask.swapsState.quotes.TEST_AGG_2.approvalNeeded, + gasPrice: 5, + }); + }); + }); + describe('getSmartTransactionsOptInStatus', () => { it('returns STX opt in status', () => { const state = createSwapsMockStore(); @@ -325,4 +724,261 @@ describe('Ducks - Swaps', () => { ); }); }); + + describe('getSmartTransactionEstimatedGas', () => { + it('returns unsigned transactions and estimates', () => { + const state = createSwapsMockStore(); + const smartTransactionFees = swaps.getSmartTransactionEstimatedGas(state); + expect(smartTransactionFees).toBe( + state.metamask.smartTransactionsState.estimatedGas, + ); + }); + }); + + describe('getSwapsNetworkConfig', () => { + it('returns Swaps network config', () => { + const state = createSwapsMockStore(); + const { + swapsQuoteRefreshTime, + swapsQuotePrefetchingRefreshTime, + swapsStxGetTransactionsRefreshTime, + swapsStxBatchStatusRefreshTime, + swapsStxStatusDeadline, + swapsStxMaxFeeMultiplier, + } = state.metamask.swapsState; + const swapsNetworkConfig = swaps.getSwapsNetworkConfig(state); + expect(swapsNetworkConfig).toMatchObject({ + quoteRefreshTime: swapsQuoteRefreshTime, + quotePrefetchingRefreshTime: swapsQuotePrefetchingRefreshTime, + stxGetTransactionsRefreshTime: swapsStxGetTransactionsRefreshTime, + stxBatchStatusRefreshTime: swapsStxBatchStatusRefreshTime, + stxStatusDeadline: swapsStxStatusDeadline, + stxMaxFeeMultiplier: swapsStxMaxFeeMultiplier, + }); + }); + }); + + describe('actions + reducers', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + + afterEach(() => { + store.clearActions(); + }); + + describe('clearSwapsState', () => { + it('calls the "swaps/clearSwapsState" action', () => { + store.dispatch(swaps.clearSwapsState()); + const actions = store.getActions(); + expect(actions).toHaveLength(1); + expect(actions[0].type).toBe('swaps/clearSwapsState'); + }); + }); + + describe('dismissCurrentSmartTransactionsErrorMessage', () => { + it('calls the "swaps/dismissCurrentSmartTransactionsErrorMessage" action', () => { + const state = store.getState().swaps; + store.dispatch(swaps.dismissCurrentSmartTransactionsErrorMessage()); + const actions = store.getActions(); + expect(actions[0].type).toBe( + 'swaps/dismissCurrentSmartTransactionsErrorMessage', + ); + const newState = swapsReducer(state, actions[0]); + expect(newState.currentSmartTransactionsErrorMessageDismissed).toBe( + true, + ); + }); + }); + + describe('setAggregatorMetadata', () => { + it('calls the "swaps/setAggregatorMetadata" action', () => { + const state = store.getState().swaps; + const actionPayload = { + name: 'agg1', + }; + store.dispatch(swaps.setAggregatorMetadata(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setAggregatorMetadata'); + const newState = swapsReducer(state, actions[0]); + expect(newState.aggregatorMetadata).toBe(actionPayload); + }); + }); + + describe('setBalanceError', () => { + it('calls the "swaps/setBalanceError" action', () => { + const state = store.getState().swaps; + const actionPayload = 'balanceError'; + store.dispatch(swaps.setBalanceError(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setBalanceError'); + const newState = swapsReducer(state, actions[0]); + expect(newState.balanceError).toBe(actionPayload); + }); + }); + + describe('setFetchingQuotes', () => { + it('calls the "swaps/setFetchingQuotes" action', () => { + const state = store.getState().swaps; + const actionPayload = true; + store.dispatch(swaps.setFetchingQuotes(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setFetchingQuotes'); + const newState = swapsReducer(state, actions[0]); + expect(newState.fetchingQuotes).toBe(actionPayload); + }); + }); + + describe('setSwapsFromToken', () => { + it('calls the "swaps/setFromToken" action', () => { + const state = store.getState().swaps; + const actionPayload = 'ETH'; + store.dispatch(swaps.setSwapsFromToken(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setFromToken'); + const newState = swapsReducer(state, actions[0]); + expect(newState.fromToken).toBe(actionPayload); + }); + }); + + describe('setFromTokenError', () => { + it('calls the "swaps/setFromTokenError" action', () => { + const state = store.getState().swaps; + const actionPayload = 'fromTokenError'; + store.dispatch(swaps.setFromTokenError(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setFromTokenError'); + const newState = swapsReducer(state, actions[0]); + expect(newState.fromTokenError).toBe(actionPayload); + }); + }); + + describe('setFromTokenInputValue', () => { + it('calls the "swaps/setFromTokenInputValue" action', () => { + const state = store.getState().swaps; + const actionPayload = '5'; + store.dispatch(swaps.setFromTokenInputValue(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setFromTokenInputValue'); + const newState = swapsReducer(state, actions[0]); + expect(newState.fromTokenInputValue).toBe(actionPayload); + }); + }); + + describe('setIsFeatureFlagLoaded', () => { + it('calls the "swaps/setIsFeatureFlagLoaded" action', () => { + const state = store.getState().swaps; + const actionPayload = true; + store.dispatch(swaps.setIsFeatureFlagLoaded(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setIsFeatureFlagLoaded'); + const newState = swapsReducer(state, actions[0]); + expect(newState.isFeatureFlagLoaded).toBe(actionPayload); + }); + }); + + describe('setMaxSlippage', () => { + it('calls the "swaps/setMaxSlippage" action', () => { + const state = store.getState().swaps; + const actionPayload = 3; + store.dispatch(swaps.setMaxSlippage(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setMaxSlippage'); + const newState = swapsReducer(state, actions[0]); + expect(newState.maxSlippage).toBe(actionPayload); + }); + }); + + describe('setSwapQuotesFetchStartTime', () => { + it('calls the "swaps/setQuotesFetchStartTime" action', () => { + const state = store.getState().swaps; + const actionPayload = '1664461886'; + store.dispatch(swaps.setSwapQuotesFetchStartTime(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setQuotesFetchStartTime'); + const newState = swapsReducer(state, actions[0]); + expect(newState.quotesFetchStartTime).toBe(actionPayload); + }); + }); + + describe('setReviewSwapClickedTimestamp', () => { + it('calls the "swaps/setReviewSwapClickedTimestamp" action', () => { + const state = store.getState().swaps; + const actionPayload = '1664461886'; + store.dispatch(swaps.setReviewSwapClickedTimestamp(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setReviewSwapClickedTimestamp'); + const newState = swapsReducer(state, actions[0]); + expect(newState.reviewSwapClickedTimestamp).toBe(actionPayload); + }); + }); + + describe('setTopAssets', () => { + it('calls the "swaps/setTopAssets" action', () => { + const state = store.getState().swaps; + const actionPayload = { + '0x514910771af9ca656af840dff83e8264ecf986ca': { + index: '0', + }, + '0x04fa0d235c4abf4bcf4787af4cf447de572ef828': { + index: '1', + }, + '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e': { + index: '2', + }, + }; + store.dispatch(swaps.setTopAssets(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setTopAssets'); + const newState = swapsReducer(state, actions[0]); + expect(newState.topAssets).toBe(actionPayload); + }); + }); + + describe('setSwapToToken', () => { + it('calls the "swaps/setToToken" action', () => { + const state = store.getState().swaps; + const actionPayload = 'USDC'; + store.dispatch(swaps.setSwapToToken(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/setToToken'); + const newState = swapsReducer(state, actions[0]); + expect(newState.toToken).toBe(actionPayload); + }); + }); + + describe('swapCustomGasModalPriceEdited', () => { + it('calls the "swaps/swapCustomGasModalPriceEdited" action', () => { + const state = store.getState().swaps; + const actionPayload = 5; + store.dispatch(swaps.swapCustomGasModalPriceEdited(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/swapCustomGasModalPriceEdited'); + const newState = swapsReducer(state, actions[0]); + expect(newState.customGas.price).toBe(actionPayload); + }); + }); + + describe('swapCustomGasModalLimitEdited', () => { + it('calls the "swaps/swapCustomGasModalLimitEdited" action', () => { + const state = store.getState().swaps; + const actionPayload = 100; + store.dispatch(swaps.swapCustomGasModalLimitEdited(actionPayload)); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/swapCustomGasModalLimitEdited'); + const newState = swapsReducer(state, actions[0]); + expect(newState.customGas.limit).toBe(actionPayload); + }); + }); + + describe('swapCustomGasModalClosed', () => { + it('calls the "swaps/swapCustomGasModalClosed" action', () => { + const state = store.getState().swaps; + store.dispatch(swaps.swapCustomGasModalClosed()); + const actions = store.getActions(); + expect(actions[0].type).toBe('swaps/swapCustomGasModalClosed'); + const newState = swapsReducer(state, actions[0]); + expect(newState.customGas.price).toBe(null); + expect(newState.customGas.limit).toBe(null); + }); + }); + }); }); diff --git a/ui/pages/swaps/awaiting-swap/__snapshots__/awaiting-swap.test.js.snap b/ui/pages/swaps/awaiting-swap/__snapshots__/awaiting-swap.test.js.snap index 3f523d5d1..b06bfbba7 100644 --- a/ui/pages/swaps/awaiting-swap/__snapshots__/awaiting-swap.test.js.snap +++ b/ui/pages/swaps/awaiting-swap/__snapshots__/awaiting-swap.test.js.snap @@ -10,7 +10,7 @@ exports[`AwaitingSwap renders the component with initial props 1`] = ` - ETH + USDC will be added to your account once this transaction has processed. diff --git a/ui/pages/swaps/awaiting-swap/awaiting-swap.js b/ui/pages/swaps/awaiting-swap/awaiting-swap.js index 5db7ce571..d8b21f44d 100644 --- a/ui/pages/swaps/awaiting-swap/awaiting-swap.js +++ b/ui/pages/swaps/awaiting-swap/awaiting-swap.js @@ -283,6 +283,7 @@ export default function AwaitingSwap({ ) : null} { + /* istanbul ignore next */ if (errorKey === OFFLINE_FOR_MAINTENANCE) { await dispatch(prepareToLeaveSwaps()); history.push(DEFAULT_ROUTE); diff --git a/ui/pages/swaps/awaiting-swap/awaiting-swap.test.js b/ui/pages/swaps/awaiting-swap/awaiting-swap.test.js index 5bc56817c..923a9c48f 100644 --- a/ui/pages/swaps/awaiting-swap/awaiting-swap.test.js +++ b/ui/pages/swaps/awaiting-swap/awaiting-swap.test.js @@ -1,13 +1,26 @@ import React from 'react'; import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; import { renderWithProvider, createSwapsMockStore, + setBackgroundConnection, + fireEvent, } from '../../../../test/jest'; -import { SLIPPAGE } from '../../../../shared/constants/swaps'; +import { + SLIPPAGE, + QUOTES_EXPIRED_ERROR, + SWAP_FAILED_ERROR, + ERROR_FETCHING_QUOTES, + QUOTES_NOT_AVAILABLE_ERROR, + CONTRACT_DATA_DISABLED_ERROR, + OFFLINE_FOR_MAINTENANCE, +} from '../../../../shared/constants/swaps'; import AwaitingSwap from '.'; +const middleware = [thunk]; + const createProps = (customProps = {}) => { return { swapComplete: false, @@ -20,20 +33,25 @@ const createProps = (customProps = {}) => { }; }; +setBackgroundConnection({ + stopPollingForQuotes: jest.fn(), +}); + describe('AwaitingSwap', () => { it('renders the component with initial props', () => { const store = configureMockStore()(createSwapsMockStore()); - const { getByText } = renderWithProvider( + const { getByText, getByTestId } = renderWithProvider( , store, ); expect(getByText('Processing')).toBeInTheDocument(); - expect(getByText('ETH')).toBeInTheDocument(); + expect(getByText('USDC')).toBeInTheDocument(); expect(getByText('View in activity')).toBeInTheDocument(); expect( document.querySelector('.awaiting-swap__main-description'), ).toMatchSnapshot(); expect(getByText('View in activity')).toBeInTheDocument(); + expect(getByTestId('page-container-footer-next')).toBeInTheDocument(); }); it('renders the component with for completed swap', () => { @@ -43,8 +61,110 @@ describe('AwaitingSwap', () => { store, ); expect(getByText('Transaction complete')).toBeInTheDocument(); - expect(getByText('tokens received: ETH')).toBeInTheDocument(); + expect(getByText('tokens received: USDC')).toBeInTheDocument(); expect(getByText('View Swap at etherscan.io')).toBeInTheDocument(); expect(getByText('Create a new swap')).toBeInTheDocument(); }); + + it('renders the component with the "OFFLINE_FOR_MAINTENANCE" error', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps({ + errorKey: OFFLINE_FOR_MAINTENANCE, + }); + const { getByText } = renderWithProvider( + , + store, + ); + expect(getByText('Offline for maintenance')).toBeInTheDocument(); + expect( + getByText( + 'MetaMask Swaps is undergoing maintenance. Please check back later.', + ), + ).toBeInTheDocument(); + expect(getByText('Close')).toBeInTheDocument(); + }); + + it('renders the component with the "SWAP_FAILED_ERROR" error', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps({ + errorKey: SWAP_FAILED_ERROR, + }); + const { getByText } = renderWithProvider( + , + store, + ); + expect(getByText('Swap failed')).toBeInTheDocument(); + fireEvent.click(getByText('metamask-flask.zendesk.com')); + expect(getByText('Try again')).toBeInTheDocument(); + }); + + it('renders the component with the "QUOTES_EXPIRED_ERROR" error', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps({ + errorKey: QUOTES_EXPIRED_ERROR, + }); + const { getByText } = renderWithProvider( + , + store, + ); + expect(getByText('Quotes timeout')).toBeInTheDocument(); + expect( + getByText('Please request new quotes to get the latest rates.'), + ).toBeInTheDocument(); + expect(getByText('Try again')).toBeInTheDocument(); + }); + + it('renders the component with the "ERROR_FETCHING_QUOTES" error', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps({ + errorKey: ERROR_FETCHING_QUOTES, + }); + const { getByText } = renderWithProvider( + , + store, + ); + expect(getByText('Error fetching quotes')).toBeInTheDocument(); + expect( + getByText( + 'Hmmm... something went wrong. Try again, or if errors persist, contact customer support.', + ), + ).toBeInTheDocument(); + expect(getByText('Back')).toBeInTheDocument(); + }); + + it('renders the component with the "QUOTES_NOT_AVAILABLE_ERROR" error', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps({ + errorKey: QUOTES_NOT_AVAILABLE_ERROR, + }); + const { getByText } = renderWithProvider( + , + store, + ); + expect(getByText('No quotes available')).toBeInTheDocument(); + expect( + getByText('Try adjusting the amount or slippage settings and try again.'), + ).toBeInTheDocument(); + expect(getByText('Try again')).toBeInTheDocument(); + }); + + it('renders the component with the "CONTRACT_DATA_DISABLED_ERROR" error', () => { + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps({ + errorKey: CONTRACT_DATA_DISABLED_ERROR, + }); + const { getByText } = renderWithProvider( + , + store, + ); + expect( + getByText('Contract data is not enabled on your Ledger'), + ).toBeInTheDocument(); + expect( + getByText( + 'In the Ethereum app on your Ledger, go to "Settings" and allow contract data. Then, try your swap again.', + ), + ).toBeInTheDocument(); + expect(getByText('Try again')).toBeInTheDocument(); + }); }); diff --git a/ui/pages/swaps/build-quote/build-quote.js b/ui/pages/swaps/build-quote/build-quote.js index 9171037fe..40429ebbf 100644 --- a/ui/pages/swaps/build-quote/build-quote.js +++ b/ui/pages/swaps/build-quote/build-quote.js @@ -481,6 +481,7 @@ export default function BuildQuote({ className="build-quote__token-etherscan-link build-quote__underline" key="build-quote-etherscan-link" onClick={() => { + /* istanbul ignore next */ trackEvent({ event: EVENT_NAMES.EXTERNAL_LINK_CLICKED, category: EVENT.CATEGORIES.SWAPS, @@ -678,6 +679,7 @@ export default function BuildQuote({ onSelect={onFromSelect} itemsToSearch={tokensToSearchSwapFrom} onInputChange={(value) => { + /* istanbul ignore next */ onInputChange(value, fromTokenBalance); }} inputValue={fromTokenInputValue} @@ -732,6 +734,7 @@ export default function BuildQuote({
} primaryAction={ + /* istanbul ignore next */ verificationClicked ? null : { @@ -809,6 +813,7 @@ export default function BuildQuote({ className="build-quote__token-etherscan-link" key="build-quote-etherscan-link" onClick={() => { + /* istanbul ignore next */ trackEvent({ event: 'Clicked Block Explorer Link', category: EVENT.CATEGORIES.SWAPS, @@ -861,30 +866,33 @@ export default function BuildQuote({ )}
{ - // We need this to know how long it took to go from clicking on the Review swap button to rendered View Quote page. - dispatch(setReviewSwapClickedTimestamp(Date.now())); - // In case that quotes prefetching is waiting to be executed, but hasn't started yet, - // we want to cancel it and fetch quotes from here. - if (timeoutIdForQuotesPrefetching) { - clearTimeout(timeoutIdForQuotesPrefetching); - dispatch( - fetchQuotesAndSetQuoteState( - history, - fromTokenInputValue, - maxSlippage, - trackEvent, - ), - ); - } else if (areQuotesPresent) { - // If there are prefetched quotes already, go directly to the View Quote page. - history.push(VIEW_QUOTE_ROUTE); - } else { - // If the "Review swap" button was clicked while quotes are being fetched, go to the Loading Quotes page. - await dispatch(setBackgroundSwapRouteState('loading')); - history.push(LOADING_QUOTES_ROUTE); + onSubmit={ + /* istanbul ignore next */ + async () => { + // We need this to know how long it took to go from clicking on the Review swap button to rendered View Quote page. + dispatch(setReviewSwapClickedTimestamp(Date.now())); + // In case that quotes prefetching is waiting to be executed, but hasn't started yet, + // we want to cancel it and fetch quotes from here. + if (timeoutIdForQuotesPrefetching) { + clearTimeout(timeoutIdForQuotesPrefetching); + dispatch( + fetchQuotesAndSetQuoteState( + history, + fromTokenInputValue, + maxSlippage, + trackEvent, + ), + ); + } else if (areQuotesPresent) { + // If there are prefetched quotes already, go directly to the View Quote page. + history.push(VIEW_QUOTE_ROUTE); + } else { + // If the "Review swap" button was clicked while quotes are being fetched, go to the Loading Quotes page. + await dispatch(setBackgroundSwapRouteState('loading')); + history.push(LOADING_QUOTES_ROUTE); + } } - }} + } submitText={t('swapReviewSwap')} disabled={isReviewSwapButtonDisabled} hideCancel diff --git a/ui/pages/swaps/build-quote/build-quote.test.js b/ui/pages/swaps/build-quote/build-quote.test.js index 79b2584d9..8178566c9 100644 --- a/ui/pages/swaps/build-quote/build-quote.test.js +++ b/ui/pages/swaps/build-quote/build-quote.test.js @@ -6,7 +6,13 @@ import { renderWithProvider, createSwapsMockStore, setBackgroundConnection, + fireEvent, } from '../../../../test/jest'; +import { + setSwapsFromToken, + setSwapToToken, + setFromTokenInputValue, +} from '../../../ducks/swaps/swaps'; import BuildQuote from '.'; const middleware = [thunk]; @@ -27,16 +33,46 @@ setBackgroundConnection({ clearSwapsQuotes: jest.fn(), stopPollingForQuotes: jest.fn(), clearSmartTransactionFees: jest.fn(), + setSwapsFromToken: jest.fn(), + setSwapToToken: jest.fn(), + setFromTokenInputValue: jest.fn(), +}); + +jest.mock('../../../ducks/swaps/swaps', () => { + const actual = jest.requireActual('../../../ducks/swaps/swaps'); + return { + ...actual, + setSwapsFromToken: jest.fn(), + setSwapToToken: jest.fn(), + setFromTokenInputValue: jest.fn(() => { + return { + type: 'MOCK_ACTION', + }; + }), + }; +}); + +jest.mock('../swaps.util', () => { + const actual = jest.requireActual('../swaps.util'); + return { + ...actual, + fetchTokenBalance: jest.fn(() => Promise.resolve()), + fetchTokenPrice: jest.fn(() => Promise.resolve()), + }; }); describe('BuildQuote', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('renders the component with initial props', () => { const store = configureMockStore(middleware)(createSwapsMockStore()); const props = createProps(); const { getByText } = renderWithProvider(, store); expect(getByText('Swap from')).toBeInTheDocument(); expect(getByText('Swap to')).toBeInTheDocument(); - expect(getByText('ETH')).toBeInTheDocument(); + expect(getByText('Select')).toBeInTheDocument(); expect(getByText('Slippage tolerance')).toBeInTheDocument(); expect(getByText('2%')).toBeInTheDocument(); expect(getByText('3%')).toBeInTheDocument(); @@ -45,4 +81,86 @@ describe('BuildQuote', () => { document.querySelector('.slippage-buttons__button-group'), ).toMatchSnapshot(); }); + + it('switches swap from and to tokens', () => { + const setSwapFromTokenMock = jest.fn(() => { + return { + type: 'MOCK_ACTION', + }; + }); + setSwapsFromToken.mockImplementation(setSwapFromTokenMock); + const setSwapToTokenMock = jest.fn(() => { + return { + type: 'MOCK_ACTION', + }; + }); + setSwapToToken.mockImplementation(setSwapToTokenMock); + const mockStore = createSwapsMockStore(); + const store = configureMockStore(middleware)(mockStore); + const props = createProps(); + const { getByText, getByTestId } = renderWithProvider( + , + store, + ); + expect(getByText('Swap from')).toBeInTheDocument(); + fireEvent.click(getByTestId('build-quote__swap-arrows')); + expect(setSwapsFromToken).toHaveBeenCalledWith(mockStore.swaps.toToken); + expect(setSwapToToken).toHaveBeenCalled(); + }); + + it('renders the block explorer link, only 1 verified source', () => { + const mockStore = createSwapsMockStore(); + mockStore.swaps.toToken.occurances = 1; + const store = configureMockStore(middleware)(mockStore); + const props = createProps(); + const { getByText } = renderWithProvider(, store); + expect(getByText('Swap from')).toBeInTheDocument(); + expect(getByText('Only verified on 1 source.')).toBeInTheDocument(); + expect(getByText('Etherscan')).toBeInTheDocument(); + }); + + it('renders the block explorer link, 0 verified sources', () => { + const mockStore = createSwapsMockStore(); + mockStore.swaps.toToken.occurances = 0; + const store = configureMockStore(middleware)(mockStore); + const props = createProps(); + const { getByText } = renderWithProvider(, store); + expect(getByText('Swap from')).toBeInTheDocument(); + expect( + getByText('This token has been added manually.'), + ).toBeInTheDocument(); + expect(getByText('Etherscan')).toBeInTheDocument(); + }); + + it('clicks on a block explorer link', () => { + global.platform = { openTab: jest.fn() }; + const mockStore = createSwapsMockStore(); + mockStore.swaps.toToken.occurances = 1; + const store = configureMockStore(middleware)(mockStore); + const props = createProps(); + const { getByText } = renderWithProvider(, store); + const blockExplorer = getByText('Etherscan'); + expect(blockExplorer).toBeInTheDocument(); + fireEvent.click(blockExplorer); + expect(global.platform.openTab).toHaveBeenCalledWith({ + url: 'https://etherscan.io/token/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + }); + }); + + it('clicks on the "max" link', () => { + const setFromTokenInputValueMock = jest.fn(() => { + return { + type: 'MOCK_ACTION', + }; + }); + setFromTokenInputValue.mockImplementation(setFromTokenInputValueMock); + const mockStore = createSwapsMockStore(); + mockStore.swaps.fromToken = 'DAI'; + const store = configureMockStore(middleware)(mockStore); + const props = createProps(); + const { getByText } = renderWithProvider(, store); + const maxLink = getByText('Max'); + fireEvent.click(maxLink); + expect(setFromTokenInputValue).toHaveBeenCalled(); + }); }); diff --git a/ui/pages/swaps/create-new-swap/create-new-swap.test.js b/ui/pages/swaps/create-new-swap/create-new-swap.test.js index 53835efff..f0161a3c1 100644 --- a/ui/pages/swaps/create-new-swap/create-new-swap.test.js +++ b/ui/pages/swaps/create-new-swap/create-new-swap.test.js @@ -1,12 +1,20 @@ import React from 'react'; import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; import { renderWithProvider, createSwapsMockStore, + fireEvent, + setBackgroundConnection, } from '../../../../test/jest'; +import { + setSwapsFromToken, + navigateBackToBuildQuote, +} from '../../../ducks/swaps/swaps'; import CreateNewSwap from '.'; +const middleware = [thunk]; const createProps = (customProps = {}) => { return { sensitiveProperties: {}, @@ -14,7 +22,28 @@ const createProps = (customProps = {}) => { }; }; +const backgroundConnection = { + navigateBackToBuildQuote: jest.fn(), + setBackgroundSwapRouteState: jest.fn(), + navigatedBackToBuildQuote: jest.fn(), +}; + +setBackgroundConnection(backgroundConnection); + +jest.mock('../../../ducks/swaps/swaps', () => { + const actual = jest.requireActual('../../../ducks/swaps/swaps'); + return { + ...actual, + setSwapsFromToken: jest.fn(), + navigateBackToBuildQuote: jest.fn(), + }; +}); + describe('CreateNewSwap', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('renders the component with initial props', () => { const store = configureMockStore()(createSwapsMockStore()); const props = createProps(); @@ -24,4 +53,28 @@ describe('CreateNewSwap', () => { ); expect(getByText('Create a new swap')).toBeInTheDocument(); }); + + it('clicks on the Make another swap link', async () => { + const setSwapFromTokenMock = jest.fn(() => { + return { + type: 'MOCK_ACTION', + }; + }); + setSwapsFromToken.mockImplementation(setSwapFromTokenMock); + const navigateBackToBuildQuoteMock = jest.fn(() => { + return { + type: 'MOCK_ACTION', + }; + }); + navigateBackToBuildQuote.mockImplementation(navigateBackToBuildQuoteMock); + const store = configureMockStore(middleware)(createSwapsMockStore()); + const props = createProps(); + const { getByText } = renderWithProvider( + , + store, + ); + await fireEvent.click(getByText('Create a new swap')); + expect(setSwapFromTokenMock).toHaveBeenCalledTimes(1); + expect(navigateBackToBuildQuoteMock).toHaveBeenCalledTimes(1); + }); }); diff --git a/ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.test.js b/ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.test.js index 0f09cbf81..e9f319d25 100644 --- a/ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.test.js +++ b/ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.test.js @@ -4,11 +4,13 @@ import configureMockStore from 'redux-mock-store'; import { renderWithProvider, createSwapsMockStore, + fireEvent, } from '../../../../test/jest'; import DropdownInputPair from '.'; const createProps = (customProps = {}) => { return { + onInputChange: jest.fn(), ...customProps, }; }; @@ -26,4 +28,17 @@ describe('DropdownInputPair', () => { document.querySelector('.dropdown-input-pair__input'), ).toMatchSnapshot(); }); + + it('changes the input field', () => { + const store = configureMockStore()(createSwapsMockStore()); + const props = createProps(); + const { getByPlaceholderText } = renderWithProvider( + , + store, + ); + fireEvent.change(getByPlaceholderText('0'), { + target: { value: 1.1 }, + }); + expect(props.onInputChange).toHaveBeenCalledWith('1.1'); + }); }); diff --git a/ui/pages/swaps/dropdown-search-list/__snapshots__/dropdown-search-list.test.js.snap b/ui/pages/swaps/dropdown-search-list/__snapshots__/dropdown-search-list.test.js.snap index e92d6b8cf..d863077c5 100644 --- a/ui/pages/swaps/dropdown-search-list/__snapshots__/dropdown-search-list.test.js.snap +++ b/ui/pages/swaps/dropdown-search-list/__snapshots__/dropdown-search-list.test.js.snap @@ -4,6 +4,7 @@ exports[`DropdownSearchList renders the component with initial props 1`] = `