@budibase/server 1.2.28-alpha.0 → 1.2.30
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__/node-fetch.ts +1 -8
- package/builder/assets/{index.f1c7e247.css → index.08dd0c5e.css} +1 -1
- package/builder/assets/index.3425e514.js +975 -0
- package/builder/index.html +2 -2
- package/coverage/clover.xml +1202 -1206
- package/coverage/coverage-final.json +116 -116
- package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
- package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
- package/coverage/lcov-report/api/controllers/automation.js.html +29 -29
- package/coverage/lcov-report/api/controllers/backup.js.html +5 -5
- package/coverage/lcov-report/api/controllers/cloud.js.html +11 -11
- package/coverage/lcov-report/api/controllers/component.js.html +5 -5
- package/coverage/lcov-report/api/controllers/datasource.js.html +17 -17
- package/coverage/lcov-report/api/controllers/dev.js.html +20 -20
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +8 -8
- package/coverage/lcov-report/api/controllers/layout.js.html +7 -7
- package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
- package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
- package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
- package/coverage/lcov-report/api/controllers/role.js.html +10 -10
- package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
- package/coverage/lcov-report/api/controllers/row/external.js.html +19 -19
- package/coverage/lcov-report/api/controllers/row/index.html +25 -25
- package/coverage/lcov-report/api/controllers/row/internal.js.html +30 -30
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +184 -202
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +10 -10
- package/coverage/lcov-report/api/controllers/row/utils.js.html +7 -16
- package/coverage/lcov-report/api/controllers/screen.js.html +8 -8
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +9 -9
- package/coverage/lcov-report/api/controllers/table/external.js.html +14 -14
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +15 -15
- package/coverage/lcov-report/api/controllers/templates.js.html +6 -6
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +20 -20
- package/coverage/lcov-report/api/controllers/view/utils.js.html +13 -13
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -8
- package/coverage/lcov-report/api/controllers/webhook.js.html +15 -15
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +30 -30
- package/coverage/lcov-report/api/routes/analytics.js.html +11 -8
- package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
- package/coverage/lcov-report/api/routes/auth.js.html +6 -6
- package/coverage/lcov-report/api/routes/automation.js.html +11 -11
- package/coverage/lcov-report/api/routes/backup.js.html +8 -8
- package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
- package/coverage/lcov-report/api/routes/component.js.html +8 -8
- package/coverage/lcov-report/api/routes/datasource.js.html +9 -9
- package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
- package/coverage/lcov-report/api/routes/dev.js.html +13 -13
- package/coverage/lcov-report/api/routes/index.html +7 -7
- package/coverage/lcov-report/api/routes/integration.js.html +8 -8
- package/coverage/lcov-report/api/routes/layout.js.html +8 -8
- package/coverage/lcov-report/api/routes/metadata.js.html +9 -9
- package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
- package/coverage/lcov-report/api/routes/permission.js.html +9 -9
- package/coverage/lcov-report/api/routes/query.js.html +10 -10
- package/coverage/lcov-report/api/routes/role.js.html +9 -9
- package/coverage/lcov-report/api/routes/routing.js.html +8 -8
- package/coverage/lcov-report/api/routes/screen.js.html +9 -9
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +10 -10
- package/coverage/lcov-report/api/routes/templates.js.html +8 -8
- package/coverage/lcov-report/api/routes/user.js.html +8 -8
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +37 -37
- package/coverage/lcov-report/api/routes/view.js.html +10 -10
- package/coverage/lcov-report/api/routes/webhook.js.html +9 -9
- package/coverage/lcov-report/automations/actions.js.html +25 -25
- package/coverage/lcov-report/automations/automationUtils.js.html +8 -8
- package/coverage/lcov-report/automations/bullboard.js.html +17 -17
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +12 -12
- package/coverage/lcov-report/automations/steps/bash.js.html +7 -7
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- 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/loop.js.html +2 -2
- 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 +6 -6
- 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 +18 -18
- 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 +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/inMemoryView.js.html +5 -5
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +9 -9
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +7 -7
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +18 -18
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +13 -13
- package/coverage/lcov-report/db/newid.js.html +2 -2
- package/coverage/lcov-report/db/utils.js.html +11 -11
- 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 +6 -6
- package/coverage/lcov-report/events/utils.js.html +3 -3
- package/coverage/lcov-report/index.html +24 -24
- 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 +5 -5
- package/coverage/lcov-report/middleware/builder.js.html +9 -9
- package/coverage/lcov-report/middleware/currentapp.js.html +49 -49
- package/coverage/lcov-report/middleware/index.html +1 -1
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +5 -5
- package/coverage/lcov-report/middleware/resourceId.js.html +22 -22
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +3 -3
- package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
- 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 +16 -16
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +3 -3
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -9
- 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 +6 -6
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +20 -20
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +6 -6
- 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/rows.js.html +7 -7
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +18 -18
- package/coverage/lcov.info +1520 -1524
- package/dist/api/controllers/analytics.js +27 -1
- package/dist/api/controllers/row/internalSearch.js +0 -5
- package/dist/api/controllers/row/utils.js +1 -3
- package/dist/api/controllers/static/index.js +1 -11
- package/dist/api/controllers/table/external.js +1 -1
- package/dist/api/routes/analytics.js +1 -0
- package/dist/automations/logging/index.js +0 -3
- package/dist/integrations/airtable.js +5 -0
- package/dist/integrations/base/sql.js +4 -5
- package/dist/integrations/base/utils.js +27 -13
- package/dist/integrations/microsoftSqlServer.js +2 -5
- package/dist/integrations/mysql.js +2 -2
- package/dist/integrations/postgres.js +2 -5
- package/dist/package.json +7 -7
- package/dist/tests/utilities/TestConfiguration.js +8 -11
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/src/api/controllers/analytics.ts +27 -0
- package/src/api/controllers/row/internalSearch.js +0 -6
- package/src/api/controllers/row/utils.js +1 -4
- package/src/api/controllers/static/index.ts +1 -11
- package/src/api/controllers/table/external.js +1 -1
- package/src/api/routes/analytics.js +1 -0
- package/src/api/routes/tests/analytics.spec.js +59 -0
- package/src/api/routes/tests/static.spec.js +0 -10
- package/src/automations/logging/index.ts +0 -3
- package/src/integrations/airtable.ts +5 -0
- package/src/integrations/base/sql.ts +4 -5
- package/src/integrations/base/utils.ts +19 -9
- package/src/integrations/microsoftSqlServer.ts +2 -3
- package/src/integrations/mysql.ts +1 -1
- package/src/integrations/postgres.ts +1 -2
- package/src/integrations/queries/sql.ts +1 -0
- package/src/integrations/tests/airtable.spec.js +1 -1
- package/src/integrations/tests/sql.spec.js +1 -1
- package/src/tests/utilities/TestConfiguration.js +10 -17
- package/builder/assets/index.66b1c771.js +0 -977
- package/dist/integrations/base/query.js +0 -27
- package/src/api/routes/tests/internalSearch.spec.js +0 -157
- package/src/integrations/base/query.ts +0 -17
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.30",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"license": "GPL-3.0",
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
80
|
-
"@budibase/backend-core": "1.2.
|
|
81
|
-
"@budibase/client": "1.2.
|
|
82
|
-
"@budibase/pro": "1.2.
|
|
83
|
-
"@budibase/string-templates": "1.2.
|
|
84
|
-
"@budibase/types": "1.2.
|
|
80
|
+
"@budibase/backend-core": "^1.2.30",
|
|
81
|
+
"@budibase/client": "^1.2.30",
|
|
82
|
+
"@budibase/pro": "1.2.29",
|
|
83
|
+
"@budibase/string-templates": "^1.2.30",
|
|
84
|
+
"@budibase/types": "^1.2.30",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"google-auth-library": "7.12.0",
|
|
107
107
|
"google-spreadsheet": "3.2.0",
|
|
108
108
|
"jimp": "0.16.1",
|
|
109
|
-
"joi": "17.
|
|
109
|
+
"joi": "17.2.1",
|
|
110
110
|
"js-yaml": "4.1.0",
|
|
111
111
|
"jsonschema": "1.4.0",
|
|
112
112
|
"knex": "0.95.15",
|
|
@@ -195,5 +195,5 @@
|
|
|
195
195
|
"optionalDependencies": {
|
|
196
196
|
"oracledb": "5.3.0"
|
|
197
197
|
},
|
|
198
|
-
"gitHead": "
|
|
198
|
+
"gitHead": "cf73b9fa2db06bcd836fd725dc02d1196b4f7b01"
|
|
199
199
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { events } from "@budibase/backend-core"
|
|
2
|
+
import { AnalyticsPingRequest, PingSource } from "@budibase/types"
|
|
3
|
+
import { DocumentTypes, isDevAppID } from "../../db/utils"
|
|
4
|
+
import { context } from "@budibase/backend-core"
|
|
2
5
|
|
|
3
6
|
export const isEnabled = async (ctx: any) => {
|
|
4
7
|
const enabled = await events.analytics.enabled()
|
|
@@ -6,3 +9,27 @@ export const isEnabled = async (ctx: any) => {
|
|
|
6
9
|
enabled,
|
|
7
10
|
}
|
|
8
11
|
}
|
|
12
|
+
|
|
13
|
+
export const ping = async (ctx: any) => {
|
|
14
|
+
const body = ctx.request.body as AnalyticsPingRequest
|
|
15
|
+
switch (body.source) {
|
|
16
|
+
case PingSource.APP: {
|
|
17
|
+
const db = context.getAppDB({ skip_setup: true })
|
|
18
|
+
const appInfo = await db.get(DocumentTypes.APP_METADATA)
|
|
19
|
+
let appId = context.getAppId()
|
|
20
|
+
|
|
21
|
+
if (isDevAppID(appId)) {
|
|
22
|
+
await events.serve.servedAppPreview(appInfo, body.timezone)
|
|
23
|
+
} else {
|
|
24
|
+
await events.serve.servedApp(appInfo, body.timezone)
|
|
25
|
+
}
|
|
26
|
+
break
|
|
27
|
+
}
|
|
28
|
+
case PingSource.BUILDER: {
|
|
29
|
+
await events.serve.servedBuilder(body.timezone)
|
|
30
|
+
break
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
ctx.status = 200
|
|
35
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const { SearchIndexes } = require("../../../db/utils")
|
|
2
|
-
const { removeKeyNumbering } = require("./utils")
|
|
3
2
|
const fetch = require("node-fetch")
|
|
4
3
|
const { getCouchInfo } = require("@budibase/backend-core/db")
|
|
5
4
|
const { getAppId } = require("@budibase/backend-core/context")
|
|
@@ -198,8 +197,6 @@ class QueryBuilder {
|
|
|
198
197
|
|
|
199
198
|
function build(structure, queryFn) {
|
|
200
199
|
for (let [key, value] of Object.entries(structure)) {
|
|
201
|
-
// check for new format - remove numbering if needed
|
|
202
|
-
key = removeKeyNumbering(key)
|
|
203
200
|
key = builder.preprocess(key.replace(/ /g, "_"), {
|
|
204
201
|
escape: true,
|
|
205
202
|
})
|
|
@@ -313,9 +310,6 @@ class QueryBuilder {
|
|
|
313
310
|
}
|
|
314
311
|
}
|
|
315
312
|
|
|
316
|
-
// exported for unit testing
|
|
317
|
-
exports.QueryBuilder = QueryBuilder
|
|
318
|
-
|
|
319
313
|
/**
|
|
320
314
|
* Executes a lucene search query.
|
|
321
315
|
* @param url The query URL
|
|
@@ -3,9 +3,8 @@ const { cloneDeep } = require("lodash/fp")
|
|
|
3
3
|
const { InternalTables } = require("../../../db/utils")
|
|
4
4
|
const userController = require("../user")
|
|
5
5
|
const { FieldTypes } = require("../../../constants")
|
|
6
|
+
const { makeExternalQuery } = require("../../../integrations/base/utils")
|
|
6
7
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
7
|
-
const { makeExternalQuery } = require("../../../integrations/base/query")
|
|
8
|
-
const { removeKeyNumbering } = require("../../../integrations/base/utils")
|
|
9
8
|
|
|
10
9
|
validateJs.extend(validateJs.validators.datetime, {
|
|
11
10
|
parse: function (value) {
|
|
@@ -17,8 +16,6 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
17
16
|
},
|
|
18
17
|
})
|
|
19
18
|
|
|
20
|
-
exports.removeKeyNumbering = removeKeyNumbering
|
|
21
|
-
|
|
22
19
|
exports.getDatasourceAndQuery = async json => {
|
|
23
20
|
const datasourceId = json.endpoint.datasourceId
|
|
24
21
|
const db = getAppDB()
|
|
@@ -14,11 +14,10 @@ const env = require("../../../environment")
|
|
|
14
14
|
const { clientLibraryPath } = require("../../../utilities")
|
|
15
15
|
const { upload } = require("../../../utilities/fileSystem")
|
|
16
16
|
const { attachmentsRelativeURL } = require("../../../utilities")
|
|
17
|
-
const { DocumentTypes
|
|
17
|
+
const { DocumentTypes } = require("../../../db/utils")
|
|
18
18
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
19
19
|
const { setCookie, clearCookie } = require("@budibase/backend-core/utils")
|
|
20
20
|
const AWS = require("aws-sdk")
|
|
21
|
-
import { events } from "@budibase/backend-core"
|
|
22
21
|
|
|
23
22
|
const fs = require("fs")
|
|
24
23
|
const {
|
|
@@ -75,9 +74,6 @@ export const toggleBetaUiFeature = async function (ctx: any) {
|
|
|
75
74
|
export const serveBuilder = async function (ctx: any) {
|
|
76
75
|
const builderPath = resolve(TOP_LEVEL_PATH, "builder")
|
|
77
76
|
await send(ctx, ctx.file, { root: builderPath })
|
|
78
|
-
if (ctx.file === "index.html") {
|
|
79
|
-
await events.serve.servedBuilder()
|
|
80
|
-
}
|
|
81
77
|
}
|
|
82
78
|
|
|
83
79
|
export const uploadFile = async function (ctx: any) {
|
|
@@ -126,12 +122,6 @@ export const serveApp = async function (ctx: any) {
|
|
|
126
122
|
// just return the app info for jest to assert on
|
|
127
123
|
ctx.body = appInfo
|
|
128
124
|
}
|
|
129
|
-
|
|
130
|
-
if (isDevAppID(appInfo.appId)) {
|
|
131
|
-
await events.serve.servedAppPreview(appInfo)
|
|
132
|
-
} else {
|
|
133
|
-
await events.serve.servedApp(appInfo)
|
|
134
|
-
}
|
|
135
125
|
}
|
|
136
126
|
|
|
137
127
|
export const serveClientLibrary = async function (ctx: any) {
|
|
@@ -14,7 +14,7 @@ const {
|
|
|
14
14
|
FieldTypes,
|
|
15
15
|
RelationshipTypes,
|
|
16
16
|
} = require("../../../constants")
|
|
17
|
-
const { makeExternalQuery } = require("../../../integrations/base/
|
|
17
|
+
const { makeExternalQuery } = require("../../../integrations/base/utils")
|
|
18
18
|
const { cloneDeep } = require("lodash/fp")
|
|
19
19
|
const csvParser = require("../../../utilities/csvParser")
|
|
20
20
|
const { handleRequest } = require("../row/external")
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const setup = require("./utilities")
|
|
2
|
+
const { events, constants, db } = require("@budibase/backend-core")
|
|
3
|
+
|
|
4
|
+
describe("/static", () => {
|
|
5
|
+
let request = setup.getRequest()
|
|
6
|
+
let config = setup.getConfig()
|
|
7
|
+
let app
|
|
8
|
+
|
|
9
|
+
const timezone = "Europe/London"
|
|
10
|
+
|
|
11
|
+
afterAll(setup.afterAll)
|
|
12
|
+
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
app = await config.init()
|
|
15
|
+
jest.clearAllMocks()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
describe("/ping", () => {
|
|
19
|
+
it("should ping from builder", async () => {
|
|
20
|
+
await request
|
|
21
|
+
.post("/api/bbtel/ping")
|
|
22
|
+
.send({source: "builder", timezone})
|
|
23
|
+
.set(config.defaultHeaders())
|
|
24
|
+
.expect(200)
|
|
25
|
+
|
|
26
|
+
expect(events.serve.servedBuilder).toBeCalledTimes(1)
|
|
27
|
+
expect(events.serve.servedBuilder).toBeCalledWith(timezone)
|
|
28
|
+
expect(events.serve.servedApp).not.toBeCalled()
|
|
29
|
+
expect(events.serve.servedAppPreview).not.toBeCalled()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it("should ping from app preview", async () => {
|
|
33
|
+
await request
|
|
34
|
+
.post("/api/bbtel/ping")
|
|
35
|
+
.send({source: "app", timezone})
|
|
36
|
+
.set(config.defaultHeaders())
|
|
37
|
+
.expect(200)
|
|
38
|
+
|
|
39
|
+
expect(events.serve.servedAppPreview).toBeCalledTimes(1)
|
|
40
|
+
expect(events.serve.servedAppPreview).toBeCalledWith(config.getApp(), timezone)
|
|
41
|
+
expect(events.serve.servedApp).not.toBeCalled()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it("should ping from app", async () => {
|
|
45
|
+
const headers = config.defaultHeaders()
|
|
46
|
+
headers[constants.Headers.APP_ID] = config.prodAppId
|
|
47
|
+
|
|
48
|
+
await request
|
|
49
|
+
.post("/api/bbtel/ping")
|
|
50
|
+
.send({source: "app", timezone})
|
|
51
|
+
.set(headers)
|
|
52
|
+
.expect(200)
|
|
53
|
+
|
|
54
|
+
expect(events.serve.servedApp).toBeCalledTimes(1)
|
|
55
|
+
expect(events.serve.servedApp).toBeCalledWith(config.getProdApp(), timezone)
|
|
56
|
+
expect(events.serve.servedAppPreview).not.toBeCalled()
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
})
|
|
@@ -36,7 +36,6 @@ describe("/static", () => {
|
|
|
36
36
|
.expect(200)
|
|
37
37
|
|
|
38
38
|
expect(res.text).toContain("<title>Budibase</title>")
|
|
39
|
-
expect(events.serve.servedBuilder).toBeCalledTimes(1)
|
|
40
39
|
})
|
|
41
40
|
})
|
|
42
41
|
|
|
@@ -56,9 +55,6 @@ describe("/static", () => {
|
|
|
56
55
|
.expect(200)
|
|
57
56
|
|
|
58
57
|
expect(res.body.appId).toBe(config.prodAppId)
|
|
59
|
-
expect(events.serve.servedApp).toBeCalledTimes(1)
|
|
60
|
-
expect(events.serve.servedApp).toBeCalledWith(res.body)
|
|
61
|
-
expect(events.serve.servedAppPreview).not.toBeCalled()
|
|
62
58
|
})
|
|
63
59
|
|
|
64
60
|
it("should serve the app by url", async () => {
|
|
@@ -71,9 +67,6 @@ describe("/static", () => {
|
|
|
71
67
|
.expect(200)
|
|
72
68
|
|
|
73
69
|
expect(res.body.appId).toBe(config.prodAppId)
|
|
74
|
-
expect(events.serve.servedApp).toBeCalledTimes(1)
|
|
75
|
-
expect(events.serve.servedApp).toBeCalledWith(res.body)
|
|
76
|
-
expect(events.serve.servedAppPreview).not.toBeCalled()
|
|
77
70
|
})
|
|
78
71
|
|
|
79
72
|
it("should serve the app preview by id", async () => {
|
|
@@ -83,9 +76,6 @@ describe("/static", () => {
|
|
|
83
76
|
.expect(200)
|
|
84
77
|
|
|
85
78
|
expect(res.body.appId).toBe(config.appId)
|
|
86
|
-
expect(events.serve.servedAppPreview).toBeCalledTimes(1)
|
|
87
|
-
expect(events.serve.servedAppPreview).toBeCalledWith(res.body)
|
|
88
|
-
expect(events.serve.servedApp).not.toBeCalled()
|
|
89
79
|
})
|
|
90
80
|
})
|
|
91
81
|
|
|
@@ -23,9 +23,6 @@ export async function checkAppMetadata(apps: App[]) {
|
|
|
23
23
|
for (let [key, errors] of Object.entries(metadata.automationErrors)) {
|
|
24
24
|
const updated = []
|
|
25
25
|
for (let error of errors) {
|
|
26
|
-
if (!error) {
|
|
27
|
-
continue
|
|
28
|
-
}
|
|
29
26
|
const startDate = error.split(dbUtils.SEPARATOR)[2]
|
|
30
27
|
if (startDate > maxStartDate) {
|
|
31
28
|
updated.push(error)
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
import { isIsoDateString, SqlClients } from "../utils"
|
|
11
11
|
import SqlTableQueryBuilder from "./sqlTable"
|
|
12
12
|
import environment from "../../environment"
|
|
13
|
-
import { removeKeyNumbering } from "./utils"
|
|
14
13
|
|
|
15
14
|
const envLimit = environment.SQL_MAX_ROWS
|
|
16
15
|
? parseInt(environment.SQL_MAX_ROWS)
|
|
@@ -134,13 +133,12 @@ class InternalBuilder {
|
|
|
134
133
|
fn: (key: string, value: any) => void
|
|
135
134
|
) {
|
|
136
135
|
for (let [key, value] of Object.entries(structure)) {
|
|
137
|
-
const
|
|
138
|
-
const isRelationshipField = updatedKey.includes(".")
|
|
136
|
+
const isRelationshipField = key.includes(".")
|
|
139
137
|
if (!opts.relationship && !isRelationshipField) {
|
|
140
|
-
fn(`${opts.tableName}.${
|
|
138
|
+
fn(`${opts.tableName}.${key}`, value)
|
|
141
139
|
}
|
|
142
140
|
if (opts.relationship && isRelationshipField) {
|
|
143
|
-
fn(
|
|
141
|
+
fn(key, value)
|
|
144
142
|
}
|
|
145
143
|
}
|
|
146
144
|
}
|
|
@@ -584,3 +582,4 @@ class SqlQueryBuilder extends SqlTableQueryBuilder {
|
|
|
584
582
|
}
|
|
585
583
|
|
|
586
584
|
export default SqlQueryBuilder
|
|
585
|
+
module.exports = SqlQueryBuilder
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
import { QueryJson } from "../../definitions/datasource"
|
|
2
|
+
import { Datasource } from "../../definitions/common"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
module DatasourceUtils {
|
|
5
|
+
const { integrations } = require("../index")
|
|
6
|
+
|
|
7
|
+
export async function makeExternalQuery(
|
|
8
|
+
datasource: Datasource,
|
|
9
|
+
json: QueryJson
|
|
10
|
+
) {
|
|
11
|
+
const Integration = integrations[datasource.source]
|
|
12
|
+
// query is the opinionated function
|
|
13
|
+
if (Integration.prototype.query) {
|
|
14
|
+
const integration = new Integration(datasource.config)
|
|
15
|
+
return integration.query(json)
|
|
16
|
+
} else {
|
|
17
|
+
throw "Datasource does not support query."
|
|
18
|
+
}
|
|
11
19
|
}
|
|
20
|
+
|
|
21
|
+
module.exports.makeExternalQuery = makeExternalQuery
|
|
12
22
|
}
|
|
@@ -15,10 +15,10 @@ import {
|
|
|
15
15
|
} from "./utils"
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
17
|
import { Table, TableSchema } from "../definitions/common"
|
|
18
|
-
import Sql from "./base/sql"
|
|
19
18
|
|
|
20
19
|
module MSSQLModule {
|
|
21
20
|
const sqlServer = require("mssql")
|
|
21
|
+
const Sql = require("./base/sql")
|
|
22
22
|
const DEFAULT_SCHEMA = "dbo"
|
|
23
23
|
|
|
24
24
|
interface MSSQLConfig {
|
|
@@ -96,8 +96,7 @@ module MSSQLModule {
|
|
|
96
96
|
class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|
97
97
|
private readonly config: MSSQLConfig
|
|
98
98
|
private index: number = 0
|
|
99
|
-
|
|
100
|
-
private client: any
|
|
99
|
+
static pool: any
|
|
101
100
|
public tables: Record<string, Table> = {}
|
|
102
101
|
public schemaErrors: Record<string, string> = {}
|
|
103
102
|
|
|
@@ -16,10 +16,10 @@ import {
|
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
17
|
import dayjs from "dayjs"
|
|
18
18
|
const { NUMBER_REGEX } = require("../utilities")
|
|
19
|
-
import Sql from "./base/sql"
|
|
20
19
|
|
|
21
20
|
module MySQLModule {
|
|
22
21
|
const mysql = require("mysql2/promise")
|
|
22
|
+
const Sql = require("./base/sql")
|
|
23
23
|
|
|
24
24
|
interface MySQLConfig {
|
|
25
25
|
host: string
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
SqlClients,
|
|
15
15
|
} from "./utils"
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
|
-
import Sql from "./base/sql"
|
|
18
17
|
|
|
19
18
|
module PostgresModule {
|
|
20
19
|
const { Client, types } = require("pg")
|
|
20
|
+
const Sql = require("./base/sql")
|
|
21
21
|
const { escapeDangerousCharacters } = require("../utilities")
|
|
22
22
|
|
|
23
23
|
// Return "date" and "timestamp" types as plain strings.
|
|
@@ -117,7 +117,6 @@ module PostgresModule {
|
|
|
117
117
|
private readonly client: any
|
|
118
118
|
private readonly config: PostgresConfig
|
|
119
119
|
private index: number = 1
|
|
120
|
-
private open: boolean
|
|
121
120
|
public tables: Record<string, Table> = {}
|
|
122
121
|
public schemaErrors: Record<string, string> = {}
|
|
123
122
|
|
|
@@ -25,6 +25,7 @@ const newid = require("../../db/newid")
|
|
|
25
25
|
const context = require("@budibase/backend-core/context")
|
|
26
26
|
const { generateDevInfoID, SEPARATOR } = require("@budibase/backend-core/db")
|
|
27
27
|
const { encrypt } = require("@budibase/backend-core/encryption")
|
|
28
|
+
const { DocumentTypes } = require("../../db/utils")
|
|
28
29
|
|
|
29
30
|
const GLOBAL_USER_ID = "us_uuid1"
|
|
30
31
|
const EMAIL = "babs@babs.com"
|
|
@@ -53,6 +54,10 @@ class TestConfiguration {
|
|
|
53
54
|
return this.app
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
getProdApp() {
|
|
58
|
+
return this.prodApp
|
|
59
|
+
}
|
|
60
|
+
|
|
56
61
|
getAppId() {
|
|
57
62
|
return this.appId
|
|
58
63
|
}
|
|
@@ -106,19 +111,11 @@ class TestConfiguration {
|
|
|
106
111
|
|
|
107
112
|
// UTILS
|
|
108
113
|
|
|
109
|
-
async _req(body, params, controlFunc
|
|
114
|
+
async _req(body, params, controlFunc) {
|
|
110
115
|
// create a fake request ctx
|
|
111
116
|
const request = {}
|
|
112
|
-
|
|
113
|
-
// set the app id
|
|
114
|
-
let appId
|
|
115
|
-
if (opts.prodApp) {
|
|
116
|
-
appId = this.prodAppId
|
|
117
|
-
} else {
|
|
118
|
-
appId = this.appId
|
|
119
|
-
}
|
|
117
|
+
const appId = this.appId
|
|
120
118
|
request.appId = appId
|
|
121
|
-
|
|
122
119
|
// fake cookies, we don't need them
|
|
123
120
|
request.cookies = { set: () => {}, get: () => {} }
|
|
124
121
|
request.config = { jwtSecret: env.JWT_SECRET }
|
|
@@ -344,14 +341,10 @@ class TestConfiguration {
|
|
|
344
341
|
await this._req(null, null, controllers.deploy.deployApp)
|
|
345
342
|
const prodAppId = this.getAppId().replace("_dev", "")
|
|
346
343
|
this.prodAppId = prodAppId
|
|
344
|
+
|
|
347
345
|
return context.doInAppContext(prodAppId, async () => {
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
{ appId: prodAppId },
|
|
351
|
-
controllers.app.fetchAppPackage,
|
|
352
|
-
{ prodApp: true }
|
|
353
|
-
)
|
|
354
|
-
return appPackage.application
|
|
346
|
+
const db = context.getProdAppDB()
|
|
347
|
+
return await db.get(DocumentTypes.APP_METADATA)
|
|
355
348
|
})
|
|
356
349
|
}
|
|
357
350
|
|