UNPKG

@trezor/connect-plugin-ethereum

Version:
48 lines (47 loc) 1.54 kB
"use strict"; 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