@budibase/server 2.2.8 → 2.2.10-alpha.0

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 (455) hide show
  1. package/__mocks__/aws-sdk.ts +19 -0
  2. package/__mocks__/node-fetch.ts +78 -0
  3. package/builder/assets/{index.2991e0c4.js → index.a0477c30.js} +363 -360
  4. package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +5171 -5135
  7. package/coverage/coverage-final.json +265 -262
  8. package/coverage/lcov-report/index.html +218 -218
  9. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +7 -7
  10. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  11. package/coverage/lcov-report/src/api/controllers/application.ts.html +260 -182
  12. package/coverage/lcov-report/src/api/controllers/auth.ts.html +11 -11
  13. package/coverage/lcov-report/src/api/controllers/automation.ts.html +51 -51
  14. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  15. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +91 -79
  16. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  17. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +30 -30
  18. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +17 -14
  19. package/coverage/lcov-report/src/api/controllers/deploy/index.html +19 -19
  20. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +141 -195
  21. package/coverage/lcov-report/src/api/controllers/dev.ts.html +18 -18
  22. package/coverage/lcov-report/src/api/controllers/index.html +51 -51
  23. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  24. package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
  25. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  26. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  27. package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
  28. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +19 -19
  29. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +63 -63
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  31. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  32. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +55 -55
  33. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  34. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  35. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  36. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +67 -16
  37. package/coverage/lcov-report/src/api/controllers/public/index.html +15 -15
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  45. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +6 -6
  46. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +10 -10
  47. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +9 -9
  48. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +11 -11
  49. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +6 -6
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  51. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +8 -8
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +8 -8
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +10 -10
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/index.html +19 -19
  60. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +60 -60
  61. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  62. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  63. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  64. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +12 -15
  65. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +20 -20
  66. package/coverage/lcov-report/src/api/controllers/row/index.html +1 -1
  67. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +14 -14
  68. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +54 -51
  69. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +9 -9
  70. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +21 -12
  71. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +17 -14
  72. package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
  73. package/coverage/lcov-report/src/api/controllers/script.ts.html +18 -18
  74. package/coverage/lcov-report/src/api/controllers/static/index.html +11 -11
  75. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +32 -44
  76. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +10 -10
  77. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +14 -14
  78. package/coverage/lcov-report/src/api/controllers/table/index.html +19 -19
  79. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +14 -14
  80. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +17 -17
  81. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +51 -51
  82. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  83. package/coverage/lcov-report/src/api/controllers/user.ts.html +119 -119
  84. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +4 -4
  85. package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
  86. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +47 -47
  87. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
  88. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +33 -33
  89. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +14 -14
  90. package/coverage/lcov-report/src/api/index.html +1 -1
  91. package/coverage/lcov-report/src/api/index.ts.html +33 -33
  92. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  93. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  94. package/coverage/lcov-report/src/api/routes/application.ts.html +44 -11
  95. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  96. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  97. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  98. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  99. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  100. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  101. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -11
  102. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  103. package/coverage/lcov-report/src/api/routes/index.html +7 -7
  104. package/coverage/lcov-report/src/api/routes/index.ts.html +40 -37
  105. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  106. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  107. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  108. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  109. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  110. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  111. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +146 -14
  112. package/coverage/lcov-report/src/api/routes/public/index.html +7 -7
  113. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  114. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  115. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  116. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  117. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  118. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  119. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  120. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  121. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  122. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  123. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  125. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  126. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  127. package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
  128. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  129. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  130. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  131. package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
  132. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +15 -15
  134. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  135. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +24 -24
  136. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  137. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
  139. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  140. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  141. package/coverage/lcov-report/src/app.ts.html +32 -32
  142. package/coverage/lcov-report/src/automations/actions.ts.html +25 -25
  143. package/coverage/lcov-report/src/automations/automationUtils.ts.html +91 -19
  144. package/coverage/lcov-report/src/automations/bullboard.ts.html +11 -11
  145. package/coverage/lcov-report/src/automations/index.html +19 -19
  146. package/coverage/lcov-report/src/automations/index.ts.html +13 -13
  147. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  148. package/coverage/lcov-report/src/automations/logging/index.ts.html +11 -11
  149. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  150. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  151. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  152. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  153. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  154. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  155. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  156. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  157. package/coverage/lcov-report/src/automations/steps/index.html +83 -83
  158. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  159. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  160. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +14 -14
  161. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +17 -17
  162. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  163. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +18 -18
  164. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  165. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  166. package/coverage/lcov-report/src/automations/steps/utils.ts.html +16 -16
  167. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  168. package/coverage/lcov-report/src/automations/tests/utilities/index.html +5 -5
  169. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +26 -26
  170. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  171. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  172. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  173. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  175. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  176. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  177. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  178. package/coverage/lcov-report/src/automations/triggers.ts.html +21 -21
  179. package/coverage/lcov-report/src/automations/utils.ts.html +56 -56
  180. package/coverage/lcov-report/src/constants/index.html +1 -1
  181. package/coverage/lcov-report/src/constants/index.ts.html +92 -92
  182. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  183. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  184. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +23 -23
  185. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  186. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  187. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  188. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  189. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  190. package/coverage/lcov-report/src/db/dynamoClient.ts.html +16 -16
  191. package/coverage/lcov-report/src/db/inMemoryView.ts.html +5 -5
  192. package/coverage/lcov-report/src/db/index.html +19 -19
  193. package/coverage/lcov-report/src/db/index.ts.html +9 -9
  194. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +8 -8
  195. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  196. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  197. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +15 -15
  198. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +12 -12
  199. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  200. package/coverage/lcov-report/src/db/utils.ts.html +80 -80
  201. package/coverage/lcov-report/src/definitions/automations.ts.html +4 -4
  202. package/coverage/lcov-report/src/definitions/datasource.ts.html +4 -4
  203. package/coverage/lcov-report/src/definitions/index.html +1 -1
  204. package/coverage/lcov-report/src/environment.ts.html +40 -28
  205. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
  206. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
  207. package/coverage/lcov-report/src/events/index.html +1 -1
  208. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  209. package/coverage/lcov-report/src/events/utils.ts.html +3 -3
  210. package/coverage/lcov-report/src/index.html +25 -25
  211. package/coverage/lcov-report/src/index.ts.html +1 -1
  212. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  213. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  214. package/coverage/lcov-report/src/integrations/base/index.html +20 -20
  215. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  216. package/coverage/lcov-report/src/integrations/base/sql.ts.html +173 -143
  217. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +10 -10
  218. package/coverage/lcov-report/src/integrations/base/utils.ts.html +3 -3
  219. package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
  220. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
  221. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  223. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +12 -12
  224. package/coverage/lcov-report/src/integrations/index.html +5 -5
  225. package/coverage/lcov-report/src/integrations/index.ts.html +35 -47
  226. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  227. package/coverage/lcov-report/src/integrations/mongodb.ts.html +5 -5
  228. package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
  229. package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
  230. package/coverage/lcov-report/src/integrations/postgres.ts.html +42 -42
  231. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  232. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +13 -13
  233. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  234. package/coverage/lcov-report/src/integrations/rest.ts.html +16 -16
  235. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  236. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  237. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  238. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  239. package/coverage/lcov-report/src/integrations/utils.ts.html +36 -36
  240. package/coverage/lcov-report/src/middleware/appInfo.ts.html +7 -7
  241. package/coverage/lcov-report/src/middleware/authorized.ts.html +28 -28
  242. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  243. package/coverage/lcov-report/src/middleware/currentapp.ts.html +39 -39
  244. package/coverage/lcov-report/src/middleware/index.html +1 -1
  245. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  246. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  247. package/coverage/lcov-report/src/middleware/resourceId.ts.html +22 -22
  248. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  249. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  250. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +13 -10
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  264. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  265. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  266. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  267. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  268. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  270. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  273. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  275. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  276. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  277. package/coverage/lcov-report/src/migrations/index.html +1 -1
  278. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  279. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  280. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  281. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  282. package/coverage/lcov-report/src/sdk/app/applications/index.html +15 -15
  283. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  284. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  285. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  286. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  287. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  288. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +6 -6
  289. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  290. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
  291. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +42 -54
  292. package/coverage/lcov-report/src/sdk/app/backups/index.html +30 -30
  293. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  294. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  295. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
  297. package/coverage/lcov-report/src/sdk/index.html +1 -1
  298. package/coverage/lcov-report/src/sdk/index.ts.html +8 -8
  299. package/coverage/lcov-report/src/sdk/users/index.html +5 -5
  300. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  301. package/coverage/lcov-report/src/sdk/users/utils.ts.html +34 -34
  302. package/coverage/lcov-report/src/startup.ts.html +42 -42
  303. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +182 -125
  304. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  305. package/coverage/lcov-report/src/tests/utilities/index.html +15 -15
  306. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  307. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +30 -30
  308. package/coverage/lcov-report/src/threads/automation.ts.html +32 -101
  309. package/coverage/lcov-report/src/threads/index.html +19 -19
  310. package/coverage/lcov-report/src/threads/index.ts.html +25 -25
  311. package/coverage/lcov-report/src/threads/query.ts.html +71 -71
  312. package/coverage/lcov-report/src/threads/utils.ts.html +18 -18
  313. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  314. package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
  315. package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
  316. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  317. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  318. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
  319. package/coverage/lcov-report/src/utilities/fileSystem/index.html +79 -19
  320. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  321. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +280 -0
  322. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  323. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  324. package/coverage/lcov-report/src/utilities/global.ts.html +43 -43
  325. package/coverage/lcov-report/src/utilities/index.html +48 -63
  326. package/coverage/lcov-report/src/utilities/index.ts.html +36 -168
  327. package/coverage/lcov-report/src/utilities/redis.ts.html +32 -32
  328. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  329. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  330. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +28 -28
  331. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +60 -33
  332. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  333. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
  334. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +32 -32
  335. package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
  336. package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
  337. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  338. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
  339. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  340. package/coverage/lcov-report/src/utilities/users.ts.html +6 -6
  341. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +56 -56
  342. package/coverage/lcov-report/src/watch.ts.html +9 -9
  343. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  344. package/coverage/lcov.info +7423 -7352
  345. package/dist/api/controllers/application.js +47 -35
  346. package/dist/api/controllers/cloud.js +6 -2
  347. package/dist/api/controllers/deploy/index.js +43 -60
  348. package/dist/api/controllers/plugin/index.js +6 -6
  349. package/dist/api/controllers/public/applications.js +22 -1
  350. package/dist/api/controllers/row/ExternalRequest.js +0 -1
  351. package/dist/api/controllers/row/internal.js +11 -11
  352. package/dist/api/controllers/row/staticFormula.js +1 -1
  353. package/dist/api/controllers/static/index.js +8 -11
  354. package/dist/api/routes/application.js +3 -0
  355. package/dist/api/routes/deploy.js +1 -2
  356. package/dist/api/routes/public/applications.js +37 -0
  357. package/dist/api/routes/public/middleware/mapper.js +3 -0
  358. package/dist/automations/automationUtils.js +26 -1
  359. package/dist/environment.js +5 -1
  360. package/dist/integrations/base/sql.js +9 -5
  361. package/dist/integrations/googlesheets.js +1 -1
  362. package/dist/integrations/index.js +1 -2
  363. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  364. package/dist/package.json +9 -7
  365. package/dist/sdk/app/backups/imports.js +3 -7
  366. package/dist/threads/automation.js +2 -26
  367. package/dist/tsconfig.build.tsbuildinfo +1 -1
  368. package/dist/utilities/fileSystem/app.js +97 -0
  369. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  370. package/dist/utilities/fileSystem/filesystem.js +182 -0
  371. package/dist/utilities/fileSystem/index.js +18 -342
  372. package/dist/utilities/fileSystem/plugin.js +63 -0
  373. package/dist/utilities/fileSystem/template.js +44 -0
  374. package/dist/utilities/index.js +1 -44
  375. package/dist/utilities/rowProcessor/index.js +12 -4
  376. package/package.json +10 -8
  377. package/specs/openapi.json +84 -0
  378. package/specs/openapi.yaml +53 -0
  379. package/specs/resources/application.js +19 -0
  380. package/src/api/controllers/application.ts +62 -36
  381. package/src/api/controllers/auth.ts +2 -2
  382. package/src/api/controllers/cloud.ts +10 -6
  383. package/src/api/controllers/deploy/Deployment.ts +1 -0
  384. package/src/api/controllers/deploy/index.ts +40 -58
  385. package/src/api/controllers/plugin/index.ts +14 -9
  386. package/src/api/controllers/public/applications.ts +17 -0
  387. package/src/api/controllers/row/ExternalRequest.ts +0 -1
  388. package/src/api/controllers/row/internal.ts +23 -22
  389. package/src/api/controllers/row/staticFormula.ts +5 -2
  390. package/src/api/controllers/row/utils.ts +2 -1
  391. package/src/api/controllers/static/index.ts +6 -10
  392. package/src/api/routes/application.ts +11 -0
  393. package/src/api/routes/deploy.ts +0 -1
  394. package/src/api/routes/index.ts +4 -3
  395. package/src/api/routes/public/applications.ts +44 -0
  396. package/src/api/routes/public/middleware/mapper.ts +4 -0
  397. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  398. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  399. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  400. package/src/api/routes/tests/cloud.spec.ts +65 -0
  401. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  402. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  403. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  404. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
  405. package/src/api/routes/tests/permissions.spec.js +1 -1
  406. package/src/api/routes/tests/plugin.spec.ts +179 -0
  407. package/src/api/routes/tests/routing.spec.js +1 -2
  408. package/src/api/routes/tests/row.spec.js +4 -2
  409. package/src/api/routes/tests/static.spec.js +2 -17
  410. package/src/api/routes/tests/table.spec.js +8 -2
  411. package/src/api/routes/tests/user.spec.js +86 -0
  412. package/src/api/routes/tests/utilities/index.ts +2 -2
  413. package/src/api/routes/tests/webhook.spec.js +1 -1
  414. package/src/automations/automationUtils.ts +24 -0
  415. package/src/automations/tests/bash.spec.js +34 -0
  416. package/src/automations/tests/discord.spec.js +27 -0
  417. package/src/automations/tests/executeQuery.spec.js +49 -0
  418. package/src/automations/tests/executeScript.spec.js +48 -0
  419. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  420. package/src/automations/tests/serverLog.spec.js +22 -0
  421. package/src/automations/tests/utilities/index.ts +2 -2
  422. package/src/automations/tests/zapier.spec.js +27 -0
  423. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  424. package/src/definitions/openapi.ts +10 -0
  425. package/src/environment.ts +5 -1
  426. package/src/integrations/base/sql.ts +15 -5
  427. package/src/integrations/googlesheets.ts +1 -1
  428. package/src/integrations/index.ts +1 -5
  429. package/src/integrations/tests/sql.spec.ts +92 -0
  430. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  431. package/src/sdk/app/backups/imports.ts +3 -7
  432. package/src/tests/jestSetup.ts +4 -1
  433. package/src/tests/utilities/TestConfiguration.ts +23 -4
  434. package/src/threads/automation.ts +2 -25
  435. package/src/utilities/fileSystem/app.ts +86 -0
  436. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  437. package/src/utilities/fileSystem/filesystem.ts +170 -0
  438. package/src/utilities/fileSystem/index.ts +5 -348
  439. package/src/utilities/fileSystem/plugin.ts +65 -0
  440. package/src/utilities/fileSystem/template.ts +36 -0
  441. package/src/utilities/index.ts +1 -45
  442. package/src/utilities/rowProcessor/index.ts +17 -8
  443. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  444. package/tsconfig.build.json +2 -0
  445. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  446. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  447. package/dist/api/routes/tests/utilities/index.js +0 -131
  448. package/dist/automations/tests/utilities/index.js +0 -81
  449. package/dist/tests/utilities/TestConfiguration.js +0 -562
  450. package/dist/tests/utilities/controllers.js +0 -40
  451. package/dist/tests/utilities/structures.js +0 -168
  452. package/dist/utilities/plugins.js +0 -26
  453. package/src/api/routes/tests/deployment.spec.ts +0 -25
  454. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  455. package/src/utilities/plugins.ts +0 -22
