@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
@@ -1004,7 +1004,7 @@ components:
1004
1004
  description: The ID of the query.
1005
1005
  type: string
1006
1006
  datasourceId:
1007
- description: The ID of the datasource the query belongs to.
1007
+ description: The ID of the data source the query belongs to.
1008
1008
  type: string
1009
1009
  parameters:
1010
1010
  description: The bindings which are required to perform this query.
@@ -1051,7 +1051,7 @@ components:
1051
1051
  description: The ID of the query.
1052
1052
  type: string
1053
1053
  datasourceId:
1054
- description: The ID of the datasource the query belongs to.
1054
+ description: The ID of the data source the query belongs to.
1055
1055
  type: string
1056
1056
  parameters:
1057
1057
  description: The bindings which are required to perform this query.
@@ -1264,98 +1264,6 @@ components:
1264
1264
  - _id
1265
1265
  required:
1266
1266
  - data
1267
- rowSearch:
1268
- type: object
1269
- properties:
1270
- query:
1271
- type: object
1272
- properties:
1273
- allOr:
1274
- type: boolean
1275
- description: Specifies that a row should be returned if it satisfies any of the
1276
- specified options, rather than requiring it to fulfill all the
1277
- search parameters. This defaults to false, meaning AND logic
1278
- will be used.
1279
- string:
1280
- type: object
1281
- example:
1282
- columnName1: value
1283
- columnName2: value
1284
- description: A map of field name to the string to search for, this will look for
1285
- rows that have a value starting with the string value.
1286
- additionalProperties:
1287
- type: string
1288
- description: The value to search for in the column.
1289
- fuzzy:
1290
- type: object
1291
- description: A fuzzy search, only supported by internal tables.
1292
- range:
1293
- type: object
1294
- description: Searches within a range, the format of this must be in the format
1295
- of an object with a "low" and "high" property.
1296
- example:
1297
- columnName1:
1298
- low: 10
1299
- high: 20
1300
- equal:
1301
- type: object
1302
- description: Searches for rows that have a column value that is exactly the
1303
- value set.
1304
- notEqual:
1305
- type: object
1306
- description: Searches for any row which does not contain the specified column
1307
- value.
1308
- empty:
1309
- type: object
1310
- description: Searches for rows which do not contain the specified column. The
1311
- object should simply contain keys of the column names, these can
1312
- map to any value.
1313
- example:
1314
- columnName1: ""
1315
- notEmpty:
1316
- type: object
1317
- description: Searches for rows which have the specified column.
1318
- oneOf:
1319
- type: object
1320
- description: Searches for rows which have a column value that is any of the
1321
- specified values. The format of this must be columnName ->
1322
- [value1, value2].
1323
- paginate:
1324
- type: boolean
1325
- description: Enables pagination, by default this is disabled.
1326
- bookmark:
1327
- oneOf:
1328
- - type: string
1329
- - type: integer
1330
- description: If retrieving another page, the bookmark from the previous request
1331
- must be supplied.
1332
- limit:
1333
- type: integer
1334
- description: The maximum number of rows to return, useful when paginating, for
1335
- internal tables this will be limited to 1000, for SQL tables it will
1336
- be 5000.
1337
- sort:
1338
- type: object
1339
- description: A set of parameters describing the sort behaviour of the search.
1340
- properties:
1341
- order:
1342
- type: string
1343
- enum:
1344
- - ascending
1345
- - descending
1346
- description: The order of the sort, by default this is ascending.
1347
- column:
1348
- type: string
1349
- description: The name of the column by which the rows will be sorted.
1350
- type:
1351
- type: string
1352
- enum:
1353
- - string
1354
- - number
1355
- description: Defines whether the column should be treated as a string or as
1356
- numbers when sorting.
1357
- required:
1358
- - query
1359
1267
  nameSearch:
1360
1268
  type: object
1361
1269
  properties:
@@ -1636,7 +1544,97 @@ paths:
1636
1544
  content:
1637
1545
  application/json:
1638
1546
  schema:
