@budibase/server 2.2.12-alpha.6 → 2.2.12-alpha.61

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 (483) hide show
  1. package/__mocks__/node-fetch.ts +2 -0
  2. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  3. package/builder/assets/bg.c1563288.png +0 -0
  4. package/builder/assets/bulgaria.bd68393d.png +0 -0
  5. package/builder/assets/covanta.72c46c1e.png +0 -0
  6. package/builder/assets/index.9f16f5ff.js +1798 -0
  7. package/builder/assets/index.f87b8d33.css +6 -0
  8. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  9. package/builder/index.html +3 -3
  10. package/coverage/clover.xml +5114 -4925
  11. package/coverage/coverage-final.json +268 -264
  12. package/coverage/lcov-report/index.html +202 -157
  13. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +6 -6
  14. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  15. package/coverage/lcov-report/src/api/controllers/application.ts.html +185 -164
  16. package/coverage/lcov-report/src/api/controllers/auth.ts.html +9 -9
  17. package/coverage/lcov-report/src/api/controllers/automation.ts.html +24 -24
  18. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  19. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +15 -15
  20. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  21. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +112 -88
  22. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
  23. package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
  24. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +80 -80
  25. package/coverage/lcov-report/src/api/controllers/dev.ts.html +17 -17
  26. package/coverage/lcov-report/src/api/controllers/index.html +36 -36
  27. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  28. package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
  29. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  30. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  31. package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
  32. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +2 -2
  33. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +4 -4
  34. package/coverage/lcov-report/src/api/controllers/plugin/index.html +19 -19
  35. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +29 -29
  36. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +5 -5
  37. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
  38. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +3 -3
  39. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +3 -3
  40. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +6 -6
  41. package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  49. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +4 -4
  50. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +5 -5
  51. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +4 -4
  52. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +6 -6
  53. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +4 -4
  54. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  55. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +7 -7
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +3 -3
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +7 -7
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +9 -9
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +13 -13
  63. package/coverage/lcov-report/src/api/controllers/query/index.html +7 -7
  64. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +89 -65
  65. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  66. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  67. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  68. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +36 -18
  69. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +60 -30
  70. package/coverage/lcov-report/src/api/controllers/row/index.html +40 -40
  71. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +34 -34
  72. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +142 -70
  73. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +120 -120
  74. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +22 -22
  75. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +152 -38
  76. package/coverage/lcov-report/src/api/controllers/screen.ts.html +7 -7
  77. package/coverage/lcov-report/src/api/controllers/script.ts.html +2 -2
  78. package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
  79. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +39 -42
  80. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +52 -52
  81. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +43 -37
  82. package/coverage/lcov-report/src/api/controllers/table/index.html +34 -34
  83. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +155 -68
  84. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +47 -47
  85. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +66 -69
  86. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  87. package/coverage/lcov-report/src/api/controllers/user.ts.html +99 -75
  88. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +62 -17
  89. package/coverage/lcov-report/src/api/controllers/view/index.html +29 -29
  90. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +53 -92
  91. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +5 -5
  92. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +6 -6
  93. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
  94. package/coverage/lcov-report/src/api/index.html +1 -1
  95. package/coverage/lcov-report/src/api/index.ts.html +27 -27
  96. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  97. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  98. package/coverage/lcov-report/src/api/routes/application.ts.html +10 -10
  99. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  100. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  101. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  102. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  103. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  104. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  105. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
  106. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  107. package/coverage/lcov-report/src/api/routes/index.html +5 -5
  108. package/coverage/lcov-report/src/api/routes/index.ts.html +42 -36
  109. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  110. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  111. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  112. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  113. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  114. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  115. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +14 -14
  116. package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
  117. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  118. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
  119. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +4 -4
  120. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  121. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  122. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  123. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  125. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  126. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  127. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  128. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  129. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  130. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  131. package/coverage/lcov-report/src/api/routes/row.ts.html +12 -12
  132. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  133. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  134. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  135. package/coverage/lcov-report/src/api/routes/table.ts.html +26 -95
  136. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  137. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +1 -1
  140. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  141. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  142. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +43 -43
  143. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  144. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  145. package/coverage/lcov-report/src/app.ts.html +13 -7
  146. package/coverage/lcov-report/src/automations/actions.ts.html +27 -27
  147. package/coverage/lcov-report/src/automations/automationUtils.ts.html +59 -59
  148. package/coverage/lcov-report/src/automations/bullboard.ts.html +9 -9
  149. package/coverage/lcov-report/src/automations/index.html +30 -30
  150. package/coverage/lcov-report/src/automations/index.ts.html +10 -10
  151. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  152. package/coverage/lcov-report/src/automations/logging/index.ts.html +7 -7
  153. package/coverage/lcov-report/src/automations/steps/bash.ts.html +8 -8
  154. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  155. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  156. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  157. package/coverage/lcov-report/src/automations/steps/discord.ts.html +8 -8
  158. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +7 -7
  159. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +7 -7
  160. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  161. package/coverage/lcov-report/src/automations/steps/index.html +15 -15
  162. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  163. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  164. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +9 -9
  165. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +38 -38
  166. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +6 -6
  167. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +7 -7
  168. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  169. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  170. package/coverage/lcov-report/src/automations/steps/utils.ts.html +10 -10
  171. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +6 -6
  172. package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
  173. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +13 -13
  174. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  175. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  176. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  177. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  178. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  179. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  181. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  182. package/coverage/lcov-report/src/automations/triggers.ts.html +52 -37
  183. package/coverage/lcov-report/src/automations/utils.ts.html +52 -52
  184. package/coverage/lcov-report/src/constants/index.html +1 -1
  185. package/coverage/lcov-report/src/constants/index.ts.html +2 -2
  186. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  187. package/coverage/lcov-report/src/constants/screens.ts.html +3 -3
  188. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +22 -22
  189. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  190. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  191. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  192. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  193. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  194. package/coverage/lcov-report/src/db/dynamoClient.ts.html +15 -15
  195. package/coverage/lcov-report/src/db/inMemoryView.ts.html +4 -4
  196. package/coverage/lcov-report/src/db/index.html +1 -1
  197. package/coverage/lcov-report/src/db/index.ts.html +9 -9
  198. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +18 -18
  199. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  200. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  201. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +27 -27
  202. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +13 -13
  203. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  204. package/coverage/lcov-report/src/db/utils.ts.html +40 -40
  205. package/coverage/lcov-report/src/definitions/automations.ts.html +6 -3
  206. package/coverage/lcov-report/src/definitions/index.html +5 -20
  207. package/coverage/lcov-report/src/environment.ts.html +10 -10
  208. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +8 -8
  209. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
  210. package/coverage/lcov-report/src/events/index.html +1 -1
  211. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  212. package/coverage/lcov-report/src/events/utils.ts.html +1 -1
  213. package/coverage/lcov-report/src/index.html +13 -13
  214. package/coverage/lcov-report/src/index.ts.html +5 -5
  215. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  216. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  217. package/coverage/lcov-report/src/integrations/base/index.html +11 -11
  218. package/coverage/lcov-report/src/integrations/base/query.ts.html +14 -8
  219. package/coverage/lcov-report/src/integrations/base/sql.ts.html +12 -12
  220. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
  221. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/couchdb.ts.html +113 -32
  223. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +9 -9
  224. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +26 -14
  225. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  226. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
  227. package/coverage/lcov-report/src/integrations/index.html +47 -47
  228. package/coverage/lcov-report/src/integrations/index.ts.html +49 -49
  229. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  230. package/coverage/lcov-report/src/integrations/mongodb.ts.html +417 -285
  231. package/coverage/lcov-report/src/integrations/mysql.ts.html +11 -11
  232. package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
  233. package/coverage/lcov-report/src/integrations/postgres.ts.html +10 -10
  234. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  235. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +15 -150
  236. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  237. package/coverage/lcov-report/src/integrations/rest.ts.html +36 -45
  238. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  239. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  240. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  241. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  242. package/coverage/lcov-report/src/integrations/utils.ts.html +18 -18
  243. package/coverage/lcov-report/src/middleware/appInfo.ts.html +5 -5
  244. package/coverage/lcov-report/src/middleware/authorized.ts.html +27 -27
  245. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  246. package/coverage/lcov-report/src/middleware/currentapp.ts.html +45 -42
  247. package/coverage/lcov-report/src/middleware/index.html +1 -1
  248. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  249. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  250. package/coverage/lcov-report/src/middleware/resourceId.ts.html +21 -21
  251. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  252. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  253. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +6 -6
  264. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  268. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  270. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  271. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  273. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  275. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  279. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  280. package/coverage/lcov-report/src/migrations/index.html +1 -1
  281. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  282. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  283. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  284. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  285. package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
  286. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  287. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +22 -22
  288. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  289. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  290. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  291. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +3 -3
  292. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  293. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
  294. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +18 -18
  295. package/coverage/lcov-report/src/sdk/app/backups/index.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  297. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +7 -7
  298. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  299. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  300. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  301. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  302. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +100 -0
  303. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  304. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +6 -6
  305. package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
  306. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +4 -4
  307. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  308. package/coverage/lcov-report/src/sdk/app/tables/index.html +11 -11
  309. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +27 -18
  310. package/coverage/lcov-report/src/sdk/index.html +5 -5
  311. package/coverage/lcov-report/src/sdk/index.ts.html +23 -11
  312. package/coverage/lcov-report/src/sdk/users/index.html +1 -1
  313. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  314. package/coverage/lcov-report/src/sdk/users/utils.ts.html +28 -28
  315. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  316. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  317. package/coverage/lcov-report/src/startup.ts.html +34 -34
  318. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +134 -125
  319. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  320. package/coverage/lcov-report/src/tests/utilities/index.html +21 -21
  321. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  322. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +213 -24
  323. package/coverage/lcov-report/src/threads/automation.ts.html +216 -186
  324. package/coverage/lcov-report/src/threads/index.html +30 -30
  325. package/coverage/lcov-report/src/threads/index.ts.html +24 -24
  326. package/coverage/lcov-report/src/threads/query.ts.html +68 -29
  327. package/coverage/lcov-report/src/threads/utils.ts.html +9 -9
  328. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +2 -2
  329. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  330. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +9 -9
  331. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +1 -1
  332. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +28 -22
  333. package/coverage/lcov-report/src/utilities/fileSystem/index.html +21 -21
  334. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
  335. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +5 -8
  336. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  337. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +3 -3
  338. package/coverage/lcov-report/src/utilities/global.ts.html +40 -40
  339. package/coverage/lcov-report/src/utilities/index.html +39 -39
  340. package/coverage/lcov-report/src/utilities/index.ts.html +12 -12
  341. package/coverage/lcov-report/src/utilities/redis.ts.html +12 -12
  342. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  343. package/coverage/lcov-report/src/utilities/routing/index.ts.html +4 -4
  344. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
  345. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +50 -50
  346. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  347. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +14 -14
  348. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +173 -233
  349. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +5 -5
  350. package/coverage/lcov-report/src/utilities/security.ts.html +4 -4
  351. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  352. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +4 -4
  353. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  354. package/coverage/lcov-report/src/utilities/users.ts.html +4 -4
  355. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +38 -11
  356. package/coverage/lcov-report/src/watch.ts.html +7 -7
  357. package/coverage/lcov-report/src/websocket.ts.html +3 -3
  358. package/coverage/lcov.info +7899 -7539
  359. package/dist/api/controllers/application.js +73 -74
  360. package/dist/api/controllers/cloud.js +1 -1
  361. package/dist/api/controllers/datasource.js +24 -15
  362. package/dist/api/controllers/query/index.js +18 -11
  363. package/dist/api/controllers/row/ExternalRequest.js +12 -3
  364. package/dist/api/controllers/row/external.js +20 -13
  365. package/dist/api/controllers/row/internal.js +40 -15
  366. package/dist/api/controllers/row/utils.js +35 -3
  367. package/dist/api/controllers/static/index.js +38 -38
  368. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  369. package/dist/api/controllers/table/external.js +16 -35
  370. package/dist/api/controllers/table/index.js +44 -15
  371. package/dist/api/controllers/table/internal.js +4 -4
  372. package/dist/api/controllers/table/utils.js +9 -9
  373. package/dist/api/controllers/user.js +14 -6
  374. package/dist/api/controllers/view/exporters.js +22 -6
  375. package/dist/api/controllers/view/index.js +20 -56
  376. package/dist/api/controllers/webhook.js +45 -43
  377. package/dist/api/routes/index.js +2 -0
  378. package/dist/api/routes/row.js +2 -2
  379. package/dist/api/routes/table.js +6 -37
  380. package/dist/api/routes/utils/validators.js +1 -1
  381. package/dist/app.js +1 -0
  382. package/dist/automations/triggers.js +1 -0
  383. package/dist/definitions/datasource.js +0 -6
  384. package/dist/index.js +2 -2
  385. package/dist/integrations/base/query.js +7 -2
  386. package/dist/integrations/base/sqlTable.js +14 -14
  387. package/dist/integrations/couchdb.js +34 -8
  388. package/dist/integrations/dynamodb.js +8 -5
  389. package/dist/integrations/elasticsearch.js +7 -3
  390. package/dist/integrations/index.js +5 -5
  391. package/dist/integrations/mongodb.js +311 -271
  392. package/dist/integrations/mysql.js +2 -2
  393. package/dist/integrations/queries/sql.js +73 -100
  394. package/dist/integrations/rest.js +16 -18
  395. package/dist/middleware/currentapp.js +4 -2
  396. package/dist/package.json +7 -7
  397. package/dist/sdk/app/datasources/datasources.js +147 -0
  398. package/dist/sdk/app/datasources/index.js +27 -0
  399. package/dist/sdk/app/queries/index.js +27 -0
  400. package/dist/sdk/app/queries/queries.js +60 -0
  401. package/dist/sdk/app/tables/index.js +6 -2
  402. package/dist/sdk/index.js +4 -0
  403. package/dist/sdk/utils/index.js +29 -0
  404. package/dist/threads/automation.js +18 -7
  405. package/dist/threads/query.js +27 -13
  406. package/dist/tsconfig.build.tsbuildinfo +1 -1
  407. package/dist/utilities/fileSystem/filesystem.js +36 -34
  408. package/dist/utilities/fileSystem/plugin.js +17 -14
  409. package/dist/utilities/fileSystem/template.js +7 -4
  410. package/dist/utilities/schema.js +108 -0
  411. package/dist/utilities/workerRequests.js +2 -0
  412. package/package.json +8 -8
  413. package/scripts/dev/manage.js +1 -0
  414. package/src/api/controllers/application.ts +81 -74
  415. package/src/api/controllers/cloud.ts +1 -1
  416. package/src/api/controllers/datasource.ts +33 -25
  417. package/src/api/controllers/query/index.ts +47 -39
  418. package/src/api/controllers/row/ExternalRequest.ts +8 -2
  419. package/src/api/controllers/row/external.ts +24 -14
  420. package/src/api/controllers/row/internal.ts +42 -18
  421. package/src/api/controllers/row/utils.ts +40 -2
  422. package/src/api/controllers/static/index.ts +17 -18
  423. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  424. package/src/api/controllers/table/external.ts +18 -16
  425. package/src/api/controllers/table/index.ts +46 -17
  426. package/src/api/controllers/table/internal.ts +4 -4
  427. package/src/api/controllers/table/utils.ts +12 -13
  428. package/src/api/controllers/user.ts +21 -13
  429. package/src/api/controllers/view/exporters.ts +20 -5
  430. package/src/api/controllers/view/index.ts +22 -35
  431. package/src/api/controllers/webhook.ts +48 -46
  432. package/src/api/routes/index.ts +2 -0
  433. package/src/api/routes/row.ts +1 -1
  434. package/src/api/routes/table.ts +15 -38
  435. package/src/api/routes/tests/datasource.spec.ts +35 -1
  436. package/src/api/routes/tests/misc.spec.js +4 -10
  437. package/src/api/routes/tests/table.spec.js +8 -30
  438. package/src/api/routes/tests/user.spec.js +20 -1
  439. package/src/api/routes/utils/validators.ts +1 -1
  440. package/src/app.ts +3 -1
  441. package/src/automations/tests/loop.spec.ts +45 -0
  442. package/src/automations/triggers.ts +6 -1
  443. package/src/definitions/automations.ts +1 -0
  444. package/src/definitions/datasource.ts +0 -41
  445. package/src/index.ts +1 -1
  446. package/src/integrations/base/query.ts +3 -1
  447. package/src/integrations/base/sqlTable.ts +1 -1
  448. package/src/integrations/couchdb.ts +41 -14
  449. package/src/integrations/dynamodb.ts +3 -3
  450. package/src/integrations/elasticsearch.ts +8 -4
  451. package/src/integrations/index.ts +4 -4
  452. package/src/integrations/mongodb.ts +315 -271
  453. package/src/integrations/mysql.ts +1 -1
  454. package/src/integrations/queries/sql.ts +5 -50
  455. package/src/integrations/rest.ts +16 -19
  456. package/src/integrations/tests/couchdb.spec.ts +33 -21
  457. package/src/integrations/tests/rest.spec.ts +4 -2
  458. package/src/middleware/currentapp.ts +3 -2
  459. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  460. package/src/sdk/app/datasources/datasources.ts +136 -0
  461. package/src/sdk/app/datasources/index.ts +5 -0
  462. package/src/sdk/app/queries/index.ts +5 -0
  463. package/src/sdk/app/queries/queries.ts +50 -0
  464. package/src/sdk/app/tables/index.ts +6 -3
  465. package/src/sdk/index.ts +4 -0
  466. package/src/sdk/utils/index.ts +16 -0
  467. package/src/tests/utilities/TestConfiguration.ts +15 -12
  468. package/src/tests/utilities/structures.ts +65 -2
  469. package/src/threads/automation.ts +18 -8
  470. package/src/threads/definitions.ts +3 -0
  471. package/src/threads/query.ts +28 -15
  472. package/src/utilities/fileSystem/filesystem.ts +6 -4
  473. package/src/utilities/fileSystem/plugin.ts +3 -4
  474. package/src/utilities/fileSystem/template.ts +2 -2
  475. package/src/utilities/schema.ts +141 -0
  476. package/src/utilities/workerRequests.ts +10 -1
  477. package/tsconfig.json +2 -1
  478. package/builder/assets/index.0b010a07.js +0 -1023
  479. package/builder/assets/index.fa480d5b.css +0 -6
  480. package/dist/utilities/csvParser.js +0 -152
  481. package/src/utilities/csvParser.ts +0 -161
  482. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  483. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -67,10 +67,7 @@ router
