/* This file is part of web3.js. web3.js is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. web3.js is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3RequestManager } from 'web3-core'; import { toChecksumAddress, utf8ToHex } from 'web3-utils'; import { formatTransaction } from 'web3-eth'; import { Address, EthPersonalAPI, ETH_DATA_FORMAT, HexString, Transaction } from 'web3-types'; import { validator, isHexStrict } from 'web3-validator'; import { personalRpcMethods } from 'web3-rpc-methods'; export const getAccounts = async (requestManager: Web3RequestManager) => { const result = await personalRpcMethods.getAccounts(requestManager); return result.map(toChecksumAddress); }; export const newAccount = async ( requestManager: Web3RequestManager, password: string, ) => { validator.validate(['string'], [password]); const result = await personalRpcMethods.newAccount(requestManager, password); return toChecksumAddress(result); }; export const unlockAccount = async ( requestManager: Web3RequestManager, address: Address, password: string, unlockDuration: number, ) => { validator.validate(['address', 'string', 'uint'], [address, password, unlockDuration]); return personalRpcMethods.unlockAccount(requestManager, address, password, unlockDuration); }; export const lockAccount = async ( requestManager: Web3RequestManager, address: Address, ) => { validator.validate(['address'], [address]); return personalRpcMethods.lockAccount(requestManager, address); }; export const importRawKey = async ( requestManager: Web3RequestManager, keyData: HexString, passphrase: string, ) => { validator.validate(['string', 'string'], [keyData, passphrase]); return personalRpcMethods.importRawKey(requestManager, keyData, passphrase); }; export const sendTransaction = async ( requestManager: Web3RequestManager, tx: Transaction, passphrase: string, ) => { const formattedTx = formatTransaction(tx, ETH_DATA_FORMAT); return personalRpcMethods.sendTransaction(requestManager, formattedTx, passphrase); }; export const signTransaction = async ( requestManager: Web3RequestManager, tx: Transaction, passphrase: string, ) => { const formattedTx = formatTransaction(tx, ETH_DATA_FORMAT); return personalRpcMethods.signTransaction(requestManager, formattedTx, passphrase); }; export const sign = async ( requestManager: Web3RequestManager, data: HexString, address: Address, passphrase: string, ) => { validator.validate(['string', 'address', 'string'], [data, address, passphrase]); const dataToSign = isHexStrict(data) ? data : utf8ToHex(data); return personalRpcMethods.sign(requestManager, dataToSign, address, passphrase); }; export const ecRecover = async ( requestManager: Web3RequestManager, signedData: HexString, signature: string, ) => { validator.validate(['string', 'string'], [signedData, signature]); const signedDataString = isHexStrict(signedData) ? signedData : utf8ToHex(signedData); return personalRpcMethods.ecRecover(requestManager, signedDataString, signature); };