1639
- $ref: "#/components/schemas/rowSearch"
1547
+ type: object
1548
+ required:
1549
+ - query
1550
+ properties:
1551
+ query:
1552
+ type: object
1553
+ properties:
1554
+ allOr:
1555
+ type: boolean
1556
+ description: Specifies that a row should be returned if it satisfies any of the
1557
+ specified options, rather than requiring it to fulfill
1558
+ all the search parameters. This defaults to false,
1559
+ meaning AND logic will be used.
1560
+ string:
1561
+ type: object
1562
+ example:
1563
+ columnName1: value
1564
+ columnName2: value
1565
+ description: A map of field name to the string to search for, this will look for
1566
+ rows that have a value starting with the string value.
1567
+ additionalProperties:
1568
+ type: string
1569
+ description: The value to search for in the column.
1570
+ fuzzy:
1571
+ type: object
1572
+ description: A fuzzy search, only supported by internal tables.
1573
+ range:
1574
+ type: object
1575
+ description: Searches within a range, the format of this must be in the format
1576
+ of an object with a "low" and "high" property.
1577
+ example:
1578
+ columnName1:
1579
+ low: 10
1580
+ high: 20
1581
+ equal:
1582
+ type: object
1583
+ description: Searches for rows that have a column value that is exactly the
1584
+ value set.
1585
+ notEqual:
1586
+ type: object
1587
+ description: Searches for any row which does not contain the specified column
1588
+ value.
1589
+ empty:
1590
+ type: object
1591
+ description: Searches for rows which do not contain the specified column. The
1592
+ object should simply contain keys of the column names,
1593
+ these can map to any value.
1594
+ example:
1595
+ columnName1: ""
1596
+ notEmpty:
1597
+ type: object
1598
+ description: Searches for rows which have the specified column.
1599
+ oneOf:
1600
+ type: object
1601
+ description: Searches for rows which have a column value that is any of the
1602
+ specified values. The format of this must be columnName
1603
+ -> [value1, value2].
1604
+ paginate:
1605
+ type: boolean
1606
+ description: Enables pagination, by default this is disabled.
1607
+ bookmark:
1608
+ oneOf:
1609
+ - type: string
1610
+ - type: integer
1611
+ description: If retrieving another page, the bookmark from the previous request
1612
+ must be supplied.
1613
+ limit:
1614
+ type: integer
1615
+ description: The maximum number of rows to return, useful when paginating, for
1616
+ internal tables this will be limited to 1000, for SQL tables
1617
+ it will be 5000.
1618
+ sort:
1619
+ type: object
1620
+ description: A set of parameters describing the sort behaviour of the search.
1621
+ properties:
1622
+ order:
1623
+ type: string
1624
+ enum:
1625
+ - ascending
1626
+ - descending
1627
+ description: The order of the sort, by default this is ascending.
1628
+ column:
1629
+ type: string
1630
+ description: The name of the column by which the rows will be sorted.
1631
+ type:
1632
+ type: string
1633
+ enum:
1634
+ - string
1635
+ - number
1636
+ description: Defines whether the column should be treated as a string or as
1637
+ numbers when sorting.
1640
1638
  responses:
1641
1639
  "200":
1642
1640
  description: The response will contain an array of rows that match the search
@@ -1667,7 +1665,7 @@ paths:
1667
1665
  responses:
1668
1666
  "200":
1669
1667
  description: Returns the created table, including the ID which has been
1670
- generated for it. This can be internal or external datasources.
1668
+ generated for it. This can be internal or external data sources.
1671
1669
  content:
1672
1670
  application/json:
1673
1671
  schema:
@@ -2,122 +2,6 @@ const { object } = require("./utils")
2
2
  const Resource = require("./utils/Resource")
3
3
 