67
67
  * structure, and the "updated", new column name should also be supplied. The schema should also be updated, this field
68
68
  * lets the server know that a field hasn't just been deleted, that the data has moved to a new name, this will fix
69
69
  * the rows in the table. This functionality is only available for internal tables.
70
- * @apiParam (Body) {object} [dataImport] When creating an internal table it can be built from a CSV, by using the
71
- * CSV validation endpoint. Send the CSV data to the validation endpoint, then put the results of that call
72
- * into this property, along with the CSV and a table/rows will be built from it. This is not supported when updating
73
- * or for external tables.
70
+ * @apiParam (Body) {object[]} [rows] When creating a table using a compatible data source, an array of objects to be imported into the new table can be provided.
74
71
  *
75
72
  * @apiParamExample {json} Example:
76
73
  * {
@@ -99,15 +96,7 @@ router
99
96
  * "old": "columnName",
100
97
  * "updated": "newColumnName",
101
98
  * },
102
- * "dataImport": {
103
- * "csvString": "column\nvalue",
104
- * "primaryDisplay": "column",
105
- * "schema": {
106
- * "column": {
107
- * "type": "string"
108
- * }
109
- * }
110
- * }
99
+ * "rows": []
111
100
  * }
112
101
  *
113
102
  * @apiSuccess {object} table The response body will contain the table structure after being cleaned up and
