@budibase/server 2.3.12 → 2.3.14-alpha.0

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 (552) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/{index.4488f38d.css → index.a534ca24.css} +1 -1
  3. package/builder/assets/{index.e0b69cb5.js → index.d7529be1.js} +275 -275
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +11936 -7197
  6. package/coverage/coverage-final.json +356 -271
  7. package/coverage/lcov-report/index.html +420 -195
  8. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +6 -6
  9. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  10. package/coverage/lcov-report/src/api/controllers/application.ts.html +140 -140
  11. package/coverage/lcov-report/src/api/controllers/auth.ts.html +9 -9
  12. package/coverage/lcov-report/src/api/controllers/automation.ts.html +47 -47
  13. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  14. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +26 -26
  15. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  16. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +37 -37
  17. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
  18. package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
  19. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +81 -81
  20. package/coverage/lcov-report/src/api/controllers/dev.ts.html +26 -26
  21. package/coverage/lcov-report/src/api/controllers/index.html +37 -37
  22. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  23. package/coverage/lcov-report/src/api/controllers/layout.ts.html +15 -15
  24. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  25. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  26. package/coverage/lcov-report/src/api/controllers/permission.ts.html +34 -34
  27. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +2 -2
  28. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +4 -4
  29. package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +18 -18
  31. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +5 -5
  32. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
  33. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +3 -3
  34. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +3 -3
  35. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +6 -6
  36. package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
  37. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  44. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +4 -4
  45. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +5 -5
  46. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +4 -4
  47. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +6 -6
  48. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +4 -4
  49. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +7 -7
  51. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +3 -3
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +7 -7
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +9 -9
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +13 -13
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/curl.spec.js.html +391 -0
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/index.html +116 -0
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/index.html +116 -0
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js.html +796 -0
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/index.html +116 -0
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js.html +805 -0
  64. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.html +116 -0
  65. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.spec.js.html +568 -0
  66. package/coverage/lcov-report/src/api/controllers/query/index.html +10 -10
  67. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +61 -55
  68. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  69. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  70. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  71. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +431 -419
  72. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +211 -175
  73. package/coverage/lcov-report/src/api/controllers/row/index.html +42 -42
  74. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +79 -79
  75. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +34 -34
  76. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +6 -6
  77. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +22 -22
  78. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +31 -31
  79. package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
  80. package/coverage/lcov-report/src/api/controllers/script.ts.html +2 -2
  81. package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
  82. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +22 -22
  83. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +51 -51
  84. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +198 -195
  85. package/coverage/lcov-report/src/api/controllers/table/index.html +47 -47
  86. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +42 -42
  87. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +61 -61
  88. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +63 -63
  89. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  90. package/coverage/lcov-report/src/api/controllers/user.ts.html +28 -28
  91. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +2 -2
  92. package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
  93. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +16 -16
  94. package/coverage/lcov-report/src/api/controllers/view/tests/index.html +116 -0
  95. package/coverage/lcov-report/src/api/controllers/view/tests/viewBuilder.spec.js.html +277 -0
  96. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +5 -5
  97. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +7 -7
  98. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +25 -25
  99. package/coverage/lcov-report/src/api/index.html +1 -1
  100. package/coverage/lcov-report/src/api/index.ts.html +27 -27
  101. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  102. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  103. package/coverage/lcov-report/src/api/routes/application.ts.html +10 -10
  104. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  105. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  106. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  107. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  108. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  109. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  110. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
  111. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  112. package/coverage/lcov-report/src/api/routes/index.html +1 -1
  113. package/coverage/lcov-report/src/api/routes/index.ts.html +35 -35
  114. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  115. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  116. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  117. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  118. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  119. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  120. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +14 -17
  121. package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
  122. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  123. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +4 -4
  125. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  126. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  127. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  128. package/coverage/lcov-report/src/api/routes/public/tests/compare.spec.js.html +583 -0
  129. package/coverage/lcov-report/src/api/routes/public/tests/index.html +42 -12
  130. package/coverage/lcov-report/src/api/routes/public/tests/users.spec.js.html +199 -0
  131. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +78 -27
  132. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  133. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  134. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  135. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  136. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  137. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  138. package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
  139. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  140. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  141. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  142. package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
  143. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  144. package/coverage/lcov-report/src/api/routes/tests/analytics.spec.js.html +271 -0
  145. package/coverage/lcov-report/src/api/routes/tests/apikeys.spec.js.html +259 -0
  146. package/coverage/lcov-report/src/api/routes/tests/application.spec.ts.html +1066 -0
  147. package/coverage/lcov-report/src/api/routes/tests/auth.spec.js.html +154 -0
  148. package/coverage/lcov-report/src/api/routes/tests/automation.spec.js.html +1123 -0
  149. package/coverage/lcov-report/src/api/routes/tests/backup.spec.ts.html +223 -0
  150. package/coverage/lcov-report/src/api/routes/tests/cloud.seq.spec.ts.html +268 -0
  151. package/coverage/lcov-report/src/api/routes/tests/component.spec.js.html +178 -0
  152. package/coverage/lcov-report/src/api/routes/tests/datasource.spec.ts.html +799 -0
  153. package/coverage/lcov-report/src/api/routes/tests/dev.spec.js.html +202 -0
  154. package/coverage/lcov-report/src/api/routes/tests/environmentVariables.spec.ts.html +517 -0
  155. package/coverage/lcov-report/src/api/routes/tests/index.html +536 -0
  156. package/coverage/lcov-report/src/api/routes/tests/integration.spec.js.html +238 -0
  157. package/coverage/lcov-report/src/api/routes/tests/internalSearch.spec.js.html +670 -0
  158. package/coverage/lcov-report/src/api/routes/tests/layout.spec.js.html +259 -0
  159. package/coverage/lcov-report/src/api/routes/tests/metadata.spec.js.html +280 -0
  160. package/coverage/lcov-report/src/api/routes/tests/misc.spec.js.html +358 -0
  161. package/coverage/lcov-report/src/api/routes/tests/permissions.spec.js.html +484 -0
  162. package/coverage/lcov-report/src/api/routes/tests/plugin.spec.ts.html +622 -0
  163. package/coverage/lcov-report/src/api/routes/tests/query.seq.spec.js.html +1699 -0
  164. package/coverage/lcov-report/src/api/routes/tests/role.spec.js.html +478 -0
  165. package/coverage/lcov-report/src/api/routes/tests/routing.spec.js.html +430 -0
  166. package/coverage/lcov-report/src/api/routes/tests/row.spec.js.html +1804 -0
  167. package/coverage/lcov-report/src/api/routes/tests/screen.spec.js.html +391 -0
  168. package/coverage/lcov-report/src/api/routes/tests/static.spec.js.html +541 -0
  169. package/coverage/lcov-report/src/api/routes/tests/table.spec.js.html +991 -0
  170. package/coverage/lcov-report/src/api/routes/tests/templates.spec.js.html +154 -0
  171. package/coverage/lcov-report/src/api/routes/tests/user.spec.js.html +679 -0
  172. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +110 -41
  173. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +19 -19
  174. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +29 -23
  175. package/coverage/lcov-report/src/api/routes/tests/view.spec.js.html +1342 -0
  176. package/coverage/lcov-report/src/api/routes/tests/webhook.spec.js.html +484 -0
  177. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  178. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  179. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
  180. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  181. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  182. package/coverage/lcov-report/src/app.ts.html +59 -44
  183. package/coverage/lcov-report/src/automations/actions.ts.html +24 -24
  184. package/coverage/lcov-report/src/automations/automationUtils.ts.html +4 -4
  185. package/coverage/lcov-report/src/automations/bullboard.ts.html +9 -9
  186. package/coverage/lcov-report/src/automations/index.html +27 -27
  187. package/coverage/lcov-report/src/automations/index.ts.html +5 -5
  188. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  189. package/coverage/lcov-report/src/automations/logging/index.ts.html +10 -10
  190. package/coverage/lcov-report/src/automations/steps/bash.ts.html +8 -8
  191. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  192. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  193. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  194. package/coverage/lcov-report/src/automations/steps/discord.ts.html +8 -8
  195. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +7 -7
  196. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +7 -7
  197. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  198. package/coverage/lcov-report/src/automations/steps/index.html +1 -1
  199. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  200. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  201. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +9 -9
  202. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +13 -13
  203. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +6 -6
  204. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +4 -4
  205. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  206. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  207. package/coverage/lcov-report/src/automations/steps/utils.ts.html +1 -1
  208. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +6 -6
  209. package/coverage/lcov-report/src/automations/tests/automation.spec.js.html +337 -0
  210. package/coverage/lcov-report/src/automations/tests/bash.spec.js.html +187 -0
  211. package/coverage/lcov-report/src/automations/tests/createRow.spec.ts.html +223 -0
  212. package/coverage/lcov-report/src/automations/tests/delay.spec.js.html +133 -0
  213. package/coverage/lcov-report/src/automations/tests/deleteRow.spec.ts.html +250 -0
  214. package/coverage/lcov-report/src/automations/tests/discord.spec.js.html +166 -0
  215. package/coverage/lcov-report/src/automations/tests/executeQuery.spec.js.html +229 -0
  216. package/coverage/lcov-report/src/automations/tests/executeScript.spec.js.html +229 -0
  217. package/coverage/lcov-report/src/automations/tests/filter.spec.js.html +232 -0
  218. package/coverage/lcov-report/src/automations/tests/index.html +341 -0
  219. package/coverage/lcov-report/src/automations/tests/loop.spec.ts.html +220 -0
  220. package/coverage/lcov-report/src/automations/tests/outgoingWebhook.spec.js.html +202 -0
  221. package/coverage/lcov-report/src/automations/tests/queryRows.spec.js.html +436 -0
  222. package/coverage/lcov-report/src/automations/tests/sendSmtpEmail.spec.js.html +298 -0
  223. package/coverage/lcov-report/src/automations/tests/serverLog.spec.js.html +151 -0
  224. package/coverage/lcov-report/src/automations/tests/updateRow.spec.js.html +217 -0
  225. package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
  226. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +1 -1
  227. package/coverage/lcov-report/src/automations/tests/zapier.spec.js.html +166 -0
  228. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  229. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  230. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  231. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  232. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  233. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  234. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  235. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  236. package/coverage/lcov-report/src/automations/triggers.ts.html +44 -44
  237. package/coverage/lcov-report/src/automations/unitTests/automationUtils.spec.ts.html +280 -0
  238. package/coverage/lcov-report/src/automations/unitTests/index.html +116 -0
  239. package/coverage/lcov-report/src/automations/utils.ts.html +63 -63
  240. package/coverage/lcov-report/src/constants/index.html +16 -16
  241. package/coverage/lcov-report/src/constants/index.ts.html +33 -99
  242. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  243. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  244. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +33 -45
  245. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  246. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  247. package/coverage/lcov-report/src/db/defaultData/index.html +11 -11
  248. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  249. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  250. package/coverage/lcov-report/src/db/dynamoClient.ts.html +15 -15
  251. package/coverage/lcov-report/src/db/inMemoryView.ts.html +4 -4
  252. package/coverage/lcov-report/src/db/index.html +16 -16
  253. package/coverage/lcov-report/src/db/index.ts.html +19 -19
  254. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +26 -23
  255. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  256. package/coverage/lcov-report/src/db/linkedRows/index.html +10 -10
  257. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +23 -23
  258. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +10 -10
  259. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  260. package/coverage/lcov-report/src/db/tests/index.html +131 -0
  261. package/coverage/lcov-report/src/db/tests/linkController.spec.js.html +793 -0
  262. package/coverage/lcov-report/src/db/tests/linkTests.spec.js.html +277 -0
  263. package/coverage/lcov-report/src/db/utils.ts.html +52 -52
  264. package/coverage/lcov-report/src/definitions/automations.ts.html +2 -2
  265. package/coverage/lcov-report/src/definitions/index.html +1 -1
  266. package/coverage/lcov-report/src/environment.ts.html +34 -31
  267. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
  268. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +6 -6
  269. package/coverage/lcov-report/src/events/index.html +1 -1
  270. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  271. package/coverage/lcov-report/src/events/utils.ts.html +10 -10
  272. package/coverage/lcov-report/src/index.html +23 -23
  273. package/coverage/lcov-report/src/index.ts.html +1 -1
  274. package/coverage/lcov-report/src/integration-test/index.html +116 -0
  275. package/coverage/lcov-report/src/integration-test/postgres.spec.ts.html +2341 -0
  276. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  277. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  278. package/coverage/lcov-report/src/integrations/base/index.html +30 -30
  279. package/coverage/lcov-report/src/integrations/base/query.ts.html +9 -9
  280. package/coverage/lcov-report/src/integrations/base/sql.ts.html +217 -187
  281. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +107 -107
  282. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  283. package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
  284. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
  285. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
  286. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  287. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
  288. package/coverage/lcov-report/src/integrations/index.html +27 -27
  289. package/coverage/lcov-report/src/integrations/index.ts.html +40 -40
  290. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  291. package/coverage/lcov-report/src/integrations/mongodb.ts.html +11 -11
  292. package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
  293. package/coverage/lcov-report/src/integrations/oracle.ts.html +14 -14
  294. package/coverage/lcov-report/src/integrations/postgres.ts.html +68 -68
  295. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  296. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +8 -8
  297. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  298. package/coverage/lcov-report/src/integrations/rest.ts.html +15 -15
  299. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  300. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  301. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  302. package/coverage/lcov-report/src/integrations/tests/airtable.spec.ts.html +310 -0
  303. package/coverage/lcov-report/src/integrations/tests/arangodb.spec.ts.html +199 -0
  304. package/coverage/lcov-report/src/integrations/tests/couchdb.spec.ts.html +349 -0
  305. package/coverage/lcov-report/src/integrations/tests/dynamodb.spec.ts.html +550 -0
  306. package/coverage/lcov-report/src/integrations/tests/elasticsearch.spec.ts.html +331 -0
  307. package/coverage/lcov-report/src/integrations/tests/firebase.spec.ts.html +376 -0
  308. package/coverage/lcov-report/src/integrations/tests/index.html +230 -5
  309. package/coverage/lcov-report/src/integrations/tests/microsoftSqlServer.spec.ts.html +253 -0
  310. package/coverage/lcov-report/src/integrations/tests/mongo.spec.ts.html +1087 -0
  311. package/coverage/lcov-report/src/integrations/tests/mysql.spec.ts.html +484 -0
  312. package/coverage/lcov-report/src/integrations/tests/oracle.spec.ts.html +373 -0
  313. package/coverage/lcov-report/src/integrations/tests/postgres.spec.ts.html +328 -0
  314. package/coverage/lcov-report/src/integrations/tests/redis.spec.ts.html +337 -0
  315. package/coverage/lcov-report/src/integrations/tests/rest.spec.ts.html +1870 -0
  316. package/coverage/lcov-report/src/integrations/tests/s3.spec.ts.html +421 -0
  317. package/coverage/lcov-report/src/integrations/tests/sql.spec.ts.html +1753 -0
  318. package/coverage/lcov-report/src/integrations/utils.ts.html +77 -77
  319. package/coverage/lcov-report/src/middleware/appInfo.ts.html +5 -5
  320. package/coverage/lcov-report/src/middleware/authorized.ts.html +29 -29
  321. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  322. package/coverage/lcov-report/src/middleware/currentapp.ts.html +53 -53
  323. package/coverage/lcov-report/src/middleware/index.html +15 -15
  324. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  325. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  326. package/coverage/lcov-report/src/middleware/resourceId.ts.html +28 -28
  327. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  328. package/coverage/lcov-report/src/middleware/tests/authorized.spec.js.html +574 -0
  329. package/coverage/lcov-report/src/middleware/tests/currentapp.spec.js.html +814 -0
  330. package/coverage/lcov-report/src/middleware/tests/index.html +161 -0
  331. package/coverage/lcov-report/src/middleware/tests/resourceId.spec.js.html +397 -0
  332. package/coverage/lcov-report/src/middleware/tests/selfhost.spec.js.html +214 -0
  333. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  334. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  335. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  336. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  337. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  338. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  339. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  340. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  341. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  342. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  343. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  344. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +6 -6
  345. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  346. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  347. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  348. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  349. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  350. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  351. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  352. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  353. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  354. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  355. package/coverage/lcov-report/src/migrations/functions/tests/appUrls.spec.js.html +163 -0
  356. package/coverage/lcov-report/src/migrations/functions/tests/index.html +161 -0
  357. package/coverage/lcov-report/src/migrations/functions/tests/syncQuotas.spec.js.html +163 -0
  358. package/coverage/lcov-report/src/migrations/functions/tests/tableSettings.spec.ts.html +517 -0
  359. package/coverage/lcov-report/src/migrations/functions/tests/userEmailViewCasing.spec.js.html +190 -0
  360. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  361. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  362. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  363. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  364. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  365. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/index.html +131 -0
  366. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts.html +190 -0
  367. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts.html +244 -0
  368. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  369. package/coverage/lcov-report/src/migrations/index.html +1 -1
  370. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  371. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  372. package/coverage/lcov-report/src/migrations/tests/index.html +23 -8
  373. package/coverage/lcov-report/src/migrations/tests/index.spec.ts.html +511 -0
  374. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  375. package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
  376. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  377. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +22 -22
  378. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  379. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  380. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  381. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +10 -10
  382. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  383. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +41 -23
  384. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +18 -18
  385. package/coverage/lcov-report/src/sdk/app/backups/index.html +10 -10
  386. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  387. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +7 -7
  388. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +69 -60
  389. package/coverage/lcov-report/src/sdk/app/datasources/index.html +19 -19
  390. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +3 -3
  391. package/coverage/lcov-report/src/sdk/app/queries/index.html +1 -1
  392. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +3 -3
  393. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +11 -11
  394. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +6 -6
  395. package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
  396. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +4 -4
  397. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  398. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  399. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +10 -10
  400. package/coverage/lcov-report/src/sdk/index.html +1 -1
  401. package/coverage/lcov-report/src/sdk/index.ts.html +11 -11
  402. package/coverage/lcov-report/src/sdk/tests/attachments.spec.ts.html +313 -0
  403. package/coverage/lcov-report/src/sdk/tests/index.html +116 -0
  404. package/coverage/lcov-report/src/sdk/users/index.html +1 -1
  405. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  406. package/coverage/lcov-report/src/sdk/users/utils.ts.html +31 -31
  407. package/coverage/lcov-report/src/sdk/utils/index.html +1 -1
  408. package/coverage/lcov-report/src/sdk/utils/index.ts.html +11 -11
  409. package/coverage/lcov-report/src/startup.ts.html +42 -42
  410. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +421 -193
  411. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  412. package/coverage/lcov-report/src/tests/utilities/index.html +28 -28
  413. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  414. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +77 -35
  415. package/coverage/lcov-report/src/threads/automation.ts.html +22 -22
  416. package/coverage/lcov-report/src/threads/index.html +1 -1
  417. package/coverage/lcov-report/src/threads/index.ts.html +24 -24
  418. package/coverage/lcov-report/src/threads/query.ts.html +76 -76
  419. package/coverage/lcov-report/src/threads/utils.ts.html +12 -12
  420. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  421. package/coverage/lcov-report/src/utilities/centralPath.ts.html +2 -2
  422. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +17 -17
  423. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +8 -8
  424. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +25 -25
  425. package/coverage/lcov-report/src/utilities/fileSystem/index.html +1 -1
  426. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +6 -6
  427. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +8 -8
  428. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  429. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +7 -7
  430. package/coverage/lcov-report/src/utilities/global.ts.html +40 -40
  431. package/coverage/lcov-report/src/utilities/index.html +34 -19
  432. package/coverage/lcov-report/src/utilities/index.ts.html +26 -26
  433. package/coverage/lcov-report/src/utilities/redis.ts.html +12 -12
  434. package/coverage/lcov-report/src/utilities/retry.ts.html +139 -0
  435. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  436. package/coverage/lcov-report/src/utilities/routing/index.ts.html +4 -4
  437. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +19 -19
  438. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +49 -49
  439. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  440. package/coverage/lcov-report/src/utilities/rowProcessor/tests/index.html +116 -0
  441. package/coverage/lcov-report/src/utilities/rowProcessor/tests/utils.spec.ts.html +256 -0
  442. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
  443. package/coverage/lcov-report/src/utilities/schema.ts.html +3 -3
  444. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +5 -5
  445. package/coverage/lcov-report/src/utilities/security.ts.html +22 -22
  446. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  447. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
  448. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  449. package/coverage/lcov-report/src/utilities/users.ts.html +4 -4
  450. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +15 -15
  451. package/coverage/lcov-report/src/watch.ts.html +7 -7
  452. package/coverage/lcov-report/src/websocket.ts.html +5 -5
  453. package/coverage/lcov.info +20061 -12327
  454. package/dist/api/controllers/query/index.js +2 -0
  455. package/dist/api/controllers/row/ExternalRequest.js +4 -2
  456. package/dist/api/controllers/row/external.js +12 -1
  457. package/dist/api/controllers/table/external.js +8 -8
  458. package/dist/api/routes/public/tests/utils.js +29 -2
  459. package/dist/api/routes/tests/utilities/index.js +131 -0
  460. package/dist/app.js +8 -4
  461. package/dist/constants/index.js +4 -24
  462. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  463. package/dist/db/linkedRows/LinkController.js +9 -8
  464. package/dist/environment.js +1 -0
  465. package/dist/integrations/base/sql.js +10 -3
  466. package/dist/package.json +8 -6
  467. package/dist/sdk/app/backups/exports.js +8 -2
  468. package/dist/sdk/app/datasources/datasources.js +3 -0
  469. package/dist/tests/utilities/TestConfiguration.js +626 -0
  470. package/dist/tests/utilities/controllers.js +40 -0
  471. package/dist/tests/utilities/structures.js +234 -0
  472. package/dist/tsconfig.build.tsbuildinfo +1 -1
  473. package/dist/utilities/retry.js +30 -0
  474. package/jest-testcontainers-config.js +8 -0
  475. package/jest.config.ts +28 -11
  476. package/package.json +9 -7
  477. package/scripts/integrations/postgres/emp-territory.sql +32 -0
  478. package/scripts/load/create-many-apps.js +24 -0
  479. package/scripts/load/create-many-rows.js +30 -0
  480. package/scripts/load/utils.js +66 -0
  481. package/specs/openapi.json +6 -6
  482. package/specs/openapi.yaml +3 -3
  483. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  484. package/src/api/controllers/query/index.ts +2 -0
  485. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  486. package/src/api/controllers/row/external.ts +13 -1
  487. package/src/api/controllers/table/external.ts +3 -2
  488. package/src/api/routes/public/applications.ts +0 -1
  489. package/src/api/routes/public/tests/compare.spec.js +1 -1
  490. package/src/api/routes/public/tests/users.spec.js +1 -1
  491. package/src/api/routes/public/tests/utils.ts +25 -8
  492. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  493. package/src/api/routes/tests/analytics.spec.js +4 -1
  494. package/src/api/routes/tests/apikeys.spec.js +1 -1
  495. package/src/api/routes/tests/application.spec.ts +20 -6
  496. package/src/api/routes/tests/auth.spec.js +2 -2
  497. package/src/api/routes/tests/automation.spec.js +6 -2
  498. package/src/api/routes/tests/backup.spec.ts +4 -13
  499. package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
  500. package/src/api/routes/tests/component.spec.js +1 -1
  501. package/src/api/routes/tests/datasource.spec.ts +20 -3
  502. package/src/api/routes/tests/dev.spec.js +1 -1
  503. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  504. package/src/api/routes/tests/integration.spec.js +1 -1
  505. package/src/api/routes/tests/layout.spec.js +1 -1
  506. package/src/api/routes/tests/metadata.spec.js +1 -1
  507. package/src/api/routes/tests/misc.spec.js +1 -1
  508. package/src/api/routes/tests/permissions.spec.js +4 -1
  509. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  510. package/src/api/routes/tests/role.spec.js +6 -1
  511. package/src/api/routes/tests/routing.spec.js +1 -1
  512. package/src/api/routes/tests/row.spec.js +11 -3
  513. package/src/api/routes/tests/screen.spec.js +1 -1
  514. package/src/api/routes/tests/static.spec.js +2 -1
  515. package/src/api/routes/tests/table.spec.js +1 -1
  516. package/src/api/routes/tests/templates.spec.js +1 -1
  517. package/src/api/routes/tests/user.spec.js +12 -12
  518. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
  519. package/src/api/routes/tests/utilities/index.ts +5 -3
  520. package/src/api/routes/tests/view.spec.js +4 -1
  521. package/src/api/routes/tests/webhook.spec.js +11 -2
  522. package/src/app.ts +9 -4
  523. package/src/automations/tests/automation.spec.js +4 -4
  524. package/src/automations/tests/bash.spec.js +1 -1
  525. package/src/automations/tests/discord.spec.js +1 -1
  526. package/src/automations/tests/executeQuery.spec.js +2 -3
  527. package/src/automations/tests/executeScript.spec.js +1 -1
  528. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  529. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  530. package/src/automations/tests/serverLog.spec.js +1 -1
  531. package/src/automations/tests/updateRow.spec.js +1 -1
  532. package/src/automations/tests/zapier.spec.js +1 -1
  533. package/src/constants/index.ts +1 -23
  534. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  535. package/src/db/linkedRows/LinkController.ts +2 -1
  536. package/src/db/tests/linkController.spec.js +4 -1
  537. package/src/db/tests/linkTests.spec.js +1 -1
  538. package/src/environment.ts +1 -0
  539. package/src/integration-test/postgres.spec.ts +752 -0
  540. package/src/integrations/base/sql.ts +15 -5
  541. package/src/integrations/oracle.ts +1 -1
  542. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  543. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  544. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  545. package/src/migrations/tests/index.spec.ts +13 -20
  546. package/src/sdk/app/backups/exports.ts +8 -2
  547. package/src/sdk/app/datasources/datasources.ts +3 -0
  548. package/src/tests/jestEnv.ts +2 -6
  549. package/src/tests/jestSetup.ts +8 -7
  550. package/src/tests/utilities/TestConfiguration.ts +126 -50
  551. package/src/tests/utilities/structures.ts +16 -2
  552. package/src/utilities/retry.ts +18 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.retry = void 0;
