@budibase/server 0.9.138 → 0.9.140-alpha.2

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 (296) hide show
  1. package/builder/assets/discord.c14881e9.svg +10 -0
  2. package/builder/assets/{index.b18ab99b.js → index.1d1fa051.js} +35 -35
  3. package/builder/assets/{index.121692c9.css → index.79907e5c.css} +5 -5
  4. package/builder/assets/integromat.42212f11.png +0 -0
  5. package/builder/assets/slack.1e1f7cfb.svg +33 -0
  6. package/builder/assets/{vendor.7177f366.js → vendor.d39b3c1e.js} +2 -2
  7. package/builder/assets/zapier.3fbd8f5c.png +0 -0
  8. package/builder/index.html +3 -3
  9. package/coverage/clover.xml +2138 -2091
  10. package/coverage/coverage-final.json +120 -106
  11. package/coverage/lcov-report/api/controllers/analytics.js.html +3 -3
  12. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  13. package/coverage/lcov-report/api/controllers/application.js.html +84 -84
  14. package/coverage/lcov-report/api/controllers/auth.js.html +6 -6
  15. package/coverage/lcov-report/api/controllers/automation.js.html +182 -356
  16. package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
  17. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  18. package/coverage/lcov-report/api/controllers/datasource.js.html +12 -12
  19. package/coverage/lcov-report/api/controllers/dev.js.html +15 -15
  20. package/coverage/lcov-report/api/controllers/hosting.js.html +8 -8
  21. package/coverage/lcov-report/api/controllers/index.html +47 -32
  22. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  23. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +218 -0
  25. package/coverage/lcov-report/api/controllers/permission.js.html +14 -14
  26. package/coverage/lcov-report/api/controllers/query.js.html +17 -23
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +15 -15
  30. package/coverage/lcov-report/api/controllers/row/index.html +29 -44
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +48 -45
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +159 -126
  33. package/coverage/lcov-report/api/controllers/row/utils.js.html +17 -17
  34. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  35. package/coverage/lcov-report/api/controllers/script.js.html +5 -5
  36. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +40 -40
  38. package/coverage/lcov-report/api/controllers/table/utils.js.html +48 -48
  39. package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
  40. package/coverage/lcov-report/api/controllers/user.js.html +14 -11
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +3 -3
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +9 -9
  44. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +6 -6
  45. package/coverage/lcov-report/api/controllers/webhook.js.html +14 -14
  46. package/coverage/lcov-report/api/index.html +1 -1
  47. package/coverage/lcov-report/api/index.js.html +23 -23
  48. package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
  49. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  50. package/coverage/lcov-report/api/routes/application.js.html +8 -8
  51. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  52. package/coverage/lcov-report/api/routes/automation.js.html +41 -26
  53. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  54. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  55. package/coverage/lcov-report/api/routes/datasource.js.html +13 -13
  56. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  57. package/coverage/lcov-report/api/routes/dev.js.html +11 -11
  58. package/coverage/lcov-report/api/routes/hosting.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/index.html +24 -9
  60. package/coverage/lcov-report/api/routes/index.js.html +36 -30
  61. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  62. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  63. package/coverage/lcov-report/api/routes/metadata.js.html +194 -0
  64. package/coverage/lcov-report/api/routes/permission.js.html +12 -12
  65. package/coverage/lcov-report/api/routes/query.js.html +13 -13
  66. package/coverage/lcov-report/api/routes/role.js.html +12 -12
  67. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  68. package/coverage/lcov-report/api/routes/row.js.html +10 -10
  69. package/coverage/lcov-report/api/routes/screen.js.html +11 -11
  70. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/static.js.html +13 -16
  72. package/coverage/lcov-report/api/routes/table.js.html +12 -12
  73. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  74. package/coverage/lcov-report/api/routes/user.js.html +9 -9
  75. package/coverage/lcov-report/api/routes/view.js.html +11 -11
  76. package/coverage/lcov-report/api/routes/webhook.js.html +11 -11
  77. package/coverage/lcov-report/automations/actions.js.html +57 -117
  78. package/coverage/lcov-report/automations/automationUtils.js.html +7 -7
  79. package/coverage/lcov-report/automations/bullboard.js.html +49 -16
  80. package/coverage/lcov-report/automations/index.html +67 -67
  81. package/coverage/lcov-report/automations/index.js.html +26 -128
  82. package/coverage/lcov-report/automations/steps/bash.js.html +37 -16
  83. package/coverage/lcov-report/automations/steps/createRow.js.html +15 -15
  84. package/coverage/lcov-report/automations/steps/delay.js.html +48 -9
  85. package/coverage/lcov-report/automations/steps/deleteRow.js.html +14 -14
  86. package/coverage/lcov-report/automations/steps/discord.js.html +329 -0
  87. package/coverage/lcov-report/automations/steps/executeQuery.js.html +22 -34
  88. package/coverage/lcov-report/automations/steps/executeScript.js.html +21 -33
  89. package/coverage/lcov-report/automations/steps/filter.js.html +28 -25
  90. package/coverage/lcov-report/automations/steps/index.html +140 -65
  91. package/coverage/lcov-report/automations/steps/integromat.js.html +341 -0
  92. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +44 -38
  93. package/coverage/lcov-report/automations/steps/queryRows.js.html +437 -0
  94. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +13 -13
  95. package/coverage/lcov-report/automations/steps/serverLog.js.html +23 -11
  96. package/coverage/lcov-report/automations/steps/{sendgridEmail.js.html → slack.js.html} +58 -88
  97. package/coverage/lcov-report/automations/steps/updateRow.js.html +12 -12
  98. package/coverage/lcov-report/automations/steps/utils.js.html +188 -0
  99. package/coverage/lcov-report/automations/steps/zapier.js.html +332 -0
  100. package/coverage/lcov-report/automations/thread.js.html +79 -76
  101. package/coverage/lcov-report/automations/triggerInfo/app.js.html +173 -0
  102. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +173 -0
  103. package/coverage/lcov-report/automations/triggerInfo/index.html +201 -0
  104. package/coverage/lcov-report/automations/triggerInfo/index.js.html +125 -0
  105. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +176 -0
  106. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +200 -0
  107. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +200 -0
  108. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +188 -0
  109. package/coverage/lcov-report/automations/triggers.js.html +67 -838
  110. package/coverage/lcov-report/automations/utils.js.html +557 -0
  111. package/coverage/lcov-report/constants/index.html +5 -5
  112. package/coverage/lcov-report/constants/index.js.html +32 -17
  113. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  114. package/coverage/lcov-report/constants/screens.js.html +4 -4
  115. package/coverage/lcov-report/db/client.js.html +18 -18
  116. package/coverage/lcov-report/db/index.html +19 -19
  117. package/coverage/lcov-report/db/index.js.html +3 -3
  118. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +79 -79
  119. package/coverage/lcov-report/db/linkedRows/index.html +18 -18
  120. package/coverage/lcov-report/db/linkedRows/index.js.html +107 -149
  121. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +43 -43
  122. package/coverage/lcov-report/db/newid.js.html +4 -4
  123. package/coverage/lcov-report/db/utils.js.html +127 -76
  124. package/coverage/lcov-report/events/AutomationEmitter.js.html +7 -7
  125. package/coverage/lcov-report/events/index.html +1 -1
  126. package/coverage/lcov-report/events/index.js.html +6 -6
  127. package/coverage/lcov-report/events/utils.js.html +3 -3
  128. package/coverage/lcov-report/index.html +116 -101
  129. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  130. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  131. package/coverage/lcov-report/{automations/logic.js.html → middleware/appInfo.js.html} +35 -38
  132. package/coverage/lcov-report/middleware/authorized.js.html +16 -16
  133. package/coverage/lcov-report/middleware/builder.js.html +15 -15
  134. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  135. package/coverage/lcov-report/middleware/index.html +23 -8
  136. package/coverage/lcov-report/middleware/joi-validator.js.html +6 -6
  137. package/coverage/lcov-report/middleware/resourceId.js.html +28 -28
  138. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  139. package/coverage/lcov-report/middleware/usageQuota.js.html +8 -8
  140. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  141. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  142. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  143. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  144. package/coverage/lcov-report/utilities/global.js.html +33 -33
  145. package/coverage/lcov-report/utilities/index.html +28 -28
  146. package/coverage/lcov-report/utilities/index.js.html +178 -25
  147. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +18 -18
  148. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  149. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  150. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  151. package/coverage/lcov-report/utilities/rowProcessor/index.html +14 -14
  152. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +87 -51
  153. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +10 -10
  154. package/coverage/lcov-report/utilities/security.js.html +9 -9
  155. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +5 -5
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +52 -52
  158. package/coverage/lcov.info +3255 -3218
  159. package/dist/api/controllers/automation.js +60 -127
  160. package/dist/api/controllers/deploy/index.js +17 -1
  161. package/dist/api/controllers/metadata.js +49 -0
  162. package/dist/api/controllers/query.js +0 -2
  163. package/dist/api/controllers/row/ExternalRequest.js +1 -1
  164. package/dist/api/controllers/row/index.js +1 -0
  165. package/dist/api/controllers/row/internal.js +33 -23
  166. package/dist/api/controllers/static/index.js +1 -28
  167. package/dist/api/controllers/static/templates/BudibaseApp.svelte +4 -1
  168. package/dist/api/controllers/user.js +1 -1
  169. package/dist/api/routes/automation.js +4 -5
  170. package/dist/api/routes/index.js +2 -0
  171. package/dist/api/routes/metadata.js +13 -0
  172. package/dist/api/routes/static.js +0 -1
  173. package/dist/api/routes/tests/utilities/TestFunctions.js +13 -0
  174. package/dist/app.js +1 -1
  175. package/dist/automations/actions.js +29 -46
  176. package/dist/automations/bullboard.js +11 -2
  177. package/dist/automations/index.js +11 -48
  178. package/dist/automations/steps/bash.js +12 -6
  179. package/dist/automations/steps/createRow.js +5 -5
  180. package/dist/automations/steps/delay.js +16 -3
  181. package/dist/automations/steps/deleteRow.js +5 -5
  182. package/dist/automations/steps/discord.js +91 -0
  183. package/dist/automations/steps/executeQuery.js +12 -15
  184. package/dist/automations/steps/executeScript.js +12 -15
  185. package/dist/automations/steps/filter.js +19 -18
  186. package/dist/automations/steps/integromat.js +94 -0
  187. package/dist/automations/steps/outgoingWebhook.js +19 -20
  188. package/dist/automations/steps/queryRows.js +129 -0
  189. package/dist/automations/steps/sendSmtpEmail.js +4 -4
  190. package/dist/automations/steps/serverLog.js +7 -3
  191. package/dist/automations/steps/slack.js +73 -0
  192. package/dist/automations/steps/updateRow.js +4 -4
  193. package/dist/automations/steps/utils.js +46 -0
  194. package/dist/automations/steps/zapier.js +91 -0
  195. package/dist/automations/tests/utilities/index.js +2 -12
  196. package/dist/automations/thread.js +23 -25
  197. package/dist/automations/triggerInfo/app.js +32 -0
  198. package/dist/automations/triggerInfo/cron.js +32 -0
  199. package/dist/automations/triggerInfo/index.js +15 -0
  200. package/dist/automations/triggerInfo/rowDeleted.js +33 -0
  201. package/dist/automations/triggerInfo/rowSaved.js +41 -0
  202. package/dist/automations/triggerInfo/rowUpdated.js +41 -0
  203. package/dist/automations/triggerInfo/webhook.js +37 -0
  204. package/dist/automations/triggers.js +27 -285
  205. package/dist/automations/utils.js +143 -0
  206. package/dist/constants/index.js +4 -0
  207. package/dist/db/linkedRows/index.js +20 -34
  208. package/dist/db/utils.js +14 -1
  209. package/dist/environment.js +2 -1
  210. package/dist/integrations/mysql.js +14 -2
  211. package/dist/middleware/appInfo.js +17 -0
  212. package/dist/middleware/usageQuota.js +1 -1
  213. package/dist/package.json +12 -11
  214. package/dist/tsconfig.tsbuildinfo +1 -1
  215. package/dist/utilities/appDirectoryTemplate/package.json +1 -1
  216. package/dist/utilities/fileSystem/clientLibrary.js +2 -2
  217. package/dist/utilities/fileSystem/index.js +2 -27
  218. package/dist/utilities/index.js +54 -0
  219. package/dist/utilities/redis.js +16 -1
  220. package/dist/utilities/rowProcessor/index.js +7 -4
  221. package/package.json +13 -12
  222. package/scripts/jestSetup.js +1 -0
  223. package/scripts/selfhost.js +8 -0
  224. package/src/api/controllers/automation.js +87 -145
  225. package/src/api/controllers/deploy/index.js +23 -1
  226. package/src/api/controllers/metadata.js +46 -0
  227. package/src/api/controllers/query.js +0 -2
  228. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  229. package/src/api/controllers/row/index.js +1 -0
  230. package/src/api/controllers/row/internal.js +34 -23
  231. package/src/api/controllers/static/index.js +1 -39
  232. package/src/api/controllers/static/templates/BudibaseApp.svelte +4 -1
  233. package/src/api/controllers/user.js +1 -0
  234. package/src/api/routes/automation.js +16 -11
  235. package/src/api/routes/index.js +2 -0
  236. package/src/api/routes/metadata.js +38 -0
  237. package/src/api/routes/static.js +0 -1
  238. package/src/api/routes/tests/automation.spec.js +4 -26
  239. package/src/api/routes/tests/metadata.spec.js +65 -0
  240. package/src/api/routes/tests/utilities/TestFunctions.js +14 -0
  241. package/src/app.ts +1 -1
  242. package/src/automations/actions.js +29 -49
  243. package/src/automations/bullboard.js +13 -2
  244. package/src/automations/index.js +11 -45
  245. package/src/automations/steps/bash.js +13 -6
  246. package/src/automations/steps/createRow.js +5 -5
  247. package/src/automations/steps/delay.js +16 -3
  248. package/src/automations/steps/deleteRow.js +5 -5
  249. package/src/automations/steps/discord.js +83 -0
  250. package/src/automations/steps/executeQuery.js +12 -16
  251. package/src/automations/steps/executeScript.js +12 -16
  252. package/src/automations/steps/filter.js +19 -18
  253. package/src/automations/steps/integromat.js +87 -0
  254. package/src/automations/steps/outgoingWebhook.js +20 -18
  255. package/src/automations/steps/queryRows.js +119 -0
  256. package/src/automations/steps/sendSmtpEmail.js +4 -4
  257. package/src/automations/steps/serverLog.js +7 -3
  258. package/src/automations/steps/slack.js +64 -0
  259. package/src/automations/steps/updateRow.js +4 -4
  260. package/src/automations/steps/utils.js +36 -0
  261. package/src/automations/steps/zapier.js +84 -0
  262. package/src/automations/tests/automation.spec.js +4 -67
  263. package/src/automations/tests/delay.spec.js +2 -2
  264. package/src/automations/tests/filter.spec.js +14 -14
  265. package/src/automations/tests/queryRows.spec.js +51 -0
  266. package/src/automations/tests/utilities/index.js +2 -13
  267. package/src/automations/thread.js +27 -26
  268. package/src/automations/triggerInfo/app.js +31 -0
  269. package/src/automations/triggerInfo/cron.js +31 -0
  270. package/src/automations/triggerInfo/index.js +15 -0
  271. package/src/automations/triggerInfo/rowDeleted.js +32 -0
  272. package/src/automations/triggerInfo/rowSaved.js +40 -0
  273. package/src/automations/triggerInfo/rowUpdated.js +40 -0
  274. package/src/automations/triggerInfo/webhook.js +36 -0
  275. package/src/automations/triggers.js +33 -290
  276. package/src/automations/utils.js +159 -0
  277. package/src/constants/index.js +5 -0
  278. package/src/db/linkedRows/index.js +21 -35
  279. package/src/db/tests/linkTests.spec.js +0 -12
  280. package/src/db/utils.js +17 -0
  281. package/src/environment.js +2 -1
  282. package/src/integrations/mysql.ts +15 -2
  283. package/src/middleware/appInfo.js +19 -0
  284. package/src/middleware/usageQuota.js +1 -1
  285. package/src/utilities/appDirectoryTemplate/package.json +1 -1
  286. package/src/utilities/fileSystem/clientLibrary.js +2 -2
  287. package/src/utilities/fileSystem/index.js +2 -36
  288. package/src/utilities/index.js +51 -0
  289. package/src/utilities/redis.js +18 -1
  290. package/src/utilities/rowProcessor/index.js +16 -4
  291. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +0 -1244
  292. package/dist/automations/logic.js +0 -17
  293. package/dist/automations/steps/sendgridEmail.js +0 -85
  294. package/src/automations/logic.js +0 -20
  295. package/src/automations/steps/sendgridEmail.js +0 -74
  296. package/src/automations/tests/sendEmail.spec.js +0 -36
