@budibase/server 2.6.19-alpha.1 → 2.6.19-alpha.10
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.b9eeb2a8.js → index.7b26bbdb.js} +356 -348
- package/builder/assets/{index.07382a47.css → index.ec1c6a1a.css} +2 -2
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32190 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +44342 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24307 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +29 -13
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/datasource.ts +16 -0
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/routes/datasource.ts +5 -0
- package/src/api/routes/static.ts +3 -1
- package/src/api/routes/tests/datasource.spec.ts +1 -1
- package/src/automations/actions.ts +5 -0
- package/src/automations/steps/openai.ts +105 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/constants/index.ts +17 -16
- package/src/db/inMemoryView.ts +3 -1
- package/src/environment.ts +2 -0
- package/src/integration-test/postgres.spec.ts +47 -4
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/googlesheets.ts +11 -3
- package/src/integrations/microsoftSqlServer.ts +18 -2
- package/src/integrations/mysql.ts +27 -11
- package/src/integrations/oracle.ts +11 -1
- package/src/integrations/postgres.ts +27 -10
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- 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
package/jest.config.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Config } from "@jest/types"
|
|
2
2
|
|
|
3
3
|
import * as fs from "fs"
|
|
4
|
+
import { join } from "path"
|
|
4
5
|
const preset = require("ts-jest/jest-preset")
|
|
5
6
|
|
|
6
7
|
const baseConfig: Config.InitialProjectOptions = {
|
|
@@ -49,4 +50,6 @@ const config: Config.InitialOptions = {
|
|
|
49
50
|
coverageReporters: ["lcov", "json", "clover"],
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
process.env.TOP_LEVEL_PATH = join(__dirname, "..", "..")
|
|
54
|
+
|
|
52
55
|
export default config
|
package/nodemon.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "2.6.19-alpha.
|
|
4
|
+
"version": "2.6.19-alpha.10",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -10,22 +10,22 @@
|
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"prebuild": "rimraf dist/",
|
|
13
|
-
"build": "
|
|
13
|
+
"build": "node ./scripts/build.js",
|
|
14
|
+
"postbuild": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
|
|
14
15
|
"build:dev": "yarn prebuild && tsc --build --watch --preserveWatchOutput",
|
|
15
16
|
"debug": "yarn build && node --expose-gc --inspect=9222 dist/index.js",
|
|
16
|
-
"postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
|
|
17
17
|
"test": "bash scripts/test.sh",
|
|
18
18
|
"test:memory": "jest --maxWorkers=2 --logHeapUsage --forceExit",
|
|
19
19
|
"test:watch": "jest --watch",
|
|
20
|
-
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
|
|
21
|
-
"build:docker": "yarn
|
|
20
|
+
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client && yarn build --configuration=production",
|
|
21
|
+
"build:docker": "yarn predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION",
|
|
22
22
|
"build:docs": "node ./scripts/docs/generate.js open",
|
|
23
23
|
"run:docker": "node dist/index.js",
|
|
24
24
|
"run:docker:cluster": "pm2-runtime start pm2.config.js",
|
|
25
25
|
"dev:stack:up": "node scripts/dev/manage.js up",
|
|
26
26
|
"dev:stack:down": "node scripts/dev/manage.js down",
|
|
27
27
|
"dev:stack:nuke": "node scripts/dev/manage.js nuke",
|
|
28
|
-
"dev:builder": "yarn run dev:stack:up && nodemon",
|
|
28
|
+
"dev:builder": "yarn run dev:stack:up && rimraf dist/ && nodemon",
|
|
29
29
|
"dev:built": "yarn run dev:stack:up && yarn run run:docker",
|
|
30
30
|
"specs": "ts-node specs/generate.ts && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
|
|
31
31
|
"initialise": "node scripts/initialise.js",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"license": "GPL-3.0",
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
48
|
-
"@budibase/backend-core": "2.6.19-alpha.
|
|
49
|
-
"@budibase/client": "2.6.19-alpha.
|
|
50
|
-
"@budibase/pro": "2.6.19-alpha.
|
|
51
|
-
"@budibase/shared-core": "2.6.19-alpha.
|
|
52
|
-
"@budibase/string-templates": "2.6.19-alpha.
|
|
53
|
-
"@budibase/types": "2.6.19-alpha.
|
|
48
|
+
"@budibase/backend-core": "2.6.19-alpha.10",
|
|
49
|
+
"@budibase/client": "2.6.19-alpha.10",
|
|
50
|
+
"@budibase/pro": "2.6.19-alpha.10",
|
|
51
|
+
"@budibase/shared-core": "2.6.19-alpha.10",
|
|
52
|
+
"@budibase/string-templates": "2.6.19-alpha.10",
|
|
53
|
+
"@budibase/types": "2.6.19-alpha.10",
|
|
54
54
|
"@bull-board/api": "3.7.0",
|
|
55
55
|
"@bull-board/koa": "3.9.4",
|
|
56
56
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -99,6 +99,7 @@
|
|
|
99
99
|
"mysql2": "2.3.3",
|
|
100
100
|
"node-fetch": "2.6.7",
|
|
101
101
|
"open": "8.4.0",
|
|
102
|
+
"openai": "^3.2.1",
|
|
102
103
|
"pg": "8.10.0",
|
|
103
104
|
"posthog-node": "1.3.0",
|
|
104
105
|
"pouchdb": "7.3.0",
|
|
@@ -177,5 +178,20 @@
|
|
|
177
178
|
"optionalDependencies": {
|
|
178
179
|
"oracledb": "5.3.0"
|
|
179
180
|
},
|
|
180
|
-
"
|
|
181
|
+
"nx": {
|
|
182
|
+
"targets": {
|
|
183
|
+
"test": {
|
|
184
|
+
"dependsOn": [
|
|
185
|
+
{
|
|
186
|
+
"projects": [
|
|
187
|
+
"@budibase/string-templates",
|
|
188
|
+
"@budibase/shared-core"
|
|
189
|
+
],
|
|
190
|
+
"target": "build"
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
"gitHead": "7143391429a9d3685a0c443a32c7b3c3d82b78cf"
|
|
181
197
|
}
|
package/pm2.config.js
CHANGED
package/scripts/build.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/node
|
|
2
|
+
const { join } = require("path")
|
|
3
|
+
const fs = require("fs")
|
|
4
|
+
const coreBuild = require("../../../scripts/build")
|
|
5
|
+
|
|
6
|
+
const dir = join(__dirname, "..")
|
|
7
|
+
const entryPath = join(dir, "src")
|
|
8
|
+
const outfilePath = join(dir, "dist")
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The reasoning for this is that now our built version is simple
|
|
12
|
+
* dist/index.js - any kind of threaded approach in Node.js requires
|
|
13
|
+
* a runner file to work from - I played around with a lot of
|
|
14
|
+
* different methods, but we really want to be able to use forks.
|
|
15
|
+
*
|
|
16
|
+
* Rather than trying to rewrite so that forks run the whole system,
|
|
17
|
+
* I instead went down a path of building the individual threads so
|
|
18
|
+
* that we have runner files for each of them e.g. dist/automations.js
|
|
19
|
+
* and dist/query.js - these can be ran totally independently and then
|
|
20
|
+
* the parent process can pass down data for processing to them.
|
|
21
|
+
*
|
|
22
|
+
* The ignoring is simply to remove the files which really don't need
|
|
23
|
+
* to be built - they could be built and it wouldn't cause any issues,
|
|
24
|
+
* but this just means if any further threads are added in future
|
|
25
|
+
* they will naturally work (rather than including, which would mean
|
|
26
|
+
* adjustments to the build files).
|
|
27
|
+
*/
|
|
28
|
+
const ignoredFiles = ["definitions", "index", "utils"]
|
|
29
|
+
const threadNames = fs
|
|
30
|
+
.readdirSync(join(dir, "src", "threads"))
|
|
31
|
+
.filter(path => !ignoredFiles.find(file => path.includes(file)))
|
|
32
|
+
.map(path => path.replace(".ts", ""))
|
|
33
|
+
const files = [
|
|
34
|
+
{
|
|
35
|
+
entry: join(entryPath, "index.ts"),
|
|
36
|
+
out: join(outfilePath, "index.js"),
|
|
37
|
+
},
|
|
38
|
+
]
|
|
39
|
+
for (let name of threadNames) {
|
|
40
|
+
files.push({
|
|
41
|
+
entry: join(entryPath, "threads", `${name}.ts`),
|
|
42
|
+
out: join(outfilePath, `${name}.js`),
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
for (let file of files) {
|
|
47
|
+
coreBuild(file.entry, file.out)
|
|
48
|
+
}
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
CreateDatasourceRequest,
|
|
22
22
|
VerifyDatasourceRequest,
|
|
23
23
|
VerifyDatasourceResponse,
|
|
24
|
+
FetchDatasourceInfoResponse,
|
|
24
25
|
IntegrationBase,
|
|
25
26
|
DatasourcePlus,
|
|
26
27
|
} from "@budibase/types"
|
|
@@ -153,6 +154,21 @@ export async function verify(
|
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
|
|
157
|
+
export async function information(
|
|
158
|
+
ctx: UserCtx<void, FetchDatasourceInfoResponse>
|
|
159
|
+
) {
|
|
160
|
+
const datasourceId = ctx.params.datasourceId
|
|
161
|
+
const datasource = await sdk.datasources.get(datasourceId, { enriched: true })
|
|
162
|
+
const connector = (await getConnector(datasource)) as DatasourcePlus
|
|
163
|
+
if (!connector.getTableNames) {
|
|
164
|
+
ctx.throw(400, "Table name fetching not supported by datasource")
|
|
165
|
+
}
|
|
166
|
+
const tableNames = await connector.getTableNames()
|
|
167
|
+
ctx.body = {
|
|
168
|
+
tableNames,
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
156
172
|
export async function buildSchemaFromDb(ctx: UserCtx) {
|
|
157
173
|
const db = context.getAppDB()
|
|
158
174
|
const datasource = await sdk.datasources.get(ctx.params.datasourceId)
|
|
@@ -134,7 +134,7 @@ export const serveApp = async function (ctx: any) {
|
|
|
134
134
|
? objectStore.getGlobalFileUrl("settings", "logoUrl")
|
|
135
135
|
: "",
|
|
136
136
|
})
|
|
137
|
-
const appHbs = loadHandlebarsFile(`${__dirname}/
|
|
137
|
+
const appHbs = loadHandlebarsFile(`${__dirname}/app.hbs`)
|
|
138
138
|
ctx.body = await processString(appHbs, {
|
|
139
139
|
head,
|
|
140
140
|
body: html,
|
|
@@ -161,7 +161,7 @@ export const serveApp = async function (ctx: any) {
|
|
|
161
161
|
: "",
|
|
162
162
|
})
|
|
163
163
|
|
|
164
|
-
const appHbs = loadHandlebarsFile(`${__dirname}/
|
|
164
|
+
const appHbs = loadHandlebarsFile(`${__dirname}/app.hbs`)
|
|
165
165
|
ctx.body = await processString(appHbs, {
|
|
166
166
|
head,
|
|
167
167
|
body: html,
|
|
@@ -177,7 +177,7 @@ export const serveBuilderPreview = async function (ctx: any) {
|
|
|
177
177
|
|
|
178
178
|
if (!env.isJest()) {
|
|
179
179
|
let appId = context.getAppId()
|
|
180
|
-
const previewHbs = loadHandlebarsFile(`${__dirname}/
|
|
180
|
+
const previewHbs = loadHandlebarsFile(`${__dirname}/preview.hbs`)
|
|
181
181
|
ctx.body = await processString(previewHbs, {
|
|
182
182
|
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
183
183
|
})
|
|
@@ -20,6 +20,11 @@ router
|
|
|
20
20
|
authorized(permissions.BUILDER),
|
|
21
21
|
datasourceController.verify
|
|
22
22
|
)
|
|
23
|
+
.get(
|
|
24
|
+
"/api/datasources/:datasourceId/info",
|
|
25
|
+
authorized(permissions.BUILDER),
|
|
26
|
+
datasourceController.information
|
|
27
|
+
)
|
|
23
28
|
.get(
|
|
24
29
|
"/api/datasources/:datasourceId",
|
|
25
30
|
authorized(
|
package/src/api/routes/static.ts
CHANGED
|
@@ -5,6 +5,7 @@ import authorized from "../../middleware/authorized"
|
|
|
5
5
|
import { permissions } from "@budibase/backend-core"
|
|
6
6
|
import env from "../../environment"
|
|
7
7
|
import { paramResource } from "../../middleware/resourceId"
|
|
8
|
+
import { devClientLibPath } from "../../utilities/fileSystem"
|
|
8
9
|
const { BUILDER, PermissionType, PermissionLevel } = permissions
|
|
9
10
|
|
|
10
11
|
const router: Router = new Router()
|
|
@@ -17,7 +18,8 @@ router.param("file", async (file: any, ctx: any, next: any) => {
|
|
|
17
18
|
}
|
|
18
19
|
// test serves from require
|
|
19
20
|
if (env.isTest()) {
|
|
20
|
-
|
|
21
|
+
const path = devClientLibPath()
|
|
22
|
+
ctx.devPath = path.split(ctx.file)[0]
|
|
21
23
|
} else if (env.isDev()) {
|
|
22
24
|
// Serving the client library from your local dir in dev
|
|
23
25
|
ctx.devPath = budibaseTempDir()
|
|
@@ -87,7 +87,7 @@ describe("/datasources", () => {
|
|
|
87
87
|
expect(contents.rows.length).toEqual(1)
|
|
88
88
|
|
|
89
89
|
// update the datasource to remove the variables
|
|
90
|
-
datasource.config
|
|
90
|
+
datasource.config!.dynamicVariables = []
|
|
91
91
|
const res = await request
|
|
92
92
|
.put(`/api/datasources/${datasource._id}`)
|
|
93
93
|
.send(datasource)
|
|
@@ -71,10 +71,15 @@ export const BUILTIN_ACTION_DEFINITIONS: Record<string, AutomationStepSchema> =
|
|
|
71
71
|
// ran at all
|
|
72
72
|
if (env.SELF_HOSTED) {
|
|
73
73
|
const bash = require("./steps/bash")
|
|
74
|
+
const openai = require("./steps/openai")
|
|
75
|
+
|
|
74
76
|
// @ts-ignore
|
|
75
77
|
ACTION_IMPLS["EXECUTE_BASH"] = bash.run
|
|
76
78
|
// @ts-ignore
|
|
77
79
|
BUILTIN_ACTION_DEFINITIONS["EXECUTE_BASH"] = bash.definition
|
|
80
|
+
|
|
81
|
+
ACTION_IMPLS.OPENAI = openai.run
|
|
82
|
+
BUILTIN_ACTION_DEFINITIONS.OPENAI = openai.definition
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
export async function getActionDefinitions() {
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
stepId: AutomationActionStepId.OPENAI,
|
|
26
|
+
inputs: {
|
|
27
|
+
prompt: "",
|
|
28
|
+
},
|
|
29
|
+
schema: {
|
|
30
|
+
inputs: {
|
|
31
|
+
properties: {
|
|
32
|
+
prompt: {
|
|
33
|
+
type: AutomationIOType.STRING,
|
|
34
|
+
title: "Prompt",
|
|
35
|
+
},
|
|
36
|
+
model: {
|
|
37
|
+
type: AutomationIOType.STRING,
|
|
38
|
+
title: "Model",
|
|
39
|
+
enum: Object.values(Model),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
required: ["prompt", "model"],
|
|
43
|
+
},
|
|
44
|
+
outputs: {
|
|
45
|
+
properties: {
|
|
46
|
+
success: {
|
|
47
|
+
type: AutomationIOType.BOOLEAN,
|
|
48
|
+
description: "Whether the action was successful",
|
|
49
|
+
},
|
|
50
|
+
response: {
|
|
51
|
+
type: AutomationIOType.STRING,
|
|
52
|
+
description: "What was output",
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
required: ["success", "response"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function run({ inputs, context }: AutomationStepInput) {
|
|
61
|
+
if (!environment.OPENAI_API_KEY) {
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
response:
|
|
65
|
+
"OpenAI API Key not configured - please add the OPENAI_API_KEY environment variable.",
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (inputs.prompt == null) {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
response: "Budibase OpenAI Automation Failed: No prompt supplied",
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
const configuration = new Configuration({
|
|
78
|
+
apiKey: environment.OPENAI_API_KEY,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const openai = new OpenAIApi(configuration)
|
|
82
|
+
|
|
83
|
+
const completion = await openai.createChatCompletion({
|
|
84
|
+
model: inputs.model,
|
|
85
|
+
messages: [
|
|
86
|
+
{
|
|
87
|
+
role: "user",
|
|
88
|
+
content: inputs.prompt,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
const response = completion?.data?.choices[0]?.message?.content
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
response,
|
|
97
|
+
success: true,
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
response: automationUtils.getError(err),
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -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
|
+
})
|
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,7 +25,9 @@ export async function runView(
|
|
|
25
25
|
}))
|
|
26
26
|
)
|
|
27
27
|
let fn = (doc: Document, emit: any) => emit(doc._id)
|
|
28
|
-
|
|
28
|
+
;(0, eval)(
|
|
29
|
+
"fn = " + view?.map?.replace("function (doc)", "function (doc, emit)")
|
|
30
|
+
)
|
|
29
31
|
const queryFns: any = {
|
|
30
32
|
meta: view.meta,
|
|
31
33
|
map: fn,
|
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
|
})
|