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