@budibase/server 1.0.80-alpha.1 → 1.0.80

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 (308) hide show
  1. package/__mocks__/node-fetch.ts +0 -1
  2. package/builder/assets/index.22a39cc9.js +1352 -0
  3. package/builder/assets/{index.c57242d4.css → index.c8d1e8f0.css} +2 -2
  4. package/builder/assets/{vendor.a7c6ad0a.js → vendor.20f80cec.js} +216 -190
  5. package/builder/index.html +3 -3
  6. package/coverage/clover.xml +2327 -2390
  7. package/coverage/coverage-final.json +137 -138
  8. package/coverage/lcov-report/api/controllers/analytics.js.html +6 -6
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  10. package/coverage/lcov-report/api/controllers/application.js.html +149 -152
  11. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  12. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  13. package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
  14. package/coverage/lcov-report/api/controllers/cloud.js.html +11 -11
  15. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  16. package/coverage/lcov-report/api/controllers/datasource.js.html +16 -16
  17. package/coverage/lcov-report/api/controllers/dev.js.html +19 -19
  18. package/coverage/lcov-report/api/controllers/index.html +16 -16
  19. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  20. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  21. package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
  22. package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
  23. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  24. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  25. package/coverage/lcov-report/api/controllers/query/index.js.html +26 -26
  26. package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
  30. package/coverage/lcov-report/api/controllers/row/index.html +27 -27
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +46 -46
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +82 -94
  33. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +204 -204
  34. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -24
  35. package/coverage/lcov-report/api/controllers/row/utils.js.html +29 -29
  36. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  37. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  38. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +49 -49
  39. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  40. package/coverage/lcov-report/api/controllers/table/index.html +11 -11
  41. package/coverage/lcov-report/api/controllers/table/index.js.html +44 -47
  42. package/coverage/lcov-report/api/controllers/table/internal.js.html +50 -50
  43. package/coverage/lcov-report/api/controllers/table/utils.js.html +80 -80
  44. package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
  45. package/coverage/lcov-report/api/controllers/user.js.html +19 -19
  46. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  47. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  49. package/coverage/lcov-report/api/controllers/view/utils.js.html +12 -12
  50. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  51. package/coverage/lcov-report/api/controllers/webhook.js.html +27 -18
  52. package/coverage/lcov-report/api/index.html +10 -10
  53. package/coverage/lcov-report/api/index.js.html +28 -37
  54. package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
  55. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  56. package/coverage/lcov-report/api/routes/application.js.html +9 -9
  57. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  58. package/coverage/lcov-report/api/routes/automation.js.html +109 -19
  59. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  60. package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
  61. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  62. package/coverage/lcov-report/api/routes/datasource.js.html +156 -18
  63. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  64. package/coverage/lcov-report/api/routes/dev.js.html +13 -13
  65. package/coverage/lcov-report/api/routes/index.html +35 -35
  66. package/coverage/lcov-report/api/routes/index.js.html +32 -38
  67. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  68. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  69. package/coverage/lcov-report/api/routes/metadata.js.html +9 -9
  70. package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
  71. package/coverage/lcov-report/api/routes/permission.js.html +58 -16
  72. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  73. package/coverage/lcov-report/api/routes/role.js.html +78 -15
  74. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  75. package/coverage/lcov-report/api/routes/row.js.html +14 -17
  76. package/coverage/lcov-report/api/routes/screen.js.html +95 -14
  77. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/static.js.html +13 -13
  79. package/coverage/lcov-report/api/routes/table.js.html +62 -17
  80. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  81. package/coverage/lcov-report/api/routes/user.js.html +8 -8
  82. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  83. package/coverage/lcov-report/api/routes/webhook.js.html +62 -14
  84. package/coverage/lcov-report/automations/actions.js.html +24 -24
  85. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  86. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  87. package/coverage/lcov-report/automations/index.html +1 -1
  88. package/coverage/lcov-report/automations/index.js.html +7 -7
  89. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  90. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
  91. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  92. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  94. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  96. package/coverage/lcov-report/automations/steps/filter.js.html +9 -12
  97. package/coverage/lcov-report/automations/steps/index.html +1 -1
  98. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  99. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  100. package/coverage/lcov-report/automations/steps/queryRows.js.html +11 -11
  101. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  102. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  103. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  104. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  105. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  106. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  107. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  108. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  109. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  111. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggers.js.html +26 -26
  116. package/coverage/lcov-report/automations/utils.js.html +35 -35
  117. package/coverage/lcov-report/constants/index.html +5 -5
  118. package/coverage/lcov-report/constants/index.js.html +28 -40
  119. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  120. package/coverage/lcov-report/constants/screens.js.html +4 -4
  121. package/coverage/lcov-report/db/client.js.html +18 -18
  122. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  123. package/coverage/lcov-report/db/index.html +15 -15
  124. package/coverage/lcov-report/db/index.js.html +3 -3
  125. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +21 -21
  126. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/index.js.html +36 -36
  128. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +30 -30
  129. package/coverage/lcov-report/db/newid.js.html +4 -4
  130. package/coverage/lcov-report/db/utils.js.html +87 -123
  131. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  132. package/coverage/lcov-report/events/index.html +1 -1
  133. package/coverage/lcov-report/events/index.js.html +8 -8
  134. package/coverage/lcov-report/events/utils.js.html +18 -18
  135. package/coverage/lcov-report/index.html +74 -89
  136. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  137. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  138. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  139. package/coverage/lcov-report/middleware/authorized.js.html +29 -29
  140. package/coverage/lcov-report/middleware/builder.js.html +16 -16
  141. package/coverage/lcov-report/middleware/currentapp.js.html +44 -44
  142. package/coverage/lcov-report/middleware/index.html +1 -1
  143. package/coverage/lcov-report/middleware/joi-validator.js.html +14 -14
  144. package/coverage/lcov-report/middleware/resourceId.js.html +29 -29
  145. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  146. package/coverage/lcov-report/middleware/usageQuota.js.html +17 -17
  147. package/coverage/lcov-report/middleware/utils.js.html +4 -4
  148. package/coverage/lcov-report/threads/automation.js.html +1 -1
  149. package/coverage/lcov-report/threads/index.html +19 -19
  150. package/coverage/lcov-report/threads/index.js.html +10 -10
  151. package/coverage/lcov-report/threads/query.js.html +39 -123
  152. package/coverage/lcov-report/threads/utils.js.html +14 -14
  153. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  154. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  155. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  156. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  157. package/coverage/lcov-report/utilities/global.js.html +28 -28
  158. package/coverage/lcov-report/utilities/index.html +18 -18
  159. package/coverage/lcov-report/utilities/index.js.html +24 -24
  160. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -9
  161. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  163. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  164. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +60 -60
  166. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +13 -13
  167. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  168. package/coverage/lcov-report/utilities/security.js.html +8 -8
  169. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/index.js.html +12 -12
  172. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +8 -8
  173. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  174. package/coverage/lcov-report/utilities/users.js.html +5 -5
  175. package/coverage/lcov-report/utilities/workerRequests.js.html +53 -200
  176. package/coverage/lcov.info +3233 -3332
  177. package/dist/api/controllers/application.js +0 -1
  178. package/dist/api/controllers/row/internal.js +1 -4
  179. package/dist/api/controllers/table/index.js +1 -2
  180. package/dist/api/controllers/webhook.js +5 -3
  181. package/dist/api/index.js +1 -3
  182. package/dist/api/routes/automation.js +31 -3
  183. package/dist/api/routes/datasource.js +50 -3
  184. package/dist/api/routes/index.js +0 -2
  185. package/dist/api/routes/permission.js +14 -4
  186. package/dist/api/routes/role.js +19 -3
  187. package/dist/api/routes/row.js +4 -3
  188. package/dist/api/routes/screen.js +23 -2
  189. package/dist/api/routes/table.js +17 -3
  190. package/dist/api/routes/tests/utilities/index.js +0 -23
  191. package/dist/api/routes/webhook.js +17 -2
  192. package/dist/automations/steps/filter.js +2 -2
  193. package/dist/automations/steps/queryRows.js +1 -1
  194. package/dist/automations/utils.js +2 -2
  195. package/dist/constants/index.js +0 -3
  196. package/dist/db/utils.js +0 -11
  197. package/dist/environment.js +0 -1
  198. package/dist/integrations/googlesheets.js +0 -3
  199. package/dist/integrations/microsoftSqlServer.js +29 -35
  200. package/dist/integrations/mysql.js +0 -3
  201. package/dist/integrations/oracle.js +19 -14
  202. package/dist/integrations/postgres.js +28 -34
  203. package/dist/package.json +7 -11
  204. package/dist/tests/utilities/TestConfiguration.js +8 -25
  205. package/dist/threads/query.js +8 -33
  206. package/dist/tsconfig.tsbuildinfo +1 -1
  207. package/dist/utilities/workerRequests.js +15 -50
  208. package/package.json +8 -12
  209. package/scripts/integrations/oracle/oracle.md +2 -2
  210. package/scripts/integrations/postgres/init.sql +3 -5
  211. package/scripts/likeCypress.ts +6 -9
  212. package/scripts/proxy/generateProxyConfig.js +70 -0
  213. package/src/api/controllers/application.js +0 -1
  214. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  215. package/src/api/controllers/row/internal.js +0 -4
  216. package/src/api/controllers/table/index.js +1 -2
  217. package/src/api/controllers/webhook.js +6 -3
  218. package/src/api/index.js +1 -4
  219. package/src/api/routes/automation.js +33 -3
  220. package/src/api/routes/datasource.js +52 -6
  221. package/src/api/routes/index.js +0 -2
  222. package/src/api/routes/permission.js +18 -4
  223. package/src/api/routes/role.js +24 -3
  224. package/src/api/routes/row.js +2 -3
  225. package/src/api/routes/screen.js +29 -2
  226. package/src/api/routes/table.js +19 -4
  227. package/src/api/routes/tests/utilities/index.js +0 -24
  228. package/src/api/routes/webhook.js +18 -2
  229. package/src/automations/steps/filter.js +2 -3
  230. package/src/automations/steps/queryRows.js +1 -1
  231. package/src/automations/utils.js +2 -2
  232. package/src/constants/index.js +0 -4
  233. package/src/db/utils.js +0 -12
  234. package/src/definitions/common.ts +0 -4
  235. package/src/environment.js +0 -1
  236. package/src/integrations/base/datasourcePlus.ts +0 -3
  237. package/src/integrations/googlesheets.ts +2 -5
  238. package/src/integrations/microsoftSqlServer.ts +33 -38
  239. package/src/integrations/mysql.ts +0 -4
  240. package/src/integrations/oracle.ts +35 -27
  241. package/src/integrations/postgres.ts +26 -33
  242. package/src/tests/utilities/TestConfiguration.js +2 -23
  243. package/src/threads/query.js +9 -37
  244. package/src/utilities/workerRequests.js +16 -65
  245. package/builder/assets/index.c0b657be.js +0 -1288
  246. package/coverage/lcov-report/api/routes/utils/index.html +0 -111
  247. package/coverage/lcov-report/api/routes/utils/validators.js.html +0 -737
  248. package/dist/api/controllers/public/applications.js +0 -94
  249. package/dist/api/controllers/public/mapping/applications.js +0 -29
  250. package/dist/api/controllers/public/mapping/index.js +0 -11
  251. package/dist/api/controllers/public/mapping/queries.js +0 -36
  252. package/dist/api/controllers/public/mapping/rows.js +0 -24
  253. package/dist/api/controllers/public/mapping/tables.js +0 -23
  254. package/dist/api/controllers/public/mapping/types.js +0 -2
  255. package/dist/api/controllers/public/mapping/users.js +0 -29
  256. package/dist/api/controllers/public/queries.js +0 -38
  257. package/dist/api/controllers/public/rows.js +0 -97
  258. package/dist/api/controllers/public/tables.js +0 -75
  259. package/dist/api/controllers/public/users.js +0 -95
  260. package/dist/api/controllers/public/utils.js +0 -49
  261. package/dist/api/routes/public/applications.js +0 -141
  262. package/dist/api/routes/public/index.js +0 -101
  263. package/dist/api/routes/public/middleware/mapper.js +0 -94
  264. package/dist/api/routes/public/queries.js +0 -77
  265. package/dist/api/routes/public/rows.js +0 -229
  266. package/dist/api/routes/public/tables.js +0 -154
  267. package/dist/api/routes/public/users.js +0 -137
  268. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  269. package/dist/api/routes/utils/validators.js +0 -200
  270. package/dist/definitions/openapi.js +0 -6
  271. package/specs/generate.js +0 -83
  272. package/specs/openapi.json +0 -2222
  273. package/specs/openapi.yaml +0 -1530
  274. package/specs/parameters.js +0 -59
  275. package/specs/resources/application.js +0 -101
  276. package/specs/resources/index.js +0 -24
  277. package/specs/resources/misc.js +0 -12
  278. package/specs/resources/query.js +0 -189
  279. package/specs/resources/row.js +0 -125
  280. package/specs/resources/table.js +0 -191
  281. package/specs/resources/user.js +0 -126
  282. package/specs/resources/utils/Resource.js +0 -26
  283. package/specs/resources/utils/index.js +0 -11
  284. package/specs/security.js +0 -7
  285. package/src/api/controllers/public/applications.ts +0 -74
  286. package/src/api/controllers/public/mapping/applications.ts +0 -32
  287. package/src/api/controllers/public/mapping/index.ts +0 -13
  288. package/src/api/controllers/public/mapping/queries.ts +0 -39
  289. package/src/api/controllers/public/mapping/rows.ts +0 -31
  290. package/src/api/controllers/public/mapping/tables.ts +0 -26
  291. package/src/api/controllers/public/mapping/types.ts +0 -13
  292. package/src/api/controllers/public/mapping/users.ts +0 -32
  293. package/src/api/controllers/public/queries.ts +0 -20
  294. package/src/api/controllers/public/rows.ts +0 -77
  295. package/src/api/controllers/public/tables.ts +0 -56
  296. package/src/api/controllers/public/users.ts +0 -82
  297. package/src/api/controllers/public/utils.ts +0 -38
  298. package/src/api/routes/public/applications.ts +0 -156
  299. package/src/api/routes/public/index.ts +0 -118
  300. package/src/api/routes/public/middleware/mapper.ts +0 -81
  301. package/src/api/routes/public/queries.ts +0 -81
  302. package/src/api/routes/public/rows.ts +0 -242
  303. package/src/api/routes/public/tables.ts +0 -169
  304. package/src/api/routes/public/tests/compare.spec.js +0 -184
  305. package/src/api/routes/public/users.ts +0 -144
  306. package/src/api/routes/public/utils/Endpoint.ts +0 -51
  307. package/src/api/routes/utils/validators.js +0 -219
  308. package/src/definitions/openapi.ts +0 -943
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/10</span>
28
+ <span class='fraction'>13/13</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">80% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/0</span>
35
+ <span class='fraction'>4/5</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/0</span>
42
+ <span class='fraction'>2/2</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/10</span>
49
+ <span class='fraction'>13/13</span>
50
50
  </div>