13
+ function retry(fn, maxTry = 5, retryCount = 1) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ const currRetry = typeof retryCount === "number" ? retryCount : 1;
16
+ try {
17
+ const result = yield fn();
18
+ return result;
19
+ }
20
+ catch (e) {
21
+ console.log(`Retry ${currRetry} failed.`);
22
+ if (currRetry > maxTry) {
23
+ console.log(`All ${maxTry} retry attempts exhausted`);
24
+ throw e;
25
+ }
26
+ return retry(fn, maxTry, currRetry + 1);
27
+ }
28
+ });
29
+ }
30
+ exports.retry = retry;
@@ -0,0 +1,8 @@
1
+ const { join } = require("path")
2
+ require("dotenv").config({
3
+ path: join(__dirname, "..", "..", "hosting", ".env"),
4
+ })
5
+
6
+ const jestTestcontainersConfigGenerator = require("../../jestTestcontainersConfigGenerator")
7
+
8
+ module.exports = jestTestcontainersConfigGenerator()
package/jest.config.ts CHANGED
@@ -1,16 +1,13 @@
1
1
  import { Config } from "@jest/types"
2
+
2
3
  import * as fs from "fs"
4
+ const preset = require("ts-jest/jest-preset")
3
5
 
4
- const config: Config.InitialOptions = {
5
- testEnvironment: "node",
6
+ const baseConfig: Config.InitialProjectOptions = {
7
+ ...preset,
8
+ preset: "@trendyol/jest-testcontainers",
6
9
  setupFiles: ["./src/tests/jestEnv.ts"],
7
10
  setupFilesAfterEnv: ["./src/tests/jestSetup.ts"],
8
- collectCoverageFrom: [
9
- "src/**/*.{js,ts}",
10
- // The use of coverage with couchdb view functions breaks tests
11
- "!src/db/views/staticViews.*",
12
- ],
13
- coverageReporters: ["lcov", "json", "clover"],
14
11
  transform: {
15
12
  "^.+\\.ts?$": "@swc/jest",
16
13
  },
@@ -18,19 +15,39 @@ const config: Config.InitialOptions = {
18
15
 
19
16
  if (!process.env.CI) {
20
17
  // use sources when not in CI
21
- config.moduleNameMapper = {
18
+ baseConfig.moduleNameMapper = {
22
19
  "@budibase/backend-core/(.*)": "<rootDir>/../backend-core/$1",
23
20
  "@budibase/backend-core": "<rootDir>/../backend-core/src",
24
21
  "@budibase/types": "<rootDir>/../types/src",
25
- "^axios.*$": "<rootDir>/node_modules/axios/lib/axios.js",
26
22
  }
27
23
  // add pro sources if they exist
28
24
  if (fs.existsSync("../../../budibase-pro")) {
29
- config.moduleNameMapper["@budibase/pro"] =
25
+ baseConfig.moduleNameMapper["@budibase/pro"] =
30
26
  "<rootDir>/../../../budibase-pro/packages/pro/src"
31
27
  }
32
28
  } else {
33
29
  console.log("Running tests with compiled dependency sources")
34
30
  }
35
31
 
32
+ const config: Config.InitialOptions = {
33
+ projects: [
34
+ {
35
+ ...baseConfig,
36
+ displayName: "sequential test",
37
+ testMatch: ["<rootDir>/**/*.seq.spec.[jt]s"],
38
+ runner: "jest-serial-runner",
39
+ },
40
+ {
41
+ ...baseConfig,
42
+ testMatch: ["<rootDir>/**/!(*.seq).spec.[jt]s"],
43
+ },
44
+ ],
45
+ collectCoverageFrom: [
46
+ "src/**/*.{js,ts}",
47
+ // The use of coverage with couchdb view functions breaks tests
48
+ "!src/db/views/staticViews.*",
49
+ ],
50
+ coverageReporters: ["lcov", "json", "clover"],
51
+ }
52
+
36
53
  export default config
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.3.12",
4
+ "version": "2.3.14-alpha.0",
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.3.12",
47
- "@budibase/client": "^2.3.12",
48
- "@budibase/pro": "2.3.11",
49
- "@budibase/string-templates": "^2.3.12",
50
- "@budibase/types": "^2.3.12",
46
+ "@budibase/backend-core": "2.3.14-alpha.0",
47
+ "@budibase/client": "2.3.14-alpha.0",
48
+ "@budibase/pro": "2.3.13",
49
+ "@budibase/string-templates": "2.3.14-alpha.0",
50
+ "@budibase/types": "2.3.14-alpha.0",
51
51
  "@bull-board/api": "3.7.0",
52
52
  "@bull-board/koa": "3.9.4",
53
53
  "@elastic/elasticsearch": "7.10.0",
@@ -125,6 +125,7 @@
125
125
  "@jest/test-sequencer": "24.9.0",
126
126
  "@swc/core": "^1.3.25",
127
127
  "@swc/jest": "^0.2.24",
128
+ "@trendyol/jest-testcontainers": "^2.1.1",
128
129
  "@types/apidoc": "0.50.0",
129
130
  "@types/bson": "4.2.0",
130
131
  "@types/global-agent": "2.1.1",
@@ -151,6 +152,7 @@
151
152
  "is-wsl": "2.2.0",
152
153
  "jest": "28.1.1",
153
154
  "jest-openapi": "0.14.2",
155
+ "jest-serial-runner": "^1.2.1",
154
156
  "nodemon": "2.0.15",
155
157
  "openapi-types": "9.3.1",
156
158
  "openapi-typescript": "5.2.0",
@@ -169,5 +171,5 @@
169
171
  "optionalDependencies": {
170
172
  "oracledb": "5.3.0"
171
173
  },
172
- "gitHead": "9c597e33980a25b955edf24d48b551a37a5d3216"
174
+ "gitHead": "39e98630a1832320bf140a359d2aa3cd6062bb2b"
173
175
  }
@@ -0,0 +1,32 @@
1
+ SELECT 'CREATE DATABASE main'
2
+ WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'main')\gexec
3
+ CREATE SCHEMA test;
4
+ CREATE TABLE territories (
5
+ territory_id character varying(20) PRIMARY KEY,
6
+ territory_description character varying(60) NOT NULL
7
+ );
8
+ CREATE TABLE employees (
9
+ employee_id smallint PRIMARY KEY,
10
+ last_name character varying(20) NOT NULL,
11
+ first_name character varying(10) NOT NULL,
12
+ title character varying(30),
13
+ title_of_courtesy character varying(25),
14
+ birth_date date,
15
+ hire_date date,
16
+ address character varying(60),
17
+ city character varying(15),
18
+ region character varying(15),
19
+ postal_code character varying(10),
20
+ country character varying(15),
21
+ home_phone character varying(24),
22
+ extension character varying(4),
23
+ photo bytea,
24
+ notes text,
25
+ reports_to smallint REFERENCES employees(employee_id),
26
+ photo_path character varying(255)
27
+ );
28
+ CREATE TABLE employee_territories (
29
+ employee_id smallint REFERENCES employees(employee_id),
30
+ territory_id character varying(20) REFERENCES territories(territory_id),
31
+ CONSTRAINT pk_employee_territories PRIMARY KEY (employee_id, territory_id)
32
+ );
@@ -0,0 +1,24 @@
1
+ #!/bin/node
2
+ const { createApp } = require("./utils")
3
+
4
+ const APP_COUNT = 100
5
+
6
+ if (!process.argv[2]) {
7
+ console.error("Please specify an API key as script argument.")
8
+ process.exit(-1)
9
+ }
10
+
11
+ async function run() {
12
+ for (let i = 0; i < APP_COUNT; i++) {
13
+ const app = await createApp(process.argv[2])
14
+ console.log(`App created: ${app._id}`)
15
+ }
16
+ }
17
+
18
+ run()
19
+ .then(() => {
20
+ console.log(`Finished creating ${APP_COUNT} apps.`)
21
+ })
22
+ .catch(err => {
23
+ console.error(err)
24
+ })
@@ -0,0 +1,30 @@
1
+ #!/bin/node
2
+ const { createApp, getTable, createRow } = require("./utils")
3
+
4
+ const ROW_COUNT = 1000
5
+
6
+ if (!process.argv[2]) {
7
+ console.error("Please specify an API key as script argument.")
8
+ process.exit(-1)
9
+ }
10
+
11
+ async function run() {
12
+ const apiKey = process.argv[2]
13
+ const app = await createApp(apiKey)
14
+ console.log(`App created: ${app._id}`)
15
+ const table = await getTable(apiKey, app._id)
16
+ console.log(`Table found: ${table.name}`)
17
+ const promises = []
18
+ for (let i = 0; i < ROW_COUNT; i++) {
19
+ promises.push(await createRow(apiKey, app._id, table))
20
+ }
21
+ await Promise.all(promises)
22
+ }
23
+
24
+ run()
25
+ .then(() => {
26
+ console.log(`Finished creating ${ROW_COUNT} rows.`)
27
+ })
28
+ .catch(err => {
29
+ console.error(err)
30
+ })
@@ -0,0 +1,66 @@
1
+ const fetch = require("node-fetch")
2
+ const uuid = require("uuid/v4")
3
+
4
+ const URL_APP = "http://localhost:10000/api/public/v1/applications"
5
+ const URL_TABLE = "http://localhost:10000/api/public/v1/tables/search"
6
+
7
+ async function request(apiKey, url, method, body, appId = undefined) {
8
+ const headers = {
9
+ "x-budibase-api-key": apiKey,
10
+ "Content-Type": "application/json",
11
+ }
12
+ if (appId) {
13
+ headers["x-budibase-app-id"] = appId
14
+ }
15
+ const res = await fetch(url, {
16
+ method,
17
+ headers,
18
+ body: JSON.stringify(body),
19
+ })
20
+ if (res.status !== 200) {
21
+ throw new Error(await res.text())
22
+ }
23
+ return res
24
+ }
25
+
26
+ exports.createApp = async apiKey => {
27
+ const name = uuid().replace(/-/g, "")
28
+ const body = {
29
+ name,
30
+ url: `/${name}`,
31
+ useTemplate: "true",
32
+ templateKey: "app/school-admin-panel",
33
+ templateName: "School Admin Panel",
34
+ }
35
+ const res = await request(apiKey, URL_APP, "POST", body)
36
+ const json = await res.json()
37
+ return json.data
38
+ }
39
+
40
+ exports.getTable = async (apiKey, appId) => {
41
+ const res = await request(apiKey, URL_TABLE, "POST", {}, appId)
42
+ const json = await res.json()
43
+ return json.data[0]
44
+ }
45
+
46
+ exports.createRow = async (apiKey, appId, table) => {
47
+ const body = {}
48
+ for (let [key, schema] of Object.entries(table.schema)) {
49
+ let fake
50
+ switch (schema.type) {
51
+ default:
52
+ case "string":
53
+ fake = schema.constraints.inclusion
54
+ ? schema.constraints.inclusion[0]
55
+ : "a"
56
+ break
57
+ case "number":
58
+ fake = 1
59
+ break
60
+ }
61
+ body[key] = fake
62
+ }
63
+ const url = `http://localhost:10000/api/public/v1/tables/${table._id}/rows`
64
+ const res = await request(apiKey, url, "POST", body, appId)
65
+ return (await res.json()).data
66
+ }
@@ -817,7 +817,6 @@
817
817
  "type": "string",
818
818
  "enum": [
819
819
  "string",
820
- "barcodeqr",
821
820
  "longform",
822
821
  "options",
823
822
  "number",
@@ -829,7 +828,8 @@
829
828
  "formula",
830
829
  "auto",
831
830
  "json",
832
- "internal"
831
+ "internal",
832
+ "barcodeqr"
833
833
  ],
834
834
  "description": "Defines the type of the column, most explain themselves, a link column is a relationship."
835
835
  },
@@ -1021,7 +1021,6 @@
1021
1021
  "type": "string",
1022
1022
  "enum": [
1023
1023
  "string",
1024
- "barcodeqr",
1025
1024
  "longform",
1026
1025
  "options",
1027
1026
  "number",
@@ -1033,7 +1032,8 @@
1033
1032
  "formula",
1034
1033
  "auto",
1035
1034
  "json",
1036
- "internal"
1035
+ "internal",
1036
+ "barcodeqr"
1037
1037
  ],
1038
1038
  "description": "Defines the type of the column, most explain themselves, a link column is a relationship."
1039
1039
  },
