@budibase/server 1.0.80-alpha.3 → 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 (316) 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/base/sql.js +1 -16
  199. package/dist/integrations/base/sqlTable.js +4 -8
  200. package/dist/integrations/googlesheets.js +0 -3
  201. package/dist/integrations/microsoftSqlServer.js +43 -60
  202. package/dist/integrations/mysql.js +0 -3
  203. package/dist/integrations/oracle.js +19 -14
  204. package/dist/integrations/postgres.js +28 -34
  205. package/dist/integrations/utils.js +15 -32
  206. package/dist/package.json +7 -11
  207. package/dist/tests/utilities/TestConfiguration.js +8 -25
  208. package/dist/threads/query.js +8 -33
  209. package/dist/tsconfig.tsbuildinfo +1 -1
  210. package/dist/utilities/workerRequests.js +15 -50
  211. package/package.json +8 -12
  212. package/scripts/integrations/mssql/data/setup.sql +1 -18
  213. package/scripts/integrations/oracle/oracle.md +2 -2
  214. package/scripts/integrations/postgres/init.sql +3 -11
  215. package/scripts/likeCypress.ts +6 -9
  216. package/scripts/proxy/generateProxyConfig.js +70 -0
  217. package/src/api/controllers/application.js +0 -1
  218. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  219. package/src/api/controllers/row/internal.js +0 -4
  220. package/src/api/controllers/table/index.js +1 -2
  221. package/src/api/controllers/webhook.js +6 -3
  222. package/src/api/index.js +1 -4
  223. package/src/api/routes/automation.js +33 -3
  224. package/src/api/routes/datasource.js +52 -6
  225. package/src/api/routes/index.js +0 -2
  226. package/src/api/routes/permission.js +18 -4
  227. package/src/api/routes/role.js +24 -3
  228. package/src/api/routes/row.js +2 -3
  229. package/src/api/routes/screen.js +29 -2
  230. package/src/api/routes/table.js +19 -4
  231. package/src/api/routes/tests/utilities/index.js +0 -24
  232. package/src/api/routes/webhook.js +18 -2
  233. package/src/automations/steps/filter.js +2 -3
  234. package/src/automations/steps/queryRows.js +1 -1
  235. package/src/automations/utils.js +2 -2
  236. package/src/constants/index.js +0 -4
  237. package/src/db/utils.js +0 -12
  238. package/src/definitions/common.ts +0 -4
  239. package/src/definitions/datasource.ts +0 -1
  240. package/src/environment.js +0 -1
  241. package/src/integrations/base/datasourcePlus.ts +0 -3
  242. package/src/integrations/base/sql.ts +1 -16
  243. package/src/integrations/base/sqlTable.ts +7 -11
  244. package/src/integrations/googlesheets.ts +2 -5
  245. package/src/integrations/microsoftSqlServer.ts +61 -86
  246. package/src/integrations/mysql.ts +0 -4
  247. package/src/integrations/oracle.ts +35 -27
  248. package/src/integrations/postgres.ts +26 -33
  249. package/src/integrations/utils.ts +15 -43
  250. package/src/tests/utilities/TestConfiguration.js +2 -23
  251. package/src/threads/query.js +9 -37
  252. package/src/utilities/workerRequests.js +16 -65
  253. package/builder/assets/index.f8c92447.js +0 -1288
  254. package/coverage/lcov-report/api/routes/utils/index.html +0 -111
  255. package/coverage/lcov-report/api/routes/utils/validators.js.html +0 -737
  256. package/dist/api/controllers/public/applications.js +0 -94
  257. package/dist/api/controllers/public/mapping/applications.js +0 -29
  258. package/dist/api/controllers/public/mapping/index.js +0 -11
  259. package/dist/api/controllers/public/mapping/queries.js +0 -36
  260. package/dist/api/controllers/public/mapping/rows.js +0 -24
  261. package/dist/api/controllers/public/mapping/tables.js +0 -23
  262. package/dist/api/controllers/public/mapping/types.js +0 -2
  263. package/dist/api/controllers/public/mapping/users.js +0 -29
  264. package/dist/api/controllers/public/queries.js +0 -38
  265. package/dist/api/controllers/public/rows.js +0 -97
  266. package/dist/api/controllers/public/tables.js +0 -75
  267. package/dist/api/controllers/public/users.js +0 -95
  268. package/dist/api/controllers/public/utils.js +0 -49
  269. package/dist/api/routes/public/applications.js +0 -141
  270. package/dist/api/routes/public/index.js +0 -101
  271. package/dist/api/routes/public/middleware/mapper.js +0 -94
  272. package/dist/api/routes/public/queries.js +0 -77
  273. package/dist/api/routes/public/rows.js +0 -229
  274. package/dist/api/routes/public/tables.js +0 -154
  275. package/dist/api/routes/public/users.js +0 -137
  276. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  277. package/dist/api/routes/utils/validators.js +0 -200
  278. package/dist/definitions/openapi.js +0 -6
  279. package/specs/generate.js +0 -94
  280. package/specs/openapi.json +0 -2232
  281. package/specs/openapi.yaml +0 -1538
  282. package/specs/parameters.js +0 -59
  283. package/specs/resources/application.js +0 -101
  284. package/specs/resources/index.js +0 -24
  285. package/specs/resources/misc.js +0 -12
  286. package/specs/resources/query.js +0 -189
  287. package/specs/resources/row.js +0 -125
  288. package/specs/resources/table.js +0 -191
  289. package/specs/resources/user.js +0 -126
  290. package/specs/resources/utils/Resource.js +0 -26
  291. package/specs/resources/utils/index.js +0 -11
  292. package/specs/security.js +0 -7
  293. package/src/api/controllers/public/applications.ts +0 -74
  294. package/src/api/controllers/public/mapping/applications.ts +0 -32
  295. package/src/api/controllers/public/mapping/index.ts +0 -13
  296. package/src/api/controllers/public/mapping/queries.ts +0 -39
  297. package/src/api/controllers/public/mapping/rows.ts +0 -31
  298. package/src/api/controllers/public/mapping/tables.ts +0 -26
  299. package/src/api/controllers/public/mapping/types.ts +0 -13
  300. package/src/api/controllers/public/mapping/users.ts +0 -32
  301. package/src/api/controllers/public/queries.ts +0 -20
  302. package/src/api/controllers/public/rows.ts +0 -77
  303. package/src/api/controllers/public/tables.ts +0 -56
  304. package/src/api/controllers/public/users.ts +0 -82
  305. package/src/api/controllers/public/utils.ts +0 -38
  306. package/src/api/routes/public/applications.ts +0 -156
  307. package/src/api/routes/public/index.ts +0 -118
  308. package/src/api/routes/public/middleware/mapper.ts +0 -81
  309. package/src/api/routes/public/queries.ts +0 -81
  310. package/src/api/routes/public/rows.ts +0 -242
  311. package/src/api/routes/public/tables.ts +0 -169
  312. package/src/api/routes/public/tests/compare.spec.js +0 -184
  313. package/src/api/routes/public/users.ts +0 -144
  314. package/src/api/routes/public/utils/Endpoint.ts +0 -51
  315. package/src/api/routes/utils/validators.js +0 -219
  316. package/src/definitions/openapi.ts +0 -943
