@budibase/server 2.6.23 → 2.6.24-alpha.1

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 (424) hide show
  1. package/.dockerignore +7 -6
  2. package/Dockerfile +16 -8
  3. package/builder/assets/index.b33e8ad5.css +6 -0
  4. package/builder/assets/index.c0b0be95.js +1869 -0
  5. package/builder/index.html +2 -2
  6. package/client/manifest.json +5229 -0
  7. package/dist/automation.js +32576 -0
  8. package/dist/automation.js.map +7 -0
  9. package/dist/index.js +45065 -13
  10. package/dist/index.js.map +7 -0
  11. package/dist/query.js +24462 -0
  12. package/dist/query.js.map +7 -0
  13. package/jest.config.ts +6 -3
  14. package/nodemon.json +8 -4
  15. package/package.json +35 -16
  16. package/pm2.config.js +1 -1
  17. package/scripts/build.js +48 -0
  18. package/src/api/controllers/application.ts +21 -22
  19. package/src/api/controllers/automation.ts +37 -9
  20. package/src/api/controllers/datasource.ts +114 -49
  21. package/src/api/controllers/deploy/index.ts +1 -0
  22. package/src/api/controllers/integration.ts +3 -3
  23. package/src/api/controllers/plugin/index.ts +1 -1
  24. package/src/api/controllers/row/external.ts +39 -15
  25. package/src/api/controllers/row/index.ts +18 -24
  26. package/src/api/controllers/row/internal.ts +1 -1
  27. package/src/api/controllers/row/staticFormula.ts +6 -1
  28. package/src/api/controllers/row/utils.ts +12 -0
  29. package/src/api/controllers/static/index.ts +3 -3
  30. package/src/api/controllers/table/index.ts +3 -0
  31. package/src/api/controllers/table/internal.ts +2 -6
  32. package/src/api/controllers/table/utils.ts +32 -1
  33. package/src/api/controllers/view/index.ts +5 -5
  34. package/src/api/controllers/webhook.ts +33 -9
  35. package/src/api/routes/application.ts +5 -0
  36. package/src/api/routes/automation.ts +0 -1
  37. package/src/api/routes/datasource.ts +10 -0
  38. package/src/api/routes/static.ts +3 -1
  39. package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
  40. package/src/api/routes/tests/datasource.spec.ts +1 -1
  41. package/src/api/routes/tests/view.spec.js +4 -3
  42. package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
  43. package/src/app.ts +0 -1
  44. package/src/automations/actions.ts +8 -0
  45. package/src/automations/logging/index.ts +21 -0
  46. package/src/automations/steps/bash.ts +4 -0
  47. package/src/automations/steps/collect.ts +58 -0
  48. package/src/automations/steps/createRow.ts +4 -0
  49. package/src/automations/steps/delay.ts +1 -0
  50. package/src/automations/steps/deleteRow.ts +4 -0
  51. package/src/automations/steps/discord.ts +4 -0
  52. package/src/automations/steps/executeQuery.ts +4 -0
  53. package/src/automations/steps/executeScript.ts +4 -0
  54. package/src/automations/steps/filter.ts +1 -0
  55. package/src/automations/steps/loop.ts +1 -0
  56. package/src/automations/steps/make.ts +22 -1
  57. package/src/automations/steps/openai.ts +106 -0
  58. package/src/automations/steps/outgoingWebhook.ts +4 -0
  59. package/src/automations/steps/queryRows.ts +4 -0
  60. package/src/automations/steps/sendSmtpEmail.ts +4 -0
  61. package/src/automations/steps/serverLog.ts +4 -0
  62. package/src/automations/steps/slack.ts +4 -0
  63. package/src/automations/steps/updateRow.ts +4 -0
  64. package/src/automations/steps/zapier.ts +22 -1
  65. package/src/automations/tests/make.spec.ts +54 -0
  66. package/src/automations/tests/openai.spec.ts +86 -0
  67. package/src/automations/tests/zapier.spec.ts +56 -0
  68. package/src/automations/triggers.ts +3 -2
  69. package/src/constants/index.ts +17 -16
  70. package/src/db/dynamoClient.ts +1 -1
  71. package/src/db/inMemoryView.ts +1 -0
  72. package/src/db/linkedRows/index.ts +5 -3
  73. package/src/environment.ts +3 -0
  74. package/src/integration-test/postgres.spec.ts +47 -5
  75. package/src/integrations/airtable.ts +33 -4
  76. package/src/integrations/arangodb.ts +20 -2
  77. package/src/integrations/base/sqlTable.ts +0 -1
  78. package/src/integrations/couchdb.ts +20 -4
  79. package/src/integrations/dynamodb.ts +36 -5
  80. package/src/integrations/elasticsearch.ts +18 -1
  81. package/src/integrations/firebase.ts +17 -0
  82. package/src/integrations/googlesheets.ts +66 -5
  83. package/src/integrations/index.ts +12 -7
  84. package/src/integrations/microsoftSqlServer.ts +33 -1
  85. package/src/integrations/mongodb.ts +18 -0
  86. package/src/integrations/mysql.ts +53 -26
  87. package/src/integrations/oracle.ts +38 -6
  88. package/src/integrations/postgres.ts +47 -12
  89. package/src/integrations/redis.ts +35 -4
  90. package/src/integrations/s3.ts +21 -3
  91. package/src/integrations/snowflake.ts +22 -1
  92. package/src/integrations/tests/googlesheets.spec.ts +41 -9
  93. package/src/middleware/builder.ts +26 -18
  94. package/src/migrations/functions/backfill/app/queries.ts +1 -1
  95. package/src/sdk/app/automations/index.ts +2 -0
  96. package/src/sdk/app/automations/utils.ts +7 -0
  97. package/src/sdk/app/datasources/datasources.ts +7 -1
  98. package/src/sdk/plugins/plugins.ts +1 -1
  99. package/src/startup.ts +2 -0
  100. package/src/tests/utilities/TestConfiguration.ts +4 -2
  101. package/src/tests/utilities/structures.ts +42 -0
  102. package/src/threads/automation.ts +91 -23
  103. package/src/threads/index.ts +9 -3
  104. package/src/threads/utils.ts +2 -0
  105. package/src/utilities/fileSystem/app.ts +14 -4
  106. package/src/utilities/fileSystem/clientLibrary.ts +8 -3
  107. package/src/utilities/fileSystem/filesystem.ts +3 -1
  108. package/src/utilities/redis.ts +25 -3
  109. package/src/utilities/rowProcessor/index.ts +4 -1
  110. package/src/utilities/rowProcessor/map.ts +1 -1
  111. package/src/websockets/builder.ts +95 -0
  112. package/src/websockets/client.ts +2 -2
  113. package/src/websockets/grid.ts +44 -44
  114. package/src/websockets/index.ts +13 -6
  115. package/src/websockets/websocket.ts +211 -7
  116. package/tsconfig.build.json +9 -1
  117. package/tsconfig.json +1 -14
  118. package/builder/assets/index.86c992bf.css +0 -6
  119. package/builder/assets/index.c16c35ca.js +0 -1794
  120. package/dist/api/controllers/analytics.js +0 -46
  121. package/dist/api/controllers/apikeys.js +0 -72
  122. package/dist/api/controllers/application.js +0 -574
  123. package/dist/api/controllers/auth.js +0 -80
  124. package/dist/api/controllers/automation.js +0 -303
  125. package/dist/api/controllers/backup.js +0 -37
  126. package/dist/api/controllers/component.js +0 -59
  127. package/dist/api/controllers/datasource.js +0 -306
  128. package/dist/api/controllers/deploy/Deployment.js +0 -53
  129. package/dist/api/controllers/deploy/index.js +0 -198
  130. package/dist/api/controllers/dev.js +0 -146
  131. package/dist/api/controllers/integration.js +0 -28
  132. package/dist/api/controllers/layout.js +0 -49
  133. package/dist/api/controllers/metadata.js +0 -63
  134. package/dist/api/controllers/migrations.js +0 -29
  135. package/dist/api/controllers/ops.js +0 -40
  136. package/dist/api/controllers/permission.js +0 -162
  137. package/dist/api/controllers/plugin/file.js +0 -24
  138. package/dist/api/controllers/plugin/github.js +0 -69
  139. package/dist/api/controllers/plugin/index.js +0 -112
  140. package/dist/api/controllers/plugin/npm.js +0 -58
  141. package/dist/api/controllers/plugin/uploaders.js +0 -11
  142. package/dist/api/controllers/plugin/url.js +0 -24
  143. package/dist/api/controllers/plugin/utils.js +0 -27
  144. package/dist/api/controllers/public/applications.js +0 -146
  145. package/dist/api/controllers/public/mapping/applications.js +0 -29
  146. package/dist/api/controllers/public/mapping/index.js +0 -11
  147. package/dist/api/controllers/public/mapping/queries.js +0 -36
  148. package/dist/api/controllers/public/mapping/rows.js +0 -24
  149. package/dist/api/controllers/public/mapping/tables.js +0 -23
  150. package/dist/api/controllers/public/mapping/types.js +0 -2
  151. package/dist/api/controllers/public/mapping/users.js +0 -29
  152. package/dist/api/controllers/public/metrics.js +0 -113
  153. package/dist/api/controllers/public/queries.js +0 -58
  154. package/dist/api/controllers/public/rows.js +0 -120
  155. package/dist/api/controllers/public/tables.js +0 -95
  156. package/dist/api/controllers/public/users.js +0 -93
  157. package/dist/api/controllers/public/utils.js +0 -56
  158. package/dist/api/controllers/query/import/index.js +0 -87
  159. package/dist/api/controllers/query/import/sources/base/index.js +0 -75
  160. package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
  161. package/dist/api/controllers/query/import/sources/curl.js +0 -99
  162. package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
  163. package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
  164. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
  165. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
  166. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  167. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  168. package/dist/api/controllers/query/index.js +0 -299
  169. package/dist/api/controllers/query/validation.js +0 -53
  170. package/dist/api/controllers/role.js +0 -109
  171. package/dist/api/controllers/routing.js +0 -105
  172. package/dist/api/controllers/row/ExternalRequest.js +0 -683
  173. package/dist/api/controllers/row/external.js +0 -339
  174. package/dist/api/controllers/row/index.js +0 -203
  175. package/dist/api/controllers/row/internal.js +0 -509
  176. package/dist/api/controllers/row/internalSearch.js +0 -28
  177. package/dist/api/controllers/row/staticFormula.js +0 -165
  178. package/dist/api/controllers/row/utils.js +0 -183
  179. package/dist/api/controllers/screen.js +0 -110
  180. package/dist/api/controllers/script.js +0 -30
  181. package/dist/api/controllers/static/index.js +0 -268
  182. package/dist/api/controllers/table/bulkFormula.js +0 -173
  183. package/dist/api/controllers/table/external.js +0 -279
  184. package/dist/api/controllers/table/index.js +0 -179
  185. package/dist/api/controllers/table/internal.js +0 -197
  186. package/dist/api/controllers/table/utils.js +0 -379
  187. package/dist/api/controllers/templates.js +0 -56
  188. package/dist/api/controllers/user.js +0 -124
  189. package/dist/api/controllers/view/exporters.js +0 -46
  190. package/dist/api/controllers/view/index.js +0 -193
  191. package/dist/api/controllers/view/utils.js +0 -177
  192. package/dist/api/controllers/view/viewBuilder.js +0 -158
  193. package/dist/api/controllers/webhook.js +0 -134
  194. package/dist/api/index.js +0 -55
  195. package/dist/api/routes/analytics.js +0 -34
  196. package/dist/api/routes/apikeys.js +0 -37
  197. package/dist/api/routes/application.js +0 -48
  198. package/dist/api/routes/auth.js +0 -33
  199. package/dist/api/routes/automation.js +0 -50
  200. package/dist/api/routes/backup.js +0 -35
  201. package/dist/api/routes/component.js +0 -35
  202. package/dist/api/routes/datasource.js +0 -43
  203. package/dist/api/routes/deploy.js +0 -37
  204. package/dist/api/routes/dev.js +0 -49
  205. package/dist/api/routes/index.js +0 -75
  206. package/dist/api/routes/integration.js +0 -37
  207. package/dist/api/routes/layout.js +0 -37
  208. package/dist/api/routes/metadata.js +0 -40
  209. package/dist/api/routes/migrations.js +0 -36
  210. package/dist/api/routes/ops.js +0 -52
  211. package/dist/api/routes/permission.js +0 -44
  212. package/dist/api/routes/plugin.js +0 -39
  213. package/dist/api/routes/public/applications.js +0 -174
  214. package/dist/api/routes/public/index.js +0 -140
  215. package/dist/api/routes/public/metrics.js +0 -30
  216. package/dist/api/routes/public/middleware/mapper.js +0 -97
  217. package/dist/api/routes/public/queries.js +0 -72
  218. package/dist/api/routes/public/rows.js +0 -158
  219. package/dist/api/routes/public/tables.js +0 -152
  220. package/dist/api/routes/public/users.js +0 -135
  221. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  222. package/dist/api/routes/query.js +0 -47
  223. package/dist/api/routes/role.js +0 -40
  224. package/dist/api/routes/routing.js +0 -39
  225. package/dist/api/routes/row.js +0 -239
  226. package/dist/api/routes/screen.js +0 -39
  227. package/dist/api/routes/script.js +0 -35
  228. package/dist/api/routes/static.js +0 -80
  229. package/dist/api/routes/table.js +0 -163
  230. package/dist/api/routes/templates.js +0 -37
  231. package/dist/api/routes/user.js +0 -43
  232. package/dist/api/routes/utils/validators.js +0 -238
  233. package/dist/api/routes/view.js +0 -42
  234. package/dist/api/routes/webhook.js +0 -43
  235. package/dist/app.js +0 -132
  236. package/dist/automations/actions.js +0 -137
  237. package/dist/automations/automationUtils.js +0 -173
  238. package/dist/automations/bullboard.js +0 -71
  239. package/dist/automations/index.js +0 -43
  240. package/dist/automations/logging/index.js +0 -53
  241. package/dist/automations/steps/bash.js +0 -111
  242. package/dist/automations/steps/createRow.js +0 -108
  243. package/dist/automations/steps/delay.js +0 -53
  244. package/dist/automations/steps/deleteRow.js +0 -96
  245. package/dist/automations/steps/discord.js +0 -116
  246. package/dist/automations/steps/executeQuery.js +0 -134
  247. package/dist/automations/steps/executeScript.js +0 -106
  248. package/dist/automations/steps/filter.js +0 -112
  249. package/dist/automations/steps/loop.js +0 -54
  250. package/dist/automations/steps/make.js +0 -120
  251. package/dist/automations/steps/outgoingWebhook.js +0 -166
  252. package/dist/automations/steps/queryRows.js +0 -220
  253. package/dist/automations/steps/sendSmtpEmail.js +0 -115
  254. package/dist/automations/steps/serverLog.js +0 -65
  255. package/dist/automations/steps/slack.js +0 -98
  256. package/dist/automations/steps/updateRow.js +0 -144
  257. package/dist/automations/steps/utils.js +0 -56
  258. package/dist/automations/steps/zapier.js +0 -117
  259. package/dist/automations/triggerInfo/app.js +0 -36
  260. package/dist/automations/triggerInfo/cron.js +0 -35
  261. package/dist/automations/triggerInfo/index.js +0 -40
  262. package/dist/automations/triggerInfo/rowDeleted.js +0 -36
  263. package/dist/automations/triggerInfo/rowSaved.js +0 -44
  264. package/dist/automations/triggerInfo/rowUpdated.js +0 -44
  265. package/dist/automations/triggerInfo/webhook.js +0 -40
  266. package/dist/automations/triggers.js +0 -181
  267. package/dist/automations/utils.js +0 -275
  268. package/dist/constants/definitions.js +0 -2
  269. package/dist/constants/index.js +0 -181
  270. package/dist/constants/layouts.js +0 -148
  271. package/dist/constants/screens.js +0 -51
  272. package/dist/db/defaultData/datasource_bb_default.js +0 -574
  273. package/dist/db/defaultData/employeeImport.js +0 -155
  274. package/dist/db/defaultData/expensesImport.js +0 -117
  275. package/dist/db/defaultData/inventoryImport.js +0 -109
  276. package/dist/db/defaultData/jobsImport.js +0 -152
  277. package/dist/db/dynamoClient.js +0 -124
  278. package/dist/db/inMemoryView.js +0 -62
  279. package/dist/db/index.js +0 -43
  280. package/dist/db/linkedRows/LinkController.js +0 -392
  281. package/dist/db/linkedRows/LinkDocument.js +0 -33
  282. package/dist/db/linkedRows/index.js +0 -206
  283. package/dist/db/linkedRows/linkUtils.js +0 -131
  284. package/dist/db/newid.js +0 -7
  285. package/dist/db/utils.js +0 -248
  286. package/dist/db/views/staticViews.js +0 -144
  287. package/dist/ddApm.js +0 -11
  288. package/dist/definitions/automations.js +0 -8
  289. package/dist/definitions/common.js +0 -2
  290. package/dist/definitions/datasource.js +0 -7
  291. package/dist/definitions/openapi.js +0 -6
  292. package/dist/environment.js +0 -109
  293. package/dist/events/AutomationEmitter.js +0 -53
  294. package/dist/events/BudibaseEmitter.js +0 -25
  295. package/dist/events/docUpdates/index.js +0 -17
  296. package/dist/events/docUpdates/processors.js +0 -18
  297. package/dist/events/docUpdates/syncUsers.js +0 -49
  298. package/dist/events/index.js +0 -11
  299. package/dist/events/utils.js +0 -43
  300. package/dist/integrations/airtable.js +0 -147
  301. package/dist/integrations/arangodb.js +0 -103
  302. package/dist/integrations/base/query.js +0 -32
  303. package/dist/integrations/base/sql.js +0 -600
  304. package/dist/integrations/base/sqlTable.js +0 -167
  305. package/dist/integrations/base/types.js +0 -2
  306. package/dist/integrations/couchdb.js +0 -125
  307. package/dist/integrations/dynamodb.js +0 -194
  308. package/dist/integrations/elasticsearch.js +0 -186
  309. package/dist/integrations/firebase.js +0 -174
  310. package/dist/integrations/googlesheets.js +0 -455
  311. package/dist/integrations/index.js +0 -135
  312. package/dist/integrations/microsoftSqlServer.js +0 -273
  313. package/dist/integrations/mongodb.js +0 -614
  314. package/dist/integrations/mysql.js +0 -256
  315. package/dist/integrations/oracle.js +0 -375
  316. package/dist/integrations/postgres.js +0 -300
  317. package/dist/integrations/queries/sql.js +0 -84
  318. package/dist/integrations/redis.js +0 -168
  319. package/dist/integrations/rest.js +0 -400
  320. package/dist/integrations/s3.js +0 -237
  321. package/dist/integrations/snowflake.js +0 -102
  322. package/dist/integrations/utils.js +0 -295
  323. package/dist/middleware/appInfo.js +0 -22
  324. package/dist/middleware/authorized.js +0 -112
  325. package/dist/middleware/builder.js +0 -93
  326. package/dist/middleware/currentapp.js +0 -103
  327. package/dist/middleware/joi-validator.js +0 -43
  328. package/dist/middleware/publicApi.js +0 -25
  329. package/dist/middleware/resourceId.js +0 -59
  330. package/dist/middleware/selfhost.js +0 -24
  331. package/dist/middleware/utils.js +0 -8
  332. package/dist/migrations/functions/appUrls.js +0 -42
  333. package/dist/migrations/functions/backfill/app/automations.js +0 -31
  334. package/dist/migrations/functions/backfill/app/datasources.js +0 -28
  335. package/dist/migrations/functions/backfill/app/layouts.js +0 -33
  336. package/dist/migrations/functions/backfill/app/queries.js +0 -50
  337. package/dist/migrations/functions/backfill/app/roles.js +0 -28
  338. package/dist/migrations/functions/backfill/app/screens.js +0 -28
  339. package/dist/migrations/functions/backfill/app/tables.js +0 -37
  340. package/dist/migrations/functions/backfill/app.js +0 -176
  341. package/dist/migrations/functions/backfill/global/configs.js +0 -67
  342. package/dist/migrations/functions/backfill/global/quotas.js +0 -60
  343. package/dist/migrations/functions/backfill/global/users.js +0 -50
  344. package/dist/migrations/functions/backfill/global.js +0 -205
  345. package/dist/migrations/functions/backfill/index.js +0 -32
  346. package/dist/migrations/functions/backfill/installation.js +0 -80
  347. package/dist/migrations/functions/syncQuotas.js +0 -52
  348. package/dist/migrations/functions/tableSettings.js +0 -130
  349. package/dist/migrations/functions/usageQuotas/index.js +0 -16
  350. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
  351. package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
  352. package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
  353. package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
  354. package/dist/migrations/functions/userEmailViewCasing.js +0 -24
  355. package/dist/migrations/index.js +0 -111
  356. package/dist/migrations/tests/helpers.js +0 -72
  357. package/dist/migrations/tests/structures.js +0 -37
  358. package/dist/sdk/app/applications/index.js +0 -28
  359. package/dist/sdk/app/applications/sync.js +0 -164
  360. package/dist/sdk/app/applications/utils.js +0 -21
  361. package/dist/sdk/app/automations/index.js +0 -29
  362. package/dist/sdk/app/automations/webhook.js +0 -54
  363. package/dist/sdk/app/backups/constants.js +0 -6
  364. package/dist/sdk/app/backups/exports.js +0 -160
  365. package/dist/sdk/app/backups/imports.js +0 -170
  366. package/dist/sdk/app/backups/index.js +0 -29
  367. package/dist/sdk/app/backups/statistics.js +0 -73
  368. package/dist/sdk/app/datasources/datasources.js +0 -166
  369. package/dist/sdk/app/datasources/index.js +0 -27
  370. package/dist/sdk/app/queries/index.js +0 -27
  371. package/dist/sdk/app/queries/queries.js +0 -60
  372. package/dist/sdk/app/rows/attachments.js +0 -61
  373. package/dist/sdk/app/rows/index.js +0 -28
  374. package/dist/sdk/app/rows/rows.js +0 -30
  375. package/dist/sdk/app/tables/index.js +0 -65
  376. package/dist/sdk/index.js +0 -27
  377. package/dist/sdk/plugins/index.js +0 -27
  378. package/dist/sdk/plugins/plugins.js +0 -53
  379. package/dist/sdk/users/index.js +0 -27
  380. package/dist/sdk/users/utils.js +0 -94
  381. package/dist/sdk/utils/index.js +0 -29
  382. package/dist/startup.js +0 -158
  383. package/dist/threads/automation.js +0 -450
  384. package/dist/threads/definitions.js +0 -2
  385. package/dist/threads/index.js +0 -140
  386. package/dist/threads/query.js +0 -265
  387. package/dist/threads/utils.js +0 -120
  388. package/dist/tsconfig.build.tsbuildinfo +0 -1
  389. package/dist/utilities/appDirectoryTemplate/package.json +0 -10
  390. package/dist/utilities/budibaseDir.js +0 -5
  391. package/dist/utilities/centralPath.js +0 -27
  392. package/dist/utilities/csv.js +0 -33
  393. package/dist/utilities/fileSystem/app.js +0 -88
  394. package/dist/utilities/fileSystem/clientLibrary.js +0 -138
  395. package/dist/utilities/fileSystem/filesystem.js +0 -180
  396. package/dist/utilities/fileSystem/index.js +0 -21
  397. package/dist/utilities/fileSystem/plugin.js +0 -76
  398. package/dist/utilities/fileSystem/processor.js +0 -34
  399. package/dist/utilities/fileSystem/template.js +0 -47
  400. package/dist/utilities/global.js +0 -146
  401. package/dist/utilities/index.js +0 -143
  402. package/dist/utilities/redis.js +0 -117
  403. package/dist/utilities/retry.js +0 -30
  404. package/dist/utilities/routing/index.js +0 -39
  405. package/dist/utilities/rowProcessor/index.js +0 -282
  406. package/dist/utilities/rowProcessor/map.js +0 -116
  407. package/dist/utilities/rowProcessor/utils.js +0 -87
  408. package/dist/utilities/schema.js +0 -112
  409. package/dist/utilities/scriptRunner.js +0 -26
  410. package/dist/utilities/security.js +0 -57
  411. package/dist/utilities/statusCodes.js +0 -9
  412. package/dist/utilities/usageQuota/rows.js +0 -88
  413. package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
  414. package/dist/utilities/users.js +0 -57
  415. package/dist/utilities/workerRequests.js +0 -171
  416. package/dist/watch.js +0 -53
  417. package/dist/websockets/client.js +0 -14
  418. package/dist/websockets/grid.js +0 -60
  419. package/dist/websockets/index.js +0 -17
  420. package/dist/websockets/websocket.js +0 -78
  421. package/src/automations/tests/zapier.spec.js +0 -27
  422. /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
  423. /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
  424. /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
