@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
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  const { generateWebhookID, getWebhookParams } = require("../../db/utils");
12
12
  const toJsonSchema = require("to-json-schema");
13
13
  const validate = require("jsonschema").validate;
14
+ const { WebhookType } = require("../../constants");
14
15
  const triggers = require("../../automations/triggers");
15
16
  const { getProdAppID } = require("@budibase/backend-core/db");
16
17
  const { getAppDB, updateAppId } = require("@budibase/backend-core/context");
@@ -24,9 +25,6 @@ function Webhook(name, type, target) {
24
25
  };
25
26
  }
26
27
  exports.Webhook = Webhook;
27
- exports.WebhookType = {
28
- AUTOMATION: "automation",
29
- };
30
28
  exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
31
29
  const db = getAppDB();
32
30
  const response = yield db.allDocs(getWebhookParams(null, {
@@ -62,7 +60,7 @@ exports.buildSchema = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
62
60
  const webhook = yield db.get(ctx.params.id);
63
61
  webhook.bodySchema = toJsonSchema(ctx.request.body);
64
62
  // update the automation outputs
65
- if (webhook.action.type === exports.WebhookType.AUTOMATION) {
63
+ if (webhook.action.type === WebhookType.AUTOMATION) {
66
64
  let automation = yield db.get(webhook.action.target);
67
65
  const autoOutputs = automation.definition.trigger.schema.outputs;
68
66
  let properties = webhook.bodySchema.properties;
@@ -91,7 +89,7 @@ exports.trigger = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
91
89
  validate(ctx.request.body, webhook.bodySchema);
92
90
  }
93
91
  const target = yield db.get(webhook.action.target);
94
- if (webhook.action.type === exports.WebhookType.AUTOMATION) {
92
+ if (webhook.action.type === WebhookType.AUTOMATION) {
95
93
  // trigger with both the pure request and then expand it
96
94
  // incase the user has produced a schema to bind to
97
95
  yield triggers.externalTrigger(target, Object.assign(Object.assign({ body: ctx.request.body }, ctx.request.body), { appId: prodAppId }));
package/dist/api/index.js CHANGED
@@ -13,7 +13,7 @@ const { buildAuthMiddleware, auditLog, buildTenancyMiddleware, buildAppTenancyMi
13
13
  const currentApp = require("../middleware/currentapp");
14
14
  const compress = require("koa-compress");
15
15
  const zlib = require("zlib");
16
- const { mainRoutes, staticRoutes } = require("./routes");
16
+ const { mainRoutes, staticRoutes, publicRoutes } = require("./routes");
17
17
  const pkg = require("../../package.json");
18
18
  const env = require("../environment");
19
19
  const router = new Router();
@@ -76,6 +76,8 @@ for (let route of mainRoutes) {
76
76
  router.use(route.routes());
77
77
  router.use(route.allowedMethods());
78
78
  }
79
+ router.use(publicRoutes.routes());
80
+ router.use(publicRoutes.allowedMethods());
79
81
  // WARNING - static routes will catch everything else after them this must be last
80
82
  router.use(staticRoutes.routes());
81
83
  router.use(staticRoutes.allowedMethods());
@@ -2,47 +2,19 @@
2
2
  const Router = require("@koa/router");
3
3
  const controller = require("../controllers/automation");
4
4
  const authorized = require("../../middleware/authorized");
5
- const joiValidator = require("../../middleware/joi-validator");
6
5
  const { BUILDER, PermissionLevels, PermissionTypes, } = require("@budibase/backend-core/permissions");
7
- const Joi = require("joi");
8
6
  const { bodyResource, paramResource } = require("../../middleware/resourceId");
9
7
  const { middleware: appInfoMiddleware, AppType, } = require("../../middleware/appInfo");
8
+ const { automationValidator } = require("./utils/validators");
10
9
  const router = Router();
11
- // prettier-ignore
12
- function generateStepSchema(allowStepTypes) {
13
- return Joi.object({
14
- stepId: Joi.string().required(),
15
- id: Joi.string().required(),
16
- description: Joi.string().required(),
17
- name: Joi.string().required(),
18
- tagline: Joi.string().required(),
19
- icon: Joi.string().required(),
20
- params: Joi.object(),
21
- args: Joi.object(),
22
- type: Joi.string().required().valid(...allowStepTypes),
23
- }).unknown(true);
24
- }
25
- function generateValidator(existing = false) {
26
- // prettier-ignore
27
- return joiValidator.body(Joi.object({
28
- _id: existing ? Joi.string().required() : Joi.string(),
29
- _rev: existing ? Joi.string().required() : Joi.string(),
30
- name: Joi.string().required(),
31
- type: Joi.string().valid("automation").required(),
32
- definition: Joi.object({
33
- steps: Joi.array().required().items(generateStepSchema(["ACTION", "LOGIC"])),
34
- trigger: generateStepSchema(["TRIGGER"]).allow(null),
35
- }).required().unknown(true),
36
- }).unknown(true));
37
- }
38
10
  router
39
11
  .get("/api/automations/trigger/list", authorized(BUILDER), controller.getTriggerList)
40
12
  .get("/api/automations/action/list", authorized(BUILDER), controller.getActionList)
41
13
  .get("/api/automations/definitions/list", authorized(BUILDER), controller.getDefinitionList)
42
14
  .get("/api/automations", authorized(BUILDER), controller.fetch)
43
15
  .get("/api/automations/:id", paramResource("id"), authorized(BUILDER), controller.find)
44
- .put("/api/automations", bodyResource("_id"), authorized(BUILDER), generateValidator(true), controller.update)
45
- .post("/api/automations", authorized(BUILDER), generateValidator(false), controller.create)
16
+ .put("/api/automations", bodyResource("_id"), authorized(BUILDER), automationValidator(true), controller.update)
17
+ .post("/api/automations", authorized(BUILDER), automationValidator(false), controller.create)
46
18
  .delete("/api/automations/:id/:rev", paramResource("id"), authorized(BUILDER), controller.destroy)
47
19
  .post("/api/automations/:id/trigger", appInfoMiddleware({ appType: AppType.PROD }), paramResource("id"), authorized(PermissionTypes.AUTOMATION, PermissionLevels.EXECUTE), controller.trigger)
48
20
  .post("/api/automations/:id/test", appInfoMiddleware({ appType: AppType.DEV }), paramResource("id"), authorized(PermissionTypes.AUTOMATION, PermissionLevels.EXECUTE), controller.test);
@@ -2,62 +2,15 @@
2
2
  const Router = require("@koa/router");
3
3
  const datasourceController = require("../controllers/datasource");
4
4
  const authorized = require("../../middleware/authorized");
5
- const joiValidator = require("../../middleware/joi-validator");
6
5
  const { BUILDER, PermissionLevels, PermissionTypes, } = require("@budibase/backend-core/permissions");
7
- const Joi = require("joi");
8
- const { DataSourceOperation } = require("../../constants");
6
+ const { datasourceValidator, datasourceQueryValidator, } = require("./utils/validators");
9
7
  const router = Router();
10
- function generateDatasourceSchema() {
11
- // prettier-ignore
12
- return joiValidator.body(Joi.object({
13
- _id: Joi.string(),
14
- _rev: Joi.string(),
15
- // source: Joi.string().valid("POSTGRES_PLUS"),
16
- type: Joi.string().allow("datasource_plus"),
17
- relationships: Joi.array().items(Joi.object({
18
- from: Joi.string().required(),
19
- to: Joi.string().required(),
20
- cardinality: Joi.valid("1:N", "1:1", "N:N").required()
21
- })),
22
- // entities: Joi.array().items(Joi.object({
23
- // type: Joi.string().valid(...Object.values(FieldTypes)).required(),
24
- // name: Joi.string().required(),
25
- // })),
26
- }).unknown(true));
27
- }
28
- function generateQueryDatasourceSchema() {
29
- // prettier-ignore
30
- return joiValidator.body(Joi.object({
31
- endpoint: Joi.object({
32
- datasourceId: Joi.string().required(),
33
- operation: Joi.string().required().valid(...Object.values(DataSourceOperation)),
34
- entityId: Joi.string().required(),
35
- }).required(),
36
- resource: Joi.object({
37
- fields: Joi.array().items(Joi.string()).optional(),
38
- }).optional(),
39
- body: Joi.object().optional(),
40
- sort: Joi.object().optional(),
41
- filters: Joi.object({
42
- string: Joi.object().optional(),
43
- range: Joi.object().optional(),
44
- equal: Joi.object().optional(),
45
- notEqual: Joi.object().optional(),
46
- empty: Joi.object().optional(),
47
- notEmpty: Joi.object().optional(),
48
- }).optional(),
49
- paginate: Joi.object({
50
- page: Joi.string().alphanum().optional(),
51
- limit: Joi.number().optional(),
52
- }).optional(),
53
- }));
54
- }
55
8
  router
56
9
  .get("/api/datasources", authorized(BUILDER), datasourceController.fetch)
57
10
  .get("/api/datasources/:datasourceId", authorized(PermissionTypes.TABLE, PermissionLevels.READ), datasourceController.find)
58
11
  .put("/api/datasources/:datasourceId", authorized(PermissionTypes.TABLE, PermissionLevels.READ), datasourceController.update)
59
- .post("/api/datasources/query", authorized(PermissionTypes.TABLE, PermissionLevels.READ), generateQueryDatasourceSchema(), datasourceController.query)
12
+ .post("/api/datasources/query", authorized(PermissionTypes.TABLE, PermissionLevels.READ), datasourceQueryValidator(), datasourceController.query)
60
13
  .post("/api/datasources/:datasourceId/schema", authorized(BUILDER), datasourceController.buildSchemaFromDb)
61
- .post("/api/datasources", authorized(BUILDER), generateDatasourceSchema(), datasourceController.save)
14
+ .post("/api/datasources", authorized(BUILDER), datasourceValidator(), datasourceController.save)
62
15
  .delete("/api/datasources/:datasourceId/:revId", authorized(BUILDER), datasourceController.destroy);
63
16
  module.exports = router;
@@ -26,6 +26,7 @@ const metadataRoutes = require("./metadata");
26
26
  const devRoutes = require("./dev");
27
27
  const cloudRoutes = require("./cloud");
28
28
  const migrationRoutes = require("./migrations");
29
+ const publicRoutes = require("./public");
29
30
  exports.mainRoutes = [
30
31
  authRoutes,
31
32
  deployRoutes,
@@ -56,4 +57,5 @@ exports.mainRoutes = [
56
57
  rowRoutes,
57
58
  migrationRoutes,
58
59
  ];
60
+ exports.publicRoutes = publicRoutes;
59
61
  exports.staticRoutes = staticRoutes;
@@ -2,26 +2,16 @@
2
2
  const Router = require("@koa/router");
3
3
  const controller = require("../controllers/permission");
4
4
  const authorized = require("../../middleware/authorized");
5
- const { BUILDER, PermissionLevels, } = require("@budibase/backend-core/permissions");
6
- const Joi = require("joi");
7
- const joiValidator = require("../../middleware/joi-validator");
5
+ const { BUILDER } = require("@budibase/backend-core/permissions");
6
+ const { permissionValidator } = require("./utils/validators");
8
7
  const router = Router();
9
- function generateValidator() {
10
- const permLevelArray = Object.values(PermissionLevels);
11
- // prettier-ignore
12
- return joiValidator.params(Joi.object({
13
- level: Joi.string().valid(...permLevelArray).required(),
14
- resourceId: Joi.string(),
15
- roleId: Joi.string(),
16
- }).unknown(true));
17
- }
18
8
  router
19
9
  .get("/api/permission/builtin", authorized(BUILDER), controller.fetchBuiltin)
20
10
  .get("/api/permission/levels", authorized(BUILDER), controller.fetchLevels)
21
11
  .get("/api/permission", authorized(BUILDER), controller.fetch)
22
12
  .get("/api/permission/:resourceId", authorized(BUILDER), controller.getResourcePerms)
23
13
  // adding a specific role/level for the resource overrides the underlying access control
24
- .post("/api/permission/:roleId/:resourceId/:level", authorized(BUILDER), generateValidator(), controller.addPermission)
14
+ .post("/api/permission/:roleId/:resourceId/:level", authorized(BUILDER), permissionValidator(), controller.addPermission)
25
15
  // deleting the level defaults it back the underlying access control for the resource
26
- .delete("/api/permission/:roleId/:resourceId/:level", authorized(BUILDER), generateValidator(), controller.removePermission);
16
+ .delete("/api/permission/:roleId/:resourceId/:level", authorized(BUILDER), permissionValidator(), controller.removePermission);
27
17
  module.exports = router;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const applications_1 = __importDefault(require("../../controllers/public/applications"));
7
+ const Endpoint_1 = __importDefault(require("./utils/Endpoint"));
8
+ const { nameValidator, applicationValidator } = require("../utils/validators");
9
+ const read = [], write = [];
10
+ /**
11
+ * @openapi
12
+ * /applications:
13
+ * post:
14
+ * summary: Create an application
15
+ * tags:
16
+ * - applications
17
+ * parameters:
18
+ * - $ref: '#/components/parameters/appId'
19
+ * requestBody:
20
+ * required: true
21
+ * content:
22
+ * application/json:
23
+ * schema:
24
+ * $ref: '#/components/schemas/application'
25
+ * responses:
26
+ * 200:
27
+ * description: Returns the created application.
28
+ * content:
29
+ * application/json:
30
+ * schema:
31
+ * $ref: '#/components/schemas/applicationOutput'
32
+ * examples:
33
+ * application:
34
+ * $ref: '#/components/examples/application'
35
+ */
36
+ write.push(new Endpoint_1.default("post", "/applications", applications_1.default.create).addMiddleware(applicationValidator()));
37
+ /**
38
+ * @openapi
39
+ * /applications/{appId}:
40
+ * put:
41
+ * summary: Update an application
42
+ * tags:
43
+ * - applications
44
+ * parameters:
45
+ * - $ref: '#/components/parameters/appIdUrl'
46
+ * requestBody:
47
+ * required: true
48
+ * content:
49
+ * application/json:
50
+ * schema:
51
+ * $ref: '#/components/schemas/application'
52
+ * responses:
53
+ * 200:
54
+ * description: Returns the updated application.
55
+ * content:
56
+ * application/json:
57
+ * schema:
58
+ * $ref: '#/components/schemas/applicationOutput'
59
+ * examples:
60
+ * application:
61
+ * $ref: '#/components/examples/application'
62
+ */
63
+ write.push(new Endpoint_1.default("put", "/applications/:appId", applications_1.default.update).addMiddleware(applicationValidator()));
64
+ /**
65
+ * @openapi
66
+ * /applications/{appId}:
67
+ * delete:
68
+ * summary: Delete an application
69
+ * tags:
70
+ * - applications
71
+ * parameters:
72
+ * - $ref: '#/components/parameters/appIdUrl'
73
+ * responses:
74
+ * 200:
75
+ * description: Returns the deleted application.
76
+ * content:
77
+ * application/json:
78
+ * schema:
79
+ * $ref: '#/components/schemas/applicationOutput'
80
+ * examples:
81
+ * application:
82
+ * $ref: '#/components/examples/application'
83
+ */
84
+ write.push(new Endpoint_1.default("delete", "/applications/:appId", applications_1.default.destroy));
85
+ /**
86
+ * @openapi
87
+ * /applications/{appId}:
88
+ * get:
89
+ * summary: Retrieve an application
90
+ * tags:
91
+ * - applications
92
+ * parameters:
93
+ * - $ref: '#/components/parameters/appIdUrl'
94
+ * responses:
95
+ * 200:
96
+ * description: Returns the retrieved application.
97
+ * content:
98
+ * application/json:
99
+ * schema:
100
+ * $ref: '#/components/schemas/applicationOutput'
101
+ * examples:
102
+ * application:
103
+ * $ref: '#/components/examples/application'
104
+ */
105
+ read.push(new Endpoint_1.default("get", "/applications/:appId", applications_1.default.read));
106
+ /**
107
+ * @openapi
108
+ * /applications/search:
109
+ * post:
110
+ * summary: Search for applications
111
+ * description: Based on application properties (currently only name) search for applications.
112
+ * tags:
113
+ * - applications
114
+ * parameters:
115
+ * - $ref: '#/components/parameters/appId'
116
+ * requestBody:
117
+ * required: true
118
+ * content:
119
+ * application/json:
120
+ * schema:
121
+ * $ref: '#/components/schemas/nameSearch'
122
+ * responses:
123
+ * 200:
124
+ * description: Returns the applications that were found based on the search parameters.
125
+ * content:
126
+ * application/json:
127
+ * schema:
128
+ * type: object
129
+ * required:
130
+ * - data
131
+ * properties:
132
+ * data:
133
+ * type: array
134
+ * items:
135
+ * $ref: '#/components/schemas/application'
136
+ * examples:
137
+ * applications:
138
+ * $ref: '#/components/examples/applications'
139
+ */
140
+ read.push(new Endpoint_1.default("post", "/applications/search", applications_1.default.search).addMiddleware(nameValidator()));
141
+ exports.default = { read, write };
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const applications_1 = __importDefault(require("./applications"));
7
+ const queries_1 = __importDefault(require("./queries"));
8
+ const tables_1 = __importDefault(require("./tables"));
9
+ const rows_1 = __importDefault(require("./rows"));
10
+ const users_1 = __importDefault(require("./users"));
11
+ const usageQuota_1 = __importDefault(require("../../../middleware/usageQuota"));
12
+ const authorized_1 = __importDefault(require("../../../middleware/authorized"));
13
+ const resourceId_1 = require("../../../middleware/resourceId");
14
+ const mapper_1 = __importDefault(require("./middleware/mapper"));
15
+ const environment_1 = __importDefault(require("../../../environment"));
16
+ // below imports don't have declaration files
17
+ const Router = require("@koa/router");
18
+ const { RateLimit, Stores } = require("koa2-ratelimit");
19
+ const { PermissionLevels, PermissionTypes, } = require("@budibase/backend-core/permissions");
20
+ const { getRedisOptions } = require("@budibase/backend-core/redis").utils;
21
+ const PREFIX = "/api/public/v1";
22
+ // allow a lot more requests when in test
23
+ const DEFAULT_API_REQ_LIMIT_PER_SEC = environment_1.default.isTest() ? 100 : 10;
24
+ function getApiLimitPerSecond() {
25
+ if (!environment_1.default.API_REQ_LIMIT_PER_SEC) {
26
+ return DEFAULT_API_REQ_LIMIT_PER_SEC;
27
+ }
28
+ return parseInt(environment_1.default.API_REQ_LIMIT_PER_SEC);
29
+ }
30
+ if (!environment_1.default.isTest()) {
31
+ const REDIS_OPTS = getRedisOptions();
32
+ RateLimit.defaultOptions({
33
+ store: new Stores.Redis({
34
+ // @ts-ignore
35
+ socket: {
36
+ host: REDIS_OPTS.host,
37
+ port: REDIS_OPTS.port,
38
+ },
39
+ password: REDIS_OPTS.opts.password,
40
+ database: 1,
41
+ }),
42
+ });
43
+ }
44
+ // rate limiting, allows for 2 requests per second
45
+ const limiter = RateLimit.middleware({
46
+ interval: { sec: 1 },
47
+ // per ip, per interval
48
+ max: getApiLimitPerSecond(),
49
+ });
50
+ const publicRouter = new Router({
51
+ prefix: PREFIX,
52
+ });
53
+ publicRouter.use(limiter);
54
+ function addMiddleware(endpoints, middleware, opts = { output: false }) {
55
+ if (!endpoints) {
56
+ return;
57
+ }
58
+ if (!Array.isArray(endpoints)) {
59
+ endpoints = [endpoints];
60
+ }
61
+ for (let endpoint of endpoints) {
62
+ if (opts === null || opts === void 0 ? void 0 : opts.output) {
63
+ endpoint.addOutputMiddleware(middleware);
64
+ }
65
+ else {
66
+ endpoint.addMiddleware(middleware);
67
+ }
68
+ }
69
+ }
70
+ function addToRouter(endpoints) {
71
+ if (endpoints) {
72
+ for (let endpoint of endpoints) {
73
+ endpoint.apply(publicRouter);
74
+ }
75
+ }
76
+ }
77
+ function applyRoutes(endpoints, permType, resource, subResource) {
78
+ const paramMiddleware = subResource
79
+ ? resourceId_1.paramSubResource(resource, subResource)
80
+ : resourceId_1.paramResource(resource);
81
+ // add the parameter capture middleware
82
+ addMiddleware(endpoints.read, paramMiddleware);
83
+ addMiddleware(endpoints.write, paramMiddleware);
84
+ // add the authorization middleware, using the correct perm type
85
+ addMiddleware(endpoints.read, authorized_1.default(permType, PermissionLevels.READ));
86
+ addMiddleware(endpoints.write, authorized_1.default(permType, PermissionLevels.WRITE));
87
+ // add the usage quota middleware
88
+ addMiddleware(endpoints.write, usageQuota_1.default);
89
+ // add the output mapper middleware
90
+ addMiddleware(endpoints.read, mapper_1.default, { output: true });
91
+ addMiddleware(endpoints.write, mapper_1.default, { output: true });
92
+ addToRouter(endpoints.read);
93
+ addToRouter(endpoints.write);
94
+ }
95
+ applyRoutes(applications_1.default, PermissionTypes.APP, "appId");
96
+ applyRoutes(tables_1.default, PermissionTypes.TABLE, "tableId");
97
+ applyRoutes(users_1.default, PermissionTypes.USER, "userId");
98
+ applyRoutes(queries_1.default, PermissionTypes.QUERY, "queryId");
99
+ // needs to be applied last for routing purposes, don't override other endpoints
100
+ applyRoutes(rows_1.default, PermissionTypes.TABLE, "tableId", "rowId");
101
+ module.exports = publicRouter;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const mapping_1 = __importDefault(require("../../../controllers/public/mapping"));
16
+ var Resources;
17
+ (function (Resources) {
18
+ Resources["APPLICATION"] = "applications";
19
+ Resources["TABLES"] = "tables";
20
+ Resources["ROWS"] = "rows";
21
+ Resources["USERS"] = "users";
22
+ Resources["QUERIES"] = "queries";
23
+ Resources["SEARCH"] = "search";
24
+ })(Resources || (Resources = {}));
25
+ function isArrayResponse(ctx) {
26
+ return ctx.url.endsWith(Resources.SEARCH) || Array.isArray(ctx.body);
27
+ }
28
+ function processApplications(ctx) {
29
+ if (isArrayResponse(ctx)) {
30
+ return mapping_1.default.mapApplications(ctx);
31
+ }
32
+ else {
33
+ return mapping_1.default.mapApplication(ctx);
34
+ }
35
+ }
36
+ function processTables(ctx) {
37
+ if (isArrayResponse(ctx)) {
38
+ return mapping_1.default.mapTables(ctx);
39
+ }
40
+ else {
41
+ return mapping_1.default.mapTable(ctx);
42
+ }
43
+ }
44
+ function processRows(ctx) {
45
+ if (isArrayResponse(ctx)) {
46
+ return mapping_1.default.mapRowSearch(ctx);
47
+ }
48
+ else {
49
+ return mapping_1.default.mapRow(ctx);
50
+ }
51
+ }
52
+ function processUsers(ctx) {
53
+ if (isArrayResponse(ctx)) {
54
+ return mapping_1.default.mapUsers(ctx);
55
+ }
56
+ else {
57
+ return mapping_1.default.mapUser(ctx);
58
+ }
59
+ }
60
+ function processQueries(ctx) {
61
+ if (isArrayResponse(ctx)) {
62
+ return mapping_1.default.mapQueries(ctx);
63
+ }
64
+ else {
65
+ return mapping_1.default.mapQueryExecution(ctx);
66
+ }
67
+ }
68
+ exports.default = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
69
+ let urlParts = ctx.url.split("/");
70
+ urlParts = urlParts.slice(4, urlParts.length);
71
+ let body = {};
72
+ switch (urlParts[0]) {
73
+ case Resources.APPLICATION:
74
+ body = processApplications(ctx);
75
+ break;
76
+ case Resources.TABLES:
77
+ if (urlParts[2] === Resources.ROWS) {
78
+ body = processRows(ctx);
79
+ }
80
+ else {
81
+ body = processTables(ctx);
82
+ }
83
+ break;
84
+ case Resources.USERS:
85
+ body = processUsers(ctx);
86
+ break;
87
+ case Resources.QUERIES:
88
+ body = processQueries(ctx);
89
+ break;
90
+ }
91
+ // update the body based on what has occurred in the mapper
92
+ ctx.body = body;
93
+ yield next();
94
+ });
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const queries_1 = __importDefault(require("../../controllers/public/queries"));
7
+ const Endpoint_1 = __importDefault(require("./utils/Endpoint"));
8
+ const validators_1 = require("../utils/validators");
9
+ const read = [], write = [];
10
+ /**
11
+ * @openapi
12
+ * /queries/{queryId}:
13
+ * post:
14
+ * summary: Execute a query
15
+ * description: Queries which have been created within a Budibase app can be executed using this,
16
+ * tags:
17
+ * - queries
18
+ * parameters:
19
+ * - $ref: '#/components/parameters/queryId'
20
+ * - $ref: '#/components/parameters/appId'
21
+ * requestBody:
22
+ * required: true
23
+ * content:
24
+ * application/json:
25
+ * schema:
26
+ * $ref: '#/components/schemas/executeQuery'
27
+ * responses:
28
+ * 200:
29
+ * description: Returns the result of the query execution.
30
+ * content:
31
+ * application/json:
32
+ * schema:
33
+ * $ref: '#/components/schemas/executeQueryOutput'
34
+ * examples:
35
+ * REST:
36
+ * $ref: '#/components/examples/restResponse'
37
+ * SQL:
38
+ * $ref: '#/components/examples/sqlResponse'
39
+ *
40
+ */
41
+ write.push(new Endpoint_1.default("post", "/queries/:queryId", queries_1.default.execute));
42
+ /**
43
+ * @openapi
44
+ * /queries/search:
45
+ * post:
46
+ * summary: Search for queries
47
+ * description: Based on query properties (currently only name) search for queries.
48
+ * tags:
49
+ * - queries
50
+ * parameters:
51
+ * - $ref: '#/components/parameters/appId'
52
+ * requestBody:
53
+ * required: true
54
+ * content:
55
+ * application/json:
56
+ * schema:
57
+ * $ref: '#/components/schemas/nameSearch'
58
+ * responses:
59
+ * 200:
60
+ * description: Returns the queries found based on the search parameters.
61
+ * content:
62
+ * application/json:
63
+ * schema:
64
+ * type: object
65
+ * required:
66
+ * - data
67
+ * properties:
68
+ * data:
69
+ * type: array
70
+ * items:
71
+ * $ref: '#/components/schemas/query'
72
+ * examples:
73
+ * queries:
74
+ * $ref: '#/components/examples/queries'
75
+ */
76
+ read.push(new Endpoint_1.default("post", "/queries/search", queries_1.default.search).addMiddleware(validators_1.nameValidator()));
77
+ exports.default = { read, write };