51
51
 
52
52
 
@@ -132,26 +132,72 @@
132
132
  <a name='L73'></a><a href='#L73'>73</a>
133
133
  <a name='L74'></a><a href='#L74'>74</a>
134
134
  <a name='L75'></a><a href='#L75'>75</a>
135
- <a name='L76'></a><a href='#L76'>76</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
136
- <span class="cline-any cline-yes">24x</span>
137
- <span class="cline-any cline-yes">24x</span>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a>
147
+ <a name='L88'></a><a href='#L88'>88</a>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
166
+ <span class="cline-any cline-yes">23x</span>
167
+ <span class="cline-any cline-yes">23x</span>
168
+ <span class="cline-any cline-yes">23x</span>
169
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-yes">23x</span>
174
+ <span class="cline-any cline-yes">23x</span>
175
+ <span class="cline-any cline-yes">23x</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-yes">23x</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-yes">23x</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-yes">92x</span>
186
+ <span class="cline-any cline-neutral">&nbsp;</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
189
  <span class="cline-any cline-neutral">&nbsp;</span>
139
190
  <span class="cline-any cline-neutral">&nbsp;</span>
140
191
  <span class="cline-any cline-neutral">&nbsp;</span>
141
192
  <span class="cline-any cline-neutral">&nbsp;</span>
