@budibase/server 1.0.27-alpha.13 → 1.0.27-alpha.14
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.411e6960.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/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 +78 -17
- package/src/integrations/s3.ts +18 -7
- package/src/integrations/tests/rest.spec.js +287 -24
- 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.14",
|
|
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.14",
|
|
74
|
+
"@budibase/client": "^1.0.27-alpha.14",
|
|
75
|
+
"@budibase/string-templates": "^1.0.27-alpha.14",
|
|
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": "f9cd961be007bc9c360e15c3c09ec6889ed47b51"
|
|
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,35 @@ module RestModule {
|
|
|
165
177
|
raw,
|
|
166
178
|
headers,
|
|
167
179
|
},
|
|
180
|
+
pagination: {
|
|
181
|
+
cursor: nextCursor
|
|
182
|
+
}
|
|
168
183
|
}
|
|
169
184
|
}
|
|
170
185
|
|
|
171
|
-
getUrl(path: string, queryString: string): string {
|
|
186
|
+
getUrl(path: string, queryString: string, pagination: PaginationConfig | null, paginationValues: PaginationValues | null): string {
|
|
187
|
+
// Add pagination params to query string if required
|
|
188
|
+
if (pagination?.location === "query" && paginationValues) {
|
|
189
|
+
const { pageParam, sizeParam } = pagination
|
|
190
|
+
const params = new URLSearchParams()
|
|
191
|
+
|
|
192
|
+
// Append page number or cursor param if configured
|
|
193
|
+
if (pageParam && paginationValues.page != null) {
|
|
194
|
+
params.append(pageParam, paginationValues.page)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Append page size param if configured
|
|
198
|
+
if (sizeParam && paginationValues.limit != null) {
|
|
199
|
+
params.append(sizeParam, paginationValues.limit)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Prepend query string with pagination params
|
|
203
|
+
let paginationString = params.toString()
|
|
204
|
+
if (paginationString) {
|
|
205
|
+
queryString = `${paginationString}&${queryString}`
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
172
209
|
const main = `${path}?${queryString}`
|
|
173
210
|
let complete = main
|
|
174
211
|
if (this.config.url && !main.startsWith("http")) {
|
|
@@ -180,20 +217,36 @@ module RestModule {
|
|
|
180
217
|
return complete
|
|
181
218
|
}
|
|
182
219
|
|
|
183
|
-
addBody(bodyType: string, body: string | any, input: any) {
|
|
184
|
-
|
|
220
|
+
addBody(bodyType: string, body: string | any, input: any, pagination: PaginationConfig | null, paginationValues: PaginationValues | null) {
|
|
221
|
+
if (!input.headers) {
|
|
222
|
+
input.headers = {}
|
|
223
|
+
}
|
|
224
|
+
if (bodyType === BodyTypes.NONE) {
|
|
225
|
+
return input
|
|
226
|
+
}
|
|
227
|
+
let error, object: any = {}, string = ""
|
|
185
228
|
try {
|
|
186
|
-
|
|
187
|
-
|
|
229
|
+
if (body) {
|
|
230
|
+
string = typeof body !== "string" ? JSON.stringify(body) : body
|
|
231
|
+
object = typeof body === "object" ? body : JSON.parse(body)
|
|
232
|
+
}
|
|
188
233
|
} catch (err) {
|
|
189
234
|
error = err
|
|
190
235
|
}
|
|
191
|
-
|
|
192
|
-
|
|
236
|
+
|
|
237
|
+
// Util to add pagination values to a certain body type
|
|
238
|
+
const addPaginationToBody = (insertFn: Function) => {
|
|
239
|
+
if (pagination?.location === "body") {
|
|
240
|
+
if (pagination?.pageParam && paginationValues?.page != null) {
|
|
241
|
+
insertFn(pagination.pageParam, paginationValues.page)
|
|
242
|
+
}
|
|
243
|
+
if (pagination?.sizeParam && paginationValues?.limit != null) {
|
|
244
|
+
insertFn(pagination.sizeParam, paginationValues.limit)
|
|
245
|
+
}
|
|
246
|
+
}
|
|
193
247
|
}
|
|
248
|
+
|
|
194
249
|
switch (bodyType) {
|
|
195
|
-
case BodyTypes.NONE:
|
|
196
|
-
break
|
|
197
250
|
case BodyTypes.TEXT:
|
|
198
251
|
// content type defaults to plaintext
|
|
199
252
|
input.body = string
|
|
@@ -203,6 +256,9 @@ module RestModule {
|
|
|
203
256
|
for (let [key, value] of Object.entries(object)) {
|
|
204
257
|
params.append(key, value)
|
|
205
258
|
}
|
|
259
|
+
addPaginationToBody((key: string, value: any) => {
|
|
260
|
+
params.append(key, value)
|
|
261
|
+
})
|
|
206
262
|
input.body = params
|
|
207
263
|
break
|
|
208
264
|
case BodyTypes.FORM_DATA:
|
|
@@ -210,6 +266,9 @@ module RestModule {
|
|
|
210
266
|
for (let [key, value] of Object.entries(object)) {
|
|
211
267
|
form.append(key, value)
|
|
212
268
|
}
|
|
269
|
+
addPaginationToBody((key: string, value: any) => {
|
|
270
|
+
form.append(key, value)
|
|
271
|
+
})
|
|
213
272
|
input.body = form
|
|
214
273
|
break
|
|
215
274
|
case BodyTypes.XML:
|
|
@@ -219,13 +278,15 @@ module RestModule {
|
|
|
219
278
|
input.body = string
|
|
220
279
|
input.headers["Content-Type"] = "application/xml"
|
|
221
280
|
break
|
|
222
|
-
default:
|
|
223
281
|
case BodyTypes.JSON:
|
|
224
282
|
// if JSON error, throw it
|
|
225
283
|
if (error) {
|
|
226
284
|
throw "Invalid JSON for request body"
|
|
227
285
|
}
|
|
228
|
-
|
|
286
|
+
addPaginationToBody((key: string, value: any) => {
|
|
287
|
+
object[key] = value
|
|
288
|
+
})
|
|
289
|
+
input.body = JSON.stringify(object)
|
|
229
290
|
input.headers["Content-Type"] = "application/json"
|
|
230
291
|
break
|
|
231
292
|
}
|
|
@@ -271,6 +332,8 @@ module RestModule {
|
|
|
271
332
|
bodyType,
|
|
272
333
|
requestBody,
|
|
273
334
|
authConfigId,
|
|
335
|
+
pagination,
|
|
336
|
+
paginationValues
|
|
274
337
|
} = query
|
|
275
338
|
const authHeaders = this.getAuthHeaders(authConfigId)
|
|
276
339
|
|
|
@@ -289,14 +352,12 @@ module RestModule {
|
|
|
289
352
|
}
|
|
290
353
|
|
|
291
354
|
let input: any = { method, headers: this.headers }
|
|
292
|
-
|
|
293
|
-
input = this.addBody(bodyType, requestBody, input)
|
|
294
|
-
}
|
|
355
|
+
input = this.addBody(bodyType, requestBody, input, pagination, paginationValues)
|
|
295
356
|
|
|
296
357
|
this.startTimeMs = performance.now()
|
|
297
|
-
const url = this.getUrl(path, queryString)
|
|
358
|
+
const url = this.getUrl(path, queryString, pagination, paginationValues)
|
|
298
359
|
const response = await fetch(url, input)
|
|
299
|
-
return await this.parseResponse(response)
|
|
360
|
+
return await this.parseResponse(response, pagination)
|
|
300
361
|
}
|
|
301
362
|
|
|
302
363
|
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 }) {
|