@budibase/server 1.0.49-alpha.9 → 1.0.49
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 +5 -4
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +1 -2
- package/__mocks__/pg.ts +5 -3
- package/builder/assets/{index.ad5370ae.js → index.2c37968e.js} +246 -249
- package/builder/assets/index.39e01193.css +1 -0
- package/builder/assets/{vendor.d526bfe8.js → vendor.f9faf6ab.js} +12 -12
- package/builder/index.html +3 -3
- package/coverage/clover.xml +2827 -3117
- package/coverage/coverage-final.json +101 -106
- 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 +152 -257
- package/coverage/lcov-report/api/controllers/auth.js.html +13 -22
- package/coverage/lcov-report/api/controllers/automation.js.html +69 -39
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +11 -8
- package/coverage/lcov-report/api/controllers/component.js.html +16 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +51 -81
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/{utilities/usageQuota/usageQuoteReset.js.html → api/controllers/hosting.js.html} +48 -36
- 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 +21 -6
- 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 +35 -38
- 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 +10 -7
- package/coverage/lcov-report/api/controllers/row/external.js.html +141 -48
- package/coverage/lcov-report/api/controllers/row/index.html +40 -55
- package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
- package/coverage/lcov-report/api/controllers/row/internal.js.html +226 -118
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +34 -52
- package/coverage/lcov-report/api/controllers/row/utils.js.html +62 -47
- package/coverage/lcov-report/api/controllers/screen.js.html +21 -15
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/external.js.html +34 -25
- package/coverage/lcov-report/api/controllers/table/index.html +43 -58
- package/coverage/lcov-report/api/controllers/table/index.js.html +82 -58
- package/coverage/lcov-report/api/controllers/table/internal.js.html +66 -81
- package/coverage/lcov-report/api/controllers/table/utils.js.html +110 -218
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +50 -47
- 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 +33 -27
- package/coverage/lcov-report/api/controllers/view/utils.js.html +20 -35
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +28 -34
- 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/{migrations.js.html → hosting.js.html} +14 -17
- 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/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 +2 -17
- 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 +10 -7
- 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 +22 -13
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +20 -11
- 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 +55 -61
- package/coverage/lcov-report/automations/utils.js.html +42 -54
- package/coverage/lcov-report/constants/index.html +5 -5
- package/coverage/lcov-report/constants/index.js.html +26 -53
- 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 +37 -25
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +96 -51
- 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 +120 -135
- 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 +65 -173
- package/coverage/lcov-report/middleware/builder.js.html +10 -10
- package/coverage/lcov-report/middleware/currentapp.js.html +83 -95
- 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 +53 -281
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +24 -30
- 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 +24 -39
- 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 +49 -58
- package/coverage/lcov-report/utilities/index.html +37 -37
- package/coverage/lcov-report/utilities/index.js.html +73 -43
- 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 +103 -97
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +27 -75
- 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/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +112 -43
- package/coverage/lcov.info +4431 -5013
- package/dist/api/controllers/application.js +60 -90
- package/dist/api/controllers/auth.js +5 -8
- package/dist/api/controllers/automation.js +19 -14
- package/dist/api/controllers/cloud.js +3 -2
- package/dist/api/controllers/component.js +4 -3
- package/dist/api/controllers/datasource.js +10 -20
- package/dist/api/controllers/deploy/Deployment.js +6 -3
- package/dist/api/controllers/deploy/index.js +13 -12
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/hosting.js +30 -0
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +6 -4
- package/dist/api/controllers/query/index.js +10 -11
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +6 -5
- package/dist/api/controllers/row/ExternalRequest.js +67 -90
- package/dist/api/controllers/row/external.js +22 -14
- package/dist/api/controllers/row/internal.js +93 -55
- package/dist/api/controllers/row/internalSearch.js +17 -23
- package/dist/api/controllers/row/utils.js +14 -13
- package/dist/api/controllers/screen.js +7 -5
- package/dist/api/controllers/static/index.js +12 -61
- package/dist/api/controllers/table/external.js +10 -7
- package/dist/api/controllers/table/index.js +13 -16
- package/dist/api/controllers/table/internal.js +16 -22
- package/dist/api/controllers/table/utils.js +35 -62
- package/dist/api/controllers/user.js +20 -18
- package/dist/api/controllers/view/index.js +10 -8
- package/dist/api/controllers/view/utils.js +4 -9
- package/dist/api/controllers/webhook.js +8 -10
- package/dist/api/routes/hosting.js +11 -0
- package/dist/api/routes/index.js +2 -2
- package/dist/api/routes/static.js +1 -2
- package/dist/api/routes/tests/utilities/TestFunctions.js +17 -37
- package/dist/app.js +5 -35
- package/dist/automations/automationUtils.js +3 -2
- package/dist/automations/steps/createRow.js +5 -3
- package/dist/automations/steps/deleteRow.js +4 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +25 -27
- package/dist/automations/utils.js +5 -10
- package/dist/constants/index.js +0 -7
- package/dist/db/linkedRows/LinkController.js +7 -3
- package/dist/db/linkedRows/index.js +27 -16
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +10 -9
- package/dist/definitions/datasource.js +0 -1
- package/dist/environment.js +1 -4
- package/dist/integrations/base/sql.js +14 -56
- package/dist/integrations/index.js +0 -3
- package/dist/integrations/utils.js +9 -60
- package/dist/middleware/authorized.js +30 -57
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +37 -41
- package/dist/middleware/usageQuota.js +15 -82
- package/dist/package.json +5 -8
- package/dist/tests/utilities/TestConfiguration.js +50 -80
- package/dist/threads/automation.js +11 -13
- package/dist/threads/query.js +11 -15
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +3 -4
- package/dist/utilities/global.js +12 -15
- package/dist/utilities/index.js +17 -7
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +17 -23
- package/dist/utilities/rowProcessor/utils.js +4 -14
- package/dist/utilities/{usageQuota/index.js → usageQuota.js} +31 -45
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +24 -4
- package/nodemon.json +1 -1
- package/package.json +6 -9
- package/scripts/integrations/postgres/init.sql +6 -11
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +50 -85
- package/src/api/controllers/auth.js +5 -8
- package/src/api/controllers/automation.js +23 -13
- package/src/api/controllers/cloud.js +3 -2
- package/src/api/controllers/component.js +4 -3
- package/src/api/controllers/datasource.js +11 -21
- package/src/api/controllers/deploy/Deployment.js +7 -3
- package/src/api/controllers/deploy/index.js +13 -20
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/hosting.js +22 -0
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +9 -4
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +6 -4
- package/src/api/controllers/query/import/tests/index.spec.js +1 -2
- package/src/api/controllers/query/index.js +10 -11
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +6 -5
- package/src/api/controllers/row/ExternalRequest.ts +43 -67
- package/src/api/controllers/row/external.js +58 -27
- package/src/api/controllers/row/internal.js +90 -54
- package/src/api/controllers/row/internalSearch.js +17 -23
- package/src/api/controllers/row/utils.js +18 -13
- package/src/api/controllers/screen.js +7 -5
- package/src/api/controllers/static/index.js +12 -65
- package/src/api/controllers/table/external.js +10 -7
- package/src/api/controllers/table/index.js +28 -20
- package/src/api/controllers/table/internal.js +19 -24
- package/src/api/controllers/table/utils.js +42 -78
- package/src/api/controllers/user.js +20 -19
- package/src/api/controllers/view/index.js +10 -8
- package/src/api/controllers/view/utils.js +4 -9
- package/src/api/controllers/webhook.js +8 -10
- package/src/api/routes/hosting.js +13 -0
- package/src/api/routes/index.js +2 -2
- package/src/api/routes/static.js +0 -5
- package/src/api/routes/tests/application.spec.js +2 -2
- package/src/api/routes/tests/auth.spec.js +2 -1
- package/src/api/routes/tests/automation.spec.js +0 -1
- package/src/api/routes/tests/hosting.spec.js +36 -0
- package/src/api/routes/tests/misc.spec.js +1 -0
- package/src/api/routes/tests/routing.spec.js +12 -21
- package/src/api/routes/tests/row.spec.js +4 -7
- package/src/api/routes/tests/utilities/TestFunctions.js +17 -39
- package/src/app.ts +5 -18
- package/src/automations/automationUtils.js +3 -2
- package/src/automations/steps/createRow.js +5 -2
- package/src/automations/steps/deleteRow.js +4 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +31 -33
- package/src/automations/utils.js +5 -9
- package/src/constants/index.js +0 -9
- package/src/db/linkedRows/LinkController.js +7 -3
- package/src/db/linkedRows/index.js +31 -16
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +1 -0
- package/src/db/tests/linkTests.spec.js +6 -5
- package/src/db/views/staticViews.js +10 -8
- package/src/definitions/common.ts +0 -3
- package/src/definitions/datasource.ts +0 -3
- package/src/environment.js +1 -4
- package/src/integrations/base/sql.ts +21 -69
- package/src/integrations/index.ts +0 -3
- package/src/integrations/tests/sql.spec.js +0 -16
- package/src/integrations/utils.ts +12 -75
- package/src/middleware/authorized.js +30 -66
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +46 -50
- package/src/middleware/tests/authorized.spec.js +6 -13
- package/src/middleware/tests/currentapp.spec.js +0 -6
- package/src/middleware/tests/usageQuota.spec.js +24 -18
- package/src/middleware/usageQuota.js +17 -93
- package/src/tests/utilities/TestConfiguration.js +55 -82
- package/src/threads/automation.js +15 -17
- package/src/threads/query.js +12 -17
- package/src/utilities/fileSystem/index.js +3 -4
- package/src/utilities/global.js +12 -15
- package/src/utilities/index.js +17 -7
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +27 -25
- package/src/utilities/rowProcessor/utils.js +7 -23
- package/src/utilities/usageQuota.js +73 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +27 -4
- package/tsconfig.json +1 -2
- package/builder/assets/index.83c0944f.css +0 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +0 -119
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +0 -548
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +0 -599
- package/coverage/lcov-report/utilities/usageQuota/index.html +0 -141
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +0 -305
- package/dist/api/controllers/migrations.js +0 -21
- package/dist/api/controllers/row/staticFormula.js +0 -147
- package/dist/api/controllers/table/bulkFormula.js +0 -159
- package/dist/api/routes/migrations.js +0 -9
- package/dist/integrations/googlesheets.js +0 -340
- package/dist/migrations/functions/appUrls.js +0 -46
- package/dist/migrations/functions/quotas1.js +0 -50
- package/dist/migrations/functions/usageQuotas/index.js +0 -20
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -29
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -62
- package/dist/utilities/usageQuota/rows.js +0 -78
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/src/api/controllers/migrations.js +0 -13
- package/src/api/controllers/row/staticFormula.js +0 -156
- package/src/api/controllers/table/bulkFormula.js +0 -173
- package/src/api/routes/migrations.js +0 -14
- package/src/api/routes/tests/static.spec.js +0 -98
- package/src/integrations/googlesheets.ts +0 -353
- package/src/migrations/functions/appUrls.ts +0 -34
- package/src/migrations/functions/quotas1.ts +0 -20
- package/src/migrations/functions/tests/appUrls.spec.js +0 -29
- package/src/migrations/functions/tests/quotas1.spec.js +0 -27
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +0 -25
- package/src/migrations/functions/usageQuotas/index.ts +0 -8
- package/src/migrations/functions/usageQuotas/syncApps.ts +0 -18
- package/src/migrations/functions/usageQuotas/syncRows.ts +0 -22
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -37
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -43
- package/src/migrations/functions/userEmailViewCasing.ts +0 -13
- package/src/migrations/index.ts +0 -56
- package/src/module.d.ts +0 -3
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
- package/src/utilities/usageQuota/index.js +0 -93
- package/src/utilities/usageQuota/rows.js +0 -75
- package/src/utilities/usageQuota/usageQuoteReset.js +0 -18
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
mockAuthWithNoCookie()
|
|
2
2
|
mockWorker()
|
|
3
3
|
|
|
4
|
-
jest.mock("@budibase/backend-core/db", () => ({
|
|
5
|
-
...jest.requireActual("@budibase/backend-core/db"),
|
|
6
|
-
dbExists: () => true,
|
|
7
|
-
}))
|
|
8
|
-
|
|
9
4
|
function mockWorker() {
|
|
10
5
|
jest.mock("../../utilities/workerRequests", () => ({
|
|
11
6
|
getGlobalSelf: () => {
|
|
@@ -55,7 +50,6 @@ function mockAuthWithCookie() {
|
|
|
55
50
|
return "app_test"
|
|
56
51
|
},
|
|
57
52
|
setCookie: jest.fn(),
|
|
58
|
-
clearCookie: jest.fn(),
|
|
59
53
|
getCookie: () => ({appId: "app_different", roleId: "PUBLIC"}),
|
|
60
54
|
}))
|
|
61
55
|
jest.mock("@budibase/backend-core/constants", () => ({
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
jest.mock("../../db")
|
|
2
2
|
jest.mock("../../utilities/usageQuota")
|
|
3
|
+
jest.mock("../../environment", () => ({
|
|
4
|
+
isTest: () => true,
|
|
5
|
+
isProd: () => false,
|
|
6
|
+
isDev: () => true,
|
|
7
|
+
_set: () => {},
|
|
8
|
+
}))
|
|
3
9
|
jest.mock("@budibase/backend-core/tenancy", () => ({
|
|
4
10
|
getTenantId: () => "testing123"
|
|
5
11
|
}))
|
|
@@ -23,10 +29,9 @@ class TestConfiguration {
|
|
|
23
29
|
},
|
|
24
30
|
req: {
|
|
25
31
|
method: "POST",
|
|
26
|
-
url: "/
|
|
32
|
+
url: "/rows"
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
|
-
usageQuota.useQuotas = () => true
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
executeMiddleware() {
|
|
@@ -108,6 +113,7 @@ describe("usageQuota middleware", () => {
|
|
|
108
113
|
|
|
109
114
|
it("calculates and persists the correct usage quota for the relevant action", async () => {
|
|
110
115
|
config.setUrl("/rows")
|
|
116
|
+
config.setProd(true)
|
|
111
117
|
|
|
112
118
|
await config.executeMiddleware()
|
|
113
119
|
|
|
@@ -115,20 +121,20 @@ describe("usageQuota middleware", () => {
|
|
|
115
121
|
expect(config.next).toHaveBeenCalled()
|
|
116
122
|
})
|
|
117
123
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
124
|
+
it("calculates the correct file size from a file upload call and adds it to quota", async () => {
|
|
125
|
+
config.setUrl("/upload")
|
|
126
|
+
config.setProd(true)
|
|
127
|
+
config.setFiles([
|
|
128
|
+
{
|
|
129
|
+
size: 100
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
size: 10000
|
|
133
|
+
},
|
|
134
|
+
])
|
|
135
|
+
await config.executeMiddleware()
|
|
136
|
+
|
|
137
|
+
expect(usageQuota.update).toHaveBeenCalledWith("storage", 10100)
|
|
138
|
+
expect(config.next).toHaveBeenCalled()
|
|
139
|
+
})
|
|
134
140
|
})
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
const CouchDB = require("../db")
|
|
1
2
|
const usageQuota = require("../utilities/usageQuota")
|
|
2
|
-
const
|
|
3
|
+
const env = require("../environment")
|
|
4
|
+
const { getTenantId } = require("@budibase/backend-core/tenancy")
|
|
3
5
|
const {
|
|
4
6
|
isExternalTable,
|
|
5
7
|
isRowId: isExternalRowId,
|
|
6
8
|
} = require("../integrations/utils")
|
|
7
|
-
|
|
9
|
+
|
|
10
|
+
// tenants without limits
|
|
11
|
+
const EXCLUDED_TENANTS = ["bb", "default", "bbtest", "bbstaging"]
|
|
8
12
|
|
|
9
13
|
// currently only counting new writes and deletes
|
|
10
14
|
const METHOD_MAP = {
|
|
@@ -14,13 +18,13 @@ const METHOD_MAP = {
|
|
|
14
18
|
|
|
15
19
|
const DOMAIN_MAP = {
|
|
16
20
|
rows: usageQuota.Properties.ROW,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
upload: usageQuota.Properties.UPLOAD,
|
|
22
|
+
views: usageQuota.Properties.VIEW,
|
|
23
|
+
users: usageQuota.Properties.USER,
|
|
20
24
|
applications: usageQuota.Properties.APPS,
|
|
21
25
|
// this will not be updated by endpoint calls
|
|
22
26
|
// instead it will be updated by triggerInfo
|
|
23
|
-
|
|
27
|
+
automationRuns: usageQuota.Properties.AUTOMATION,
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
function getProperty(url) {
|
|
@@ -32,7 +36,10 @@ function getProperty(url) {
|
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
module.exports = async (ctx, next) => {
|
|
35
|
-
|
|
39
|
+
const tenantId = getTenantId()
|
|
40
|
+
|
|
41
|
+
// if in development or a self hosted cloud usage quotas should not be executed
|
|
42
|
+
if (env.isDev() || env.SELF_HOSTED || EXCLUDED_TENANTS.includes(tenantId)) {
|
|
36
43
|
return next()
|
|
37
44
|
}
|
|
38
45
|
|
|
@@ -46,7 +53,7 @@ module.exports = async (ctx, next) => {
|
|
|
46
53
|
const usageId = ctx.request.body._id
|
|
47
54
|
try {
|
|
48
55
|
if (ctx.appId) {
|
|
49
|
-
const db =
|
|
56
|
+
const db = new CouchDB(ctx.appId)
|
|
50
57
|
await db.get(usageId)
|
|
51
58
|
}
|
|
52
59
|
return next()
|
|
@@ -73,92 +80,9 @@ module.exports = async (ctx, next) => {
|
|
|
73
80
|
usage = files.map(file => file.size).reduce((total, size) => total + size)
|
|
74
81
|
}
|
|
75
82
|
try {
|
|
76
|
-
await
|
|
83
|
+
await usageQuota.update(property, usage)
|
|
84
|
+
return next()
|
|
77
85
|
} catch (err) {
|
|
78
86
|
ctx.throw(400, err)
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
|
-
|
|
82
|
-
const performRequest = async (ctx, next, property, usage) => {
|
|
83
|
-
const usageContext = {
|
|
84
|
-
skipNext: false,
|
|
85
|
-
skipUsage: false,
|
|
86
|
-
[usageQuota.Properties.APPS]: {},
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (usage === -1) {
|
|
90
|
-
if (PRE_DELETE[property]) {
|
|
91
|
-
await PRE_DELETE[property](ctx, usageContext)
|
|
92
|
-
}
|
|
93
|
-
} else {
|
|
94
|
-
if (PRE_CREATE[property]) {
|
|
95
|
-
await PRE_CREATE[property](ctx, usageContext)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// run the request
|
|
100
|
-
if (!usageContext.skipNext) {
|
|
101
|
-
await usageQuota.update(property, usage, { dryRun: true })
|
|
102
|
-
await next()
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (usage === -1) {
|
|
106
|
-
if (POST_DELETE[property]) {
|
|
107
|
-
await POST_DELETE[property](ctx, usageContext)
|
|
108
|
-
}
|
|
109
|
-
} else {
|
|
110
|
-
if (POST_CREATE[property]) {
|
|
111
|
-
await POST_CREATE[property](ctx, usageContext)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// update the usage
|
|
116
|
-
if (!usageContext.skipUsage) {
|
|
117
|
-
await usageQuota.update(property, usage)
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const appPreDelete = async (ctx, usageContext) => {
|
|
122
|
-
if (ctx.query.unpublish) {
|
|
123
|
-
// don't run usage decrement for unpublish
|
|
124
|
-
usageContext.skipUsage = true
|
|
125
|
-
return
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// store the row count to delete
|
|
129
|
-
const rows = await getUniqueRows([ctx.appId])
|
|
130
|
-
if (rows.length) {
|
|
131
|
-
usageContext[usageQuota.Properties.APPS] = { rowCount: rows.length }
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const appPostDelete = async (ctx, usageContext) => {
|
|
136
|
-
// delete the app rows from usage
|
|
137
|
-
const rowCount = usageContext[usageQuota.Properties.APPS].rowCount
|
|
138
|
-
if (rowCount) {
|
|
139
|
-
await usageQuota.update(usageQuota.Properties.ROW, -rowCount)
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const appPostCreate = async ctx => {
|
|
144
|
-
// app import & template creation
|
|
145
|
-
if (ctx.request.body.useTemplate === "true") {
|
|
146
|
-
const rows = await getUniqueRows([ctx.response.body.appId])
|
|
147
|
-
const rowCount = rows ? rows.length : 0
|
|
148
|
-
await usageQuota.update(usageQuota.Properties.ROW, rowCount)
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const PRE_DELETE = {
|
|
153
|
-
[usageQuota.Properties.APPS]: appPreDelete,
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const POST_DELETE = {
|
|
157
|
-
[usageQuota.Properties.APPS]: appPostDelete,
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const PRE_CREATE = {}
|
|
161
|
-
|
|
162
|
-
const POST_CREATE = {
|
|
163
|
-
[usageQuota.Properties.APPS]: appPostCreate,
|
|
164
|
-
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
const core = require("@budibase/backend-core")
|
|
2
|
-
const CouchDB = require("../../db")
|
|
3
|
-
core.init(CouchDB)
|
|
4
1
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
5
2
|
const env = require("../../environment")
|
|
6
3
|
const {
|
|
@@ -20,15 +17,15 @@ const supertest = require("supertest")
|
|
|
20
17
|
const { cleanup } = require("../../utilities/fileSystem")
|
|
21
18
|
const { Cookies, Headers } = require("@budibase/backend-core/constants")
|
|
22
19
|
const { jwt } = require("@budibase/backend-core/auth")
|
|
20
|
+
const core = require("@budibase/backend-core")
|
|
23
21
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
24
22
|
const { createASession } = require("@budibase/backend-core/sessions")
|
|
25
23
|
const { user: userCache } = require("@budibase/backend-core/cache")
|
|
26
|
-
const
|
|
27
|
-
|
|
24
|
+
const CouchDB = require("../../db")
|
|
25
|
+
core.init(CouchDB)
|
|
28
26
|
|
|
29
27
|
const GLOBAL_USER_ID = "us_uuid1"
|
|
30
28
|
const EMAIL = "babs@babs.com"
|
|
31
|
-
const CSRF_TOKEN = "e3727778-7af0-4226-b5eb-f43cbe60a306"
|
|
32
29
|
|
|
33
30
|
class TestConfiguration {
|
|
34
31
|
constructor(openServer = true) {
|
|
@@ -51,10 +48,6 @@ class TestConfiguration {
|
|
|
51
48
|
return this.appId
|
|
52
49
|
}
|
|
53
50
|
|
|
54
|
-
getCouch() {
|
|
55
|
-
return CouchDB
|
|
56
|
-
}
|
|
57
|
-
|
|
58
51
|
async _req(config, params, controlFunc) {
|
|
59
52
|
const request = {}
|
|
60
53
|
// fake cookies, we don't need them
|
|
@@ -66,21 +59,11 @@ class TestConfiguration {
|
|
|
66
59
|
request.request = {
|
|
67
60
|
body: config,
|
|
68
61
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
request.params = params
|
|
72
|
-
}
|
|
73
|
-
await controlFunc(request)
|
|
74
|
-
return request.body
|
|
75
|
-
}
|
|
76
|
-
// check if already in a context
|
|
77
|
-
if (context.getAppId() == null) {
|
|
78
|
-
return context.doInAppContext(this.appId, async () => {
|
|
79
|
-
return run()
|
|
80
|
-
})
|
|
81
|
-
} else {
|
|
82
|
-
return run()
|
|
62
|
+
if (params) {
|
|
63
|
+
request.params = params
|
|
83
64
|
}
|
|
65
|
+
await controlFunc(request)
|
|
66
|
+
return request.body
|
|
84
67
|
}
|
|
85
68
|
|
|
86
69
|
async globalUser({
|
|
@@ -102,11 +85,7 @@ class TestConfiguration {
|
|
|
102
85
|
roles: roles || {},
|
|
103
86
|
tenantId: TENANT_ID,
|
|
104
87
|
}
|
|
105
|
-
await createASession(id, {
|
|
106
|
-
sessionId: "sessionid",
|
|
107
|
-
tenantId: TENANT_ID,
|
|
108
|
-
csrfToken: CSRF_TOKEN,
|
|
109
|
-
})
|
|
88
|
+
await createASession(id, { sessionId: "sessionid", tenantId: TENANT_ID })
|
|
110
89
|
if (builder) {
|
|
111
90
|
user.builder = { global: true }
|
|
112
91
|
} else {
|
|
@@ -119,8 +98,7 @@ class TestConfiguration {
|
|
|
119
98
|
}
|
|
120
99
|
}
|
|
121
100
|
|
|
122
|
-
|
|
123
|
-
async init(appName = newid()) {
|
|
101
|
+
async init(appName = "test_application") {
|
|
124
102
|
await this.globalUser()
|
|
125
103
|
return this.createApp(appName)
|
|
126
104
|
}
|
|
@@ -153,7 +131,6 @@ class TestConfiguration {
|
|
|
153
131
|
`${Cookies.Auth}=${authToken}`,
|
|
154
132
|
`${Cookies.CurrentApp}=${appToken}`,
|
|
155
133
|
],
|
|
156
|
-
[Headers.CSRF_TOKEN]: CSRF_TOKEN,
|
|
157
134
|
}
|
|
158
135
|
if (this.appId) {
|
|
159
136
|
headers[Headers.APP_ID] = this.appId
|
|
@@ -186,7 +163,6 @@ class TestConfiguration {
|
|
|
186
163
|
// create dev app
|
|
187
164
|
this.app = await this._req({ name: appName }, null, controllers.app.create)
|
|
188
165
|
this.appId = this.app.appId
|
|
189
|
-
context.updateAppId(this.appId)
|
|
190
166
|
|
|
191
167
|
// create production app
|
|
192
168
|
this.prodApp = await this.deploy()
|
|
@@ -199,16 +175,14 @@ class TestConfiguration {
|
|
|
199
175
|
}
|
|
200
176
|
|
|
201
177
|
async deploy() {
|
|
202
|
-
await this._req(null, null, controllers.deploy.deployApp)
|
|
203
|
-
const prodAppId =
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
return appPackage.application
|
|
211
|
-
})
|
|
178
|
+
const deployment = await this._req(null, null, controllers.deploy.deployApp)
|
|
179
|
+
const prodAppId = deployment.appId.replace("_dev", "")
|
|
180
|
+
const appPackage = await this._req(
|
|
181
|
+
null,
|
|
182
|
+
{ appId: prodAppId },
|
|
183
|
+
controllers.app.fetchAppPackage
|
|
184
|
+
)
|
|
185
|
+
return appPackage.application
|
|
212
186
|
}
|
|
213
187
|
|
|
214
188
|
async updateTable(config = null) {
|
|
@@ -437,47 +411,46 @@ class TestConfiguration {
|
|
|
437
411
|
|
|
438
412
|
async login({ roleId, userId, builder, prodApp = false } = {}) {
|
|
439
413
|
const appId = prodApp ? this.prodAppId : this.appId
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
id: userId,
|
|
449
|
-
builder,
|
|
450
|
-
roles: { [this.prodAppId]: roleId },
|
|
451
|
-
})
|
|
452
|
-
}
|
|
453
|
-
await createASession(userId, {
|
|
454
|
-
sessionId: "sessionid",
|
|
455
|
-
tenantId: TENANT_ID,
|
|
456
|
-
})
|
|
457
|
-
// have to fake this
|
|
458
|
-
const auth = {
|
|
414
|
+
|
|
415
|
+
userId = !userId ? `us_uuid1` : userId
|
|
416
|
+
if (!this.request) {
|
|
417
|
+
throw "Server has not been opened, cannot login."
|
|
418
|
+
}
|
|
419
|
+
// make sure the user exists in the global DB
|
|
420
|
+
if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
|
|
421
|
+
await this.globalUser({
|
|
459
422
|
userId,
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
const authToken = jwt.sign(auth, env.JWT_SECRET)
|
|
468
|
-
const appToken = jwt.sign(app, env.JWT_SECRET)
|
|
469
|
-
|
|
470
|
-
// returning necessary request headers
|
|
471
|
-
await userCache.invalidateUser(userId)
|
|
472
|
-
return {
|
|
473
|
-
Accept: "application/json",
|
|
474
|
-
Cookie: [
|
|
475
|
-
`${Cookies.Auth}=${authToken}`,
|
|
476
|
-
`${Cookies.CurrentApp}=${appToken}`,
|
|
477
|
-
],
|
|
478
|
-
[Headers.APP_ID]: appId,
|
|
479
|
-
}
|
|
423
|
+
builder,
|
|
424
|
+
roles: { [this.prodAppId]: roleId },
|
|
425
|
+
})
|
|
426
|
+
}
|
|
427
|
+
await createASession(userId, {
|
|
428
|
+
sessionId: "sessionid",
|
|
429
|
+
tenantId: TENANT_ID,
|
|
480
430
|
})
|
|
431
|
+
// have to fake this
|
|
432
|
+
const auth = {
|
|
433
|
+
userId,
|
|
434
|
+
sessionId: "sessionid",
|
|
435
|
+
tenantId: TENANT_ID,
|
|
436
|
+
}
|
|
437
|
+
const app = {
|
|
438
|
+
roleId: roleId,
|
|
439
|
+
appId,
|
|
440
|
+
}
|
|
441
|
+
const authToken = jwt.sign(auth, env.JWT_SECRET)
|
|
442
|
+
const appToken = jwt.sign(app, env.JWT_SECRET)
|
|
443
|
+
|
|
444
|
+
// returning necessary request headers
|
|
445
|
+
await userCache.invalidateUser(userId)
|
|
446
|
+
return {
|
|
447
|
+
Accept: "application/json",
|
|
448
|
+
Cookie: [
|
|
449
|
+
`${Cookies.Auth}=${authToken}`,
|
|
450
|
+
`${Cookies.CurrentApp}=${appToken}`,
|
|
451
|
+
],
|
|
452
|
+
[Headers.APP_ID]: appId,
|
|
453
|
+
}
|
|
481
454
|
}
|
|
482
455
|
}
|
|
483
456
|
|
|
@@ -5,11 +5,11 @@ const automationUtils = require("../automations/automationUtils")
|
|
|
5
5
|
const AutomationEmitter = require("../events/AutomationEmitter")
|
|
6
6
|
const { processObject } = require("@budibase/string-templates")
|
|
7
7
|
const { DEFAULT_TENANT_ID } = require("@budibase/backend-core/constants")
|
|
8
|
+
const CouchDB = require("../db")
|
|
8
9
|
const { DocumentTypes, isDevAppID } = require("../db/utils")
|
|
9
10
|
const { doInTenant } = require("@budibase/backend-core/tenancy")
|
|
10
11
|
const usage = require("../utilities/usageQuota")
|
|
11
12
|
const { definitions: triggerDefs } = require("../automations/triggerInfo")
|
|
12
|
-
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
13
13
|
|
|
14
14
|
const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
|
|
15
15
|
const CRON_STEP_ID = triggerDefs.CRON.stepId
|
|
@@ -59,10 +59,11 @@ class Orchestrator {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
async getApp() {
|
|
62
|
+
const appId = this._appId
|
|
62
63
|
if (this._app) {
|
|
63
64
|
return this._app
|
|
64
65
|
}
|
|
65
|
-
const db =
|
|
66
|
+
const db = new CouchDB(appId)
|
|
66
67
|
this._app = await db.get(DocumentTypes.APP_METADATA)
|
|
67
68
|
return this._app
|
|
68
69
|
}
|
|
@@ -130,19 +131,16 @@ class Orchestrator {
|
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
module.exports = (input, callback) => {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
callback(err)
|
|
146
|
-
})
|
|
147
|
-
})
|
|
134
|
+
const automationOrchestrator = new Orchestrator(
|
|
135
|
+
input.data.automation,
|
|
136
|
+
input.data.event
|
|
137
|
+
)
|
|
138
|
+
automationOrchestrator
|
|
139
|
+
.execute()
|
|
140
|
+
.then(response => {
|
|
141
|
+
callback(null, response)
|
|
142
|
+
})
|
|
143
|
+
.catch(err => {
|
|
144
|
+
callback(err)
|
|
145
|
+
})
|
|
148
146
|
}
|
package/src/threads/query.js
CHANGED
|
@@ -3,10 +3,11 @@ threadUtils.threadSetup()
|
|
|
3
3
|
const ScriptRunner = require("../utilities/scriptRunner")
|
|
4
4
|
const { integrations } = require("../integrations")
|
|
5
5
|
const { processStringSync } = require("@budibase/string-templates")
|
|
6
|
-
const
|
|
6
|
+
const CouchDB = require("../db")
|
|
7
7
|
|
|
8
8
|
class QueryRunner {
|
|
9
9
|
constructor(input, flags = { noRecursiveQuery: false }) {
|
|
10
|
+
this.appId = input.appId
|
|
10
11
|
this.datasource = input.datasource
|
|
11
12
|
this.queryVerb = input.queryVerb
|
|
12
13
|
this.fields = input.fields
|
|
@@ -74,11 +75,6 @@ class QueryRunner {
|
|
|
74
75
|
return this.execute()
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
// check for undefined response
|
|
78
|
-
if (!rows) {
|
|
79
|
-
rows = []
|
|
80
|
-
}
|
|
81
|
-
|
|
82
78
|
// needs to an array for next step
|
|
83
79
|
if (!Array.isArray(rows)) {
|
|
84
80
|
rows = [rows]
|
|
@@ -100,11 +96,12 @@ class QueryRunner {
|
|
|
100
96
|
}
|
|
101
97
|
|
|
102
98
|
async runAnotherQuery(queryId, parameters) {
|
|
103
|
-
const db =
|
|
99
|
+
const db = new CouchDB(this.appId)
|
|
104
100
|
const query = await db.get(queryId)
|
|
105
101
|
const datasource = await db.get(query.datasourceId)
|
|
106
102
|
return new QueryRunner(
|
|
107
103
|
{
|
|
104
|
+
appId: this.appId,
|
|
108
105
|
datasource,
|
|
109
106
|
queryVerb: query.queryVerb,
|
|
110
107
|
fields: query.fields,
|
|
@@ -214,14 +211,12 @@ class QueryRunner {
|
|
|
214
211
|
}
|
|
215
212
|
|
|
216
213
|
module.exports = (input, callback) => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
})
|
|
226
|
-
})
|
|
214
|
+
const Runner = new QueryRunner(input)
|
|
215
|
+
Runner.execute()
|
|
216
|
+
.then(response => {
|
|
217
|
+
callback(null, response)
|
|
218
|
+
})
|
|
219
|
+
.catch(err => {
|
|
220
|
+
callback(err)
|
|
221
|
+
})
|
|
227
222
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const { budibaseTempDir } = require("../budibaseDir")
|
|
2
|
+
const { isDev } = require("../index")
|
|
2
3
|
const fs = require("fs")
|
|
3
4
|
const { join } = require("path")
|
|
4
5
|
const uuid = require("uuid/v4")
|
|
@@ -19,7 +20,6 @@ const {
|
|
|
19
20
|
LINK_USER_METADATA_PREFIX,
|
|
20
21
|
} = require("../../db/utils")
|
|
21
22
|
const MemoryStream = require("memorystream")
|
|
22
|
-
const { getAppId } = require("@budibase/backend-core/context")
|
|
23
23
|
|
|
24
24
|
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
|
|
25
25
|
const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules")
|
|
@@ -51,7 +51,7 @@ exports.init = () => {
|
|
|
51
51
|
* everything required to function is ready.
|
|
52
52
|
*/
|
|
53
53
|
exports.checkDevelopmentEnvironment = () => {
|
|
54
|
-
if (!
|
|
54
|
+
if (!isDev()) {
|
|
55
55
|
return
|
|
56
56
|
}
|
|
57
57
|
if (!fs.existsSync(budibaseTempDir())) {
|
|
@@ -251,8 +251,7 @@ exports.downloadTemplate = async (type, name) => {
|
|
|
251
251
|
/**
|
|
252
252
|
* Retrieves component libraries from object store (or tmp symlink if in local)
|
|
253
253
|
*/
|
|
254
|
-
exports.getComponentLibraryManifest = async library => {
|
|
255
|
-
const appId = getAppId()
|
|
254
|
+
exports.getComponentLibraryManifest = async (appId, library) => {
|
|
256
255
|
const filename = "manifest.json"
|
|
257
256
|
/* istanbul ignore next */
|
|
258
257
|
// when testing in cypress and so on we need to get the package
|
package/src/utilities/global.js
CHANGED
|
@@ -3,7 +3,7 @@ const {
|
|
|
3
3
|
getGlobalIDFromUserMetadataID,
|
|
4
4
|
} = require("../db/utils")
|
|
5
5
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
6
|
-
const {
|
|
6
|
+
const { getDeployedAppID } = require("@budibase/backend-core/db")
|
|
7
7
|
const { getGlobalUserParams } = require("@budibase/backend-core/db")
|
|
8
8
|
const { user: userCache } = require("@budibase/backend-core/cache")
|
|
9
9
|
const {
|
|
@@ -11,10 +11,8 @@ const {
|
|
|
11
11
|
isUserInAppTenant,
|
|
12
12
|
} = require("@budibase/backend-core/tenancy")
|
|
13
13
|
const env = require("../environment")
|
|
14
|
-
const { getAppId } = require("@budibase/backend-core/context")
|
|
15
14
|
|
|
16
|
-
exports.updateAppRole = (
|
|
17
|
-
appId = appId || getAppId()
|
|
15
|
+
exports.updateAppRole = (appId, user) => {
|
|
18
16
|
if (!user || !user.roles) {
|
|
19
17
|
return user
|
|
20
18
|
}
|
|
@@ -26,7 +24,7 @@ exports.updateAppRole = (user, { appId } = {}) => {
|
|
|
26
24
|
return user
|
|
27
25
|
}
|
|
28
26
|
// always use the deployed app
|
|
29
|
-
user.roleId = user.roles[
|
|
27
|
+
user.roleId = user.roles[getDeployedAppID(appId)]
|
|
30
28
|
// if a role wasn't found then either set as admin (builder) or public (everyone else)
|
|
31
29
|
if (!user.roleId && user.builder && user.builder.global) {
|
|
32
30
|
user.roleId = BUILTIN_ROLE_IDS.ADMIN
|
|
@@ -37,18 +35,18 @@ exports.updateAppRole = (user, { appId } = {}) => {
|
|
|
37
35
|
return user
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
function processUser(
|
|
38
|
+
function processUser(appId, user) {
|
|
41
39
|
if (user) {
|
|
42
40
|
delete user.password
|
|
43
41
|
}
|
|
44
|
-
return exports.updateAppRole(
|
|
42
|
+
return exports.updateAppRole(appId, user)
|
|
45
43
|
}
|
|
46
44
|
|
|
47
45
|
exports.getCachedSelf = async (ctx, appId) => {
|
|
48
46
|
// this has to be tenant aware, can't depend on the context to find it out
|
|
49
47
|
// running some middlewares before the tenancy causes context to break
|
|
50
48
|
const user = await userCache.getUser(ctx.user._id)
|
|
51
|
-
return processUser(
|
|
49
|
+
return processUser(appId, user)
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
exports.getRawGlobalUser = async userId => {
|
|
@@ -56,13 +54,12 @@ exports.getRawGlobalUser = async userId => {
|
|
|
56
54
|
return db.get(getGlobalIDFromUserMetadataID(userId))
|
|
57
55
|
}
|
|
58
56
|
|
|
59
|
-
exports.getGlobalUser = async userId => {
|
|
57
|
+
exports.getGlobalUser = async (appId, userId) => {
|
|
60
58
|
let user = await exports.getRawGlobalUser(userId)
|
|
61
|
-
return processUser(user)
|
|
59
|
+
return processUser(appId, user)
|
|
62
60
|
}
|
|
63
61
|
|
|
64
|
-
exports.getGlobalUsers = async (users = null) => {
|
|
65
|
-
const appId = getAppId()
|
|
62
|
+
exports.getGlobalUsers = async (appId = null, users = null) => {
|
|
66
63
|
const db = getGlobalDB()
|
|
67
64
|
let globalUsers
|
|
68
65
|
if (users) {
|
|
@@ -89,11 +86,11 @@ exports.getGlobalUsers = async (users = null) => {
|
|
|
89
86
|
if (!appId) {
|
|
90
87
|
return globalUsers
|
|
91
88
|
}
|
|
92
|
-
return globalUsers.map(user => exports.updateAppRole(user))
|
|
89
|
+
return globalUsers.map(user => exports.updateAppRole(appId, user))
|
|
93
90
|
}
|
|
94
91
|
|
|
95
|
-
exports.getGlobalUsersFromMetadata = async users => {
|
|
96
|
-
const globalUsers = await exports.getGlobalUsers(users)
|
|
92
|
+
exports.getGlobalUsersFromMetadata = async (appId, users) => {
|
|
93
|
+
const globalUsers = await exports.getGlobalUsers(appId, users)
|
|
97
94
|
return users.map(user => {
|
|
98
95
|
const globalUser = globalUsers.find(
|
|
99
96
|
globalUser => globalUser && user._id.includes(globalUser._id)
|