UNPKG

@rsksmart/rif-storage-pinning

Version:

Application for providing your storage space to other to use in exchange of RIF Tokens

68 lines (67 loc) 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getEventTransformer = void 0; const logger_1 = require("./logger"); const logger = logger_1.loggingFactory('event-transformer'); var AbiInputType; (function (AbiInputType) { AbiInputType["ADDRESS"] = "address"; AbiInputType["UINT64"] = "uint64"; AbiInputType["UINT128"] = "uint128"; })(AbiInputType || (AbiInputType = {})); /** * Transform field based on field type * @param field * @param type */ function transformEventField(field, type) { switch (type) { // case AbiInputType.UINT64: // case AbiInputType.UINT128: // return new BigNumber(field) case AbiInputType.ADDRESS: return field.toLowerCase(); default: return field; } } /** * Factory which return function for retrieving field type based on ABI * @param abi * @param eventName */ function getFieldType(abi, eventName) { const eventAbi = abi.find(a => a.name === eventName); if (!eventAbi) { logger.warn(`Abi for event ${eventName} not found`); } return (key) => { var _a; if (!eventAbi) return; const input = (_a = eventAbi.inputs) === null || _a === void 0 ? void 0 : _a.find(i => i.name === key); if (!input) { logger.warn(`No input found for event = ${eventName}, key = ${key}`); return; } return input.type; }; } /** * Factory for event transformer closure. * This function has custom logic to transform event fields based on ABI types. * Currently supported transformations: * - address fields are lower cased * * @param abi */ function getEventTransformer(abi) { return (event) => { const getType = getFieldType(abi.filter(a => a.type === 'event'), event.event); return Object.assign(Object.assign({}, event), { returnValues: Object .entries(event.returnValues) .filter(([key]) => isNaN(parseInt(key))) // Ignore duplicated field with index key .reduce((acc, [key, field]) => (Object.assign(Object.assign({}, acc), { [key]: transformEventField(field, getType(key)) })), {}) }); }; } exports.getEventTransformer = getEventTransformer;