@budibase/server 1.3.19-alpha.1 → 1.3.19

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 (302) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.9ce4f8c5.css +6 -0
  3. package/builder/assets/index.a1f7532b.js +876 -0
  4. package/builder/assets/vendor.5e1fe644.css +1 -0
  5. package/builder/assets/vendor.67dbd8fa.js +248 -0
  6. package/builder/index.html +4 -2
  7. package/coverage/clover.xml +388 -441
  8. package/coverage/coverage-final.json +20 -20
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +11 -68
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +46 -46
  18. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +12 -207
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +13 -13
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +5 -5
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +6 -9
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +1 -1
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +18 -18
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +20 -56
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +37 -37
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
  131. package/coverage/lcov-report/middleware/index.html +15 -15
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  138. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +16 -16
  141. package/coverage/lcov-report/utilities/index.html +1 -1
  142. package/coverage/lcov-report/utilities/index.js.html +24 -24
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  158. package/coverage/lcov.info +667 -780
  159. package/dist/api/controllers/application.js +5 -5
  160. package/dist/api/controllers/auth.js +0 -9
  161. package/dist/api/controllers/component.js +1 -14
  162. package/dist/api/controllers/datasource.js +8 -21
  163. package/dist/api/controllers/deploy/index.js +8 -1
  164. package/dist/api/controllers/integration.js +4 -4
  165. package/dist/api/controllers/row/external.js +1 -1
  166. package/dist/api/controllers/screen.js +2 -52
  167. package/dist/api/controllers/static/index.js +0 -1
  168. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  169. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  170. package/dist/api/index.js +1 -1
  171. package/dist/api/routes/application.js +2 -3
  172. package/dist/api/routes/index.js +0 -2
  173. package/dist/api/routes/public/tables.js +1 -1
  174. package/dist/api/routes/table.js +1 -1
  175. package/dist/api/routes/utils/validators.js +1 -2
  176. package/dist/app.js +0 -11
  177. package/dist/db/utils.js +1 -10
  178. package/dist/environment.js +0 -1
  179. package/dist/integrations/airtable.js +129 -126
  180. package/dist/integrations/arangodb.js +89 -86
  181. package/dist/integrations/base/query.js +2 -2
  182. package/dist/integrations/base/sqlTable.js +1 -3
  183. package/dist/integrations/couchdb.js +83 -80
  184. package/dist/integrations/dynamodb.js +164 -161
  185. package/dist/integrations/elasticsearch.js +138 -135
  186. package/dist/integrations/firebase.js +157 -154
  187. package/dist/integrations/googlesheets.js +327 -323
  188. package/dist/integrations/index.js +51 -99
  189. package/dist/integrations/microsoftSqlServer.js +243 -240
  190. package/dist/integrations/mongodb.js +242 -239
  191. package/dist/integrations/mysql.js +219 -215
  192. package/dist/integrations/oracle.js +322 -318
  193. package/dist/integrations/postgres.js +265 -262
  194. package/dist/integrations/redis.js +139 -134
  195. package/dist/integrations/rest.js +292 -289
  196. package/dist/integrations/s3.js +64 -61
  197. package/dist/integrations/snowflake.js +86 -83
  198. package/dist/middleware/currentapp.js +0 -2
  199. package/dist/migrations/functions/backfill/global.js +3 -0
  200. package/dist/migrations/functions/developerQuota.js +49 -0
  201. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  202. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  203. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  204. package/dist/migrations/index.js +10 -0
  205. package/dist/package.json +6 -9
  206. package/dist/tests/utilities/TestConfiguration.js +1 -1
  207. package/dist/threads/query.js +2 -2
  208. package/dist/tsconfig.build.tsbuildinfo +1 -1
  209. package/dist/utilities/fileSystem/index.js +1 -110
  210. package/package.json +7 -10
  211. package/scripts/dev/manage.js +0 -1
  212. package/scripts/localdomain.js +1 -3
  213. package/specs/openapi.json +3 -3
  214. package/specs/openapi.yaml +3 -3
  215. package/specs/resources/query.js +1 -1
  216. package/src/api/controllers/application.ts +2 -1
  217. package/src/api/controllers/auth.js +0 -11
  218. package/src/api/controllers/component.js +2 -21
  219. package/src/api/controllers/datasource.js +8 -21
  220. package/src/api/controllers/deploy/index.ts +6 -1
  221. package/src/api/controllers/integration.js +4 -4
  222. package/src/api/controllers/row/external.js +1 -1
  223. package/src/api/controllers/screen.js +1 -66
  224. package/src/api/controllers/static/index.ts +1 -1
  225. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  226. package/src/api/controllers/static/templates/preview.hbs +1 -5
  227. package/src/api/index.js +1 -1
  228. package/src/api/routes/application.ts +2 -13
  229. package/src/api/routes/index.ts +0 -2
  230. package/src/api/routes/public/tables.ts +1 -1
  231. package/src/api/routes/table.js +1 -1
  232. package/src/api/routes/tests/query.spec.js +25 -8
  233. package/src/api/routes/tests/user.spec.js +2 -0
  234. package/src/api/routes/utils/validators.js +1 -2
  235. package/src/app.ts +0 -14
  236. package/src/db/utils.js +0 -12
  237. package/src/definitions/openapi.ts +3 -3
  238. package/src/environment.js +0 -1
  239. package/src/integrations/airtable.ts +118 -116
  240. package/src/integrations/arangodb.ts +89 -87
  241. package/src/integrations/base/query.ts +2 -2
  242. package/src/integrations/base/sqlTable.ts +1 -3
  243. package/src/integrations/couchdb.ts +89 -83
  244. package/src/integrations/dynamodb.ts +175 -173
  245. package/src/integrations/elasticsearch.ts +122 -120
  246. package/src/integrations/firebase.ts +159 -157
  247. package/src/integrations/googlesheets.ts +338 -328
  248. package/src/integrations/index.ts +21 -64
  249. package/src/integrations/microsoftSqlServer.ts +251 -249
  250. package/src/integrations/mongodb.ts +258 -261
  251. package/src/integrations/mysql.ts +234 -229
  252. package/src/integrations/oracle.ts +380 -373
  253. package/src/integrations/postgres.ts +268 -264
  254. package/src/integrations/redis.ts +132 -128
  255. package/src/integrations/rest.ts +329 -324
  256. package/src/integrations/s3.ts +71 -68
  257. package/src/integrations/snowflake.ts +82 -80
  258. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  259. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  260. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  261. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  262. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  263. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  264. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  265. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  266. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  267. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  268. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  269. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  270. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  271. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  272. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  273. package/src/middleware/currentapp.js +0 -2
  274. package/src/migrations/functions/backfill/global.ts +3 -0
  275. package/src/migrations/functions/developerQuota.ts +15 -0
  276. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  277. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  278. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  279. package/src/migrations/index.ts +16 -0
  280. package/src/module.d.ts +0 -2
  281. package/src/tests/utilities/TestConfiguration.js +1 -1
  282. package/src/threads/query.ts +2 -2
  283. package/src/utilities/fileSystem/index.js +0 -129
  284. package/builder/assets/index.1709d1b3.js +0 -1005
  285. package/builder/assets/index.8f621053.css +0 -6
  286. package/dist/api/controllers/plugin/github.js +0 -69
  287. package/dist/api/controllers/plugin/index.js +0 -200
  288. package/dist/api/controllers/plugin/npm.js +0 -58
  289. package/dist/api/controllers/plugin/uploaders.js +0 -11
  290. package/dist/api/controllers/plugin/utils.js +0 -26
  291. package/dist/watch.js +0 -77
  292. package/dist/websocket.js +0 -22
  293. package/src/api/controllers/plugin/file.ts +0 -15
  294. package/src/api/controllers/plugin/github.ts +0 -75
  295. package/src/api/controllers/plugin/index.ts +0 -215
  296. package/src/api/controllers/plugin/npm.ts +0 -56
  297. package/src/api/controllers/plugin/uploaders.ts +0 -4
  298. package/src/api/controllers/plugin/url.ts +0 -12
  299. package/src/api/controllers/plugin/utils.ts +0 -19
  300. package/src/api/routes/plugin.ts +0 -14
  301. package/src/watch.ts +0 -38
  302. package/src/websocket.ts +0 -26