@@ -121,30 +110,20 @@ router
121
110
  tableValidator(),
122
111
  tableController.save
123
112
  )
124
- /**
125
- * @api {post} /api/tables/csv/validate Validate a CSV for a table
126
- * @apiName Validate a CSV for a table
127
- * @apiGroup tables
128
- * @apiPermission builder
129
- * @apiDescription When creating a new table, or importing a CSV to an existing table the CSV must be validated and
130
- * converted into a Budibase schema; this endpoint does this.
131
- *
132
- * @apiParam (Body) {string} csvString The CSV which is to be validated as a string.
133
- * @apiParam (Body) {object} [schema] When a CSV has been validated it is possible to re-validate after changing the
134
- * type of a field, by default everything will be strings as there is no way to infer types. The returned schema can
135
- * be updated and then returned to the endpoint to re-validate and check if the type will work for the CSV, e.g.
136
- * using a number instead of strings.
137
- * @apiParam (Body) {string} [tableId] If importing data to an existing table this will pull the current table and
138
- * remove any fields from the CSV schema which do not exist on the table/don't match the type of the table. When
139
- * importing a CSV to an existing table only fields that are present on the table can be imported.
140
- *
141
- * @apiSuccess {object} schema The response body will contain a "schema" object that represents the schema found for
142
- * the CSV - this will be in the same format used for table schema.s
143
- */
144
113
  .post(
145
- "/api/tables/csv/validate",
114
+ "/api/convert/csvToJson",
115
+ authorized(BUILDER),
116
+ tableController.csvToJson
117
+ )
118
+ .post(
119
+ "/api/tables/validateNewTableImport",
120
+ authorized(BUILDER),
121
+ tableController.validateNewTableImport
122
+ )
123
+ .post(
124
+ "/api/tables/validateExistingTableImport",
146
125
  authorized(BUILDER),
147
- tableController.validateCSVSchema
126
+ tableController.validateExistingTableImport
148
127
  )
