@budibase/server 0.9.125-alpha.4 → 0.9.125-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/builder/assets/{index.dc48c234.js → index.cf133375.js} +2 -2
  2. package/builder/assets/{vendor.4af73c18.js → vendor.d8e1ee7b.js} +1 -1
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +1659 -1493
  5. package/coverage/coverage-final.json +101 -87
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +3 -3
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  8. package/coverage/lcov-report/api/controllers/application.js.html +39 -39
  9. package/coverage/lcov-report/api/controllers/auth.js.html +6 -6
  10. package/coverage/lcov-report/api/controllers/automation.js.html +151 -361
  11. package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
  12. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +15 -15
  15. package/coverage/lcov-report/api/controllers/hosting.js.html +8 -8
  16. package/coverage/lcov-report/api/controllers/index.html +39 -24
  17. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/metadata.js.html +218 -0
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query.js.html +6 -12
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +20 -20
  26. package/coverage/lcov-report/api/controllers/row/index.js.html +14 -14
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +95 -62
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +10 -10
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.js.html +24 -24
  34. package/coverage/lcov-report/api/controllers/table/utils.js.html +32 -32
  35. package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
  36. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  42. package/coverage/lcov-report/api/index.html +1 -1
  43. package/coverage/lcov-report/api/index.js.html +23 -23
  44. package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
  45. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  46. package/coverage/lcov-report/api/routes/application.js.html +8 -8
  47. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  48. package/coverage/lcov-report/api/routes/automation.js.html +41 -26
  49. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  50. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  51. package/coverage/lcov-report/api/routes/datasource.js.html +13 -13
  52. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  53. package/coverage/lcov-report/api/routes/dev.js.html +11 -11
  54. package/coverage/lcov-report/api/routes/hosting.js.html +8 -8
  55. package/coverage/lcov-report/api/routes/index.html +24 -9
  56. package/coverage/lcov-report/api/routes/index.js.html +36 -30
  57. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  58. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/metadata.js.html +194 -0
  60. package/coverage/lcov-report/api/routes/permission.js.html +12 -12
  61. package/coverage/lcov-report/api/routes/query.js.html +13 -13
  62. package/coverage/lcov-report/api/routes/role.js.html +12 -12
  63. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  64. package/coverage/lcov-report/api/routes/row.js.html +10 -10
  65. package/coverage/lcov-report/api/routes/screen.js.html +11 -11
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/static.js.html +13 -13
  68. package/coverage/lcov-report/api/routes/table.js.html +12 -12
  69. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  70. package/coverage/lcov-report/api/routes/user.js.html +9 -9
  71. package/coverage/lcov-report/api/routes/view.js.html +11 -11
  72. package/coverage/lcov-report/api/routes/webhook.js.html +11 -11
  73. package/coverage/lcov-report/automations/actions.js.html +38 -107
  74. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  75. package/coverage/lcov-report/automations/bullboard.js.html +46 -16
  76. package/coverage/lcov-report/automations/index.html +67 -67
  77. package/coverage/lcov-report/automations/index.js.html +26 -128
  78. package/coverage/lcov-report/automations/steps/bash.js.html +33 -12
  79. package/coverage/lcov-report/automations/steps/createRow.js.html +8 -8
  80. package/coverage/lcov-report/automations/steps/delay.js.html +45 -6
  81. package/coverage/lcov-report/automations/steps/deleteRow.js.html +8 -8
  82. package/coverage/lcov-report/automations/steps/discord.js.html +329 -0
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +19 -31
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +18 -30
  85. package/coverage/lcov-report/automations/steps/filter.js.html +22 -19
  86. package/coverage/lcov-report/automations/steps/index.html +125 -65
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +341 -0
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +26 -32
  89. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +9 -9
  90. package/coverage/lcov-report/automations/steps/serverLog.js.html +20 -8
  91. package/coverage/lcov-report/automations/steps/{sendgridEmail.js.html → slack.js.html} +57 -87
  92. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/utils.js.html +188 -0
  94. package/coverage/lcov-report/automations/steps/zapier.js.html +332 -0
  95. package/coverage/lcov-report/automations/thread.js.html +79 -76
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +173 -0
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +173 -0
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +201 -0
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +125 -0
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +176 -0
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +200 -0
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +200 -0
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +188 -0
  104. package/coverage/lcov-report/automations/triggers.js.html +54 -819
  105. package/coverage/lcov-report/automations/utils.js.html +557 -0
  106. package/coverage/lcov-report/constants/index.html +5 -5
  107. package/coverage/lcov-report/constants/index.js.html +19 -4
  108. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  109. package/coverage/lcov-report/constants/screens.js.html +2 -2
  110. package/coverage/lcov-report/db/client.js.html +1 -1
  111. package/coverage/lcov-report/db/index.html +19 -19
  112. package/coverage/lcov-report/db/index.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +73 -73
  114. package/coverage/lcov-report/db/linkedRows/index.html +17 -17
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +79 -115
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +31 -31
  117. package/coverage/lcov-report/db/newid.js.html +2 -2
  118. package/coverage/lcov-report/db/utils.js.html +79 -28
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +7 -7
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +2 -2
  122. package/coverage/lcov-report/events/utils.js.html +1 -1
  123. package/coverage/lcov-report/index.html +115 -100
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/{automations/logic.js.html → middleware/appInfo.js.html} +35 -38
  127. package/coverage/lcov-report/middleware/authorized.js.html +16 -16
  128. package/coverage/lcov-report/middleware/builder.js.html +15 -15
  129. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  130. package/coverage/lcov-report/middleware/index.html +23 -8
  131. package/coverage/lcov-report/middleware/joi-validator.js.html +6 -6
  132. package/coverage/lcov-report/middleware/resourceId.js.html +28 -28
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/usageQuota.js.html +8 -8
  135. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  136. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  137. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  138. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  139. package/coverage/lcov-report/utilities/global.js.html +21 -21
  140. package/coverage/lcov-report/utilities/index.html +18 -18
  141. package/coverage/lcov-report/utilities/index.js.html +167 -14
  142. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +12 -12
  143. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  144. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  146. package/coverage/lcov-report/utilities/rowProcessor/index.html +14 -14
  147. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +87 -51
  148. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +8 -8
  149. package/coverage/lcov-report/utilities/security.js.html +2 -2
  150. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  151. package/coverage/lcov-report/utilities/users.js.html +1 -1
  152. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  153. package/coverage/lcov.info +2641 -2357
  154. package/dist/api/controllers/automation.js +49 -127
  155. package/dist/api/controllers/deploy/index.js +17 -1
  156. package/dist/api/controllers/metadata.js +49 -0
  157. package/dist/api/controllers/query.js +0 -2
  158. package/dist/api/controllers/row/internal.js +33 -23
  159. package/dist/api/routes/automation.js +4 -5
  160. package/dist/api/routes/index.js +2 -0
  161. package/dist/api/routes/metadata.js +13 -0
  162. package/dist/api/routes/tests/utilities/TestFunctions.js +13 -0
  163. package/dist/app.js +1 -1
  164. package/dist/automations/actions.js +26 -46
  165. package/dist/automations/bullboard.js +10 -2
  166. package/dist/automations/index.js +11 -48
  167. package/dist/automations/steps/bash.js +11 -5
  168. package/dist/automations/steps/createRow.js +4 -4
  169. package/dist/automations/steps/delay.js +15 -2
  170. package/dist/automations/steps/deleteRow.js +4 -4
  171. package/dist/automations/steps/discord.js +91 -0
  172. package/dist/automations/steps/executeQuery.js +11 -14
  173. package/dist/automations/steps/executeScript.js +11 -14
  174. package/dist/automations/steps/filter.js +18 -17
  175. package/dist/automations/steps/integromat.js +94 -0
  176. package/dist/automations/steps/outgoingWebhook.js +12 -16
  177. package/dist/automations/steps/sendSmtpEmail.js +3 -3
  178. package/dist/automations/steps/serverLog.js +6 -2
  179. package/dist/automations/steps/slack.js +73 -0
  180. package/dist/automations/steps/updateRow.js +3 -3
  181. package/dist/automations/steps/utils.js +46 -0
  182. package/dist/automations/steps/zapier.js +91 -0
  183. package/dist/automations/tests/utilities/index.js +2 -12
  184. package/dist/automations/thread.js +23 -25
  185. package/dist/automations/triggerInfo/app.js +32 -0
  186. package/dist/automations/triggerInfo/cron.js +32 -0
  187. package/dist/automations/triggerInfo/index.js +15 -0
  188. package/dist/automations/triggerInfo/rowDeleted.js +33 -0
  189. package/dist/automations/triggerInfo/rowSaved.js +41 -0
  190. package/dist/automations/triggerInfo/rowUpdated.js +41 -0
  191. package/dist/automations/triggerInfo/webhook.js +37 -0
  192. package/dist/automations/triggers.js +27 -284
  193. package/dist/automations/utils.js +143 -0
  194. package/dist/constants/index.js +4 -0
  195. package/dist/db/linkedRows/index.js +14 -26
  196. package/dist/db/utils.js +14 -1
  197. package/dist/environment.js +1 -0
  198. package/dist/integrations/mysql.js +1 -1
  199. package/dist/middleware/appInfo.js +17 -0
  200. package/dist/middleware/usageQuota.js +1 -1
  201. package/dist/package.json +7 -6
  202. package/dist/tsconfig.tsbuildinfo +1 -1
  203. package/dist/utilities/fileSystem/index.js +0 -26
  204. package/dist/utilities/index.js +54 -0
  205. package/dist/utilities/redis.js +16 -1
  206. package/dist/utilities/rowProcessor/index.js +7 -4
  207. package/package.json +8 -7
  208. package/scripts/selfhost.js +8 -0
  209. package/src/api/controllers/automation.js +75 -145
  210. package/src/api/controllers/deploy/index.js +23 -1
  211. package/src/api/controllers/metadata.js +46 -0
  212. package/src/api/controllers/query.js +0 -2
  213. package/src/api/controllers/row/internal.js +34 -23
  214. package/src/api/routes/automation.js +16 -11
  215. package/src/api/routes/index.js +2 -0
  216. package/src/api/routes/metadata.js +38 -0
  217. package/src/api/routes/tests/automation.spec.js +4 -26
  218. package/src/api/routes/tests/metadata.spec.js +65 -0
  219. package/src/api/routes/tests/utilities/TestFunctions.js +14 -0
  220. package/src/app.ts +1 -1
  221. package/src/automations/actions.js +26 -49
  222. package/src/automations/bullboard.js +12 -2
  223. package/src/automations/index.js +11 -45
  224. package/src/automations/steps/bash.js +12 -5
  225. package/src/automations/steps/createRow.js +4 -4
  226. package/src/automations/steps/delay.js +15 -2
  227. package/src/automations/steps/deleteRow.js +4 -4
  228. package/src/automations/steps/discord.js +83 -0
  229. package/src/automations/steps/executeQuery.js +11 -15
  230. package/src/automations/steps/executeScript.js +11 -15
  231. package/src/automations/steps/filter.js +18 -17
  232. package/src/automations/steps/integromat.js +87 -0
  233. package/src/automations/steps/outgoingWebhook.js +12 -14
  234. package/src/automations/steps/sendSmtpEmail.js +3 -3
  235. package/src/automations/steps/serverLog.js +6 -2
  236. package/src/automations/steps/slack.js +64 -0
  237. package/src/automations/steps/updateRow.js +3 -3
  238. package/src/automations/steps/utils.js +36 -0
  239. package/src/automations/steps/zapier.js +84 -0
  240. package/src/automations/tests/automation.spec.js +3 -66
  241. package/src/automations/tests/delay.spec.js +1 -1
  242. package/src/automations/tests/filter.spec.js +13 -13
  243. package/src/automations/tests/utilities/index.js +2 -13
  244. package/src/automations/thread.js +27 -26
  245. package/src/automations/triggerInfo/app.js +31 -0
  246. package/src/automations/triggerInfo/cron.js +31 -0
  247. package/src/automations/triggerInfo/index.js +15 -0
  248. package/src/automations/triggerInfo/rowDeleted.js +32 -0
  249. package/src/automations/triggerInfo/rowSaved.js +40 -0
  250. package/src/automations/triggerInfo/rowUpdated.js +40 -0
  251. package/src/automations/triggerInfo/webhook.js +36 -0
  252. package/src/automations/triggers.js +33 -288
  253. package/src/automations/utils.js +159 -0
  254. package/src/constants/index.js +5 -0
  255. package/src/db/linkedRows/index.js +15 -27
  256. package/src/db/tests/linkTests.spec.js +0 -12
  257. package/src/db/utils.js +17 -0
  258. package/src/environment.js +1 -0
  259. package/src/integrations/mysql.ts +1 -1
  260. package/src/middleware/appInfo.js +19 -0
  261. package/src/middleware/usageQuota.js +1 -1
  262. package/src/utilities/fileSystem/index.js +0 -30
  263. package/src/utilities/index.js +51 -0
  264. package/src/utilities/redis.js +18 -1
  265. package/src/utilities/rowProcessor/index.js +16 -4
  266. package/dist/automations/logic.js +0 -17
  267. package/dist/automations/steps/sendgridEmail.js +0 -85
  268. package/src/automations/logic.js +0 -20
  269. package/src/automations/steps/sendgridEmail.js +0 -74
  270. package/src/automations/tests/sendEmail.spec.js +0 -36
