@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
@@ -75,12 +75,8 @@ function checkAppName(ctx, apps, name, currentAppId) {
75
75
  ctx.throw(400, "App name is already in use.");
76
76
  }
77
77
  }
78
- function createInstance(template, includeSampleData) {
78
+ function createInstance(appId, template, includeSampleData) {
79
79
  return __awaiter(this, void 0, void 0, function* () {
80
- const tenantId = backend_core_1.tenancy.isMultiTenant() ? backend_core_1.tenancy.getTenantId() : null;
81
- const baseAppId = (0, utils_1.generateAppID)(tenantId);
82
- const appId = (0, utils_1.generateDevAppID)(baseAppId);
83
- yield backend_core_1.context.updateAppId(appId);
84
80
  const db = backend_core_1.context.getAppDB();
85
81
  yield db.put({
86
82
  _id: "_design/database",
@@ -203,77 +199,80 @@ function performAppCreate(ctx) {
203
199
  instanceConfig.file = ctx.request.files.templateFile;
204
200
  }
205
201
  const includeSampleData = (0, utilities_1.isQsTrue)(ctx.request.body.sampleData);
206
- const instance = yield createInstance(instanceConfig, includeSampleData);
207
- const appId = instance._id;
208
- const db = backend_core_1.context.getAppDB();
209
- let newApplication = {
210
- _id: utils_1.DocumentType.APP_METADATA,
211
- _rev: undefined,
212
- appId,
213
- type: "app",
214
- version: package_json_1.default.version,
215
- componentLibraries: ["@budibase/standard-components"],
216
- name: name,
217
- url: url,
218
- template: templateKey,
219
- instance,
220
- tenantId: backend_core_1.tenancy.getTenantId(),
221
- updatedAt: new Date().toISOString(),
222
- createdAt: new Date().toISOString(),
223
- status: utils_1.AppStatus.DEV,
224
- navigation: {
225
- navigation: "Top",
226
- title: name,
227
- navWidth: "Large",
228
- navBackground: "var(--spectrum-global-color-gray-100)",
229
- links: [
230
- {
231
- url: "/home",
232
- text: "Home",
233
- },
234
- ],
235
- },
236
- theme: "spectrum--light",
237
- customTheme: {
238
- buttonBorderRadius: "16px",
239
- },
240
- };
241
- // If we used a template or imported an app there will be an existing doc.
242
- // Fetch and migrate some metadata from the existing app.
243
- try {
244
- const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
245
- const keys = [
246
- "_rev",
247
- "navigation",
248
- "theme",
249
- "customTheme",
250
- "icon",
251
- ];
252
- keys.forEach(key => {
253
- if (existing[key]) {
254
- // @ts-ignore
255
- newApplication[key] = existing[key];
256
- }
257
- });
258
- // Migrate navigation settings and screens if required
259
- if (existing) {
260
- const navigation = yield migrateAppNavigation();
261
- if (navigation) {
262
- newApplication.navigation = navigation;
202
+ const tenantId = backend_core_1.tenancy.isMultiTenant() ? backend_core_1.tenancy.getTenantId() : null;
203
+ const appId = (0, utils_1.generateDevAppID)((0, utils_1.generateAppID)(tenantId));
204
+ return yield backend_core_1.context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
205
+ const instance = yield createInstance(appId, instanceConfig, includeSampleData);
206
+ const db = backend_core_1.context.getAppDB();
207
+ let newApplication = {
208
+ _id: utils_1.DocumentType.APP_METADATA,
209
+ _rev: undefined,
210
+ appId,
211
+ type: "app",
212
+ version: package_json_1.default.version,
213
+ componentLibraries: ["@budibase/standard-components"],
214
+ name: name,
215
+ url: url,
216
+ template: templateKey,
217
+ instance,
218
+ tenantId: backend_core_1.tenancy.getTenantId(),
219
+ updatedAt: new Date().toISOString(),
220
+ createdAt: new Date().toISOString(),
221
+ status: utils_1.AppStatus.DEV,
222
+ navigation: {
223
+ navigation: "Top",
224
+ title: name,
225
+ navWidth: "Large",
226
+ navBackground: "var(--spectrum-global-color-gray-100)",
227
+ links: [
228
+ {
229
+ url: "/home",
230
+ text: "Home",
231
+ },
232
+ ],
233
+ },
234
+ theme: "spectrum--light",
235
+ customTheme: {
236
+ buttonBorderRadius: "16px",
237
+ },
238
+ };
239
+ // If we used a template or imported an app there will be an existing doc.
240
+ // Fetch and migrate some metadata from the existing app.
241
+ try {
242
+ const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
243
+ const keys = [
244
+ "_rev",
245
+ "navigation",
246
+ "theme",
247
+ "customTheme",
248
+ "icon",
249
+ ];
250
+ keys.forEach(key => {
251
+ if (existing[key]) {
252
+ // @ts-ignore
253
+ newApplication[key] = existing[key];
254
+ }
255
+ });
256
+ // Migrate navigation settings and screens if required
257
+ if (existing) {
258
+ const navigation = yield migrateAppNavigation();
259
+ if (navigation) {
260
+ newApplication.navigation = navigation;
261
+ }
263
262
  }
264
263
  }
265
- }
266
- catch (err) {
267
- // Nothing to do
268
- }
269
- const response = yield db.put(newApplication, { force: true });
270
- newApplication._rev = response.rev;
271
- /* istanbul ignore next */
272
- if (!environment_1.default.isTest()) {
273
- yield (0, fileSystem_1.createApp)(appId);
274
- }
275
- yield backend_core_1.cache.app.invalidateAppMetadata(appId, newApplication);
276
- return newApplication;
264
+ catch (err) {
265
+ // Nothing to do
266
+ }
267
+ const response = yield db.put(newApplication, { force: true });
268
+ newApplication._rev = response.rev;
269
+ /* istanbul ignore next */
270
+ if (!environment_1.default.isTest()) {
271
+ yield (0, fileSystem_1.createApp)(appId);
272
+ }
273
+ yield backend_core_1.cache.app.invalidateAppMetadata(appId, newApplication);
274
+ return newApplication;
275
+ }));
277
276
  });
278
277
  }
279
278
  function creationEvents(request, app) {
@@ -99,7 +99,7 @@ function importApps(ctx) {
99
99
  if (Array.isArray(file)) {
100
100
  ctx.throw(400, "Single file is required");
101
101
  }
102
- if (file.type !== "application/gzip") {
102
+ if (file.type !== "application/gzip" && file.type !== "application/x-gzip") {
103
103
  ctx.throw(400, "Import file must be a gzipped tarball.");
104
104
  }
105
105
  // initially get all the app databases out of the tarball
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.query = exports.find = exports.destroy = exports.save = exports.update = exports.buildSchemaFromDb = exports.fetch = void 0;
13
16
  const utils_1 = require("../../db/utils");
@@ -17,6 +20,7 @@ const integrations_1 = require("../../integrations");
17
20
  const utils_2 = require("./row/utils");
18
21
  const utils_3 = require("../../threads/utils");
19
22
  const backend_core_1 = require("@budibase/backend-core");
23
+ const sdk_1 = __importDefault(require("../../sdk"));
20
24
  function fetch(ctx) {
21
25
  return __awaiter(this, void 0, void 0, function* () {
22
26
  // Get internal tables
@@ -35,12 +39,11 @@ function fetch(ctx) {
35
39
  const datasources = (yield db.allDocs((0, utils_1.getDatasourceParams)(null, {
36
40
  include_docs: true,
37
41
  }))).rows.map(row => row.doc);
38
- const allDatasources = [bbInternalDb, ...datasources];
42
+ const allDatasources = yield sdk_1.default.datasources.removeSecrets([
43
+ bbInternalDb,
44
+ ...datasources,
45
+ ]);
39
46
  for (let datasource of allDatasources) {
40
- if (datasource.config && datasource.config.auth) {
41
- // strip secrets from response so they don't show in the network request
42
- delete datasource.config.auth;
43
- }
44
47
  if (datasource.type === backend_core_1.db.BUDIBASE_DATASOURCE_TYPE) {
45
48
  datasource.entities = internal[datasource._id];
46
49
  }
@@ -52,7 +55,7 @@ exports.fetch = fetch;
52
55
  function buildSchemaFromDb(ctx) {
53
56
  return __awaiter(this, void 0, void 0, function* () {
54
57
  const db = backend_core_1.context.getAppDB();
55
- const datasource = yield db.get(ctx.params.datasourceId);
58
+ const datasource = yield sdk_1.default.datasources.get(ctx.params.datasourceId);
56
59
  const tablesFilter = ctx.request.body.tablesFilter;
57
60
  let { tables, error } = yield buildSchemaHelper(datasource);
58
61
  if (tablesFilter) {
@@ -125,18 +128,18 @@ function invalidateVariables(existingDatasource, updatedDatasource) {
125
128
  });
126
129
  }
127
130
  function update(ctx) {
128
- var _a;
131
+ var _a, _b;
129
132
  return __awaiter(this, void 0, void 0, function* () {
130
133
  const db = backend_core_1.context.getAppDB();
131
134
  const datasourceId = ctx.params.datasourceId;
132
- let datasource = yield db.get(datasourceId);
133
- const auth = datasource.config.auth;
135
+ let datasource = yield sdk_1.default.datasources.get(datasourceId);
136
+ const auth = (_a = datasource.config) === null || _a === void 0 ? void 0 : _a.auth;
134
137
  yield invalidateVariables(datasource, ctx.request.body);
135
138
  const isBudibaseSource = datasource.type === backend_core_1.db.BUDIBASE_DATASOURCE_TYPE;
136
139
  const dataSourceBody = isBudibaseSource
137
- ? { name: (_a = ctx.request.body) === null || _a === void 0 ? void 0 : _a.name }
140
+ ? { name: (_b = ctx.request.body) === null || _b === void 0 ? void 0 : _b.name }
138
141
  : ctx.request.body;
139
- datasource = Object.assign(Object.assign({}, datasource), dataSourceBody);
142
+ datasource = Object.assign(Object.assign({}, datasource), sdk_1.default.datasources.mergeConfigs(dataSourceBody, datasource));
140
143
  if (auth && !ctx.request.body.auth) {
141
144
  // don't strip auth config from DB
142
145
  datasource.config.auth = auth;
@@ -153,7 +156,9 @@ function update(ctx) {
153
156
  }
154
157
  ctx.status = 200;
155
158
  ctx.message = "Datasource saved successfully.";
156
- ctx.body = { datasource };
159
+ ctx.body = {
160
+ datasource: yield sdk_1.default.datasources.removeSecretSingle(datasource),
161
+ };
157
162
  });
158
163
  }
159
164
  exports.update = update;
@@ -180,7 +185,9 @@ function save(ctx) {
180
185
  yield source.pool.end();
181
186
  }
182
187
  }
183
- const response = { datasource };
188
+ const response = {
189
+ datasource: yield sdk_1.default.datasources.removeSecretSingle(datasource),
190
+ };
184
191
  if (schemaError) {
185
192
  response.error = schemaError;
186
193
  }
@@ -216,7 +223,7 @@ function destroy(ctx) {
216
223
  return __awaiter(this, void 0, void 0, function* () {
217
224
  const db = backend_core_1.context.getAppDB();
218
225
  const datasourceId = ctx.params.datasourceId;
219
- const datasource = yield db.get(datasourceId);
226
+ const datasource = yield sdk_1.default.datasources.get(datasourceId);
220
227
  // Delete all queries for the datasource
221
228
  if (datasource.type === backend_core_1.db.BUDIBASE_DATASOURCE_TYPE) {
222
229
  yield destroyInternalTablesBySourceId(datasourceId);
@@ -240,7 +247,8 @@ exports.destroy = destroy;
240
247
  function find(ctx) {
241
248
  return __awaiter(this, void 0, void 0, function* () {
242
249
  const database = backend_core_1.context.getAppDB();
243
- ctx.body = yield database.get(ctx.params.datasourceId);
250
+ const datasource = yield database.get(ctx.params.datasourceId);
251
+ ctx.body = yield sdk_1.default.datasources.removeSecretSingle(datasource);
244
252
  });
245
253
  }
246
254
  exports.find = find;
@@ -275,6 +283,7 @@ function updateError(error, newError, tables) {
275
283
  function buildSchemaHelper(datasource) {
276
284
  return __awaiter(this, void 0, void 0, function* () {
277
285
  const Connector = yield (0, integrations_1.getIntegration)(datasource.source);
286
+ datasource = yield sdk_1.default.datasources.enrich(datasource);
278
287
  // Connect to the DB and build the schema
279
288
  const connector = new Connector(datasource.config);
280
289
  yield connector.buildSchema(datasource._id, datasource.entities);
@@ -22,6 +22,7 @@ const utils_2 = require("../../../threads/utils");
22
22
  const environment_1 = __importDefault(require("../../../environment"));
23
23
  const pro_1 = require("@budibase/pro");
24
24
  const backend_core_1 = require("@budibase/backend-core");
25
+ const sdk_1 = __importDefault(require("../../../sdk"));
25
26
  const Runner = new threads_1.Thread(threads_1.ThreadType.QUERY, {
26
27
  timeoutMs: environment_1.default.QUERY_THREAD_TIMEOUT || 10000,
27
28
  });
@@ -84,7 +85,7 @@ function save(ctx) {
84
85
  return __awaiter(this, void 0, void 0, function* () {
85
86
  const db = backend_core_1.context.getAppDB();
86
87
  const query = ctx.request.body;
87
- const datasource = yield db.get(query.datasourceId);
88
+ const datasource = yield sdk_1.default.datasources.get(query.datasourceId);
88
89
  let eventFn;
89
90
  if (!query._id) {
90
91
  query._id = (0, utils_1.generateQueryID)(query.datasourceId);
@@ -129,15 +130,14 @@ function getAuthConfig(ctx) {
129
130
  }
130
131
  function preview(ctx) {
131
132
  return __awaiter(this, void 0, void 0, function* () {
132
- const db = backend_core_1.context.getAppDB();
133
- const datasource = yield db.get(ctx.request.body.datasourceId);
133
+ const { datasource, envVars } = yield sdk_1.default.datasources.getWithEnvVars(ctx.request.body.datasourceId);
134
134
  const query = ctx.request.body;
135
135
  // preview may not have a queryId as it hasn't been saved, but if it does
136
136
  // this stops dynamic variables from calling the same query
137
137
  const { fields, parameters, queryVerb, transformer, queryId } = query;
138
138
  const authConfigCtx = getAuthConfig(ctx);
139
139
  try {
140
- const runFn = () => Runner.run({
140
+ const inputs = {
141
141
  appId: ctx.appId,
142
142
  datasource,
143
143
  queryVerb,
@@ -145,11 +145,14 @@ function preview(ctx) {
145
145
  parameters,
146
146
  transformer,
147
147
  queryId,
148
+ // have to pass down to the thread runner - can't put into context now
149
+ environmentVariables: envVars,
148
150
  ctx: {
149
151
  user: ctx.user,
150
152
  auth: Object.assign({}, authConfigCtx),
151
153
  },
152
- });
154
+ };
155
+ const runFn = () => Runner.run(inputs);
153
156
  const { rows, keys, info, extra } = yield pro_1.quotas.addQuery(runFn, {
154
157
  datasourceId: datasource._id,
155
158
  });
@@ -199,7 +202,7 @@ function execute(ctx, opts = { rowsOnly: false, isAutomation: false }) {
199
202
  return __awaiter(this, void 0, void 0, function* () {
200
203
  const db = backend_core_1.context.getAppDB();
201
204
  const query = yield db.get(ctx.params.queryId);
202
- const datasource = yield db.get(query.datasourceId);
205
+ const { datasource, envVars } = yield sdk_1.default.datasources.getWithEnvVars(query.datasourceId);
203
206
  let authConfigCtx = {};
204
207
  if (!opts.isAutomation) {
205
208
  authConfigCtx = getAuthConfig(ctx);
@@ -215,7 +218,7 @@ function execute(ctx, opts = { rowsOnly: false, isAutomation: false }) {
215
218
  }
216
219
  // call the relevant CRUD method on the integration class
217
220
  try {
218
- const runFn = () => Runner.run({
221
+ const inputs = {
219
222
  appId: ctx.appId,
220
223
  datasource,
221
224
  queryVerb: query.queryVerb,
@@ -224,11 +227,14 @@ function execute(ctx, opts = { rowsOnly: false, isAutomation: false }) {
224
227
  parameters: enrichedParameters,
225
228
  transformer: query.transformer,
226
229
  queryId: ctx.params.queryId,
230
+ // have to pass down to the thread runner - can't put into context now
231
+ environmentVariables: envVars,
227
232
  ctx: {
228
233
  user: ctx.user,
229
234
  auth: Object.assign({}, authConfigCtx),
230
235
  },
231
- });
236
+ };
237
+ const runFn = () => Runner.run(inputs);
232
238
  const { rows, pagination, extra } = yield pro_1.quotas.addQuery(runFn, {
233
239
  datasourceId: datasource._id,
234
240
  });
@@ -261,10 +267,11 @@ function executeV2(ctx, { isAutomation } = {}) {
261
267
  }
262
268
  exports.executeV2 = executeV2;
263
269
  const removeDynamicVariables = (queryId) => __awaiter(void 0, void 0, void 0, function* () {
270
+ var _a;
264
271
  const db = backend_core_1.context.getAppDB();
265
272
  const query = yield db.get(queryId);
266
- const datasource = yield db.get(query.datasourceId);
267
- const dynamicVariables = datasource.config.dynamicVariables;
273
+ const datasource = yield sdk_1.default.datasources.get(query.datasourceId);
274
+ const dynamicVariables = (_a = datasource.config) === null || _a === void 0 ? void 0 : _a.dynamicVariables;
268
275
  if (dynamicVariables) {
269
276
  // delete dynamic variables from the datasource
270
277
  datasource.config.dynamicVariables = dynamicVariables.filter((dv) => dv.queryId !== queryId);
@@ -280,7 +287,7 @@ function destroy(ctx) {
280
287
  const queryId = ctx.params.queryId;
281
288
  yield removeDynamicVariables(queryId);
282
289
  const query = yield db.get(queryId);
283
- const datasource = yield db.get(query.datasourceId);
290
+ const datasource = yield sdk_1.default.datasources.get(query.datasourceId);
284
291
  yield db.remove(ctx.params.queryId, ctx.params.revId);
285
292
  ctx.message = `Query deleted.`;
286
293
  ctx.status = 200;
@@ -19,6 +19,9 @@ var __rest = (this && this.__rest) || function (s, e) {
19
19
  }
20
20
  return t;
21
21
  };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
22
25
  Object.defineProperty(exports, "__esModule", { value: true });
23
26
  exports.ExternalRequest = void 0;
24
27
  const types_1 = require("@budibase/types");
@@ -29,8 +32,8 @@ const utils_3 = require("../../../integrations/utils");
29
32
  const string_templates_1 = require("@budibase/string-templates");
30
33
  const fp_1 = require("lodash/fp");
31
34
  const rowProcessor_1 = require("../../../utilities/rowProcessor");
32
- const backend_core_1 = require("@budibase/backend-core");
33
35
  const utils_4 = require("./utils");
36
+ const sdk_1 = __importDefault(require("../../../sdk"));
34
37
  function buildFilters(id, filters, table) {
35
38
  const primary = table.primary;
36
39
  // if passed in array need to copy for shifting etc
@@ -562,6 +565,7 @@ class ExternalRequest {
562
565
  return fields;
563
566
  }
564
567
  run(config) {
568
+ var _a;
565
569
  return __awaiter(this, void 0, void 0, function* () {
566
570
  const { operation, tableId } = this;
567
571
  let { datasourceId, tableName } = (0, utils_3.breakExternalTableId)(tableId);
@@ -569,8 +573,7 @@ class ExternalRequest {
569
573
  throw "Unable to run without a table name";
570
574
  }
571
575
  if (!this.datasource) {
572
- const db = backend_core_1.context.getAppDB();
573
- this.datasource = yield db.get(datasourceId);
576
+ this.datasource = yield sdk_1.default.datasources.get(datasourceId);
574
577
  if (!this.datasource || !this.datasource.entities) {
575
578
  throw "No tables found, fetch tables before query.";
576
579
  }
@@ -583,6 +586,12 @@ class ExternalRequest {
583
586
  }
584
587
  // look for specific components of config which may not be considered acceptable
585
588
  let { id, row, filters, sort, paginate, rows } = cleanupConfig(config, table);
589
+ //if the sort column is a formula, remove it
590
+ for (let sortColumn of Object.keys(sort || {})) {
591
+ if (((_a = table.schema[sortColumn]) === null || _a === void 0 ? void 0 : _a.type) === "formula") {
592
+ sort === null || sort === void 0 ? true : delete sort[sortColumn];
593
+ }
594
+ }
586
595
  filters = buildFilters(id, filters || {}, table);
587
596
  const relationships = this.buildRelationships(table);
588
597
  // clean up row on ingress using schema
@@ -42,15 +42,19 @@ var __rest = (this && this.__rest) || function (s, e) {
42
42
  }
43
43
  return t;
44
44
  };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
45
48
  Object.defineProperty(exports, "__esModule", { value: true });
46
49
  exports.fetchEnrichedRow = exports.exportRows = exports.validate = exports.search = exports.bulkDestroy = exports.destroy = exports.find = exports.fetch = exports.fetchView = exports.save = exports.patch = exports.handleRequest = void 0;
47
50
  const constants_1 = require("../../../constants");
48
51
  const utils_1 = require("../../../integrations/utils");
49
52
  const ExternalRequest_1 = require("./ExternalRequest");
50
- const backend_core_1 = require("@budibase/backend-core");
51
53
  const exporters = __importStar(require("../view/exporters"));
52
54
  const fileSystem_1 = require("../../../utilities/fileSystem");
53
55
  const types_1 = require("@budibase/types");
56
+ const sdk_1 = __importDefault(require("../../../sdk"));
57
+ const { cleanExportRows } = require("./utils");
54
58
  function handleRequest(operation, tableId, opts) {
55
59
  return __awaiter(this, void 0, void 0, function* () {
56
60
  // make sure the filters are cleaned up, no empty strings for equals, fuzzy or string
@@ -222,20 +226,21 @@ exports.validate = validate;
222
226
  function exportRows(ctx) {
223
227
  return __awaiter(this, void 0, void 0, function* () {
224
228
  const { datasourceId } = (0, utils_1.breakExternalTableId)(ctx.params.tableId);
225
- const db = backend_core_1.context.getAppDB();
226
229
  const format = ctx.query.format;
227
230
  const { columns } = ctx.request.body;
228
- const datasource = yield db.get(datasourceId);
231
+ const datasource = yield sdk_1.default.datasources.get(datasourceId);
229
232
  if (!datasource || !datasource.entities) {
230
233
  ctx.throw(400, "Datasource has not been configured for plus API.");
231
234
  }
232
- ctx.request.body = {
233
- query: {
234
- oneOf: {
235
- _id: ctx.request.body.rows.map((row) => JSON.parse(decodeURI(row))[0]),
235
+ if (ctx.request.body.rows) {
236
+ ctx.request.body = {
237
+ query: {
238
+ oneOf: {
239
+ _id: ctx.request.body.rows.map((row) => JSON.parse(decodeURI(row))[0]),
240
+ },
236
241
  },
237
- },
238
- };
242
+ };
243
+ }
239
244
  let result = yield search(ctx);
240
245
  let rows = [];
241
246
  // Filter data to only specified columns if required
@@ -250,13 +255,16 @@ function exportRows(ctx) {
250
255
  else {
251
256
  rows = result.rows;
252
257
  }
253
- let headers = Object.keys(rows[0]);
258
+ // @ts-ignore
259
+ let schema = datasource.entities[tableName].schema;
260
+ let exportRows = cleanExportRows(rows, schema, format, columns);
261
+ let headers = Object.keys(schema);
254
262
  // @ts-ignore
255
263
  const exporter = exporters[format];
256
264
  const filename = `export.${format}`;
257
265
  // send down the file
258
266
  ctx.attachment(filename);
259
- return (0, fileSystem_1.apiFileReturn)(exporter(headers, rows));
267
+ return (0, fileSystem_1.apiFileReturn)(exporter(headers, exportRows));
260
268
  });
261
269
  }
262
270
  exports.exportRows = exportRows;
@@ -266,8 +274,7 @@ function fetchEnrichedRow(ctx) {
266
274
  const id = ctx.params.rowId;
267
275
  const tableId = ctx.params.tableId;
268
276
  const { datasourceId, tableName } = (0, utils_1.breakExternalTableId)(tableId);
269
- const db = backend_core_1.context.getAppDB();
270
- const datasource = yield db.get(datasourceId);
277
+ const datasource = yield sdk_1.default.datasources.get(datasourceId);
271
278
  if (!tableName) {
272
279
  ctx.throw(400, "Unable to find table.");
273
280
  }
@@ -61,8 +61,9 @@ const utils_2 = require("../view/utils");
61
61
  const fp_1 = require("lodash/fp");
62
62
  const backend_core_1 = require("@budibase/backend-core");
63
63
  const staticFormula_1 = require("./staticFormula");
64
- const exporters = __importStar(require("../view/exporters"));
64
+ const exporters_1 = require("../view/exporters");
65
65
  const fileSystem_1 = require("../../../utilities/fileSystem");
66
+ const { cleanExportRows } = require("./utils");
66
67
  const CALCULATION_TYPES = {
67
68
  SUM: "sum",
68
69
  COUNT: "count",
@@ -364,6 +365,13 @@ function search(ctx) {
364
365
  const _a = ctx.request.body, { paginate, query } = _a, params = __rest(_a, ["paginate", "query"]);
365
366
  params.version = ctx.version;
366
367
  params.tableId = tableId;
368
+ let table;
369
+ if (params.sort && !params.sortType) {
370
+ table = yield db.get(tableId);
371
+ const schema = table.schema;
372
+ const sortField = schema[params.sort];
373
+ params.sortType = sortField.type == "number" ? "number" : "string";
374
+ }
367
375
  let response;
368
376
  if (paginate) {
369
377
  response = yield (0, internalSearch_1.paginatedSearch)(query, params);
@@ -377,7 +385,7 @@ function search(ctx) {
377
385
  if (tableId === utils_1.InternalTables.USER_METADATA) {
378
386
  response.rows = yield (0, global_1.getGlobalUsersFromMetadata)(response.rows);
379
387
  }
380
- const table = yield db.get(tableId);
388
+ table = table || (yield db.get(tableId));
381
389
  response.rows = yield (0, rowProcessor_1.outputProcessing)(table, response.rows);
382
390
  }
383
391
  return response;
@@ -399,13 +407,21 @@ function exportRows(ctx) {
399
407
  const table = yield db.get(ctx.params.tableId);
400
408
  const rowIds = ctx.request.body.rows;
401
409
  let format = ctx.query.format;
402
- const { columns } = ctx.request.body;
403
- let response = (yield db.allDocs({
404
- include_docs: true,
405
- keys: rowIds,
406
- })).rows.map(row => row.doc);
407
- let result = (yield (0, rowProcessor_1.outputProcessing)(table, response));
410
+ const { columns, query } = ctx.request.body;
411
+ let result;
412
+ if (rowIds) {
413
+ let response = (yield db.allDocs({
414
+ include_docs: true,
415
+ keys: rowIds,
416
+ })).rows.map(row => row.doc);
417
+ result = yield (0, rowProcessor_1.outputProcessing)(table, response);
418
+ }
419
+ else if (query) {
420
+ let searchResponse = yield exports.search(ctx);
421
+ result = searchResponse.rows;
422
+ }
408
423
  let rows = [];
424
+ let schema = table.schema;
409
425
  // Filter data to only specified columns if required
410
426
  if (columns && columns.length) {
411
427
  for (let i = 0; i < result.length; i++) {
@@ -418,13 +434,22 @@ function exportRows(ctx) {
418
434
  else {
419
435
  rows = result;
420
436
  }
421
- let headers = Object.keys(rows[0]);
422
- // @ts-ignore
423
- const exporter = exporters[format];
424
- const filename = `export.${format}`;
425
- // send down the file
426
- ctx.attachment(filename);
427
- return (0, fileSystem_1.apiFileReturn)(exporter(headers, rows));
437
+ let exportRows = cleanExportRows(rows, schema, format, columns);
438
+ if (format === exporters_1.Format.CSV) {
439
+ ctx.attachment("export.csv");
440
+ return (0, fileSystem_1.apiFileReturn)((0, exporters_1.csv)(Object.keys(rows[0]), exportRows));
441
+ }
442
+ else if (format === exporters_1.Format.JSON) {
443
+ ctx.attachment("export.json");
444
+ return (0, fileSystem_1.apiFileReturn)((0, exporters_1.json)(exportRows));
445
+ }
446
+ else if (format === exporters_1.Format.JSON_WITH_SCHEMA) {
447
+ ctx.attachment("export.json");
448
+ return (0, fileSystem_1.apiFileReturn)((0, exporters_1.jsonWithSchema)(schema, exportRows));
449
+ }
450
+ else {
451
+ throw "Format not recognised";
452
+ }
428
453
  });
429
454
  }
430
455
  exports.exportRows = exportRows;