@@ -1,48 +1,48 @@
1
1
  const setup = require("./utilities")
2
- const { LogicConditions } = require("../steps/filter")
2
+ const { FilterConditions } = require("../steps/filter")
3
3
 
4
4
  describe("test the filter logic", () => {
5
5
  async function checkFilter(field, condition, value, pass = true) {
6
- let res = await setup.runStep(setup.logic.FILTER.stepId,
6
+ let res = await setup.runStep(setup.actions.FILTER.stepId,
7
7
  { field, condition, value }
8
8
  )
9
9
  expect(res.success).toEqual(pass)
10
10
  }
11
11
 
12
12
  it("should be able test equality", async () => {
13
- await checkFilter("hello", LogicConditions.EQUAL, "hello", true)
14
- await checkFilter("hello", LogicConditions.EQUAL, "no", false)
13
+ await checkFilter("hello", FilterConditions.EQUAL, "hello", true)
14
+ await checkFilter("hello", FilterConditions.EQUAL, "no", false)
15
15
  })
16
16
 
17
17
  it("should be able to test greater than", async () => {
18
- await checkFilter(10, LogicConditions.GREATER_THAN, 5, true)
19
- await checkFilter(10, LogicConditions.GREATER_THAN, 15, false)
18
+ await checkFilter(10, FilterConditions.GREATER_THAN, 5, true)
19
+ await checkFilter(10, FilterConditions.GREATER_THAN, 15, false)
20
20
  })
21
21
 
22
22
  it("should be able to test less than", async () => {
23
- await checkFilter(5, LogicConditions.LESS_THAN, 10, true)
24
- await checkFilter(15, LogicConditions.LESS_THAN, 10, false)
23
+ await checkFilter(5, FilterConditions.LESS_THAN, 10, true)
24
+ await checkFilter(15, FilterConditions.LESS_THAN, 10, false)
25
25
  })
26
26
 
27
27
  it("should be able to in-equality", async () => {
28
- await checkFilter("hello", LogicConditions.NOT_EQUAL, "no", true)
29
- await checkFilter(10, LogicConditions.NOT_EQUAL, 10, false)
28
+ await checkFilter("hello", FilterConditions.NOT_EQUAL, "no", true)
29
+ await checkFilter(10, FilterConditions.NOT_EQUAL, 10, false)
30
30
  })
31
31
 
32
32
  it("check number coercion", async () => {
33
- await checkFilter("10", LogicConditions.GREATER_THAN, "5", true)
33
+ await checkFilter("10", FilterConditions.GREATER_THAN, "5", true)
34
34
  })
35
35
 
36
36
  it("check date coercion", async () => {
37
37
  await checkFilter(
38
38
  (new Date()).toISOString(),
39
- LogicConditions.GREATER_THAN,
39
+ FilterConditions.GREATER_THAN,
40
40
  (new Date(-10000)).toISOString(),
41
41
  true
42
42
  )
43
43
  })
44
44
 
45
45
  it("check objects always false", async () => {
46
- await checkFilter({}, LogicConditions.EQUAL, {}, false)
46
+ await checkFilter({}, FilterConditions.EQUAL, {}, false)
47
47
  })
48
- })
48
+ })
@@ -0,0 +1,51 @@
1
+ // lucene searching not supported in test due to use of PouchDB
2
+ let rows = []
3
+ jest.mock("../../api/controllers/row/internalSearch", () => ({
4
+ fullSearch: jest.fn(() => {
5
+ return {
6
+ rows,
7
+ }
8
+ }),
9
+ paginatedSearch: jest.fn(),
10
+ }))
11
+ const setup = require("./utilities")
12
+
13
+ const NAME = "Test"
14
+
15
+ describe("Test a query step automation", () => {
16
+ let table
17
+ let config = setup.getConfig()
18
+
19
+ beforeEach(async () => {
20
+ await config.init()
21
+ table = await config.createTable()
22
+ const row = {
23
+ name: NAME,
24
+ description: "original description",
25
+ tableId: table._id,
26
+ }
27
+ rows.push(await config.createRow(row))
28
+ rows.push(await config.createRow(row))
29
+ })
30
+
31
+ afterAll(setup.afterAll)
32
+
33
+ it("should be able to run the query step", async () => {
34
+ const inputs = {
35
+ tableId: table._id,
36
+ filters: {
37
+ equal: {
38
+ name: NAME,
39
+ },
40
+ },
41
+ sortColumn: "name",
42
+ sortOrder: "ascending",
43
+ limit: 10,
44
+ }
45
+ const res = await setup.runStep(setup.actions.QUERY_ROWS.stepId, inputs)
46
+ expect(res.success).toBe(true)
47
+ expect(res.rows).toBeDefined()
48
+ expect(res.rows.length).toBe(2)
49
+ expect(res.rows[0].name).toBe(NAME)
50
+ })
51
+ })
@@ -1,6 +1,5 @@
1
1
  const TestConfig = require("../../../tests/utilities/TestConfiguration")
