@budibase/server 1.0.80-alpha.1 → 1.0.80
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 +0 -1
- package/builder/assets/index.22a39cc9.js +1352 -0
- package/builder/assets/{index.c57242d4.css → index.c8d1e8f0.css} +2 -2
- package/builder/assets/{vendor.a7c6ad0a.js → vendor.20f80cec.js} +216 -190
- package/builder/index.html +3 -3
- package/coverage/clover.xml +2327 -2390
- package/coverage/coverage-final.json +137 -138
- package/coverage/lcov-report/api/controllers/analytics.js.html +6 -6
- package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
- package/coverage/lcov-report/api/controllers/application.js.html +149 -152
- package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
- package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
- package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
- 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 +16 -16
- package/coverage/lcov-report/api/controllers/dev.js.html +19 -19
- package/coverage/lcov-report/api/controllers/index.html +16 -16
- package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
- package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
- 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/index.js.html +26 -26
- package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
- package/coverage/lcov-report/api/controllers/role.js.html +9 -9
- package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
- package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
- package/coverage/lcov-report/api/controllers/row/index.html +27 -27
- package/coverage/lcov-report/api/controllers/row/index.js.html +46 -46
- package/coverage/lcov-report/api/controllers/row/internal.js.html +82 -94
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +204 -204
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -24
- package/coverage/lcov-report/api/controllers/row/utils.js.html +29 -29
- package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +49 -49
- package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
- package/coverage/lcov-report/api/controllers/table/index.html +11 -11
- package/coverage/lcov-report/api/controllers/table/index.js.html +44 -47
- package/coverage/lcov-report/api/controllers/table/internal.js.html +50 -50
- package/coverage/lcov-report/api/controllers/table/utils.js.html +80 -80
- package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
- package/coverage/lcov-report/api/controllers/user.js.html +19 -19
- 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 +14 -14
- package/coverage/lcov-report/api/controllers/view/utils.js.html +12 -12
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +27 -18
- package/coverage/lcov-report/api/index.html +10 -10
- package/coverage/lcov-report/api/index.js.html +28 -37
- package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
- package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
- package/coverage/lcov-report/api/routes/application.js.html +9 -9
- package/coverage/lcov-report/api/routes/auth.js.html +6 -6
- package/coverage/lcov-report/api/routes/automation.js.html +109 -19
- 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 +156 -18
- 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 +35 -35
- package/coverage/lcov-report/api/routes/index.js.html +32 -38
- 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 +58 -16
- package/coverage/lcov-report/api/routes/query.js.html +10 -10
- package/coverage/lcov-report/api/routes/role.js.html +78 -15
- package/coverage/lcov-report/api/routes/routing.js.html +8 -8
- package/coverage/lcov-report/api/routes/row.js.html +14 -17
- package/coverage/lcov-report/api/routes/screen.js.html +95 -14
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +13 -13
- package/coverage/lcov-report/api/routes/table.js.html +62 -17
- 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/view.js.html +10 -10
- package/coverage/lcov-report/api/routes/webhook.js.html +62 -14
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +7 -7
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
- package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
- package/coverage/lcov-report/automations/steps/filter.js.html +9 -12
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +11 -11
- 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 +26 -26
- package/coverage/lcov-report/automations/utils.js.html +35 -35
- package/coverage/lcov-report/constants/index.html +5 -5
- package/coverage/lcov-report/constants/index.js.html +28 -40
- package/coverage/lcov-report/constants/layouts.js.html +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
- package/coverage/lcov-report/db/index.html +15 -15
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +21 -21
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +36 -36
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +30 -30
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +87 -123
- 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 +8 -8
- package/coverage/lcov-report/events/utils.js.html +18 -18
- package/coverage/lcov-report/index.html +74 -89
- 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/authorized.js.html +29 -29
- package/coverage/lcov-report/middleware/builder.js.html +16 -16
- package/coverage/lcov-report/middleware/currentapp.js.html +44 -44
- package/coverage/lcov-report/middleware/index.html +1 -1
- package/coverage/lcov-report/middleware/joi-validator.js.html +14 -14
- package/coverage/lcov-report/middleware/resourceId.js.html +29 -29
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +17 -17
- package/coverage/lcov-report/middleware/utils.js.html +4 -4
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +19 -19
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +39 -123
- package/coverage/lcov-report/threads/utils.js.html +14 -14
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
- package/coverage/lcov-report/utilities/global.js.html +28 -28
- package/coverage/lcov-report/utilities/index.html +18 -18
- package/coverage/lcov-report/utilities/index.js.html +24 -24
- 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 +60 -60
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +13 -13
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +12 -12
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +8 -8
- 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 +53 -200
- package/coverage/lcov.info +3233 -3332
- package/dist/api/controllers/application.js +0 -1
- package/dist/api/controllers/row/internal.js +1 -4
- package/dist/api/controllers/table/index.js +1 -2
- package/dist/api/controllers/webhook.js +5 -3
- package/dist/api/index.js +1 -3
- package/dist/api/routes/automation.js +31 -3
- package/dist/api/routes/datasource.js +50 -3
- package/dist/api/routes/index.js +0 -2
- package/dist/api/routes/permission.js +14 -4
- package/dist/api/routes/role.js +19 -3
- package/dist/api/routes/row.js +4 -3
- package/dist/api/routes/screen.js +23 -2
- package/dist/api/routes/table.js +17 -3
- package/dist/api/routes/tests/utilities/index.js +0 -23
- package/dist/api/routes/webhook.js +17 -2
- package/dist/automations/steps/filter.js +2 -2
- package/dist/automations/steps/queryRows.js +1 -1
- package/dist/automations/utils.js +2 -2
- package/dist/constants/index.js +0 -3
- package/dist/db/utils.js +0 -11
- package/dist/environment.js +0 -1
- package/dist/integrations/googlesheets.js +0 -3
- package/dist/integrations/microsoftSqlServer.js +29 -35
- package/dist/integrations/mysql.js +0 -3
- package/dist/integrations/oracle.js +19 -14
- package/dist/integrations/postgres.js +28 -34
- package/dist/package.json +7 -11
- package/dist/tests/utilities/TestConfiguration.js +8 -25
- package/dist/threads/query.js +8 -33
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/workerRequests.js +15 -50
- package/package.json +8 -12
- package/scripts/integrations/oracle/oracle.md +2 -2
- package/scripts/integrations/postgres/init.sql +3 -5
- package/scripts/likeCypress.ts +6 -9
- package/scripts/proxy/generateProxyConfig.js +70 -0
- package/src/api/controllers/application.js +0 -1
- package/src/api/controllers/row/ExternalRequest.ts +1 -1
- package/src/api/controllers/row/internal.js +0 -4
- package/src/api/controllers/table/index.js +1 -2
- package/src/api/controllers/webhook.js +6 -3
- package/src/api/index.js +1 -4
- package/src/api/routes/automation.js +33 -3
- package/src/api/routes/datasource.js +52 -6
- package/src/api/routes/index.js +0 -2
- package/src/api/routes/permission.js +18 -4
- package/src/api/routes/role.js +24 -3
- package/src/api/routes/row.js +2 -3
- package/src/api/routes/screen.js +29 -2
- package/src/api/routes/table.js +19 -4
- package/src/api/routes/tests/utilities/index.js +0 -24
- package/src/api/routes/webhook.js +18 -2
- package/src/automations/steps/filter.js +2 -3
- package/src/automations/steps/queryRows.js +1 -1
- package/src/automations/utils.js +2 -2
- package/src/constants/index.js +0 -4
- package/src/db/utils.js +0 -12
- package/src/definitions/common.ts +0 -4
- package/src/environment.js +0 -1
- package/src/integrations/base/datasourcePlus.ts +0 -3
- package/src/integrations/googlesheets.ts +2 -5
- package/src/integrations/microsoftSqlServer.ts +33 -38
- package/src/integrations/mysql.ts +0 -4
- package/src/integrations/oracle.ts +35 -27
- package/src/integrations/postgres.ts +26 -33
- package/src/tests/utilities/TestConfiguration.js +2 -23
- package/src/threads/query.js +9 -37
- package/src/utilities/workerRequests.js +16 -65
- package/builder/assets/index.c0b657be.js +0 -1288
- package/coverage/lcov-report/api/routes/utils/index.html +0 -111
- package/coverage/lcov-report/api/routes/utils/validators.js.html +0 -737
- package/dist/api/controllers/public/applications.js +0 -94
- package/dist/api/controllers/public/mapping/applications.js +0 -29
- package/dist/api/controllers/public/mapping/index.js +0 -11
- package/dist/api/controllers/public/mapping/queries.js +0 -36
- package/dist/api/controllers/public/mapping/rows.js +0 -24
- package/dist/api/controllers/public/mapping/tables.js +0 -23
- package/dist/api/controllers/public/mapping/types.js +0 -2
- package/dist/api/controllers/public/mapping/users.js +0 -29
- package/dist/api/controllers/public/queries.js +0 -38
- package/dist/api/controllers/public/rows.js +0 -97
- package/dist/api/controllers/public/tables.js +0 -75
- package/dist/api/controllers/public/users.js +0 -95
- package/dist/api/controllers/public/utils.js +0 -49
- package/dist/api/routes/public/applications.js +0 -141
- package/dist/api/routes/public/index.js +0 -101
- package/dist/api/routes/public/middleware/mapper.js +0 -94
- package/dist/api/routes/public/queries.js +0 -77
- package/dist/api/routes/public/rows.js +0 -229
- package/dist/api/routes/public/tables.js +0 -154
- package/dist/api/routes/public/users.js +0 -137
- package/dist/api/routes/public/utils/Endpoint.js +0 -36
- package/dist/api/routes/utils/validators.js +0 -200
- package/dist/definitions/openapi.js +0 -6
- package/specs/generate.js +0 -83
- package/specs/openapi.json +0 -2222
- package/specs/openapi.yaml +0 -1530
- package/specs/parameters.js +0 -59
- package/specs/resources/application.js +0 -101
- package/specs/resources/index.js +0 -24
- package/specs/resources/misc.js +0 -12
- package/specs/resources/query.js +0 -189
- package/specs/resources/row.js +0 -125
- package/specs/resources/table.js +0 -191
- package/specs/resources/user.js +0 -126
- package/specs/resources/utils/Resource.js +0 -26
- package/specs/resources/utils/index.js +0 -11
- package/specs/security.js +0 -7
- package/src/api/controllers/public/applications.ts +0 -74
- package/src/api/controllers/public/mapping/applications.ts +0 -32
- package/src/api/controllers/public/mapping/index.ts +0 -13
- package/src/api/controllers/public/mapping/queries.ts +0 -39
- package/src/api/controllers/public/mapping/rows.ts +0 -31
- package/src/api/controllers/public/mapping/tables.ts +0 -26
- package/src/api/controllers/public/mapping/types.ts +0 -13
- package/src/api/controllers/public/mapping/users.ts +0 -32
- package/src/api/controllers/public/queries.ts +0 -20
- package/src/api/controllers/public/rows.ts +0 -77
- package/src/api/controllers/public/tables.ts +0 -56
- package/src/api/controllers/public/users.ts +0 -82
- package/src/api/controllers/public/utils.ts +0 -38
- package/src/api/routes/public/applications.ts +0 -156
- package/src/api/routes/public/index.ts +0 -118
- package/src/api/routes/public/middleware/mapper.ts +0 -81
- package/src/api/routes/public/queries.ts +0 -81
- package/src/api/routes/public/rows.ts +0 -242
- package/src/api/routes/public/tables.ts +0 -169
- package/src/api/routes/public/tests/compare.spec.js +0 -184
- package/src/api/routes/public/users.ts +0 -144
- package/src/api/routes/public/utils/Endpoint.ts +0 -51
- package/src/api/routes/utils/validators.js +0 -219
- package/src/definitions/openapi.ts +0 -943
|
@@ -103,11 +103,30 @@ module PostgresModule {
|
|
|
103
103
|
},
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
async function internalQuery(client: any, query: SqlQuery) {
|
|
107
|
+
// need to handle a specific issue with json data types in postgres,
|
|
108
|
+
// new lines inside the JSON data will break it
|
|
109
|
+
if (query && query.sql) {
|
|
110
|
+
const matches = query.sql.match(JSON_REGEX)
|
|
111
|
+
if (matches && matches.length > 0) {
|
|
112
|
+
for (let match of matches) {
|
|
113
|
+
const escaped = escapeDangerousCharacters(match)
|
|
114
|
+
query.sql = query.sql.replace(match, escaped)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
return await client.query(query.sql, query.bindings || [])
|
|
120
|
+
} catch (err) {
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
throw new Error(err)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
106
126
|
class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
107
127
|
static pool: any
|
|
108
128
|
private readonly client: any
|
|
109
129
|
private readonly config: PostgresConfig
|
|
110
|
-
private index: number = 1
|
|
111
130
|
public tables: Record<string, Table> = {}
|
|
112
131
|
public schemaErrors: Record<string, string> = {}
|
|
113
132
|
|
|
@@ -144,32 +163,6 @@ module PostgresModule {
|
|
|
144
163
|
this.setSchema()
|
|
145
164
|
}
|
|
146
165
|
|
|
147
|
-
getBindingIdentifier(): string {
|
|
148
|
-
return `$${this.index++}`
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
async internalQuery(query: SqlQuery) {
|
|
152
|
-
const client = this.client
|
|
153
|
-
this.index = 1
|
|
154
|
-
// need to handle a specific issue with json data types in postgres,
|
|
155
|
-
// new lines inside the JSON data will break it
|
|
156
|
-
if (query && query.sql) {
|
|
157
|
-
const matches = query.sql.match(JSON_REGEX)
|
|
158
|
-
if (matches && matches.length > 0) {
|
|
159
|
-
for (let match of matches) {
|
|
160
|
-
const escaped = escapeDangerousCharacters(match)
|
|
161
|
-
query.sql = query.sql.replace(match, escaped)
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
try {
|
|
166
|
-
return await client.query(query.sql, query.bindings || [])
|
|
167
|
-
} catch (err) {
|
|
168
|
-
// @ts-ignore
|
|
169
|
-
throw new Error(err)
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
166
|
setSchema() {
|
|
174
167
|
if (!this.config.schema) {
|
|
175
168
|
this.config.schema = "public"
|
|
@@ -248,22 +241,22 @@ module PostgresModule {
|
|
|
248
241
|
}
|
|
249
242
|
|
|
250
243
|
async create(query: SqlQuery | string) {
|
|
251
|
-
const response = await this.
|
|
244
|
+
const response = await internalQuery(this.client, getSqlQuery(query))
|
|
252
245
|
return response.rows.length ? response.rows : [{ created: true }]
|
|
253
246
|
}
|
|
254
247
|
|
|
255
248
|
async read(query: SqlQuery | string) {
|
|
256
|
-
const response = await this.
|
|
249
|
+
const response = await internalQuery(this.client, getSqlQuery(query))
|
|
257
250
|
return response.rows
|
|
258
251
|
}
|
|
259
252
|
|
|
260
253
|
async update(query: SqlQuery | string) {
|
|
261
|
-
const response = await this.
|
|
254
|
+
const response = await internalQuery(this.client, getSqlQuery(query))
|
|
262
255
|
return response.rows.length ? response.rows : [{ updated: true }]
|
|
263
256
|
}
|
|
264
257
|
|
|
265
258
|
async delete(query: SqlQuery | string) {
|
|
266
|
-
const response = await this.
|
|
259
|
+
const response = await internalQuery(this.client, getSqlQuery(query))
|
|
267
260
|
return response.rows.length ? response.rows : [{ deleted: true }]
|
|
268
261
|
}
|
|
269
262
|
|
|
@@ -273,11 +266,11 @@ module PostgresModule {
|
|
|
273
266
|
if (Array.isArray(input)) {
|
|
274
267
|
const responses = []
|
|
275
268
|
for (let query of input) {
|
|
276
|
-
responses.push(await this.
|
|
269
|
+
responses.push(await internalQuery(this.client, query))
|
|
277
270
|
}
|
|
278
271
|
return responses
|
|
279
272
|
} else {
|
|
280
|
-
const response = await this.
|
|
273
|
+
const response = await internalQuery(this.client, input)
|
|
281
274
|
return response.rows.length ? response.rows : [{ [operation]: true }]
|
|
282
275
|
}
|
|
283
276
|
}
|
|
@@ -25,8 +25,6 @@ const { createASession } = require("@budibase/backend-core/sessions")
|
|
|
25
25
|
const { user: userCache } = require("@budibase/backend-core/cache")
|
|
26
26
|
const newid = require("../../db/newid")
|
|
27
27
|
const context = require("@budibase/backend-core/context")
|
|
28
|
-
const { generateDevInfoID, SEPARATOR } = require("@budibase/backend-core/db")
|
|
29
|
-
const { encrypt } = require("@budibase/backend-core/encryption")
|
|
30
28
|
|
|
31
29
|
const GLOBAL_USER_ID = "us_uuid1"
|
|
32
30
|
const EMAIL = "babs@babs.com"
|
|
@@ -49,10 +47,6 @@ class TestConfiguration {
|
|
|
49
47
|
return this.request
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
getApp() {
|
|
53
|
-
return this.app
|
|
54
|
-
}
|
|
55
|
-
|
|
56
50
|
getAppId() {
|
|
57
51
|
return this.appId
|
|
58
52
|
}
|
|
@@ -89,20 +83,6 @@ class TestConfiguration {
|
|
|
89
83
|
}
|
|
90
84
|
}
|
|
91
85
|
|
|
92
|
-
async generateApiKey(userId = GLOBAL_USER_ID) {
|
|
93
|
-
const db = getGlobalDB(TENANT_ID)
|
|
94
|
-
const id = generateDevInfoID(userId)
|
|
95
|
-
let devInfo
|
|
96
|
-
try {
|
|
97
|
-
devInfo = await db.get(id)
|
|
98
|
-
} catch (err) {
|
|
99
|
-
devInfo = { _id: id, userId }
|
|
100
|
-
}
|
|
101
|
-
devInfo.apiKey = encrypt(`${TENANT_ID}${SEPARATOR}${newid()}`)
|
|
102
|
-
await db.put(devInfo)
|
|
103
|
-
return devInfo.apiKey
|
|
104
|
-
}
|
|
105
|
-
|
|
106
86
|
async globalUser({
|
|
107
87
|
id = GLOBAL_USER_ID,
|
|
108
88
|
builder = true,
|
|
@@ -155,7 +135,7 @@ class TestConfiguration {
|
|
|
155
135
|
cleanup(this.allApps.map(app => app.appId))
|
|
156
136
|
}
|
|
157
137
|
|
|
158
|
-
defaultHeaders(
|
|
138
|
+
defaultHeaders() {
|
|
159
139
|
const auth = {
|
|
160
140
|
userId: GLOBAL_USER_ID,
|
|
161
141
|
sessionId: "sessionid",
|
|
@@ -174,7 +154,6 @@ class TestConfiguration {
|
|
|
174
154
|
`${Cookies.CurrentApp}=${appToken}`,
|
|
175
155
|
],
|
|
176
156
|
[Headers.CSRF_TOKEN]: CSRF_TOKEN,
|
|
177
|
-
...extras,
|
|
178
157
|
}
|
|
179
158
|
if (this.appId) {
|
|
180
159
|
headers[Headers.APP_ID] = this.appId
|
|
@@ -247,7 +226,7 @@ class TestConfiguration {
|
|
|
247
226
|
|
|
248
227
|
async getTable(tableId = null) {
|
|
249
228
|
tableId = tableId || this.table._id
|
|
250
|
-
return this._req(null, { tableId }, controllers.table.find)
|
|
229
|
+
return this._req(null, { id: tableId }, controllers.table.find)
|
|
251
230
|
}
|
|
252
231
|
|
|
253
232
|
async createLinkedTable(relationshipType = null, links = ["link"]) {
|
package/src/threads/query.js
CHANGED
|
@@ -2,12 +2,8 @@ const threadUtils = require("./utils")
|
|
|
2
2
|
threadUtils.threadSetup()
|
|
3
3
|
const ScriptRunner = require("../utilities/scriptRunner")
|
|
4
4
|
const { integrations } = require("../integrations")
|
|
5
|
-
const {
|
|
6
|
-
processStringSync,
|
|
7
|
-
findHBSBlocks,
|
|
8
|
-
} = require("@budibase/string-templates")
|
|
5
|
+
const { processStringSync } = require("@budibase/string-templates")
|
|
9
6
|
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
10
|
-
const { isSQL } = require("../integrations/utils")
|
|
11
7
|
|
|
12
8
|
class QueryRunner {
|
|
13
9
|
constructor(input, flags = { noRecursiveQuery: false }) {
|
|
@@ -27,47 +23,23 @@ class QueryRunner {
|
|
|
27
23
|
this.hasRerun = false
|
|
28
24
|
}
|
|
29
25
|
|
|
30
|
-
interpolateSQL(fields, parameters, integration) {
|
|
31
|
-
let sql = fields.sql
|
|
32
|
-
if (!sql) {
|
|
33
|
-
return fields
|
|
34
|
-
}
|
|
35
|
-
const bindings = findHBSBlocks(sql)
|
|
36
|
-
let variables = []
|
|
37
|
-
for (let binding of bindings) {
|
|
38
|
-
let variable = integration.getBindingIdentifier()
|
|
39
|
-
variables.push(binding)
|
|
40
|
-
sql = sql.replace(binding, variable)
|
|
41
|
-
}
|
|
42
|
-
// replicate the knex structure
|
|
43
|
-
fields.sql = sql
|
|
44
|
-
fields.bindings = this.enrichQueryFields(variables, parameters)
|
|
45
|
-
return fields
|
|
46
|
-
}
|
|
47
|
-
|
|
48
26
|
async execute() {
|
|
49
27
|
let { datasource, fields, queryVerb, transformer } = this
|
|
50
|
-
const Integration = integrations[datasource.source]
|
|
51
|
-
if (!Integration) {
|
|
52
|
-
throw "Integration type does not exist."
|
|
53
|
-
}
|
|
54
|
-
const integration = new Integration(datasource.config)
|
|
55
|
-
|
|
56
28
|
// pre-query, make sure datasource variables are added to parameters
|
|
57
29
|
const parameters = await this.addDatasourceVariables()
|
|
58
|
-
let query
|
|
59
|
-
// handle SQL injections by interpolating the variables
|
|
60
|
-
if (isSQL(datasource)) {
|
|
61
|
-
query = this.interpolateSQL(fields, parameters, integration)
|
|
62
|
-
} else {
|
|
63
|
-
query = this.enrichQueryFields(fields, parameters)
|
|
64
|
-
}
|
|
30
|
+
let query = this.enrichQueryFields(fields, parameters)
|
|
65
31
|
|
|
66
32
|
// Add pagination values for REST queries
|
|
67
33
|
if (this.pagination) {
|
|
68
34
|
query.paginationValues = this.pagination
|
|
69
35
|
}
|
|
70
36
|
|
|
37
|
+
const Integration = integrations[datasource.source]
|
|
38
|
+
if (!Integration) {
|
|
39
|
+
throw "Integration type does not exist."
|
|
40
|
+
}
|
|
41
|
+
const integration = new Integration(datasource.config)
|
|
42
|
+
|
|
71
43
|
let output = threadUtils.formatResponse(await integration[queryVerb](query))
|
|
72
44
|
let rows = output,
|
|
73
45
|
info = undefined,
|
|
@@ -207,7 +179,7 @@ class QueryRunner {
|
|
|
207
179
|
}
|
|
208
180
|
|
|
209
181
|
enrichQueryFields(fields, parameters = {}) {
|
|
210
|
-
const enrichedQuery =
|
|
182
|
+
const enrichedQuery = {}
|
|
211
183
|
|
|
212
184
|
// enrich the fields with dynamic parameters
|
|
213
185
|
for (let key of Object.keys(fields)) {
|
|
@@ -26,31 +26,11 @@ function request(ctx, request) {
|
|
|
26
26
|
delete request.body
|
|
27
27
|
}
|
|
28
28
|
if (ctx && ctx.headers) {
|
|
29
|
-
request.headers = ctx.headers
|
|
29
|
+
request.headers.cookie = ctx.headers.cookie
|
|
30
30
|
}
|
|
31
31
|
return request
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
async function checkResponse(response, errorMsg, { ctx } = {}) {
|
|
35
|
-
if (response.status !== 200) {
|
|
36
|
-
let error
|
|
37
|
-
try {
|
|
38
|
-
error = await response.json()
|
|
39
|
-
} catch (err) {
|
|
40
|
-
error = await response.text()
|
|
41
|
-
}
|
|
42
|
-
const msg = `Unable to ${errorMsg} - ${
|
|
43
|
-
error.message ? error.message : error
|
|
44
|
-
}`
|
|
45
|
-
if (ctx) {
|
|
46
|
-
ctx.throw(400, msg)
|
|
47
|
-
} else {
|
|
48
|
-
throw msg
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return response.json()
|
|
52
|
-
}
|
|
53
|
-
|
|
54
34
|
exports.request = request
|
|
55
35
|
|
|
56
36
|
// have to pass in the tenant ID as this could be coming from an automation
|
|
@@ -70,17 +50,25 @@ exports.sendSmtpEmail = async (to, from, subject, contents, automation) => {
|
|
|
70
50
|
},
|
|
71
51
|
})
|
|
72
52
|
)
|
|
73
|
-
|
|
53
|
+
|
|
54
|
+
if (response.status !== 200) {
|
|
55
|
+
const error = await response.text()
|
|
56
|
+
throw `Unable to send email - ${error}`
|
|
57
|
+
}
|
|
58
|
+
return response.json()
|
|
74
59
|
}
|
|
75
60
|
|
|
76
61
|
exports.getGlobalSelf = async (ctx, appId = null) => {
|
|
77
|
-
const endpoint = `/api/global/self`
|
|
62
|
+
const endpoint = `/api/global/users/self`
|
|
78
63
|
const response = await fetch(
|
|
79
64
|
checkSlashesInUrl(env.WORKER_URL + endpoint),
|
|
80
65
|
// we don't want to use API key when getting self
|
|
81
66
|
request(ctx, { method: "GET" })
|
|
82
67
|
)
|
|
83
|
-
|
|
68
|
+
if (response.status !== 200) {
|
|
69
|
+
ctx.throw(400, "Unable to get self globally.")
|
|
70
|
+
}
|
|
71
|
+
let json = await response.json()
|
|
84
72
|
if (appId) {
|
|
85
73
|
json = updateAppRole(json)
|
|
86
74
|
}
|
|
@@ -95,45 +83,8 @@ exports.removeAppFromUserRoles = async (ctx, appId) => {
|
|
|
95
83
|
method: "DELETE",
|
|
96
84
|
})
|
|
97
85
|
)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const response = await fetch(
|
|
103
|
-
checkSlashesInUrl(env.WORKER_URL + "/api/global/users"),
|
|
104
|
-
// we don't want to use API key when getting self
|
|
105
|
-
request(ctx, { method: "GET" })
|
|
106
|
-
)
|
|
107
|
-
return checkResponse(response, "get users", { ctx })
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
exports.saveGlobalUser = async ctx => {
|
|
111
|
-
const response = await fetch(
|
|
112
|
-
checkSlashesInUrl(env.WORKER_URL + "/api/global/users"),
|
|
113
|
-
// we don't want to use API key when getting self
|
|
114
|
-
request(ctx, { method: "POST", body: ctx.request.body })
|
|
115
|
-
)
|
|
116
|
-
return checkResponse(response, "save user", { ctx })
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
exports.deleteGlobalUser = async ctx => {
|
|
120
|
-
const response = await fetch(
|
|
121
|
-
checkSlashesInUrl(
|
|
122
|
-
env.WORKER_URL + `/api/global/users/${ctx.params.userId}`
|
|
123
|
-
),
|
|
124
|
-
// we don't want to use API key when getting self
|
|
125
|
-
request(ctx, { method: "DELETE" })
|
|
126
|
-
)
|
|
127
|
-
return checkResponse(response, "delete user", { ctx, body: ctx.request.body })
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
exports.readGlobalUser = async ctx => {
|
|
131
|
-
const response = await fetch(
|
|
132
|
-
checkSlashesInUrl(
|
|
133
|
-
env.WORKER_URL + `/api/global/users/${ctx.params.userId}`
|
|
134
|
-
),
|
|
135
|
-
// we don't want to use API key when getting self
|
|
136
|
-
request(ctx, { method: "GET" })
|
|
137
|
-
)
|
|
138
|
-
return checkResponse(response, "get user", { ctx })
|
|
86
|
+
if (response.status !== 200) {
|
|
87
|
+
throw "Unable to remove app role"
|
|
88
|
+
}
|
|
89
|
+
return response.json()
|
|
139
90
|
}
|