@budibase/server 1.3.21-alpha.1 → 1.3.21

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 (308) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8d12d461.css +6 -0
  3. package/builder/assets/index.d354271c.js +879 -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 +390 -451
  8. package/coverage/coverage-final.json +21 -21
  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 +9 -9
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
  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 +46 -46
  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 +15 -15
  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 +8 -32
  158. package/coverage/lcov.info +672 -798
  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/rows.js +82 -1
  174. package/dist/api/routes/public/tables.js +1 -1
  175. package/dist/api/routes/table.js +1 -1
  176. package/dist/api/routes/utils/validators.js +2 -20
  177. package/dist/app.js +1 -16
  178. package/dist/db/utils.js +1 -10
  179. package/dist/environment.js +0 -1
  180. package/dist/integrations/airtable.js +129 -126
  181. package/dist/integrations/arangodb.js +89 -86
  182. package/dist/integrations/base/query.js +2 -2
  183. package/dist/integrations/base/sqlTable.js +1 -3
  184. package/dist/integrations/couchdb.js +83 -80
  185. package/dist/integrations/dynamodb.js +164 -161
  186. package/dist/integrations/elasticsearch.js +138 -135
  187. package/dist/integrations/firebase.js +157 -154
  188. package/dist/integrations/googlesheets.js +327 -323
  189. package/dist/integrations/index.js +51 -99
  190. package/dist/integrations/microsoftSqlServer.js +243 -240
  191. package/dist/integrations/mongodb.js +242 -239
  192. package/dist/integrations/mysql.js +219 -215
  193. package/dist/integrations/oracle.js +322 -318
  194. package/dist/integrations/postgres.js +265 -262
  195. package/dist/integrations/redis.js +139 -134
  196. package/dist/integrations/rest.js +292 -289
  197. package/dist/integrations/s3.js +64 -61
  198. package/dist/integrations/snowflake.js +86 -83
  199. package/dist/middleware/currentapp.js +0 -2
  200. package/dist/migrations/functions/backfill/global.js +3 -0
  201. package/dist/migrations/functions/developerQuota.js +49 -0
  202. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  203. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  204. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  205. package/dist/migrations/index.js +10 -0
  206. package/dist/package.json +6 -9
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +1 -111
  211. package/dist/utilities/workerRequests.js +0 -4
  212. package/package.json +7 -10
  213. package/scripts/dev/manage.js +0 -4
  214. package/scripts/localdomain.js +1 -3
  215. package/specs/openapi.json +112 -115
  216. package/specs/openapi.yaml +94 -96
  217. package/specs/resources/misc.js +0 -116
  218. package/specs/resources/query.js +1 -1
  219. package/src/api/controllers/application.ts +2 -1
  220. package/src/api/controllers/auth.js +0 -11
  221. package/src/api/controllers/component.js +2 -21
  222. package/src/api/controllers/datasource.js +8 -21
  223. package/src/api/controllers/deploy/index.ts +6 -1
  224. package/src/api/controllers/integration.js +4 -4
  225. package/src/api/controllers/public/mapping/types.ts +0 -8
  226. package/src/api/controllers/row/external.js +1 -1
  227. package/src/api/controllers/screen.js +1 -66
  228. package/src/api/controllers/static/index.ts +1 -1
  229. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  230. package/src/api/controllers/static/templates/preview.hbs +1 -5
  231. package/src/api/index.js +1 -1
  232. package/src/api/routes/application.ts +2 -13
  233. package/src/api/routes/index.ts +0 -2
  234. package/src/api/routes/public/rows.ts +82 -1
  235. package/src/api/routes/public/tables.ts +1 -1
  236. package/src/api/routes/table.js +1 -1
  237. package/src/api/routes/tests/query.spec.js +25 -8
  238. package/src/api/routes/tests/user.spec.js +2 -0
  239. package/src/api/routes/utils/validators.js +5 -26
  240. package/src/app.ts +2 -25
  241. package/src/db/utils.js +0 -12
  242. package/src/definitions/openapi.ts +55 -56
  243. package/src/environment.js +0 -1
  244. package/src/integrations/airtable.ts +118 -116
  245. package/src/integrations/arangodb.ts +89 -87
  246. package/src/integrations/base/query.ts +2 -2
  247. package/src/integrations/base/sqlTable.ts +1 -3
  248. package/src/integrations/couchdb.ts +89 -83
  249. package/src/integrations/dynamodb.ts +175 -173
  250. package/src/integrations/elasticsearch.ts +122 -120
  251. package/src/integrations/firebase.ts +159 -157
  252. package/src/integrations/googlesheets.ts +338 -328
  253. package/src/integrations/index.ts +21 -64
  254. package/src/integrations/microsoftSqlServer.ts +251 -249
  255. package/src/integrations/mongodb.ts +258 -261
  256. package/src/integrations/mysql.ts +234 -229
  257. package/src/integrations/oracle.ts +380 -373
  258. package/src/integrations/postgres.ts +268 -264
  259. package/src/integrations/redis.ts +132 -128
  260. package/src/integrations/rest.ts +329 -324
  261. package/src/integrations/s3.ts +71 -68
  262. package/src/integrations/snowflake.ts +82 -80
  263. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  264. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  265. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  266. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  267. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  268. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  269. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  270. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  271. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  272. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  273. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  274. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  275. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  276. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  277. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  278. package/src/middleware/currentapp.js +0 -2
  279. package/src/migrations/functions/backfill/global.ts +3 -0
  280. package/src/migrations/functions/developerQuota.ts +15 -0
  281. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  282. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  283. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  284. package/src/migrations/index.ts +16 -0
  285. package/src/module.d.ts +0 -2
  286. package/src/tests/utilities/TestConfiguration.js +1 -1
  287. package/src/threads/query.ts +2 -2
  288. package/src/utilities/fileSystem/index.js +0 -130
  289. package/src/utilities/workerRequests.js +0 -8
  290. package/builder/assets/index.c9d3f9e8.js +0 -1005
  291. package/builder/assets/index.f1b70f52.css +0 -6
  292. package/dist/api/controllers/plugin/github.js +0 -69
  293. package/dist/api/controllers/plugin/index.js +0 -200
  294. package/dist/api/controllers/plugin/npm.js +0 -58
  295. package/dist/api/controllers/plugin/uploaders.js +0 -11
  296. package/dist/api/controllers/plugin/utils.js +0 -26
  297. package/dist/watch.js +0 -77
  298. package/dist/websocket.js +0 -22
  299. package/src/api/controllers/plugin/file.ts +0 -15
  300. package/src/api/controllers/plugin/github.ts +0 -75
  301. package/src/api/controllers/plugin/index.ts +0 -215
  302. package/src/api/controllers/plugin/npm.ts +0 -56
  303. package/src/api/controllers/plugin/uploaders.ts +0 -4
  304. package/src/api/controllers/plugin/url.ts +0 -12
  305. package/src/api/controllers/plugin/utils.ts +0 -19
  306. package/src/api/routes/plugin.ts +0 -14
  307. package/src/watch.ts +0 -38
  308. package/src/websocket.ts +0 -26
