diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json
index 43af11d51..f5e257ef6 100644
--- a/app/_locales/de/messages.json
+++ b/app/_locales/de/messages.json
@@ -3376,16 +3376,9 @@
"message": "Sie gewähren dem Snap „$1“ wichtige $2-Zugriffsrechte. Dies kann nicht rückgängig gemacht werden und gibt „$1“ Kontrolle über Ihre $2-Konten und Vermögenswerte. Stellen Sie sicher, dass Sie „$1“ vertrauen, bevor Sie fortfahren.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Für diesen Snap werden die folgenden Berechtigungen beantragt:"
- },
"snapUpdate": {
"message": "Snap aktualisieren"
},
- "snapUpdateExplanation": {
- "message": "$1 benötigt eine neuere Version Ihres Snaps.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snaps"
},
diff --git a/app/_locales/el/messages.json b/app/_locales/el/messages.json
index d52e449d2..f2ab8a5e0 100644
--- a/app/_locales/el/messages.json
+++ b/app/_locales/el/messages.json
@@ -3376,16 +3376,9 @@
"message": "Εκχωρείτε στο $2 βασική πρόσβαση στο snap \"$1\". Αυτό είναι αμετάκλητο και παρέχει στο \"$1\" τον έλεγχο των λογαριασμών και των περιουσιακών σας στοιχείων $2. Βεβαιωθείτε ότι εμπιστεύεστε το \"$1\" προτού συνεχίσετε.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Αυτό το snap αιτείται τις παρακάτω άδειες:"
- },
"snapUpdate": {
"message": "Ενημέρωση Snap"
},
- "snapUpdateExplanation": {
- "message": "Το $1 χρειάζεται μια νεότερη έκδοση του snap σας.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snaps"
},
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json
index 06f9ea6d7..59eae8ed9 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -3028,6 +3028,9 @@
"replace": {
"message": "replace"
},
+ "requestFailed": {
+ "message": "Request failed"
+ },
"requestFlaggedAsMaliciousFallbackCopyReason": {
"message": "The security provider has not shared additional details"
},
@@ -3427,25 +3430,46 @@
"snapInstall": {
"message": "Install snap"
},
+ "snapInstallRequest": {
+ "message": "$1 wants to install $2. Make sure you trust the authors before you proceed.",
+ "description": "$1 is the dApp origin requesting the snap and $2 is the snap name"
+ },
+ "snapInstallRequestsPermission": {
+ "message": "$1 wants to install $2, which is requesting the following permissions. Make sure you trust the authors before you proceed.",
+ "description": "$1 is the dApp origin requesting the snap and $2 is the snap name"
+ },
"snapInstallWarningCheck": {
- "message": "To confirm that you understand, check the box."
+ "message": "Ensure that the permission below align with your intended actions. Only proceed with authors you trust."
},
"snapInstallWarningCheckPlural": {
- "message": "To confirm that you understand, check all the boxes."
+ "message": "Ensure that the permissions below align with your intended actions. Only proceed with authors you trust."
+ },
+ "snapInstallWarningHeading": {
+ "message": "Proceed with caution"
},
"snapInstallWarningKeyAccess": {
- "message": "You are granting $2 key access to the snap \"$1\". This is irrevocable and grants \"$1\" control of your $2 accounts and assets. Make sure you trust \"$1\" before proceeding.",
+ "message": "Grant $2 key access to $1",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "This snap is requesting the following permissions:"
+ "snapResultError": {
+ "message": "Error"
+ },
+ "snapResultSuccess": {
+ "message": "Success"
+ },
+ "snapResultSuccessDescription": {
+ "message": "$1 is now available to use."
},
"snapUpdate": {
"message": "Update snap"
},
- "snapUpdateExplanation": {
- "message": "$1 needs a newer version of your snap.",
- "description": "$1 is the dapp that is requesting an update to the snap."
+ "snapUpdateRequest": {
+ "message": "$1 wants to update $2. Make sure you trust the authors before you proceed.",
+ "description": "$1 is the dApp origin requesting the snap and $2 is the snap name"
+ },
+ "snapUpdateRequestsPermission": {
+ "message": "$1 wants to update $2, which is requesting the following permissions. Make sure you trust the authors before you proceed.",
+ "description": "$1 is the dApp origin requesting the snap and $2 is the snap name"
},
"snaps": {
"message": "Snaps"
@@ -4386,6 +4410,9 @@
"upArrow": {
"message": "up arrow"
},
+ "update": {
+ "message": "Update"
+ },
"updatedWithDate": {
"message": "Updated $1"
},
diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json
index 73c1a4e7b..ad1319017 100644
--- a/app/_locales/es/messages.json
+++ b/app/_locales/es/messages.json
@@ -3376,16 +3376,9 @@
"message": "Está otorgando acceso clave de $2 al complemento \"$1\". Esto es irrevocable y le otorga a \"$1\" el control de sus cuentas y activos de $2. Asegúrese de que confía en \"$1\" antes de continuar.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Este complemento solicita los siguientes permisos:"
- },
"snapUpdate": {
"message": "Actualizar complemento"
},
- "snapUpdateExplanation": {
- "message": "$1 necesita una versión más reciente de su complemento.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Complementos"
},
diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json
index 97e1254ac..78408e2db 100644
--- a/app/_locales/fr/messages.json
+++ b/app/_locales/fr/messages.json
@@ -3376,16 +3376,9 @@
"message": "Vous autorisez $2 à accéder à la clé du snap « $1 ». Cette action est irréversible et accorde à « $1 » le contrôle de vos comptes et actifs $2. Assurez-vous que vous faites confiance à « $1 » avant de continuer.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Ce snap demande les autorisations suivantes :"
- },
"snapUpdate": {
"message": "Mettre à jour Snap"
},
- "snapUpdateExplanation": {
- "message": "$1 a besoin d’une version plus récente de votre snap.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snaps"
},
diff --git a/app/_locales/hi/messages.json b/app/_locales/hi/messages.json
index 65ebfc994..61eafe59d 100644
--- a/app/_locales/hi/messages.json
+++ b/app/_locales/hi/messages.json
@@ -3376,16 +3376,9 @@
"message": "आप स्नैप \"$1\" के लिए $2 कुंजी का एक्सेस प्रदान कर रहे हैं। यह अपरिवर्तनीय है और आपके $2 खातों और संपत्तियों पर \"$1\" नियंत्रण प्रदान करता है। आगे बढ़ने से पहले सुनिश्चित करें कि आप \"$1\" पर भरोसा करते हैं।",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "ये स्नैप निम्नलिखित अनुमतियों हेतु अनुरोध कर रहा है:"
- },
"snapUpdate": {
"message": "स्नैप अपडेट करें"
},
- "snapUpdateExplanation": {
- "message": "$1 को आपके स्नैप के नए वर्जन की जरूरत है।",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "स्नैप्स"
},
diff --git a/app/_locales/id/messages.json b/app/_locales/id/messages.json
index d8edf57a2..76dd89d9b 100644
--- a/app/_locales/id/messages.json
+++ b/app/_locales/id/messages.json
@@ -3376,16 +3376,9 @@
"message": "Anda memberikan $2 akses kunci ke snap \"$1\". Tindakan ini tidak dapat dibatalkan dan memberikan kendali \"$1\" atas akun dan aset $2 Anda. Sebelum melanjutkan, pastikan \"$1\" aman.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Snap ini meminta izin berikut:"
- },
"snapUpdate": {
"message": "Perbarui Snap"
},
- "snapUpdateExplanation": {
- "message": "$1 memerlukan versi snap yang lebih baru.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snap"
},
diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json
index 16f6624fa..eb13dbc01 100644
--- a/app/_locales/ja/messages.json
+++ b/app/_locales/ja/messages.json
@@ -3376,16 +3376,9 @@
"message": "スナップ「$1」に $2 へのキーアクセスを許可しようとしています。この操作は取り消し不能であり、$2 アカウントとアセットのコントロールを「$1」に許可することになります。続行する前に、必ず「$1」が信頼できることを確認してください。",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "このスナップが次のパーミッションをリクエストしています:"
- },
"snapUpdate": {
"message": "スナップを更新"
},
- "snapUpdateExplanation": {
- "message": "$1 に新しいバージョンのスナップが必要です。",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "スナップ"
},
diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json
index c328b268c..7b24d0458 100644
--- a/app/_locales/ko/messages.json
+++ b/app/_locales/ko/messages.json
@@ -3376,16 +3376,9 @@
"message": "'$1' 스냅 이용에 필요한 $2 키 액세스 권한을 부여하고 있습니다. 이 작업은 사용자의 $2 계정과 자산에 '$1' 제어 권한을 부여하며 취소가 불가능합니다. '$1의 신뢰성을 확인한 후에 진행하세요.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "이 스냅이 다음 권한을 요청하고 있습니다."
- },
"snapUpdate": {
"message": "스냅 업데이트"
},
- "snapUpdateExplanation": {
- "message": "$1에는 스냅의 새 버전이 필요합니다",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "스냅"
},
diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json
index 2c06c360f..ae39ab7d9 100644
--- a/app/_locales/pt/messages.json
+++ b/app/_locales/pt/messages.json
@@ -3376,16 +3376,9 @@
"message": "Você está concedendo ao snap \"$1\" acesso à sua chave $2. Isso é irrevogável e concede a \"$1\" controle de suas contas e ativos $2. Certifique-se de que confia em \"$1\" antes de prosseguir.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Esse snap está solicitando as seguintes permissões:"
- },
"snapUpdate": {
"message": "Atualizar snap"
},
- "snapUpdateExplanation": {
- "message": "$1 precisa de uma versão mais nova do seu snap.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snaps"
},
diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json
index 4e20ccf14..f4edcbfc1 100644
--- a/app/_locales/ru/messages.json
+++ b/app/_locales/ru/messages.json
@@ -3376,16 +3376,9 @@
"message": "Вы предоставляете ключ доступа $2 к привязке \"$1\". Это действие нельзя отменить, и оно предоставляет \"$1\" управление всеми счетами и активами $2. Перед тем как продолжить, убедитесь, что доверяете \"$1\".",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Этот снап запрашивает следующие разрешения:"
- },
"snapUpdate": {
"message": "Обновить снап"
},
- "snapUpdateExplanation": {
- "message": "$1 нужна более новая версия вашей привязки.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Снапы"
},
diff --git a/app/_locales/tl/messages.json b/app/_locales/tl/messages.json
index dd8593209..461e9f291 100644
--- a/app/_locales/tl/messages.json
+++ b/app/_locales/tl/messages.json
@@ -3376,16 +3376,9 @@
"message": "Binibigyan mo ang $2 ng key access sa snap na \"$1\". Hindi na ito mababawi at nagbibigay ito sa \"$1\" ng kontrol sa iyong mga $2 account at asset. Tiyaking pinagkakatiwalaan mo ang \"$1\" bago magpatuloy.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Hinihiling ng snap na ito ang mga sumusunod na pahintulot:"
- },
"snapUpdate": {
"message": "I-update ang snap"
},
- "snapUpdateExplanation": {
- "message": "Kailangan ng $1 ng bagong bersyon ng iyong snap.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Mga Snap"
},
diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json
index f08af92c7..8472fce54 100644
--- a/app/_locales/tr/messages.json
+++ b/app/_locales/tr/messages.json
@@ -3376,16 +3376,9 @@
"message": "\"$1\" için $2 anahtar erişimi veriyorsunuz. Bu iptal edilemez ve $2 hesaplarınıza ve varlıklarınıza \"$1\" kontrolü verir. İlerlemeden önce \"$1\" alanına güvendiğinizden emin olun.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Bu ek, aşağıdaki izinleri istiyor:"
- },
"snapUpdate": {
"message": "Snap'i güncelle"
},
- "snapUpdateExplanation": {
- "message": "$1 için daha yeni bir snap sürümü gerekli.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snap'ler"
},
diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json
index dd7b0f795..892ad6942 100644
--- a/app/_locales/vi/messages.json
+++ b/app/_locales/vi/messages.json
@@ -3376,16 +3376,9 @@
"message": "Bạn đang cấp quyền truy cập khóa $2 cho Snap \"$1\". Hành động này không thể hủy bỏ và sẽ cấp quyền kiểm soát tài khoản và tài sản $2 của bạn cho \"$1\". Đảm bảo bạn tin tưởng \"$1\" trước khi tiếp tục.",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "Snap này đang yêu cầu các quyền sau:"
- },
"snapUpdate": {
"message": "Cập nhật Snap"
},
- "snapUpdateExplanation": {
- "message": "$1 cần một phiên bản Snap mới hơn.",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snap"
},
diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json
index 981759685..9fec36276 100644
--- a/app/_locales/zh_CN/messages.json
+++ b/app/_locales/zh_CN/messages.json
@@ -3376,16 +3376,9 @@
"message": "您正在向snap \"$1\"授予$2的密钥访问权限。此操作不可撤销,并会向\"$1\"授予对您的$2账户和资产的控制权。在继续之前,请确保您信任\"$1\"。",
"description": "The first parameter is the name of the snap and the second one is the protocol"
},
- "snapRequestsPermission": {
- "message": "此Snap正在请求以下权限:"
- },
"snapUpdate": {
"message": "更新Snap"
},
- "snapUpdateExplanation": {
- "message": "$1需要更新版本的snap。",
- "description": "$1 is the dapp that is requesting an update to the snap."
- },
"snaps": {
"message": "Snap"
},
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 61f52a635..c42770804 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -787,6 +787,7 @@ export default class MetamaskController extends EventEmitter {
`${this.permissionController.name}:getSubjectNames`,
`${this.permissionController.name}:updateCaveat`,
`${this.approvalController.name}:addRequest`,
+ `${this.approvalController.name}:updateRequestState`,
`${this.permissionController.name}:grantPermissions`,
`${this.subjectMetadataController.name}:getSubjectMetadata`,
'ExecutionService:executeSnap',
@@ -3979,7 +3980,6 @@ export default class MetamaskController extends EventEmitter {
sendMetrics: this.metaMetricsController.trackEvent.bind(
this.metaMetricsController,
),
-
// Permission-related
getAccounts: this.getPermittedAccounts.bind(this, origin),
getPermissionsForOrigin: this.permissionController.getPermissions.bind(
diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json
index 98e2ef7d2..116df79f1 100644
--- a/lavamoat/browserify/beta/policy.json
+++ b/lavamoat/browserify/beta/policy.json
@@ -1392,7 +1392,7 @@
"packages": {
"@metamask/key-tree": true,
"@metamask/key-tree>@noble/hashes": true,
- "@metamask/rpc-methods>@metamask/utils": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true
}
},
@@ -1410,18 +1410,6 @@
"browserify>buffer": true
}
},
- "@metamask/rpc-methods>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/rpc-methods>nanoid": {
"globals": {
"crypto.getRandomValues": true
diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json
index a84edb962..ac03c7631 100644
--- a/lavamoat/browserify/desktop/policy.json
+++ b/lavamoat/browserify/desktop/policy.json
@@ -1542,10 +1542,10 @@
"@metamask/key-tree>@noble/hashes": true,
"@metamask/rpc-methods>@metamask/browser-passworder": true,
"@metamask/rpc-methods>@metamask/permission-controller": true,
- "@metamask/rpc-methods>@metamask/utils": true,
"@metamask/rpc-methods>nanoid": true,
"@metamask/snaps-ui": true,
"@metamask/snaps-utils": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true,
"eth-rpc-errors": true
}
@@ -1594,18 +1594,6 @@
"ethjs>ethjs-unit": true
}
},
- "@metamask/rpc-methods>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/rpc-methods>nanoid": {
"globals": {
"crypto.getRandomValues": true
@@ -1669,7 +1657,6 @@
"@metamask/snaps-controllers>@metamask/base-controller": true,
"@metamask/snaps-controllers>@metamask/permission-controller": true,
"@metamask/snaps-controllers>@metamask/subject-metadata-controller": true,
- "@metamask/snaps-controllers>@metamask/utils": true,
"@metamask/snaps-controllers>@xstate/fsm": true,
"@metamask/snaps-controllers>concat-stream": true,
"@metamask/snaps-controllers>gunzip-maybe": true,
@@ -1677,6 +1664,7 @@
"@metamask/snaps-controllers>readable-web-to-node-stream": true,
"@metamask/snaps-controllers>tar-stream": true,
"@metamask/snaps-utils": true,
+ "@metamask/utils": true,
"eth-rpc-errors": true,
"json-rpc-engine": true,
"json-rpc-middleware-stream": true,
@@ -1718,18 +1706,6 @@
"@metamask/snaps-controllers>@metamask/base-controller": true
}
},
- "@metamask/snaps-controllers>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/snaps-controllers>concat-stream": {
"packages": {
"@metamask/snaps-controllers>concat-stream>readable-stream": true,
@@ -1878,22 +1854,10 @@
},
"@metamask/snaps-ui": {
"packages": {
- "@metamask/snaps-ui>@metamask/utils": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true
}
},
- "@metamask/snaps-ui>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/snaps-utils": {
"globals": {
"TextDecoder": true,
@@ -1907,27 +1871,15 @@
"packages": {
"@metamask/key-tree>@noble/hashes": true,
"@metamask/key-tree>@scure/base": true,
- "@metamask/snaps-utils>@metamask/utils": true,
"@metamask/snaps-utils>cron-parser": true,
"@metamask/snaps-utils>fast-json-stable-stringify": true,
"@metamask/snaps-utils>rfdc": true,
"@metamask/snaps-utils>validate-npm-package-name": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true,
"semver": true
}
},
- "@metamask/snaps-utils>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/snaps-utils>cron-parser": {
"packages": {
"browserify>browser-resolve": true,
diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json
index a84edb962..ac03c7631 100644
--- a/lavamoat/browserify/flask/policy.json
+++ b/lavamoat/browserify/flask/policy.json
@@ -1542,10 +1542,10 @@
"@metamask/key-tree>@noble/hashes": true,
"@metamask/rpc-methods>@metamask/browser-passworder": true,
"@metamask/rpc-methods>@metamask/permission-controller": true,
- "@metamask/rpc-methods>@metamask/utils": true,
"@metamask/rpc-methods>nanoid": true,
"@metamask/snaps-ui": true,
"@metamask/snaps-utils": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true,
"eth-rpc-errors": true
}
@@ -1594,18 +1594,6 @@
"ethjs>ethjs-unit": true
}
},
- "@metamask/rpc-methods>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/rpc-methods>nanoid": {
"globals": {
"crypto.getRandomValues": true
@@ -1669,7 +1657,6 @@
"@metamask/snaps-controllers>@metamask/base-controller": true,
"@metamask/snaps-controllers>@metamask/permission-controller": true,
"@metamask/snaps-controllers>@metamask/subject-metadata-controller": true,
- "@metamask/snaps-controllers>@metamask/utils": true,
"@metamask/snaps-controllers>@xstate/fsm": true,
"@metamask/snaps-controllers>concat-stream": true,
"@metamask/snaps-controllers>gunzip-maybe": true,
@@ -1677,6 +1664,7 @@
"@metamask/snaps-controllers>readable-web-to-node-stream": true,
"@metamask/snaps-controllers>tar-stream": true,
"@metamask/snaps-utils": true,
+ "@metamask/utils": true,
"eth-rpc-errors": true,
"json-rpc-engine": true,
"json-rpc-middleware-stream": true,
@@ -1718,18 +1706,6 @@
"@metamask/snaps-controllers>@metamask/base-controller": true
}
},
- "@metamask/snaps-controllers>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/snaps-controllers>concat-stream": {
"packages": {
"@metamask/snaps-controllers>concat-stream>readable-stream": true,
@@ -1878,22 +1854,10 @@
},
"@metamask/snaps-ui": {
"packages": {
- "@metamask/snaps-ui>@metamask/utils": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true
}
},
- "@metamask/snaps-ui>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/snaps-utils": {
"globals": {
"TextDecoder": true,
@@ -1907,27 +1871,15 @@
"packages": {
"@metamask/key-tree>@noble/hashes": true,
"@metamask/key-tree>@scure/base": true,
- "@metamask/snaps-utils>@metamask/utils": true,
"@metamask/snaps-utils>cron-parser": true,
"@metamask/snaps-utils>fast-json-stable-stringify": true,
"@metamask/snaps-utils>rfdc": true,
"@metamask/snaps-utils>validate-npm-package-name": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true,
"semver": true
}
},
- "@metamask/snaps-utils>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/snaps-utils>cron-parser": {
"packages": {
"browserify>browser-resolve": true,
diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json
index 98e2ef7d2..116df79f1 100644
--- a/lavamoat/browserify/main/policy.json
+++ b/lavamoat/browserify/main/policy.json
@@ -1392,7 +1392,7 @@
"packages": {
"@metamask/key-tree": true,
"@metamask/key-tree>@noble/hashes": true,
- "@metamask/rpc-methods>@metamask/utils": true,
+ "@metamask/utils": true,
"@metamask/utils>superstruct": true
}
},
@@ -1410,18 +1410,6 @@
"browserify>buffer": true
}
},
- "@metamask/rpc-methods>@metamask/utils": {
- "globals": {
- "TextDecoder": true,
- "TextEncoder": true
- },
- "packages": {
- "@metamask/utils>superstruct": true,
- "browserify>buffer": true,
- "nock>debug": true,
- "semver": true
- }
- },
"@metamask/rpc-methods>nanoid": {
"globals": {
"crypto.getRandomValues": true
diff --git a/package.json b/package.json
index f8957699d..cffda1384 100644
--- a/package.json
+++ b/package.json
@@ -237,7 +237,7 @@
"@metamask/etherscan-link": "^2.2.0",
"@metamask/gas-fee-controller": "^1.0.0",
"@metamask/jazzicon": "^2.0.0",
- "@metamask/key-tree": "^6.2.1",
+ "@metamask/key-tree": "^7.0.0",
"@metamask/logo": "^3.1.1",
"@metamask/metamask-eth-abis": "^3.0.0",
"@metamask/notification-controller": "^1.0.0",
@@ -247,13 +247,13 @@
"@metamask/post-message-stream": "^6.0.0",
"@metamask/providers": "^10.2.1",
"@metamask/rate-limit-controller": "^1.0.0",
- "@metamask/rpc-methods": "^0.30.0",
+ "@metamask/rpc-methods": "^0.31.0",
"@metamask/scure-bip39": "^2.0.3",
"@metamask/slip44": "^2.1.0",
"@metamask/smart-transactions-controller": "^3.1.0",
- "@metamask/snaps-controllers": "^0.30.0",
- "@metamask/snaps-ui": "^0.30.0",
- "@metamask/snaps-utils": "^0.30.0",
+ "@metamask/snaps-controllers": "^0.31.0",
+ "@metamask/snaps-ui": "^0.31.0",
+ "@metamask/snaps-utils": "^0.31.0",
"@metamask/subject-metadata-controller": "^1.0.0",
"@metamask/utils": "^5.0.0",
"@ngraveio/bc-ur": "^1.1.6",
diff --git a/test/e2e/snaps/enums.js b/test/e2e/snaps/enums.js
index c5992424c..c9dccd198 100644
--- a/test/e2e/snaps/enums.js
+++ b/test/e2e/snaps/enums.js
@@ -1,3 +1,3 @@
module.exports = {
- TEST_SNAPS_WEBSITE_URL: 'https://metamask.github.io/test-snaps/5.0.3/',
+ TEST_SNAPS_WEBSITE_URL: 'https://metamask.github.io/test-snaps/5.1.0/',
};
diff --git a/test/e2e/snaps/test-snap-bip-32.spec.js b/test/e2e/snaps/test-snap-bip-32.spec.js
index e69cdce34..2a5174498 100644
--- a/test/e2e/snaps/test-snap-bip-32.spec.js
+++ b/test/e2e/snaps/test-snap-bip-32.spec.js
@@ -53,16 +53,8 @@ describe('Test Snap bip-32', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // switch to metamask extension
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
-
- // approve install of snap
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
@@ -77,6 +69,13 @@ describe('Test Snap bip-32', function () {
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// switch back to test-snaps window
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-bip-44.spec.js b/test/e2e/snaps/test-snap-bip-44.spec.js
index ad12ac0ac..126ad5e5b 100644
--- a/test/e2e/snaps/test-snap-bip-44.spec.js
+++ b/test/e2e/snaps/test-snap-bip-44.spec.js
@@ -52,16 +52,8 @@ describe('Test Snap bip-44', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // switch to metamask extension
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
-
- // approve install of snap
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
@@ -76,6 +68,13 @@ describe('Test Snap bip-44', function () {
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// click send inputs on test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-cronjob.spec.js b/test/e2e/snaps/test-snap-cronjob.spec.js
index d94d692ba..78a15490a 100644
--- a/test/e2e/snaps/test-snap-cronjob.spec.js
+++ b/test/e2e/snaps/test-snap-cronjob.spec.js
@@ -52,19 +52,20 @@ describe('Test Snap Cronjob', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(3, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// click send inputs on test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-dialog.spec.js b/test/e2e/snaps/test-snap-dialog.spec.js
index 4ca53ae22..031d14271 100644
--- a/test/e2e/snaps/test-snap-dialog.spec.js
+++ b/test/e2e/snaps/test-snap-dialog.spec.js
@@ -52,19 +52,20 @@ describe('Test Snap Dialog', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(3, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// switch to test snaps tab
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-error.spec.js b/test/e2e/snaps/test-snap-error.spec.js
index 2e72a9b92..a57f2241e 100644
--- a/test/e2e/snaps/test-snap-error.spec.js
+++ b/test/e2e/snaps/test-snap-error.spec.js
@@ -38,7 +38,7 @@ describe('Test Snap Error', function () {
await driver.delay(1000);
// switch to metamask extension and click connect
- let windowHandles = await driver.waitUntilXWindowHandles(
+ const windowHandles = await driver.waitUntilXWindowHandles(
3,
1000,
10000,
@@ -53,19 +53,20 @@ describe('Test Snap Error', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(3, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// click send inputs on test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-installed.spec.js b/test/e2e/snaps/test-snap-installed.spec.js
index 2645c9b00..c5adf1637 100644
--- a/test/e2e/snaps/test-snap-installed.spec.js
+++ b/test/e2e/snaps/test-snap-installed.spec.js
@@ -52,19 +52,20 @@ describe('Test Snap Installed', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(3, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// click send inputs on test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
@@ -90,20 +91,20 @@ describe('Test Snap Installed', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // approve install of snap
- windowHandles = await driver.getAllWindowHandles();
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
// wait for npm installation success
diff --git a/test/e2e/snaps/test-snap-management.spec.js b/test/e2e/snaps/test-snap-management.spec.js
index f66068b53..b8eab6b0b 100644
--- a/test/e2e/snaps/test-snap-management.spec.js
+++ b/test/e2e/snaps/test-snap-management.spec.js
@@ -54,21 +54,19 @@ describe('Test Snap Management', function () {
tag: 'button',
});
- await driver.delay(1000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // approve install of snap
- windowHandles = await driver.getAllWindowHandles();
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
- // delay for npm installation
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
// switch to the original MM tab
const extensionPage = windowHandles[0];
diff --git a/test/e2e/snaps/test-snap-managestate.spec.js b/test/e2e/snaps/test-snap-managestate.spec.js
index bbf2d5bcf..7e209d01a 100644
--- a/test/e2e/snaps/test-snap-managestate.spec.js
+++ b/test/e2e/snaps/test-snap-managestate.spec.js
@@ -41,7 +41,7 @@ describe('Test Snap manageState', function () {
await driver.delay(1000);
// switch to metamask extension and click connect
- let windowHandles = await driver.waitUntilXWindowHandles(
+ const windowHandles = await driver.waitUntilXWindowHandles(
2,
1000,
10000,
@@ -54,19 +54,21 @@ describe('Test Snap manageState', function () {
text: 'Connect',
tag: 'button',
});
- await driver.delay(2000);
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
+ await driver.waitForSelector({ text: 'Approve & install' });
+
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// fill and click send inputs on test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-notification.spec.js b/test/e2e/snaps/test-snap-notification.spec.js
index bf4ad409a..26809c18d 100644
--- a/test/e2e/snaps/test-snap-notification.spec.js
+++ b/test/e2e/snaps/test-snap-notification.spec.js
@@ -40,7 +40,7 @@ describe('Test Snap Notification', function () {
await driver.delay(1000);
// switch to metamask extension and click connect
- let windowHandles = await driver.waitUntilXWindowHandles(
+ const windowHandles = await driver.waitUntilXWindowHandles(
3,
1000,
10000,
@@ -54,19 +54,21 @@ describe('Test Snap Notification', function () {
text: 'Connect',
tag: 'button',
});
- await driver.delay(2000);
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(3, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
+ await driver.waitForSelector({ text: 'Approve & install' });
+
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// click send inputs on test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
diff --git a/test/e2e/snaps/test-snap-rpc.spec.js b/test/e2e/snaps/test-snap-rpc.spec.js
index 3f1716c5b..0f512c6fe 100644
--- a/test/e2e/snaps/test-snap-rpc.spec.js
+++ b/test/e2e/snaps/test-snap-rpc.spec.js
@@ -28,13 +28,15 @@ describe('Test Snap RPC', function () {
await driver.fill('#password', 'correct horse battery staple');
await driver.press('#password', driver.Key.ENTER);
- // navigate to test snaps page and connect
+ // navigate to test snaps page
await driver.driver.get(TEST_SNAPS_WEBSITE_URL);
await driver.delay(1000);
- const snapButton1 = await driver.findElement('#connectRpcSnap');
+
+ // find and scroll to the bip32 test and connect
+ const snapButton1 = await driver.findElement('#connectBip32');
await driver.scrollToElement(snapButton1);
await driver.delay(1000);
- await driver.clickElement('#connectRpcSnap');
+ await driver.clickElement('#connectBip32');
await driver.delay(1000);
// switch to metamask extension and click connect
@@ -52,20 +54,62 @@ describe('Test Snap RPC', function () {
tag: 'button',
});
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
+
+ await driver.clickElement({
+ text: 'Approve & install',
+ tag: 'button',
+ });
+
+ // wait for permissions popover, click checkboxes and confirm
+ await driver.delay(1000);
+ await driver.clickElement('#key-access-bip32-m-44h-0h-secp256k1-0');
+ await driver.clickElement('#key-access-bip32-m-44h-0h-ed25519-0');
+ await driver.clickElement({
+ text: 'Confirm',
+ tag: 'button',
+ });
+
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
+ // switch back to test-snaps window
+ await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
+
+ const snapButton2 = await driver.findElement('#connectRpcSnap');
+ await driver.scrollToElement(snapButton2);
+ await driver.delay(1000);
+ await driver.clickElement('#connectRpcSnap');
+ await driver.delay(1000);
- // approve install of snap
windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
await driver.switchToWindowWithTitle(
'MetaMask Notification',
windowHandles,
);
+ await driver.clickElement({
+ text: 'Connect',
+ tag: 'button',
+ });
+
+ await driver.waitForSelector({ text: 'Approve & install' });
+
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
- // switch back to test snaps page
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
// wait for npm installation success
@@ -75,56 +119,14 @@ describe('Test Snap RPC', function () {
});
// click send inputs on test snap page
- const snapButton2 = await driver.findElement('#sendRpc');
- await driver.scrollToElement(snapButton2);
+ const snapButton3 = await driver.findElement('#sendRpc');
+ await driver.scrollToElement(snapButton3);
await driver.delay(1000);
await driver.clickElement('#sendRpc');
- // approve and install part one
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
- await driver.clickElement({
- text: 'Approve & install',
- tag: 'button',
- });
-
- // wait for window to close
- await driver.delay(2000);
-
- // approve and install part two
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
- await driver.clickElement({
- text: 'Approve & install',
- tag: 'button',
- });
-
- // wait for permissions popover
- await driver.waitForSelector({
- text: 'Confirm',
- tag: 'button',
- });
-
- // click checkboxes and confirm
- await driver.clickElement('#key-access-bip32-m-44h-0h-secp256k1-0');
- await driver.clickElement('#key-access-bip32-m-44h-0h-ed25519-0');
- await driver.clickElement({
- text: 'Confirm',
- tag: 'button',
- });
-
// delay for result creation
await driver.delay(2500);
- // check the results of the custom confirm
- windowHandles = await driver.waitUntilXWindowHandles(1, 1000, 10000);
- await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
const confirmResult = await driver.findElement('#rpcResult');
assert.equal(
await confirmResult.getText(),
diff --git a/test/e2e/snaps/test-snap-txinsights.spec.js b/test/e2e/snaps/test-snap-txinsights.spec.js
index 4003501a6..b8fbe0063 100644
--- a/test/e2e/snaps/test-snap-txinsights.spec.js
+++ b/test/e2e/snaps/test-snap-txinsights.spec.js
@@ -53,26 +53,21 @@ describe('Test Snap TxInsights', function () {
tag: 'button',
});
- // delay for npm installation
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Approve & install' });
- // switch to metamask extension
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
-
- // approve install of snap
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
});
- await driver.delay(1000);
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
// switch to test-snaps page and get accounts
- windowHandles = await driver.waitUntilXWindowHandles(1, 1000, 10000);
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
await driver.clickElement('#getAccounts');
await driver.delay(1000);
diff --git a/test/e2e/snaps/test-snap-update.spec.js b/test/e2e/snaps/test-snap-update.spec.js
index 472b5a1de..523356bac 100644
--- a/test/e2e/snaps/test-snap-update.spec.js
+++ b/test/e2e/snaps/test-snap-update.spec.js
@@ -53,14 +53,9 @@ describe('Test Snap update', function () {
text: 'Connect',
tag: 'button',
});
- await driver.delay(2000);
- // approve install of snap
- windowHandles = await driver.waitUntilXWindowHandles(2, 1000, 10000);
- await driver.switchToWindowWithTitle(
- 'MetaMask Notification',
- windowHandles,
- );
+ await driver.waitForSelector({ text: 'Approve & install' });
+
await driver.clickElement({
text: 'Approve & install',
tag: 'button',
@@ -75,6 +70,13 @@ describe('Test Snap update', function () {
tag: 'button',
});
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
+
// navigate to test snap page
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
@@ -101,16 +103,22 @@ describe('Test Snap update', function () {
'MetaMask Notification',
windowHandles,
);
+
+ await driver.waitForSelector({ text: 'Approve & update' });
+
await driver.clickElement({
text: 'Approve & update',
tag: 'button',
});
- // delay for npm installation
- await driver.delay(2000);
+ await driver.waitForSelector({ text: 'Ok' });
+
+ await driver.clickElement({
+ text: 'Ok',
+ tag: 'button',
+ });
// navigate to test snap page
- windowHandles = await driver.waitUntilXWindowHandles(1, 1000, 10000);
await driver.switchToWindowWithTitle('Test Snaps', windowHandles);
// look for the correct version text
diff --git a/ui/components/app/flask/install-error/index.js b/ui/components/app/flask/install-error/index.js
new file mode 100644
index 000000000..b6c937ba2
--- /dev/null
+++ b/ui/components/app/flask/install-error/index.js
@@ -0,0 +1 @@
+export { default } from './install-error';
diff --git a/ui/components/app/flask/install-error/install-error.js b/ui/components/app/flask/install-error/install-error.js
new file mode 100644
index 000000000..39ecddf65
--- /dev/null
+++ b/ui/components/app/flask/install-error/install-error.js
@@ -0,0 +1,39 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import Box from '../../../ui/box/box';
+import {
+ AlignItems,
+ BLOCK_SIZES,
+ FLEX_DIRECTION,
+ FONT_WEIGHT,
+ JustifyContent,
+ TextVariant,
+} from '../../../../helpers/constants/design-system';
+import ActionableMessage from '../../../ui/actionable-message/actionable-message';
+import { Text } from '../../../component-library';
+
+const InstallError = ({ title, error }) => {
+ return (
+