@budibase/server 2.6.19-alpha.5 → 2.6.19-alpha.50
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.6ebb99b3.css +6 -0
- package/builder/assets/index.a7585108.js +1869 -0
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32529 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +45001 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24417 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +33 -15
- 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 +25 -15
- package/src/api/controllers/deploy/index.ts +1 -0
- 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 +2 -2
- 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/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 +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/db/linkedRows/index.ts +5 -3
- package/src/environment.ts +3 -0
- package/src/integration-test/postgres.spec.ts +5 -5
- 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 +4 -4
- package/src/integrations/microsoftSqlServer.ts +4 -4
- package/src/integrations/mongodb.ts +3 -1
- package/src/integrations/mysql.ts +4 -4
- package/src/integrations/oracle.ts +4 -4
- package/src/integrations/postgres.ts +4 -4
- package/src/integrations/redis.ts +10 -2
- package/src/integrations/s3.ts +3 -1
- package/src/integrations/snowflake.ts +3 -1
- package/src/middleware/builder.ts +26 -18
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- 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 +77 -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 +207 -7
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- package/builder/assets/index.07382a47.css +0 -6
- package/builder/assets/index.3d5c50fb.js +0 -1786
- 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 -352
- 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 -45
- 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 -493
- package/dist/integrations/index.js +0 -138
- package/dist/integrations/microsoftSqlServer.js +0 -308
- package/dist/integrations/mongodb.js +0 -630
- package/dist/integrations/mysql.js +0 -291
- package/dist/integrations/oracle.js +0 -415
- package/dist/integrations/postgres.js +0 -335
- 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
|
@@ -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 = {
|
|
@@ -18,6 +19,9 @@ export const definition: AutomationStepSchema = {
|
|
|
18
19
|
stepId: AutomationActionStepId.integromat,
|
|
19
20
|
type: AutomationStepType.ACTION,
|
|
20
21
|
internal: false,
|
|
22
|
+
features: {
|
|
23
|
+
[AutomationFeature.LOOPING]: true,
|
|
24
|
+
},
|
|
21
25
|
inputs: {},
|
|
22
26
|
schema: {
|
|
23
27
|
inputs: {
|
|
@@ -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,
|
|
@@ -189,11 +189,13 @@ export async function attachFullLinkedDocs(table: Table, rows: Row[]) {
|
|
|
189
189
|
*/
|
|
190
190
|
export async function squashLinksToPrimaryDisplay(
|
|
191
191
|
table: Table,
|
|
192
|
-
enriched: Row[]
|
|
192
|
+
enriched: Row[] | Row
|
|
193
193
|
) {
|
|
194
194
|
// will populate this as we find them
|
|
195
195
|
const linkedTables = [table]
|
|
196
|
-
|
|
196
|
+
const isArray = Array.isArray(enriched)
|
|
197
|
+
let enrichedArray = !isArray ? [enriched] : enriched
|
|
198
|
+
for (let row of enrichedArray) {
|
|
197
199
|
// this only fetches the table if its not already in array
|
|
198
200
|
const rowTable = await getLinkedTable(row.tableId!, linkedTables)
|
|
199
201
|
for (let [column, schema] of Object.entries(rowTable?.schema || {})) {
|
|
@@ -213,5 +215,5 @@ export async function squashLinksToPrimaryDisplay(
|
|
|
213
215
|
row[column] = newLinks
|
|
214
216
|
}
|
|
215
217
|
}
|
|
216
|
-
return
|
|
218
|
+
return isArray ? enrichedArray : enrichedArray[0]
|
|
217
219
|
}
|
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,
|
|
@@ -79,6 +80,7 @@ const environment = {
|
|
|
79
80
|
ENABLE_ANALYTICS: process.env.ENABLE_ANALYTICS,
|
|
80
81
|
SELF_HOSTED: process.env.SELF_HOSTED,
|
|
81
82
|
HTTP_MB_LIMIT: process.env.HTTP_MB_LIMIT,
|
|
83
|
+
FORKED_PROCESS_NAME: process.env.FORKED_PROCESS_NAME || "main",
|
|
82
84
|
// old
|
|
83
85
|
CLIENT_ID: process.env.CLIENT_ID,
|
|
84
86
|
_set(key: string, value: any) {
|
|
@@ -96,6 +98,7 @@ const environment = {
|
|
|
96
98
|
isInThread: () => {
|
|
97
99
|
return process.env.FORKED_PROCESS
|
|
98
100
|
},
|
|
101
|
+
TOP_LEVEL_PATH: process.env.TOP_LEVEL_PATH,
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
// threading can cause memory issues with node-ts in development
|
|
@@ -25,6 +25,7 @@ const config = setup.getConfig()!
|
|
|
25
25
|
jest.setTimeout(30000)
|
|
26
26
|
|
|
27
27
|
jest.unmock("pg")
|
|
28
|
+
jest.mock("../websockets")
|
|
28
29
|
|
|
29
30
|
describe("postgres integrations", () => {
|
|
30
31
|
let makeRequest: MakeRequestResponse,
|
|
@@ -1055,13 +1056,12 @@ describe("postgres integrations", () => {
|
|
|
1055
1056
|
})
|
|
1056
1057
|
})
|
|
1057
1058
|
|
|
1058
|
-
describe("
|
|
1059
|
+
describe("POST /api/datasources/info", () => {
|
|
1059
1060
|
it("should fetch information about postgres datasource", async () => {
|
|
1060
1061
|
const primaryName = primaryPostgresTable.name
|
|
1061
|
-
const response = await makeRequest(
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
)
|
|
1062
|
+
const response = await makeRequest("post", "/api/datasources/info", {
|
|
1063
|
+
datasource: postgresDatasource,
|
|
1064
|
+
})
|
|
1065
1065
|
expect(response.status).toBe(200)
|
|
1066
1066
|
expect(response.body.tableNames).toBeDefined()
|
|
1067
1067
|
expect(response.body.tableNames.indexOf(primaryName)).not.toBe(-1)
|
|
@@ -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,
|
|
@@ -66,10 +66,10 @@ const SCHEMA: Integration = {
|
|
|
66
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:
|
|
70
|
-
DatasourceFeature.CONNECTION_CHECKING,
|
|
71
|
-
DatasourceFeature.FETCH_TABLE_NAMES,
|
|
72
|
-
|
|
69
|
+
features: {
|
|
70
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
71
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
72
|
+
},
|
|
73
73
|
datasource: {
|
|
74
74
|
spreadsheetId: {
|
|
75
75
|
display: "Google Sheet URL",
|
|
@@ -40,10 +40,10 @@ const SCHEMA: Integration = {
|
|
|
40
40
|
"Microsoft SQL Server is a relational database management system developed by Microsoft. ",
|
|
41
41
|
friendlyName: "MS SQL Server",
|
|
42
42
|
type: "Relational",
|
|
43
|
-
features:
|
|
44
|
-
DatasourceFeature.CONNECTION_CHECKING,
|
|
45
|
-
DatasourceFeature.FETCH_TABLE_NAMES,
|
|
46
|
-
|
|
43
|
+
features: {
|
|
44
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
45
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
46
|
+
},
|
|
47
47
|
datasource: {
|
|
48
48
|
user: {
|
|
49
49
|
type: DatasourceFieldType.STRING,
|
|
@@ -40,7 +40,9 @@ const getSchema = () => {
|
|
|
40
40
|
type: "Non-relational",
|
|
41
41
|
description:
|
|
42
42
|
"MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
|
|
43
|
-
features:
|
|
43
|
+
features: {
|
|
44
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
45
|
+
},
|
|
44
46
|
datasource: {
|
|
45
47
|
connectionString: {
|
|
46
48
|
type: DatasourceFieldType.STRING,
|
|
@@ -36,10 +36,10 @@ const SCHEMA: Integration = {
|
|
|
36
36
|
type: "Relational",
|
|
37
37
|
description:
|
|
38
38
|
"MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
|
|
39
|
-
features:
|
|
40
|
-
DatasourceFeature.CONNECTION_CHECKING,
|
|
41
|
-
DatasourceFeature.FETCH_TABLE_NAMES,
|
|
42
|
-
|
|
39
|
+
features: {
|
|
40
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
41
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
42
|
+
},
|
|
43
43
|
datasource: {
|
|
44
44
|
host: {
|
|
45
45
|
type: DatasourceFieldType.STRING,
|