174 lines
5.6 KiB
JavaScript
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}
|
|
}`
|
|
} |