@@ -1,13 +1,34 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/role")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/backend-core/permissions")
5
- const { roleValidator } = require("./utils/validators")
4
+ const Joi = require("joi")
5
+ const joiValidator = require("../../middleware/joi-validator")
6
+ const {
7
+ BUILTIN_PERMISSION_IDS,
8
+ BUILDER,
9
+ PermissionLevels,
10
+ } = require("@budibase/backend-core/permissions")
6
11
 
7
12
  const router = Router()
8
13
 
14
+ function generateValidator() {
15
+ const permLevelArray = Object.values(PermissionLevels)
16
+ // prettier-ignore
17
+ return joiValidator.body(Joi.object({
18
+ _id: Joi.string().optional(),
19
+ _rev: Joi.string().optional(),
20
+ name: Joi.string().required(),
21
+ // this is the base permission ID (for now a built in)
22
+ permissionId: Joi.string().valid(...Object.values(BUILTIN_PERMISSION_IDS)).required(),
23
+ permissions: Joi.object()
24
+ .pattern(/.*/, [Joi.string().valid(...permLevelArray)])
25
+ .optional(),
26
+ inherits: Joi.string().optional(),
27
+ }).unknown(true))
28
+ }
29
+
9
30
  router
10
- .post("/api/roles", authorized(BUILDER), roleValidator(), controller.save)
31
+ .post("/api/roles", authorized(BUILDER), generateValidator(), controller.save)
11
32
  .get("/api/roles", authorized(BUILDER), controller.fetch)
