@budibase/server 2.6.22 → 2.6.24-alpha.0

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.50121870.js +1869 -0
  4. package/builder/assets/index.a86e2071.css +6 -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 +25 -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 -99
  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
@@ -1,600 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const knex_1 = require("knex");
16
- const types_1 = require("@budibase/types");
17
- const backend_core_1 = require("@budibase/backend-core");
18
- const utils_1 = require("../utils");
19
- const sqlTable_1 = __importDefault(require("./sqlTable"));
20
- const environment_1 = __importDefault(require("../../environment"));
21
- const envLimit = environment_1.default.SQL_MAX_ROWS
22
- ? parseInt(environment_1.default.SQL_MAX_ROWS)
23
- : null;
24
- const BASE_LIMIT = envLimit || 5000;
25
- // these are invalid dates sent by the client, need to convert them to a real max date
26
- const MIN_ISO_DATE = "0000-00-00T00:00:00.000Z";
27
- const MAX_ISO_DATE = "9999-00-00T00:00:00.000Z";
28
- function likeKey(client, key) {
29
- let start, end;
30
- switch (client) {
31
- case utils_1.SqlClient.MY_SQL:
32
- start = end = "`";
33
- break;
34
- case utils_1.SqlClient.ORACLE:
35
- case utils_1.SqlClient.POSTGRES:
36
- start = end = '"';
37
- break;
38
- case utils_1.SqlClient.MS_SQL:
39
- start = "[";
40
- end = "]";
41
- break;
42
- default:
43
- throw "Unknown client";
44
- }
45
- const parts = key.split(".");
46
- key = parts.map(part => `${start}${part}${end}`).join(".");
47
- return key;
48
- }
49
- function parse(input) {
50
- if (Array.isArray(input)) {
51
- return JSON.stringify(input);
52
- }
53
- if (input == undefined) {
54
- return null;
55
- }
56
- if (typeof input !== "string") {
57
- return input;
58
- }
59
- if (input === MAX_ISO_DATE || input === MIN_ISO_DATE) {
60
- return null;
61
- }
62
- if ((0, utils_1.isIsoDateString)(input)) {
63
- return new Date(input);
64
- }
65
- return input;
66
- }
67
- function parseBody(body) {
68
- for (let [key, value] of Object.entries(body)) {
69
- body[key] = parse(value);
70
- }
71
- return body;
72
- }
73
- function parseFilters(filters) {
74
- if (!filters) {
75
- return {};
76
- }
77
- for (let [key, value] of Object.entries(filters)) {
78
- let parsed;
79
- if (typeof value === "object") {
80
- parsed = parseFilters(value);
81
- }
82
- else {
83
- parsed = parse(value);
84
- }
85
- // @ts-ignore
86
- filters[key] = parsed;
87
- }
88
- return filters;
89
- }
90
- function generateSelectStatement(json, knex) {
91
- var _a;
92
- const { resource, meta } = json;
93
- if (!resource) {
94
- return "*";
95
- }
96
- const schema = (_a = meta === null || meta === void 0 ? void 0 : meta.table) === null || _a === void 0 ? void 0 : _a.schema;
97
- return resource.fields.map(field => {
98
- const fieldNames = field.split(/\./g);
99
- const tableName = fieldNames[0];
100
- const columnName = fieldNames[1];
101
- if (columnName &&
102
- (schema === null || schema === void 0 ? void 0 : schema[columnName]) &&
103
- knex.client.config.client === utils_1.SqlClient.POSTGRES) {
104
- const externalType = schema[columnName].externalType;
105
- if (externalType === null || externalType === void 0 ? void 0 : externalType.includes("money")) {
106
- return knex.raw(`"${tableName}"."${columnName}"::money::numeric as "${field}"`);
107
- }
108
- }
109
- return `${field} as ${field}`;
110
- });
111
- }
112
- class InternalBuilder {
113
- constructor(client) {
114
- this.client = client;
115
- }
116
- // right now we only do filters on the specific table being queried
117
- addFilters(query, filters, opts) {
118
- function iterate(structure, fn) {
119
- for (let [key, value] of Object.entries(structure)) {
120
- const updatedKey = backend_core_1.db.removeKeyNumbering(key);
121
- const isRelationshipField = updatedKey.includes(".");
122
- if (!opts.relationship && !isRelationshipField) {
123
- fn(`${opts.tableName}.${updatedKey}`, value);
124
- }
125
- if (opts.relationship && isRelationshipField) {
126
- fn(updatedKey, value);
127
- }
128
- }
129
- }
130
- const like = (key, value) => {
131
- const fnc = allOr ? "orWhere" : "where";
132
- // postgres supports ilike, nothing else does
133
- if (this.client === utils_1.SqlClient.POSTGRES) {
134
- query = query[fnc](key, "ilike", `%${value}%`);
135
- }
136
- else {
137
- const rawFnc = `${fnc}Raw`;
138
- // @ts-ignore
139
- query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
140
- `%${value.toLowerCase()}%`,
141
- ]);
142
- }
143
- };
144
- const contains = (mode, any = false) => {
145
- const fnc = allOr ? "orWhere" : "where";
146
- const rawFnc = `${fnc}Raw`;
147
- const not = mode === (filters === null || filters === void 0 ? void 0 : filters.notContains) ? "NOT " : "";
148
- function stringifyArray(value, quoteStyle = '"') {
149
- for (let i in value) {
150
- if (typeof value[i] === "string") {
151
- value[i] = `${quoteStyle}${value[i]}${quoteStyle}`;
152
- }
153
- }
154
- return `[${value.join(",")}]`;
155
- }
156
- if (this.client === utils_1.SqlClient.POSTGRES) {
157
- iterate(mode, (key, value) => {
158
- const wrap = any ? "" : "'";
159
- const containsOp = any ? "\\?| array" : "@>";
160
- const fieldNames = key.split(/\./g);
161
- const tableName = fieldNames[0];
162
- const columnName = fieldNames[1];
163
- // @ts-ignore
164
- query = query[rawFnc](`${not}"${tableName}"."${columnName}"::jsonb ${containsOp} ${wrap}${stringifyArray(value, any ? "'" : '"')}${wrap}`);
165
- });
166
- }
167
- else if (this.client === utils_1.SqlClient.MY_SQL) {
168
- const jsonFnc = any ? "JSON_OVERLAPS" : "JSON_CONTAINS";
169
- iterate(mode, (key, value) => {
170
- // @ts-ignore
171
- query = query[rawFnc](`${not}${jsonFnc}(${key}, '${stringifyArray(value)}')`);
172
- });
173
- }
174
- else {
175
- const andOr = mode === (filters === null || filters === void 0 ? void 0 : filters.containsAny) ? " OR " : " AND ";
176
- iterate(mode, (key, value) => {
177
- let statement = "";
178
- for (let i in value) {
179
- if (typeof value[i] === "string") {
180
- value[i] = `%"${value[i].toLowerCase()}"%`;
181
- }
182
- else {
183
- value[i] = `%${value[i]}%`;
184
- }
185
- statement +=
186
- (statement ? andOr : "") +
187
- `LOWER(${likeKey(this.client, key)}) LIKE ?`;
188
- }
189
- // @ts-ignore
190
- query = query[rawFnc](`${not}(${statement})`, value);
191
- });
192
- }
193
- };
194
- if (!filters) {
195
- return query;
196
- }
197
- filters = parseFilters(filters);
198
- // if all or specified in filters, then everything is an or
199
- const allOr = filters.allOr;
200
- if (filters.oneOf) {
201
- iterate(filters.oneOf, (key, array) => {
202
- const fnc = allOr ? "orWhereIn" : "whereIn";
203
- query = query[fnc](key, Array.isArray(array) ? array : [array]);
204
- });
205
- }
206
- if (filters.string) {
207
- iterate(filters.string, (key, value) => {
208
- const fnc = allOr ? "orWhere" : "where";
209
- // postgres supports ilike, nothing else does
210
- if (this.client === utils_1.SqlClient.POSTGRES) {
211
- query = query[fnc](key, "ilike", `${value}%`);
212
- }
213
- else {
214
- const rawFnc = `${fnc}Raw`;
215
- // @ts-ignore
216
- query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
217
- `${value.toLowerCase()}%`,
218
- ]);
219
- }
220
- });
221
- }
222
- if (filters.fuzzy) {
223
- iterate(filters.fuzzy, like);
224
- }
225
- if (filters.range) {
226
- iterate(filters.range, (key, value) => {
227
- const isEmptyObject = (val) => {
228
- return (val &&
229
- Object.keys(val).length === 0 &&
230
- Object.getPrototypeOf(val) === Object.prototype);
231
- };
232
- if (isEmptyObject(value.low)) {
233
- value.low = "";
234
- }
235
- if (isEmptyObject(value.high)) {
236
- value.high = "";
237
- }
238
- if (value.low && value.high) {
239
- // Use a between operator if we have 2 valid range values
240
- const fnc = allOr ? "orWhereBetween" : "whereBetween";
241
- query = query[fnc](key, [value.low, value.high]);
242
- }
243
- else if (value.low) {
244
- // Use just a single greater than operator if we only have a low
245
- const fnc = allOr ? "orWhere" : "where";
246
- query = query[fnc](key, ">", value.low);
247
- }
248
- else if (value.high) {
249
- // Use just a single less than operator if we only have a high
250
- const fnc = allOr ? "orWhere" : "where";
251
- query = query[fnc](key, "<", value.high);
252
- }
253
- });
254
- }
255
- if (filters.equal) {
256
- iterate(filters.equal, (key, value) => {
257
- const fnc = allOr ? "orWhere" : "where";
258
- query = query[fnc]({ [key]: value });
259
- });
260
- }
261
- if (filters.notEqual) {
262
- iterate(filters.notEqual, (key, value) => {
263
- const fnc = allOr ? "orWhereNot" : "whereNot";
264
- query = query[fnc]({ [key]: value });
265
- });
266
- }
267
- if (filters.empty) {
268
- iterate(filters.empty, key => {
269
- const fnc = allOr ? "orWhereNull" : "whereNull";
270
- query = query[fnc](key);
271
- });
272
- }
273
- if (filters.notEmpty) {
274
- iterate(filters.notEmpty, key => {
275
- const fnc = allOr ? "orWhereNotNull" : "whereNotNull";
276
- query = query[fnc](key);
277
- });
278
- }
279
- if (filters.contains) {
280
- contains(filters.contains);
281
- }
282
- if (filters.notContains) {
283
- contains(filters.notContains);
284
- }
285
- if (filters.containsAny) {
286
- contains(filters.containsAny, true);
287
- }
288
- return query;
289
- }
290
- addSorting(query, json) {
291
- var _a;
292
- let { sort, paginate } = json;
293
- const table = (_a = json.meta) === null || _a === void 0 ? void 0 : _a.table;
294
- if (sort) {
295
- for (let [key, value] of Object.entries(sort)) {
296
- const direction = value.direction === types_1.SortDirection.ASCENDING ? "asc" : "desc";
297
- query = query.orderBy(`${table === null || table === void 0 ? void 0 : table.name}.${key}`, direction);
298
- }
299
- }
300
- else if (this.client === utils_1.SqlClient.MS_SQL && (paginate === null || paginate === void 0 ? void 0 : paginate.limit)) {
301
- // @ts-ignore
302
- query = query.orderBy(`${table === null || table === void 0 ? void 0 : table.name}.${table === null || table === void 0 ? void 0 : table.primary[0]}`);
303
- }
304
- return query;
305
- }
306
- addRelationships(query, fromTable, relationships, schema) {
307
- if (!relationships) {
308
- return query;
309
- }
310
- const tableSets = {};
311
- // aggregate into table sets (all the same to tables)
312
- for (let relationship of relationships) {
313
- const keyObj = {
314
- toTable: relationship.tableName,
315
- throughTable: undefined,
316
- };
317
- if (relationship.through) {
318
- keyObj.throughTable = relationship.through;
319
- }
320
- const key = JSON.stringify(keyObj);
321
- if (tableSets[key]) {
322
- tableSets[key].push(relationship);
323
- }
324
- else {
325
- tableSets[key] = [relationship];
326
- }
327
- }
328
- for (let [key, relationships] of Object.entries(tableSets)) {
329
- const { toTable, throughTable } = JSON.parse(key);
330
- const toTableWithSchema = schema ? `${schema}.${toTable}` : toTable;
331
- const throughTableWithSchema = schema
332
- ? `${schema}.${throughTable}`
333
- : throughTable;
334
- if (!throughTable) {
335
- // @ts-ignore
336
- query = query.leftJoin(toTableWithSchema, function () {
337
- for (let relationship of relationships) {
338
- const from = relationship.from, to = relationship.to;
339
- // @ts-ignore
340
- this.orOn(`${fromTable}.${from}`, "=", `${toTable}.${to}`);
341
- }
342
- });
343
- }
344
- else {
345
- query = query
346
- // @ts-ignore
347
- .leftJoin(throughTableWithSchema, function () {
348
- for (let relationship of relationships) {
349
- const fromPrimary = relationship.fromPrimary;
350
- const from = relationship.from;
351
- // @ts-ignore
352
- this.orOn(`${fromTable}.${fromPrimary}`, "=", `${throughTable}.${from}`);
353
- }
354
- })
355
- .leftJoin(toTableWithSchema, function () {
356
- for (let relationship of relationships) {
357
- const toPrimary = relationship.toPrimary;
358
- const to = relationship.to;
359
- // @ts-ignore
360
- this.orOn(`${toTable}.${toPrimary}`, `${throughTable}.${to}`);
361
- }
362
- });
363
- }
364
- }
365
- return query.limit(BASE_LIMIT);
366
- }
367
- create(knex, json, opts) {
368
- const { endpoint, body } = json;
369
- let query = knex(endpoint.entityId);
370
- if (endpoint.schema) {
371
- query = query.withSchema(endpoint.schema);
372
- }
373
- const parsedBody = parseBody(body);
374
- // make sure no null values in body for creation
375
- for (let [key, value] of Object.entries(parsedBody)) {
376
- if (value == null) {
377
- delete parsedBody[key];
378
- }
379
- }
380
- // mysql can't use returning
381
- if (opts.disableReturning) {
382
- return query.insert(parsedBody);
383
- }
384
- else {
385
- return query.insert(parsedBody).returning("*");
386
- }
387
- }
388
- bulkCreate(knex, json) {
389
- const { endpoint, body } = json;
390
- let query = knex(endpoint.entityId);
391
- if (endpoint.schema) {
392
- query = query.withSchema(endpoint.schema);
393
- }
394
- if (!Array.isArray(body)) {
395
- return query;
396
- }
397
- const parsedBody = body.map(row => parseBody(row));
398
- return query.insert(parsedBody);
399
- }
400
- read(knex, json, limit) {
401
- let { endpoint, resource, filters, paginate, relationships } = json;
402
- const tableName = endpoint.entityId;
403
- // select all if not specified
404
- if (!resource) {
405
- resource = { fields: [] };
406
- }
407
- let selectStatement = "*";
408
- // handle select
409
- if (resource.fields && resource.fields.length > 0) {
410
- // select the resources as the format "table.columnName" - this is what is provided
411
- // by the resource builder further up
412
- selectStatement = generateSelectStatement(json, knex);
413
- }
414
- let foundLimit = limit || BASE_LIMIT;
415
- // handle pagination
416
- let foundOffset = null;
417
- if (paginate && paginate.page && paginate.limit) {
418
- // @ts-ignore
419
- const page = paginate.page <= 1 ? 0 : paginate.page - 1;
420
- const offset = page * paginate.limit;
421
- foundLimit = paginate.limit;
422
- foundOffset = offset;
423
- }
424
- else if (paginate && paginate.limit) {
425
- foundLimit = paginate.limit;
426
- }
427
- // start building the query
428
- let query = knex(tableName).limit(foundLimit);
429
- if (endpoint.schema) {
430
- query = query.withSchema(endpoint.schema);
431
- }
432
- if (foundOffset) {
433
- query = query.offset(foundOffset);
434
- }
435
- query = this.addFilters(query, filters, { tableName });
436
- // add sorting to pre-query
437
- query = this.addSorting(query, json);
438
- // @ts-ignore
439
- let preQuery = knex({
440
- // @ts-ignore
441
- [tableName]: query,
442
- }).select(selectStatement);
443
- // have to add after as well (this breaks MS-SQL)
444
- if (this.client !== utils_1.SqlClient.MS_SQL) {
445
- preQuery = this.addSorting(preQuery, json);
446
- }
447
- // handle joins
448
- query = this.addRelationships(preQuery, tableName, relationships, endpoint.schema);
449
- return this.addFilters(query, filters, { relationship: true });
450
- }
451
- update(knex, json, opts) {
452
- const { endpoint, body, filters } = json;
453
- let query = knex(endpoint.entityId);
454
- if (endpoint.schema) {
455
- query = query.withSchema(endpoint.schema);
456
- }
457
- const parsedBody = parseBody(body);
458
- query = this.addFilters(query, filters, { tableName: endpoint.entityId });
459
- // mysql can't use returning
460
- if (opts.disableReturning) {
461
- return query.update(parsedBody);
462
- }
463
- else {
464
- return query.update(parsedBody).returning("*");
465
- }
466
- }
467
- delete(knex, json, opts) {
468
- const { endpoint, filters } = json;
469
- let query = knex(endpoint.entityId);
470
- if (endpoint.schema) {
471
- query = query.withSchema(endpoint.schema);
472
- }
473
- query = this.addFilters(query, filters, { tableName: endpoint.entityId });
474
- // mysql can't use returning
475
- if (opts.disableReturning) {
476
- return query.delete();
477
- }
478
- else {
479
- return query.delete().returning(generateSelectStatement(json, knex));
480
- }
481
- }
482
- }
483
- class SqlQueryBuilder extends sqlTable_1.default {
484
- // pass through client to get flavour of SQL
485
- constructor(client, limit = BASE_LIMIT) {
486
- super(client);
487
- this.limit = limit;
488
- }
489
- /**
490
- * @param json The JSON query DSL which is to be converted to SQL.
491
- * @param opts extra options which are to be passed into the query builder, e.g. disableReturning
492
- * which for the sake of mySQL stops adding the returning statement to inserts, updates and deletes.
493
- * @return {{ sql: string, bindings: object }} the query ready to be passed to the driver.
494
- */
495
- _query(json, opts = {}) {
496
- const sqlClient = this.getSqlClient();
497
- const client = (0, knex_1.knex)({ client: sqlClient });
498
- let query;
499
- const builder = new InternalBuilder(sqlClient);
500
- switch (this._operation(json)) {
501
- case types_1.Operation.CREATE:
502
- query = builder.create(client, json, opts);
503
- break;
504
- case types_1.Operation.READ:
505
- query = builder.read(client, json, this.limit);
506
- break;
507
- case types_1.Operation.UPDATE:
508
- query = builder.update(client, json, opts);
509
- break;
510
- case types_1.Operation.DELETE:
511
- query = builder.delete(client, json, opts);
512
- break;
513
- case types_1.Operation.BULK_CREATE:
514
- query = builder.bulkCreate(client, json);
515
- break;
516
- case types_1.Operation.CREATE_TABLE:
517
- case types_1.Operation.UPDATE_TABLE:
518
- case types_1.Operation.DELETE_TABLE:
519
- return this._tableQuery(json);
520
- default:
521
- throw `Operation type is not supported by SQL query builder`;
522
- }
523
- // @ts-ignore
524
- return query.toSQL().toNative();
525
- }
526
- getReturningRow(queryFn, json) {
527
- return __awaiter(this, void 0, void 0, function* () {
528
- if (!json.extra || !json.extra.idFilter) {
529
- return {};
530
- }
531
- const input = this._query({
532
- endpoint: Object.assign(Object.assign({}, json.endpoint), { operation: types_1.Operation.READ }),
533
- resource: {
534
- fields: [],
535
- },
536
- filters: json.extra.idFilter,
537
- paginate: {
538
- limit: 1,
539
- },
540
- meta: json.meta,
541
- });
542
- return queryFn(input, types_1.Operation.READ);
543
- });
544
- }
545
- // when creating if an ID has been inserted need to make sure
546
- // the id filter is enriched with it before trying to retrieve the row
547
- checkLookupKeys(id, json) {
548
- var _a, _b;
549
- if (!id || !((_a = json.meta) === null || _a === void 0 ? void 0 : _a.table) || !json.meta.table.primary) {
550
- return json;
551
- }
552
- const primaryKey = (_b = json.meta.table.primary) === null || _b === void 0 ? void 0 : _b[0];
553
- json.extra = {
554
- idFilter: {
555
- equal: {
556
- [primaryKey]: id,
557
- },
558
- },
559
- };
560
- return json;
561
- }
562
- // this function recreates the returning functionality of postgres
563
- queryWithReturning(json, queryFn, processFn = (result) => result) {
564
- return __awaiter(this, void 0, void 0, function* () {
565
- const sqlClient = this.getSqlClient();
566
- const operation = this._operation(json);
567
- const input = this._query(json, { disableReturning: true });
568
- if (Array.isArray(input)) {
569
- const responses = [];
570
- for (let query of input) {
571
- responses.push(yield queryFn(query, operation));
572
- }
573
- return responses;
574
- }
575
- let row;
576
- // need to manage returning, a feature mySQL can't do
577
- if (operation === types_1.Operation.DELETE) {
578
- row = processFn(yield this.getReturningRow(queryFn, json));
579
- }
580
- const response = yield queryFn(input, operation);
581
- const results = processFn(response);
582
- // same as delete, manage returning
583
- if (operation === types_1.Operation.CREATE || operation === types_1.Operation.UPDATE) {
584
- let id;
585
- if (sqlClient === utils_1.SqlClient.MS_SQL) {
586
- id = results === null || results === void 0 ? void 0 : results[0].id;
587
- }
588
- else if (sqlClient === utils_1.SqlClient.MY_SQL) {
589
- id = results === null || results === void 0 ? void 0 : results.insertId;
590
- }
591
- row = processFn(yield this.getReturningRow(queryFn, this.checkLookupKeys(id, json)));
592
- }
593
- if (operation !== types_1.Operation.READ) {
594
- return row;
595
- }
596
- return results.length ? results : [{ [operation.toLowerCase()]: true }];
597
- });
598
- }
599
- }
600
- exports.default = SqlQueryBuilder;