UNPKG

@nexex/api

Version:
91 lines 3.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ethers_1 = require("ethers"); var orderUtil_1 = require("./utils/orderUtil"); var getAddress = ethers_1.utils.getAddress; var ethAddressHexMetadataKey = Symbol('ethAddressHexMetadataKey'); var exchangeOrderMetadataKey = Symbol('exchangeOrderMetadataKey'); function isTypePromise(Type) { try { var test_1 = new Type(function () { return ({}); }); return test_1.then && typeof test_1.then === 'function'; } catch (e) { return false; } } function validate(target, propertyName, descriptor) { var method = descriptor.value; var ethHexAddrParameters = Reflect.getOwnMetadata(ethAddressHexMetadataKey, target, propertyName); var orderParameters = Reflect.getOwnMetadata(exchangeOrderMetadataKey, target, propertyName); var retType = Reflect.getMetadata('design:returntype', target, propertyName); var isReturnPromise = isTypePromise(retType); descriptor.value = function () { var isError; var newArgs = arguments; /* ethHexAddr */ if (ethHexAddrParameters) { for (var i = 0; i < newArgs.length; i++) { var arg = newArgs[i]; if (ethHexAddrParameters.includes(i)) { try { newArgs[i] = getAddress(arg); } catch (e) { newArgs[i] = arg; isError = e; } } else { newArgs[i] = arg; } } } /* exchange order */ if (orderParameters) { for (var i = 0; i < newArgs.length; i++) { var arg = newArgs[i]; if (orderParameters.includes(i)) { try { if (getAddress(arg.exchangeContractAddress) !== getAddress(this.getContractAddress())) { isError = new Error('exchange address in order not match'); } } catch (e) { isError = e; } if (!orderUtil_1.isValidOrder(arg)) { isError = new Error('order signature not valid'); } } } } if (isError) { if (isReturnPromise) { return Promise.reject(isError); } else { throw isError; } } else { return method.apply(this, newArgs); } }; } exports.validate = validate; function ethAddressHex(target, propertyKey, parameterIndex) { var existingEthAddrHexParameters = Reflect.getOwnMetadata(ethAddressHexMetadataKey, target, propertyKey) || []; existingEthAddrHexParameters.push(parameterIndex); Reflect.defineMetadata(ethAddressHexMetadataKey, existingEthAddrHexParameters, target, propertyKey); } function exchangeOrder(target, propertyKey, parameterIndex) { var existingParameters = Reflect.getOwnMetadata(exchangeOrderMetadataKey, target, propertyKey) || []; existingParameters.push(parameterIndex); Reflect.defineMetadata(exchangeOrderMetadataKey, existingParameters, target, propertyKey); } exports.validators = { ethAddressHex: ethAddressHex, exchangeOrder: exchangeOrder }; //# sourceMappingURL=decorators.js.map