"use strict";
var helpers = require('./core/helpers');
var KeenEventModule = (function (options, eventEmitter) {
this._ee = helpers.setDefaultEvents(eventEmitter, ['error', 'debug']);
var MAX_PROPERTY_HIERARCHY_DEPTH = options.defaults && options.defaults.MAX_PROPERTY_HIERARCHY_DEPTH || 10,
MAX_STRING_LENGTH = options.defaults && options.defaults.MAX_STRING_LENGTH || 1000,
MAX_PROPERTY_QUANTITY = options.defaults && options.defaults.MAX_PROPERTY_QUANTITY || 300;
this._setupAddons = function (keenEvent, addonSwitches) {
var keenAddons = [];
if (keenEvent.identity.ipAddress && addonSwitches.ipToGeo) {
keenAddons.push({
name: "keen:ip_to_geo",
input: {
"ip": "identity.ipAddress"
},
output: "identity.ipGeography"
});
}
if (keenEvent.identity.userAgent && addonSwitches.userAgentParser) {
keenAddons.push({
name: "keen:ua_parser",
input: {
"ua_string": "identity.userAgent"
},
output: "identity.parsedUserAgent"
});
}
return keenAddons;
};
this.generateEvent = function (identity, parsedRequestData, parsedResponseData, routeConfig) {
var keenEvent = {
identity: identity,
intention: {
method: parsedRequestData.method,
path: parsedRequestData.path,
params: parsedRequestData.params,
body: parsedRequestData.body,
query: parsedRequestData.query
},
reaction: parsedResponseData.body,
httpStatus: parsedResponseData.status,
environment: {
library: 'express-keenio',
ipAddress: '${keen.ip}',
userAgent: '${keen.user_agent}'
},
keen: {}
};
keenEvent.keen.addons = this._setupAddons(keenEvent, options.defaults.addons);
if (parsedRequestData.referer) {
keenEvent.intention.referer = parsedRequestData.referer;
}
if (routeConfig.tag) {
keenEvent.tag = routeConfig.tag;
}
return this.sanitize(keenEvent, routeConfig.whitelistProperties || {});
};
this.sanitize = function (data, whitelistPropertiesObject) {
this._checkPropertyDepth(data, true);
this._checkForNonWhitelist(data, whitelistPropertiesObject);
return this._sanitizeData(data);
};