UNPKG

5.57 kBJavaScriptView Raw
1var flowCliSdk = require("@builtioflow/cli-sdk")
2global.logger = new flowCliSdk.logger();
3
4exports.handler = function(event, context, callback) {
5 context.callbackWaitsForEmptyEventLoop = false;
6 catchUnhandled(callback);
7 try {
8 switch(event.type){
9 case "action":
10 return callAction(event, context, callback);
11 case "lookup":
12 return callLookup(event, context, callback);
13 case "trigger":
14 return callTrigger(event, context, callback);
15 default:
16 return callAuth(event, context, callback);
17 }
18 }catch(err){
19 callback(err.stack);
20 }
21};
22
23
24function callAuth(event, context, callback){
25 try {
26 var func = require("./authentication");
27 } catch(e) {
28 return handleError(e, callback);
29 }
30 var validate = typeof(func.validate) === "function" ?
31 func.validate :
32 func.test;
33 validate(event.input, function(err,data){
34 if (err) {
35 return handleError(err, callback);
36 }
37 callback(null, {
38 data : data,
39 logs: logger.getLogs()
40 });
41 });
42}
43
44function callLookup(event, context, callback){
45 try {
46 var func = require(`./${event.type}/${event.func}`);
47 } catch(e) {
48 return handleError(e, callback);
49 }
50
51 func.execute(event.input, event.options, function(err,data){
52 if(err){
53 return handleError(err, callback);
54 }
55 callback(null,{
56 data : data,
57 logs: logger.getLogs()
58 });
59 });
60}
61
62function callAction(event, context, callback){
63 context = event.context ? event.context : { };
64 try {
65 if(!/^v/.test(event.version)){
66 var func = require(`./${event.type}/${event.func}`);
67 } else {
68 var func = require(`./${event.type}/${event.version}/${event.func}`)
69 }
70 } catch(e){
71 return handleError(e, callback);
72 }
73 func.execute.call(context, event.input, function(err, data){
74 if (err) {
75 return handleError(err, callback);
76 }
77 callback(null,{
78 data : data,
79 logs: logger.getLogs()
80 });
81 });
82}
83
84function callTrigger(event, context, callback){
85 var opt = new flowCliSdk.trigger.Meta(event.meta);
86 try {
87 if (!/^v/.test(event.version)) {
88 var func = require(`./${event.type}/${event.func}`);
89 } else {
90 var func = require(`./${event.type}/${event.version}/${event.func}`)
91 }
92 } catch (e) {
93 return handleError(e, callback);
94 }
95
96 if (event.triggerType === "activate") {
97 func.activate(event.input, opt, function(err,data){
98 if (err) {
99 return handleError(err, callback);
100 }
101 flowCliSdk.trigger.filter(event.input.customFilters, data, function(err, out){
102 callback(err, {
103 data : out,
104 meta : opt.meta,
105 logs: logger.getLogs()
106 });
107 });
108 });
109 }
110
111 else if (event.triggerType === "validate") {
112 func.validate(event.input, opt, function(err,data){
113 if (err) {
114 return handleError(err, callback);
115 }
116 flowCliSdk.trigger.filter(event.input.customFilters, data, function(err, out){
117 callback(err, {
118 data : out,
119 meta : opt.meta,
120 logs: logger.getLogs()
121 });
122 });
123 });
124 }
125
126 else if (event.triggerType === "execute") {
127 opt = event.input.polling ? opt : event.payload;
128
129 func.execute(event.input, opt, function (err, data) {
130 if (err) {
131 return handleError(err, callback);
132 }
133 flowCliSdk.trigger.filter(event.input.customFilters, data, function(err, out){
134 callback(err, {
135 data : out,
136 meta : opt.meta || { },
137 logs: logger.getLogs()
138 });
139 });
140 });
141 }
142
143 else if (event.triggerType === "register") {
144 func.register(event.input, function (err, data) {
145 if (err) {
146 return handleError(err, callback);
147 }
148 callback(err, {
149 data: data,
150 meta: opt.meta,
151 logs: logger.getLogs()
152 });
153 });
154 }
155
156 else if (event.triggerType === "unregister") {
157 func.unregister(event.input, opt, function (err, data) {
158 if (err) {
159 return handleError(err, callback);
160 }
161 callback(err, {
162 data: data,
163 meta: opt.meta,
164 logs: logger.getLogs()
165 });
166 });
167 }
168
169 else if (event.triggerType === "userdata") {
170 if (typeof func.getUserData !== "function") {
171 return callback(null, func.mock_data);
172 }
173 func.getUserData(event.input, opt, function (err, data) {
174 if (err) {
175 return handleError(err, callback);
176 }
177 callback(err, {
178 data: data,
179 logs: logger.getLogs()
180 });
181 });
182 }
183
184 else if (event.triggerType === "update") {
185 if (typeof func.update !== 'function') {
186 return callback(JSON.stringify({ code: 'FUNCTION_NOT_FOUND'}));
187 }
188 func.update(event.input, function (err, data) {
189 if (err) return handleError(err, callback);
190
191 let result = Array.isArray(data) ? data.length ? data[0] : event.input.hook_response: data;
192 return callback(null, {
193 data: result,
194 meta: opt.meta,
195 logs: logger.getLogs()
196 });
197 });
198 } else {
199 return callback(JSON.stringify({ code: 'FUNCTION_NOT_FOUND' }));
200 }
201}
202
203function catchUnhandled(callback) {
204 process.on("uncaughtException", (err) => {
205 callback(err.stack || err);
206 });
207
208 process.on("unhandledRejection", (err) => {
209 callback(err.stack || err);
210 });
211}
212
213function handleError(err, callback) {
214 err = err && err.stack ? err.stack : typeof err === "object" ? JSON.stringify(err) : err;
215 let log = logger.getLogs().join(";");
216 err = String(err) + log;
217 return callback(err);
218}