12
33
  .get("/api/roles/:roleId", authorized(BUILDER), controller.find)
13
34
  .delete("/api/roles/:roleId/:rev", authorized(BUILDER), controller.destroy)
@@ -10,7 +10,6 @@ const {
10
10
  PermissionLevels,
11
11
  PermissionTypes,
12
12
  } = require("@budibase/backend-core/permissions")
13
- const { internalSearchValidator } = require("./utils/validators")
14
13
 
15
14
  const router = Router()
16
15
 
@@ -120,6 +119,8 @@ router
120
119
  * "notEqual": {},
121
120
  * "empty": {},
122
121
  * "notEmpty": {},
122
+ * "contains": {},
123
+ * "notContains": {}
123
124
  * "oneOf": {
124
125
  * "columnName": ["value"]
125
126
  * }
@@ -139,7 +140,6 @@ router
139
140
  */
140
141
  .post(
141
142
  "/api/:tableId/search",
142
- internalSearchValidator(),
143
143
  paramResource("tableId"),
144
144
  authorized(PermissionTypes.TABLE, PermissionLevels.READ),
145
145
  rowController.search
@@ -195,7 +195,6 @@ router
195
195
  "/api/:tableId/rows",
196
196
  paramResource("tableId"),
197
197
  authorized(PermissionTypes.TABLE, PermissionLevels.WRITE),
198
- usage,
199
198
  rowController.patch
200
199
  )
201
200
  /**
@@ -2,13 +2,40 @@ const Router = require("@koa/router")
2
2
  const controller = require("../controllers/screen")
3
3
  const authorized = require("../../middleware/authorized")
4
4
  const { BUILDER } = require("@budibase/backend-core/permissions")
5
- const { screenValidator } = require("./utils/validators")
5
+ const joiValidator = require("../../middleware/joi-validator")
6
+ const Joi = require("joi")
6
7
 
7
8
  const router = Router()
8
9
 
10
+ function generateSaveValidation() {
11
+ // prettier-ignore
12
+ return joiValidator.body(Joi.object({
13
+ name: Joi.string().required(),
14
+ routing: Joi.object({
15
+ route: Joi.string().required(),
16
+ roleId: Joi.string().required().allow(""),
17
+ }).required().unknown(true),
18
+ props: Joi.object({
19
+ _id: Joi.string().required(),
20
+ _component: Joi.string().required(),
21
+ _children: Joi.array().required(),
22
+ _instanceName: Joi.string().required(),
23
+ _styles: Joi.object().required(),
24
+ type: Joi.string().optional(),
25
+ table: Joi.string().optional(),
26
+ layoutId: Joi.string().optional(),
27
+ }).required().unknown(true),
28
+ }).unknown(true))
29
+ }
30
+
9
31
  router
10
32
  .get("/api/screens", authorized(BUILDER), controller.fetch)
11
- .post("/api/screens", authorized(BUILDER), screenValidator(), controller.save)
33
+ .post(
34
+ "/api/screens",
35
+ authorized(BUILDER),
36
+ generateSaveValidation(),
37
+ controller.save
38
+ )
12
39
  .delete(
13
40
  "/api/screens/:screenId/:screenRev",
14
41
  authorized(BUILDER),
@@ -7,10 +7,25 @@ const {
7
7
  PermissionLevels,
8
8
  PermissionTypes,
9
9
  } = require("@budibase/backend-core/permissions")
10
- const { tableValidator } = require("./utils/validators")
10
+ const joiValidator = require("../../middleware/joi-validator")
11
+ const Joi = require("joi")
11
12
 
12
13
  const router = Router()
13
14
 
15
+ function generateSaveValidator() {
16
+ // prettier-ignore
17
+ return joiValidator.body(Joi.object({
18
+ _id: Joi.string(),
19
+ _rev: Joi.string(),
20
+ type: Joi.string().valid("table", "internal", "external"),
21
+ primaryDisplay: Joi.string(),
22
+ schema: Joi.object().required(),
23
+ name: Joi.string().required(),
24
+ views: Joi.object(),
25
+ dataImport: Joi.object(),
26
+ }).unknown(true))
27
+ }
28
+
14
29
  router
15
30
  /**
16
31
  * @api {get} /api/tables Fetch all tables
@@ -38,8 +53,8 @@ router
38
53
  * @apiSuccess {object[]} body The response body will be the table that was found.
39
54
  */