@@ -90,4 +90,90 @@ describe("/users", () => {
90
90
  expect(res.body.tableId).toBeDefined()
91
91
  })
92
92
  })
93
+ describe("setFlag", () => {
94
+ it("should throw an error if a flag is not provided", async () => {
95
+ await config.createUser()
96
+ const res = await request
97
+ .post(`/api/users/flags`)
98
+ .set(config.defaultHeaders())
99
+ .send({ value: "test" })
100
+ .expect(400)
101
+ .expect("Content-Type", /json/)
102
+ expect(res.body.message).toEqual("Must supply a 'flag' field in request body.")
103
+
104
+ })
105
+
106
+ it("should be able to set a flag on the user", async () => {
107
+ await config.createUser()
108
+ const res = await request
109
+ .post(`/api/users/flags`)
110
+ .set(config.defaultHeaders())
111
+ .send({ value: "test", flag: "test" })
112
+ .expect(200)
113
+ .expect("Content-Type", /json/)
114
+ expect(res.body.message).toEqual("Flag set successfully")
115
+ })
116
+ })
117
+
118
+ describe("getFlags", () => {
119
+ it("should get flags for a specific user", async () => {
120
+ let flagData = { value: "test", flag: "test" }
121
+ await config.createUser()
122
+ await request
123
+ .post(`/api/users/flags`)
124
+ .set(config.defaultHeaders())
125
+ .send(flagData)
126
+ .expect(200)
127
+ .expect("Content-Type", /json/)
128
+
129
+ const res = await request
130
+ .get(`/api/users/flags`)
131
+ .set(config.defaultHeaders())
132
+ .expect(200)
133
+ .expect("Content-Type", /json/)
134
+ expect(res.body[flagData.value]).toEqual(flagData.flag)
135
+ })
136
+ })
137
+
138
+ describe("setFlag", () => {
139
+ it("should throw an error if a flag is not provided", async () => {
140
+ await config.createUser()
141
+ const res = await request
142
+ .post(`/api/users/flags`)
143
+ .set(config.defaultHeaders())
144
+ .send({ value: "test" })
145
+ .expect(400)
146
+ .expect("Content-Type", /json/)
147
+ expect(res.body.message).toEqual("Must supply a 'flag' field in request body.")
148
+
149
+ })
150
+
151
+ it("should be able to set a flag on the user", async () => {
152
+ await config.createUser()
153
+ const res = await request
154
+ .post(`/api/users/flags`)
155
+ .set(config.defaultHeaders())
156
+ .send({ value: "test", flag: "test" })
157
+ .expect(200)
158
+ .expect("Content-Type", /json/)
159
+ expect(res.body.message).toEqual("Flag set successfully")
160
+ })
161
+ })
162
+
163
+ describe("syncUser", () => {
164
+ it("should sync the user", async () => {
165
+ let user = await config.createUser()
166
+ await config.createApp('New App')
167
+ let res = await request
168
+ .post(`/api/users/metadata/sync/${user._id}`)
169
+ .set(config.defaultHeaders())
170
+ .expect(200)
171
+ .expect("Content-Type", /json/)
172
+ expect(res.body.message).toEqual('User synced.')
173
+ })
174
+ })
175
+
176
+
177
+
178
+
93
179
  })
