@incdevco/framework
Version:
node.js lambda framework
92 lines (51 loc) • 1.64 kB
JavaScript
var Util = require('util');
var Base = require('../index');
var MailParser = require('../../mail-parser');
function Lambda(config) {
'use strict';
Base.call(this, config);
this.handlers = config.handlers || {};
this.parser = new MailParser(config.parser);
}
Util.inherits(Lambda, Base);
Lambda.prototype.handleEmail = function (message, content) {
'use strict';
var promise = this.Promise.resolve(true),
self = this;
message.mail.destination.forEach(function (destination) {
if (self.handlers[destination]) {
promise = promise.then(function () {
return self.handlers[destination](message, content);
});
}
});
return promise;
};
Lambda.prototype.handler = function (event, context) {
'use strict';
var promise = this.Promise.resolve(true),
self = this;
this.log('original-event', JSON.stringify(event, null, 2));
event.Records.forEach(function (record) {
promise = promise.then(function () {
var message = JSON.parse(record.Sns.Message);
return self.parser.parse(message.content)
.then(function (content) {
return self.handleEmail(message, content);
});
});
});
promise
.then(function (result) {
context.succeed(result);
})
.catch(function (exception) {
context.fail(exception);
});
};
Lambda.prototype.register = function (emailAddress, handler) {
'use strict';
this.handlers[emailAddress] = handler;
return this;
};
module.exports = Lambda;