149
128
  /**
150
129
  * @api {post} /api/tables/:tableId/:revId Delete a table
@@ -177,9 +156,7 @@ router
177
156
  *
178
157
  * @apiParam {string} tableId The ID of the table which the data should be imported to.
179
158
  *
180
- * @apiParam (Body) {object} dataImport This is the same as the structure used when creating an internal table with
181
- * a CSV, it will have the "schema" returned from the CSV validation endpoint and the "csvString" which is to be
182
- * turned into rows.
159
+ * @apiParam (Body) {object[]} rows An array of objects representing the rows to be imported, key-value pairs not matching the table schema will be ignored.
183
160
  *
184
161
  * @apiSuccess {string} message A message stating that the data was imported successfully.
185
162
  */
@@ -2,7 +2,8 @@ jest.mock("pg")
2
2
  import * as setup from "./utilities"
3
3
  import { checkBuilderEndpoint } from "./utilities/TestFunctions"
4
4
  import { checkCacheForDynamicVariable } from "../../../threads/utils"
5
- import { events } from "@budibase/backend-core"
5
+ import { context, events } from "@budibase/backend-core"
6
+ import sdk from "../../../sdk"
6
7
 
7
8
  let { basicDatasource } = setup.structures
8
9
  const pg = require("pg")
@@ -184,4 +185,37 @@ describe("/datasources", () => {
184
185
  })
