@budibase/server 2.2.12-alpha.47 → 2.2.12-alpha.49

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 (371) hide show
  1. package/builder/assets/{index.1abbc09d.js → index.1d6d51b0.js} +294 -294
  2. package/builder/assets/{index.cd9a1fa6.css → index.401c667d.css} +1 -1
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +516 -477
  5. package/coverage/coverage-final.json +7 -8
  6. package/coverage/lcov-report/index.html +48 -48
  7. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +1 -1
  8. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +1 -1
  9. package/coverage/lcov-report/src/api/controllers/application.ts.html +1 -1
  10. package/coverage/lcov-report/src/api/controllers/auth.ts.html +1 -1
  11. package/coverage/lcov-report/src/api/controllers/automation.ts.html +1 -1
  12. package/coverage/lcov-report/src/api/controllers/backup.ts.html +1 -1
  13. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +1 -1
  14. package/coverage/lcov-report/src/api/controllers/component.ts.html +1 -1
  15. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +1 -1
  16. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +1 -1
  17. package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
  18. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +1 -1
  19. package/coverage/lcov-report/src/api/controllers/dev.ts.html +1 -1
  20. package/coverage/lcov-report/src/api/controllers/index.html +1 -1
  21. package/coverage/lcov-report/src/api/controllers/integration.ts.html +1 -1
  22. package/coverage/lcov-report/src/api/controllers/layout.ts.html +1 -1
  23. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +1 -1
  24. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +1 -1
  25. package/coverage/lcov-report/src/api/controllers/permission.ts.html +1 -1
  26. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +1 -1
  27. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +1 -1
  28. package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
  29. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +1 -1
  30. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +1 -1
  31. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +1 -1
  32. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +1 -1
  33. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +1 -1
  34. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +1 -1
  35. package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
  36. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +1 -1
  37. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +1 -1
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +1 -1
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +1 -1
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +1 -1
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +1 -1
  43. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +1 -1
  44. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +1 -1
  45. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +1 -1
  46. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +1 -1
  47. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +1 -1
  48. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  49. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +1 -1
  50. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  51. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +1 -1
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +1 -1
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +1 -1
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +1 -1
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/index.html +1 -1
  58. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +1 -1
  59. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +1 -1
  60. package/coverage/lcov-report/src/api/controllers/role.ts.html +1 -1
  61. package/coverage/lcov-report/src/api/controllers/routing.ts.html +1 -1
  62. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +1 -1
  63. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +50 -17
  64. package/coverage/lcov-report/src/api/controllers/row/index.html +34 -34
  65. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +1 -1
  66. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +90 -21
  67. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +1 -1
  68. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +1 -1
  69. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +124 -10
  70. package/coverage/lcov-report/src/api/controllers/screen.ts.html +1 -1
  71. package/coverage/lcov-report/src/api/controllers/script.ts.html +1 -1
  72. package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
  73. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +1 -1
  74. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +1 -1
  75. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +1 -1
  76. package/coverage/lcov-report/src/api/controllers/table/index.html +1 -1
  77. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +1 -1
  78. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +1 -1
  79. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1 -1
  80. package/coverage/lcov-report/src/api/controllers/templates.ts.html +1 -1
  81. package/coverage/lcov-report/src/api/controllers/user.ts.html +1 -1
  82. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +2 -2
  83. package/coverage/lcov-report/src/api/controllers/view/index.html +19 -19
  84. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +16 -82
  85. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +1 -1
  86. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +1 -1
  87. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +1 -1
  88. package/coverage/lcov-report/src/api/index.html +1 -1
  89. package/coverage/lcov-report/src/api/index.ts.html +1 -1
  90. package/coverage/lcov-report/src/api/routes/analytics.ts.html +1 -1
  91. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +1 -1
  92. package/coverage/lcov-report/src/api/routes/application.ts.html +1 -1
  93. package/coverage/lcov-report/src/api/routes/auth.ts.html +1 -1
  94. package/coverage/lcov-report/src/api/routes/automation.ts.html +1 -1
  95. package/coverage/lcov-report/src/api/routes/backup.ts.html +1 -1
  96. package/coverage/lcov-report/src/api/routes/cloud.ts.html +1 -1
  97. package/coverage/lcov-report/src/api/routes/component.ts.html +1 -1
  98. package/coverage/lcov-report/src/api/routes/datasource.ts.html +1 -1
  99. package/coverage/lcov-report/src/api/routes/deploy.ts.html +1 -1
  100. package/coverage/lcov-report/src/api/routes/dev.ts.html +1 -1
  101. package/coverage/lcov-report/src/api/routes/index.html +1 -1
  102. package/coverage/lcov-report/src/api/routes/index.ts.html +1 -1
  103. package/coverage/lcov-report/src/api/routes/integration.ts.html +1 -1
  104. package/coverage/lcov-report/src/api/routes/layout.ts.html +1 -1
  105. package/coverage/lcov-report/src/api/routes/metadata.ts.html +1 -1
  106. package/coverage/lcov-report/src/api/routes/migrations.ts.html +1 -1
  107. package/coverage/lcov-report/src/api/routes/permission.ts.html +1 -1
  108. package/coverage/lcov-report/src/api/routes/plugin.ts.html +1 -1
  109. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +1 -1
  110. package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
  111. package/coverage/lcov-report/src/api/routes/public/index.ts.html +1 -1
  112. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
  113. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +1 -1
  114. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +1 -1
  115. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +1 -1
  116. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +1 -1
  117. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  118. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  119. package/coverage/lcov-report/src/api/routes/public/users.ts.html +1 -1
  120. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +1 -1
  121. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  122. package/coverage/lcov-report/src/api/routes/query.ts.html +1 -1
  123. package/coverage/lcov-report/src/api/routes/role.ts.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/routing.ts.html +1 -1
  125. package/coverage/lcov-report/src/api/routes/row.ts.html +1 -1
  126. package/coverage/lcov-report/src/api/routes/screen.ts.html +1 -1
  127. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  128. package/coverage/lcov-report/src/api/routes/static.ts.html +1 -1
  129. package/coverage/lcov-report/src/api/routes/table.ts.html +1 -1
  130. package/coverage/lcov-report/src/api/routes/templates.ts.html +1 -1
  131. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +1 -1
  132. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +1 -1
  134. package/coverage/lcov-report/src/api/routes/user.ts.html +1 -1
  135. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  136. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +1 -1
  137. package/coverage/lcov-report/src/api/routes/view.ts.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/webhook.ts.html +1 -1
  139. package/coverage/lcov-report/src/app.ts.html +1 -1
  140. package/coverage/lcov-report/src/automations/actions.ts.html +1 -1
  141. package/coverage/lcov-report/src/automations/automationUtils.ts.html +1 -1
  142. package/coverage/lcov-report/src/automations/bullboard.ts.html +1 -1
  143. package/coverage/lcov-report/src/automations/index.html +1 -1
  144. package/coverage/lcov-report/src/automations/index.ts.html +1 -1
  145. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  146. package/coverage/lcov-report/src/automations/logging/index.ts.html +1 -1
  147. package/coverage/lcov-report/src/automations/steps/bash.ts.html +1 -1
  148. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +1 -1
  149. package/coverage/lcov-report/src/automations/steps/delay.ts.html +1 -1
  150. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +1 -1
  151. package/coverage/lcov-report/src/automations/steps/discord.ts.html +1 -1
  152. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +1 -1
  153. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +1 -1
  154. package/coverage/lcov-report/src/automations/steps/filter.ts.html +1 -1
  155. package/coverage/lcov-report/src/automations/steps/index.html +1 -1
  156. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +1 -1
  157. package/coverage/lcov-report/src/automations/steps/loop.ts.html +1 -1
  158. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +1 -1
  159. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +1 -1
  160. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +1 -1
  161. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +1 -1
  162. package/coverage/lcov-report/src/automations/steps/slack.ts.html +1 -1
  163. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +1 -1
  164. package/coverage/lcov-report/src/automations/steps/utils.ts.html +1 -1
  165. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +1 -1
  166. package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
  167. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +1 -1
  168. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +1 -1
  169. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +1 -1
  170. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  171. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +1 -1
  172. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +1 -1
  173. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +1 -1
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +1 -1
  175. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +1 -1
  176. package/coverage/lcov-report/src/automations/triggers.ts.html +1 -1
  177. package/coverage/lcov-report/src/automations/utils.ts.html +1 -1
  178. package/coverage/lcov-report/src/constants/index.html +1 -1
  179. package/coverage/lcov-report/src/constants/index.ts.html +1 -1
  180. package/coverage/lcov-report/src/constants/layouts.ts.html +1 -1
  181. package/coverage/lcov-report/src/constants/screens.ts.html +1 -1
  182. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +1 -1
  183. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +1 -1
  184. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +1 -1
  185. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  186. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +1 -1
  187. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +1 -1
  188. package/coverage/lcov-report/src/db/dynamoClient.ts.html +1 -1
  189. package/coverage/lcov-report/src/db/inMemoryView.ts.html +1 -1
  190. package/coverage/lcov-report/src/db/index.html +1 -1
  191. package/coverage/lcov-report/src/db/index.ts.html +1 -1
  192. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +1 -1
  193. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +1 -1
  194. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  195. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +1 -1
  196. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +1 -1
  197. package/coverage/lcov-report/src/db/newid.ts.html +1 -1
  198. package/coverage/lcov-report/src/db/utils.ts.html +1 -1
  199. package/coverage/lcov-report/src/definitions/automations.ts.html +1 -1
  200. package/coverage/lcov-report/src/definitions/index.html +5 -20
  201. package/coverage/lcov-report/src/environment.ts.html +1 -1
  202. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +1 -1
  203. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +1 -1
  204. package/coverage/lcov-report/src/events/index.html +1 -1
  205. package/coverage/lcov-report/src/events/index.ts.html +1 -1
  206. package/coverage/lcov-report/src/events/utils.ts.html +1 -1
  207. package/coverage/lcov-report/src/index.html +1 -1
  208. package/coverage/lcov-report/src/index.ts.html +1 -1
  209. package/coverage/lcov-report/src/integrations/airtable.ts.html +1 -1
  210. package/coverage/lcov-report/src/integrations/arangodb.ts.html +1 -1
  211. package/coverage/lcov-report/src/integrations/base/index.html +1 -1
  212. package/coverage/lcov-report/src/integrations/base/query.ts.html +1 -1
  213. package/coverage/lcov-report/src/integrations/base/sql.ts.html +1 -1
  214. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +1 -1
  215. package/coverage/lcov-report/src/integrations/base/utils.ts.html +1 -1
  216. package/coverage/lcov-report/src/integrations/couchdb.ts.html +1 -1
  217. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +1 -1
  218. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +1 -1
  219. package/coverage/lcov-report/src/integrations/firebase.ts.html +1 -1
  220. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1 -1
  221. package/coverage/lcov-report/src/integrations/index.html +10 -10
  222. package/coverage/lcov-report/src/integrations/index.ts.html +1 -1
  223. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1 -1
  224. package/coverage/lcov-report/src/integrations/mongodb.ts.html +1 -1
  225. package/coverage/lcov-report/src/integrations/mysql.ts.html +1 -1
  226. package/coverage/lcov-report/src/integrations/oracle.ts.html +1 -1
  227. package/coverage/lcov-report/src/integrations/postgres.ts.html +1 -1
  228. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  229. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +1 -1
  230. package/coverage/lcov-report/src/integrations/redis.ts.html +1 -1
  231. package/coverage/lcov-report/src/integrations/rest.ts.html +15 -24
  232. package/coverage/lcov-report/src/integrations/s3.ts.html +1 -1
  233. package/coverage/lcov-report/src/integrations/snowflake.ts.html +1 -1
  234. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  235. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  236. package/coverage/lcov-report/src/integrations/utils.ts.html +1 -1
  237. package/coverage/lcov-report/src/middleware/appInfo.ts.html +1 -1
  238. package/coverage/lcov-report/src/middleware/authorized.ts.html +1 -1
  239. package/coverage/lcov-report/src/middleware/builder.ts.html +1 -1
  240. package/coverage/lcov-report/src/middleware/currentapp.ts.html +1 -1
  241. package/coverage/lcov-report/src/middleware/index.html +1 -1
  242. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  243. package/coverage/lcov-report/src/middleware/publicApi.ts.html +1 -1
  244. package/coverage/lcov-report/src/middleware/resourceId.ts.html +1 -1
  245. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  246. package/coverage/lcov-report/src/middleware/utils.ts.html +1 -1
  247. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +1 -1
  248. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +1 -1
  249. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +1 -1
  250. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +1 -1
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +1 -1
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +1 -1
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +1 -1
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +1 -1
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +1 -1
  257. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +1 -1
  258. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  259. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +1 -1
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +1 -1
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +1 -1
  262. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  263. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +1 -1
  264. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +1 -1
  265. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  266. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +1 -1
  267. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +1 -1
  268. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +1 -1
  270. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +1 -1
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +1 -1
  273. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +1 -1
  274. package/coverage/lcov-report/src/migrations/index.html +1 -1
  275. package/coverage/lcov-report/src/migrations/index.ts.html +1 -1
  276. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  277. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  278. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  279. package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
  280. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +1 -1
  281. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +1 -1
  282. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +1 -1
  283. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  284. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +1 -1
  285. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +1 -1
  286. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +1 -1
  287. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +1 -1
  288. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +1 -1
  289. package/coverage/lcov-report/src/sdk/app/backups/index.html +1 -1
  290. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +1 -1
  291. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +1 -1
  292. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +143 -29
  293. package/coverage/lcov-report/src/sdk/app/datasources/index.html +21 -21
  294. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +1 -1
  295. package/coverage/lcov-report/src/sdk/app/queries/index.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +1 -1
  297. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +1 -1
  298. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +1 -1
  299. package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
  300. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +1 -1
  301. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +1 -1
  302. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  303. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +1 -1
  304. package/coverage/lcov-report/src/sdk/index.html +1 -1
  305. package/coverage/lcov-report/src/sdk/index.ts.html +1 -1
  306. package/coverage/lcov-report/src/sdk/users/index.html +1 -1
  307. package/coverage/lcov-report/src/sdk/users/index.ts.html +1 -1
  308. package/coverage/lcov-report/src/sdk/users/utils.ts.html +1 -1
  309. package/coverage/lcov-report/src/sdk/utils/index.html +1 -1
  310. package/coverage/lcov-report/src/sdk/utils/index.ts.html +1 -1
  311. package/coverage/lcov-report/src/startup.ts.html +1 -1
  312. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +1 -1
  313. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +1 -1
  314. package/coverage/lcov-report/src/tests/utilities/index.html +1 -1
  315. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  316. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +1 -1
  317. package/coverage/lcov-report/src/threads/automation.ts.html +1 -1
  318. package/coverage/lcov-report/src/threads/index.html +1 -1
  319. package/coverage/lcov-report/src/threads/index.ts.html +1 -1
  320. package/coverage/lcov-report/src/threads/query.ts.html +1 -1
  321. package/coverage/lcov-report/src/threads/utils.ts.html +1 -1
  322. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +1 -1
  323. package/coverage/lcov-report/src/utilities/centralPath.ts.html +1 -1
  324. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +1 -1
  325. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +1 -1
  326. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +1 -1
  327. package/coverage/lcov-report/src/utilities/fileSystem/index.html +1 -1
  328. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
  329. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +1 -1
  330. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  331. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +1 -1
  332. package/coverage/lcov-report/src/utilities/global.ts.html +1 -1
  333. package/coverage/lcov-report/src/utilities/index.html +1 -1
  334. package/coverage/lcov-report/src/utilities/index.ts.html +1 -1
  335. package/coverage/lcov-report/src/utilities/redis.ts.html +1 -1
  336. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  337. package/coverage/lcov-report/src/utilities/routing/index.ts.html +1 -1
  338. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
  339. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +1 -1
  340. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +1 -1
  341. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +1 -1
  342. package/coverage/lcov-report/src/utilities/schema.ts.html +1 -1
  343. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +1 -1
  344. package/coverage/lcov-report/src/utilities/security.ts.html +1 -1
  345. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  346. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +1 -1
  347. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  348. package/coverage/lcov-report/src/utilities/users.ts.html +1 -1
  349. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +1 -1
  350. package/coverage/lcov-report/src/watch.ts.html +1 -1
  351. package/coverage/lcov-report/src/websocket.ts.html +1 -1
  352. package/coverage/lcov.info +885 -822
  353. package/dist/api/controllers/row/external.js +14 -8
  354. package/dist/api/controllers/row/internal.js +30 -9
  355. package/dist/api/controllers/row/utils.js +30 -1
  356. package/dist/api/controllers/view/index.js +5 -26
  357. package/dist/definitions/datasource.js +0 -6
  358. package/dist/integrations/rest.js +2 -4
  359. package/dist/package.json +6 -6
  360. package/dist/sdk/app/datasources/datasources.js +46 -12
  361. package/dist/tsconfig.build.tsbuildinfo +1 -1
  362. package/package.json +7 -7
  363. package/src/api/controllers/row/external.ts +21 -10
  364. package/src/api/controllers/row/internal.ts +35 -12
  365. package/src/api/controllers/row/utils.ts +38 -0
  366. package/src/api/controllers/view/index.ts +5 -27
  367. package/src/definitions/datasource.ts +0 -41
  368. package/src/integrations/rest.ts +8 -11
  369. package/src/integrations/tests/rest.spec.ts +4 -2
  370. package/src/sdk/app/datasources/datasources.ts +50 -12
  371. package/coverage/lcov-report/src/definitions/datasource.ts.html +0 -235
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.2.12-alpha.47",
4
+ "version": "2.2.12-alpha.49",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -43,11 +43,11 @@
43
43
  "license": "GPL-3.0",