package/jest.config.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Config } from "@jest/types"
2
2
 
3
3
  import * as fs from "fs"
4
+ import { join } from "path"
4
5
  const preset = require("ts-jest/jest-preset")
5
6
 
6
7
  const baseConfig: Config.InitialProjectOptions = {
@@ -20,9 +21,9 @@ const baseConfig: Config.InitialProjectOptions = {
20
21
  }
21
22
 
22
23
  // add pro sources if they exist
23
- if (fs.existsSync("../../../budibase-pro")) {
24
- baseConfig.moduleNameMapper["@budibase/pro"] =
25
- "<rootDir>/../../../budibase-pro/packages/pro/src"
24
+ if (fs.existsSync("../pro/packages")) {
25
+ baseConfig.moduleNameMapper!["@budibase/pro"] =
26
+ "<rootDir>/../pro/packages/pro/src"
26
27
  }
27
28
 
28
29
  const config: Config.InitialOptions = {
@@ -49,4 +50,6 @@ const config: Config.InitialOptions = {
49
50
  coverageReporters: ["lcov", "json", "clover"],
50
51
  }
51
52
 
53
+ process.env.TOP_LEVEL_PATH = join(__dirname, "..", "..")
54
+
52
55
  export default config
package/nodemon.json CHANGED
@@ -1,6 +1,10 @@
1
1
  {
2
- "watch": ["src", "../backend-core", "../../../budibase-pro/packages/pro"],
2
+ "watch": ["src", "../backend-core", "../pro/packages/pro"],
3
3
  "ext": "js,ts,json",
4
- "ignore": ["src/**/*.spec.ts", "src/**/*.spec.js", "../backend-core/dist/**/*"],
5
- "exec": "ts-node src/index.ts"
6
- }
4
+ "ignore": [
5
+ "src/**/*.spec.ts",
6
+ "src/**/*.spec.js",
7
+ "../backend-core/dist/**/*"
8
+ ],
9
+ "exec": "node ./scripts/build.js && node ./dist/index.js"
10
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.6.23",
4
+ "version": "2.6.24-alpha.1",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -10,22 +10,23 @@
10
10
  },
11
11
  "scripts": {
12
12
  "prebuild": "rimraf dist/",
13
- "build": "tsc -p tsconfig.build.json && mv dist/src/* dist/ && rimraf dist/src/",
13
+ "build": "node ./scripts/build.js",
14
+ "check:types": "tsc -p tsconfig.build.json --noEmit",
15
+ "postbuild": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
14
16
  "build:dev": "yarn prebuild && tsc --build --watch --preserveWatchOutput",
15
17
  "debug": "yarn build && node --expose-gc --inspect=9222 dist/index.js",
16
- "postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
17
18
  "test": "bash scripts/test.sh",
18
19
  "test:memory": "jest --maxWorkers=2 --logHeapUsage --forceExit",
19
20
  "test:watch": "jest --watch",
20
- "predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
21
- "build:docker": "yarn run predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION",
21
+ "predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client && yarn build --configuration=production",
22
+ "build:docker": "yarn predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION",
22
23
  "build:docs": "node ./scripts/docs/generate.js open",
23
24
  "run:docker": "node dist/index.js",
24
25
  "run:docker:cluster": "pm2-runtime start pm2.config.js",
25
26
  "dev:stack:up": "node scripts/dev/manage.js up",
26
27
  "dev:stack:down": "node scripts/dev/manage.js down",
27
28
  "dev:stack:nuke": "node scripts/dev/manage.js nuke",
28
- "dev:builder": "yarn run dev:stack:up && nodemon",
29
+ "dev:builder": "yarn run dev:stack:up && rimraf dist/ && nodemon",
29
30
  "dev:built": "yarn run dev:stack:up && yarn run run:docker",
30
31
  "specs": "ts-node specs/generate.ts && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
31
32
  "initialise": "node scripts/initialise.js",
@@ -45,12 +46,12 @@
45
46
  "license": "GPL-3.0",
46
47
  "dependencies": {
47
48
  "@apidevtools/swagger-parser": "10.0.3",
48
- "@budibase/backend-core": "^2.6.23",
49
- "@budibase/client": "^2.6.23",
50
- "@budibase/pro": "2.6.22",
51
- "@budibase/shared-core": "^2.6.23",
52
- "@budibase/string-templates": "^2.6.23",
53
- "@budibase/types": "^2.6.23",
49
+ "@budibase/backend-core": "2.6.24-alpha.1",
50
+ "@budibase/client": "2.6.24-alpha.1",
51
+ "@budibase/pro": "2.6.24-alpha.1",
52
+ "@budibase/shared-core": "2.6.24-alpha.1",
53
+ "@budibase/string-templates": "2.6.24-alpha.1",
54
+ "@budibase/types": "2.6.24-alpha.1",
54
55
  "@bull-board/api": "3.7.0",
55
56
  "@bull-board/koa": "3.9.4",
56
57
  "@elastic/elasticsearch": "7.10.0",
@@ -58,6 +59,7 @@
58
59
  "@koa/router": "8.0.8",
59
60
  "@sendgrid/mail": "7.1.1",
60
61
  "@sentry/node": "6.17.7",
62
+ "@socket.io/redis-adapter": "^8.2.1",
61
63
  "airtable": "0.10.1",
62
64
  "arangojs": "7.2.0",
63
65
  "aws-sdk": "2.1030.0",
@@ -78,6 +80,7 @@
78
80
  "global-agent": "3.0.0",
79
81
  "google-auth-library": "7.12.0",
80
82
  "google-spreadsheet": "3.2.0",
83
+ "ioredis": "5.3.2",
81
84
  "jimp": "0.16.1",
82
85
  "joi": "17.6.0",
83
86
  "js-yaml": "4.1.0",
@@ -98,8 +101,10 @@
98
101
  "mssql": "6.2.3",
99
102
  "mysql2": "2.3.3",
100
103
  "node-fetch": "2.6.7",
104
+ "object-sizeof": "2.6.1",
101
105
  "open": "8.4.0",
102
- "pg": "8.5.1",
106
+ "openai": "^3.2.1",
107
+ "pg": "8.10.0",
103
108
  "posthog-node": "1.3.0",
104
109
  "pouchdb": "7.3.0",
105
110
  "pouchdb-adapter-memory": "7.2.2",
@@ -133,7 +138,6 @@
133
138
  "@types/bson": "4.2.0",
134
139
  "@types/global-agent": "2.1.1",
135
140
  "@types/google-spreadsheet": "3.1.5",
136
- "@types/ioredis": "4.28.10",
137
141
  "@types/jest": "29.5.0",
138
142
  "@types/koa": "2.13.4",
139
143
  "@types/koa__router": "8.0.8",
@@ -141,6 +145,7 @@
141
145
  "@types/node": "14.18.20",
142
146
  "@types/node-fetch": "2.6.1",
143
147
  "@types/oracledb": "5.2.2",
148
+ "@types/pg": "8.6.6",
144
149
  "@types/pouchdb": "6.4.0",
145
150
  "@types/redis": "4.0.11",
146
151
  "@types/server-destroy": "1.0.1",
@@ -152,7 +157,6 @@
152
157
  "copyfiles": "2.4.1",
153
158
  "docker-compose": "0.23.17",
154
159
  "eslint": "6.8.0",
155
- "ioredis-mock": "7.2.0",
156
160
  "is-wsl": "2.2.0",
157
161
  "jest": "29.5.0",
158
162
  "jest-openapi": "0.14.2",
@@ -176,5 +180,20 @@
176
180
  "optionalDependencies": {
177
181
  "oracledb": "5.3.0"
178
182
  },
179
- "gitHead": "565bea58fabc8b214d646ea72b24e4c11662af98"
183
+ "nx": {
184
+ "targets": {
185
+ "test": {
186
+ "dependsOn": [
187
+ {
188
+ "projects": [
189
+ "@budibase/string-templates",
190
+ "@budibase/shared-core"
191
+ ],
192
+ "target": "build"
193
+ }
194
+ ]
195
+ }
196
+ }
197
+ },
198
+ "gitHead": "61505132628fc70a287426cb68c551364c8cb014"
180
199
  }
package/pm2.config.js CHANGED
@@ -1,7 +1,7 @@
1
1
  module.exports = {
2
2
  apps: [
3
3
  {
4
- script: "dist/index.js",
4
+ script: "./dist/index.js",
5
5
  instances: "max",
6
6
  exec_mode: "cluster",
7
7
  },
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/node
2
+ const { join } = require("path")
3
+ const fs = require("fs")
4
+ const coreBuild = require("../../../scripts/build")
5
+
6
+ const dir = join(__dirname, "..")
7
+ const entryPath = join(dir, "src")
8
+ const outfilePath = join(dir, "dist")
9
+
10
+ /**
11
+ * The reasoning for this is that now our built version is simple
12
+ * dist/index.js - any kind of threaded approach in Node.js requires
13
+ * a runner file to work from - I played around with a lot of
14
+ * different methods, but we really want to be able to use forks.
15
+ *
16
+ * Rather than trying to rewrite so that forks run the whole system,
17
+ * I instead went down a path of building the individual threads so
18
+ * that we have runner files for each of them e.g. dist/automations.js
19
+ * and dist/query.js - these can be ran totally independently and then
20
+ * the parent process can pass down data for processing to them.
21
+ *
22
+ * The ignoring is simply to remove the files which really don't need
23
+ * to be built - they could be built and it wouldn't cause any issues,
24
+ * but this just means if any further threads are added in future
25
+ * they will naturally work (rather than including, which would mean
26
+ * adjustments to the build files).
27
+ */
28
+ const ignoredFiles = ["definitions", "index", "utils"]
29
+ const threadNames = fs
30
+ .readdirSync(join(dir, "src", "threads"))
31
+ .filter(path => !ignoredFiles.find(file => path.includes(file)))
32
+ .map(path => path.replace(".ts", ""))
33
+ const files = [
34
+ {
35
+ entry: join(entryPath, "index.ts"),
36
+ out: join(outfilePath, "index.js"),
37
+ },
38
+ ]
39
+ for (let name of threadNames) {
40
+ files.push({
41
+ entry: join(entryPath, "threads", `${name}.ts`),
42
+ out: join(outfilePath, `${name}.js`),
43
+ })
44
+ }
45
+
46
+ for (let file of files) {
47
+ coreBuild(file.entry, file.out)
48
+ }
@@ -26,10 +26,13 @@ import {
26
26
  env as envCore,
27
27
  } from "@budibase/backend-core"
28
28
  import { USERS_TABLE_SCHEMA } from "../../constants"
29
- import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
29
+ import {
30
+ DEFAULT_BB_DATASOURCE_ID,
31
+ buildDefaultDocs,
32
+ } from "../../db/defaultData/datasource_bb_default"
30
33
  import { removeAppFromUserRoles } from "../../utilities/workerRequests"
31
34
  import { stringToReadStream, isQsTrue } from "../../utilities"
32
- import { getLocksById } from "../../utilities/redis"
35
+ import { getLocksById, doesUserHaveLock } from "../../utilities/redis"
33
36
  import {
34
37
  updateClientLibrary,
35
38
  backupClientLibrary,
@@ -111,11 +114,7 @@ function checkAppName(
111
114
  }
112
115
  }
113
116
 
114
- async function createInstance(
115
- appId: string,
116
- template: any,
117
- includeSampleData: boolean
118
- ) {
117
+ async function createInstance(appId: string, template: any) {
119
118
  const db = context.getAppDB()
120
119
  await db.put({
121
120
  _id: "_design/database",
@@ -142,21 +141,25 @@ async function createInstance(
142
141
  } else {
143
142
  // create the users table
144
143
  await db.put(USERS_TABLE_SCHEMA)
145
-
146
- if (includeSampleData) {
147
- // create ootb stock db
148
- await addDefaultTables(db)
149
- }
150
144
  }
151
145
 
152
146
  return { _id: appId }
153
147
  }
154
148
 
155
- async function addDefaultTables(db: Database) {
156
- const defaultDbDocs = buildDefaultDocs()
149
+ export const addSampleData = async (ctx: UserCtx) => {
150
+ const db = context.getAppDB()
157
151
 
158
- // add in the default db data docs - tables, datasource, rows and links
159
- await db.bulkDocs([...defaultDbDocs])
152
+ try {
153
+ // Check if default datasource exists before creating it
154
+ await sdk.datasources.get(DEFAULT_BB_DATASOURCE_ID)
155
+ } catch (err: any) {
156
+ const defaultDbDocs = buildDefaultDocs()
157
+
158
+ // add in the default db data docs - tables, datasource, rows and links
159
+ await db.bulkDocs([...defaultDbDocs])
160
+ }
161
+
162
+ ctx.status = 200
160
163
  }
161
164
 
162
165
  export async function fetch(ctx: UserCtx) {
@@ -227,6 +230,7 @@ export async function fetchAppPackage(ctx: UserCtx) {
227
230
  screens,
228
231
  layouts,
229
232
  clientLibPath,
233
+ hasLock: await doesUserHaveLock(application.appId, ctx.user),
230
234
  }
231
235
  }
232
236
 
@@ -247,16 +251,11 @@ async function performAppCreate(ctx: UserCtx) {
247
251
  if (ctx.request.files && ctx.request.files.templateFile) {
248
252
  instanceConfig.file = ctx.request.files.templateFile
249
253
  }
250
- const includeSampleData = isQsTrue(ctx.request.body.sampleData)
251
254
  const tenantId = tenancy.isMultiTenant() ? tenancy.getTenantId() : null
252
255
  const appId = generateDevAppID(generateAppID(tenantId))
253
256
 
254
257
  return await context.doInAppContext(appId, async () => {
255
- const instance = await createInstance(
256
- appId,
257
- instanceConfig,
258
- includeSampleData
259
- )
258
+ const instance = await createInstance(appId, instanceConfig)
260
259
  const db = context.getAppDB()
261
260
 
262
261
  let newApplication: App = {
@@ -14,9 +14,16 @@ import { deleteEntityMetadata } from "../../utilities"
14
14
  import { MetadataTypes } from "../../constants"
15
15
  import { setTestFlag, clearTestFlag } from "../../utilities/redis"
16
16
  import { context, cache, events } from "@budibase/backend-core"
17
- import { automations } from "@budibase/pro"
18
- import { Automation, BBContext } from "@budibase/types"
17
+ import { automations, features } from "@budibase/pro"
18
+ import {
19
+ Automation,
20
+ AutomationActionStepId,
21
+ AutomationResults,
22
+ BBContext,
23
+ } from "@budibase/types"
19
24
  import { getActionDefinitions as actionDefs } from "../../automations/actions"
25
+ import sdk from "../../sdk"
26
+ import { db as dbCore } from "@budibase/backend-core"
20
27
 
21
28
  async function getActionDefinitions() {
22
29
  return removeDeprecated(await actionDefs())
@@ -257,13 +264,34 @@ export async function getDefinitionList(ctx: BBContext) {
257
264
  export async function trigger(ctx: BBContext) {
258
265
  const db = context.getAppDB()
259
266
  let automation = await db.get(ctx.params.id)
260
- await triggers.externalTrigger(automation, {
261
- ...ctx.request.body,
262
- appId: ctx.appId,
263
- })
264
- ctx.body = {
265
- message: `Automation ${automation._id} has been triggered.`,
266
- automation,
267
+
268
+ let hasCollectStep = sdk.automations.utils.checkForCollectStep(automation)
269
+ if (hasCollectStep && (await features.isSyncAutomationsEnabled())) {
270
+ const response: AutomationResults = await triggers.externalTrigger(
271
+ automation,
272
+ {
273
+ fields: ctx.request.body.fields,
274
+ timeout: ctx.request.body.timeout * 1000 || 120000,
275
+ },
276
+ { getResponses: true }
277
+ )
278
+
279
+ let collectedValue = response.steps.find(
280
+ step => step.stepId === AutomationActionStepId.COLLECT
281
+ )
282
+ ctx.body = collectedValue?.outputs
283
+ } else {
284
+ if (ctx.appId && !dbCore.isProdAppID(ctx.appId)) {
285
+ ctx.throw(400, "Only apps in production support this endpoint")
286
+ }
287
+ await triggers.externalTrigger(automation, {
288
+ ...ctx.request.body,
289
+ appId: ctx.appId,
290
+ })
291
+ ctx.body = {
292
+ message: `Automation ${automation._id} has been triggered.`,
293
+ automation,
294
+ }
267
295
  }
268
296
  }
269
297
 
@@ -18,10 +18,88 @@ import {
18
18
  Row,
19
19
  CreateDatasourceResponse,
20
20
  UpdateDatasourceResponse,
21
- UpdateDatasourceRequest,
22
21
  CreateDatasourceRequest,
22
+ VerifyDatasourceRequest,
23
+ VerifyDatasourceResponse,
24
+ FetchDatasourceInfoRequest,
25
+ FetchDatasourceInfoResponse,
26
+ IntegrationBase,
27
+ DatasourcePlus,
23
28
  } from "@budibase/types"
24
29
  import sdk from "../../sdk"
30
+ import { builderSocket } from "../../websockets"
31
+
32
+ function getErrorTables(errors: any, errorType: string) {
33
+ return Object.entries(errors)
34
+ .filter(entry => entry[1] === errorType)
35
+ .map(([name]) => name)
36
+ }
37
+
38
+ function updateError(error: any, newError: any, tables: string[]) {
39
+ if (!error) {
40
+ error = ""
41
+ }
42
+ if (error.length > 0) {
43
+ error += "\n"
44
+ }
45
+ error += `${newError} ${tables.join(", ")}`
46
+ return error
47
+ }
48
+
49
+ async function getConnector(
50
+ datasource: Datasource
51
+ ): Promise<IntegrationBase | DatasourcePlus> {
52
+ const Connector = await getIntegration(datasource.source)
53
+ // can't enrich if it doesn't have an ID yet
54
+ if (datasource._id) {
55
+ datasource = await sdk.datasources.enrich(datasource)
56
+ }
57
+ // Connect to the DB and build the schema
58
+ return new Connector(datasource.config)
59
+ }
60
+
61
+ async function getAndMergeDatasource(datasource: Datasource) {
62
+ let existingDatasource: undefined | Datasource
63
+ if (datasource._id) {
64
+ existingDatasource = await sdk.datasources.get(datasource._id)
65
+ }
66
+ let enrichedDatasource = datasource
67
+ if (existingDatasource) {
68
+ enrichedDatasource = sdk.datasources.mergeConfigs(
69
+ datasource,
70
+ existingDatasource
71
+ )
72
+ }
73
+ return await sdk.datasources.enrich(enrichedDatasource)
74
+ }
75
+
76
+ async function buildSchemaHelper(datasource: Datasource) {
77
+ const connector = (await getConnector(datasource)) as DatasourcePlus
78
+ await connector.buildSchema(datasource._id!, datasource.entities!)
79
+
80
+ const errors = connector.schemaErrors
81
+ let error = null
82
+ if (errors && Object.keys(errors).length > 0) {
83
+ const noKey = getErrorTables(errors, BuildSchemaErrors.NO_KEY)
84
+ const invalidCol = getErrorTables(errors, BuildSchemaErrors.INVALID_COLUMN)
85
+ if (noKey.length) {
86
+ error = updateError(
87
+ error,
88
+ "No primary key constraint found for the following:",
89
+ noKey
90
+ )
91
+ }
92
+ if (invalidCol.length) {
93
+ const invalidCols = Object.values(InvalidColumns).join(", ")
94
+ error = updateError(
95
+ error,
96
+ `Cannot use columns ${invalidCols} found in following:`,
97
+ invalidCol
98
+ )
99
+ }
100
+ }
101
+ return { tables: connector.tables, error }
102
+ }
25
103
 
26
104
  export async function fetch(ctx: UserCtx) {
27
105
  // Get internal tables
@@ -66,6 +144,38 @@ export async function fetch(ctx: UserCtx) {
66
144
  ctx.body = [bbInternalDb, ...datasources]
67
145
  }
68
146
 
147
+ export async function verify(
148
+ ctx: UserCtx<VerifyDatasourceRequest, VerifyDatasourceResponse>
149
+ ) {
150
+ const { datasource } = ctx.request.body
151
+ const enrichedDatasource = await getAndMergeDatasource(datasource)
152
+ const connector = await getConnector(enrichedDatasource)
153
+ if (!connector.testConnection) {
154
+ ctx.throw(400, "Connection information verification not supported")
155
+ }
156
+ const response = await connector.testConnection()
157
+
158
+ ctx.body = {
159
+ connected: response.connected,
160
+ error: response.error,
161
+ }
162
+ }
163
+
164
+ export async function information(
165
+ ctx: UserCtx<FetchDatasourceInfoRequest, FetchDatasourceInfoResponse>
166
+ ) {
167
+ const { datasource } = ctx.request.body
168
+ const enrichedDatasource = await getAndMergeDatasource(datasource)
169
+ const connector = (await getConnector(enrichedDatasource)) as DatasourcePlus
170
+ if (!connector.getTableNames) {
171
+ ctx.throw(400, "Table name fetching not supported by datasource")
172
+ }
173
+ const tableNames = await connector.getTableNames()
174
+ ctx.body = {
175
+ tableNames,
176
+ }
177
+ }
178
+
69
179
  export async function buildSchemaFromDb(ctx: UserCtx) {
70
180
  const db = context.getAppDB()
71
181
  const datasource = await sdk.datasources.get(ctx.params.datasourceId)
@@ -193,6 +303,7 @@ export async function update(ctx: UserCtx<any, UpdateDatasourceResponse>) {
193
303
  ctx.body = {
194
304
  datasource: await sdk.datasources.removeSecretSingle(datasource),
195
305
  }
306
+ builderSocket?.emitDatasourceUpdate(ctx, datasource)
196
307
  }
197
308
 
198
309
  export async function save(
@@ -235,6 +346,7 @@ export async function save(
235
346
  response.error = schemaError
236
347
  }
237
348
  ctx.body = response
349
+ builderSocket?.emitDatasourceUpdate(ctx, datasource)
238
350
  }
239
351
 
240
352
  async function destroyInternalTablesBySourceId(datasourceId: string) {
@@ -294,6 +406,7 @@ export async function destroy(ctx: UserCtx) {
294
406
 
295
407
  ctx.message = `Datasource deleted.`
296
408
  ctx.status = 200
409
+ builderSocket?.emitDatasourceDeletion(ctx, datasourceId)
297
410
  }
298
411
 
299
412
  export async function find(ctx: UserCtx) {
@@ -311,51 +424,3 @@ export async function query(ctx: UserCtx) {
311
424
  ctx.throw(400, err)
312
425
  }
313
426
  }
314
-
315
- function getErrorTables(errors: any, errorType: string) {
316
- return Object.entries(errors)
317
- .filter(entry => entry[1] === errorType)
318
- .map(([name]) => name)
319
- }
320
-
321
- function updateError(error: any, newError: any, tables: string[]) {
322
- if (!error) {
323
- error = ""
324
- }
325
- if (error.length > 0) {
326
- error += "\n"
327
- }
328
- error += `${newError} ${tables.join(", ")}`
329
- return error
330
- }
331
-
332
- async function buildSchemaHelper(datasource: Datasource) {
333
- const Connector = await getIntegration(datasource.source)
334
- datasource = await sdk.datasources.enrich(datasource)
335
- // Connect to the DB and build the schema
336
- const connector = new Connector(datasource.config)
337
- await connector.buildSchema(datasource._id, datasource.entities)
338
-
339
- const errors = connector.schemaErrors
340
- let error = null
341
- if (errors && Object.keys(errors).length > 0) {
342
- const noKey = getErrorTables(errors, BuildSchemaErrors.NO_KEY)
343
- const invalidCol = getErrorTables(errors, BuildSchemaErrors.INVALID_COLUMN)
344
- if (noKey.length) {
345
- error = updateError(
346
- error,
347
- "No primary key constraint found for the following:",
348
- noKey
349
- )
350
- }
351
- if (invalidCol.length) {
352
- const invalidCols = Object.values(InvalidColumns).join(", ")
353
- error = updateError(
354
- error,
355
- `Cannot use columns ${invalidCols} found in following:`,
356
- invalidCol
357
- )
358
- }
359
- }
360
- return { tables: connector.tables, error }
361
- }
@@ -104,6 +104,7 @@ export async function fetchDeployments(ctx: any) {
104
104
  }
105
105
  ctx.body = Object.values(deployments.history).reverse()
106
106
  } catch (err) {
107
+ console.error(err)
107
108
  ctx.body = []
108
109
  }
109
110
  }
@@ -1,4 +1,4 @@
1
- import { getDefinitions } from "../../integrations"
1
+ import { getDefinition, getDefinitions } from "../../integrations"
2
2
  import { BBContext } from "@budibase/types"
3
3
 
4
4
  export async function fetch(ctx: BBContext) {
@@ -7,7 +7,7 @@ export async function fetch(ctx: BBContext) {
7
7
  }
8
8
 
9
9
  export async function find(ctx: BBContext) {
10
- const defs = await getDefinitions()
10
+ const def = await getDefinition(ctx.params.type)
11
+ ctx.body = def
11
12
  ctx.status = 200
12
- ctx.body = defs[ctx.params.type]
13
13
  }
@@ -71,7 +71,7 @@ export async function create(ctx: any) {
71
71
 
72
72
  const doc = await pro.plugins.storePlugin(metadata, directory, source)
73
73
 
74
- clientAppSocket.emit("plugins-update", { name, hash: doc.hash })
74
+ clientAppSocket?.emit("plugins-update", { name, hash: doc.hash })
75
75
  ctx.body = {
76
76
  message: "Plugin uploaded successfully",
77
77
  plugins: [doc],