@budibase/server 2.6.19-alpha.3 → 2.6.19-alpha.31
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.71388c79.js → index.3dd3d237.js} +435 -428
- package/builder/assets/{index.07382a47.css → index.8469b14c.css} +2 -2
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32436 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +44735 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24367 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +32 -13
- 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 +20 -0
- package/src/api/controllers/row/index.ts +15 -22
- package/src/api/controllers/row/internal.ts +1 -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 +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/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/environment.ts +3 -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 +15 -1
- 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/middleware/builder.ts +4 -5
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- 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 +78 -22
- package/src/threads/index.ts +9 -3
- package/src/threads/utils.ts +2 -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/src/utilities/redis.ts +19 -2
- package/src/websockets/builder.ts +69 -0
- package/src/websockets/grid.ts +25 -7
- package/src/websockets/index.ts +5 -2
- package/src/websockets/websocket.ts +20 -4
- 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 -320
- 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
|
@@ -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 = {
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
} from "./utils"
|
|
21
21
|
import Sql from "./base/sql"
|
|
22
22
|
import { MSSQLTablesResponse, MSSQLColumn } from "./base/types"
|
|
23
|
-
|
|
24
23
|
const sqlServer = require("mssql")
|
|
25
24
|
const DEFAULT_SCHEMA = "dbo"
|
|
26
25
|
|
|
@@ -41,7 +40,10 @@ const SCHEMA: Integration = {
|
|
|
41
40
|
"Microsoft SQL Server is a relational database management system developed by Microsoft. ",
|
|
42
41
|
friendlyName: "MS SQL Server",
|
|
43
42
|
type: "Relational",
|
|
44
|
-
features:
|
|
43
|
+
features: {
|
|
44
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
45
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
46
|
+
},
|
|
45
47
|
datasource: {
|
|
46
48
|
user: {
|
|
47
49
|
type: DatasourceFieldType.STRING,
|
|
@@ -284,6 +286,20 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|
|
284
286
|
this.schemaErrors = final.errors
|
|
285
287
|
}
|
|
286
288
|
|
|
289
|
+
async queryTableNames() {
|
|
290
|
+
let tableInfo: MSSQLTablesResponse[] = await this.runSQL(this.TABLES_SQL)
|
|
291
|
+
const schema = this.config.schema || DEFAULT_SCHEMA
|
|
292
|
+
return tableInfo
|
|
293
|
+
.filter((record: any) => record.TABLE_SCHEMA === schema)
|
|
294
|
+
.map((record: any) => record.TABLE_NAME)
|
|
295
|
+
.filter((name: string) => this.MASTER_TABLES.indexOf(name) === -1)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
async getTableNames() {
|
|
299
|
+
await this.connect()
|
|
300
|
+
return this.queryTableNames()
|
|
301
|
+
}
|
|
302
|
+
|
|
287
303
|
async read(query: SqlQuery | string) {
|
|
288
304
|
await this.connect()
|
|
289
305
|
const response = await this.internalQuery(getSqlQuery(query))
|
|
@@ -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,7 +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:
|
|
39
|
+
features: {
|
|
40
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
41
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
42
|
+
},
|
|
40
43
|
datasource: {
|
|
41
44
|
host: {
|
|
42
45
|
type: DatasourceFieldType.STRING,
|
|
@@ -214,20 +217,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
|
|
|
214
217
|
|
|
215
218
|
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
|
|
216
219
|
const tables: { [key: string]: Table } = {}
|
|
217
|
-
const database = this.config.database
|
|
218
220
|
await this.connect()
|
|
219
221
|
|
|
220
222
|
try {
|
|
221
223
|
// get the tables first
|
|
222
|
-
const
|
|
223
|
-
{ sql: "SHOW TABLES;" },
|
|
224
|
-
{ connect: false }
|
|
225
|
-
)
|
|
226
|
-
const tableNames: string[] = tablesResp.map(
|
|
227
|
-
(obj: any) =>
|
|
228
|
-
obj[`Tables_in_${database}`] ||
|
|
229
|
-
obj[`Tables_in_${database.toLowerCase()}`]
|
|
230
|
-
)
|
|
224
|
+
const tableNames = await this.queryTableNames()
|
|
231
225
|
for (let tableName of tableNames) {
|
|
232
226
|
const primaryKeys = []
|
|
233
227
|
const schema: TableSchema = {}
|
|
@@ -274,6 +268,28 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
|
|
|
274
268
|
this.schemaErrors = final.errors
|
|
275
269
|
}
|
|
276
270
|
|
|
271
|
+
async queryTableNames() {
|
|
272
|
+
const database = this.config.database
|
|
273
|
+
const tablesResp: Record<string, string>[] = await this.internalQuery(
|
|
274
|
+
{ sql: "SHOW TABLES;" },
|
|
275
|
+
{ connect: false }
|
|
276
|
+
)
|
|
277
|
+
return tablesResp.map(
|
|
278
|
+
(obj: any) =>
|
|
279
|
+
obj[`Tables_in_${database}`] ||
|
|
280
|
+
obj[`Tables_in_${database.toLowerCase()}`]
|
|
281
|
+
)
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
async getTableNames() {
|
|
285
|
+
await this.connect()
|
|
286
|
+
try {
|
|
287
|
+
return this.queryTableNames()
|
|
288
|
+
} finally {
|
|
289
|
+
await this.disconnect()
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
277
293
|
async create(query: SqlQuery | string) {
|
|
278
294
|
const results = await this.internalQuery(getSqlQuery(query))
|
|
279
295
|
return results.length ? results : [{ created: true }]
|
|
@@ -50,7 +50,10 @@ const SCHEMA: Integration = {
|
|
|
50
50
|
type: "Relational",
|
|
51
51
|
description:
|
|
52
52
|
"Oracle Database is an object-relational database management system developed by Oracle Corporation",
|
|
53
|
-
features:
|
|
53
|
+
features: {
|
|
54
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
55
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
56
|
+
},
|
|
54
57
|
datasource: {
|
|
55
58
|
host: {
|
|
56
59
|
type: DatasourceFieldType.STRING,
|
|
@@ -323,6 +326,13 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|
|
323
326
|
this.schemaErrors = final.errors
|
|
324
327
|
}
|
|
325
328
|
|
|
329
|
+
async getTableNames() {
|
|
330
|
+
const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
|
|
331
|
+
sql: this.COLUMNS_SQL,
|
|
332
|
+
})
|
|
333
|
+
return (columnsResponse.rows || []).map(row => row.TABLE_NAME)
|
|
334
|
+
}
|
|
335
|
+
|
|
326
336
|
async testConnection() {
|
|
327
337
|
const response: ConnectionInfo = {
|
|
328
338
|
connected: false,
|
|
@@ -52,7 +52,10 @@ const SCHEMA: Integration = {
|
|
|
52
52
|
type: "Relational",
|
|
53
53
|
description:
|
|
54
54
|
"PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
|
|
55
|
-
features:
|
|
55
|
+
features: {
|
|
56
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
57
|
+
[DatasourceFeature.FETCH_TABLE_NAMES]: true,
|
|
58
|
+
},
|
|
56
59
|
datasource: {
|
|
57
60
|
host: {
|
|
58
61
|
type: DatasourceFieldType.STRING,
|
|
@@ -314,6 +317,17 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
|
314
317
|
}
|
|
315
318
|
}
|
|
316
319
|
|
|
320
|
+
async getTableNames() {
|
|
321
|
+
try {
|
|
322
|
+
await this.openConnection()
|
|
323
|
+
const columnsResponse: { rows: PostgresColumn[] } =
|
|
324
|
+
await this.client.query(this.COLUMNS_SQL)
|
|
325
|
+
return columnsResponse.rows.map(row => row.table_name)
|
|
326
|
+
} finally {
|
|
327
|
+
await this.closeConnection()
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
317
331
|
async create(query: SqlQuery | string) {
|
|
318
332
|
const response = await this.internalQuery(getSqlQuery(query))
|
|
319
333
|
return response.rows.length ? response.rows : [{ created: true }]
|
|
@@ -21,7 +21,9 @@ const SCHEMA: Integration = {
|
|
|
21
21
|
"Redis is a caching tool, providing powerful key-value store capabilities.",
|
|
22
22
|
friendlyName: "Redis",
|
|
23
23
|
type: "Non-relational",
|
|
24
|
-
features:
|
|
24
|
+
features: {
|
|
25
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
26
|
+
},
|
|
25
27
|
datasource: {
|
|
26
28
|
host: {
|
|
27
29
|
type: "string",
|
package/src/integrations/s3.ts
CHANGED
|
@@ -24,7 +24,9 @@ const SCHEMA: Integration = {
|
|
|
24
24
|
"Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.",
|
|
25
25
|
friendlyName: "Amazon S3",
|
|
26
26
|
type: "Object store",
|
|
27
|
-
features:
|
|
27
|
+
features: {
|
|
28
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
29
|
+
},
|
|
28
30
|
datasource: {
|
|
29
31
|
region: {
|
|
30
32
|
type: "string",
|
|
@@ -22,7 +22,9 @@ const SCHEMA: Integration = {
|
|
|
22
22
|
"Snowflake is a solution for data warehousing, data lakes, data engineering, data science, data application development, and securely sharing and consuming shared data.",
|
|
23
23
|
friendlyName: "Snowflake",
|
|
24
24
|
type: "Relational",
|
|
25
|
-
features:
|
|
25
|
+
features: {
|
|
26
|
+
[DatasourceFeature.CONNECTION_CHECKING]: true,
|
|
27
|
+
},
|
|
26
28
|
datasource: {
|
|
27
29
|
account: {
|
|
28
30
|
type: "string",
|
|
@@ -17,14 +17,15 @@ jest.mock("google-spreadsheet")
|
|
|
17
17
|
const { GoogleSpreadsheet } = require("google-spreadsheet")
|
|
18
18
|
|
|
19
19
|
const sheetsByTitle: { [title: string]: GoogleSpreadsheetWorksheet } = {}
|
|
20
|
+
const sheetsByIndex: GoogleSpreadsheetWorksheet[] = []
|
|
21
|
+
const mockGoogleIntegration = {
|
|
22
|
+
useOAuth2Client: jest.fn(),
|
|
23
|
+
loadInfo: jest.fn(),
|
|
24
|
+
sheetsByTitle,
|
|
25
|
+
sheetsByIndex,
|
|
26
|
+
}
|
|
20
27
|
|
|
21
|
-
GoogleSpreadsheet.mockImplementation(() =>
|
|
22
|
-
return {
|
|
23
|
-
useOAuth2Client: jest.fn(),
|
|
24
|
-
loadInfo: jest.fn(),
|
|
25
|
-
sheetsByTitle,
|
|
26
|
-
}
|
|
27
|
-
})
|
|
28
|
+
GoogleSpreadsheet.mockImplementation(() => mockGoogleIntegration)
|
|
28
29
|
|
|
29
30
|
import { structures } from "@budibase/backend-core/tests"
|
|
30
31
|
import TestConfiguration from "../../tests/utilities/TestConfiguration"
|
|
@@ -53,6 +54,8 @@ describe("Google Sheets Integration", () => {
|
|
|
53
54
|
},
|
|
54
55
|
})
|
|
55
56
|
await config.init()
|
|
57
|
+
|
|
58
|
+
jest.clearAllMocks()
|
|
56
59
|
})
|
|
57
60
|
|
|
58
61
|
function createBasicTable(name: string, columns: string[]): Table {
|
|
@@ -88,7 +91,7 @@ describe("Google Sheets Integration", () => {
|
|
|
88
91
|
}
|
|
89
92
|
|
|
90
93
|
describe("update table", () => {
|
|
91
|
-
|
|
94
|
+
it("adding a new field will be adding a new header row", async () => {
|
|
92
95
|
await config.doInContext(structures.uuid(), async () => {
|
|
93
96
|
const tableColumns = ["name", "description", "new field"]
|
|
94
97
|
const table = createBasicTable(structures.uuid(), tableColumns)
|
|
@@ -103,7 +106,7 @@ describe("Google Sheets Integration", () => {
|
|
|
103
106
|
})
|
|
104
107
|
})
|
|
105
108
|
|
|
106
|
-
|
|
109
|
+
it("removing an existing field will remove the header from the google sheet", async () => {
|
|
107
110
|
const sheet = await config.doInContext(structures.uuid(), async () => {
|
|
108
111
|
const tableColumns = ["name"]
|
|
109
112
|
const table = createBasicTable(structures.uuid(), tableColumns)
|
|
@@ -123,4 +126,33 @@ describe("Google Sheets Integration", () => {
|
|
|
123
126
|
expect((sheet.setHeaderRow as any).mock.calls[0][0]).toHaveLength(1)
|
|
124
127
|
})
|
|
125
128
|
})
|
|
129
|
+
|
|
130
|
+
describe("getTableNames", () => {
|
|
131
|
+
it("can fetch table names", async () => {
|
|
132
|
+
await config.doInContext(structures.uuid(), async () => {
|
|
133
|
+
const sheetNames: string[] = []
|
|
134
|
+
for (let i = 0; i < 5; i++) {
|
|
135
|
+
const sheet = createSheet({ headerValues: [] })
|
|
136
|
+
sheetsByIndex.push(sheet)
|
|
137
|
+
sheetNames.push(sheet.title)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const res = await integration.getTableNames()
|
|
141
|
+
|
|
142
|
+
expect(mockGoogleIntegration.loadInfo).toBeCalledTimes(1)
|
|
143
|
+
expect(res).toEqual(sheetNames)
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
describe("testConnection", () => {
|
|
149
|
+
it("can test successful connections", async () => {
|
|
150
|
+
await config.doInContext(structures.uuid(), async () => {
|
|
151
|
+
const res = await integration.testConnection()
|
|
152
|
+
|
|
153
|
+
expect(mockGoogleIntegration.loadInfo).toBeCalledTimes(1)
|
|
154
|
+
expect(res).toEqual({ connected: true })
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
})
|
|
126
158
|
})
|
|
@@ -35,12 +35,11 @@ async function checkDevAppLocks(ctx: BBContext) {
|
|
|
35
35
|
if (!appId || !appId.startsWith(APP_DEV_PREFIX)) {
|
|
36
36
|
return
|
|
37
37
|
}
|
|
38
|
-
if (!(await doesUserHaveLock(appId, ctx.user))) {
|
|
39
|
-
ctx.throw(400, "User does not hold app lock.")
|
|
40
|
-
}
|
|
41
38
|
|
|
42
|
-
//
|
|
43
|
-
await
|
|
39
|
+
// If this user already owns the lock, then update it
|
|
40
|
+
if (await doesUserHaveLock(appId, ctx.user)) {
|
|
41
|
+
await updateLock(appId, ctx.user)
|
|
42
|
+
}
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
async function updateAppUpdatedAt(ctx: BBContext) {
|
package/src/startup.ts
CHANGED
|
@@ -16,6 +16,7 @@ import * as bullboard from "./automations/bullboard"
|
|
|
16
16
|
import * as pro from "@budibase/pro"
|
|
17
17
|
import * as api from "./api"
|
|
18
18
|
import sdk from "./sdk"
|
|
19
|
+
import { initialise as initialiseWebsockets } from "./websockets"
|
|
19
20
|
|
|
20
21
|
let STARTUP_RAN = false
|
|
21
22
|
|
|
@@ -64,6 +65,7 @@ export async function startup(app?: any, server?: any) {
|
|
|
64
65
|
fileSystem.init()
|
|
65
66
|
await redis.init()
|
|
66
67
|
eventInit()
|
|
68
|
+
initialiseWebsockets(app, server)
|
|
67
69
|
|
|
68
70
|
// run migrations on startup if not done via http
|
|
69
71
|
// not recommended in a clustered environment
|
|
@@ -373,7 +373,7 @@ class TestConfiguration {
|
|
|
373
373
|
|
|
374
374
|
// HEADERS
|
|
375
375
|
|
|
376
|
-
defaultHeaders(extras = {}) {
|
|
376
|
+
defaultHeaders(extras = {}, prodApp = false) {
|
|
377
377
|
const tenantId = this.getTenantId()
|
|
378
378
|
const authObj: AuthToken = {
|
|
379
379
|
userId: this.defaultUserValues.globalUserId,
|
|
@@ -390,7 +390,9 @@ class TestConfiguration {
|
|
|
390
390
|
...extras,
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
if (
|
|
393
|
+
if (prodApp) {
|
|
394
|
+
headers[constants.Header.APP_ID] = this.prodAppId
|
|
395
|
+
} else if (this.appId) {
|
|
394
396
|
headers[constants.Header.APP_ID] = this.appId
|
|
395
397
|
}
|
|
396
398
|
return headers
|
|
@@ -199,6 +199,48 @@ export function loopAutomation(tableId: string, loopOpts?: any): Automation {
|
|
|
199
199
|
return automation as Automation
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
+
export function collectAutomation(tableId?: string): Automation {
|
|
203
|
+
const automation: any = {
|
|
204
|
+
name: "looping",
|
|
205
|
+
type: "automation",
|
|
206
|
+
definition: {
|
|
207
|
+
steps: [
|
|
208
|
+
{
|
|
209
|
+
id: "b",
|
|
210
|
+
type: "ACTION",
|
|
211
|
+
internal: true,
|
|
212
|
+
stepId: AutomationActionStepId.EXECUTE_SCRIPT,
|
|
213
|
+
inputs: {
|
|
214
|
+
code: "return [1,2,3]",
|
|
215
|
+
},
|
|
216
|
+
schema: BUILTIN_ACTION_DEFINITIONS.EXECUTE_SCRIPT.schema,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: "c",
|
|
220
|
+
type: "ACTION",
|
|
221
|
+
internal: true,
|
|
222
|
+
stepId: AutomationActionStepId.COLLECT,
|
|
223
|
+
inputs: {
|
|
224
|
+
collection: "{{ literal steps.1.value }}",
|
|
225
|
+
},
|
|
226
|
+
schema: BUILTIN_ACTION_DEFINITIONS.SERVER_LOG.schema,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
trigger: {
|
|
230
|
+
id: "a",
|
|
231
|
+
type: "TRIGGER",
|
|
232
|
+
event: "row:save",
|
|
233
|
+
stepId: AutomationTriggerStepId.ROW_SAVED,
|
|
234
|
+
inputs: {
|
|
235
|
+
tableId,
|
|
236
|
+
},
|
|
237
|
+
schema: TRIGGER_DEFINITIONS.ROW_SAVED.schema,
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
}
|
|
241
|
+
return automation as Automation
|
|
242
|
+
}
|
|
243
|
+
|
|
202
244
|
export function basicRow(tableId: string) {
|
|
203
245
|
return {
|
|
204
246
|
name: "Test Contact",
|