44
44
  "dependencies": {
45
45
  "@apidevtools/swagger-parser": "10.0.3",
46
- "@budibase/backend-core": "2.2.12-alpha.47",
47
- "@budibase/client": "2.2.12-alpha.47",
48
- "@budibase/pro": "2.2.12-alpha.46",
49
- "@budibase/string-templates": "2.2.12-alpha.47",
50
- "@budibase/types": "2.2.12-alpha.47",
46
+ "@budibase/backend-core": "2.2.12-alpha.49",
47
+ "@budibase/client": "2.2.12-alpha.49",
48
+ "@budibase/pro": "2.2.12-alpha.48",
49
+ "@budibase/string-templates": "2.2.12-alpha.49",
50
+ "@budibase/types": "2.2.12-alpha.49",
51
51
  "@bull-board/api": "3.7.0",
52
52
  "@bull-board/koa": "3.9.4",
53
53
  "@elastic/elasticsearch": "7.10.0",
@@ -169,5 +169,5 @@
169
169
  "optionalDependencies": {
170
170
  "oracledb": "5.3.0"
171
171
  },
172
- "gitHead": "a2996efe7a94822856ddfb51151bd1d4ecff311a"
172
+ "gitHead": "df1d853fe0990446eec4a4e08128257d35cc438f"
173
173
  }