185
186
  })
186
187
  })
188
+
189
+ describe("check secret replacement", () => {
190
+ async function makeDatasource() {
191
+ datasource = basicDatasource()
192
+ datasource.datasource.config.password = "testing"
193
+ const res = await request
194
+ .post(`/api/datasources`)
195
+ .send(datasource)
196
+ .set(config.defaultHeaders())
197
+ .expect("Content-Type", /json/)
198
+ .expect(200)
199
+ return res.body.datasource
200
+ }
201
+
202
+ it("should save a datasource with password", async () => {
203
+ const datasource = await makeDatasource()
204
+ expect(datasource.config.password).toBe("--secret-value--")
205
+ })
206
+
207
+ it("should not the password on update with the --secret-value--", async () => {
208
+ const datasource = await makeDatasource()
209
+ await request
210
+ .put(`/api/datasources/${datasource._id}`)
211
+ .send(datasource)
212
+ .set(config.defaultHeaders())
213
+ .expect("Content-Type", /json/)
214
+ .expect(200)
215
+ await context.doInAppContext(config.getAppId(), async () => {
216
+ const dbDatasource: any = await sdk.datasources.get(datasource._id)
217
+ expect(dbDatasource.config.password).toBe("testing")
218
+ })
219
+ })
220
+ })
187
221
  })
@@ -42,7 +42,7 @@ describe("run misc tests", () => {
42
42
  })
43
43
 
44
44
  describe("test table utilities", () => {
45
- it("should be able to import a CSV", async () => {
45
+ it("should be able to import data", async () => {
46
46
  return config.doInContext(null, async () => {
47
47
  const table = await config.createTable({
48
48
  name: "table",
@@ -75,17 +75,11 @@ describe("run misc tests", () => {
75
75
  },
76
76
  },
77
77
  })
78
- const dataImport = {
79
- csvString: "a,b,c,d\n1,2,3,4",
80
- schema: {},
81
- }
82
- for (let col of ["a", "b", "c", "d"]) {
83
- dataImport.schema[col] = { type: "string" }
84
- }
78
+
85
79
  await tableUtils.handleDataImport(
86
80
  { userId: "test" },
87
81
  table,
88
- dataImport
82
+ [{ a: '1', b: '2', c: '3', d: '4'}]
89
83
  )
90
84
  const rows = await config.getRows()
91
85
  expect(rows[0].a).toEqual("1")
@@ -94,4 +88,4 @@ describe("run misc tests", () => {
94
88
  })
95
89
  })
96
90
  })
97
- })
91
+ })
@@ -43,21 +43,18 @@ describe("/tables", () => {
43
43
  expect(events.table.created).toBeCalledWith(res.body)
44
44
  })
45
45
 
