import ethSigUtil from 'eth-sig-util' ; import { providers } from 'ethers' ; const getData = ( text ) : ethSigUtil . EIP712TypedData => { return { types : { EIP712Domain : [ { name : 'name' , type : 'string' } , { name : 'version' , type : 'string' } ] , TextInformation : [ { name : 'text' , type : 'string' } ] } , domain : { name : 'Origin' , version : '2' } , primaryType : 'TextInformation' , message : { text } } ; } ; export async function recoverTypedSignatureAddress ( text , signedMessage ) { return ethSigUtil . recoverTypedSignature ( { sig : signedMessage , data : getData ( text ) } ) ; } export async function signTypedMessage ( from , text , web3 ) { return web3 . send ( 'eth_signTypedData_v4' , [ from , JSON . stringify ( getData ( text ) ) ] ) ; } export async function signTypedMessagePrivateKey ( privateKey , text ) { return ethSigUtil . signTypedData ( Buffer . from ( privateKey , 'hex' ) , { data : getData ( text ) } ) ; }