@nexex/api
Version:
support trade on nexex network
91 lines • 3.49 kB
JavaScript
;
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