46
- it("creates a table via data import CSV", async () => {
46
+ it("creates a table via data import", async () => {
47
47
  const table = basicTable()
48
- table.dataImport = {
49
- csvString: "\"name\",\"description\"\n\"test-name\",\"test-desc\"",
50
- }
51
- table.dataImport.schema = table.schema
48
+ table.rows = [{ name: 'test-name', description: 'test-desc' }]
52
49
 
53
50
  const res = await createTable(table)
54
51
 
55
52
  expect(events.table.created).toBeCalledTimes(1)
56
53
  expect(events.table.created).toBeCalledWith(res.body)
57
54
  expect(events.table.imported).toBeCalledTimes(1)
58
- expect(events.table.imported).toBeCalledWith(res.body, "csv")
55
+ expect(events.table.imported).toBeCalledWith(res.body)
59
56
  expect(events.rows.imported).toBeCalledTimes(1)
60
- expect(events.rows.imported).toBeCalledWith(res.body, "csv", 1)
57
+ expect(events.rows.imported).toBeCalledWith(res.body, 1)
61
58
  })
62
59
 
63
60
  it("should apply authorization to endpoint", async () => {
@@ -155,11 +152,10 @@ describe("/tables", () => {
155
152
  it("imports rows successfully", async () => {
156
153
  const table = await config.createTable()
157
154
  const importRequest = {
158
- dataImport: {
159
- csvString: "\"name\",\"description\"\n\"test-name\",\"test-desc\"",
160
- schema: table.schema
161
- }
155
+ schema: table.schema,
156
+ rows: [{ name: 'test-name', description: 'test-desc' }]
162
157
  }
158
+
163
159
  jest.clearAllMocks()
164
160
 
165
161
  await request
@@ -171,7 +167,7 @@ describe("/tables", () => {
171
167
 
172
168
  expect(events.table.created).not.toHaveBeenCalled()
173
169
  expect(events.rows.imported).toBeCalledTimes(1)
174
- expect(events.rows.imported).toBeCalledWith(table, "csv", 1)
170
+ expect(events.rows.imported).toBeCalledWith(table, 1)
175
171
  })
176
172
  })
177
173
 
@@ -206,24 +202,6 @@ describe("/tables", () => {
206
202
  })
207
203
  })
208
204
 
209
- describe("validate csv", () => {
210
- it("should be able to validate a CSV layout", async () => {
211
- const res = await request
212
- .post(`/api/tables/csv/validate`)
213
- .send({
214
- csvString: "a,b,c,d\n1,2,3,4"
215
- })
216
- .set(config.defaultHeaders())
217
- .expect('Content-Type', /json/)
218
- .expect(200)
219
- expect(res.body.schema).toBeDefined()
220
- expect(res.body.schema.a).toEqual({
221
- type: "string",
222
- success: true,
223
- })
224
- })
225
- })
226
-
227
205
  describe("indexing", () => {
228
206
  it("should be able to create a table with indexes", async () => {
229
207
  await context.doInAppContext(appId, async () => {
@@ -171,9 +171,28 @@ describe("/users", () => {
171
171
  .expect("Content-Type", /json/)
172
172
  expect(res.body.message).toEqual('User synced.')
173
173
  })
174
- })
175
174
 
176
175
 
176
+ it("should sync the user when a previous user is specified", async () => {
177
+ const app1 = await config.createApp('App 1')
178
+ const app2 = await config.createApp('App 2')
177
179
 
180
+ let user = await config.createUser(
181
+ undefined,
182
+ undefined,
183
+ undefined,
184
+ undefined,
185
+ false,
186
+ true,
187
+ { [app1.appId]: 'ADMIN' })
188
+ let res = await request
189
+ .post(`/api/users/metadata/sync/${user._id}`)
190
+ .set(config.defaultHeaders())
191
+ .send({ previousUser: { ...user, roles: { ...user.roles, [app2.appId]: 'BASIC' } } })
192
+ .expect(200)
193
+ .expect("Content-Type", /json/)
178
194
 
195
+ expect(res.body.message).toEqual('User synced.')
196
+ })
197
+ })
179
198
  })
@@ -18,7 +18,7 @@ export function tableValidator() {
18
18
  schema: Joi.object().required(),
19
19
  name: Joi.string().required(),
20
20
  views: Joi.object(),
21
- dataImport: Joi.object(),
21
+ rows: Joi.array(),
22
22
  }).unknown(true))
23
23
  }
24
24
 
package/src/app.ts CHANGED
@@ -19,7 +19,7 @@ import * as api from "./api"
19
19
  import * as automations from "./automations"
20
20
  import { Thread } from "./threads"
21
21
  import * as redis from "./utilities/redis"
22
- import { events, logging } from "@budibase/backend-core"
22
+ import { events, logging, middleware } from "@budibase/backend-core"
23
23
  import { initialise as initialiseWebsockets } from "./websocket"
24
24
  import { startup } from "./startup"
25
25
  const Sentry = require("@sentry/node")
@@ -40,6 +40,8 @@ app.use(
40
40
  })
41
41
  )
42
42
 
43
+ app.use(middleware.logging)
44
+
43
45
  if (env.isProd()) {
44
46
  env._set("NODE_ENV", "production")
45
47
  Sentry.init()
@@ -0,0 +1,45 @@
1
+ import * as automation from "../index"
2
+ import * as triggers from "../triggers"
3
+ import { loopAutomation } from "../../tests/utilities/structures"
4
+ import { context } from "@budibase/backend-core"
5
+ import * as setup from "./utilities"
6
+
7
+ describe("Attempt to run a basic loop automation", () => {
8
+ let config = setup.getConfig(),
9
+ table: any,
10
+ row: any
11
+
12
+ beforeEach(async () => {
13
+ await automation.init()
14
+ await config.init()
15
+ table = await config.createTable()
16
+ row = await config.createRow()
17
+ })
18
+
19
+ afterAll(setup.afterAll)
20
+
21
+ async function runLoop(loopOpts?: any) {
22
+ const appId = config.getAppId()
23
+ return await context.doInAppContext(appId, async () => {
24
+ const params = { fields: { appId } }
25
+ return await triggers.externalTrigger(
26
+ loopAutomation(table._id, loopOpts),
27
+ params,
28
+ { getResponses: true }
29
+ )
30
+ })
31
+ }
32
+
33
+ it("attempt to run a basic loop", async () => {
34
+ const resp = await runLoop()
35
+ expect(resp.steps[2].outputs.iterations).toBe(1)
36
+ })
37
+
38
+ it("test a loop with a string", async () => {
39
+ const resp = await runLoop({
40
+ type: "String",
41
+ binding: "a,b,c",
42
+ })
43
+ expect(resp.steps[2].outputs.iterations).toBe(3)
44
+ })
45
+ })
@@ -109,8 +109,13 @@ export async function externalTrigger(
109
109
  }
110
110
  params.fields = coercedFields
111
111
  }
