@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
@@ -2,20 +2,24 @@ const { Client, utils } = require("@budibase/auth/redis")
2
2
  const { getGlobalIDFromUserMetadataID } = require("../db/utils")
3
3
 
4
4
  const APP_DEV_LOCK_SECONDS = 600
5
- let devAppClient, debounceClient
5
+ const AUTOMATION_TEST_FLAG_SECONDS = 60
6
+ let devAppClient, debounceClient, flagClient
6
7
 
7
8
  // we init this as we want to keep the connection open all the time
8
9
  // reduces the performance hit
9
10
  exports.init = async () => {
10
11
  devAppClient = new Client(utils.Databases.DEV_LOCKS)
11
12
  debounceClient = new Client(utils.Databases.DEBOUNCE)
13
+ flagClient = new Client(utils.Databases.FLAGS)
12
14
  await devAppClient.init()
13
15
  await debounceClient.init()
16
+ await flagClient.init()
14
17
  }
15
18
 
16
19
  exports.shutdown = async () => {
17
20
  if (devAppClient) await devAppClient.finish()
18
21
  if (debounceClient) await debounceClient.finish()
22
+ if (flagClient) await flagClient.finish()
19
23
  }
20
24
 
21
25
  exports.doesUserHaveLock = async (devAppId, user) => {
@@ -67,3 +71,16 @@ exports.checkDebounce = async id => {
67
71
  exports.setDebounce = async (id, seconds) => {
68
72
  await debounceClient.store(id, "debouncing", seconds)
69
73
  }
74
+
75
+ exports.setTestFlag = async id => {
76
+ await flagClient.store(id, { testing: true }, AUTOMATION_TEST_FLAG_SECONDS)
77
+ }
78
+
79
+ exports.checkTestFlag = async id => {
80
+ const flag = await flagClient.get(id)
81
+ return !!(flag && flag.testing)
82
+ }
83
+
84
+ exports.clearTestFlag = async id => {
85
+ await devAppClient.delete(id)
86
+ }
@@ -185,10 +185,16 @@ exports.inputProcessing = (user = {}, table, row) => {
185
185
  * @param {object} ctx the request which is looking for enriched rows.
186
186
  * @param {object} table the table from which these rows came from originally, this is used to determine
187
187
  * the schema of the rows and then enrich.
188
- * @param {object[]} rows the rows which are to be enriched.
189
- * @returns {object[]} the enriched rows will be returned.
188
+ * @param {object[]|object} rows the rows which are to be enriched.
189
+ * @param {object} opts used to set some options for the output, such as disabling relationship squashing.
190
+ * @returns {object[]|object} the enriched rows will be returned.
190
191
  */
191
- exports.outputProcessing = async (ctx, table, rows) => {
192
+ exports.outputProcessing = async (
193
+ ctx,
194
+ table,
195
+ rows,
196
+ opts = { squash: true }
197
+ ) => {
192
198
  const appId = ctx.appId
193
199
  let wasArray = true
194
200
  if (!(rows instanceof Array)) {
@@ -214,6 +220,12 @@ exports.outputProcessing = async (ctx, table, rows) => {
214
220
  }
215
221
  }
216
222
  }
217
- enriched = await linkRows.squashLinksToPrimaryDisplay(appId, table, enriched)
223
+ if (opts.squash) {
224
+ enriched = await linkRows.squashLinksToPrimaryDisplay(
225
+ appId,
226
+ table,
227
+ enriched
228
+ )
229
+ }
218
230
  return wasArray ? enriched : enriched[0]
219
231
  }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- let filter = require("./steps/filter");
3
- let delay = require("./steps/delay");
4
- let BUILTIN_LOGIC = {
5
- DELAY: delay.run,
6
- FILTER: filter.run,
7
- };
8
- let BUILTIN_DEFINITIONS = {
9
- DELAY: delay.definition,
10
- FILTER: filter.definition,
11
- };
12
- module.exports.getLogic = function (logicName) {
13
- if (BUILTIN_LOGIC[logicName] != null) {
14
- return BUILTIN_LOGIC[logicName];
15
- }
16
- };
17
- module.exports.BUILTIN_DEFINITIONS = BUILTIN_DEFINITIONS;
@@ -1,85 +0,0 @@
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
- module.exports.definition = {
12
- description: "Send an email using SendGrid",
13
- tagline: "Send email to {{inputs.to}}",
14
- icon: "ri-mail-open-line",
15
- name: "Send Email (SendGrid)",
16
- type: "ACTION",
17
- stepId: "SEND_EMAIL",
18
- inputs: {},
19
- schema: {
20
- inputs: {
21
- properties: {
22
- apiKey: {
23
- type: "string",
24
- title: "SendGrid API key",
25
- },
26
- to: {
27
- type: "string",
28
- title: "Send To",
29
- },
30
- from: {
31
- type: "string",
32
- title: "Send From",
33
- },
34
- subject: {
35
- type: "string",
36
- title: "Email Subject",
37
- },
38
- contents: {
39
- type: "string",
40
- title: "Email Contents",
41
- },
42
- },
43
- required: ["to", "from", "subject", "contents"],
44
- },
45
- outputs: {
46
- properties: {
47
- success: {
48
- type: "boolean",
49
- description: "Whether the email was sent",
50
- },
51
- response: {
52
- type: "object",
53
- description: "A response from the email client, this may be an error",
54
- },
55
- },
56
- required: ["success"],
57
- },
58
- },
59
- };
60
- module.exports.run = function ({ inputs }) {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- const sgMail = require("@sendgrid/mail");
63
- sgMail.setApiKey(inputs.apiKey);
64
- const msg = {
65
- to: inputs.to,
66
- from: inputs.from,
67
- subject: inputs.subject,
68
- text: inputs.contents ? inputs.contents : "Empty",
69
- };
70
- try {
71
- let response = yield sgMail.send(msg);
72
- return {
73
- success: true,
74
- response,
75
- };
76
- }
77
- catch (err) {
78
- console.error(err);
79
- return {
80
- success: false,
81
- response: err,
82
- };
83
- }
84
- });
85
- };
@@ -1,20 +0,0 @@
1
- let filter = require("./steps/filter")
2
- let delay = require("./steps/delay")
3
-
4
- let BUILTIN_LOGIC = {
5
- DELAY: delay.run,
6
- FILTER: filter.run,
7
- }
8
-
9
- let BUILTIN_DEFINITIONS = {
10
- DELAY: delay.definition,
11
- FILTER: filter.definition,
12
- }
13
-
14
- module.exports.getLogic = function (logicName) {
15
- if (BUILTIN_LOGIC[logicName] != null) {
16
- return BUILTIN_LOGIC[logicName]
17
- }
18
- }
19
-
20
- module.exports.BUILTIN_DEFINITIONS = BUILTIN_DEFINITIONS
@@ -1,74 +0,0 @@
1
- module.exports.definition = {
2
- description: "Send an email using SendGrid",
3
- tagline: "Send email to {{inputs.to}}",
4
- icon: "ri-mail-open-line",
5
- name: "Send Email (SendGrid)",
6
- type: "ACTION",
7
- stepId: "SEND_EMAIL",
8
- inputs: {},
9
- schema: {
10
- inputs: {
11
- properties: {
12
- apiKey: {
13
- type: "string",
14
- title: "SendGrid API key",
15
- },
16
- to: {
17
- type: "string",
18
- title: "Send To",
19
- },
20
- from: {
21
- type: "string",
22
- title: "Send From",
23
- },
24
- subject: {
25
- type: "string",
26
- title: "Email Subject",
27
- },
28
- contents: {
29
- type: "string",
30
- title: "Email Contents",
31
- },
32
- },
33
- required: ["to", "from", "subject", "contents"],
34
- },
35
- outputs: {
36
- properties: {
37
- success: {
38
- type: "boolean",
39
- description: "Whether the email was sent",
40
- },
41
- response: {
42
- type: "object",
43
- description: "A response from the email client, this may be an error",
44
- },
45
- },
46
- required: ["success"],
47
- },
48
- },
49
- }
50
-
51
- module.exports.run = async function ({ inputs }) {
52
- const sgMail = require("@sendgrid/mail")
53
- sgMail.setApiKey(inputs.apiKey)
54
- const msg = {
55
- to: inputs.to,
56
- from: inputs.from,
57
- subject: inputs.subject,
58
- text: inputs.contents ? inputs.contents : "Empty",
59
- }
60
-
61
- try {
62
- let response = await sgMail.send(msg)
63
- return {
64
- success: true,
65
- response,
66
- }
67
- } catch (err) {
68
- console.error(err)
69
- return {
70
- success: false,
71
- response: err,
72
- }
73
- }
74
- }
@@ -1,36 +0,0 @@
1
- const setup = require("./utilities")
2
-
3
- jest.mock("@sendgrid/mail")
4
-
5
- describe("test the send email action", () => {
6
- let inputs
7
- let config = setup.getConfig()
8
-
9
- beforeEach(async () => {
10
- await config.init()
11
- inputs = {
12
- to: "me@test.com",
13
- from: "budibase@test.com",
14
- subject: "Testing",
15
- text: "Email contents",
16
- }
17
- })
18
-
19
- afterAll(setup.afterAll)
20
-
21
- it("should be able to run the action", async () => {
22
- const res = await setup.runStep(setup.actions.SEND_EMAIL.stepId, inputs)
23
- expect(res.success).toEqual(true)
24
- // the mocked module throws back the input
25
- expect(res.response.to).toEqual("me@test.com")
26
- })
27
-
28
- it("should return an error if input an invalid email address", async () => {
29
- const res = await setup.runStep(setup.actions.SEND_EMAIL.stepId, {
30
- ...inputs,
31
- to: "invalid@test.com",
32
- })
33
- expect(res.success).toEqual(false)
34
- })
35
-
36
- })