@@ -21,6 +21,8 @@ import {
21
21
  } from "@budibase/types"
22
22
  import sdk from "../../../sdk"
23
23
 
24
+ const { cleanExportRows } = require("./utils")
25
+
24
26
  export async function handleRequest(
25
27
  operation: Operation,
26
28
  tableId: string,
@@ -100,7 +102,7 @@ export async function destroy(ctx: BBContext) {
100
102
  export async function bulkDestroy(ctx: BBContext) {
101
103
  const { rows } = ctx.request.body
102
104
  const tableId = ctx.params.tableId
103
- let promises = []
105
+ let promises: Promise<Row[] | { row: Row; table: Table }>[] = []
104
106
  for (let row of rows) {
105
107
  promises.push(
106
108
  handleRequest(Operation.DELETE, tableId, {
@@ -186,20 +188,24 @@ export async function exportRows(ctx: BBContext) {
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,14 +217,19 @@ 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) {
@@ -27,7 +27,7 @@ import {
27
27
  import { cloneDeep } from "lodash/fp"
28
28
  import { context, db as dbCore } from "@budibase/backend-core"
29
29
  import { finaliseRow, updateRelatedFormula } from "./staticFormula"
30
- import { csv, json, jsonWithSchema, Format, isFormat } from "../view/exporters"
30
+ import { csv, json, jsonWithSchema, Format } from "../view/exporters"
31
31
  import { apiFileReturn } from "../../../utilities/fileSystem"
32
32
  import {
33
33
  Ctx,
@@ -38,6 +38,8 @@ import {
38
38
  Table,
39
39
  } from "@budibase/types"
40
40
 
41
+ const { cleanExportRows } = require("./utils")
42
+
41
43
  const CALCULATION_TYPES = {
42
44
  SUM: "sum",
43
45
  COUNT: "count",
@@ -357,6 +359,14 @@ export async function search(ctx: Ctx) {
357
359
  params.version = ctx.version
358
360
  params.tableId = tableId
359
361
 
362
+ let table
363
+ if (params.sort && !params.sortType) {
364
+ table = await db.get(tableId)
365
+ const schema = table.schema
366
+ const sortField = schema[params.sort]
367
+ params.sortType = sortField.type == "number" ? "number" : "string"
368
+ }
369
+
360
370
  let response
361
371
  if (paginate) {
362
372
  response = await paginatedSearch(query, params)
@@ -370,7 +380,7 @@ export async function search(ctx: Ctx) {
370
380
  if (tableId === InternalTables.USER_METADATA) {
371
381
  response.rows = await getGlobalUsersFromMetadata(response.rows)
372
382
  }
373
- const table = await db.get(tableId)
383
+ table = table || (await db.get(tableId))
374
384
  response.rows = await outputProcessing(table, response.rows)
375
385
  }
376
386
 
@@ -389,16 +399,25 @@ export async function exportRows(ctx: Ctx) {
389
399
  const table = await db.get(ctx.params.tableId)
390
400
  const rowIds = ctx.request.body.rows
391
401
  let format = ctx.query.format
392
- const { columns } = ctx.request.body
393
- let response = (
394
- await db.allDocs({
395
- include_docs: true,
396
- keys: rowIds,
397
- })
398
- ).rows.map(row => row.doc)
402
+ const { columns, query } = ctx.request.body
403
+
404
+ let result
405
+ if (rowIds) {
406
+ let response = (
407
+ await db.allDocs({
408
+ include_docs: true,
409
+ keys: rowIds,
410
+ })
411
+ ).rows.map(row => row.doc)
412
+
413
+ result = await outputProcessing(table, response)
414
+ } else if (query) {
415
+ let searchResponse = await exports.search(ctx)
416
+ result = searchResponse.rows
417
+ }
399
418
 
400
- let result = (await outputProcessing(table, response)) as Row[]
401
419
  let rows: Row[] = []
420
+ let schema = table.schema
402
421
 
403
422
  // Filter data to only specified columns if required
404
423
  if (columns && columns.length) {
@@ -412,12 +431,16 @@ export async function exportRows(ctx: Ctx) {
412
431
  rows = result
413
432
  }
414
433
 
434
+ let exportRows = cleanExportRows(rows, schema, format, columns)
415
435
  if (format === Format.CSV) {
416
436
  ctx.attachment("export.csv")
417
- return apiFileReturn(csv(Object.keys(rows[0]), rows))
437
+ return apiFileReturn(csv(Object.keys(rows[0]), exportRows))
418
438
  } else if (format === Format.JSON) {
419
439
  ctx.attachment("export.json")
420
- return apiFileReturn(json(rows))
440
+ return apiFileReturn(json(exportRows))
441
+ } else if (format === Format.JSON_WITH_SCHEMA) {
442
+ ctx.attachment("export.json")
443
+ return apiFileReturn(jsonWithSchema(schema, exportRows))
421
444
  } else {
422
445
  throw "Format not recognised"
423
446
  }
@@ -7,6 +7,7 @@ import { BBContext, Row, Table } from "@budibase/types"
7
7
  export { removeKeyNumbering } from "../../../integrations/base/utils"
8
8
  const validateJs = require("validate.js")
9
9
  const { cloneDeep } = require("lodash/fp")
10
+ import { Format } from "../view/exporters"
10
11
  import { Ctx } from "@budibase/types"
11
12
  import sdk from "../../../sdk"
12
13
 
@@ -117,3 +118,40 @@ export async function validate({
117
118
  }
118
119
  return { valid: Object.keys(errors).length === 0, errors }
119
120
  }
121
+
122
+ export function cleanExportRows(
123
+ rows: any[],
124
+ schema: any,
125
+ format: string,
126
+ columns: string[]
127
+ ) {
128
+ let cleanRows = [...rows]
129
+
130
+ const relationships = Object.entries(schema)
131
+ .filter((entry: any[]) => entry[1].type === FieldTypes.LINK)
132
+ .map(entry => entry[0])
133
+
134
+ relationships.forEach(column => {
135
+ cleanRows.forEach(row => {
136
+ delete row[column]
137
+ })
138
+ delete schema[column]
139
+ })
140
+
141
+ // Intended to avoid 'undefined' in export
142
+ if (format === Format.CSV) {
143
+ const schemaKeys = Object.keys(schema)
144
+ for (let key of schemaKeys) {
145
+ if (columns?.length && columns.indexOf(key) > 0) {
146
+ continue
147
+ }
148
+ for (let row of cleanRows) {
149
+ if (row[key] == null) {
150
+ row[key] = ""
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ return cleanRows
157
+ }
@@ -3,7 +3,6 @@ import { apiFileReturn } from "../../../utilities/fileSystem"
3
3
  import { csv, json, jsonWithSchema, Format, isFormat } from "./exporters"
4
4
  import { deleteView, getView, getViews, saveView } from "./utils"
5
5
  import { fetchView } from "../row"
6
- import { FieldTypes } from "../../../constants"
7
6
  import { context, events } from "@budibase/backend-core"
8
7
  import { DocumentType } from "../../../db/utils"
9
8
  import sdk from "../../../sdk"
@@ -15,6 +14,7 @@ import {
15
14
  TableSchema,
16
15
  View,
17
16
  } from "@budibase/types"
17
+ import { cleanExportRows } from "../row/utils"
18
18
 
19
19
  const { cloneDeep, isEqual } = require("lodash")
20
20
 
@@ -162,39 +162,17 @@ export async function exportView(ctx: BBContext) {
162
162
  schema = table.schema
163
163
  }
164
164
 
165
- // remove any relationships
166
- const relationships = Object.entries(schema)
167
- .filter(entry => entry[1].type === FieldTypes.LINK)
168
- .map(entry => entry[0])
169
- // iterate relationship columns and remove from and row and schema
170
- relationships.forEach(column => {
171
- rows.forEach(row => {
172
- delete row[column]
173
- })
174
- delete schema[column]
175
- })
176
-
177
- // make sure no "undefined" entries appear in the CSV
178
- if (format === Format.CSV) {
179
- const schemaKeys = Object.keys(schema)
180
- for (let key of schemaKeys) {
181
- for (let row of rows) {
182
- if (row[key] == null) {
183
- row[key] = ""
184
- }
185
- }
186
- }
187
- }
165
+ let exportRows = cleanExportRows(rows, schema, format, [])
188
166
 
189
167
  if (format === Format.CSV) {
190
168
  ctx.attachment(`${viewName}.csv`)
191
- ctx.body = apiFileReturn(csv(Object.keys(schema), rows))
169
+ ctx.body = apiFileReturn(csv(Object.keys(schema), exportRows))
192
170
  } else if (format === Format.JSON) {
193
171
  ctx.attachment(`${viewName}.json`)
194
- ctx.body = apiFileReturn(json(rows))
172
+ ctx.body = apiFileReturn(json(exportRows))
195
173
  } else if (format === Format.JSON_WITH_SCHEMA) {
196
174
  ctx.attachment(`${viewName}.json`)
197
- ctx.body = apiFileReturn(jsonWithSchema(schema, rows))
175
+ ctx.body = apiFileReturn(jsonWithSchema(schema, exportRows))
198
176
  } else {
199
177
  throw "Format not recognised"
200
178
  }
@@ -7,44 +7,3 @@
7
7
  export interface QueryOptions {
8
8
  disableReturning?: boolean
9
9
  }
10
-
11
- export enum AuthType {
12
- BASIC = "basic",
13
- BEARER = "bearer",
14
- }
15
-
16
- interface AuthConfig {
17
- _id: string
18
- name: string
19
- type: AuthType
20
- config: BasicAuthConfig | BearerAuthConfig
21
- }
22
-
23
- export interface BasicAuthConfig {
24
- username: string
25
- password: string
26
- }
27
-
28
- export interface BearerAuthConfig {
29
- token: string
30
- }
31
-
32
- export interface RestConfig {
33
- url: string
34
- rejectUnauthorized: boolean
35
- defaultHeaders: {
36
- [key: string]: any
37
- }
38
- legacyHttpParser: boolean
39
- authConfigs: AuthConfig[]
40
- staticVariables: {
41
- [key: string]: string
42
- }
43
- dynamicVariables: [
44
- {
45
- name: string
46
- queryId: string
47
- value: string
48
- }
49
- ]
50
- }
@@ -6,13 +6,11 @@ import {
6
6
  IntegrationBase,
7
7
  PaginationValues,
8
8
  RestQueryFields as RestQuery,
9
- } from "@budibase/types"
10
- import {
11
9
  RestConfig,
12
- AuthType,
13
- BasicAuthConfig,
14
- BearerAuthConfig,
15
- } from "../definitions/datasource"
10
+ RestAuthType,
11
+ RestBasicAuthConfig,
12
+ RestBearerAuthConfig,
13
+ } from "@budibase/types"
16
14
  import { get } from "lodash"
17
15
  import * as https from "https"
18
16
  import qs from "querystring"
@@ -331,14 +329,14 @@ class RestIntegration implements IntegrationBase {
331
329
  if (authConfig) {
332
330
  let config
333
331
  switch (authConfig.type) {
334
- case AuthType.BASIC:
335
- config = authConfig.config as BasicAuthConfig
332
+ case RestAuthType.BASIC:
333
+ config = authConfig.config as RestBasicAuthConfig
336
334
  headers.Authorization = `Basic ${Buffer.from(
337
335
  `${config.username}:${config.password}`
338
336
  ).toString("base64")}`
339
337
  break
340
- case AuthType.BEARER:
341
- config = authConfig.config as BearerAuthConfig
338
+ case RestAuthType.BEARER:
339
+ config = authConfig.config as RestBearerAuthConfig
342
340
  headers.Authorization = `Bearer ${config.token}`
343
341
  break
344
342
  }
@@ -428,5 +426,4 @@ class RestIntegration implements IntegrationBase {
428
426
  export default {
429
427
  schema: SCHEMA,
430
428
  integration: RestIntegration,
431
- AuthType,
432
429
  }
@@ -15,6 +15,7 @@ jest.mock("node-fetch", () => {
15
15
 
16
16
  import fetch from "node-fetch"
17
17
  import { default as RestIntegration } from "../rest"
18
+ import { RestAuthType } from "@budibase/types"
18
19
  const FormData = require("form-data")
19
20
  const { URLSearchParams } = require("url")
20
21
 
@@ -229,7 +230,7 @@ describe("REST Integration", () => {
229
230
  const basicAuth = {
230
231
  _id: "c59c14bd1898a43baa08da68959b24686",
231
232
  name: "basic-1",
232
- type: RestIntegration.AuthType.BASIC,
233
+ type: RestAuthType.BASIC,
233
234
  config: {
234
235
  username: "user",
235
236
  password: "password",
@@ -239,7 +240,7 @@ describe("REST Integration", () => {
239
240
  const bearerAuth = {
240
241
  _id: "0d91d732f34e4befabeff50b392a8ff3",
241
242
  name: "bearer-1",
242
- type: RestIntegration.AuthType.BEARER,
243
+ type: RestAuthType.BEARER,
243
244
  config: {
244
245
  token: "mytoken",
245
246
  },
@@ -581,6 +582,7 @@ describe("REST Integration", () => {
581
582
  })
582
583
  await config.integration.read({})
583
584
 
585
+ // @ts-ignore
584
586
  const calls: any = fetch.mock.calls[0]
585
587
  const url = calls[0]
586
588
  expect(url).toBe(`${BASE_URL}/`)
@@ -1,17 +1,19 @@
1
1
  import { context } from "@budibase/backend-core"
2
- import { processObjectSync, findHBSBlocks } from "@budibase/string-templates"
2
+ import { findHBSBlocks, processObjectSync } from "@budibase/string-templates"
3
3
  import {
4
4
  Datasource,
5
5
  DatasourceFieldType,
6
- Integration,
7
6
  PASSWORD_REPLACEMENT,
7
+ RestAuthConfig,
8
+ RestAuthType,
9
+ RestBasicAuthConfig,
10
+ SourceName,
8
11
  } from "@budibase/types"
9
12
  import { cloneDeep } from "lodash/fp"
10
13
  import { getEnvironmentVariables } from "../../utils"
11
14
  import { getDefinitions } from "../../../integrations"
12
15
 
13
16
  const ENV_VAR_PREFIX = "env."
14
- const USER_PREFIX = "user"
15
17
 
16
18
  async function enrichDatasourceWithValues(datasource: Datasource) {
17
19
  const cloned = cloneDeep(datasource)
@@ -47,6 +49,18 @@ export async function getWithEnvVars(datasourceId: string) {
47
49
  return enrichDatasourceWithValues(datasource)
48
50
  }
49
51
 
52
+ function hasAuthConfigs(datasource: Datasource) {
53
+ return datasource.source === SourceName.REST && datasource.config?.authConfigs
54
+ }
55
+
56
+ function useEnvVars(str: any) {
57
+ if (typeof str !== "string") {
58
+ return false
59
+ }
60
+ const blocks = findHBSBlocks(str)
61
+ return blocks.find(block => block.includes(ENV_VAR_PREFIX)) != null
62
+ }
63
+
50
64
  export async function removeSecrets(datasources: Datasource[]) {
51
65
  const definitions = await getDefinitions()
52
66
  for (let datasource of datasources) {
@@ -56,17 +70,24 @@ export async function removeSecrets(datasources: Datasource[]) {
56
70
  if (datasource.config.auth) {
57
71
  delete datasource.config.auth
58
72
  }
59
- // remove passwords
60
- for (let key of Object.keys(datasource.config)) {
61
- if (typeof datasource.config[key] !== "string") {
62
- continue
73
+ // specific to REST datasources, contains passwords
74
+ if (hasAuthConfigs(datasource)) {
75
+ const configs = datasource.config.authConfigs as RestAuthConfig[]
76
+ for (let config of configs) {
77
+ if (config.type !== RestAuthType.BASIC) {
78
+ continue
79
+ }
80
+ const basic = config.config as RestBasicAuthConfig
81
+ if (!useEnvVars(basic.password)) {
82
+ basic.password = PASSWORD_REPLACEMENT
83
+ }
63
84
  }
64
- const blocks = findHBSBlocks(datasource.config[key] as string)
65
- const usesEnvVars =
66
- blocks.find(block => block.includes(ENV_VAR_PREFIX)) != null
85
+ }
86
+ // remove general passwords
87
+ for (let key of Object.keys(datasource.config)) {
67
88
  if (
68
- !usesEnvVars &&
69
- schema.datasource?.[key]?.type === DatasourceFieldType.PASSWORD
89
+ schema.datasource?.[key]?.type === DatasourceFieldType.PASSWORD &&
90
+ !useEnvVars(datasource.config[key])
70
91
  ) {
71
92
  datasource.config[key] = PASSWORD_REPLACEMENT
72
93
  }
@@ -84,6 +105,23 @@ export function mergeConfigs(update: Datasource, old: Datasource) {
84
105
  if (!update.config) {
85
106
  return update
86
107
  }
108
+ // specific to REST datasources, fix the auth configs again if required
109
+ if (hasAuthConfigs(update)) {
110
+ const configs = update.config.authConfigs as RestAuthConfig[]
111
+ const oldConfigs = old.config?.authConfigs as RestAuthConfig[]
112
+ for (let config of configs) {
113
+ if (config.type !== RestAuthType.BASIC) {
114
+ continue
115
+ }
116
+ const basic = config.config as RestBasicAuthConfig
117
+ const oldBasic = oldConfigs.find(old => old.name === config.name)
118
+ ?.config as RestBasicAuthConfig
119
+ if (basic.password === PASSWORD_REPLACEMENT) {
120
+ basic.password = oldBasic.password
121
+ }
122
+ }
123
+ }
124
+ // update back to actual passwords for everything else
87
125
  for (let [key, value] of Object.entries(update.config)) {
88
126
  if (value !== PASSWORD_REPLACEMENT) {
89
127
  continue