Skip to content

Commit 53dfe09

Browse files
author
Keyur
committed
Add: Support for lambda async functions
Add: Support for lambda async functions Refactor: Update README.md Refactor: Add async function handler example
1 parent e571038 commit 53dfe09

File tree

3 files changed

+57
-18
lines changed

3 files changed

+57
-18
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,10 @@ options.maskContent = function(moesifEvent) {
263263
Type: `Boolean`
264264
Set to true to print debug logs if you're having integration issues.
265265

266+
#### __`promisedBased`__
267+
Type: `Boolean`
268+
Set to true while using aws lambda async functions. For more details, please refer to - https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html.
269+
266270
For more documentation regarding what fields and meaning,
267271
see below or the [Moesif Node API Documentation](https://www.moesif.com/docs/api?javascript).
268272

app.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,17 @@ exports.handler = function (event, context, callback) {
4949
});
5050
};
5151

52+
// Async Functions
53+
// Please set promisedBased configuration flag to true while using async functions. For more details, please refer to - https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html.
54+
55+
// moesifOptions.promisedBased = true;
56+
57+
// exports.handler = async (event, context) => {
58+
// const response = {
59+
// statusCode: 200,
60+
// body: JSON.stringify({ message: 'hello world' })
61+
// }
62+
// return response
63+
// }
64+
5265
exports.handler = moesif(moesifOptions, exports.handler);

lib/index.js

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,33 @@ module.exports = function (options, handler) {
154154
};
155155

156156
var moesifMiddleware = function (event, context, callback) {
157-
logMessage(options.debug, 'moesifMiddleware', 'start');
158157
moesifConfigManager.tryGetConfig();
159158

160-
var next = function (err, result) {
161-
logEvent(event, context, err, result, options, moesifController);
162-
callback(err, result)
163-
};
159+
if (callback && typeof callback === 'function' && !options.promisedBased) {
160+
logMessage(options.debug, 'moesifMiddleware', 'start');
161+
var next = function (err, result) {
162+
logEvent(event, context, err, result, options, moesifController);
163+
callback(err, result)
164+
};
165+
166+
return handler(event, context, next);
167+
} else {
168+
var returnedPromise = handler(event, context, callback);
164169

165-
handler(event, context, next);
170+
if (returnedPromise && returnedPromise.then && typeof returnedPromise.then === 'function') {
171+
return returnedPromise.then((result) => {
172+
return logEvent(event, context, null, result, options, moesifController).then(() => {
173+
return result;
174+
});
175+
}).catch((err) => {
176+
logEvent(event, context, err, {}, options, moesifController);
177+
throw err;
178+
});
179+
} else {
180+
logMessage(options.debug, 'moesifMiddleware', 'Can not log promised based handler, please check your configuration.');
181+
return returnedPromise;
182+
}
183+
}
166184
};
167185

168186
moesifMiddleware.updateUser = function(userModel, cb) {
@@ -303,20 +321,24 @@ function logEvent(event, context, err, result, options, moesifController) {
303321

304322
logMessage(options.debug, 'logEvent', 'sending data invoking moesifAPI');
305323

306-
moesifController.createEvent(new EventModel(logData), function(err) {
307-
if (err) {
308-
logMessage(options.debug, 'logEvent', 'Moesif API failed with err=' + JSON.stringify(err));
309-
if (options.callback) {
310-
options.callback(err, logData);
311-
}
312-
} else {
313-
logMessage(options.debug, 'logEvent', 'Moesif API succeeded');
314-
if(options.callback) {
315-
options.callback(null, logData);
324+
return new Promise((resolve) => {
325+
moesifController.createEvent(new EventModel(logData), function(err) {
326+
if (err) {
327+
logMessage(options.debug, 'logEvent', 'Moesif API failed with err=' + JSON.stringify(err));
328+
if (options.callback) {
329+
options.callback(err, logData);
330+
}
331+
} else {
332+
logMessage(options.debug, 'logEvent', 'Moesif API succeeded');
333+
if(options.callback) {
334+
options.callback(null, logData);
335+
}
316336
}
317-
}
318-
});
337+
resolve();
338+
});
339+
})
319340
}
341+
return Promise.resolve();
320342
}
321343

322344
function bodyToBase64(body) {

0 commit comments

Comments
 (0)