@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.
- package/.dockerignore +7 -6
- package/Dockerfile +16 -8
- package/builder/assets/index.50121870.js +1869 -0
- package/builder/assets/index.a86e2071.css +6 -0
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32576 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +45065 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24462 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +6 -3
- package/nodemon.json +8 -4
- package/package.json +35 -16
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/application.ts +21 -22
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +114 -49
- package/src/api/controllers/deploy/index.ts +1 -0
- package/src/api/controllers/integration.ts +3 -3
- package/src/api/controllers/plugin/index.ts +1 -1
- package/src/api/controllers/row/external.ts +39 -15
- package/src/api/controllers/row/index.ts +18 -24
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/row/staticFormula.ts +6 -1
- package/src/api/controllers/row/utils.ts +12 -0
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/index.ts +3 -0
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/view/index.ts +5 -5
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/application.ts +5 -0
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/datasource.ts +10 -0
- package/src/api/routes/static.ts +3 -1
- package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
- package/src/api/routes/tests/datasource.spec.ts +1 -1
- package/src/api/routes/tests/view.spec.js +4 -3
- package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/app.ts +0 -1
- package/src/automations/actions.ts +8 -0
- package/src/automations/logging/index.ts +21 -0
- package/src/automations/steps/bash.ts +4 -0
- package/src/automations/steps/collect.ts +58 -0
- package/src/automations/steps/createRow.ts +4 -0
- package/src/automations/steps/delay.ts +1 -0
- package/src/automations/steps/deleteRow.ts +4 -0
- package/src/automations/steps/discord.ts +4 -0
- package/src/automations/steps/executeQuery.ts +4 -0
- package/src/automations/steps/executeScript.ts +4 -0
- package/src/automations/steps/filter.ts +1 -0
- package/src/automations/steps/loop.ts +1 -0
- package/src/automations/steps/make.ts +22 -1
- package/src/automations/steps/openai.ts +106 -0
- package/src/automations/steps/outgoingWebhook.ts +4 -0
- package/src/automations/steps/queryRows.ts +4 -0
- package/src/automations/steps/sendSmtpEmail.ts +4 -0
- package/src/automations/steps/serverLog.ts +4 -0
- package/src/automations/steps/slack.ts +4 -0
- package/src/automations/steps/updateRow.ts +4 -0
- package/src/automations/steps/zapier.ts +22 -1
- package/src/automations/tests/make.spec.ts +54 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/tests/zapier.spec.ts +56 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/dynamoClient.ts +1 -1
- package/src/db/inMemoryView.ts +1 -0
- package/src/db/linkedRows/index.ts +5 -3
- package/src/environment.ts +3 -0
- package/src/integration-test/postgres.spec.ts +47 -5
- package/src/integrations/airtable.ts +33 -4
- package/src/integrations/arangodb.ts +20 -2
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +20 -4
- package/src/integrations/dynamodb.ts +36 -5
- package/src/integrations/elasticsearch.ts +18 -1
- package/src/integrations/firebase.ts +17 -0
- package/src/integrations/googlesheets.ts +66 -5
- package/src/integrations/index.ts +12 -7
- package/src/integrations/microsoftSqlServer.ts +33 -1
- package/src/integrations/mongodb.ts +18 -0
- package/src/integrations/mysql.ts +53 -26
- package/src/integrations/oracle.ts +38 -6
- package/src/integrations/postgres.ts +47 -12
- package/src/integrations/redis.ts +35 -4
- package/src/integrations/s3.ts +21 -3
- package/src/integrations/snowflake.ts +25 -1
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- package/src/middleware/builder.ts +26 -18
- package/src/migrations/functions/backfill/app/queries.ts +1 -1
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/sdk/app/datasources/datasources.ts +7 -1
- package/src/sdk/plugins/plugins.ts +1 -1
- package/src/startup.ts +2 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +91 -23
- package/src/threads/index.ts +9 -3
- package/src/threads/utils.ts +2 -0
- package/src/utilities/fileSystem/app.ts +14 -4
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/src/utilities/redis.ts +25 -3
- package/src/utilities/rowProcessor/index.ts +4 -1
- package/src/utilities/rowProcessor/map.ts +1 -1
- package/src/websockets/builder.ts +95 -0
- package/src/websockets/client.ts +2 -2
- package/src/websockets/grid.ts +44 -44
- package/src/websockets/index.ts +13 -6
- package/src/websockets/websocket.ts +211 -7
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- package/builder/assets/index.86c992bf.css +0 -6
- package/builder/assets/index.c16c35ca.js +0 -1794
- package/dist/api/controllers/analytics.js +0 -46
- package/dist/api/controllers/apikeys.js +0 -72
- package/dist/api/controllers/application.js +0 -574
- package/dist/api/controllers/auth.js +0 -80
- package/dist/api/controllers/automation.js +0 -303
- package/dist/api/controllers/backup.js +0 -37
- package/dist/api/controllers/component.js +0 -59
- package/dist/api/controllers/datasource.js +0 -306
- package/dist/api/controllers/deploy/Deployment.js +0 -53
- package/dist/api/controllers/deploy/index.js +0 -198
- package/dist/api/controllers/dev.js +0 -146
- package/dist/api/controllers/integration.js +0 -28
- package/dist/api/controllers/layout.js +0 -49
- package/dist/api/controllers/metadata.js +0 -63
- package/dist/api/controllers/migrations.js +0 -29
- package/dist/api/controllers/ops.js +0 -40
- package/dist/api/controllers/permission.js +0 -162
- package/dist/api/controllers/plugin/file.js +0 -24
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -112
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/url.js +0 -24
- package/dist/api/controllers/plugin/utils.js +0 -27
- package/dist/api/controllers/public/applications.js +0 -146
- package/dist/api/controllers/public/mapping/applications.js +0 -29
- package/dist/api/controllers/public/mapping/index.js +0 -11
- package/dist/api/controllers/public/mapping/queries.js +0 -36
- package/dist/api/controllers/public/mapping/rows.js +0 -24
- package/dist/api/controllers/public/mapping/tables.js +0 -23
- package/dist/api/controllers/public/mapping/types.js +0 -2
- package/dist/api/controllers/public/mapping/users.js +0 -29
- package/dist/api/controllers/public/metrics.js +0 -113
- package/dist/api/controllers/public/queries.js +0 -58
- package/dist/api/controllers/public/rows.js +0 -120
- package/dist/api/controllers/public/tables.js +0 -95
- package/dist/api/controllers/public/users.js +0 -93
- package/dist/api/controllers/public/utils.js +0 -56
- package/dist/api/controllers/query/import/index.js +0 -87
- package/dist/api/controllers/query/import/sources/base/index.js +0 -75
- package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
- package/dist/api/controllers/query/import/sources/curl.js +0 -99
- package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
- package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/dist/api/controllers/query/index.js +0 -299
- package/dist/api/controllers/query/validation.js +0 -53
- package/dist/api/controllers/role.js +0 -109
- package/dist/api/controllers/routing.js +0 -105
- package/dist/api/controllers/row/ExternalRequest.js +0 -683
- package/dist/api/controllers/row/external.js +0 -339
- package/dist/api/controllers/row/index.js +0 -203
- package/dist/api/controllers/row/internal.js +0 -509
- package/dist/api/controllers/row/internalSearch.js +0 -28
- package/dist/api/controllers/row/staticFormula.js +0 -165
- package/dist/api/controllers/row/utils.js +0 -183
- package/dist/api/controllers/screen.js +0 -110
- package/dist/api/controllers/script.js +0 -30
- package/dist/api/controllers/static/index.js +0 -268
- package/dist/api/controllers/table/bulkFormula.js +0 -173
- package/dist/api/controllers/table/external.js +0 -279
- package/dist/api/controllers/table/index.js +0 -179
- package/dist/api/controllers/table/internal.js +0 -197
- package/dist/api/controllers/table/utils.js +0 -379
- package/dist/api/controllers/templates.js +0 -56
- package/dist/api/controllers/user.js +0 -124
- package/dist/api/controllers/view/exporters.js +0 -46
- package/dist/api/controllers/view/index.js +0 -193
- package/dist/api/controllers/view/utils.js +0 -177
- package/dist/api/controllers/view/viewBuilder.js +0 -158
- package/dist/api/controllers/webhook.js +0 -134
- package/dist/api/index.js +0 -55
- package/dist/api/routes/analytics.js +0 -34
- package/dist/api/routes/apikeys.js +0 -37
- package/dist/api/routes/application.js +0 -48
- package/dist/api/routes/auth.js +0 -33
- package/dist/api/routes/automation.js +0 -50
- package/dist/api/routes/backup.js +0 -35
- package/dist/api/routes/component.js +0 -35
- package/dist/api/routes/datasource.js +0 -43
- package/dist/api/routes/deploy.js +0 -37
- package/dist/api/routes/dev.js +0 -49
- package/dist/api/routes/index.js +0 -75
- package/dist/api/routes/integration.js +0 -37
- package/dist/api/routes/layout.js +0 -37
- package/dist/api/routes/metadata.js +0 -40
- package/dist/api/routes/migrations.js +0 -36
- package/dist/api/routes/ops.js +0 -52
- package/dist/api/routes/permission.js +0 -44
- package/dist/api/routes/plugin.js +0 -39
- package/dist/api/routes/public/applications.js +0 -174
- package/dist/api/routes/public/index.js +0 -140
- package/dist/api/routes/public/metrics.js +0 -30
- package/dist/api/routes/public/middleware/mapper.js +0 -97
- package/dist/api/routes/public/queries.js +0 -72
- package/dist/api/routes/public/rows.js +0 -158
- package/dist/api/routes/public/tables.js +0 -152
- package/dist/api/routes/public/users.js +0 -135
- package/dist/api/routes/public/utils/Endpoint.js +0 -36
- package/dist/api/routes/query.js +0 -47
- package/dist/api/routes/role.js +0 -40
- package/dist/api/routes/routing.js +0 -39
- package/dist/api/routes/row.js +0 -239
- package/dist/api/routes/screen.js +0 -39
- package/dist/api/routes/script.js +0 -35
- package/dist/api/routes/static.js +0 -80
- package/dist/api/routes/table.js +0 -163
- package/dist/api/routes/templates.js +0 -37
- package/dist/api/routes/user.js +0 -43
- package/dist/api/routes/utils/validators.js +0 -238
- package/dist/api/routes/view.js +0 -42
- package/dist/api/routes/webhook.js +0 -43
- package/dist/app.js +0 -132
- package/dist/automations/actions.js +0 -137
- package/dist/automations/automationUtils.js +0 -173
- package/dist/automations/bullboard.js +0 -71
- package/dist/automations/index.js +0 -43
- package/dist/automations/logging/index.js +0 -53
- package/dist/automations/steps/bash.js +0 -111
- package/dist/automations/steps/createRow.js +0 -108
- package/dist/automations/steps/delay.js +0 -53
- package/dist/automations/steps/deleteRow.js +0 -96
- package/dist/automations/steps/discord.js +0 -116
- package/dist/automations/steps/executeQuery.js +0 -134
- package/dist/automations/steps/executeScript.js +0 -106
- package/dist/automations/steps/filter.js +0 -112
- package/dist/automations/steps/loop.js +0 -54
- package/dist/automations/steps/make.js +0 -120
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -220
- package/dist/automations/steps/sendSmtpEmail.js +0 -115
- package/dist/automations/steps/serverLog.js +0 -65
- package/dist/automations/steps/slack.js +0 -98
- package/dist/automations/steps/updateRow.js +0 -144
- package/dist/automations/steps/utils.js +0 -56
- package/dist/automations/steps/zapier.js +0 -117
- package/dist/automations/triggerInfo/app.js +0 -36
- package/dist/automations/triggerInfo/cron.js +0 -35
- package/dist/automations/triggerInfo/index.js +0 -40
- package/dist/automations/triggerInfo/rowDeleted.js +0 -36
- package/dist/automations/triggerInfo/rowSaved.js +0 -44
- package/dist/automations/triggerInfo/rowUpdated.js +0 -44
- package/dist/automations/triggerInfo/webhook.js +0 -40
- package/dist/automations/triggers.js +0 -181
- package/dist/automations/utils.js +0 -275
- package/dist/constants/definitions.js +0 -2
- package/dist/constants/index.js +0 -181
- package/dist/constants/layouts.js +0 -148
- package/dist/constants/screens.js +0 -51
- package/dist/db/defaultData/datasource_bb_default.js +0 -574
- package/dist/db/defaultData/employeeImport.js +0 -155
- package/dist/db/defaultData/expensesImport.js +0 -117
- package/dist/db/defaultData/inventoryImport.js +0 -109
- package/dist/db/defaultData/jobsImport.js +0 -152
- package/dist/db/dynamoClient.js +0 -124
- package/dist/db/inMemoryView.js +0 -62
- package/dist/db/index.js +0 -43
- package/dist/db/linkedRows/LinkController.js +0 -392
- package/dist/db/linkedRows/LinkDocument.js +0 -33
- package/dist/db/linkedRows/index.js +0 -206
- package/dist/db/linkedRows/linkUtils.js +0 -131
- package/dist/db/newid.js +0 -7
- package/dist/db/utils.js +0 -248
- package/dist/db/views/staticViews.js +0 -144
- package/dist/ddApm.js +0 -11
- package/dist/definitions/automations.js +0 -8
- package/dist/definitions/common.js +0 -2
- package/dist/definitions/datasource.js +0 -7
- package/dist/definitions/openapi.js +0 -6
- package/dist/environment.js +0 -109
- package/dist/events/AutomationEmitter.js +0 -53
- package/dist/events/BudibaseEmitter.js +0 -25
- package/dist/events/docUpdates/index.js +0 -17
- package/dist/events/docUpdates/processors.js +0 -18
- package/dist/events/docUpdates/syncUsers.js +0 -49
- package/dist/events/index.js +0 -11
- package/dist/events/utils.js +0 -43
- package/dist/integrations/airtable.js +0 -147
- package/dist/integrations/arangodb.js +0 -103
- package/dist/integrations/base/query.js +0 -32
- package/dist/integrations/base/sql.js +0 -600
- package/dist/integrations/base/sqlTable.js +0 -167
- package/dist/integrations/base/types.js +0 -2
- package/dist/integrations/couchdb.js +0 -125
- package/dist/integrations/dynamodb.js +0 -194
- package/dist/integrations/elasticsearch.js +0 -186
- package/dist/integrations/firebase.js +0 -174
- package/dist/integrations/googlesheets.js +0 -455
- package/dist/integrations/index.js +0 -135
- package/dist/integrations/microsoftSqlServer.js +0 -273
- package/dist/integrations/mongodb.js +0 -614
- package/dist/integrations/mysql.js +0 -256
- package/dist/integrations/oracle.js +0 -375
- package/dist/integrations/postgres.js +0 -300
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -168
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -237
- package/dist/integrations/snowflake.js +0 -99
- package/dist/integrations/utils.js +0 -295
- package/dist/middleware/appInfo.js +0 -22
- package/dist/middleware/authorized.js +0 -112
- package/dist/middleware/builder.js +0 -93
- package/dist/middleware/currentapp.js +0 -103
- package/dist/middleware/joi-validator.js +0 -43
- package/dist/middleware/publicApi.js +0 -25
- package/dist/middleware/resourceId.js +0 -59
- package/dist/middleware/selfhost.js +0 -24
- package/dist/middleware/utils.js +0 -8
- package/dist/migrations/functions/appUrls.js +0 -42
- package/dist/migrations/functions/backfill/app/automations.js +0 -31
- package/dist/migrations/functions/backfill/app/datasources.js +0 -28
- package/dist/migrations/functions/backfill/app/layouts.js +0 -33
- package/dist/migrations/functions/backfill/app/queries.js +0 -50
- package/dist/migrations/functions/backfill/app/roles.js +0 -28
- package/dist/migrations/functions/backfill/app/screens.js +0 -28
- package/dist/migrations/functions/backfill/app/tables.js +0 -37
- package/dist/migrations/functions/backfill/app.js +0 -176
- package/dist/migrations/functions/backfill/global/configs.js +0 -67
- package/dist/migrations/functions/backfill/global/quotas.js +0 -60
- package/dist/migrations/functions/backfill/global/users.js +0 -50
- package/dist/migrations/functions/backfill/global.js +0 -205
- package/dist/migrations/functions/backfill/index.js +0 -32
- package/dist/migrations/functions/backfill/installation.js +0 -80
- package/dist/migrations/functions/syncQuotas.js +0 -52
- package/dist/migrations/functions/tableSettings.js +0 -130
- package/dist/migrations/functions/usageQuotas/index.js +0 -16
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -111
- package/dist/migrations/tests/helpers.js +0 -72
- package/dist/migrations/tests/structures.js +0 -37
- package/dist/sdk/app/applications/index.js +0 -28
- package/dist/sdk/app/applications/sync.js +0 -164
- package/dist/sdk/app/applications/utils.js +0 -21
- package/dist/sdk/app/automations/index.js +0 -29
- package/dist/sdk/app/automations/webhook.js +0 -54
- package/dist/sdk/app/backups/constants.js +0 -6
- package/dist/sdk/app/backups/exports.js +0 -160
- package/dist/sdk/app/backups/imports.js +0 -170
- package/dist/sdk/app/backups/index.js +0 -29
- package/dist/sdk/app/backups/statistics.js +0 -73
- package/dist/sdk/app/datasources/datasources.js +0 -166
- package/dist/sdk/app/datasources/index.js +0 -27
- package/dist/sdk/app/queries/index.js +0 -27
- package/dist/sdk/app/queries/queries.js +0 -60
- package/dist/sdk/app/rows/attachments.js +0 -61
- package/dist/sdk/app/rows/index.js +0 -28
- package/dist/sdk/app/rows/rows.js +0 -30
- package/dist/sdk/app/tables/index.js +0 -65
- package/dist/sdk/index.js +0 -27
- package/dist/sdk/plugins/index.js +0 -27
- package/dist/sdk/plugins/plugins.js +0 -53
- package/dist/sdk/users/index.js +0 -27
- package/dist/sdk/users/utils.js +0 -94
- package/dist/sdk/utils/index.js +0 -29
- package/dist/startup.js +0 -158
- package/dist/threads/automation.js +0 -450
- package/dist/threads/definitions.js +0 -2
- package/dist/threads/index.js +0 -140
- package/dist/threads/query.js +0 -265
- package/dist/threads/utils.js +0 -120
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utilities/appDirectoryTemplate/package.json +0 -10
- package/dist/utilities/budibaseDir.js +0 -5
- package/dist/utilities/centralPath.js +0 -27
- package/dist/utilities/csv.js +0 -33
- package/dist/utilities/fileSystem/app.js +0 -88
- package/dist/utilities/fileSystem/clientLibrary.js +0 -138
- package/dist/utilities/fileSystem/filesystem.js +0 -180
- package/dist/utilities/fileSystem/index.js +0 -21
- package/dist/utilities/fileSystem/plugin.js +0 -76
- package/dist/utilities/fileSystem/processor.js +0 -34
- package/dist/utilities/fileSystem/template.js +0 -47
- package/dist/utilities/global.js +0 -146
- package/dist/utilities/index.js +0 -143
- package/dist/utilities/redis.js +0 -117
- package/dist/utilities/retry.js +0 -30
- package/dist/utilities/routing/index.js +0 -39
- package/dist/utilities/rowProcessor/index.js +0 -282
- package/dist/utilities/rowProcessor/map.js +0 -116
- package/dist/utilities/rowProcessor/utils.js +0 -87
- package/dist/utilities/schema.js +0 -112
- package/dist/utilities/scriptRunner.js +0 -26
- package/dist/utilities/security.js +0 -57
- package/dist/utilities/statusCodes.js +0 -9
- package/dist/utilities/usageQuota/rows.js +0 -88
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/dist/utilities/users.js +0 -57
- package/dist/utilities/workerRequests.js +0 -171
- package/dist/watch.js +0 -53
- package/dist/websockets/client.js +0 -14
- package/dist/websockets/grid.js +0 -60
- package/dist/websockets/index.js +0 -17
- package/dist/websockets/websocket.js +0 -78
- package/src/automations/tests/zapier.spec.js +0 -27
- /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
- /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
- /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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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(
|
|
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 {
|
|
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
|
|
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
|
|
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
|
}
|
package/src/integrations/s3.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
-
|
|
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
|
|
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 {
|
|
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",
|
|
@@ -29,6 +38,9 @@ const SCHEMA: Integration = {
|
|
|
29
38
|
type: "password",
|
|
30
39
|
required: true,
|
|
31
40
|
},
|
|
41
|
+
role: {
|
|
42
|
+
type: "string",
|
|
43
|
+
},
|
|
32
44
|
warehouse: {
|
|
33
45
|
type: "string",
|
|
34
46
|
required: true,
|
|
@@ -65,6 +77,18 @@ class SnowflakeIntegration {
|
|
|
65
77
|
this.client = new Snowflake(config)
|
|
66
78
|
}
|
|
67
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
|
+
|
|
68
92
|
async internalQuery(query: SqlQuery) {
|
|
69
93
|
await this.client.connect()
|
|
70
94
|
try {
|