status-desktop/storybook/qmlTests/tests/helpers/wallet_connect.js

174 lines
5.6 KiB
JavaScript

const requiredEventsJsonString = `["chainChanged", "accountsChanged"]`
const requiredMethodsJsonString = `["eth_sendTransaction","personal_sign"]`
const optionalNamespacesJsonString = `{
"eip155": {
"chains": [
"eip155:1",
"eip155:10"
],
"events": [
"chainChanged",
"accountsChanged",
"message",
"disconnect",
"connect"
],
"methods": [
"eth_sign",
"eth_signTransaction",
"eth_signTypedData",
"eth_signTypedData_v3",
"eth_signTypedData_v4",
"eth_sendTransaction"
],
"rpcMap": {
"1": "https://cloudflare-eth.com",
"10": "https://mainnet.optimism.io/"
}
}
}`
const requiredNamespacesJsonString = `{
"eip155": {
"chains": [
"eip155:1"
],
"events": ${requiredEventsJsonString},
"methods": ${requiredMethodsJsonString},
"rpcMap": {
"1": "https://mainnet.io/123"
}
}
}`
const dappName = 'Test dApp'
const dappUrl = 'https://app.test.org'
const dappFirstIcon = 'https://test.com/icon.png'
const dappMetadataJsonString = `{
"description": "Test dApp description",
"icons": [
"${dappFirstIcon}"
],
"name": "${dappName}",
"url": "${dappUrl}"
}`
// https://metamask.github.io/test-dapp/ use case that doesn't have icons
const noIconsDappMetadataJsonString = `{
"description": "This is the E2e Test Dapp",
"name": "${dappName}",
"url": "${dappUrl}"
}`
const verifiedContextJsonString = `{
"verified": {
"origin": "https://app.test.org",
"validation": "UNKNOWN",
"verifyUrl": "https://verify.walletconnect.com"
}
}`
function formatSessionProposal(custom) {
var dappMetadataJsonStringOverride = dappMetadataJsonString
if (custom && custom.dappMetadataJsonString) {
dappMetadataJsonStringOverride = custom.dappMetadataJsonString
}
return `{
"id": 1715976881734096,
"params": {
"expiryTimestamp": 1715977219,
"id": 1715976881734096,
"optionalNamespaces": ${optionalNamespacesJsonString},
"pairingTopic": "50fba141cdb5c015493c2907c46bacf9f7cbd7c8e3d4e97df891f18dddcff69c",
"proposer": {
"metadata": ${dappMetadataJsonStringOverride},
"publicKey": "095d9992ca0eb6081cabed26faf48919162fd70cc66d639f118a60507ae0463d"
},
"relays": [
{
"protocol": "irn"
}
],
"requiredNamespaces": ${requiredNamespacesJsonString}
},
"verifyContext": ${verifiedContextJsonString}
}`
}
function formatBuildApprovedNamespacesResult(networksArray, accountsArray) {
let requiredChainsStr = networksArray.map(chainId => `"eip155:${chainId}"`).join(',')
let requiredAccountsStr = accountsArray.map(address => networksArray.map(chainId => `"eip155:${chainId}:${address}"`).join(',')).join(',')
return `{
"eip155": {
"chains": [${requiredChainsStr}],
"accounts": [${requiredAccountsStr}],
"events": ${requiredEventsJsonString},
"methods": ${requiredMethodsJsonString}
}
}`
}
function formatApproveSessionResponse(networksArray, accountsArray, custom) {
var dappMetadataJsonStringOverride = dappMetadataJsonString
if (custom && custom.dappMetadataJsonString) {
dappMetadataJsonStringOverride = custom.dappMetadataJsonString
}
let chainsStr = networksArray.map(chainId => `"eip155:${chainId}"`).join(',')
let accountsStr = accountsArray.map(address => networksArray.map(chainId => `"eip155:${chainId}:${address}"`).join(',')).join(',')
return `{
"acknowledged": true,
"controller": "da4a87d5f0f54951afe870ebf020cf03f8a3522fbd219398c3fa159a37e16d54",
"expiry": 1716581732,
"namespaces": {
"eip155": {
"accounts": [${accountsStr}],
"chains": [${chainsStr}],
"events": ${requiredEventsJsonString},
"methods": ${requiredMethodsJsonString}
}
},
"optionalNamespaces": ${optionalNamespacesJsonString},
"pairingTopic": "50fba141cdb5c015493c2907c46bacf9f7cbd7c8e3d4e97df891f18dddcff69c",
"peer": {
"metadata": ${dappMetadataJsonStringOverride},
"publicKey": "095d9992ca0eb6081cabed26faf48919162fd70cc66d639f118a60507ae0463d"
},
"relay": {
"protocol": "irn"
},
"requiredNamespaces": ${requiredNamespacesJsonString},
"self": {
"metadata": {
"description": "Status Wallet",
"icons": [
"https://status.im/img/status-footer-logo.svg"
],
"name": "Status",
"url": "http://localhost"
},
"publicKey": "da4a87d5f0f54951afe870ebf020cf03f8a3522fbd219398c3fa159a37e16d54"
},
"topic": "e39e1f435a46b5ee6b31484d1751cfbc35be1275653af2ea340974a7592f1a19"
}`
}
function formatSessionRequest(chainId, method, params, topic, requestId) {
const reqId = requestId || 1717149885151715
const expiry = Date.now() / 1000 + 6000
let paramsStr = params.map(param => `${param}`).join(',')
return `{
"id": ${reqId},
"params": {
"chainId": "eip155:${chainId}",
"request": {
"expiryTimestamp": ${expiry},
"method": "${method}",
"params": [${paramsStr}]
}
},
"topic": "${topic}",
"verifyContext": ${verifiedContextJsonString}
}`
}