@budibase/server 1.0.49-alpha.0 → 1.0.49-alpha.12
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__/arangojs.ts +1 -1
- package/__mocks__/aws-sdk.ts +4 -4
- package/__mocks__/mongodb.ts +4 -5
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +2 -1
- package/__mocks__/pg.ts +3 -5
- package/builder/assets/{index.8184eed9.js → index.0bdf1cad.js} +195 -194
- package/builder/assets/{index.dd9e386f.css → index.83c0944f.css} +1 -1
- package/builder/assets/{vendor.3bd2f661.js → vendor.d526bfe8.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +2927 -2819
- package/coverage/coverage-final.json +104 -103
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +157 -136
- package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
- package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
- package/coverage/lcov-report/api/controllers/component.js.html +10 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +69 -54
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
- package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
- package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
- package/coverage/lcov-report/api/controllers/role.js.html +16 -16
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
- package/coverage/lcov-report/api/controllers/row/index.html +52 -37
- package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
- package/coverage/lcov-report/api/controllers/row/internal.js.html +108 -216
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +52 -34
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +548 -0
- package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
- package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +599 -0
- package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
- package/coverage/lcov-report/api/controllers/table/index.html +57 -42
- package/coverage/lcov-report/api/controllers/table/index.js.html +28 -70
- package/coverage/lcov-report/api/controllers/table/internal.js.html +56 -47
- package/coverage/lcov-report/api/controllers/table/utils.js.html +169 -85
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +43 -52
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
- package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +3 -3
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +22 -7
- package/coverage/lcov-report/api/routes/index.js.html +10 -4
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +18 -18
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
- package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
- package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
- package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
- package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
- package/coverage/lcov-report/automations/triggers.js.html +61 -55
- package/coverage/lcov-report/automations/utils.js.html +54 -42
- package/coverage/lcov-report/constants/index.html +5 -5
- package/coverage/lcov-report/constants/index.js.html +42 -27
- package/coverage/lcov-report/constants/layouts.js.html +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +40 -85
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +75 -75
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +5 -5
- package/coverage/lcov-report/events/utils.js.html +3 -3
- package/coverage/lcov-report/index.html +107 -122
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +21 -15
- package/coverage/lcov-report/middleware/builder.js.html +3 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
- package/coverage/lcov-report/middleware/index.html +28 -28
- package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +29 -35
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +30 -24
- package/coverage/lcov-report/threads/index.html +25 -25
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +26 -47
- package/coverage/lcov-report/threads/utils.js.html +14 -14
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
- package/coverage/lcov-report/utilities/global.js.html +57 -48
- package/coverage/lcov-report/utilities/index.html +27 -27
- package/coverage/lcov-report/utilities/index.js.html +42 -72
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
- package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +65 -71
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
- package/coverage/lcov.info +4620 -4358
- package/dist/api/controllers/application.js +49 -48
- package/dist/api/controllers/auth.js +4 -5
- package/dist/api/controllers/automation.js +14 -19
- package/dist/api/controllers/cloud.js +2 -3
- package/dist/api/controllers/component.js +3 -4
- package/dist/api/controllers/datasource.js +9 -10
- package/dist/api/controllers/deploy/Deployment.js +3 -6
- package/dist/api/controllers/deploy/index.js +12 -13
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/migrations.js +21 -0
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +4 -6
- package/dist/api/controllers/query/index.js +11 -10
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +5 -6
- package/dist/api/controllers/row/ExternalRequest.js +90 -67
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +55 -93
- package/dist/api/controllers/row/internalSearch.js +23 -17
- package/dist/api/controllers/row/staticFormula.js +147 -0
- package/dist/api/controllers/row/utils.js +7 -6
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +4 -4
- package/dist/api/controllers/table/bulkFormula.js +159 -0
- package/dist/api/controllers/table/external.js +7 -10
- package/dist/api/controllers/table/index.js +7 -10
- package/dist/api/controllers/table/internal.js +20 -16
- package/dist/api/controllers/table/utils.js +54 -34
- package/dist/api/controllers/user.js +16 -20
- package/dist/api/controllers/view/index.js +8 -10
- package/dist/api/controllers/view/utils.js +9 -4
- package/dist/api/controllers/webhook.js +10 -8
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
- package/dist/app.js +35 -5
- package/dist/automations/automationUtils.js +2 -3
- package/dist/automations/steps/createRow.js +1 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +27 -25
- package/dist/automations/utils.js +10 -5
- package/dist/constants/index.js +4 -0
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -27
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/environment.js +3 -1
- package/dist/integrations/base/sql.js +43 -8
- package/dist/integrations/utils.js +3 -0
- package/dist/middleware/authorized.js +5 -3
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +2 -4
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +4 -4
- package/dist/tests/utilities/TestConfiguration.js +70 -44
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +13 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +4 -3
- package/dist/utilities/global.js +15 -12
- package/dist/utilities/index.js +7 -17
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +23 -17
- package/dist/utilities/rowProcessor/utils.js +14 -4
- package/dist/utilities/usageQuota/index.js +1 -0
- package/dist/utilities/usageQuota/rows.js +1 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -4
- package/package.json +5 -5
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +38 -31
- package/src/api/controllers/auth.js +4 -5
- package/src/api/controllers/automation.js +13 -23
- package/src/api/controllers/cloud.js +2 -3
- package/src/api/controllers/component.js +3 -4
- package/src/api/controllers/datasource.js +9 -11
- package/src/api/controllers/deploy/Deployment.js +3 -7
- package/src/api/controllers/deploy/index.js +20 -13
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +4 -9
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +4 -6
- package/src/api/controllers/query/import/tests/index.spec.js +2 -1
- package/src/api/controllers/query/index.js +11 -10
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +5 -6
- package/src/api/controllers/row/ExternalRequest.ts +67 -43
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +54 -90
- package/src/api/controllers/row/internalSearch.js +23 -17
- package/src/api/controllers/row/staticFormula.js +156 -0
- package/src/api/controllers/row/utils.js +7 -6
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +4 -4
- package/src/api/controllers/table/bulkFormula.js +173 -0
- package/src/api/controllers/table/external.js +7 -10
- package/src/api/controllers/table/index.js +7 -21
- package/src/api/controllers/table/internal.js +22 -19
- package/src/api/controllers/table/utils.js +70 -42
- package/src/api/controllers/user.js +17 -20
- package/src/api/controllers/view/index.js +8 -10
- package/src/api/controllers/view/utils.js +9 -4
- package/src/api/controllers/webhook.js +10 -8
- package/src/api/routes/index.js +2 -0
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/tests/automation.spec.js +1 -0
- package/src/api/routes/tests/misc.spec.js +0 -1
- package/src/api/routes/tests/routing.spec.js +21 -12
- package/src/api/routes/tests/row.spec.js +7 -4
- package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
- package/src/app.ts +18 -5
- package/src/automations/automationUtils.js +2 -3
- package/src/automations/steps/createRow.js +0 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +33 -31
- package/src/automations/utils.js +9 -5
- package/src/constants/index.js +5 -0
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -31
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/definitions/common.ts +3 -0
- package/src/environment.js +3 -1
- package/src/integrations/base/sql.ts +55 -14
- package/src/integrations/utils.ts +4 -1
- package/src/middleware/authorized.js +5 -3
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +7 -2
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/usageQuota.js +2 -4
- package/src/migrations/functions/appUrls.ts +34 -0
- package/src/migrations/functions/quotas1.ts +20 -0
- package/src/migrations/functions/tests/appUrls.spec.js +29 -0
- package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +56 -0
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +73 -50
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +14 -21
- package/src/utilities/fileSystem/index.js +4 -3
- package/src/utilities/global.js +15 -12
- package/src/utilities/index.js +7 -17
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +25 -27
- package/src/utilities/rowProcessor/utils.js +23 -7
- package/src/utilities/usageQuota/index.js +1 -0
- package/src/utilities/usageQuota/rows.js +1 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -4
- package/tsconfig.json +2 -1
- package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
- package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
- package/src/migrations/usageQuotas/index.js +0 -24
- package/src/migrations/usageQuotas/syncRows.js +0 -21
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
const CouchDB = require("../../../db")
|
|
2
1
|
const csvParser = require("../../../utilities/csvParser")
|
|
3
2
|
const {
|
|
4
3
|
getRowParams,
|
|
5
4
|
generateRowID,
|
|
6
5
|
InternalTables,
|
|
6
|
+
getTableParams,
|
|
7
|
+
BudibaseInternalDB,
|
|
7
8
|
} = require("../../../db/utils")
|
|
8
|
-
const { isEqual } = require("lodash
|
|
9
|
+
const { isEqual } = require("lodash")
|
|
9
10
|
const { AutoFieldSubTypes, FieldTypes } = require("../../../constants")
|
|
10
|
-
const {
|
|
11
|
+
const {
|
|
12
|
+
inputProcessing,
|
|
13
|
+
cleanupAttachments,
|
|
14
|
+
} = require("../../../utilities/rowProcessor")
|
|
11
15
|
const {
|
|
12
16
|
USERS_TABLE_SCHEMA,
|
|
13
17
|
SwitchableTypes,
|
|
@@ -21,8 +25,26 @@ const {
|
|
|
21
25
|
const { getViews, saveView } = require("../view/utils")
|
|
22
26
|
const viewTemplate = require("../view/viewBuilder")
|
|
23
27
|
const usageQuota = require("../../../utilities/usageQuota")
|
|
28
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
29
|
+
const { cloneDeep } = require("lodash/fp")
|
|
30
|
+
|
|
31
|
+
exports.clearColumns = async (table, columnNames) => {
|
|
32
|
+
const db = getAppDB()
|
|
33
|
+
const rows = await db.allDocs(
|
|
34
|
+
getRowParams(table._id, null, {
|
|
35
|
+
include_docs: true,
|
|
36
|
+
})
|
|
37
|
+
)
|
|
38
|
+
return db.bulkDocs(
|
|
39
|
+
rows.rows.map(({ doc }) => {
|
|
40
|
+
columnNames.forEach(colName => delete doc[colName])
|
|
41
|
+
return doc
|
|
42
|
+
})
|
|
43
|
+
)
|
|
44
|
+
}
|
|
24
45
|
|
|
25
|
-
exports.checkForColumnUpdates = async (
|
|
46
|
+
exports.checkForColumnUpdates = async (oldTable, updatedTable) => {
|
|
47
|
+
const db = getAppDB()
|
|
26
48
|
let updatedRows = []
|
|
27
49
|
const rename = updatedTable._rename
|
|
28
50
|
let deletedColumns = []
|
|
@@ -39,18 +61,22 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) => {
|
|
|
39
61
|
include_docs: true,
|
|
40
62
|
})
|
|
41
63
|
)
|
|
42
|
-
|
|
64
|
+
const rawRows = rows.rows.map(({ doc }) => doc)
|
|
65
|
+
updatedRows = rawRows.map(row => {
|
|
66
|
+
row = cloneDeep(row)
|
|
43
67
|
if (rename) {
|
|
44
|
-
|
|
45
|
-
delete
|
|
68
|
+
row[rename.updated] = row[rename.old]
|
|
69
|
+
delete row[rename.old]
|
|
46
70
|
} else if (deletedColumns.length !== 0) {
|
|
47
|
-
deletedColumns.forEach(colName => delete
|
|
71
|
+
deletedColumns.forEach(colName => delete row[colName])
|
|
48
72
|
}
|
|
49
|
-
return
|
|
73
|
+
return row
|
|
50
74
|
})
|
|
51
75
|
|
|
76
|
+
// cleanup any attachments from object storage for deleted attachment columns
|
|
77
|
+
await cleanupAttachments(updatedTable, { oldTable, rows: rawRows })
|
|
52
78
|
// Update views
|
|
53
|
-
await exports.checkForViewUpdates(
|
|
79
|
+
await exports.checkForViewUpdates(updatedTable, rename, deletedColumns)
|
|
54
80
|
delete updatedTable._rename
|
|
55
81
|
}
|
|
56
82
|
return { rows: updatedRows, table: updatedTable }
|
|
@@ -77,12 +103,12 @@ exports.makeSureTableUpToDate = (table, tableToSave) => {
|
|
|
77
103
|
return tableToSave
|
|
78
104
|
}
|
|
79
105
|
|
|
80
|
-
exports.handleDataImport = async (
|
|
106
|
+
exports.handleDataImport = async (user, table, dataImport) => {
|
|
81
107
|
if (!dataImport || !dataImport.csvString) {
|
|
82
108
|
return table
|
|
83
109
|
}
|
|
84
110
|
|
|
85
|
-
const db =
|
|
111
|
+
const db = getAppDB()
|
|
86
112
|
// Populate the table with rows imported from CSV in a bulk update
|
|
87
113
|
const data = await csvParser.transform({
|
|
88
114
|
...dataImport,
|
|
@@ -127,8 +153,8 @@ exports.handleDataImport = async (appId, user, table, dataImport) => {
|
|
|
127
153
|
return table
|
|
128
154
|
}
|
|
129
155
|
|
|
130
|
-
exports.handleSearchIndexes = async
|
|
131
|
-
const db =
|
|
156
|
+
exports.handleSearchIndexes = async table => {
|
|
157
|
+
const db = getAppDB()
|
|
132
158
|
// create relevant search indexes
|
|
133
159
|
if (table.indexes && table.indexes.length > 0) {
|
|
134
160
|
const currentIndexes = await db.getIndexes()
|
|
@@ -185,12 +211,9 @@ exports.checkStaticTables = table => {
|
|
|
185
211
|
}
|
|
186
212
|
|
|
187
213
|
class TableSaveFunctions {
|
|
188
|
-
constructor({
|
|
189
|
-
this.db =
|
|
190
|
-
this.
|
|
191
|
-
if (this.ctx && this.ctx.user) {
|
|
192
|
-
this.appId = this.ctx.appId
|
|
193
|
-
}
|
|
214
|
+
constructor({ user, oldTable, dataImport }) {
|
|
215
|
+
this.db = getAppDB()
|
|
216
|
+
this.user = user
|
|
194
217
|
this.oldTable = oldTable
|
|
195
218
|
this.dataImport = dataImport
|
|
196
219
|
// any rows that need updated
|
|
@@ -208,24 +231,15 @@ class TableSaveFunctions {
|
|
|
208
231
|
|
|
209
232
|
// when confirmed valid
|
|
210
233
|
async mid(table) {
|
|
211
|
-
let response = await exports.checkForColumnUpdates(
|
|
212
|
-
this.db,
|
|
213
|
-
this.oldTable,
|
|
214
|
-
table
|
|
215
|
-
)
|
|
234
|
+
let response = await exports.checkForColumnUpdates(this.oldTable, table)
|
|
216
235
|
this.rows = this.rows.concat(response.rows)
|
|
217
236
|
return table
|
|
218
237
|
}
|
|
219
238
|
|
|
220
239
|
// after saving
|
|
221
240
|
async after(table) {
|
|
222
|
-
table = await exports.handleSearchIndexes(
|
|
223
|
-
table = await exports.handleDataImport(
|
|
224
|
-
this.appId,
|
|
225
|
-
this.ctx.user,
|
|
226
|
-
table,
|
|
227
|
-
this.dataImport
|
|
228
|
-
)
|
|
241
|
+
table = await exports.handleSearchIndexes(table)
|
|
242
|
+
table = await exports.handleDataImport(this.user, table, this.dataImport)
|
|
229
243
|
return table
|
|
230
244
|
}
|
|
231
245
|
|
|
@@ -234,8 +248,22 @@ class TableSaveFunctions {
|
|
|
234
248
|
}
|
|
235
249
|
}
|
|
236
250
|
|
|
237
|
-
exports.
|
|
238
|
-
const db =
|
|
251
|
+
exports.getAllInternalTables = async () => {
|
|
252
|
+
const db = getAppDB()
|
|
253
|
+
const internalTables = await db.allDocs(
|
|
254
|
+
getTableParams(null, {
|
|
255
|
+
include_docs: true,
|
|
256
|
+
})
|
|
257
|
+
)
|
|
258
|
+
return internalTables.rows.map(tableDoc => ({
|
|
259
|
+
...tableDoc.doc,
|
|
260
|
+
type: "internal",
|
|
261
|
+
sourceId: BudibaseInternalDB._id,
|
|
262
|
+
}))
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
exports.getAllExternalTables = async datasourceId => {
|
|
266
|
+
const db = getAppDB()
|
|
239
267
|
const datasource = await db.get(datasourceId)
|
|
240
268
|
if (!datasource || !datasource.entities) {
|
|
241
269
|
throw "Datasource is not configured fully."
|
|
@@ -243,25 +271,25 @@ exports.getAllExternalTables = async (appId, datasourceId) => {
|
|
|
243
271
|
return datasource.entities
|
|
244
272
|
}
|
|
245
273
|
|
|
246
|
-
exports.getExternalTable = async (
|
|
247
|
-
const entities = await exports.getAllExternalTables(
|
|
274
|
+
exports.getExternalTable = async (datasourceId, tableName) => {
|
|
275
|
+
const entities = await exports.getAllExternalTables(datasourceId)
|
|
248
276
|
return entities[tableName]
|
|
249
277
|
}
|
|
250
278
|
|
|
251
|
-
exports.getTable = async
|
|
252
|
-
const db =
|
|
279
|
+
exports.getTable = async tableId => {
|
|
280
|
+
const db = getAppDB()
|
|
253
281
|
if (isExternalTable(tableId)) {
|
|
254
282
|
let { datasourceId, tableName } = breakExternalTableId(tableId)
|
|
255
283
|
const datasource = await db.get(datasourceId)
|
|
256
|
-
const table = await exports.getExternalTable(
|
|
284
|
+
const table = await exports.getExternalTable(datasourceId, tableName)
|
|
257
285
|
return { ...table, sql: isSQL(datasource) }
|
|
258
286
|
} else {
|
|
259
287
|
return db.get(tableId)
|
|
260
288
|
}
|
|
261
289
|
}
|
|
262
290
|
|
|
263
|
-
exports.checkForViewUpdates = async (
|
|
264
|
-
const views = await getViews(
|
|
291
|
+
exports.checkForViewUpdates = async (table, rename, deletedColumns) => {
|
|
292
|
+
const views = await getViews()
|
|
265
293
|
const tableViews = views.filter(view => view.meta.tableId === table._id)
|
|
266
294
|
|
|
267
295
|
// Check each table view to see if impacted by this table action
|
|
@@ -323,7 +351,7 @@ exports.checkForViewUpdates = async (db, table, rename, deletedColumns) => {
|
|
|
323
351
|
// Update view if required
|
|
324
352
|
if (needsUpdated) {
|
|
325
353
|
const newViewTemplate = viewTemplate(view.meta)
|
|
326
|
-
await saveView(
|
|
354
|
+
await saveView(null, view.name, newViewTemplate)
|
|
327
355
|
if (!newViewTemplate.meta.schema) {
|
|
328
356
|
newViewTemplate.meta.schema = table.schema
|
|
329
357
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const CouchDB = require("../../db")
|
|
2
1
|
const {
|
|
3
2
|
generateUserMetadataID,
|
|
4
3
|
getUserMetadataParams,
|
|
@@ -11,12 +10,14 @@ const { isEqual } = require("lodash")
|
|
|
11
10
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
12
11
|
const {
|
|
13
12
|
getDevelopmentAppID,
|
|
14
|
-
|
|
13
|
+
getProdAppIDs,
|
|
14
|
+
dbExists,
|
|
15
15
|
} = require("@budibase/backend-core/db")
|
|
16
|
-
const { doesDatabaseExist } = require("../../utilities")
|
|
17
16
|
const { UserStatus } = require("@budibase/backend-core/constants")
|
|
17
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
18
18
|
|
|
19
|
-
async function rawMetadata(
|
|
19
|
+
async function rawMetadata() {
|
|
20
|
+
const db = getAppDB()
|
|
20
21
|
return (
|
|
21
22
|
await db.allDocs(
|
|
22
23
|
getUserMetadataParams(null, {
|
|
@@ -54,13 +55,10 @@ function combineMetadataAndUser(user, metadata) {
|
|
|
54
55
|
return null
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
exports.syncGlobalUsers = async
|
|
58
|
+
exports.syncGlobalUsers = async () => {
|
|
58
59
|
// sync user metadata
|
|
59
|
-
const db =
|
|
60
|
-
const [users, metadata] = await Promise.all([
|
|
61
|
-
getGlobalUsers(appId),
|
|
62
|
-
rawMetadata(db),
|
|
63
|
-
])
|
|
60
|
+
const db = getAppDB()
|
|
61
|
+
const [users, metadata] = await Promise.all([getGlobalUsers(), rawMetadata()])
|
|
64
62
|
const toWrite = []
|
|
65
63
|
for (let user of users) {
|
|
66
64
|
const combined = await combineMetadataAndUser(user, metadata)
|
|
@@ -94,7 +92,7 @@ exports.syncUser = async function (ctx) {
|
|
|
94
92
|
let prodAppIds
|
|
95
93
|
// if they are a builder then get all production app IDs
|
|
96
94
|
if ((user.builder && user.builder.global) || deleting) {
|
|
97
|
-
prodAppIds = await
|
|
95
|
+
prodAppIds = await getProdAppIDs()
|
|
98
96
|
} else {
|
|
99
97
|
prodAppIds = Object.entries(roles)
|
|
100
98
|
.filter(entry => entry[1] !== BUILTIN_ROLE_IDS.PUBLIC)
|
|
@@ -104,10 +102,10 @@ exports.syncUser = async function (ctx) {
|
|
|
104
102
|
const roleId = roles[prodAppId]
|
|
105
103
|
const devAppId = getDevelopmentAppID(prodAppId)
|
|
106
104
|
for (let appId of [prodAppId, devAppId]) {
|
|
107
|
-
if (!(await
|
|
105
|
+
if (!(await dbExists(appId))) {
|
|
108
106
|
continue
|
|
109
107
|
}
|
|
110
|
-
const db =
|
|
108
|
+
const db = getAppDB()
|
|
111
109
|
const metadataId = generateUserMetadataID(userId)
|
|
112
110
|
let metadata
|
|
113
111
|
try {
|
|
@@ -143,8 +141,8 @@ exports.syncUser = async function (ctx) {
|
|
|
143
141
|
}
|
|
144
142
|
|
|
145
143
|
exports.fetchMetadata = async function (ctx) {
|
|
146
|
-
const database =
|
|
147
|
-
const global = await getGlobalUsers(
|
|
144
|
+
const database = getAppDB()
|
|
145
|
+
const global = await getGlobalUsers()
|
|
148
146
|
const metadata = await rawMetadata(database)
|
|
149
147
|
const users = []
|
|
150
148
|
for (let user of global) {
|
|
@@ -173,8 +171,7 @@ exports.updateSelfMetadata = async function (ctx) {
|
|
|
173
171
|
}
|
|
174
172
|
|
|
175
173
|
exports.updateMetadata = async function (ctx) {
|
|
176
|
-
const
|
|
177
|
-
const db = new CouchDB(appId)
|
|
174
|
+
const db = getAppDB()
|
|
178
175
|
const user = ctx.request.body
|
|
179
176
|
// this isn't applicable to the user
|
|
180
177
|
delete user.roles
|
|
@@ -186,7 +183,7 @@ exports.updateMetadata = async function (ctx) {
|
|
|
186
183
|
}
|
|
187
184
|
|
|
188
185
|
exports.destroyMetadata = async function (ctx) {
|
|
189
|
-
const db =
|
|
186
|
+
const db = getAppDB()
|
|
190
187
|
try {
|
|
191
188
|
const dbUser = await db.get(ctx.params.id)
|
|
192
189
|
await db.remove(dbUser._id, dbUser._rev)
|
|
@@ -209,7 +206,7 @@ exports.setFlag = async function (ctx) {
|
|
|
209
206
|
ctx.throw(400, "Must supply a 'flag' field in request body.")
|
|
210
207
|
}
|
|
211
208
|
const flagDocId = generateUserFlagID(userId)
|
|
212
|
-
const db =
|
|
209
|
+
const db = getAppDB()
|
|
213
210
|
let doc
|
|
214
211
|
try {
|
|
215
212
|
doc = await db.get(flagDocId)
|
|
@@ -224,7 +221,7 @@ exports.setFlag = async function (ctx) {
|
|
|
224
221
|
exports.getFlags = async function (ctx) {
|
|
225
222
|
const userId = ctx.user._id
|
|
226
223
|
const docId = generateUserFlagID(userId)
|
|
227
|
-
const db =
|
|
224
|
+
const db = getAppDB()
|
|
228
225
|
let doc
|
|
229
226
|
try {
|
|
230
227
|
doc = await db.get(docId)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const CouchDB = require("../../../db")
|
|
2
1
|
const viewTemplate = require("./viewBuilder")
|
|
3
2
|
const { apiFileReturn } = require("../../../utilities/fileSystem")
|
|
4
3
|
const exporters = require("./exporters")
|
|
@@ -6,14 +5,14 @@ const { saveView, getView, getViews, deleteView } = require("./utils")
|
|
|
6
5
|
const { fetchView } = require("../row")
|
|
7
6
|
const { getTable } = require("../table/utils")
|
|
8
7
|
const { FieldTypes } = require("../../../constants")
|
|
8
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
9
9
|
|
|
10
10
|
exports.fetch = async ctx => {
|
|
11
|
-
|
|
12
|
-
ctx.body = await getViews(db)
|
|
11
|
+
ctx.body = await getViews()
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
exports.save = async ctx => {
|
|
16
|
-
const db =
|
|
15
|
+
const db = getAppDB()
|
|
17
16
|
const { originalName, ...viewToSave } = ctx.request.body
|
|
18
17
|
const view = viewTemplate(viewToSave)
|
|
19
18
|
|
|
@@ -21,7 +20,7 @@ exports.save = async ctx => {
|
|
|
21
20
|
ctx.throw(400, "Cannot create view without a name")
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
await saveView(
|
|
23
|
+
await saveView(originalName, viewToSave.name, view)
|
|
25
24
|
|
|
26
25
|
// add views to table document
|
|
27
26
|
const table = await db.get(ctx.request.body.tableId)
|
|
@@ -42,9 +41,9 @@ exports.save = async ctx => {
|
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
exports.destroy = async ctx => {
|
|
45
|
-
const db =
|
|
44
|
+
const db = getAppDB()
|
|
46
45
|
const viewName = decodeURI(ctx.params.viewName)
|
|
47
|
-
const view = await deleteView(
|
|
46
|
+
const view = await deleteView(viewName)
|
|
48
47
|
const table = await db.get(view.meta.tableId)
|
|
49
48
|
delete table.views[viewName]
|
|
50
49
|
await db.put(table)
|
|
@@ -53,9 +52,8 @@ exports.destroy = async ctx => {
|
|
|
53
52
|
}
|
|
54
53
|
|
|
55
54
|
exports.exportView = async ctx => {
|
|
56
|
-
const db = new CouchDB(ctx.appId)
|
|
57
55
|
const viewName = decodeURI(ctx.query.view)
|
|
58
|
-
const view = await getView(
|
|
56
|
+
const view = await getView(viewName)
|
|
59
57
|
|
|
60
58
|
const format = ctx.query.format
|
|
61
59
|
if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
|
|
@@ -83,7 +81,7 @@ exports.exportView = async ctx => {
|
|
|
83
81
|
let schema = view && view.meta && view.meta.schema
|
|
84
82
|
if (!schema) {
|
|
85
83
|
const tableId = ctx.params.tableId || view.meta.tableId
|
|
86
|
-
const table = await getTable(
|
|
84
|
+
const table = await getTable(tableId)
|
|
87
85
|
schema = table.schema
|
|
88
86
|
}
|
|
89
87
|
|
|
@@ -6,8 +6,10 @@ const {
|
|
|
6
6
|
SEPARATOR,
|
|
7
7
|
} = require("../../../db/utils")
|
|
8
8
|
const env = require("../../../environment")
|
|
9
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
9
10
|
|
|
10
|
-
exports.getView = async
|
|
11
|
+
exports.getView = async viewName => {
|
|
12
|
+
const db = getAppDB()
|
|
11
13
|
if (env.SELF_HOSTED) {
|
|
12
14
|
const designDoc = await db.get("_design/database")
|
|
13
15
|
return designDoc.views[viewName]
|
|
@@ -22,7 +24,8 @@ exports.getView = async (db, viewName) => {
|
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
exports.getViews = async
|
|
27
|
+
exports.getViews = async () => {
|
|
28
|
+
const db = getAppDB()
|
|
26
29
|
const response = []
|
|
27
30
|
if (env.SELF_HOSTED) {
|
|
28
31
|
const designDoc = await db.get("_design/database")
|
|
@@ -54,7 +57,8 @@ exports.getViews = async db => {
|
|
|
54
57
|
return response
|
|
55
58
|
}
|
|
56
59
|
|
|
57
|
-
exports.saveView = async (
|
|
60
|
+
exports.saveView = async (originalName, viewName, viewTemplate) => {
|
|
61
|
+
const db = getAppDB()
|
|
58
62
|
if (env.SELF_HOSTED) {
|
|
59
63
|
const designDoc = await db.get("_design/database")
|
|
60
64
|
designDoc.views = {
|
|
@@ -91,7 +95,8 @@ exports.saveView = async (db, originalName, viewName, viewTemplate) => {
|
|
|
91
95
|
}
|
|
92
96
|
}
|
|
93
97
|
|
|
94
|
-
exports.deleteView = async
|
|
98
|
+
exports.deleteView = async viewName => {
|
|
99
|
+
const db = getAppDB()
|
|
95
100
|
if (env.SELF_HOSTED) {
|
|
96
101
|
const designDoc = await db.get("_design/database")
|
|
97
102
|
const view = designDoc.views[viewName]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const CouchDB = require("../../db")
|
|
2
1
|
const { generateWebhookID, getWebhookParams } = require("../../db/utils")
|
|
3
2
|
const toJsonSchema = require("to-json-schema")
|
|
4
3
|
const validate = require("jsonschema").validate
|
|
5
4
|
const triggers = require("../../automations/triggers")
|
|
6
|
-
const {
|
|
5
|
+
const { getProdAppID } = require("@budibase/backend-core/db")
|
|
6
|
+
const { getAppDB, updateAppId } = require("@budibase/backend-core/context")
|
|
7
7
|
|
|
8
8
|
const AUTOMATION_DESCRIPTION = "Generated from Webhook Schema"
|
|
9
9
|
|
|
@@ -23,7 +23,7 @@ exports.WebhookType = {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
exports.fetch = async ctx => {
|
|
26
|
-
const db =
|
|
26
|
+
const db = getAppDB()
|
|
27
27
|
const response = await db.allDocs(
|
|
28
28
|
getWebhookParams(null, {
|
|
29
29
|
include_docs: true,
|
|
@@ -33,7 +33,7 @@ exports.fetch = async ctx => {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
exports.save = async ctx => {
|
|
36
|
-
const db =
|
|
36
|
+
const db = getAppDB()
|
|
37
37
|
const webhook = ctx.request.body
|
|
38
38
|
webhook.appId = ctx.appId
|
|
39
39
|
|
|
@@ -52,12 +52,13 @@ exports.save = async ctx => {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
exports.destroy = async ctx => {
|
|
55
|
-
const db =
|
|
55
|
+
const db = getAppDB()
|
|
56
56
|
ctx.body = await db.remove(ctx.params.id, ctx.params.rev)
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
exports.buildSchema = async ctx => {
|
|
60
|
-
|
|
60
|
+
updateAppId(ctx.params.instance)
|
|
61
|
+
const db = getAppDB()
|
|
61
62
|
const webhook = await db.get(ctx.params.id)
|
|
62
63
|
webhook.bodySchema = toJsonSchema(ctx.request.body)
|
|
63
64
|
// update the automation outputs
|
|
@@ -81,9 +82,10 @@ exports.buildSchema = async ctx => {
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
exports.trigger = async ctx => {
|
|
84
|
-
const prodAppId =
|
|
85
|
+
const prodAppId = getProdAppID(ctx.params.instance)
|
|
86
|
+
updateAppId(prodAppId)
|
|
85
87
|
try {
|
|
86
|
-
const db =
|
|
88
|
+
const db = getAppDB()
|
|
87
89
|
const webhook = await db.get(ctx.params.id)
|
|
88
90
|
// validate against the schema
|
|
89
91
|
if (webhook.bodySchema) {
|
package/src/api/routes/index.js
CHANGED
|
@@ -24,6 +24,7 @@ const backupRoutes = require("./backup")
|
|
|
24
24
|
const metadataRoutes = require("./metadata")
|
|
25
25
|
const devRoutes = require("./dev")
|
|
26
26
|
const cloudRoutes = require("./cloud")
|
|
27
|
+
const migrationRoutes = require("./migrations")
|
|
27
28
|
|
|
28
29
|
exports.mainRoutes = [
|
|
29
30
|
authRoutes,
|
|
@@ -53,6 +54,7 @@ exports.mainRoutes = [
|
|
|
53
54
|
// this could be breaking as koa may recognise other routes as this
|
|
54
55
|
tableRoutes,
|
|
55
56
|
rowRoutes,
|
|
57
|
+
migrationRoutes,
|
|
56
58
|
]
|
|
57
59
|
|
|
58
60
|
exports.staticRoutes = staticRoutes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const Router = require("@koa/router")
|
|
2
|
+
const migrationsController = require("../controllers/migrations")
|
|
3
|
+
const router = Router()
|
|
4
|
+
const { internalApi } = require("@budibase/backend-core/auth")
|
|
5
|
+
|
|
6
|
+
router
|
|
7
|
+
.post("/api/migrations/run", internalApi, migrationsController.migrate)
|
|
8
|
+
.get(
|
|
9
|
+
"/api/migrations/definitions",
|
|
10
|
+
internalApi,
|
|
11
|
+
migrationsController.fetchDefinitions
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
module.exports = router
|
|
@@ -145,6 +145,7 @@ describe("/automations", () => {
|
|
|
145
145
|
let table = await config.createTable()
|
|
146
146
|
automation.definition.trigger.inputs.tableId = table._id
|
|
147
147
|
automation.definition.steps[0].inputs.row.tableId = table._id
|
|
148
|
+
automation.appId = config.appId
|
|
148
149
|
automation = await config.createAutomation(automation)
|
|
149
150
|
await setup.delay(500)
|
|
150
151
|
const res = await testAutomation(config, automation)
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
const setup = require("./utilities")
|
|
2
2
|
const { basicScreen } = setup.structures
|
|
3
|
-
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
|
3
|
+
const { checkBuilderEndpoint, runInProd } = require("./utilities/TestFunctions")
|
|
4
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
5
|
+
const { doInAppContext } = require("@budibase/backend-core/context")
|
|
5
6
|
|
|
6
7
|
const route = "/test"
|
|
7
8
|
|
|
9
|
+
// there are checks which are disabled in test env,
|
|
10
|
+
// these checks need to be enabled for this test
|
|
11
|
+
|
|
12
|
+
|
|
8
13
|
describe("/routing", () => {
|
|
9
14
|
let request = setup.getRequest()
|
|
10
15
|
let config = setup.getConfig()
|
|
@@ -26,20 +31,24 @@ describe("/routing", () => {
|
|
|
26
31
|
|
|
27
32
|
describe("fetch", () => {
|
|
28
33
|
it("prevents a public user from accessing development app", async () => {
|
|
29
|
-
await
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
await runInProd(() => {
|
|
35
|
+
return request
|
|
36
|
+
.get(`/api/routing/client`)
|
|
37
|
+
.set(config.publicHeaders({ prodApp: false }))
|
|
38
|
+
.expect(302)
|
|
39
|
+
})
|
|
33
40
|
})
|
|
34
41
|
|
|
35
42
|
it("prevents a non builder from accessing development app", async () => {
|
|
36
|
-
await
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
await runInProd(async () => {
|
|
44
|
+
return request
|
|
45
|
+
.get(`/api/routing/client`)
|
|
46
|
+
.set(await config.roleHeaders({
|
|
47
|
+
roleId: BUILTIN_ROLE_IDS.BASIC,
|
|
48
|
+
prodApp: false
|
|
49
|
+
}))
|
|
50
|
+
.expect(302)
|
|
51
|
+
})
|
|
43
52
|
})
|
|
44
53
|
it("returns the correct routing for basic user", async () => {
|
|
45
54
|
const res = await request
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const { outputProcessing } = require("../../../utilities/rowProcessor")
|
|
2
2
|
const setup = require("./utilities")
|
|
3
3
|
const { basicRow } = setup.structures
|
|
4
|
+
const { doInAppContext } = require("@budibase/backend-core/context")
|
|
4
5
|
|
|
5
6
|
// mock the fetch for the search system
|
|
6
7
|
jest.mock("node-fetch")
|
|
@@ -387,10 +388,12 @@ describe("/rows", () => {
|
|
|
387
388
|
})
|
|
388
389
|
// the environment needs configured for this
|
|
389
390
|
await setup.switchToSelfHosted(async () => {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
391
|
+
doInAppContext(config.getAppId(), async () => {
|
|
392
|
+
const enriched = await outputProcessing(table, [row])
|
|
393
|
+
expect(enriched[0].attachment[0].url).toBe(
|
|
394
|
+
`/prod-budi-app-assets/${config.getAppId()}/attachments/test/thing.csv`
|
|
395
|
+
)
|
|
396
|
+
})
|
|
394
397
|
})
|
|
395
398
|
})
|
|
396
399
|
})
|