flocore-node/lib/utils.js
Chris Kleeschulte c4e90875a9 wip
2017-06-20 09:47:59 -04:00

136 lines
2.8 KiB
JavaScript

'use strict';
var bitcore = require('bitcore-lib');
var BufferUtil = bitcore.util.buffer;
var MAX_SAFE_INTEGER = 0x1fffffffffffff; // 2 ^ 53 - 1
var utils = {};
utils.isHash = function(value) {
return typeof value === 'string' && value.length === 64 && /^[0-9a-fA-F]+$/.test(value);
};
utils.isSafeNatural = function(value) {
return typeof value === 'number' &&
isFinite(value) &&
Math.floor(value) === value &&
value >= 0 &&
value <= MAX_SAFE_INTEGER;
};
utils.startAtZero = function(obj, key) {
if (!obj.hasOwnProperty(key)) {
obj[key] = 0;
}
};
utils.isAbsolutePath = require('path').isAbsolute;
if (!utils.isAbsolutePath) {
utils.isAbsolutePath = require('path-is-absolute');
}
utils.parseParamsWithJSON = function(paramsArg) {
var params = paramsArg.map(function(paramArg) {
var param;
try {
param = JSON.parse(paramArg);
} catch(err) {
param = paramArg;
}
return param;
});
return params;
};
utils.getTerminalKey = function(startKey) {
var endKey = Buffer.from(startKey);
endKey.writeUInt8(startKey.readUInt8(startKey.length - 1) + 1, startKey.length - 1);
return endKey;
};
utils.diffTime = function(time) {
var diff = process.hrtime(time);
return (diff[0] * 1E9 + diff[1])/(1E9 * 1.0);
};
utils.reverseBufferToString = function(buf) {
return BufferUtil.reverse(buf).toString('hex');
};
utils.getAddressStringFromScript = function(script, network) {
var address = script.toAddress(network);
if(address) {
return address.toString();
}
try {
var pubkey = script.getPublicKey();
if(pubkey) {
return pubkey.toString('hex');
}
} catch(e) {}
};
utils.sendError = function(err, res) {
if (err.statusCode) {
res.status(err.statusCode).send(err.message);
} else {
console.error(err.stack);
res.status(503).send(err.message);
}
};
utils.getWalletId = exports.generateJobId = function() {
return crypto.randomBytes(16).toString('hex');
};
utils.getWalletId = exports.generateJobId = function() {
return crypto.randomBytes(16).toString('hex');
};
utils.toJSONL = function(obj) {
var str = JSON.stringify(obj);
str = str.replace(/\n/g, '');
return str + '\n';
}
utils.normalizeTimeStamp = function(value) {
if (value > 0xffffffff) {
value = Math.round(value/1000);
}
return value;
};
utils.delimitedStringParse = function(delim, str) {
function tryJSONparse(str) {
try {
return JSON.parse(str);
} catch(e) {
return false;
}
}
var ret = [];
if (delim === null) {
return tryJSONparse(str);
}
var list = str.split(delim);
for(var i = 0; i < list.length; i++) {
ret.push(tryJSONparse(list[i]));
}
ret = _.compact(ret);
return ret.length === 0 ? false : ret;
};
utils.toIntIfNumberLike = function(a) {
if (!/[^\d]+/.test(a)) {
return parseInt(a);
}
return a;
};
module.exports = utils;