UNPKG

@dgpub/prime-sdk

Version:

Etherspot Prime (Account Abstraction) SDK

112 lines (111 loc) 3.72 kB
"use strict"; 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;