@budibase/server 1.0.212-alpha.14 → 1.0.212-alpha.15
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/builder/assets/{index.1f366fcc.js → index.83448a6c.js} +1 -1
- package/builder/index.html +1 -1
- package/coverage/clover.xml +115 -97
- package/coverage/coverage-final.json +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +1 -1
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- 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/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/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/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.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/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.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 +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- 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/delay.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/loop.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 +1 -1
- 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 +1 -1
- 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/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +1 -1
- package/coverage/lcov-report/db/utils.js.html +1 -1
- 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 +19 -19
- 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/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- 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 +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/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +19 -19
- package/coverage/lcov-report/threads/query.js.html +147 -18
- package/coverage/lcov-report/threads/utils.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 +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- 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/rows.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov.info +188 -154
- package/dist/api/controllers/query/index.js +19 -0
- package/dist/package.json +6 -6
- package/dist/threads/query.js +35 -5
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/api/controllers/query/index.ts +23 -1
- package/src/module.d.ts +1 -0
- package/src/threads/query.js +50 -7
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.212-alpha.
|
|
4
|
+
"version": "1.0.212-alpha.15",
|
|
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.0.212-alpha.
|
|
81
|
-
"@budibase/client": "^1.0.212-alpha.
|
|
82
|
-
"@budibase/pro": "1.0.212-alpha.
|
|
83
|
-
"@budibase/string-templates": "^1.0.212-alpha.
|
|
84
|
-
"@budibase/types": "^1.0.212-alpha.
|
|
80
|
+
"@budibase/backend-core": "^1.0.212-alpha.15",
|
|
81
|
+
"@budibase/client": "^1.0.212-alpha.15",
|
|
82
|
+
"@budibase/pro": "1.0.212-alpha.14",
|
|
83
|
+
"@budibase/string-templates": "^1.0.212-alpha.15",
|
|
84
|
+
"@budibase/types": "^1.0.212-alpha.15",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -195,5 +195,5 @@
|
|
|
195
195
|
"optionalDependencies": {
|
|
196
196
|
"oracledb": "5.3.0"
|
|
197
197
|
},
|
|
198
|
-
"gitHead": "
|
|
198
|
+
"gitHead": "95300e2d7101504da960c7a4f2c9cdf06e3058a5"
|
|
199
199
|
}
|
|
@@ -8,6 +8,8 @@ import { QUERY_THREAD_TIMEOUT } from "../../../environment"
|
|
|
8
8
|
import { getAppDB } from "@budibase/backend-core/context"
|
|
9
9
|
import { quotas } from "@budibase/pro"
|
|
10
10
|
import { events } from "@budibase/backend-core"
|
|
11
|
+
import { getCookie } from "@budibase/backend-core/utils"
|
|
12
|
+
import { Cookies, Configs } from "@budibase/backend-core/constants"
|
|
11
13
|
|
|
12
14
|
const Runner = new Thread(ThreadType.QUERY, {
|
|
13
15
|
timeoutMs: QUERY_THREAD_TIMEOUT || 10000,
|
|
@@ -110,6 +112,21 @@ export async function find(ctx: any) {
|
|
|
110
112
|
ctx.body = query
|
|
111
113
|
}
|
|
112
114
|
|
|
115
|
+
//Required to discern between OIDC OAuth config entries
|
|
116
|
+
function getOAuthConfigCookieId(ctx: any) {
|
|
117
|
+
if (ctx.user.providerType === Configs.OIDC) {
|
|
118
|
+
return getCookie(ctx, Cookies.OIDC_CONFIG)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function getAuthConfig(ctx: any) {
|
|
123
|
+
const authCookie = getCookie(ctx, Cookies.Auth)
|
|
124
|
+
let authConfigCtx: any = {}
|
|
125
|
+
authConfigCtx["configId"] = getOAuthConfigCookieId(ctx)
|
|
126
|
+
authConfigCtx["sessionId"] = authCookie ? authCookie.sessionId : null
|
|
127
|
+
return authConfigCtx
|
|
128
|
+
}
|
|
129
|
+
|
|
113
130
|
export async function preview(ctx: any) {
|
|
114
131
|
const db = getAppDB()
|
|
115
132
|
|
|
@@ -119,6 +136,8 @@ export async function preview(ctx: any) {
|
|
|
119
136
|
// this stops dynamic variables from calling the same query
|
|
120
137
|
const { fields, parameters, queryVerb, transformer, queryId } = query
|
|
121
138
|
|
|
139
|
+
const authConfigCtx: any = getAuthConfig(ctx)
|
|
140
|
+
|
|
122
141
|
try {
|
|
123
142
|
const runFn = () =>
|
|
124
143
|
Runner.run({
|
|
@@ -131,9 +150,9 @@ export async function preview(ctx: any) {
|
|
|
131
150
|
queryId,
|
|
132
151
|
ctx: {
|
|
133
152
|
user: ctx.user,
|
|
153
|
+
auth: { ...authConfigCtx },
|
|
134
154
|
},
|
|
135
155
|
})
|
|
136
|
-
|
|
137
156
|
const { rows, keys, info, extra } = await quotas.addQuery(runFn)
|
|
138
157
|
await events.query.previewed(datasource, query)
|
|
139
158
|
ctx.body = {
|
|
@@ -153,6 +172,8 @@ async function execute(ctx: any, opts = { rowsOnly: false }) {
|
|
|
153
172
|
const query = await db.get(ctx.params.queryId)
|
|
154
173
|
const datasource = await db.get(query.datasourceId)
|
|
155
174
|
|
|
175
|
+
const authConfigCtx: any = getAuthConfig(ctx)
|
|
176
|
+
|
|
156
177
|
const enrichedParameters = ctx.request.body.parameters || {}
|
|
157
178
|
// make sure parameters are fully enriched with defaults
|
|
158
179
|
if (query && query.parameters) {
|
|
@@ -177,6 +198,7 @@ async function execute(ctx: any, opts = { rowsOnly: false }) {
|
|
|
177
198
|
queryId: ctx.params.queryId,
|
|
178
199
|
ctx: {
|
|
179
200
|
user: ctx.user,
|
|
201
|
+
auth: { ...authConfigCtx },
|
|
180
202
|
},
|
|
181
203
|
})
|
|
182
204
|
|
package/src/module.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ declare module "@budibase/backend-core/constants"
|
|
|
8
8
|
declare module "@budibase/backend-core/auth"
|
|
9
9
|
declare module "@budibase/backend-core/sessions"
|
|
10
10
|
declare module "@budibase/backend-core/encryption"
|
|
11
|
+
declare module "@budibase/backend-core/utils"
|
|
11
12
|
declare module "@budibase/backend-core/redis"
|
package/src/threads/query.js
CHANGED
|
@@ -4,6 +4,12 @@ const ScriptRunner = require("../utilities/scriptRunner")
|
|
|
4
4
|
const { integrations } = require("../integrations")
|
|
5
5
|
const { processStringSync } = require("@budibase/string-templates")
|
|
6
6
|
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
7
|
+
const {
|
|
8
|
+
refreshOAuthToken,
|
|
9
|
+
updateUserOAuth,
|
|
10
|
+
} = require("@budibase/backend-core/auth")
|
|
11
|
+
const { getGlobalIDFromUserMetadataID } = require("../db/utils")
|
|
12
|
+
|
|
7
13
|
const { isSQL } = require("../integrations/utils")
|
|
8
14
|
const {
|
|
9
15
|
enrichQueryFields,
|
|
@@ -28,10 +34,12 @@ class QueryRunner {
|
|
|
28
34
|
// it can be
|
|
29
35
|
this.queryResponse = {}
|
|
30
36
|
this.hasRerun = false
|
|
37
|
+
this.hasRefreshedOAuth = false
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
async execute() {
|
|
34
41
|
let { datasource, fields, queryVerb, transformer } = this
|
|
42
|
+
|
|
35
43
|
const Integration = integrations[datasource.source]
|
|
36
44
|
if (!Integration) {
|
|
37
45
|
throw "Integration type does not exist."
|
|
@@ -98,14 +106,24 @@ class QueryRunner {
|
|
|
98
106
|
}
|
|
99
107
|
|
|
100
108
|
// if the request fails we retry once, invalidating the cached value
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
109
|
+
if (info && info.code >= 400 && !this.hasRerun) {
|
|
110
|
+
if (
|
|
111
|
+
this.ctx.user?.provider &&
|
|
112
|
+
info.code === 401 &&
|
|
113
|
+
!this.hasRefreshedOAuth
|
|
114
|
+
) {
|
|
115
|
+
// Attempt to refresh the access token from the provider
|
|
116
|
+
this.hasRefreshedOAuth = true
|
|
117
|
+
const authResponse = await this.refreshOAuth2(this.ctx)
|
|
118
|
+
|
|
119
|
+
if (!authResponse || authResponse.err) {
|
|
120
|
+
// In this event the user may have oAuth issues that
|
|
121
|
+
// could require re-authenticating with their provider.
|
|
122
|
+
throw new Error("OAuth2 access token could not be refreshed")
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
107
126
|
this.hasRerun = true
|
|
108
|
-
// invalidate the cache value
|
|
109
127
|
await threadUtils.invalidateDynamicVariables(this.cachedVariables)
|
|
110
128
|
return this.execute()
|
|
111
129
|
}
|
|
@@ -151,6 +169,31 @@ class QueryRunner {
|
|
|
151
169
|
).execute()
|
|
152
170
|
}
|
|
153
171
|
|
|
172
|
+
async refreshOAuth2(ctx) {
|
|
173
|
+
const { oauth2, providerType, _id } = ctx.user
|
|
174
|
+
const { configId } = ctx.auth
|
|
175
|
+
|
|
176
|
+
if (!providerType || !oauth2?.refreshToken) {
|
|
177
|
+
console.error("No refresh token found for authenticated user")
|
|
178
|
+
return
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const resp = await refreshOAuthToken(
|
|
182
|
+
oauth2.refreshToken,
|
|
183
|
+
providerType,
|
|
184
|
+
configId
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
// Refresh session flow. Should be in same location as refreshOAuthToken
|
|
188
|
+
// There are several other properties available in 'resp'
|
|
189
|
+
if (!resp.error) {
|
|
190
|
+
const globalUserId = getGlobalIDFromUserMetadataID(_id)
|
|
191
|
+
await updateUserOAuth(globalUserId, resp)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return resp
|
|
195
|
+
}
|
|
196
|
+
|
|
154
197
|
async getDynamicVariable(variable) {
|
|
155
198
|
let { parameters } = this
|
|
156
199
|
const queryId = variable.queryId,
|