@budibase/server 1.0.27-alpha.13 → 1.0.27-alpha.17
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.176f00e0.css → index.39e01193.css} +1 -1
- package/builder/assets/{index.5776ef20.js → index.4ba89e2d.js} +232 -232
- package/builder/index.html +2 -2
- package/coverage/clover.xml +155 -152
- package/coverage/coverage-final.json +4 -4
- 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 +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/hosting.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/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.js.html +7 -4
- 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/index.js.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/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/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/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.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/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/hosting.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/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 +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/createRow.js.html +1 -1
- 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 +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/automations/utils.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/client.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 +16 -16
- 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 +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/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.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 +28 -28
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +181 -13
- package/coverage/lcov-report/threads/utils.js.html +11 -161
- 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 +1 -1
- package/coverage/lcov-report/utilities/index.html +4 -4
- package/coverage/lcov-report/utilities/index.js.html +9 -9
- 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/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +291 -284
- package/dist/api/controllers/query/index.js +3 -2
- package/dist/environment.js +1 -0
- package/dist/integrations/dynamodb.js +19 -0
- package/dist/integrations/rest.js +68 -19
- package/dist/integrations/s3.js +17 -8
- package/dist/integrations/utils.js +40 -37
- package/dist/package.json +4 -4
- package/dist/threads/query.js +52 -3
- package/dist/threads/utils.js +0 -44
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/index.js +1 -1
- package/package.json +5 -5
- package/src/api/controllers/query/index.js +3 -2
- package/src/definitions/datasource.ts +15 -0
- package/src/environment.js +1 -0
- package/src/integrations/dynamodb.ts +18 -0
- package/src/integrations/rest.ts +97 -17
- package/src/integrations/s3.ts +18 -7
- package/src/integrations/tests/rest.spec.js +287 -24
- package/src/integrations/utils.ts +8 -7
- package/src/threads/query.js +59 -3
- package/src/threads/utils.js +0 -50
- package/src/utilities/index.js +1 -1
package/dist/utilities/index.js
CHANGED
|
@@ -38,7 +38,7 @@ exports.checkSlashesInUrl = url => {
|
|
|
38
38
|
* @return {string} The base URL of the object store (MinIO or S3).
|
|
39
39
|
*/
|
|
40
40
|
exports.objectStoreUrl = () => {
|
|
41
|
-
if (env.SELF_HOSTED) {
|
|
41
|
+
if (env.SELF_HOSTED || env.MINIO_URL) {
|
|
42
42
|
// can use a relative url for this as all goes through the proxy (this is hosted in minio)
|
|
43
43
|
return OBJ_STORE_DIRECTORY;
|
|
44
44
|
}
|
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.27-alpha.
|
|
4
|
+
"version": "1.0.27-alpha.17",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
"license": "GPL-3.0",
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
73
|
-
"@budibase/backend-core": "^1.0.27-alpha.
|
|
74
|
-
"@budibase/client": "^1.0.27-alpha.
|
|
75
|
-
"@budibase/string-templates": "^1.0.27-alpha.
|
|
73
|
+
"@budibase/backend-core": "^1.0.27-alpha.17",
|
|
74
|
+
"@budibase/client": "^1.0.27-alpha.17",
|
|
75
|
+
"@budibase/string-templates": "^1.0.27-alpha.17",
|
|
76
76
|
"@bull-board/api": "^3.7.0",
|
|
77
77
|
"@bull-board/koa": "^3.7.0",
|
|
78
78
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -165,5 +165,5 @@
|
|
|
165
165
|
"optionalDependencies": {
|
|
166
166
|
"oracledb": "^5.3.0"
|
|
167
167
|
},
|
|
168
|
-
"gitHead": "
|
|
168
|
+
"gitHead": "5e285f29df9a7386b953591a5a07fc720cb0e954"
|
|
169
169
|
}
|
|
@@ -140,11 +140,12 @@ async function execute(ctx, opts = { rowsOnly: false }) {
|
|
|
140
140
|
|
|
141
141
|
// call the relevant CRUD method on the integration class
|
|
142
142
|
try {
|
|
143
|
-
const { rows, extra } = await Runner.run({
|
|
143
|
+
const { rows, pagination, extra } = await Runner.run({
|
|
144
144
|
appId: ctx.appId,
|
|
145
145
|
datasource,
|
|
146
146
|
queryVerb: query.queryVerb,
|
|
147
147
|
fields: query.fields,
|
|
148
|
+
pagination: ctx.request.body.pagination,
|
|
148
149
|
parameters: ctx.request.body.parameters,
|
|
149
150
|
transformer: query.transformer,
|
|
150
151
|
queryId: ctx.params.queryId,
|
|
@@ -152,7 +153,7 @@ async function execute(ctx, opts = { rowsOnly: false }) {
|
|
|
152
153
|
if (opts && opts.rowsOnly) {
|
|
153
154
|
ctx.body = rows
|
|
154
155
|
} else {
|
|
155
|
-
ctx.body = { data: rows, ...extra }
|
|
156
|
+
ctx.body = { data: rows, pagination, ...extra }
|
|
156
157
|
}
|
|
157
158
|
} catch (err) {
|
|
158
159
|
ctx.throw(400, err)
|
|
@@ -232,6 +232,8 @@ export interface RestQueryFields {
|
|
|
232
232
|
json: object
|
|
233
233
|
method: string
|
|
234
234
|
authConfigId: string
|
|
235
|
+
pagination: PaginationConfig | null
|
|
236
|
+
paginationValues: PaginationValues | null
|
|
235
237
|
}
|
|
236
238
|
|
|
237
239
|
export interface RestConfig {
|
|
@@ -252,6 +254,19 @@ export interface RestConfig {
|
|
|
252
254
|
]
|
|
253
255
|
}
|
|
254
256
|
|
|
257
|
+
export interface PaginationConfig {
|
|
258
|
+
type: string
|
|
259
|
+
location: string
|
|
260
|
+
pageParam: string
|
|
261
|
+
sizeParam: string | null
|
|
262
|
+
responseParam: string | null
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export interface PaginationValues {
|
|
266
|
+
page: string | number | null
|
|
267
|
+
limit: number | null
|
|
268
|
+
}
|
|
269
|
+
|
|
255
270
|
export interface Query {
|
|
256
271
|
_id?: string
|
|
257
272
|
datasourceId: string
|
package/src/environment.js
CHANGED
|
@@ -65,6 +65,7 @@ module.exports = {
|
|
|
65
65
|
DEPLOYMENT_CREDENTIALS_URL: process.env.DEPLOYMENT_CREDENTIALS_URL,
|
|
66
66
|
ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
|
|
67
67
|
DISABLE_THREADING: process.env.DISABLE_THREADING,
|
|
68
|
+
QUERY_THREAD_TIMEOUT: process.env.QUERY_THREAD_TIMEOUT,
|
|
68
69
|
_set(key, value) {
|
|
69
70
|
process.env[key] = value
|
|
70
71
|
module.exports[key] = value
|
|
@@ -80,6 +80,17 @@ module DynamoModule {
|
|
|
80
80
|
},
|
|
81
81
|
},
|
|
82
82
|
},
|
|
83
|
+
describe: {
|
|
84
|
+
type: QueryTypes.FIELDS,
|
|
85
|
+
customisable: true,
|
|
86
|
+
readable: true,
|
|
87
|
+
fields: {
|
|
88
|
+
table: {
|
|
89
|
+
type: DatasourceFieldTypes.STRING,
|
|
90
|
+
required: true,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
83
94
|
get: {
|
|
84
95
|
type: QueryTypes.FIELDS,
|
|
85
96
|
customisable: true,
|
|
@@ -180,6 +191,13 @@ module DynamoModule {
|
|
|
180
191
|
return response
|
|
181
192
|
}
|
|
182
193
|
|
|
194
|
+
async describe(query: { table: string }) {
|
|
195
|
+
const params = {
|
|
196
|
+
TableName: query.table,
|
|
197
|
+
}
|
|
198
|
+
return new AWS.DynamoDB().describeTable(params).promise()
|
|
199
|
+
}
|
|
200
|
+
|
|
183
201
|
async get(query: { table: string; json: object }) {
|
|
184
202
|
const params = {
|
|
185
203
|
TableName: query.table,
|
package/src/integrations/rest.ts
CHANGED
|
@@ -4,9 +4,11 @@ import {
|
|
|
4
4
|
QueryTypes,
|
|
5
5
|
RestConfig,
|
|
6
6
|
RestQueryFields as RestQuery,
|
|
7
|
+
PaginationConfig,
|
|
7
8
|
AuthType,
|
|
8
9
|
BasicAuthConfig,
|
|
9
10
|
BearerAuthConfig,
|
|
11
|
+
PaginationValues,
|
|
10
12
|
} from "../definitions/datasource"
|
|
11
13
|
import { IntegrationBase } from "./base/IntegrationBase"
|
|
12
14
|
|
|
@@ -40,6 +42,9 @@ const coreFields = {
|
|
|
40
42
|
type: DatasourceFieldTypes.STRING,
|
|
41
43
|
enum: Object.values(BodyTypes),
|
|
42
44
|
},
|
|
45
|
+
pagination: {
|
|
46
|
+
type: DatasourceFieldTypes.OBJECT,
|
|
47
|
+
},
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
module RestModule {
|
|
@@ -115,7 +120,7 @@ module RestModule {
|
|
|
115
120
|
this.config = config
|
|
116
121
|
}
|
|
117
122
|
|
|
118
|
-
async parseResponse(response: any) {
|
|
123
|
+
async parseResponse(response: any, pagination: PaginationConfig | null) {
|
|
119
124
|
let data, raw, headers
|
|
120
125
|
const contentType = response.headers.get("content-type") || ""
|
|
121
126
|
try {
|
|
@@ -154,6 +159,13 @@ module RestModule {
|
|
|
154
159
|
for (let [key, value] of Object.entries(headers)) {
|
|
155
160
|
headers[key] = Array.isArray(value) ? value[0] : value
|
|
156
161
|
}
|
|
162
|
+
|
|
163
|
+
// Check if a pagination cursor exists in the response
|
|
164
|
+
let nextCursor = null
|
|
165
|
+
if (pagination?.responseParam) {
|
|
166
|
+
nextCursor = data?.[pagination.responseParam]
|
|
167
|
+
}
|
|
168
|
+
|
|
157
169
|
return {
|
|
158
170
|
data,
|
|
159
171
|
info: {
|
|
@@ -165,10 +177,40 @@ module RestModule {
|
|
|
165
177
|
raw,
|
|
166
178
|
headers,
|
|
167
179
|
},
|
|
180
|
+
pagination: {
|
|
181
|
+
cursor: nextCursor,
|
|
182
|
+
},
|
|
168
183
|
}
|
|
169
184
|
}
|
|
170
185
|
|
|
171
|
-
getUrl(
|
|
186
|
+
getUrl(
|
|
187
|
+
path: string,
|
|
188
|
+
queryString: string,
|
|
189
|
+
pagination: PaginationConfig | null,
|
|
190
|
+
paginationValues: PaginationValues | null
|
|
191
|
+
): string {
|
|
192
|
+
// Add pagination params to query string if required
|
|
193
|
+
if (pagination?.location === "query" && paginationValues) {
|
|
194
|
+
const { pageParam, sizeParam } = pagination
|
|
195
|
+
const params = new URLSearchParams()
|
|
196
|
+
|
|
197
|
+
// Append page number or cursor param if configured
|
|
198
|
+
if (pageParam && paginationValues.page != null) {
|
|
199
|
+
params.append(pageParam, paginationValues.page)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Append page size param if configured
|
|
203
|
+
if (sizeParam && paginationValues.limit != null) {
|
|
204
|
+
params.append(sizeParam, paginationValues.limit)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Prepend query string with pagination params
|
|
208
|
+
let paginationString = params.toString()
|
|
209
|
+
if (paginationString) {
|
|
210
|
+
queryString = `${paginationString}&${queryString}`
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
172
214
|
const main = `${path}?${queryString}`
|
|
173
215
|
let complete = main
|
|
174
216
|
if (this.config.url && !main.startsWith("http")) {
|
|
@@ -180,20 +222,44 @@ module RestModule {
|
|
|
180
222
|
return complete
|
|
181
223
|
}
|
|
182
224
|
|
|
183
|
-
addBody(
|
|
184
|
-
|
|
225
|
+
addBody(
|
|
226
|
+
bodyType: string,
|
|
227
|
+
body: string | any,
|
|
228
|
+
input: any,
|
|
229
|
+
pagination: PaginationConfig | null,
|
|
230
|
+
paginationValues: PaginationValues | null
|
|
231
|
+
) {
|
|
232
|
+
if (!input.headers) {
|
|
233
|
+
input.headers = {}
|
|
234
|
+
}
|
|
235
|
+
if (bodyType === BodyTypes.NONE) {
|
|
236
|
+
return input
|
|
237
|
+
}
|
|
238
|
+
let error,
|
|
239
|
+
object: any = {},
|
|
240
|
+
string = ""
|
|
185
241
|
try {
|
|
186
|
-
|
|
187
|
-
|
|
242
|
+
if (body) {
|
|
243
|
+
string = typeof body !== "string" ? JSON.stringify(body) : body
|
|
244
|
+
object = typeof body === "object" ? body : JSON.parse(body)
|
|
245
|
+
}
|
|
188
246
|
} catch (err) {
|
|
189
247
|
error = err
|
|
190
248
|
}
|
|
191
|
-
|
|
192
|
-
|
|
249
|
+
|
|
250
|
+
// Util to add pagination values to a certain body type
|
|
251
|
+
const addPaginationToBody = (insertFn: Function) => {
|
|
252
|
+
if (pagination?.location === "body") {
|
|
253
|
+
if (pagination?.pageParam && paginationValues?.page != null) {
|
|
254
|
+
insertFn(pagination.pageParam, paginationValues.page)
|
|
255
|
+
}
|
|
256
|
+
if (pagination?.sizeParam && paginationValues?.limit != null) {
|
|
257
|
+
insertFn(pagination.sizeParam, paginationValues.limit)
|
|
258
|
+
}
|
|
259
|
+
}
|
|
193
260
|
}
|
|
261
|
+
|
|
194
262
|
switch (bodyType) {
|
|
195
|
-
case BodyTypes.NONE:
|
|
196
|
-
break
|
|
197
263
|
case BodyTypes.TEXT:
|
|
198
264
|
// content type defaults to plaintext
|
|
199
265
|
input.body = string
|
|
@@ -203,6 +269,9 @@ module RestModule {
|
|
|
203
269
|
for (let [key, value] of Object.entries(object)) {
|
|
204
270
|
params.append(key, value)
|
|
205
271
|
}
|
|
272
|
+
addPaginationToBody((key: string, value: any) => {
|
|
273
|
+
params.append(key, value)
|
|
274
|
+
})
|
|
206
275
|
input.body = params
|
|
207
276
|
break
|
|
208
277
|
case BodyTypes.FORM_DATA:
|
|
@@ -210,6 +279,9 @@ module RestModule {
|
|
|
210
279
|
for (let [key, value] of Object.entries(object)) {
|
|
211
280
|
form.append(key, value)
|
|
212
281
|
}
|
|
282
|
+
addPaginationToBody((key: string, value: any) => {
|
|
283
|
+
form.append(key, value)
|
|
284
|
+
})
|
|
213
285
|
input.body = form
|
|
214
286
|
break
|
|
215
287
|
case BodyTypes.XML:
|
|
@@ -219,13 +291,15 @@ module RestModule {
|
|
|
219
291
|
input.body = string
|
|
220
292
|
input.headers["Content-Type"] = "application/xml"
|
|
221
293
|
break
|
|
222
|
-
default:
|
|
223
294
|
case BodyTypes.JSON:
|
|
224
295
|
// if JSON error, throw it
|
|
225
296
|
if (error) {
|
|
226
297
|
throw "Invalid JSON for request body"
|
|
227
298
|
}
|
|
228
|
-
|
|
299
|
+
addPaginationToBody((key: string, value: any) => {
|
|
300
|
+
object[key] = value
|
|
301
|
+
})
|
|
302
|
+
input.body = JSON.stringify(object)
|
|
229
303
|
input.headers["Content-Type"] = "application/json"
|
|
230
304
|
break
|
|
231
305
|
}
|
|
@@ -271,6 +345,8 @@ module RestModule {
|
|
|
271
345
|
bodyType,
|
|
272
346
|
requestBody,
|
|
273
347
|
authConfigId,
|
|
348
|
+
pagination,
|
|
349
|
+
paginationValues,
|
|
274
350
|
} = query
|
|
275
351
|
const authHeaders = this.getAuthHeaders(authConfigId)
|
|
276
352
|
|
|
@@ -289,14 +365,18 @@ module RestModule {
|
|
|
289
365
|
}
|
|
290
366
|
|
|
291
367
|
let input: any = { method, headers: this.headers }
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
368
|
+
input = this.addBody(
|
|
369
|
+
bodyType,
|
|
370
|
+
requestBody,
|
|
371
|
+
input,
|
|
372
|
+
pagination,
|
|
373
|
+
paginationValues
|
|
374
|
+
)
|
|
295
375
|
|
|
296
376
|
this.startTimeMs = performance.now()
|
|
297
|
-
const url = this.getUrl(path, queryString)
|
|
377
|
+
const url = this.getUrl(path, queryString, pagination, paginationValues)
|
|
298
378
|
const response = await fetch(url, input)
|
|
299
|
-
return await this.parseResponse(response)
|
|
379
|
+
return await this.parseResponse(response, pagination)
|
|
300
380
|
}
|
|
301
381
|
|
|
302
382
|
async create(opts: RestQuery) {
|
package/src/integrations/s3.ts
CHANGED
|
@@ -8,6 +8,8 @@ module S3Module {
|
|
|
8
8
|
region: string
|
|
9
9
|
accessKeyId: string
|
|
10
10
|
secretAccessKey: string
|
|
11
|
+
s3ForcePathStyle: boolean
|
|
12
|
+
endpoint?: string
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
const SCHEMA: Integration = {
|
|
@@ -18,7 +20,7 @@ module S3Module {
|
|
|
18
20
|
datasource: {
|
|
19
21
|
region: {
|
|
20
22
|
type: "string",
|
|
21
|
-
required:
|
|
23
|
+
required: false,
|
|
22
24
|
default: "us-east-1",
|
|
23
25
|
},
|
|
24
26
|
accessKeyId: {
|
|
@@ -29,6 +31,15 @@ module S3Module {
|
|
|
29
31
|
type: "password",
|
|
30
32
|
required: true,
|
|
31
33
|
},
|
|
34
|
+
endpoint: {
|
|
35
|
+
type: "string",
|
|
36
|
+
required: false,
|
|
37
|
+
},
|
|
38
|
+
signatureVersion: {
|
|
39
|
+
type: "string",
|
|
40
|
+
required: false,
|
|
41
|
+
default: "v4"
|
|
42
|
+
},
|
|
32
43
|
},
|
|
33
44
|
query: {
|
|
34
45
|
read: {
|
|
@@ -46,16 +57,16 @@ module S3Module {
|
|
|
46
57
|
class S3Integration implements IntegrationBase {
|
|
47
58
|
private readonly config: S3Config
|
|
48
59
|
private client: any
|
|
49
|
-
private connectionPromise: Promise<any>
|
|
50
60
|
|
|
51
61
|
constructor(config: S3Config) {
|
|
52
62
|
this.config = config
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
if (this.config.endpoint) {
|
|
64
|
+
this.config.s3ForcePathStyle = true
|
|
65
|
+
} else {
|
|
66
|
+
delete this.config.endpoint
|
|
67
|
+
}
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
AWS.config.update(this.config)
|
|
69
|
+
this.client = new AWS.S3(this.config)
|
|
59
70
|
}
|
|
60
71
|
|
|
61
72
|
async read(query: { bucket: string }) {
|