@budibase/server 1.0.49-alpha.0 → 1.0.49-alpha.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/arangojs.ts +1 -1
- package/__mocks__/aws-sdk.ts +4 -4
- package/__mocks__/mongodb.ts +4 -5
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +2 -1
- package/__mocks__/pg.ts +3 -5
- package/builder/assets/{index.8184eed9.js → index.0bdf1cad.js} +195 -194
- package/builder/assets/{index.dd9e386f.css → index.83c0944f.css} +1 -1
- package/builder/assets/{vendor.3bd2f661.js → vendor.d526bfe8.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +2927 -2819
- package/coverage/coverage-final.json +104 -103
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +157 -136
- package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
- package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
- package/coverage/lcov-report/api/controllers/component.js.html +10 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +69 -54
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
- package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
- package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
- package/coverage/lcov-report/api/controllers/role.js.html +16 -16
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
- package/coverage/lcov-report/api/controllers/row/index.html +52 -37
- package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
- package/coverage/lcov-report/api/controllers/row/internal.js.html +108 -216
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +52 -34
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +548 -0
- package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
- package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +599 -0
- package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
- package/coverage/lcov-report/api/controllers/table/index.html +57 -42
- package/coverage/lcov-report/api/controllers/table/index.js.html +28 -70
- package/coverage/lcov-report/api/controllers/table/internal.js.html +56 -47
- package/coverage/lcov-report/api/controllers/table/utils.js.html +169 -85
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +43 -52
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
- package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +3 -3
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +22 -7
- package/coverage/lcov-report/api/routes/index.js.html +10 -4
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +18 -18
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
- package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
- package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
- package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
- package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
- package/coverage/lcov-report/automations/triggers.js.html +61 -55
- package/coverage/lcov-report/automations/utils.js.html +54 -42
- package/coverage/lcov-report/constants/index.html +5 -5
- package/coverage/lcov-report/constants/index.js.html +42 -27
- package/coverage/lcov-report/constants/layouts.js.html +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +40 -85
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +75 -75
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +5 -5
- package/coverage/lcov-report/events/utils.js.html +3 -3
- package/coverage/lcov-report/index.html +107 -122
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +21 -15
- package/coverage/lcov-report/middleware/builder.js.html +3 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
- package/coverage/lcov-report/middleware/index.html +28 -28
- package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +29 -35
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +30 -24
- package/coverage/lcov-report/threads/index.html +25 -25
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +26 -47
- package/coverage/lcov-report/threads/utils.js.html +14 -14
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
- package/coverage/lcov-report/utilities/global.js.html +57 -48
- package/coverage/lcov-report/utilities/index.html +27 -27
- package/coverage/lcov-report/utilities/index.js.html +42 -72
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
- package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +65 -71
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
- package/coverage/lcov.info +4620 -4358
- package/dist/api/controllers/application.js +49 -48
- package/dist/api/controllers/auth.js +4 -5
- package/dist/api/controllers/automation.js +14 -19
- package/dist/api/controllers/cloud.js +2 -3
- package/dist/api/controllers/component.js +3 -4
- package/dist/api/controllers/datasource.js +9 -10
- package/dist/api/controllers/deploy/Deployment.js +3 -6
- package/dist/api/controllers/deploy/index.js +12 -13
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/migrations.js +21 -0
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +4 -6
- package/dist/api/controllers/query/index.js +11 -10
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +5 -6
- package/dist/api/controllers/row/ExternalRequest.js +90 -67
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +55 -93
- package/dist/api/controllers/row/internalSearch.js +23 -17
- package/dist/api/controllers/row/staticFormula.js +147 -0
- package/dist/api/controllers/row/utils.js +7 -6
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +4 -4
- package/dist/api/controllers/table/bulkFormula.js +159 -0
- package/dist/api/controllers/table/external.js +7 -10
- package/dist/api/controllers/table/index.js +7 -10
- package/dist/api/controllers/table/internal.js +20 -16
- package/dist/api/controllers/table/utils.js +54 -34
- package/dist/api/controllers/user.js +16 -20
- package/dist/api/controllers/view/index.js +8 -10
- package/dist/api/controllers/view/utils.js +9 -4
- package/dist/api/controllers/webhook.js +10 -8
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
- package/dist/app.js +35 -5
- package/dist/automations/automationUtils.js +2 -3
- package/dist/automations/steps/createRow.js +1 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +27 -25
- package/dist/automations/utils.js +10 -5
- package/dist/constants/index.js +4 -0
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -27
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/environment.js +3 -1
- package/dist/integrations/base/sql.js +43 -8
- package/dist/integrations/utils.js +3 -0
- package/dist/middleware/authorized.js +5 -3
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +2 -4
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +4 -4
- package/dist/tests/utilities/TestConfiguration.js +70 -44
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +13 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +4 -3
- package/dist/utilities/global.js +15 -12
- package/dist/utilities/index.js +7 -17
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +23 -17
- package/dist/utilities/rowProcessor/utils.js +14 -4
- package/dist/utilities/usageQuota/index.js +1 -0
- package/dist/utilities/usageQuota/rows.js +1 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -4
- package/package.json +5 -5
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +38 -31
- package/src/api/controllers/auth.js +4 -5
- package/src/api/controllers/automation.js +13 -23
- package/src/api/controllers/cloud.js +2 -3
- package/src/api/controllers/component.js +3 -4
- package/src/api/controllers/datasource.js +9 -11
- package/src/api/controllers/deploy/Deployment.js +3 -7
- package/src/api/controllers/deploy/index.js +20 -13
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +4 -9
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +4 -6
- package/src/api/controllers/query/import/tests/index.spec.js +2 -1
- package/src/api/controllers/query/index.js +11 -10
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +5 -6
- package/src/api/controllers/row/ExternalRequest.ts +67 -43
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +54 -90
- package/src/api/controllers/row/internalSearch.js +23 -17
- package/src/api/controllers/row/staticFormula.js +156 -0
- package/src/api/controllers/row/utils.js +7 -6
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +4 -4
- package/src/api/controllers/table/bulkFormula.js +173 -0
- package/src/api/controllers/table/external.js +7 -10
- package/src/api/controllers/table/index.js +7 -21
- package/src/api/controllers/table/internal.js +22 -19
- package/src/api/controllers/table/utils.js +70 -42
- package/src/api/controllers/user.js +17 -20
- package/src/api/controllers/view/index.js +8 -10
- package/src/api/controllers/view/utils.js +9 -4
- package/src/api/controllers/webhook.js +10 -8
- package/src/api/routes/index.js +2 -0
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/tests/automation.spec.js +1 -0
- package/src/api/routes/tests/misc.spec.js +0 -1
- package/src/api/routes/tests/routing.spec.js +21 -12
- package/src/api/routes/tests/row.spec.js +7 -4
- package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
- package/src/app.ts +18 -5
- package/src/automations/automationUtils.js +2 -3
- package/src/automations/steps/createRow.js +0 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +33 -31
- package/src/automations/utils.js +9 -5
- package/src/constants/index.js +5 -0
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -31
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/definitions/common.ts +3 -0
- package/src/environment.js +3 -1
- package/src/integrations/base/sql.ts +55 -14
- package/src/integrations/utils.ts +4 -1
- package/src/middleware/authorized.js +5 -3
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +7 -2
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/usageQuota.js +2 -4
- package/src/migrations/functions/appUrls.ts +34 -0
- package/src/migrations/functions/quotas1.ts +20 -0
- package/src/migrations/functions/tests/appUrls.spec.js +29 -0
- package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +56 -0
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +73 -50
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +14 -21
- package/src/utilities/fileSystem/index.js +4 -3
- package/src/utilities/global.js +15 -12
- package/src/utilities/index.js +7 -17
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +25 -27
- package/src/utilities/rowProcessor/utils.js +23 -7
- package/src/utilities/usageQuota/index.js +1 -0
- package/src/utilities/usageQuota/rows.js +1 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -4
- package/tsconfig.json +2 -1
- package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
- package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
- package/src/migrations/usageQuotas/index.js +0 -24
- package/src/migrations/usageQuotas/syncRows.js +0 -21
|
@@ -8,18 +8,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const CouchDB = require("../../db");
|
|
12
11
|
const { generateUserMetadataID, getUserMetadataParams, generateUserFlagID, } = require("../../db/utils");
|
|
13
12
|
const { InternalTables } = require("../../db/utils");
|
|
14
13
|
const { getGlobalUsers, getRawGlobalUser } = require("../../utilities/global");
|
|
15
14
|
const { getFullUser } = require("../../utilities/users");
|
|
16
15
|
const { isEqual } = require("lodash");
|
|
17
16
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
|
|
18
|
-
const { getDevelopmentAppID,
|
|
19
|
-
const { doesDatabaseExist } = require("../../utilities");
|
|
17
|
+
const { getDevelopmentAppID, getProdAppIDs, dbExists, } = require("@budibase/backend-core/db");
|
|
20
18
|
const { UserStatus } = require("@budibase/backend-core/constants");
|
|
21
|
-
|
|
19
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
20
|
+
function rawMetadata() {
|
|
22
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
const db = getAppDB();
|
|
23
23
|
return (yield db.allDocs(getUserMetadataParams(null, {
|
|
24
24
|
include_docs: true,
|
|
25
25
|
}))).rows.map(row => row.doc);
|
|
@@ -45,13 +45,10 @@ function combineMetadataAndUser(user, metadata) {
|
|
|
45
45
|
}
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
|
-
exports.syncGlobalUsers = (
|
|
48
|
+
exports.syncGlobalUsers = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
49
|
// sync user metadata
|
|
50
|
-
const db =
|
|
51
|
-
const [users, metadata] = yield Promise.all([
|
|
52
|
-
getGlobalUsers(appId),
|
|
53
|
-
rawMetadata(db),
|
|
54
|
-
]);
|
|
50
|
+
const db = getAppDB();
|
|
51
|
+
const [users, metadata] = yield Promise.all([getGlobalUsers(), rawMetadata()]);
|
|
55
52
|
const toWrite = [];
|
|
56
53
|
for (let user of users) {
|
|
57
54
|
const combined = yield combineMetadataAndUser(user, metadata);
|
|
@@ -86,7 +83,7 @@ exports.syncUser = function (ctx) {
|
|
|
86
83
|
let prodAppIds;
|
|
87
84
|
// if they are a builder then get all production app IDs
|
|
88
85
|
if ((user.builder && user.builder.global) || deleting) {
|
|
89
|
-
prodAppIds = yield
|
|
86
|
+
prodAppIds = yield getProdAppIDs();
|
|
90
87
|
}
|
|
91
88
|
else {
|
|
92
89
|
prodAppIds = Object.entries(roles)
|
|
@@ -97,10 +94,10 @@ exports.syncUser = function (ctx) {
|
|
|
97
94
|
const roleId = roles[prodAppId];
|
|
98
95
|
const devAppId = getDevelopmentAppID(prodAppId);
|
|
99
96
|
for (let appId of [prodAppId, devAppId]) {
|
|
100
|
-
if (!(yield
|
|
97
|
+
if (!(yield dbExists(appId))) {
|
|
101
98
|
continue;
|
|
102
99
|
}
|
|
103
|
-
const db =
|
|
100
|
+
const db = getAppDB();
|
|
104
101
|
const metadataId = generateUserMetadataID(userId);
|
|
105
102
|
let metadata;
|
|
106
103
|
try {
|
|
@@ -134,8 +131,8 @@ exports.syncUser = function (ctx) {
|
|
|
134
131
|
};
|
|
135
132
|
exports.fetchMetadata = function (ctx) {
|
|
136
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
const database =
|
|
138
|
-
const global = yield getGlobalUsers(
|
|
134
|
+
const database = getAppDB();
|
|
135
|
+
const global = yield getGlobalUsers();
|
|
139
136
|
const metadata = yield rawMetadata(database);
|
|
140
137
|
const users = [];
|
|
141
138
|
for (let user of global) {
|
|
@@ -162,8 +159,7 @@ exports.updateSelfMetadata = function (ctx) {
|
|
|
162
159
|
};
|
|
163
160
|
exports.updateMetadata = function (ctx) {
|
|
164
161
|
return __awaiter(this, void 0, void 0, function* () {
|
|
165
|
-
const
|
|
166
|
-
const db = new CouchDB(appId);
|
|
162
|
+
const db = getAppDB();
|
|
167
163
|
const user = ctx.request.body;
|
|
168
164
|
// this isn't applicable to the user
|
|
169
165
|
delete user.roles;
|
|
@@ -173,7 +169,7 @@ exports.updateMetadata = function (ctx) {
|
|
|
173
169
|
};
|
|
174
170
|
exports.destroyMetadata = function (ctx) {
|
|
175
171
|
return __awaiter(this, void 0, void 0, function* () {
|
|
176
|
-
const db =
|
|
172
|
+
const db = getAppDB();
|
|
177
173
|
try {
|
|
178
174
|
const dbUser = yield db.get(ctx.params.id);
|
|
179
175
|
yield db.remove(dbUser._id, dbUser._rev);
|
|
@@ -199,7 +195,7 @@ exports.setFlag = function (ctx) {
|
|
|
199
195
|
ctx.throw(400, "Must supply a 'flag' field in request body.");
|
|
200
196
|
}
|
|
201
197
|
const flagDocId = generateUserFlagID(userId);
|
|
202
|
-
const db =
|
|
198
|
+
const db = getAppDB();
|
|
203
199
|
let doc;
|
|
204
200
|
try {
|
|
205
201
|
doc = yield db.get(flagDocId);
|
|
@@ -216,7 +212,7 @@ exports.getFlags = function (ctx) {
|
|
|
216
212
|
return __awaiter(this, void 0, void 0, function* () {
|
|
217
213
|
const userId = ctx.user._id;
|
|
218
214
|
const docId = generateUserFlagID(userId);
|
|
219
|
-
const db =
|
|
215
|
+
const db = getAppDB();
|
|
220
216
|
let doc;
|
|
221
217
|
try {
|
|
222
218
|
doc = yield db.get(docId);
|
|
@@ -19,7 +19,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
19
19
|
}
|
|
20
20
|
return t;
|
|
21
21
|
};
|
|
22
|
-
const CouchDB = require("../../../db");
|
|
23
22
|
const viewTemplate = require("./viewBuilder");
|
|
24
23
|
const { apiFileReturn } = require("../../../utilities/fileSystem");
|
|
25
24
|
const exporters = require("./exporters");
|
|
@@ -27,18 +26,18 @@ const { saveView, getView, getViews, deleteView } = require("./utils");
|
|
|
27
26
|
const { fetchView } = require("../row");
|
|
28
27
|
const { getTable } = require("../table/utils");
|
|
29
28
|
const { FieldTypes } = require("../../../constants");
|
|
29
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
30
30
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
-
|
|
32
|
-
ctx.body = yield getViews(db);
|
|
31
|
+
ctx.body = yield getViews();
|
|
33
32
|
});
|
|
34
33
|
exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
-
const db =
|
|
34
|
+
const db = getAppDB();
|
|
36
35
|
const _a = ctx.request.body, { originalName } = _a, viewToSave = __rest(_a, ["originalName"]);
|
|
37
36
|
const view = viewTemplate(viewToSave);
|
|
38
37
|
if (!viewToSave.name) {
|
|
39
38
|
ctx.throw(400, "Cannot create view without a name");
|
|
40
39
|
}
|
|
41
|
-
yield saveView(
|
|
40
|
+
yield saveView(originalName, viewToSave.name, view);
|
|
42
41
|
// add views to table document
|
|
43
42
|
const table = yield db.get(ctx.request.body.tableId);
|
|
44
43
|
if (!table.views)
|
|
@@ -54,18 +53,17 @@ exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
54
53
|
ctx.body = Object.assign(Object.assign({}, table.views[viewToSave.name]), { name: viewToSave.name });
|
|
55
54
|
});
|
|
56
55
|
exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
-
const db =
|
|
56
|
+
const db = getAppDB();
|
|
58
57
|
const viewName = decodeURI(ctx.params.viewName);
|
|
59
|
-
const view = yield deleteView(
|
|
58
|
+
const view = yield deleteView(viewName);
|
|
60
59
|
const table = yield db.get(view.meta.tableId);
|
|
61
60
|
delete table.views[viewName];
|
|
62
61
|
yield db.put(table);
|
|
63
62
|
ctx.body = view;
|
|
64
63
|
});
|
|
65
64
|
exports.exportView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
|
-
const db = new CouchDB(ctx.appId);
|
|
67
65
|
const viewName = decodeURI(ctx.query.view);
|
|
68
|
-
const view = yield getView(
|
|
66
|
+
const view = yield getView(viewName);
|
|
69
67
|
const format = ctx.query.format;
|
|
70
68
|
if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
|
|
71
69
|
ctx.throw(400, "Format must be specified, either csv or json");
|
|
@@ -90,7 +88,7 @@ exports.exportView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
90
88
|
let schema = view && view.meta && view.meta.schema;
|
|
91
89
|
if (!schema) {
|
|
92
90
|
const tableId = ctx.params.tableId || view.meta.tableId;
|
|
93
|
-
const table = yield getTable(
|
|
91
|
+
const table = yield getTable(tableId);
|
|
94
92
|
schema = table.schema;
|
|
95
93
|
}
|
|
96
94
|
// remove any relationships
|
|
@@ -10,7 +10,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
const { ViewNames, generateMemoryViewID, getMemoryViewParams, DocumentTypes, SEPARATOR, } = require("../../../db/utils");
|
|
12
12
|
const env = require("../../../environment");
|
|
13
|
-
|
|
13
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
14
|
+
exports.getView = (viewName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
const db = getAppDB();
|
|
14
16
|
if (env.SELF_HOSTED) {
|
|
15
17
|
const designDoc = yield db.get("_design/database");
|
|
16
18
|
return designDoc.views[viewName];
|
|
@@ -24,7 +26,8 @@ exports.getView = (db, viewName) => __awaiter(void 0, void 0, void 0, function*
|
|
|
24
26
|
return viewDoc.view;
|
|
25
27
|
}
|
|
26
28
|
});
|
|
27
|
-
exports.getViews = (
|
|
29
|
+
exports.getViews = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
const db = getAppDB();
|
|
28
31
|
const response = [];
|
|
29
32
|
if (env.SELF_HOSTED) {
|
|
30
33
|
const designDoc = yield db.get("_design/database");
|
|
@@ -46,7 +49,8 @@ exports.getViews = (db) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
46
49
|
}
|
|
47
50
|
return response;
|
|
48
51
|
});
|
|
49
|
-
exports.saveView = (
|
|
52
|
+
exports.saveView = (originalName, viewName, viewTemplate) => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
const db = getAppDB();
|
|
50
54
|
if (env.SELF_HOSTED) {
|
|
51
55
|
const designDoc = yield db.get("_design/database");
|
|
52
56
|
designDoc.views = Object.assign(Object.assign({}, designDoc.views), { [viewName]: viewTemplate });
|
|
@@ -81,7 +85,8 @@ exports.saveView = (db, originalName, viewName, viewTemplate) => __awaiter(void
|
|
|
81
85
|
yield db.put(viewDoc);
|
|
82
86
|
}
|
|
83
87
|
});
|
|
84
|
-
exports.deleteView = (
|
|
88
|
+
exports.deleteView = (viewName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
89
|
+
const db = getAppDB();
|
|
85
90
|
if (env.SELF_HOSTED) {
|
|
86
91
|
const designDoc = yield db.get("_design/database");
|
|
87
92
|
const view = designDoc.views[viewName];
|
|
@@ -8,12 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const CouchDB = require("../../db");
|
|
12
11
|
const { generateWebhookID, getWebhookParams } = require("../../db/utils");
|
|
13
12
|
const toJsonSchema = require("to-json-schema");
|
|
14
13
|
const validate = require("jsonschema").validate;
|
|
15
14
|
const triggers = require("../../automations/triggers");
|
|
16
|
-
const {
|
|
15
|
+
const { getProdAppID } = require("@budibase/backend-core/db");
|
|
16
|
+
const { getAppDB, updateAppId } = require("@budibase/backend-core/context");
|
|
17
17
|
const AUTOMATION_DESCRIPTION = "Generated from Webhook Schema";
|
|
18
18
|
function Webhook(name, type, target) {
|
|
19
19
|
this.live = true;
|
|
@@ -28,14 +28,14 @@ exports.WebhookType = {
|
|
|
28
28
|
AUTOMATION: "automation",
|
|
29
29
|
};
|
|
30
30
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
-
const db =
|
|
31
|
+
const db = getAppDB();
|
|
32
32
|
const response = yield db.allDocs(getWebhookParams(null, {
|
|
33
33
|
include_docs: true,
|
|
34
34
|
}));
|
|
35
35
|
ctx.body = response.rows.map(row => row.doc);
|
|
36
36
|
});
|
|
37
37
|
exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
-
const db =
|
|
38
|
+
const db = getAppDB();
|
|
39
39
|
const webhook = ctx.request.body;
|
|
40
40
|
webhook.appId = ctx.appId;
|
|
41
41
|
// check that the webhook exists
|
|
@@ -53,11 +53,12 @@ exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
53
53
|
};
|
|
54
54
|
});
|
|
55
55
|
exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
|
-
const db =
|
|
56
|
+
const db = getAppDB();
|
|
57
57
|
ctx.body = yield db.remove(ctx.params.id, ctx.params.rev);
|
|
58
58
|
});
|
|
59
59
|
exports.buildSchema = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
-
|
|
60
|
+
updateAppId(ctx.params.instance);
|
|
61
|
+
const db = getAppDB();
|
|
61
62
|
const webhook = yield db.get(ctx.params.id);
|
|
62
63
|
webhook.bodySchema = toJsonSchema(ctx.request.body);
|
|
63
64
|
// update the automation outputs
|
|
@@ -80,9 +81,10 @@ exports.buildSchema = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
80
81
|
ctx.body = yield db.put(webhook);
|
|
81
82
|
});
|
|
82
83
|
exports.trigger = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
-
const prodAppId =
|
|
84
|
+
const prodAppId = getProdAppID(ctx.params.instance);
|
|
85
|
+
updateAppId(prodAppId);
|
|
84
86
|
try {
|
|
85
|
-
const db =
|
|
87
|
+
const db = getAppDB();
|
|
86
88
|
const webhook = yield db.get(ctx.params.id);
|
|
87
89
|
// validate against the schema
|
|
88
90
|
if (webhook.bodySchema) {
|
package/dist/api/routes/index.js
CHANGED
|
@@ -25,6 +25,7 @@ const backupRoutes = require("./backup");
|
|
|
25
25
|
const metadataRoutes = require("./metadata");
|
|
26
26
|
const devRoutes = require("./dev");
|
|
27
27
|
const cloudRoutes = require("./cloud");
|
|
28
|
+
const migrationRoutes = require("./migrations");
|
|
28
29
|
exports.mainRoutes = [
|
|
29
30
|
authRoutes,
|
|
30
31
|
deployRoutes,
|
|
@@ -53,5 +54,6 @@ exports.mainRoutes = [
|
|
|
53
54
|
// this could be breaking as koa may recognise other routes as this
|
|
54
55
|
tableRoutes,
|
|
55
56
|
rowRoutes,
|
|
57
|
+
migrationRoutes,
|
|
56
58
|
];
|
|
57
59
|
exports.staticRoutes = staticRoutes;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const Router = require("@koa/router");
|
|
3
|
+
const migrationsController = require("../controllers/migrations");
|
|
4
|
+
const router = Router();
|
|
5
|
+
const { internalApi } = require("@budibase/backend-core/auth");
|
|
6
|
+
router
|
|
7
|
+
.post("/api/migrations/run", internalApi, migrationsController.migrate)
|
|
8
|
+
.get("/api/migrations/definitions", internalApi, migrationsController.fetchDefinitions);
|
|
9
|
+
module.exports = router;
|
|
@@ -10,18 +10,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
const rowController = require("../../../controllers/row");
|
|
12
12
|
const appController = require("../../../controllers/application");
|
|
13
|
-
const CouchDB = require("../../../../db");
|
|
14
13
|
const { AppStatus } = require("../../../../db/utils");
|
|
15
14
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
|
|
16
15
|
const { TENANT_ID } = require("../../../../tests/utilities/structures");
|
|
16
|
+
const { getAppDB, doInAppContext } = require("@budibase/backend-core/context");
|
|
17
|
+
const env = require("../../../../environment");
|
|
17
18
|
function Request(appId, params) {
|
|
18
19
|
this.appId = appId;
|
|
19
20
|
this.params = params;
|
|
20
21
|
this.request = {};
|
|
21
22
|
}
|
|
23
|
+
function runRequest(appId, controlFunc, request) {
|
|
24
|
+
return doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
return controlFunc(request);
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
22
28
|
exports.getAllTableRows = (config) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
29
|
const req = new Request(config.appId, { tableId: config.table._id });
|
|
24
|
-
yield rowController.fetch
|
|
30
|
+
yield runRequest(config.appId, rowController.fetch, req);
|
|
25
31
|
return req.body;
|
|
26
32
|
});
|
|
27
33
|
exports.clearAllApps = (tenantId = TENANT_ID) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -33,13 +39,16 @@ exports.clearAllApps = (tenantId = TENANT_ID) => __awaiter(void 0, void 0, void
|
|
|
33
39
|
}
|
|
34
40
|
for (let app of apps) {
|
|
35
41
|
const { appId } = app;
|
|
36
|
-
|
|
42
|
+
const req = new Request(null, { appId });
|
|
43
|
+
yield runRequest(appId, appController.delete, req);
|
|
37
44
|
}
|
|
38
45
|
});
|
|
39
46
|
exports.clearAllAutomations = (config) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
47
|
const automations = yield config.getAllAutomations();
|
|
41
48
|
for (let auto of automations) {
|
|
42
|
-
yield config.
|
|
49
|
+
yield doInAppContext(config.appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
+
yield config.deleteAutomation(auto);
|
|
51
|
+
}));
|
|
43
52
|
}
|
|
44
53
|
});
|
|
45
54
|
exports.createRequest = (request, method, url, body) => {
|
|
@@ -92,19 +101,30 @@ exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failR
|
|
|
92
101
|
.set(failHeader)
|
|
93
102
|
.expect(403);
|
|
94
103
|
});
|
|
95
|
-
exports.getDB =
|
|
96
|
-
return
|
|
104
|
+
exports.getDB = () => {
|
|
105
|
+
return getAppDB();
|
|
97
106
|
};
|
|
98
107
|
exports.testAutomation = (config, automation) => __awaiter(void 0, void 0, void 0, function* () {
|
|
99
|
-
return
|
|
100
|
-
.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
return runRequest(automation.appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
|
+
return yield config.request
|
|
110
|
+
.post(`/api/automations/${automation._id}/test`)
|
|
111
|
+
.send({
|
|
112
|
+
row: {
|
|
113
|
+
name: "Test",
|
|
114
|
+
description: "TEST",
|
|
115
|
+
},
|
|
116
|
+
})
|
|
117
|
+
.set(config.defaultHeaders())
|
|
118
|
+
.expect("Content-Type", /json/)
|
|
119
|
+
.expect(200);
|
|
120
|
+
}));
|
|
121
|
+
});
|
|
122
|
+
exports.runInProd = (func) => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
+
const nodeEnv = env.NODE_ENV;
|
|
124
|
+
const workerId = env.JEST_WORKER_ID;
|
|
125
|
+
env._set("NODE_ENV", "PRODUCTION");
|
|
126
|
+
env._set("JEST_WORKER_ID", null);
|
|
127
|
+
yield func();
|
|
128
|
+
env._set("NODE_ENV", nodeEnv);
|
|
129
|
+
env._set("JEST_WORKER_ID", workerId);
|
|
110
130
|
});
|
package/dist/app.js
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
22
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
23
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -9,7 +28,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
28
|
});
|
|
10
29
|
};
|
|
11
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const env = require("./environment");
|
|
31
|
+
const env = __importStar(require("./environment"));
|
|
13
32
|
const CouchDB = require("./db");
|
|
14
33
|
require("@budibase/backend-core").init(CouchDB);
|
|
15
34
|
const Koa = require("koa");
|
|
@@ -24,6 +43,7 @@ const Sentry = require("@sentry/node");
|
|
|
24
43
|
const fileSystem = require("./utilities/fileSystem");
|
|
25
44
|
const bullboard = require("./automations/bullboard");
|
|
26
45
|
const redis = require("./utilities/redis");
|
|
46
|
+
const migrations = __importStar(require("./migrations"));
|
|
27
47
|
const app = new Koa();
|
|
28
48
|
// set up top level koa middleware
|
|
29
49
|
app.use(koaBody({
|
|
@@ -76,12 +96,22 @@ module.exports = server.listen(env.PORT || 0, () => __awaiter(void 0, void 0, vo
|
|
|
76
96
|
yield redis.init();
|
|
77
97
|
yield automations.init();
|
|
78
98
|
}));
|
|
79
|
-
|
|
80
|
-
console.error(err);
|
|
99
|
+
const shutdown = () => {
|
|
81
100
|
server.close();
|
|
82
101
|
server.destroy();
|
|
102
|
+
};
|
|
103
|
+
process.on("uncaughtException", err => {
|
|
104
|
+
console.error(err);
|
|
105
|
+
shutdown();
|
|
83
106
|
});
|
|
84
107
|
process.on("SIGTERM", () => {
|
|
85
|
-
|
|
86
|
-
server.destroy();
|
|
108
|
+
shutdown();
|
|
87
109
|
});
|
|
110
|
+
// run migrations on startup if not done via http
|
|
111
|
+
// not recommended in a clustered environment
|
|
112
|
+
if (!env.HTTP_MIGRATIONS) {
|
|
113
|
+
migrations.migrate().catch(err => {
|
|
114
|
+
console.error("Error performing migrations. Exiting.\n", err);
|
|
115
|
+
shutdown();
|
|
116
|
+
});
|
|
117
|
+
}
|
|
@@ -61,13 +61,12 @@ exports.cleanInputValues = (inputs, schema) => {
|
|
|
61
61
|
* the automation but is instead part of the Table/Table. This function will get the table schema and use it to instead
|
|
62
62
|
* perform the cleanInputValues function on the input row.
|
|
63
63
|
*
|
|
64
|
-
* @param {string} appId The instance which the Table/Table is contained under.
|
|
65
64
|
* @param {string} tableId The ID of the Table/Table which the schema is to be retrieved for.
|
|
66
65
|
* @param {object} row The input row structure which requires clean-up after having been through template statements.
|
|
67
66
|
* @returns {Promise<Object>} The cleaned up rows object, will should now have all the required primitive types.
|
|
68
67
|
*/
|
|
69
|
-
exports.cleanUpRow = (
|
|
70
|
-
let table = yield getTable(
|
|
68
|
+
exports.cleanUpRow = (tableId, row) => __awaiter(void 0, void 0, void 0, function* () {
|
|
69
|
+
let table = yield getTable(tableId);
|
|
71
70
|
return exports.cleanInputValues(row, { properties: table.schema });
|
|
72
71
|
});
|
|
73
72
|
exports.getError = err => {
|
|
@@ -85,7 +85,7 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
85
85
|
},
|
|
86
86
|
});
|
|
87
87
|
try {
|
|
88
|
-
inputs.row = yield automationUtils.cleanUpRow(
|
|
88
|
+
inputs.row = yield automationUtils.cleanUpRow(inputs.row.tableId, inputs.row);
|
|
89
89
|
yield usage.update(usage.Properties.ROW, 1, { dryRun: true });
|
|
90
90
|
yield rowController.save(ctx);
|
|
91
91
|
yield usage.update(usage.Properties.ROW, 1);
|
|
@@ -90,7 +90,7 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
90
90
|
});
|
|
91
91
|
try {
|
|
92
92
|
if (tableId) {
|
|
93
|
-
inputs.row = yield automationUtils.cleanUpRow(
|
|
93
|
+
inputs.row = yield automationUtils.cleanUpRow(tableId, inputs.row);
|
|
94
94
|
}
|
|
95
95
|
yield rowController.patch(ctx);
|
|
96
96
|
return {
|
|
@@ -8,7 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const CouchDB = require("../db");
|
|
12
11
|
const emitter = require("../events/index");
|
|
13
12
|
const { getAutomationParams } = require("../db/utils");
|
|
14
13
|
const { coerce } = require("../utilities/rowProcessor");
|
|
@@ -19,6 +18,7 @@ const { queue } = require("./bullboard");
|
|
|
19
18
|
const { checkTestFlag } = require("../utilities/redis");
|
|
20
19
|
const utils = require("./utils");
|
|
21
20
|
const env = require("../environment");
|
|
21
|
+
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context");
|
|
22
22
|
const TRIGGER_DEFINITIONS = definitions;
|
|
23
23
|
const JOB_OPTS = {
|
|
24
24
|
removeOnComplete: true,
|
|
@@ -29,31 +29,33 @@ function queueRelevantRowAutomations(event, eventType) {
|
|
|
29
29
|
if (event.appId == null) {
|
|
30
30
|
throw `No appId specified for ${eventType} - check event emitters.`;
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
doInAppContext(event.appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
const db = getAppDB();
|
|
34
|
+
let automations = yield db.allDocs(getAutomationParams(null, { include_docs: true }));
|
|
35
|
+
// filter down to the correct event type
|
|
36
|
+
automations = automations.rows
|
|
37
|
+
.map(automation => automation.doc)
|
|
38
|
+
.filter(automation => {
|
|
39
|
+
const trigger = automation.definition.trigger;
|
|
40
|
+
return trigger && trigger.event === eventType;
|
|
41
|
+
});
|
|
42
|
+
for (let automation of automations) {
|
|
43
|
+
let automationDef = automation.definition;
|
|
44
|
+
let automationTrigger = automationDef ? automationDef.trigger : {};
|
|
45
|
+
// don't queue events which are for dev apps, only way to test automations is
|
|
46
|
+
// running tests on them, in production the test flag will never
|
|
47
|
+
// be checked due to lazy evaluation (first always false)
|
|
48
|
+
if (!env.ALLOW_DEV_AUTOMATIONS &&
|
|
49
|
+
isDevAppID(event.appId) &&
|
|
50
|
+
!(yield checkTestFlag(automation._id))) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (automationTrigger.inputs &&
|
|
54
|
+
automationTrigger.inputs.tableId === event.row.tableId) {
|
|
55
|
+
yield queue.add({ automation, event }, JOB_OPTS);
|
|
56
|
+
}
|
|
51
57
|
}
|
|
52
|
-
|
|
53
|
-
automationTrigger.inputs.tableId === event.row.tableId) {
|
|
54
|
-
yield queue.add({ automation, event }, JOB_OPTS);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
58
|
+
}));
|
|
57
59
|
});
|
|
58
60
|
}
|
|
59
61
|
emitter.on("row:save", function (event) {
|
|
@@ -16,8 +16,9 @@ const { queue } = require("./bullboard");
|
|
|
16
16
|
const newid = require("../db/newid");
|
|
17
17
|
const { updateEntityMetadata } = require("../utilities");
|
|
18
18
|
const { MetadataTypes } = require("../constants");
|
|
19
|
-
const {
|
|
19
|
+
const { getProdAppID } = require("@budibase/backend-core/db");
|
|
20
20
|
const { cloneDeep } = require("lodash/fp");
|
|
21
|
+
const { getAppDB, getAppId } = require("@budibase/backend-core/context");
|
|
21
22
|
const WH_STEP_ID = definitions.WEBHOOK.stepId;
|
|
22
23
|
const CRON_STEP_ID = definitions.CRON.stepId;
|
|
23
24
|
const Runner = new Thread(ThreadType.AUTOMATION);
|
|
@@ -32,7 +33,7 @@ exports.processEvent = (job) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
32
33
|
}
|
|
33
34
|
});
|
|
34
35
|
exports.updateTestHistory = (appId, automation, history) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
-
return updateEntityMetadata(
|
|
36
|
+
return updateEntityMetadata(MetadataTypes.AUTOMATION_TEST_HISTORY, automation._id, metadata => {
|
|
36
37
|
if (metadata && Array.isArray(metadata.history)) {
|
|
37
38
|
metadata.history.push(history);
|
|
38
39
|
}
|
|
@@ -87,6 +88,9 @@ exports.enableCronTrigger = (appId, automation) => __awaiter(void 0, void 0, voi
|
|
|
87
88
|
}, { repeat: { cron: trigger.inputs.cron }, jobId });
|
|
88
89
|
// Assign cron job ID from bull so we can remove it later if the cron trigger is removed
|
|
89
90
|
trigger.cronJobId = job.id;
|
|
91
|
+
// can't use getAppDB here as this is likely to be called from dev app,
|
|
92
|
+
// but this call could be for dev app or prod app, need to just use what
|
|
93
|
+
// was passed in
|
|
90
94
|
const db = new CouchDB(appId);
|
|
91
95
|
const response = yield db.put(automation);
|
|
92
96
|
automation._id = response.id;
|
|
@@ -102,7 +106,8 @@ exports.enableCronTrigger = (appId, automation) => __awaiter(void 0, void 0, voi
|
|
|
102
106
|
* @returns {Promise<object|undefined>} After this is complete the new automation object may have been updated and should be
|
|
103
107
|
* written to DB (this does not write to DB as it would be wasteful to repeat).
|
|
104
108
|
*/
|
|
105
|
-
exports.checkForWebhooks = ({
|
|
109
|
+
exports.checkForWebhooks = ({ oldAuto, newAuto }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
const appId = getAppId();
|
|
106
111
|
const oldTrigger = oldAuto ? oldAuto.definition.trigger : null;
|
|
107
112
|
const newTrigger = newAuto ? newAuto.definition.trigger : null;
|
|
108
113
|
const triggerChanged = oldTrigger && newTrigger && oldTrigger.id !== newTrigger.id;
|
|
@@ -116,7 +121,7 @@ exports.checkForWebhooks = ({ appId, oldAuto, newAuto }) => __awaiter(void 0, vo
|
|
|
116
121
|
(!isWebhookTrigger(newAuto) || triggerChanged) &&
|
|
117
122
|
oldTrigger.webhookId) {
|
|
118
123
|
try {
|
|
119
|
-
let db =
|
|
124
|
+
let db = getAppDB();
|
|
120
125
|
// need to get the webhook to get the rev
|
|
121
126
|
const webhook = yield db.get(oldTrigger.webhookId);
|
|
122
127
|
const ctx = {
|
|
@@ -149,7 +154,7 @@ exports.checkForWebhooks = ({ appId, oldAuto, newAuto }) => __awaiter(void 0, vo
|
|
|
149
154
|
// the app ID has to be development for this endpoint
|
|
150
155
|
// it can only be used when building the app
|
|
151
156
|
// but the trigger endpoint will always be used in production
|
|
152
|
-
const prodAppId =
|
|
157
|
+
const prodAppId = getProdAppID(appId);
|
|
153
158
|
newTrigger.inputs = {
|
|
154
159
|
schemaUrl: `api/webhooks/schema/${appId}/${id}`,
|
|
155
160
|
triggerUrl: `api/webhooks/trigger/${prodAppId}/${id}`,
|
package/dist/constants/index.js
CHANGED