@@ -9,12 +9,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { sendSmtpEmail } = require("../../utilities/workerRequests");
12
- module.exports.definition = {
12
+ exports.definition = {
13
13
  description: "Send an email using SMTP",
14
14
  tagline: "Send SMTP email to {{inputs.to}}",
15
15
  icon: "ri-mail-open-line",
16
16
  name: "Send Email (SMTP)",
17
17
  type: "ACTION",
18
+ internal: true,
18
19
  stepId: "SEND_EMAIL_SMTP",
19
20
  inputs: {},
20
21
  schema: {
@@ -54,7 +55,7 @@ module.exports.definition = {
54
55
  },
55
56
  },
56
57
  };
57
- module.exports.run = function ({ inputs }) {
58
+ exports.run = function ({ inputs }) {
58
59
  return __awaiter(this, void 0, void 0, function* () {
59
60
  let { to, from, subject, contents } = inputs;
60
61
  if (!contents) {
@@ -68,7 +69,6 @@ module.exports.run = function ({ inputs }) {
68
69
  };
69
70
  }
70
71
  catch (err) {
71
- console.error(err);
72
72
  return {
73
73
  success: false,
74
74
  response: err,
@@ -13,12 +13,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  step((generator = generator.apply(thisArg, _arguments || [])).next());
14
14
  });
15
15
  };
16
- module.exports.definition = {
16
+ exports.definition = {
17
17
  name: "Backend log",
18
18
  tagline: "Console log a value in the backend",
19
19
  icon: "ri-server-line",
20
20
  description: "Logs the given text to the server (using console.log)",
21
21
  type: "ACTION",
22
+ internal: true,
22
23
  stepId: "SERVER_LOG",
23
24
  inputs: {
24
25
  text: "",
@@ -44,8 +45,11 @@ module.exports.definition = {
44
45
  },
45
46
  },
46
47
  };
47
- module.exports.run = function ({ inputs, appId }) {
48
+ exports.run = function ({ inputs, appId }) {
48
49
  return __awaiter(this, void 0, void 0, function* () {
49
50
  console.log(`App ${appId} - ${inputs.text}`);
51
+ return {
52
+ success: true,
53
+ };
50
54
  });
51
55
  };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ const fetch = require("node-fetch");
12
+ const { getFetchResponse } = require("./utils");
13
+ exports.definition = {
14
+ name: "Slack Message",
15
+ tagline: "Send a message to Slack",
16
+ description: "Send a message to Slack",
17
+ icon: "ri-slack-line",
18
+ stepId: "slack",
19
+ type: "ACTION",
20
+ internal: false,
21
+ inputs: {},
22
+ schema: {
23
+ inputs: {
24
+ properties: {
25
+ url: {
26
+ type: "string",
27
+ title: "Incoming Webhook URL",
28
+ },
29
+ text: {
30
+ type: "string",
31
+ title: "Message",
32
+ },
33
+ },
34
+ required: ["url", "text"],
35
+ },
36
+ outputs: {
37
+ properties: {
38
+ httpStatus: {
39
+ type: "number",
40
+ description: "The HTTP status code of the request",
41
+ },
42
+ success: {
43
+ type: "boolean",
44
+ description: "Whether the message sent successfully",
45
+ },
46
+ response: {
47
+ type: "string",
48
+ description: "The response from the Slack Webhook",
49
+ },
50
+ },
51
+ },
52
+ },
53
+ };
54
+ exports.run = function ({ inputs }) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ let { url, text } = inputs;
57
+ const response = yield fetch(url, {
58
+ method: "post",
59
+ body: JSON.stringify({
60
+ text,
61
+ }),
62
+ headers: {
63
+ "Content-Type": "application/json",
64
+ },
65
+ });
66
+ const { status, message } = yield getFetchResponse(response);
67
+ return {
68
+ httpStatus: status,
69
+ response: message,
70
+ success: status === 200,
71
+ };
72
+ });
73
+ };
@@ -10,12 +10,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  const rowController = require("../../api/controllers/row");
12
12
  const automationUtils = require("../automationUtils");
13
- module.exports.definition = {
13
+ exports.definition = {
14
14
  name: "Update Row",
15
15
  tagline: "Update a {{inputs.enriched.table.name}} row",
16
16
  icon: "ri-refresh-line",
17
17
  description: "Update a row in your database",
18
18
  type: "ACTION",
19
+ internal: true,
19
20
  stepId: "UPDATE_ROW",
20
21
  inputs: {},
21
22
  schema: {
@@ -61,7 +62,7 @@ module.exports.definition = {
61
62
  },
62
63
  },
63
64
  };
64
- module.exports.run = function ({ inputs, appId, emitter }) {
65
+ exports.run = function ({ inputs, appId, emitter }) {
65
66
  return __awaiter(this, void 0, void 0, function* () {
66
67
  if (inputs.rowId == null || inputs.row == null) {
67
68
  return {
@@ -100,7 +101,6 @@ module.exports.run = function ({ inputs, appId, emitter }) {
100
101
  };
101
102
  }
102
103
  catch (err) {
103
- console.error(err);
104
104
  return {
105
105
  success: false,
106
106
  response: err,
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ exports.getFetchResponse = (fetched) => __awaiter(void 0, void 0, void 0, function* () {
12
+ let status = fetched.status, message;
13
+ const contentType = fetched.headers.get("content-type");
14
+ try {
15
+ if (contentType && contentType.indexOf("application/json") !== -1) {
16
+ message = yield fetched.json();
17
+ }
18
+ else {
19
+ message = yield fetched.text();
20
+ }
21
+ }
22
+ catch (err) {
23
+ message = "Failed to retrieve response";
24
+ }
25
+ return { status, message };
26
+ });
27
+ // need to make sure all ctx structures have the
28
+ // throw added to them, so that controllers don't
29
+ // throw a ctx.throw undefined when error occurs
30
+ exports.buildCtx = (appId, emitter, { body, params } = {}) => {
31
+ const ctx = {
32
+ appId,
33
+ user: { appId },
34
+ eventEmitter: emitter,
35
+ throw: (code, error) => {
36
+ throw error;
37
+ },
38
+ };
39
+ if (body) {
40
+ ctx.request = { body };
41
+ }
42
+ if (params) {
43
+ ctx.params = params;
44
+ }
45
+ return ctx;
46
+ };
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ const fetch = require("node-fetch");
12
+ const { getFetchResponse } = require("./utils");
13
+ exports.definition = {
14
+ name: "Zapier Webhook",
15
+ stepId: "zapier",
16
+ type: "ACTION",
17
+ internal: false,
18
+ description: "Trigger a Zapier Zap via webhooks",
19
+ tagline: "Trigger a Zapier Zap",
20
+ icon: "ri-flashlight-line",
21
+ schema: {
22
+ inputs: {
23
+ properties: {
24
+ url: {
25
+ type: "string",
26
+ title: "Webhook URL",
27
+ },
28
+ value1: {
29
+ type: "string",
30
+ title: "Payload Value 1",
31
+ },
32
+ value2: {
33
+ type: "string",
34
+ title: "Payload Value 2",
35
+ },
36
+ value3: {
37
+ type: "string",
38
+ title: "Payload Value 3",
39
+ },
40
+ value4: {
41
+ type: "string",
42
+ title: "Payload Value 4",
43
+ },
44
+ value5: {
45
+ type: "string",
46
+ title: "Payload Value 5",
47
+ },
48
+ },
49
+ required: ["url"],
50
+ },
51
+ outputs: {
52
+ properties: {
53
+ httpStatus: {
54
+ type: "number",
55
+ description: "The HTTP status code of the request",
56
+ },
57
+ response: {
58
+ type: "string",
59
+ description: "The response from Zapier",
60
+ },
61
+ },
62
+ },
63
+ },
64
+ };
65
+ exports.run = function ({ inputs }) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ const { url, value1, value2, value3, value4, value5 } = inputs;
68
+ // send the platform to make sure zaps always work, even
69
+ // if no values supplied
70
+ const response = yield fetch(url, {
71
+ method: "post",
72
+ body: JSON.stringify({
73
+ platform: "budibase",
74
+ value1,
75
+ value2,
76
+ value3,
77
+ value4,
78
+ value5,
79
+ }),
80
+ headers: {
81
+ "Content-Type": "application/json",
82
+ },
83
+ });
84
+ const { status, message } = yield getFetchResponse(response);
85
+ return {
86
+ success: status === 200,
87
+ httpStatus: status,
88
+ response: message,
89
+ };
90
+ });
91
+ };
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  const TestConfig = require("../../../tests/utilities/TestConfiguration");
12
12
  const actions = require("../../actions");
13
- const logic = require("../../logic");
14
13
  const emitter = require("../../../events/index");
15
14
  const env = require("../../../environment");
16
15
  let config;
@@ -41,15 +40,7 @@ exports.runInProd = (fn) => __awaiter(void 0, void 0, void 0, function* () {
41
40
  });
42
41
  exports.runStep = function runStep(stepId, inputs) {
43
42
  return __awaiter(this, void 0, void 0, function* () {
44
- let step;
45
- if (Object.values(exports.actions)
46
- .map(action => action.stepId)
47
- .includes(stepId)) {
48
- step = yield actions.getAction(stepId);
49
- }
50
- else {
51
- step = logic.getLogic(stepId);
52
- }
43
+ let step = yield actions.getAction(stepId);
53
44
  expect(step).toBeDefined();
54
45
  return step({
55
46
  inputs,
@@ -61,5 +52,4 @@ exports.runStep = function runStep(stepId, inputs) {
61
52
  });
62
53
  };
63
54
  exports.apiKey = "test";
64
- exports.actions = actions.BUILTIN_DEFINITIONS;
65
- exports.logic = logic.BUILTIN_DEFINITIONS;
55
+ exports.actions = actions.ACTION_DEFINITIONS;
@@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const actions = require("./actions");
12
- const logic = require("./logic");
13
12
  const automationUtils = require("./automationUtils");
14
13
  const AutomationEmitter = require("../events/AutomationEmitter");
15
14
  const { processObject } = require("@budibase/string-templates");
@@ -17,7 +16,7 @@ const { DEFAULT_TENANT_ID } = require("@budibase/auth").constants;
17
16
  const CouchDB = require("../db");
18
17
  const { DocumentTypes } = require("../db/utils");
19
18
  const { doInTenant } = require("@budibase/auth/tenancy");
20
- const FILTER_STEP_ID = logic.BUILTIN_DEFINITIONS.FILTER.stepId;
19
+ const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId;
21
20
  /**
22
21
  * The automation orchestrator is a class responsible for executing automations.
23
22
  * It handles the context of the automation and makes sure each step gets the correct
@@ -38,16 +37,15 @@ class Orchestrator {
38
37
  // create an emitter which has the chain count for this automation run in it, so it can block
39
38
  // excessive chaining if required
40
39
  this._emitter = new AutomationEmitter(this._chainCount + 1);
40
+ this.executionOutput = { trigger: {}, steps: [] };
41
+ // setup the execution output
42
+ const triggerStepId = automation.definition.trigger.stepId;
43
+ const triggerId = automation.definition.trigger.id;
44
+ this.updateExecutionOutput(triggerId, triggerStepId, null, triggerOutput);
41
45
  }
42
- getStepFunctionality(type, stepId) {
46
+ getStepFunctionality(stepId) {
43
47
  return __awaiter(this, void 0, void 0, function* () {
44
- let step = null;
45
- if (type === "ACTION") {
46
- step = yield actions.getAction(stepId);
47
- }
48
- else if (type === "LOGIC") {
49
- step = logic.getLogic(stepId);
50
- }
48
+ let step = yield actions.getAction(stepId);
51
49
  if (step == null) {
52
50
  throw `Cannot find automation step by name ${stepId}`;
53
51
  }
@@ -65,12 +63,20 @@ class Orchestrator {
65
63
  return this._app;
66
64
  });
67
65
  }
66
+ updateExecutionOutput(id, stepId, inputs, outputs) {
67
+ const stepObj = { id, stepId, inputs, outputs };
68
+ // first entry is always the trigger (constructor)
69
+ if (this.executionOutput.steps.length === 0) {
70
+ this.executionOutput.trigger = stepObj;
71
+ }
72
+ this.executionOutput.steps.push(stepObj);
73
+ }
68
74
  execute() {
69
75
  return __awaiter(this, void 0, void 0, function* () {
70
76
  let automation = this._automation;
71
77
  const app = yield this.getApp();
72
78
  for (let step of automation.definition.steps) {
73
- let stepFn = yield this.getStepFunctionality(step.type, step.stepId);
79
+ let stepFn = yield this.getStepFunctionality(step.stepId);
74
80
  step.inputs = yield processObject(step.inputs, this._context);
75
81
  step.inputs = automationUtils.cleanInputValues(step.inputs, step.schema.inputs);
76
82
  // appId is always passed
@@ -89,26 +95,18 @@ class Orchestrator {
89
95
  break;
90
96
  }
91
97
  this._context.steps.push(outputs);
98
+ this.updateExecutionOutput(step.id, step.stepId, step.inputs, outputs);
92
99
  }
93
100
  catch (err) {
94
101
  console.error(`Automation error - ${step.stepId} - ${err}`);
102
+ return err;
95
103
  }
96
104
  }
105
+ return this.executionOutput;
97
106
  });
98
107
  }
99
108
  }
100
- // callback is required for worker-farm to state that the worker thread has completed
101
- module.exports = (job, cb = null) => __awaiter(void 0, void 0, void 0, function* () {
102
- try {
103
- const automationOrchestrator = new Orchestrator(job.data.automation, job.data.event);
104
- yield automationOrchestrator.execute();
105
- if (cb) {
106
- cb();
107
- }
108
- }
109
- catch (err) {
110
- if (cb) {
111
- cb(err);
112
- }
113
- }
109
+ module.exports = (job) => __awaiter(void 0, void 0, void 0, function* () {
110
+ const automationOrchestrator = new Orchestrator(job.data.automation, job.data.event);
111
+ return automationOrchestrator.execute();
114
112
  });
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ exports.definition = {
3
+ name: "App Action",
4
+ event: "app:trigger",
5
+ icon: "ri-window-fill",
6
+ tagline: "Automation fired from the frontend",
7
+ description: "Trigger an automation from an action inside your app",
8
+ stepId: "APP",
9
+ inputs: {},
10
+ schema: {
11
+ inputs: {
12
+ properties: {
13
+ fields: {
14
+ type: "object",
15
+ customType: "triggerSchema",
16
+ title: "Fields",
17
+ },
18
+ },
19
+ required: [],
20
+ },
21
+ outputs: {
22
+ properties: {
23
+ fields: {
24
+ type: "object",
25
+ description: "Fields submitted from the app frontend",
26
+ },
27
+ },
28
+ required: ["fields"],
29
+ },
30
+ },
31
+ type: "TRIGGER",
32
+ };