import { ethers, TypedDataDomain, TypedDataField } from 'ethers' export interface TypedData { domain: TypedDataDomain types: Record> message: Record primaryType?: string } export type { TypedDataDomain, TypedDataField } export const encodeTypedDataHash = (typedData: TypedData): string => { const types = { ...typedData.types } // remove EIP712Domain key from types as ethers will auto-gen it in // the hash encoder below delete types['EIP712Domain'] return ethers.TypedDataEncoder.hash(typedData.domain, types, typedData.message) } export const encodeTypedDataDigest = (typedData: TypedData): Uint8Array => { return ethers.getBytes(encodeTypedDataHash(typedData)) }