@budibase/server 1.0.79-alpha.7 → 1.0.79

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 (296) hide show
  1. package/__mocks__/mysql2/promise.ts +17 -0
  2. package/__mocks__/node-fetch.ts +0 -1
  3. package/builder/assets/{index.c57242d4.css → index.c8d1e8f0.css} +2 -2
  4. package/builder/assets/index.f28c5d54.js +1352 -0
  5. package/builder/assets/{vendor.6b00a24f.js → vendor.20f80cec.js} +216 -190
  6. package/builder/index.html +3 -3
  7. package/coverage/clover.xml +2229 -2277
  8. package/coverage/coverage-final.json +136 -137
  9. package/coverage/lcov-report/api/controllers/analytics.js.html +6 -6
  10. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  11. package/coverage/lcov-report/api/controllers/application.js.html +149 -152
  12. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  13. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  14. package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
  15. package/coverage/lcov-report/api/controllers/cloud.js.html +11 -11
  16. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  17. package/coverage/lcov-report/api/controllers/datasource.js.html +16 -16
  18. package/coverage/lcov-report/api/controllers/dev.js.html +19 -19
  19. package/coverage/lcov-report/api/controllers/index.html +16 -16
  20. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  21. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  22. package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
  23. package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
  24. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  25. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/query/index.js.html +26 -26
  27. package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
  28. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  29. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  30. package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
  31. package/coverage/lcov-report/api/controllers/row/index.html +27 -27
  32. package/coverage/lcov-report/api/controllers/row/index.js.html +46 -46
  33. package/coverage/lcov-report/api/controllers/row/internal.js.html +82 -94
  34. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +204 -204
  35. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -24
  36. package/coverage/lcov-report/api/controllers/row/utils.js.html +29 -29
  37. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  38. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  39. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +49 -49
  40. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  41. package/coverage/lcov-report/api/controllers/table/index.html +11 -11
  42. package/coverage/lcov-report/api/controllers/table/index.js.html +44 -47
  43. package/coverage/lcov-report/api/controllers/table/internal.js.html +50 -50
  44. package/coverage/lcov-report/api/controllers/table/utils.js.html +80 -80
  45. package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
  46. package/coverage/lcov-report/api/controllers/user.js.html +19 -19
  47. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  48. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  49. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  50. package/coverage/lcov-report/api/controllers/view/utils.js.html +12 -12
  51. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  52. package/coverage/lcov-report/api/controllers/webhook.js.html +27 -18
  53. package/coverage/lcov-report/api/index.html +10 -10
  54. package/coverage/lcov-report/api/index.js.html +28 -37
  55. package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
  56. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  57. package/coverage/lcov-report/api/routes/application.js.html +9 -9
  58. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  59. package/coverage/lcov-report/api/routes/automation.js.html +109 -19
  60. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  61. package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
  62. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  63. package/coverage/lcov-report/api/routes/datasource.js.html +156 -18
  64. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  65. package/coverage/lcov-report/api/routes/dev.js.html +13 -13
  66. package/coverage/lcov-report/api/routes/index.html +35 -35
  67. package/coverage/lcov-report/api/routes/index.js.html +32 -38
  68. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  69. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  70. package/coverage/lcov-report/api/routes/metadata.js.html +9 -9
  71. package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
  72. package/coverage/lcov-report/api/routes/permission.js.html +58 -16
  73. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  74. package/coverage/lcov-report/api/routes/role.js.html +78 -15
  75. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  76. package/coverage/lcov-report/api/routes/row.js.html +14 -17
  77. package/coverage/lcov-report/api/routes/screen.js.html +95 -14
  78. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/static.js.html +13 -13
  80. package/coverage/lcov-report/api/routes/table.js.html +62 -17
  81. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  82. package/coverage/lcov-report/api/routes/user.js.html +8 -8
  83. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  84. package/coverage/lcov-report/api/routes/webhook.js.html +62 -14
  85. package/coverage/lcov-report/automations/actions.js.html +24 -24
  86. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  87. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  88. package/coverage/lcov-report/automations/index.html +1 -1
  89. package/coverage/lcov-report/automations/index.js.html +7 -7
  90. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  91. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
  92. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  93. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  94. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  95. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  96. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  97. package/coverage/lcov-report/automations/steps/filter.js.html +9 -12
  98. package/coverage/lcov-report/automations/steps/index.html +1 -1
  99. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  100. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  101. package/coverage/lcov-report/automations/steps/queryRows.js.html +11 -11
  102. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  103. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  104. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  105. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  106. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  107. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  108. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  109. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  112. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggers.js.html +26 -26
  117. package/coverage/lcov-report/automations/utils.js.html +35 -35
  118. package/coverage/lcov-report/constants/index.html +5 -5
  119. package/coverage/lcov-report/constants/index.js.html +28 -40
  120. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  121. package/coverage/lcov-report/constants/screens.js.html +4 -4
  122. package/coverage/lcov-report/db/client.js.html +18 -18
  123. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  124. package/coverage/lcov-report/db/index.html +15 -15
  125. package/coverage/lcov-report/db/index.js.html +3 -3
  126. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +21 -21
  127. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  128. package/coverage/lcov-report/db/linkedRows/index.js.html +36 -36
  129. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +30 -30
  130. package/coverage/lcov-report/db/newid.js.html +4 -4
  131. package/coverage/lcov-report/db/utils.js.html +87 -123
  132. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  133. package/coverage/lcov-report/events/index.html +1 -1
  134. package/coverage/lcov-report/events/index.js.html +8 -8
  135. package/coverage/lcov-report/events/utils.js.html +18 -18
  136. package/coverage/lcov-report/index.html +64 -79
  137. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  138. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  139. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  140. package/coverage/lcov-report/middleware/authorized.js.html +29 -29
  141. package/coverage/lcov-report/middleware/builder.js.html +16 -16
  142. package/coverage/lcov-report/middleware/currentapp.js.html +44 -44
  143. package/coverage/lcov-report/middleware/index.html +1 -1
  144. package/coverage/lcov-report/middleware/joi-validator.js.html +14 -14
  145. package/coverage/lcov-report/middleware/resourceId.js.html +29 -29
  146. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  147. package/coverage/lcov-report/middleware/usageQuota.js.html +17 -17
  148. package/coverage/lcov-report/middleware/utils.js.html +4 -4
  149. package/coverage/lcov-report/threads/automation.js.html +1 -1
  150. package/coverage/lcov-report/threads/index.html +1 -1
  151. package/coverage/lcov-report/threads/index.js.html +10 -10
  152. package/coverage/lcov-report/threads/query.js.html +1 -1
  153. package/coverage/lcov-report/threads/utils.js.html +14 -14
  154. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  155. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  156. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  157. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  158. package/coverage/lcov-report/utilities/global.js.html +28 -28
  159. package/coverage/lcov-report/utilities/index.html +18 -18
  160. package/coverage/lcov-report/utilities/index.js.html +24 -24
  161. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -9
  162. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  163. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  165. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +60 -60
  167. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +13 -13
  168. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  169. package/coverage/lcov-report/utilities/security.js.html +8 -8
  170. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/index.js.html +12 -12
  173. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +8 -8
  174. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  175. package/coverage/lcov-report/utilities/users.js.html +5 -5
  176. package/coverage/lcov-report/utilities/workerRequests.js.html +53 -200
  177. package/coverage/lcov.info +3039 -3115
  178. package/dist/api/controllers/application.js +0 -1
  179. package/dist/api/controllers/row/internal.js +1 -4
  180. package/dist/api/controllers/table/index.js +1 -2
  181. package/dist/api/controllers/webhook.js +5 -3
  182. package/dist/api/index.js +1 -3
  183. package/dist/api/routes/automation.js +31 -3
  184. package/dist/api/routes/datasource.js +50 -3
  185. package/dist/api/routes/index.js +0 -2
  186. package/dist/api/routes/permission.js +14 -4
  187. package/dist/api/routes/role.js +19 -3
  188. package/dist/api/routes/row.js +4 -3
  189. package/dist/api/routes/screen.js +23 -2
  190. package/dist/api/routes/table.js +17 -3
  191. package/dist/api/routes/tests/utilities/index.js +0 -23
  192. package/dist/api/routes/webhook.js +17 -2
  193. package/dist/automations/steps/filter.js +2 -2
  194. package/dist/automations/steps/queryRows.js +1 -1
  195. package/dist/automations/utils.js +2 -2
  196. package/dist/constants/index.js +0 -3
  197. package/dist/db/utils.js +0 -11
  198. package/dist/integrations/mysql.js +81 -65
  199. package/dist/integrations/utils.js +1 -1
  200. package/dist/package.json +4 -8
  201. package/dist/tests/utilities/TestConfiguration.js +8 -25
  202. package/dist/tsconfig.tsbuildinfo +1 -1
  203. package/dist/utilities/workerRequests.js +15 -50
  204. package/package.json +5 -9
  205. package/scripts/integrations/postgres/init.sql +3 -5
  206. package/scripts/likeCypress.ts +6 -9
  207. package/src/api/controllers/application.js +0 -1
  208. package/src/api/controllers/row/internal.js +0 -4
  209. package/src/api/controllers/table/index.js +1 -2
  210. package/src/api/controllers/webhook.js +6 -3
  211. package/src/api/index.js +1 -4
  212. package/src/api/routes/automation.js +33 -3
  213. package/src/api/routes/datasource.js +52 -6
  214. package/src/api/routes/index.js +0 -2
  215. package/src/api/routes/permission.js +18 -4
  216. package/src/api/routes/role.js +24 -3
  217. package/src/api/routes/row.js +2 -3
  218. package/src/api/routes/screen.js +29 -2
  219. package/src/api/routes/table.js +19 -4
  220. package/src/api/routes/tests/utilities/index.js +0 -24
  221. package/src/api/routes/webhook.js +18 -2
  222. package/src/automations/steps/filter.js +2 -3
  223. package/src/automations/steps/queryRows.js +1 -1
  224. package/src/automations/utils.js +2 -2
  225. package/src/constants/index.js +0 -4
  226. package/src/db/utils.js +0 -12
  227. package/src/definitions/common.ts +0 -4
  228. package/src/integrations/mysql.ts +92 -85
  229. package/src/integrations/tests/mysql.spec.js +4 -4
  230. package/src/integrations/utils.ts +1 -1
  231. package/src/tests/utilities/TestConfiguration.js +2 -23
  232. package/src/utilities/workerRequests.js +16 -65
  233. package/builder/assets/index.ef62c13b.js +0 -1288
  234. package/coverage/lcov-report/api/routes/utils/index.html +0 -111
  235. package/coverage/lcov-report/api/routes/utils/validators.js.html +0 -737
  236. package/dist/api/controllers/public/applications.js +0 -94
  237. package/dist/api/controllers/public/mapping/applications.js +0 -29
  238. package/dist/api/controllers/public/mapping/index.js +0 -11
  239. package/dist/api/controllers/public/mapping/queries.js +0 -36
  240. package/dist/api/controllers/public/mapping/rows.js +0 -24
  241. package/dist/api/controllers/public/mapping/tables.js +0 -23
  242. package/dist/api/controllers/public/mapping/types.js +0 -2
  243. package/dist/api/controllers/public/mapping/users.js +0 -29
  244. package/dist/api/controllers/public/queries.js +0 -38
  245. package/dist/api/controllers/public/rows.js +0 -97
  246. package/dist/api/controllers/public/tables.js +0 -75
  247. package/dist/api/controllers/public/users.js +0 -95
  248. package/dist/api/controllers/public/utils.js +0 -49
  249. package/dist/api/routes/public/applications.js +0 -141
  250. package/dist/api/routes/public/index.js +0 -68
  251. package/dist/api/routes/public/middleware/mapper.js +0 -94
  252. package/dist/api/routes/public/queries.js +0 -77
  253. package/dist/api/routes/public/rows.js +0 -229
  254. package/dist/api/routes/public/tables.js +0 -154
  255. package/dist/api/routes/public/users.js +0 -137
  256. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  257. package/dist/api/routes/utils/validators.js +0 -200
  258. package/dist/definitions/openapi.js +0 -6
  259. package/specs/generate.js +0 -83
  260. package/specs/openapi.json +0 -2222
  261. package/specs/openapi.yaml +0 -1530
  262. package/specs/parameters.js +0 -59
  263. package/specs/resources/application.js +0 -101
  264. package/specs/resources/index.js +0 -24
  265. package/specs/resources/misc.js +0 -12
  266. package/specs/resources/query.js +0 -189
  267. package/specs/resources/row.js +0 -125
  268. package/specs/resources/table.js +0 -191
  269. package/specs/resources/user.js +0 -126
  270. package/specs/resources/utils/Resource.js +0 -26
  271. package/specs/resources/utils/index.js +0 -11
  272. package/specs/security.js +0 -7
  273. package/src/api/controllers/public/applications.ts +0 -74
  274. package/src/api/controllers/public/mapping/applications.ts +0 -32
  275. package/src/api/controllers/public/mapping/index.ts +0 -13
  276. package/src/api/controllers/public/mapping/queries.ts +0 -39
  277. package/src/api/controllers/public/mapping/rows.ts +0 -31
  278. package/src/api/controllers/public/mapping/tables.ts +0 -26
  279. package/src/api/controllers/public/mapping/types.ts +0 -13
  280. package/src/api/controllers/public/mapping/users.ts +0 -32
  281. package/src/api/controllers/public/queries.ts +0 -20
  282. package/src/api/controllers/public/rows.ts +0 -77
  283. package/src/api/controllers/public/tables.ts +0 -56
  284. package/src/api/controllers/public/users.ts +0 -82
  285. package/src/api/controllers/public/utils.ts +0 -38
  286. package/src/api/routes/public/applications.ts +0 -156
  287. package/src/api/routes/public/index.ts +0 -82
  288. package/src/api/routes/public/middleware/mapper.ts +0 -81
  289. package/src/api/routes/public/queries.ts +0 -81
  290. package/src/api/routes/public/rows.ts +0 -242
  291. package/src/api/routes/public/tables.ts +0 -169
  292. package/src/api/routes/public/tests/compare.spec.js +0 -184
  293. package/src/api/routes/public/users.ts +0 -144
  294. package/src/api/routes/public/utils/Endpoint.ts +0 -51
  295. package/src/api/routes/utils/validators.js +0 -219
  296. package/src/definitions/openapi.ts +0 -943
