@budibase/server 2.2.10 → 2.2.11-alpha.1
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.92c29ddf.js → index.f0a10c2a.js} +362 -359
- package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
- package/builder/index.html +2 -2
- package/coverage/clover.xml +5016 -4982
- package/coverage/coverage-final.json +265 -262
- package/coverage/lcov-report/index.html +207 -207
- 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 +42 -54
- package/coverage/lcov-report/src/sdk/app/backups/index.html +30 -30
- 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/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 +8 -8
- 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 +7161 -7094
- 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 +3 -7
- 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 +3 -7
- 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
|
@@ -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 as any
|
|
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
|
|
|
@@ -94,7 +94,44 @@ async function initDeployedApp(prodAppId: any) {
|
|
|
94
94
|
})
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
async function
|
|
97
|
+
export async function fetchDeployments(ctx: any) {
|
|
98
|
+
try {
|
|
99
|
+
const db = context.getAppDB()
|
|
100
|
+
const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
|
|
101
|
+
const { updated, deployments } = await checkAllDeployments(deploymentDoc)
|
|
102
|
+
if (updated) {
|
|
103
|
+
await db.put(deployments)
|
|
104
|
+
}
|
|
105
|
+
ctx.body = Object.values(deployments.history).reverse()
|
|
106
|
+
} catch (err) {
|
|
107
|
+
ctx.body = []
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export async function deploymentProgress(ctx: any) {
|
|
112
|
+
try {
|
|
113
|
+
const db = context.getAppDB()
|
|
114
|
+
const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
|
|
115
|
+
ctx.body = deploymentDoc[ctx.params.deploymentId]
|
|
116
|
+
} catch (err) {
|
|
117
|
+
ctx.throw(
|
|
118
|
+
500,
|
|
119
|
+
`Error fetching data for deployment ${ctx.params.deploymentId}`
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export const publishApp = async function (ctx: any) {
|
|
125
|
+
let deployment = new Deployment()
|
|
126
|
+
console.log("Deployment object created")
|
|
127
|
+
deployment.setStatus(DeploymentStatus.PENDING)
|
|
128
|
+
console.log("Deployment object set to pending")
|
|
129
|
+
deployment = await storeDeploymentHistory(deployment)
|
|
130
|
+
console.log("Stored deployment history")
|
|
131
|
+
|
|
132
|
+
console.log("Deploying app...")
|
|
133
|
+
|
|
134
|
+
let app
|
|
98
135
|
let replication
|
|
99
136
|
try {
|
|
100
137
|
const appId = context.getAppId()!
|
|
@@ -108,7 +145,7 @@ async function deployApp(deployment: any, userId: string) {
|
|
|
108
145
|
productionAppId,
|
|
109
146
|
AppBackupTrigger.PUBLISH,
|
|
110
147
|
{
|
|
111
|
-
createdBy:
|
|
148
|
+
createdBy: ctx.user._id,
|
|
112
149
|
}
|
|
113
150
|
)
|
|
114
151
|
}
|
|
@@ -147,7 +184,7 @@ async function deployApp(deployment: any, userId: string) {
|
|
|
147
184
|
console.log("Deployed app initialised, setting deployment to successful")
|
|
148
185
|
deployment.setStatus(DeploymentStatus.SUCCESS)
|
|
149
186
|
await storeDeploymentHistory(deployment)
|
|
150
|
-
|
|
187
|
+
app = appDoc
|
|
151
188
|
} catch (err: any) {
|
|
152
189
|
deployment.setStatus(DeploymentStatus.FAILURE, err.message)
|
|
153
190
|
await storeDeploymentHistory(deployment)
|
|
@@ -160,62 +197,7 @@ async function deployApp(deployment: any, userId: string) {
|
|
|
160
197
|
await replication.close()
|
|
161
198
|
}
|
|
162
199
|
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export async function fetchDeployments(ctx: any) {
|
|
166
|
-
try {
|
|
167
|
-
const db = context.getAppDB()
|
|
168
|
-
const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
|
|
169
|
-
const { updated, deployments } = await checkAllDeployments(deploymentDoc)
|
|
170
|
-
if (updated) {
|
|
171
|
-
await db.put(deployments)
|
|
172
|
-
}
|
|
173
|
-
ctx.body = Object.values(deployments.history).reverse()
|
|
174
|
-
} catch (err) {
|
|
175
|
-
ctx.body = []
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export async function deploymentProgress(ctx: any) {
|
|
180
|
-
try {
|
|
181
|
-
const db = context.getAppDB()
|
|
182
|
-
const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
|
|
183
|
-
ctx.body = deploymentDoc[ctx.params.deploymentId]
|
|
184
|
-
} catch (err) {
|
|
185
|
-
ctx.throw(
|
|
186
|
-
500,
|
|
187
|
-
`Error fetching data for deployment ${ctx.params.deploymentId}`
|
|
188
|
-
)
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const isFirstDeploy = async () => {
|
|
193
|
-
try {
|
|
194
|
-
const db = context.getProdAppDB()
|
|
195
|
-
await db.get(DocumentType.APP_METADATA)
|
|
196
|
-
} catch (e: any) {
|
|
197
|
-
if (e.status === 404) {
|
|
198
|
-
return true
|
|
199
|
-
}
|
|
200
|
-
throw e
|
|
201
|
-
}
|
|
202
|
-
return false
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
const _deployApp = async function (ctx: any) {
|
|
206
|
-
let deployment = new Deployment()
|
|
207
|
-
console.log("Deployment object created")
|
|
208
|
-
deployment.setStatus(DeploymentStatus.PENDING)
|
|
209
|
-
console.log("Deployment object set to pending")
|
|
210
|
-
deployment = await storeDeploymentHistory(deployment)
|
|
211
|
-
console.log("Stored deployment history")
|
|
212
|
-
|
|
213
|
-
console.log("Deploying app...")
|
|
214
|
-
|
|
215
|
-
let app = await deployApp(deployment, ctx.user._id)
|
|
216
200
|
|
|
217
201
|
await events.app.published(app)
|
|
218
202
|
ctx.body = deployment
|
|
219
203
|
}
|
|
220
|
-
|
|
221
|
-
export { _deployApp as deployApp }
|
|
@@ -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
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { db as dbCore, context } from "@budibase/backend-core"
|
|
2
2
|
import { search as stringSearch, addRev } from "./utils"
|
|
3
3
|
import * as controller from "../application"
|
|
4
|
+
import * as deployController from "../deploy"
|
|
4
5
|
import { Application } from "../../../definitions/common"
|
|
5
6
|
|
|
6
7
|
function fixAppID(app: Application, params: any) {
|
|
@@ -74,10 +75,26 @@ export async function destroy(ctx: any, next: any) {
|
|
|
74
75
|
})
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
export async function unpublish(ctx: any, next: any) {
|
|
79
|
+
await context.doInAppContext(ctx.params.appId, async () => {
|
|
80
|
+
await controller.unpublish(ctx)
|
|
81
|
+
await next()
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export async function publish(ctx: any, next: any) {
|
|
86
|
+
await context.doInAppContext(ctx.params.appId, async () => {
|
|
87
|
+
await deployController.publishApp(ctx)
|
|
88
|
+
await next()
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
77
92
|
export default {
|
|
78
93
|
create,
|
|
79
94
|
update,
|
|
80
95
|
read,
|
|
81
96
|
destroy,
|
|
82
97
|
search,
|
|
98
|
+
publish,
|
|
99
|
+
unpublish,
|
|
83
100
|
}
|
|
@@ -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,8 +186,8 @@ export async function save(ctx: BBContext) {
|
|
|
185
186
|
})
|
|
186
187
|
}
|
|
187
188
|
|
|
188
|
-
export async function fetchView(ctx:
|
|
189
|
-
const viewName = ctx.params.viewName
|
|
189
|
+
export async function fetchView(ctx: Ctx) {
|
|
190
|
+
const viewName = decodeURIComponent(ctx.params.viewName)
|
|
190
191
|
|
|
191
192
|
// if this is a table view being looked for just transfer to that
|
|
192
193
|
if (viewName.startsWith(DocumentType.TABLE)) {
|
|
@@ -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({
|
|
@@ -16,7 +16,10 @@ const { cloneDeep } = require("lodash/fp")
|
|
|
16
16
|
* updated.
|
|
17
17
|
* NOTE: this will only for affect static formulas.
|
|
18
18
|
*/
|
|
19
|
-
export async function updateRelatedFormula(
|
|
19
|
+
export async function updateRelatedFormula(
|
|
20
|
+
table: Table,
|
|
21
|
+
enrichedRows: Row[] | Row
|
|
22
|
+
) {
|
|
20
23
|
const db = context.getAppDB()
|
|
21
24
|
// no formula to update, we're done
|
|
22
25
|
if (!table.relatedFormula) {
|
|
@@ -155,7 +158,7 @@ export async function finaliseRow(
|
|
|
155
158
|
enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
|
|
156
159
|
// this updates the related formulas in other rows based on the relations to this row
|
|
157
160
|
if (updateFormula) {
|
|
158
|
-
await
|
|
161
|
+
await updateRelatedFormula(table, enrichedRow)
|
|
159
162
|
}
|
|
160
163
|
return { row: enrichedRow, table }
|
|
161
164
|
}
|
|
@@ -7,6 +7,7 @@ import { BBContext, Row, Table } from "@budibase/types"
|
|
|
7
7
|
export { removeKeyNumbering } from "../../../integrations/base/utils"
|
|
8
8
|
const validateJs = require("validate.js")
|
|
9
9
|
const { cloneDeep } = require("lodash/fp")
|
|
10
|
+
import { Ctx } from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
validateJs.extend(validateJs.validators.datetime, {
|
|
12
13
|
parse: function (value: string) {
|
|
@@ -25,7 +26,7 @@ export async function getDatasourceAndQuery(json: any) {
|
|
|
25
26
|
return makeExternalQuery(datasource, json)
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
export async function findRow(ctx:
|
|
29
|
+
export async function findRow(ctx: Ctx, tableId: string, rowId: string) {
|
|
29
30
|
const db = context.getAppDB()
|
|
30
31
|
let row
|
|
31
32
|
// TODO remove special user case in future
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { enrichPluginURLs } from "../../../utilities/plugins"
|
|
2
|
-
|
|
3
1
|
require("svelte/register")
|
|
4
2
|
|
|
5
3
|
const send = require("koa-send")
|
|
6
4
|
const { resolve, join } = require("../../../utilities/centralPath")
|
|
7
5
|
const uuid = require("uuid")
|
|
8
|
-
|
|
6
|
+
import { ObjectStoreBuckets } from "../../../constants"
|
|
9
7
|
const { processString } = require("@budibase/string-templates")
|
|
10
8
|
const {
|
|
11
9
|
loadHandlebarsFile,
|
|
@@ -13,8 +11,6 @@ const {
|
|
|
13
11
|
TOP_LEVEL_PATH,
|
|
14
12
|
} = require("../../../utilities/fileSystem")
|
|
15
13
|
const env = require("../../../environment")
|
|
16
|
-
const { clientLibraryPath } = require("../../../utilities")
|
|
17
|
-
const { attachmentsRelativeURL } = require("../../../utilities")
|
|
18
14
|
const { DocumentType } = require("../../../db/utils")
|
|
19
15
|
const { context, objectStore, utils } = require("@budibase/backend-core")
|
|
20
16
|
const AWS = require("aws-sdk")
|
|
@@ -33,7 +29,7 @@ async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
|
|
|
33
29
|
return {
|
|
34
30
|
size: file.size,
|
|
35
31
|
name: file.name,
|
|
36
|
-
url:
|
|
32
|
+
url: objectStore.getAppFileUrl(s3Key),
|
|
37
33
|
extension: [...file.name.split(".")].pop(),
|
|
38
34
|
key: response.Key,
|
|
39
35
|
}
|
|
@@ -85,7 +81,7 @@ export const uploadFile = async function (ctx: any) {
|
|
|
85
81
|
|
|
86
82
|
return prepareUpload({
|
|
87
83
|
file,
|
|
88
|
-
s3Key: `${
|
|
84
|
+
s3Key: `${context.getProdAppId()}/attachments/${processedFileName}`,
|
|
89
85
|
bucket: ObjectStoreBuckets.APPS,
|
|
90
86
|
})
|
|
91
87
|
})
|
|
@@ -107,14 +103,14 @@ export const serveApp = async function (ctx: any) {
|
|
|
107
103
|
|
|
108
104
|
if (!env.isJest()) {
|
|
109
105
|
const App = require("./templates/BudibaseApp.svelte").default
|
|
110
|
-
const plugins = enrichPluginURLs(appInfo.usedPlugins)
|
|
106
|
+
const plugins = objectStore.enrichPluginURLs(appInfo.usedPlugins)
|
|
111
107
|
const { head, html, css } = App.render({
|
|
112
108
|
metaImage:
|
|
113
109
|
"https://res.cloudinary.com/daog6scxm/image/upload/v1666109324/meta-images/budibase-meta-image_uukc1m.png",
|
|
114
110
|
title: appInfo.name,
|
|
115
111
|
production: env.isProd(),
|
|
116
112
|
appId,
|
|
117
|
-
clientLibPath:
|
|
113
|
+
clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
|
|
118
114
|
usedPlugins: plugins,
|
|
119
115
|
})
|
|
120
116
|
|
|
@@ -139,7 +135,7 @@ export const serveBuilderPreview = async function (ctx: any) {
|
|
|
139
135
|
let appId = context.getAppId()
|
|
140
136
|
const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
|
|
141
137
|
ctx.body = await processString(previewHbs, {
|
|
142
|
-
clientLibPath:
|
|
138
|
+
clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
|
|
143
139
|
})
|
|
144
140
|
} else {
|
|
145
141
|
// just return the app info for jest to assert on
|
|
@@ -113,7 +113,7 @@ async function handleViewEvents(existingView: View, newView: View) {
|
|
|
113
113
|
|
|
114
114
|
export async function destroy(ctx: BBContext) {
|
|
115
115
|
const db = context.getAppDB()
|
|
116
|
-
const viewName =
|
|
116
|
+
const viewName = decodeURIComponent(ctx.params.viewName)
|
|
117
117
|
const view = await deleteView(viewName)
|
|
118
118
|
const table = await db.get(view.meta.tableId)
|
|
119
119
|
delete table.views[viewName]
|
|
@@ -124,7 +124,7 @@ export async function destroy(ctx: BBContext) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
export async function exportView(ctx: BBContext) {
|
|
127
|
-
const viewName =
|
|
127
|
+
const viewName = decodeURIComponent(ctx.query.view as string)
|
|
128
128
|
const view = await getView(viewName)
|
|
129
129
|
|
|
130
130
|
const format = ctx.query.format as string
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Router from "@koa/router"
|
|
2
2
|
import * as controller from "../controllers/application"
|
|
3
|
+
import * as deploymentController from "../controllers/deploy"
|
|
3
4
|
import authorized from "../../middleware/authorized"
|
|
4
5
|
import { permissions } from "@budibase/backend-core"
|
|
5
6
|
import { applicationValidator } from "./utils/validators"
|
|
@@ -37,6 +38,16 @@ router
|
|
|
37
38
|
authorized(permissions.BUILDER),
|
|
38
39
|
controller.revertClient
|
|
39
40
|
)
|
|
41
|
+
.post(
|
|
42
|
+
"/api/applications/:appId/publish",
|
|
43
|
+
authorized(permissions.BUILDER),
|
|
44
|
+
deploymentController.publishApp
|
|
45
|
+
)
|
|
46
|
+
.post(
|
|
47
|
+
"/api/applications/:appId/unpublish",
|
|
48
|
+
authorized(permissions.BUILDER),
|
|
49
|
+
controller.unpublish
|
|
50
|
+
)
|
|
40
51
|
.delete(
|
|
41
52
|
"/api/applications/:appId",
|
|
42
53
|
authorized(permissions.BUILDER),
|
package/src/api/routes/deploy.ts
CHANGED
package/src/api/routes/index.ts
CHANGED
|
@@ -26,13 +26,14 @@ import cloudRoutes from "./cloud"
|
|
|
26
26
|
import migrationRoutes from "./migrations"
|
|
27
27
|
import pluginRoutes from "./plugin"
|
|
28
28
|
import Router from "@koa/router"
|
|
29
|
-
import { api } from "@budibase/pro"
|
|
29
|
+
import { api as pro } from "@budibase/pro"
|
|
30
30
|
|
|
31
31
|
export { default as staticRoutes } from "./static"
|
|
32
32
|
export { default as publicRoutes } from "./public"
|
|
33
33
|
|
|
34
|
-
const appBackupRoutes =
|
|
35
|
-
const scheduleRoutes =
|
|
34
|
+
const appBackupRoutes = pro.appBackups
|
|
35
|
+
const scheduleRoutes = pro.schedules
|
|
36
|
+
|
|
36
37
|
export const mainRoutes: Router[] = [
|
|
37
38
|
appBackupRoutes,
|
|
38
39
|
backupRoutes,
|