@budibase/server 2.2.11 → 2.2.12-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/aws-sdk.ts +19 -0
- package/__mocks__/node-fetch.ts +78 -0
- package/builder/assets/{index.7481e2b4.js → index.a4f7991a.js} +362 -359
- package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
- package/builder/index.html +2 -2
- package/coverage/clover.xml +5038 -5004
- package/coverage/coverage-final.json +268 -265
- package/coverage/lcov-report/index.html +206 -206
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/application.ts.html +258 -183
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +51 -51
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +91 -79
- package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +30 -30
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +17 -14
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +19 -19
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +141 -195
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/index.html +51 -51
- 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 +19 -19
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +63 -63
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +55 -55
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +67 -16
- package/coverage/lcov-report/src/api/controllers/public/index.html +15 -15
- 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 +6 -6
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +6 -6
- 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 +8 -8
- 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 +8 -8
- 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 +8 -8
- 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 +10 -10
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/query/index.html +19 -19
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +60 -60
- 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 +12 -15
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +55 -52
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +21 -12
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +17 -14
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
- package/coverage/lcov-report/src/api/controllers/script.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/static/index.html +11 -11
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +32 -44
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/table/index.html +19 -19
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +17 -17
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +51 -51
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/user.ts.html +119 -119
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +49 -49
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +33 -33
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +14 -14
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +33 -33
- 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 +44 -11
- 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 -11
- package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/index.html +7 -7
- package/coverage/lcov-report/src/api/routes/index.ts.html +40 -37
- 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 +146 -14
- package/coverage/lcov-report/src/api/routes/public/index.html +7 -7
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
- 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 +11 -11
- 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 +11 -11
- package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +15 -15
- 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 +24 -24
- 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 +42 -42
- 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 +32 -32
- package/coverage/lcov-report/src/automations/actions.ts.html +25 -25
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +91 -19
- package/coverage/lcov-report/src/automations/bullboard.ts.html +11 -11
- package/coverage/lcov-report/src/automations/index.html +19 -19
- package/coverage/lcov-report/src/automations/index.ts.html +13 -13
- package/coverage/lcov-report/src/automations/logging/index.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.ts.html +11 -11
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
- 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 +33 -33
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/index.html +83 -83
- 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 +14 -14
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +17 -17
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +18 -18
- 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 +16 -16
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +5 -5
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +26 -26
- 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 +21 -21
- package/coverage/lcov-report/src/automations/utils.ts.html +56 -56
- 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 +4 -4
- package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +23 -23
- 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 +16 -16
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +5 -5
- package/coverage/lcov-report/src/db/index.html +19 -19
- package/coverage/lcov-report/src/db/index.ts.html +9 -9
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +8 -8
- 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 +15 -15
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +12 -12
- package/coverage/lcov-report/src/db/newid.ts.html +4 -4
- package/coverage/lcov-report/src/db/utils.ts.html +80 -80
- package/coverage/lcov-report/src/definitions/automations.ts.html +4 -4
- package/coverage/lcov-report/src/definitions/datasource.ts.html +4 -4
- package/coverage/lcov-report/src/definitions/index.html +1 -1
- package/coverage/lcov-report/src/environment.ts.html +40 -28
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
- 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 +3 -3
- package/coverage/lcov-report/src/index.html +25 -25
- package/coverage/lcov-report/src/index.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +14 -14
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +3 -3
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +12 -12
- package/coverage/lcov-report/src/integrations/index.html +5 -5
- package/coverage/lcov-report/src/integrations/index.ts.html +35 -47
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
- package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
- package/coverage/lcov-report/src/integrations/postgres.ts.html +42 -42
- package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +13 -13
- package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/rest.ts.html +16 -16
- 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 +36 -36
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +7 -7
- package/coverage/lcov-report/src/middleware/authorized.ts.html +28 -28
- package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +39 -39
- 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 +22 -22
- 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 +13 -10
- 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 +15 -15
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
- 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 +6 -6
- 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 +41 -53
- package/coverage/lcov-report/src/sdk/app/backups/index.html +28 -28
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
- 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 +1 -1
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/index.html +1 -1
- package/coverage/lcov-report/src/sdk/index.ts.html +9 -9
- package/coverage/lcov-report/src/sdk/users/index.html +5 -5
- package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +34 -34
- package/coverage/lcov-report/src/startup.ts.html +42 -42
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +182 -125
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
- package/coverage/lcov-report/src/tests/utilities/index.html +15 -15
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +30 -30
- package/coverage/lcov-report/src/threads/automation.ts.html +34 -103
- package/coverage/lcov-report/src/threads/index.html +19 -19
- package/coverage/lcov-report/src/threads/index.ts.html +25 -25
- package/coverage/lcov-report/src/threads/query.ts.html +71 -71
- package/coverage/lcov-report/src/threads/utils.ts.html +18 -18
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +79 -19
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
- 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 +43 -43
- package/coverage/lcov-report/src/utilities/index.html +48 -63
- package/coverage/lcov-report/src/utilities/index.ts.html +36 -168
- package/coverage/lcov-report/src/utilities/redis.ts.html +32 -32
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +28 -28
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +60 -33
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +32 -32
- package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
- 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 +35 -35
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/users.ts.html +6 -6
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +56 -56
- package/coverage/lcov-report/src/watch.ts.html +9 -9
- package/coverage/lcov-report/src/websocket.ts.html +15 -15
- package/coverage/lcov.info +7198 -7131
- package/dist/api/controllers/application.js +47 -35
- package/dist/api/controllers/cloud.js +6 -2
- package/dist/api/controllers/deploy/index.js +43 -60
- package/dist/api/controllers/plugin/index.js +6 -6
- package/dist/api/controllers/public/applications.js +22 -1
- package/dist/api/controllers/row/ExternalRequest.js +0 -1
- package/dist/api/controllers/row/internal.js +12 -12
- package/dist/api/controllers/row/staticFormula.js +1 -1
- package/dist/api/controllers/static/index.js +8 -11
- package/dist/api/controllers/view/index.js +2 -2
- package/dist/api/routes/application.js +3 -0
- package/dist/api/routes/deploy.js +1 -2
- package/dist/api/routes/public/applications.js +37 -0
- package/dist/api/routes/public/middleware/mapper.js +3 -0
- package/dist/automations/automationUtils.js +26 -1
- package/dist/environment.js +5 -1
- package/dist/integrations/googlesheets.js +1 -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 +2 -6
- package/dist/threads/automation.js +4 -28
- 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/scripts/dev/manage.js +0 -16
- package/specs/openapi.json +84 -0
- package/specs/openapi.yaml +53 -0
- package/specs/resources/application.js +19 -0
- package/src/api/controllers/application.ts +61 -36
- package/src/api/controllers/auth.ts +2 -2
- package/src/api/controllers/cloud.ts +10 -6
- package/src/api/controllers/deploy/Deployment.ts +1 -0
- package/src/api/controllers/deploy/index.ts +40 -58
- package/src/api/controllers/plugin/index.ts +14 -9
- package/src/api/controllers/public/applications.ts +17 -0
- package/src/api/controllers/row/ExternalRequest.ts +0 -1
- package/src/api/controllers/row/internal.ts +24 -23
- 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/controllers/view/index.ts +2 -2
- package/src/api/routes/application.ts +11 -0
- package/src/api/routes/deploy.ts +0 -1
- package/src/api/routes/index.ts +4 -3
- package/src/api/routes/public/applications.ts +44 -0
- package/src/api/routes/public/middleware/mapper.ts +4 -0
- package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
- package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
- package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
- package/src/api/routes/tests/cloud.spec.ts +65 -0
- package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
- package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
- package/src/api/routes/tests/data/export-test.tar.gz +0 -0
- package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
- package/src/api/routes/tests/permissions.spec.js +1 -1
- package/src/api/routes/tests/plugin.spec.ts +179 -0
- package/src/api/routes/tests/routing.spec.js +1 -2
- package/src/api/routes/tests/row.spec.js +4 -2
- package/src/api/routes/tests/static.spec.js +2 -17
- package/src/api/routes/tests/table.spec.js +8 -2
- package/src/api/routes/tests/user.spec.js +86 -0
- package/src/api/routes/tests/utilities/index.ts +2 -2
- package/src/api/routes/tests/webhook.spec.js +1 -1
- package/src/automations/automationUtils.ts +24 -0
- package/src/automations/tests/bash.spec.js +34 -0
- package/src/automations/tests/discord.spec.js +27 -0
- package/src/automations/tests/executeQuery.spec.js +49 -0
- package/src/automations/tests/executeScript.spec.js +48 -0
- package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
- package/src/automations/tests/serverLog.spec.js +22 -0
- package/src/automations/tests/utilities/index.ts +2 -2
- package/src/automations/tests/zapier.spec.js +27 -0
- package/src/automations/unitTests/automationUtils.spec.ts +65 -0
- package/src/definitions/openapi.ts +10 -0
- package/src/environment.ts +5 -1
- package/src/integrations/googlesheets.ts +1 -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 +2 -6
- package/src/sdk/tests/attachments.spec.ts +1 -4
- package/src/tests/jestSetup.ts +4 -1
- package/src/tests/utilities/TestConfiguration.ts +23 -4
- package/src/threads/automation.ts +4 -27
- 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/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
- package/tsconfig.build.json +2 -0
- package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
- package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
- package/dist/api/routes/tests/utilities/index.js +0 -131
- package/dist/automations/tests/utilities/index.js +0 -81
- package/dist/tests/utilities/TestConfiguration.js +0 -562
- package/dist/tests/utilities/controllers.js +0 -40
- package/dist/tests/utilities/structures.js +0 -168
- package/dist/utilities/plugins.js +0 -26
- package/src/api/routes/tests/deployment.spec.ts +0 -25
- package/src/automations/unitTests/automationUtils.spec.js +0 -17
- package/src/utilities/plugins.ts +0 -22
|
@@ -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.2.
|
|
4
|
+
"version": "2.2.12-alpha.0",
|
|
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": "
|
|
47
|
-
"@budibase/client": "
|
|
48
|
-
"@budibase/pro": "2.2.
|
|
49
|
-
"@budibase/string-templates": "
|
|
50
|
-
"@budibase/types": "
|
|
46
|
+
"@budibase/backend-core": "2.2.12-alpha.0",
|
|
47
|
+
"@budibase/client": "2.2.12-alpha.0",
|
|
48
|
+
"@budibase/pro": "2.2.11",
|
|
49
|
+
"@budibase/string-templates": "2.2.12-alpha.0",
|
|
50
|
+
"@budibase/types": "2.2.12-alpha.0",
|
|
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": "e6c14a259b4490dabf1b1a62009e021e8eae3b80"
|
|
169
171
|
}
|
package/scripts/dev/manage.js
CHANGED
|
@@ -2,12 +2,6 @@
|
|
|
2
2
|
const compose = require("docker-compose")
|
|
3
3
|
const path = require("path")
|
|
4
4
|
const fs = require("fs")
|
|
5
|
-
const isWsl = require("is-wsl")
|
|
6
|
-
const { processStringSync } = require("@budibase/string-templates")
|
|
7
|
-
|
|
8
|
-
function isLinux() {
|
|
9
|
-
return !isWsl && process.platform !== "darwin" && process.platform !== "win32"
|
|
10
|
-
}
|
|
11
5
|
|
|
12
6
|
// This script wraps docker-compose allowing you to manage your dev infrastructure with simple commands.
|
|
13
7
|
const CONFIG = {
|
|
@@ -23,16 +17,6 @@ const Commands = {
|
|
|
23
17
|
}
|
|
24
18
|
|
|
25
19
|
async function init() {
|
|
26
|
-
// generate nginx file, always do this incase it has changed
|
|
27
|
-
const hostingPath = path.join(process.cwd(), "..", "..", "hosting")
|
|
28
|
-
const nginxHbsPath = path.join(hostingPath, "nginx.dev.conf.hbs")
|
|
29
|
-
const nginxOutputPath = path.join(hostingPath, ".generated-nginx.dev.conf")
|
|
30
|
-
const contents = fs.readFileSync(nginxHbsPath, "utf8")
|
|
31
|
-
const config = {
|
|
32
|
-
address: isLinux() ? "172.17.0.1" : "host.docker.internal",
|
|
33
|
-
}
|
|
34
|
-
fs.writeFileSync(nginxOutputPath, processStringSync(contents, config))
|
|
35
|
-
|
|
36
20
|
const envFilePath = path.join(process.cwd(), ".env")
|
|
37
21
|
if (!fs.existsSync(envFilePath)) {
|
|
38
22
|
const envFileJson = {
|
package/specs/openapi.json
CHANGED
|
@@ -567,6 +567,40 @@
|
|
|
567
567
|
"data"
|
|
568
568
|
]
|
|
569
569
|
},
|
|
570
|
+
"deploymentOutput": {
|
|
571
|
+
"type": "object",
|
|
572
|
+
"properties": {
|
|
573
|
+
"data": {
|
|
574
|
+
"type": "object",
|
|
575
|
+
"properties": {
|
|
576
|
+
"_id": {
|
|
577
|
+
"description": "The ID of the app.",
|
|
578
|
+
"type": "string"
|
|
579
|
+
},
|
|
580
|
+
"status": {
|
|
581
|
+
"description": "Status of the deployment, whether it succeeded or failed",
|
|
582
|
+
"type": "string",
|
|
583
|
+
"enum": [
|
|
584
|
+
"SUCCESS",
|
|
585
|
+
"FAILURE"
|
|
586
|
+
]
|
|
587
|
+
},
|
|
588
|
+
"appUrl": {
|
|
589
|
+
"description": "The URL of the published app",
|
|
590
|
+
"type": "string"
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
"required": [
|
|
594
|
+
"_id",
|
|
595
|
+
"status",
|
|
596
|
+
"appUrl"
|
|
597
|
+
]
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
"required": [
|
|
601
|
+
"data"
|
|
602
|
+
]
|
|
603
|
+
},
|
|
570
604
|
"row": {
|
|
571
605
|
"description": "The row to be created/updated, based on the table schema.",
|
|
572
606
|
"type": "object",
|
|
@@ -1933,6 +1967,56 @@
|
|
|
1933
1967
|
}
|
|
1934
1968
|
}
|
|
1935
1969
|
},
|
|
1970
|
+
"/applications/{appId}/unpublish": {
|
|
1971
|
+
"post": {
|
|
1972
|
+
"operationId": "unpublish",
|
|
1973
|
+
"summary": "Unpublish an application",
|
|
1974
|
+
"tags": [
|
|
1975
|
+
"applications"
|
|
1976
|
+
],
|
|
1977
|
+
"parameters": [
|
|
1978
|
+
{
|
|
1979
|
+
"$ref": "#/components/parameters/appIdUrl"
|
|
1980
|
+
}
|
|
1981
|
+
],
|
|
1982
|
+
"responses": {
|
|
1983
|
+
"204": {
|
|
1984
|
+
"description": "The app was published successfully."
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
},
|
|
1989
|
+
"/applications/{appId}/publish": {
|
|
1990
|
+
"post": {
|
|
1991
|
+
"operationId": "publish",
|
|
1992
|
+
"summary": "Unpublish an application",
|
|
1993
|
+
"tags": [
|
|
1994
|
+
"applications"
|
|
1995
|
+
],
|
|
1996
|
+
"parameters": [
|
|
1997
|
+
{
|
|
1998
|
+
"$ref": "#/components/parameters/appIdUrl"
|
|
1999
|
+
}
|
|
2000
|
+
],
|
|
2001
|
+
"responses": {
|
|
2002
|
+
"200": {
|
|
2003
|
+
"description": "Returns the deployment object.",
|
|
2004
|
+
"content": {
|
|
2005
|
+
"application/json": {
|
|
2006
|
+
"schema": {
|
|
2007
|
+
"$ref": "#/components/schemas/deploymentOutput"
|
|
2008
|
+
},
|
|
2009
|
+
"examples": {
|
|
2010
|
+
"deployment": {
|
|
2011
|
+
"$ref": "#/components/examples/deploymentOutput"
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
}
|
|
2015
|
+
}
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
},
|
|
1936
2020
|
"/applications/search": {
|
|
1937
2021
|
"post": {
|
|
1938
2022
|
"operationId": "search",
|
package/specs/openapi.yaml
CHANGED
|
@@ -411,6 +411,30 @@ components:
|
|
|
411
411
|
- version
|
|
412
412
|
required:
|
|
413
413
|
- data
|
|
414
|
+
deploymentOutput:
|
|
415
|
+
type: object
|
|
416
|
+
properties:
|
|
417
|
+
data:
|
|
418
|
+
type: object
|
|
419
|
+
properties:
|
|
420
|
+
_id:
|
|
421
|
+
description: The ID of the app.
|
|
422
|
+
type: string
|
|
423
|
+
status:
|
|
424
|
+
description: Status of the deployment, whether it succeeded or failed
|
|
425
|
+
type: string
|
|
426
|
+
enum:
|
|
427
|
+
- SUCCESS
|
|
428
|
+
- FAILURE
|
|
429
|
+
appUrl:
|
|
430
|
+
description: The URL of the published app
|
|
431
|
+
type: string
|
|
432
|
+
required:
|
|
433
|
+
- _id
|
|
434
|
+
- status
|
|
435
|
+
- appUrl
|
|
436
|
+
required:
|
|
437
|
+
- data
|
|
414
438
|
row:
|
|
415
439
|
description: The row to be created/updated, based on the table schema.
|
|
416
440
|
type: object
|
|
@@ -1453,6 +1477,35 @@ paths:
|
|
|
1453
1477
|
examples:
|
|
1454
1478
|
application:
|
|
1455
1479
|
$ref: "#/components/examples/application"
|
|
1480
|
+
"/applications/{appId}/unpublish":
|
|
1481
|
+
post:
|
|
1482
|
+
operationId: unpublish
|
|
1483
|
+
summary: Unpublish an application
|
|
1484
|
+
tags:
|
|
1485
|
+
- applications
|
|
1486
|
+
parameters:
|
|
1487
|
+
- $ref: "#/components/parameters/appIdUrl"
|
|
1488
|
+
responses:
|
|
1489
|
+
"204":
|
|
1490
|
+
description: The app was published successfully.
|
|
1491
|
+
"/applications/{appId}/publish":
|
|
1492
|
+
post:
|
|
1493
|
+
operationId: publish
|
|
1494
|
+
summary: Unpublish an application
|
|
1495
|
+
tags:
|
|
1496
|
+
- applications
|
|
1497
|
+
parameters:
|
|
1498
|
+
- $ref: "#/components/parameters/appIdUrl"
|
|
1499
|
+
responses:
|
|
1500
|
+
"200":
|
|
1501
|
+
description: Returns the deployment object.
|
|
1502
|
+
content:
|
|
1503
|
+
application/json:
|
|
1504
|
+
schema:
|
|
1505
|
+
$ref: "#/components/schemas/deploymentOutput"
|
|
1506
|
+
examples:
|
|
1507
|
+
deployment:
|
|
1508
|
+
$ref: "#/components/examples/deploymentOutput"
|
|
1456
1509
|
/applications/search:
|
|
1457
1510
|
post:
|
|
1458
1511
|
operationId: search
|
|
@@ -80,6 +80,22 @@ const applicationOutputSchema = object(
|
|
|
80
80
|
}
|
|
81
81
|
)
|
|
82
82
|
|
|
83
|
+
const deploymentOutputSchema = object({
|
|
84
|
+
_id: {
|
|
85
|
+
description: "The ID of the app.",
|
|
86
|
+
type: "string",
|
|
87
|
+
},
|
|
88
|
+
status: {
|
|
89
|
+
description: "Status of the deployment, whether it succeeded or failed",
|
|
90
|
+
type: "string",
|
|
91
|
+
enum: ["SUCCESS", "FAILURE"],
|
|
92
|
+
},
|
|
93
|
+
appUrl: {
|
|
94
|
+
description: "The URL of the published app",
|
|
95
|
+
type: "string",
|
|
96
|
+
},
|
|
97
|
+
})
|
|
98
|
+
|
|
83
99
|
module.exports = new Resource()
|
|
84
100
|
.setExamples({
|
|
85
101
|
application: {
|
|
@@ -104,4 +120,7 @@ module.exports = new Resource()
|
|
|
104
120
|
items: applicationOutputSchema,
|
|
105
121
|
},
|
|
106
122
|
}),
|
|
123
|
+
deploymentOutput: object({
|
|
124
|
+
data: deploymentOutputSchema,
|
|
125
|
+
}),
|
|
107
126
|
})
|
|
@@ -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
|
}
|
|
@@ -460,41 +464,47 @@ export async function revertClient(ctx: BBContext) {
|
|
|
460
464
|
ctx.body = app
|
|
461
465
|
}
|
|
462
466
|
|
|
467
|
+
const unpublishApp = async (ctx: any) => {
|
|
468
|
+
let appId = ctx.params.appId
|
|
469
|
+
appId = dbCore.getProdAppID(appId)
|
|
470
|
+
|
|
471
|
+
const db = context.getProdAppDB()
|
|
472
|
+
const result = await db.destroy()
|
|
473
|
+
|
|
474
|
+
await events.app.unpublished({ appId } as App)
|
|
475
|
+
|
|
476
|
+
// automations only in production
|
|
477
|
+
await cleanupAutomations(appId)
|
|
478
|
+
|
|
479
|
+
await cache.app.invalidateAppMetadata(appId)
|
|
480
|
+
return result
|
|
481
|
+
}
|
|
482
|
+
|
|
463
483
|
async function destroyApp(ctx: BBContext) {
|
|
464
484
|
let appId = ctx.params.appId
|
|
465
|
-
|
|
485
|
+
appId = dbCore.getProdAppID(appId)
|
|
486
|
+
const devAppId = dbCore.getDevAppID(appId)
|
|
466
487
|
|
|
467
|
-
if
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
// sync before removing the published app
|
|
488
|
+
// check if we need to unpublish first
|
|
489
|
+
if (await dbCore.dbExists(appId)) {
|
|
490
|
+
// app is deployed, run through unpublish flow
|
|
471
491
|
await sdk.applications.syncApp(devAppId)
|
|
492
|
+
await unpublishApp(ctx)
|
|
472
493
|
}
|
|
473
494
|
|
|
474
|
-
const db =
|
|
495
|
+
const db = dbCore.getDB(devAppId)
|
|
496
|
+
// standard app deletion flow
|
|
475
497
|
const app = await db.get(DocumentType.APP_METADATA)
|
|
476
498
|
const result = await db.destroy()
|
|
499
|
+
await quotas.removeApp()
|
|
500
|
+
await events.app.deleted(app)
|
|
477
501
|
|
|
478
|
-
if (
|
|
479
|
-
await events.app.unpublished(app)
|
|
480
|
-
} else {
|
|
481
|
-
await quotas.removeApp()
|
|
482
|
-
await events.app.deleted(app)
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
/* istanbul ignore next */
|
|
486
|
-
if (!env.isTest() && !isUnpublish) {
|
|
502
|
+
if (!env.isTest()) {
|
|
487
503
|
await deleteApp(appId)
|
|
488
504
|
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
493
|
-
// remove app role when the dev app is deleted (no trace of app anymore)
|
|
494
|
-
else {
|
|
495
|
-
await removeAppFromUserRoles(ctx, appId)
|
|
496
|
-
}
|
|
497
|
-
await cache.app.invalidateAppMetadata(appId)
|
|
505
|
+
|
|
506
|
+
await removeAppFromUserRoles(ctx, appId)
|
|
507
|
+
await cache.app.invalidateAppMetadata(devAppId)
|
|
498
508
|
return result
|
|
499
509
|
}
|
|
500
510
|
|
|
@@ -519,6 +529,21 @@ export async function destroy(ctx: BBContext) {
|
|
|
519
529
|
ctx.body = result
|
|
520
530
|
}
|
|
521
531
|
|
|
532
|
+
export const unpublish = async (ctx: BBContext) => {
|
|
533
|
+
const prodAppId = dbCore.getProdAppID(ctx.params.appId)
|
|
534
|
+
const dbExists = await dbCore.dbExists(prodAppId)
|
|
535
|
+
|
|
536
|
+
// check app has been published
|
|
537
|
+
if (!dbExists) {
|
|
538
|
+
return ctx.throw(400, "App has not been published.")
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
await preDestroyApp(ctx)
|
|
542
|
+
await unpublishApp(ctx)
|
|
543
|
+
await postDestroyApp(ctx)
|
|
544
|
+
ctx.status = 204
|
|
545
|
+
}
|
|
546
|
+
|
|
522
547
|
export async function sync(ctx: BBContext) {
|
|
523
548
|
const appId = ctx.params.appId
|
|
524
549
|
try {
|