@budibase/server 1.3.21 → 1.3.22-alpha.1
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.96c69636.js +1008 -0
- package/builder/assets/index.c167b5c3.css +6 -0
- package/builder/index.html +2 -4
- package/coverage/clover.xml +308 -338
- package/coverage/coverage-final.json +19 -21
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +41 -8
- 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/datasource.js.html +73 -34
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +27 -57
- 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/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 +9 -9
- package/coverage/lcov-report/api/routes/utils/validators.js.html +75 -12
- 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 +14 -14
- 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 +30 -18
- 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 +44 -44
- 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 +46 -40
- 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 +15 -15
- 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 +32 -8
- package/coverage/lcov.info +521 -558
- package/dist/api/controllers/application.js +5 -5
- package/dist/api/controllers/auth.js +9 -0
- package/dist/api/controllers/component.js +19 -6
- package/dist/api/controllers/datasource.js +21 -8
- package/dist/api/controllers/deploy/index.js +1 -8
- package/dist/api/controllers/integration.js +4 -4
- package/dist/{migrations/functions/usageQuotas/syncDevelopers.js → api/controllers/plugin/file.js} +13 -13
- package/dist/api/controllers/plugin/github.js +69 -0
- package/dist/api/controllers/plugin/index.js +144 -0
- package/dist/api/controllers/plugin/npm.js +58 -0
- package/dist/api/controllers/plugin/uploaders.js +11 -0
- package/dist/{migrations/functions/usageQuotas/syncPublishedApps.js → api/controllers/plugin/url.js} +13 -15
- package/dist/api/controllers/plugin/utils.js +26 -0
- package/dist/api/controllers/row/external.js +1 -1
- package/dist/api/controllers/screen.js +62 -14
- package/dist/api/controllers/static/index.js +1 -0
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +10 -0
- package/dist/api/controllers/static/templates/preview.hbs +5 -1
- package/dist/api/index.js +1 -1
- package/dist/api/routes/application.js +3 -2
- package/dist/api/routes/index.js +2 -0
- package/dist/{migrations/functions/publishedAppsQuota.js → api/routes/plugin.js} +13 -21
- package/dist/api/routes/public/rows.js +1 -82
- package/dist/api/routes/public/tables.js +1 -1
- package/dist/api/routes/table.js +1 -1
- package/dist/api/routes/utils/validators.js +20 -2
- package/dist/app.js +16 -1
- package/dist/db/utils.js +3 -0
- package/dist/environment.js +1 -0
- package/dist/integrations/airtable.js +126 -129
- package/dist/integrations/arangodb.js +86 -89
- package/dist/integrations/base/query.js +2 -2
- package/dist/integrations/base/sqlTable.js +3 -1
- package/dist/integrations/couchdb.js +80 -83
- package/dist/integrations/dynamodb.js +161 -164
- package/dist/integrations/elasticsearch.js +135 -138
- package/dist/integrations/firebase.js +154 -157
- package/dist/integrations/googlesheets.js +323 -327
- package/dist/integrations/index.js +99 -51
- package/dist/integrations/microsoftSqlServer.js +240 -243
- package/dist/integrations/mongodb.js +239 -242
- package/dist/integrations/mysql.js +215 -219
- package/dist/integrations/oracle.js +318 -322
- package/dist/integrations/postgres.js +262 -265
- package/dist/integrations/redis.js +134 -139
- package/dist/integrations/rest.js +289 -292
- package/dist/integrations/s3.js +61 -64
- package/dist/integrations/snowflake.js +83 -86
- package/dist/middleware/currentapp.js +2 -0
- package/dist/migrations/functions/backfill/global.js +0 -3
- package/dist/migrations/index.js +0 -10
- package/dist/package.json +9 -6
- 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 +105 -1
- package/dist/utilities/workerRequests.js +4 -0
- package/dist/watch.js +77 -0
- package/dist/websocket.js +22 -0
- package/package.json +10 -7
- package/scripts/dev/manage.js +4 -0
- package/scripts/localdomain.js +3 -1
- package/specs/openapi.json +115 -112
- package/specs/openapi.yaml +96 -94
- package/specs/resources/misc.js +116 -0
- package/specs/resources/query.js +1 -1
- package/src/api/controllers/application.ts +1 -2
- package/src/api/controllers/auth.js +11 -0
- package/src/api/controllers/component.ts +57 -0
- package/src/api/controllers/datasource.js +21 -8
- package/src/api/controllers/deploy/index.ts +1 -6
- package/src/api/controllers/integration.js +4 -4
- package/src/api/controllers/plugin/file.ts +15 -0
- package/src/api/controllers/plugin/github.ts +75 -0
- package/src/api/controllers/plugin/index.ts +134 -0
- package/src/api/controllers/plugin/npm.ts +56 -0
- package/src/api/controllers/plugin/uploaders.ts +4 -0
- package/src/api/controllers/plugin/url.ts +12 -0
- package/src/api/controllers/plugin/utils.ts +19 -0
- package/src/api/controllers/public/mapping/types.ts +8 -0
- package/src/api/controllers/row/external.js +1 -1
- package/src/api/controllers/screen.ts +122 -0
- package/src/api/controllers/static/index.ts +1 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +10 -0
- package/src/api/controllers/static/templates/preview.hbs +5 -1
- package/src/api/index.js +1 -1
- package/src/api/routes/application.ts +13 -2
- package/src/api/routes/index.ts +2 -0
- package/src/api/routes/plugin.ts +14 -0
- package/src/api/routes/public/rows.ts +1 -82
- 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 +8 -25
- package/src/api/routes/tests/user.spec.js +0 -2
- package/src/api/routes/utils/validators.js +26 -5
- package/src/app.ts +25 -2
- package/src/db/utils.js +4 -0
- package/src/definitions/openapi.ts +56 -55
- package/src/environment.js +1 -0
- package/src/integrations/airtable.ts +116 -118
- package/src/integrations/arangodb.ts +87 -89
- package/src/integrations/base/query.ts +2 -2
- package/src/integrations/base/sqlTable.ts +3 -1
- package/src/integrations/couchdb.ts +83 -89
- package/src/integrations/dynamodb.ts +173 -175
- package/src/integrations/elasticsearch.ts +120 -122
- package/src/integrations/firebase.ts +157 -159
- package/src/integrations/googlesheets.ts +328 -338
- package/src/integrations/index.ts +64 -21
- package/src/integrations/microsoftSqlServer.ts +249 -251
- package/src/integrations/mongodb.ts +261 -258
- package/src/integrations/mysql.ts +229 -234
- package/src/integrations/oracle.ts +373 -380
- package/src/integrations/postgres.ts +264 -268
- package/src/integrations/redis.ts +128 -132
- package/src/integrations/rest.ts +324 -329
- package/src/integrations/s3.ts +68 -71
- package/src/integrations/snowflake.ts +80 -82
- package/src/integrations/tests/{airtable.spec.js → airtable.spec.ts} +21 -18
- package/src/integrations/tests/{arangodb.spec.js → arangodb.spec.ts} +12 -9
- package/src/integrations/tests/{couchdb.spec.js → couchdb.spec.ts} +33 -27
- package/src/integrations/tests/{dynamodb.spec.js → dynamodb.spec.ts} +45 -41
- package/src/integrations/tests/{elasticsearch.spec.js → elasticsearch.spec.ts} +22 -21
- package/src/integrations/tests/{firebase.spec.js → firebase.spec.ts} +33 -28
- package/src/integrations/tests/{microsoftSqlServer.spec.js → microsoftSqlServer.spec.ts} +12 -11
- package/src/integrations/tests/{mongo.spec.js → mongo.spec.ts} +46 -35
- package/src/integrations/tests/{mysql.spec.js → mysql.spec.ts} +17 -15
- package/src/integrations/tests/{oracle.spec.js → oracle.spec.ts} +19 -17
- package/src/integrations/tests/{postgres.spec.js → postgres.spec.ts} +19 -17
- package/src/integrations/tests/{redis.spec.js → redis.spec.ts} +27 -18
- package/src/integrations/tests/{rest.spec.js → rest.spec.ts} +22 -14
- package/src/integrations/tests/{s3.spec.js → s3.spec.ts} +10 -8
- package/src/integrations/tests/{sql.spec.js → sql.spec.ts} +228 -177
- package/src/middleware/currentapp.js +2 -0
- package/src/migrations/functions/backfill/global.ts +0 -3
- package/src/migrations/index.ts +0 -16
- package/src/module.d.ts +2 -0
- package/src/tests/utilities/TestConfiguration.js +1 -1
- package/src/threads/query.ts +2 -2
- package/src/utilities/fileSystem/index.js +123 -0
- package/src/utilities/workerRequests.js +8 -0
- package/src/watch.ts +38 -0
- package/src/websocket.ts +26 -0
- package/builder/assets/index.8d12d461.css +0 -6
- package/builder/assets/index.d354271c.js +0 -879
- package/builder/assets/vendor.5e1fe644.css +0 -1
- package/builder/assets/vendor.67dbd8fa.js +0 -248
- package/coverage/lcov-report/api/controllers/component.js.html +0 -199
- package/coverage/lcov-report/api/controllers/screen.js.html +0 -259
- package/dist/migrations/functions/developerQuota.js +0 -49
- package/src/api/controllers/component.js +0 -38
- package/src/api/controllers/screen.js +0 -58
- package/src/migrations/functions/developerQuota.ts +0 -15
- package/src/migrations/functions/publishedAppsQuota.ts +0 -13
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
|
@@ -14,14 +14,18 @@ const { join } = require("path");
|
|
|
14
14
|
const uuid = require("uuid/v4");
|
|
15
15
|
const { doWithDB, dangerousGetDB, closeDB, } = require("@budibase/backend-core/db");
|
|
16
16
|
const { ObjectStoreBuckets } = require("../../constants");
|
|
17
|
-
const { upload, retrieve, retrieveToTmp, streamUpload, deleteFolder, downloadTarball, deleteFiles, } = require("./utilities");
|
|
17
|
+
const { upload, retrieve, retrieveToTmp, streamUpload, deleteFolder, downloadTarball, downloadTarballDirect, deleteFiles, } = require("./utilities");
|
|
18
18
|
const { updateClientLibrary } = require("./clientLibrary");
|
|
19
|
+
const { checkSlashesInUrl } = require("../");
|
|
19
20
|
const env = require("../../environment");
|
|
20
21
|
const { USER_METDATA_PREFIX, LINK_USER_METADATA_PREFIX, TABLE_ROW_PREFIX, } = require("../../db/utils");
|
|
21
22
|
const MemoryStream = require("memorystream");
|
|
22
23
|
const { getAppId } = require("@budibase/backend-core/context");
|
|
24
|
+
const tar = require("tar");
|
|
25
|
+
const fetch = require("node-fetch");
|
|
23
26
|
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..");
|
|
24
27
|
const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules");
|
|
28
|
+
const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
|
|
25
29
|
/**
|
|
26
30
|
* The single stack system (Cloud and Builder) should not make use of the file system where possible,
|
|
27
31
|
* this file handles all of the file access for the system with the intention of limiting it all to one
|
|
@@ -294,6 +298,105 @@ exports.cleanup = appIds => {
|
|
|
294
298
|
}
|
|
295
299
|
}
|
|
296
300
|
};
|
|
301
|
+
const createTempFolder = item => {
|
|
302
|
+
const path = join(budibaseTempDir(), item);
|
|
303
|
+
try {
|
|
304
|
+
// remove old tmp directories automatically - don't combine
|
|
305
|
+
if (fs.existsSync(path)) {
|
|
306
|
+
fs.rmSync(path, { recursive: true, force: true });
|
|
307
|
+
}
|
|
308
|
+
fs.mkdirSync(path);
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
throw new Error(`Path cannot be created: ${err.message}`);
|
|
312
|
+
}
|
|
313
|
+
return path;
|
|
314
|
+
};
|
|
315
|
+
exports.createTempFolder = createTempFolder;
|
|
316
|
+
const extractTarball = (fromFilePath, toPath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
317
|
+
yield tar.extract({
|
|
318
|
+
file: fromFilePath,
|
|
319
|
+
C: toPath,
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
exports.extractTarball = extractTarball;
|
|
323
|
+
const getPluginMetadata = (path) => __awaiter(void 0, void 0, void 0, function* () {
|
|
324
|
+
let metadata = {};
|
|
325
|
+
try {
|
|
326
|
+
const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
|
|
327
|
+
const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
|
|
328
|
+
metadata.schema = JSON.parse(schema);
|
|
329
|
+
metadata.package = JSON.parse(pkg);
|
|
330
|
+
if (!metadata.package.name ||
|
|
331
|
+
!metadata.package.version ||
|
|
332
|
+
!metadata.package.description) {
|
|
333
|
+
throw new Error("package.json is missing one of 'name', 'version' or 'description'.");
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
throw new Error(`Unable to process schema.json/package.json in plugin. ${err.message}`);
|
|
338
|
+
}
|
|
339
|
+
return { metadata, directory: path };
|
|
340
|
+
});
|
|
341
|
+
exports.getPluginMetadata = getPluginMetadata;
|
|
342
|
+
exports.getDatasourcePlugin = (name, url, hash) => __awaiter(void 0, void 0, void 0, function* () {
|
|
343
|
+
if (!fs.existsSync(DATASOURCE_PATH)) {
|
|
344
|
+
fs.mkdirSync(DATASOURCE_PATH);
|
|
345
|
+
}
|
|
346
|
+
const filename = join(DATASOURCE_PATH, name);
|
|
347
|
+
const metadataName = `${filename}.bbmetadata`;
|
|
348
|
+
if (fs.existsSync(filename)) {
|
|
349
|
+
const currentHash = fs.readFileSync(metadataName, "utf8");
|
|
350
|
+
// if hash is the same return the file, otherwise remove it and re-download
|
|
351
|
+
if (currentHash === hash) {
|
|
352
|
+
return require(filename);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
console.log(`Updating plugin: ${name}`);
|
|
356
|
+
delete require.cache[require.resolve(filename)];
|
|
357
|
+
fs.unlinkSync(filename);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const fullUrl = checkSlashesInUrl(`${env.MINIO_URL}/${ObjectStoreBuckets.PLUGINS}/${url}`);
|
|
361
|
+
const response = yield fetch(fullUrl);
|
|
362
|
+
if (response.status === 200) {
|
|
363
|
+
const content = yield response.text();
|
|
364
|
+
fs.writeFileSync(filename, content);
|
|
365
|
+
fs.writeFileSync(metadataName, hash);
|
|
366
|
+
return require(filename);
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
throw new Error(`Unable to retrieve plugin - reason: ${yield response.text()}`);
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
/**
|
|
373
|
+
* Find for a file recursively from start path applying filter, return first match
|
|
374
|
+
*/
|
|
375
|
+
exports.findFileRec = (startPath, filter) => {
|
|
376
|
+
if (!fs.existsSync(startPath)) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const files = fs.readdirSync(startPath);
|
|
380
|
+
for (let i = 0, len = files.length; i < len; i++) {
|
|
381
|
+
const filename = join(startPath, files[i]);
|
|
382
|
+
const stat = fs.lstatSync(filename);
|
|
383
|
+
if (stat.isDirectory()) {
|
|
384
|
+
return exports.findFileRec(filename, filter);
|
|
385
|
+
}
|
|
386
|
+
else if (filename.endsWith(filter)) {
|
|
387
|
+
return filename;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
/**
|
|
392
|
+
* Remove a folder which is not empty from the file system
|
|
393
|
+
*/
|
|
394
|
+
exports.deleteFolderFileSystem = path => {
|
|
395
|
+
if (!fs.existsSync(path)) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
fs.rmSync(path, { recursive: true, force: true });
|
|
399
|
+
};
|
|
297
400
|
/**
|
|
298
401
|
* Full function definition for below can be found in the utilities.
|
|
299
402
|
*/
|
|
@@ -301,5 +404,6 @@ exports.upload = upload;
|
|
|
301
404
|
exports.retrieve = retrieve;
|
|
302
405
|
exports.retrieveToTmp = retrieveToTmp;
|
|
303
406
|
exports.deleteFiles = deleteFiles;
|
|
407
|
+
exports.downloadTarballDirect = downloadTarballDirect;
|
|
304
408
|
exports.TOP_LEVEL_PATH = TOP_LEVEL_PATH;
|
|
305
409
|
exports.NODE_MODULES_PATH = NODE_MODULES_PATH;
|
|
@@ -128,3 +128,7 @@ exports.getChecklist = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
128
128
|
const response = yield fetch(checkSlashesInUrl(env.WORKER_URL + "/api/global/configs/checklist"), request(null, { method: "GET" }));
|
|
129
129
|
return checkResponse(response, "get checklist");
|
|
130
130
|
});
|
|
131
|
+
exports.generateApiKey = (userId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
132
|
+
const response = yield fetch(checkSlashesInUrl(env.WORKER_URL + "/api/global/self/api_key"), request(null, { method: "POST", body: { userId } }));
|
|
133
|
+
return checkResponse(response, "generate API key");
|
|
134
|
+
});
|
package/dist/watch.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.watch = void 0;
|
|
39
|
+
const path_1 = __importDefault(require("path"));
|
|
40
|
+
const env = __importStar(require("./environment"));
|
|
41
|
+
const chokidar_1 = __importDefault(require("chokidar"));
|
|
42
|
+
const fs_1 = __importDefault(require("fs"));
|
|
43
|
+
const backend_core_1 = require("@budibase/backend-core");
|
|
44
|
+
const constants_1 = require("@budibase/backend-core/constants");
|
|
45
|
+
const plugin_1 = require("./api/controllers/plugin");
|
|
46
|
+
function watch() {
|
|
47
|
+
const watchPath = path_1.default.join(env.PLUGINS_DIR, "./**/*.tar.gz");
|
|
48
|
+
chokidar_1.default
|
|
49
|
+
.watch(watchPath, {
|
|
50
|
+
ignored: "**/node_modules",
|
|
51
|
+
awaitWriteFinish: {
|
|
52
|
+
pollInterval: 100,
|
|
53
|
+
stabilityThreshold: 250,
|
|
54
|
+
},
|
|
55
|
+
usePolling: true,
|
|
56
|
+
interval: 250,
|
|
57
|
+
})
|
|
58
|
+
.on("all", (event, path) => __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
// Sanity checks
|
|
60
|
+
if (!(path === null || path === void 0 ? void 0 : path.endsWith(".tar.gz")) || !fs_1.default.existsSync(path)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
yield backend_core_1.tenancy.doInTenant(constants_1.DEFAULT_TENANT_ID, () => __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
try {
|
|
65
|
+
const split = path.split("/");
|
|
66
|
+
const name = split[split.length - 1];
|
|
67
|
+
console.log("Importing plugin:", path);
|
|
68
|
+
yield (0, plugin_1.processUploadedPlugin)({ name, path });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const message = (err === null || err === void 0 ? void 0 : err.message) ? err === null || err === void 0 ? void 0 : err.message : err;
|
|
72
|
+
console.error("Failed to import plugin:", message);
|
|
73
|
+
}
|
|
74
|
+
}));
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
exports.watch = watch;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClientAppSocket = exports.initialise = void 0;
|
|
4
|
+
const socket_io_1 = require("socket.io");
|
|
5
|
+
class Websocket {
|
|
6
|
+
constructor(server, path) {
|
|
7
|
+
this.socketServer = new socket_io_1.Server(server, {
|
|
8
|
+
path,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
// Emit an event to all sockets
|
|
12
|
+
emit(event, payload) {
|
|
13
|
+
this.socketServer.sockets.emit(event, payload);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Likely to be more socket instances in future
|
|
17
|
+
let ClientAppSocket;
|
|
18
|
+
exports.ClientAppSocket = ClientAppSocket;
|
|
19
|
+
const initialise = (server) => {
|
|
20
|
+
exports.ClientAppSocket = ClientAppSocket = new Websocket(server, "/socket/client");
|
|
21
|
+
};
|
|
22
|
+
exports.initialise = initialise;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.22-alpha.1",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"license": "GPL-3.0",
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
80
|
-
"@budibase/backend-core": "
|
|
81
|
-
"@budibase/client": "
|
|
82
|
-
"@budibase/pro": "1.3.
|
|
83
|
-
"@budibase/string-templates": "
|
|
84
|
-
"@budibase/types": "
|
|
80
|
+
"@budibase/backend-core": "1.3.22-alpha.1",
|
|
81
|
+
"@budibase/client": "1.3.22-alpha.1",
|
|
82
|
+
"@budibase/pro": "1.3.22-alpha.0",
|
|
83
|
+
"@budibase/string-templates": "1.3.22-alpha.1",
|
|
84
|
+
"@budibase/types": "1.3.22-alpha.1",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
"bcryptjs": "2.4.3",
|
|
96
96
|
"bull": "4.8.5",
|
|
97
97
|
"chmodr": "1.2.0",
|
|
98
|
+
"chokidar": "3.5.3",
|
|
98
99
|
"csvtojson": "2.0.10",
|
|
99
100
|
"curlconverter": "3.21.0",
|
|
100
101
|
"dotenv": "8.2.0",
|
|
@@ -138,8 +139,10 @@
|
|
|
138
139
|
"redis": "4",
|
|
139
140
|
"server-destroy": "1.0.1",
|
|
140
141
|
"snowflake-promise": "^4.5.0",
|
|
142
|
+
"socket.io": "^4.5.1",
|
|
141
143
|
"svelte": "3.49.0",
|
|
142
144
|
"swagger-parser": "10.0.3",
|
|
145
|
+
"tar": "6.1.11",
|
|
143
146
|
"to-json-schema": "0.2.5",
|
|
144
147
|
"uuid": "3.3.2",
|
|
145
148
|
"validate.js": "0.13.1",
|
|
@@ -196,5 +199,5 @@
|
|
|
196
199
|
"optionalDependencies": {
|
|
197
200
|
"oracledb": "5.3.0"
|
|
198
201
|
},
|
|
199
|
-
"gitHead": "
|
|
202
|
+
"gitHead": "db762e7c2d25e6b39b73d0c99ce883bda863ed39"
|
|
200
203
|
}
|
package/scripts/dev/manage.js
CHANGED
|
@@ -58,6 +58,7 @@ async function init() {
|
|
|
58
58
|
DEPLOYMENT_ENVIRONMENT: "development",
|
|
59
59
|
BB_ADMIN_USER_EMAIL: "",
|
|
60
60
|
BB_ADMIN_USER_PASSWORD: "",
|
|
61
|
+
PLUGINS_DIR: "",
|
|
61
62
|
}
|
|
62
63
|
let envFile = ""
|
|
63
64
|
Object.keys(envFileJson).forEach(key => {
|
|
@@ -71,6 +72,9 @@ async function up() {
|
|
|
71
72
|
console.log("Spinning up your budibase dev environment... 🔧✨")
|
|
72
73
|
await init()
|
|
73
74
|
await compose.upAll(CONFIG)
|
|
75
|
+
|
|
76
|
+
// We always ensure to restart the proxy service in case of nginx conf changes
|
|
77
|
+
await compose.restartOne("proxy-service", CONFIG)
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
async function down() {
|
package/scripts/localdomain.js
CHANGED
|
@@ -17,6 +17,8 @@ const arg = process.argv.slice(2)[0]
|
|
|
17
17
|
*/
|
|
18
18
|
updateDotEnv({
|
|
19
19
|
ACCOUNT_PORTAL_URL:
|
|
20
|
-
arg === "enable"
|
|
20
|
+
arg === "enable"
|
|
21
|
+
? "http://account.local.com:10001"
|
|
22
|
+
: "http://localhost:10001",
|
|
21
23
|
COOKIE_DOMAIN: arg === "enable" ? ".local.com" : "",
|
|
22
24
|
}).then(() => console.log("Updated worker!"))
|
package/specs/openapi.json
CHANGED
|
@@ -1327,7 +1327,7 @@
|
|
|
1327
1327
|
"type": "string"
|
|
1328
1328
|
},
|
|
1329
1329
|
"datasourceId": {
|
|
1330
|
-
"description": "The ID of the
|
|
1330
|
+
"description": "The ID of the datasource the query belongs to.",
|
|
1331
1331
|
"type": "string"
|
|
1332
1332
|
},
|
|
1333
1333
|
"parameters": {
|
|
@@ -1386,7 +1386,7 @@
|
|
|
1386
1386
|
"type": "string"
|
|
1387
1387
|
},
|
|
1388
1388
|
"datasourceId": {
|
|
1389
|
-
"description": "The ID of the
|
|
1389
|
+
"description": "The ID of the datasource the query belongs to.",
|
|
1390
1390
|
"type": "string"
|
|
1391
1391
|
},
|
|
1392
1392
|
"parameters": {
|
|
@@ -1659,6 +1659,117 @@
|
|
|
1659
1659
|
"data"
|
|
1660
1660
|
]
|
|
1661
1661
|
},
|
|
1662
|
+
"rowSearch": {
|
|
1663
|
+
"type": "object",
|
|
1664
|
+
"properties": {
|
|
1665
|
+
"query": {
|
|
1666
|
+
"type": "object",
|
|
1667
|
+
"properties": {
|
|
1668
|
+
"allOr": {
|
|
1669
|
+
"type": "boolean",
|
|
1670
|
+
"description": "Specifies that a row should be returned if it satisfies any of the specified options, rather than requiring it to fulfill all the search parameters. This defaults to false, meaning AND logic will be used."
|
|
1671
|
+
},
|
|
1672
|
+
"string": {
|
|
1673
|
+
"type": "object",
|
|
1674
|
+
"example": {
|
|
1675
|
+
"columnName1": "value",
|
|
1676
|
+
"columnName2": "value"
|
|
1677
|
+
},
|
|
1678
|
+
"description": "A map of field name to the string to search for, this will look for rows that have a value starting with the string value.",
|
|
1679
|
+
"additionalProperties": {
|
|
1680
|
+
"type": "string",
|
|
1681
|
+
"description": "The value to search for in the column."
|
|
1682
|
+
}
|
|
1683
|
+
},
|
|
1684
|
+
"fuzzy": {
|
|
1685
|
+
"type": "object",
|
|
1686
|
+
"description": "A fuzzy search, only supported by internal tables."
|
|
1687
|
+
},
|
|
1688
|
+
"range": {
|
|
1689
|
+
"type": "object",
|
|
1690
|
+
"description": "Searches within a range, the format of this must be in the format of an object with a \"low\" and \"high\" property.",
|
|
1691
|
+
"example": {
|
|
1692
|
+
"columnName1": {
|
|
1693
|
+
"low": 10,
|
|
1694
|
+
"high": 20
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
},
|
|
1698
|
+
"equal": {
|
|
1699
|
+
"type": "object",
|
|
1700
|
+
"description": "Searches for rows that have a column value that is exactly the value set."
|
|
1701
|
+
},
|
|
1702
|
+
"notEqual": {
|
|
1703
|
+
"type": "object",
|
|
1704
|
+
"description": "Searches for any row which does not contain the specified column value."
|
|
1705
|
+
},
|
|
1706
|
+
"empty": {
|
|
1707
|
+
"type": "object",
|
|
1708
|
+
"description": "Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value.",
|
|
1709
|
+
"example": {
|
|
1710
|
+
"columnName1": ""
|
|
1711
|
+
}
|
|
1712
|
+
},
|
|
1713
|
+
"notEmpty": {
|
|
1714
|
+
"type": "object",
|
|
1715
|
+
"description": "Searches for rows which have the specified column."
|
|
1716
|
+
},
|
|
1717
|
+
"oneOf": {
|
|
1718
|
+
"type": "object",
|
|
1719
|
+
"description": "Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2]."
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
},
|
|
1723
|
+
"paginate": {
|
|
1724
|
+
"type": "boolean",
|
|
1725
|
+
"description": "Enables pagination, by default this is disabled."
|
|
1726
|
+
},
|
|
1727
|
+
"bookmark": {
|
|
1728
|
+
"oneOf": [
|
|
1729
|
+
{
|
|
1730
|
+
"type": "string"
|
|
1731
|
+
},
|
|
1732
|
+
{
|
|
1733
|
+
"type": "integer"
|
|
1734
|
+
}
|
|
1735
|
+
],
|
|
1736
|
+
"description": "If retrieving another page, the bookmark from the previous request must be supplied."
|
|
1737
|
+
},
|
|
1738
|
+
"limit": {
|
|
1739
|
+
"type": "integer",
|
|
1740
|
+
"description": "The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000."
|
|
1741
|
+
},
|
|
1742
|
+
"sort": {
|
|
1743
|
+
"type": "object",
|
|
1744
|
+
"description": "A set of parameters describing the sort behaviour of the search.",
|
|
1745
|
+
"properties": {
|
|
1746
|
+
"order": {
|
|
1747
|
+
"type": "string",
|
|
1748
|
+
"enum": [
|
|
1749
|
+
"ascending",
|
|
1750
|
+
"descending"
|
|
1751
|
+
],
|
|
1752
|
+
"description": "The order of the sort, by default this is ascending."
|
|
1753
|
+
},
|
|
1754
|
+
"column": {
|
|
1755
|
+
"type": "string",
|
|
1756
|
+
"description": "The name of the column by which the rows will be sorted."
|
|
1757
|
+
},
|
|
1758
|
+
"type": {
|
|
1759
|
+
"type": "string",
|
|
1760
|
+
"enum": [
|
|
1761
|
+
"string",
|
|
1762
|
+
"number"
|
|
1763
|
+
],
|
|
1764
|
+
"description": "Defines whether the column should be treated as a string or as numbers when sorting."
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
}
|
|
1768
|
+
},
|
|
1769
|
+
"required": [
|
|
1770
|
+
"query"
|
|
1771
|
+
]
|
|
1772
|
+
},
|
|
1662
1773
|
"nameSearch": {
|
|
1663
1774
|
"type": "object",
|
|
1664
1775
|
"properties": {
|
|
@@ -2129,115 +2240,7 @@
|
|
|
2129
2240
|
"content": {
|
|
2130
2241
|
"application/json": {
|
|
2131
2242
|
"schema": {
|
|
2132
|
-
"
|
|
2133
|
-
"required": [
|
|
2134
|
-
"query"
|
|
2135
|
-
],
|
|
2136
|
-
"properties": {
|
|
2137
|
-
"query": {
|
|
2138
|
-
"type": "object",
|
|
2139
|
-
"properties": {
|
|
2140
|
-
"allOr": {
|
|
2141
|
-
"type": "boolean",
|
|
2142
|
-
"description": "Specifies that a row should be returned if it satisfies any of the specified options, rather than requiring it to fulfill all the search parameters. This defaults to false, meaning AND logic will be used."
|
|
2143
|
-
},
|
|
2144
|
-
"string": {
|
|
2145
|
-
"type": "object",
|
|
2146
|
-
"example": {
|
|
2147
|
-
"columnName1": "value",
|
|
2148
|
-
"columnName2": "value"
|
|
2149
|
-
},
|
|
2150
|
-
"description": "A map of field name to the string to search for, this will look for rows that have a value starting with the string value.",
|
|
2151
|
-
"additionalProperties": {
|
|
2152
|
-
"type": "string",
|
|
2153
|
-
"description": "The value to search for in the column."
|
|
2154
|
-
}
|
|
2155
|
-
},
|
|
2156
|
-
"fuzzy": {
|
|
2157
|
-
"type": "object",
|
|
2158
|
-
"description": "A fuzzy search, only supported by internal tables."
|
|
2159
|
-
},
|
|
2160
|
-
"range": {
|
|
2161
|
-
"type": "object",
|
|
2162
|
-
"description": "Searches within a range, the format of this must be in the format of an object with a \"low\" and \"high\" property.",
|
|
2163
|
-
"example": {
|
|
2164
|
-
"columnName1": {
|
|
2165
|
-
"low": 10,
|
|
2166
|
-
"high": 20
|
|
2167
|
-
}
|
|
2168
|
-
}
|
|
2169
|
-
},
|
|
2170
|
-
"equal": {
|
|
2171
|
-
"type": "object",
|
|
2172
|
-
"description": "Searches for rows that have a column value that is exactly the value set."
|
|
2173
|
-
},
|
|
2174
|
-
"notEqual": {
|
|
2175
|
-
"type": "object",
|
|
2176
|
-
"description": "Searches for any row which does not contain the specified column value."
|
|
2177
|
-
},
|
|
2178
|
-
"empty": {
|
|
2179
|
-
"type": "object",
|
|
2180
|
-
"description": "Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value.",
|
|
2181
|
-
"example": {
|
|
2182
|
-
"columnName1": ""
|
|
2183
|
-
}
|
|
2184
|
-
},
|
|
2185
|
-
"notEmpty": {
|
|
2186
|
-
"type": "object",
|
|
2187
|
-
"description": "Searches for rows which have the specified column."
|
|
2188
|
-
},
|
|
2189
|
-
"oneOf": {
|
|
2190
|
-
"type": "object",
|
|
2191
|
-
"description": "Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2]."
|
|
2192
|
-
}
|
|
2193
|
-
}
|
|
2194
|
-
},
|
|
2195
|
-
"paginate": {
|
|
2196
|
-
"type": "boolean",
|
|
2197
|
-
"description": "Enables pagination, by default this is disabled."
|
|
2198
|
-
},
|
|
2199
|
-
"bookmark": {
|
|
2200
|
-
"oneOf": [
|
|
2201
|
-
{
|
|
2202
|
-
"type": "string"
|
|
2203
|
-
},
|
|
2204
|
-
{
|
|
2205
|
-
"type": "integer"
|
|
2206
|
-
}
|
|
2207
|
-
],
|
|
2208
|
-
"description": "If retrieving another page, the bookmark from the previous request must be supplied."
|
|
2209
|
-
},
|
|
2210
|
-
"limit": {
|
|
2211
|
-
"type": "integer",
|
|
2212
|
-
"description": "The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000."
|
|
2213
|
-
},
|
|
2214
|
-
"sort": {
|
|
2215
|
-
"type": "object",
|
|
2216
|
-
"description": "A set of parameters describing the sort behaviour of the search.",
|
|
2217
|
-
"properties": {
|
|
2218
|
-
"order": {
|
|
2219
|
-
"type": "string",
|
|
2220
|
-
"enum": [
|
|
2221
|
-
"ascending",
|
|
2222
|
-
"descending"
|
|
2223
|
-
],
|
|
2224
|
-
"description": "The order of the sort, by default this is ascending."
|
|
2225
|
-
},
|
|
2226
|
-
"column": {
|
|
2227
|
-
"type": "string",
|
|
2228
|
-
"description": "The name of the column by which the rows will be sorted."
|
|
2229
|
-
},
|
|
2230
|
-
"type": {
|
|
2231
|
-
"type": "string",
|
|
2232
|
-
"enum": [
|
|
2233
|
-
"string",
|
|
2234
|
-
"number"
|
|
2235
|
-
],
|
|
2236
|
-
"description": "Defines whether the column should be treated as a string or as numbers when sorting."
|
|
2237
|
-
}
|
|
2238
|
-
}
|
|
2239
|
-
}
|
|
2240
|
-
}
|
|
2243
|
+
"$ref": "#/components/schemas/rowSearch"
|
|
2241
2244
|
}
|
|
2242
2245
|
}
|
|
2243
2246
|
}
|
|
@@ -2289,7 +2292,7 @@
|
|
|
2289
2292
|
},
|
|
2290
2293
|
"responses": {
|
|
2291
2294
|
"200": {
|
|
2292
|
-
"description": "Returns the created table, including the ID which has been generated for it. This can be internal or external
|
|
2295
|
+
"description": "Returns the created table, including the ID which has been generated for it. This can be internal or external datasources.",
|
|
2293
2296
|
"content": {
|
|
2294
2297
|
"application/json": {
|
|
2295
2298
|
"schema": {
|