@trezor/connect-plugin-ethereum
Version:
@trezor/connect plugin for Ethereum
40 lines • 1.31 kB
JavaScript
import * as sigUtil from "@metamask/eth-sig-util";
function sanitizeData(data) {
switch (Object.prototype.toString.call(data)) {
case '[object Object]':
{
const entries = Object.keys(data).map(k => [k, sanitizeData(data[k])]);
return Object.fromEntries(entries);
}
case '[object Array]':
return data.map(v => sanitizeData(v));
case '[object BigInt]':
return data.toString();
default:
return data;
}
}
export const transformTypedData = (data, metamask_v4_compat) => {
if (!metamask_v4_compat) {
throw new Error('Trezor: Only version 4 of typed data signing is supported');
}
const version = sigUtil.SignTypedDataVersion.V4;
const {
types,
primaryType,
domain,
message
} = sigUtil.TypedDataUtils.sanitizeData(data);
const domainSeparatorHash = sigUtil.TypedDataUtils.hashStruct('EIP712Domain', sanitizeData(domain), types, version).toString('hex');
let messageHash = null;
if (primaryType !== 'EIP712Domain') {
messageHash = sigUtil.TypedDataUtils.hashStruct(primaryType, sanitizeData(message), types, version).toString('hex');
}
return {
domain_separator_hash: domainSeparatorHash,
message_hash: messageHash,
...data
};
};
export default transformTypedData;
//# sourceMappingURL=index.js.map