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

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.426b225d.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 +5112 -4923
  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 +27 -21
  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 +7897 -7537
  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
@@ -12,9 +12,11 @@ import { getIntegration } from "../../integrations"
12
12
  import { getDatasourceAndQuery } from "./row/utils"
13
13
  import { invalidateDynamicVariables } from "../../threads/utils"
14
14
  import { db as dbCore, context, events } from "@budibase/backend-core"
15
- import { BBContext, Datasource, Row } from "@budibase/types"
15
+ import { UserCtx, Datasource, Row } from "@budibase/types"
16
+ import sdk from "../../sdk"
17
+ import { mergeConfigs } from "../../sdk/app/datasources/datasources"
16
18
 
17
- export async function fetch(ctx: BBContext) {
19
+ export async function fetch(ctx: UserCtx) {
18
20
  // Get internal tables
19
21
  const db = context.getAppDB()
20
22
  const internalTables = await db.allDocs(
@@ -43,25 +45,23 @@ export async function fetch(ctx: BBContext) {
43
45
  )
44
46
  ).rows.map(row => row.doc)
45
47
 
46
- const allDatasources = [bbInternalDb, ...datasources]
48
+ const allDatasources: Datasource[] = await sdk.datasources.removeSecrets([
49
+ bbInternalDb,
50
+ ...datasources,
51
+ ])
47
52
 
48
53
  for (let datasource of allDatasources) {
49
- if (datasource.config && datasource.config.auth) {
50
- // strip secrets from response so they don't show in the network request
51
- delete datasource.config.auth
52
- }
53
-
54
54
  if (datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE) {
55
- datasource.entities = internal[datasource._id]
55
+ datasource.entities = internal[datasource._id!]
56
56
  }
57
57
  }
58
58
 
59
59
  ctx.body = [bbInternalDb, ...datasources]
60
60
  }
61
61
 
62
- export async function buildSchemaFromDb(ctx: BBContext) {
62
+ export async function buildSchemaFromDb(ctx: UserCtx) {
63
63
  const db = context.getAppDB()
64
- const datasource = await db.get(ctx.params.datasourceId)
64
+ const datasource = await sdk.datasources.get(ctx.params.datasourceId)
65
65
  const tablesFilter = ctx.request.body.tablesFilter
66
66
 
67
67
  let { tables, error } = await buildSchemaHelper(datasource)
@@ -146,11 +146,11 @@ async function invalidateVariables(
146
146
  await invalidateDynamicVariables(toInvalidate)
147
147
  }
148
148
 
149
- export async function update(ctx: BBContext) {
149
+ export async function update(ctx: UserCtx) {
150
150
  const db = context.getAppDB()
151
151
  const datasourceId = ctx.params.datasourceId
152
- let datasource = await db.get(datasourceId)
153
- const auth = datasource.config.auth
152
+ let datasource = await sdk.datasources.get(datasourceId)
153
+ const auth = datasource.config?.auth
154
154
  await invalidateVariables(datasource, ctx.request.body)
155
155
 
156
156
  const isBudibaseSource = datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE
@@ -159,10 +159,13 @@ export async function update(ctx: BBContext) {
159
159
  ? { name: ctx.request.body?.name }
160
160
  : ctx.request.body
161
161
 
162
- datasource = { ...datasource, ...dataSourceBody }
162
+ datasource = {
163
+ ...datasource,
164
+ ...sdk.datasources.mergeConfigs(dataSourceBody, datasource),
165
+ }
163
166
  if (auth && !ctx.request.body.auth) {
164
167
  // don't strip auth config from DB
165
- datasource.config.auth = auth
168
+ datasource.config!.auth = auth
166
169
  }
167
170
 
168
171
  const response = await db.put(datasource)
@@ -179,10 +182,12 @@ export async function update(ctx: BBContext) {
179
182
 
180
183
  ctx.status = 200
181
184
  ctx.message = "Datasource saved successfully."
182
- ctx.body = { datasource }
185
+ ctx.body = {
186
+ datasource: await sdk.datasources.removeSecretSingle(datasource),
187
+ }
183
188
  }
184
189
 
185
- export async function save(ctx: BBContext) {
190
+ export async function save(ctx: UserCtx) {
186
191
  const db = context.getAppDB()
187
192
  const plus = ctx.request.body.datasource.plus
188
193
  const fetchSchema = ctx.request.body.fetchSchema
@@ -213,7 +218,9 @@ export async function save(ctx: BBContext) {
213
218
  }
214
219
  }
215
220
 
216
- const response: any = { datasource }
221
+ const response: any = {
222
+ datasource: await sdk.datasources.removeSecretSingle(datasource),
223
+ }
217
224
  if (schemaError) {
218
225
  response.error = schemaError
219
226
  }
@@ -251,11 +258,11 @@ async function destroyInternalTablesBySourceId(datasourceId: string) {
251
258
  }
252
259
  }
253
260
 
254
- export async function destroy(ctx: BBContext) {
261
+ export async function destroy(ctx: UserCtx) {
255
262
  const db = context.getAppDB()
256
263
  const datasourceId = ctx.params.datasourceId
257
264
 
258
- const datasource = await db.get(datasourceId)
265
+ const datasource = await sdk.datasources.get(datasourceId)
259
266
  // Delete all queries for the datasource
260
267
 
261
268
  if (datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE) {
@@ -279,13 +286,14 @@ export async function destroy(ctx: BBContext) {
279
286
  ctx.status = 200
280
287
  }
281
288
 
282
- export async function find(ctx: BBContext) {
289
+ export async function find(ctx: UserCtx) {
283
290
  const database = context.getAppDB()
284
- ctx.body = await database.get(ctx.params.datasourceId)
291
+ const datasource = await database.get(ctx.params.datasourceId)
292
+ ctx.body = await sdk.datasources.removeSecretSingle(datasource)
285
293
  }
286
294
 
287
295
  // dynamic query functionality
288
- export async function query(ctx: BBContext) {
296
+ export async function query(ctx: UserCtx) {
289
297
  const queryJson = ctx.request.body
290
298
  try {
291
299
  ctx.body = await getDatasourceAndQuery(queryJson)
@@ -313,7 +321,7 @@ function updateError(error: any, newError: any, tables: string[]) {
313
321
 
314
322
  async function buildSchemaHelper(datasource: Datasource) {
315
323
  const Connector = await getIntegration(datasource.source)
316
-
324
+ datasource = await sdk.datasources.enrich(datasource)
317
325
  // Connect to the DB and build the schema
318
326
  const connector = new Connector(datasource.config)
319
327
  await connector.buildSchema(datasource._id, datasource.entities)
@@ -7,6 +7,8 @@ import { invalidateDynamicVariables } from "../../../threads/utils"
7
7
  import env from "../../../environment"
8
8
  import { quotas } from "@budibase/pro"
9
9
  import { events, context, utils, constants } from "@budibase/backend-core"
10
+ import sdk from "../../../sdk"
11
+ import { QueryEvent } from "../../../threads/definitions"
10
12
 
11
13
  const Runner = new Thread(ThreadType.QUERY, {
12
14
  timeoutMs: env.QUERY_THREAD_TIMEOUT || 10000,
@@ -81,7 +83,7 @@ export async function save(ctx: any) {
81
83
  const db = context.getAppDB()
82
84
  const query = ctx.request.body
83
85
 
84
- const datasource = await db.get(query.datasourceId)
86
+ const datasource = await sdk.datasources.get(query.datasourceId)
85
87
 
86
88
  let eventFn
87
89
  if (!query._id) {
@@ -126,9 +128,9 @@ function getAuthConfig(ctx: any) {
126
128
  }
127
129
 
128
130
  export async function preview(ctx: any) {
129
- const db = context.getAppDB()
130
-
131
- const datasource = await db.get(ctx.request.body.datasourceId)
131
+ const { datasource, envVars } = await sdk.datasources.getWithEnvVars(
132
+ ctx.request.body.datasourceId
133
+ )
132
134
  const query = ctx.request.body
133
135
  // preview may not have a queryId as it hasn't been saved, but if it does
134
136
  // this stops dynamic variables from calling the same query
@@ -137,20 +139,22 @@ export async function preview(ctx: any) {
137
139
  const authConfigCtx: any = getAuthConfig(ctx)
138
140
 
139
141
  try {
140
- const runFn = () =>
141
- Runner.run({
142
- appId: ctx.appId,
143
- datasource,
144
- queryVerb,
145
- fields,
146
- parameters,
147
- transformer,
148
- queryId,
149
- ctx: {
150
- user: ctx.user,
151
- auth: { ...authConfigCtx },
152
- },
153
- })
142
+ const inputs: QueryEvent = {
143
+ appId: ctx.appId,
144
+ datasource,
145
+ queryVerb,
146
+ fields,
147
+ parameters,
148
+ transformer,
149
+ queryId,
150
+ // have to pass down to the thread runner - can't put into context now
151
+ environmentVariables: envVars,
152
+ ctx: {
153
+ user: ctx.user,
154
+ auth: { ...authConfigCtx },
155
+ },
156
+ }
157
+ const runFn = () => Runner.run(inputs)
154
158
 
155
159
  const { rows, keys, info, extra } = await quotas.addQuery(runFn, {
156
160
  datasourceId: datasource._id,
@@ -201,7 +205,9 @@ async function execute(
201
205
  const db = context.getAppDB()
202
206
 
203
207
  const query = await db.get(ctx.params.queryId)
204
- const datasource = await db.get(query.datasourceId)
208
+ const { datasource, envVars } = await sdk.datasources.getWithEnvVars(
209
+ query.datasourceId
210
+ )
205
211
 
206
212
  let authConfigCtx: any = {}
207
213
  if (!opts.isAutomation) {
@@ -219,21 +225,23 @@ async function execute(
219
225
 
220
226
  // call the relevant CRUD method on the integration class
221
227
  try {
222
- const runFn = () =>
223
- Runner.run({
224
- appId: ctx.appId,
225
- datasource,
226
- queryVerb: query.queryVerb,
227
- fields: query.fields,
228
- pagination: ctx.request.body.pagination,
229
- parameters: enrichedParameters,
230
- transformer: query.transformer,
231
- queryId: ctx.params.queryId,
232
- ctx: {
233
- user: ctx.user,
234
- auth: { ...authConfigCtx },
235
- },
236
- })
228
+ const inputs: QueryEvent = {
229
+ appId: ctx.appId,
230
+ datasource,
231
+ queryVerb: query.queryVerb,
232
+ fields: query.fields,
233
+ pagination: ctx.request.body.pagination,
234
+ parameters: enrichedParameters,
235
+ transformer: query.transformer,
236
+ queryId: ctx.params.queryId,
237
+ // have to pass down to the thread runner - can't put into context now
238
+ environmentVariables: envVars,
239
+ ctx: {
240
+ user: ctx.user,
241
+ auth: { ...authConfigCtx },
242
+ },
243
+ }
244
+ const runFn = () => Runner.run(inputs)
237
245
 
238
246
  const { rows, pagination, extra } = await quotas.addQuery(runFn, {
239
247
  datasourceId: datasource._id,
@@ -266,18 +274,18 @@ export async function executeV2(
266
274
  const removeDynamicVariables = async (queryId: any) => {
267
275
  const db = context.getAppDB()
268
276
  const query = await db.get(queryId)
269
- const datasource = await db.get(query.datasourceId)
270
- const dynamicVariables = datasource.config.dynamicVariables
277
+ const datasource = await sdk.datasources.get(query.datasourceId)
278
+ const dynamicVariables = datasource.config?.dynamicVariables as any[]
271
279
 
272
280
  if (dynamicVariables) {
273
281
  // delete dynamic variables from the datasource
274
- datasource.config.dynamicVariables = dynamicVariables.filter(
282
+ datasource.config!.dynamicVariables = dynamicVariables!.filter(
275
283
  (dv: any) => dv.queryId !== queryId
276
284
  )
277
285
  await db.put(datasource)
278
286
 
279
287
  // invalidate the deleted variables
280
- const variablesToDelete = dynamicVariables.filter(
288
+ const variablesToDelete = dynamicVariables!.filter(
281
289
  (dv: any) => dv.queryId === queryId
282
290
  )
283
291
  await invalidateDynamicVariables(variablesToDelete)
@@ -289,7 +297,7 @@ export async function destroy(ctx: any) {
289
297
  const queryId = ctx.params.queryId
290
298
  await removeDynamicVariables(queryId)
291
299
  const query = await db.get(queryId)
292
- const datasource = await db.get(query.datasourceId)
300
+ const datasource = await sdk.datasources.get(query.datasourceId)
293
301
  await db.remove(ctx.params.queryId, ctx.params.revId)
294
302
  ctx.message = `Query deleted.`
295
303
  ctx.status = 200
@@ -25,6 +25,7 @@ import { cloneDeep } from "lodash/fp"
25
25
  import { processFormulas, processDates } from "../../../utilities/rowProcessor"
26
26
  import { context } from "@budibase/backend-core"
27
27
  import { removeKeyNumbering } from "./utils"
28
+ import sdk from "../../../sdk"
28
29
 
29
30
  export interface ManyRelationship {
30
31
  tableId?: string
@@ -664,8 +665,7 @@ export class ExternalRequest {
664
665
  throw "Unable to run without a table name"
665
666
  }
666
667
  if (!this.datasource) {
667
- const db = context.getAppDB()
668
- this.datasource = await db.get(datasourceId)
668
+ this.datasource = await sdk.datasources.get(datasourceId!)
669
669
  if (!this.datasource || !this.datasource.entities) {
670
670
  throw "No tables found, fetch tables before query."
671
671
  }
@@ -681,6 +681,12 @@ export class ExternalRequest {
681
681
  config,
682
682
  table
683
683
  )
684
+ //if the sort column is a formula, remove it
685
+ for (let sortColumn of Object.keys(sort || {})) {
686
+ if (table.schema[sortColumn]?.type === "formula") {
687
+ delete sort?.[sortColumn]
688
+ }
689
+ }
684
690
  filters = buildFilters(id, filters || {}, table)
685
691
  const relationships = this.buildRelationships(table)
686
692
  // clean up row on ingress using schema
@@ -19,6 +19,9 @@ import {
19
19
  Table,
20
20
  Datasource,
21
21
  } from "@budibase/types"
22
+ import sdk from "../../../sdk"
23
+
24
+ const { cleanExportRows } = require("./utils")
22
25
 
23
26
  export async function handleRequest(
24
27
  operation: Operation,
@@ -99,7 +102,7 @@ export async function destroy(ctx: BBContext) {
99
102
  export async function bulkDestroy(ctx: BBContext) {
100
103
  const { rows } = ctx.request.body
101
104
  const tableId = ctx.params.tableId
102
- let promises = []
105
+ let promises: Promise<Row[] | { row: Row; table: Table }>[] = []
103
106
  for (let row of rows) {
104
107
  promises.push(
105
108
  handleRequest(Operation.DELETE, tableId, {
@@ -179,27 +182,30 @@ export async function validate(ctx: BBContext) {
179
182
 
180
183
  export async function exportRows(ctx: BBContext) {
181
184
  const { datasourceId } = breakExternalTableId(ctx.params.tableId)
182
- const db = context.getAppDB()
183
185
  const format = ctx.query.format
184
186
  const { columns } = ctx.request.body
185
- const datasource = await db.get(datasourceId)
187
+ const datasource = await sdk.datasources.get(datasourceId!)
186
188
  if (!datasource || !datasource.entities) {
187
189
  ctx.throw(400, "Datasource has not been configured for plus API.")
188
190
  }
189
- ctx.request.body = {
190
- query: {
191
- oneOf: {
192
- _id: ctx.request.body.rows.map(
193
- (row: string) => JSON.parse(decodeURI(row))[0]
194
- ),
191
+
192
+ if (ctx.request.body.rows) {
193
+ ctx.request.body = {
194
+ query: {
195
+ oneOf: {
196
+ _id: ctx.request.body.rows.map(
197
+ (row: string) => JSON.parse(decodeURI(row))[0]
198
+ ),
199
+ },
195
200
  },
196
- },
201
+ }
197
202
  }
198
203
 
199
204
  let result = await search(ctx)
200
205
  let rows: Row[] = []
201
206
 
202
207
  // Filter data to only specified columns if required
208
+
203
209
  if (columns && columns.length) {
204
210
  for (let i = 0; i < result.rows.length; i++) {
205
211
  rows[i] = {}
@@ -211,22 +217,26 @@ export async function exportRows(ctx: BBContext) {
211
217
  rows = result.rows
212
218
  }
213
219
 
214
- let headers = Object.keys(rows[0])
220
+ // @ts-ignore
221
+ let schema = datasource.entities[tableName].schema
222
+ let exportRows = cleanExportRows(rows, schema, format, columns)
223
+
224
+ let headers = Object.keys(schema)
225
+
215
226
  // @ts-ignore
216
227
  const exporter = exporters[format]
217
228
  const filename = `export.${format}`
218
229
 
219
230
  // send down the file
220
231
  ctx.attachment(filename)
221
- return apiFileReturn(exporter(headers, rows))
232
+ return apiFileReturn(exporter(headers, exportRows))
222
233
  }
223
234
 
224
235
  export async function fetchEnrichedRow(ctx: BBContext) {
225
236
  const id = ctx.params.rowId
226
237
  const tableId = ctx.params.tableId
227
238
  const { datasourceId, tableName } = breakExternalTableId(tableId)
228
- const db = context.getAppDB()
229
- const datasource: Datasource = await db.get(datasourceId)
239
+ const datasource: Datasource = await sdk.datasources.get(datasourceId!)
230
240
  if (!tableName) {
231
241
  ctx.throw(400, "Unable to find table.")
232
242
  }
@@ -27,7 +27,7 @@ import {
27
27
  import { cloneDeep } from "lodash/fp"
28
28
  import { context, db as dbCore } from "@budibase/backend-core"
29
29
  import { finaliseRow, updateRelatedFormula } from "./staticFormula"
30
- import * as exporters from "../view/exporters"
30
+ import { csv, json, jsonWithSchema, Format } from "../view/exporters"
31
31
  import { apiFileReturn } from "../../../utilities/fileSystem"
32
32
  import {
33
33
  Ctx,
@@ -38,6 +38,8 @@ import {
38
38
  Table,
39
39
  } from "@budibase/types"
40
40
 
41
+ const { cleanExportRows } = require("./utils")
42
+
41
43
  const CALCULATION_TYPES = {
42
44
  SUM: "sum",
43
45
  COUNT: "count",
@@ -357,6 +359,14 @@ export async function search(ctx: Ctx) {
357
359
  params.version = ctx.version
358
360
  params.tableId = tableId
359
361
 
362
+ let table
363
+ if (params.sort && !params.sortType) {
364
+ table = await db.get(tableId)
365
+ const schema = table.schema
366
+ const sortField = schema[params.sort]
367
+ params.sortType = sortField.type == "number" ? "number" : "string"
368
+ }
369
+
360
370
  let response
361
371
  if (paginate) {
362
372
  response = await paginatedSearch(query, params)
@@ -370,7 +380,7 @@ export async function search(ctx: Ctx) {
370
380
  if (tableId === InternalTables.USER_METADATA) {
371
381
  response.rows = await getGlobalUsersFromMetadata(response.rows)
372
382
  }
373
- const table = await db.get(tableId)
383
+ table = table || (await db.get(tableId))
374
384
  response.rows = await outputProcessing(table, response.rows)
375
385
  }
376
386
 
@@ -389,16 +399,25 @@ export async function exportRows(ctx: Ctx) {
389
399
  const table = await db.get(ctx.params.tableId)
390
400
  const rowIds = ctx.request.body.rows
391
401
  let format = ctx.query.format
392
- const { columns } = ctx.request.body
393
- let response = (
394
- await db.allDocs({
395
- include_docs: true,
396
- keys: rowIds,
397
- })
398
- ).rows.map(row => row.doc)
402
+ const { columns, query } = ctx.request.body
403
+
404
+ let result
405
+ if (rowIds) {
406
+ let response = (
407
+ await db.allDocs({
408
+ include_docs: true,
409
+ keys: rowIds,
410
+ })
411
+ ).rows.map(row => row.doc)
412
+
413
+ result = await outputProcessing(table, response)
414
+ } else if (query) {
415
+ let searchResponse = await exports.search(ctx)
416
+ result = searchResponse.rows
417
+ }
399
418
 
400
- let result = (await outputProcessing(table, response)) as Row[]
401
419
  let rows: Row[] = []
420
+ let schema = table.schema
402
421
 
403
422
  // Filter data to only specified columns if required
404
423
  if (columns && columns.length) {
@@ -412,14 +431,19 @@ export async function exportRows(ctx: Ctx) {
412
431
  rows = result
413
432
  }
414
433
 
415
- let headers = Object.keys(rows[0])
416
- // @ts-ignore
417
- const exporter = exporters[format]
418
- const filename = `export.${format}`
419
-
420
- // send down the file
421
- ctx.attachment(filename)
422
- return apiFileReturn(exporter(headers, rows))
434
+ let exportRows = cleanExportRows(rows, schema, format, columns)
435
+ if (format === Format.CSV) {
436
+ ctx.attachment("export.csv")
437
+ return apiFileReturn(csv(Object.keys(rows[0]), exportRows))
438
+ } else if (format === Format.JSON) {
439
+ ctx.attachment("export.json")
440
+ return apiFileReturn(json(exportRows))
441
+ } else if (format === Format.JSON_WITH_SCHEMA) {
442
+ ctx.attachment("export.json")
443
+ return apiFileReturn(jsonWithSchema(schema, exportRows))
444
+ } else {
445
+ throw "Format not recognised"
446
+ }
423
447
  }
424
448
 
425
449
  export async function fetchEnrichedRow(ctx: Ctx) {
@@ -7,7 +7,9 @@ import { BBContext, Row, Table } from "@budibase/types"
7
7
  export { removeKeyNumbering } from "../../../integrations/base/utils"
8
8
  const validateJs = require("validate.js")
9
9
  const { cloneDeep } = require("lodash/fp")
10
+ import { Format } from "../view/exporters"
10
11
  import { Ctx } from "@budibase/types"
12
+ import sdk from "../../../sdk"
11
13
 
12
14
  validateJs.extend(validateJs.validators.datetime, {
13
15
  parse: function (value: string) {
@@ -21,8 +23,7 @@ validateJs.extend(validateJs.validators.datetime, {
21
23
 
22
24
  export async function getDatasourceAndQuery(json: any) {
23
25
  const datasourceId = json.endpoint.datasourceId
24
- const db = context.getAppDB()
25
- const datasource = await db.get(datasourceId)
26
+ const datasource = await sdk.datasources.get(datasourceId)
26
27
  return makeExternalQuery(datasource, json)
27
28
  }
28
29
 
@@ -117,3 +118,40 @@ export async function validate({
117
118
  }
118
119
  return { valid: Object.keys(errors).length === 0, errors }
119
120
  }
121
+
122
+ export function cleanExportRows(
123
+ rows: any[],
124
+ schema: any,
125
+ format: string,
126
+ columns: string[]
127
+ ) {
128
+ let cleanRows = [...rows]
129
+
130
+ const relationships = Object.entries(schema)
131
+ .filter((entry: any[]) => entry[1].type === FieldTypes.LINK)
132
+ .map(entry => entry[0])
133
+
134
+ relationships.forEach(column => {
135
+ cleanRows.forEach(row => {
136
+ delete row[column]
137
+ })
138
+ delete schema[column]
139
+ })
140
+
141
+ // Intended to avoid 'undefined' in export
142
+ if (format === Format.CSV) {
143
+ const schemaKeys = Object.keys(schema)
144
+ for (let key of schemaKeys) {
145
+ if (columns?.length && columns.indexOf(key) > 0) {
146
+ continue
147
+ }
148
+ for (let row of cleanRows) {
149
+ if (row[key] == null) {
150
+ row[key] = ""
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ return cleanRows
157
+ }
@@ -1,20 +1,21 @@
1
1
  require("svelte/register")
2
2
 
3
- const send = require("koa-send")
4
- const { resolve, join } = require("../../../utilities/centralPath")
3
+ import { resolve, join } from "../../../utilities/centralPath"
5
4
  const uuid = require("uuid")
6
5
  import { ObjectStoreBuckets } from "../../../constants"
7
- const { processString } = require("@budibase/string-templates")
8
- const {
6
+ import { processString } from "@budibase/string-templates"
7
+ import {
9
8
  loadHandlebarsFile,
10
9
  NODE_MODULES_PATH,
11
10
  TOP_LEVEL_PATH,
12
- } = require("../../../utilities/fileSystem")
11
+ } from "../../../utilities/fileSystem"
13
12
  import env from "../../../environment"
14
- const { DocumentType } = require("../../../db/utils")
15
- const { context, objectStore, utils } = require("@budibase/backend-core")
16
- const AWS = require("aws-sdk")
17
- const fs = require("fs")
13
+ import { DocumentType } from "../../../db/utils"
14
+ import { context, objectStore, utils } from "@budibase/backend-core"
15
+ import AWS from "aws-sdk"
16
+ import fs from "fs"
17
+ import sdk from "../../../sdk"
18
+ const send = require("koa-send")
18
19
 
19
20
  async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
20
21
  const response = await objectStore.upload({
@@ -110,7 +111,7 @@ export const serveApp = async function (ctx: any) {
110
111
  title: appInfo.name,
111
112
  production: env.isProd(),
112
113
  appId,
113
- clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
114
+ clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
114
115
  usedPlugins: plugins,
115
116
  })
116
117
 
@@ -135,7 +136,7 @@ export const serveBuilderPreview = async function (ctx: any) {
135
136
  let appId = context.getAppId()
136
137
  const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
137
138
  ctx.body = await processString(previewHbs, {
138
- clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
139
+ clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
139
140
  })
140
141
  } else {
141
142
  // just return the app info for jest to assert on
@@ -150,13 +151,11 @@ export const serveClientLibrary = async function (ctx: any) {
150
151
  }
151
152
 
152
153
  export const getSignedUploadURL = async function (ctx: any) {
153
- const database = context.getAppDB()
154
-
155
154
  // Ensure datasource is valid
156
155
  let datasource
157
156
  try {
158
157
  const { datasourceId } = ctx.params
159
- datasource = await database.get(datasourceId)
158
+ datasource = await sdk.datasources.get(datasourceId, { enriched: true })
160
159
  if (!datasource) {
161
160
  ctx.throw(400, "The specified datasource could not be found")
162
161
  }
@@ -172,8 +171,8 @@ export const getSignedUploadURL = async function (ctx: any) {
172
171
  // Determine type of datasource and generate signed URL
173
172
  let signedUrl
174
173
  let publicUrl
175
- const awsRegion = datasource?.config?.region || "eu-west-1"
176
- if (datasource.source === "S3") {
174
+ const awsRegion = (datasource?.config?.region || "eu-west-1") as string
175
+ if (datasource?.source === "S3") {
177
176
  const { bucket, key } = ctx.request.body || {}
178
177
  if (!bucket || !key) {
179
178
  ctx.throw(400, "bucket and key values are required")
@@ -182,8 +181,8 @@ export const getSignedUploadURL = async function (ctx: any) {
182
181
  try {
183
182
  const s3 = new AWS.S3({
184
183
  region: awsRegion,
185
- accessKeyId: datasource?.config?.accessKeyId,
186
- secretAccessKey: datasource?.config?.secretAccessKey,
184
+ accessKeyId: datasource?.config?.accessKeyId as string,
185
+ secretAccessKey: datasource?.config?.secretAccessKey as string,
187
186
  apiVersion: "2006-03-01",
188
187
  signatureVersion: "v4",
189
188
  })
@@ -2,7 +2,6 @@
2
2
  export let title = ""
3
3
  export let favicon = ""
4
4
  export let metaImage = ""
5
- export let url = ""
6
5
 
7
6
  export let clientLibPath
8
7
  export let usedPlugins