@budibase/server 1.0.79 → 1.0.80-alpha.2

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 +1 -0
  2. package/builder/assets/{index.c8d1e8f0.css → index.c57242d4.css} +2 -2
  3. package/builder/assets/index.f3e82852.js +1288 -0
  4. package/builder/assets/{vendor.20f80cec.js → vendor.a7c6ad0a.js} +190 -216
  5. package/builder/index.html +3 -3
  6. package/coverage/clover.xml +2399 -2336
  7. package/coverage/coverage-final.json +138 -137
  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 +152 -149
  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 +94 -82
  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 +47 -44
  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 +18 -27
  52. package/coverage/lcov-report/api/index.html +10 -10
  53. package/coverage/lcov-report/api/index.js.html +37 -28
  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 +19 -109
  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 +18 -156
  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 +38 -32
  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 +16 -58
  72. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  73. package/coverage/lcov-report/api/routes/role.js.html +15 -78
  74. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  75. package/coverage/lcov-report/api/routes/row.js.html +17 -14
  76. package/coverage/lcov-report/api/routes/screen.js.html +14 -95
  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 +17 -62
  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/utils/index.html +111 -0
  83. package/coverage/lcov-report/api/routes/utils/validators.js.html +737 -0
  84. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  85. package/coverage/lcov-report/api/routes/webhook.js.html +14 -62
  86. package/coverage/lcov-report/automations/actions.js.html +24 -24
  87. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  88. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  89. package/coverage/lcov-report/automations/index.html +1 -1
  90. package/coverage/lcov-report/automations/index.js.html +7 -7
  91. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  92. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  94. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  95. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  96. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  97. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  98. package/coverage/lcov-report/automations/steps/filter.js.html +12 -9
  99. package/coverage/lcov-report/automations/steps/index.html +1 -1
  100. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  101. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  102. package/coverage/lcov-report/automations/steps/queryRows.js.html +11 -11
  103. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  104. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  105. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  106. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  107. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  108. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  109. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggers.js.html +26 -26
  118. package/coverage/lcov-report/automations/utils.js.html +35 -35
  119. package/coverage/lcov-report/constants/index.html +5 -5
  120. package/coverage/lcov-report/constants/index.js.html +40 -28
  121. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  122. package/coverage/lcov-report/constants/screens.js.html +4 -4
  123. package/coverage/lcov-report/db/client.js.html +18 -18
  124. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  125. package/coverage/lcov-report/db/index.html +15 -15
  126. package/coverage/lcov-report/db/index.js.html +3 -3
  127. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +21 -21
  128. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  129. package/coverage/lcov-report/db/linkedRows/index.js.html +36 -36
  130. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +30 -30
  131. package/coverage/lcov-report/db/newid.js.html +4 -4
  132. package/coverage/lcov-report/db/utils.js.html +123 -87
  133. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  134. package/coverage/lcov-report/events/index.html +1 -1
  135. package/coverage/lcov-report/events/index.js.html +8 -8
  136. package/coverage/lcov-report/events/utils.js.html +18 -18
  137. package/coverage/lcov-report/index.html +89 -74
  138. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  139. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  140. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  141. package/coverage/lcov-report/middleware/authorized.js.html +29 -29
  142. package/coverage/lcov-report/middleware/builder.js.html +16 -16
  143. package/coverage/lcov-report/middleware/currentapp.js.html +44 -44
  144. package/coverage/lcov-report/middleware/index.html +1 -1
  145. package/coverage/lcov-report/middleware/joi-validator.js.html +14 -14
  146. package/coverage/lcov-report/middleware/resourceId.js.html +29 -29
  147. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +17 -17
  149. package/coverage/lcov-report/middleware/utils.js.html +4 -4
  150. package/coverage/lcov-report/threads/automation.js.html +1 -1
  151. package/coverage/lcov-report/threads/index.html +19 -19
  152. package/coverage/lcov-report/threads/index.js.html +10 -10
  153. package/coverage/lcov-report/threads/query.js.html +123 -39
  154. package/coverage/lcov-report/threads/utils.js.html +14 -14
  155. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  156. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  157. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  158. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  159. package/coverage/lcov-report/utilities/global.js.html +28 -28
  160. package/coverage/lcov-report/utilities/index.html +18 -18
  161. package/coverage/lcov-report/utilities/index.js.html +24 -24
  162. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -9
  163. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  166. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  167. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +60 -60
  168. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +13 -13
  169. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  170. package/coverage/lcov-report/utilities/security.js.html +8 -8
  171. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/index.js.html +12 -12
  174. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +8 -8
  175. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  176. package/coverage/lcov-report/utilities/users.js.html +5 -5
  177. package/coverage/lcov-report/utilities/workerRequests.js.html +200 -53
  178. package/coverage/lcov.info +3323 -3224
  179. package/dist/api/controllers/application.js +1 -0
  180. package/dist/api/controllers/public/applications.js +94 -0
  181. package/dist/api/controllers/public/mapping/applications.js +29 -0
  182. package/dist/api/controllers/public/mapping/index.js +11 -0
  183. package/dist/api/controllers/public/mapping/queries.js +36 -0
  184. package/dist/api/controllers/public/mapping/rows.js +24 -0
  185. package/dist/api/controllers/public/mapping/tables.js +23 -0
  186. package/dist/api/controllers/public/mapping/types.js +2 -0
  187. package/dist/api/controllers/public/mapping/users.js +29 -0
  188. package/dist/api/controllers/public/queries.js +38 -0
  189. package/dist/api/controllers/public/rows.js +97 -0
  190. package/dist/api/controllers/public/tables.js +75 -0
  191. package/dist/api/controllers/public/users.js +95 -0
  192. package/dist/api/controllers/public/utils.js +49 -0
  193. package/dist/api/controllers/row/internal.js +4 -1
  194. package/dist/api/controllers/table/index.js +2 -1
  195. package/dist/api/controllers/webhook.js +3 -5
  196. package/dist/api/index.js +3 -1
  197. package/dist/api/routes/automation.js +3 -31
  198. package/dist/api/routes/datasource.js +3 -50
  199. package/dist/api/routes/index.js +2 -0
  200. package/dist/api/routes/permission.js +4 -14
  201. package/dist/api/routes/public/applications.js +141 -0
  202. package/dist/api/routes/public/index.js +101 -0
  203. package/dist/api/routes/public/middleware/mapper.js +94 -0
  204. package/dist/api/routes/public/queries.js +77 -0
  205. package/dist/api/routes/public/rows.js +229 -0
  206. package/dist/api/routes/public/tables.js +154 -0
  207. package/dist/api/routes/public/users.js +137 -0
  208. package/dist/api/routes/public/utils/Endpoint.js +36 -0
  209. package/dist/api/routes/role.js +3 -19
  210. package/dist/api/routes/row.js +3 -4
  211. package/dist/api/routes/screen.js +2 -23
  212. package/dist/api/routes/table.js +3 -17
  213. package/dist/api/routes/tests/utilities/index.js +23 -0
  214. package/dist/api/routes/utils/validators.js +200 -0
  215. package/dist/api/routes/webhook.js +2 -17
  216. package/dist/automations/steps/filter.js +2 -2
  217. package/dist/automations/steps/queryRows.js +1 -1
  218. package/dist/automations/utils.js +2 -2
  219. package/dist/constants/index.js +3 -0
  220. package/dist/db/utils.js +11 -0
  221. package/dist/definitions/openapi.js +6 -0
  222. package/dist/environment.js +1 -0
  223. package/dist/integrations/base/sql.js +16 -1
  224. package/dist/integrations/base/sqlTable.js +8 -4
  225. package/dist/integrations/googlesheets.js +3 -0
  226. package/dist/integrations/microsoftSqlServer.js +60 -43
  227. package/dist/integrations/mysql.js +3 -0
  228. package/dist/integrations/oracle.js +14 -19
  229. package/dist/integrations/postgres.js +34 -28
  230. package/dist/integrations/utils.js +32 -15
  231. package/dist/package.json +11 -7
  232. package/dist/tests/utilities/TestConfiguration.js +25 -8
  233. package/dist/threads/query.js +33 -8
  234. package/dist/tsconfig.tsbuildinfo +1 -1
  235. package/dist/utilities/workerRequests.js +50 -15
  236. package/package.json +12 -8
  237. package/scripts/integrations/mssql/data/setup.sql +18 -1
  238. package/scripts/integrations/oracle/oracle.md +2 -2
  239. package/scripts/integrations/postgres/init.sql +11 -3
  240. package/scripts/likeCypress.ts +9 -6
  241. package/specs/generate.js +83 -0
  242. package/specs/openapi.json +2222 -0
  243. package/specs/openapi.yaml +1530 -0
  244. package/specs/parameters.js +59 -0
  245. package/specs/resources/application.js +101 -0
  246. package/specs/resources/index.js +24 -0
  247. package/specs/resources/misc.js +12 -0
  248. package/specs/resources/query.js +189 -0
  249. package/specs/resources/row.js +125 -0
  250. package/specs/resources/table.js +191 -0
  251. package/specs/resources/user.js +126 -0
  252. package/specs/resources/utils/Resource.js +26 -0
  253. package/specs/resources/utils/index.js +11 -0
  254. package/specs/security.js +7 -0
  255. package/src/api/controllers/application.js +1 -0
  256. package/src/api/controllers/public/applications.ts +74 -0
  257. package/src/api/controllers/public/mapping/applications.ts +32 -0
  258. package/src/api/controllers/public/mapping/index.ts +13 -0
  259. package/src/api/controllers/public/mapping/queries.ts +39 -0
  260. package/src/api/controllers/public/mapping/rows.ts +31 -0
  261. package/src/api/controllers/public/mapping/tables.ts +26 -0
  262. package/src/api/controllers/public/mapping/types.ts +13 -0
  263. package/src/api/controllers/public/mapping/users.ts +32 -0
  264. package/src/api/controllers/public/queries.ts +20 -0
  265. package/src/api/controllers/public/rows.ts +77 -0
  266. package/src/api/controllers/public/tables.ts +56 -0
  267. package/src/api/controllers/public/users.ts +82 -0
  268. package/src/api/controllers/public/utils.ts +38 -0
  269. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  270. package/src/api/controllers/row/internal.js +4 -0
  271. package/src/api/controllers/table/index.js +2 -1
  272. package/src/api/controllers/webhook.js +3 -6
  273. package/src/api/index.js +4 -1
  274. package/src/api/routes/automation.js +3 -33
  275. package/src/api/routes/datasource.js +6 -52
  276. package/src/api/routes/index.js +2 -0
  277. package/src/api/routes/permission.js +4 -18
  278. package/src/api/routes/public/applications.ts +156 -0
  279. package/src/api/routes/public/index.ts +118 -0
  280. package/src/api/routes/public/middleware/mapper.ts +81 -0
  281. package/src/api/routes/public/queries.ts +81 -0
  282. package/src/api/routes/public/rows.ts +242 -0
  283. package/src/api/routes/public/tables.ts +169 -0
  284. package/src/api/routes/public/tests/compare.spec.js +184 -0
  285. package/src/api/routes/public/users.ts +144 -0
  286. package/src/api/routes/public/utils/Endpoint.ts +51 -0
  287. package/src/api/routes/role.js +3 -24
  288. package/src/api/routes/row.js +3 -2
  289. package/src/api/routes/screen.js +2 -29
  290. package/src/api/routes/table.js +4 -19
  291. package/src/api/routes/tests/utilities/index.js +24 -0
  292. package/src/api/routes/utils/validators.js +219 -0
  293. package/src/api/routes/webhook.js +2 -18
  294. package/src/automations/steps/filter.js +3 -2
  295. package/src/automations/steps/queryRows.js +1 -1
  296. package/src/automations/utils.js +2 -2
  297. package/src/constants/index.js +4 -0
  298. package/src/db/utils.js +12 -0
  299. package/src/definitions/common.ts +4 -0
  300. package/src/definitions/datasource.ts +1 -0
  301. package/src/definitions/openapi.ts +943 -0
  302. package/src/environment.js +1 -0
  303. package/src/integrations/base/datasourcePlus.ts +3 -0
  304. package/src/integrations/base/sql.ts +16 -1
  305. package/src/integrations/base/sqlTable.ts +11 -7
  306. package/src/integrations/googlesheets.ts +5 -2
  307. package/src/integrations/microsoftSqlServer.ts +86 -61
  308. package/src/integrations/mysql.ts +4 -0
  309. package/src/integrations/oracle.ts +27 -35
  310. package/src/integrations/postgres.ts +33 -26
  311. package/src/integrations/utils.ts +43 -15
  312. package/src/tests/utilities/TestConfiguration.js +23 -2
  313. package/src/threads/query.js +37 -9
  314. package/src/utilities/workerRequests.js +65 -16
  315. package/builder/assets/index.f28c5d54.js +0 -1352
  316. package/scripts/proxy/generateProxyConfig.js +0 -70
