Skip to content

Commit 02ddb15

Browse files
authored
Merge pull request #8 from Moesif/async-identify
Add: Async identifyUser and identifyCompany
2 parents 11be5b5 + b252b47 commit 02ddb15

File tree

3 files changed

+79
-62
lines changed

3 files changed

+79
-62
lines changed

lib/index.js

Lines changed: 77 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ module.exports = function (options, handler) {
5252
metadata.request_context = event && event.requestContext;
5353
return metadata;
5454
};
55-
options.getTags = options.getTags || function () {
56-
return undefined;
57-
};
5855
options.getApiVersion = options.getApiVersion || function (event, context) {
5956
return context.functionVersion;
6057
};
@@ -242,36 +239,49 @@ function mapResponseHeaders(event, context, result) {
242239
}
243240

244241
function logEvent(event, context, err, result, options, moesifController) {
245-
246242
if (!event.httpMethod || !event.headers) {
247-
logMessage(options.debug, 'logEvent', 'Expecting input format to be the API Gateway proxy integration type. ' +
248-
'See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource');
249-
return;
243+
logMessage(
244+
options.debug,
245+
'logEvent',
246+
'AWS Lambda trigger must be a Load Balancer or API Gateway. ' +
247+
'See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource'
248+
);
249+
return Promise.resolve();
250+
}
251+
252+
if (options.skip(event, context)) {
253+
// exit early
254+
return Promise.resolve();
250255
}
251256

252257
var logData = {};
253258
logData.request = {};
254259
logData.response = {};
255-
logData.request.time = event && event.requestContext && event.requestContext.requestTimeEpoch ?
256-
new Date(event && event.requestContext && event.requestContext.requestTimeEpoch) :
257-
Date.now();
260+
logData.request.time =
261+
event && event.requestContext && event.requestContext.requestTimeEpoch
262+
? new Date(event && event.requestContext && event.requestContext.requestTimeEpoch)
263+
: Date.now();
258264

259265
logData.request.uri = getURLWithQueryStringParams(event);
260266
logData.request.verb = event.httpMethod;
261267
logData.request.apiVerion = options.getApiVersion(event, context);
262-
logData.request.ipAddress = requestIp.getClientIp(event) || (event.requestContext && event.requestContext.identity && event.requestContext.identity.sourceIp);
268+
logData.request.ipAddress =
269+
requestIp.getClientIp(event) ||
270+
(event.requestContext &&
271+
event.requestContext.identity &&
272+
event.requestContext.identity.sourceIp);
263273
logData.request.headers = event.headers || {};
264274
logData.metadata = options.getMetadata(event, context);
265275

266276
if (options.logBody && event.body) {
267-
if (event.isBase64Encoded) {
268-
logData.request.body = event.body;
269-
logData.request.transferEncoding = 'base64';
270-
} else {
271-
const bodyWrapper = safeJsonParse(event.body);
272-
logData.request.body = bodyWrapper.body
273-
logData.request.transferEncoding = bodyWrapper.transferEncoding
274-
}
277+
if (event.isBase64Encoded) {
278+
logData.request.body = event.body;
279+
logData.request.transferEncoding = 'base64';
280+
} else {
281+
const bodyWrapper = safeJsonParse(event.body);
282+
logData.request.body = bodyWrapper.body;
283+
logData.request.transferEncoding = bodyWrapper.transferEncoding;
284+
}
275285
}
276286

277287
logMessage(options.debug, 'logEvent', 'created request: \n' + JSON.stringify(logData.request));
@@ -281,58 +291,68 @@ function logEvent(event, context, err, result, options, moesifController) {
281291
logData.response.headers = mapResponseHeaders(event, context, safeRes);
282292

283293
if (options.logBody && safeRes.body) {
284-
if (safeRes.isBase64Encoded) {
285-
logData.response.body = safeRes.body;
286-
logData.response.transferEncoding = 'base64';
287-
} else {
288-
const bodyWrapper = safeJsonParse(safeRes.body);
289-
logData.response.body = bodyWrapper.body
290-
logData.response.transferEncoding = bodyWrapper.transferEncoding
291-
}
294+
if (safeRes.isBase64Encoded) {
295+
logData.response.body = safeRes.body;
296+
logData.response.transferEncoding = 'base64';
297+
} else {
298+
const bodyWrapper = safeJsonParse(safeRes.body);
299+
logData.response.body = bodyWrapper.body;
300+
logData.response.transferEncoding = bodyWrapper.transferEncoding;
301+
}
292302
}
293303

294304
logMessage(options.debug, 'logEvent', 'created data: \n' + JSON.stringify(logData));
295305

296306
logData = options.maskContent(logData);
297307

298-
logData.userId = options.identifyUser(event, context);
299-
logData.companyId = options.identifyCompany(event, context);
300-
logData.sessionToken = options.getSessionToken(event, context);
301-
logData.tags = options.getTags(event, context);
308+
return Promise.all([
309+
options.identifyUser(event, context),
310+
options.identifyCompany(event, context)
311+
]).then(([userId, companyId]) => {
312+
logData.userId = userId;
313+
logData.companyId = companyId;
314+
logData.sessionToken = options.getSessionToken(event, context);
302315

303-
// Set API direction
304-
logData.direction = "Incoming"
316+
// Set API direction
317+
logData.direction = 'Incoming';
305318

306-
logMessage(options.debug, 'logEvent', 'applied options to data: \n' + JSON.stringify(logData));
319+
logMessage(options.debug, 'logEvent', 'applied options to data: \n' + JSON.stringify(logData));
307320

308-
ensureValidLogData(logData);
321+
ensureValidLogData(logData);
309322

310-
// This is fire and forget, we don't want logging to hold up the request so don't wait for the callback
311-
if (!options.skip(event, context) && moesifConfigManager.shouldSend(logData && logData.userId, logData && logData.companyId)) {
312-
313-
let sampleRate = moesifConfigManager._getSampleRate(logData && logData.userId, logData && logData.companyId);
314-
logData.weight = sampleRate === 0 ? 1 : Math.floor(100 / sampleRate);
323+
// This is fire and forget, we don't want logging to hold up the request so don't wait for the callback
324+
if (moesifConfigManager.shouldSend(logData && logData.userId, logData && logData.companyId)) {
325+
let sampleRate = moesifConfigManager._getSampleRate(
326+
logData && logData.userId,
327+
logData && logData.companyId
328+
);
329+
logData.weight = sampleRate === 0 ? 1 : Math.floor(100 / sampleRate);
315330

316-
logMessage(options.debug, 'logEvent', 'sending data invoking moesifAPI');
331+
logMessage(options.debug, 'logEvent', 'sending data invoking moesifAPI');
317332

318-
return new Promise((resolve) => {
319-
moesifController.createEvent(new EventModel(logData), function(err) {
320-
if (err) {
321-
logMessage(options.debug, 'logEvent', 'Moesif API failed with err=' + JSON.stringify(err));
322-
if (options.callback) {
323-
options.callback(err, logData);
324-
}
325-
} else {
326-
logMessage(options.debug, 'logEvent', 'Moesif API succeeded');
327-
if(options.callback) {
328-
options.callback(null, logData);
333+
return new Promise((resolve) => {
334+
moesifController.createEvent(new EventModel(logData), function(err) {
335+
if (err) {
336+
logMessage(
337+
options.debug,
338+
'logEvent',
339+
'Moesif API failed with err=' + JSON.stringify(err)
340+
);
341+
if (options.callback) {
342+
options.callback(err, logData);
343+
}
344+
} else {
345+
logMessage(options.debug, 'logEvent', 'Moesif API succeeded');
346+
if (options.callback) {
347+
options.callback(null, logData);
348+
}
329349
}
330-
}
331-
resolve();
350+
resolve();
351+
});
332352
});
333-
})
334-
}
335-
return Promise.resolve();
353+
}
354+
return Promise.resolve();
355+
});
336356
}
337357

338358
function bodyToBase64(body) {
@@ -411,9 +431,6 @@ function ensureValidOptions(options) {
411431
if (options.getMetadata && !_.isFunction(options.getMetadata)) {
412432
throw new Error('getMetadata should be a function');
413433
}
414-
if (options.getTags && !_.isFunction(options.getTags)) {
415-
throw new Error('getTags should be a function');
416-
}
417434
if (options.getApiVersion && !_.isFunction(options.getApiVersion)) {
418435
throw new Error('getApiVersion should be a function');
419436
}

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "moesif-aws-lambda",
3-
"version": "1.2.8",
3+
"version": "1.3.0",
44
"description": "API Monitoring Middleware for AWS Lambda",
55
"main": "lib/index.js",
66
"keywords": [

0 commit comments

Comments
 (0)