@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
JavaScript
;
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;