@@ -0,0 +1,219 @@
1
+ const joiValidator = require("../../../middleware/joi-validator")
2
+ const { DataSourceOperation } = require("../../../constants")
3
+ const { WebhookType } = require("../../../constants")
4
+ const {
5
+ BUILTIN_PERMISSION_IDS,
6
+ PermissionLevels,
7
+ } = require("@budibase/backend-core/permissions")
8
+ const Joi = require("joi")
9
+
10
+ const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("")
11
+ const OPTIONAL_NUMBER = Joi.number().optional().allow(null)
12
+
13
+ exports.tableValidator = () => {
14
+ // prettier-ignore
15
+ return joiValidator.body(Joi.object({
16
+ _id: OPTIONAL_STRING,
17
+ _rev: OPTIONAL_STRING,
18
+ type: OPTIONAL_STRING.valid("table", "internal", "external"),
19
+ primaryDisplay: OPTIONAL_STRING,
20
+ schema: Joi.object().required(),
21
+ name: Joi.string().required(),
22
+ views: Joi.object(),
23
+ dataImport: Joi.object(),
24
+ }).unknown(true))
25
+ }
26
+
27
+ exports.nameValidator = () => {
28
+ // prettier-ignore
29
+ return joiValidator.body(Joi.object({
30
+ name: OPTIONAL_STRING,
31
+ }))
32
+ }
33
+
34
+ exports.datasourceValidator = () => {
35
+ // prettier-ignore
36
+ return joiValidator.body(Joi.object({
37
+ _id: Joi.string(),
38
+ _rev: Joi.string(),
39
+ type: OPTIONAL_STRING.allow("datasource_plus"),
40
+ relationships: Joi.array().items(Joi.object({
41
+ from: Joi.string().required(),
42
+ to: Joi.string().required(),
43
+ cardinality: Joi.valid("1:N", "1:1", "N:N").required()
44
+ })),
45
+ }).unknown(true))
46
+ }
47
+
48
+ function filterObject() {
49
+ // prettier-ignore
50
+ return Joi.object({
51
+ string: Joi.object().optional(),
52
+ fuzzy: Joi.object().optional(),
53
+ range: Joi.object().optional(),
54
+ equal: Joi.object().optional(),
55
+ notEqual: Joi.object().optional(),
56
+ empty: Joi.object().optional(),
57
+ notEmpty: Joi.object().optional(),
58
+ oneOf: Joi.object().optional(),
59
+ contains: Joi.object().optional(),
60
+ notContains: Joi.object().optional(),
61
+ }).unknown(true)
62
+ }
63
+
64
+ exports.internalSearchValidator = () => {
65
+ // prettier-ignore
66
+ return joiValidator.body(Joi.object({
67
+ tableId: OPTIONAL_STRING,
68
+ query: filterObject(),
69
+ limit: OPTIONAL_NUMBER,
70
+ sort: OPTIONAL_STRING,
71
+ sortOrder: OPTIONAL_STRING,
72
+ sortType: OPTIONAL_STRING,
73
+ paginate: Joi.boolean(),
74
+ bookmark: Joi.alternatives().try(OPTIONAL_STRING, OPTIONAL_NUMBER).optional(),
75
+ }))
76
+ }
77
+
78
+ exports.externalSearchValidator = () => {
79
+ return joiValidator.body(
80
+ Joi.object({
81
+ query: filterObject(),
82
+ paginate: Joi.boolean().optional(),
83
+ bookmark: Joi.alternatives()
84
+ .try(OPTIONAL_STRING, OPTIONAL_NUMBER)
85
+ .optional(),
86
+ limit: OPTIONAL_NUMBER,
87
+ sort: Joi.object({
88
+ column: Joi.string(),
89
+ order: OPTIONAL_STRING.valid("ascending", "descending"),
90
+ type: OPTIONAL_STRING.valid("string", "number"),
91
+ }).optional(),
92
+ })
93
+ )
94
+ }
95
+
96
+ exports.datasourceQueryValidator = () => {
97
+ // prettier-ignore
98
+ return joiValidator.body(Joi.object({
99
+ endpoint: Joi.object({
100
+ datasourceId: Joi.string().required(),
101
+ operation: Joi.string().required().valid(...Object.values(DataSourceOperation)),
102
+ entityId: Joi.string().required(),
103
+ }).required(),
104
+ resource: Joi.object({
105
+ fields: Joi.array().items(Joi.string()).optional(),
106
+ }).optional(),
107
+ body: Joi.object().optional(),
108
+ sort: Joi.object().optional(),
109
+ filters: filterObject().optional(),
110
+ paginate: Joi.object({
111
+ page: Joi.string().alphanum().optional(),
112
+ limit: Joi.number().optional(),
113
+ }).optional(),
114
+ }))
115
+ }
116
+
117
+ exports.webhookValidator = () => {
118
+ // prettier-ignore
119
+ return joiValidator.body(Joi.object({
120
+ live: Joi.bool(),
121
+ _id: OPTIONAL_STRING,
122
+ _rev: OPTIONAL_STRING,
123
+ name: Joi.string().required(),
124
+ bodySchema: Joi.object().optional(),
125
+ action: Joi.object({
126
+ type: Joi.string().required().valid(WebhookType.AUTOMATION),
127
+ target: Joi.string().required(),
128
+ }).required(),
129
+ }).unknown(true))
130
+ }
131
+
132
+ exports.roleValidator = () => {
133
+ const permLevelArray = Object.values(PermissionLevels)
134
+ // prettier-ignore
135
+ return joiValidator.body(Joi.object({
136
+ _id: OPTIONAL_STRING,
137
+ _rev: OPTIONAL_STRING,
138
+ name: Joi.string().required(),
139
+ // this is the base permission ID (for now a built in)
140
+ permissionId: Joi.string().valid(...Object.values(BUILTIN_PERMISSION_IDS)).required(),
141
+ permissions: Joi.object()
142
+ .pattern(/.*/, [Joi.string().valid(...permLevelArray)])
143
+ .optional(),
144
+ inherits: OPTIONAL_STRING,
145
+ }).unknown(true))
146
+ }
147
+
148
+ exports.permissionValidator = () => {
149
+ const permLevelArray = Object.values(PermissionLevels)
150
+ // prettier-ignore
151
+ return joiValidator.params(Joi.object({
152
+ level: Joi.string().valid(...permLevelArray).required(),
153
+ resourceId: Joi.string(),
154
+ roleId: Joi.string(),
155
+ }).unknown(true))
156
+ }
157
+
158
+ exports.screenValidator = () => {
159
+ // prettier-ignore
160
+ return joiValidator.body(Joi.object({
161
+ name: Joi.string().required(),
162
+ routing: Joi.object({
163
+ route: Joi.string().required(),
164
+ roleId: Joi.string().required().allow(""),
165
+ }).required().unknown(true),
166
+ props: Joi.object({
167
+ _id: Joi.string().required(),
168
+ _component: Joi.string().required(),
169
+ _children: Joi.array().required(),
170
+ _instanceName: Joi.string().required(),
171
+ _styles: Joi.object().required(),
172
+ type: OPTIONAL_STRING,
173
+ table: OPTIONAL_STRING,
174
+ layoutId: OPTIONAL_STRING,
175
+ }).required().unknown(true),
176
+ }).unknown(true))
177
+ }
178
+
179
+ function generateStepSchema(allowStepTypes) {
180
+ // prettier-ignore
181
+ return Joi.object({
182
+ stepId: Joi.string().required(),
183
+ id: Joi.string().required(),
184
+ description: Joi.string().required(),
185
+ name: Joi.string().required(),
186
+ tagline: Joi.string().required(),
187
+ icon: Joi.string().required(),
188
+ params: Joi.object(),
189
+ args: Joi.object(),
190
+ type: Joi.string().required().valid(...allowStepTypes),
191
+ }).unknown(true)
192
+ }
193
+
194
+ exports.automationValidator = (existing = false) => {
195
+ // prettier-ignore
196
+ return joiValidator.body(Joi.object({
197
+ _id: existing ? Joi.string().required() : OPTIONAL_STRING,
198
+ _rev: existing ? Joi.string().required() : OPTIONAL_STRING,
199
+ name: Joi.string().required(),
200
+ type: Joi.string().valid("automation").required(),
201
+ definition: Joi.object({
202
+ steps: Joi.array().required().items(generateStepSchema(["ACTION", "LOGIC"])),
203
+ trigger: generateStepSchema(["TRIGGER"]).allow(null),
204
+ }).required().unknown(true),
205
+ }).unknown(true))
206
+ }
207
+
208
+ exports.applicationValidator = () => {
209
+ // prettier-ignore
210
+ return joiValidator.body(Joi.object({
211
+ _id: OPTIONAL_STRING,
212
+ _rev: OPTIONAL_STRING,
213
+ name: Joi.string().required(),
214
+ url: OPTIONAL_STRING,
215
+ template: Joi.object({
216
+ templateString: OPTIONAL_STRING,
217
+ }).unknown(true),
218
+ }).unknown(true))
219
+ }
@@ -1,33 +1,17 @@
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")
5
4
  const { BUILDER } = require("@budibase/backend-core/permissions")