@@ -1236,7 +1236,6 @@
1236
1236
  "type": "string",
1237
1237
  "enum": [
1238
1238
  "string",
1239
- "barcodeqr",
1240
1239
  "longform",
1241
1240
  "options",
1242
1241
  "number",
@@ -1248,7 +1247,8 @@
1248
1247
  "formula",
1249
1248
  "auto",
1250
1249
  "json",
1251
- "internal"
1250
+ "internal",
1251
+ "barcodeqr"
1252
1252
  ],
1253
1253
  "description": "Defines the type of the column, most explain themselves, a link column is a relationship."
1254
1254
  },
@@ -603,7 +603,6 @@ components:
603
603
  type: string
604
604
  enum:
605
605
  - string
606
- - barcodeqr
607
606
  - longform
608
607
  - options
609
608
  - number
@@ -616,6 +615,7 @@ components:
616
615
  - auto
617
616
  - json
618
617
  - internal
618
+ - barcodeqr
619
619
  description: Defines the type of the column, most explain themselves, a link
620
620
  column is a relationship.
621
621
  constraints:
@@ -766,7 +766,6 @@ components:
766
766
  type: string
767
767
  enum:
768
768
  - string
769
- - barcodeqr
770
769
  - longform
771
770
  - options
772
771
  - number