@@ -24,7 +24,6 @@ import metadataRoutes from "./metadata"
24
24
  import devRoutes from "./dev"
25
25
  import cloudRoutes from "./cloud"
26
26
  import migrationRoutes from "./migrations"
27
- import pluginRoutes from "./plugin"
28
27
 
29
28
  export { default as staticRoutes } from "./static"
30
29
  export { default as publicRoutes } from "./public"
@@ -58,5 +57,4 @@ export const mainRoutes = [
58
57
  tableRoutes,
59
58
  rowRoutes,
60
59
  migrationRoutes,
61
- pluginRoutes,
62
60
  ]
@@ -26,7 +26,7 @@ const read = [],
26
26
  * responses:
27
27
  * 200:
28
28
  * description: Returns the created table, including the ID which has been generated for it. This can be
29
- * internal or external datasources.
29
+ * internal or external data sources.
30
30
  * content:
31
31
  * application/json:
32
32
  * schema:
@@ -55,7 +55,7 @@ router
55
55
  * @apiParam (Body) {string} [_rev] If updating an existing internal table then the revision must also be specified.
56
56
  * @apiParam (Body) {string} type] This should either be "internal" or "external" depending on the table type -
57
57
  * this will default to internal.
58
- * @apiParam (Body) {string} [sourceId] If creating an external table then this should be set to the datasource ID. If
58
+ * @apiParam (Body) {string} [sourceId] If creating an external table then this should be set to the data source ID. If
59
59
  * building an internal table this does not need to be set, although it will be returned as "bb_internal".