@@ -63,14 +63,14 @@ export function afterAll() {
63
63
 
64
64
  export function getRequest() {
65
65
  if (!request) {
66
- exports.beforeAll()
66
+ beforeAll()
67
67
  }
68
68
  return request
69
69
  }
70
70
 
71
71
  export function getConfig() {
72
72
  if (!config) {
73
- exports.beforeAll()
73
+ beforeAll()
74
74
  }
75
75
  return config
76
76
  }
@@ -113,7 +113,7 @@ describe("/webhooks", () => {
113
113
  describe("trigger", () => {
114
114
  it("should allow triggering from public", async () => {
115
115
  // replicate changes before checking webhook
116
- await config.deploy()
116
+ await config.publish()
117
117
 
118
118
  const res = await request
119
119
  .post(`/api/webhooks/trigger/${config.prodAppId}/${webhook._id}`)
@@ -5,6 +5,7 @@ import {
5
5
  } from "@budibase/string-templates"
6
6
  import sdk from "../sdk"
7
7
  import { Row } from "@budibase/types"
8
+ import { LoopStep, LoopStepType, LoopInput } from "../definitions/automations"
8
9
 
9
10
  /**
10
11
  * When values are input to the system generally they will be of type string as this is required for template strings.
@@ -123,3 +124,26 @@ export function stringSplit(value: string | string[]) {
123
124
  }
124
125
  return value
125
126
  }
127
+
128
+ export function typecastForLooping(loopStep: LoopStep, input: LoopInput) {
129
+ if (!input || !input.binding) {
130
+ return null
131
+ }
132
+ try {
133
+ switch (loopStep.inputs.option) {
134
+ case LoopStepType.ARRAY:
135
+ if (typeof input.binding === "string") {
136
+ return JSON.parse(input.binding)
137
+ }
138
+ break
139
+ case LoopStepType.STRING:
140
+ if (Array.isArray(input.binding)) {
141
+ return input.binding.join(",")
142
+ }
143
+ break
144
+ }
145
+ } catch (err) {
146
+ throw new Error("Unable to cast to correct type")
147
+ }
148
+ return input.binding
149
+ }
@@ -0,0 +1,34 @@
1
+ const setup = require("./utilities")
2
+
3
+ describe("test the bash action", () => {
4
+ let config = setup.getConfig()
5
+
6
+ beforeEach(async () => {
7
+ await config.init()
8
+ })
9
+ afterAll(setup.afterAll)
10
+
11
+ it("should be able to execute a script", async () => {
12
+
13
+ let res = await setup.runStep("EXECUTE_BASH",
14
+ inputs = {
15
+ code: "echo 'test'"
16
+ }
17
+
18
+ )
19
+ expect(res.stdout).toEqual("test\n")
20
+ expect(res.success).toEqual(true)
21
+ })
22
+
23
+ it("should handle a null value", async () => {
24
+
25
+ let res = await setup.runStep("EXECUTE_BASH",
26
+ inputs = {
27
+ code: null
28
+ }
29
+
30
+
31
+ )
32
+ expect(res.stdout).toEqual("Budibase bash automation failed: Invalid inputs")
33
+ })
34
+ })
@@ -0,0 +1,27 @@
1
+ const setup = require("./utilities")
2
+ const fetch = require("node-fetch")
3
+
4
+ jest.mock("node-fetch")
5
+
6
+ describe("test the outgoing webhook action", () => {
7
+ let inputs
8
+ let config = setup.getConfig()
9
+
10
+ beforeEach(async () => {
11
+ await config.init()
12
+ inputs = {
13
+ username: "joe_bloggs",
14
+ url: "http://www.test.com",
15
+ }
16
+ })
17
+
18
+ afterAll(setup.afterAll)
19
+
20
+ it("should be able to run the action", async () => {
21
+ const res = await setup.runStep(setup.actions.discord.stepId, inputs)
22
+ expect(res.response.url).toEqual("http://www.test.com")
23
+ expect(res.response.method).toEqual("post")
24
+ expect(res.success).toEqual(true)
25
+ })
26
+
27
+ })
@@ -0,0 +1,49 @@
1
+ const setup = require("./utilities")
2
+
3
+ describe("test the execute query action", () => {
4
+ let datasource
5
+ let config = setup.getConfig()
6
+
7
+ beforeEach(async () => {
8
+ await config.init()
9
+
10
+ await config.createDatasource()
11
+ query = await config.createQuery()
12
+
13
+ })
14
+
15
+ afterAll(setup.afterAll)
16
+
17
+ it("should be able to execute a query", async () => {
18
+ let res = await setup.runStep(setup.actions.EXECUTE_QUERY.stepId,
19
+ inputs = {
20
+ query: { queryId: query._id }
21
+ }
22
+ )
23
+ expect(res.response).toEqual([{ a: 'string', b: 1 }])
24
+ expect(res.success).toEqual(true)
25
+ })
26
+
27
+ it("should handle a null query value", async () => {
28
+ let res = await setup.runStep(setup.actions.EXECUTE_QUERY.stepId,
29
+ inputs = {
30
+ query: null
31
+ }
32
+ )
33
+ expect(res.response.message).toEqual("Invalid inputs")
34
+ expect(res.success).toEqual(false)
35
+ })
36
+
37
+
38
+ it("should handle an error executing a query", async () => {
39
+ let res = await setup.runStep(setup.actions.EXECUTE_QUERY.stepId,
40
+ inputs = {
41
+ query: { queryId: "wrong_id" }
42
+ }
43
+ )
44
+ expect(res.response).toEqual('{"status":404,"name":"not_found","message":"missing","reason":"missing"}')
45
+ expect(res.success).toEqual(false)
46
+ })
47
+
48
+
49
+ })
@@ -0,0 +1,48 @@
1
+ const setup = require("./utilities")
2
+
3
+ describe("test the execute script action", () => {
4
+ let config = setup.getConfig()
5
+
6
+ beforeEach(async () => {
7
+ await config.init()
8
+ })
9
+ afterAll(setup.afterAll)
10
+
11
+ it("should be able to execute a script", async () => {
12
+
13
+ let res = await setup.runStep(setup.actions.EXECUTE_SCRIPT.stepId,
14
+ inputs = {
15
+ code: "return 1 + 1"
16
+ }
17
+
18
+ )
19
+ expect(res.value).toEqual(2)
20
+ expect(res.success).toEqual(true)
21
+ })
22
+
23
+ it("should handle a null value", async () => {
24
+
25
+ let res = await setup.runStep(setup.actions.EXECUTE_SCRIPT.stepId,
26
+ inputs = {
27
+ code: null
28
+ }
29
+
30
+
31
+ )
32
+ expect(res.response.message).toEqual("Invalid inputs")
33
+ expect(res.success).toEqual(false)
34
+ })
35
+
36
+ it("should be able to handle an error gracefully", async () => {
37
+
38
+ let res = await setup.runStep(setup.actions.EXECUTE_SCRIPT.stepId,
39
+ inputs = {
40
+ code: "return something.map(x => x.name)"
41
+ }
42
+
43
+ )
44
+ expect(res.response).toEqual("ReferenceError: something is not defined")
45
+ expect(res.success).toEqual(false)
46
+ })
47
+
48
+ })
@@ -0,0 +1,71 @@
1
+
2
+ function generateResponse(to, from) {
3
+ return {
4
+ "success": true,
5
+ "response": {
6
+ "accepted": [
7
+ to
8
+ ],
9
+ "envelope": {
10
+ "from": from,
11
+ "to": [
12
+ to
13
+ ]
14
+ },
15
+ "message": `Email sent to ${to}.`
16
+ }
17
+
18
+ }
19
+ }
20
+
21
+ const mockFetch = jest.fn(() => ({
22
+ headers: {
23
+ raw: () => {
24
+ return { "content-type": ["application/json"] }
25
+ },
26
+ get: () => ["application/json"],
27
+ },
28
+ json: jest.fn(() => response),
29
+ status: 200,
30
+ text: jest.fn(),
31
+ }))
32
+ jest.mock("node-fetch", () => mockFetch)
33
+ const setup = require("./utilities")
34
+
35
+
36
+ describe("test the outgoing webhook action", () => {
37
+ let inputs
38
+ let config = setup.getConfig()
39
+ beforeEach(async () => {
40
+ await config.init()
41
+ })
42
+
43
+ afterAll(setup.afterAll)
44
+
45
+ it("should be able to run the action", async () => {
46
+ inputs = {
47
+ to: "user1@test.com",
48
+ from: "admin@test.com",
49
+ subject: "hello",
50
+ contents: "testing",
51
+ }
52
+ let resp = generateResponse(inputs.to, inputs.from)
53
+ mockFetch.mockImplementationOnce(() => ({
54
+ headers: {
55
+ raw: () => {
56
+ return { "content-type": ["application/json"] }
57
+ },
58
+ get: () => ["application/json"],
59
+ },
60
+ json: jest.fn(() => resp),
61
+ status: 200,
62
+ text: jest.fn(),
63
+ }))
64
+ const res = await setup.runStep(setup.actions.SEND_EMAIL_SMTP.stepId, inputs)
65
+ expect(res.response).toEqual(resp)
66
+ expect(res.success).toEqual(true)
67
+
68
+ })
69
+
70
+
71
+ })
@@ -0,0 +1,22 @@
1
+ const setup = require("./utilities")
2
+
3
+ describe("test the server log action", () => {
4
+ let config = setup.getConfig()
5
+
6
+ beforeEach(async () => {
7
+ await config.init()
8
+ inputs = {
9
+ text: "log message",
10
+ }
11
+ })
12
+ afterAll(setup.afterAll)
13
+
14
+ it("should be able to log the text", async () => {
15
+
16
+ let res = await setup.runStep(setup.actions.SERVER_LOG.stepId,
17
+ inputs
18
+ )
19
+ expect(res.message).toEqual(`App ${config.getAppId()} - ${inputs.text}`)
20
+ expect(res.success).toEqual(true)
21
+ })
22
+ })
@@ -31,7 +31,7 @@ export async function runInProd(fn: any) {
31
31
  }
32
32
  }
33
33
 
34
- export async function runStep(stepId: string, inputs: any) {
34
+ export async function runStep(stepId: string, inputs: any, stepContext?: any) {
35
35
  async function run() {
36
36
  let step = await getAction(stepId)
37
37
  expect(step).toBeDefined()
@@ -39,7 +39,7 @@ export async function runStep(stepId: string, inputs: any) {
39
39
  throw new Error("No step found")
40
40
  }
41
41
  return step({
42
- context: {},
42
+ context: stepContext || {},
43
43
  inputs,
44
44
  appId: config ? config.getAppId() : null,
45
45
  // don't really need an API key, mocked out usage quota, not being tested here
@@ -0,0 +1,27 @@
1
+ const setup = require("./utilities")
2
+ const fetch = require("node-fetch")
3
+
4
+ jest.mock("node-fetch")
5
+
6
+ describe("test the outgoing webhook action", () => {
7
+ let inputs
8
+ let config = setup.getConfig()
9
+
10
+ beforeEach(async () => {
11
+ await config.init()
12
+ inputs = {
13
+ value1: "test",
14
+ url: "http://www.test.com",
15
+ }
16
+ })
17
+
18
+ afterAll(setup.afterAll)
19
+
20
+ it("should be able to run the action", async () => {
21
+ const res = await setup.runStep(setup.actions.zapier.stepId, inputs)
22
+ expect(res.response.url).toEqual("http://www.test.com")
23
+ expect(res.response.method).toEqual("post")
24
+ expect(res.success).toEqual(true)
25
+ })
26
+
27
+ })
@@ -0,0 +1,65 @@
1
+ const automationUtils = require("../automationUtils")
2
+
3
+ describe("automationUtils", () => {
4
+ describe("substituteLoopStep", () => {
5
+ it("should allow multiple loop binding substitutes", () => {
6
+ expect(
7
+ automationUtils.substituteLoopStep(
8
+ `{{ loop.currentItem._id }} {{ loop.currentItem._id }} {{ loop.currentItem._id }}`,
9
+ "step.2"
10
+ )
11
+ ).toBe(
12
+ `{{ step.2.currentItem._id }} {{ step.2.currentItem._id }} {{ step.2.currentItem._id }}`
13
+ )
14
+ })
15
+
16
+ it("should handle not subsituting outside of curly braces", () => {
17
+ expect(
18
+ automationUtils.substituteLoopStep(
19
+ `loop {{ loop.currentItem._id }}loop loop{{ loop.currentItem._id }}loop`,
20
+ "step.2"
21
+ )
22
+ ).toBe(
23
+ `loop {{ step.2.currentItem._id }}loop loop{{ step.2.currentItem._id }}loop`
24
+ )
25
+ })
26
+ })
27
+
28
+ describe("typeCastForLooping", () => {
29
+ it("should parse to correct type", () => {
30
+ expect(
31
+ automationUtils.typecastForLooping(
32
+ { inputs: { option: "Array" } },
33
+ { binding: [1, 2, 3] }
34
+ )
35
+ ).toEqual([1, 2, 3])
36
+ expect(
37
+ automationUtils.typecastForLooping(
38
+ { inputs: { option: "Array" } },
39
+ { binding: "[1, 2, 3]" }
40
+ )
41
+ ).toEqual([1, 2, 3])
42
+ expect(
43
+ automationUtils.typecastForLooping(
44
+ { inputs: { option: "String" } },
45
+ { binding: [1, 2, 3] }
46
+ )
47
+ ).toEqual("1,2,3")
48
+ })
49
+ it("should handle null values", () => {
50
+ // expect it to handle where the binding is null
51
+ expect(
52
+ automationUtils.typecastForLooping(
53
+ { inputs: { option: "Array" } },
54
+ { binding: null }
55
+ )
56
+ ).toEqual(null)
57
+ expect(() =>
58
+ automationUtils.typecastForLooping(
59
+ { inputs: { option: "Array" } },
60
+ { binding: "test" }
61
+ )
62
+ ).toThrow()
63
+ })
64
+ })
65
+ })
@@ -102,6 +102,16 @@ export interface components {
102
102
  lockedBy?: { [key: string]: unknown };
103
103
  };
104
104
  };
105
+ deploymentOutput: {
106
+ data: {
107
+ /** @description The ID of the deployment. */
108
+ _id: string;
109
+ /** @description The status of the deployment. */
110
+ status: "SUCCESS" | "FAILURE";
111
+ /** @description The URL by which the published app is accessed. */
112
+ appUrl?: string;
113
+ }
114
+ };
105
115
  applicationSearch: {
106
116
  data: {
107
117
  /** @description The name of the app. */
@@ -79,7 +79,6 @@ const environment = {
79
79
  // flags
80
80
  ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
81
81
  DISABLE_THREADING: process.env.DISABLE_THREADING,
82
- DISABLE_DEVELOPER_LICENSE: process.env.DISABLE_DEVELOPER_LICENSE,
83
82
  DISABLE_AUTOMATION_LOGS: process.env.DISABLE_AUTOMATION_LOGS,
84
83
  MULTI_TENANCY: process.env.MULTI_TENANCY,
85
84
  ENABLE_ANALYTICS: process.env.ENABLE_ANALYTICS,
@@ -119,6 +118,11 @@ for (let [key, value] of Object.entries(environment)) {
119
118
  // @ts-ignore
120
119
  environment[key] = 0
121
120
  }
121
+ // handle the edge case of "false" to disable an environment variable
122
+ if (value === "false") {
123
+ // @ts-ignore
124
+ environment[key] = 0
125
+ }
122
126
  }
123
127
 
124
128
  export = environment
@@ -313,7 +313,8 @@ class InternalBuilder {
313
313
  addRelationships(
314
314
  query: KnexQuery,
315
315
  fromTable: string,
316
- relationships: RelationshipsJson[] | undefined
316
+ relationships: RelationshipsJson[] | undefined,
317
+ schema: string | undefined
317
318
  ): KnexQuery {
318
319
  if (!relationships) {
319
320
  return query
@@ -337,9 +338,13 @@ class InternalBuilder {
337
338
  }
338
339
  for (let [key, relationships] of Object.entries(tableSets)) {
339
340
  const { toTable, throughTable } = JSON.parse(key)
341
+ const toTableWithSchema = schema ? `${schema}.${toTable}` : toTable
342
+ const throughTableWithSchema = schema
343
+ ? `${schema}.${throughTable}`
344
+ : throughTable
340
345
  if (!throughTable) {
341
346
  // @ts-ignore
342
- query = query.leftJoin(toTable, function () {
347
+ query = query.leftJoin(toTableWithSchema, function () {
343
348
  for (let relationship of relationships) {
344
349
  const from = relationship.from,
345
350
  to = relationship.to
@@ -350,7 +355,7 @@ class InternalBuilder {
350
355
  } else {
351
356
  query = query
352
357
  // @ts-ignore
353
- .leftJoin(throughTable, function () {
358
+ .leftJoin(throughTableWithSchema, function () {
354
359
  for (let relationship of relationships) {
355
360
  const fromPrimary = relationship.fromPrimary
356
361
  const from = relationship.from
@@ -362,7 +367,7 @@ class InternalBuilder {
362
367
  )
363
368
  }
364
369
  })
365
- .leftJoin(toTable, function () {
370
+ .leftJoin(toTableWithSchema, function () {
366
371
  for (let relationship of relationships) {
367
372
  const toPrimary = relationship.toPrimary
368
373
  const to = relationship.to
@@ -456,7 +461,12 @@ class InternalBuilder {
456
461
  preQuery = this.addSorting(preQuery, json)
457
462
  }
458
463
  // handle joins
459
- query = this.addRelationships(preQuery, tableName, relationships)
464
+ query = this.addRelationships(
465
+ preQuery,
466
+ tableName,
467
+ relationships,
468
+ endpoint.schema
469
+ )
460
470
  return this.addFilters(query, filters, { relationship: true })
461
471
  }
462
472
 
@@ -284,7 +284,7 @@ class GoogleSheetsIntegration implements DatasourcePlus {
284
284
  async createTable(name?: string) {
285
285
  try {
286
286
  await this.connect()
287
- return await this.client.addSheet({ title: name })
287
+ return await this.client.addSheet({ title: name, headerValues: ["test"] })
288
288
  } catch (err) {
289
289
  console.error("Error creating new table in google sheets", err)
290
290
  throw err
@@ -98,11 +98,7 @@ export async function getIntegration(integration: string) {
98
98
  for (let plugin of plugins) {
99
99
  if (plugin.name === integration) {
100
100
  // need to use commonJS require due to its dynamic runtime nature
101
- const retrieved: any = await getDatasourcePlugin(
102
- plugin.name,
103
- plugin.jsUrl,
104
- plugin.schema?.hash
105
- )
101
+ const retrieved: any = await getDatasourcePlugin(plugin)
106
102
  if (retrieved.integration) {
107
103
  return retrieved.integration
108
104
  } else {