@budibase/server 1.0.49 → 1.0.50-alpha.3
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.2c37968e.js → index.9fe798bd.js} +252 -249
- package/builder/assets/index.c0cc369d.css +6 -0
- package/builder/assets/{vendor.f9faf6ab.js → vendor.5ad9695a.js} +202 -106
- package/builder/index.html +3 -3
- package/coverage/clover.xml +3105 -2814
- 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 +78 -78
- 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 +218 -110
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +79 -76
- 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 +5 -5
- package/coverage/lcov-report/constants/index.js.html +53 -26
- 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 +135 -120
- 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 +39 -24
- 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 +5010 -4425
- 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 +90 -67
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +55 -93
- package/dist/api/controllers/row/internalSearch.js +23 -17
- package/dist/api/controllers/row/staticFormula.js +147 -0
- package/dist/api/controllers/row/utils.js +13 -14
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +62 -16
- 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 +62 -35
- package/dist/api/controllers/user.js +43 -43
- 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 +7 -0
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -27
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/definitions/datasource.js +1 -0
- package/dist/environment.js +4 -1
- package/dist/integrations/base/sql.js +62 -21
- package/dist/integrations/googlesheets.js +340 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/utils.js +60 -9
- 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 +15 -11
- 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/mssql/data/Dockerfile +1 -1
- package/scripts/integrations/mssql/data/setup.sql +17 -4
- 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 +67 -43
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +54 -90
- package/src/api/controllers/row/internalSearch.js +23 -17
- package/src/api/controllers/row/staticFormula.js +156 -0
- package/src/api/controllers/row/utils.js +13 -18
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +66 -15
- 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 +78 -42
- package/src/api/controllers/user.js +46 -45
- 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 +9 -0
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -31
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/definitions/common.ts +3 -0
- package/src/definitions/datasource.ts +3 -0
- package/src/environment.js +4 -1
- package/src/integrations/base/sql.ts +75 -29
- 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 -12
- 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 +17 -12
- 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 +4 -2
- 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,10 +1,15 @@
|
|
|
1
1
|
const setup = require("./utilities")
|
|
2
2
|
const { basicScreen } = setup.structures
|
|
3
|
-
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
|
3
|
+
const { checkBuilderEndpoint, runInProd } = require("./utilities/TestFunctions")
|
|
4
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
5
|
+
const { doInAppContext } = require("@budibase/backend-core/context")
|
|
5
6
|
|
|
6
7
|
const route = "/test"
|
|
7
8
|
|
|
9
|
+
// there are checks which are disabled in test env,
|
|
10
|
+
// these checks need to be enabled for this test
|
|
11
|
+
|
|
12
|
+
|
|
8
13
|
describe("/routing", () => {
|
|
9
14
|
let request = setup.getRequest()
|
|
10
15
|
let config = setup.getConfig()
|
|
@@ -26,20 +31,24 @@ describe("/routing", () => {
|
|
|
26
31
|
|
|
27
32
|
describe("fetch", () => {
|
|
28
33
|
it("prevents a public user from accessing development app", async () => {
|
|
29
|
-
await
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
await runInProd(() => {
|
|
35
|
+
return request
|
|
36
|
+
.get(`/api/routing/client`)
|
|
37
|
+
.set(config.publicHeaders({ prodApp: false }))
|
|
38
|
+
.expect(302)
|
|
39
|
+
})
|
|
33
40
|
})
|
|
34
41
|
|
|
35
42
|
it("prevents a non builder from accessing development app", async () => {
|
|
36
|
-
await
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
await runInProd(async () => {
|
|
44
|
+
return request
|
|
45
|
+
.get(`/api/routing/client`)
|
|
46
|
+
.set(await config.roleHeaders({
|
|
47
|
+
roleId: BUILTIN_ROLE_IDS.BASIC,
|
|
48
|
+
prodApp: false
|
|
49
|
+
}))
|
|
50
|
+
.expect(302)
|
|
51
|
+
})
|
|
43
52
|
})
|
|
44
53
|
it("returns the correct routing for basic user", async () => {
|
|
45
54
|
const res = await request
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const { outputProcessing } = require("../../../utilities/rowProcessor")
|
|
2
2
|
const setup = require("./utilities")
|
|
3
3
|
const { basicRow } = setup.structures
|
|
4
|
+
const { doInAppContext } = require("@budibase/backend-core/context")
|
|
4
5
|
|
|
5
6
|
// mock the fetch for the search system
|
|
6
7
|
jest.mock("node-fetch")
|
|
@@ -387,10 +388,12 @@ describe("/rows", () => {
|
|
|
387
388
|
})
|
|
388
389
|
// the environment needs configured for this
|
|
389
390
|
await setup.switchToSelfHosted(async () => {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
391
|
+
doInAppContext(config.getAppId(), async () => {
|
|
392
|
+
const enriched = await outputProcessing(table, [row])
|
|
393
|
+
expect(enriched[0].attachment[0].url).toBe(
|
|
394
|
+
`/prod-budi-app-assets/${config.getAppId()}/attachments/test/thing.csv`
|
|
395
|
+
)
|
|
396
|
+
})
|
|
394
397
|
})
|
|
395
398
|
})
|
|
396
399
|
})
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
jest.mock("node-fetch")
|
|
2
|
+
jest.mock("aws-sdk", () => ({
|
|
3
|
+
config: {
|
|
4
|
+
update: jest.fn(),
|
|
5
|
+
},
|
|
6
|
+
DynamoDB: {
|
|
7
|
+
DocumentClient: jest.fn(),
|
|
8
|
+
},
|
|
9
|
+
S3: jest.fn(() => ({
|
|
10
|
+
getSignedUrl: jest.fn(() => {
|
|
11
|
+
return "my-url"
|
|
12
|
+
}),
|
|
13
|
+
})),
|
|
14
|
+
}))
|
|
15
|
+
|
|
16
|
+
const setup = require("./utilities")
|
|
17
|
+
|
|
18
|
+
describe("/attachments", () => {
|
|
19
|
+
let request = setup.getRequest()
|
|
20
|
+
let config = setup.getConfig()
|
|
21
|
+
let app
|
|
22
|
+
|
|
23
|
+
afterAll(setup.afterAll)
|
|
24
|
+
|
|
25
|
+
beforeEach(async () => {
|
|
26
|
+
app = await config.init()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
describe("generateSignedUrls", () => {
|
|
30
|
+
let datasource
|
|
31
|
+
|
|
32
|
+
beforeEach(async () => {
|
|
33
|
+
datasource = await config.createDatasource({
|
|
34
|
+
datasource: {
|
|
35
|
+
type: "datasource",
|
|
36
|
+
name: "Test",
|
|
37
|
+
source: "S3",
|
|
38
|
+
config: {},
|
|
39
|
+
},
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it("should be able to generate a signed upload URL", async () => {
|
|
44
|
+
const bucket = "foo"
|
|
45
|
+
const key = "bar"
|
|
46
|
+
const res = await request
|
|
47
|
+
.post(`/api/attachments/${datasource._id}/url`)
|
|
48
|
+
.send({ bucket, key })
|
|
49
|
+
.set(config.defaultHeaders())
|
|
50
|
+
.expect("Content-Type", /json/)
|
|
51
|
+
.expect(200)
|
|
52
|
+
expect(res.body.signedUrl).toEqual("my-url")
|
|
53
|
+
expect(res.body.publicUrl).toEqual(
|
|
54
|
+
`https://${bucket}.s3.eu-west-1.amazonaws.com/${key}`
|
|
55
|
+
)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it("should handle an invalid datasource ID", async () => {
|
|
59
|
+
const res = await request
|
|
60
|
+
.post(`/api/attachments/foo/url`)
|
|
61
|
+
.send({
|
|
62
|
+
bucket: "foo",
|
|
63
|
+
key: "bar",
|
|
64
|
+
})
|
|
65
|
+
.set(config.defaultHeaders())
|
|
66
|
+
.expect("Content-Type", /json/)
|
|
67
|
+
.expect(400)
|
|
68
|
+
expect(res.body.message).toEqual(
|
|
69
|
+
"The specified datasource could not be found"
|
|
70
|
+
)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it("should require a bucket parameter", async () => {
|
|
74
|
+
const res = await request
|
|
75
|
+
.post(`/api/attachments/${datasource._id}/url`)
|
|
76
|
+
.send({
|
|
77
|
+
bucket: undefined,
|
|
78
|
+
key: "bar",
|
|
79
|
+
})
|
|
80
|
+
.set(config.defaultHeaders())
|
|
81
|
+
.expect("Content-Type", /json/)
|
|
82
|
+
.expect(400)
|
|
83
|
+
expect(res.body.message).toEqual("bucket and key values are required")
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
it("should require a key parameter", async () => {
|
|
87
|
+
const res = await request
|
|
88
|
+
.post(`/api/attachments/${datasource._id}/url`)
|
|
89
|
+
.send({
|
|
90
|
+
bucket: "foo",
|
|
91
|
+
})
|
|
92
|
+
.set(config.defaultHeaders())
|
|
93
|
+
.expect("Content-Type", /json/)
|
|
94
|
+
.expect(400)
|
|
95
|
+
expect(res.body.message).toEqual("bucket and key values are required")
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
})
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
const rowController = require("../../../controllers/row")
|
|
2
2
|
const appController = require("../../../controllers/application")
|
|
3
|
-
const CouchDB = require("../../../../db")
|
|
4
3
|
const { AppStatus } = require("../../../../db/utils")
|
|
5
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
6
5
|
const { TENANT_ID } = require("../../../../tests/utilities/structures")
|
|
6
|
+
const { getAppDB, doInAppContext } = require("@budibase/backend-core/context")
|
|
7
|
+
const env = require("../../../../environment")
|
|
7
8
|
|
|
8
9
|
function Request(appId, params) {
|
|
9
10
|
this.appId = appId
|
|
@@ -11,9 +12,15 @@ function Request(appId, params) {
|
|
|
11
12
|
this.request = {}
|
|
12
13
|
}
|
|
13
14
|
|
|
15
|
+
function runRequest(appId, controlFunc, request) {
|
|
16
|
+
return doInAppContext(appId, async () => {
|
|
17
|
+
return controlFunc(request)
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
|
14
21
|
exports.getAllTableRows = async config => {
|
|
15
22
|
const req = new Request(config.appId, { tableId: config.table._id })
|
|
16
|
-
await rowController.fetch
|
|
23
|
+
await runRequest(config.appId, rowController.fetch, req)
|
|
17
24
|
return req.body
|
|
18
25
|
}
|
|
19
26
|
|
|
@@ -26,14 +33,17 @@ exports.clearAllApps = async (tenantId = TENANT_ID) => {
|
|
|
26
33
|
}
|
|
27
34
|
for (let app of apps) {
|
|
28
35
|
const { appId } = app
|
|
29
|
-
|
|
36
|
+
const req = new Request(null, { appId })
|
|
37
|
+
await runRequest(appId, appController.delete, req)
|
|
30
38
|
}
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
exports.clearAllAutomations = async config => {
|
|
34
42
|
const automations = await config.getAllAutomations()
|
|
35
43
|
for (let auto of automations) {
|
|
36
|
-
await config.
|
|
44
|
+
await doInAppContext(config.appId, async () => {
|
|
45
|
+
await config.deleteAutomation(auto)
|
|
46
|
+
})
|
|
37
47
|
}
|
|
38
48
|
}
|
|
39
49
|
|
|
@@ -96,20 +106,32 @@ exports.checkPermissionsEndpoint = async ({
|
|
|
96
106
|
.expect(403)
|
|
97
107
|
}
|
|
98
108
|
|
|
99
|
-
exports.getDB =
|
|
100
|
-
return
|
|
109
|
+
exports.getDB = () => {
|
|
110
|
+
return getAppDB()
|
|
101
111
|
}
|
|
102
112
|
|
|
103
113
|
exports.testAutomation = async (config, automation) => {
|
|
104
|
-
return
|
|
105
|
-
.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
return runRequest(automation.appId, async () => {
|
|
115
|
+
return await config.request
|
|
116
|
+
.post(`/api/automations/${automation._id}/test`)
|
|
117
|
+
.send({
|
|
118
|
+
row: {
|
|
119
|
+
name: "Test",
|
|
120
|
+
description: "TEST",
|
|
121
|
+
},
|
|
122
|
+
})
|
|
123
|
+
.set(config.defaultHeaders())
|
|
124
|
+
.expect("Content-Type", /json/)
|
|
125
|
+
.expect(200)
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
exports.runInProd = async func => {
|
|
130
|
+
const nodeEnv = env.NODE_ENV
|
|
131
|
+
const workerId = env.JEST_WORKER_ID
|
|
132
|
+
env._set("NODE_ENV", "PRODUCTION")
|
|
133
|
+
env._set("JEST_WORKER_ID", null)
|
|
134
|
+
await func()
|
|
135
|
+
env._set("NODE_ENV", nodeEnv)
|
|
136
|
+
env._set("JEST_WORKER_ID", workerId)
|
|
115
137
|
}
|
package/src/app.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// need to load environment first
|
|
2
2
|
import { ExtendableContext } from "koa"
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
import * as env from "./environment"
|
|
5
5
|
const CouchDB = require("./db")
|
|
6
6
|
require("@budibase/backend-core").init(CouchDB)
|
|
7
7
|
const Koa = require("koa")
|
|
@@ -16,6 +16,7 @@ const Sentry = require("@sentry/node")
|
|
|
16
16
|
const fileSystem = require("./utilities/fileSystem")
|
|
17
17
|
const bullboard = require("./automations/bullboard")
|
|
18
18
|
const redis = require("./utilities/redis")
|
|
19
|
+
import * as migrations from "./migrations"
|
|
19
20
|
|
|
20
21
|
const app = new Koa()
|
|
21
22
|
|
|
@@ -84,13 +85,25 @@ module.exports = server.listen(env.PORT || 0, async () => {
|
|
|
84
85
|
await automations.init()
|
|
85
86
|
})
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
console.error(err)
|
|
88
|
+
const shutdown = () => {
|
|
89
89
|
server.close()
|
|
90
90
|
server.destroy()
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
process.on("uncaughtException", err => {
|
|
94
|
+
console.error(err)
|
|
95
|
+
shutdown()
|
|
91
96
|
})
|
|
92
97
|
|
|
93
98
|
process.on("SIGTERM", () => {
|
|
94
|
-
|
|
95
|
-
server.destroy()
|
|
99
|
+
shutdown()
|
|
96
100
|
})
|
|
101
|
+
|
|
102
|
+
// run migrations on startup if not done via http
|
|
103
|
+
// not recommended in a clustered environment
|
|
104
|
+
if (!env.HTTP_MIGRATIONS) {
|
|
105
|
+
migrations.migrate().catch(err => {
|
|
106
|
+
console.error("Error performing migrations. Exiting.\n", err)
|
|
107
|
+
shutdown()
|
|
108
|
+
})
|
|
109
|
+
}
|
|
@@ -53,13 +53,12 @@ exports.cleanInputValues = (inputs, schema) => {
|
|
|
53
53
|
* the automation but is instead part of the Table/Table. This function will get the table schema and use it to instead
|
|
54
54
|
* perform the cleanInputValues function on the input row.
|
|
55
55
|
*
|
|
56
|
-
* @param {string} appId The instance which the Table/Table is contained under.
|
|
57
56
|
* @param {string} tableId The ID of the Table/Table which the schema is to be retrieved for.
|
|
58
57
|
* @param {object} row The input row structure which requires clean-up after having been through template statements.
|
|
59
58
|
* @returns {Promise<Object>} The cleaned up rows object, will should now have all the required primitive types.
|
|
60
59
|
*/
|
|
61
|
-
exports.cleanUpRow = async (
|
|
62
|
-
let table = await getTable(
|
|
60
|
+
exports.cleanUpRow = async (tableId, row) => {
|
|
61
|
+
let table = await getTable(tableId)
|
|
63
62
|
return exports.cleanInputValues(row, { properties: table.schema })
|
|
64
63
|
}
|
|
65
64
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const rowController = require("../../api/controllers/row")
|
|
2
2
|
const automationUtils = require("../automationUtils")
|
|
3
|
-
const env = require("../../environment")
|
|
4
3
|
const usage = require("../../utilities/usageQuota")
|
|
5
4
|
const { buildCtx } = require("./utils")
|
|
6
5
|
|
|
@@ -79,14 +78,12 @@ exports.run = async function ({ inputs, appId, emitter }) {
|
|
|
79
78
|
|
|
80
79
|
try {
|
|
81
80
|
inputs.row = await automationUtils.cleanUpRow(
|
|
82
|
-
appId,
|
|
83
81
|
inputs.row.tableId,
|
|
84
82
|
inputs.row
|
|
85
83
|
)
|
|
86
|
-
|
|
87
|
-
await usage.update(usage.Properties.ROW, 1)
|
|
88
|
-
}
|
|
84
|
+
await usage.update(usage.Properties.ROW, 1, { dryRun: true })
|
|
89
85
|
await rowController.save(ctx)
|
|
86
|
+
await usage.update(usage.Properties.ROW, 1)
|
|
90
87
|
return {
|
|
91
88
|
row: inputs.row,
|
|
92
89
|
response: ctx.body,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const rowController = require("../../api/controllers/row")
|
|
2
|
-
const env = require("../../environment")
|
|
3
2
|
const usage = require("../../utilities/usageQuota")
|
|
4
3
|
const { buildCtx } = require("./utils")
|
|
5
4
|
const automationUtils = require("../automationUtils")
|
|
@@ -74,9 +73,7 @@ exports.run = async function ({ inputs, appId, emitter }) {
|
|
|
74
73
|
})
|
|
75
74
|
|
|
76
75
|
try {
|
|
77
|
-
|
|
78
|
-
await usage.update(usage.Properties.ROW, -1)
|
|
79
|
-
}
|
|
76
|
+
await usage.update(usage.Properties.ROW, -1)
|
|
80
77
|
await rowController.destroy(ctx)
|
|
81
78
|
return {
|
|
82
79
|
response: ctx.body,
|
|
@@ -87,7 +87,7 @@ exports.run = async function ({ inputs, appId, emitter }) {
|
|
|
87
87
|
|
|
88
88
|
try {
|
|
89
89
|
if (tableId) {
|
|
90
|
-
inputs.row = await automationUtils.cleanUpRow(
|
|
90
|
+
inputs.row = await automationUtils.cleanUpRow(tableId, inputs.row)
|
|
91
91
|
}
|
|
92
92
|
await rowController.patch(ctx)
|
|
93
93
|
return {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const CouchDB = require("../db")
|
|
2
1
|
const emitter = require("../events/index")
|
|
3
2
|
const { getAutomationParams } = require("../db/utils")
|
|
4
3
|
const { coerce } = require("../utilities/rowProcessor")
|
|
@@ -9,6 +8,7 @@ const { queue } = require("./bullboard")
|
|
|
9
8
|
const { checkTestFlag } = require("../utilities/redis")
|
|
10
9
|
const utils = require("./utils")
|
|
11
10
|
const env = require("../environment")
|
|
11
|
+
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
12
12
|
|
|
13
13
|
const TRIGGER_DEFINITIONS = definitions
|
|
14
14
|
const JOB_OPTS = {
|
|
@@ -21,39 +21,41 @@ async function queueRelevantRowAutomations(event, eventType) {
|
|
|
21
21
|
throw `No appId specified for ${eventType} - check event emitters.`
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
doInAppContext(event.appId, async () => {
|
|
25
|
+
const db = getAppDB()
|
|
26
|
+
let automations = await db.allDocs(
|
|
27
|
+
getAutomationParams(null, { include_docs: true })
|
|
28
|
+
)
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
// filter down to the correct event type
|
|
31
|
+
automations = automations.rows
|
|
32
|
+
.map(automation => automation.doc)
|
|
33
|
+
.filter(automation => {
|
|
34
|
+
const trigger = automation.definition.trigger
|
|
35
|
+
return trigger && trigger.event === eventType
|
|
36
|
+
})
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
for (let automation of automations) {
|
|
39
|
+
let automationDef = automation.definition
|
|
40
|
+
let automationTrigger = automationDef ? automationDef.trigger : {}
|
|
41
|
+
// don't queue events which are for dev apps, only way to test automations is
|
|
42
|
+
// running tests on them, in production the test flag will never
|
|
43
|
+
// be checked due to lazy evaluation (first always false)
|
|
44
|
+
if (
|
|
45
|
+
!env.ALLOW_DEV_AUTOMATIONS &&
|
|
46
|
+
isDevAppID(event.appId) &&
|
|
47
|
+
!(await checkTestFlag(automation._id))
|
|
48
|
+
) {
|
|
49
|
+
continue
|
|
50
|
+
}
|
|
51
|
+
if (
|
|
52
|
+
automationTrigger.inputs &&
|
|
53
|
+
automationTrigger.inputs.tableId === event.row.tableId
|
|
54
|
+
) {
|
|
55
|
+
await queue.add({ automation, event }, JOB_OPTS)
|
|
56
|
+
}
|
|
49
57
|
}
|
|
50
|
-
|
|
51
|
-
automationTrigger.inputs &&
|
|
52
|
-
automationTrigger.inputs.tableId === event.row.tableId
|
|
53
|
-
) {
|
|
54
|
-
await queue.add({ automation, event }, JOB_OPTS)
|
|
55
|
-
}
|
|
56
|
-
}
|
|
58
|
+
})
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
emitter.on("row:save", async function (event) {
|
package/src/automations/utils.js
CHANGED
|
@@ -6,8 +6,9 @@ const { queue } = require("./bullboard")
|
|
|
6
6
|
const newid = require("../db/newid")
|
|
7
7
|
const { updateEntityMetadata } = require("../utilities")
|
|
8
8
|
const { MetadataTypes } = require("../constants")
|
|
9
|
-
const {
|
|
9
|
+
const { getProdAppID } = require("@budibase/backend-core/db")
|
|
10
10
|
const { cloneDeep } = require("lodash/fp")
|
|
11
|
+
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
11
12
|
|
|
12
13
|
const WH_STEP_ID = definitions.WEBHOOK.stepId
|
|
13
14
|
const CRON_STEP_ID = definitions.CRON.stepId
|
|
@@ -27,7 +28,6 @@ exports.processEvent = async job => {
|
|
|
27
28
|
|
|
28
29
|
exports.updateTestHistory = async (appId, automation, history) => {
|
|
29
30
|
return updateEntityMetadata(
|
|
30
|
-
appId,
|
|
31
31
|
MetadataTypes.AUTOMATION_TEST_HISTORY,
|
|
32
32
|
automation._id,
|
|
33
33
|
metadata => {
|
|
@@ -93,6 +93,9 @@ exports.enableCronTrigger = async (appId, automation) => {
|
|
|
93
93
|
)
|
|
94
94
|
// Assign cron job ID from bull so we can remove it later if the cron trigger is removed
|
|
95
95
|
trigger.cronJobId = job.id
|
|
96
|
+
// can't use getAppDB here as this is likely to be called from dev app,
|
|
97
|
+
// but this call could be for dev app or prod app, need to just use what
|
|
98
|
+
// was passed in
|
|
96
99
|
const db = new CouchDB(appId)
|
|
97
100
|
const response = await db.put(automation)
|
|
98
101
|
automation._id = response.id
|
|
@@ -109,7 +112,8 @@ exports.enableCronTrigger = async (appId, automation) => {
|
|
|
109
112
|
* @returns {Promise<object|undefined>} After this is complete the new automation object may have been updated and should be
|
|
110
113
|
* written to DB (this does not write to DB as it would be wasteful to repeat).
|
|
111
114
|
*/
|
|
112
|
-
exports.checkForWebhooks = async ({
|
|
115
|
+
exports.checkForWebhooks = async ({ oldAuto, newAuto }) => {
|
|
116
|
+
const appId = getAppId()
|
|
113
117
|
const oldTrigger = oldAuto ? oldAuto.definition.trigger : null
|
|
114
118
|
const newTrigger = newAuto ? newAuto.definition.trigger : null
|
|
115
119
|
const triggerChanged =
|
|
@@ -128,7 +132,7 @@ exports.checkForWebhooks = async ({ appId, oldAuto, newAuto }) => {
|
|
|
128
132
|
oldTrigger.webhookId
|
|
129
133
|
) {
|
|
130
134
|
try {
|
|
131
|
-
let db =
|
|
135
|
+
let db = getAppDB()
|
|
132
136
|
// need to get the webhook to get the rev
|
|
133
137
|
const webhook = await db.get(oldTrigger.webhookId)
|
|
134
138
|
const ctx = {
|
|
@@ -166,7 +170,7 @@ exports.checkForWebhooks = async ({ appId, oldAuto, newAuto }) => {
|
|
|
166
170
|
// the app ID has to be development for this endpoint
|
|
167
171
|
// it can only be used when building the app
|
|
168
172
|
// but the trigger endpoint will always be used in production
|
|
169
|
-
const prodAppId =
|
|
173
|
+
const prodAppId = getProdAppID(appId)
|
|
170
174
|
newTrigger.inputs = {
|
|
171
175
|
schemaUrl: `api/webhooks/schema/${appId}/${id}`,
|
|
172
176
|
triggerUrl: `api/webhooks/trigger/${prodAppId}/${id}`,
|
package/src/constants/index.js
CHANGED
|
@@ -61,6 +61,11 @@ exports.RelationshipTypes = {
|
|
|
61
61
|
MANY_TO_MANY: "many-to-many",
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
exports.FormulaTypes = {
|
|
65
|
+
STATIC: "static",
|
|
66
|
+
DYNAMIC: "dynamic",
|
|
67
|
+
}
|
|
68
|
+
|
|
64
69
|
exports.AuthTypes = {
|
|
65
70
|
APP: "app",
|
|
66
71
|
BUILDER: "builder",
|
|
@@ -78,6 +83,10 @@ exports.DataSourceOperation = {
|
|
|
78
83
|
DELETE_TABLE: "DELETE_TABLE",
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
exports.DatasourceAuthTypes = {
|
|
87
|
+
GOOGLE: "google",
|
|
88
|
+
}
|
|
89
|
+
|
|
81
90
|
exports.SortDirection = {
|
|
82
91
|
ASCENDING: "ASCENDING",
|
|
83
92
|
DESCENDING: "DESCENDING",
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const CouchDB = require("../index")
|
|
2
1
|
const { IncludeDocs, getLinkDocuments } = require("./linkUtils")
|
|
3
2
|
const {
|
|
4
3
|
generateLinkID,
|
|
@@ -7,6 +6,7 @@ const {
|
|
|
7
6
|
} = require("../utils")
|
|
8
7
|
const Sentry = require("@sentry/node")
|
|
9
8
|
const { FieldTypes, RelationshipTypes } = require("../../constants")
|
|
9
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Creates a new link document structure which can be put to the database. It is important to
|
|
@@ -52,9 +52,8 @@ function LinkDocument(
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
class LinkController {
|
|
55
|
-
constructor({
|
|
56
|
-
this.
|
|
57
|
-
this._db = new CouchDB(appId)
|
|
55
|
+
constructor({ tableId, row, table, oldTable }) {
|
|
56
|
+
this._db = getAppDB()
|
|
58
57
|
this._tableId = tableId
|
|
59
58
|
this._row = row
|
|
60
59
|
this._table = table
|
|
@@ -99,7 +98,6 @@ class LinkController {
|
|
|
99
98
|
*/
|
|
100
99
|
getRowLinkDocs(rowId) {
|
|
101
100
|
return getLinkDocuments({
|
|
102
|
-
appId: this._appId,
|
|
103
101
|
tableId: this._tableId,
|
|
104
102
|
rowId,
|
|
105
103
|
includeDocs: IncludeDocs.INCLUDE,
|
|
@@ -111,7 +109,6 @@ class LinkController {
|
|
|
111
109
|
*/
|
|
112
110
|
getTableLinkDocs() {
|
|
113
111
|
return getLinkDocuments({
|
|
114
|
-
appId: this._appId,
|
|
115
112
|
tableId: this._tableId,
|
|
116
113
|
includeDocs: IncludeDocs.INCLUDE,
|
|
117
114
|
})
|
|
@@ -230,7 +227,6 @@ class LinkController {
|
|
|
230
227
|
if (linkedSchema.relationshipType === RelationshipTypes.ONE_TO_MANY) {
|
|
231
228
|
let links = (
|
|
232
229
|
await getLinkDocuments({
|
|
233
|
-
appId: this._appId,
|
|
234
230
|
tableId: field.tableId,
|
|
235
231
|
rowId: linkId,
|
|
236
232
|
includeDocs: IncludeDocs.EXCLUDE,
|