@budibase/server 2.2.9 → 2.2.10-alpha.1

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 (452) hide show
  1. package/__mocks__/aws-sdk.ts +19 -0
  2. package/__mocks__/node-fetch.ts +78 -0
  3. package/builder/assets/{index.f6d4f2ae.js → index.788a4a4a.js} +364 -361
  4. package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +5015 -4981
  7. package/coverage/coverage-final.json +265 -262
  8. package/coverage/lcov-report/index.html +207 -207
  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 +258 -183
  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 +1 -1
  215. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  216. package/coverage/lcov-report/src/integrations/base/sql.ts.html +14 -14
  217. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
  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 +7160 -7095
  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/googlesheets.js +1 -1
  361. package/dist/integrations/index.js +1 -2
  362. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  363. package/dist/package.json +9 -7
  364. package/dist/sdk/app/backups/imports.js +3 -7
  365. package/dist/threads/automation.js +2 -26
  366. package/dist/tsconfig.build.tsbuildinfo +1 -1
  367. package/dist/utilities/fileSystem/app.js +97 -0
  368. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  369. package/dist/utilities/fileSystem/filesystem.js +182 -0
  370. package/dist/utilities/fileSystem/index.js +18 -342
  371. package/dist/utilities/fileSystem/plugin.js +63 -0
  372. package/dist/utilities/fileSystem/template.js +44 -0
  373. package/dist/utilities/index.js +1 -44
  374. package/dist/utilities/rowProcessor/index.js +12 -4
  375. package/package.json +10 -8
  376. package/specs/openapi.json +84 -0
  377. package/specs/openapi.yaml +53 -0
  378. package/specs/resources/application.js +19 -0
  379. package/src/api/controllers/application.ts +61 -36
  380. package/src/api/controllers/auth.ts +2 -2
  381. package/src/api/controllers/cloud.ts +10 -6
  382. package/src/api/controllers/deploy/Deployment.ts +1 -0
  383. package/src/api/controllers/deploy/index.ts +40 -58
  384. package/src/api/controllers/plugin/index.ts +14 -9
  385. package/src/api/controllers/public/applications.ts +17 -0
  386. package/src/api/controllers/row/ExternalRequest.ts +0 -1
  387. package/src/api/controllers/row/internal.ts +23 -22
  388. package/src/api/controllers/row/staticFormula.ts +5 -2
  389. package/src/api/controllers/row/utils.ts +2 -1
  390. package/src/api/controllers/static/index.ts +6 -10
  391. package/src/api/routes/application.ts +11 -0
  392. package/src/api/routes/deploy.ts +0 -1
  393. package/src/api/routes/index.ts +4 -3
  394. package/src/api/routes/public/applications.ts +44 -0
  395. package/src/api/routes/public/middleware/mapper.ts +4 -0
  396. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  397. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  398. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  399. package/src/api/routes/tests/cloud.spec.ts +65 -0
  400. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  401. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  402. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  403. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
  404. package/src/api/routes/tests/permissions.spec.js +1 -1
  405. package/src/api/routes/tests/plugin.spec.ts +179 -0
  406. package/src/api/routes/tests/routing.spec.js +1 -2
  407. package/src/api/routes/tests/row.spec.js +4 -2
  408. package/src/api/routes/tests/static.spec.js +2 -17
  409. package/src/api/routes/tests/table.spec.js +8 -2
  410. package/src/api/routes/tests/user.spec.js +86 -0
  411. package/src/api/routes/tests/utilities/index.ts +2 -2
  412. package/src/api/routes/tests/webhook.spec.js +1 -1
  413. package/src/automations/automationUtils.ts +24 -0
  414. package/src/automations/tests/bash.spec.js +34 -0
  415. package/src/automations/tests/discord.spec.js +27 -0
  416. package/src/automations/tests/executeQuery.spec.js +49 -0
  417. package/src/automations/tests/executeScript.spec.js +48 -0
  418. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  419. package/src/automations/tests/serverLog.spec.js +22 -0
  420. package/src/automations/tests/utilities/index.ts +2 -2
  421. package/src/automations/tests/zapier.spec.js +27 -0
  422. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  423. package/src/definitions/openapi.ts +10 -0
  424. package/src/environment.ts +5 -1
  425. package/src/integrations/googlesheets.ts +1 -1
  426. package/src/integrations/index.ts +1 -5
  427. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  428. package/src/sdk/app/backups/imports.ts +3 -7
  429. package/src/tests/jestSetup.ts +4 -1
  430. package/src/tests/utilities/TestConfiguration.ts +23 -4
  431. package/src/threads/automation.ts +2 -25
  432. package/src/utilities/fileSystem/app.ts +86 -0
  433. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  434. package/src/utilities/fileSystem/filesystem.ts +170 -0
  435. package/src/utilities/fileSystem/index.ts +5 -348
  436. package/src/utilities/fileSystem/plugin.ts +65 -0
  437. package/src/utilities/fileSystem/template.ts +36 -0
  438. package/src/utilities/index.ts +1 -45
  439. package/src/utilities/rowProcessor/index.ts +17 -8
  440. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  441. package/tsconfig.build.json +2 -0
  442. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  443. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  444. package/dist/api/routes/tests/utilities/index.js +0 -131
  445. package/dist/automations/tests/utilities/index.js +0 -81
  446. package/dist/tests/utilities/TestConfiguration.js +0 -562
  447. package/dist/tests/utilities/controllers.js +0 -40
  448. package/dist/tests/utilities/structures.js +0 -168
  449. package/dist/utilities/plugins.js +0 -26
  450. package/src/api/routes/tests/deployment.spec.ts +0 -25
  451. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  452. 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