142
- <span class="cline-any cline-yes">24x</span>
143
- <span class="cline-any cline-yes">24x</span>
144
193
  <span class="cline-any cline-neutral">&nbsp;</span>
145
194
  <span class="cline-any cline-neutral">&nbsp;</span>
146
195
  <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-yes">24x</span>
148
- <span class="cline-any cline-yes">24x</span>
149
196
  <span class="cline-any cline-neutral">&nbsp;</span>
150
- <span class="cline-any cline-yes">24x</span>
151
197
  <span class="cline-any cline-neutral">&nbsp;</span>
152
- <span class="cline-any cline-yes">24x</span>
153
198
  <span class="cline-any cline-neutral">&nbsp;</span>
154
199
  <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-yes">46x</span>
155
201
  <span class="cline-any cline-neutral">&nbsp;</span>
156
202
  <span class="cline-any cline-neutral">&nbsp;</span>
157
203
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -163,6 +209,7 @@
163
209
  <span class="cline-any cline-neutral">&nbsp;</span>
164
210
  <span class="cline-any cline-neutral">&nbsp;</span>
165
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-yes">23x</span>
166
213
  <span class="cline-any cline-neutral">&nbsp;</span>
167
214
  <span class="cline-any cline-neutral">&nbsp;</span>
168
215
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -206,24 +253,67 @@
206
253
  <span class="cline-any cline-neutral">&nbsp;</span>
