@trezor/connect-plugin-ethereum
Version:
@trezor/connect plugin for Ethereum
48 lines (47 loc) • 1.54 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 {
domain_separator_hash: domainSeparatorHash,
message_hash: messageHash,
...data
};
};
exports.transformTypedData = transformTypedData;
exports.default = exports.transformTypedData;
//# sourceMappingURL=index.js.map