40
55
  .get(
41
- "/api/tables/:tableId",
42
- paramResource("tableId"),
56
+ "/api/tables/:id",
57
+ paramResource("id"),
43
58
  authorized(PermissionTypes.TABLE, PermissionLevels.READ),
44
59
  tableController.find
45
60
  )
@@ -121,7 +136,7 @@ router
121
136
  // allows control over updating a table
122
137
  bodyResource("_id"),
123
138
  authorized(BUILDER),
124
- tableValidator(),
139
+ generateSaveValidator(),
125
140
  tableController.save
126
141
  )
127
142
  /**
@@ -2,18 +2,6 @@ const TestConfig = require("../../../../tests/utilities/TestConfiguration")
2
2
  const structures = require("../../../../tests/utilities/structures")
3
3
  const env = require("../../../../environment")
4
4
 
5
- function user() {
6
- return {
7
- _id: "user",
8
- _rev: "rev",
9
- createdAt: Date.now(),
10
- email: "test@test.com",
11
- roles: {},
12
- tenantId: "default",
13
- status: "active",
14
- }
15
- }
16
-
17
5
  jest.mock("../../../../utilities/workerRequests", () => ({
18
6
  getGlobalUsers: jest.fn(() => {
19
7
  return {
@@ -25,18 +13,6 @@ jest.mock("../../../../utilities/workerRequests", () => ({
25
13
  _id: "us_uuid1",
26
14
  }
27
15
  }),
28
- allGlobalUsers: jest.fn(() => {
29
- return [user()]
30
- }),
31
- readGlobalUser: jest.fn(() => {
32
- return user()
33
- }),
34
- saveGlobalUser: jest.fn(() => {
35
- return { _id: "user", _rev: "rev" }
36
- }),
37
- deleteGlobalUser: jest.fn(() => {
38
- return { message: "deleted user" }
39
- }),
40
16
  removeAppFromUserRoles: jest.fn(),
41
17
  }))
42
18
 
@@ -1,17 +1,33 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/webhook")
3
3
  const authorized = require("../../middleware/authorized")
4
+ const joiValidator = require("../../middleware/joi-validator")
4
5
  const { BUILDER } = require("@budibase/backend-core/permissions")
5
- const { webhookValidator } = require("./utils/validators")
6
+ const Joi = require("joi")
6
7
 
7
8
  const router = Router()
8
9
 
10
+ function generateSaveValidator() {
11
+ // prettier-ignore
12
+ return joiValidator.body(Joi.object({
13
+ live: Joi.bool(),
14
+ _id: Joi.string().optional(),
15
+ _rev: Joi.string().optional(),
16
+ name: Joi.string().required(),
17
+ bodySchema: Joi.object().optional(),
18
+ action: Joi.object({
19
+ type: Joi.string().required().valid(controller.WebhookType.AUTOMATION),
20
+ target: Joi.string().required(),
21
+ }).required(),
22
+ }).unknown(true))
23
+ }
24
+
9
25
  router
10
26
  .get("/api/webhooks", authorized(BUILDER), controller.fetch)
11
27
  .put(
12
28
  "/api/webhooks",
13
29
  authorized(BUILDER),
14
- webhookValidator(),
30
+ generateSaveValidator(),
15
31
  controller.save
16
32
  )
17
33
  .delete("/api/webhooks/:id/:rev", authorized(BUILDER), controller.destroy)
@@ -16,11 +16,10 @@ exports.FilterConditions = FilterConditions
16
16
  exports.PrettyFilterConditions = PrettyFilterConditions
17
17
 
18
18
  exports.definition = {
19
- name: "Condition",
19
+ name: "Filter",
20
20
  tagline: "{{inputs.field}} {{inputs.condition}} {{inputs.value}}",
21
21
  icon: "Branch2",
22
- description:
23
- "Conditionally halt automations which do not meet certain conditions",
22
+ description: "Filter any automations which do not meet certain conditions",
24
23
  type: "LOGIC",
25
24
  internal: true,
26
25
  stepId: "FILTER",
@@ -74,7 +74,7 @@ exports.definition = {
74
74
  async function getTable(appId, tableId) {
75
75
  const ctx = buildCtx(appId, null, {
76
76
  params: {
77
- tableId,
77
+ id: tableId,
78
78
  },
79
79
  })
80
80
  await tableController.find(ctx)
@@ -5,7 +5,7 @@ const CouchDB = require("../db")
5
5
  const { queue } = require("./bullboard")
6
6
  const newid = require("../db/newid")
7
7
  const { updateEntityMetadata } = require("../utilities")
8
- const { MetadataTypes, WebhookType } = require("../constants")
8
+ const { MetadataTypes } = require("../constants")
9
9
  const { getProdAppID } = require("@budibase/backend-core/db")
10
10
  const { cloneDeep } = require("lodash/fp")
11
11
  const { getAppDB, getAppId } = require("@budibase/backend-core/context")
@@ -159,7 +159,7 @@ exports.checkForWebhooks = async ({ oldAuto, newAuto }) => {
159
159
  request: {
160
160
  body: new webhooks.Webhook(
161
161
  "Automation webhook",
162
- WebhookType.AUTOMATION,
162
+ webhooks.WebhookType.AUTOMATION,
163
163
  newAuto._id
164
164
  ),
165
165
  },
@@ -186,9 +186,5 @@ exports.BuildSchemaErrors = {
186
186
  INVALID_COLUMN: "invalid_column",
187
187
  }
188
188
 
189
- exports.WebhookType = {
190
- AUTOMATION: "automation",
191
- }
192
-
193
189
  // pass through the list from the auth/core lib
194
190
  exports.ObjectStoreBuckets = ObjectStoreBuckets
package/src/db/utils.js CHANGED
@@ -146,18 +146,6 @@ exports.getRowParams = (tableId = null, rowId = null, otherProps = {}) => {
146
146
  return getDocParams(DocumentTypes.ROW, endOfKey, otherProps)
147
147
  }
148
148
 
149
- /**
150
- * Given a row ID this will find the table ID within it (only works for internal tables).
151
- * @param {string} rowId The ID of the row.
152
- * @returns {string} The table ID.
153
- */
154
- exports.getTableIDFromRowID = rowId => {
155
- const components = rowId
156
- .split(DocumentTypes.TABLE + SEPARATOR)[1]
157
- .split(SEPARATOR)
158
- return `${DocumentTypes.TABLE}${SEPARATOR}${components[0]}`
159
- }
160
-
161
149
  /**
162
150
  * Gets a new row ID for the specified table.
163
151
  * @param {string} tableId The table which the row is being created for.
@@ -5,10 +5,6 @@ export interface Base {
5
5
  _rev?: string
6
6
  }
7
7
 
8
- export interface Application extends Base {
9
- appId?: string
10
- }
11
-
12
8
  export interface FieldSchema {
13
9
  // TODO: replace with field types enum when done
14
10
  type: string
@@ -153,7 +153,6 @@ export interface QueryJson {
153
153
  datasourceId: string
154
154
  entityId: string
155
155
  operation: Operation
156
- schema?: string
157
156
  }
158
157
  resource: {
159
158
  fields: string[]
@@ -45,7 +45,6 @@ module.exports = {
45
45
  INTERNAL_API_KEY: process.env.INTERNAL_API_KEY,
46
46
  MULTI_TENANCY: process.env.MULTI_TENANCY,
47
47
  HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS,
48
- API_REQ_LIMIT_PER_SEC: process.env.API_REQ_LIMIT_PER_SEC,
49
48
  // environment
50
49
  NODE_ENV: process.env.NODE_ENV,
51
50
  JEST_WORKER_ID: process.env.JEST_WORKER_ID,
@@ -5,8 +5,5 @@ export interface DatasourcePlus extends IntegrationBase {
5
5
  tables: Record<string, Table>
6
6
  schemaErrors: Record<string, string>
7
7
 
8
- // if the datasource supports the use of bindings directly (to protect against SQL injection)
9
- // this returns the format of the identifier
10
- getBindingIdentifier(): string
11
8
  buildSchema(datasourceId: string, entities: Record<string, Table>): any
12
9
  }
@@ -249,9 +249,6 @@ class InternalBuilder {
249
249
  create(knex: Knex, json: QueryJson, opts: QueryOptions): KnexQuery {
250
250
  const { endpoint, body } = json
251
251
  let query: KnexQuery = knex(endpoint.entityId)
252
- if (endpoint.schema) {
253
- query = query.withSchema(endpoint.schema)
254
- }
255
252
  const parsedBody = parseBody(body)
256
253
  // make sure no null values in body for creation
257
254
  for (let [key, value] of Object.entries(parsedBody)) {
@@ -270,9 +267,6 @@ class InternalBuilder {
270
267
  bulkCreate(knex: Knex, json: QueryJson): KnexQuery {
271
268
  const { endpoint, body } = json
272
269
  let query: KnexQuery = knex(endpoint.entityId)
273
- if (endpoint.schema) {
274
- query = query.withSchema(endpoint.schema)
275
- }
276
270
  if (!Array.isArray(body)) {
277
271
  return query
278
272
  }
@@ -281,7 +275,7 @@ class InternalBuilder {
281
275
  }
282
276
 
283
277
  read(knex: Knex, json: QueryJson, limit: number): KnexQuery {
284
- let { endpoint, resource, filters, paginate, relationships } = json
278
+ let { endpoint, resource, filters, sort, paginate, relationships } = json
285
279
  const tableName = endpoint.entityId
286
280
  // select all if not specified
287
281
  if (!resource) {
@@ -308,9 +302,6 @@ class InternalBuilder {
308
302
  }
309
303
  // start building the query
310
304
  let query: KnexQuery = knex(tableName).limit(foundLimit)
311
- if (endpoint.schema) {
312
- query = query.withSchema(endpoint.schema)
313
- }
314
305
  if (foundOffset) {
315
306
  query = query.offset(foundOffset)
316
307
  }
@@ -340,9 +331,6 @@ class InternalBuilder {
340
331
  update(knex: Knex, json: QueryJson, opts: QueryOptions): KnexQuery {
341
332
  const { endpoint, body, filters } = json
342
333
  let query: KnexQuery = knex(endpoint.entityId)
343
- if (endpoint.schema) {
344
- query = query.withSchema(endpoint.schema)
345
- }
346
334
  const parsedBody = parseBody(body)
347
335
  query = this.addFilters(query, filters, { tableName: endpoint.entityId })
348
336
  // mysql can't use returning
@@ -356,9 +344,6 @@ class InternalBuilder {
356
344
  delete(knex: Knex, json: QueryJson, opts: QueryOptions): KnexQuery {
357
345
  const { endpoint, filters } = json
358
346
  let query: KnexQuery = knex(endpoint.entityId)
359
- if (endpoint.schema) {
360
- query = query.withSchema(endpoint.schema)
361
- }
362
347
  query = this.addFilters(query, filters, { tableName: endpoint.entityId })
363
348
  // mysql can't use returning
364
349
  if (opts.disableReturning) {
@@ -101,28 +101,28 @@ function generateSchema(
101
101
  }
102
102
 
103
103
  function buildCreateTable(
104
- knex: SchemaBuilder,
104
+ knex: Knex,
105
105
  table: Table,
106
106
  tables: Record<string, Table>
107
107
  ): SchemaBuilder {
108
- return knex.createTable(table.name, schema => {
108
+ return knex.schema.createTable(table.name, schema => {
109
109
  generateSchema(schema, table, tables)
110
110
  })
111
111
  }
112
112
 
113
113
  function buildUpdateTable(
114
- knex: SchemaBuilder,
114
+ knex: Knex,
115
115
  table: Table,
116
116
  tables: Record<string, Table>,
117
117
  oldTable: Table
118
118
  ): SchemaBuilder {
119
- return knex.alterTable(table.name, schema => {
119
+ return knex.schema.alterTable(table.name, schema => {
120
120
  generateSchema(schema, table, tables, oldTable)
121
121
  })
122
122
  }
123
123
 
124
- function buildDeleteTable(knex: SchemaBuilder, table: Table): SchemaBuilder {
125
- return knex.dropTable(table.name)
124
+ function buildDeleteTable(knex: Knex, table: Table): SchemaBuilder {
125
+ return knex.schema.dropTable(table.name)
126
126
  }
127
127
 
128
128
  class SqlTableQueryBuilder {
@@ -146,11 +146,7 @@ class SqlTableQueryBuilder {
146
146
  }
147
147
 
148
148
  _tableQuery(json: QueryJson): any {
149
- let client = knex({ client: this.sqlClient }).schema
150
- if (json?.endpoint?.schema) {
151
- client = client.withSchema(json.endpoint.schema)
152
- }
153
-
149
+ const client = knex({ client: this.sqlClient })
154
150
  let query
155
151
  if (!json.table || !json.meta || !json.meta.tables) {
156
152
  throw "Cannot execute without table being specified"
@@ -6,10 +6,11 @@ import {
6
6
  } from "../definitions/datasource"
7
7
  import { OAuth2Client } from "google-auth-library"
8
8
  import { DatasourcePlus } from "./base/datasourcePlus"
9
- import { Table, TableSchema } from "../definitions/common"
9
+ import { Row, Table, TableSchema } from "../definitions/common"
10
10
  import { buildExternalTableId } from "./utils"
11
11
  import { DataSourceOperation, FieldTypes } from "../constants"
12
12
  import { GoogleSpreadsheet } from "google-spreadsheet"
13
+ import { table } from "console"
13
14
 
14
15
  module GoogleSheetsModule {
15
16
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
@@ -111,10 +112,6 @@ module GoogleSheetsModule {
111
112
  this.client = new GoogleSpreadsheet(spreadsheetId)
112
113
  }
113
114
 
114
- getBindingIdentifier() {
115
- return ""
116
- }
117
-
118
115
  /**
119
116
  * Pull the spreadsheet ID out from a valid google sheets URL
120
117
  * @param spreadsheetId - the URL or standard spreadsheetId of the google sheet