node-red-contrib-aws
Version:
A collection of Node-RED nodes for AWS. Includes nodes for DynamoDB, EC2, IoT, Kinesis, Lambda, SNS, SQS and S3.
144 lines (117 loc) • 4.23 kB
JavaScript
/**
* Copyright 2017 Daniel Thomas.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
module.exports = function(RED) {
"use strict";
function AmazonAPINode(n) {
RED.nodes.createNode(this,n);
this.awsConfig = RED.nodes.getNode(n.aws);
this.operation = n.operation;
this.name = n.name;
var node = this;
var AWS = require("aws-sdk");
var awsService = AWS.DynamoDB.Converter;
node.on("input", function(msg) {
node.sendMsg = function (err, data) {
if (err) {
node.status({fill:"red",shape:"ring",text:"error"});
node.error("failed: " + err.toString(),msg);
return;
} else {
msg.payload = data;
node.status({});
}
node.send(msg);
};
var _cb=function(err,data){
node.sendMsg(err,data);
}
if (typeof service[node.operation] == "function"){
node.status({fill:"blue",shape:"dot",text:node.operation});
service[node.operation](awsService,msg,_cb);
} else {
node.error("failed: Operation node defined - "+node.operation);
}
});
var copyArg=function(src,arg,out,outArg,isObject){
var tmpValue=src[arg];
outArg = (typeof outArg !== 'undefined') ? outArg : arg;
if (typeof src[arg] !== 'undefined'){
if (isObject && typeof src[arg]=="string" && src[arg] != "") {
tmpValue=JSON.parse(src[arg]);
}
out[outArg]=tmpValue;
}
//AWS API takes 'Payload' not 'payload' (see Lambda)
if (arg=="Payload" && typeof tmpValue == 'undefined'){
out[arg]=src["payload"];
}
}
var service={};
service.Input=function(svc,msg,cb){
var param = null;
var options = {};
//copyArgs
copyArg(n, "convertEmptyValues", options, undefined, false);
copyArg(n,"wrapNumbers",options,undefined,false);
if (msg.data) {
param = msg.param;
} else {
param = msg.payload;
}
cb(null,svc.input(param, options));
}
service.Output = function (svc, msg, cb) {
var param = null;
var options = {};
//copyArgs
copyArg(n, "convertEmptyValues", options, undefined, false);
copyArg(n, "wrapNumbers", options, undefined, false);
if (msg.data) {
param = msg.param;
} else {
param = msg.payload;
}
cb(null, svc.output(param, options));
}
service.Marshall = function (svc, msg, cb) {
var param = null;
var options = {};
//copyArgs
copyArg(n, "convertEmptyValues", options, undefined, false);
copyArg(n, "wrapNumbers", options, undefined, false);
if (msg.data) {
param = msg.param;
} else {
param = msg.payload;
}
cb(null, svc.marshall(param, options));
}
service.Unmarshall = function (svc, msg, cb) {
var param = null;
var options = {};
//copyArgs
copyArg(n, "convertEmptyValues", options, undefined, false);
copyArg(n, "wrapNumbers", options, undefined, false);
if (msg.data) {
param = msg.param;
} else {
param = msg.payload;
}
cb(null, svc.unmarshall(param, options));
}
}
RED.nodes.registerType("AWS DynamoDB Converter", AmazonAPINode);
};