4
4
  module.exports = new Resource().setSchemas({
5
- rowSearch: object(
6
- {
7
- query: {
8
- type: "object",
9
- properties: {
10
- allOr: {
11
- type: "boolean",
12
- description:
13
- "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.",
14
- },
15
- string: {
16
- type: "object",
17
- example: {
18
- columnName1: "value",
19
- columnName2: "value",
20
- },
21
- description:
22
- "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.",
23
- additionalProperties: {
24
- type: "string",
25
- description: "The value to search for in the column.",
26
- },
27
- },
28
- fuzzy: {
29
- type: "object",
30
- description: "A fuzzy search, only supported by internal tables.",
31
- },
32
- range: {
33
- type: "object",
34
- description:
35
- 'Searches within a range, the format of this must be in the format of an object with a "low" and "high" property.',
36
- example: {
37
- columnName1: {
38
- low: 10,
39
- high: 20,
40
- },
41
- },
42
- },
43
- equal: {
44
- type: "object",
45
- description:
46
- "Searches for rows that have a column value that is exactly the value set.",
47
- },
48
- notEqual: {
49
- type: "object",
50
- description:
51
- "Searches for any row which does not contain the specified column value.",
52
- },
53
- empty: {
54
- type: "object",
55
- description:
56
- "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.",
57
- example: {
58
- columnName1: "",
59
- },
60
- },
61
- notEmpty: {
62
- type: "object",
63
- description: "Searches for rows which have the specified column.",
64
- },
65
- oneOf: {
66
- type: "object",
67
- description:
68
- "Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2].",
69
- },
70
- },
71
- },
72
- paginate: {
73
- type: "boolean",
74
- description: "Enables pagination, by default this is disabled.",
75
- },
76
- bookmark: {
77
- oneOf: [
78
- {
79
- type: "string",
80
- },
81
- {
82
- type: "integer",
83
- },
84
- ],
85
- description:
86
- "If retrieving another page, the bookmark from the previous request must be supplied.",
87
- },
88
- limit: {
89
- type: "integer",
90
- description:
91
- "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.",
92
- },
93
- sort: {
94
- type: "object",
95
- description:
96
- "A set of parameters describing the sort behaviour of the search.",
97
- properties: {
98
- order: {
99
- type: "string",
100
- enum: ["ascending", "descending"],
101
- description: "The order of the sort, by default this is ascending.",
102
- },
103
- column: {
104
- type: "string",
105
- description:
106
- "The name of the column by which the rows will be sorted.",
107
- },
108
- type: {
109
- type: "string",
110
- enum: ["string", "number"],
111
- description:
112
- "Defines whether the column should be treated as a string or as numbers when sorting.",
113
- },
114
- },
115
- },
116
- },
117
- {
118
- required: ["query"],
119
- }
120
- ),
121
5
  nameSearch: object({
122
6
  name: {
123
7
  type: "string",
@@ -82,7 +82,7 @@ const querySchema = object(
82
82
  type: "string",
83
83
  },
84
84
  datasourceId: {
85
- description: "The ID of the datasource the query belongs to.",
85
+ description: "The ID of the data source the query belongs to.",
86
86
  type: "string",
87
87
  },
88
88
  parameters: {
@@ -472,6 +472,7 @@ const destroyApp = async (ctx: any) => {
472
472
  const result = await db.destroy()
473
473
 
474
474
  if (isUnpublish) {
475
+ await quotas.removePublishedApp()
475
476
  await events.app.unpublished(app)
476
477
  } else {
477
478
  await quotas.removeApp()
@@ -571,7 +572,7 @@ export const sync = async (ctx: any, next: any) => {
571
572
  }
572
573
  }
573
574
 
574
- export const updateAppPackage = async (appPackage: any, appId: any) => {
575
+ const updateAppPackage = async (appPackage: any, appId: any) => {
575
576
  return context.doInAppContext(appId, async () => {
576
577
  const db = context.getAppDB()
577
578
  const application = await db.get(DocumentType.APP_METADATA)
@@ -4,15 +4,6 @@ const { getFullUser } = require("../../utilities/users")
4
4
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
5
5
  const { getAppDB, getAppId } = require("@budibase/backend-core/context")
6
6
 
7
- /**
8
- * Add the attributes that are session based to the current user.
9
- */
10
- const addSessionAttributesToUser = ctx => {
11
- if (ctx.user) {
12
- ctx.body.license = ctx.user.license
13
- }
14
- }
15
-
16
7
  exports.fetchSelf = async ctx => {
17
8
  let userId = ctx.user.userId || ctx.user._id
18
9
  /* istanbul ignore next */
@@ -64,6 +55,4 @@ exports.fetchSelf = async ctx => {
64
55
  } else {
65
56
  ctx.body = user
66
57
  }
67
-
68
- addSessionAttributesToUser(ctx)
69
58
  }
@@ -1,7 +1,6 @@
1
- const { DocumentType, getPluginParams } = require("../../db/utils")
1
+ const { DocumentType } = require("../../db/utils")
2
2
  const { getComponentLibraryManifest } = require("../../utilities/fileSystem")
3
3
  const { getAppDB } = require("@budibase/backend-core/context")
4
- const { getGlobalDB } = require("@budibase/backend-core/tenancy")
5
4
 
6
5
  exports.fetchAppComponentDefinitions = async function (ctx) {
7
6
  try {
@@ -11,6 +10,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
11
10
  let componentManifests = await Promise.all(
12
11
  app.componentLibraries.map(async library => {
13
12
  let manifest = await getComponentLibraryManifest(library)
13
+
14
14
  return {
15
15
  manifest,
16
16
  library,
@@ -31,25 +31,6 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
31
31
  }
32
32
  }
33
33
  }
34
-
35
- // Add custom components
36
- const globalDB = getGlobalDB()
37
- const response = await globalDB.allDocs(
38
- getPluginParams(null, {
39
- include_docs: true,
40
- })
41
- )
42
- response.rows
43
- .map(row => row.doc)
44
- .filter(plugin => plugin.schema.type === "component")
45
- .forEach(plugin => {
46
- const fullComponentName = `plugin/${plugin.name}`
47
- definitions[fullComponentName] = {
48
- component: fullComponentName,
49
- ...plugin.schema.schema,
50
- }
51
- })
52
-
53
34
  ctx.body = definitions
54
35
  } catch (err) {
55
36
  console.error(`component-definitions=failed`, err)
@@ -7,7 +7,7 @@ const {
7
7
  getTableParams,
8
8
  } = require("../../db/utils")
9
9
  const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
10
- const { getIntegration } = require("../../integrations")
10
+ const { integrations } = require("../../integrations")
11
11
  const { getDatasourceAndQuery } = require("./row/utils")
12
12
  const { invalidateDynamicVariables } = require("../../threads/utils")
13
13
  const { getAppDB } = require("@budibase/backend-core/context")
@@ -50,23 +50,9 @@ exports.fetch = async function (ctx) {
50
50
  exports.buildSchemaFromDb = async function (ctx) {
51
51
  const db = getAppDB()
52
52
  const datasource = await db.get(ctx.params.datasourceId)
53
- const tablesFilter = ctx.request.body.tablesFilter
54
53
 
55
- let { tables, error } = await buildSchemaHelper(datasource)
56
- if (tablesFilter) {
57
- if (!datasource.entities) {
58
- datasource.entities = {}
59
- }
60
- for (let key in tables) {
61
- if (
62
- tablesFilter.some(filter => filter.toLowerCase() === key.toLowerCase())
63
- ) {
64
- datasource.entities[key] = tables[key]
65
- }
66
- }
67
- } else {
68
- datasource.entities = tables
69
- }
54
+ const { tables, error } = await buildSchemaHelper(datasource)
55
+ datasource.entities = tables
70
56
 
71
57
  const dbResp = await db.put(datasource)
72
58
  datasource._rev = dbResp.rev
@@ -128,7 +114,7 @@ exports.update = async function (ctx) {
128
114
 
129
115
  // Drain connection pools when configuration is changed
130
116
  if (datasource.source) {
131
- const source = await getIntegration(datasource.source)
117
+ const source = integrations[datasource.source]
132
118
  if (source && source.pool) {
133
119
  await source.pool.end()
134
120
  }
@@ -163,7 +149,7 @@ exports.save = async function (ctx) {
163
149
 
164
150
  // Drain connection pools when configuration is changed
165
151
  if (datasource.source) {
166
- const source = await getIntegration(datasource.source)
152
+ const source = integrations[datasource.source]
167
153
  if (source && source.pool) {
168
154
  await source.pool.end()
169
155
  }
@@ -232,14 +218,15 @@ function updateError(error, newError, tables) {
232
218
  }
233
219
 
234
220
  const buildSchemaHelper = async datasource => {
235
- const Connector = await getIntegration(datasource.source)
221
+ const Connector = integrations[datasource.source]
236
222
 
237
223
  // Connect to the DB and build the schema
238
224
  const connector = new Connector(datasource.config)
239
225
  await connector.buildSchema(datasource._id, datasource.entities)
226
+ datasource.entities = connector.tables
240
227
 
241
228
  // make sure they all have a display name selected
242
- for (let entity of Object.values(datasource.entities ?? {})) {
229
+ for (let entity of Object.values(datasource.entities)) {
243
230
  if (entity.primaryDisplay) {
244
231
  continue
245
232
  }
@@ -206,7 +206,12 @@ const _deployApp = async function (ctx: any) {
206
206
 
207
207
  console.log("Deploying app...")
208
208
 
209
- let app = await deployApp(deployment)
209
+ let app
210
+ if (await isFirstDeploy()) {
211
+ app = await quotas.addPublishedApp(() => deployApp(deployment))
212
+ } else {
213
+ app = await deployApp(deployment)
214
+ }
210
215
 
211
216
  await events.app.published(app)
212
217
  ctx.body = deployment
@@ -1,11 +1,12 @@
1
- const { getDefinitions } = require("../../integrations")
1
+ const { cloneDeep } = require("lodash")
2
+ const { definitions } = require("../../integrations")
2
3
  const { SourceName } = require("@budibase/types")
3
4
  const googlesheets = require("../../integrations/googlesheets")
4
5
  const { featureFlags } = require("@budibase/backend-core")
5
6
 
6
7
  exports.fetch = async function (ctx) {
7
8
  ctx.status = 200
8
- const defs = await getDefinitions()
9
+ const defs = cloneDeep(definitions)
9
10
 
10
11
  // for google sheets integration google verification
11
12
  if (featureFlags.isEnabled(featureFlags.FeatureFlag.GOOGLE_SHEETS)) {
@@ -16,7 +17,6 @@ exports.fetch = async function (ctx) {
16
17
  }
17
18
 
18
19
  exports.find = async function (ctx) {
19
- const defs = await getDefinitions()
20
20
  ctx.status = 200
21
- ctx.body = defs[ctx.params.type]
21
+ ctx.body = definitions[ctx.params.type]
22
22
  }
@@ -4,18 +4,10 @@ export type Query = components["schemas"]["query"]
4
4
  export type ExecuteQuery = components["schemas"]["executeQueryOutput"]
5
5
 
6
6
  export type Application = components["schemas"]["applicationOutput"]["data"]
7
- export type CreateApplicationParams = components["schemas"]["application"]
8
7
 
9
8
  export type Table = components["schemas"]["tableOutput"]["data"]
10
- export type CreateTableParams = components["schemas"]["table"]
11
9
 
12
10
  export type Row = components["schemas"]["rowOutput"]["data"]
13
11
  export type RowSearch = components["schemas"]["searchOutput"]
14
- export type CreateRowParams = components["schemas"]["row"]
15
12
 
16
13
  export type User = components["schemas"]["userOutput"]["data"]
17
- export type CreateUserParams = components["schemas"]["user"]
18
-
19
- export type SearchInputParams =
20
- | components["schemas"]["nameSearch"]
21
- | components["schemas"]["rowSearch"]
@@ -53,7 +53,7 @@ exports.save = async ctx => {
53
53
  }
54
54
 
55
55
  exports.fetchView = async ctx => {
56
- // there are no views in external datasources, shouldn't ever be called
56
+ // there are no views in external data sources, shouldn't ever be called
57
57
  // for now just fetch
58
58
  const split = ctx.params.viewName.split("all_")
59
59
  ctx.params.tableId = split[1] ? split[1] : split[0]
@@ -1,14 +1,7 @@
1
- const {
2
- getScreenParams,
3
- generateScreenID,
4
- getPluginParams,
5
- DocumentType,
6
- } = require("../../db/utils")
1
+ const { getScreenParams, generateScreenID } = require("../../db/utils")
7
2
  const { AccessController } = require("@budibase/backend-core/roles")
8
3
  const { getAppDB } = require("@budibase/backend-core/context")
9
4
  const { events } = require("@budibase/backend-core")
10
- const { getGlobalDB } = require("@budibase/backend-core/tenancy")
11
- const { updateAppPackage } = require("./application")
12
5
 
13
6
  exports.fetch = async ctx => {
14
7
  const db = getAppDB()
@@ -39,48 +32,6 @@ exports.save = async ctx => {
39
32
 
40
33
  const response = await db.put(screen)
41
34
 
42
- // Find any custom components being used
43
- let pluginNames = []
44
- let pluginAdded = false
45
- findPlugins(screen.props, pluginNames)
46
- if (pluginNames.length) {
47
- const globalDB = getGlobalDB()
48
- const pluginsResponse = await globalDB.allDocs(
49
- getPluginParams(null, {
50
- include_docs: true,
51
- })
52
- )
53
- const requiredPlugins = pluginsResponse.rows
54
- .map(row => row.doc)
55
- .filter(plugin => {
56
- return (
57
- plugin.schema.type === "component" &&
58
- pluginNames.includes(`plugin/${plugin.name}`)
59
- )
60
- })
61
-
62
- // Update the app metadata
63
- const application = await db.get(DocumentType.APP_METADATA)
64
- let usedPlugins = application.usedPlugins || []
65
-
66
- requiredPlugins.forEach(plugin => {
67
- if (!usedPlugins.find(x => x._id === plugin._id)) {
68
- pluginAdded = true
69
- usedPlugins.push({
70
- _id: plugin._id,
71
- name: plugin.name,
72
- version: plugin.version,
73
- jsUrl: plugin.jsUrl,
74
- hash: plugin.hash,
75
- })
76
- }
77
- })
78
-
79
- if (pluginAdded) {
80
- await updateAppPackage({ usedPlugins }, ctx.appId)
81
- }
82
- }
83
-
84
35
  if (eventFn) {
85
36
  await eventFn(screen)
86
37
  }
@@ -89,7 +40,6 @@ exports.save = async ctx => {
89
40
  ...screen,
90
41
  _id: response.id,
91
42
  _rev: response.rev,
92
- pluginAdded,
93
43
  }
94
44
  }
95
45
 
@@ -106,18 +56,3 @@ exports.destroy = async ctx => {
106
56
  }
107
57
  ctx.status = 200
108
58
  }
109
-
110
- const findPlugins = (component, foundPlugins) => {
111
- if (!component) {
112
- return
113
- }
114
- if (component._component.startsWith("plugin")) {
115
- if (!foundPlugins.includes(component._component)) {
116
- foundPlugins.push(component._component)
117
- }
118
- }
119
- if (!component._children || !component._children.length) {
120
- return
121
- }
122
- component._children.forEach(child => findPlugins(child, foundPlugins))
123
- }
@@ -18,6 +18,7 @@ const { DocumentType } = require("../../../db/utils")
18
18
  const { getAppDB, getAppId } = require("@budibase/backend-core/context")
19
19
  const { setCookie, clearCookie } = require("@budibase/backend-core/utils")
20
20
  const AWS = require("aws-sdk")
21
+
21
22
  const fs = require("fs")
22
23
  const {
23
24
  downloadTarballDirect,
@@ -112,7 +113,6 @@ export const serveApp = async function (ctx: any) {
112
113
  production: env.isProd(),
113
114
  appId,
114
115
  clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
115
- usedPlugins: appInfo.usedPlugins,
116
116
  })
117
117
 
118
118
  const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)