81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import { getSelectedNetwork, numToHexStr } from "@/utils/platform";
|
|
import type { RequestArguments } from '@/extension/types'
|
|
|
|
const allowedMethods = {
|
|
'eth_accounts': true,
|
|
'eth_requestAccounts' : true,
|
|
'eth_chainId': true,
|
|
'personal_sign' : true,
|
|
'wallet_requestPermissions': true,
|
|
'eth_gasPrice': true,
|
|
'eth_getBlockByNumber': true,
|
|
'eth_blockNumber': true,
|
|
'eth_estimateGas': true,
|
|
'eth_sign': true,
|
|
'net_version': true,
|
|
'eth_sendTransaction': true,
|
|
'wallet_switchEthereumChain': true,
|
|
'eth_call': true,
|
|
'eth_getBalance': true,
|
|
'eth_getTransactionByHash': true,
|
|
'eth_getTransactionReceipt': true,
|
|
'signTypedData': true,
|
|
'eth_signTypedData': true,
|
|
'signTypedData_v1': true,
|
|
'eth_signTypedData_v1': true,
|
|
'signTypedData_v3': true,
|
|
'eth_signTypedData_V3': true,
|
|
'signTypedData_v4': true,
|
|
'eth_signTypedData_v4': true,
|
|
}
|
|
|
|
window.addEventListener("message", (event) => {
|
|
if (event.source != window)
|
|
return;
|
|
|
|
if (event.data.type && (event.data.type === "CLWALLET_CONTENT")) {
|
|
event.data.data.resId = event.data.resId
|
|
event.data.data.type = "CLWALLET_CONTENT_MSG"
|
|
if((event?.data?.data?.method ?? 'x') in allowedMethods) {
|
|
chrome.runtime.sendMessage(event.data.data, (res) => {
|
|
const data = { type: "CLWALLET_PAGE", data: res, resId: event.data.resId, website: window?.location?.href ?? '' };
|
|
// console.log('data back', data)
|
|
window.postMessage(data, "*");
|
|
})
|
|
}
|
|
else {
|
|
const data = { type: "CLWALLET_PAGE", data: { error: true, message: 'Unknown method requested'}, resId: event.data.resId };
|
|
window.postMessage(data, "*");
|
|
}
|
|
} else if (event.data.type && (event.data.type === "CLWALLET_PING")) {
|
|
getSelectedNetwork().then(network => {
|
|
const data = { type: "CLWALLET_PAGE_LISTENER", data: {
|
|
listner: 'connect',
|
|
data: {
|
|
chainId: numToHexStr(network.chainId ?? 0)
|
|
}
|
|
}};
|
|
window.postMessage(data, "*");
|
|
})
|
|
}
|
|
});
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
chrome.runtime.onMessage.addListener((message: RequestArguments , sender, sendResponse) => {
|
|
if(message.type === "CLWALLET_EXT_LISTNER") {
|
|
const data = { type: "CLWALLET_PAGE_LISTENER", data: message.data };
|
|
// console.log('data listner', data)
|
|
window.postMessage(data, "*");
|
|
}
|
|
return true
|
|
});
|
|
|
|
(function() {
|
|
chrome.runtime.connect({
|
|
name: 'content'
|
|
})
|
|
const script = document.createElement('script')
|
|
script.src = chrome.runtime.getURL('src/extension/inject.js')
|
|
document.documentElement.appendChild(script)
|
|
})()
|
|
|