@@ -1,38 +0,0 @@
1
- const { getAppDB } = require("@budibase/backend-core/context")
2
- import { isExternalTable } from "../../../integrations/utils"
3
-
4
- export async function addRev(
5
- body: { _id?: string; _rev?: string },
6
- tableId?: string
7
- ) {
8
- if (!body._id || (tableId && isExternalTable(tableId))) {
9
- return body
10
- }
11
- const db = getAppDB()
12
- const dbDoc = await db.get(body._id)
13
- body._rev = dbDoc._rev
14
- return body
15
- }
16
-
17
- /**
18
- * Performs a case insensitive search on the provided documents, using the
19
- * provided key and value. This will be a string based search, using the
20
- * startsWith function.
21
- */
22
- export function search(docs: any[], value: any, key = "name") {
23
- if (!value || typeof value !== "string") {
24
- return docs
25
- }
26
- value = value.toLowerCase()
27
- const filtered = []
28
- for (let doc of docs) {
29
- if (typeof doc[key] !== "string") {
30
- continue
31
- }
32
- const toTest = doc[key].toLowerCase()
33
- if (toTest.startsWith(value)) {
34
- filtered.push(doc)
35
- }
36
- }
37
- return filtered
38
- }
@@ -1,156 +0,0 @@
1
- import controller from "../../controllers/public/applications"
2
- import Endpoint from "./utils/Endpoint"
3
- const { nameValidator, applicationValidator } = require("../utils/validators")
4
-
5
- const read = [],
6
- write = []
7
-
8
- /**
9
- * @openapi
10
- * /applications:
11
- * post:
12
- * summary: Create an application
13
- * tags:
14
- * - applications
15
- * parameters:
16
- * - $ref: '#/components/parameters/appId'
17
- * requestBody:
18
- * required: true
19
- * content:
20
- * application/json:
21
- * schema:
22
- * $ref: '#/components/schemas/application'
23
- * responses:
24
- * 200:
25
- * description: Returns the created application.
26
- * content:
27
- * application/json:
28
- * schema:
29
- * $ref: '#/components/schemas/applicationOutput'
30
- * examples:
31
- * application:
32
- * $ref: '#/components/examples/application'
33
- */
34
- write.push(
35
- new Endpoint("post", "/applications", controller.create).addMiddleware(
36
- applicationValidator()
37
- )
38
- )
39
-
40
- /**
41
- * @openapi
42
- * /applications/{appId}:
43
- * put:
44
- * summary: Update an application
45
- * tags:
46
- * - applications
47
- * parameters:
48
- * - $ref: '#/components/parameters/appIdUrl'
49
- * requestBody:
50
- * required: true
51
- * content:
52
- * application/json:
53
- * schema:
54
- * $ref: '#/components/schemas/application'
55
- * responses:
56
- * 200:
57
- * description: Returns the updated application.
58
- * content:
59
- * application/json:
60
- * schema:
61
- * $ref: '#/components/schemas/applicationOutput'
62
- * examples:
63
- * application:
64
- * $ref: '#/components/examples/application'
65
- */
66
- write.push(
67
- new Endpoint("put", "/applications/:appId", controller.update).addMiddleware(
68
- applicationValidator()
69
- )
70
- )
71
-
72
- /**
73
- * @openapi
74
- * /applications/{appId}:
75
- * delete:
76
- * summary: Delete an application
77
- * tags:
78
- * - applications
79
- * parameters:
80
- * - $ref: '#/components/parameters/appIdUrl'
81
- * responses:
82
- * 200:
83
- * description: Returns the deleted application.
84
- * content:
85
- * application/json:
86
- * schema:
87
- * $ref: '#/components/schemas/applicationOutput'
88
- * examples:
89
- * application:
90
- * $ref: '#/components/examples/application'
91
- */
92
- write.push(new Endpoint("delete", "/applications/:appId", controller.destroy))
93
-
94
- /**
95
- * @openapi
96
- * /applications/{appId}:
97
- * get:
98
- * summary: Retrieve an application
99
- * tags:
100
- * - applications
101
- * parameters:
102
- * - $ref: '#/components/parameters/appIdUrl'
103
- * responses:
104
- * 200:
105
- * description: Returns the retrieved application.
106
- * content:
107
- * application/json:
108
- * schema:
109
- * $ref: '#/components/schemas/applicationOutput'
110
- * examples:
111
- * application:
112
- * $ref: '#/components/examples/application'
113
- */
114
- read.push(new Endpoint("get", "/applications/:appId", controller.read))
115
-
116
- /**
117
- * @openapi
118
- * /applications/search:
119
- * post:
120
- * summary: Search for applications
121
- * description: Based on application properties (currently only name) search for applications.
122
- * tags:
123
- * - applications
124
- * parameters:
125
- * - $ref: '#/components/parameters/appId'
126
- * requestBody:
127
- * required: true
128
- * content:
129
- * application/json:
130
- * schema:
131
- * $ref: '#/components/schemas/nameSearch'
132
- * responses:
133
- * 200:
134
- * description: Returns the applications that were found based on the search parameters.
135
- * content:
136
- * application/json:
137
- * schema:
138
- * type: object
139
- * required:
140
- * - data
141
- * properties:
142
- * data:
143
- * type: array
144
- * items:
145
- * $ref: '#/components/schemas/application'
146
- * examples:
147
- * applications:
148
- * $ref: '#/components/examples/applications'
149
- */
150
- read.push(
151
- new Endpoint("post", "/applications/search", controller.search).addMiddleware(
152
- nameValidator()
153
- )
154
- )
155
-
156
- export default { read, write }
@@ -1,82 +0,0 @@
1
- import appEndpoints from "./applications"
2
- import queryEndpoints from "./queries"
3
- import tableEndpoints from "./tables"
4
- import rowEndpoints from "./rows"
5
- import userEndpoints from "./users"
6
- import usage from "../../../middleware/usageQuota"
7
- import authorized from "../../../middleware/authorized"
8
- import { paramResource, paramSubResource } from "../../../middleware/resourceId"
9
- import { CtxFn } from "./utils/Endpoint"
10
- import mapperMiddleware from "./middleware/mapper"
11
- const Router = require("@koa/router")
12
- const {
13
- PermissionLevels,
14
- PermissionTypes,
15
- } = require("@budibase/backend-core/permissions")
16
-
17
- const PREFIX = "/api/public/v1"
18
-
19
- const publicRouter = new Router({
20
- prefix: PREFIX,
21
- })
22
-
23
- function addMiddleware(
24
- endpoints: any,
25
- middleware: CtxFn,
26
- opts: { output: boolean } = { output: false }
27
- ) {
28
- if (!endpoints) {
29
- return
30
- }
31
- if (!Array.isArray(endpoints)) {
32
- endpoints = [endpoints]
33
- }
34
- for (let endpoint of endpoints) {
35
- if (opts?.output) {
36
- endpoint.addOutputMiddleware(middleware)
37
- } else {
38
- endpoint.addMiddleware(middleware)
39
- }
40
- }
41
- }
42
-
43
- function addToRouter(endpoints: any) {
44
- if (endpoints) {
45
- for (let endpoint of endpoints) {
46
- endpoint.apply(publicRouter)
47
- }
48
- }
49
- }
50
-
51
- function applyRoutes(
52
- endpoints: any,
53
- permType: string,
54
- resource: string,
55
- subResource?: string
56
- ) {
57
- const paramMiddleware = subResource
58
- ? paramSubResource(resource, subResource)
59
- : paramResource(resource)
60
- // add the parameter capture middleware
61
- addMiddleware(endpoints.read, paramMiddleware)
62
- addMiddleware(endpoints.write, paramMiddleware)
63
- // add the authorization middleware, using the correct perm type
64
- addMiddleware(endpoints.read, authorized(permType, PermissionLevels.READ))
65
- addMiddleware(endpoints.write, authorized(permType, PermissionLevels.WRITE))
66
- // add the usage quota middleware
67
- addMiddleware(endpoints.write, usage)
68
- // add the output mapper middleware
69
- addMiddleware(endpoints.read, mapperMiddleware, { output: true })
70
- addMiddleware(endpoints.write, mapperMiddleware, { output: true })
71
- addToRouter(endpoints.read)
72
- addToRouter(endpoints.write)
73
- }
74
-
75
- applyRoutes(appEndpoints, PermissionTypes.APP, "appId")
76
- applyRoutes(tableEndpoints, PermissionTypes.TABLE, "tableId")
77
- applyRoutes(userEndpoints, PermissionTypes.USER, "userId")
78
- applyRoutes(queryEndpoints, PermissionTypes.QUERY, "queryId")
79
- // needs to be applied last for routing purposes, don't override other endpoints
80
- applyRoutes(rowEndpoints, PermissionTypes.TABLE, "tableId", "rowId")
81
-
82
- module.exports = publicRouter
@@ -1,81 +0,0 @@
1
- import mapping from "../../../controllers/public/mapping"
2
-
3
- enum Resources {
4
- APPLICATION = "applications",
5
- TABLES = "tables",
6
- ROWS = "rows",
7
- USERS = "users",
8
- QUERIES = "queries",
9
- SEARCH = "search",
10
- }
11
-
12
- function isArrayResponse(ctx: any) {
13
- return ctx.url.endsWith(Resources.SEARCH) || Array.isArray(ctx.body)
14
- }
15
-
16
- function processApplications(ctx: any) {
17
- if (isArrayResponse(ctx)) {
18
- return mapping.mapApplications(ctx)
19
- } else {
20
- return mapping.mapApplication(ctx)
21
- }
22
- }
23
-
24
- function processTables(ctx: any) {
25
- if (isArrayResponse(ctx)) {
26
- return mapping.mapTables(ctx)
27
- } else {
28
- return mapping.mapTable(ctx)
29
- }
30
- }
31
-
32
- function processRows(ctx: any) {
33
- if (isArrayResponse(ctx)) {
34
- return mapping.mapRowSearch(ctx)
35
- } else {
36
- return mapping.mapRow(ctx)
37
- }
38
- }
39
-
40
- function processUsers(ctx: any) {
41
- if (isArrayResponse(ctx)) {
42
- return mapping.mapUsers(ctx)
43
- } else {
44
- return mapping.mapUser(ctx)
45
- }
46
- }
47
-
48
- function processQueries(ctx: any) {
49
- if (isArrayResponse(ctx)) {
50
- return mapping.mapQueries(ctx)
51
- } else {
52
- return mapping.mapQueryExecution(ctx)
53
- }
54
- }
55
-
56
- export default async (ctx: any, next: any) => {
57
- let urlParts = ctx.url.split("/")
58
- urlParts = urlParts.slice(4, urlParts.length)
59
- let body = {}
60
- switch (urlParts[0]) {
61
- case Resources.APPLICATION:
62
- body = processApplications(ctx)
63
- break
64
- case Resources.TABLES:
65
- if (urlParts[2] === Resources.ROWS) {
66
- body = processRows(ctx)
67
- } else {
68
- body = processTables(ctx)
69
- }
70
- break
71
- case Resources.USERS:
72
- body = processUsers(ctx)
73
- break
74
- case Resources.QUERIES:
75
- body = processQueries(ctx)
76
- break
77
- }
78
- // update the body based on what has occurred in the mapper
79
- ctx.body = body
80
- await next()
81
- }
@@ -1,81 +0,0 @@
1
- import controller from "../../controllers/public/queries"
2
- import Endpoint from "./utils/Endpoint"
3
- import { nameValidator } from "../utils/validators"
4
-
5
- const read = [],
6
- write = []
7
-
8
- /**
9
- * @openapi
10
- * /queries/{queryId}:
11
- * post:
12
- * summary: Execute a query
13
- * description: Queries which have been created within a Budibase app can be executed using this,
14
- * tags:
15
- * - queries
16
- * parameters:
17
- * - $ref: '#/components/parameters/queryId'
18
- * - $ref: '#/components/parameters/appId'
19
- * requestBody:
20
- * required: true
21
- * content:
22
- * application/json:
23
- * schema:
24
- * $ref: '#/components/schemas/executeQuery'
25
- * responses:
26
- * 200:
27
- * description: Returns the result of the query execution.
28
- * content:
29
- * application/json:
30
- * schema:
31
- * $ref: '#/components/schemas/executeQueryOutput'
32
- * examples:
33
- * REST:
34
- * $ref: '#/components/examples/restResponse'
35
- * SQL:
36
- * $ref: '#/components/examples/sqlResponse'
37
- *
38
- */
39
- write.push(new Endpoint("post", "/queries/:queryId", controller.execute))
40
-
41
- /**
42
- * @openapi
43
- * /queries/search:
44
- * post:
45
- * summary: Search for queries
46
- * description: Based on query properties (currently only name) search for queries.
47
- * tags:
48
- * - queries
49
- * parameters:
50
- * - $ref: '#/components/parameters/appId'
51
- * requestBody:
52
- * required: true
53
- * content:
54
- * application/json:
55
- * schema:
56
- * $ref: '#/components/schemas/nameSearch'
57
- * responses:
58
- * 200:
59
- * description: Returns the queries found based on the search parameters.
60
- * content:
61
- * application/json:
62
- * schema:
63
- * type: object
64
- * required:
65
- * - data
66
- * properties:
67
- * data:
68
- * type: array
69
- * items:
70
- * $ref: '#/components/schemas/query'
71
- * examples:
72
- * queries:
73
- * $ref: '#/components/examples/queries'
74
- */
75
- read.push(
76
- new Endpoint("post", "/queries/search", controller.search).addMiddleware(
77
- nameValidator()
78
- )
79
- )
80
-
81
- export default { read, write }
@@ -1,242 +0,0 @@
1
- import controller from "../../controllers/public/rows"
2
- import Endpoint from "./utils/Endpoint"
3
- import { externalSearchValidator } from "../utils/validators"
4
-
5
- const read = [],
6
- write = []
7
-
8
- /**
9
- * @openapi
10
- * /tables/{tableId}/rows:
11
- * post:
12
- * summary: Create a row
13
- * description: Creates a row within the specified table.
14
- * tags:
15
- * - rows
16
- * parameters:
17
- * - $ref: '#/components/parameters/tableId'
18
- * - $ref: '#/components/parameters/appId'
19
- * requestBody:
20
- * required: true
21
- * content:
22
- * application/json:
23
- * schema:
24
- * $ref: '#/components/schemas/row'
25
- * examples:
26
- * row:
27
- * $ref: '#/components/examples/inputRow'
28
- * responses:
29
- * 200:
30
- * description: Returns the created row, including the ID which has been generated for it.
31
- * This can be found in the Budibase portal, viewed under the developer information.
32
- * content:
33
- * application/json:
34
- * schema:
35
- * $ref: '#/components/schemas/rowOutput'
36
- * examples:
37
- * row:
38
- * $ref: '#/components/examples/row'
39
- */
40
- write.push(new Endpoint("post", "/tables/:tableId/rows", controller.create))
41
-
42
- /**
43
- * @openapi
44
- * /tables/{tableId}/rows/{rowId}:
45
- * put:
46
- * summary: Update a row
47
- * description: Updates a row within the specified table.
48
- * tags:
49
- * - rows
50
- * parameters:
51
- * - $ref: '#/components/parameters/tableId'
52
- * - $ref: '#/components/parameters/rowId'
53
- * - $ref: '#/components/parameters/appId'
54
- * requestBody:
55
- * required: true
56
- * content:
57
- * application/json:
58
- * schema:
59
- * $ref: '#/components/schemas/row'
60
- * examples:
61
- * row:
62
- * $ref: '#/components/examples/inputRow'
63
- * responses:
64
- * 200:
65
- * description: Returns the created row, including the ID which has been generated for it.
66
- * content:
67
- * application/json:
68
- * schema:
69
- * $ref: '#/components/schemas/rowOutput'
70
- * examples:
71
- * row:
72
- * $ref: '#/components/examples/row'
73
- */
74
- write.push(
75
- new Endpoint("put", "/tables/:tableId/rows/:rowId", controller.update)
76
- )
77
-
78
- /**
79
- * @openapi
80
- * /tables/{tableId}/rows/{rowId}:
81
- * delete:
82
- * summary: Delete a row
83
- * description: Deletes a row within the specified table.
84
- * tags:
85
- * - rows
86
- * parameters:
87
- * - $ref: '#/components/parameters/tableId'
88
- * - $ref: '#/components/parameters/rowId'
89
- * - $ref: '#/components/parameters/appId'
90
- * responses:
91
- * 200:
92
- * description: Returns the deleted row, including the ID which has been generated for it.
93
- * content:
94
- * application/json:
95
- * schema:
96
- * $ref: '#/components/schemas/rowOutput'
97
- * examples:
98
- * row:
99
- * $ref: '#/components/examples/row'
100
- */
101
- write.push(
102
- new Endpoint("delete", "/tables/:tableId/rows/:rowId", controller.destroy)
103
- )
104
-
105
- /**
106
- * @openapi
107
- * /tables/{tableId}/rows/{rowId}:
108
- * get:
109
- * summary: Retrieve a row
110
- * description: This gets a single row, it will be enriched with the full related rows, rather than
111
- * the squashed "primaryDisplay" format returned by the search endpoint.
112
- * tags:
113
- * - rows
114
- * parameters:
115
- * - $ref: '#/components/parameters/tableId'
116
- * - $ref: '#/components/parameters/rowId'
117
- * - $ref: '#/components/parameters/appId'
118
- * responses:
119
- * 200:
120
- * description: Returns the retrieved row.
121
- * content:
122
- * application/json:
123
- * schema:
124
- * $ref: '#/components/schemas/rowOutput'
125
- * examples:
126
- * enrichedRow:
127
- * $ref: '#/components/examples/enrichedRow'
128
- */
129
- read.push(new Endpoint("get", "/tables/:tableId/rows/:rowId", controller.read))
130
-
131
- /**
132
- * @openapi
133
- * /tables/{tableId}/rows/search:
134
- * post:
135
- * summary: Search for rows
136
- * tags:
137
- * - rows
138
- * parameters:
139
- * - $ref: '#/components/parameters/tableId'
140
- * - $ref: '#/components/parameters/appId'
141
- * requestBody:
142
- * required: true
143
- * content:
144
- * application/json:
145
- * schema:
146
- * type: object
147
- * required:
148
- * - query
149
- * properties:
150
- * query:
151
- * type: object
152
- * properties:
153
- * string:
154
- * type: object
155
- * example:
156
- * columnName1: value
157
- * columnName2: value
158
- * description: A map of field name to the string to search for,
159
- * this will look for rows that have a value starting with the
160
- * string value.
161
- * additionalProperties:
162
- * type: string
163
- * description: The value to search for in the column.
164
- * fuzzy:
165
- * type: object
166
- * description: A fuzzy search, only supported by internal tables.
167
- * range:
168
- * type: object
169
- * description: Searches within a range, the format of this must be
170
- * columnName -> [low, high].
171
- * example:
172
- * columnName1: [10, 20]
173
- * equal:
174
- * type: object
175
- * description: Searches for rows that have a column value that is
176
- * exactly the value set.
177
- * notEqual:
178
- * type: object
179
- * description: Searches for any row which does not contain the specified
180
- * column value.
181
- * empty:
182
- * type: object
183
- * description: Searches for rows which do not contain the specified column.
184
- * The object should simply contain keys of the column names, these
185
- * can map to any value.
186
- * example:
187
- * columnName1: ""
188
- * notEmpty:
189
- * type: object
190
- * description: Searches for rows which have the specified column.
191
- * oneOf:
192
- * type: object
193
- * description: Searches for rows which have a column value that is any
194
- * of the specified values. The format of this must be columnName -> [value1, value2].
195
- * paginate:
196
- * type: boolean
197
- * description: Enables pagination, by default this is disabled.
198
- * bookmark:
199
- * oneOf:
200
- * - type: string
201
- * - type: integer
202
- * description: If retrieving another page, the bookmark from the previous request must be supplied.
203
- * limit:
204
- * type: integer
205
- * description: The maximum number of rows to return, useful when paginating, for internal tables this
206
- * will be limited to 1000, for SQL tables it will be 5000.
207
- * sort:
208
- * type: object
209
- * description: A set of parameters describing the sort behaviour of the search.
210
- * properties:
211
- * order:
212
- * type: string
213
- * enum: [ascending, descending]
214
- * description: The order of the sort, by default this is ascending.
215
- * column:
216
- * type: string
217
- * description: The name of the column by which the rows will be sorted.
218
- * type:
219
- * type: string
220
- * enum: [string, number]
221
- * description: Defines whether the column should be treated as a string
222
- * or as numbers when sorting.
223
- * responses:
224
- * 200:
225
- * description: The response will contain an array of rows that match the search parameters.
226
- * content:
227
- * application/json:
228
- * schema:
229
- * $ref: '#/components/schemas/searchOutput'
230
- * examples:
231
- * search:
232
- * $ref: '#/components/examples/rows'
233
- */
234
- read.push(
235
- new Endpoint(
236
- "post",
237
- "/tables/:tableId/rows/search",
238
- controller.search
239
- ).addMiddleware(externalSearchValidator())
240
- )
241
-
242
- export default { read, write }