2
2
  const actions = require("../../actions")
3
- const logic = require("../../logic")
4
3
  const emitter = require("../../../events/index")
5
4
  const env = require("../../../environment")
6
5
 
@@ -34,16 +33,7 @@ exports.runInProd = async fn => {
34
33
  }
35
34
 
36
35
  exports.runStep = async function runStep(stepId, inputs) {
37
- let step
38
- if (
39
- Object.values(exports.actions)
40
- .map(action => action.stepId)
41
- .includes(stepId)
42
- ) {
43
- step = await actions.getAction(stepId)
44
- } else {
45
- step = logic.getLogic(stepId)
46
- }
36
+ let step = await actions.getAction(stepId)
47
37
  expect(step).toBeDefined()
48
38
  return step({
49
39
  inputs,
@@ -56,5 +46,4 @@ exports.runStep = async function runStep(stepId, inputs) {
56
46
 
57
47
  exports.apiKey = "test"
58
48
 
59
- exports.actions = actions.BUILTIN_DEFINITIONS
60
- exports.logic = logic.BUILTIN_DEFINITIONS
49
+ exports.actions = actions.ACTION_DEFINITIONS
@@ -1,5 +1,4 @@
1
1
  const actions = require("./actions")
2
- const logic = require("./logic")
3
2
  const automationUtils = require("./automationUtils")
4
3
  const AutomationEmitter = require("../events/AutomationEmitter")
5
4
  const { processObject } = require("@budibase/string-templates")
@@ -8,7 +7,7 @@ const CouchDB = require("../db")
8
7
  const { DocumentTypes } = require("../db/utils")
9
8
  const { doInTenant } = require("@budibase/auth/tenancy")
10
9
 
11
- const FILTER_STEP_ID = logic.BUILTIN_DEFINITIONS.FILTER.stepId
10
+ const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
12
11
 
13
12
  /**
14
13
  * The automation orchestrator is a class responsible for executing automations.
@@ -30,15 +29,15 @@ class Orchestrator {
30
29
  // create an emitter which has the chain count for this automation run in it, so it can block
31
30
  // excessive chaining if required
32
31
  this._emitter = new AutomationEmitter(this._chainCount + 1)
32
+ this.executionOutput = { trigger: {}, steps: [] }
33
+ // setup the execution output
34
+ const triggerStepId = automation.definition.trigger.stepId
35
+ const triggerId = automation.definition.trigger.id
36
+ this.updateExecutionOutput(triggerId, triggerStepId, null, triggerOutput)
33
37
  }
34
38
 
35
- async getStepFunctionality(type, stepId) {
36
- let step = null
37
- if (type === "ACTION") {
38
- step = await actions.getAction(stepId)
39
- } else if (type === "LOGIC") {
40
- step = logic.getLogic(stepId)
41
- }
39
+ async getStepFunctionality(stepId) {
40
+ let step = await actions.getAction(stepId)
42
41
  if (step == null) {
43
42
  throw `Cannot find automation step by name ${stepId}`
44
43
  }
@@ -55,11 +54,20 @@ class Orchestrator {
55
54
  return this._app
56
55
  }
57
56
 
57
+ updateExecutionOutput(id, stepId, inputs, outputs) {
58
+ const stepObj = { id, stepId, inputs, outputs }
59
+ // first entry is always the trigger (constructor)
60
+ if (this.executionOutput.steps.length === 0) {
61
+ this.executionOutput.trigger = stepObj
62
+ }
63
+ this.executionOutput.steps.push(stepObj)
64
+ }
65
+
58
66
  async execute() {
59
67
  let automation = this._automation
60
68
  const app = await this.getApp()
61
69
  for (let step of automation.definition.steps) {
62
- let stepFn = await this.getStepFunctionality(step.type, step.stepId)
70
+ let stepFn = await this.getStepFunctionality(step.stepId)
63
71
  step.inputs = await processObject(step.inputs, this._context)
64
72
  step.inputs = automationUtils.cleanInputValues(
65
73
  step.inputs,
@@ -81,27 +89,20 @@ class Orchestrator {
81
89
  break
82
90
  }
83
91
  this._context.steps.push(outputs)
92
+ this.updateExecutionOutput(step.id, step.stepId, step.inputs, outputs)
84
93
  } catch (err) {
85
94
  console.error(`Automation error - ${step.stepId} - ${err}`)
95
+ return err
86
96
  }
87
97
  }
98
+ return this.executionOutput
88
99
  }
89
100
  }
90
101
 
91
- // callback is required for worker-farm to state that the worker thread has completed
92
- module.exports = async (job, cb = null) => {
93
- try {
94
- const automationOrchestrator = new Orchestrator(
95
- job.data.automation,
96
- job.data.event
97
- )
98
- await automationOrchestrator.execute()
99
- if (cb) {
100
- cb()
101
- }
102
- } catch (err) {
103
- if (cb) {
104
- cb(err)
105
- }
106
- }
102
+ module.exports = async job => {
103
+ const automationOrchestrator = new Orchestrator(
104
+ job.data.automation,
105
+ job.data.event
106
+ )
107
+ return automationOrchestrator.execute()
107
108
  }
@@ -0,0 +1,31 @@
1
+ exports.definition = {
2
+ name: "App Action",
3
+ event: "app:trigger",
4
+ icon: "Apps",
5
+ tagline: "Automation fired from the frontend",
6
+ description: "Trigger an automation from an action inside your app",
7
+ stepId: "APP",
8
+ inputs: {},
9
+ schema: {
10
+ inputs: {
11
+ properties: {
12
+ fields: {
13
+ type: "object",
14
+ customType: "triggerSchema",
15
+ title: "Fields",
16
+ },
17
+ },
18
+ required: [],
19
+ },
20
+ outputs: {
21
+ properties: {
22
+ fields: {
23
+ type: "object",
24
+ description: "Fields submitted from the app frontend",
25
+ },
26
+ },
27
+ required: ["fields"],
28
+ },
29
+ },
30
+ type: "TRIGGER",
31
+ }
@@ -0,0 +1,31 @@
1
+ exports.definition = {
2
+ name: "Cron Trigger",
3
+ event: "cron:trigger",
4
+ icon: "Clock",
5
+ tagline: "Cron Trigger (<b>{{inputs.cron}}</b>)",
6
+ description: "Triggers automation on a cron schedule.",
7
+ stepId: "CRON",
8
+ inputs: {},
9
+ schema: {
10
+ inputs: {
11
+ properties: {
12
+ cron: {
13
+ type: "string",
14
+ customType: "cron",
15
+ title: "Expression",
16
+ },
17
+ },
18
+ required: ["cron"],
19
+ },
20
+ outputs: {
21
+ properties: {
22
+ timestamp: {
23
+ type: "number",
24
+ description: "Timestamp the cron was executed",
25
+ },
26
+ },
27
+ required: ["timestamp"],
28
+ },
29
+ },
30
+ type: "TRIGGER",
31
+ }
@@ -0,0 +1,15 @@
1
+ const app = require("./app")
2
+ const cron = require("./cron")
3
+ const rowDeleted = require("./rowDeleted")
4
+ const rowSaved = require("./rowSaved")
5
+ const rowUpdated = require("./rowUpdated")
6
+ const webhook = require("./webhook")
7
+
8
+ exports.definitions = {
9
+ ROW_SAVED: rowSaved.definition,
10
+ ROW_UPDATED: rowUpdated.definition,
11
+ ROW_DELETED: rowDeleted.definition,
12
+ WEBHOOK: webhook.definition,
13
+ APP: app.definition,
14
+ CRON: cron.definition,
15
+ }
@@ -0,0 +1,32 @@
1
+ exports.definition = {
2
+ name: "Row Deleted",
3
+ event: "row:delete",
4
+ icon: "TableRowRemoveCenter",
5
+ tagline: "Row is deleted from {{inputs.enriched.table.name}}",
6
+ description: "Fired when a row is deleted from your database",
7
+ stepId: "ROW_DELETED",
8
+ inputs: {},
9
+ schema: {
10
+ inputs: {
11
+ properties: {
12
+ tableId: {
13
+ type: "string",
14
+ customType: "table",
15
+ title: "Table",
16
+ },
17
+ },
18
+ required: ["tableId"],
19
+ },
20
+ outputs: {
21
+ properties: {
22
+ row: {
23
+ type: "object",
24
+ customType: "row",
25
+ description: "The row that was deleted",
26
+ },
27
+ },
28
+ required: ["row"],
29
+ },
30
+ },
31
+ type: "TRIGGER",
32
+ }
@@ -0,0 +1,40 @@
1
+ exports.definition = {
2
+ name: "Row Created",
3
+ event: "row:save",
4
+ icon: "TableRowAddBottom",
5
+ tagline: "Row is added to {{inputs.enriched.table.name}}",
6
+ description: "Fired when a row is added to your database",
7
+ stepId: "ROW_SAVED",
8
+ inputs: {},
9
+ schema: {
10
+ inputs: {
11
+ properties: {
12
+ tableId: {
13
+ type: "string",
14
+ customType: "table",
15
+ title: "Table",
16
+ },
17
+ },
18
+ required: ["tableId"],
19
+ },
20
+ outputs: {
21
+ properties: {
22
+ row: {
23
+ type: "object",
24
+ customType: "row",
25
+ description: "The new row that was created",
26
+ },
27
+ id: {
28
+ type: "string",
29
+ description: "Row ID - can be used for updating",
30
+ },
31
+ revision: {
32
+ type: "string",
33
+ description: "Revision of row",
34
+ },
35
+ },
36
+ required: ["row", "id"],
37
+ },
38
+ },
39
+ type: "TRIGGER",
40
+ }
@@ -0,0 +1,40 @@
1
+ exports.definition = {
2
+ name: "Row Updated",
3
+ event: "row:update",
4
+ icon: "Refresh",
5
+ tagline: "Row is updated in {{inputs.enriched.table.name}}",
6
+ description: "Fired when a row is updated in your database",
7
+ stepId: "ROW_UPDATED",
8
+ inputs: {},
9
+ schema: {
10
+ inputs: {
11
+ properties: {
12
+ tableId: {
13
+ type: "string",
14
+ customType: "table",
15
+ title: "Table",
16
+ },
17
+ },
18
+ required: ["tableId"],
19
+ },
20
+ outputs: {
21
+ properties: {
22
+ row: {
23
+ type: "object",
24
+ customType: "row",
25
+ description: "The row that was updated",
26
+ },
27
+ id: {
28
+ type: "string",
29
+ description: "Row ID - can be used for updating",
30
+ },
31
+ revision: {
32
+ type: "string",
33
+ description: "Revision of row",
34
+ },
35
+ },
36
+ required: ["row", "id"],
37
+ },
38
+ },
39
+ type: "TRIGGER",
40
+ }
@@ -0,0 +1,36 @@
1
+ exports.definition = {
2
+ name: "Webhook",
3
+ event: "web:trigger",
4
+ icon: "Send",
5
+ tagline: "Webhook endpoint is hit",
6
+ description: "Trigger an automation when a HTTP POST webhook is hit",
7
+ stepId: "WEBHOOK",
8
+ inputs: {},
9
+ schema: {
10
+ inputs: {
11
+ properties: {
12
+ schemaUrl: {
13
+ type: "string",
14
+ customType: "webhookUrl",
15
+ title: "Schema URL",
16
+ },
17
+ triggerUrl: {
18
+ type: "string",
19
+ customType: "webhookUrl",
20
+ title: "Trigger URL",
21
+ },
22
+ },
23
+ required: ["schemaUrl", "triggerUrl"],
24
+ },
25
+ outputs: {
26
+ properties: {
27
+ body: {
28
+ type: "object",
29
+ description: "Body of the request which hit the webhook",
30
+ },
31
+ },
32
+ required: ["body"],
33
+ },
34
+ },
35
+ type: "TRIGGER",
36
+ }