6
- const Joi = require("joi")
5
+ const { webhookValidator } = require("./utils/validators")
7
6
 
8
7
  const router = Router()
9
8
 
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
-
25
9
  router
26
10
  .get("/api/webhooks", authorized(BUILDER), controller.fetch)
27
11
  .put(
28
12
  "/api/webhooks",
29
13
  authorized(BUILDER),
30
- generateSaveValidator(),
14
+ webhookValidator(),
31
15
  controller.save
32
16
  )
33
17
  .delete("/api/webhooks/:id/:rev", authorized(BUILDER), controller.destroy)
@@ -16,10 +16,11 @@ exports.FilterConditions = FilterConditions
16
16
  exports.PrettyFilterConditions = PrettyFilterConditions
17
17
 
18
18
  exports.definition = {
19
- name: "Filter",
19
+ name: "Condition",
20
20
  tagline: "{{inputs.field}} {{inputs.condition}} {{inputs.value}}",
21
21
  icon: "Branch2",
22
- description: "Filter any automations which do not meet certain conditions",
22
+ description:
23
+ "Conditionally halt automations which do not meet certain conditions",
23
24
  type: "LOGIC",
24
25
  internal: true,
25
26
  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
- id: tableId,
77
+ 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 } = require("../constants")
8
+ const { MetadataTypes, WebhookType } = 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
- webhooks.WebhookType.AUTOMATION,
162
+ WebhookType.AUTOMATION,
163
163
  newAuto._id
164
164
  ),
165
165
  },
@@ -186,5 +186,9 @@ exports.BuildSchemaErrors = {
186
186
  INVALID_COLUMN: "invalid_column",
187
187
  }
188
188
 
189
+ exports.WebhookType = {
190
+ AUTOMATION: "automation",
191
+ }
192
+
189
193
  // pass through the list from the auth/core lib
190
194
  exports.ObjectStoreBuckets = ObjectStoreBuckets
package/src/db/utils.js CHANGED
@@ -146,6 +146,18 @@ 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
+
149
161
  /**
150
162
  * Gets a new row ID for the specified table.
151
163
  * @param {string} tableId The table which the row is being created for.
@@ -5,6 +5,10 @@ export interface Base {
5
5
  _rev?: string
6
6
  }
7
7
 
8
+ export interface Application extends Base {
9
+ appId?: string
10
+ }
11
+
8
12
  export interface FieldSchema {
9
13
  // TODO: replace with field types enum when done
10
14
  type: string
@@ -153,6 +153,7 @@ export interface QueryJson {
153
153
  datasourceId: string
154
154
  entityId: string
155
155
  operation: Operation
156
+ schema?: string
156
157
  }
157
158
  resource: {
158
159
  fields: string[]