@budibase/server 2.2.12-alpha.5 → 2.2.12-alpha.50

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 (577) 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.22dc2872.css +6 -0
  7. package/builder/assets/{index.d930bfc5.js → index.d24b0406.js} +423 -427
  8. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  9. package/builder/index.html +2 -2
  10. package/coverage/clover.xml +5670 -5622
  11. package/coverage/coverage-final.json +282 -279
  12. package/coverage/lcov-report/index.html +458 -413
  13. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
  14. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
  15. package/coverage/lcov-report/src/api/controllers/application.ts.html +199 -178
  16. package/coverage/lcov-report/src/api/controllers/auth.ts.html +10 -10
  17. package/coverage/lcov-report/src/api/controllers/automation.ts.html +37 -37
  18. package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
  19. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +19 -19
  20. package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
  21. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +117 -93
  22. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +18 -18
  23. package/coverage/lcov-report/src/api/controllers/deploy/index.html +7 -7
  24. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +83 -83
  25. package/coverage/lcov-report/src/api/controllers/dev.ts.html +28 -28
  26. package/coverage/lcov-report/src/api/controllers/index.html +105 -105
  27. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  28. package/coverage/lcov-report/src/api/controllers/layout.ts.html +9 -9
  29. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
  30. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
  31. package/coverage/lcov-report/src/api/controllers/permission.ts.html +14 -14
  32. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +4 -4
  33. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +20 -20
  34. package/coverage/lcov-report/src/api/controllers/plugin/index.html +31 -31
  35. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +32 -32
  36. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +10 -10
  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 +4 -4
  39. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +4 -4
  40. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +31 -31
  41. package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
  49. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
  50. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
  51. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
  52. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
  53. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
  54. package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
  55. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
  63. package/coverage/lcov-report/src/api/controllers/query/index.html +16 -16
  64. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +94 -70
  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 +9 -9
  67. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  68. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +58 -40
  69. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
  70. package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
  71. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +36 -36
  72. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +155 -83
  73. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  74. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +33 -33
  75. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +153 -39
  76. package/coverage/lcov-report/src/api/controllers/screen.ts.html +12 -12
  77. package/coverage/lcov-report/src/api/controllers/script.ts.html +11 -11
  78. package/coverage/lcov-report/src/api/controllers/static/index.html +15 -15
  79. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +49 -52
  80. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +60 -60
  81. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
  82. package/coverage/lcov-report/src/api/controllers/table/index.html +48 -48
  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 +58 -61
  85. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +93 -96
  86. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  87. package/coverage/lcov-report/src/api/controllers/user.ts.html +103 -79
  88. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  89. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  90. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +57 -96
  91. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
  92. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +8 -8
  93. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
  94. package/coverage/lcov-report/src/api/index.html +15 -15
  95. package/coverage/lcov-report/src/api/index.ts.html +35 -35
  96. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  97. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  98. package/coverage/lcov-report/src/api/routes/application.ts.html +13 -13
  99. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  100. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  101. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  102. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  103. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  104. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  105. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -11
  106. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  107. package/coverage/lcov-report/src/api/routes/index.html +67 -67
  108. package/coverage/lcov-report/src/api/routes/index.ts.html +43 -37
  109. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  110. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  111. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  112. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  113. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  114. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  115. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +16 -16
  116. package/coverage/lcov-report/src/api/routes/public/index.html +24 -24
  117. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  118. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +5 -5
  119. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +12 -12
  120. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  121. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  122. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  123. package/coverage/lcov-report/src/api/routes/public/tests/index.html +7 -7
  124. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  125. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  126. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  127. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  128. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  129. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  130. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  131. package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
  132. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  133. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  134. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  135. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  136. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  137. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +13 -13
  138. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +23 -23
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +14 -14
  140. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  141. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  142. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  143. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  144. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  145. package/coverage/lcov-report/src/app.ts.html +22 -16
  146. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  147. package/coverage/lcov-report/src/automations/automationUtils.ts.html +61 -61
  148. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  149. package/coverage/lcov-report/src/automations/index.html +54 -54
  150. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  151. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  152. package/coverage/lcov-report/src/automations/logging/index.ts.html +10 -10
  153. package/coverage/lcov-report/src/automations/steps/bash.ts.html +11 -11
  154. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  155. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  156. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  157. package/coverage/lcov-report/src/automations/steps/discord.ts.html +11 -11
  158. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +9 -9
  159. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +9 -9
  160. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  161. package/coverage/lcov-report/src/automations/steps/index.html +75 -75
  162. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  163. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  164. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  165. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  166. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +9 -9
  167. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +10 -10
  168. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  169. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +9 -9
  170. package/coverage/lcov-report/src/automations/steps/utils.ts.html +12 -12
  171. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +8 -8
  172. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  173. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +24 -24
  174. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  175. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  176. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  177. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  178. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  179. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  181. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  182. package/coverage/lcov-report/src/automations/triggers.ts.html +53 -38
  183. package/coverage/lcov-report/src/automations/utils.ts.html +69 -69
  184. package/coverage/lcov-report/src/constants/index.html +19 -19
  185. package/coverage/lcov-report/src/constants/index.ts.html +80 -80
  186. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  187. package/coverage/lcov-report/src/constants/screens.ts.html +4 -4
  188. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  189. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  190. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  191. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  192. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  193. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  194. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  195. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  196. package/coverage/lcov-report/src/db/index.html +32 -32
  197. package/coverage/lcov-report/src/db/index.ts.html +10 -10
  198. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  199. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  200. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  201. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  202. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +25 -25
  203. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  204. package/coverage/lcov-report/src/db/utils.ts.html +76 -76
  205. package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
  206. package/coverage/lcov-report/src/definitions/index.html +5 -20
  207. package/coverage/lcov-report/src/environment.ts.html +16 -16
  208. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  209. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  210. package/coverage/lcov-report/src/events/index.html +20 -20
  211. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  212. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  213. package/coverage/lcov-report/src/index.html +36 -36
  214. package/coverage/lcov-report/src/index.ts.html +8 -8
  215. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  216. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  217. package/coverage/lcov-report/src/integrations/base/index.html +28 -28
  218. package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
  219. package/coverage/lcov-report/src/integrations/base/sql.ts.html +37 -37
  220. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +22 -22
  221. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/couchdb.ts.html +10 -10
  223. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
  224. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +9 -9
  225. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  226. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +41 -41
  227. package/coverage/lcov-report/src/integrations/index.html +124 -124
  228. package/coverage/lcov-report/src/integrations/index.ts.html +47 -47
  229. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  230. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  231. package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
  232. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  233. package/coverage/lcov-report/src/integrations/postgres.ts.html +22 -22
  234. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  235. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +18 -153
  236. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  237. package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
  238. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  239. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  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 +49 -49
  243. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  244. package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
  245. package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
  246. package/coverage/lcov-report/src/middleware/currentapp.ts.html +50 -47
  247. package/coverage/lcov-report/src/middleware/index.html +40 -40
  248. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  249. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  250. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  251. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  252. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  253. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +10 -10
  264. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  268. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  269. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  270. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  271. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  272. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  273. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  275. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  279. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  280. package/coverage/lcov-report/src/migrations/index.html +15 -15
  281. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  282. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  283. package/coverage/lcov-report/src/migrations/tests/index.html +6 -6
  284. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  285. package/coverage/lcov-report/src/sdk/app/applications/index.html +11 -11
  286. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  287. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +24 -24
  288. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  289. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  290. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  291. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +8 -8
  292. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  293. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  294. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +24 -24
  295. package/coverage/lcov-report/src/sdk/app/backups/index.html +27 -27
  296. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  297. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +12 -12
  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/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
  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 +8 -8
  305. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  306. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  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 +15 -15
  309. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +29 -20
  310. package/coverage/lcov-report/src/sdk/index.html +7 -7
  311. package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
  312. package/coverage/lcov-report/src/sdk/users/index.html +6 -6
  313. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  314. package/coverage/lcov-report/src/sdk/users/utils.ts.html +29 -29
  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 +40 -55
  318. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +141 -132
  319. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  320. package/coverage/lcov-report/src/tests/utilities/index.html +30 -30
  321. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  322. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +232 -43
  323. package/coverage/lcov-report/src/threads/automation.ts.html +225 -195
  324. package/coverage/lcov-report/src/threads/index.html +46 -46
  325. package/coverage/lcov-report/src/threads/index.ts.html +38 -38
  326. package/coverage/lcov-report/src/threads/query.ts.html +73 -34
  327. package/coverage/lcov-report/src/threads/utils.ts.html +26 -26
  328. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +4 -4
  329. package/coverage/lcov-report/src/utilities/centralPath.ts.html +10 -10
  330. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +11 -11
  331. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  332. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +32 -26
  333. package/coverage/lcov-report/src/utilities/fileSystem/index.html +42 -42
  334. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
  335. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +10 -13
  336. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  337. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +7 -7
  338. package/coverage/lcov-report/src/utilities/global.ts.html +61 -61
  339. package/coverage/lcov-report/src/utilities/index.html +80 -95
  340. package/coverage/lcov-report/src/utilities/index.ts.html +32 -32
  341. package/coverage/lcov-report/src/utilities/redis.ts.html +35 -35
  342. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  343. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  344. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +32 -32
  345. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +67 -67
  346. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  347. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +26 -26
  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 +8 -8
  350. package/coverage/lcov-report/src/utilities/security.ts.html +13 -13
  351. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  352. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +8 -8
  353. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  354. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  355. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +61 -34
  356. package/coverage/lcov-report/src/watch.ts.html +20 -20
  357. package/coverage/lcov-report/src/websocket.ts.html +5 -5
  358. package/coverage/lcov.info +11919 -11276
  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 +23 -13
  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 +45 -42
  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 +6 -7
  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/view/viewBuilder.js +15 -2
  377. package/dist/api/controllers/webhook.js +45 -43
  378. package/dist/api/routes/analytics.js +2 -1
  379. package/dist/api/routes/apikeys.js +2 -1
  380. package/dist/api/routes/application.js +2 -1
  381. package/dist/api/routes/auth.js +2 -1
  382. package/dist/api/routes/automation.js +2 -1
  383. package/dist/api/routes/backup.js +2 -1
  384. package/dist/api/routes/cloud.js +2 -1
  385. package/dist/api/routes/component.js +2 -1
  386. package/dist/api/routes/datasource.js +2 -1
  387. package/dist/api/routes/deploy.js +2 -1
  388. package/dist/api/routes/dev.js +2 -1
  389. package/dist/api/routes/index.js +2 -0
  390. package/dist/api/routes/integration.js +2 -1
  391. package/dist/api/routes/layout.js +2 -1
  392. package/dist/api/routes/metadata.js +2 -1
  393. package/dist/api/routes/migrations.js +2 -1
  394. package/dist/api/routes/permission.js +2 -1
  395. package/dist/api/routes/query.js +2 -1
  396. package/dist/api/routes/role.js +2 -1
  397. package/dist/api/routes/routing.js +2 -1
  398. package/dist/api/routes/row.js +2 -2
  399. package/dist/api/routes/screen.js +2 -1
  400. package/dist/api/routes/script.js +2 -1
  401. package/dist/api/routes/static.js +6 -5
  402. package/dist/api/routes/table.js +8 -38
  403. package/dist/api/routes/templates.js +2 -1
  404. package/dist/api/routes/user.js +2 -1
  405. package/dist/api/routes/utils/validators.js +1 -1
  406. package/dist/api/routes/view.js +2 -1
  407. package/dist/api/routes/webhook.js +2 -1
  408. package/dist/app.js +9 -7
  409. package/dist/automations/logging/index.js +5 -25
  410. package/dist/automations/triggers.js +1 -0
  411. package/dist/db/index.js +5 -2
  412. package/dist/db/linkedRows/LinkController.js +2 -1
  413. package/dist/db/linkedRows/LinkDocument.js +2 -1
  414. package/dist/db/newid.js +4 -2
  415. package/dist/definitions/datasource.js +0 -6
  416. package/dist/environment.js +2 -1
  417. package/dist/events/AutomationEmitter.js +2 -1
  418. package/dist/events/BudibaseEmitter.js +2 -1
  419. package/dist/events/index.js +2 -1
  420. package/dist/index.js +2 -2
  421. package/dist/integrations/base/query.js +7 -2
  422. package/dist/integrations/base/sqlTable.js +14 -14
  423. package/dist/integrations/dynamodb.js +8 -5
  424. package/dist/integrations/index.js +5 -5
  425. package/dist/integrations/mongodb.js +311 -271
  426. package/dist/integrations/mysql.js +2 -2
  427. package/dist/integrations/queries/sql.js +73 -100
  428. package/dist/integrations/rest.js +16 -18
  429. package/dist/middleware/authorized.js +2 -1
  430. package/dist/middleware/builder.js +4 -2
  431. package/dist/middleware/currentapp.js +6 -3
  432. package/dist/middleware/publicApi.js +4 -2
  433. package/dist/middleware/selfhost.js +4 -1
  434. package/dist/package.json +9 -7
  435. package/dist/sdk/app/datasources/datasources.js +147 -0
  436. package/dist/sdk/app/datasources/index.js +27 -0
  437. package/dist/sdk/app/queries/index.js +27 -0
  438. package/dist/sdk/app/queries/queries.js +60 -0
  439. package/dist/sdk/app/tables/index.js +6 -2
  440. package/dist/sdk/index.js +4 -0
  441. package/dist/sdk/utils/index.js +29 -0
  442. package/dist/startup.js +17 -17
  443. package/dist/threads/automation.js +18 -7
  444. package/dist/threads/index.js +4 -4
  445. package/dist/threads/query.js +27 -13
  446. package/dist/tsconfig.build.tsbuildinfo +1 -1
  447. package/dist/utilities/fileSystem/filesystem.js +38 -36
  448. package/dist/utilities/fileSystem/plugin.js +17 -14
  449. package/dist/utilities/fileSystem/template.js +7 -4
  450. package/dist/utilities/schema.js +108 -0
  451. package/dist/utilities/scriptRunner.js +2 -1
  452. package/dist/utilities/statusCodes.js +2 -1
  453. package/dist/utilities/workerRequests.js +2 -0
  454. package/dist/watch.js +2 -25
  455. package/jest.config.ts +5 -2
  456. package/package.json +10 -8
  457. package/scripts/dev/manage.js +1 -0
  458. package/src/api/controllers/application.ts +81 -74
  459. package/src/api/controllers/cloud.ts +1 -1
  460. package/src/api/controllers/datasource.ts +33 -25
  461. package/src/api/controllers/query/index.ts +49 -41
  462. package/src/api/controllers/row/ExternalRequest.ts +8 -2
  463. package/src/api/controllers/row/external.ts +24 -14
  464. package/src/api/controllers/row/internal.ts +42 -18
  465. package/src/api/controllers/row/utils.ts +40 -2
  466. package/src/api/controllers/static/index.ts +18 -19
  467. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  468. package/src/api/controllers/table/external.ts +18 -16
  469. package/src/api/controllers/table/index.ts +46 -17
  470. package/src/api/controllers/table/internal.ts +6 -7
  471. package/src/api/controllers/table/utils.ts +12 -13
  472. package/src/api/controllers/user.ts +21 -13
  473. package/src/api/controllers/view/exporters.ts +20 -5
  474. package/src/api/controllers/view/index.ts +22 -35
  475. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  476. package/src/api/controllers/view/viewBuilder.ts +1 -1
  477. package/src/api/controllers/webhook.ts +48 -46
  478. package/src/api/routes/analytics.ts +1 -1
  479. package/src/api/routes/apikeys.ts +1 -1
  480. package/src/api/routes/application.ts +1 -1
  481. package/src/api/routes/auth.ts +1 -1
  482. package/src/api/routes/automation.ts +1 -1
  483. package/src/api/routes/backup.ts +1 -1
  484. package/src/api/routes/cloud.ts +1 -1
  485. package/src/api/routes/component.ts +1 -1
  486. package/src/api/routes/datasource.ts +1 -1
  487. package/src/api/routes/deploy.ts +1 -1
  488. package/src/api/routes/dev.ts +1 -1
  489. package/src/api/routes/index.ts +2 -0
  490. package/src/api/routes/integration.ts +1 -1
  491. package/src/api/routes/layout.ts +1 -1
  492. package/src/api/routes/metadata.ts +1 -1
  493. package/src/api/routes/migrations.ts +1 -1
  494. package/src/api/routes/permission.ts +1 -1
  495. package/src/api/routes/query.ts +1 -1
  496. package/src/api/routes/role.ts +1 -1
  497. package/src/api/routes/routing.ts +1 -1
  498. package/src/api/routes/row.ts +1 -1
  499. package/src/api/routes/screen.ts +1 -1
  500. package/src/api/routes/script.ts +1 -1
  501. package/src/api/routes/static.ts +2 -2
  502. package/src/api/routes/table.ts +16 -39
  503. package/src/api/routes/templates.ts +1 -1
  504. package/src/api/routes/tests/datasource.spec.ts +35 -1
  505. package/src/api/routes/tests/misc.spec.js +4 -10
  506. package/src/api/routes/tests/plugin.spec.ts +10 -10
  507. package/src/api/routes/tests/table.spec.js +8 -30
  508. package/src/api/routes/tests/user.spec.js +20 -1
  509. package/src/api/routes/tests/utilities/TestFunctions.ts +1 -1
  510. package/src/api/routes/user.ts +1 -1
  511. package/src/api/routes/utils/validators.ts +1 -1
  512. package/src/api/routes/view.ts +1 -1
  513. package/src/api/routes/webhook.ts +1 -1
  514. package/src/app.ts +5 -3
  515. package/src/automations/logging/index.ts +1 -1
  516. package/src/automations/tests/loop.spec.ts +45 -0
  517. package/src/automations/triggers.ts +6 -1
  518. package/src/db/index.ts +1 -1
  519. package/src/db/linkedRows/LinkController.ts +1 -1
  520. package/src/db/linkedRows/LinkDocument.ts +1 -1
  521. package/src/db/newid.ts +1 -1
  522. package/src/db/tests/linkController.spec.js +1 -1
  523. package/src/definitions/automations.ts +1 -0
  524. package/src/definitions/datasource.ts +0 -41
  525. package/src/environment.ts +1 -1
  526. package/src/events/AutomationEmitter.ts +1 -1
  527. package/src/events/BudibaseEmitter.ts +1 -1
  528. package/src/events/index.ts +1 -1
  529. package/src/index.ts +1 -1
  530. package/src/integrations/base/query.ts +3 -1
  531. package/src/integrations/base/sqlTable.ts +1 -1
  532. package/src/integrations/dynamodb.ts +3 -3
  533. package/src/integrations/index.ts +4 -4
  534. package/src/integrations/mongodb.ts +315 -271
  535. package/src/integrations/mysql.ts +1 -1
  536. package/src/integrations/queries/sql.ts +5 -50
  537. package/src/integrations/rest.ts +16 -19
  538. package/src/integrations/tests/rest.spec.ts +19 -15
  539. package/src/middleware/authorized.ts +5 -1
  540. package/src/middleware/builder.ts +1 -1
  541. package/src/middleware/currentapp.ts +4 -3
  542. package/src/middleware/publicApi.ts +1 -1
  543. package/src/middleware/selfhost.ts +1 -1
  544. package/src/middleware/tests/authorized.spec.js +1 -1
  545. package/src/middleware/tests/currentapp.spec.js +1 -1
  546. package/src/middleware/tests/selfhost.spec.js +1 -1
  547. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  548. package/src/sdk/app/datasources/datasources.ts +136 -0
  549. package/src/sdk/app/datasources/index.ts +5 -0
  550. package/src/sdk/app/queries/index.ts +5 -0
  551. package/src/sdk/app/queries/queries.ts +50 -0
  552. package/src/sdk/app/tables/index.ts +6 -3
  553. package/src/sdk/index.ts +4 -0
  554. package/src/sdk/utils/index.ts +16 -0
  555. package/src/startup.ts +3 -8
  556. package/src/tests/jestEnv.ts +13 -0
  557. package/src/tests/jestSetup.ts +0 -14
  558. package/src/tests/utilities/TestConfiguration.ts +16 -13
  559. package/src/tests/utilities/structures.ts +65 -2
  560. package/src/threads/automation.ts +18 -8
  561. package/src/threads/definitions.ts +3 -0
  562. package/src/threads/index.ts +1 -1
  563. package/src/threads/query.ts +28 -15
  564. package/src/utilities/fileSystem/filesystem.ts +7 -5
  565. package/src/utilities/fileSystem/plugin.ts +3 -4
  566. package/src/utilities/fileSystem/template.ts +2 -2
  567. package/src/utilities/schema.ts +141 -0
  568. package/src/utilities/scriptRunner.ts +1 -1
  569. package/src/utilities/statusCodes.ts +1 -1
  570. package/src/utilities/workerRequests.ts +10 -1
  571. package/src/watch.ts +1 -1
  572. package/tsconfig.json +2 -1
  573. package/builder/assets/index.fa480d5b.css +0 -6
  574. package/dist/utilities/csvParser.js +0 -152
  575. package/src/utilities/csvParser.ts +0 -161
  576. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  577. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -112,12 +112,11 @@ function checkAppName(
112
112
  }
