UNPKG

@shwao/express-fingerprint

Version:

Client fingerprint server implementation. Fork of https://github.com/yusukeshibata/express-fingerprint. Adds IP and DNT parameter.

55 lines (43 loc) 1.51 kB
"use strict"; var _murmurhash3js = _interopRequireDefault(require("murmurhash3js")); var _async = _interopRequireDefault(require("async")); var _parameters = _interopRequireDefault(require("./parameters")); var _traverse = _interopRequireDefault(require("traverse")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const hash = _murmurhash3js.default.x64; const Fingerprint = function (parameters) { if (!parameters || !parameters.length) { parameters = [Fingerprint.useragent(), Fingerprint.acceptHeaders(), Fingerprint.geoIp(), Fingerprint.ip(), Fingerprint.dnt()]; } return (req, res, next) => { const components = {}; const fingerprint = { hash: null }; _async.default.eachLimit(parameters, 1, (parameter, callback) => { parameter.bind({ req })((err, obj) => { Object.keys(obj).forEach(key => { components[key] = obj[key]; }); callback(err); }); }, err => { if (!err) { const leaves = (0, _traverse.default)(components).reduce(function (acc, x) { if (this.isLeaf) acc.push(x); return acc; }, []); fingerprint.hash = hash.hash128(leaves.join('~~~')); fingerprint.components = components; req.fingerprint = fingerprint; } next(); }); }; }; for (const key in _parameters.default) { Fingerprint[key] = _parameters.default[key]; } exports = module.exports = Fingerprint;