@budibase/server 2.6.19-alpha.2 → 2.6.19-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +7 -6
- package/Dockerfile +16 -8
- package/builder/assets/{index.6c1171e2.js → index.47cc7efc.js} +343 -334
- package/builder/assets/{index.07382a47.css → index.ffb6a106.css} +2 -2
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32364 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +44582 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24345 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +30 -13
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +16 -0
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/datasource.ts +5 -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/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/automations/actions.ts +8 -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 +4 -0
- 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 +4 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/inMemoryView.ts +1 -0
- package/src/environment.ts +2 -0
- package/src/integration-test/postgres.spec.ts +47 -4
- package/src/integrations/airtable.ts +3 -1
- package/src/integrations/arangodb.ts +3 -1
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +3 -1
- package/src/integrations/dynamodb.ts +3 -1
- package/src/integrations/elasticsearch.ts +3 -1
- package/src/integrations/firebase.ts +3 -1
- package/src/integrations/googlesheets.ts +11 -3
- package/src/integrations/microsoftSqlServer.ts +18 -2
- package/src/integrations/mongodb.ts +3 -1
- package/src/integrations/mysql.ts +27 -11
- package/src/integrations/oracle.ts +11 -1
- package/src/integrations/postgres.ts +27 -10
- package/src/integrations/redis.ts +3 -1
- package/src/integrations/s3.ts +3 -1
- package/src/integrations/snowflake.ts +3 -1
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +39 -0
- package/src/utilities/fileSystem/app.ts +1 -1
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- 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 -337
- 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 -44
- 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 -134
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -216
- 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 -130
- 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 -173
- package/dist/integrations/arangodb.js +0 -119
- 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 -140
- package/dist/integrations/dynamodb.js +0 -210
- package/dist/integrations/elasticsearch.js +0 -201
- package/dist/integrations/firebase.js +0 -189
- package/dist/integrations/googlesheets.js +0 -484
- package/dist/integrations/index.js +0 -138
- package/dist/integrations/microsoftSqlServer.js +0 -289
- package/dist/integrations/mongodb.js +0 -630
- package/dist/integrations/mysql.js +0 -272
- package/dist/integrations/oracle.js +0 -404
- package/dist/integrations/postgres.js +0 -319
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -187
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -256
- package/dist/integrations/snowflake.js +0 -114
- 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 -49
- 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 -173
- 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 -87
- 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 -149
- 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/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
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Configuration, OpenAIApi } from "openai"
|
|
2
|
+
import {
|
|
3
|
+
AutomationActionStepId,
|
|
4
|
+
AutomationStepSchema,
|
|
5
|
+
AutomationStepInput,
|
|
6
|
+
AutomationStepType,
|
|
7
|
+
AutomationIOType,
|
|
8
|
+
} from "@budibase/types"
|
|
9
|
+
import * as automationUtils from "../automationUtils"
|
|
10
|
+
import environment from "../../environment"
|
|
11
|
+
|
|
12
|
+
enum Model {
|
|
13
|
+
GPT_35_TURBO = "gpt-3.5-turbo",
|
|
14
|
+
// will only work with api keys that have access to the GPT4 API
|
|
15
|
+
GPT_4 = "gpt-4",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const definition: AutomationStepSchema = {
|
|
19
|
+
name: "OpenAI",
|
|
20
|
+
tagline: "Send prompts to ChatGPT",
|
|
21
|
+
icon: "Algorithm",
|
|
22
|
+
description: "Interact with the OpenAI ChatGPT API.",
|
|
23
|
+
type: AutomationStepType.ACTION,
|
|
24
|
+
internal: true,
|
|
25
|
+
features: {},
|
|
26
|
+
stepId: AutomationActionStepId.OPENAI,
|
|
27
|
+
inputs: {
|
|
28
|
+
prompt: "",
|
|
29
|
+
},
|
|
30
|
+
schema: {
|
|
31
|
+
inputs: {
|
|
32
|
+
properties: {
|
|
33
|
+
prompt: {
|
|
34
|
+
type: AutomationIOType.STRING,
|
|
35
|
+
title: "Prompt",
|
|
36
|
+
},
|
|
37
|
+
model: {
|
|
38
|
+
type: AutomationIOType.STRING,
|
|
39
|
+
title: "Model",
|
|
40
|
+
enum: Object.values(Model),
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
required: ["prompt", "model"],
|
|
44
|
+
},
|
|
45
|
+
outputs: {
|
|
46
|
+
properties: {
|
|
47
|
+
success: {
|
|
48
|
+
type: AutomationIOType.BOOLEAN,
|
|
49
|
+
description: "Whether the action was successful",
|
|
50
|
+
},
|
|
51
|
+
response: {
|
|
52
|
+
type: AutomationIOType.STRING,
|
|
53
|
+
description: "What was output",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
required: ["success", "response"],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export async function run({ inputs, context }: AutomationStepInput) {
|
|
62
|
+
if (!environment.OPENAI_API_KEY) {
|
|
63
|
+
return {
|
|
64
|
+
success: false,
|
|
65
|
+
response:
|
|
66
|
+
"OpenAI API Key not configured - please add the OPENAI_API_KEY environment variable.",
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (inputs.prompt == null) {
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
response: "Budibase OpenAI Automation Failed: No prompt supplied",
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
const configuration = new Configuration({
|
|
79
|
+
apiKey: environment.OPENAI_API_KEY,
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
const openai = new OpenAIApi(configuration)
|
|
83
|
+
|
|
84
|
+
const completion = await openai.createChatCompletion({
|
|
85
|
+
model: inputs.model,
|
|
86
|
+
messages: [
|
|
87
|
+
{
|
|
88
|
+
role: "user",
|
|
89
|
+
content: inputs.prompt,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
const response = completion?.data?.choices[0]?.message?.content
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
response,
|
|
98
|
+
success: true,
|
|
99
|
+
}
|
|
100
|
+
} catch (err) {
|
|
101
|
+
return {
|
|
102
|
+
success: false,
|
|
103
|
+
response: automationUtils.getError(err),
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -4,6 +4,7 @@ import * as automationUtils from "../automationUtils"
|
|
|
4
4
|
import {
|
|
5
5
|
AutomationActionStepId,
|
|
6
6
|
AutomationCustomIOType,
|
|
7
|
+
AutomationFeature,
|
|
7
8
|
AutomationIOType,
|
|
8
9
|
AutomationStepInput,
|
|
9
10
|
AutomationStepSchema,
|
|
@@ -32,6 +33,9 @@ export const definition: AutomationStepSchema = {
|
|
|
32
33
|
description: "Send a request of specified method to a URL",
|
|
33
34
|
type: AutomationStepType.ACTION,
|
|
34
35
|
internal: true,
|
|
36
|
+
features: {
|
|
37
|
+
[AutomationFeature.LOOPING]: true,
|
|
38
|
+
},
|
|
35
39
|
stepId: AutomationActionStepId.OUTGOING_WEBHOOK,
|
|
36
40
|
inputs: {
|
|
37
41
|
requestMethod: "POST",
|
|
@@ -6,6 +6,7 @@ import * as automationUtils from "../automationUtils"
|
|
|
6
6
|
import {
|
|
7
7
|
AutomationActionStepId,
|
|
8
8
|
AutomationCustomIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
AutomationIOType,
|
|
10
11
|
AutomationStepInput,
|
|
11
12
|
AutomationStepSchema,
|
|
@@ -42,6 +43,9 @@ export const definition: AutomationStepSchema = {
|
|
|
42
43
|
type: AutomationStepType.ACTION,
|
|
43
44
|
stepId: AutomationActionStepId.QUERY_ROWS,
|
|
44
45
|
internal: true,
|
|
46
|
+
features: {
|
|
47
|
+
[AutomationFeature.LOOPING]: true,
|
|
48
|
+
},
|
|
45
49
|
inputs: {},
|
|
46
50
|
schema: {
|
|
47
51
|
inputs: {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -15,6 +16,9 @@ export const definition: AutomationStepSchema = {
|
|
|
15
16
|
name: "Send Email (SMTP)",
|
|
16
17
|
type: AutomationStepType.ACTION,
|
|
17
18
|
internal: true,
|
|
19
|
+
features: {
|
|
20
|
+
[AutomationFeature.LOOPING]: true,
|
|
21
|
+
},
|
|
18
22
|
stepId: AutomationActionStepId.SEND_EMAIL_SMTP,
|
|
19
23
|
inputs: {},
|
|
20
24
|
schema: {
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
AutomationStepInput,
|
|
5
5
|
AutomationStepType,
|
|
6
6
|
AutomationIOType,
|
|
7
|
+
AutomationFeature,
|
|
7
8
|
} from "@budibase/types"
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -19,6 +20,9 @@ export const definition: AutomationStepSchema = {
|
|
|
19
20
|
description: "Logs the given text to the server (using console.log)",
|
|
20
21
|
type: AutomationStepType.ACTION,
|
|
21
22
|
internal: true,
|
|
23
|
+
features: {
|
|
24
|
+
[AutomationFeature.LOOPING]: true,
|
|
25
|
+
},
|
|
22
26
|
stepId: AutomationActionStepId.SERVER_LOG,
|
|
23
27
|
inputs: {
|
|
24
28
|
text: "",
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -16,6 +17,9 @@ export const definition: AutomationStepSchema = {
|
|
|
16
17
|
stepId: AutomationActionStepId.slack,
|
|
17
18
|
type: AutomationStepType.ACTION,
|
|
18
19
|
internal: false,
|
|
20
|
+
features: {
|
|
21
|
+
[AutomationFeature.LOOPING]: true,
|
|
22
|
+
},
|
|
19
23
|
inputs: {},
|
|
20
24
|
schema: {
|
|
21
25
|
inputs: {
|
|
@@ -4,6 +4,7 @@ import { buildCtx } from "./utils"
|
|
|
4
4
|
import {
|
|
5
5
|
AutomationActionStepId,
|
|
6
6
|
AutomationCustomIOType,
|
|
7
|
+
AutomationFeature,
|
|
7
8
|
AutomationIOType,
|
|
8
9
|
AutomationStepInput,
|
|
9
10
|
AutomationStepSchema,
|
|
@@ -17,6 +18,9 @@ export const definition: AutomationStepSchema = {
|
|
|
17
18
|
description: "Update a row in your database",
|
|
18
19
|
type: AutomationStepType.ACTION,
|
|
19
20
|
internal: true,
|
|
21
|
+
features: {
|
|
22
|
+
[AutomationFeature.LOOPING]: true,
|
|
23
|
+
},
|
|
20
24
|
stepId: AutomationActionStepId.UPDATE_ROW,
|
|
21
25
|
inputs: {},
|
|
22
26
|
schema: {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -13,6 +14,9 @@ export const definition: AutomationStepSchema = {
|
|
|
13
14
|
stepId: AutomationActionStepId.zapier,
|
|
14
15
|
type: AutomationStepType.ACTION,
|
|
15
16
|
internal: false,
|
|
17
|
+
features: {
|
|
18
|
+
[AutomationFeature.LOOPING]: true,
|
|
19
|
+
},
|
|
16
20
|
description: "Trigger a Zapier Zap via webhooks",
|
|
17
21
|
tagline: "Trigger a Zapier Zap",
|
|
18
22
|
icon: "ri-flashlight-line",
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const setup = require("./utilities")
|
|
2
|
+
import environment from "../../environment"
|
|
3
|
+
import openai from "openai"
|
|
4
|
+
|
|
5
|
+
jest.mock(
|
|
6
|
+
"openai",
|
|
7
|
+
jest.fn(() => ({
|
|
8
|
+
Configuration: jest.fn(),
|
|
9
|
+
OpenAIApi: jest.fn(() => ({
|
|
10
|
+
createChatCompletion: jest.fn(() => ({
|
|
11
|
+
data: {
|
|
12
|
+
choices: [
|
|
13
|
+
{
|
|
14
|
+
message: {
|
|
15
|
+
content: "This is a test",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
})),
|
|
21
|
+
})),
|
|
22
|
+
}))
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
const OPENAI_PROMPT = "What is the meaning of life?"
|
|
26
|
+
|
|
27
|
+
describe("test the openai action", () => {
|
|
28
|
+
let config = setup.getConfig()
|
|
29
|
+
|
|
30
|
+
beforeAll(async () => {
|
|
31
|
+
await config.init()
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
environment.OPENAI_API_KEY = "abc123"
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
afterAll(setup.afterAll)
|
|
39
|
+
|
|
40
|
+
it("should present the correct error message when the OPENAI_API_KEY variable isn't set", async () => {
|
|
41
|
+
delete environment.OPENAI_API_KEY
|
|
42
|
+
|
|
43
|
+
let res = await setup.runStep("OPENAI", {
|
|
44
|
+
prompt: OPENAI_PROMPT,
|
|
45
|
+
})
|
|
46
|
+
expect(res.response).toEqual(
|
|
47
|
+
"OpenAI API Key not configured - please add the OPENAI_API_KEY environment variable."
|
|
48
|
+
)
|
|
49
|
+
expect(res.success).toBeFalsy()
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it("should be able to receive a response from ChatGPT given a prompt", async () => {
|
|
53
|
+
const res = await setup.runStep("OPENAI", {
|
|
54
|
+
prompt: OPENAI_PROMPT,
|
|
55
|
+
})
|
|
56
|
+
expect(res.response).toEqual("This is a test")
|
|
57
|
+
expect(res.success).toBeTruthy()
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it("should present the correct error message when a prompt is not provided", async () => {
|
|
61
|
+
const res = await setup.runStep("OPENAI", {
|
|
62
|
+
prompt: null,
|
|
63
|
+
})
|
|
64
|
+
expect(res.response).toEqual(
|
|
65
|
+
"Budibase OpenAI Automation Failed: No prompt supplied"
|
|
66
|
+
)
|
|
67
|
+
expect(res.success).toBeFalsy()
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it("should present the correct error message when an error is thrown from the createChatCompletion call", async () => {
|
|
71
|
+
openai.OpenAIApi.mockImplementation(() => ({
|
|
72
|
+
createChatCompletion: jest.fn(() => {
|
|
73
|
+
throw new Error("An error occurred while calling createChatCompletion")
|
|
74
|
+
}),
|
|
75
|
+
}))
|
|
76
|
+
|
|
77
|
+
const res = await setup.runStep("OPENAI", {
|
|
78
|
+
prompt: OPENAI_PROMPT,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
expect(res.response).toEqual(
|
|
82
|
+
"Error: An error occurred while calling createChatCompletion"
|
|
83
|
+
)
|
|
84
|
+
expect(res.success).toBeFalsy()
|
|
85
|
+
})
|
|
86
|
+
})
|
|
@@ -10,6 +10,7 @@ import * as utils from "./utils"
|
|
|
10
10
|
import env from "../environment"
|
|
11
11
|
import { context, db as dbCore } from "@budibase/backend-core"
|
|
12
12
|
import { Automation, Row, AutomationData, AutomationJob } from "@budibase/types"
|
|
13
|
+
import { executeSynchronously } from "../threads/automation"
|
|
13
14
|
|
|
14
15
|
export const TRIGGER_DEFINITIONS = definitions
|
|
15
16
|
const JOB_OPTS = {
|
|
@@ -91,7 +92,7 @@ emitter.on("row:delete", async function (event) {
|
|
|
91
92
|
|
|
92
93
|
export async function externalTrigger(
|
|
93
94
|
automation: Automation,
|
|
94
|
-
params: { fields: Record<string, any
|
|
95
|
+
params: { fields: Record<string, any>; timeout?: number },
|
|
95
96
|
{ getResponses }: { getResponses?: boolean } = {}
|
|
96
97
|
) {
|
|
97
98
|
if (
|
|
@@ -118,7 +119,7 @@ export async function externalTrigger(
|
|
|
118
119
|
automation,
|
|
119
120
|
}
|
|
120
121
|
const job = { data } as AutomationJob
|
|
121
|
-
return
|
|
122
|
+
return executeSynchronously(job)
|
|
122
123
|
} else {
|
|
123
124
|
return automationQueue.add(data, JOB_OPTS)
|
|
124
125
|
}
|
package/src/constants/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { objectStore, roles, constants } from "@budibase/backend-core"
|
|
2
|
+
import { FieldType as FieldTypes } from "@budibase/types"
|
|
2
3
|
export { FieldType as FieldTypes, RelationshipTypes } from "@budibase/types"
|
|
3
4
|
|
|
4
5
|
export enum FilterTypes {
|
|
@@ -24,14 +25,14 @@ export const NoEmptyFilterStrings = [
|
|
|
24
25
|
]
|
|
25
26
|
|
|
26
27
|
export const CanSwitchTypes = [
|
|
27
|
-
[
|
|
28
|
+
[FieldTypes.JSON, FieldTypes.ARRAY],
|
|
28
29
|
[
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
FieldTypes.STRING,
|
|
31
|
+
FieldTypes.OPTIONS,
|
|
32
|
+
FieldTypes.LONGFORM,
|
|
33
|
+
FieldTypes.BARCODEQR,
|
|
33
34
|
],
|
|
34
|
-
[
|
|
35
|
+
[FieldTypes.BOOLEAN, FieldTypes.NUMBER],
|
|
35
36
|
]
|
|
36
37
|
|
|
37
38
|
export const SwitchableTypes = CanSwitchTypes.reduce((prev, current) =>
|
|
@@ -77,9 +78,9 @@ export const USERS_TABLE_SCHEMA = {
|
|
|
77
78
|
// TODO: ADMIN PANEL - when implemented this doesn't need to be carried out
|
|
78
79
|
schema: {
|
|
79
80
|
email: {
|
|
80
|
-
type:
|
|
81
|
+
type: FieldTypes.STRING,
|
|
81
82
|
constraints: {
|
|
82
|
-
type:
|
|
83
|
+
type: FieldTypes.STRING,
|
|
83
84
|
email: true,
|
|
84
85
|
length: {
|
|
85
86
|
maximum: "",
|
|
@@ -92,27 +93,27 @@ export const USERS_TABLE_SCHEMA = {
|
|
|
92
93
|
firstName: {
|
|
93
94
|
name: "firstName",
|
|
94
95
|
fieldName: "firstName",
|
|
95
|
-
type:
|
|
96
|
+
type: FieldTypes.STRING,
|
|
96
97
|
constraints: {
|
|
97
|
-
type:
|
|
98
|
+
type: FieldTypes.STRING,
|
|
98
99
|
presence: false,
|
|
99
100
|
},
|
|
100
101
|
},
|
|
101
102
|
lastName: {
|
|
102
103
|
name: "lastName",
|
|
103
104
|
fieldName: "lastName",
|
|
104
|
-
type:
|
|
105
|
+
type: FieldTypes.STRING,
|
|
105
106
|
constraints: {
|
|
106
|
-
type:
|
|
107
|
+
type: FieldTypes.STRING,
|
|
107
108
|
presence: false,
|
|
108
109
|
},
|
|
109
110
|
},
|
|
110
111
|
roleId: {
|
|
111
112
|
fieldName: "roleId",
|
|
112
113
|
name: "roleId",
|
|
113
|
-
type:
|
|
114
|
+
type: FieldTypes.OPTIONS,
|
|
114
115
|
constraints: {
|
|
115
|
-
type:
|
|
116
|
+
type: FieldTypes.STRING,
|
|
116
117
|
presence: false,
|
|
117
118
|
inclusion: Object.values(roles.BUILTIN_ROLE_IDS),
|
|
118
119
|
},
|
|
@@ -120,9 +121,9 @@ export const USERS_TABLE_SCHEMA = {
|
|
|
120
121
|
status: {
|
|
121
122
|
fieldName: "status",
|
|
122
123
|
name: "status",
|
|
123
|
-
type:
|
|
124
|
+
type: FieldTypes.OPTIONS,
|
|
124
125
|
constraints: {
|
|
125
|
-
type:
|
|
126
|
+
type: FieldTypes.STRING,
|
|
126
127
|
presence: false,
|
|
127
128
|
inclusion: Object.values(constants.UserStatus),
|
|
128
129
|
},
|
package/src/db/inMemoryView.ts
CHANGED
|
@@ -25,6 +25,7 @@ export async function runView(
|
|
|
25
25
|
}))
|
|
26
26
|
)
|
|
27
27
|
let fn = (doc: Document, emit: any) => emit(doc._id)
|
|
28
|
+
// BUDI-7060 -> indirect eval call appears to cause issues in cloud
|
|
28
29
|
eval("fn = " + view?.map?.replace("function (doc)", "function (doc, emit)"))
|
|
29
30
|
const queryFns: any = {
|
|
30
31
|
meta: view.meta,
|
package/src/environment.ts
CHANGED
|
@@ -71,6 +71,7 @@ const environment = {
|
|
|
71
71
|
BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL,
|
|
72
72
|
BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD,
|
|
73
73
|
PLUGINS_DIR: process.env.PLUGINS_DIR || "/plugins",
|
|
74
|
+
OPENAI_API_KEY: process.env.OPENAI_API_KEY,
|
|
74
75
|
// flags
|
|
75
76
|
ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
|
|
76
77
|
DISABLE_THREADING: process.env.DISABLE_THREADING,
|
|
@@ -96,6 +97,7 @@ const environment = {
|
|
|
96
97
|
isInThread: () => {
|
|
97
98
|
return process.env.FORKED_PROCESS
|
|
98
99
|
},
|
|
100
|
+
TOP_LEVEL_PATH: process.env.TOP_LEVEL_PATH,
|
|
99
101
|
}
|
|
100
102
|
|
|
101
103
|
// threading can cause memory issues with node-ts in development
|
|
@@ -26,7 +26,7 @@ jest.setTimeout(30000)
|
|
|
26
26
|
|
|
27
27
|
jest.unmock("pg")
|
|
28
28
|
|
|
29
|
-
describe("
|
|
29
|
+
describe("postgres integrations", () => {
|
|
30
30
|
let makeRequest: MakeRequestResponse,
|
|
31
31
|
postgresDatasource: Datasource,
|
|
32
32
|
primaryPostgresTable: Table,
|
|
@@ -52,8 +52,8 @@ describe("row api - postgres", () => {
|
|
|
52
52
|
makeRequest = generateMakeRequest(apiKey, true)
|
|
53
53
|
})
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
function pgDatasourceConfig() {
|
|
56
|
+
return {
|
|
57
57
|
datasource: {
|
|
58
58
|
type: "datasource",
|
|
59
59
|
source: SourceName.POSTGRES,
|
|
@@ -70,7 +70,11 @@ describe("row api - postgres", () => {
|
|
|
70
70
|
ca: false,
|
|
71
71
|
},
|
|
72
72
|
},
|
|
73
|
-
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
beforeEach(async () => {
|
|
77
|
+
postgresDatasource = await config.createDatasource(pgDatasourceConfig())
|
|
74
78
|
|
|
75
79
|
async function createAuxTable(prefix: string) {
|
|
76
80
|
return await config.createTable({
|
|
@@ -1024,4 +1028,43 @@ describe("row api - postgres", () => {
|
|
|
1024
1028
|
})
|
|
1025
1029
|
})
|
|
1026
1030
|
})
|
|
1031
|
+
|
|
1032
|
+
describe("POST /api/datasources/verify", () => {
|
|
1033
|
+
it("should be able to verify the connection", async () => {
|
|
1034
|
+
const config = pgDatasourceConfig()
|
|
1035
|
+
const response = await makeRequest(
|
|
1036
|
+
"post",
|
|
1037
|
+
"/api/datasources/verify",
|
|
1038
|
+
config
|
|
1039
|
+
)
|
|
1040
|
+
expect(response.status).toBe(200)
|
|
1041
|
+
expect(response.body.connected).toBe(true)
|
|
1042
|
+
})
|
|
1043
|
+
|
|
1044
|
+
it("should state an invalid datasource cannot connect", async () => {
|
|
1045
|
+
const config = pgDatasourceConfig()
|
|
1046
|
+
config.datasource.config.password = "wrongpassword"
|
|
1047
|
+
const response = await makeRequest(
|
|
1048
|
+
"post",
|
|
1049
|
+
"/api/datasources/verify",
|
|
1050
|
+
config
|
|
1051
|
+
)
|
|
1052
|
+
expect(response.status).toBe(200)
|
|
1053
|
+
expect(response.body.connected).toBe(false)
|
|
1054
|
+
expect(response.body.error).toBeDefined()
|
|
1055
|
+
})
|
|
1056
|
+
})
|
|
1057
|
+
|
|
1058
|
+
describe("GET /api/datasources/:datasourceId/info", () => {
|
|
1059
|
+
it("should fetch information about postgres datasource", async () => {
|
|
1060
|
+
const primaryName = primaryPostgresTable.name
|
|
1061
|
+
const response = await makeRequest(
|
|
1062
|
+
"get",
|
|
1063
|
+
`/api/datasources/${postgresDatasource._id}/info`
|
|
1064
|
+
)
|
|
1065
|
+
expect(response.status).toBe(200)
|
|
1066
|
+
expect(response.body.tableNames).toBeDefined()
|
|
1067
|
+
expect(response.body.tableNames.indexOf(primaryName)).not.toBe(-1)
|
|
1068
|
+
})
|
|
1069
|
+
})
|
|
1027
1070
|
})
|
|
@@ -20,7 +20,9 @@ const SCHEMA: Integration = {
|
|
|
20
20
|
"Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
|
|
21
21
|
friendlyName: "Airtable",
|
|
22
22
|
type: "Spreadsheet",
|
|
23
|
-
features:
|
|
23
|
+
features: {
|
|
24
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
25
|
+
},
|
|
24
26
|
datasource: {
|
|
25
27
|
apiKey: {
|
|
26
28
|
type: DatasourceFieldType.PASSWORD,
|
|
@@ -23,7 +23,9 @@ const SCHEMA: Integration = {
|
|
|
23
23
|
type: "Non-relational",
|
|
24
24
|
description:
|
|
25
25
|
"ArangoDB is a scalable open-source multi-model database natively supporting graph, document and search. All supported data models & access patterns can be combined in queries allowing for maximal flexibility. ",
|
|
26
|
-
features:
|
|
26
|
+
features: {
|
|
27
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
28
|
+
},
|
|
27
29
|
datasource: {
|
|
28
30
|
url: {
|
|
29
31
|
type: DatasourceFieldType.STRING,
|
|
@@ -20,7 +20,9 @@ const SCHEMA: Integration = {
|
|
|
20
20
|
type: "Non-relational",
|
|
21
21
|
description:
|
|
22
22
|
"Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.",
|
|
23
|
-
features:
|
|
23
|
+
features: {
|
|
24
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
25
|
+
},
|
|
24
26
|
datasource: {
|
|
25
27
|
url: {
|
|
26
28
|
type: DatasourceFieldType.STRING,
|
|
@@ -25,7 +25,9 @@ const SCHEMA: Integration = {
|
|
|
25
25
|
"Amazon DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale.",
|
|
26
26
|
friendlyName: "DynamoDB",
|
|
27
27
|
type: "Non-relational",
|
|
28
|
-
features:
|
|
28
|
+
features: {
|
|
29
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
30
|
+
},
|
|
29
31
|
datasource: {
|
|
30
32
|
region: {
|
|
31
33
|
type: DatasourceFieldType.STRING,
|
|
@@ -22,7 +22,9 @@ const SCHEMA: Integration = {
|
|
|
22
22
|
"Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.",
|
|
23
23
|
friendlyName: "ElasticSearch",
|
|
24
24
|
type: "Non-relational",
|
|
25
|
-
features:
|
|
25
|
+
features: {
|
|
26
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
27
|
+
},
|
|
26
28
|
datasource: {
|
|
27
29
|
url: {
|
|
28
30
|
type: DatasourceFieldType.STRING,
|
|
@@ -20,7 +20,9 @@ const SCHEMA: Integration = {
|
|
|
20
20
|
type: "Non-relational",
|
|
21
21
|
description:
|
|
22
22
|
"Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",
|
|
23
|
-
features:
|
|
23
|
+
features: {
|
|
24
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
25
|
+
},
|
|
24
26
|
datasource: {
|
|
25
27
|
email: {
|
|
26
28
|
type: DatasourceFieldType.STRING,
|
|
@@ -63,10 +63,13 @@ const SCHEMA: Integration = {
|
|
|
63
63
|
relationships: false,
|
|
64
64
|
docs: "https://developers.google.com/sheets/api/quickstart/nodejs",
|
|
65
65
|
description:
|
|
66
|
-
"Create and collaborate on online spreadsheets in real-time and from any device.
|
|
66
|
+
"Create and collaborate on online spreadsheets in real-time and from any device.",
|
|
67
67
|
friendlyName: "Google Sheets",
|
|
68
68
|
type: "Spreadsheet",
|
|
69
|
-
features:
|
|
69
|
+
features: {
|
|
70
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
71
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
72
|
+
},
|
|
70
73
|
datasource: {
|
|
71
74
|
spreadsheetId: {
|
|
72
75
|
display: "Google Sheet URL",
|
|
@@ -145,7 +148,6 @@ class GoogleSheetsIntegration implements DatasourcePlus {
|
|
|
145
148
|
async testConnection(): Promise<ConnectionInfo> {
|
|
146
149
|
try {
|
|
147
150
|
await this.connect()
|
|
148
|
-
await this.client.loadInfo()
|
|
149
151
|
return { connected: true }
|
|
150
152
|
} catch (e: any) {
|
|
151
153
|
return {
|
|
@@ -240,6 +242,12 @@ class GoogleSheetsIntegration implements DatasourcePlus {
|
|
|
240
242
|
}
|
|
241
243
|
}
|
|
242
244
|
|
|
245
|
+
async getTableNames(): Promise<string[]> {
|
|
246
|
+
await this.connect()
|
|
247
|
+
const sheets = this.client.sheetsByIndex
|
|
248
|
+
return sheets.map(s => s.title)
|
|
249
|
+
}
|
|
250
|
+
|
|
243
251
|
getTableSchema(title: string, headerValues: string[], id?: string) {
|
|
244
252
|
// base table
|
|
245
253
|
const table: Table = {
|