@budibase/server 2.2.12-alpha.7 → 2.2.12-alpha.71
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.4389672b.js +1798 -0
- package/builder/assets/index.80bd6b61.css +6 -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
package/src/api/routes/table.ts
CHANGED
|
@@ -67,10 +67,7 @@ router
|
|
|
67
67
|
* structure, and the "updated", new column name should also be supplied. The schema should also be updated, this field
|
|
68
68
|
* lets the server know that a field hasn't just been deleted, that the data has moved to a new name, this will fix
|
|
69
69
|
* the rows in the table. This functionality is only available for internal tables.
|
|
70
|
-
* @apiParam (Body) {object} [
|
|
71
|
-
* CSV validation endpoint. Send the CSV data to the validation endpoint, then put the results of that call
|
|
72
|
-
* into this property, along with the CSV and a table/rows will be built from it. This is not supported when updating
|
|
73
|
-
* or for external tables.
|
|
70
|
+
* @apiParam (Body) {object[]} [rows] When creating a table using a compatible data source, an array of objects to be imported into the new table can be provided.
|
|
74
71
|
*
|
|
75
72
|
* @apiParamExample {json} Example:
|
|
76
73
|
* {
|
|
@@ -99,15 +96,7 @@ router
|
|
|
99
96
|
* "old": "columnName",
|
|
100
97
|
* "updated": "newColumnName",
|
|
101
98
|
* },
|
|
102
|
-
* "
|
|
103
|
-
* "csvString": "column\nvalue",
|
|
104
|
-
* "primaryDisplay": "column",
|
|
105
|
-
* "schema": {
|
|
106
|
-
* "column": {
|
|
107
|
-
* "type": "string"
|
|
108
|
-
* }
|
|
109
|
-
* }
|
|
110
|
-
* }
|
|
99
|
+
* "rows": []
|
|
111
100
|
* }
|
|
112
101
|
*
|
|
113
102
|
* @apiSuccess {object} table The response body will contain the table structure after being cleaned up and
|
|
@@ -121,30 +110,20 @@ router
|
|
|
121
110
|
tableValidator(),
|
|
122
111
|
tableController.save
|
|
123
112
|
)
|
|
124
|
-
/**
|
|
125
|
-
* @api {post} /api/tables/csv/validate Validate a CSV for a table
|
|
126
|
-
* @apiName Validate a CSV for a table
|
|
127
|
-
* @apiGroup tables
|
|
128
|
-
* @apiPermission builder
|
|
129
|
-
* @apiDescription When creating a new table, or importing a CSV to an existing table the CSV must be validated and
|
|
130
|
-
* converted into a Budibase schema; this endpoint does this.
|
|
131
|
-
*
|
|
132
|
-
* @apiParam (Body) {string} csvString The CSV which is to be validated as a string.
|
|
133
|
-
* @apiParam (Body) {object} [schema] When a CSV has been validated it is possible to re-validate after changing the
|
|
134
|
-
* type of a field, by default everything will be strings as there is no way to infer types. The returned schema can
|
|
135
|
-
* be updated and then returned to the endpoint to re-validate and check if the type will work for the CSV, e.g.
|
|
136
|
-
* using a number instead of strings.
|
|
137
|
-
* @apiParam (Body) {string} [tableId] If importing data to an existing table this will pull the current table and
|
|
138
|
-
* remove any fields from the CSV schema which do not exist on the table/don't match the type of the table. When
|
|
139
|
-
* importing a CSV to an existing table only fields that are present on the table can be imported.
|
|
140
|
-
*
|
|
141
|
-
* @apiSuccess {object} schema The response body will contain a "schema" object that represents the schema found for
|
|
142
|
-
* the CSV - this will be in the same format used for table schema.s
|
|
143
|
-
*/
|
|
144
113
|
.post(
|
|
145
|
-
"/api/
|
|
114
|
+
"/api/convert/csvToJson",
|
|
115
|
+
authorized(BUILDER),
|
|
116
|
+
tableController.csvToJson
|
|
117
|
+
)
|
|
118
|
+
.post(
|
|
119
|
+
"/api/tables/validateNewTableImport",
|
|
120
|
+
authorized(BUILDER),
|
|
121
|
+
tableController.validateNewTableImport
|
|
122
|
+
)
|
|
123
|
+
.post(
|
|
124
|
+
"/api/tables/validateExistingTableImport",
|
|
146
125
|
authorized(BUILDER),
|
|
147
|
-
tableController.
|
|
126
|
+
tableController.validateExistingTableImport
|
|
148
127
|
)
|
|
149
128
|
/**
|
|
150
129
|
* @api {post} /api/tables/:tableId/:revId Delete a table
|
|
@@ -177,9 +156,7 @@ router
|
|
|
177
156
|
*
|
|
178
157
|
* @apiParam {string} tableId The ID of the table which the data should be imported to.
|
|
179
158
|
*
|
|
180
|
-
* @apiParam (Body) {object}
|
|
181
|
-
* a CSV, it will have the "schema" returned from the CSV validation endpoint and the "csvString" which is to be
|
|
182
|
-
* turned into rows.
|
|
159
|
+
* @apiParam (Body) {object[]} rows An array of objects representing the rows to be imported, key-value pairs not matching the table schema will be ignored.
|
|
183
160
|
*
|
|
184
161
|
* @apiSuccess {string} message A message stating that the data was imported successfully.
|
|
185
162
|
*/
|
|
@@ -2,7 +2,8 @@ jest.mock("pg")
|
|
|
2
2
|
import * as setup from "./utilities"
|
|
3
3
|
import { checkBuilderEndpoint } from "./utilities/TestFunctions"
|
|
4
4
|
import { checkCacheForDynamicVariable } from "../../../threads/utils"
|
|
5
|
-
import { events } from "@budibase/backend-core"
|
|
5
|
+
import { context, events } from "@budibase/backend-core"
|
|
6
|
+
import sdk from "../../../sdk"
|
|
6
7
|
|
|
7
8
|
let { basicDatasource } = setup.structures
|
|
8
9
|
const pg = require("pg")
|
|
@@ -184,4 +185,37 @@ describe("/datasources", () => {
|
|
|
184
185
|
})
|
|
185
186
|
})
|
|
186
187
|
})
|
|
188
|
+
|
|
189
|
+
describe("check secret replacement", () => {
|
|
190
|
+
async function makeDatasource() {
|
|
191
|
+
datasource = basicDatasource()
|
|
192
|
+
datasource.datasource.config.password = "testing"
|
|
193
|
+
const res = await request
|
|
194
|
+
.post(`/api/datasources`)
|
|
195
|
+
.send(datasource)
|
|
196
|
+
.set(config.defaultHeaders())
|
|
197
|
+
.expect("Content-Type", /json/)
|
|
198
|
+
.expect(200)
|
|
199
|
+
return res.body.datasource
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
it("should save a datasource with password", async () => {
|
|
203
|
+
const datasource = await makeDatasource()
|
|
204
|
+
expect(datasource.config.password).toBe("--secret-value--")
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
it("should not the password on update with the --secret-value--", async () => {
|
|
208
|
+
const datasource = await makeDatasource()
|
|
209
|
+
await request
|
|
210
|
+
.put(`/api/datasources/${datasource._id}`)
|
|
211
|
+
.send(datasource)
|
|
212
|
+
.set(config.defaultHeaders())
|
|
213
|
+
.expect("Content-Type", /json/)
|
|
214
|
+
.expect(200)
|
|
215
|
+
await context.doInAppContext(config.getAppId(), async () => {
|
|
216
|
+
const dbDatasource: any = await sdk.datasources.get(datasource._id)
|
|
217
|
+
expect(dbDatasource.config.password).toBe("testing")
|
|
218
|
+
})
|
|
219
|
+
})
|
|
220
|
+
})
|
|
187
221
|
})
|
|
@@ -42,7 +42,7 @@ describe("run misc tests", () => {
|
|
|
42
42
|
})
|
|
43
43
|
|
|
44
44
|
describe("test table utilities", () => {
|
|
45
|
-
it("should be able to import
|
|
45
|
+
it("should be able to import data", async () => {
|
|
46
46
|
return config.doInContext(null, async () => {
|
|
47
47
|
const table = await config.createTable({
|
|
48
48
|
name: "table",
|
|
@@ -75,17 +75,11 @@ describe("run misc tests", () => {
|
|
|
75
75
|
},
|
|
76
76
|
},
|
|
77
77
|
})
|
|
78
|
-
|
|
79
|
-
csvString: "a,b,c,d\n1,2,3,4",
|
|
80
|
-
schema: {},
|
|
81
|
-
}
|
|
82
|
-
for (let col of ["a", "b", "c", "d"]) {
|
|
83
|
-
dataImport.schema[col] = { type: "string" }
|
|
84
|
-
}
|
|
78
|
+
|
|
85
79
|
await tableUtils.handleDataImport(
|
|
86
80
|
{ userId: "test" },
|
|
87
81
|
table,
|
|
88
|
-
|
|
82
|
+
[{ a: '1', b: '2', c: '3', d: '4'}]
|
|
89
83
|
)
|
|
90
84
|
const rows = await config.getRows()
|
|
91
85
|
expect(rows[0].a).toEqual("1")
|
|
@@ -94,4 +88,4 @@ describe("run misc tests", () => {
|
|
|
94
88
|
})
|
|
95
89
|
})
|
|
96
90
|
})
|
|
97
|
-
})
|
|
91
|
+
})
|
|
@@ -43,21 +43,18 @@ describe("/tables", () => {
|
|
|
43
43
|
expect(events.table.created).toBeCalledWith(res.body)
|
|
44
44
|
})
|
|
45
45
|
|
|
46
|
-
it("creates a table via data import
|
|
46
|
+
it("creates a table via data import", async () => {
|
|
47
47
|
const table = basicTable()
|
|
48
|
-
table.
|
|
49
|
-
csvString: "\"name\",\"description\"\n\"test-name\",\"test-desc\"",
|
|
50
|
-
}
|
|
51
|
-
table.dataImport.schema = table.schema
|
|
48
|
+
table.rows = [{ name: 'test-name', description: 'test-desc' }]
|
|
52
49
|
|
|
53
50
|
const res = await createTable(table)
|
|
54
51
|
|
|
55
52
|
expect(events.table.created).toBeCalledTimes(1)
|
|
56
53
|
expect(events.table.created).toBeCalledWith(res.body)
|
|
57
54
|
expect(events.table.imported).toBeCalledTimes(1)
|
|
58
|
-
expect(events.table.imported).toBeCalledWith(res.body
|
|
55
|
+
expect(events.table.imported).toBeCalledWith(res.body)
|
|
59
56
|
expect(events.rows.imported).toBeCalledTimes(1)
|
|
60
|
-
expect(events.rows.imported).toBeCalledWith(res.body,
|
|
57
|
+
expect(events.rows.imported).toBeCalledWith(res.body, 1)
|
|
61
58
|
})
|
|
62
59
|
|
|
63
60
|
it("should apply authorization to endpoint", async () => {
|
|
@@ -155,11 +152,10 @@ describe("/tables", () => {
|
|
|
155
152
|
it("imports rows successfully", async () => {
|
|
156
153
|
const table = await config.createTable()
|
|
157
154
|
const importRequest = {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
schema: table.schema
|
|
161
|
-
}
|
|
155
|
+
schema: table.schema,
|
|
156
|
+
rows: [{ name: 'test-name', description: 'test-desc' }]
|
|
162
157
|
}
|
|
158
|
+
|
|
163
159
|
jest.clearAllMocks()
|
|
164
160
|
|
|
165
161
|
await request
|
|
@@ -171,7 +167,7 @@ describe("/tables", () => {
|
|
|
171
167
|
|
|
172
168
|
expect(events.table.created).not.toHaveBeenCalled()
|
|
173
169
|
expect(events.rows.imported).toBeCalledTimes(1)
|
|
174
|
-
expect(events.rows.imported).toBeCalledWith(table,
|
|
170
|
+
expect(events.rows.imported).toBeCalledWith(table, 1)
|
|
175
171
|
})
|
|
176
172
|
})
|
|
177
173
|
|
|
@@ -206,24 +202,6 @@ describe("/tables", () => {
|
|
|
206
202
|
})
|
|
207
203
|
})
|
|
208
204
|
|
|
209
|
-
describe("validate csv", () => {
|
|
210
|
-
it("should be able to validate a CSV layout", async () => {
|
|
211
|
-
const res = await request
|
|
212
|
-
.post(`/api/tables/csv/validate`)
|
|
213
|
-
.send({
|
|
214
|
-
csvString: "a,b,c,d\n1,2,3,4"
|
|
215
|
-
})
|
|
216
|
-
.set(config.defaultHeaders())
|
|
217
|
-
.expect('Content-Type', /json/)
|
|
218
|
-
.expect(200)
|
|
219
|
-
expect(res.body.schema).toBeDefined()
|
|
220
|
-
expect(res.body.schema.a).toEqual({
|
|
221
|
-
type: "string",
|
|
222
|
-
success: true,
|
|
223
|
-
})
|
|
224
|
-
})
|
|
225
|
-
})
|
|
226
|
-
|
|
227
205
|
describe("indexing", () => {
|
|
228
206
|
it("should be able to create a table with indexes", async () => {
|
|
229
207
|
await context.doInAppContext(appId, async () => {
|
|
@@ -171,9 +171,28 @@ describe("/users", () => {
|
|
|
171
171
|
.expect("Content-Type", /json/)
|
|
172
172
|
expect(res.body.message).toEqual('User synced.')
|
|
173
173
|
})
|
|
174
|
-
})
|
|
175
174
|
|
|
176
175
|
|
|
176
|
+
it("should sync the user when a previous user is specified", async () => {
|
|
177
|
+
const app1 = await config.createApp('App 1')
|
|
178
|
+
const app2 = await config.createApp('App 2')
|
|
177
179
|
|
|
180
|
+
let user = await config.createUser(
|
|
181
|
+
undefined,
|
|
182
|
+
undefined,
|
|
183
|
+
undefined,
|
|
184
|
+
undefined,
|
|
185
|
+
false,
|
|
186
|
+
true,
|
|
187
|
+
{ [app1.appId]: 'ADMIN' })
|
|
188
|
+
let res = await request
|
|
189
|
+
.post(`/api/users/metadata/sync/${user._id}`)
|
|
190
|
+
.set(config.defaultHeaders())
|
|
191
|
+
.send({ previousUser: { ...user, roles: { ...user.roles, [app2.appId]: 'BASIC' } } })
|
|
192
|
+
.expect(200)
|
|
193
|
+
.expect("Content-Type", /json/)
|
|
178
194
|
|
|
195
|
+
expect(res.body.message).toEqual('User synced.')
|
|
196
|
+
})
|
|
197
|
+
})
|
|
179
198
|
})
|
package/src/app.ts
CHANGED
|
@@ -19,7 +19,7 @@ import * as api from "./api"
|
|
|
19
19
|
import * as automations from "./automations"
|
|
20
20
|
import { Thread } from "./threads"
|
|
21
21
|
import * as redis from "./utilities/redis"
|
|
22
|
-
import { events, logging } from "@budibase/backend-core"
|
|
22
|
+
import { events, logging, middleware } from "@budibase/backend-core"
|
|
23
23
|
import { initialise as initialiseWebsockets } from "./websocket"
|
|
24
24
|
import { startup } from "./startup"
|
|
25
25
|
const Sentry = require("@sentry/node")
|
|
@@ -40,6 +40,8 @@ app.use(
|
|
|
40
40
|
})
|
|
41
41
|
)
|
|
42
42
|
|
|
43
|
+
app.use(middleware.logging)
|
|
44
|
+
|
|
43
45
|
if (env.isProd()) {
|
|
44
46
|
env._set("NODE_ENV", "production")
|
|
45
47
|
Sentry.init()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as automation from "../index"
|
|
2
|
+
import * as triggers from "../triggers"
|
|
3
|
+
import { loopAutomation } from "../../tests/utilities/structures"
|
|
4
|
+
import { context } from "@budibase/backend-core"
|
|
5
|
+
import * as setup from "./utilities"
|
|
6
|
+
|
|
7
|
+
describe("Attempt to run a basic loop automation", () => {
|
|
8
|
+
let config = setup.getConfig(),
|
|
9
|
+
table: any,
|
|
10
|
+
row: any
|
|
11
|
+
|
|
12
|
+
beforeEach(async () => {
|
|
13
|
+
await automation.init()
|
|
14
|
+
await config.init()
|
|
15
|
+
table = await config.createTable()
|
|
16
|
+
row = await config.createRow()
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
afterAll(setup.afterAll)
|
|
20
|
+
|
|
21
|
+
async function runLoop(loopOpts?: any) {
|
|
22
|
+
const appId = config.getAppId()
|
|
23
|
+
return await context.doInAppContext(appId, async () => {
|
|
24
|
+
const params = { fields: { appId } }
|
|
25
|
+
return await triggers.externalTrigger(
|
|
26
|
+
loopAutomation(table._id, loopOpts),
|
|
27
|
+
params,
|
|
28
|
+
{ getResponses: true }
|
|
29
|
+
)
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
it("attempt to run a basic loop", async () => {
|
|
34
|
+
const resp = await runLoop()
|
|
35
|
+
expect(resp.steps[2].outputs.iterations).toBe(1)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it("test a loop with a string", async () => {
|
|
39
|
+
const resp = await runLoop({
|
|
40
|
+
type: "String",
|
|
41
|
+
binding: "a,b,c",
|
|
42
|
+
})
|
|
43
|
+
expect(resp.steps[2].outputs.iterations).toBe(3)
|
|
44
|
+
})
|
|
45
|
+
})
|
|
@@ -109,8 +109,13 @@ export async function externalTrigger(
|
|
|
109
109
|
}
|
|
110
110
|
params.fields = coercedFields
|
|
111
111
|
}
|
|
112
|
-
const data = { automation, event: params }
|
|
112
|
+
const data: Record<string, any> = { automation, event: params }
|
|
113
113
|
if (getResponses) {
|
|
114
|
+
data.event = {
|
|
115
|
+
...data.event,
|
|
116
|
+
appId: context.getAppId(),
|
|
117
|
+
automation,
|
|
118
|
+
}
|
|
114
119
|
return utils.processEvent({ data })
|
|
115
120
|
} else {
|
|
116
121
|
return automationQueue.add(data, JOB_OPTS)
|
|
@@ -7,44 +7,3 @@
|
|
|
7
7
|
export interface QueryOptions {
|
|
8
8
|
disableReturning?: boolean
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
export enum AuthType {
|
|
12
|
-
BASIC = "basic",
|
|
13
|
-
BEARER = "bearer",
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
interface AuthConfig {
|
|
17
|
-
_id: string
|
|
18
|
-
name: string
|
|
19
|
-
type: AuthType
|
|
20
|
-
config: BasicAuthConfig | BearerAuthConfig
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface BasicAuthConfig {
|
|
24
|
-
username: string
|
|
25
|
-
password: string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface BearerAuthConfig {
|
|
29
|
-
token: string
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface RestConfig {
|
|
33
|
-
url: string
|
|
34
|
-
rejectUnauthorized: boolean
|
|
35
|
-
defaultHeaders: {
|
|
36
|
-
[key: string]: any
|
|
37
|
-
}
|
|
38
|
-
legacyHttpParser: boolean
|
|
39
|
-
authConfigs: AuthConfig[]
|
|
40
|
-
staticVariables: {
|
|
41
|
-
[key: string]: string
|
|
42
|
-
}
|
|
43
|
-
dynamicVariables: [
|
|
44
|
-
{
|
|
45
|
-
name: string
|
|
46
|
-
queryId: string
|
|
47
|
-
value: string
|
|
48
|
-
}
|
|
49
|
-
]
|
|
50
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { bootstrap } from "global-agent"
|
|
2
2
|
const fixPath = require("fix-path")
|
|
3
|
-
|
|
3
|
+
import { checkDevelopmentEnvironment } from "./utilities/fileSystem"
|
|
4
4
|
|
|
5
5
|
function runServer() {
|
|
6
6
|
// this will shutdown the system if development environment not ready
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { QueryJson, Datasource } from "@budibase/types"
|
|
2
|
-
|
|
2
|
+
import { getIntegration } from "../index"
|
|
3
|
+
import sdk from "../../sdk"
|
|
3
4
|
|
|
4
5
|
export async function makeExternalQuery(
|
|
5
6
|
datasource: Datasource,
|
|
6
7
|
json: QueryJson
|
|
7
8
|
) {
|
|
9
|
+
datasource = await sdk.datasources.enrich(datasource)
|
|
8
10
|
const Integration = await getIntegration(datasource.source)
|
|
9
11
|
// query is the opinionated function
|
|
10
12
|
if (Integration.prototype.query) {
|
|
@@ -3,7 +3,7 @@ import { Operation, QueryJson, RenameColumn, Table } from "@budibase/types"
|
|
|
3
3
|
import { breakExternalTableId } from "../utils"
|
|
4
4
|
import SchemaBuilder = Knex.SchemaBuilder
|
|
5
5
|
import CreateTableBuilder = Knex.CreateTableBuilder
|
|
6
|
-
|
|
6
|
+
import { FieldTypes, RelationshipTypes } from "../../constants"
|
|
7
7
|
|
|
8
8
|
function generateSchema(
|
|
9
9
|
schema: CreateTableBuilder,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Integration,
|
|
3
2
|
DatasourceFieldType,
|
|
4
|
-
|
|
3
|
+
Document,
|
|
4
|
+
Integration,
|
|
5
5
|
IntegrationBase,
|
|
6
|
+
QueryType,
|
|
6
7
|
} from "@budibase/types"
|
|
7
|
-
|
|
8
|
-
const PouchDB = require("pouchdb")
|
|
8
|
+
import { db as dbCore } from "@budibase/backend-core"
|
|
9
9
|
|
|
10
10
|
interface CouchDBConfig {
|
|
11
11
|
url: string
|
|
@@ -39,6 +39,15 @@ const SCHEMA: Integration = {
|
|
|
39
39
|
update: {
|
|
40
40
|
type: QueryType.JSON,
|
|
41
41
|
},
|
|
42
|
+
get: {
|
|
43
|
+
type: QueryType.FIELDS,
|
|
44
|
+
fields: {
|
|
45
|
+
id: {
|
|
46
|
+
type: DatasourceFieldType.STRING,
|
|
47
|
+
required: true,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
42
51
|
delete: {
|
|
43
52
|
type: QueryType.FIELDS,
|
|
44
53
|
fields: {
|
|
@@ -57,7 +66,7 @@ class CouchDBIntegration implements IntegrationBase {
|
|
|
57
66
|
|
|
58
67
|
constructor(config: CouchDBConfig) {
|
|
59
68
|
this.config = config
|
|
60
|
-
this.client =
|
|
69
|
+
this.client = dbCore.DatabaseWithConnection(config.database, config.url)
|
|
61
70
|
}
|
|
62
71
|
|
|
63
72
|
async query(
|
|
@@ -66,31 +75,48 @@ class CouchDBIntegration implements IntegrationBase {
|
|
|
66
75
|
query: { json?: object; id?: string }
|
|
67
76
|
) {
|
|
68
77
|
try {
|
|
69
|
-
|
|
70
|
-
await this.client.close()
|
|
71
|
-
return response
|
|
78
|
+
return await this.client[command](query.id || query.json)
|
|
72
79
|
} catch (err) {
|
|
73
80
|
console.error(errorMsg, err)
|
|
74
81
|
throw err
|
|
75
82
|
}
|
|
76
83
|
}
|
|
77
84
|
|
|
78
|
-
|
|
79
|
-
return
|
|
85
|
+
private parse(query: { json: string | object }) {
|
|
86
|
+
return typeof query.json === "string" ? JSON.parse(query.json) : query.json
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async create(query: { json: string | object }) {
|
|
90
|
+
const parsed = this.parse(query)
|
|
91
|
+
return this.query("post", "Error writing to couchDB", { json: parsed })
|
|
80
92
|
}
|
|
81
93
|
|
|
82
|
-
async read(query: { json: object }) {
|
|
94
|
+
async read(query: { json: string | object }) {
|
|
95
|
+
const parsed = this.parse(query)
|
|
83
96
|
const result = await this.query("allDocs", "Error querying couchDB", {
|
|
84
97
|
json: {
|
|
85
98
|
include_docs: true,
|
|
86
|
-
...
|
|
99
|
+
...parsed,
|
|
87
100
|
},
|
|
88
101
|
})
|
|
89
102
|
return result.rows.map((row: { doc: object }) => row.doc)
|
|
90
103
|
}
|
|
91
104
|
|
|
92
|
-
async update(query: { json: object }) {
|
|
93
|
-
|
|
105
|
+
async update(query: { json: string | object }) {
|
|
106
|
+
const parsed: Document = this.parse(query)
|
|
107
|
+
if (!parsed?._rev && parsed?._id) {
|
|
108
|
+
const oldDoc = await this.get({ id: parsed._id })
|
|
109
|
+
parsed._rev = oldDoc._rev
|
|
110
|
+
}
|
|
111
|
+
return this.query("put", "Error updating couchDB document", {
|
|
112
|
+
json: parsed,
|
|
113
|
+
})
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async get(query: { id: string }) {
|
|
117
|
+
return this.query("get", "Error retrieving couchDB document by ID", {
|
|
118
|
+
id: query.id,
|
|
119
|
+
})
|
|
94
120
|
}
|
|
95
121
|
|
|
96
122
|
async delete(query: { id: string }) {
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
IntegrationBase,
|
|
6
6
|
} from "@budibase/types"
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
import AWS from "aws-sdk"
|
|
9
|
+
import { AWS_REGION } from "../db/dynamoClient"
|
|
10
10
|
|
|
11
11
|
interface DynamoDBConfig {
|
|
12
12
|
region: string
|
|
@@ -182,7 +182,7 @@ class DynamoDBIntegration implements IntegrationBase {
|
|
|
182
182
|
return response
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
async describe(query: { table: string }) {
|
|
185
|
+
async describe(query: { table: string }): Promise<any> {
|
|
186
186
|
const params = {
|
|
187
187
|
TableName: query.table,
|
|
188
188
|
}
|
|
@@ -80,11 +80,11 @@ const SCHEMA: Integration = {
|
|
|
80
80
|
delete: {
|
|
81
81
|
type: QueryType.FIELDS,
|
|
82
82
|
fields: {
|
|
83
|
-
|
|
83
|
+
id: {
|
|
84
84
|
type: DatasourceFieldType.STRING,
|
|
85
85
|
required: true,
|
|
86
86
|
},
|
|
87
|
-
|
|
87
|
+
index: {
|
|
88
88
|
type: DatasourceFieldType.STRING,
|
|
89
89
|
required: true,
|
|
90
90
|
},
|
|
@@ -164,9 +164,13 @@ class ElasticSearchIntegration implements IntegrationBase {
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
async delete(query:
|
|
167
|
+
async delete(query: { id: string; index: string }) {
|
|
168
|
+
const { id, index } = query
|
|
168
169
|
try {
|
|
169
|
-
const result = await this.client.delete(
|
|
170
|
+
const result = await this.client.delete({
|
|
171
|
+
id,
|
|
172
|
+
index,
|
|
173
|
+
})
|
|
170
174
|
return result.body
|
|
171
175
|
} catch (err) {
|
|
172
176
|
console.error("Error deleting from elasticsearch", err)
|
|
@@ -17,8 +17,8 @@ import oracle from "./oracle"
|
|
|
17
17
|
import { getPlugins } from "../api/controllers/plugin"
|
|
18
18
|
import { SourceName, Integration, PluginType } from "@budibase/types"
|
|
19
19
|
import { getDatasourcePlugin } from "../utilities/fileSystem"
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
import env from "../environment"
|
|
21
|
+
import { cloneDeep } from "lodash"
|
|
22
22
|
|
|
23
23
|
const DEFINITIONS: { [key: string]: Integration } = {
|
|
24
24
|
[SourceName.POSTGRES]: postgres.schema,
|
|
@@ -69,7 +69,7 @@ if (
|
|
|
69
69
|
|
|
70
70
|
export async function getDefinitions() {
|
|
71
71
|
const pluginSchemas: { [key: string]: Integration } = {}
|
|
72
|
-
if (
|
|
72
|
+
if (env.SELF_HOSTED) {
|
|
73
73
|
const plugins = await getPlugins(PluginType.DATASOURCE)
|
|
74
74
|
// extract the actual schema from each custom
|
|
75
75
|
for (let plugin of plugins) {
|
|
@@ -93,7 +93,7 @@ export async function getIntegration(integration: string) {
|
|
|
93
93
|
if (INTEGRATIONS[integration]) {
|
|
94
94
|
return INTEGRATIONS[integration]
|
|
95
95
|
}
|
|
96
|
-
if (
|
|
96
|
+
if (env.SELF_HOSTED) {
|
|
97
97
|
const plugins = await getPlugins(PluginType.DATASOURCE)
|
|
98
98
|
for (let plugin of plugins) {
|
|
99
99
|
if (plugin.name === integration) {
|