@budibase/server 1.0.47 → 1.0.49-alpha.10
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.937b2767.js → index.506eca43.js} +249 -246
- package/builder/assets/index.83c0944f.css +1 -0
- package/builder/assets/{vendor.f9faf6ab.js → vendor.d526bfe8.js} +12 -12
- package/builder/index.html +3 -3
- package/coverage/clover.xml +3069 -2773
- package/coverage/coverage-final.json +106 -101
- 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 +257 -152
- package/coverage/lcov-report/api/controllers/auth.js.html +22 -13
- 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 +13 -16
- package/coverage/lcov-report/api/controllers/datasource.js.html +81 -51
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +76 -76
- 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/api/controllers/migrations.js.html +119 -0
- 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 +55 -40
- package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
- package/coverage/lcov-report/api/controllers/row/internal.js.html +118 -226
- 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 +47 -62
- 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 +58 -43
- package/coverage/lcov-report/api/controllers/table/index.js.html +58 -82
- package/coverage/lcov-report/api/controllers/table/internal.js.html +81 -66
- package/coverage/lcov-report/api/controllers/table/utils.js.html +282 -111
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +47 -50
- 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 +8 -8
- 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 +18 -18
- package/coverage/lcov-report/api/routes/index.js.html +3 -3
- 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/api/routes/{hosting.js.html → migrations.js.html} +17 -14
- 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 +17 -2
- 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 +13 -22
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
- 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 +13 -13
- 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 +11 -11
- package/coverage/lcov-report/constants/index.js.html +68 -32
- 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 +15 -15
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +25 -37
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +51 -96
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +42 -42
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +87 -87
- 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 +138 -123
- 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 +173 -65
- package/coverage/lcov-report/middleware/builder.js.html +10 -10
- package/coverage/lcov-report/middleware/currentapp.js.html +95 -83
- package/coverage/lcov-report/middleware/index.html +38 -38
- 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 +281 -53
- 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 +26 -26
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +36 -42
- 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 +58 -49
- package/coverage/lcov-report/utilities/index.html +37 -37
- package/coverage/lcov-report/utilities/index.js.html +43 -73
- 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 +97 -103
- 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 +141 -0
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +305 -0
- package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +43 -112
- package/coverage/lcov.info +4989 -4390
- package/dist/api/controllers/application.js +90 -60
- package/dist/api/controllers/auth.js +8 -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 +20 -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 +89 -65
- 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 +13 -14
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +61 -12
- 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 +16 -13
- package/dist/api/controllers/table/internal.js +22 -16
- package/dist/api/controllers/table/utils.js +77 -37
- package/dist/api/controllers/user.js +18 -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 -2
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/static.js +2 -1
- 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 +3 -5
- package/dist/automations/steps/deleteRow.js +1 -4
- 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 +12 -5
- 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/definitions/datasource.js +1 -0
- package/dist/environment.js +4 -1
- package/dist/integrations/base/sql.js +56 -14
- package/dist/integrations/googlesheets.js +340 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/utils.js +60 -8
- package/dist/middleware/authorized.js +57 -30
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +82 -15
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/functions/usageQuotas/index.js +20 -0
- package/dist/migrations/functions/usageQuotas/syncApps.js +29 -0
- package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +8 -5
- package/dist/tests/utilities/TestConfiguration.js +80 -50
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +17 -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.js → usageQuota/index.js} +45 -31
- package/dist/utilities/usageQuota/rows.js +78 -0
- package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -24
- package/nodemon.json +1 -1
- package/package.json +9 -6
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +85 -50
- package/src/api/controllers/auth.js +8 -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 +21 -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 +66 -42
- 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 +13 -18
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +65 -12
- 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 +20 -28
- package/src/api/controllers/table/internal.js +24 -19
- package/src/api/controllers/table/utils.js +101 -44
- package/src/api/controllers/user.js +19 -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 -2
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/static.js +5 -0
- package/src/api/routes/tests/application.spec.js +2 -2
- package/src/api/routes/tests/auth.spec.js +1 -2
- 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/static.spec.js +98 -0
- 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 +2 -5
- package/src/automations/steps/deleteRow.js +1 -4
- 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 +17 -5
- 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/definitions/datasource.ts +3 -0
- package/src/environment.js +4 -1
- package/src/integrations/base/sql.ts +69 -21
- package/src/integrations/googlesheets.ts +353 -0
- package/src/integrations/index.ts +3 -0
- package/src/integrations/tests/sql.spec.js +16 -0
- package/src/integrations/utils.ts +75 -11
- package/src/middleware/authorized.js +66 -30
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +13 -6
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/tests/usageQuota.spec.js +18 -24
- package/src/middleware/usageQuota.js +93 -17
- 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/functions/tests/quotas1.spec.js +27 -0
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
- 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 +82 -55
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +19 -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/tests/usageQuota/usageQuota.spec.js +72 -0
- package/src/utilities/usageQuota/index.js +93 -0
- package/src/utilities/usageQuota/rows.js +75 -0
- package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -27
- package/tsconfig.json +2 -1
- package/builder/assets/index.39e01193.css +0 -1
- package/dist/api/controllers/hosting.js +0 -30
- package/dist/api/routes/hosting.js +0 -11
- package/src/api/controllers/hosting.js +0 -22
- package/src/api/routes/hosting.js +0 -13
- package/src/api/routes/tests/hosting.spec.js +0 -36
- package/src/utilities/usageQuota.js +0 -73
|
@@ -1,22 +1,50 @@
|
|
|
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
|
-
|
|
11
|
+
const {
|
|
12
|
+
inputProcessing,
|
|
13
|
+
cleanupAttachments,
|
|
14
|
+
} = require("../../../utilities/rowProcessor")
|
|
15
|
+
const {
|
|
16
|
+
USERS_TABLE_SCHEMA,
|
|
17
|
+
SwitchableTypes,
|
|
18
|
+
CanSwitchTypes,
|
|
19
|
+
} = require("../../../constants")
|
|
12
20
|
const {
|
|
13
21
|
isExternalTable,
|
|
14
22
|
breakExternalTableId,
|
|
23
|
+
isSQL,
|
|
15
24
|
} = require("../../../integrations/utils")
|
|
16
25
|
const { getViews, saveView } = require("../view/utils")
|
|
17
26
|
const viewTemplate = require("../view/viewBuilder")
|
|
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
|
+
}
|
|
18
45
|
|
|
19
|
-
exports.checkForColumnUpdates = async (
|
|
46
|
+
exports.checkForColumnUpdates = async (oldTable, updatedTable) => {
|
|
47
|
+
const db = getAppDB()
|
|
20
48
|
let updatedRows = []
|
|
21
49
|
const rename = updatedTable._rename
|
|
22
50
|
let deletedColumns = []
|
|
@@ -33,18 +61,22 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) => {
|
|
|
33
61
|
include_docs: true,
|
|
34
62
|
})
|
|
35
63
|
)
|
|
36
|
-
|
|
64
|
+
const rawRows = rows.rows.map(({ doc }) => doc)
|
|
65
|
+
updatedRows = rawRows.map(row => {
|
|
66
|
+
row = cloneDeep(row)
|
|
37
67
|
if (rename) {
|
|
38
|
-
|
|
39
|
-
delete
|
|
68
|
+
row[rename.updated] = row[rename.old]
|
|
69
|
+
delete row[rename.old]
|
|
40
70
|
} else if (deletedColumns.length !== 0) {
|
|
41
|
-
deletedColumns.forEach(colName => delete
|
|
71
|
+
deletedColumns.forEach(colName => delete row[colName])
|
|
42
72
|
}
|
|
43
|
-
return
|
|
73
|
+
return row
|
|
44
74
|
})
|
|
45
75
|
|
|
76
|
+
// cleanup any attachments from object storage for deleted attachment columns
|
|
77
|
+
await cleanupAttachments(updatedTable, { oldTable, rows: rawRows })
|
|
46
78
|
// Update views
|
|
47
|
-
await exports.checkForViewUpdates(
|
|
79
|
+
await exports.checkForViewUpdates(updatedTable, rename, deletedColumns)
|
|
48
80
|
delete updatedTable._rename
|
|
49
81
|
}
|
|
50
82
|
return { rows: updatedRows, table: updatedTable }
|
|
@@ -71,12 +103,12 @@ exports.makeSureTableUpToDate = (table, tableToSave) => {
|
|
|
71
103
|
return tableToSave
|
|
72
104
|
}
|
|
73
105
|
|
|
74
|
-
exports.handleDataImport = async (
|
|
106
|
+
exports.handleDataImport = async (user, table, dataImport) => {
|
|
75
107
|
if (!dataImport || !dataImport.csvString) {
|
|
76
108
|
return table
|
|
77
109
|
}
|
|
78
110
|
|
|
79
|
-
const db =
|
|
111
|
+
const db = getAppDB()
|
|
80
112
|
// Populate the table with rows imported from CSV in a bulk update
|
|
81
113
|
const data = await csvParser.transform({
|
|
82
114
|
...dataImport,
|
|
@@ -111,14 +143,18 @@ exports.handleDataImport = async (appId, user, table, dataImport) => {
|
|
|
111
143
|
finalData.push(row)
|
|
112
144
|
}
|
|
113
145
|
|
|
146
|
+
await usageQuota.update(usageQuota.Properties.ROW, finalData.length, {
|
|
147
|
+
dryRun: true,
|
|
148
|
+
})
|
|
114
149
|
await db.bulkDocs(finalData)
|
|
150
|
+
await usageQuota.update(usageQuota.Properties.ROW, finalData.length)
|
|
115
151
|
let response = await db.put(table)
|
|
116
152
|
table._rev = response._rev
|
|
117
153
|
return table
|
|
118
154
|
}
|
|
119
155
|
|
|
120
|
-
exports.handleSearchIndexes = async
|
|
121
|
-
const db =
|
|
156
|
+
exports.handleSearchIndexes = async table => {
|
|
157
|
+
const db = getAppDB()
|
|
122
158
|
// create relevant search indexes
|
|
123
159
|
if (table.indexes && table.indexes.length > 0) {
|
|
124
160
|
const currentIndexes = await db.getIndexes()
|
|
@@ -175,12 +211,9 @@ exports.checkStaticTables = table => {
|
|
|
175
211
|
}
|
|
176
212
|
|
|
177
213
|
class TableSaveFunctions {
|
|
178
|
-
constructor({
|
|
179
|
-
this.db =
|
|
180
|
-
this.
|
|
181
|
-
if (this.ctx && this.ctx.user) {
|
|
182
|
-
this.appId = this.ctx.appId
|
|
183
|
-
}
|
|
214
|
+
constructor({ user, oldTable, dataImport }) {
|
|
215
|
+
this.db = getAppDB()
|
|
216
|
+
this.user = user
|
|
184
217
|
this.oldTable = oldTable
|
|
185
218
|
this.dataImport = dataImport
|
|
186
219
|
// any rows that need updated
|
|
@@ -198,24 +231,15 @@ class TableSaveFunctions {
|
|
|
198
231
|
|
|
199
232
|
// when confirmed valid
|
|
200
233
|
async mid(table) {
|
|
201
|
-
let response = await exports.checkForColumnUpdates(
|
|
202
|
-
this.db,
|
|
203
|
-
this.oldTable,
|
|
204
|
-
table
|
|
205
|
-
)
|
|
234
|
+
let response = await exports.checkForColumnUpdates(this.oldTable, table)
|
|
206
235
|
this.rows = this.rows.concat(response.rows)
|
|
207
236
|
return table
|
|
208
237
|
}
|
|
209
238
|
|
|
210
239
|
// after saving
|
|
211
240
|
async after(table) {
|
|
212
|
-
table = await exports.handleSearchIndexes(
|
|
213
|
-
table = await exports.handleDataImport(
|
|
214
|
-
this.appId,
|
|
215
|
-
this.ctx.user,
|
|
216
|
-
table,
|
|
217
|
-
this.dataImport
|
|
218
|
-
)
|
|
241
|
+
table = await exports.handleSearchIndexes(table)
|
|
242
|
+
table = await exports.handleDataImport(this.user, table, this.dataImport)
|
|
219
243
|
return table
|
|
220
244
|
}
|
|
221
245
|
|
|
@@ -224,8 +248,22 @@ class TableSaveFunctions {
|
|
|
224
248
|
}
|
|
225
249
|
}
|
|
226
250
|
|
|
227
|
-
exports.
|
|
228
|
-
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()
|
|
229
267
|
const datasource = await db.get(datasourceId)
|
|
230
268
|
if (!datasource || !datasource.entities) {
|
|
231
269
|
throw "Datasource is not configured fully."
|
|
@@ -233,23 +271,25 @@ exports.getAllExternalTables = async (appId, datasourceId) => {
|
|
|
233
271
|
return datasource.entities
|
|
234
272
|
}
|
|
235
273
|
|
|
236
|
-
exports.getExternalTable = async (
|
|
237
|
-
const entities = await exports.getAllExternalTables(
|
|
274
|
+
exports.getExternalTable = async (datasourceId, tableName) => {
|
|
275
|
+
const entities = await exports.getAllExternalTables(datasourceId)
|
|
238
276
|
return entities[tableName]
|
|
239
277
|
}
|
|
240
278
|
|
|
241
|
-
exports.getTable = async
|
|
242
|
-
const db =
|
|
279
|
+
exports.getTable = async tableId => {
|
|
280
|
+
const db = getAppDB()
|
|
243
281
|
if (isExternalTable(tableId)) {
|
|
244
282
|
let { datasourceId, tableName } = breakExternalTableId(tableId)
|
|
245
|
-
|
|
283
|
+
const datasource = await db.get(datasourceId)
|
|
284
|
+
const table = await exports.getExternalTable(datasourceId, tableName)
|
|
285
|
+
return { ...table, sql: isSQL(datasource) }
|
|
246
286
|
} else {
|
|
247
287
|
return db.get(tableId)
|
|
248
288
|
}
|
|
249
289
|
}
|
|
250
290
|
|
|
251
|
-
exports.checkForViewUpdates = async (
|
|
252
|
-
const views = await getViews(
|
|
291
|
+
exports.checkForViewUpdates = async (table, rename, deletedColumns) => {
|
|
292
|
+
const views = await getViews()
|
|
253
293
|
const tableViews = views.filter(view => view.meta.tableId === table._id)
|
|
254
294
|
|
|
255
295
|
// Check each table view to see if impacted by this table action
|
|
@@ -311,7 +351,7 @@ exports.checkForViewUpdates = async (db, table, rename, deletedColumns) => {
|
|
|
311
351
|
// Update view if required
|
|
312
352
|
if (needsUpdated) {
|
|
313
353
|
const newViewTemplate = viewTemplate(view.meta)
|
|
314
|
-
await saveView(
|
|
354
|
+
await saveView(null, view.name, newViewTemplate)
|
|
315
355
|
if (!newViewTemplate.meta.schema) {
|
|
316
356
|
newViewTemplate.meta.schema = table.schema
|
|
317
357
|
}
|
|
@@ -340,6 +380,23 @@ exports.foreignKeyStructure = (keyName, meta = null) => {
|
|
|
340
380
|
return structure
|
|
341
381
|
}
|
|
342
382
|
|
|
383
|
+
exports.areSwitchableTypes = (type1, type2) => {
|
|
384
|
+
if (
|
|
385
|
+
SwitchableTypes.indexOf(type1) === -1 &&
|
|
386
|
+
SwitchableTypes.indexOf(type2) === -1
|
|
387
|
+
) {
|
|
388
|
+
return false
|
|
389
|
+
}
|
|
390
|
+
for (let option of CanSwitchTypes) {
|
|
391
|
+
const index1 = option.indexOf(type1),
|
|
392
|
+
index2 = option.indexOf(type2)
|
|
393
|
+
if (index1 !== -1 && index2 !== -1 && index1 !== index2) {
|
|
394
|
+
return true
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return false
|
|
398
|
+
}
|
|
399
|
+
|
|
343
400
|
exports.hasTypeChanged = (table, oldTable) => {
|
|
344
401
|
if (!oldTable) {
|
|
345
402
|
return false
|
|
@@ -350,7 +407,7 @@ exports.hasTypeChanged = (table, oldTable) => {
|
|
|
350
407
|
continue
|
|
351
408
|
}
|
|
352
409
|
const newType = table.schema[key].type
|
|
353
|
-
if (oldType !== newType &&
|
|
410
|
+
if (oldType !== newType && !exports.areSwitchableTypes(oldType, newType)) {
|
|
354
411
|
return true
|
|
355
412
|
}
|
|
356
413
|
}
|
|
@@ -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) {
|
|
@@ -167,12 +165,13 @@ exports.updateSelfMetadata = async function (ctx) {
|
|
|
167
165
|
ctx.request.body._id = ctx.user._id
|
|
168
166
|
// make sure no stale rev
|
|
169
167
|
delete ctx.request.body._rev
|
|
168
|
+
// make sure no csrf token
|
|
169
|
+
delete ctx.request.body.csrfToken
|
|
170
170
|
await exports.updateMetadata(ctx)
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
exports.updateMetadata = async function (ctx) {
|
|
174
|
-
const
|
|
175
|
-
const db = new CouchDB(appId)
|
|
174
|
+
const db = getAppDB()
|
|
176
175
|
const user = ctx.request.body
|
|
177
176
|
// this isn't applicable to the user
|
|
178
177
|
delete user.roles
|
|
@@ -184,7 +183,7 @@ exports.updateMetadata = async function (ctx) {
|
|
|
184
183
|
}
|
|
185
184
|
|
|
186
185
|
exports.destroyMetadata = async function (ctx) {
|
|
187
|
-
const db =
|
|
186
|
+
const db = getAppDB()
|
|
188
187
|
try {
|
|
189
188
|
const dbUser = await db.get(ctx.params.id)
|
|
190
189
|
await db.remove(dbUser._id, dbUser._rev)
|
|
@@ -207,7 +206,7 @@ exports.setFlag = async function (ctx) {
|
|
|
207
206
|
ctx.throw(400, "Must supply a 'flag' field in request body.")
|
|
208
207
|
}
|
|
209
208
|
const flagDocId = generateUserFlagID(userId)
|
|
210
|
-
const db =
|
|
209
|
+
const db = getAppDB()
|
|
211
210
|
let doc
|
|
212
211
|
try {
|
|
213
212
|
doc = await db.get(flagDocId)
|
|
@@ -222,7 +221,7 @@ exports.setFlag = async function (ctx) {
|
|
|
222
221
|
exports.getFlags = async function (ctx) {
|
|
223
222
|
const userId = ctx.user._id
|
|
224
223
|
const docId = generateUserFlagID(userId)
|
|
225
|
-
const db =
|
|
224
|
+
const db = getAppDB()
|
|
226
225
|
let doc
|
|
227
226
|
try {
|
|
228
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
|
@@ -20,11 +20,11 @@ const integrationRoutes = require("./integration")
|
|
|
20
20
|
const permissionRoutes = require("./permission")
|
|
21
21
|
const datasourceRoutes = require("./datasource")
|
|
22
22
|
const queryRoutes = require("./query")
|
|
23
|
-
const hostingRoutes = require("./hosting")
|
|
24
23
|
const backupRoutes = require("./backup")
|
|
25
24
|
const metadataRoutes = require("./metadata")
|
|
26
25
|
const devRoutes = require("./dev")
|
|
27
26
|
const cloudRoutes = require("./cloud")
|
|
27
|
+
const migrationRoutes = require("./migrations")
|
|
28
28
|
|
|
29
29
|
exports.mainRoutes = [
|
|
30
30
|
authRoutes,
|
|
@@ -46,7 +46,6 @@ exports.mainRoutes = [
|
|
|
46
46
|
permissionRoutes,
|
|
47
47
|
datasourceRoutes,
|
|
48
48
|
queryRoutes,
|
|
49
|
-
hostingRoutes,
|
|
50
49
|
backupRoutes,
|
|
51
50
|
metadataRoutes,
|
|
52
51
|
devRoutes,
|
|
@@ -55,6 +54,7 @@ exports.mainRoutes = [
|
|
|
55
54
|
// this could be breaking as koa may recognise other routes as this
|
|
56
55
|
tableRoutes,
|
|
57
56
|
rowRoutes,
|
|
57
|
+
migrationRoutes,
|
|
58
58
|
]
|
|
59
59
|
|
|
60
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
|
package/src/api/routes/static.js
CHANGED
|
@@ -46,5 +46,10 @@ router
|
|
|
46
46
|
)
|
|
47
47
|
// TODO: this likely needs to be secured in some way
|
|
48
48
|
.get("/:appId/:path*", controller.serveApp)
|
|
49
|
+
.post(
|
|
50
|
+
"/api/attachments/:datasourceId/url",
|
|
51
|
+
authorized(PermissionTypes.TABLE, PermissionLevels.READ),
|
|
52
|
+
controller.getSignedUploadURL
|
|
53
|
+
)
|
|
49
54
|
|
|
50
55
|
module.exports = router
|
|
@@ -53,8 +53,8 @@ describe("/applications", () => {
|
|
|
53
53
|
|
|
54
54
|
describe("fetch", () => {
|
|
55
55
|
it("lists all applications", async () => {
|
|
56
|
-
await config.createApp(
|
|
57
|
-
await config.createApp(
|
|
56
|
+
await config.createApp("app1")
|
|
57
|
+
await config.createApp("app2")
|
|
58
58
|
|
|
59
59
|
const res = await request
|
|
60
60
|
.get(`/api/applications?status=${AppStatus.DEV}`)
|
|
@@ -13,10 +13,9 @@ describe("/authenticate", () => {
|
|
|
13
13
|
|
|
14
14
|
describe("fetch self", () => {
|
|
15
15
|
it("should be able to fetch self", async () => {
|
|
16
|
-
const headers = await config.login()
|
|
17
16
|
const res = await request
|
|
18
17
|
.get(`/api/self`)
|
|
19
|
-
.set(
|
|
18
|
+
.set(config.defaultHeaders())
|
|
20
19
|
.expect("Content-Type", /json/)
|
|
21
20
|
.expect(200)
|
|
22
21
|
expect(res.body._id).toEqual(generateUserMetadataID("us_uuid1"))
|
|
@@ -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)
|