From a52c6a4908bbe89d1630130f7d3286c5493e5c24 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Thu, 18 Aug 2022 17:07:34 +0200 Subject: [PATCH] [FLASK] `snaps-skunkworks@0.19.0` (#15619) * Bump snaps-skunkworks to 0.19.0 * Improve snap_getBip32Entropy UI * Remove console.log * Update LavaMoat policy * Dedupe Yarn lock * Update LavaMoat policy again * Fix tests * Update policies and e2e tests * Update policy again * Update iframe-execution-environment * Dedupe yarn.lock * Update snapshots * Fix PR comments * Add TODO * Trigger CI --- app/_locales/en/messages.json | 4 + .../flask/snap-permissions.test.js | 1 - .../controllers/permissions/specifications.js | 7 + .../permissions/specifications.test.js | 7 +- app/scripts/metamask-controller.js | 3 +- lavamoat/browserify/beta/policy.json | 8 +- lavamoat/browserify/flask/policy.json | 304 +++++++++++++++++- lavamoat/browserify/main/policy.json | 8 +- lavamoat/build-system/policy.json | 1 + package.json | 6 +- shared/constants/permissions.ts | 1 + test/e2e/snaps/test-snap-bip-44.spec.js | 2 +- .../snap-install-warning.js | 2 +- .../index.scss | 6 +- .../permissions-connect-permission-list.js | 55 +++- ui/helpers/utils/permission.js | 26 +- .../flask/snap-install/snap-install.js | 42 ++- yarn.lock | 169 +++++----- 18 files changed, 513 insertions(+), 139 deletions(-) diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 845972dc5..6f57e8c1a 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -2577,6 +2577,10 @@ "message": "Run indefinitely.", "description": "The description for the `endowment:long-running` permission" }, + "permission_manageBip32Keys": { + "message": "Control your accounts and assets under $1 ($2).", + "description": "The description for the `snap_getBip32Entropy_*` permission. $1 is a derivation path, e.g. 'm/44'/0'/0''. $2 is the elliptic curve name, e.g. 'secp256k1'." + }, "permission_manageBip44Keys": { "message": "Control your \"$1\" accounts and assets.", "description": "The description for the `snap_getBip44Entropy_*` permission. $1 is the name of a protocol, e.g. 'Filecoin'." diff --git a/app/scripts/controllers/permissions/flask/snap-permissions.test.js b/app/scripts/controllers/permissions/flask/snap-permissions.test.js index c1f5dcce6..a6ee60f78 100644 --- a/app/scripts/controllers/permissions/flask/snap-permissions.test.js +++ b/app/scripts/controllers/permissions/flask/snap-permissions.test.js @@ -31,7 +31,6 @@ describe('buildSnapRestrictedMethodSpecifications', () => { expect(specification).toMatchObject({ targetKey: expect.stringMatching(/^(snap_|wallet_)/u), methodImplementation: expect.any(Function), - allowedCaveats: null, }); }); }); diff --git a/app/scripts/controllers/permissions/specifications.js b/app/scripts/controllers/permissions/specifications.js index ac52af06c..de6b1bdad 100644 --- a/app/scripts/controllers/permissions/specifications.js +++ b/app/scripts/controllers/permissions/specifications.js @@ -1,4 +1,7 @@ import { constructPermission, PermissionType } from '@metamask/controllers'; +///: BEGIN:ONLY_INCLUDE_IN(flask) +import { caveatSpecifications as snapsCaveatsSpecifications } from '@metamask/rpc-methods'; +///: END:ONLY_INCLUDE_IN import { CaveatTypes, RestrictedMethods, @@ -63,6 +66,10 @@ export const getCaveatSpecifications = ({ getIdentities }) => { validator: (caveat, _origin, _target) => validateCaveatAccounts(caveat.value, getIdentities), }, + + ///: BEGIN:ONLY_INCLUDE_IN(flask) + ...snapsCaveatsSpecifications, + ///: END:ONLY_INCLUDE_IN }; }; diff --git a/app/scripts/controllers/permissions/specifications.test.js b/app/scripts/controllers/permissions/specifications.test.js index dcbb69c64..3d668b2f4 100644 --- a/app/scripts/controllers/permissions/specifications.test.js +++ b/app/scripts/controllers/permissions/specifications.test.js @@ -15,10 +15,15 @@ describe('PermissionController specifications', () => { describe('caveat specifications', () => { it('getCaveatSpecifications returns the expected specifications object', () => { const caveatSpecifications = getCaveatSpecifications({}); - expect(Object.keys(caveatSpecifications)).toHaveLength(1); + expect(Object.keys(caveatSpecifications)).toHaveLength(2); expect( caveatSpecifications[CaveatTypes.restrictReturnedAccounts].type, ).toStrictEqual(CaveatTypes.restrictReturnedAccounts); + + // TODO: Use `SnapCaveatType` from `rpc-methods` when it's exported. + expect(caveatSpecifications.permittedDerivationPaths.type).toStrictEqual( + 'permittedDerivationPaths', + ); }); describe('restrictReturnedAccounts', () => { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 2b4fd01fb..ddf3c20f5 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -649,7 +649,7 @@ export default class MetamaskController extends EventEmitter { ///: BEGIN:ONLY_INCLUDE_IN(flask) this.snapExecutionService = new IframeExecutionService({ iframeUrl: new URL( - 'https://metamask.github.io/iframe-execution-environment/0.5.2', + 'https://metamask.github.io/iframe-execution-environment/0.6.0', ), messenger: this.controllerMessenger.getRestricted({ name: 'ExecutionService', @@ -679,6 +679,7 @@ export default class MetamaskController extends EventEmitter { 'ExecutionService:getRpcRequestHandler', 'ExecutionService:terminateSnap', 'ExecutionService:terminateAllSnaps', + 'ExecutionService:handleRpcRequest', ], }); diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 536f855b4..041b5d2f8 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -681,7 +681,6 @@ "3box>ipfs>ipfs-unixfs": true, "3box>ipfs>ipfs-unixfs-importer>async-iterator-batch": true, "3box>ipfs>ipfs-unixfs-importer>async-iterator-first": true, - "3box>ipfs>ipfs-unixfs-importer>deep-extend": true, "3box>ipfs>ipfs-unixfs-importer>rabin-wasm": true, "3box>ipfs>ipld-dag-pb": true, "3box>ipfs>ipld-raw>multihashing-async": true, @@ -692,11 +691,6 @@ "madge>rc>deep-extend": true } }, - "3box>ipfs>ipfs-unixfs-importer>deep-extend": { - "packages": { - "browserify>buffer": true - } - }, "3box>ipfs>ipfs-unixfs-importer>rabin-wasm": { "globals": { "Blob": true, @@ -4469,6 +4463,7 @@ }, "eth-lattice-keyring>gridplus-sdk": { "globals": { + "ActiveXObject": true, "AggregateError": true, "Buffer": true, "DO_NOT_EXPORT_CRC": true, @@ -4484,6 +4479,7 @@ "console": true, "crypto": true, "define": true, + "document": true, "intToBuffer": true, "location": true, "msCrypto": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 0bfefd182..dda355e88 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -681,7 +681,6 @@ "3box>ipfs>ipfs-unixfs": true, "3box>ipfs>ipfs-unixfs-importer>async-iterator-batch": true, "3box>ipfs>ipfs-unixfs-importer>async-iterator-first": true, - "3box>ipfs>ipfs-unixfs-importer>deep-extend": true, "3box>ipfs>ipfs-unixfs-importer>rabin-wasm": true, "3box>ipfs>ipld-dag-pb": true, "3box>ipfs>ipld-raw>multihashing-async": true, @@ -692,11 +691,6 @@ "madge>rc>deep-extend": true } }, - "3box>ipfs>ipfs-unixfs-importer>deep-extend": { - "packages": { - "browserify>buffer": true - } - }, "3box>ipfs>ipfs-unixfs-importer>rabin-wasm": { "globals": { "Blob": true, @@ -2195,6 +2189,189 @@ "browserify>browser-resolve": true } }, + "@babel/code-frame": { + "globals": { + "console.warn": true + }, + "packages": { + "browserify>process": true, + "lavamoat>@babel/highlight": true + } + }, + "@babel/core": { + "globals": { + "console.log": true + }, + "packages": { + "@babel/code-frame": true, + "@babel/core>@ampproject/remapping": true, + "@babel/core>@babel/generator": true, + "@babel/core>@babel/helper-compilation-targets": true, + "@babel/core>@babel/helper-module-transforms": true, + "@babel/core>@babel/helpers": true, + "@babel/core>@babel/parser": true, + "@babel/core>@babel/template": true, + "@babel/core>@babel/types": true, + "@babel/core>gensync": true, + "@babel/core>semver": true, + "browserify": true, + "browserify>path-browserify": true, + "browserify>process": true, + "depcheck>@babel/traverse": true, + "madge>debug": true, + "nyc>convert-source-map": true + } + }, + "@babel/core>@ampproject/remapping": { + "globals": { + "define": true + }, + "packages": { + "@babel/core>@ampproject/remapping>@jridgewell/gen-mapping": true, + "@babel/core>@ampproject/remapping>@jridgewell/trace-mapping": true + } + }, + "@babel/core>@ampproject/remapping>@jridgewell/gen-mapping": { + "globals": { + "define": true + }, + "packages": { + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/set-array": true, + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/sourcemap-codec": true + } + }, + "@babel/core>@ampproject/remapping>@jridgewell/trace-mapping": { + "globals": { + "define": true + }, + "packages": { + "@babel/core>@ampproject/remapping>@jridgewell/trace-mapping>@jridgewell/resolve-uri": true, + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/sourcemap-codec": true + } + }, + "@babel/core>@ampproject/remapping>@jridgewell/trace-mapping>@jridgewell/resolve-uri": { + "globals": { + "define": true + } + }, + "@babel/core>@babel/generator": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/core>@babel/generator>@jridgewell/gen-mapping": true, + "@babel/core>@babel/generator>jsesc": true, + "@babel/core>@babel/types": true, + "browserify>buffer": true + } + }, + "@babel/core>@babel/generator>@jridgewell/gen-mapping": { + "globals": { + "define": true + }, + "packages": { + "@babel/core>@ampproject/remapping>@jridgewell/trace-mapping": true, + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/set-array": true, + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/sourcemap-codec": true + } + }, + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/set-array": { + "globals": { + "define": true + } + }, + "@babel/core>@babel/generator>@jridgewell/gen-mapping>@jridgewell/sourcemap-codec": { + "globals": { + "TextDecoder": true, + "define": true + }, + "packages": { + "browserify>buffer": true + } + }, + "@babel/core>@babel/generator>jsesc": { + "packages": { + "browserify>insert-module-globals>is-buffer": true + } + }, + "@babel/core>@babel/helper-compilation-targets": { + "globals": { + "console.warn": true + }, + "packages": { + "@babel/core>@babel/helper-compilation-targets>semver": true, + "@babel/preset-env>@babel/compat-data": true, + "@babel/preset-env>@babel/helper-validator-option": true, + "browserify>process": true, + "stylelint>autoprefixer>browserslist": true + } + }, + "@babel/core>@babel/helper-compilation-targets>semver": { + "globals": { + "console": true + }, + "packages": { + "browserify>process": true + } + }, + "@babel/core>@babel/helper-module-transforms": { + "packages": { + "@babel/core>@babel/helper-module-transforms>@babel/helper-module-imports": true, + "@babel/core>@babel/helper-module-transforms>@babel/helper-simple-access": true, + "@babel/core>@babel/template": true, + "@babel/core>@babel/types": true, + "browserify>assert": true, + "browserify>path-browserify": true, + "depcheck>@babel/traverse": true, + "depcheck>@babel/traverse>@babel/helper-environment-visitor": true, + "depcheck>@babel/traverse>@babel/helper-split-export-declaration": true, + "lavamoat>@babel/highlight>@babel/helper-validator-identifier": true + } + }, + "@babel/core>@babel/helper-module-transforms>@babel/helper-module-imports": { + "packages": { + "@babel/core>@babel/types": true, + "browserify>assert": true + } + }, + "@babel/core>@babel/helper-module-transforms>@babel/helper-simple-access": { + "packages": { + "@babel/core>@babel/types": true + } + }, + "@babel/core>@babel/helpers": { + "packages": { + "@babel/core>@babel/template": true, + "@babel/core>@babel/types": true, + "depcheck>@babel/traverse": true + } + }, + "@babel/core>@babel/template": { + "packages": { + "@babel/code-frame": true, + "@babel/core>@babel/parser": true, + "@babel/core>@babel/types": true + } + }, + "@babel/core>@babel/types": { + "globals": { + "console.trace": true + }, + "packages": { + "@babel/core>@babel/types>@babel/helper-string-parser": true, + "@babel/core>@babel/types>to-fast-properties": true, + "browserify>process": true, + "lavamoat>@babel/highlight>@babel/helper-validator-identifier": true + } + }, + "@babel/core>semver": { + "globals": { + "console": true + }, + "packages": { + "browserify>process": true + } + }, "@babel/runtime": { "globals": { "regeneratorRuntime": "write" @@ -3176,6 +3353,7 @@ "packages": { "@metamask/controllers": true, "@metamask/rpc-methods>@metamask/key-tree": true, + "@metamask/rpc-methods>@metamask/snap-utils": true, "@metamask/rpc-methods>@metamask/utils": true, "@metamask/snap-controllers": true, "eth-rpc-errors": true @@ -3226,6 +3404,29 @@ "@metamask/rpc-methods>@metamask/key-tree>@scure/base": true } }, + "@metamask/rpc-methods>@metamask/snap-utils": { + "globals": { + "URL": true + }, + "packages": { + "@babel/core": true, + "@babel/core>@babel/types": true, + "@metamask/rpc-methods>@metamask/snap-utils>ajv": true, + "@metamask/rpc-methods>@metamask/snap-utils>rfdc": true, + "browserify": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "browserify>events": true, + "browserify>path-browserify": true, + "eslint>fast-deep-equal": true, + "semver": true + } + }, + "@metamask/rpc-methods>@metamask/snap-utils>rfdc": { + "packages": { + "browserify>buffer": true + } + }, "@metamask/rpc-methods>@metamask/utils": { "packages": { "eslint>fast-deep-equal": true @@ -3285,26 +3486,23 @@ "packages": { "@metamask/controllers": true, "@metamask/providers>@metamask/object-multiplex": true, + "@metamask/rpc-methods>@metamask/snap-utils": true, "@metamask/rpc-methods>@metamask/utils": true, "@metamask/snap-controllers>@metamask/browser-passworder": true, "@metamask/snap-controllers>@metamask/execution-environments": true, "@metamask/snap-controllers>@metamask/obs-store": true, "@metamask/snap-controllers>@metamask/post-message-stream": true, - "@metamask/snap-controllers>ajv": true, + "@metamask/snap-controllers>@xstate/fsm": true, "@metamask/snap-controllers>concat-stream": true, "@metamask/snap-controllers>gunzip-maybe": true, "@metamask/snap-controllers>json-rpc-middleware-stream": true, "@metamask/snap-controllers>nanoid": true, "@metamask/snap-controllers>readable-web-to-node-stream": true, "@metamask/snap-controllers>tar-stream": true, - "browserify>buffer": true, - "browserify>crypto-browserify": true, - "eslint>fast-deep-equal": true, "eth-rpc-errors": true, "json-rpc-engine": true, "json-rpc-engine>@metamask/safe-event-emitter": true, - "pump": true, - "semver": true + "pump": true } }, "@metamask/snap-controllers>@metamask/browser-passworder": { @@ -3394,11 +3592,6 @@ "@metamask/snap-controllers>json-rpc-middleware-stream>readable-stream>safe-buffer": true } }, - "@metamask/snap-controllers>ajv": { - "packages": { - "eslint>fast-deep-equal": true - } - }, "@metamask/snap-controllers>concat-stream": { "packages": { "@metamask/snap-controllers>concat-stream>readable-stream": true, @@ -4536,6 +4729,40 @@ "browserify>stream-browserify": true } }, + "depcheck>@babel/traverse": { + "globals": { + "console.log": true, + "console.trace": true + }, + "packages": { + "@babel/code-frame": true, + "@babel/core>@babel/generator": true, + "@babel/core>@babel/parser": true, + "@babel/core>@babel/types": true, + "depcheck>@babel/traverse>@babel/helper-environment-visitor": true, + "depcheck>@babel/traverse>@babel/helper-function-name": true, + "depcheck>@babel/traverse>@babel/helper-hoist-variables": true, + "depcheck>@babel/traverse>@babel/helper-split-export-declaration": true, + "depcheck>@babel/traverse>globals": true, + "madge>debug": true + } + }, + "depcheck>@babel/traverse>@babel/helper-function-name": { + "packages": { + "@babel/core>@babel/template": true, + "@babel/core>@babel/types": true + } + }, + "depcheck>@babel/traverse>@babel/helper-hoist-variables": { + "packages": { + "@babel/core>@babel/types": true + } + }, + "depcheck>@babel/traverse>@babel/helper-split-export-declaration": { + "packages": { + "@babel/core>@babel/types": true + } + }, "depcheck>@vue/compiler-sfc>postcss>nanoid": { "globals": { "crypto.getRandomValues": true @@ -4856,6 +5083,7 @@ }, "eth-lattice-keyring>gridplus-sdk": { "globals": { + "ActiveXObject": true, "AggregateError": true, "Buffer": true, "DO_NOT_EXPORT_CRC": true, @@ -4871,6 +5099,7 @@ "console": true, "crypto": true, "define": true, + "document": true, "intToBuffer": true, "location": true, "msCrypto": true, @@ -5868,6 +6097,26 @@ "browserify>url": true } }, + "lavamoat>@babel/highlight": { + "packages": { + "lavamoat>@babel/highlight>@babel/helper-validator-identifier": true, + "lavamoat>@babel/highlight>chalk": true, + "loose-envify>js-tokens": true + } + }, + "lavamoat>@babel/highlight>chalk": { + "packages": { + "browserify>process": true, + "lavamoat>@babel/highlight>chalk>ansi-styles": true, + "lavamoat>@babel/highlight>chalk>supports-color": true, + "mocha>escape-string-regexp": true + } + }, + "lavamoat>@babel/highlight>chalk>ansi-styles": { + "packages": { + "@metamask/jazzicon>color>color-convert": true + } + }, "lavamoat>json-stable-stringify": { "packages": { "lavamoat>json-stable-stringify>jsonify": true @@ -6000,6 +6249,18 @@ "ethjs-query": true } }, + "nyc>convert-source-map": { + "packages": { + "browserify>browser-resolve": true, + "browserify>path-browserify": true, + "nyc>convert-source-map>safe-buffer": true + } + }, + "nyc>convert-source-map>safe-buffer": { + "packages": { + "browserify>buffer": true + } + }, "obj-multiplex": { "globals": { "console.warn": true @@ -6581,6 +6842,15 @@ "string.prototype.matchall>call-bind": true } }, + "stylelint>autoprefixer>browserslist": { + "packages": { + "browserify>browser-resolve": true, + "browserify>process": true, + "stylelint>autoprefixer>browserslist>electron-to-chromium": true, + "stylelint>autoprefixer>browserslist>node-releases": true, + "stylelint>autoprefixer>caniuse-lite": true + } + }, "stylelint>write-file-atomic>typedarray-to-buffer": { "packages": { "browserify>buffer": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 536f855b4..041b5d2f8 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -681,7 +681,6 @@ "3box>ipfs>ipfs-unixfs": true, "3box>ipfs>ipfs-unixfs-importer>async-iterator-batch": true, "3box>ipfs>ipfs-unixfs-importer>async-iterator-first": true, - "3box>ipfs>ipfs-unixfs-importer>deep-extend": true, "3box>ipfs>ipfs-unixfs-importer>rabin-wasm": true, "3box>ipfs>ipld-dag-pb": true, "3box>ipfs>ipld-raw>multihashing-async": true, @@ -692,11 +691,6 @@ "madge>rc>deep-extend": true } }, - "3box>ipfs>ipfs-unixfs-importer>deep-extend": { - "packages": { - "browserify>buffer": true - } - }, "3box>ipfs>ipfs-unixfs-importer>rabin-wasm": { "globals": { "Blob": true, @@ -4469,6 +4463,7 @@ }, "eth-lattice-keyring>gridplus-sdk": { "globals": { + "ActiveXObject": true, "AggregateError": true, "Buffer": true, "DO_NOT_EXPORT_CRC": true, @@ -4484,6 +4479,7 @@ "console": true, "crypto": true, "define": true, + "document": true, "intToBuffer": true, "location": true, "msCrypto": true, diff --git a/lavamoat/build-system/policy.json b/lavamoat/build-system/policy.json index ceab6c445..a3ffee7f5 100644 --- a/lavamoat/build-system/policy.json +++ b/lavamoat/build-system/policy.json @@ -193,6 +193,7 @@ "process.env.BABEL_TYPES_8_BREAKING": true }, "packages": { + "@babel/core>@babel/types>@babel/helper-string-parser": true, "@babel/core>@babel/types>to-fast-properties": true, "lavamoat>@babel/highlight>@babel/helper-validator-identifier": true } diff --git a/package.json b/package.json index 7c05d3ca3..c6dbf98e9 100644 --- a/package.json +++ b/package.json @@ -133,10 +133,10 @@ "@metamask/obs-store": "^5.0.0", "@metamask/post-message-stream": "^4.0.0", "@metamask/providers": "^9.0.0", - "@metamask/rpc-methods": "^0.18.1", + "@metamask/rpc-methods": "^0.19.0", "@metamask/slip44": "^2.1.0", "@metamask/smart-transactions-controller": "^2.3.0", - "@metamask/snap-controllers": "^0.18.1", + "@metamask/snap-controllers": "^0.19.0", "@ngraveio/bc-ur": "^1.1.6", "@popperjs/core": "^2.4.0", "@reduxjs/toolkit": "^1.6.2", @@ -298,8 +298,8 @@ "browser-util-inspect": "^0.2.0", "browserify": "^16.5.1", "chalk": "^3.0.0", - "chromedriver": "^103.0.0", "chokidar": "^3.5.3", + "chromedriver": "^103.0.0", "concurrently": "^5.2.0", "copy-webpack-plugin": "^6.0.3", "cross-spawn": "^7.0.3", diff --git a/shared/constants/permissions.ts b/shared/constants/permissions.ts index f4f961cd6..d2b04238d 100644 --- a/shared/constants/permissions.ts +++ b/shared/constants/permissions.ts @@ -8,6 +8,7 @@ export const RestrictedMethods = Object.freeze({ snap_confirm: 'snap_confirm', snap_notify: 'snap_notify', snap_manageState: 'snap_manageState', + snap_getBip32Entropy: 'snap_getBip32Entropy', 'snap_getBip44Entropy_*': 'snap_getBip44Entropy_*', 'wallet_snap_*': 'wallet_snap_*', ///: END:ONLY_INCLUDE_IN diff --git a/test/e2e/snaps/test-snap-bip-44.spec.js b/test/e2e/snaps/test-snap-bip-44.spec.js index 240450900..eb37ab42c 100644 --- a/test/e2e/snaps/test-snap-bip-44.spec.js +++ b/test/e2e/snaps/test-snap-bip-44.spec.js @@ -69,7 +69,7 @@ describe('Test Snap bip-44', function () { }); // deal with permissions popover await driver.delay(1000); - await driver.press('#key-access-0', driver.Key.SPACE); + await driver.press('#key-access-bip44-0', driver.Key.SPACE); await driver.clickElement({ text: 'Confirm', tag: 'button', diff --git a/ui/components/app/flask/snap-install-warning/snap-install-warning.js b/ui/components/app/flask/snap-install-warning/snap-install-warning.js index 96471f86e..a4957b2e2 100644 --- a/ui/components/app/flask/snap-install-warning/snap-install-warning.js +++ b/ui/components/app/flask/snap-install-warning/snap-install-warning.js @@ -66,7 +66,7 @@ export default function SnapInstallWarning({ onCancel, onSubmit, warnings }) { title={t('areYouSure')} footer={} headerProps={{ padding: [6, 6, 0] }} - contentProps={{ padding: [0, 6, 4] }} + contentProps={{ padding: [6, 4] }} footerProps={{ padding: [4, 6] }} > diff --git a/ui/components/app/permissions-connect-permission-list/index.scss b/ui/components/app/permissions-connect-permission-list/index.scss index 8dfc4cb6b..1a7169bfd 100644 --- a/ui/components/app/permissions-connect-permission-list/index.scss +++ b/ui/components/app/permissions-connect-permission-list/index.scss @@ -14,11 +14,15 @@ i { display: block; - padding: 16px; + margin: 16px; min-width: 16px; min-height: 16px; color: var(--color-icon-alternative); font-size: 1rem; } } + + .permission-label-item { + font-weight: bold; + } } diff --git a/ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.js b/ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.js index d2459025d..0280280b8 100644 --- a/ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.js +++ b/ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.js @@ -3,25 +3,52 @@ import PropTypes from 'prop-types'; import { getPermissionDescription } from '../../../helpers/utils/permission'; import { useI18nContext } from '../../../hooks/useI18nContext'; +/** + * Get one or more permission descriptions for a permission name. + * + * @param t - The translation function. + * @param permissionName - The name of the permission to request. + * @param permissionValue - The value of the permission to request. + * @returns {JSX.Element[]} An array of permission description nodes. + */ +function getDescriptionNodes(t, permissionName, permissionValue) { + const { label, leftIcon, rightIcon } = getPermissionDescription( + t, + permissionName, + permissionValue, + ); + + if (Array.isArray(label)) { + return label.map((labelValue, index) => ( +
+ + {labelValue} + {rightIcon && } +
+ )); + } + + return [ +
+ + {label} + {rightIcon && } +
, + ]; +} + export default function PermissionsConnectPermissionList({ permissions }) { const t = useI18nContext(); return (
- {Object.keys(permissions).map((permission) => { - const { label, leftIcon, rightIcon } = getPermissionDescription( - t, - permission, - ); - - return ( -
- - {label} - {rightIcon && } -
- ); - })} + {Object.entries(permissions).reduce( + (target, [permissionName, permissionValue]) => + target.concat( + getDescriptionNodes(t, permissionName, permissionValue), + ), + [], + )}
); } diff --git a/ui/helpers/utils/permission.js b/ui/helpers/utils/permission.js index 518df80ad..b03772b2b 100644 --- a/ui/helpers/utils/permission.js +++ b/ui/helpers/utils/permission.js @@ -1,4 +1,7 @@ import deepFreeze from 'deep-freeze-strict'; +///: BEGIN:ONLY_INCLUDE_IN(flask) +import React from 'react'; +///: END:ONLY_INCLUDE_IN import { RestrictedMethods, ///: BEGIN:ONLY_INCLUDE_IN(flask) @@ -29,6 +32,20 @@ const PERMISSION_DESCRIPTIONS = deepFreeze({ label: (t) => t('permission_notifications'), rightIcon: null, }, + [RestrictedMethods.snap_getBip32Entropy]: { + label: (t, _, permissionValue) => { + return permissionValue.caveats[0].value.map(({ path, curve }) => + t('permission_manageBip32Keys', [ + + {path.join('/')} + , + curve, + ]), + ); + }, + leftIcon: 'fas fa-door-open', + rightIcon: null, + }, [RestrictedMethods['snap_getBip44Entropy_*']]: { label: (t, permissionName) => { const coinType = permissionName.split('_').slice(-1); @@ -82,9 +99,14 @@ const PERMISSION_DESCRIPTIONS = deepFreeze({ /** * @param {Function} t - The translation function * @param {string} permissionName - The name of the permission to request + * @param {object} permissionValue - The value of the permission to request * @returns {(permissionName:string) => PermissionLabelObject} */ -export const getPermissionDescription = (t, permissionName) => { +export const getPermissionDescription = ( + t, + permissionName, + permissionValue, +) => { let value = PERMISSION_DESCRIPTIONS[UNKNOWN_PERMISSION]; if (Object.hasOwnProperty.call(PERMISSION_DESCRIPTIONS, permissionName)) { @@ -98,5 +120,5 @@ export const getPermissionDescription = (t, permissionName) => { } ///: END:ONLY_INCLUDE_IN - return { ...value, label: value.label(t, permissionName) }; + return { ...value, label: value.label(t, permissionName, permissionValue) }; }; diff --git a/ui/pages/permissions-connect/flask/snap-install/snap-install.js b/ui/pages/permissions-connect/flask/snap-install/snap-install.js index 565f1c27b..76edc4891 100644 --- a/ui/pages/permissions-connect/flask/snap-install/snap-install.js +++ b/ui/pages/permissions-connect/flask/snap-install/snap-install.js @@ -44,7 +44,14 @@ export default function SnapInstall({ v.startsWith('snap_getBip44Entropy_'), ); - const shouldShowWarning = bip44EntropyPermissions?.length > 0; + const bip32EntropyPermissions = + request.permissions && + Object.entries(request.permissions) + .filter(([key]) => key === 'snap_getBip32Entropy') + .map(([, value]) => value); + + const shouldShowWarning = + bip32EntropyPermissions?.length > 0 || bip44EntropyPermissions?.length > 0; const getCoinType = (bip44EntropyPermission) => bip44EntropyPermission?.split('_').slice(-1); @@ -107,17 +114,28 @@ export default function SnapInstall({ setIsShowingWarning(false)} onSubmit={onSubmit} - warnings={bip44EntropyPermissions.map((permission, i) => { - const coinType = getCoinType(permission); - return { - id: `key-access-${i}`, - message: t('snapInstallWarningKeyAccess', [ - targetSubjectMetadata.name, - coinTypeToProtocolName(coinType) || - t('unrecognizedProtocol', [coinType]), - ]), - }; - })} + warnings={[ + ...bip32EntropyPermissions.flatMap((permission, i) => + permission.caveats[0].value.map(({ path, curve }) => ({ + id: `key-access-bip32-${path.join('/')}-${curve}-${i}`, + message: t('snapInstallWarningKeyAccess', [ + targetSubjectMetadata.name, + `${path.join('/')} (${curve})`, + ]), + })), + ), + ...bip44EntropyPermissions.map((permission, i) => { + const coinType = getCoinType(permission); + return { + id: `key-access-bip44-${i}`, + message: t('snapInstallWarningKeyAccess', [ + targetSubjectMetadata.name, + coinTypeToProtocolName(coinType) || + t('unrecognizedProtocol', [coinType]), + ]), + }; + }), + ]} /> )} diff --git a/yarn.lock b/yarn.lock index d3951799b..dbb217cb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -123,21 +123,21 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.1", "@babel/core@^7.12.10", "@babel/core@^7.7.5": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== +"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.1", "@babel/core@^7.12.10", "@babel/core@^7.18.6", "@babel/core@^7.7.5": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -160,12 +160,12 @@ dependencies: eslint-rule-composer "^0.3.0" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.10": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.18.10" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -355,6 +355,11 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" @@ -398,10 +403,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.1", "@babel/parser@^7.12.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.5", "@babel/parser@^7.12.7", "@babel/parser@^7.13.9", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.1", "@babel/parser@^7.12.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.5", "@babel/parser@^7.12.7", "@babel/parser@^7.13.9", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1196,36 +1201,37 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.7", "@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.11.5", "@babel/types@^7.12.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== +"@babel/types@^7.0.0", "@babel/types@^7.11.5", "@babel/types@^7.12.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: + "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" @@ -2988,15 +2994,15 @@ resolved "https://registry.yarnpkg.com/@metamask/etherscan-link/-/etherscan-link-2.1.0.tgz#c0be8e68445b7b83cf85bcc03a56cdf8e256c973" integrity sha512-ADuWlTUkFfN2vXlz81Bg/0BA+XRor+CdK1055p6k7H6BLIPoDKn9SBOFld9haQFuR9cKh/JYHcnlSIv5R4fUEw== -"@metamask/execution-environments@^0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@metamask/execution-environments/-/execution-environments-0.18.1.tgz#46853241fc0dda4e92b358d56fea927745efef42" - integrity sha512-PnEPvcIBsNq2rYshrZePAPL3vGaWPrJyztHlSn+dP9vM2XR1M+Qc0/QrgGy6hnOidQIkhn2ZuFfsnm72dJFmUA== +"@metamask/execution-environments@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@metamask/execution-environments/-/execution-environments-0.19.0.tgz#e2e269bdf66bcac96e6fb6a8b105b04c3ad906ca" + integrity sha512-nOUATeSwWY08CDTBBtYtt6EYtVCbiFiJuz64g1bkS+TS5cQte+w8fYgzRsOPXCMPkbqrO1+8RV+ZU6gujoAJHA== dependencies: "@metamask/object-multiplex" "^1.2.0" "@metamask/post-message-stream" "^6.0.0" "@metamask/providers" "^9.0.0" - "@metamask/snap-types" "^0.18.1" + "@metamask/snap-types" "^0.19.0" "@metamask/utils" "^2.0.0" eth-rpc-errors "^4.0.3" pump "^3.0.0" @@ -3119,16 +3125,17 @@ pump "^3.0.0" webextension-polyfill-ts "^0.25.0" -"@metamask/rpc-methods@^0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@metamask/rpc-methods/-/rpc-methods-0.18.1.tgz#7fa7ff15fd70f6e5ae9f06f0caa719683f52f4f3" - integrity sha512-ZBGeg1HOF/k+nSzi2oXvKM5nm8jjRtV3bc6m3db0hlsy12KooMkdy0Q8ZiOkkqLWn0g8ivvHdxXU7LNhPZ8eBw== +"@metamask/rpc-methods@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@metamask/rpc-methods/-/rpc-methods-0.19.0.tgz#20a2dd159330fa1bac1999d59f4a0fec282bdeaa" + integrity sha512-YAr6T4Gy46VoJBD17l+Tc2WbHcMce+TQWDf+29ifroi0pN9BLKvAakdHKeQ12EoJl8NHSrJNoHCqweyLkGiNXQ== dependencies: "@metamask/controllers" "^30.0.0" "@metamask/key-tree" "^4.0.0" - "@metamask/snap-controllers" "^0.18.1" + "@metamask/snap-controllers" "^0.19.0" + "@metamask/snap-utils" "^0.19.0" "@metamask/types" "^1.1.0" - "@metamask/utils" "^2.0.0" + "@metamask/utils" "^2.1.0" eth-rpc-errors "^4.0.2" "@metamask/safe-event-emitter@^2.0.0": @@ -3154,26 +3161,25 @@ isomorphic-fetch "^3.0.0" lodash "^4.17.21" -"@metamask/snap-controllers@^0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@metamask/snap-controllers/-/snap-controllers-0.18.1.tgz#081da8664436aed5d3a0ff5f682807de7424fcff" - integrity sha512-hoozCeKVV+HCMIPmDg2F5KcIyBEsbIFTM5xL4dmkf5i16+yWDkdNN2iCIfePk+gtpcWyUK6bsevOdu2KwVgEHg== +"@metamask/snap-controllers@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@metamask/snap-controllers/-/snap-controllers-0.19.0.tgz#6a17b38ec589b96f68a9c7d2747af4de34a05a3f" + integrity sha512-0062+XF+aGX3CEkHKtwj9BOmC8xBKvam+InkpuW7JxIbO5uiL2T+ZtJVkqUrs6q2ASRFV5aC4Jc4C5fJvUiIcg== dependencies: "@metamask/browser-passworder" "^3.0.0" "@metamask/controllers" "^30.0.0" - "@metamask/execution-environments" "^0.18.1" + "@metamask/execution-environments" "^0.19.0" "@metamask/object-multiplex" "^1.1.0" "@metamask/obs-store" "^7.0.0" "@metamask/post-message-stream" "^6.0.0" "@metamask/safe-event-emitter" "^2.0.0" + "@metamask/snap-utils" "^0.19.0" "@metamask/utils" "^2.0.0" "@types/deep-freeze-strict" "^1.1.0" - "@types/semver" "^7.3.9" - ajv "^8.8.2" + "@xstate/fsm" "^2.0.0" concat-stream "^2.0.0" deep-freeze-strict "^1.1.1" eth-rpc-errors "^4.0.2" - fast-deep-equal "^3.1.3" gunzip-maybe "^1.4.2" immer "^9.0.6" json-rpc-engine "^6.1.0" @@ -3181,16 +3187,28 @@ nanoid "^3.1.31" pump "^3.0.0" readable-web-to-node-stream "^3.0.2" - semver "^7.3.5" tar-stream "^2.2.0" -"@metamask/snap-types@^0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@metamask/snap-types/-/snap-types-0.18.1.tgz#3e5e07a14d69ae43b246ae1abb24d7d1d40eca0f" - integrity sha512-ri9vznetbO2TjZjWUqfONgXyPEXP9j8VBgU8xCxCqqiyCi/sMIwSCemp81wnDN+kt7m7zXlC8TmEV3MkSnqGmw== +"@metamask/snap-types@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@metamask/snap-types/-/snap-types-0.19.0.tgz#ead590ecbb840cf2cd1c4feffbf8228ca87bc912" + integrity sha512-8huwKsiM05mG8/V8/zvJ3xy555P1RPk1fs1znbJaGTYk3HAJVW2i3d95iOcM6Cs+zbTwsrFfGnO2yqH31anPgA== dependencies: "@metamask/controllers" "^30.0.0" +"@metamask/snap-utils@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@metamask/snap-utils/-/snap-utils-0.19.0.tgz#226f4df5287996d3c09b1b139c30a7c9c78772d1" + integrity sha512-oPDrWbj3ggv/Tt09X1nDC0x42TLapHEYB1mR8/V2TULlcfzlL7oUDy/AxOA3sDDiX8hH2q3OA7Htcadj8PKlNw== + dependencies: + "@babel/core" "^7.18.6" + "@metamask/utils" "^2.0.0" + ajv "^8.11.0" + fast-deep-equal "^3.1.3" + rfdc "^1.3.0" + semver "^7.3.7" + ses "^0.15.17" + "@metamask/test-dapp@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@metamask/test-dapp/-/test-dapp-5.2.0.tgz#ecae2525e7b4d5ef42b7f478b33e3a25152789f8" @@ -3201,10 +3219,10 @@ resolved "https://registry.yarnpkg.com/@metamask/types/-/types-1.1.0.tgz#9bd14b33427932833c50c9187298804a18c2e025" integrity sha512-EEV/GjlYkOSfSPnYXfOosxa3TqYtIW3fhg6jdw+cok/OhMgNn4wCfbENFqjytrHMU2f7ZKtBAvtiP5V8H44sSw== -"@metamask/utils@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-2.0.0.tgz#fe7e970416a256751c429f4a5e96aec6c4366ba7" - integrity sha512-AZ63AhRxAZXll+/SEiyEXgrxuAL4yOj0ny4V36VgPmTDvt+7GrmVJWrQF3o5PZZWV6ooaHZ9291RZHRcKZm0HA== +"@metamask/utils@^2.0.0", "@metamask/utils@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-2.1.0.tgz#a65eaa0932b863383844ec323e05e293d8e718ab" + integrity sha512-4PHdo5B1ifpw6GbsdlDpp8oqA++rddSmt2pWBHtIGGL2tQMvmfHdaDDSns4JP9iC+AbMogVcUpv5Vt8ow1zsRA== dependencies: fast-deep-equal "^3.1.3" @@ -5093,11 +5111,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.9": - version "7.3.9" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" - integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== - "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -5555,6 +5568,11 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@xstate/fsm@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@xstate/fsm/-/fsm-2.0.0.tgz#221db16b606df3f4675f5be6058b633ec4b8b44a" + integrity sha512-p/zcvBMoU2ap5byMefLkR+AM+Eh99CU/SDEQeccgKlmFNOMDwphaRGqdk+emvel/SaGZ7Rf9sDvzAplLzLdEVQ== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -5936,7 +5954,7 @@ ajv-merge-patch@5.0.1: fast-json-patch "^2.0.6" json-merge-patch "^1.0.2" -ajv@8.11.0, ajv@^8.8.2: +ajv@8.11.0, ajv@^8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== @@ -24135,6 +24153,11 @@ rework@1.0.1: convert-source-map "^0.3.3" css "^2.0.0" +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -24720,10 +24743,10 @@ ses@0.12.4, ses@^0.12.4: "@agoric/make-hardener" "^0.1.2" "@agoric/transform-module" "^0.4.1" -ses@^0.15.15: - version "0.15.15" - resolved "https://registry.yarnpkg.com/ses/-/ses-0.15.15.tgz#082923a1cabeac3151f9b3867e325fe447ce037d" - integrity sha512-sJM4HRlM3VouA3RhRmS7wG5MRQPqZZnc6O4BvAefU7yeM+qp8EUfGAWQ9iB/X5cNh3+m5N9lC7DEpyxQ+E4D+w== +ses@^0.15.15, ses@^0.15.17: + version "0.15.17" + resolved "https://registry.yarnpkg.com/ses/-/ses-0.15.17.tgz#84e20cd08fb294989c6499942d220bd6604e1884" + integrity sha512-T8XKsR5LGV57ilyqE4InFJKWVniEEFGai0CjuVJPju9LvnjYPXvZ7V8jP7sGtJ500ApRVgNBCu+5ZcSUhiuXig== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0"