UNPKG

alexaworld-skilldebugger

Version:

Debug nodejs alexa skills on your local development environment.

93 lines (83 loc) 2.58 kB
// Copyright 2017, Peter Ullrich. dotup IT solutions // https://developer.amazon.com/de/blogs/alexa/post/Tx24Z2QZP5RRTG1/new-alexa-technical-tutorial-debugging-aws-lambda-code-locally module.exports = { config: { appId: '', roleArn: '', region: 'eu-west-1' }, roleSessionName: 'LocalDebugSession', skillHandler: null, skillRequestBody: null, debug: function (request) { var AWS = require('aws-sdk'); var self = this; if (self.config.appId === '') throw new Error("missing appId"); if (self.config.roleArn === '') throw new Error("missing roleArn"); if (self.skillHandler === null) throw new Error("missing skillHandler"); if (self.skillRequestBody === null) { throw new Error("missing skillRequestBody"); } function context() { if (self.skillRequestBody.context === null) return null; var context = self.skillRequestBody.context; context.done = function (error, result) { console.log('context.done'); console.log(error); console.log(result); process.exit(); } context.succeed = function (result) { console.log('context.succeed'); console.log(result); process.exit(); } context.fail = function (error) { console.log('context.fail'); console.log(error); process.exit(); } return context; } AWS.config.region = self.config.region; var sts = new AWS.STS(); sts.assumeRole({ RoleArn: self.config.roleArn, RoleSessionName: self.roleSessionName }, function (err, data) { if (err) { // an error occurred console.log('Cannot assume role'); console.log(err, err.stack); } else { // successful response AWS.config.update({ accessKeyId: data.Credentials.AccessKeyId, secretAccessKey: data.Credentials.SecretAccessKey, sessionToken: data.Credentials.sessionToken }); var Module = require('module'); var originalRequire = Module.prototype.require; Module.prototype.require = function () { if (arguments[0] === 'aws-sdk') { return AWS; } else { return originalRequire.apply(this, arguments); } }; var prepareBody = function (body) { if (body.session === null) return body; body.session.application.applicationId = self.config.appId; body.context.System.application.applicationId = self.config.appId; return body; } var lambda = self.skillHandler; var event = prepareBody(self.skillRequestBody); lambda.handler(event, context()); } }); } }