@@ -3,7 +3,6 @@
3
3
  export let favicon = ""
4
4
 
5
5
  export let clientLibPath
6
- export let usedPlugins
7
6
  </script>
8
7
 
9
8
  <svelte:head>
@@ -84,15 +83,6 @@
84
83
  </script>
85
84
  <script type="application/javascript" src={clientLibPath}>
86
85
  </script>
87
- <!-- Custom components need inserted after the core client library -->
88
- <!-- But before loadBudibase is called -->
89
- {#if usedPlugins?.length}
90
- {#each usedPlugins as plugin}
91
- <script
92
- type="application/javascript"
93
- src={`/plugins/${plugin.jsUrl}`}></script>
94
- {/each}
95
- {/if}
96
86
  <script type="application/javascript">
97
87
  if (window.loadBudibase) {
98
88
  window.loadBudibase()
@@ -66,9 +66,7 @@
66
66
  customTheme,
67
67
  previewDevice,
68
68
  navigation,
69
- hiddenComponentIds,
70
- usedPlugins,
71
- location
69
+ hiddenComponentIds
72
70
  } = parsed
73
71
 
74
72
  // Set some flags so the app knows we're in the builder
@@ -83,8 +81,6 @@
83
81
  window["##BUDIBASE_PREVIEW_DEVICE##"] = previewDevice
84
82
  window["##BUDIBASE_PREVIEW_NAVIGATION##"] = navigation
85
83
  window["##BUDIBASE_HIDDEN_COMPONENT_IDS##"] = hiddenComponentIds
86
- window["##BUDIBASE_USED_PLUGINS##"] = usedPlugins
87
- window["##BUDIBASE_LOCATION##"] = location
88
84
 
89
85
  // Initialise app
90
86
  try {
package/src/api/index.js CHANGED
@@ -54,8 +54,8 @@ router
54
54
  noTenancyRequired: true,
55
55
  })
56
56
  )