113
113
  }
114
114
 
115
- async function createInstance(template: any, includeSampleData: boolean) {
116
- const tenantId = tenancy.isMultiTenant() ? tenancy.getTenantId() : null
117
- const baseAppId = generateAppID(tenantId)
118
- const appId = generateDevAppID(baseAppId)
119
- await context.updateAppId(appId)
120
-
115
+ async function createInstance(
116
+ appId: string,
117
+ template: any,
118
+ includeSampleData: boolean
119
+ ) {
121
120
  const db = context.getAppDB()
122
121
  await db.put({
123
122
  _id: "_design/database",
@@ -250,82 +249,90 @@ async function performAppCreate(ctx: BBContext) {
250
249
  instanceConfig.file = ctx.request.files.templateFile
251
250
  }
252
251
  const includeSampleData = isQsTrue(ctx.request.body.sampleData)
253
- const instance = await createInstance(instanceConfig, includeSampleData)
254
- const appId = instance._id
255
- const db = context.getAppDB()
252
+ const tenantId = tenancy.isMultiTenant() ? tenancy.getTenantId() : null
253
+ const appId = generateDevAppID(generateAppID(tenantId))
256
254
 
257
- let newApplication: App = {
258
- _id: DocumentType.APP_METADATA,
259
- _rev: undefined,
260
- appId,
261
- type: "app",
262
- version: packageJson.version,
263
- componentLibraries: ["@budibase/standard-components"],
264
- name: name,
265
- url: url,
266
- template: templateKey,
267
- instance,
268
- tenantId: tenancy.getTenantId(),
269
- updatedAt: new Date().toISOString(),
270
- createdAt: new Date().toISOString(),
271
- status: AppStatus.DEV,
272
- navigation: {
273
- navigation: "Top",
274
- title: name,
275
- navWidth: "Large",
276
- navBackground: "var(--spectrum-global-color-gray-100)",
277
- links: [
278
- {
279
- url: "/home",
280
- text: "Home",
281
- },
282
- ],
283
- },
284
- theme: "spectrum--light",
285
- customTheme: {
286
- buttonBorderRadius: "16px",
287
- },
288
- }
255
+ return await context.doInAppContext(appId, async () => {
256
+ const instance = await createInstance(
257
+ appId,
258
+ instanceConfig,
259
+ includeSampleData
260
+ )
261
+ const db = context.getAppDB()
289
262
 
290
- // If we used a template or imported an app there will be an existing doc.
291
- // Fetch and migrate some metadata from the existing app.
292
- try {
293
- const existing: App = await db.get(DocumentType.APP_METADATA)
294
- const keys: (keyof App)[] = [
295
- "_rev",
296
- "navigation",
297
- "theme",
298
- "customTheme",
299
- "icon",
300
- ]
301
- keys.forEach(key => {
302
- if (existing[key]) {
303
- // @ts-ignore
304
- newApplication[key] = existing[key]
305
- }
306
- })
263
+ let newApplication: App = {
264
+ _id: DocumentType.APP_METADATA,
265
+ _rev: undefined,
266
+ appId,
267
+ type: "app",
268
+ version: packageJson.version,
269
+ componentLibraries: ["@budibase/standard-components"],
270
+ name: name,
271
+ url: url,
272
+ template: templateKey,
273
+ instance,
274
+ tenantId: tenancy.getTenantId(),
275
+ updatedAt: new Date().toISOString(),
276
+ createdAt: new Date().toISOString(),
277
+ status: AppStatus.DEV,
278
+ navigation: {
279
+ navigation: "Top",
280
+ title: name,
281
+ navWidth: "Large",
282
+ navBackground: "var(--spectrum-global-color-gray-100)",
283
+ links: [
284
+ {
285
+ url: "/home",
286
+ text: "Home",
287
+ },
288
+ ],
289
+ },
290
+ theme: "spectrum--light",
291
+ customTheme: {
292
+ buttonBorderRadius: "16px",
293
+ },
294
+ }
295
+
296
+ // If we used a template or imported an app there will be an existing doc.
297
+ // Fetch and migrate some metadata from the existing app.
298
+ try {
299
+ const existing: App = await db.get(DocumentType.APP_METADATA)
300
+ const keys: (keyof App)[] = [
301
+ "_rev",
302
+ "navigation",
303
+ "theme",
304
+ "customTheme",
305
+ "icon",
306
+ ]
307
+ keys.forEach(key => {
308
+ if (existing[key]) {
309
+ // @ts-ignore
310
+ newApplication[key] = existing[key]
311
+ }
312
+ })
307
313
 
308
- // Migrate navigation settings and screens if required
309
- if (existing) {
310
- const navigation = await migrateAppNavigation()
311
- if (navigation) {
312
- newApplication.navigation = navigation
314
+ // Migrate navigation settings and screens if required
315
+ if (existing) {
316
+ const navigation = await migrateAppNavigation()
317
+ if (navigation) {
318
+ newApplication.navigation = navigation
319
+ }
313
320
  }
321
+ } catch (err) {
322
+ // Nothing to do
314
323
  }
315
- } catch (err) {
316
- // Nothing to do
317
- }
318
324
 
319
- const response = await db.put(newApplication, { force: true })
320
- newApplication._rev = response.rev
325
+ const response = await db.put(newApplication, { force: true })
326
+ newApplication._rev = response.rev
321
327
 
322
- /* istanbul ignore next */
323
- if (!env.isTest()) {
324
- await createApp(appId)
325
- }
328
+ /* istanbul ignore next */
329
+ if (!env.isTest()) {
330
+ await createApp(appId)
331
+ }
326
332
 
327
- await cache.app.invalidateAppMetadata(appId, newApplication)
328
- return newApplication
333
+ await cache.app.invalidateAppMetadata(appId, newApplication)
334
+ return newApplication
335
+ })
329
336
  }
330
337
 
331
338
  async function creationEvents(request: any, app: App) {
@@ -86,7 +86,7 @@ export async function importApps(ctx: Ctx) {
86
86
  if (Array.isArray(file)) {
87
87
  ctx.throw(400, "Single file is required")
88
88
  }
89
- if (file.type !== "application/gzip") {
89
+ if (file.type !== "application/gzip" && file.type !== "application/x-gzip") {
90
90
  ctx.throw(400, "Import file must be a gzipped tarball.")
91
91
  }
92
92
 
@@ -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)
@@ -4,12 +4,14 @@ import { Thread, ThreadType } from "../../../threads"
4
4
  import { save as saveDatasource } from "../datasource"
5
5
  import { RestImporter } from "./import"
6
6
  import { invalidateDynamicVariables } from "../../../threads/utils"
7
- import { QUERY_THREAD_TIMEOUT } from "../../../environment"
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
- timeoutMs: QUERY_THREAD_TIMEOUT || 10000,
14
+ timeoutMs: env.QUERY_THREAD_TIMEOUT || 10000,
13
15
  })
14
16
 
15
17
  // simple function to append "readable" to all read queries
@@ -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
  }