@budibase/server 2.1.46-alpha.12 → 2.1.46-alpha.14
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/__mocks__/aws-sdk.ts +19 -0
- package/builder/assets/{index.50dfbb5d.js → index.d0383787.js} +194 -194
- package/builder/index.html +1 -1
- package/coverage/clover.xml +1404 -1399
- package/coverage/coverage-final.json +26 -23
- package/coverage/lcov-report/index.html +68 -68
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/application.ts.html +33 -21
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +27 -15
- package/coverage/lcov-report/src/api/controllers/component.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/index.html +17 -17
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +27 -12
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +1 -1
- 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 +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/role.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +2 -5
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +27 -24
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +13 -4
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +6 -3
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/static/index.html +11 -11
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +13 -25
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/user.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/application.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/auth.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/automation.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/backup.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/component.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/dev.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/index.ts.html +8 -5
- package/coverage/lcov-report/src/api/routes/integration.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/layout.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/permission.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/query.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/role.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/routing.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/row.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/screen.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/static.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/table.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/templates.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/view.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/app.ts.html +1 -1
- package/coverage/lcov-report/src/automations/actions.ts.html +1 -1
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +1 -1
- package/coverage/lcov-report/src/automations/bullboard.ts.html +1 -1
- package/coverage/lcov-report/src/automations/index.html +1 -1
- package/coverage/lcov-report/src/automations/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/index.html +1 -1
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +1 -1
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggers.ts.html +1 -1
- package/coverage/lcov-report/src/automations/utils.ts.html +1 -1
- package/coverage/lcov-report/src/constants/index.html +1 -1
- package/coverage/lcov-report/src/constants/index.ts.html +92 -92
- package/coverage/lcov-report/src/constants/layouts.ts.html +1 -1
- package/coverage/lcov-report/src/constants/screens.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +1 -1
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +1 -1
- package/coverage/lcov-report/src/db/index.html +1 -1
- package/coverage/lcov-report/src/db/index.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +1 -1
- package/coverage/lcov-report/src/db/newid.ts.html +3 -3
- package/coverage/lcov-report/src/db/utils.ts.html +56 -56
- package/coverage/lcov-report/src/definitions/automations.ts.html +1 -1
- package/coverage/lcov-report/src/definitions/datasource.ts.html +1 -1
- package/coverage/lcov-report/src/definitions/index.html +1 -1
- package/coverage/lcov-report/src/environment.ts.html +43 -28
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +1 -1
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +1 -1
- package/coverage/lcov-report/src/events/index.html +1 -1
- package/coverage/lcov-report/src/events/index.ts.html +1 -1
- package/coverage/lcov-report/src/events/utils.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +16 -16
- package/coverage/lcov-report/src/index.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/airtable.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/index.html +1 -1
- package/coverage/lcov-report/src/integrations/base/query.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/firebase.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/index.html +5 -5
- package/coverage/lcov-report/src/integrations/index.ts.html +5 -17
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/mysql.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/oracle.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/postgres.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/redis.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/rest.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/s3.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/authorized.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/builder.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/utils.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +9 -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 +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/index.html +1 -1
- package/coverage/lcov-report/src/migrations/index.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +9 -21
- package/coverage/lcov-report/src/sdk/app/backups/index.html +11 -11
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/index.html +1 -1
- package/coverage/lcov-report/src/sdk/index.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/users/index.html +1 -1
- package/coverage/lcov-report/src/sdk/users/index.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +1 -1
- package/coverage/lcov-report/src/startup.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +3 -3
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +1 -1
- package/coverage/lcov-report/src/threads/automation.ts.html +1 -1
- package/coverage/lcov-report/src/threads/index.html +1 -1
- package/coverage/lcov-report/src/threads/index.ts.html +1 -1
- package/coverage/lcov-report/src/threads/query.ts.html +1 -1
- package/coverage/lcov-report/src/threads/utils.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/csvParser.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +2 -2
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +81 -21
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +16 -1045
- package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +280 -0
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
- package/coverage/lcov-report/src/utilities/global.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/index.html +19 -34
- package/coverage/lcov-report/src/utilities/index.ts.html +31 -163
- package/coverage/lcov-report/src/utilities/redis.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +19 -19
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +46 -19
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/security.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/users.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +1 -1
- package/coverage/lcov-report/src/watch.ts.html +1 -1
- package/coverage/lcov-report/src/websocket.ts.html +1 -1
- package/coverage/lcov.info +2322 -2298
- package/dist/api/controllers/application.js +9 -10
- package/dist/api/controllers/cloud.js +6 -2
- package/dist/api/controllers/plugin/index.js +6 -6
- package/dist/api/controllers/row/ExternalRequest.js +0 -1
- package/dist/api/controllers/row/internal.js +11 -11
- package/dist/api/controllers/row/staticFormula.js +1 -1
- package/dist/api/controllers/static/index.js +8 -11
- package/dist/environment.js +6 -1
- package/dist/integrations/index.js +1 -2
- package/dist/migrations/functions/backfill/global/configs.js +4 -4
- package/dist/package.json +9 -7
- package/dist/sdk/app/backups/imports.js +3 -7
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/app.js +97 -0
- package/dist/utilities/fileSystem/clientLibrary.js +3 -3
- package/dist/utilities/fileSystem/filesystem.js +182 -0
- package/dist/utilities/fileSystem/index.js +18 -342
- package/dist/utilities/fileSystem/plugin.js +63 -0
- package/dist/utilities/fileSystem/template.js +44 -0
- package/dist/utilities/index.js +1 -44
- package/dist/utilities/rowProcessor/index.js +12 -4
- package/package.json +10 -8
- package/src/api/controllers/application.ts +16 -12
- package/src/api/controllers/auth.ts +2 -2
- package/src/api/controllers/cloud.ts +10 -6
- package/src/api/controllers/plugin/index.ts +14 -9
- package/src/api/controllers/row/ExternalRequest.ts +0 -1
- package/src/api/controllers/row/internal.ts +23 -22
- package/src/api/controllers/row/staticFormula.ts +5 -2
- package/src/api/controllers/row/utils.ts +2 -1
- package/src/api/controllers/static/index.ts +6 -10
- package/src/api/routes/index.ts +4 -3
- package/src/api/routes/tests/row.spec.js +4 -2
- package/src/api/routes/tests/static.spec.js +2 -17
- package/src/environment.ts +6 -1
- package/src/integrations/index.ts +1 -5
- package/src/migrations/functions/backfill/global/configs.ts +5 -4
- package/src/sdk/app/backups/imports.ts +3 -7
- package/src/tests/jestSetup.ts +4 -1
- package/src/utilities/fileSystem/app.ts +86 -0
- package/src/utilities/fileSystem/clientLibrary.ts +1 -1
- package/src/utilities/fileSystem/filesystem.ts +170 -0
- package/src/utilities/fileSystem/index.ts +5 -348
- package/src/utilities/fileSystem/plugin.ts +65 -0
- package/src/utilities/fileSystem/template.ts +36 -0
- package/src/utilities/index.ts +1 -45
- package/src/utilities/rowProcessor/index.ts +17 -8
- package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
- package/dist/utilities/plugins.js +0 -26
- package/src/utilities/plugins.ts +0 -22
- package/src/utilities/tests/plugins.spec.ts +0 -23
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getDatasourcePlugin = exports.getPluginMetadata = void 0;
|
|
13
|
+
const { budibaseTempDir } = require("../budibaseDir");
|
|
14
|
+
const fs = require("fs");
|
|
15
|
+
const { join } = require("path");
|
|
16
|
+
const backend_core_1 = require("@budibase/backend-core");
|
|
17
|
+
const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
|
|
18
|
+
const getPluginMetadata = (path) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
let metadata = {};
|
|
20
|
+
try {
|
|
21
|
+
const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
|
|
22
|
+
const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
|
|
23
|
+
metadata.schema = JSON.parse(schema);
|
|
24
|
+
metadata.package = JSON.parse(pkg);
|
|
25
|
+
if (!metadata.package.name ||
|
|
26
|
+
!metadata.package.version ||
|
|
27
|
+
!metadata.package.description) {
|
|
28
|
+
throw new Error("package.json is missing one of 'name', 'version' or 'description'.");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
throw new Error(`Unable to process schema.json/package.json in plugin. ${err.message}`);
|
|
33
|
+
}
|
|
34
|
+
return { metadata, directory: path };
|
|
35
|
+
});
|
|
36
|
+
exports.getPluginMetadata = getPluginMetadata;
|
|
37
|
+
const getDatasourcePlugin = (plugin) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
+
var _a;
|
|
39
|
+
const hash = (_a = plugin.schema) === null || _a === void 0 ? void 0 : _a.hash;
|
|
40
|
+
if (!fs.existsSync(DATASOURCE_PATH)) {
|
|
41
|
+
fs.mkdirSync(DATASOURCE_PATH);
|
|
42
|
+
}
|
|
43
|
+
const filename = join(DATASOURCE_PATH, plugin.name);
|
|
44
|
+
const metadataName = `${filename}.bbmetadata`;
|
|
45
|
+
if (fs.existsSync(filename)) {
|
|
46
|
+
const currentHash = fs.readFileSync(metadataName, "utf8");
|
|
47
|
+
// if hash is the same return the file, otherwise remove it and re-download
|
|
48
|
+
if (currentHash === hash) {
|
|
49
|
+
return require(filename);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log(`Updating plugin: ${plugin.name}`);
|
|
53
|
+
delete require.cache[require.resolve(filename)];
|
|
54
|
+
fs.unlinkSync(filename);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const pluginKey = backend_core_1.objectStore.getPluginJSKey(plugin);
|
|
58
|
+
const pluginJs = yield backend_core_1.objectStore.retrieve(backend_core_1.objectStore.ObjectStoreBuckets.PLUGINS, pluginKey);
|
|
59
|
+
fs.writeFileSync(filename, pluginJs);
|
|
60
|
+
fs.writeFileSync(metadataName, hash);
|
|
61
|
+
return require(filename);
|
|
62
|
+
});
|
|
63
|
+
exports.getDatasourcePlugin = getDatasourcePlugin;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.downloadTemplate = exports.getTemplateStream = void 0;
|
|
13
|
+
const fs = require("fs");
|
|
14
|
+
const { join } = require("path");
|
|
15
|
+
const constants_1 = require("../../constants");
|
|
16
|
+
const backend_core_1 = require("@budibase/backend-core");
|
|
17
|
+
/**
|
|
18
|
+
* This function manages temporary template files which are stored by Koa.
|
|
19
|
+
* @param {Object} template The template object retrieved from the Koa context object.
|
|
20
|
+
* @returns {Object} Returns an fs read stream which can be loaded into the database.
|
|
21
|
+
*/
|
|
22
|
+
const getTemplateStream = (template) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
if (template.file) {
|
|
24
|
+
return fs.createReadStream(template.file.path);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const [type, name] = template.key.split("/");
|
|
28
|
+
const tmpPath = yield (0, exports.downloadTemplate)(type, name);
|
|
29
|
+
return fs.createReadStream(join(tmpPath, name, "db", "dump.txt"));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
exports.getTemplateStream = getTemplateStream;
|
|
33
|
+
/**
|
|
34
|
+
* Retrieves a template and pipes it to minio as well as making it available temporarily.
|
|
35
|
+
* @param {string} type The type of template which is to be retrieved.
|
|
36
|
+
* @param name
|
|
37
|
+
* @return {Promise<*>}
|
|
38
|
+
*/
|
|
39
|
+
const downloadTemplate = (type, name) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
const DEFAULT_TEMPLATES_BUCKET = "prod-budi-templates.s3-eu-west-1.amazonaws.com";
|
|
41
|
+
const templateUrl = `https://${DEFAULT_TEMPLATES_BUCKET}/templates/${type}/${name}.tar.gz`;
|
|
42
|
+
return backend_core_1.objectStore.downloadTarball(templateUrl, constants_1.ObjectStoreBuckets.TEMPLATES, type);
|
|
43
|
+
});
|
|
44
|
+
exports.downloadTemplate = downloadTemplate;
|
package/dist/utilities/index.js
CHANGED
|
@@ -12,9 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.isQsTrue = exports.convertBookmark = exports.formatBytes = exports.stringToReadStream = exports.escapeDangerousCharacters = exports.deleteEntityMetadata = exports.saveEntityMetadata = exports.updateEntityMetadata = exports.
|
|
15
|
+
exports.isQsTrue = exports.convertBookmark = exports.formatBytes = exports.stringToReadStream = exports.escapeDangerousCharacters = exports.deleteEntityMetadata = exports.saveEntityMetadata = exports.updateEntityMetadata = exports.checkSlashesInUrl = exports.removeFromArray = exports.NUMBER_REGEX = exports.isDev = exports.wait = void 0;
|
|
16
16
|
const environment_1 = __importDefault(require("../environment"));
|
|
17
|
-
const constants_1 = require("../constants");
|
|
18
17
|
const backend_core_1 = require("@budibase/backend-core");
|
|
19
18
|
const utils_1 = require("../db/utils");
|
|
20
19
|
const stream_1 = __importDefault(require("stream"));
|
|
@@ -43,48 +42,6 @@ function checkSlashesInUrl(url) {
|
|
|
43
42
|
return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2");
|
|
44
43
|
}
|
|
45
44
|
exports.checkSlashesInUrl = checkSlashesInUrl;
|
|
46
|
-
/**
|
|
47
|
-
* Gets the address of the object store, depending on whether self hosted or in cloud.
|
|
48
|
-
* @return {string} The base URL of the object store (MinIO or S3).
|
|
49
|
-
*/
|
|
50
|
-
function objectStoreUrl() {
|
|
51
|
-
if (environment_1.default.SELF_HOSTED || environment_1.default.MINIO_URL) {
|
|
52
|
-
// can use a relative url for this as all goes through the proxy (this is hosted in minio)
|
|
53
|
-
return constants_1.OBJ_STORE_DIRECTORY;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
return environment_1.default.CDN_URL;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.objectStoreUrl = objectStoreUrl;
|
|
60
|
-
/**
|
|
61
|
-
* In production the client library is stored in the object store, however in development
|
|
62
|
-
* we use the symlinked version produced by lerna, located in node modules. We link to this
|
|
63
|
-
* via a specific endpoint (under /api/assets/client).
|
|
64
|
-
* @param {string} appId In production we need the appId to look up the correct bucket, as the
|
|
65
|
-
* version of the client lib may differ between apps.
|
|
66
|
-
* @param {string} version The version to retrieve.
|
|
67
|
-
* @return {string} The URL to be inserted into appPackage response or server rendered
|
|
68
|
-
* app index file.
|
|
69
|
-
*/
|
|
70
|
-
function clientLibraryPath(appId, version) {
|
|
71
|
-
if (environment_1.default.isProd()) {
|
|
72
|
-
let url = `${objectStoreUrl()}/${backend_core_1.objectStore.sanitizeKey(appId)}/budibase-client.js`;
|
|
73
|
-
// append app version to bust the cache
|
|
74
|
-
if (version) {
|
|
75
|
-
url += `?v=${version}`;
|
|
76
|
-
}
|
|
77
|
-
return url;
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
return `/api/assets/client`;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
exports.clientLibraryPath = clientLibraryPath;
|
|
84
|
-
function attachmentsRelativeURL(attachmentKey) {
|
|
85
|
-
return checkSlashesInUrl(`${objectStoreUrl()}/${attachmentKey}`);
|
|
86
|
-
}
|
|
87
|
-
exports.attachmentsRelativeURL = attachmentsRelativeURL;
|
|
88
45
|
function updateEntityMetadata(type, entityId, updateFn) {
|
|
89
46
|
return __awaiter(this, void 0, void 0, function* () {
|
|
90
47
|
const db = backend_core_1.context.getAppDB();
|
|
@@ -38,7 +38,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
38
38
|
exports.cleanupAttachments = exports.outputProcessing = exports.inputProcessing = exports.coerce = exports.processAutoColumn = void 0;
|
|
39
39
|
const linkRows = __importStar(require("../../db/linkedRows"));
|
|
40
40
|
const constants_1 = require("../../constants");
|
|
41
|
-
const index_1 = require("../index");
|
|
42
41
|
const utils_1 = require("./utils");
|
|
43
42
|
const constants_2 = require("../../constants");
|
|
44
43
|
const backend_core_1 = require("@budibase/backend-core");
|
|
@@ -172,6 +171,15 @@ function inputProcessing(user, table, row, opts) {
|
|
|
172
171
|
else {
|
|
173
172
|
clonedRow[key] = coerce(value, field.type);
|
|
174
173
|
}
|
|
174
|
+
// remove any attachment urls, they are generated on read
|
|
175
|
+
if (field.type === constants_1.FieldTypes.ATTACHMENT) {
|
|
176
|
+
const attachments = clonedRow[key];
|
|
177
|
+
if (attachments === null || attachments === void 0 ? void 0 : attachments.length) {
|
|
178
|
+
attachments.forEach((attachment) => {
|
|
179
|
+
delete attachment.url;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
175
183
|
}
|
|
176
184
|
if (!clonedRow._id || !clonedRow._rev) {
|
|
177
185
|
clonedRow._id = row._id;
|
|
@@ -201,7 +209,7 @@ function outputProcessing(table, rows, opts = { squash: true }) {
|
|
|
201
209
|
let enriched = yield linkRows.attachFullLinkedDocs(table, rows);
|
|
202
210
|
// process formulas
|
|
203
211
|
enriched = (0, utils_1.processFormulas)(table, enriched, { dynamic: true });
|
|
204
|
-
//
|
|
212
|
+
// set the attachments URLs
|
|
205
213
|
for (let [property, column] of Object.entries(table.schema)) {
|
|
206
214
|
if (column.type === constants_1.FieldTypes.ATTACHMENT) {
|
|
207
215
|
for (let row of enriched) {
|
|
@@ -209,7 +217,7 @@ function outputProcessing(table, rows, opts = { squash: true }) {
|
|
|
209
217
|
continue;
|
|
210
218
|
}
|
|
211
219
|
row[property].forEach((attachment) => {
|
|
212
|
-
attachment.url =
|
|
220
|
+
attachment.url = backend_core_1.objectStore.getAppFileUrl(attachment.key);
|
|
213
221
|
});
|
|
214
222
|
}
|
|
215
223
|
}
|
|
@@ -269,7 +277,7 @@ function cleanupAttachments(table, { row, rows, oldRow, oldTable, }) {
|
|
|
269
277
|
}
|
|
270
278
|
}
|
|
271
279
|
if (files.length > 0) {
|
|
272
|
-
|
|
280
|
+
yield backend_core_1.objectStore.deleteFiles(constants_2.ObjectStoreBuckets.APPS, files);
|
|
273
281
|
}
|
|
274
282
|
});
|
|
275
283
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "2.1.46-alpha.
|
|
4
|
+
"version": "2.1.46-alpha.14",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"license": "GPL-3.0",
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
46
|
-
"@budibase/backend-core": "2.1.46-alpha.
|
|
47
|
-
"@budibase/client": "2.1.46-alpha.
|
|
48
|
-
"@budibase/pro": "2.1.46-alpha.
|
|
49
|
-
"@budibase/string-templates": "2.1.46-alpha.
|
|
50
|
-
"@budibase/types": "2.1.46-alpha.
|
|
46
|
+
"@budibase/backend-core": "2.1.46-alpha.14",
|
|
47
|
+
"@budibase/client": "2.1.46-alpha.14",
|
|
48
|
+
"@budibase/pro": "2.1.46-alpha.13",
|
|
49
|
+
"@budibase/string-templates": "2.1.46-alpha.14",
|
|
50
|
+
"@budibase/types": "2.1.46-alpha.14",
|
|
51
51
|
"@bull-board/api": "3.7.0",
|
|
52
52
|
"@bull-board/koa": "3.9.4",
|
|
53
53
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -130,13 +130,15 @@
|
|
|
130
130
|
"@types/ioredis": "4.28.10",
|
|
131
131
|
"@types/jest": "27.5.1",
|
|
132
132
|
"@types/koa": "2.13.4",
|
|
133
|
-
"@types/koa__router": "8.0.
|
|
133
|
+
"@types/koa__router": "8.0.8",
|
|
134
134
|
"@types/lodash": "4.14.180",
|
|
135
135
|
"@types/node": "14.18.20",
|
|
136
136
|
"@types/node-fetch": "2.6.1",
|
|
137
137
|
"@types/oracledb": "5.2.2",
|
|
138
138
|
"@types/pouchdb": "6.4.0",
|
|
139
139
|
"@types/redis": "4.0.11",
|
|
140
|
+
"@types/server-destroy": "1.0.1",
|
|
141
|
+
"@types/tar": "6.1.3",
|
|
140
142
|
"@typescript-eslint/parser": "5.45.0",
|
|
141
143
|
"apidoc": "0.50.4",
|
|
142
144
|
"babel-jest": "27.5.1",
|
|
@@ -165,5 +167,5 @@
|
|
|
165
167
|
"optionalDependencies": {
|
|
166
168
|
"oracledb": "5.3.0"
|
|
167
169
|
},
|
|
168
|
-
"gitHead": "
|
|
170
|
+
"gitHead": "82caff8496ac8bb016c2b5b219633ae8a219ff1c"
|
|
169
171
|
}
|
|
@@ -23,21 +23,18 @@ import {
|
|
|
23
23
|
errors,
|
|
24
24
|
events,
|
|
25
25
|
migrations,
|
|
26
|
+
objectStore,
|
|
26
27
|
} from "@budibase/backend-core"
|
|
27
28
|
import { USERS_TABLE_SCHEMA } from "../../constants"
|
|
28
29
|
import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
|
|
29
30
|
import { removeAppFromUserRoles } from "../../utilities/workerRequests"
|
|
30
|
-
import {
|
|
31
|
-
clientLibraryPath,
|
|
32
|
-
stringToReadStream,
|
|
33
|
-
isQsTrue,
|
|
34
|
-
} from "../../utilities"
|
|
31
|
+
import { stringToReadStream, isQsTrue } from "../../utilities"
|
|
35
32
|
import { getLocksById } from "../../utilities/redis"
|
|
36
33
|
import {
|
|
37
34
|
updateClientLibrary,
|
|
38
35
|
backupClientLibrary,
|
|
39
36
|
revertClientLibrary,
|
|
40
|
-
} from "../../utilities/fileSystem
|
|
37
|
+
} from "../../utilities/fileSystem"
|
|
41
38
|
import { cleanupAutomations } from "../../automations/utils"
|
|
42
39
|
import { checkAppMetadata } from "../../automations/logging"
|
|
43
40
|
import { getUniqueRows } from "../../utilities/usageQuota/rows"
|
|
@@ -49,9 +46,9 @@ import {
|
|
|
49
46
|
MigrationType,
|
|
50
47
|
BBContext,
|
|
51
48
|
Database,
|
|
49
|
+
UserCtx,
|
|
52
50
|
} from "@budibase/types"
|
|
53
51
|
import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
|
|
54
|
-
import { enrichPluginURLs } from "../../utilities/plugins"
|
|
55
52
|
import sdk from "../../sdk"
|
|
56
53
|
|
|
57
54
|
// utility function, need to do away with this
|
|
@@ -204,27 +201,34 @@ export async function fetchAppDefinition(ctx: BBContext) {
|
|
|
204
201
|
}
|
|
205
202
|
}
|
|
206
203
|
|
|
207
|
-
export async function fetchAppPackage(ctx:
|
|
204
|
+
export async function fetchAppPackage(ctx: UserCtx) {
|
|
208
205
|
const db = context.getAppDB()
|
|
209
206
|
let application = await db.get(DocumentType.APP_METADATA)
|
|
210
207
|
const layouts = await getLayouts()
|
|
211
208
|
let screens = await getScreens()
|
|
212
209
|
|
|
213
210
|
// Enrich plugin URLs
|
|
214
|
-
application.usedPlugins = enrichPluginURLs(
|
|
211
|
+
application.usedPlugins = objectStore.enrichPluginURLs(
|
|
212
|
+
application.usedPlugins
|
|
213
|
+
)
|
|
215
214
|
|
|
216
215
|
// Only filter screens if the user is not a builder
|
|
217
|
-
if (!(ctx.user
|
|
216
|
+
if (!(ctx.user.builder && ctx.user.builder.global)) {
|
|
218
217
|
const userRoleId = getUserRoleId(ctx)
|
|
219
218
|
const accessController = new roles.AccessController()
|
|
220
219
|
screens = await accessController.checkScreensAccess(screens, userRoleId)
|
|
221
220
|
}
|
|
222
221
|
|
|
222
|
+
const clientLibPath = objectStore.clientLibraryUrl(
|
|
223
|
+
ctx.params.appId,
|
|
224
|
+
application.version
|
|
225
|
+
)
|
|
226
|
+
|
|
223
227
|
ctx.body = {
|
|
224
228
|
application,
|
|
225
229
|
screens,
|
|
226
230
|
layouts,
|
|
227
|
-
clientLibPath
|
|
231
|
+
clientLibPath,
|
|
228
232
|
}
|
|
229
233
|
}
|
|
230
234
|
|
|
@@ -370,7 +374,7 @@ async function appPostCreate(ctx: BBContext, app: App) {
|
|
|
370
374
|
if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {
|
|
371
375
|
// this import resulted in row usage exceeding the quota
|
|
372
376
|
// delete the app
|
|
373
|
-
// skip pre
|
|
377
|
+
// skip pre and post-steps as no rows have been added to quotas yet
|
|
374
378
|
ctx.params.appId = app.appId
|
|
375
379
|
await destroyApp(ctx)
|
|
376
380
|
}
|
|
@@ -3,7 +3,7 @@ import { InternalTables } from "../../db/utils"
|
|
|
3
3
|
import { getFullUser } from "../../utilities/users"
|
|
4
4
|
import { roles, context } from "@budibase/backend-core"
|
|
5
5
|
import { groups } from "@budibase/pro"
|
|
6
|
-
import { ContextUser, User, Row } from "@budibase/types"
|
|
6
|
+
import { ContextUser, User, Row, UserCtx } from "@budibase/types"
|
|
7
7
|
|
|
8
8
|
const PUBLIC_ROLE = roles.BUILTIN_ROLE_IDS.PUBLIC
|
|
9
9
|
|
|
@@ -16,7 +16,7 @@ const addSessionAttributesToUser = (ctx: any) => {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export async function fetchSelf(ctx:
|
|
19
|
+
export async function fetchSelf(ctx: UserCtx) {
|
|
20
20
|
let userId = ctx.user.userId || ctx.user._id
|
|
21
21
|
/* istanbul ignore next */
|
|
22
22
|
if (!userId || !ctx.isAuthenticated) {
|
|
@@ -5,8 +5,8 @@ import { stringToReadStream } from "../../utilities"
|
|
|
5
5
|
import { getDocParams, DocumentType, isDevAppID } from "../../db/utils"
|
|
6
6
|
import { create } from "./application"
|
|
7
7
|
import { join } from "path"
|
|
8
|
-
import { App, BBContext, Database } from "@budibase/types"
|
|
9
8
|
import sdk from "../../sdk"
|
|
9
|
+
import { App, Ctx, Database } from "@budibase/types"
|
|
10
10
|
|
|
11
11
|
async function createApp(appName: string, appDirectory: string) {
|
|
12
12
|
const ctx = {
|
|
@@ -35,7 +35,7 @@ async function getAllDocType(db: Database, docType: string) {
|
|
|
35
35
|
return response.rows.map(row => row.doc)
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
export async function exportApps(ctx:
|
|
38
|
+
export async function exportApps(ctx: Ctx) {
|
|
39
39
|
if (env.SELF_HOSTED || !env.MULTI_TENANCY) {
|
|
40
40
|
ctx.throw(400, "Exporting only allowed in multi-tenant cloud environments.")
|
|
41
41
|
}
|
|
@@ -65,13 +65,13 @@ async function checkHasBeenImported() {
|
|
|
65
65
|
return apps.length !== 0
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
export async function hasBeenImported(ctx:
|
|
68
|
+
export async function hasBeenImported(ctx: Ctx) {
|
|
69
69
|
ctx.body = {
|
|
70
70
|
imported: await checkHasBeenImported(),
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
export async function importApps(ctx:
|
|
74
|
+
export async function importApps(ctx: Ctx) {
|
|
75
75
|
if (!env.SELF_HOSTED || env.MULTI_TENANCY) {
|
|
76
76
|
ctx.throw(400, "Importing only allowed in self hosted environments.")
|
|
77
77
|
}
|
|
@@ -82,12 +82,16 @@ export async function importApps(ctx: BBContext) {
|
|
|
82
82
|
"Import file is required and environment must be fresh to import apps."
|
|
83
83
|
)
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
const file = ctx.request.files.importFile
|
|
86
|
+
if (Array.isArray(file)) {
|
|
87
|
+
ctx.throw(400, "Single file is required")
|
|
88
|
+
}
|
|
89
|
+
if (file.type !== "application/gzip") {
|
|
86
90
|
ctx.throw(400, "Import file must be a gzipped tarball.")
|
|
87
91
|
}
|
|
88
92
|
|
|
89
93
|
// initially get all the app databases out of the tarball
|
|
90
|
-
const tmpPath = sdk.backups.untarFile(
|
|
94
|
+
const tmpPath = sdk.backups.untarFile(file)
|
|
91
95
|
const globalDbImport = sdk.backups.getGlobalDBFile(tmpPath)
|
|
92
96
|
const appNames = sdk.backups.getListOfAppsInMulti(tmpPath)
|
|
93
97
|
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { npmUpload, urlUpload, githubUpload, fileUpload } from "./uploaders"
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
plugins as pluginCore,
|
|
4
|
+
db as dbCore,
|
|
5
|
+
tenancy,
|
|
6
|
+
objectStore,
|
|
7
|
+
} from "@budibase/backend-core"
|
|
8
|
+
import { PluginType, FileType, PluginSource, Plugin } from "@budibase/types"
|
|
4
9
|
import env from "../../../environment"
|
|
5
10
|
import { ClientAppSocket } from "../../../websocket"
|
|
6
|
-
import {
|
|
7
|
-
import { plugins } from "@budibase/pro"
|
|
11
|
+
import { sdk as pro } from "@budibase/pro"
|
|
8
12
|
|
|
9
13
|
export async function getPlugins(type?: PluginType) {
|
|
10
14
|
const db = tenancy.getGlobalDB()
|
|
@@ -13,9 +17,10 @@ export async function getPlugins(type?: PluginType) {
|
|
|
13
17
|
include_docs: true,
|
|
14
18
|
})
|
|
15
19
|
)
|
|
16
|
-
|
|
20
|
+
let plugins = response.rows.map((row: any) => row.doc) as Plugin[]
|
|
21
|
+
plugins = objectStore.enrichPluginURLs(plugins)
|
|
17
22
|
if (type) {
|
|
18
|
-
return plugins.filter((plugin:
|
|
23
|
+
return plugins.filter((plugin: Plugin) => plugin.schema?.type === type)
|
|
19
24
|
} else {
|
|
20
25
|
return plugins
|
|
21
26
|
}
|
|
@@ -84,7 +89,7 @@ export async function create(ctx: any) {
|
|
|
84
89
|
)
|
|
85
90
|
}
|
|
86
91
|
|
|
87
|
-
const doc = await plugins.storePlugin(metadata, directory, source)
|
|
92
|
+
const doc = await pro.plugins.storePlugin(metadata, directory, source)
|
|
88
93
|
|
|
89
94
|
ClientAppSocket.emit("plugins-update", { name, hash: doc.hash })
|
|
90
95
|
ctx.body = {
|
|
@@ -107,7 +112,7 @@ export async function destroy(ctx: any) {
|
|
|
107
112
|
const { pluginId } = ctx.params
|
|
108
113
|
|
|
109
114
|
try {
|
|
110
|
-
await plugins.deletePlugin(pluginId)
|
|
115
|
+
await pro.plugins.deletePlugin(pluginId)
|
|
111
116
|
|
|
112
117
|
ctx.body = { message: `Plugin ${ctx.params.pluginId} deleted.` }
|
|
113
118
|
} catch (err: any) {
|
|
@@ -127,7 +132,7 @@ export async function processUploadedPlugin(
|
|
|
127
132
|
throw new Error("Only component plugins are supported outside of self-host")
|
|
128
133
|
}
|
|
129
134
|
|
|
130
|
-
const doc = await plugins.storePlugin(metadata, directory, source)
|
|
135
|
+
const doc = await pro.plugins.storePlugin(metadata, directory, source)
|
|
131
136
|
ClientAppSocket.emit("plugin-update", { name: doc.name, hash: doc.hash })
|
|
132
137
|
return doc
|
|
133
138
|
}
|
|
@@ -21,7 +21,6 @@ import { getDatasourceAndQuery } from "./utils"
|
|
|
21
21
|
import { FieldTypes, RelationshipTypes } from "../../../constants"
|
|
22
22
|
import { breakExternalTableId, isSQL } from "../../../integrations/utils"
|
|
23
23
|
import { processObjectSync } from "@budibase/string-templates"
|
|
24
|
-
// @ts-ignore
|
|
25
24
|
import { cloneDeep } from "lodash/fp"
|
|
26
25
|
import { processFormulas, processDates } from "../../../utilities/rowProcessor"
|
|
27
26
|
import { context } from "@budibase/backend-core"
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
cleanupAttachments,
|
|
14
14
|
} from "../../../utilities/rowProcessor"
|
|
15
15
|
import { FieldTypes } from "../../../constants"
|
|
16
|
-
import
|
|
16
|
+
import * as utils from "./utils"
|
|
17
17
|
import { fullSearch, paginatedSearch } from "./internalSearch"
|
|
18
18
|
import { getGlobalUsersFromMetadata } from "../../../utilities/global"
|
|
19
19
|
import * as inMemoryViews from "../../../db/inMemoryView"
|
|
@@ -30,7 +30,8 @@ import { finaliseRow, updateRelatedFormula } from "./staticFormula"
|
|
|
30
30
|
import * as exporters from "../view/exporters"
|
|
31
31
|
import { apiFileReturn } from "../../../utilities/fileSystem"
|
|
32
32
|
import {
|
|
33
|
-
|
|
33
|
+
Ctx,
|
|
34
|
+
UserCtx,
|
|
34
35
|
Database,
|
|
35
36
|
LinkDocumentValue,
|
|
36
37
|
Row,
|
|
@@ -69,7 +70,7 @@ async function getView(db: Database, viewName: string) {
|
|
|
69
70
|
return viewInfo
|
|
70
71
|
}
|
|
71
72
|
|
|
72
|
-
async function getRawTableData(ctx:
|
|
73
|
+
async function getRawTableData(ctx: Ctx, db: Database, tableId: string) {
|
|
73
74
|
let rows
|
|
74
75
|
if (tableId === InternalTables.USER_METADATA) {
|
|
75
76
|
await userController.fetchMetadata(ctx)
|
|
@@ -85,7 +86,7 @@ async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
|
|
|
85
86
|
return rows as Row[]
|
|
86
87
|
}
|
|
87
88
|
|
|
88
|
-
export async function patch(ctx:
|
|
89
|
+
export async function patch(ctx: UserCtx) {
|
|
89
90
|
const db = context.getAppDB()
|
|
90
91
|
const inputs = ctx.request.body
|
|
91
92
|
const tableId = inputs.tableId
|
|
@@ -95,7 +96,7 @@ export async function patch(ctx: BBContext) {
|
|
|
95
96
|
let dbTable = await db.get(tableId)
|
|
96
97
|
oldRow = await outputProcessing(
|
|
97
98
|
dbTable,
|
|
98
|
-
await findRow(ctx, tableId, inputs._id)
|
|
99
|
+
await utils.findRow(ctx, tableId, inputs._id)
|
|
99
100
|
)
|
|
100
101
|
} catch (err) {
|
|
101
102
|
if (isUserTable) {
|
|
@@ -117,8 +118,8 @@ export async function patch(ctx: BBContext) {
|
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
// this returns the table and row incase they have been updated
|
|
120
|
-
let { table, row } = inputProcessing(ctx.user
|
|
121
|
-
const validateResult = await
|
|
121
|
+
let { table, row } = inputProcessing(ctx.user, dbTable, combinedRow)
|
|
122
|
+
const validateResult = await utils.validate({
|
|
122
123
|
row,
|
|
123
124
|
table,
|
|
124
125
|
})
|
|
@@ -150,7 +151,7 @@ export async function patch(ctx: BBContext) {
|
|
|
150
151
|
})
|
|
151
152
|
}
|
|
152
153
|
|
|
153
|
-
export async function save(ctx:
|
|
154
|
+
export async function save(ctx: UserCtx) {
|
|
154
155
|
const db = context.getAppDB()
|
|
155
156
|
let inputs = ctx.request.body
|
|
156
157
|
inputs.tableId = ctx.params.tableId
|
|
@@ -161,8 +162,8 @@ export async function save(ctx: BBContext) {
|
|
|
161
162
|
|
|
162
163
|
// this returns the table and row incase they have been updated
|
|
163
164
|
const dbTable = await db.get(inputs.tableId)
|
|
164
|
-
let { table, row } = inputProcessing(ctx.user
|
|
165
|
-
const validateResult = await
|
|
165
|
+
let { table, row } = inputProcessing(ctx.user, dbTable, inputs)
|
|
166
|
+
const validateResult = await utils.validate({
|
|
166
167
|
row,
|
|
167
168
|
table,
|
|
168
169
|
})
|
|
@@ -185,7 +186,7 @@ export async function save(ctx: BBContext) {
|
|
|
185
186
|
})
|
|
186
187
|
}
|
|
187
188
|
|
|
188
|
-
export async function fetchView(ctx:
|
|
189
|
+
export async function fetchView(ctx: Ctx) {
|
|
189
190
|
const viewName = ctx.params.viewName
|
|
190
191
|
|
|
191
192
|
// if this is a table view being looked for just transfer to that
|
|
@@ -252,7 +253,7 @@ export async function fetchView(ctx: BBContext) {
|
|
|
252
253
|
return rows
|
|
253
254
|
}
|
|
254
255
|
|
|
255
|
-
export async function fetch(ctx:
|
|
256
|
+
export async function fetch(ctx: Ctx) {
|
|
256
257
|
const db = context.getAppDB()
|
|
257
258
|
|
|
258
259
|
const tableId = ctx.params.tableId
|
|
@@ -261,15 +262,15 @@ export async function fetch(ctx: BBContext) {
|
|
|
261
262
|
return outputProcessing(table, rows)
|
|
262
263
|
}
|
|
263
264
|
|
|
264
|
-
export async function find(ctx:
|
|
265
|
+
export async function find(ctx: Ctx) {
|
|
265
266
|
const db = dbCore.getDB(ctx.appId)
|
|
266
267
|
const table = await db.get(ctx.params.tableId)
|
|
267
|
-
let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
|
|
268
|
+
let row = await utils.findRow(ctx, ctx.params.tableId, ctx.params.rowId)
|
|
268
269
|
row = await outputProcessing(table, row)
|
|
269
270
|
return row
|
|
270
271
|
}
|
|
271
272
|
|
|
272
|
-
export async function destroy(ctx:
|
|
273
|
+
export async function destroy(ctx: Ctx) {
|
|
273
274
|
const db = context.getAppDB()
|
|
274
275
|
const { _id } = ctx.request.body
|
|
275
276
|
let row = await db.get(_id)
|
|
@@ -305,7 +306,7 @@ export async function destroy(ctx: BBContext) {
|
|
|
305
306
|
return { response, row }
|
|
306
307
|
}
|
|
307
308
|
|
|
308
|
-
export async function bulkDestroy(ctx:
|
|
309
|
+
export async function bulkDestroy(ctx: Ctx) {
|
|
309
310
|
const db = context.getAppDB()
|
|
310
311
|
const tableId = ctx.params.tableId
|
|
311
312
|
const table = await db.get(tableId)
|
|
@@ -344,7 +345,7 @@ export async function bulkDestroy(ctx: BBContext) {
|
|
|
344
345
|
return { response: { ok: true }, rows: processedRows }
|
|
345
346
|
}
|
|
346
347
|
|
|
347
|
-
export async function search(ctx:
|
|
348
|
+
export async function search(ctx: Ctx) {
|
|
348
349
|
// Fetch the whole table when running in cypress, as search doesn't work
|
|
349
350
|
if (!env.COUCH_DB_URL && env.isCypress()) {
|
|
350
351
|
return { rows: await fetch(ctx) }
|
|
@@ -376,14 +377,14 @@ export async function search(ctx: BBContext) {
|
|
|
376
377
|
return response
|
|
377
378
|
}
|
|
378
379
|
|
|
379
|
-
export async function validate(ctx:
|
|
380
|
-
return
|
|
380
|
+
export async function validate(ctx: Ctx) {
|
|
381
|
+
return utils.validate({
|
|
381
382
|
tableId: ctx.params.tableId,
|
|
382
383
|
row: ctx.request.body,
|
|
383
384
|
})
|
|
384
385
|
}
|
|
385
386
|
|
|
386
|
-
export async function exportRows(ctx:
|
|
387
|
+
export async function exportRows(ctx: Ctx) {
|
|
387
388
|
const db = context.getAppDB()
|
|
388
389
|
const table = await db.get(ctx.params.tableId)
|
|
389
390
|
const rowIds = ctx.request.body.rows
|
|
@@ -421,14 +422,14 @@ export async function exportRows(ctx: BBContext) {
|
|
|
421
422
|
return apiFileReturn(exporter(headers, rows))
|
|
422
423
|
}
|
|
423
424
|
|
|
424
|
-
export async function fetchEnrichedRow(ctx:
|
|
425
|
+
export async function fetchEnrichedRow(ctx: Ctx) {
|
|
425
426
|
const db = context.getAppDB()
|
|
426
427
|
const tableId = ctx.params.tableId
|
|
427
428
|
const rowId = ctx.params.rowId
|
|
428
429
|
// need table to work out where links go in row
|
|
429
430
|
let [table, row] = await Promise.all([
|
|
430
431
|
db.get(tableId),
|
|
431
|
-
findRow(ctx, tableId, rowId),
|
|
432
|
+
utils.findRow(ctx, tableId, rowId),
|
|
432
433
|
])
|
|
433
434
|
// get the link docs
|
|
434
435
|
const linkVals = (await linkRows.getLinkDocuments({
|