57
- .use(pro.licensing())
58
57
  .use(currentApp)
58
+ .use(pro.licensing())
59
59
  .use(auditLog)
60
60
 
61
61
  // error handling middleware
@@ -2,27 +2,16 @@ import Router from "@koa/router"
2
2
  import * as controller from "../controllers/application"
3
3
  import authorized from "../../middleware/authorized"
4
4
  import { BUILDER } from "@budibase/backend-core/permissions"
5
- import { applicationValidator } from "./utils/validators"
6
5
 
7
6
  const router = new Router()
8
7
 
9
8
  router
10
9
  .post("/api/applications/:appId/sync", authorized(BUILDER), controller.sync)
11
- .post(
12
- "/api/applications",
13
- authorized(BUILDER),
14
- applicationValidator(),
15
- controller.create
16
- )
10
+ .post("/api/applications", authorized(BUILDER), controller.create)
17
11
  .get("/api/applications/:appId/definition", controller.fetchAppDefinition)
18
12
  .get("/api/applications", controller.fetch)
19
13
  .get("/api/applications/:appId/appPackage", controller.fetchAppPackage)
20
- .put(
21
- "/api/applications/:appId",
22
- authorized(BUILDER),
23
- applicationValidator({ isCreate: false }),
24
- controller.update
25
- )
14
+ .put("/api/applications/:appId", authorized(BUILDER), controller.update)
26
15
  .post(
27
16
  "/api/applications/:appId/client/update",
28
17
  authorized(BUILDER),
@@ -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
  ]
@@ -143,7 +143,88 @@ read.push(new Endpoint("get", "/tables/:tableId/rows/:rowId", controller.read))
143
143
  * content:
144
144
  * application/json:
145
145
  * schema:
