@budibase/server 1.3.19-alpha.1 → 1.3.19
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__/mongodb.ts +1 -1
- package/builder/assets/index.9ce4f8c5.css +6 -0
- package/builder/assets/index.a1f7532b.js +876 -0
- package/builder/assets/vendor.5e1fe644.css +1 -0
- package/builder/assets/vendor.67dbd8fa.js +248 -0
- package/builder/index.html +4 -2
- package/coverage/clover.xml +388 -441
- package/coverage/coverage-final.json +20 -20
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
- 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 +11 -68
- package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +46 -46
- package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
- 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 +2 -2
- 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 +12 -207
- 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 +13 -13
- 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 +2 -2
- 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 +5 -5
- package/coverage/lcov-report/api/routes/utils/validators.js.html +6 -9
- 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 +18 -18
- 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 +2 -2
- package/coverage/lcov-report/db/utils.js.html +20 -56
- package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
- 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 +37 -37
- 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 +12 -12
- package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
- package/coverage/lcov-report/middleware/index.html +15 -15
- 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 +7 -7
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +16 -16
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +24 -24
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
- 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 +2 -2
- 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 +667 -780
- package/dist/api/controllers/application.js +5 -5
- package/dist/api/controllers/auth.js +0 -9
- package/dist/api/controllers/component.js +1 -14
- package/dist/api/controllers/datasource.js +8 -21
- package/dist/api/controllers/deploy/index.js +8 -1
- package/dist/api/controllers/integration.js +4 -4
- package/dist/api/controllers/row/external.js +1 -1
- package/dist/api/controllers/screen.js +2 -52
- package/dist/api/controllers/static/index.js +0 -1
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/dist/api/controllers/static/templates/preview.hbs +1 -5
- package/dist/api/index.js +1 -1
- package/dist/api/routes/application.js +2 -3
- package/dist/api/routes/index.js +0 -2
- package/dist/api/routes/public/tables.js +1 -1
- package/dist/api/routes/table.js +1 -1
- package/dist/api/routes/utils/validators.js +1 -2
- package/dist/app.js +0 -11
- package/dist/db/utils.js +1 -10
- package/dist/environment.js +0 -1
- package/dist/integrations/airtable.js +129 -126
- package/dist/integrations/arangodb.js +89 -86
- package/dist/integrations/base/query.js +2 -2
- package/dist/integrations/base/sqlTable.js +1 -3
- package/dist/integrations/couchdb.js +83 -80
- package/dist/integrations/dynamodb.js +164 -161
- package/dist/integrations/elasticsearch.js +138 -135
- package/dist/integrations/firebase.js +157 -154
- package/dist/integrations/googlesheets.js +327 -323
- package/dist/integrations/index.js +51 -99
- package/dist/integrations/microsoftSqlServer.js +243 -240
- package/dist/integrations/mongodb.js +242 -239
- package/dist/integrations/mysql.js +219 -215
- package/dist/integrations/oracle.js +322 -318
- package/dist/integrations/postgres.js +265 -262
- package/dist/integrations/redis.js +139 -134
- package/dist/integrations/rest.js +292 -289
- package/dist/integrations/s3.js +64 -61
- package/dist/integrations/snowflake.js +86 -83
- package/dist/middleware/currentapp.js +0 -2
- package/dist/migrations/functions/backfill/global.js +3 -0
- package/dist/migrations/functions/developerQuota.js +49 -0
- package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
- package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
- package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
- package/dist/migrations/index.js +10 -0
- package/dist/package.json +6 -9
- package/dist/tests/utilities/TestConfiguration.js +1 -1
- package/dist/threads/query.js +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +1 -110
- package/package.json +7 -10
- package/scripts/dev/manage.js +0 -1
- package/scripts/localdomain.js +1 -3
- package/specs/openapi.json +3 -3
- package/specs/openapi.yaml +3 -3
- package/specs/resources/query.js +1 -1
- package/src/api/controllers/application.ts +2 -1
- package/src/api/controllers/auth.js +0 -11
- package/src/api/controllers/component.js +2 -21
- package/src/api/controllers/datasource.js +8 -21
- package/src/api/controllers/deploy/index.ts +6 -1
- package/src/api/controllers/integration.js +4 -4
- package/src/api/controllers/row/external.js +1 -1
- package/src/api/controllers/screen.js +1 -66
- package/src/api/controllers/static/index.ts +1 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/src/api/controllers/static/templates/preview.hbs +1 -5
- package/src/api/index.js +1 -1
- package/src/api/routes/application.ts +2 -13
- package/src/api/routes/index.ts +0 -2
- package/src/api/routes/public/tables.ts +1 -1
- package/src/api/routes/table.js +1 -1
- package/src/api/routes/tests/query.spec.js +25 -8
- package/src/api/routes/tests/user.spec.js +2 -0
- package/src/api/routes/utils/validators.js +1 -2
- package/src/app.ts +0 -14
- package/src/db/utils.js +0 -12
- package/src/definitions/openapi.ts +3 -3
- package/src/environment.js +0 -1
- package/src/integrations/airtable.ts +118 -116
- package/src/integrations/arangodb.ts +89 -87
- package/src/integrations/base/query.ts +2 -2
- package/src/integrations/base/sqlTable.ts +1 -3
- package/src/integrations/couchdb.ts +89 -83
- package/src/integrations/dynamodb.ts +175 -173
- package/src/integrations/elasticsearch.ts +122 -120
- package/src/integrations/firebase.ts +159 -157
- package/src/integrations/googlesheets.ts +338 -328
- package/src/integrations/index.ts +21 -64
- package/src/integrations/microsoftSqlServer.ts +251 -249
- package/src/integrations/mongodb.ts +258 -261
- package/src/integrations/mysql.ts +234 -229
- package/src/integrations/oracle.ts +380 -373
- package/src/integrations/postgres.ts +268 -264
- package/src/integrations/redis.ts +132 -128
- package/src/integrations/rest.ts +329 -324
- package/src/integrations/s3.ts +71 -68
- package/src/integrations/snowflake.ts +82 -80
- package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
- package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
- package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
- package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
- package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
- package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
- package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
- package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
- package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
- package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
- package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
- package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
- package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
- package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
- package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
- package/src/middleware/currentapp.js +0 -2
- package/src/migrations/functions/backfill/global.ts +3 -0
- package/src/migrations/functions/developerQuota.ts +15 -0
- package/src/migrations/functions/publishedAppsQuota.ts +13 -0
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
- package/src/migrations/index.ts +16 -0
- package/src/module.d.ts +0 -2
- package/src/tests/utilities/TestConfiguration.js +1 -1
- package/src/threads/query.ts +2 -2
- package/src/utilities/fileSystem/index.js +0 -129
- package/builder/assets/index.1709d1b3.js +0 -1005
- package/builder/assets/index.8f621053.css +0 -6
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -200
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/utils.js +0 -26
- package/dist/watch.js +0 -77
- package/dist/websocket.js +0 -22
- package/src/api/controllers/plugin/file.ts +0 -15
- package/src/api/controllers/plugin/github.ts +0 -75
- package/src/api/controllers/plugin/index.ts +0 -215
- package/src/api/controllers/plugin/npm.ts +0 -56
- package/src/api/controllers/plugin/uploaders.ts +0 -4
- package/src/api/controllers/plugin/url.ts +0 -12
- package/src/api/controllers/plugin/utils.ts +0 -19
- package/src/api/routes/plugin.ts +0 -14
- package/src/watch.ts +0 -38
- package/src/websocket.ts +0 -26
package/src/api/routes/index.ts
CHANGED
|
@@ -24,7 +24,6 @@ import metadataRoutes from "./metadata"
|
|
|
24
24
|
import devRoutes from "./dev"
|
|
25
25
|
import cloudRoutes from "./cloud"
|
|
26
26
|
import migrationRoutes from "./migrations"
|
|
27
|
-
import pluginRoutes from "./plugin"
|
|
28
27
|
|
|
29
28
|
export { default as staticRoutes } from "./static"
|
|
30
29
|
export { default as publicRoutes } from "./public"
|
|
@@ -58,5 +57,4 @@ export const mainRoutes = [
|
|
|
58
57
|
tableRoutes,
|
|
59
58
|
rowRoutes,
|
|
60
59
|
migrationRoutes,
|
|
61
|
-
pluginRoutes,
|
|
62
60
|
]
|
|
@@ -26,7 +26,7 @@ const read = [],
|
|
|
26
26
|
* responses:
|
|
27
27
|
* 200:
|
|
28
28
|
* description: Returns the created table, including the ID which has been generated for it. This can be
|
|
29
|
-
* internal or external
|
|
29
|
+
* internal or external data sources.
|
|
30
30
|
* content:
|
|
31
31
|
* application/json:
|
|
32
32
|
* schema:
|
package/src/api/routes/table.js
CHANGED
|
@@ -55,7 +55,7 @@ router
|
|
|
55
55
|
* @apiParam (Body) {string} [_rev] If updating an existing internal table then the revision must also be specified.
|
|
56
56
|
* @apiParam (Body) {string} type] This should either be "internal" or "external" depending on the table type -
|
|
57
57
|
* this will default to internal.
|
|
58
|
-
* @apiParam (Body) {string} [sourceId] If creating an external table then this should be set to the
|
|
58
|
+
* @apiParam (Body) {string} [sourceId] If creating an external table then this should be set to the data source ID. If
|
|
59
59
|
* building an internal table this does not need to be set, although it will be returned as "bb_internal".
|
|
60
60
|
* @apiParam (Body) {string} name The name of the table, this will be used in the UI. To rename the table simply
|
|
61
61
|
* supply the table structure to this endpoint with the name changed.
|
|
@@ -231,6 +231,20 @@ describe("/queries", () => {
|
|
|
231
231
|
url: `/api/queries/preview`,
|
|
232
232
|
})
|
|
233
233
|
})
|
|
234
|
+
|
|
235
|
+
it("should fail with invalid integration type", async () => {
|
|
236
|
+
const { datasource } = await createInvalidIntegration()
|
|
237
|
+
await request
|
|
238
|
+
.post(`/api/queries/preview`)
|
|
239
|
+
.send({
|
|
240
|
+
datasourceId: datasource._id,
|
|
241
|
+
parameters: {},
|
|
242
|
+
fields: {},
|
|
243
|
+
queryVerb: "read",
|
|
244
|
+
})
|
|
245
|
+
.set(config.defaultHeaders())
|
|
246
|
+
.expect(400)
|
|
247
|
+
})
|
|
234
248
|
})
|
|
235
249
|
|
|
236
250
|
describe("execute", () => {
|
|
@@ -247,14 +261,17 @@ describe("/queries", () => {
|
|
|
247
261
|
})
|
|
248
262
|
|
|
249
263
|
it("should fail with invalid integration type", async () => {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
264
|
+
const { query, datasource } = await createInvalidIntegration()
|
|
265
|
+
await request
|
|
266
|
+
.post(`/api/queries/${query._id}`)
|
|
267
|
+
.send({
|
|
268
|
+
datasourceId: datasource._id,
|
|
269
|
+
parameters: {},
|
|
270
|
+
fields: {},
|
|
271
|
+
queryVerb: "read",
|
|
272
|
+
})
|
|
273
|
+
.set(config.defaultHeaders())
|
|
274
|
+
.expect(400)
|
|
258
275
|
})
|
|
259
276
|
})
|
|
260
277
|
|
|
@@ -23,6 +23,7 @@ describe("/users", () => {
|
|
|
23
23
|
})
|
|
24
24
|
|
|
25
25
|
describe("fetch", () => {
|
|
26
|
+
|
|
26
27
|
it("returns a list of users from an instance db", async () => {
|
|
27
28
|
await config.createUser("uuidx")
|
|
28
29
|
await config.createUser("uuidy")
|
|
@@ -37,6 +38,7 @@ describe("/users", () => {
|
|
|
37
38
|
expect(res.body.find(u => u._id === `ro_ta_users_us_uuidy`)).toBeDefined()
|
|
38
39
|
})
|
|
39
40
|
|
|
41
|
+
|
|
40
42
|
it("should apply authorization to endpoint", async () => {
|
|
41
43
|
await config.createUser()
|
|
42
44
|
await checkPermissionsEndpoint({
|
|
@@ -10,7 +10,6 @@ const Joi = require("joi")
|
|
|
10
10
|
const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("")
|
|
11
11
|
const OPTIONAL_NUMBER = Joi.number().optional().allow(null)
|
|
12
12
|
const OPTIONAL_BOOLEAN = Joi.boolean().optional().allow(null)
|
|
13
|
-
const APP_NAME_REGEX = /^[\w\s]+$/
|
|
14
13
|
|
|
15
14
|
exports.tableValidator = () => {
|
|
16
15
|
// prettier-ignore
|
|
@@ -215,7 +214,7 @@ exports.applicationValidator = () => {
|
|
|
215
214
|
return joiValidator.body(Joi.object({
|
|
216
215
|
_id: OPTIONAL_STRING,
|
|
217
216
|
_rev: OPTIONAL_STRING,
|
|
218
|
-
name: Joi.string().
|
|
217
|
+
name: Joi.string().required(),
|
|
219
218
|
url: OPTIONAL_STRING,
|
|
220
219
|
template: Joi.object({
|
|
221
220
|
templateString: OPTIONAL_STRING,
|
package/src/app.ts
CHANGED
|
@@ -26,13 +26,10 @@ const bullboard = require("./automations/bullboard")
|
|
|
26
26
|
const { logAlert } = require("@budibase/backend-core/logging")
|
|
27
27
|
const { pinoSettings } = require("@budibase/backend-core")
|
|
28
28
|
const { Thread } = require("./threads")
|
|
29
|
-
const fs = require("fs")
|
|
30
29
|
import redis from "./utilities/redis"
|
|
31
30
|
import * as migrations from "./migrations"
|
|
32
31
|
import { events, installation, tenancy } from "@budibase/backend-core"
|
|
33
32
|
import { createAdminUser, getChecklist } from "./utilities/workerRequests"
|
|
34
|
-
import { watch } from "./watch"
|
|
35
|
-
import { initialise as initialiseWebsockets } from "./websocket"
|
|
36
33
|
|
|
37
34
|
const app = new Koa()
|
|
38
35
|
|
|
@@ -77,7 +74,6 @@ if (env.isProd()) {
|
|
|
77
74
|
|
|
78
75
|
const server = http.createServer(app.callback())
|
|
79
76
|
destroyable(server)
|
|
80
|
-
initialiseWebsockets(server)
|
|
81
77
|
|
|
82
78
|
let shuttingDown = false,
|
|
83
79
|
errCode = 0
|
|
@@ -143,16 +139,6 @@ module.exports = server.listen(env.PORT || 0, async () => {
|
|
|
143
139
|
}
|
|
144
140
|
}
|
|
145
141
|
|
|
146
|
-
// monitor plugin directory if required
|
|
147
|
-
if (
|
|
148
|
-
env.SELF_HOSTED &&
|
|
149
|
-
!env.MULTI_TENANCY &&
|
|
150
|
-
env.PLUGINS_DIR &&
|
|
151
|
-
fs.existsSync(env.PLUGINS_DIR)
|
|
152
|
-
) {
|
|
153
|
-
watch()
|
|
154
|
-
}
|
|
155
|
-
|
|
156
142
|
// check for version updates
|
|
157
143
|
await installation.checkInstallVersion()
|
|
158
144
|
|
package/src/db/utils.js
CHANGED
|
@@ -42,7 +42,6 @@ const DocumentType = {
|
|
|
42
42
|
MEM_VIEW: "view",
|
|
43
43
|
USER_FLAG: "flag",
|
|
44
44
|
AUTOMATION_METADATA: "meta_au",
|
|
45
|
-
PLUGIN: "plg",
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
const InternalTables = {
|
|
@@ -371,10 +370,6 @@ exports.getMemoryViewParams = (otherProps = {}) => {
|
|
|
371
370
|
return getDocParams(DocumentType.MEM_VIEW, null, otherProps)
|
|
372
371
|
}
|
|
373
372
|
|
|
374
|
-
exports.generatePluginID = name => {
|
|
375
|
-
return `${DocumentType.PLUGIN}${SEPARATOR}${name}`
|
|
376
|
-
}
|
|
377
|
-
|
|
378
373
|
/**
|
|
379
374
|
* This can be used with the db.allDocs to get a list of IDs
|
|
380
375
|
*/
|
|
@@ -384,10 +379,3 @@ exports.getMultiIDParams = ids => {
|
|
|
384
379
|
include_docs: true,
|
|
385
380
|
}
|
|
386
381
|
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Gets parameters for retrieving automations, this is a utility function for the getDocParams function.
|
|
390
|
-
*/
|
|
391
|
-
exports.getPluginParams = (pluginId = null, otherProps = {}) => {
|
|
392
|
-
return getDocParams(DocumentType.PLUGIN, pluginId, otherProps)
|
|
393
|
-
}
|
|
@@ -344,7 +344,7 @@ export interface paths {
|
|
|
344
344
|
};
|
|
345
345
|
};
|
|
346
346
|
responses: {
|
|
347
|
-
/** Returns the created table, including the ID which has been generated for it. This can be internal or external
|
|
347
|
+
/** Returns the created table, including the ID which has been generated for it. This can be internal or external data sources. */
|
|
348
348
|
200: {
|
|
349
349
|
content: {
|
|
350
350
|
"application/json": components["schemas"]["tableOutput"];
|
|
@@ -965,7 +965,7 @@ export interface components {
|
|
|
965
965
|
query: {
|
|
966
966
|
/** @description The ID of the query. */
|
|
967
967
|
_id: string;
|
|
968
|
-
/** @description The ID of the
|
|
968
|
+
/** @description The ID of the data source the query belongs to. */
|
|
969
969
|
datasourceId?: string;
|
|
970
970
|
/** @description The bindings which are required to perform this query. */
|
|
971
971
|
parameters?: string[];
|
|
@@ -989,7 +989,7 @@ export interface components {
|
|
|
989
989
|
data: {
|
|
990
990
|
/** @description The ID of the query. */
|
|
991
991
|
_id: string;
|
|
992
|
-
/** @description The ID of the
|
|
992
|
+
/** @description The ID of the data source the query belongs to. */
|
|
993
993
|
datasourceId?: string;
|
|
994
994
|
/** @description The bindings which are required to perform this query. */
|
|
995
995
|
parameters?: string[];
|
package/src/environment.js
CHANGED
|
@@ -74,7 +74,6 @@ module.exports = {
|
|
|
74
74
|
SQL_MAX_ROWS: process.env.SQL_MAX_ROWS,
|
|
75
75
|
BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL,
|
|
76
76
|
BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD,
|
|
77
|
-
PLUGINS_DIR: process.env.PLUGINS_DIR || "/plugins",
|
|
78
77
|
// flags
|
|
79
78
|
ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
|
|
80
79
|
DISABLE_THREADING: process.env.DISABLE_THREADING,
|
|
@@ -5,144 +5,146 @@ import {
|
|
|
5
5
|
IntegrationBase,
|
|
6
6
|
} from "@budibase/types"
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
module AirtableModule {
|
|
9
|
+
const Airtable = require("airtable")
|
|
9
10
|
|
|
10
|
-
interface AirtableConfig {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
interface AirtableConfig {
|
|
12
|
+
apiKey: string
|
|
13
|
+
base: string
|
|
14
|
+
}
|
|
14
15
|
|
|
15
|
-
const SCHEMA: Integration = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
query: {
|
|
34
|
-
create: {
|
|
35
|
-
type: QueryType.FIELDS,
|
|
36
|
-
customisable: true,
|
|
37
|
-
fields: {
|
|
38
|
-
table: {
|
|
39
|
-
type: DatasourceFieldType.STRING,
|
|
40
|
-
required: true,
|
|
41
|
-
},
|
|
16
|
+
const SCHEMA: Integration = {
|
|
17
|
+
docs: "https://airtable.com/api",
|
|
18
|
+
description:
|
|
19
|
+
"Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
|
|
20
|
+
friendlyName: "Airtable",
|
|
21
|
+
type: "Spreadsheet",
|
|
22
|
+
datasource: {
|
|
23
|
+
apiKey: {
|
|
24
|
+
type: DatasourceFieldType.PASSWORD,
|
|
25
|
+
default: "enter api key",
|
|
26
|
+
required: true,
|
|
27
|
+
},
|
|
28
|
+
base: {
|
|
29
|
+
type: DatasourceFieldType.STRING,
|
|
30
|
+
default: "mybase",
|
|
31
|
+
required: true,
|
|
42
32
|
},
|
|
43
33
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
required: true,
|
|
54
|
-
},
|
|
55
|
-
numRecords: {
|
|
56
|
-
type: DatasourceFieldType.NUMBER,
|
|
57
|
-
default: 10,
|
|
34
|
+
query: {
|
|
35
|
+
create: {
|
|
36
|
+
type: QueryType.FIELDS,
|
|
37
|
+
customisable: true,
|
|
38
|
+
fields: {
|
|
39
|
+
table: {
|
|
40
|
+
type: DatasourceFieldType.STRING,
|
|
41
|
+
required: true,
|
|
42
|
+
},
|
|
58
43
|
},
|
|
59
44
|
},
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
45
|
+
read: {
|
|
46
|
+
type: QueryType.FIELDS,
|
|
47
|
+
fields: {
|
|
48
|
+
table: {
|
|
49
|
+
type: DatasourceFieldType.STRING,
|
|
50
|
+
required: true,
|
|
51
|
+
},
|
|
52
|
+
view: {
|
|
53
|
+
type: DatasourceFieldType.STRING,
|
|
54
|
+
required: true,
|
|
55
|
+
},
|
|
56
|
+
numRecords: {
|
|
57
|
+
type: DatasourceFieldType.NUMBER,
|
|
58
|
+
default: 10,
|
|
59
|
+
},
|
|
69
60
|
},
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
61
|
+
},
|
|
62
|
+
update: {
|
|
63
|
+
type: QueryType.FIELDS,
|
|
64
|
+
customisable: true,
|
|
65
|
+
fields: {
|
|
66
|
+
id: {
|
|
67
|
+
display: "Record ID",
|
|
68
|
+
type: DatasourceFieldType.STRING,
|
|
69
|
+
required: true,
|
|
70
|
+
},
|
|
71
|
+
table: {
|
|
72
|
+
type: DatasourceFieldType.STRING,
|
|
73
|
+
required: true,
|
|
74
|
+
},
|
|
73
75
|
},
|
|
74
76
|
},
|
|
77
|
+
delete: {
|
|
78
|
+
type: QueryType.JSON,
|
|
79
|
+
},
|
|
75
80
|
},
|
|
76
|
-
|
|
77
|
-
type: QueryType.JSON,
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
}
|
|
81
|
+
}
|
|
81
82
|
|
|
82
|
-
class AirtableIntegration implements IntegrationBase {
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
class AirtableIntegration implements IntegrationBase {
|
|
84
|
+
private config: AirtableConfig
|
|
85
|
+
private client: any
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
constructor(config: AirtableConfig) {
|
|
88
|
+
this.config = config
|
|
89
|
+
this.client = new Airtable(config).base(config.base)
|
|
90
|
+
}
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
async create(query: { table: any; json: any }) {
|
|
93
|
+
const { table, json } = query
|
|
93
94
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
try {
|
|
96
|
+
return await this.client(table).create([
|
|
97
|
+
{
|
|
98
|
+
fields: json,
|
|
99
|
+
},
|
|
100
|
+
])
|
|
101
|
+
} catch (err) {
|
|
102
|
+
console.error("Error writing to airtable", err)
|
|
103
|
+
throw err
|
|
104
|
+
}
|
|
103
105
|
}
|
|
104
|
-
}
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
107
|
+
async read(query: { table: any; numRecords: any; view: any }) {
|
|
108
|
+
try {
|
|
109
|
+
const records = await this.client(query.table)
|
|
110
|
+
.select({ maxRecords: query.numRecords || 10, view: query.view })
|
|
111
|
+
.firstPage()
|
|
112
|
+
// @ts-ignore
|
|
113
|
+
return records.map(({ fields }) => fields)
|
|
114
|
+
} catch (err) {
|
|
115
|
+
console.error("Error writing to airtable", err)
|
|
116
|
+
return []
|
|
117
|
+
}
|
|
116
118
|
}
|
|
117
|
-
}
|
|
118
119
|
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
async update(query: { table: any; id: any; json: any }) {
|
|
121
|
+
const { table, id, json } = query
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
123
|
+
try {
|
|
124
|
+
return await this.client(table).update([
|
|
125
|
+
{
|
|
126
|
+
id,
|
|
127
|
+
fields: json,
|
|
128
|
+
},
|
|
129
|
+
])
|
|
130
|
+
} catch (err) {
|
|
131
|
+
console.error("Error writing to airtable", err)
|
|
132
|
+
throw err
|
|
133
|
+
}
|
|
132
134
|
}
|
|
133
|
-
}
|
|
134
135
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
async delete(query: { table: any; ids: any }) {
|
|
137
|
+
try {
|
|
138
|
+
return await this.client(query.table).destroy(query.ids)
|
|
139
|
+
} catch (err) {
|
|
140
|
+
console.error("Error writing to airtable", err)
|
|
141
|
+
throw err
|
|
142
|
+
}
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
|
-
}
|
|
144
145
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
module.exports = {
|
|
147
|
+
schema: SCHEMA,
|
|
148
|
+
integration: AirtableIntegration,
|
|
149
|
+
}
|
|
148
150
|
}
|