@@ -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 {
@@ -5,6 +5,7 @@ import {
5
5
  isGoogleConfig,
6
6
  isOIDCConfig,
7
7
  isSettingsConfig,
8
+ ConfigType,
8
9
  } from "@budibase/types"
9
10
  import env from "./../../../../environment"
10
11
 
@@ -31,15 +32,15 @@ export const backfill = async (
31
32
  await events.email.SMTPCreated(timestamp)
32
33
  }
33
34
  if (isGoogleConfig(config)) {
34
- await events.auth.SSOCreated("google", timestamp)
35
+ await events.auth.SSOCreated(ConfigType.GOOGLE, timestamp)
35
36
  if (config.config.activated) {
36
- await events.auth.SSOActivated("google", timestamp)
37
+ await events.auth.SSOActivated(ConfigType.GOOGLE, timestamp)
37
38
  }
38
39
  }
39
40
  if (isOIDCConfig(config)) {
40
- await events.auth.SSOCreated("oidc", timestamp)
41
+ await events.auth.SSOCreated(ConfigType.OIDC, timestamp)
41
42
  if (config.config.configs[0].activated) {
42
- await events.auth.SSOActivated("oidc", timestamp)
43
+ await events.auth.SSOActivated(ConfigType.OIDC, timestamp)
43
44
  }
44
45
  }
45
46
  if (isSettingsConfig(config)) {
@@ -55,12 +55,8 @@ async function updateAttachmentColumns(prodAppId: string, db: Database) {
55
55
  continue
56
56
  }
57
57
  row[column] = row[column].map((attachment: RowAttachment) => {
58
- // URL looks like: /prod-budi-app-assets/appId/attachments/file.csv
59
- const urlParts = attachment.url.split("/")
60
- // drop the first empty element
61
- urlParts.shift()
62
- // get the prefix
63
- const prefix = urlParts.shift()
58
+ // Key looks like: appId/attachments/file.csv
59
+ const urlParts = attachment.key.split("/")
64
60
  // remove the app ID
65
61
  urlParts.shift()
66
62
  // add new app ID
@@ -69,7 +65,7 @@ async function updateAttachmentColumns(prodAppId: string, db: Database) {
69
65
  return {
70
66
  ...attachment,
71
67
  key,
72
- url: `/${prefix}/${key}`,
68
+ url: "", // calculated on retrieval using key
73
69
  }
74
70
  })
75
71
  }
@@ -19,7 +19,10 @@ import { mocks } from "@budibase/backend-core/tests"
19
19
  const tk = require("timekeeper")
20
20
  tk.freeze(mocks.date.MOCK_DATE)
21
21
 
22
- global.console.log = jest.fn() // console.log are ignored in tests
22
+ if (!process.env.DEBUG) {
23
+ global.console.log = jest.fn() // console.log are ignored in tests
24
+ global.console.warn = jest.fn() // console.warn are ignored in tests
25
+ }
23
26
 
24
27
  if (!process.env.CI) {
25
28
  // set a longer timeout in dev for debugging