146
- * $ref: '#/components/schemas/rowSearch'
146
+ * type: object
147
+ * required:
148
+ * - query
149
+ * properties:
150
+ * query:
151
+ * type: object
152
+ * properties:
153
+ * allOr:
154
+ * type: boolean
155
+ * description: Specifies that a row should be returned if it satisfies
156
+ * any of the specified options, rather than requiring it to fulfill all
157
+ * the search parameters. This defaults to false, meaning AND logic will be used.
158
+ * string:
159
+ * type: object
160
+ * example:
161
+ * columnName1: value
162
+ * columnName2: value
163
+ * description: A map of field name to the string to search for,
164
+ * this will look for rows that have a value starting with the
165
+ * string value.
166
+ * additionalProperties:
167
+ * type: string
168
+ * description: The value to search for in the column.
169
+ * fuzzy:
170
+ * type: object
171
+ * description: A fuzzy search, only supported by internal tables.
172
+ * range:
173
+ * type: object
174
+ * description: Searches within a range, the format of this must be
175
+ * in the format of an object with a "low" and "high" property.
176
+ * example:
177
+ * columnName1: { low: 10, high: 20 }
178
+ * equal:
179
+ * type: object
180
+ * description: Searches for rows that have a column value that is
181
+ * exactly the value set.
182
+ * notEqual:
183
+ * type: object
184
+ * description: Searches for any row which does not contain the specified
185
+ * column value.
186
+ * empty:
187
+ * type: object
188
+ * description: Searches for rows which do not contain the specified column.
189
+ * The object should simply contain keys of the column names, these
190
+ * can map to any value.
191
+ * example:
192
+ * columnName1: ""
193
+ * notEmpty:
194
+ * type: object
195
+ * description: Searches for rows which have the specified column.
196
+ * oneOf:
197
+ * type: object
198
+ * description: Searches for rows which have a column value that is any
199
+ * of the specified values. The format of this must be columnName -> [value1, value2].
200
+ * paginate:
201
+ * type: boolean
202
+ * description: Enables pagination, by default this is disabled.
203
+ * bookmark:
204
+ * oneOf:
205
+ * - type: string
206
+ * - type: integer
207
+ * description: If retrieving another page, the bookmark from the previous request must be supplied.
208
+ * limit:
209
+ * type: integer
210
+ * description: The maximum number of rows to return, useful when paginating, for internal tables this
211
+ * will be limited to 1000, for SQL tables it will be 5000.
212
+ * sort:
213
+ * type: object
214
+ * description: A set of parameters describing the sort behaviour of the search.
215
+ * properties:
216
+ * order:
217
+ * type: string
218
+ * enum: [ascending, descending]
219
+ * description: The order of the sort, by default this is ascending.
220
+ * column:
221
+ * type: string
222
+ * description: The name of the column by which the rows will be sorted.
223
+ * type:
224
+ * type: string
225
+ * enum: [string, number]
226
+ * description: Defines whether the column should be treated as a string
227
+ * or as numbers when sorting.
147
228
  * responses:
148
229
  * 200:
149
230
  * description: The response will contain an array of rows that match the search parameters.
@@ -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
@@ -210,35 +209,15 @@ exports.automationValidator = (existing = false) => {
210
209
  }).unknown(true))
211
210
  }
212
211
 
213
- exports.applicationValidator = (opts = { isCreate: true }) => {
212
+ exports.applicationValidator = () => {
214
213
  // prettier-ignore
215
- const base = {
214
+ return joiValidator.body(Joi.object({
216
215
  _id: OPTIONAL_STRING,
217
216
  _rev: OPTIONAL_STRING,
217
+ name: Joi.string().required(),
218
218
  url: OPTIONAL_STRING,
219
219
  template: Joi.object({
220
220
  templateString: OPTIONAL_STRING,
221
- })
222
- }
223
-
224
- const appNameValidator = Joi.string()
225
- .pattern(new RegExp(APP_NAME_REGEX))
226
- .error(new Error("App name must be letters, numbers and spaces only"))
227
- if (opts.isCreate) {
228
- base.name = appNameValidator.required()
229
- } else {
230
- base.name = appNameValidator.optional()
231
- }
232
-
233
- return joiValidator.body(
234
- Joi.object({
235
- _id: OPTIONAL_STRING,
236
- _rev: OPTIONAL_STRING,
237
- name: appNameValidator,
238
- url: OPTIONAL_STRING,
239
- template: Joi.object({
240
- templateString: OPTIONAL_STRING,
241
- }).unknown(true),
242
- }).unknown(true)
243
- )
221
+ }).unknown(true),
222
+ }).unknown(true))
244
223
  }
package/src/app.ts CHANGED
@@ -26,17 +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
- import {
34
- createAdminUser,
35
- generateApiKey,
36
- getChecklist,
37
- } from "./utilities/workerRequests"
38
- import { watch } from "./watch"
39
- import { initialise as initialiseWebsockets } from "./websocket"
32
+ import { createAdminUser, getChecklist } from "./utilities/workerRequests"
40
33
 
