@dgpub/prime-sdk
Version:
Etherspot Prime (Account Abstraction) SDK
112 lines (111 loc) • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Web3WalletProvider = void 0;
const common_1 = require("../../common");
const network_1 = require("../../network");
const dynamic_wallet_provider_1 = require("./dynamic.wallet-provider");
class Web3WalletProvider extends dynamic_wallet_provider_1.DynamicWalletProvider {
static async connect(provider, type = 'Web3') {
const result = new Web3WalletProvider(provider, type);
const connected = await result.refresh();
return connected ? result : null;
}
constructor(web3, type = 'Web3') {
super(type);
this.web3 = web3;
}
get address() {
return this.address$.value;
}
get networkName() {
return this.networkName$.value;
}
async refresh() {
let result = false;
const chainId = await this.sendRequest('eth_chainId');
const networkName = (0, network_1.prepareNetworkName)(chainId);
if (networkName) {
const accounts = await this.sendRequest('eth_accounts');
if (Array.isArray(accounts) && accounts.length) {
const address = (0, common_1.prepareAddress)(accounts[0]);
if (address) {
this.setAddress(address);
this.setNetworkName(networkName);
result = true;
}
}
}
return result;
}
async signMessage(message) {
return this.sendRequest('personal_sign', [
(0, common_1.toHex)(message),
this.address,
], this.address);
}
async signTypedData(typedData, message, accountAddress) {
const chainId = await this.sendRequest('eth_chainId');
const domainSeparator = {
name: "EtherspotWallet",
version: "2.0.0",
chainId: chainId,
verifyingContract: accountAddress
};
let signature = await this.sendRequest('eth_signTypedData_v4', [
this.address,
{
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "version",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"message": typedData
},
"primaryType": "message",
"domain": domainSeparator,
"message": message
}
]);
return signature;
}
async sendRequest(method, params = [], from) {
return new Promise((resolve, reject) => {
const id = Date.now();
this.web3.send({
jsonrpc: '2.0',
method,
params,
id,
from,
}, (err, response) => {
if (err) {
reject(err);
return;
}
let result;
try {
({ result } = response);
}
catch (err) {
result = null;
}
resolve(result || null);
});
});
}
}
exports.Web3WalletProvider = Web3WalletProvider;