1 | var flowCliSdk = require("@builtioflow/cli-sdk")
|
2 | global.logger = new flowCliSdk.logger();
|
3 |
|
4 | exports.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 |
|
24 | function 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 |
|
44 | function 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 |
|
62 | function 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 |
|
84 | function 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 |
|
203 | function 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 |
|
213 | function 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 | }
|