@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
@@ -8,6 +8,8 @@ import {
8
8
  QueryType,
9
9
  SqlQuery,
10
10
  DatasourcePlus,
11
+ DatasourceFeature,
12
+ ConnectionInfo,
11
13
  } from "@budibase/types"
12
14
  import {
13
15
  getSqlQuery,
@@ -18,7 +20,6 @@ import {
18
20
  } from "./utils"
19
21
  import Sql from "./base/sql"
20
22
  import { MSSQLTablesResponse, MSSQLColumn } from "./base/types"
21
-
22
23
  const sqlServer = require("mssql")
23
24
  const DEFAULT_SCHEMA = "dbo"
24
25
 
@@ -39,6 +40,10 @@ const SCHEMA: Integration = {
39
40
  "Microsoft SQL Server is a relational database management system developed by Microsoft. ",
40
41
  friendlyName: "MS SQL Server",
41
42
  type: "Relational",
43
+ features: {
44
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
45
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
46
+ },
42
47
  datasource: {
43
48
  user: {
44
49
  type: DatasourceFieldType.STRING,
@@ -121,6 +126,19 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
121
126
  }
122
127
  }
123
128
 
129
+ async testConnection() {
130
+ const response: ConnectionInfo = {
131
+ connected: false,
132
+ }
133
+ try {
134
+ await this.connect()
135
+ response.connected = true
136
+ } catch (e: any) {
137
+ response.error = e.message as string
138
+ }
139
+ return response
140
+ }
141
+
124
142
  getBindingIdentifier(): string {
125
143
  return `@p${this.index++}`
126
144
  }
@@ -268,6 +286,20 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
268
286
  this.schemaErrors = final.errors
269
287
  }
270
288
 
289
+ async queryTableNames() {
290
+ let tableInfo: MSSQLTablesResponse[] = await this.runSQL(this.TABLES_SQL)
291
+ const schema = this.config.schema || DEFAULT_SCHEMA
292
+ return tableInfo
293
+ .filter((record: any) => record.TABLE_SCHEMA === schema)
294
+ .map((record: any) => record.TABLE_NAME)
295
+ .filter((name: string) => this.MASTER_TABLES.indexOf(name) === -1)
296
+ }
297
+
298
+ async getTableNames() {
299
+ await this.connect()
300
+ return this.queryTableNames()
301
+ }
302
+
271
303
  async read(query: SqlQuery | string) {
272
304
  await this.connect()
273
305
  const response = await this.internalQuery(getSqlQuery(query))
@@ -3,6 +3,8 @@ import {
3
3
  DatasourceFieldType,
4
4
  QueryType,
5
5
  IntegrationBase,
6
+ DatasourceFeature,
7
+ ConnectionInfo,
6
8
  } from "@budibase/types"
7
9
  import {
8
10
  MongoClient,
@@ -38,6 +40,9 @@ const getSchema = () => {
38
40
  type: "Non-relational",
39
41
  description:
40
42
  "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
43
+ features: {
44
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
45
+ },
41
46
  datasource: {
42
47
  connectionString: {
43
48
  type: DatasourceFieldType.STRING,
@@ -358,6 +363,19 @@ class MongoIntegration implements IntegrationBase {
358
363
  this.client = new MongoClient(config.connectionString, options)
359
364
  }
360
365
 
366
+ async testConnection() {
367
+ const response: ConnectionInfo = {
368
+ connected: false,
369
+ }
370
+ try {
371
+ await this.connect()
372
+ response.connected = true
373
+ } catch (e: any) {
374
+ response.error = e.message as string
375
+ }
376
+ return response
377
+ }
378
+
361
379
  async connect() {
362
380
  return this.client.connect()
363
381
  }
@@ -7,6 +7,8 @@ import {
7
7
  Table,
8
8
  TableSchema,
9
9
  DatasourcePlus,
10
+ DatasourceFeature,
11
+ ConnectionInfo,
10
12
  } from "@budibase/types"
11
13
  import {
12
14
  getSqlQuery,
@@ -20,18 +22,11 @@ import { NUMBER_REGEX } from "../utilities"
20
22
  import Sql from "./base/sql"
21
23
  import { MySQLColumn } from "./base/types"
22
24
 
23
- const mysql = require("mysql2/promise")
25
+ import mysql from "mysql2/promise"
24
26
 
25
- interface MySQLConfig {
26
- host: string
27
- port: number
28
- user: string
29
- password: string
27
+ interface MySQLConfig extends mysql.ConnectionOptions {
30
28
  database: string
31
- ssl?: { [key: string]: any }
32
29
  rejectUnauthorized: boolean
33
- typeCast: Function
34
- multipleStatements: boolean
35
30
  }
36
31
 
37
32
  const SCHEMA: Integration = {
@@ -41,6 +36,10 @@ const SCHEMA: Integration = {
41
36
  type: "Relational",
42
37
  description:
43
38
  "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
39
+ features: {
40
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
41
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
42
+ },
44
43
  datasource: {
45
44
  host: {
46
45
  type: DatasourceFieldType.STRING,
@@ -92,8 +91,6 @@ const SCHEMA: Integration = {
92
91
  },
93
92
  }
94
93
 
95
- const TimezoneAwareDateTypes = ["timestamp"]
96
-
97
94
  function bindingTypeCoerce(bindings: any[]) {
98
95
  for (let i = 0; i < bindings.length; i++) {
99
96
  const binding = bindings[i]
@@ -120,7 +117,7 @@ function bindingTypeCoerce(bindings: any[]) {
120
117
 
121
118
  class MySQLIntegration extends Sql implements DatasourcePlus {
122
119
  private config: MySQLConfig
123
- private client: any
120
+ private client?: mysql.Connection
124
121
  public tables: Record<string, Table> = {}
125
122
  public schemaErrors: Record<string, string> = {}
126
123
 
@@ -134,7 +131,8 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
134
131
  if (
135
132
  config.rejectUnauthorized != null &&
136
133
  !config.rejectUnauthorized &&
137
- config.ssl
134
+ config.ssl &&
135
+ typeof config.ssl !== "string"
138
136
  ) {
139
137
  config.ssl.rejectUnauthorized = config.rejectUnauthorized
140
138
  }
@@ -160,6 +158,22 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
160
158
  }
161
159
  }
162
160
 
161
+ async testConnection() {
162
+ const response: ConnectionInfo = {
163
+ connected: false,
164
+ }
165
+ try {
166
+ const [result] = await this.internalQuery(
167
+ { sql: "SELECT 1+1 AS checkRes" },
168
+ { connect: true }
169
+ )
170
+ response.connected = result?.checkRes == 2
171
+ } catch (e: any) {
172
+ response.error = e.message as string
173
+ }
174
+ return response
175
+ }
176
+
163
177
  getBindingIdentifier(): string {
164
178
  return "?"
165
179
  }
@@ -173,7 +187,7 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
173
187
  }
174
188
 
175
189
  async disconnect() {
176
- await this.client.end()
190
+ await this.client!.end()
177
191
  }
178
192
 
179
193
  async internalQuery(
@@ -192,10 +206,10 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
192
206
  ? baseBindings
193
207
  : bindingTypeCoerce(baseBindings)
194
208
  // Node MySQL is callback based, so we must wrap our call in a promise
195
- const response = await this.client.query(query.sql, bindings)
209
+ const response = await this.client!.query(query.sql, bindings)
196
210
  return response[0]
197
211
  } finally {
198
- if (opts?.connect) {
212
+ if (opts?.connect && this.client) {
199
213
  await this.disconnect()
200
214
  }
201
215
  }
@@ -203,20 +217,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
203
217
 
204
218
  async buildSchema(datasourceId: string, entities: Record<string, Table>) {
205
219
  const tables: { [key: string]: Table } = {}
206
- const database = this.config.database
207
220
  await this.connect()
208
221
 
209
222
  try {
210
223
  // get the tables first
211
- const tablesResp: Record<string, string>[] = await this.internalQuery(
212
- { sql: "SHOW TABLES;" },
213
- { connect: false }
214
- )
215
- const tableNames: string[] = tablesResp.map(
216
- (obj: any) =>
217
- obj[`Tables_in_${database}`] ||
218
- obj[`Tables_in_${database.toLowerCase()}`]
219
- )
224
+ const tableNames = await this.queryTableNames()
220
225
  for (let tableName of tableNames) {
221
226
  const primaryKeys = []
222
227
  const schema: TableSchema = {}
@@ -263,6 +268,28 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
263
268
  this.schemaErrors = final.errors
264
269
  }
265
270
 
271
+ async queryTableNames() {
272
+ const database = this.config.database
273
+ const tablesResp: Record<string, string>[] = await this.internalQuery(
274
+ { sql: "SHOW TABLES;" },
275
+ { connect: false }
276
+ )
277
+ return tablesResp.map(
278
+ (obj: any) =>
279
+ obj[`Tables_in_${database}`] ||
280
+ obj[`Tables_in_${database.toLowerCase()}`]
281
+ )
282
+ }
283
+
284
+ async getTableNames() {
285
+ await this.connect()
286
+ try {
287
+ return this.queryTableNames()
288
+ } finally {
289
+ await this.disconnect()
290
+ }
291
+ }
292
+
266
293
  async create(query: SqlQuery | string) {
267
294
  const results = await this.internalQuery(getSqlQuery(query))
268
295
  return results.length ? results : [{ created: true }]
@@ -7,6 +7,8 @@ import {
7
7
  SqlQuery,
8
8
  Table,
9
9
  DatasourcePlus,
10
+ DatasourceFeature,
11
+ ConnectionInfo,
10
12
  } from "@budibase/types"
11
13
  import {
12
14
  buildExternalTableId,
@@ -24,12 +26,7 @@ import {
24
26
  ExecuteOptions,
25
27
  Result,
26
28
  } from "oracledb"
27
- import {
28
- OracleTable,
29
- OracleColumn,
30
- OracleColumnsResponse,
31
- OracleConstraint,
32
- } from "./base/types"
29
+ import { OracleTable, OracleColumn, OracleColumnsResponse } from "./base/types"
33
30
  let oracledb: any
34
31
  try {
35
32
  oracledb = require("oracledb")
@@ -53,6 +50,10 @@ const SCHEMA: Integration = {
53
50
  type: "Relational",
54
51
  description:
55
52
  "Oracle Database is an object-relational database management system developed by Oracle Corporation",
53
+ features: {
54
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
55
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
56
+ },
56
57
  datasource: {
57
58
  host: {
58
59
  type: DatasourceFieldType.STRING,
@@ -325,6 +326,37 @@ class OracleIntegration extends Sql implements DatasourcePlus {
325
326
  this.schemaErrors = final.errors
326
327
  }
327
328
 
329
+ async getTableNames() {
330
+ const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
331
+ sql: this.COLUMNS_SQL,
332
+ })
333
+ return (columnsResponse.rows || []).map(row => row.TABLE_NAME)
334
+ }
335
+
336
+ async testConnection() {
337
+ const response: ConnectionInfo = {
338
+ connected: false,
339
+ }
340
+ let connection
341
+ try {
342
+ connection = await this.getConnection()
343
+ response.connected = true
344
+ } catch (err: any) {
345
+ response.connected = false
346
+ response.error = err.message
347
+ } finally {
348
+ if (connection) {
349
+ try {
350
+ await connection.close()
351
+ } catch (err: any) {
352
+ response.connected = false
353
+ response.error = err.message
354
+ }
355
+ }
356
+ }
357
+ return response
358
+ }
359
+
328
360
  private async internalQuery<T>(query: SqlQuery): Promise<Result<T>> {
329
361
  let connection
330
362
  try {
@@ -6,6 +6,8 @@ import {
6
6
  SqlQuery,
7
7
  Table,
8
8
  DatasourcePlus,
9
+ DatasourceFeature,
10
+ ConnectionInfo,
9
11
  } from "@budibase/types"
10
12
  import {
11
13
  getSqlQuery,
@@ -18,7 +20,7 @@ import Sql from "./base/sql"
18
20
  import { PostgresColumn } from "./base/types"
19
21
  import { escapeDangerousCharacters } from "../utilities"
20
22
 
21
- const { Client, types } = require("pg")
23
+ import { Client, types } from "pg"
22
24
 
23
25
  // Return "date" and "timestamp" types as plain strings.
24
26
  // This lets us reference the original stored timezone.
@@ -50,6 +52,10 @@ const SCHEMA: Integration = {
50
52
  type: "Relational",
51
53
  description:
52
54
  "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
55
+ features: {
56
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
57
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
58
+ },
53
59
  datasource: {
54
60
  host: {
55
61
  type: DatasourceFieldType.STRING,
@@ -114,7 +120,7 @@ const SCHEMA: Integration = {
114
120
  }
115
121
 
116
122
  class PostgresIntegration extends Sql implements DatasourcePlus {
117
- private readonly client: any
123
+ private readonly client: Client
118
124
  private readonly config: PostgresConfig
119
125
  private index: number = 1
120
126
  private open: boolean
@@ -123,14 +129,15 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
123
129
 
124
130
  COLUMNS_SQL!: string
125
131
 
126
- PRIMARY_KEYS_SQL = `
127
- select tc.table_schema, tc.table_name, kc.column_name as primary_key
128
- from information_schema.table_constraints tc
129
- join
130
- information_schema.key_column_usage kc on kc.table_name = tc.table_name
131
- and kc.table_schema = tc.table_schema
132
- and kc.constraint_name = tc.constraint_name
133
- where tc.constraint_type = 'PRIMARY KEY';
132
+ PRIMARY_KEYS_SQL = () => `
133
+ SELECT pg_namespace.nspname table_schema
134
+ , pg_class.relname table_name
135
+ , pg_attribute.attname primary_key
136
+ FROM pg_class
137
+ JOIN pg_index ON pg_class.oid = pg_index.indrelid AND pg_index.indisprimary
138
+ JOIN pg_attribute ON pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = ANY(pg_index.indkey)
139
+ JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
140
+ WHERE pg_namespace.nspname = '${this.config.schema}';
134
141
  `
135
142
 
136
143
  constructor(config: PostgresConfig) {
@@ -150,6 +157,21 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
150
157
  this.open = false
151
158
  }
152
159
 
160
+ async testConnection() {
161
+ const response: ConnectionInfo = {
162
+ connected: false,
163
+ }
164
+ try {
165
+ await this.openConnection()
166
+ response.connected = true
167
+ } catch (e: any) {
168
+ response.error = e.message as string
169
+ } finally {
170
+ await this.closeConnection()
171
+ }
172
+ return response
173
+ }
174
+
153
175
  getBindingIdentifier(): string {
154
176
  return `$${this.index++}`
155
177
  }
@@ -163,7 +185,7 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
163
185
  if (!this.config.schema) {
164
186
  this.config.schema = "public"
165
187
  }
166
- this.client.query(`SET search_path TO ${this.config.schema}`)
188
+ await this.client.query(`SET search_path TO ${this.config.schema}`)
167
189
  this.COLUMNS_SQL = `select * from information_schema.columns where table_schema = '${this.config.schema}'`
168
190
  this.open = true
169
191
  }
@@ -221,7 +243,9 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
221
243
  let tableKeys: { [key: string]: string[] } = {}
222
244
  await this.openConnection()
223
245
  try {
224
- const primaryKeysResponse = await this.client.query(this.PRIMARY_KEYS_SQL)
246
+ const primaryKeysResponse = await this.client.query(
247
+ this.PRIMARY_KEYS_SQL()
248
+ )
225
249
  for (let table of primaryKeysResponse.rows) {
226
250
  const tableName = table.table_name
227
251
  if (!tableKeys[tableName]) {
@@ -293,6 +317,17 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
293
317
  }
294
318
  }
295
319
 
320
+ async getTableNames() {
321
+ try {
322
+ await this.openConnection()
323
+ const columnsResponse: { rows: PostgresColumn[] } =
324
+ await this.client.query(this.COLUMNS_SQL)
325
+ return columnsResponse.rows.map(row => row.table_name)
326
+ } finally {
327
+ await this.closeConnection()
328
+ }
329
+ }
330
+
296
331
  async create(query: SqlQuery | string) {
297
332
  const response = await this.internalQuery(getSqlQuery(query))
298
333
  return response.rows.length ? response.rows : [{ created: true }]
@@ -1,4 +1,10 @@
1
- import { DatasourceFieldType, Integration, QueryType } from "@budibase/types"
1
+ import {
2
+ ConnectionInfo,
3
+ DatasourceFeature,
4
+ DatasourceFieldType,
5
+ Integration,
6
+ QueryType,
7
+ } from "@budibase/types"
2
8
  import Redis from "ioredis"
3
9
 
4
10
  interface RedisConfig {
@@ -11,9 +17,13 @@ interface RedisConfig {
11
17
 
12
18
  const SCHEMA: Integration = {
13
19
  docs: "https://redis.io/docs/",
14
- description: "",
20
+ description:
21
+ "Redis is a caching tool, providing powerful key-value store capabilities.",
15
22
  friendlyName: "Redis",
16
23
  type: "Non-relational",
24
+ features: {
25
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
26
+ },
17
27
  datasource: {
18
28
  host: {
19
29
  type: "string",
@@ -86,7 +96,7 @@ const SCHEMA: Integration = {
86
96
 
87
97
  class RedisIntegration {
88
98
  private readonly config: RedisConfig
89
- private client: any
99
+ private client
90
100
 
91
101
  constructor(config: RedisConfig) {
92
102
  this.config = config
@@ -99,6 +109,21 @@ class RedisIntegration {
99
109
  })
100
110
  }
101
111
 
112
+ async testConnection() {
113
+ const response: ConnectionInfo = {
114
+ connected: false,
115
+ }
116
+ try {
117
+ await this.client.ping()
118
+ response.connected = true
119
+ } catch (e: any) {
120
+ response.error = e.message as string
121
+ } finally {
122
+ await this.disconnect()
123
+ }
124
+ return response
125
+ }
126
+
102
127
  async disconnect() {
103
128
  return this.client.quit()
104
129
  }
@@ -152,7 +177,13 @@ class RedisIntegration {
152
177
  const pipeline = this.client.pipeline(pipelineCommands)
153
178
  const result = await pipeline.exec()
154
179
 
155
- return result.map((output: string | string[]) => output[1])
180
+ return result?.map((output: any) => {
181
+ if (typeof output === "string") {
182
+ return output
183
+ } else if (Array.isArray(output)) {
184
+ return output[1]
185
+ }
186
+ })
156
187
  })
157
188
  }
158
189
  }
@@ -3,10 +3,12 @@ import {
3
3
  QueryType,
4
4
  IntegrationBase,
5
5
  DatasourceFieldType,
6
+ DatasourceFeature,
7
+ ConnectionInfo,
6
8
  } from "@budibase/types"
7
9
 
8
- const AWS = require("aws-sdk")
9
- const csv = require("csvtojson")
10
+ import AWS from "aws-sdk"
11
+ import csv from "csvtojson"
10
12
 
11
13
  interface S3Config {
12
14
  region: string
@@ -22,6 +24,9 @@ const SCHEMA: Integration = {
22
24
  "Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.",
23
25
  friendlyName: "Amazon S3",
24
26
  type: "Object store",
27
+ features: {
28
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
29
+ },
25
30
  datasource: {
26
31
  region: {
27
32
  type: "string",
@@ -152,7 +157,7 @@ const SCHEMA: Integration = {
152
157
 
153
158
  class S3Integration implements IntegrationBase {
154
159
  private readonly config: S3Config
155
- private client: any
160
+ private client
156
161
 
157
162
  constructor(config: S3Config) {
158
163
  this.config = config
@@ -165,6 +170,19 @@ class S3Integration implements IntegrationBase {
165
170
  this.client = new AWS.S3(this.config)
166
171
  }
167
172
 
173
+ async testConnection() {
174
+ const response: ConnectionInfo = {
175
+ connected: false,
176
+ }
177
+ try {
178
+ await this.client.listBuckets().promise()
179
+ response.connected = true
180
+ } catch (e: any) {
181
+ response.error = e.message as string
182
+ }
183
+ return response
184
+ }
185
+
168
186
  async create(query: {
169
187
  bucket: string
170
188
  location: string
@@ -1,4 +1,10 @@
1
- import { Integration, QueryType, SqlQuery } from "@budibase/types"
1
+ import {
2
+ ConnectionInfo,
3
+ DatasourceFeature,
4
+ Integration,
5
+ QueryType,
6
+ SqlQuery,
7
+ } from "@budibase/types"
2
8
  import { Snowflake } from "snowflake-promise"
3
9
 
4
10
  interface SnowflakeConfig {
@@ -16,6 +22,9 @@ const SCHEMA: Integration = {
16
22
  "Snowflake is a solution for data warehousing, data lakes, data engineering, data science, data application development, and securely sharing and consuming shared data.",
17
23
  friendlyName: "Snowflake",
18
24
  type: "Relational",
25
+ features: {
26
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
27
+ },
19
28
  datasource: {
20
29
  account: {
21
30
  type: "string",
@@ -68,6 +77,18 @@ class SnowflakeIntegration {
68
77
  this.client = new Snowflake(config)
69
78
  }
70
79
 
80
+ async testConnection(): Promise<ConnectionInfo> {
81
+ try {
82
+ await this.client.connect()
83
+ return { connected: true }
84
+ } catch (e: any) {
85
+ return {
86
+ connected: false,
87
+ error: e.message as string,
88
+ }
89
+ }
90
+ }
91
+
71
92
  async internalQuery(query: SqlQuery) {
72
93
  await this.client.connect()
73
94
  try {