112
- const data = { automation, event: params }
112
+ const data: Record<string, any> = { automation, event: params }
113
113
  if (getResponses) {
114
+ data.event = {
115
+ ...data.event,
116
+ appId: context.getAppId(),
117
+ automation,
118
+ }
114
119
  return utils.processEvent({ data })
115
120
  } else {
116
121
  return automationQueue.add(data, JOB_OPTS)
@@ -24,6 +24,7 @@ export interface TriggerOutput {
24
24
 
25
25
  export interface AutomationContext extends AutomationResults {
26
26
  steps: any[]
27
+ env?: Record<string, string>
27
28
  trigger: any
28
29
  }
29
30
 
@@ -7,44 +7,3 @@
7
7
  export interface QueryOptions {
8
8
  disableReturning?: boolean
9
9
  }
10
-
11
- export enum AuthType {
12
- BASIC = "basic",
13
- BEARER = "bearer",
14
- }
15
-
16
- interface AuthConfig {
17
- _id: string
18
- name: string
19
- type: AuthType
20
- config: BasicAuthConfig | BearerAuthConfig
21
- }
22
-
23
- export interface BasicAuthConfig {
24
- username: string
25
- password: string
26
- }
27
-
28
- export interface BearerAuthConfig {
29
- token: string
30
- }
31
-
32
- export interface RestConfig {
33
- url: string
34
- rejectUnauthorized: boolean
35
- defaultHeaders: {
36
- [key: string]: any
37
- }
38
- legacyHttpParser: boolean
39
- authConfigs: AuthConfig[]
40
- staticVariables: {
41
- [key: string]: string
42
- }
43
- dynamicVariables: [
44
- {
45
- name: string
46
- queryId: string
47
- value: string
48
- }
49
- ]
50
- }
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { bootstrap } from "global-agent"
2
2
  const fixPath = require("fix-path")
3
- const { checkDevelopmentEnvironment } = require("./utilities/fileSystem")
3
+ import { checkDevelopmentEnvironment } from "./utilities/fileSystem"
4
4
 
5
5
  function runServer() {
6
6
  // this will shutdown the system if development environment not ready
@@ -1,10 +1,12 @@
1
1
  import { QueryJson, Datasource } from "@budibase/types"
2
- const { getIntegration } = require("../index")
2
+ import { getIntegration } from "../index"
3
+ import sdk from "../../sdk"
3
4
 
4
5
  export async function makeExternalQuery(
5
6
  datasource: Datasource,
6
7
  json: QueryJson
7
8
  ) {
9
+ datasource = await sdk.datasources.enrich(datasource)
8
10
  const Integration = await getIntegration(datasource.source)
9
11
  // query is the opinionated function
10
12
  if (Integration.prototype.query) {
@@ -3,7 +3,7 @@ import { Operation, QueryJson, RenameColumn, Table } from "@budibase/types"
3
3
  import { breakExternalTableId } from "../utils"
4
4
  import SchemaBuilder = Knex.SchemaBuilder
5
5
  import CreateTableBuilder = Knex.CreateTableBuilder
6
- const { FieldTypes, RelationshipTypes } = require("../../constants")
6
+ import { FieldTypes, RelationshipTypes } from "../../constants"
7
7
 
8
8
  function generateSchema(
9
9
  schema: CreateTableBuilder,
@@ -1,11 +1,12 @@
1
1
  import {
2
- Integration,
3
2
  DatasourceFieldType,
4
- QueryType,
3
+ Document,
4
+ Integration,
5
5
  IntegrationBase,
6
+ QueryType,
6
7
  } from "@budibase/types"
7
-
8
- const PouchDB = require("pouchdb")
8
+ import { db as dbCore } from "@budibase/backend-core"
9
+ import { DatabaseWithConnection } from "@budibase/backend-core/src/db"
9
10
 
10
11
  interface CouchDBConfig {
11
12
  url: string
@@ -39,6 +40,15 @@ const SCHEMA: Integration = {
39
40
  update: {
40
41
  type: QueryType.JSON,
41
42
  },
43
+ get: {
44
+ type: QueryType.FIELDS,
45
+ fields: {
46
+ id: {
47
+ type: DatasourceFieldType.STRING,
48
+ required: true,
49
+ },
50
+ },
51
+ },
42
52
  delete: {
43
53
  type: QueryType.FIELDS,
44
54
  fields: {
@@ -57,7 +67,7 @@ class CouchDBIntegration implements IntegrationBase {
57
67
 
58
68
  constructor(config: CouchDBConfig) {
59
69
  this.config = config
60
- this.client = new PouchDB(`${config.url}/${config.database}`)
70
+ this.client = dbCore.DatabaseWithConnection(config.database, config.url)
61
71
  }
62
72
 
63
73
  async query(
@@ -66,31 +76,48 @@ class CouchDBIntegration implements IntegrationBase {
66
76
  query: { json?: object; id?: string }
67
77
  ) {
68
78
  try {
69
- const response = await this.client[command](query.id || query.json)
70
- await this.client.close()
71
- return response
79
+ return await this.client[command](query.id || query.json)
72
80
  } catch (err) {
73
81
  console.error(errorMsg, err)
74
82
  throw err
75
83
  }
76
84
  }
77
85
 
78
- async create(query: { json: object }) {
79
- return this.query("post", "Error writing to couchDB", query)
86
+ private parse(query: { json: string | object }) {
87
+ return typeof query.json === "string" ? JSON.parse(query.json) : query.json
88
+ }
89
+
90
+ async create(query: { json: string | object }) {
91
+ const parsed = this.parse(query)
92
+ return this.query("post", "Error writing to couchDB", { json: parsed })
80
93
  }
81
94
 
82
- async read(query: { json: object }) {
95
+ async read(query: { json: string | object }) {
96
+ const parsed = this.parse(query)
83
97
  const result = await this.query("allDocs", "Error querying couchDB", {
84
98
  json: {
85
99
  include_docs: true,
86
- ...query.json,
100
+ ...parsed,
87
101
  },
88
102
  })
89
103
  return result.rows.map((row: { doc: object }) => row.doc)
90
104
  }
91
105
 
92
- async update(query: { json: object }) {
93
- return this.query("put", "Error updating couchDB document", query)
106
+ async update(query: { json: string | object }) {
107
+ const parsed: Document = this.parse(query)
108
+ if (!parsed?._rev && parsed?._id) {
109
+ const oldDoc = await this.get({ id: parsed._id })
110
+ parsed._rev = oldDoc._rev
111
+ }
112
+ return this.query("put", "Error updating couchDB document", {
113
+ json: parsed,
114
+ })
115
+ }
116
+
117
+ async get(query: { id: string }) {
118
+ return this.query("get", "Error retrieving couchDB document by ID", {
119
+ id: query.id,
120
+ })
94
121
  }
95
122
 
96
123
  async delete(query: { id: string }) {
@@ -5,8 +5,8 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- const AWS = require("aws-sdk")
9
- const { AWS_REGION } = require("../db/dynamoClient")
8
+ import AWS from "aws-sdk"
9
+ import { AWS_REGION } from "../db/dynamoClient"
10
10
 
11
11
  interface DynamoDBConfig {
12
12
  region: string
@@ -182,7 +182,7 @@ class DynamoDBIntegration implements IntegrationBase {
182
182
  return response
183
183
  }
184
184
 
185
- async describe(query: { table: string }) {
185
+ async describe(query: { table: string }): Promise<any> {
186
186
  const params = {
187
187
  TableName: query.table,
188
188
  }
@@ -80,11 +80,11 @@ const SCHEMA: Integration = {
80
80
  delete: {
81
81
  type: QueryType.FIELDS,
82
82
  fields: {
83
- index: {
83
+ id: {
84
84
  type: DatasourceFieldType.STRING,
85
85
  required: true,
86
86
  },
87
- id: {
87
+ index: {
88
88
  type: DatasourceFieldType.STRING,
89
89
  required: true,
90
90
  },
@@ -164,9 +164,13 @@ class ElasticSearchIntegration implements IntegrationBase {
164
164
  }
165
165
  }
166
166
 
167
- async delete(query: object) {
167
+ async delete(query: { id: string; index: string }) {
168
+ const { id, index } = query
168
169
  try {
169
- const result = await this.client.delete(query)
170
+ const result = await this.client.delete({
171
+ id,
172
+ index,
173
+ })
170
174
  return result.body
171
175
  } catch (err) {
172
176
  console.error("Error deleting from elasticsearch", err)
@@ -17,8 +17,8 @@ import oracle from "./oracle"
17
17
  import { getPlugins } from "../api/controllers/plugin"
18
18
  import { SourceName, Integration, PluginType } from "@budibase/types"
19
19
  import { getDatasourcePlugin } from "../utilities/fileSystem"
20
- const environment = require("../environment")
21
- const { cloneDeep } = require("lodash")
20
+ import env from "../environment"
21
+ import { cloneDeep } from "lodash"
22
22
 
23
23
  const DEFINITIONS: { [key: string]: Integration } = {
24
24
  [SourceName.POSTGRES]: postgres.schema,
@@ -69,7 +69,7 @@ if (
69
69
 
70
70
  export async function getDefinitions() {
71
71
  const pluginSchemas: { [key: string]: Integration } = {}
72
- if (environment.SELF_HOSTED) {
72
+ if (env.SELF_HOSTED) {
73
73
  const plugins = await getPlugins(PluginType.DATASOURCE)
74
74
  // extract the actual schema from each custom
75
75
  for (let plugin of plugins) {
@@ -93,7 +93,7 @@ export async function getIntegration(integration: string) {
93
93
  if (INTEGRATIONS[integration]) {
94
94
  return INTEGRATIONS[integration]
95
95
  }
96
- if (environment.SELF_HOSTED) {
96
+ if (env.SELF_HOSTED) {
97
97
  const plugins = await getPlugins(PluginType.DATASOURCE)
98
98
  for (let plugin of plugins) {
99
99
  if (plugin.name === integration) {