@budibase/server 1.0.49-alpha.4 → 1.0.49-alpha.8
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.f763d886.js → index.94a9250f.js} +1 -1
- package/builder/index.html +1 -1
- package/coverage/clover.xml +1920 -1940
- 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 +33 -126
- package/coverage/lcov-report/api/controllers/row/index.html +28 -28
- 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 +3192 -3209
- 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 +14 -22
- 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 +27 -58
- 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,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
2
2
|
const {
|
|
3
3
|
DocumentTypes,
|
|
4
4
|
SEPARATOR,
|
|
@@ -21,12 +21,11 @@ const SCREEN_PREFIX = DocumentTypes.SCREEN + SEPARATOR
|
|
|
21
21
|
/**
|
|
22
22
|
* Creates the link view for the instance, this will overwrite the existing one, but this should only
|
|
23
23
|
* be called if it is found that the view does not exist.
|
|
24
|
-
* @param {string} appId The instance to which the view should be added.
|
|
25
24
|
* @returns {Promise<void>} The view now exists, please note that the next view of this query will actually build it,
|
|
26
25
|
* so it may be slow.
|
|
27
26
|
*/
|
|
28
|
-
exports.createLinkView = async
|
|
29
|
-
const db =
|
|
27
|
+
exports.createLinkView = async () => {
|
|
28
|
+
const db = getAppDB()
|
|
30
29
|
const designDoc = await db.get("_design/database")
|
|
31
30
|
const view = {
|
|
32
31
|
map: function (doc) {
|
|
@@ -57,8 +56,8 @@ exports.createLinkView = async appId => {
|
|
|
57
56
|
await db.put(designDoc)
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
exports.createRoutingView = async
|
|
61
|
-
const db =
|
|
59
|
+
exports.createRoutingView = async () => {
|
|
60
|
+
const db = getAppDB()
|
|
62
61
|
const designDoc = await db.get("_design/database")
|
|
63
62
|
const view = {
|
|
64
63
|
// if using variables in a map function need to inject them before use
|
|
@@ -78,8 +77,8 @@ exports.createRoutingView = async appId => {
|
|
|
78
77
|
await db.put(designDoc)
|
|
79
78
|
}
|
|
80
79
|
|
|
81
|
-
async function searchIndex(
|
|
82
|
-
const db =
|
|
80
|
+
async function searchIndex(indexName, fnString) {
|
|
81
|
+
const db = getAppDB()
|
|
83
82
|
const designDoc = await db.get("_design/database")
|
|
84
83
|
designDoc.indexes = {
|
|
85
84
|
[indexName]: {
|
|
@@ -90,9 +89,8 @@ async function searchIndex(appId, indexName, fnString) {
|
|
|
90
89
|
await db.put(designDoc)
|
|
91
90
|
}
|
|
92
91
|
|
|
93
|
-
exports.createAllSearchIndex = async
|
|
92
|
+
exports.createAllSearchIndex = async () => {
|
|
94
93
|
await searchIndex(
|
|
95
|
-
appId,
|
|
96
94
|
SearchIndexes.ROWS,
|
|
97
95
|
function (doc) {
|
|
98
96
|
function idx(input, prev) {
|
package/src/environment.js
CHANGED
|
@@ -52,7 +52,10 @@ export function buildExternalTableId(datasourceId: string, tableName: string) {
|
|
|
52
52
|
return `${datasourceId}${DOUBLE_SEPARATOR}${tableName}`
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
export function breakExternalTableId(tableId: string) {
|
|
55
|
+
export function breakExternalTableId(tableId: string | undefined) {
|
|
56
|
+
if (!tableId) {
|
|
57
|
+
return {}
|
|
58
|
+
}
|
|
56
59
|
const parts = tableId.split(DOUBLE_SEPARATOR)
|
|
57
60
|
let tableName = parts.pop()
|
|
58
61
|
// if they need joined
|
|
@@ -10,6 +10,7 @@ const {
|
|
|
10
10
|
const builderMiddleware = require("./builder")
|
|
11
11
|
const { isWebhookEndpoint } = require("./utils")
|
|
12
12
|
const { buildCsrfMiddleware } = require("@budibase/backend-core/auth")
|
|
13
|
+
const { getAppId } = require("@budibase/backend-core/context")
|
|
13
14
|
|
|
14
15
|
function hasResource(ctx) {
|
|
15
16
|
return ctx.resourceId != null
|
|
@@ -45,7 +46,7 @@ const checkAuthorizedResource = async (
|
|
|
45
46
|
) => {
|
|
46
47
|
// get the user's roles
|
|
47
48
|
const roleId = ctx.roleId || BUILTIN_ROLE_IDS.PUBLIC
|
|
48
|
-
const userRoles = await getUserRoleHierarchy(
|
|
49
|
+
const userRoles = await getUserRoleHierarchy(roleId, {
|
|
49
50
|
idOnly: false,
|
|
50
51
|
})
|
|
51
52
|
const permError = "User does not have permission"
|
|
@@ -81,8 +82,9 @@ module.exports =
|
|
|
81
82
|
|
|
82
83
|
// get the resource roles
|
|
83
84
|
let resourceRoles = []
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
const appId = getAppId()
|
|
86
|
+
if (appId && hasResource(ctx)) {
|
|
87
|
+
resourceRoles = await getRequiredResourceRole(permLevel, ctx)
|
|
86
88
|
}
|
|
87
89
|
|
|
88
90
|
// if the resource is public, proceed
|
|
@@ -5,7 +5,7 @@ const {
|
|
|
5
5
|
checkDebounce,
|
|
6
6
|
setDebounce,
|
|
7
7
|
} = require("../utilities/redis")
|
|
8
|
-
const
|
|
8
|
+
const { getDB } = require("@budibase/backend-core/db")
|
|
9
9
|
const { DocumentTypes } = require("../db/utils")
|
|
10
10
|
const { PermissionTypes } = require("@budibase/backend-core/permissions")
|
|
11
11
|
const { app: appCache } = require("@budibase/backend-core/cache")
|
|
@@ -48,7 +48,7 @@ async function updateAppUpdatedAt(ctx) {
|
|
|
48
48
|
if (ctx.method === "GET" || (await checkDebounce(appId))) {
|
|
49
49
|
return
|
|
50
50
|
}
|
|
51
|
-
const db =
|
|
51
|
+
const db = getDB(appId)
|
|
52
52
|
const metadata = await db.get(DocumentTypes.APP_METADATA)
|
|
53
53
|
metadata.updatedAt = new Date().toISOString()
|
|
54
54
|
const response = await db.put(metadata)
|
|
@@ -11,9 +11,9 @@ const { generateUserMetadataID, isDevAppID } = require("../db/utils")
|
|
|
11
11
|
const { dbExists } = require("@budibase/backend-core/db")
|
|
12
12
|
const { isUserInAppTenant } = require("@budibase/backend-core/tenancy")
|
|
13
13
|
const { getCachedSelf } = require("../utilities/global")
|
|
14
|
-
const CouchDB = require("../db")
|
|
15
14
|
const env = require("../environment")
|
|
16
15
|
const { isWebhookEndpoint } = require("./utils")
|
|
16
|
+
const { doInAppContext } = require("@budibase/backend-core/context")
|
|
17
17
|
|
|
18
18
|
module.exports = async (ctx, next) => {
|
|
19
19
|
// try to get the appID from the request
|
|
@@ -31,7 +31,7 @@ module.exports = async (ctx, next) => {
|
|
|
31
31
|
// check the app exists referenced in cookie
|
|
32
32
|
if (appCookie) {
|
|
33
33
|
const appId = appCookie.appId
|
|
34
|
-
const exists = await dbExists(
|
|
34
|
+
const exists = await dbExists(appId)
|
|
35
35
|
if (!exists) {
|
|
36
36
|
clearCookie(ctx, Cookies.CurrentApp)
|
|
37
37
|
return next()
|
|
@@ -41,13 +41,15 @@ module.exports = async (ctx, next) => {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
// deny access to application preview
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
if (!env.isTest()) {
|
|
45
|
+
if (
|
|
46
|
+
isDevAppID(requestAppId) &&
|
|
47
|
+
!isWebhookEndpoint(ctx) &&
|
|
48
|
+
(!ctx.user || !ctx.user.builder || !ctx.user.builder.global)
|
|
49
|
+
) {
|
|
50
|
+
clearCookie(ctx, Cookies.CurrentApp)
|
|
51
|
+
return ctx.redirect("/")
|
|
52
|
+
}
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
let appId,
|
|
@@ -68,44 +70,46 @@ module.exports = async (ctx, next) => {
|
|
|
68
70
|
return next()
|
|
69
71
|
}
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
73
|
+
return doInAppContext(appId, async () => {
|
|
74
|
+
let noCookieSet = false
|
|
75
|
+
// if the user not in the right tenant then make sure they have no permissions
|
|
76
|
+
// need to judge this only based on the request app ID,
|
|
77
|
+
if (
|
|
78
|
+
env.MULTI_TENANCY &&
|
|
79
|
+
ctx.user &&
|
|
80
|
+
requestAppId &&
|
|
81
|
+
!isUserInAppTenant(requestAppId)
|
|
82
|
+
) {
|
|
83
|
+
// don't error, simply remove the users rights (they are a public user)
|
|
84
|
+
delete ctx.user.builder
|
|
85
|
+
delete ctx.user.admin
|
|
86
|
+
delete ctx.user.roles
|
|
87
|
+
roleId = BUILTIN_ROLE_IDS.PUBLIC
|
|
88
|
+
noCookieSet = true
|
|
89
|
+
}
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
ctx.appId = appId
|
|
92
|
+
if (roleId) {
|
|
93
|
+
ctx.roleId = roleId
|
|
94
|
+
const userId = ctx.user ? generateUserMetadataID(ctx.user._id) : null
|
|
95
|
+
ctx.user = {
|
|
96
|
+
...ctx.user,
|
|
97
|
+
// override userID with metadata one
|
|
98
|
+
_id: userId,
|
|
99
|
+
userId,
|
|
100
|
+
roleId,
|
|
101
|
+
role: await getRole(roleId),
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (
|
|
105
|
+
(requestAppId !== appId ||
|
|
106
|
+
appCookie == null ||
|
|
107
|
+
appCookie.appId !== requestAppId) &&
|
|
108
|
+
!noCookieSet
|
|
109
|
+
) {
|
|
110
|
+
setCookie(ctx, { appId }, Cookies.CurrentApp)
|
|
99
111
|
}
|
|
100
|
-
}
|
|
101
|
-
if (
|
|
102
|
-
(requestAppId !== appId ||
|
|
103
|
-
appCookie == null ||
|
|
104
|
-
appCookie.appId !== requestAppId) &&
|
|
105
|
-
!noCookieSet
|
|
106
|
-
) {
|
|
107
|
-
setCookie(ctx, { appId }, Cookies.CurrentApp)
|
|
108
|
-
}
|
|
109
112
|
|
|
110
|
-
|
|
113
|
+
return next()
|
|
114
|
+
})
|
|
111
115
|
}
|
|
@@ -11,6 +11,9 @@ const authorizedMiddleware = require("../authorized")
|
|
|
11
11
|
const env = require("../../environment")
|
|
12
12
|
const { PermissionTypes, PermissionLevels } = require("@budibase/backend-core/permissions")
|
|
13
13
|
require("@budibase/backend-core").init(require("../../db"))
|
|
14
|
+
const { doInAppContext } = require("@budibase/backend-core/context")
|
|
15
|
+
|
|
16
|
+
const APP_ID = ""
|
|
14
17
|
|
|
15
18
|
class TestConfiguration {
|
|
16
19
|
constructor(role) {
|
|
@@ -23,7 +26,7 @@ class TestConfiguration {
|
|
|
23
26
|
request: {
|
|
24
27
|
url: ""
|
|
25
28
|
},
|
|
26
|
-
appId:
|
|
29
|
+
appId: APP_ID,
|
|
27
30
|
auth: {},
|
|
28
31
|
next: this.next,
|
|
29
32
|
throw: this.throw,
|
|
@@ -32,7 +35,9 @@ class TestConfiguration {
|
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
executeMiddleware() {
|
|
35
|
-
return
|
|
38
|
+
return doInAppContext(APP_ID, () => {
|
|
39
|
+
return this.middleware(this.ctx, this.next)
|
|
40
|
+
})
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
setUser(user) {
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
mockAuthWithNoCookie()
|
|
2
2
|
mockWorker()
|
|
3
3
|
|
|
4
|
+
jest.mock("@budibase/backend-core/db", () => ({
|
|
5
|
+
...jest.requireActual("@budibase/backend-core/db"),
|
|
6
|
+
dbExists: () => true,
|
|
7
|
+
}))
|
|
8
|
+
|
|
4
9
|
function mockWorker() {
|
|
5
10
|
jest.mock("../../utilities/workerRequests", () => ({
|
|
6
11
|
getGlobalSelf: () => {
|
|
@@ -50,6 +55,7 @@ function mockAuthWithCookie() {
|
|
|
50
55
|
return "app_test"
|
|
51
56
|
},
|
|
52
57
|
setCookie: jest.fn(),
|
|
58
|
+
clearCookie: jest.fn(),
|
|
53
59
|
getCookie: () => ({appId: "app_different", roleId: "PUBLIC"}),
|
|
54
60
|
}))
|
|
55
61
|
jest.mock("@budibase/backend-core/constants", () => ({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const CouchDB = require("../db")
|
|
2
1
|
const usageQuota = require("../utilities/usageQuota")
|
|
3
2
|
const { getUniqueRows } = require("../utilities/usageQuota/rows")
|
|
4
3
|
const {
|
|
5
4
|
isExternalTable,
|
|
6
5
|
isRowId: isExternalRowId,
|
|
7
6
|
} = require("../integrations/utils")
|
|
7
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
8
8
|
|
|
9
9
|
// currently only counting new writes and deletes
|
|
10
10
|
const METHOD_MAP = {
|
|
@@ -46,7 +46,7 @@ module.exports = async (ctx, next) => {
|
|
|
46
46
|
const usageId = ctx.request.body._id
|
|
47
47
|
try {
|
|
48
48
|
if (ctx.appId) {
|
|
49
|
-
const db =
|
|
49
|
+
const db = getAppDB()
|
|
50
50
|
await db.get(usageId)
|
|
51
51
|
}
|
|
52
52
|
return next()
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import CouchDB from "../../../db"
|
|
1
|
+
import { getGlobalDB, getTenantId } from "@budibase/backend-core/tenancy"
|
|
2
|
+
import { getAllApps } from "@budibase/backend-core/db"
|
|
4
3
|
import { getUsageQuotaDoc } from "../../../utilities/usageQuota"
|
|
5
4
|
|
|
6
5
|
export const run = async () => {
|
|
7
6
|
const db = getGlobalDB()
|
|
8
7
|
// get app count
|
|
9
|
-
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
const devApps = await getAllApps({ dev: true })
|
|
10
10
|
const appCount = devApps ? devApps.length : 0
|
|
11
11
|
|
|
12
12
|
// sync app count
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import CouchDB from "../../../db"
|
|
1
|
+
import { getGlobalDB, getTenantId } from "@budibase/backend-core/tenancy"
|
|
2
|
+
import { getAllApps } from "@budibase/backend-core/db"
|
|
4
3
|
import { getUsageQuotaDoc } from "../../../utilities/usageQuota"
|
|
5
4
|
import { getUniqueRows } from "../../../utilities/usageQuota/rows"
|
|
6
5
|
|
|
7
6
|
export const run = async () => {
|
|
8
7
|
const db = getGlobalDB()
|
|
9
8
|
// get all rows in all apps
|
|
10
|
-
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
const allApps = await getAllApps({ all: true })
|
|
11
|
+
// @ts-ignore
|
|
11
12
|
const appIds = allApps ? allApps.map((app: { appId: any }) => app.appId) : []
|
|
12
13
|
const rows = await getUniqueRows(appIds)
|
|
13
14
|
const rowCount = rows ? rows.length : 0
|
package/src/module.d.ts
ADDED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
const core = require("@budibase/backend-core")
|
|
2
|
+
const CouchDB = require("../../db")
|
|
3
|
+
core.init(CouchDB)
|
|
1
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
2
5
|
const env = require("../../environment")
|
|
3
6
|
const {
|
|
@@ -17,13 +20,11 @@ const supertest = require("supertest")
|
|
|
17
20
|
const { cleanup } = require("../../utilities/fileSystem")
|
|
18
21
|
const { Cookies, Headers } = require("@budibase/backend-core/constants")
|
|
19
22
|
const { jwt } = require("@budibase/backend-core/auth")
|
|
20
|
-
const core = require("@budibase/backend-core")
|
|
21
23
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
22
24
|
const { createASession } = require("@budibase/backend-core/sessions")
|
|
23
25
|
const { user: userCache } = require("@budibase/backend-core/cache")
|
|
24
|
-
const CouchDB = require("../../db")
|
|
25
26
|
const newid = require("../../db/newid")
|
|
26
|
-
core
|
|
27
|
+
const context = require("@budibase/backend-core/context")
|
|
27
28
|
|
|
28
29
|
const GLOBAL_USER_ID = "us_uuid1"
|
|
29
30
|
const EMAIL = "babs@babs.com"
|
|
@@ -65,11 +66,21 @@ class TestConfiguration {
|
|
|
65
66
|
request.request = {
|
|
66
67
|
body: config,
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
async function run() {
|
|
70
|
+
if (params) {
|
|
71
|
+
request.params = params
|
|
72
|
+
}
|
|
73
|
+
await controlFunc(request)
|
|
74
|
+
return request.body
|
|
75
|
+
}
|
|
76
|
+
// check if already in a context
|
|
77
|
+
if (context.getAppId() == null) {
|
|
78
|
+
return context.doInAppContext(this.appId, async () => {
|
|
79
|
+
return run()
|
|
80
|
+
})
|
|
81
|
+
} else {
|
|
82
|
+
return run()
|
|
70
83
|
}
|
|
71
|
-
await controlFunc(request)
|
|
72
|
-
return request.body
|
|
73
84
|
}
|
|
74
85
|
|
|
75
86
|
async globalUser({
|
|
@@ -175,6 +186,7 @@ class TestConfiguration {
|
|
|
175
186
|
// create dev app
|
|
176
187
|
this.app = await this._req({ name: appName }, null, controllers.app.create)
|
|
177
188
|
this.appId = this.app.appId
|
|
189
|
+
context.updateAppId(this.appId)
|
|
178
190
|
|
|
179
191
|
// create production app
|
|
180
192
|
this.prodApp = await this.deploy()
|
|
@@ -187,14 +199,16 @@ class TestConfiguration {
|
|
|
187
199
|
}
|
|
188
200
|
|
|
189
201
|
async deploy() {
|
|
190
|
-
|
|
191
|
-
const prodAppId =
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
202
|
+
await this._req(null, null, controllers.deploy.deployApp)
|
|
203
|
+
const prodAppId = this.getAppId().replace("_dev", "")
|
|
204
|
+
return context.doInAppContext(prodAppId, async () => {
|
|
205
|
+
const appPackage = await this._req(
|
|
206
|
+
null,
|
|
207
|
+
{ appId: prodAppId },
|
|
208
|
+
controllers.app.fetchAppPackage
|
|
209
|
+
)
|
|
210
|
+
return appPackage.application
|
|
211
|
+
})
|
|
198
212
|
}
|
|
199
213
|
|
|
200
214
|
async updateTable(config = null) {
|
|
@@ -423,42 +437,47 @@ class TestConfiguration {
|
|
|
423
437
|
|
|
424
438
|
async login({ roleId, userId, builder, prodApp = false } = {}) {
|
|
425
439
|
const appId = prodApp ? this.prodAppId : this.appId
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
440
|
+
return context.doInAppContext(appId, async () => {
|
|
441
|
+
userId = !userId ? `us_uuid1` : userId
|
|
442
|
+
if (!this.request) {
|
|
443
|
+
throw "Server has not been opened, cannot login."
|
|
444
|
+
}
|
|
445
|
+
// make sure the user exists in the global DB
|
|
446
|
+
if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
|
|
447
|
+
await this.globalUser({
|
|
448
|
+
id: userId,
|
|
449
|
+
builder,
|
|
450
|
+
roles: { [this.prodAppId]: roleId },
|
|
451
|
+
})
|
|
452
|
+
}
|
|
453
|
+
await createASession(userId, {
|
|
454
|
+
sessionId: "sessionid",
|
|
455
|
+
tenantId: TENANT_ID,
|
|
437
456
|
})
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
}
|
|
457
|
+
// have to fake this
|
|
458
|
+
const auth = {
|
|
459
|
+
userId,
|
|
460
|
+
sessionId: "sessionid",
|
|
461
|
+
tenantId: TENANT_ID,
|
|
462
|
+
}
|
|
463
|
+
const app = {
|
|
464
|
+
roleId: roleId,
|
|
465
|
+
appId,
|
|
466
|
+
}
|
|
467
|
+
const authToken = jwt.sign(auth, env.JWT_SECRET)
|
|
468
|
+
const appToken = jwt.sign(app, env.JWT_SECRET)
|
|
469
|
+
|
|
470
|
+
// returning necessary request headers
|
|
471
|
+
await userCache.invalidateUser(userId)
|
|
472
|
+
return {
|
|
473
|
+
Accept: "application/json",
|
|
474
|
+
Cookie: [
|
|
475
|
+
`${Cookies.Auth}=${authToken}`,
|
|
476
|
+
`${Cookies.CurrentApp}=${appToken}`,
|
|
477
|
+
],
|
|
478
|
+
[Headers.APP_ID]: appId,
|
|
479
|
+
}
|
|
480
|
+
})
|
|
462
481
|
}
|
|
463
482
|
}
|
|
464
483
|
|
|
@@ -5,11 +5,11 @@ const automationUtils = require("../automations/automationUtils")
|
|
|
5
5
|
const AutomationEmitter = require("../events/AutomationEmitter")
|
|
6
6
|
const { processObject } = require("@budibase/string-templates")
|
|
7
7
|
const { DEFAULT_TENANT_ID } = require("@budibase/backend-core/constants")
|
|
8
|
-
const CouchDB = require("../db")
|
|
9
8
|
const { DocumentTypes, isDevAppID } = require("../db/utils")
|
|
10
9
|
const { doInTenant } = require("@budibase/backend-core/tenancy")
|
|
11
10
|
const usage = require("../utilities/usageQuota")
|
|
12
11
|
const { definitions: triggerDefs } = require("../automations/triggerInfo")
|
|
12
|
+
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
13
13
|
|
|
14
14
|
const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
|
|
15
15
|
const CRON_STEP_ID = triggerDefs.CRON.stepId
|
|
@@ -59,11 +59,10 @@ class Orchestrator {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
async getApp() {
|
|
62
|
-
const appId = this._appId
|
|
63
62
|
if (this._app) {
|
|
64
63
|
return this._app
|
|
65
64
|
}
|
|
66
|
-
const db =
|
|
65
|
+
const db = getAppDB()
|
|
67
66
|
this._app = await db.get(DocumentTypes.APP_METADATA)
|
|
68
67
|
return this._app
|
|
69
68
|
}
|
|
@@ -131,16 +130,19 @@ class Orchestrator {
|
|
|
131
130
|
}
|
|
132
131
|
|
|
133
132
|
module.exports = (input, callback) => {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
133
|
+
const appId = input.data.event.appId
|
|
134
|
+
doInAppContext(appId, () => {
|
|
135
|
+
const automationOrchestrator = new Orchestrator(
|
|
136
|
+
input.data.automation,
|
|
137
|
+
input.data.event
|
|
138
|
+
)
|
|
139
|
+
automationOrchestrator
|
|
140
|
+
.execute()
|
|
141
|
+
.then(response => {
|
|
142
|
+
callback(null, response)
|
|
143
|
+
})
|
|
144
|
+
.catch(err => {
|
|
145
|
+
callback(err)
|
|
146
|
+
})
|
|
147
|
+
})
|
|
146
148
|
}
|
package/src/threads/query.js
CHANGED
|
@@ -3,14 +3,13 @@ threadUtils.threadSetup()
|
|
|
3
3
|
const ScriptRunner = require("../utilities/scriptRunner")
|
|
4
4
|
const { integrations } = require("../integrations")
|
|
5
5
|
const { processStringSync } = require("@budibase/string-templates")
|
|
6
|
-
const
|
|
6
|
+
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
7
7
|
|
|
8
8
|
const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/)
|
|
9
9
|
const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/)
|
|
10
10
|
|
|
11
11
|
class QueryRunner {
|
|
12
12
|
constructor(input, flags = { noRecursiveQuery: false }) {
|
|
13
|
-
this.appId = input.appId
|
|
14
13
|
this.datasource = input.datasource
|
|
15
14
|
this.queryVerb = input.queryVerb
|
|
16
15
|
this.fields = input.fields
|
|
@@ -104,12 +103,11 @@ class QueryRunner {
|
|
|
104
103
|
}
|
|
105
104
|
|
|
106
105
|
async runAnotherQuery(queryId, parameters) {
|
|
107
|
-
const db =
|
|
106
|
+
const db = getAppDB()
|
|
108
107
|
const query = await db.get(queryId)
|
|
109
108
|
const datasource = await db.get(query.datasourceId)
|
|
110
109
|
return new QueryRunner(
|
|
111
110
|
{
|
|
112
|
-
appId: this.appId,
|
|
113
111
|
datasource,
|
|
114
112
|
queryVerb: query.queryVerb,
|
|
115
113
|
fields: query.fields,
|
|
@@ -223,12 +221,14 @@ class QueryRunner {
|
|
|
223
221
|
}
|
|
224
222
|
|
|
225
223
|
module.exports = (input, callback) => {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
224
|
+
doInAppContext(input.appId, () => {
|
|
225
|
+
const Runner = new QueryRunner(input)
|
|
226
|
+
Runner.execute()
|
|
227
|
+
.then(response => {
|
|
228
|
+
callback(null, response)
|
|
229
|
+
})
|
|
230
|
+
.catch(err => {
|
|
231
|
+
callback(err)
|
|
232
|
+
})
|
|
233
|
+
})
|
|
234
234
|
}
|