@budibase/server 2.2.12-alpha.7 → 2.2.12-alpha.70
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/Dockerfile +1 -1
- package/__mocks__/node-fetch.ts +2 -0
- package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
- package/builder/assets/bg.29e85dd5.png +0 -0
- package/builder/assets/bulgaria.bd68393d.png +0 -0
- package/builder/assets/covanta.72c46c1e.png +0 -0
- package/builder/assets/index.80bd6b61.css +6 -0
- package/builder/assets/index.c1b13e6f.js +1798 -0
- package/builder/assets/schnellecke.cf1837a8.png +0 -0
- package/builder/index.html +3 -3
- package/coverage/clover.xml +5113 -4924
- package/coverage/coverage-final.json +268 -264
- package/coverage/lcov-report/index.html +202 -157
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/application.ts.html +185 -164
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +24 -24
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +15 -15
- package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +112 -88
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +80 -80
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +17 -17
- package/coverage/lcov-report/src/api/controllers/index.html +36 -36
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +19 -19
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +29 -29
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +13 -13
- package/coverage/lcov-report/src/api/controllers/query/index.html +7 -7
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +89 -65
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +36 -18
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +60 -30
- package/coverage/lcov-report/src/api/controllers/row/index.html +40 -40
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +34 -34
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +142 -70
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +120 -120
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +22 -22
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +152 -38
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/script.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +39 -42
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +52 -52
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +43 -37
- package/coverage/lcov-report/src/api/controllers/table/index.html +34 -34
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +155 -68
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +47 -47
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +66 -69
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/user.ts.html +99 -75
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +62 -17
- package/coverage/lcov-report/src/api/controllers/view/index.html +29 -29
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +53 -92
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +27 -27
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/application.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
- package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/index.html +5 -5
- package/coverage/lcov-report/src/api/routes/index.ts.html +42 -36
- package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
- package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +4 -4
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/row.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/table.ts.html +26 -95
- package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +43 -43
- package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
- package/coverage/lcov-report/src/app.ts.html +13 -7
- package/coverage/lcov-report/src/automations/actions.ts.html +27 -27
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +59 -59
- package/coverage/lcov-report/src/automations/bullboard.ts.html +9 -9
- package/coverage/lcov-report/src/automations/index.html +30 -30
- package/coverage/lcov-report/src/automations/index.ts.html +10 -10
- package/coverage/lcov-report/src/automations/logging/index.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +8 -8
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +8 -8
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/index.html +15 -15
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +38 -38
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +10 -10
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +6 -6
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +13 -13
- package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggers.ts.html +52 -37
- package/coverage/lcov-report/src/automations/utils.ts.html +52 -52
- package/coverage/lcov-report/src/constants/index.html +1 -1
- package/coverage/lcov-report/src/constants/index.ts.html +2 -2
- package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
- package/coverage/lcov-report/src/constants/screens.ts.html +3 -3
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +22 -22
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +15 -15
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +4 -4
- package/coverage/lcov-report/src/db/index.html +1 -1
- package/coverage/lcov-report/src/db/index.ts.html +9 -9
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +18 -18
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
- package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +27 -27
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +13 -13
- package/coverage/lcov-report/src/db/newid.ts.html +4 -4
- package/coverage/lcov-report/src/db/utils.ts.html +40 -40
- package/coverage/lcov-report/src/definitions/automations.ts.html +6 -3
- package/coverage/lcov-report/src/definitions/index.html +5 -20
- package/coverage/lcov-report/src/environment.ts.html +10 -10
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +8 -8
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
- package/coverage/lcov-report/src/events/index.html +1 -1
- package/coverage/lcov-report/src/events/index.ts.html +4 -4
- package/coverage/lcov-report/src/events/utils.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +13 -13
- package/coverage/lcov-report/src/index.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/base/index.html +11 -11
- package/coverage/lcov-report/src/integrations/base/query.ts.html +14 -8
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +12 -12
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +110 -32
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +9 -9
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +26 -14
- package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
- package/coverage/lcov-report/src/integrations/index.html +47 -47
- package/coverage/lcov-report/src/integrations/index.ts.html +49 -49
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +417 -285
- package/coverage/lcov-report/src/integrations/mysql.ts.html +11 -11
- package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
- package/coverage/lcov-report/src/integrations/postgres.ts.html +10 -10
- package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +15 -150
- package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/rest.ts.html +36 -45
- package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/src/integrations/utils.ts.html +18 -18
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +5 -5
- package/coverage/lcov-report/src/middleware/authorized.ts.html +27 -27
- package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +45 -42
- package/coverage/lcov-report/src/middleware/index.html +1 -1
- package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +21 -21
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
- package/coverage/lcov-report/src/migrations/index.html +1 -1
- package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
- package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
- package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +22 -22
- package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
- package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +18 -18
- package/coverage/lcov-report/src/sdk/app/backups/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +7 -7
- package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
- package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
- package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
- package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
- package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +100 -0
- package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
- package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/tables/index.html +11 -11
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +27 -18
- package/coverage/lcov-report/src/sdk/index.html +5 -5
- package/coverage/lcov-report/src/sdk/index.ts.html +23 -11
- package/coverage/lcov-report/src/sdk/users/index.html +1 -1
- package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +28 -28
- package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
- package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
- package/coverage/lcov-report/src/startup.ts.html +34 -34
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +134 -125
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
- package/coverage/lcov-report/src/tests/utilities/index.html +21 -21
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +213 -24
- package/coverage/lcov-report/src/threads/automation.ts.html +216 -186
- package/coverage/lcov-report/src/threads/index.html +30 -30
- package/coverage/lcov-report/src/threads/index.ts.html +24 -24
- package/coverage/lcov-report/src/threads/query.ts.html +68 -29
- package/coverage/lcov-report/src/threads/utils.ts.html +9 -9
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +2 -2
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +9 -9
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +27 -21
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +21 -21
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +5 -8
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/global.ts.html +40 -40
- package/coverage/lcov-report/src/utilities/index.html +39 -39
- package/coverage/lcov-report/src/utilities/index.ts.html +12 -12
- package/coverage/lcov-report/src/utilities/redis.ts.html +12 -12
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +50 -50
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +14 -14
- package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +173 -233
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/security.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/users.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +38 -11
- package/coverage/lcov-report/src/watch.ts.html +7 -7
- package/coverage/lcov-report/src/websocket.ts.html +3 -3
- package/coverage/lcov.info +7892 -7532
- package/dist/api/controllers/application.js +73 -74
- package/dist/api/controllers/cloud.js +1 -1
- package/dist/api/controllers/datasource.js +24 -15
- package/dist/api/controllers/query/index.js +18 -11
- package/dist/api/controllers/row/ExternalRequest.js +12 -3
- package/dist/api/controllers/row/external.js +20 -13
- package/dist/api/controllers/row/internal.js +40 -15
- package/dist/api/controllers/row/utils.js +35 -3
- package/dist/api/controllers/static/index.js +38 -38
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
- package/dist/api/controllers/table/external.js +16 -35
- package/dist/api/controllers/table/index.js +44 -15
- package/dist/api/controllers/table/internal.js +4 -4
- package/dist/api/controllers/table/utils.js +9 -9
- package/dist/api/controllers/user.js +14 -6
- package/dist/api/controllers/view/exporters.js +22 -6
- package/dist/api/controllers/view/index.js +20 -56
- package/dist/api/controllers/webhook.js +45 -43
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/row.js +2 -2
- package/dist/api/routes/table.js +6 -37
- package/dist/api/routes/utils/validators.js +1 -1
- package/dist/app.js +1 -0
- package/dist/automations/triggers.js +1 -0
- package/dist/definitions/datasource.js +0 -6
- package/dist/index.js +2 -2
- package/dist/integrations/base/query.js +7 -2
- package/dist/integrations/base/sqlTable.js +14 -14
- package/dist/integrations/couchdb.js +34 -8
- package/dist/integrations/dynamodb.js +8 -5
- package/dist/integrations/elasticsearch.js +7 -3
- package/dist/integrations/index.js +5 -5
- package/dist/integrations/mongodb.js +311 -271
- package/dist/integrations/mysql.js +2 -2
- package/dist/integrations/queries/sql.js +73 -100
- package/dist/integrations/rest.js +16 -18
- package/dist/middleware/currentapp.js +4 -2
- package/dist/package.json +7 -7
- package/dist/sdk/app/datasources/datasources.js +147 -0
- package/dist/sdk/app/datasources/index.js +27 -0
- package/dist/sdk/app/queries/index.js +27 -0
- package/dist/sdk/app/queries/queries.js +60 -0
- package/dist/sdk/app/tables/index.js +6 -2
- package/dist/sdk/index.js +4 -0
- package/dist/sdk/utils/index.js +29 -0
- package/dist/threads/automation.js +18 -7
- package/dist/threads/query.js +27 -13
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/filesystem.js +36 -34
- package/dist/utilities/fileSystem/plugin.js +17 -14
- package/dist/utilities/fileSystem/template.js +7 -4
- package/dist/utilities/schema.js +108 -0
- package/dist/utilities/workerRequests.js +2 -0
- package/package.json +8 -8
- package/scripts/dev/manage.js +3 -2
- package/src/api/controllers/application.ts +81 -74
- package/src/api/controllers/cloud.ts +1 -1
- package/src/api/controllers/datasource.ts +33 -25
- package/src/api/controllers/query/index.ts +47 -39
- package/src/api/controllers/row/ExternalRequest.ts +8 -2
- package/src/api/controllers/row/external.ts +24 -14
- package/src/api/controllers/row/internal.ts +42 -18
- package/src/api/controllers/row/utils.ts +40 -2
- package/src/api/controllers/static/index.ts +17 -18
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
- package/src/api/controllers/table/external.ts +18 -16
- package/src/api/controllers/table/index.ts +46 -17
- package/src/api/controllers/table/internal.ts +4 -4
- package/src/api/controllers/table/utils.ts +12 -13
- package/src/api/controllers/user.ts +21 -13
- package/src/api/controllers/view/exporters.ts +20 -5
- package/src/api/controllers/view/index.ts +22 -35
- package/src/api/controllers/webhook.ts +48 -46
- package/src/api/routes/index.ts +2 -0
- package/src/api/routes/row.ts +1 -1
- package/src/api/routes/table.ts +15 -38
- package/src/api/routes/tests/datasource.spec.ts +35 -1
- package/src/api/routes/tests/misc.spec.js +4 -10
- package/src/api/routes/tests/table.spec.js +8 -30
- package/src/api/routes/tests/user.spec.js +20 -1
- package/src/api/routes/utils/validators.ts +1 -1
- package/src/app.ts +3 -1
- package/src/automations/tests/loop.spec.ts +45 -0
- package/src/automations/triggers.ts +6 -1
- package/src/definitions/automations.ts +1 -0
- package/src/definitions/datasource.ts +0 -41
- package/src/index.ts +1 -1
- package/src/integrations/base/query.ts +3 -1
- package/src/integrations/base/sqlTable.ts +1 -1
- package/src/integrations/couchdb.ts +40 -14
- package/src/integrations/dynamodb.ts +3 -3
- package/src/integrations/elasticsearch.ts +8 -4
- package/src/integrations/index.ts +4 -4
- package/src/integrations/mongodb.ts +315 -271
- package/src/integrations/mysql.ts +1 -1
- package/src/integrations/queries/sql.ts +5 -50
- package/src/integrations/rest.ts +16 -19
- package/src/integrations/tests/couchdb.spec.ts +33 -21
- package/src/integrations/tests/rest.spec.ts +4 -2
- package/src/middleware/currentapp.ts +3 -2
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
- package/src/sdk/app/datasources/datasources.ts +136 -0
- package/src/sdk/app/datasources/index.ts +5 -0
- package/src/sdk/app/queries/index.ts +5 -0
- package/src/sdk/app/queries/queries.ts +50 -0
- package/src/sdk/app/tables/index.ts +6 -3
- package/src/sdk/index.ts +4 -0
- package/src/sdk/utils/index.ts +16 -0
- package/src/tests/utilities/TestConfiguration.ts +15 -12
- package/src/tests/utilities/structures.ts +65 -2
- package/src/threads/automation.ts +18 -8
- package/src/threads/definitions.ts +3 -0
- package/src/threads/query.ts +28 -15
- package/src/utilities/fileSystem/filesystem.ts +6 -4
- package/src/utilities/fileSystem/plugin.ts +3 -4
- package/src/utilities/fileSystem/template.ts +2 -2
- package/src/utilities/schema.ts +141 -0
- package/src/utilities/workerRequests.ts +10 -1
- package/tsconfig.json +2 -1
- package/builder/assets/index.e386f2c1.js +0 -1023
- package/builder/assets/index.fa480d5b.css +0 -6
- package/dist/utilities/csvParser.js +0 -152
- package/src/utilities/csvParser.ts +0 -161
- package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
- package/src/utilities/tests/csvParser.spec.js +0 -112
|
@@ -12,9 +12,11 @@ import { getIntegration } from "../../integrations"
|
|
|
12
12
|
import { getDatasourceAndQuery } from "./row/utils"
|
|
13
13
|
import { invalidateDynamicVariables } from "../../threads/utils"
|
|
14
14
|
import { db as dbCore, context, events } from "@budibase/backend-core"
|
|
15
|
-
import {
|
|
15
|
+
import { UserCtx, Datasource, Row } from "@budibase/types"
|
|
16
|
+
import sdk from "../../sdk"
|
|
17
|
+
import { mergeConfigs } from "../../sdk/app/datasources/datasources"
|
|
16
18
|
|
|
17
|
-
export async function fetch(ctx:
|
|
19
|
+
export async function fetch(ctx: UserCtx) {
|
|
18
20
|
// Get internal tables
|
|
19
21
|
const db = context.getAppDB()
|
|
20
22
|
const internalTables = await db.allDocs(
|
|
@@ -43,25 +45,23 @@ export async function fetch(ctx: BBContext) {
|
|
|
43
45
|
)
|
|
44
46
|
).rows.map(row => row.doc)
|
|
45
47
|
|
|
46
|
-
const allDatasources =
|
|
48
|
+
const allDatasources: Datasource[] = await sdk.datasources.removeSecrets([
|
|
49
|
+
bbInternalDb,
|
|
50
|
+
...datasources,
|
|
51
|
+
])
|
|
47
52
|
|
|
48
53
|
for (let datasource of allDatasources) {
|
|
49
|
-
if (datasource.config && datasource.config.auth) {
|
|
50
|
-
// strip secrets from response so they don't show in the network request
|
|
51
|
-
delete datasource.config.auth
|
|
52
|
-
}
|
|
53
|
-
|
|
54
54
|
if (datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE) {
|
|
55
|
-
datasource.entities = internal[datasource._id]
|
|
55
|
+
datasource.entities = internal[datasource._id!]
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
ctx.body = [bbInternalDb, ...datasources]
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
export async function buildSchemaFromDb(ctx:
|
|
62
|
+
export async function buildSchemaFromDb(ctx: UserCtx) {
|
|
63
63
|
const db = context.getAppDB()
|
|
64
|
-
const datasource = await
|
|
64
|
+
const datasource = await sdk.datasources.get(ctx.params.datasourceId)
|
|
65
65
|
const tablesFilter = ctx.request.body.tablesFilter
|
|
66
66
|
|
|
67
67
|
let { tables, error } = await buildSchemaHelper(datasource)
|
|
@@ -146,11 +146,11 @@ async function invalidateVariables(
|
|
|
146
146
|
await invalidateDynamicVariables(toInvalidate)
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
export async function update(ctx:
|
|
149
|
+
export async function update(ctx: UserCtx) {
|
|
150
150
|
const db = context.getAppDB()
|
|
151
151
|
const datasourceId = ctx.params.datasourceId
|
|
152
|
-
let datasource = await
|
|
153
|
-
const auth = datasource.config
|
|
152
|
+
let datasource = await sdk.datasources.get(datasourceId)
|
|
153
|
+
const auth = datasource.config?.auth
|
|
154
154
|
await invalidateVariables(datasource, ctx.request.body)
|
|
155
155
|
|
|
156
156
|
const isBudibaseSource = datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE
|
|
@@ -159,10 +159,13 @@ export async function update(ctx: BBContext) {
|
|
|
159
159
|
? { name: ctx.request.body?.name }
|
|
160
160
|
: ctx.request.body
|
|
161
161
|
|
|
162
|
-
datasource = {
|
|
162
|
+
datasource = {
|
|
163
|
+
...datasource,
|
|
164
|
+
...sdk.datasources.mergeConfigs(dataSourceBody, datasource),
|
|
165
|
+
}
|
|
163
166
|
if (auth && !ctx.request.body.auth) {
|
|
164
167
|
// don't strip auth config from DB
|
|
165
|
-
datasource.config
|
|
168
|
+
datasource.config!.auth = auth
|
|
166
169
|
}
|
|
167
170
|
|
|
168
171
|
const response = await db.put(datasource)
|
|
@@ -179,10 +182,12 @@ export async function update(ctx: BBContext) {
|
|
|
179
182
|
|
|
180
183
|
ctx.status = 200
|
|
181
184
|
ctx.message = "Datasource saved successfully."
|
|
182
|
-
ctx.body = {
|
|
185
|
+
ctx.body = {
|
|
186
|
+
datasource: await sdk.datasources.removeSecretSingle(datasource),
|
|
187
|
+
}
|
|
183
188
|
}
|
|
184
189
|
|
|
185
|
-
export async function save(ctx:
|
|
190
|
+
export async function save(ctx: UserCtx) {
|
|
186
191
|
const db = context.getAppDB()
|
|
187
192
|
const plus = ctx.request.body.datasource.plus
|
|
188
193
|
const fetchSchema = ctx.request.body.fetchSchema
|
|
@@ -213,7 +218,9 @@ export async function save(ctx: BBContext) {
|
|
|
213
218
|
}
|
|
214
219
|
}
|
|
215
220
|
|
|
216
|
-
const response: any = {
|
|
221
|
+
const response: any = {
|
|
222
|
+
datasource: await sdk.datasources.removeSecretSingle(datasource),
|
|
223
|
+
}
|
|
217
224
|
if (schemaError) {
|
|
218
225
|
response.error = schemaError
|
|
219
226
|
}
|
|
@@ -251,11 +258,11 @@ async function destroyInternalTablesBySourceId(datasourceId: string) {
|
|
|
251
258
|
}
|
|
252
259
|
}
|
|
253
260
|
|
|
254
|
-
export async function destroy(ctx:
|
|
261
|
+
export async function destroy(ctx: UserCtx) {
|
|
255
262
|
const db = context.getAppDB()
|
|
256
263
|
const datasourceId = ctx.params.datasourceId
|
|
257
264
|
|
|
258
|
-
const datasource = await
|
|
265
|
+
const datasource = await sdk.datasources.get(datasourceId)
|
|
259
266
|
// Delete all queries for the datasource
|
|
260
267
|
|
|
261
268
|
if (datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE) {
|
|
@@ -279,13 +286,14 @@ export async function destroy(ctx: BBContext) {
|
|
|
279
286
|
ctx.status = 200
|
|
280
287
|
}
|
|
281
288
|
|
|
282
|
-
export async function find(ctx:
|
|
289
|
+
export async function find(ctx: UserCtx) {
|
|
283
290
|
const database = context.getAppDB()
|
|
284
|
-
|
|
291
|
+
const datasource = await database.get(ctx.params.datasourceId)
|
|
292
|
+
ctx.body = await sdk.datasources.removeSecretSingle(datasource)
|
|
285
293
|
}
|
|
286
294
|
|
|
287
295
|
// dynamic query functionality
|
|
288
|
-
export async function query(ctx:
|
|
296
|
+
export async function query(ctx: UserCtx) {
|
|
289
297
|
const queryJson = ctx.request.body
|
|
290
298
|
try {
|
|
291
299
|
ctx.body = await getDatasourceAndQuery(queryJson)
|
|
@@ -313,7 +321,7 @@ function updateError(error: any, newError: any, tables: string[]) {
|
|
|
313
321
|
|
|
314
322
|
async function buildSchemaHelper(datasource: Datasource) {
|
|
315
323
|
const Connector = await getIntegration(datasource.source)
|
|
316
|
-
|
|
324
|
+
datasource = await sdk.datasources.enrich(datasource)
|
|
317
325
|
// Connect to the DB and build the schema
|
|
318
326
|
const connector = new Connector(datasource.config)
|
|
319
327
|
await connector.buildSchema(datasource._id, datasource.entities)
|
|
@@ -7,6 +7,8 @@ import { invalidateDynamicVariables } from "../../../threads/utils"
|
|
|
7
7
|
import env from "../../../environment"
|
|
8
8
|
import { quotas } from "@budibase/pro"
|
|
9
9
|
import { events, context, utils, constants } from "@budibase/backend-core"
|
|
10
|
+
import sdk from "../../../sdk"
|
|
11
|
+
import { QueryEvent } from "../../../threads/definitions"
|
|
10
12
|
|
|
11
13
|
const Runner = new Thread(ThreadType.QUERY, {
|
|
12
14
|
timeoutMs: env.QUERY_THREAD_TIMEOUT || 10000,
|
|
@@ -81,7 +83,7 @@ export async function save(ctx: any) {
|
|
|
81
83
|
const db = context.getAppDB()
|
|
82
84
|
const query = ctx.request.body
|
|
83
85
|
|
|
84
|
-
const datasource = await
|
|
86
|
+
const datasource = await sdk.datasources.get(query.datasourceId)
|
|
85
87
|
|
|
86
88
|
let eventFn
|
|
87
89
|
if (!query._id) {
|
|
@@ -126,9 +128,9 @@ function getAuthConfig(ctx: any) {
|
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
export async function preview(ctx: any) {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
const { datasource, envVars } = await sdk.datasources.getWithEnvVars(
|
|
132
|
+
ctx.request.body.datasourceId
|
|
133
|
+
)
|
|
132
134
|
const query = ctx.request.body
|
|
133
135
|
// preview may not have a queryId as it hasn't been saved, but if it does
|
|
134
136
|
// this stops dynamic variables from calling the same query
|
|
@@ -137,20 +139,22 @@ export async function preview(ctx: any) {
|
|
|
137
139
|
const authConfigCtx: any = getAuthConfig(ctx)
|
|
138
140
|
|
|
139
141
|
try {
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
},
|
|
153
|
-
}
|
|
142
|
+
const inputs: QueryEvent = {
|
|
143
|
+
appId: ctx.appId,
|
|
144
|
+
datasource,
|
|
145
|
+
queryVerb,
|
|
146
|
+
fields,
|
|
147
|
+
parameters,
|
|
148
|
+
transformer,
|
|
149
|
+
queryId,
|
|
150
|
+
// have to pass down to the thread runner - can't put into context now
|
|
151
|
+
environmentVariables: envVars,
|
|
152
|
+
ctx: {
|
|
153
|
+
user: ctx.user,
|
|
154
|
+
auth: { ...authConfigCtx },
|
|
155
|
+
},
|
|
156
|
+
}
|
|
157
|
+
const runFn = () => Runner.run(inputs)
|
|
154
158
|
|
|
155
159
|
const { rows, keys, info, extra } = await quotas.addQuery(runFn, {
|
|
156
160
|
datasourceId: datasource._id,
|
|
@@ -201,7 +205,9 @@ async function execute(
|
|
|
201
205
|
const db = context.getAppDB()
|
|
202
206
|
|
|
203
207
|
const query = await db.get(ctx.params.queryId)
|
|
204
|
-
const datasource = await
|
|
208
|
+
const { datasource, envVars } = await sdk.datasources.getWithEnvVars(
|
|
209
|
+
query.datasourceId
|
|
210
|
+
)
|
|
205
211
|
|
|
206
212
|
let authConfigCtx: any = {}
|
|
207
213
|
if (!opts.isAutomation) {
|
|
@@ -219,21 +225,23 @@ async function execute(
|
|
|
219
225
|
|
|
220
226
|
// call the relevant CRUD method on the integration class
|
|
221
227
|
try {
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
},
|
|
236
|
-
}
|
|
228
|
+
const inputs: QueryEvent = {
|
|
229
|
+
appId: ctx.appId,
|
|
230
|
+
datasource,
|
|
231
|
+
queryVerb: query.queryVerb,
|
|
232
|
+
fields: query.fields,
|
|
233
|
+
pagination: ctx.request.body.pagination,
|
|
234
|
+
parameters: enrichedParameters,
|
|
235
|
+
transformer: query.transformer,
|
|
236
|
+
queryId: ctx.params.queryId,
|
|
237
|
+
// have to pass down to the thread runner - can't put into context now
|
|
238
|
+
environmentVariables: envVars,
|
|
239
|
+
ctx: {
|
|
240
|
+
user: ctx.user,
|
|
241
|
+
auth: { ...authConfigCtx },
|
|
242
|
+
},
|
|
243
|
+
}
|
|
244
|
+
const runFn = () => Runner.run(inputs)
|
|
237
245
|
|
|
238
246
|
const { rows, pagination, extra } = await quotas.addQuery(runFn, {
|
|
239
247
|
datasourceId: datasource._id,
|
|
@@ -266,18 +274,18 @@ export async function executeV2(
|
|
|
266
274
|
const removeDynamicVariables = async (queryId: any) => {
|
|
267
275
|
const db = context.getAppDB()
|
|
268
276
|
const query = await db.get(queryId)
|
|
269
|
-
const datasource = await
|
|
270
|
-
const dynamicVariables = datasource.config
|
|
277
|
+
const datasource = await sdk.datasources.get(query.datasourceId)
|
|
278
|
+
const dynamicVariables = datasource.config?.dynamicVariables as any[]
|
|
271
279
|
|
|
272
280
|
if (dynamicVariables) {
|
|
273
281
|
// delete dynamic variables from the datasource
|
|
274
|
-
datasource.config
|
|
282
|
+
datasource.config!.dynamicVariables = dynamicVariables!.filter(
|
|
275
283
|
(dv: any) => dv.queryId !== queryId
|
|
276
284
|
)
|
|
277
285
|
await db.put(datasource)
|
|
278
286
|
|
|
279
287
|
// invalidate the deleted variables
|
|
280
|
-
const variablesToDelete = dynamicVariables
|
|
288
|
+
const variablesToDelete = dynamicVariables!.filter(
|
|
281
289
|
(dv: any) => dv.queryId === queryId
|
|
282
290
|
)
|
|
283
291
|
await invalidateDynamicVariables(variablesToDelete)
|
|
@@ -289,7 +297,7 @@ export async function destroy(ctx: any) {
|
|
|
289
297
|
const queryId = ctx.params.queryId
|
|
290
298
|
await removeDynamicVariables(queryId)
|
|
291
299
|
const query = await db.get(queryId)
|
|
292
|
-
const datasource = await
|
|
300
|
+
const datasource = await sdk.datasources.get(query.datasourceId)
|
|
293
301
|
await db.remove(ctx.params.queryId, ctx.params.revId)
|
|
294
302
|
ctx.message = `Query deleted.`
|
|
295
303
|
ctx.status = 200
|
|
@@ -25,6 +25,7 @@ import { cloneDeep } from "lodash/fp"
|
|
|
25
25
|
import { processFormulas, processDates } from "../../../utilities/rowProcessor"
|
|
26
26
|
import { context } from "@budibase/backend-core"
|
|
27
27
|
import { removeKeyNumbering } from "./utils"
|
|
28
|
+
import sdk from "../../../sdk"
|
|
28
29
|
|
|
29
30
|
export interface ManyRelationship {
|
|
30
31
|
tableId?: string
|
|
@@ -664,8 +665,7 @@ export class ExternalRequest {
|
|
|
664
665
|
throw "Unable to run without a table name"
|
|
665
666
|
}
|
|
666
667
|
if (!this.datasource) {
|
|
667
|
-
|
|
668
|
-
this.datasource = await db.get(datasourceId)
|
|
668
|
+
this.datasource = await sdk.datasources.get(datasourceId!)
|
|
669
669
|
if (!this.datasource || !this.datasource.entities) {
|
|
670
670
|
throw "No tables found, fetch tables before query."
|
|
671
671
|
}
|
|
@@ -681,6 +681,12 @@ export class ExternalRequest {
|
|
|
681
681
|
config,
|
|
682
682
|
table
|
|
683
683
|
)
|
|
684
|
+
//if the sort column is a formula, remove it
|
|
685
|
+
for (let sortColumn of Object.keys(sort || {})) {
|
|
686
|
+
if (table.schema[sortColumn]?.type === "formula") {
|
|
687
|
+
delete sort?.[sortColumn]
|
|
688
|
+
}
|
|
689
|
+
}
|
|
684
690
|
filters = buildFilters(id, filters || {}, table)
|
|
685
691
|
const relationships = this.buildRelationships(table)
|
|
686
692
|
// clean up row on ingress using schema
|
|
@@ -19,6 +19,9 @@ import {
|
|
|
19
19
|
Table,
|
|
20
20
|
Datasource,
|
|
21
21
|
} from "@budibase/types"
|
|
22
|
+
import sdk from "../../../sdk"
|
|
23
|
+
|
|
24
|
+
const { cleanExportRows } = require("./utils")
|
|
22
25
|
|
|
23
26
|
export async function handleRequest(
|
|
24
27
|
operation: Operation,
|
|
@@ -99,7 +102,7 @@ export async function destroy(ctx: BBContext) {
|
|
|
99
102
|
export async function bulkDestroy(ctx: BBContext) {
|
|
100
103
|
const { rows } = ctx.request.body
|
|
101
104
|
const tableId = ctx.params.tableId
|
|
102
|
-
let promises = []
|
|
105
|
+
let promises: Promise<Row[] | { row: Row; table: Table }>[] = []
|
|
103
106
|
for (let row of rows) {
|
|
104
107
|
promises.push(
|
|
105
108
|
handleRequest(Operation.DELETE, tableId, {
|
|
@@ -179,27 +182,30 @@ export async function validate(ctx: BBContext) {
|
|
|
179
182
|
|
|
180
183
|
export async function exportRows(ctx: BBContext) {
|
|
181
184
|
const { datasourceId } = breakExternalTableId(ctx.params.tableId)
|
|
182
|
-
const db = context.getAppDB()
|
|
183
185
|
const format = ctx.query.format
|
|
184
186
|
const { columns } = ctx.request.body
|
|
185
|
-
const datasource = await
|
|
187
|
+
const datasource = await sdk.datasources.get(datasourceId!)
|
|
186
188
|
if (!datasource || !datasource.entities) {
|
|
187
189
|
ctx.throw(400, "Datasource has not been configured for plus API.")
|
|
188
190
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
191
|
+
|
|
192
|
+
if (ctx.request.body.rows) {
|
|
193
|
+
ctx.request.body = {
|
|
194
|
+
query: {
|
|
195
|
+
oneOf: {
|
|
196
|
+
_id: ctx.request.body.rows.map(
|
|
197
|
+
(row: string) => JSON.parse(decodeURI(row))[0]
|
|
198
|
+
),
|
|
199
|
+
},
|
|
195
200
|
},
|
|
196
|
-
}
|
|
201
|
+
}
|
|
197
202
|
}
|
|
198
203
|
|
|
199
204
|
let result = await search(ctx)
|
|
200
205
|
let rows: Row[] = []
|
|
201
206
|
|
|
202
207
|
// Filter data to only specified columns if required
|
|
208
|
+
|
|
203
209
|
if (columns && columns.length) {
|
|
204
210
|
for (let i = 0; i < result.rows.length; i++) {
|
|
205
211
|
rows[i] = {}
|
|
@@ -211,22 +217,26 @@ export async function exportRows(ctx: BBContext) {
|
|
|
211
217
|
rows = result.rows
|
|
212
218
|
}
|
|
213
219
|
|
|
214
|
-
|
|
220
|
+
// @ts-ignore
|
|
221
|
+
let schema = datasource.entities[tableName].schema
|
|
222
|
+
let exportRows = cleanExportRows(rows, schema, format, columns)
|
|
223
|
+
|
|
224
|
+
let headers = Object.keys(schema)
|
|
225
|
+
|
|
215
226
|
// @ts-ignore
|
|
216
227
|
const exporter = exporters[format]
|
|
217
228
|
const filename = `export.${format}`
|
|
218
229
|
|
|
219
230
|
// send down the file
|
|
220
231
|
ctx.attachment(filename)
|
|
221
|
-
return apiFileReturn(exporter(headers,
|
|
232
|
+
return apiFileReturn(exporter(headers, exportRows))
|
|
222
233
|
}
|
|
223
234
|
|
|
224
235
|
export async function fetchEnrichedRow(ctx: BBContext) {
|
|
225
236
|
const id = ctx.params.rowId
|
|
226
237
|
const tableId = ctx.params.tableId
|
|
227
238
|
const { datasourceId, tableName } = breakExternalTableId(tableId)
|
|
228
|
-
const
|
|
229
|
-
const datasource: Datasource = await db.get(datasourceId)
|
|
239
|
+
const datasource: Datasource = await sdk.datasources.get(datasourceId!)
|
|
230
240
|
if (!tableName) {
|
|
231
241
|
ctx.throw(400, "Unable to find table.")
|
|
232
242
|
}
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
import { cloneDeep } from "lodash/fp"
|
|
28
28
|
import { context, db as dbCore } from "@budibase/backend-core"
|
|
29
29
|
import { finaliseRow, updateRelatedFormula } from "./staticFormula"
|
|
30
|
-
import
|
|
30
|
+
import { csv, json, jsonWithSchema, Format } from "../view/exporters"
|
|
31
31
|
import { apiFileReturn } from "../../../utilities/fileSystem"
|
|
32
32
|
import {
|
|
33
33
|
Ctx,
|
|
@@ -38,6 +38,8 @@ import {
|
|
|
38
38
|
Table,
|
|
39
39
|
} from "@budibase/types"
|
|
40
40
|
|
|
41
|
+
const { cleanExportRows } = require("./utils")
|
|
42
|
+
|
|
41
43
|
const CALCULATION_TYPES = {
|
|
42
44
|
SUM: "sum",
|
|
43
45
|
COUNT: "count",
|
|
@@ -357,6 +359,14 @@ export async function search(ctx: Ctx) {
|
|
|
357
359
|
params.version = ctx.version
|
|
358
360
|
params.tableId = tableId
|
|
359
361
|
|
|
362
|
+
let table
|
|
363
|
+
if (params.sort && !params.sortType) {
|
|
364
|
+
table = await db.get(tableId)
|
|
365
|
+
const schema = table.schema
|
|
366
|
+
const sortField = schema[params.sort]
|
|
367
|
+
params.sortType = sortField.type == "number" ? "number" : "string"
|
|
368
|
+
}
|
|
369
|
+
|
|
360
370
|
let response
|
|
361
371
|
if (paginate) {
|
|
362
372
|
response = await paginatedSearch(query, params)
|
|
@@ -370,7 +380,7 @@ export async function search(ctx: Ctx) {
|
|
|
370
380
|
if (tableId === InternalTables.USER_METADATA) {
|
|
371
381
|
response.rows = await getGlobalUsersFromMetadata(response.rows)
|
|
372
382
|
}
|
|
373
|
-
|
|
383
|
+
table = table || (await db.get(tableId))
|
|
374
384
|
response.rows = await outputProcessing(table, response.rows)
|
|
375
385
|
}
|
|
376
386
|
|
|
@@ -389,16 +399,25 @@ export async function exportRows(ctx: Ctx) {
|
|
|
389
399
|
const table = await db.get(ctx.params.tableId)
|
|
390
400
|
const rowIds = ctx.request.body.rows
|
|
391
401
|
let format = ctx.query.format
|
|
392
|
-
const { columns } = ctx.request.body
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
402
|
+
const { columns, query } = ctx.request.body
|
|
403
|
+
|
|
404
|
+
let result
|
|
405
|
+
if (rowIds) {
|
|
406
|
+
let response = (
|
|
407
|
+
await db.allDocs({
|
|
408
|
+
include_docs: true,
|
|
409
|
+
keys: rowIds,
|
|
410
|
+
})
|
|
411
|
+
).rows.map(row => row.doc)
|
|
412
|
+
|
|
413
|
+
result = await outputProcessing(table, response)
|
|
414
|
+
} else if (query) {
|
|
415
|
+
let searchResponse = await exports.search(ctx)
|
|
416
|
+
result = searchResponse.rows
|
|
417
|
+
}
|
|
399
418
|
|
|
400
|
-
let result = (await outputProcessing(table, response)) as Row[]
|
|
401
419
|
let rows: Row[] = []
|
|
420
|
+
let schema = table.schema
|
|
402
421
|
|
|
403
422
|
// Filter data to only specified columns if required
|
|
404
423
|
if (columns && columns.length) {
|
|
@@ -412,14 +431,19 @@ export async function exportRows(ctx: Ctx) {
|
|
|
412
431
|
rows = result
|
|
413
432
|
}
|
|
414
433
|
|
|
415
|
-
let
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
434
|
+
let exportRows = cleanExportRows(rows, schema, format, columns)
|
|
435
|
+
if (format === Format.CSV) {
|
|
436
|
+
ctx.attachment("export.csv")
|
|
437
|
+
return apiFileReturn(csv(Object.keys(rows[0]), exportRows))
|
|
438
|
+
} else if (format === Format.JSON) {
|
|
439
|
+
ctx.attachment("export.json")
|
|
440
|
+
return apiFileReturn(json(exportRows))
|
|
441
|
+
} else if (format === Format.JSON_WITH_SCHEMA) {
|
|
442
|
+
ctx.attachment("export.json")
|
|
443
|
+
return apiFileReturn(jsonWithSchema(schema, exportRows))
|
|
444
|
+
} else {
|
|
445
|
+
throw "Format not recognised"
|
|
446
|
+
}
|
|
423
447
|
}
|
|
424
448
|
|
|
425
449
|
export async function fetchEnrichedRow(ctx: Ctx) {
|
|
@@ -7,7 +7,9 @@ import { BBContext, Row, Table } from "@budibase/types"
|
|
|
7
7
|
export { removeKeyNumbering } from "../../../integrations/base/utils"
|
|
8
8
|
const validateJs = require("validate.js")
|
|
9
9
|
const { cloneDeep } = require("lodash/fp")
|
|
10
|
+
import { Format } from "../view/exporters"
|
|
10
11
|
import { Ctx } from "@budibase/types"
|
|
12
|
+
import sdk from "../../../sdk"
|
|
11
13
|
|
|
12
14
|
validateJs.extend(validateJs.validators.datetime, {
|
|
13
15
|
parse: function (value: string) {
|
|
@@ -21,8 +23,7 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
21
23
|
|
|
22
24
|
export async function getDatasourceAndQuery(json: any) {
|
|
23
25
|
const datasourceId = json.endpoint.datasourceId
|
|
24
|
-
const
|
|
25
|
-
const datasource = await db.get(datasourceId)
|
|
26
|
+
const datasource = await sdk.datasources.get(datasourceId)
|
|
26
27
|
return makeExternalQuery(datasource, json)
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -117,3 +118,40 @@ export async function validate({
|
|
|
117
118
|
}
|
|
118
119
|
return { valid: Object.keys(errors).length === 0, errors }
|
|
119
120
|
}
|
|
121
|
+
|
|
122
|
+
export function cleanExportRows(
|
|
123
|
+
rows: any[],
|
|
124
|
+
schema: any,
|
|
125
|
+
format: string,
|
|
126
|
+
columns: string[]
|
|
127
|
+
) {
|
|
128
|
+
let cleanRows = [...rows]
|
|
129
|
+
|
|
130
|
+
const relationships = Object.entries(schema)
|
|
131
|
+
.filter((entry: any[]) => entry[1].type === FieldTypes.LINK)
|
|
132
|
+
.map(entry => entry[0])
|
|
133
|
+
|
|
134
|
+
relationships.forEach(column => {
|
|
135
|
+
cleanRows.forEach(row => {
|
|
136
|
+
delete row[column]
|
|
137
|
+
})
|
|
138
|
+
delete schema[column]
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
// Intended to avoid 'undefined' in export
|
|
142
|
+
if (format === Format.CSV) {
|
|
143
|
+
const schemaKeys = Object.keys(schema)
|
|
144
|
+
for (let key of schemaKeys) {
|
|
145
|
+
if (columns?.length && columns.indexOf(key) > 0) {
|
|
146
|
+
continue
|
|
147
|
+
}
|
|
148
|
+
for (let row of cleanRows) {
|
|
149
|
+
if (row[key] == null) {
|
|
150
|
+
row[key] = ""
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return cleanRows
|
|
157
|
+
}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
require("svelte/register")
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
const { resolve, join } = require("../../../utilities/centralPath")
|
|
3
|
+
import { resolve, join } from "../../../utilities/centralPath"
|
|
5
4
|
const uuid = require("uuid")
|
|
6
5
|
import { ObjectStoreBuckets } from "../../../constants"
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
import { processString } from "@budibase/string-templates"
|
|
7
|
+
import {
|
|
9
8
|
loadHandlebarsFile,
|
|
10
9
|
NODE_MODULES_PATH,
|
|
11
10
|
TOP_LEVEL_PATH,
|
|
12
|
-
}
|
|
11
|
+
} from "../../../utilities/fileSystem"
|
|
13
12
|
import env from "../../../environment"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
import { DocumentType } from "../../../db/utils"
|
|
14
|
+
import { context, objectStore, utils } from "@budibase/backend-core"
|
|
15
|
+
import AWS from "aws-sdk"
|
|
16
|
+
import fs from "fs"
|
|
17
|
+
import sdk from "../../../sdk"
|
|
18
|
+
const send = require("koa-send")
|
|
18
19
|
|
|
19
20
|
async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
|
|
20
21
|
const response = await objectStore.upload({
|
|
@@ -110,7 +111,7 @@ export const serveApp = async function (ctx: any) {
|
|
|
110
111
|
title: appInfo.name,
|
|
111
112
|
production: env.isProd(),
|
|
112
113
|
appId,
|
|
113
|
-
clientLibPath: objectStore.clientLibraryUrl(appId
|
|
114
|
+
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
114
115
|
usedPlugins: plugins,
|
|
115
116
|
})
|
|
116
117
|
|
|
@@ -135,7 +136,7 @@ export const serveBuilderPreview = async function (ctx: any) {
|
|
|
135
136
|
let appId = context.getAppId()
|
|
136
137
|
const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
|
|
137
138
|
ctx.body = await processString(previewHbs, {
|
|
138
|
-
clientLibPath: objectStore.clientLibraryUrl(appId
|
|
139
|
+
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
139
140
|
})
|
|
140
141
|
} else {
|
|
141
142
|
// just return the app info for jest to assert on
|
|
@@ -150,13 +151,11 @@ export const serveClientLibrary = async function (ctx: any) {
|
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
export const getSignedUploadURL = async function (ctx: any) {
|
|
153
|
-
const database = context.getAppDB()
|
|
154
|
-
|
|
155
154
|
// Ensure datasource is valid
|
|
156
155
|
let datasource
|
|
157
156
|
try {
|
|
158
157
|
const { datasourceId } = ctx.params
|
|
159
|
-
datasource = await
|
|
158
|
+
datasource = await sdk.datasources.get(datasourceId, { enriched: true })
|
|
160
159
|
if (!datasource) {
|
|
161
160
|
ctx.throw(400, "The specified datasource could not be found")
|
|
162
161
|
}
|
|
@@ -172,8 +171,8 @@ export const getSignedUploadURL = async function (ctx: any) {
|
|
|
172
171
|
// Determine type of datasource and generate signed URL
|
|
173
172
|
let signedUrl
|
|
174
173
|
let publicUrl
|
|
175
|
-
const awsRegion = datasource?.config?.region || "eu-west-1"
|
|
176
|
-
if (datasource
|
|
174
|
+
const awsRegion = (datasource?.config?.region || "eu-west-1") as string
|
|
175
|
+
if (datasource?.source === "S3") {
|
|
177
176
|
const { bucket, key } = ctx.request.body || {}
|
|
178
177
|
if (!bucket || !key) {
|
|
179
178
|
ctx.throw(400, "bucket and key values are required")
|
|
@@ -182,8 +181,8 @@ export const getSignedUploadURL = async function (ctx: any) {
|
|
|
182
181
|
try {
|
|
183
182
|
const s3 = new AWS.S3({
|
|
184
183
|
region: awsRegion,
|
|
185
|
-
accessKeyId: datasource?.config?.accessKeyId,
|
|
186
|
-
secretAccessKey: datasource?.config?.secretAccessKey,
|
|
184
|
+
accessKeyId: datasource?.config?.accessKeyId as string,
|
|
185
|
+
secretAccessKey: datasource?.config?.secretAccessKey as string,
|
|
187
186
|
apiVersion: "2006-03-01",
|
|
188
187
|
signatureVersion: "v4",
|
|
189
188
|
})
|