60
60
  * @apiParam (Body) {string} name The name of the table, this will be used in the UI. To rename the table simply
61
61
  * supply the table structure to this endpoint with the name changed.
@@ -231,6 +231,20 @@ describe("/queries", () => {
231
231
  url: `/api/queries/preview`,
232
232
  })
233
233
  })
234
+
235
+ it("should fail with invalid integration type", async () => {
236
+ const { datasource } = await createInvalidIntegration()
237
+ await request
238
+ .post(`/api/queries/preview`)
239
+ .send({
240
+ datasourceId: datasource._id,
241
+ parameters: {},
242
+ fields: {},
243
+ queryVerb: "read",
244
+ })
245
+ .set(config.defaultHeaders())
246
+ .expect(400)
247
+ })
234
248
  })
235
249
 
236
250
  describe("execute", () => {
@@ -247,14 +261,17 @@ describe("/queries", () => {
247
261
  })
248
262
 
249
263
  it("should fail with invalid integration type", async () => {
250
- let error
251
- try {
252
- await createInvalidIntegration()
253
- } catch (err) {
254
- error = err
255
- }
256
- expect(error).toBeDefined()
257
- expect(error.message).toBe("No datasource implementation found.")
264
+ const { query, datasource } = await createInvalidIntegration()
265
+ await request
266
+ .post(`/api/queries/${query._id}`)
267
+ .send({
268
+ datasourceId: datasource._id,
269
+ parameters: {},
270
+ fields: {},
271
+ queryVerb: "read",
272
+ })
273
+ .set(config.defaultHeaders())
274
+ .expect(400)
258
275
  })
259
276
  })
260
277
 
@@ -23,6 +23,7 @@ describe("/users", () => {
23
23
  })
24
24
 
