@budibase/server 2.6.23 → 2.6.24-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +7 -6
- package/Dockerfile +16 -8
- package/builder/assets/index.50121870.js +1869 -0
- package/builder/assets/index.a86e2071.css +6 -0
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32576 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +45065 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24462 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +6 -3
- package/nodemon.json +8 -4
- package/package.json +35 -16
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/application.ts +21 -22
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +114 -49
- package/src/api/controllers/deploy/index.ts +1 -0
- package/src/api/controllers/integration.ts +3 -3
- package/src/api/controllers/plugin/index.ts +1 -1
- package/src/api/controllers/row/external.ts +39 -15
- package/src/api/controllers/row/index.ts +18 -24
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/row/staticFormula.ts +6 -1
- package/src/api/controllers/row/utils.ts +12 -0
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/index.ts +3 -0
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/view/index.ts +5 -5
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/application.ts +5 -0
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/datasource.ts +10 -0
- package/src/api/routes/static.ts +3 -1
- package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
- package/src/api/routes/tests/datasource.spec.ts +1 -1
- package/src/api/routes/tests/view.spec.js +4 -3
- package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/app.ts +0 -1
- package/src/automations/actions.ts +8 -0
- package/src/automations/logging/index.ts +21 -0
- package/src/automations/steps/bash.ts +4 -0
- package/src/automations/steps/collect.ts +58 -0
- package/src/automations/steps/createRow.ts +4 -0
- package/src/automations/steps/delay.ts +1 -0
- package/src/automations/steps/deleteRow.ts +4 -0
- package/src/automations/steps/discord.ts +4 -0
- package/src/automations/steps/executeQuery.ts +4 -0
- package/src/automations/steps/executeScript.ts +4 -0
- package/src/automations/steps/filter.ts +1 -0
- package/src/automations/steps/loop.ts +1 -0
- package/src/automations/steps/make.ts +22 -1
- package/src/automations/steps/openai.ts +106 -0
- package/src/automations/steps/outgoingWebhook.ts +4 -0
- package/src/automations/steps/queryRows.ts +4 -0
- package/src/automations/steps/sendSmtpEmail.ts +4 -0
- package/src/automations/steps/serverLog.ts +4 -0
- package/src/automations/steps/slack.ts +4 -0
- package/src/automations/steps/updateRow.ts +4 -0
- package/src/automations/steps/zapier.ts +22 -1
- package/src/automations/tests/make.spec.ts +54 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/tests/zapier.spec.ts +56 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/dynamoClient.ts +1 -1
- package/src/db/inMemoryView.ts +1 -0
- package/src/db/linkedRows/index.ts +5 -3
- package/src/environment.ts +3 -0
- package/src/integration-test/postgres.spec.ts +47 -5
- package/src/integrations/airtable.ts +33 -4
- package/src/integrations/arangodb.ts +20 -2
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +20 -4
- package/src/integrations/dynamodb.ts +36 -5
- package/src/integrations/elasticsearch.ts +18 -1
- package/src/integrations/firebase.ts +17 -0
- package/src/integrations/googlesheets.ts +66 -5
- package/src/integrations/index.ts +12 -7
- package/src/integrations/microsoftSqlServer.ts +33 -1
- package/src/integrations/mongodb.ts +18 -0
- package/src/integrations/mysql.ts +53 -26
- package/src/integrations/oracle.ts +38 -6
- package/src/integrations/postgres.ts +47 -12
- package/src/integrations/redis.ts +35 -4
- package/src/integrations/s3.ts +21 -3
- package/src/integrations/snowflake.ts +22 -1
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- package/src/middleware/builder.ts +26 -18
- package/src/migrations/functions/backfill/app/queries.ts +1 -1
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/sdk/app/datasources/datasources.ts +7 -1
- package/src/sdk/plugins/plugins.ts +1 -1
- package/src/startup.ts +2 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +91 -23
- package/src/threads/index.ts +9 -3
- package/src/threads/utils.ts +2 -0
- package/src/utilities/fileSystem/app.ts +14 -4
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/src/utilities/redis.ts +25 -3
- package/src/utilities/rowProcessor/index.ts +4 -1
- package/src/utilities/rowProcessor/map.ts +1 -1
- package/src/websockets/builder.ts +95 -0
- package/src/websockets/client.ts +2 -2
- package/src/websockets/grid.ts +44 -44
- package/src/websockets/index.ts +13 -6
- package/src/websockets/websocket.ts +211 -7
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- package/builder/assets/index.86c992bf.css +0 -6
- package/builder/assets/index.c16c35ca.js +0 -1794
- package/dist/api/controllers/analytics.js +0 -46
- package/dist/api/controllers/apikeys.js +0 -72
- package/dist/api/controllers/application.js +0 -574
- package/dist/api/controllers/auth.js +0 -80
- package/dist/api/controllers/automation.js +0 -303
- package/dist/api/controllers/backup.js +0 -37
- package/dist/api/controllers/component.js +0 -59
- package/dist/api/controllers/datasource.js +0 -306
- package/dist/api/controllers/deploy/Deployment.js +0 -53
- package/dist/api/controllers/deploy/index.js +0 -198
- package/dist/api/controllers/dev.js +0 -146
- package/dist/api/controllers/integration.js +0 -28
- package/dist/api/controllers/layout.js +0 -49
- package/dist/api/controllers/metadata.js +0 -63
- package/dist/api/controllers/migrations.js +0 -29
- package/dist/api/controllers/ops.js +0 -40
- package/dist/api/controllers/permission.js +0 -162
- package/dist/api/controllers/plugin/file.js +0 -24
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -112
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/url.js +0 -24
- package/dist/api/controllers/plugin/utils.js +0 -27
- package/dist/api/controllers/public/applications.js +0 -146
- package/dist/api/controllers/public/mapping/applications.js +0 -29
- package/dist/api/controllers/public/mapping/index.js +0 -11
- package/dist/api/controllers/public/mapping/queries.js +0 -36
- package/dist/api/controllers/public/mapping/rows.js +0 -24
- package/dist/api/controllers/public/mapping/tables.js +0 -23
- package/dist/api/controllers/public/mapping/types.js +0 -2
- package/dist/api/controllers/public/mapping/users.js +0 -29
- package/dist/api/controllers/public/metrics.js +0 -113
- package/dist/api/controllers/public/queries.js +0 -58
- package/dist/api/controllers/public/rows.js +0 -120
- package/dist/api/controllers/public/tables.js +0 -95
- package/dist/api/controllers/public/users.js +0 -93
- package/dist/api/controllers/public/utils.js +0 -56
- package/dist/api/controllers/query/import/index.js +0 -87
- package/dist/api/controllers/query/import/sources/base/index.js +0 -75
- package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
- package/dist/api/controllers/query/import/sources/curl.js +0 -99
- package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
- package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/dist/api/controllers/query/index.js +0 -299
- package/dist/api/controllers/query/validation.js +0 -53
- package/dist/api/controllers/role.js +0 -109
- package/dist/api/controllers/routing.js +0 -105
- package/dist/api/controllers/row/ExternalRequest.js +0 -683
- package/dist/api/controllers/row/external.js +0 -339
- package/dist/api/controllers/row/index.js +0 -203
- package/dist/api/controllers/row/internal.js +0 -509
- package/dist/api/controllers/row/internalSearch.js +0 -28
- package/dist/api/controllers/row/staticFormula.js +0 -165
- package/dist/api/controllers/row/utils.js +0 -183
- package/dist/api/controllers/screen.js +0 -110
- package/dist/api/controllers/script.js +0 -30
- package/dist/api/controllers/static/index.js +0 -268
- package/dist/api/controllers/table/bulkFormula.js +0 -173
- package/dist/api/controllers/table/external.js +0 -279
- package/dist/api/controllers/table/index.js +0 -179
- package/dist/api/controllers/table/internal.js +0 -197
- package/dist/api/controllers/table/utils.js +0 -379
- package/dist/api/controllers/templates.js +0 -56
- package/dist/api/controllers/user.js +0 -124
- package/dist/api/controllers/view/exporters.js +0 -46
- package/dist/api/controllers/view/index.js +0 -193
- package/dist/api/controllers/view/utils.js +0 -177
- package/dist/api/controllers/view/viewBuilder.js +0 -158
- package/dist/api/controllers/webhook.js +0 -134
- package/dist/api/index.js +0 -55
- package/dist/api/routes/analytics.js +0 -34
- package/dist/api/routes/apikeys.js +0 -37
- package/dist/api/routes/application.js +0 -48
- package/dist/api/routes/auth.js +0 -33
- package/dist/api/routes/automation.js +0 -50
- package/dist/api/routes/backup.js +0 -35
- package/dist/api/routes/component.js +0 -35
- package/dist/api/routes/datasource.js +0 -43
- package/dist/api/routes/deploy.js +0 -37
- package/dist/api/routes/dev.js +0 -49
- package/dist/api/routes/index.js +0 -75
- package/dist/api/routes/integration.js +0 -37
- package/dist/api/routes/layout.js +0 -37
- package/dist/api/routes/metadata.js +0 -40
- package/dist/api/routes/migrations.js +0 -36
- package/dist/api/routes/ops.js +0 -52
- package/dist/api/routes/permission.js +0 -44
- package/dist/api/routes/plugin.js +0 -39
- package/dist/api/routes/public/applications.js +0 -174
- package/dist/api/routes/public/index.js +0 -140
- package/dist/api/routes/public/metrics.js +0 -30
- package/dist/api/routes/public/middleware/mapper.js +0 -97
- package/dist/api/routes/public/queries.js +0 -72
- package/dist/api/routes/public/rows.js +0 -158
- package/dist/api/routes/public/tables.js +0 -152
- package/dist/api/routes/public/users.js +0 -135
- package/dist/api/routes/public/utils/Endpoint.js +0 -36
- package/dist/api/routes/query.js +0 -47
- package/dist/api/routes/role.js +0 -40
- package/dist/api/routes/routing.js +0 -39
- package/dist/api/routes/row.js +0 -239
- package/dist/api/routes/screen.js +0 -39
- package/dist/api/routes/script.js +0 -35
- package/dist/api/routes/static.js +0 -80
- package/dist/api/routes/table.js +0 -163
- package/dist/api/routes/templates.js +0 -37
- package/dist/api/routes/user.js +0 -43
- package/dist/api/routes/utils/validators.js +0 -238
- package/dist/api/routes/view.js +0 -42
- package/dist/api/routes/webhook.js +0 -43
- package/dist/app.js +0 -132
- package/dist/automations/actions.js +0 -137
- package/dist/automations/automationUtils.js +0 -173
- package/dist/automations/bullboard.js +0 -71
- package/dist/automations/index.js +0 -43
- package/dist/automations/logging/index.js +0 -53
- package/dist/automations/steps/bash.js +0 -111
- package/dist/automations/steps/createRow.js +0 -108
- package/dist/automations/steps/delay.js +0 -53
- package/dist/automations/steps/deleteRow.js +0 -96
- package/dist/automations/steps/discord.js +0 -116
- package/dist/automations/steps/executeQuery.js +0 -134
- package/dist/automations/steps/executeScript.js +0 -106
- package/dist/automations/steps/filter.js +0 -112
- package/dist/automations/steps/loop.js +0 -54
- package/dist/automations/steps/make.js +0 -120
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -220
- package/dist/automations/steps/sendSmtpEmail.js +0 -115
- package/dist/automations/steps/serverLog.js +0 -65
- package/dist/automations/steps/slack.js +0 -98
- package/dist/automations/steps/updateRow.js +0 -144
- package/dist/automations/steps/utils.js +0 -56
- package/dist/automations/steps/zapier.js +0 -117
- package/dist/automations/triggerInfo/app.js +0 -36
- package/dist/automations/triggerInfo/cron.js +0 -35
- package/dist/automations/triggerInfo/index.js +0 -40
- package/dist/automations/triggerInfo/rowDeleted.js +0 -36
- package/dist/automations/triggerInfo/rowSaved.js +0 -44
- package/dist/automations/triggerInfo/rowUpdated.js +0 -44
- package/dist/automations/triggerInfo/webhook.js +0 -40
- package/dist/automations/triggers.js +0 -181
- package/dist/automations/utils.js +0 -275
- package/dist/constants/definitions.js +0 -2
- package/dist/constants/index.js +0 -181
- package/dist/constants/layouts.js +0 -148
- package/dist/constants/screens.js +0 -51
- package/dist/db/defaultData/datasource_bb_default.js +0 -574
- package/dist/db/defaultData/employeeImport.js +0 -155
- package/dist/db/defaultData/expensesImport.js +0 -117
- package/dist/db/defaultData/inventoryImport.js +0 -109
- package/dist/db/defaultData/jobsImport.js +0 -152
- package/dist/db/dynamoClient.js +0 -124
- package/dist/db/inMemoryView.js +0 -62
- package/dist/db/index.js +0 -43
- package/dist/db/linkedRows/LinkController.js +0 -392
- package/dist/db/linkedRows/LinkDocument.js +0 -33
- package/dist/db/linkedRows/index.js +0 -206
- package/dist/db/linkedRows/linkUtils.js +0 -131
- package/dist/db/newid.js +0 -7
- package/dist/db/utils.js +0 -248
- package/dist/db/views/staticViews.js +0 -144
- package/dist/ddApm.js +0 -11
- package/dist/definitions/automations.js +0 -8
- package/dist/definitions/common.js +0 -2
- package/dist/definitions/datasource.js +0 -7
- package/dist/definitions/openapi.js +0 -6
- package/dist/environment.js +0 -109
- package/dist/events/AutomationEmitter.js +0 -53
- package/dist/events/BudibaseEmitter.js +0 -25
- package/dist/events/docUpdates/index.js +0 -17
- package/dist/events/docUpdates/processors.js +0 -18
- package/dist/events/docUpdates/syncUsers.js +0 -49
- package/dist/events/index.js +0 -11
- package/dist/events/utils.js +0 -43
- package/dist/integrations/airtable.js +0 -147
- package/dist/integrations/arangodb.js +0 -103
- package/dist/integrations/base/query.js +0 -32
- package/dist/integrations/base/sql.js +0 -600
- package/dist/integrations/base/sqlTable.js +0 -167
- package/dist/integrations/base/types.js +0 -2
- package/dist/integrations/couchdb.js +0 -125
- package/dist/integrations/dynamodb.js +0 -194
- package/dist/integrations/elasticsearch.js +0 -186
- package/dist/integrations/firebase.js +0 -174
- package/dist/integrations/googlesheets.js +0 -455
- package/dist/integrations/index.js +0 -135
- package/dist/integrations/microsoftSqlServer.js +0 -273
- package/dist/integrations/mongodb.js +0 -614
- package/dist/integrations/mysql.js +0 -256
- package/dist/integrations/oracle.js +0 -375
- package/dist/integrations/postgres.js +0 -300
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -168
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -237
- package/dist/integrations/snowflake.js +0 -102
- package/dist/integrations/utils.js +0 -295
- package/dist/middleware/appInfo.js +0 -22
- package/dist/middleware/authorized.js +0 -112
- package/dist/middleware/builder.js +0 -93
- package/dist/middleware/currentapp.js +0 -103
- package/dist/middleware/joi-validator.js +0 -43
- package/dist/middleware/publicApi.js +0 -25
- package/dist/middleware/resourceId.js +0 -59
- package/dist/middleware/selfhost.js +0 -24
- package/dist/middleware/utils.js +0 -8
- package/dist/migrations/functions/appUrls.js +0 -42
- package/dist/migrations/functions/backfill/app/automations.js +0 -31
- package/dist/migrations/functions/backfill/app/datasources.js +0 -28
- package/dist/migrations/functions/backfill/app/layouts.js +0 -33
- package/dist/migrations/functions/backfill/app/queries.js +0 -50
- package/dist/migrations/functions/backfill/app/roles.js +0 -28
- package/dist/migrations/functions/backfill/app/screens.js +0 -28
- package/dist/migrations/functions/backfill/app/tables.js +0 -37
- package/dist/migrations/functions/backfill/app.js +0 -176
- package/dist/migrations/functions/backfill/global/configs.js +0 -67
- package/dist/migrations/functions/backfill/global/quotas.js +0 -60
- package/dist/migrations/functions/backfill/global/users.js +0 -50
- package/dist/migrations/functions/backfill/global.js +0 -205
- package/dist/migrations/functions/backfill/index.js +0 -32
- package/dist/migrations/functions/backfill/installation.js +0 -80
- package/dist/migrations/functions/syncQuotas.js +0 -52
- package/dist/migrations/functions/tableSettings.js +0 -130
- package/dist/migrations/functions/usageQuotas/index.js +0 -16
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -111
- package/dist/migrations/tests/helpers.js +0 -72
- package/dist/migrations/tests/structures.js +0 -37
- package/dist/sdk/app/applications/index.js +0 -28
- package/dist/sdk/app/applications/sync.js +0 -164
- package/dist/sdk/app/applications/utils.js +0 -21
- package/dist/sdk/app/automations/index.js +0 -29
- package/dist/sdk/app/automations/webhook.js +0 -54
- package/dist/sdk/app/backups/constants.js +0 -6
- package/dist/sdk/app/backups/exports.js +0 -160
- package/dist/sdk/app/backups/imports.js +0 -170
- package/dist/sdk/app/backups/index.js +0 -29
- package/dist/sdk/app/backups/statistics.js +0 -73
- package/dist/sdk/app/datasources/datasources.js +0 -166
- package/dist/sdk/app/datasources/index.js +0 -27
- package/dist/sdk/app/queries/index.js +0 -27
- package/dist/sdk/app/queries/queries.js +0 -60
- package/dist/sdk/app/rows/attachments.js +0 -61
- package/dist/sdk/app/rows/index.js +0 -28
- package/dist/sdk/app/rows/rows.js +0 -30
- package/dist/sdk/app/tables/index.js +0 -65
- package/dist/sdk/index.js +0 -27
- package/dist/sdk/plugins/index.js +0 -27
- package/dist/sdk/plugins/plugins.js +0 -53
- package/dist/sdk/users/index.js +0 -27
- package/dist/sdk/users/utils.js +0 -94
- package/dist/sdk/utils/index.js +0 -29
- package/dist/startup.js +0 -158
- package/dist/threads/automation.js +0 -450
- package/dist/threads/definitions.js +0 -2
- package/dist/threads/index.js +0 -140
- package/dist/threads/query.js +0 -265
- package/dist/threads/utils.js +0 -120
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utilities/appDirectoryTemplate/package.json +0 -10
- package/dist/utilities/budibaseDir.js +0 -5
- package/dist/utilities/centralPath.js +0 -27
- package/dist/utilities/csv.js +0 -33
- package/dist/utilities/fileSystem/app.js +0 -88
- package/dist/utilities/fileSystem/clientLibrary.js +0 -138
- package/dist/utilities/fileSystem/filesystem.js +0 -180
- package/dist/utilities/fileSystem/index.js +0 -21
- package/dist/utilities/fileSystem/plugin.js +0 -76
- package/dist/utilities/fileSystem/processor.js +0 -34
- package/dist/utilities/fileSystem/template.js +0 -47
- package/dist/utilities/global.js +0 -146
- package/dist/utilities/index.js +0 -143
- package/dist/utilities/redis.js +0 -117
- package/dist/utilities/retry.js +0 -30
- package/dist/utilities/routing/index.js +0 -39
- package/dist/utilities/rowProcessor/index.js +0 -282
- package/dist/utilities/rowProcessor/map.js +0 -116
- package/dist/utilities/rowProcessor/utils.js +0 -87
- package/dist/utilities/schema.js +0 -112
- package/dist/utilities/scriptRunner.js +0 -26
- package/dist/utilities/security.js +0 -57
- package/dist/utilities/statusCodes.js +0 -9
- package/dist/utilities/usageQuota/rows.js +0 -88
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/dist/utilities/users.js +0 -57
- package/dist/utilities/workerRequests.js +0 -171
- package/dist/watch.js +0 -53
- package/dist/websockets/client.js +0 -14
- package/dist/websockets/grid.js +0 -60
- package/dist/websockets/index.js +0 -17
- package/dist/websockets/websocket.js +0 -78
- package/src/automations/tests/zapier.spec.js +0 -27
- /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
- /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
- /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
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 = {
|
|
@@ -20,9 +21,9 @@ const baseConfig: Config.InitialProjectOptions = {
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
// add pro sources if they exist
|
|
23
|
-
if (fs.existsSync("
|
|
24
|
-
baseConfig.moduleNameMapper["@budibase/pro"] =
|
|
25
|
-
"<rootDir
|
|
24
|
+
if (fs.existsSync("../pro/packages")) {
|
|
25
|
+
baseConfig.moduleNameMapper!["@budibase/pro"] =
|
|
26
|
+
"<rootDir>/../pro/packages/pro/src"
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
const config: Config.InitialOptions = {
|
|
@@ -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
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"watch": ["src", "../backend-core", "
|
|
2
|
+
"watch": ["src", "../backend-core", "../pro/packages/pro"],
|
|
3
3
|
"ext": "js,ts,json",
|
|
4
|
-
"ignore": [
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
"ignore": [
|
|
5
|
+
"src/**/*.spec.ts",
|
|
6
|
+
"src/**/*.spec.js",
|
|
7
|
+
"../backend-core/dist/**/*"
|
|
8
|
+
],
|
|
9
|
+
"exec": "node ./scripts/build.js && node ./dist/index.js"
|
|
10
|
+
}
|
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.
|
|
4
|
+
"version": "2.6.24-alpha.0",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -10,22 +10,23 @@
|
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"prebuild": "rimraf dist/",
|
|
13
|
-
"build": "
|
|
13
|
+
"build": "node ./scripts/build.js",
|
|
14
|
+
"check:types": "tsc -p tsconfig.build.json --noEmit",
|
|
15
|
+
"postbuild": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
|
|
14
16
|
"build:dev": "yarn prebuild && tsc --build --watch --preserveWatchOutput",
|
|
15
17
|
"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
18
|
"test": "bash scripts/test.sh",
|
|
18
19
|
"test:memory": "jest --maxWorkers=2 --logHeapUsage --forceExit",
|
|
19
20
|
"test:watch": "jest --watch",
|
|
20
|
-
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
|
|
21
|
-
"build:docker": "yarn
|
|
21
|
+
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client && yarn build --configuration=production",
|
|
22
|
+
"build:docker": "yarn predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION",
|
|
22
23
|
"build:docs": "node ./scripts/docs/generate.js open",
|
|
23
24
|
"run:docker": "node dist/index.js",
|
|
24
25
|
"run:docker:cluster": "pm2-runtime start pm2.config.js",
|
|
25
26
|
"dev:stack:up": "node scripts/dev/manage.js up",
|
|
26
27
|
"dev:stack:down": "node scripts/dev/manage.js down",
|
|
27
28
|
"dev:stack:nuke": "node scripts/dev/manage.js nuke",
|
|
28
|
-
"dev:builder": "yarn run dev:stack:up && nodemon",
|
|
29
|
+
"dev:builder": "yarn run dev:stack:up && rimraf dist/ && nodemon",
|
|
29
30
|
"dev:built": "yarn run dev:stack:up && yarn run run:docker",
|
|
30
31
|
"specs": "ts-node specs/generate.ts && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
|
|
31
32
|
"initialise": "node scripts/initialise.js",
|
|
@@ -45,12 +46,12 @@
|
|
|
45
46
|
"license": "GPL-3.0",
|
|
46
47
|
"dependencies": {
|
|
47
48
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
48
|
-
"@budibase/backend-core": "
|
|
49
|
-
"@budibase/client": "
|
|
50
|
-
"@budibase/pro": "2.6.
|
|
51
|
-
"@budibase/shared-core": "
|
|
52
|
-
"@budibase/string-templates": "
|
|
53
|
-
"@budibase/types": "
|
|
49
|
+
"@budibase/backend-core": "2.6.24-alpha.0",
|
|
50
|
+
"@budibase/client": "2.6.24-alpha.0",
|
|
51
|
+
"@budibase/pro": "2.6.24-alpha.0",
|
|
52
|
+
"@budibase/shared-core": "2.6.24-alpha.0",
|
|
53
|
+
"@budibase/string-templates": "2.6.24-alpha.0",
|
|
54
|
+
"@budibase/types": "2.6.24-alpha.0",
|
|
54
55
|
"@bull-board/api": "3.7.0",
|
|
55
56
|
"@bull-board/koa": "3.9.4",
|
|
56
57
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -58,6 +59,7 @@
|
|
|
58
59
|
"@koa/router": "8.0.8",
|
|
59
60
|
"@sendgrid/mail": "7.1.1",
|
|
60
61
|
"@sentry/node": "6.17.7",
|
|
62
|
+
"@socket.io/redis-adapter": "^8.2.1",
|
|
61
63
|
"airtable": "0.10.1",
|
|
62
64
|
"arangojs": "7.2.0",
|
|
63
65
|
"aws-sdk": "2.1030.0",
|
|
@@ -78,6 +80,7 @@
|
|
|
78
80
|
"global-agent": "3.0.0",
|
|
79
81
|
"google-auth-library": "7.12.0",
|
|
80
82
|
"google-spreadsheet": "3.2.0",
|
|
83
|
+
"ioredis": "5.3.2",
|
|
81
84
|
"jimp": "0.16.1",
|
|
82
85
|
"joi": "17.6.0",
|
|
83
86
|
"js-yaml": "4.1.0",
|
|
@@ -98,8 +101,10 @@
|
|
|
98
101
|
"mssql": "6.2.3",
|
|
99
102
|
"mysql2": "2.3.3",
|
|
100
103
|
"node-fetch": "2.6.7",
|
|
104
|
+
"object-sizeof": "2.6.1",
|
|
101
105
|
"open": "8.4.0",
|
|
102
|
-
"
|
|
106
|
+
"openai": "^3.2.1",
|
|
107
|
+
"pg": "8.10.0",
|
|
103
108
|
"posthog-node": "1.3.0",
|
|
104
109
|
"pouchdb": "7.3.0",
|
|
105
110
|
"pouchdb-adapter-memory": "7.2.2",
|
|
@@ -133,7 +138,6 @@
|
|
|
133
138
|
"@types/bson": "4.2.0",
|
|
134
139
|
"@types/global-agent": "2.1.1",
|
|
135
140
|
"@types/google-spreadsheet": "3.1.5",
|
|
136
|
-
"@types/ioredis": "4.28.10",
|
|
137
141
|
"@types/jest": "29.5.0",
|
|
138
142
|
"@types/koa": "2.13.4",
|
|
139
143
|
"@types/koa__router": "8.0.8",
|
|
@@ -141,6 +145,7 @@
|
|
|
141
145
|
"@types/node": "14.18.20",
|
|
142
146
|
"@types/node-fetch": "2.6.1",
|
|
143
147
|
"@types/oracledb": "5.2.2",
|
|
148
|
+
"@types/pg": "8.6.6",
|
|
144
149
|
"@types/pouchdb": "6.4.0",
|
|
145
150
|
"@types/redis": "4.0.11",
|
|
146
151
|
"@types/server-destroy": "1.0.1",
|
|
@@ -152,7 +157,6 @@
|
|
|
152
157
|
"copyfiles": "2.4.1",
|
|
153
158
|
"docker-compose": "0.23.17",
|
|
154
159
|
"eslint": "6.8.0",
|
|
155
|
-
"ioredis-mock": "7.2.0",
|
|
156
160
|
"is-wsl": "2.2.0",
|
|
157
161
|
"jest": "29.5.0",
|
|
158
162
|
"jest-openapi": "0.14.2",
|
|
@@ -176,5 +180,20 @@
|
|
|
176
180
|
"optionalDependencies": {
|
|
177
181
|
"oracledb": "5.3.0"
|
|
178
182
|
},
|
|
179
|
-
"
|
|
183
|
+
"nx": {
|
|
184
|
+
"targets": {
|
|
185
|
+
"test": {
|
|
186
|
+
"dependsOn": [
|
|
187
|
+
{
|
|
188
|
+
"projects": [
|
|
189
|
+
"@budibase/string-templates",
|
|
190
|
+
"@budibase/shared-core"
|
|
191
|
+
],
|
|
192
|
+
"target": "build"
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"gitHead": "71a9558d12c55e7d9ef87b82995c62497662acf8"
|
|
180
199
|
}
|
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
|
+
}
|
|
@@ -26,10 +26,13 @@ import {
|
|
|
26
26
|
env as envCore,
|
|
27
27
|
} from "@budibase/backend-core"
|
|
28
28
|
import { USERS_TABLE_SCHEMA } from "../../constants"
|
|
29
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
DEFAULT_BB_DATASOURCE_ID,
|
|
31
|
+
buildDefaultDocs,
|
|
32
|
+
} from "../../db/defaultData/datasource_bb_default"
|
|
30
33
|
import { removeAppFromUserRoles } from "../../utilities/workerRequests"
|
|
31
34
|
import { stringToReadStream, isQsTrue } from "../../utilities"
|
|
32
|
-
import { getLocksById } from "../../utilities/redis"
|
|
35
|
+
import { getLocksById, doesUserHaveLock } from "../../utilities/redis"
|
|
33
36
|
import {
|
|
34
37
|
updateClientLibrary,
|
|
35
38
|
backupClientLibrary,
|
|
@@ -111,11 +114,7 @@ function checkAppName(
|
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
|
|
114
|
-
async function createInstance(
|
|
115
|
-
appId: string,
|
|
116
|
-
template: any,
|
|
117
|
-
includeSampleData: boolean
|
|
118
|
-
) {
|
|
117
|
+
async function createInstance(appId: string, template: any) {
|
|
119
118
|
const db = context.getAppDB()
|
|
120
119
|
await db.put({
|
|
121
120
|
_id: "_design/database",
|
|
@@ -142,21 +141,25 @@ async function createInstance(
|
|
|
142
141
|
} else {
|
|
143
142
|
// create the users table
|
|
144
143
|
await db.put(USERS_TABLE_SCHEMA)
|
|
145
|
-
|
|
146
|
-
if (includeSampleData) {
|
|
147
|
-
// create ootb stock db
|
|
148
|
-
await addDefaultTables(db)
|
|
149
|
-
}
|
|
150
144
|
}
|
|
151
145
|
|
|
152
146
|
return { _id: appId }
|
|
153
147
|
}
|
|
154
148
|
|
|
155
|
-
async
|
|
156
|
-
const
|
|
149
|
+
export const addSampleData = async (ctx: UserCtx) => {
|
|
150
|
+
const db = context.getAppDB()
|
|
157
151
|
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
try {
|
|
153
|
+
// Check if default datasource exists before creating it
|
|
154
|
+
await sdk.datasources.get(DEFAULT_BB_DATASOURCE_ID)
|
|
155
|
+
} catch (err: any) {
|
|
156
|
+
const defaultDbDocs = buildDefaultDocs()
|
|
157
|
+
|
|
158
|
+
// add in the default db data docs - tables, datasource, rows and links
|
|
159
|
+
await db.bulkDocs([...defaultDbDocs])
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
ctx.status = 200
|
|
160
163
|
}
|
|
161
164
|
|
|
162
165
|
export async function fetch(ctx: UserCtx) {
|
|
@@ -227,6 +230,7 @@ export async function fetchAppPackage(ctx: UserCtx) {
|
|
|
227
230
|
screens,
|
|
228
231
|
layouts,
|
|
229
232
|
clientLibPath,
|
|
233
|
+
hasLock: await doesUserHaveLock(application.appId, ctx.user),
|
|
230
234
|
}
|
|
231
235
|
}
|
|
232
236
|
|
|
@@ -247,16 +251,11 @@ async function performAppCreate(ctx: UserCtx) {
|
|
|
247
251
|
if (ctx.request.files && ctx.request.files.templateFile) {
|
|
248
252
|
instanceConfig.file = ctx.request.files.templateFile
|
|
249
253
|
}
|
|
250
|
-
const includeSampleData = isQsTrue(ctx.request.body.sampleData)
|
|
251
254
|
const tenantId = tenancy.isMultiTenant() ? tenancy.getTenantId() : null
|
|
252
255
|
const appId = generateDevAppID(generateAppID(tenantId))
|
|
253
256
|
|
|
254
257
|
return await context.doInAppContext(appId, async () => {
|
|
255
|
-
const instance = await createInstance(
|
|
256
|
-
appId,
|
|
257
|
-
instanceConfig,
|
|
258
|
-
includeSampleData
|
|
259
|
-
)
|
|
258
|
+
const instance = await createInstance(appId, instanceConfig)
|
|
260
259
|
const db = context.getAppDB()
|
|
261
260
|
|
|
262
261
|
let newApplication: App = {
|
|
@@ -14,9 +14,16 @@ import { deleteEntityMetadata } from "../../utilities"
|
|
|
14
14
|
import { MetadataTypes } from "../../constants"
|
|
15
15
|
import { setTestFlag, clearTestFlag } from "../../utilities/redis"
|
|
16
16
|
import { context, cache, events } from "@budibase/backend-core"
|
|
17
|
-
import { automations } from "@budibase/pro"
|
|
18
|
-
import {
|
|
17
|
+
import { automations, features } from "@budibase/pro"
|
|
18
|
+
import {
|
|
19
|
+
Automation,
|
|
20
|
+
AutomationActionStepId,
|
|
21
|
+
AutomationResults,
|
|
22
|
+
BBContext,
|
|
23
|
+
} from "@budibase/types"
|
|
19
24
|
import { getActionDefinitions as actionDefs } from "../../automations/actions"
|
|
25
|
+
import sdk from "../../sdk"
|
|
26
|
+
import { db as dbCore } from "@budibase/backend-core"
|
|
20
27
|
|
|
21
28
|
async function getActionDefinitions() {
|
|
22
29
|
return removeDeprecated(await actionDefs())
|
|
@@ -257,13 +264,34 @@ export async function getDefinitionList(ctx: BBContext) {
|
|
|
257
264
|
export async function trigger(ctx: BBContext) {
|
|
258
265
|
const db = context.getAppDB()
|
|
259
266
|
let automation = await db.get(ctx.params.id)
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
+
|
|
268
|
+
let hasCollectStep = sdk.automations.utils.checkForCollectStep(automation)
|
|
269
|
+
if (hasCollectStep && (await features.isSyncAutomationsEnabled())) {
|
|
270
|
+
const response: AutomationResults = await triggers.externalTrigger(
|
|
271
|
+
automation,
|
|
272
|
+
{
|
|
273
|
+
fields: ctx.request.body.fields,
|
|
274
|
+
timeout: ctx.request.body.timeout * 1000 || 120000,
|
|
275
|
+
},
|
|
276
|
+
{ getResponses: true }
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
let collectedValue = response.steps.find(
|
|
280
|
+
step => step.stepId === AutomationActionStepId.COLLECT
|
|
281
|
+
)
|
|
282
|
+
ctx.body = collectedValue?.outputs
|
|
283
|
+
} else {
|
|
284
|
+
if (ctx.appId && !dbCore.isProdAppID(ctx.appId)) {
|
|
285
|
+
ctx.throw(400, "Only apps in production support this endpoint")
|
|
286
|
+
}
|
|
287
|
+
await triggers.externalTrigger(automation, {
|
|
288
|
+
...ctx.request.body,
|
|
289
|
+
appId: ctx.appId,
|
|
290
|
+
})
|
|
291
|
+
ctx.body = {
|
|
292
|
+
message: `Automation ${automation._id} has been triggered.`,
|
|
293
|
+
automation,
|
|
294
|
+
}
|
|
267
295
|
}
|
|
268
296
|
}
|
|
269
297
|
|
|
@@ -18,10 +18,88 @@ import {
|
|
|
18
18
|
Row,
|
|
19
19
|
CreateDatasourceResponse,
|
|
20
20
|
UpdateDatasourceResponse,
|
|
21
|
-
UpdateDatasourceRequest,
|
|
22
21
|
CreateDatasourceRequest,
|
|
22
|
+
VerifyDatasourceRequest,
|
|
23
|
+
VerifyDatasourceResponse,
|
|
24
|
+
FetchDatasourceInfoRequest,
|
|
25
|
+
FetchDatasourceInfoResponse,
|
|
26
|
+
IntegrationBase,
|
|
27
|
+
DatasourcePlus,
|
|
23
28
|
} from "@budibase/types"
|
|
24
29
|
import sdk from "../../sdk"
|
|
30
|
+
import { builderSocket } from "../../websockets"
|
|
31
|
+
|
|
32
|
+
function getErrorTables(errors: any, errorType: string) {
|
|
33
|
+
return Object.entries(errors)
|
|
34
|
+
.filter(entry => entry[1] === errorType)
|
|
35
|
+
.map(([name]) => name)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function updateError(error: any, newError: any, tables: string[]) {
|
|
39
|
+
if (!error) {
|
|
40
|
+
error = ""
|
|
41
|
+
}
|
|
42
|
+
if (error.length > 0) {
|
|
43
|
+
error += "\n"
|
|
44
|
+
}
|
|
45
|
+
error += `${newError} ${tables.join(", ")}`
|
|
46
|
+
return error
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function getConnector(
|
|
50
|
+
datasource: Datasource
|
|
51
|
+
): Promise<IntegrationBase | DatasourcePlus> {
|
|
52
|
+
const Connector = await getIntegration(datasource.source)
|
|
53
|
+
// can't enrich if it doesn't have an ID yet
|
|
54
|
+
if (datasource._id) {
|
|
55
|
+
datasource = await sdk.datasources.enrich(datasource)
|
|
56
|
+
}
|
|
57
|
+
// Connect to the DB and build the schema
|
|
58
|
+
return new Connector(datasource.config)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function getAndMergeDatasource(datasource: Datasource) {
|
|
62
|
+
let existingDatasource: undefined | Datasource
|
|
63
|
+
if (datasource._id) {
|
|
64
|
+
existingDatasource = await sdk.datasources.get(datasource._id)
|
|
65
|
+
}
|
|
66
|
+
let enrichedDatasource = datasource
|
|
67
|
+
if (existingDatasource) {
|
|
68
|
+
enrichedDatasource = sdk.datasources.mergeConfigs(
|
|
69
|
+
datasource,
|
|
70
|
+
existingDatasource
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
return await sdk.datasources.enrich(enrichedDatasource)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function buildSchemaHelper(datasource: Datasource) {
|
|
77
|
+
const connector = (await getConnector(datasource)) as DatasourcePlus
|
|
78
|
+
await connector.buildSchema(datasource._id!, datasource.entities!)
|
|
79
|
+
|
|
80
|
+
const errors = connector.schemaErrors
|
|
81
|
+
let error = null
|
|
82
|
+
if (errors && Object.keys(errors).length > 0) {
|
|
83
|
+
const noKey = getErrorTables(errors, BuildSchemaErrors.NO_KEY)
|
|
84
|
+
const invalidCol = getErrorTables(errors, BuildSchemaErrors.INVALID_COLUMN)
|
|
85
|
+
if (noKey.length) {
|
|
86
|
+
error = updateError(
|
|
87
|
+
error,
|
|
88
|
+
"No primary key constraint found for the following:",
|
|
89
|
+
noKey
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
if (invalidCol.length) {
|
|
93
|
+
const invalidCols = Object.values(InvalidColumns).join(", ")
|
|
94
|
+
error = updateError(
|
|
95
|
+
error,
|
|
96
|
+
`Cannot use columns ${invalidCols} found in following:`,
|
|
97
|
+
invalidCol
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return { tables: connector.tables, error }
|
|
102
|
+
}
|
|
25
103
|
|
|
26
104
|
export async function fetch(ctx: UserCtx) {
|
|
27
105
|
// Get internal tables
|
|
@@ -66,6 +144,38 @@ export async function fetch(ctx: UserCtx) {
|
|
|
66
144
|
ctx.body = [bbInternalDb, ...datasources]
|
|
67
145
|
}
|
|
68
146
|
|
|
147
|
+
export async function verify(
|
|
148
|
+
ctx: UserCtx<VerifyDatasourceRequest, VerifyDatasourceResponse>
|
|
149
|
+
) {
|
|
150
|
+
const { datasource } = ctx.request.body
|
|
151
|
+
const enrichedDatasource = await getAndMergeDatasource(datasource)
|
|
152
|
+
const connector = await getConnector(enrichedDatasource)
|
|
153
|
+
if (!connector.testConnection) {
|
|
154
|
+
ctx.throw(400, "Connection information verification not supported")
|
|
155
|
+
}
|
|
156
|
+
const response = await connector.testConnection()
|
|
157
|
+
|
|
158
|
+
ctx.body = {
|
|
159
|
+
connected: response.connected,
|
|
160
|
+
error: response.error,
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export async function information(
|
|
165
|
+
ctx: UserCtx<FetchDatasourceInfoRequest, FetchDatasourceInfoResponse>
|
|
166
|
+
) {
|
|
167
|
+
const { datasource } = ctx.request.body
|
|
168
|
+
const enrichedDatasource = await getAndMergeDatasource(datasource)
|
|
169
|
+
const connector = (await getConnector(enrichedDatasource)) as DatasourcePlus
|
|
170
|
+
if (!connector.getTableNames) {
|
|
171
|
+
ctx.throw(400, "Table name fetching not supported by datasource")
|
|
172
|
+
}
|
|
173
|
+
const tableNames = await connector.getTableNames()
|
|
174
|
+
ctx.body = {
|
|
175
|
+
tableNames,
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
69
179
|
export async function buildSchemaFromDb(ctx: UserCtx) {
|
|
70
180
|
const db = context.getAppDB()
|
|
71
181
|
const datasource = await sdk.datasources.get(ctx.params.datasourceId)
|
|
@@ -193,6 +303,7 @@ export async function update(ctx: UserCtx<any, UpdateDatasourceResponse>) {
|
|
|
193
303
|
ctx.body = {
|
|
194
304
|
datasource: await sdk.datasources.removeSecretSingle(datasource),
|
|
195
305
|
}
|
|
306
|
+
builderSocket?.emitDatasourceUpdate(ctx, datasource)
|
|
196
307
|
}
|
|
197
308
|
|
|
198
309
|
export async function save(
|
|
@@ -235,6 +346,7 @@ export async function save(
|
|
|
235
346
|
response.error = schemaError
|
|
236
347
|
}
|
|
237
348
|
ctx.body = response
|
|
349
|
+
builderSocket?.emitDatasourceUpdate(ctx, datasource)
|
|
238
350
|
}
|
|
239
351
|
|
|
240
352
|
async function destroyInternalTablesBySourceId(datasourceId: string) {
|
|
@@ -294,6 +406,7 @@ export async function destroy(ctx: UserCtx) {
|
|
|
294
406
|
|
|
295
407
|
ctx.message = `Datasource deleted.`
|
|
296
408
|
ctx.status = 200
|
|
409
|
+
builderSocket?.emitDatasourceDeletion(ctx, datasourceId)
|
|
297
410
|
}
|
|
298
411
|
|
|
299
412
|
export async function find(ctx: UserCtx) {
|
|
@@ -311,51 +424,3 @@ export async function query(ctx: UserCtx) {
|
|
|
311
424
|
ctx.throw(400, err)
|
|
312
425
|
}
|
|
313
426
|
}
|
|
314
|
-
|
|
315
|
-
function getErrorTables(errors: any, errorType: string) {
|
|
316
|
-
return Object.entries(errors)
|
|
317
|
-
.filter(entry => entry[1] === errorType)
|
|
318
|
-
.map(([name]) => name)
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
function updateError(error: any, newError: any, tables: string[]) {
|
|
322
|
-
if (!error) {
|
|
323
|
-
error = ""
|
|
324
|
-
}
|
|
325
|
-
if (error.length > 0) {
|
|
326
|
-
error += "\n"
|
|
327
|
-
}
|
|
328
|
-
error += `${newError} ${tables.join(", ")}`
|
|
329
|
-
return error
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
async function buildSchemaHelper(datasource: Datasource) {
|
|
333
|
-
const Connector = await getIntegration(datasource.source)
|
|
334
|
-
datasource = await sdk.datasources.enrich(datasource)
|
|
335
|
-
// Connect to the DB and build the schema
|
|
336
|
-
const connector = new Connector(datasource.config)
|
|
337
|
-
await connector.buildSchema(datasource._id, datasource.entities)
|
|
338
|
-
|
|
339
|
-
const errors = connector.schemaErrors
|
|
340
|
-
let error = null
|
|
341
|
-
if (errors && Object.keys(errors).length > 0) {
|
|
342
|
-
const noKey = getErrorTables(errors, BuildSchemaErrors.NO_KEY)
|
|
343
|
-
const invalidCol = getErrorTables(errors, BuildSchemaErrors.INVALID_COLUMN)
|
|
344
|
-
if (noKey.length) {
|
|
345
|
-
error = updateError(
|
|
346
|
-
error,
|
|
347
|
-
"No primary key constraint found for the following:",
|
|
348
|
-
noKey
|
|
349
|
-
)
|
|
350
|
-
}
|
|
351
|
-
if (invalidCol.length) {
|
|
352
|
-
const invalidCols = Object.values(InvalidColumns).join(", ")
|
|
353
|
-
error = updateError(
|
|
354
|
-
error,
|
|
355
|
-
`Cannot use columns ${invalidCols} found in following:`,
|
|
356
|
-
invalidCol
|
|
357
|
-
)
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
return { tables: connector.tables, error }
|
|
361
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getDefinitions } from "../../integrations"
|
|
1
|
+
import { getDefinition, getDefinitions } from "../../integrations"
|
|
2
2
|
import { BBContext } from "@budibase/types"
|
|
3
3
|
|
|
4
4
|
export async function fetch(ctx: BBContext) {
|
|
@@ -7,7 +7,7 @@ export async function fetch(ctx: BBContext) {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export async function find(ctx: BBContext) {
|
|
10
|
-
const
|
|
10
|
+
const def = await getDefinition(ctx.params.type)
|
|
11
|
+
ctx.body = def
|
|
11
12
|
ctx.status = 200
|
|
12
|
-
ctx.body = defs[ctx.params.type]
|
|
13
13
|
}
|
|
@@ -71,7 +71,7 @@ export async function create(ctx: any) {
|
|
|
71
71
|
|
|
72
72
|
const doc = await pro.plugins.storePlugin(metadata, directory, source)
|
|
73
73
|
|
|
74
|
-
clientAppSocket
|
|
74
|
+
clientAppSocket?.emit("plugins-update", { name, hash: doc.hash })
|
|
75
75
|
ctx.body = {
|
|
76
76
|
message: "Plugin uploaded successfully",
|
|
77
77
|
plugins: [doc],
|