207
254
  <span class="cline-any cline-neutral">&nbsp;</span>
208
255
  <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-yes">24x</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-yes">23x</span>
210
270
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
211
271
  const controller = require("../controllers/automation")
212
272
  const authorized = require("../../middleware/authorized")
273
+ const joiValidator = require("../../middleware/joi-validator")
213
274
  const {
214
275
  BUILDER,
215
276
  PermissionLevels,
216
277
  PermissionTypes,
217
278
  } = require("@budibase/backend-core/permissions")
279
+ const Joi = require("joi")
218
280
  const { bodyResource, paramResource } = require("../../middleware/resourceId")
219
281
  const {
220
282
  middleware: appInfoMiddleware,
221
283
  AppType,
222
284
  } = require("../../middleware/appInfo")
223
- const { automationValidator } = require("./utils/validators")
224
285
  &nbsp;
225
286
  const router = Router()
226
287
  &nbsp;
288
+ // prettier-ignore
289
+ function generateStepSchema(allowStepTypes) {
290
+ return Joi.object({
291
+ stepId: Joi.string().required(),
292
+ id: Joi.string().required(),
293
+ description: Joi.string().required(),
294
+ name: Joi.string().required(),
295
+ tagline: Joi.string().required(),
296
+ icon: Joi.string().required(),
297
+ params: Joi.object(),
298
+ args: Joi.object(),
299
+ type: Joi.string().required().valid(...allowStepTypes),
300
+ }).unknown(true)
301
+ }
302
+ &nbsp;
303
+ function generateValidator(existing = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> {
304
+ // prettier-ignore
305
+ return joiValidator.body(Joi.object({
306
+ _id: existing ? Joi.string().required() : Joi.string(),
307
+ _rev: existing ? Joi.string().required() : Joi.string(),
308
+ name: Joi.string().required(),
309
+ type: Joi.string().valid("automation").required(),
310
+ definition: Joi.object({
311
+ steps: Joi.array().required().items(generateStepSchema(["ACTION", "LOGIC"])),
312
+ trigger: generateStepSchema(["TRIGGER"]).allow(null),
313
+ }).required().unknown(true),
314
+ }).unknown(true))
315
+ }
316
+ &nbsp;
227
317
  router
228
318
  .get(
229
319
  "/api/automations/trigger/list",
@@ -251,13 +341,13 @@ router
251
341
  "/api/automations",
252
342
  bodyResource("_id"),
253
343
  authorized(BUILDER),
254
- automationValidator(true),
344
+ generateValidator(true),
255
345
  controller.update
256
346
  )
257
347
  .post(
258
348
  "/api/automations",
259
349
  authorized(BUILDER),
260
- automationValidator(false),
350
+ generateValidator(false),
261
351
  controller.create
262
352
  )
263
353
  .delete(
@@ -289,7 +379,7 @@ module.exports = router
289
379
  <div class='footer quiet pad2 space-top1 center small'>
290
380
  Code coverage generated by
291
381
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
292
- at Sun Mar 06 2022 21:05:04 GMT+0000 (Coordinated Universal Time)
382
+ at Tue Mar 08 2022 08:50:56 GMT+0000 (Coordinated Universal Time)
293
383
  </div>
294
384
  </div>
295
385
  <script src="../../prettify.js"></script>
@@ -67,16 +67,16 @@
67
67
  <a name='L8'></a><a href='#L8'>8</a>
68
68
  <a name='L9'></a><a href='#L9'>9</a>
69
69
  <a name='L10'></a><a href='#L10'>10</a>
70
- <a name='L11'></a><a href='#L11'>11</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
71
- <span class="cline-any cline-yes">24x</span>
72
- <span class="cline-any cline-yes">24x</span>
73
- <span class="cline-any cline-yes">24x</span>
70
+ <a name='L11'></a><a href='#L11'>11</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
71
+ <span class="cline-any cline-yes">23x</span>
72
+ <span class="cline-any cline-yes">23x</span>
73
+ <span class="cline-any cline-yes">23x</span>
74
74
  <span class="cline-any cline-neutral">&nbsp;</span>
75
- <span class="cline-any cline-yes">24x</span>
75
+ <span class="cline-any cline-yes">23x</span>
76
76
  <span class="cline-any cline-neutral">&nbsp;</span>
77
- <span class="cline-any cline-yes">24x</span>
77
+ <span class="cline-any cline-yes">23x</span>
78
78
  <span class="cline-any cline-neutral">&nbsp;</span>
79
- <span class="cline-any cline-yes">24x</span>
79
+ <span class="cline-any cline-yes">23x</span>
80
80
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
81
81
  const controller = require("../controllers/backup")
82
82
  const authorized = require("../../middleware/authorized")
@@ -94,7 +94,7 @@ module.exports = router
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
97
- at Sun Mar 06 2022 21:05:04 GMT+0000 (Coordinated Universal Time)
97
+ at Tue Mar 08 2022 08:50:56 GMT+0000 (Coordinated Universal Time)
98
98
  </div>
99
99
  </div>
100
100
  <script src="../../prettify.js"></script>
@@ -71,20 +71,20 @@
71
71
  <a name='L12'></a><a href='#L12'>12</a>
72
72
  <a name='L13'></a><a href='#L13'>13</a>
73
73
  <a name='L14'></a><a href='#L14'>14</a>
74
- <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
75
- <span class="cline-any cline-yes">24x</span>
76
- <span class="cline-any cline-yes">24x</span>
77
- <span class="cline-any cline-yes">24x</span>
74
+ <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
75
+ <span class="cline-any cline-yes">23x</span>
76
+ <span class="cline-any cline-yes">23x</span>
77
+ <span class="cline-any cline-yes">23x</span>
78
78
  <span class="cline-any cline-neutral">&nbsp;</span>
79
- <span class="cline-any cline-yes">24x</span>
79
+ <span class="cline-any cline-yes">23x</span>
80
80
  <span class="cline-any cline-neutral">&nbsp;</span>
81
- <span class="cline-any cline-yes">24x</span>
81
+ <span class="cline-any cline-yes">23x</span>
82
82
  <span class="cline-any cline-neutral">&nbsp;</span>
83
83
  <span class="cline-any cline-neutral">&nbsp;</span>
84
84
  <span class="cline-any cline-neutral">&nbsp;</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-neutral">&nbsp;</span>
87
- <span class="cline-any cline-yes">24x</span>
87
+ <span class="cline-any cline-yes">23x</span>
88
88
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
89
89
  const controller = require("../controllers/cloud")
90
90
  const authorized = require("../../middleware/authorized")
@@ -106,7 +106,7 @@ module.exports = router
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
109
- at Sun Mar 06 2022 21:05:04 GMT+0000 (Coordinated Universal Time)
109
+ at Tue Mar 08 2022 08:50:56 GMT+0000 (Coordinated Universal Time)
110
110
  </div>
111
111
  </div>
112
112
  <script src="../../prettify.js"></script>
@@ -71,20 +71,20 @@
71
71
  <a name='L12'></a><a href='#L12'>12</a>
72
72
  <a name='L13'></a><a href='#L13'>13</a>
73
73
  <a name='L14'></a><a href='#L14'>14</a>
74
- <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
75
- <span class="cline-any cline-yes">24x</span>
76
- <span class="cline-any cline-yes">24x</span>
77
- <span class="cline-any cline-yes">24x</span>
74
+ <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
75
+ <span class="cline-any cline-yes">23x</span>
76
+ <span class="cline-any cline-yes">23x</span>
77
+ <span class="cline-any cline-yes">23x</span>
78
78
  <span class="cline-any cline-neutral">&nbsp;</span>
79
- <span class="cline-any cline-yes">24x</span>
79
+ <span class="cline-any cline-yes">23x</span>
80
80
  <span class="cline-any cline-neutral">&nbsp;</span>
81
- <span class="cline-any cline-yes">24x</span>
81
+ <span class="cline-any cline-yes">23x</span>
82
82
  <span class="cline-any cline-neutral">&nbsp;</span>
83
83
  <span class="cline-any cline-neutral">&nbsp;</span>
84
84
  <span class="cline-any cline-neutral">&nbsp;</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-neutral">&nbsp;</span>
87
- <span class="cline-any cline-yes">24x</span>
87
+ <span class="cline-any cline-yes">23x</span>
88
88
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
89
89
  const controller = require("../controllers/component")
90
90
  const authorized = require("../../middleware/authorized")
@@ -106,7 +106,7 @@ module.exports = router
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
109
- at Sun Mar 06 2022 21:05:04 GMT+0000 (Coordinated Universal Time)
109
+ at Tue Mar 08 2022 08:50:56 GMT+0000 (Coordinated Universal Time)
110
110
  </div>
111
111
  </div>
112
112
  <script src="../../prettify.js"></script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>8/8</span>
28
+ <span class='fraction'>12/12</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/0</span>
42
+ <span class='fraction'>2/2</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>8/8</span>
49
+ <span class='fraction'>12/12</span>
50
50
  </div>
51
51
 
52
52
 
@@ -108,22 +108,93 @@
108
108
  <a name='L49'></a><a href='#L49'>49</a>
109
109
  <a name='L50'></a><a href='#L50'>50</a>
110
110
  <a name='L51'></a><a href='#L51'>51</a>
111
- <a name='L52'></a><a href='#L52'>52</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
112
- <span class="cline-any cline-yes">24x</span>
113
- <span class="cline-any cline-yes">24x</span>
111
+ <a name='L52'></a><a href='#L52'>52</a>
112
+ <a name='L53'></a><a href='#L53'>53</a>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a>
116
+ <a name='L57'></a><a href='#L57'>57</a>
117
+ <a name='L58'></a><a href='#L58'>58</a>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a>
133
+ <a name='L74'></a><a href='#L74'>74</a>
134
+ <a name='L75'></a><a href='#L75'>75</a>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a>
147
+ <a name='L88'></a><a href='#L88'>88</a>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
158
+ <span class="cline-any cline-yes">23x</span>
159
+ <span class="cline-any cline-yes">23x</span>
160
+ <span class="cline-any cline-yes">23x</span>
161
+ <span class="cline-any cline-neutral">&nbsp;</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
163
+ <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-neutral">&nbsp;</span>
165
+ <span class="cline-any cline-yes">23x</span>
166
+ <span class="cline-any cline-yes">23x</span>
167
+ <span class="cline-any cline-yes">23x</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-yes">23x</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-yes">23x</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-neutral">&nbsp;</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
114
188
  <span class="cline-any cline-neutral">&nbsp;</span>
115
189
  <span class="cline-any cline-neutral">&nbsp;</span>
116
190
  <span class="cline-any cline-neutral">&nbsp;</span>
117
191
  <span class="cline-any cline-neutral">&nbsp;</span>
118
- <span class="cline-any cline-yes">24x</span>
192
+ <span class="cline-any cline-yes">23x</span>
119
193
  <span class="cline-any cline-neutral">&nbsp;</span>
120
194
  <span class="cline-any cline-neutral">&nbsp;</span>
121
195
  <span class="cline-any cline-neutral">&nbsp;</span>
122
- <span class="cline-any cline-yes">24x</span>
123
196
  <span class="cline-any cline-neutral">&nbsp;</span>
124
- <span class="cline-any cline-yes">24x</span>
125
197
  <span class="cline-any cline-neutral">&nbsp;</span>
126
- <span class="cline-any cline-yes">24x</span>
127
198
  <span class="cline-any cline-neutral">&nbsp;</span>
128
199
  <span class="cline-any cline-neutral">&nbsp;</span>
129
200
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -144,6 +215,7 @@
144
215
  <span class="cline-any cline-neutral">&nbsp;</span>
145
216
  <span class="cline-any cline-neutral">&nbsp;</span>
146
217
  <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-yes">23x</span>
147
219
  <span class="cline-any cline-neutral">&nbsp;</span>
148
220
  <span class="cline-any cline-neutral">&nbsp;</span>
149
221
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -158,22 +230,88 @@
158
230
  <span class="cline-any cline-neutral">&nbsp;</span>
159
231
  <span class="cline-any cline-neutral">&nbsp;</span>
160
232
  <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-yes">24x</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-yes">23x</span>
162
254
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
163
255
  const datasourceController = require("../controllers/datasource")
164
256
  const authorized = require("../../middleware/authorized")
257
+ const joiValidator = require("../../middleware/joi-validator")
165
258
  const {
166
259
  BUILDER,
167
260
  PermissionLevels,
168
261
  PermissionTypes,
169
262
  } = require("@budibase/backend-core/permissions")
170
- const {
171
- datasourceValidator,
172
- datasourceQueryValidator,
173
- } = require("./utils/validators")
263
+ const Joi = require("joi")
264
+ const { DataSourceOperation } = require("../../constants")
174
265
  &nbsp;
175
266
  const router = Router()
176
267
  &nbsp;
268
+ function generateDatasourceSchema() {
269
+ // prettier-ignore
270
+ return joiValidator.body(Joi.object({
271
+ _id: Joi.string(),
272
+ _rev: Joi.string(),
273
+ // source: Joi.string().valid("POSTGRES_PLUS"),
274
+ type: Joi.string().allow("datasource_plus"),
275
+ relationships: Joi.array().items(Joi.object({
276
+ from: Joi.string().required(),
277
+ to: Joi.string().required(),
278
+ cardinality: Joi.valid("1:N", "1:1", "N:N").required()
279
+ })),
280
+ // entities: Joi.array().items(Joi.object({
281
+ // type: Joi.string().valid(...Object.values(FieldTypes)).required(),
282
+ // name: Joi.string().required(),
283
+ // })),
284
+ }).unknown(true))
285
+ }
286
+ &nbsp;
287
+ function generateQueryDatasourceSchema() {
288
+ // prettier-ignore
289
+ return joiValidator.body(Joi.object({
290
+ endpoint: Joi.object({
291
+ datasourceId: Joi.string().required(),
292
+ operation: Joi.string().required().valid(...Object.values(DataSourceOperation)),
293
+ entityId: Joi.string().required(),
294
+ }).required(),
295
+ resource: Joi.object({
296
+ fields: Joi.array().items(Joi.string()).optional(),
297
+ }).optional(),
298
+ body: Joi.object().optional(),
299
+ sort: Joi.object().optional(),
300
+ filters: Joi.object({
301
+ string: Joi.object().optional(),
302
+ range: Joi.object().optional(),
303
+ equal: Joi.object().optional(),
304
+ notEqual: Joi.object().optional(),
305
+ empty: Joi.object().optional(),
306
+ notEmpty: Joi.object().optional(),
307
+ }).optional(),
308
+ paginate: Joi.object({
309
+ page: Joi.string().alphanum().optional(),
310
+ limit: Joi.number().optional(),
311
+ }).optional(),
312
+ }))
313
+ }
314
+ &nbsp;
177
315
  router
178
316
  .get("/api/datasources", authorized(BUILDER), datasourceController.fetch)
179
317
  .get(
@@ -189,7 +327,7 @@ router
189
327
  .post(
190
328
  "/api/datasources/query",
191
329
  authorized(PermissionTypes.TABLE, PermissionLevels.READ),
192
- datasourceQueryValidator(),
330
+ generateQueryDatasourceSchema(),
193
331
  datasourceController.query
194
332
  )
195
333
  .post(
@@ -200,7 +338,7 @@ router
200
338
  .post(
201
339
  "/api/datasources",
202
340
  authorized(BUILDER),
203
- datasourceValidator(),
341
+ generateDatasourceSchema(),
204
342
  datasourceController.save
205
343
  )
206
344
  .delete(
@@ -217,7 +355,7 @@ module.exports = router
217
355
  <div class='footer quiet pad2 space-top1 center small'>
218
356
  Code coverage generated by
219
357
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
220
- at Sun Mar 06 2022 21:05:04 GMT+0000 (Coordinated Universal Time)
358
+ at Tue Mar 08 2022 08:50:56 GMT+0000 (Coordinated Universal Time)
221
359
  </div>
222
360
  </div>
223
361
  <script src="../../prettify.js"></script>
@@ -74,14 +74,14 @@
74
74
  <a name='L15'></a><a href='#L15'>15</a>
75
75
  <a name='L16'></a><a href='#L16'>16</a>
76
76
  <a name='L17'></a><a href='#L17'>17</a>
77
- <a name='L18'></a><a href='#L18'>18</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
78
- <span class="cline-any cline-yes">24x</span>
79
- <span class="cline-any cline-yes">24x</span>
80
- <span class="cline-any cline-yes">24x</span>
77
+ <a name='L18'></a><a href='#L18'>18</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
78
+ <span class="cline-any cline-yes">23x</span>
79
+ <span class="cline-any cline-yes">23x</span>
80
+ <span class="cline-any cline-yes">23x</span>
81
81
  <span class="cline-any cline-neutral">&nbsp;</span>
82
- <span class="cline-any cline-yes">24x</span>
82
+ <span class="cline-any cline-yes">23x</span>
83
83
  <span class="cline-any cline-neutral">&nbsp;</span>
84
- <span class="cline-any cline-yes">24x</span>
84
+ <span class="cline-any cline-yes">23x</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-neutral">&nbsp;</span>
87
87
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -90,7 +90,7 @@
90
90
  <span class="cline-any cline-neutral">&nbsp;</span>
91
91
  <span class="cline-any cline-neutral">&nbsp;</span>
92
92
  <span class="cline-any cline-neutral">&nbsp;</span>
93
- <span class="cline-any cline-yes">24x</span>
93
+ <span class="cline-any cline-yes">23x</span>
94
94
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
95
95
  const controller = require("../controllers/deploy")
96
96
  const authorized = require("../../middleware/authorized")
@@ -115,7 +115,7 @@ module.exports = router
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
118
- at Sun Mar 06 2022 21:05:04 GMT+0000 (Coordinated Universal Time)
118
+ at Tue Mar 08 2022 08:50:56 GMT+0000 (Coordinated Universal Time)
119
119
  </div>
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>