@@ -779,6 +778,7 @@ components:
779
778
  - auto
780
779
  - json
781
780
  - internal
781
+ - barcodeqr
782
782
  description: Defines the type of the column, most explain themselves, a link
783
783
  column is a relationship.
784
784
  constraints:
@@ -936,7 +936,6 @@ components:
936
936
  type: string
937
937
  enum:
938
938
  - string
939
- - barcodeqr
940
939
  - longform
941
940
  - options
942
941
  - number
@@ -949,6 +948,7 @@ components:
949
948
  - auto
950
949
  - json
951
950
  - internal
951
+ - barcodeqr
952
952
  description: Defines the type of the column, most explain themselves, a link
953
953
  column is a relationship.
954
954
  constraints:
@@ -41,7 +41,7 @@ const datasets = {
41
41
  describe("Rest Importer", () => {
42
42
  const config = new TestConfig(false)
43
43
 
44
- beforeEach(async () => {
44
+ beforeAll(async () => {
45
45
  await config.init()
46
46
  })
47
47
 
@@ -186,6 +186,8 @@ export async function preview(ctx: any) {
186
186
  schemaFields[key] = fieldType
187
187
  }
188
188
  }
189
+ // remove configuration before sending event
190
+ delete datasource.config
189
191
  await events.query.previewed(datasource, query)
190
192
  ctx.body = {
191
193
  rows,
@@ -10,6 +10,7 @@ import {
10
10
  FieldSchema,
11
11
  Row,
12
12
  Table,
13
+ RelationshipTypes,
13
14
  } from "@budibase/types"
14
15
  import {
15
16
  breakRowIdField,
@@ -18,7 +19,7 @@ import {
18
19
  convertRowId,
19
20
  } from "../../../integrations/utils"
20
21
  import { getDatasourceAndQuery } from "./utils"
21
- import { FieldTypes, RelationshipTypes } from "../../../constants"
22
+ import { FieldTypes } from "../../../constants"
22
23
  import { breakExternalTableId, isSQL } from "../../../integrations/utils"
23
24
  import { processObjectSync } from "@budibase/string-templates"
24
25
  import { cloneDeep } from "lodash/fp"
@@ -44,6 +45,7 @@ export interface RunConfig {
44
45
  row?: Row
45
46
  rows?: Row[]
46
47
  tables?: Record<string, Table>
48
+ includeSqlRelationships?: IncludeRelationship
47
49
  }
48
50
 
49
51
  function buildFilters(
@@ -706,7 +708,9 @@ export class ExternalRequest {
706
708
  },
707
709
  resource: {
708
710
  // have to specify the fields to avoid column overlap (for SQL)
709
- fields: isSql ? this.buildFields(table) : [],
711
+ fields: isSql
712
+ ? this.buildFields(table, config.includeSqlRelationships)
713
+ : [],
710
714
  },
711
715
  filters,
712
716
  sort,
@@ -18,6 +18,7 @@ import {
18
18
  PaginationJson,
19
19
  Table,
20
20
  Datasource,
21
+ IncludeRelationship,
21
22
  } from "@budibase/types"
22
23
  import sdk from "../../../sdk"
23
24
 
@@ -57,6 +58,7 @@ export async function patch(ctx: BBContext) {
57
58
  return handleRequest(Operation.UPDATE, tableId, {
58
59
  id: breakRowIdField(id),
59
60
  row: inputs,
61
+ includeSqlRelationships: IncludeRelationship.EXCLUDE,
60
62
  })
61
63
  }
62
64
 
@@ -65,6 +67,7 @@ export async function save(ctx: BBContext) {
65
67
  const tableId = ctx.params.tableId
66
68
  return handleRequest(Operation.CREATE, tableId, {
67
69
  row: inputs,
70
+ includeSqlRelationships: IncludeRelationship.EXCLUDE,
68
71
  })
69
72
  }
70
73
 
@@ -78,7 +81,9 @@ export async function fetchView(ctx: BBContext) {
78
81
 
79
82
  export async function fetch(ctx: BBContext) {
80
83
  const tableId = ctx.params.tableId
81
- return handleRequest(Operation.READ, tableId)
84
+ return handleRequest(Operation.READ, tableId, {
85
+ includeSqlRelationships: IncludeRelationship.INCLUDE,
86
+ })
82
87
  }
83
88
 
84
89
  export async function find(ctx: BBContext) {
@@ -86,6 +91,7 @@ export async function find(ctx: BBContext) {
86
91
  const tableId = ctx.params.tableId
87
92
  const response = (await handleRequest(Operation.READ, tableId, {
88
93
  id: breakRowIdField(id),
94
+ includeSqlRelationships: IncludeRelationship.EXCLUDE,
89
95
  })) as Row[]
90
96
  return response ? response[0] : response
91
97
  }
@@ -95,6 +101,7 @@ export async function destroy(ctx: BBContext) {
95
101
  const id = ctx.request.body._id
96
102
  const { row } = (await handleRequest(Operation.DELETE, tableId, {
97
103
  id: breakRowIdField(id),
104
+ includeSqlRelationships: IncludeRelationship.EXCLUDE,
98
105
  })) as { row: Row }
99
106
  return { response: { ok: true }, row }
100
107
  }
@@ -107,6 +114,7 @@ export async function bulkDestroy(ctx: BBContext) {
107
114
  promises.push(
108
115
  handleRequest(Operation.DELETE, tableId, {
109
116
  id: breakRowIdField(row._id),
117
+ includeSqlRelationships: IncludeRelationship.EXCLUDE,
110
118
  })
111
119
  )
112
120
  }
@@ -149,6 +157,7 @@ export async function search(ctx: BBContext) {
149
157
  filters: query,
150
158
  sort,
151
159
  paginate: paginateObj as PaginationJson,
160
+ includeSqlRelationships: IncludeRelationship.INCLUDE,
152
161
  })) as Row[]
153
162
  let hasNextPage = false
154
163
  if (paginate && rows.length === limit) {
@@ -159,6 +168,7 @@ export async function search(ctx: BBContext) {
159
168
  limit: 1,
160
169
  page: bookmark * limit + 1,
161
170
  },
171
+ includeSqlRelationships: IncludeRelationship.INCLUDE,
162
172
  })) as Row[]
163
173
  hasNextPage = nextRows.length > 0
164
174
  }
@@ -249,6 +259,7 @@ export async function fetchEnrichedRow(ctx: BBContext) {
249
259
  const response = (await handleRequest(Operation.READ, tableId, {
250
260
  id,
251
261
  datasource,
262
+ includeSqlRelationships: IncludeRelationship.INCLUDE,
252
263
  })) as Row[]
253
264
  const table: Table = tables[tableName]
254
265
  const row = response[0]
@@ -276,6 +287,7 @@ export async function fetchEnrichedRow(ctx: BBContext) {
276
287
  [primaryLink]: linkedIds,
277
288
  },
278
289
  },
290
+ includeSqlRelationships: IncludeRelationship.INCLUDE,
279
291
  })
280
292
  }
281
293
  return row
@@ -8,7 +8,7 @@ import {
8
8
  foreignKeyStructure,
9
9
  hasTypeChanged,
10
10
  } from "./utils"
11
- import { FieldTypes, RelationshipTypes } from "../../../constants"
11
+ import { FieldTypes } from "../../../constants"
12
12
  import { makeExternalQuery } from "../../../integrations/base/query"
13
13
  import { handleRequest } from "../row/external"
14
14
  import { events, context } from "@budibase/backend-core"
@@ -22,6 +22,7 @@ import {
22
22
  FieldSchema,
23
23
  BBContext,
24
24
  TableRequest,
25
+ RelationshipTypes,
25
26
  } from "@budibase/types"
26
27
  import sdk from "../../../sdk"
27
28
  const { cloneDeep } = require("lodash/fp")
@@ -146,7 +147,7 @@ function generateLinkSchema(
146
147
  column: FieldSchema,
147
148
  table: Table,
148
149
  relatedTable: Table,
149
- type: string
150
+ type: RelationshipTypes
150
151
  ) {
151
152
  if (!table.primary || !relatedTable.primary) {
152
153
  throw new Error("Unable to generate link schema, no primary keys")
@@ -1,7 +1,6 @@
1
1
  import controller from "../../controllers/public/applications"
2
2
  import Endpoint from "./utils/Endpoint"
3
3
  const { nameValidator, applicationValidator } = require("../utils/validators")
4
- import { db } from "@budibase/backend-core"
5
4
 
6
5
  const read = [],
7
6
  write = []
@@ -13,7 +13,7 @@ beforeAll(async () => {
13
13
  app = await config.init()
14
14
  table = await config.updateTable()
15
15
  apiKey = await config.generateApiKey()
16
- makeRequest = generateMakeRequest(apiKey, setup)
16
+ makeRequest = generateMakeRequest(apiKey)
17
17
  })
18
18
 
19
19
  afterAll(setup.afterAll)
@@ -10,7 +10,7 @@ beforeAll(async () => {
10
10
  await config.init()
11
11
  globalUser = await config.globalUser()
12
12
  apiKey = await config.generateApiKey(globalUser._id)
13
- makeRequest = generateMakeRequest(apiKey, setup)
13
+ makeRequest = generateMakeRequest(apiKey)
14
14
  workerRequests.readGlobalUser.mockReturnValue(globalUser)
15
15
  })
16
16
 
@@ -1,13 +1,27 @@
1
+ import * as setup from "../../tests/utilities"
1
2
  import { checkSlashesInUrl } from "../../../../utilities"
3
+ import supertest from "supertest"
2
4
 
3
- export function generateMakeRequest(apiKey: string, setup: any) {
4
- const request = setup.getRequest()
5
- const config = setup.getConfig()
5
+ export type HttpMethod = "post" | "get" | "put" | "delete" | "patch"
6
+
7
+ export type MakeRequestResponse = (
8
+ method: HttpMethod,
9
+ endpoint: string,
10
+ body?: any,
11
+ intAppId?: string
12
+ ) => Promise<supertest.Response>
13
+
14
+ export function generateMakeRequest(
15
+ apiKey: string,
16
+ isInternal = false
17
+ ): MakeRequestResponse {
18
+ const request = setup.getRequest()!
19
+ const config = setup.getConfig()!
6
20
  return async (
7
- method: string,
21
+ method: HttpMethod,
8
22
  endpoint: string,
9
23
  body?: any,
10
- intAppId: string = config.getAppId()
24
+ intAppId: string | null = config.getAppId()
11
25
  ) => {
12
26
  const extraHeaders: any = {
13
27
  "x-budibase-api-key": apiKey,
@@ -15,9 +29,12 @@ export function generateMakeRequest(apiKey: string, setup: any) {
15
29
  if (intAppId) {
16
30
  extraHeaders["x-budibase-app-id"] = intAppId
17
31
  }
18
- const req = request[method](
19
- checkSlashesInUrl(`/api/public/v1/${endpoint}`)
20
- ).set(config.defaultHeaders(extraHeaders))
32
+
33
+ const url = isInternal
34
+ ? endpoint
35
+ : checkSlashesInUrl(`/api/public/v1/${endpoint}`)
36
+
37
+ const req = request[method](url).set(config.defaultHeaders(extraHeaders))
21
38
  if (body) {
22
39
  req.send(body)
23
40
  }
@@ -7,7 +7,7 @@ Array [
7
7
  "entities": Array [
8
8
  Object {
9
9
  "_id": "ta_users",
10
- "_rev": "1-6f4013e796887f1771bf7837598d87e7",
10
+ "_rev": "1-2375e1bc58aeec664dc1b1f04ad43e44",
11
11
  "createdAt": "2020-01-01T00:00:00.000Z",
12
12
  "name": "Users",
13
13
  "primaryDisplay": "email",