@trezor/connect-plugin-ethereum
Version:
@trezor/connect plugin for Ethereum
35 lines • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformTypedData = void 0;
const tslib_1 = require("tslib");
const sigUtil = tslib_1.__importStar(require("@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;
}
}
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 Object.assign({ domain_separator_hash: domainSeparatorHash, message_hash: messageHash }, data);
};
exports.transformTypedData = transformTypedData;
exports.default = exports.transformTypedData;
//# sourceMappingURL=index.js.map