25
25
  describe("fetch", () => {
26
+
26
27
  it("returns a list of users from an instance db", async () => {
27
28
  await config.createUser("uuidx")
28
29
  await config.createUser("uuidy")
@@ -37,6 +38,7 @@ describe("/users", () => {
37
38
  expect(res.body.find(u => u._id === `ro_ta_users_us_uuidy`)).toBeDefined()
38
39
  })
39
40
 
41
+
40
42
  it("should apply authorization to endpoint", async () => {
41
43
  await config.createUser()
42
44
  await checkPermissionsEndpoint({
@@ -10,7 +10,6 @@ const Joi = require("joi")
10
10
  const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("")
11
11
  const OPTIONAL_NUMBER = Joi.number().optional().allow(null)
12
12
  const OPTIONAL_BOOLEAN = Joi.boolean().optional().allow(null)
13
- const APP_NAME_REGEX = /^[\w\s]+$/
14
13
 
15
14
  exports.tableValidator = () => {
16
15
  // prettier-ignore
@@ -215,7 +214,7 @@ exports.applicationValidator = () => {
215
214
  return joiValidator.body(Joi.object({
216
215
  _id: OPTIONAL_STRING,
217
216
  _rev: OPTIONAL_STRING,
218
- name: Joi.string().pattern(new RegExp(APP_NAME_REGEX)).required().error(new Error('App name must be letters, numbers and spaces only')),
217
+ name: Joi.string().required(),
219
218
  url: OPTIONAL_STRING,
220
219
  template: Joi.object({
221
220
  templateString: OPTIONAL_STRING,
package/src/app.ts CHANGED
@@ -26,13 +26,10 @@ const bullboard = require("./automations/bullboard")
26
26
  const { logAlert } = require("@budibase/backend-core/logging")
27
27
  const { pinoSettings } = require("@budibase/backend-core")
28
28
  const { Thread } = require("./threads")
29
- const fs = require("fs")
30
29
  import redis from "./utilities/redis"
31
30
  import * as migrations from "./migrations"
32
31
  import { events, installation, tenancy } from "@budibase/backend-core"
33
32
  import { createAdminUser, getChecklist } from "./utilities/workerRequests"
34
- import { watch } from "./watch"
35
- import { initialise as initialiseWebsockets } from "./websocket"
36
33
 
37
34
  const app = new Koa()
38
35
 
@@ -77,7 +74,6 @@ if (env.isProd()) {
77
74
 
78
75
  const server = http.createServer(app.callback())
79
76
  destroyable(server)
80
- initialiseWebsockets(server)
81
77
 
82
78
  let shuttingDown = false,
83
79
  errCode = 0
@@ -143,16 +139,6 @@ module.exports = server.listen(env.PORT || 0, async () => {
143
139
  }
144
140
  }
145
141
 
146
- // monitor plugin directory if required
147
- if (
148
- env.SELF_HOSTED &&
149
- !env.MULTI_TENANCY &&
150
- env.PLUGINS_DIR &&
151
- fs.existsSync(env.PLUGINS_DIR)
152
- ) {
153
- watch()
154
- }
155
-
156
142
  // check for version updates
157
143
  await installation.checkInstallVersion()
158
144
 
package/src/db/utils.js CHANGED
@@ -42,7 +42,6 @@ const DocumentType = {
42
42
  MEM_VIEW: "view",
43
43
  USER_FLAG: "flag",
44
44
  AUTOMATION_METADATA: "meta_au",
45
- PLUGIN: "plg",
46
45
  }
47
46
 
48
47
  const InternalTables = {
@@ -371,10 +370,6 @@ exports.getMemoryViewParams = (otherProps = {}) => {
371
370
  return getDocParams(DocumentType.MEM_VIEW, null, otherProps)
372
371
  }
373
372
 
374
- exports.generatePluginID = name => {
375
- return `${DocumentType.PLUGIN}${SEPARATOR}${name}`
376
- }
377
-
378
373
  /**
379
374
  * This can be used with the db.allDocs to get a list of IDs
380
375
  */
@@ -384,10 +379,3 @@ exports.getMultiIDParams = ids => {
384
379
  include_docs: true,
385
380
  }
386
381
  }
387
-
388
- /**
389
- * Gets parameters for retrieving automations, this is a utility function for the getDocParams function.
390
- */
391
- exports.getPluginParams = (pluginId = null, otherProps = {}) => {
392
- return getDocParams(DocumentType.PLUGIN, pluginId, otherProps)
393
- }
@@ -344,7 +344,7 @@ export interface paths {
344
344
  };
345
345
  };
346
346
  responses: {
347
- /** Returns the created table, including the ID which has been generated for it. This can be internal or external datasources. */
347
+ /** Returns the created table, including the ID which has been generated for it. This can be internal or external data sources. */
348
348
  200: {
349
349
  content: {
350
350
  "application/json": components["schemas"]["tableOutput"];
@@ -965,7 +965,7 @@ export interface components {
965
965
  query: {
966
966
  /** @description The ID of the query. */
967
967
  _id: string;
968
- /** @description The ID of the datasource the query belongs to. */
968
+ /** @description The ID of the data source the query belongs to. */
969
969
  datasourceId?: string;
970
970
  /** @description The bindings which are required to perform this query. */
971
971
  parameters?: string[];
@@ -989,7 +989,7 @@ export interface components {
989
989
  data: {
990
990
  /** @description The ID of the query. */
991
991
  _id: string;
992
- /** @description The ID of the datasource the query belongs to. */
992
+ /** @description The ID of the data source the query belongs to. */
993
993
  datasourceId?: string;
994
994
  /** @description The bindings which are required to perform this query. */
995
995
  parameters?: string[];
@@ -74,7 +74,6 @@ module.exports = {
74
74
  SQL_MAX_ROWS: process.env.SQL_MAX_ROWS,
75
75
  BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL,
76
76
  BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD,
77
- PLUGINS_DIR: process.env.PLUGINS_DIR || "/plugins",
78
77
  // flags
79
78
  ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
80
79
  DISABLE_THREADING: process.env.DISABLE_THREADING,
@@ -5,144 +5,146 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- const Airtable = require("airtable")
8
+ module AirtableModule {
9
+ const Airtable = require("airtable")
9
10
 
10
- interface AirtableConfig {
11
- apiKey: string
12
- base: string
13
- }
11
+ interface AirtableConfig {
12
+ apiKey: string
13
+ base: string
14
+ }
14
15
 
15
- const SCHEMA: Integration = {
16
- docs: "https://airtable.com/api",
17
- description:
18
- "Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
19
- friendlyName: "Airtable",
20
- type: "Spreadsheet",
21
- datasource: {
22
- apiKey: {
23
- type: DatasourceFieldType.PASSWORD,
24
- default: "enter api key",
25
- required: true,
26
- },
27
- base: {
28
- type: DatasourceFieldType.STRING,
29
- default: "mybase",
30
- required: true,
31
- },
32
- },
33
- query: {
34
- create: {
35
- type: QueryType.FIELDS,
36
- customisable: true,
37
- fields: {
38
- table: {
39
- type: DatasourceFieldType.STRING,
40
- required: true,
41
- },
16
+ const SCHEMA: Integration = {
17
+ docs: "https://airtable.com/api",
18
+ description:
19
+ "Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
20
+ friendlyName: "Airtable",
21
+ type: "Spreadsheet",
22
+ datasource: {
23
+ apiKey: {
24
+ type: DatasourceFieldType.PASSWORD,
25
+ default: "enter api key",
26
+ required: true,
27
+ },
28
+ base: {
29
+ type: DatasourceFieldType.STRING,
30
+ default: "mybase",
31
+ required: true,
42
32
  },
43
33
  },
44
- read: {
45
- type: QueryType.FIELDS,
46
- fields: {
47
- table: {
48
- type: DatasourceFieldType.STRING,
49
- required: true,
50
- },
51
- view: {
52
- type: DatasourceFieldType.STRING,
53
- required: true,
54
- },
55
- numRecords: {
56
- type: DatasourceFieldType.NUMBER,
57
- default: 10,
34
+ query: {
35
+ create: {
36
+ type: QueryType.FIELDS,
37
+ customisable: true,
38
+ fields: {
39
+ table: {
40
+ type: DatasourceFieldType.STRING,
41
+ required: true,
42
+ },
58
43
  },
59
44
  },
60
- },
61
- update: {
62
- type: QueryType.FIELDS,
63
- customisable: true,
64
- fields: {
65
- id: {
66
- display: "Record ID",
67
- type: DatasourceFieldType.STRING,
68
- required: true,
45
+ read: {
46
+ type: QueryType.FIELDS,
47
+ fields: {
48
+ table: {
49
+ type: DatasourceFieldType.STRING,
50
+ required: true,
51
+ },
52
+ view: {
53
+ type: DatasourceFieldType.STRING,
54
+ required: true,
55
+ },
56
+ numRecords: {
57
+ type: DatasourceFieldType.NUMBER,
58
+ default: 10,
59
+ },
69
60
  },
70
- table: {
71
- type: DatasourceFieldType.STRING,
72
- required: true,
61
+ },
62
+ update: {
63
+ type: QueryType.FIELDS,
64
+ customisable: true,
65
+ fields: {
66
+ id: {
67
+ display: "Record ID",
68
+ type: DatasourceFieldType.STRING,
69
+ required: true,
70
+ },
71
+ table: {
72
+ type: DatasourceFieldType.STRING,
73
+ required: true,
74
+ },
73
75
  },
74
76
  },
77
+ delete: {
78
+ type: QueryType.JSON,
79
+ },
75
80
  },
76
- delete: {
77
- type: QueryType.JSON,
78
- },
79
- },
80
- }
81
+ }
81
82
 
82
- class AirtableIntegration implements IntegrationBase {
83
- private config: AirtableConfig
84
- private client: any
83
+ class AirtableIntegration implements IntegrationBase {
84
+ private config: AirtableConfig
85
+ private client: any
85
86
 
86
- constructor(config: AirtableConfig) {
87
- this.config = config
88
- this.client = new Airtable(config).base(config.base)
89
- }
87
+ constructor(config: AirtableConfig) {
88
+ this.config = config
89
+ this.client = new Airtable(config).base(config.base)
90
+ }
90
91
 
91
- async create(query: { table: any; json: any }) {
92
- const { table, json } = query
92
+ async create(query: { table: any; json: any }) {
93
+ const { table, json } = query
93
94
 
94
- try {
95
- return await this.client(table).create([
96
- {
97
- fields: json,
98
- },
99
- ])
100
- } catch (err) {
101
- console.error("Error writing to airtable", err)
102
- throw err
95
+ try {
96
+ return await this.client(table).create([
97
+ {
98
+ fields: json,
99
+ },
100
+ ])
101
+ } catch (err) {
102
+ console.error("Error writing to airtable", err)
103
+ throw err
104
+ }
103
105
  }
104
- }
105
106
 
106
- async read(query: { table: any; numRecords: any; view: any }) {
107
- try {
108
- const records = await this.client(query.table)
109
- .select({ maxRecords: query.numRecords || 10, view: query.view })
110
- .firstPage()
111
- // @ts-ignore
112
- return records.map(({ fields }) => fields)
113
- } catch (err) {
114
- console.error("Error writing to airtable", err)
115
- return []
107
+ async read(query: { table: any; numRecords: any; view: any }) {
108
+ try {
109
+ const records = await this.client(query.table)
110
+ .select({ maxRecords: query.numRecords || 10, view: query.view })
111
+ .firstPage()
112
+ // @ts-ignore
113
+ return records.map(({ fields }) => fields)
114
+ } catch (err) {
115
+ console.error("Error writing to airtable", err)
116
+ return []
117
+ }
116
118
  }
117
- }
118
119
 
119
- async update(query: { table: any; id: any; json: any }) {
120
- const { table, id, json } = query
120
+ async update(query: { table: any; id: any; json: any }) {
121
+ const { table, id, json } = query
121
122
 
122
- try {
123
- return await this.client(table).update([
124
- {
125
- id,
126
- fields: json,
127
- },
128
- ])
129
- } catch (err) {
130
- console.error("Error writing to airtable", err)
131
- throw err
123
+ try {
124
+ return await this.client(table).update([
125
+ {
126
+ id,
127
+ fields: json,
128
+ },
129
+ ])
130
+ } catch (err) {
131
+ console.error("Error writing to airtable", err)
132
+ throw err
133
+ }
132
134
  }
133
- }
134
135
 
135
- async delete(query: { table: any; ids: any }) {
136
- try {
137
- return await this.client(query.table).destroy(query.ids)
138
- } catch (err) {
139
- console.error("Error writing to airtable", err)
140
- throw err
136
+ async delete(query: { table: any; ids: any }) {
137
+ try {
138
+ return await this.client(query.table).destroy(query.ids)
139
+ } catch (err) {
140
+ console.error("Error writing to airtable", err)
141
+ throw err
142
+ }
141
143
  }
142
144
  }
143
- }
144
145
 
145
- export default {
146
- schema: SCHEMA,
147
- integration: AirtableIntegration,
146
+ module.exports = {
147
+ schema: SCHEMA,
148
+ integration: AirtableIntegration,
149
+ }
148
150
  }