41
34
  const app = new Koa()
42
35
 
@@ -81,7 +74,6 @@ if (env.isProd()) {
81
74
 
82
75
  const server = http.createServer(app.callback())
83
76
  destroyable(server)
84
- initialiseWebsockets(server)
85
77
 
86
78
  let shuttingDown = false,
87
79
  errCode = 0
@@ -131,16 +123,11 @@ module.exports = server.listen(env.PORT || 0, async () => {
131
123
  if (!checklist?.adminUser?.checked) {
132
124
  try {
133
125
  const tenantId = tenancy.getTenantId()
134
- const user = await createAdminUser(
126
+ await createAdminUser(
135
127
  env.BB_ADMIN_USER_EMAIL,
136
128
  env.BB_ADMIN_USER_PASSWORD,
137
129
  tenantId
138
130
  )
139
- // Need to set up an API key for automated integration tests
140
- if (env.isTest()) {
141
- await generateApiKey(user._id)
142
- }
143
-
144
131
  console.log(
145
132
  "Admin account automatically created for",
146
133
  env.BB_ADMIN_USER_EMAIL
@@ -152,16 +139,6 @@ module.exports = server.listen(env.PORT || 0, async () => {
152
139
  }
153
140
  }
154
141
 
155
- // monitor plugin directory if required
156
- if (
157
- env.SELF_HOSTED &&
158
- !env.MULTI_TENANCY &&
159
- env.PLUGINS_DIR &&
160
- fs.existsSync(env.PLUGINS_DIR)
161
- ) {
162
- watch()
163
- }
164
-
165
142
  // check for version updates
166
143
  await installation.checkInstallVersion()
167
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
- }
@@ -278,7 +278,58 @@ export interface paths {
278
278
  };
279
279
  requestBody: {
280
280
  content: {
281
- "application/json": components["schemas"]["rowSearch"];
281
+ "application/json": {
282
+ query: {
283
+ /** @description Specifies that a row should be returned if it satisfies any of the specified options, rather than requiring it to fulfill all the search parameters. This defaults to false, meaning AND logic will be used. */
284
+ allOr?: boolean;
285
+ /**
286
+ * @description A map of field name to the string to search for, this will look for rows that have a value starting with the string value.
287
+ * @example [object Object]
288
+ */
289
+ string?: { [key: string]: string };
290
+ /** @description A fuzzy search, only supported by internal tables. */
291
+ fuzzy?: { [key: string]: unknown };
292
+ /**
293
+ * @description Searches within a range, the format of this must be in the format of an object with a "low" and "high" property.
294
+ * @example [object Object]
295
+ */
296
+ range?: { [key: string]: unknown };
297
+ /** @description Searches for rows that have a column value that is exactly the value set. */
298
+ equal?: { [key: string]: unknown };
299
+ /** @description Searches for any row which does not contain the specified column value. */
300
+ notEqual?: { [key: string]: unknown };
301
+ /**
302
+ * @description Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value.
303
+ * @example [object Object]
304
+ */
305
+ empty?: { [key: string]: unknown };
306
+ /** @description Searches for rows which have the specified column. */
307
+ notEmpty?: { [key: string]: unknown };
308
+ /** @description Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2]. */
309
+ oneOf?: { [key: string]: unknown };
310
+ };
311
+ /** @description Enables pagination, by default this is disabled. */
312
+ paginate?: boolean;
313
+ /** @description If retrieving another page, the bookmark from the previous request must be supplied. */
314
+ bookmark?: string | number;
315
+ /** @description The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000. */
316
+ limit?: number;
317
+ /** @description A set of parameters describing the sort behaviour of the search. */
318
+ sort?: {
319
+ /**
320
+ * @description The order of the sort, by default this is ascending.
321
+ * @enum {string}
322
+ */
323
+ order?: "ascending" | "descending";
324
+ /** @description The name of the column by which the rows will be sorted. */
325
+ column?: string;
326
+ /**
327
+ * @description Defines whether the column should be treated as a string or as numbers when sorting.
328
+ * @enum {string}
329
+ */
330
+ type?: "string" | "number";
331
+ };
332
+ };
282
333
  };
283
334
  };
284
335
  };
@@ -293,7 +344,7 @@ export interface paths {
293
344
  };
294
345
  };
295
346
  responses: {
296
- /** 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. */
297
348
  200: {
298
349
  content: {
299
350
  "application/json": components["schemas"]["tableOutput"];
@@ -914,7 +965,7 @@ export interface components {
914
965
  query: {
915
966
  /** @description The ID of the query. */
916
967
  _id: string;
917
- /** @description The ID of the datasource the query belongs to. */
968
+ /** @description The ID of the data source the query belongs to. */
918
969
  datasourceId?: string;
919
970
  /** @description The bindings which are required to perform this query. */
920
971
  parameters?: string[];
@@ -938,7 +989,7 @@ export interface components {
938
989
  data: {
939
990
  /** @description The ID of the query. */
940
991
  _id: string;
941
- /** @description The ID of the datasource the query belongs to. */
992
+ /** @description The ID of the data source the query belongs to. */
942
993
  datasourceId?: string;
943
994
  /** @description The bindings which are required to perform this query. */
944
995
  parameters?: string[];
@@ -1054,58 +1105,6 @@ export interface components {
1054
1105
  _id: string;
1055
1106
  }[];
1056
1107
  };
1057
- rowSearch: {
1058
- query: {
1059
- /** @description Specifies that a row should be returned if it satisfies any of the specified options, rather than requiring it to fulfill all the search parameters. This defaults to false, meaning AND logic will be used. */
1060
- allOr?: boolean;
1061
- /**
1062
- * @description A map of field name to the string to search for, this will look for rows that have a value starting with the string value.
1063
- * @example [object Object]
1064
- */
1065
- string?: { [key: string]: string };
1066
- /** @description A fuzzy search, only supported by internal tables. */
1067
- fuzzy?: { [key: string]: unknown };
1068
- /**
1069
- * @description Searches within a range, the format of this must be in the format of an object with a "low" and "high" property.
1070
- * @example [object Object]
1071
- */
1072
- range?: { [key: string]: unknown };
1073
- /** @description Searches for rows that have a column value that is exactly the value set. */
1074
- equal?: { [key: string]: unknown };
1075
- /** @description Searches for any row which does not contain the specified column value. */
1076
- notEqual?: { [key: string]: unknown };
1077
- /**
1078
- * @description Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value.
1079
- * @example [object Object]
1080
- */
1081
- empty?: { [key: string]: unknown };
1082
- /** @description Searches for rows which have the specified column. */
1083
- notEmpty?: { [key: string]: unknown };
1084
- /** @description Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2]. */
1085
- oneOf?: { [key: string]: unknown };
1086
- };
1087
- /** @description Enables pagination, by default this is disabled. */
1088
- paginate?: boolean;
1089
- /** @description If retrieving another page, the bookmark from the previous request must be supplied. */
1090
- bookmark?: string | number;
1091
- /** @description The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000. */
1092
- limit?: number;
1093
- /** @description A set of parameters describing the sort behaviour of the search. */
1094
- sort?: {
1095
- /**
1096
- * @description The order of the sort, by default this is ascending.
1097
- * @enum {string}
1098
- */
1099
- order?: "ascending" | "descending";
1100
- /** @description The name of the column by which the rows will be sorted. */
1101
- column?: string;
1102
- /**
1103
- * @description Defines whether the column should be treated as a string or as numbers when sorting.
1104
- * @enum {string}
1105
- */
1106
- type?: "string" | "number";
1107
- };
1108
- };
1109
1108
  nameSearch: {
1110
1109
  /** @description The name to be used when searching - this will be used in a case insensitive starts with match. */
1111
1110
  name: 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,