@budibase/server 1.3.15-alpha.3 → 1.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/mongodb.ts +1 -1
- package/builder/assets/index.8f5f192a.js +876 -0
- package/builder/assets/{index.ecdac070.css → index.a70e216a.css} +2 -2
- 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 +254 -296
- package/coverage/coverage-final.json +17 -17
- package/coverage/lcov-report/api/controllers/apikeys.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 +13 -82
- package/coverage/lcov-report/api/controllers/datasource.js.html +20 -20
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +30 -30
- 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 +1 -1
- 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 +12 -12
- 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 +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/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.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/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 +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 +28 -28
- 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 +33 -33
- 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/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 +445 -533
- package/dist/api/controllers/application.js +4 -5
- package/dist/api/controllers/component.js +1 -18
- package/dist/api/controllers/datasource.js +4 -4
- package/dist/api/controllers/integration.js +4 -4
- package/dist/api/controllers/row/ExternalRequest.js +3 -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/routes/index.js +0 -2
- package/dist/app.js +0 -11
- package/dist/db/utils.js +1 -10
- package/dist/environment.js +2 -3
- 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 -93
- 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/package.json +6 -9
- package/dist/threads/query.js +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +11 -111
- package/package.json +7 -10
- package/scripts/dev/manage.js +0 -1
- package/src/api/controllers/application.ts +1 -1
- package/src/api/controllers/component.js +2 -25
- package/src/api/controllers/datasource.js +4 -4
- package/src/api/controllers/integration.js +4 -4
- package/src/api/controllers/row/ExternalRequest.ts +4 -1
- package/src/api/controllers/screen.js +1 -66
- package/src/api/controllers/static/index.ts +0 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/src/api/controllers/static/templates/preview.hbs +1 -5
- package/src/api/routes/index.ts +0 -2
- package/src/api/routes/tests/query.spec.js +25 -8
- package/src/app.ts +0 -14
- package/src/db/utils.js +0 -12
- package/src/environment.js +2 -3
- 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 -59
- 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/module.d.ts +0 -2
- package/src/threads/query.ts +2 -2
- package/src/utilities/fileSystem/index.js +9 -130
- package/builder/assets/index.e1d89439.js +0 -995
- package/dist/api/controllers/plugin/file.js +0 -24
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -192
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/url.js +0 -24
- package/dist/api/controllers/plugin/utils.js +0 -26
- package/dist/api/routes/plugin.js +0 -39
- 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 -206
- 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
|
@@ -14,18 +14,14 @@ 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,
|
|
17
|
+
const { upload, retrieve, retrieveToTmp, streamUpload, deleteFolder, downloadTarball, deleteFiles, } = require("./utilities");
|
|
18
18
|
const { updateClientLibrary } = require("./clientLibrary");
|
|
19
|
-
const { checkSlashesInUrl } = require("../");
|
|
20
19
|
const env = require("../../environment");
|
|
21
20
|
const { USER_METDATA_PREFIX, LINK_USER_METADATA_PREFIX, TABLE_ROW_PREFIX, } = require("../../db/utils");
|
|
22
21
|
const MemoryStream = require("memorystream");
|
|
23
22
|
const { getAppId } = require("@budibase/backend-core/context");
|
|
24
|
-
const tar = require("tar");
|
|
25
|
-
const fetch = require("node-fetch");
|
|
26
23
|
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..");
|
|
27
24
|
const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules");
|
|
28
|
-
const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
|
|
29
25
|
/**
|
|
30
26
|
* The single stack system (Cloud and Builder) should not make use of the file system where possible,
|
|
31
27
|
* this file handles all of the file access for the system with the intention of limiting it all to one
|
|
@@ -39,7 +35,16 @@ const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
|
|
|
39
35
|
exports.init = () => {
|
|
40
36
|
const tempDir = budibaseTempDir();
|
|
41
37
|
if (!fs.existsSync(tempDir)) {
|
|
42
|
-
|
|
38
|
+
// some test cases fire this quickly enough that
|
|
39
|
+
// synchronous cases can end up here at the same time
|
|
40
|
+
try {
|
|
41
|
+
fs.mkdirSync(tempDir);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
if (!err || err.code !== "EEXIST") {
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
43
48
|
}
|
|
44
49
|
const clientLibPath = join(budibaseTempDir(), "budibase-client.js");
|
|
45
50
|
if (env.isTest() && !fs.existsSync(clientLibPath)) {
|
|
@@ -91,12 +96,6 @@ exports.getTemplateStream = (template) => __awaiter(void 0, void 0, void 0, func
|
|
|
91
96
|
exports.loadHandlebarsFile = path => {
|
|
92
97
|
return fs.readFileSync(path, "utf8");
|
|
93
98
|
};
|
|
94
|
-
/**
|
|
95
|
-
* Same as above just with a different name.
|
|
96
|
-
*/
|
|
97
|
-
exports.loadJSFile = (directory, name) => {
|
|
98
|
-
return fs.readFileSync(join(directory, name), "utf8");
|
|
99
|
-
};
|
|
100
99
|
/**
|
|
101
100
|
* When return a file from the API need to write the file to the system temporarily so we
|
|
102
101
|
* can create a read stream to send.
|
|
@@ -295,104 +294,6 @@ exports.cleanup = appIds => {
|
|
|
295
294
|
}
|
|
296
295
|
}
|
|
297
296
|
};
|
|
298
|
-
const createTempFolder = item => {
|
|
299
|
-
const path = join(budibaseTempDir(), item);
|
|
300
|
-
try {
|
|
301
|
-
// remove old tmp directories automatically - don't combine
|
|
302
|
-
if (fs.existsSync(path)) {
|
|
303
|
-
fs.rmSync(path, { recursive: true, force: true });
|
|
304
|
-
}
|
|
305
|
-
fs.mkdirSync(path);
|
|
306
|
-
}
|
|
307
|
-
catch (err) {
|
|
308
|
-
throw new Error(`Path cannot be created: ${err.message}`);
|
|
309
|
-
}
|
|
310
|
-
return path;
|
|
311
|
-
};
|
|
312
|
-
exports.createTempFolder = createTempFolder;
|
|
313
|
-
const extractTarball = (fromFilePath, toPath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
314
|
-
yield tar.extract({
|
|
315
|
-
file: fromFilePath,
|
|
316
|
-
C: toPath,
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
exports.extractTarball = extractTarball;
|
|
320
|
-
const getPluginMetadata = (path) => __awaiter(void 0, void 0, void 0, function* () {
|
|
321
|
-
let metadata = {};
|
|
322
|
-
try {
|
|
323
|
-
const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
|
|
324
|
-
const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
|
|
325
|
-
metadata.schema = JSON.parse(schema);
|
|
326
|
-
metadata.package = JSON.parse(pkg);
|
|
327
|
-
if (!metadata.package.name ||
|
|
328
|
-
!metadata.package.version ||
|
|
329
|
-
!metadata.package.description) {
|
|
330
|
-
throw new Error("package.json is missing one of 'name', 'version' or 'description'.");
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
catch (err) {
|
|
334
|
-
throw new Error(`Unable to process schema.json/package.json in plugin. ${err.message}`);
|
|
335
|
-
}
|
|
336
|
-
return { metadata, directory: path };
|
|
337
|
-
});
|
|
338
|
-
exports.getPluginMetadata = getPluginMetadata;
|
|
339
|
-
exports.getDatasourcePlugin = (name, url, hash) => __awaiter(void 0, void 0, void 0, function* () {
|
|
340
|
-
if (!fs.existsSync(DATASOURCE_PATH)) {
|
|
341
|
-
fs.mkdirSync(DATASOURCE_PATH);
|
|
342
|
-
}
|
|
343
|
-
const filename = join(DATASOURCE_PATH, name);
|
|
344
|
-
const metadataName = `${filename}.bbmetadata`;
|
|
345
|
-
if (fs.existsSync(filename)) {
|
|
346
|
-
const currentHash = fs.readFileSync(metadataName, "utf8");
|
|
347
|
-
// if hash is the same return the file, otherwise remove it and re-download
|
|
348
|
-
if (currentHash === hash) {
|
|
349
|
-
return require(filename);
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
console.log(`Updating plugin: ${name}`);
|
|
353
|
-
fs.unlinkSync(filename);
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
const fullUrl = checkSlashesInUrl(`${env.MINIO_URL}/${ObjectStoreBuckets.PLUGINS}/${url}`);
|
|
357
|
-
const response = yield fetch(fullUrl);
|
|
358
|
-
if (response.status === 200) {
|
|
359
|
-
const content = yield response.text();
|
|
360
|
-
fs.writeFileSync(filename, content);
|
|
361
|
-
fs.writeFileSync(metadataName, hash);
|
|
362
|
-
require(filename);
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
throw new Error(`Unable to retrieve plugin - reason: ${yield response.text()}`);
|
|
366
|
-
}
|
|
367
|
-
});
|
|
368
|
-
/**
|
|
369
|
-
* Find for a file recursively from start path applying filter, return first match
|
|
370
|
-
*/
|
|
371
|
-
exports.findFileRec = (startPath, filter) => {
|
|
372
|
-
if (!fs.existsSync(startPath)) {
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
const files = fs.readdirSync(startPath);
|
|
376
|
-
for (let i = 0, len = files.length; i < len; i++) {
|
|
377
|
-
const filename = join(startPath, files[i]);
|
|
378
|
-
const stat = fs.lstatSync(filename);
|
|
379
|
-
if (stat.isDirectory()) {
|
|
380
|
-
return exports.findFileRec(filename, filter);
|
|
381
|
-
}
|
|
382
|
-
else if (filename.endsWith(filter)) {
|
|
383
|
-
return filename;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
};
|
|
387
|
-
/**
|
|
388
|
-
* Remove a folder which is not empty from the file system
|
|
389
|
-
*/
|
|
390
|
-
exports.deleteFolderFileSystem = path => {
|
|
391
|
-
if (!fs.existsSync(path)) {
|
|
392
|
-
return;
|
|
393
|
-
}
|
|
394
|
-
fs.rmSync(path, { recursive: true, force: true });
|
|
395
|
-
};
|
|
396
297
|
/**
|
|
397
298
|
* Full function definition for below can be found in the utilities.
|
|
398
299
|
*/
|
|
@@ -400,6 +301,5 @@ exports.upload = upload;
|
|
|
400
301
|
exports.retrieve = retrieve;
|
|
401
302
|
exports.retrieveToTmp = retrieveToTmp;
|
|
402
303
|
exports.deleteFiles = deleteFiles;
|
|
403
|
-
exports.downloadTarballDirect = downloadTarballDirect;
|
|
404
304
|
exports.TOP_LEVEL_PATH = TOP_LEVEL_PATH;
|
|
405
305
|
exports.NODE_MODULES_PATH = NODE_MODULES_PATH;
|
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.17",
|
|
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": "1.3.
|
|
81
|
-
"@budibase/client": "1.3.
|
|
82
|
-
"@budibase/pro": "1.3.
|
|
83
|
-
"@budibase/string-templates": "1.3.
|
|
84
|
-
"@budibase/types": "1.3.
|
|
80
|
+
"@budibase/backend-core": "^1.3.17",
|
|
81
|
+
"@budibase/client": "^1.3.17",
|
|
82
|
+
"@budibase/pro": "1.3.16",
|
|
83
|
+
"@budibase/string-templates": "^1.3.17",
|
|
84
|
+
"@budibase/types": "^1.3.17",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -95,7 +95,6 @@
|
|
|
95
95
|
"bcryptjs": "2.4.3",
|
|
96
96
|
"bull": "4.8.5",
|
|
97
97
|
"chmodr": "1.2.0",
|
|
98
|
-
"chokidar": "3.5.3",
|
|
99
98
|
"csvtojson": "2.0.10",
|
|
100
99
|
"curlconverter": "3.21.0",
|
|
101
100
|
"dotenv": "8.2.0",
|
|
@@ -139,10 +138,8 @@
|
|
|
139
138
|
"redis": "4",
|
|
140
139
|
"server-destroy": "1.0.1",
|
|
141
140
|
"snowflake-promise": "^4.5.0",
|
|
142
|
-
"socket.io": "^4.5.1",
|
|
143
141
|
"svelte": "3.49.0",
|
|
144
142
|
"swagger-parser": "10.0.3",
|
|
145
|
-
"tar": "6.1.11",
|
|
146
143
|
"to-json-schema": "0.2.5",
|
|
147
144
|
"uuid": "3.3.2",
|
|
148
145
|
"validate.js": "0.13.1",
|
|
@@ -199,5 +196,5 @@
|
|
|
199
196
|
"optionalDependencies": {
|
|
200
197
|
"oracledb": "5.3.0"
|
|
201
198
|
},
|
|
202
|
-
"gitHead": "
|
|
199
|
+
"gitHead": "01d7c9d994aa66a1d08ab71acc9e6c8eab825a47"
|
|
203
200
|
}
|
package/scripts/dev/manage.js
CHANGED
|
@@ -572,7 +572,7 @@ export const sync = async (ctx: any, next: any) => {
|
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
574
|
|
|
575
|
-
|
|
575
|
+
const updateAppPackage = async (appPackage: any, appId: any) => {
|
|
576
576
|
return context.doInAppContext(appId, async () => {
|
|
577
577
|
const db = context.getAppDB()
|
|
578
578
|
const application = await db.get(DocumentType.APP_METADATA)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
const { DocumentType
|
|
1
|
+
const { DocumentType } = require("../../db/utils")
|
|
2
2
|
const { getComponentLibraryManifest } = require("../../utilities/fileSystem")
|
|
3
3
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
4
|
-
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
5
|
-
const env = require("../../environment")
|
|
6
4
|
|
|
7
5
|
exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
8
6
|
try {
|
|
@@ -12,6 +10,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
|
12
10
|
let componentManifests = await Promise.all(
|
|
13
11
|
app.componentLibraries.map(async library => {
|
|
14
12
|
let manifest = await getComponentLibraryManifest(library)
|
|
13
|
+
|
|
15
14
|
return {
|
|
16
15
|
manifest,
|
|
17
16
|
library,
|
|
@@ -32,28 +31,6 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
// for now custom components only supported in self-host
|
|
37
|
-
if (env.SELF_HOSTED) {
|
|
38
|
-
// Add custom components
|
|
39
|
-
const globalDB = getGlobalDB()
|
|
40
|
-
const response = await globalDB.allDocs(
|
|
41
|
-
getPluginParams(null, {
|
|
42
|
-
include_docs: true,
|
|
43
|
-
})
|
|
44
|
-
)
|
|
45
|
-
response.rows
|
|
46
|
-
.map(row => row.doc)
|
|
47
|
-
.filter(plugin => plugin.schema.type === "component")
|
|
48
|
-
.forEach(plugin => {
|
|
49
|
-
const fullComponentName = `plugin/${plugin.name}`
|
|
50
|
-
definitions[fullComponentName] = {
|
|
51
|
-
component: fullComponentName,
|
|
52
|
-
...plugin.schema.schema,
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
|
|
57
34
|
ctx.body = definitions
|
|
58
35
|
} catch (err) {
|
|
59
36
|
console.error(`component-definitions=failed`, err)
|
|
@@ -7,7 +7,7 @@ const {
|
|
|
7
7
|
getTableParams,
|
|
8
8
|
} = require("../../db/utils")
|
|
9
9
|
const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
|
|
10
|
-
const {
|
|
10
|
+
const { integrations } = require("../../integrations")
|
|
11
11
|
const { getDatasourceAndQuery } = require("./row/utils")
|
|
12
12
|
const { invalidateDynamicVariables } = require("../../threads/utils")
|
|
13
13
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
@@ -114,7 +114,7 @@ exports.update = async function (ctx) {
|
|
|
114
114
|
|
|
115
115
|
// Drain connection pools when configuration is changed
|
|
116
116
|
if (datasource.source) {
|
|
117
|
-
const source =
|
|
117
|
+
const source = integrations[datasource.source]
|
|
118
118
|
if (source && source.pool) {
|
|
119
119
|
await source.pool.end()
|
|
120
120
|
}
|
|
@@ -149,7 +149,7 @@ exports.save = async function (ctx) {
|
|
|
149
149
|
|
|
150
150
|
// Drain connection pools when configuration is changed
|
|
151
151
|
if (datasource.source) {
|
|
152
|
-
const source =
|
|
152
|
+
const source = integrations[datasource.source]
|
|
153
153
|
if (source && source.pool) {
|
|
154
154
|
await source.pool.end()
|
|
155
155
|
}
|
|
@@ -218,7 +218,7 @@ function updateError(error, newError, tables) {
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
const buildSchemaHelper = async datasource => {
|
|
221
|
-
const Connector =
|
|
221
|
+
const Connector = integrations[datasource.source]
|
|
222
222
|
|
|
223
223
|
// Connect to the DB and build the schema
|
|
224
224
|
const connector = new Connector(datasource.config)
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { cloneDeep } = require("lodash")
|
|
2
|
+
const { definitions } = require("../../integrations")
|
|
2
3
|
const { SourceName } = require("@budibase/types")
|
|
3
4
|
const googlesheets = require("../../integrations/googlesheets")
|
|
4
5
|
const { featureFlags } = require("@budibase/backend-core")
|
|
5
6
|
|
|
6
7
|
exports.fetch = async function (ctx) {
|
|
7
8
|
ctx.status = 200
|
|
8
|
-
const defs =
|
|
9
|
+
const defs = cloneDeep(definitions)
|
|
9
10
|
|
|
10
11
|
// for google sheets integration google verification
|
|
11
12
|
if (featureFlags.isEnabled(featureFlags.FeatureFlag.GOOGLE_SHEETS)) {
|
|
@@ -16,7 +17,6 @@ exports.fetch = async function (ctx) {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
exports.find = async function (ctx) {
|
|
19
|
-
const defs = await getDefinitions()
|
|
20
20
|
ctx.status = 200
|
|
21
|
-
ctx.body =
|
|
21
|
+
ctx.body = definitions[ctx.params.type]
|
|
22
22
|
}
|
|
@@ -371,7 +371,10 @@ module External {
|
|
|
371
371
|
const toColumn = `${linkedTable.name}.${relationship.to}`
|
|
372
372
|
// this is important when working with multiple relationships
|
|
373
373
|
// between the same tables, don't want to overlap/multiply the relations
|
|
374
|
-
if (
|
|
374
|
+
if (
|
|
375
|
+
!relationship.through &&
|
|
376
|
+
row[fromColumn]?.toString() !== row[toColumn]?.toString()
|
|
377
|
+
) {
|
|
375
378
|
continue
|
|
376
379
|
}
|
|
377
380
|
let linked = basicProcessing(row, linkedTable)
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
const {
|
|
2
|
-
getScreenParams,
|
|
3
|
-
generateScreenID,
|
|
4
|
-
getPluginParams,
|
|
5
|
-
DocumentType,
|
|
6
|
-
} = require("../../db/utils")
|
|
1
|
+
const { getScreenParams, generateScreenID } = require("../../db/utils")
|
|
7
2
|
const { AccessController } = require("@budibase/backend-core/roles")
|
|
8
3
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
9
4
|
const { events } = require("@budibase/backend-core")
|
|
10
|
-
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
11
|
-
const { updateAppPackage } = require("./application")
|
|
12
5
|
|
|
13
6
|
exports.fetch = async ctx => {
|
|
14
7
|
const db = getAppDB()
|
|
@@ -39,48 +32,6 @@ exports.save = async ctx => {
|
|
|
39
32
|
|
|
40
33
|
const response = await db.put(screen)
|
|
41
34
|
|
|
42
|
-
// Find any custom components being used
|
|
43
|
-
let pluginNames = []
|
|
44
|
-
let pluginAdded = false
|
|
45
|
-
findPlugins(screen.props, pluginNames)
|
|
46
|
-
if (pluginNames.length) {
|
|
47
|
-
const globalDB = getGlobalDB()
|
|
48
|
-
const pluginsResponse = await globalDB.allDocs(
|
|
49
|
-
getPluginParams(null, {
|
|
50
|
-
include_docs: true,
|
|
51
|
-
})
|
|
52
|
-
)
|
|
53
|
-
const requiredPlugins = pluginsResponse.rows
|
|
54
|
-
.map(row => row.doc)
|
|
55
|
-
.filter(plugin => {
|
|
56
|
-
return (
|
|
57
|
-
plugin.schema.type === "component" &&
|
|
58
|
-
pluginNames.includes(`plugin/${plugin.name}`)
|
|
59
|
-
)
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
// Update the app metadata
|
|
63
|
-
const application = await db.get(DocumentType.APP_METADATA)
|
|
64
|
-
let usedPlugins = application.usedPlugins || []
|
|
65
|
-
|
|
66
|
-
requiredPlugins.forEach(plugin => {
|
|
67
|
-
if (!usedPlugins.find(x => x._id === plugin._id)) {
|
|
68
|
-
pluginAdded = true
|
|
69
|
-
usedPlugins.push({
|
|
70
|
-
_id: plugin._id,
|
|
71
|
-
name: plugin.name,
|
|
72
|
-
version: plugin.version,
|
|
73
|
-
jsUrl: plugin.jsUrl,
|
|
74
|
-
hash: plugin.hash,
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
if (pluginAdded) {
|
|
80
|
-
await updateAppPackage({ usedPlugins }, ctx.appId)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
35
|
if (eventFn) {
|
|
85
36
|
await eventFn(screen)
|
|
86
37
|
}
|
|
@@ -89,7 +40,6 @@ exports.save = async ctx => {
|
|
|
89
40
|
...screen,
|
|
90
41
|
_id: response.id,
|
|
91
42
|
_rev: response.rev,
|
|
92
|
-
pluginAdded,
|
|
93
43
|
}
|
|
94
44
|
}
|
|
95
45
|
|
|
@@ -106,18 +56,3 @@ exports.destroy = async ctx => {
|
|
|
106
56
|
}
|
|
107
57
|
ctx.status = 200
|
|
108
58
|
}
|
|
109
|
-
|
|
110
|
-
const findPlugins = (component, foundPlugins) => {
|
|
111
|
-
if (!component) {
|
|
112
|
-
return
|
|
113
|
-
}
|
|
114
|
-
if (component._component.startsWith("plugin")) {
|
|
115
|
-
if (!foundPlugins.includes(component._component)) {
|
|
116
|
-
foundPlugins.push(component._component)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (!component._children || !component._children.length) {
|
|
120
|
-
return
|
|
121
|
-
}
|
|
122
|
-
component._children.forEach(child => findPlugins(child, foundPlugins))
|
|
123
|
-
}
|
|
@@ -113,7 +113,6 @@ export const serveApp = async function (ctx: any) {
|
|
|
113
113
|
production: env.isProd(),
|
|
114
114
|
appId,
|
|
115
115
|
clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
|
|
116
|
-
usedPlugins: appInfo.usedPlugins,
|
|
117
116
|
})
|
|
118
117
|
|
|
119
118
|
const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
export let favicon = ""
|
|
4
4
|
|
|
5
5
|
export let clientLibPath
|
|
6
|
-
export let usedPlugins
|
|
7
6
|
</script>
|
|
8
7
|
|
|
9
8
|
<svelte:head>
|
|
@@ -84,15 +83,6 @@
|
|
|
84
83
|
</script>
|
|
85
84
|
<script type="application/javascript" src={clientLibPath}>
|
|
86
85
|
</script>
|
|
87
|
-
<!-- Custom components need inserted after the core client library -->
|
|
88
|
-
<!-- But before loadBudibase is called -->
|
|
89
|
-
{#if usedPlugins?.length}
|
|
90
|
-
{#each usedPlugins as plugin}
|
|
91
|
-
<script
|
|
92
|
-
type="application/javascript"
|
|
93
|
-
src={`/plugins/${plugin.jsUrl}`}></script>
|
|
94
|
-
{/each}
|
|
95
|
-
{/if}
|
|
96
86
|
<script type="application/javascript">
|
|
97
87
|
if (window.loadBudibase) {
|
|
98
88
|
window.loadBudibase()
|
|
@@ -66,9 +66,7 @@
|
|
|
66
66
|
customTheme,
|
|
67
67
|
previewDevice,
|
|
68
68
|
navigation,
|
|
69
|
-
hiddenComponentIds
|
|
70
|
-
usedPlugins,
|
|
71
|
-
location
|
|
69
|
+
hiddenComponentIds
|
|
72
70
|
} = parsed
|
|
73
71
|
|
|
74
72
|
// Set some flags so the app knows we're in the builder
|
|
@@ -83,8 +81,6 @@
|
|
|
83
81
|
window["##BUDIBASE_PREVIEW_DEVICE##"] = previewDevice
|
|
84
82
|
window["##BUDIBASE_PREVIEW_NAVIGATION##"] = navigation
|
|
85
83
|
window["##BUDIBASE_HIDDEN_COMPONENT_IDS##"] = hiddenComponentIds
|
|
86
|
-
window["##BUDIBASE_USED_PLUGINS##"] = usedPlugins
|
|
87
|
-
window["##BUDIBASE_LOCATION##"] = location
|
|
88
84
|
|
|
89
85
|
// Initialise app
|
|
90
86
|
try {
|
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
|
]
|
|
@@ -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
|
|
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
|
-
}
|
package/src/environment.js
CHANGED
|
@@ -37,8 +37,8 @@ function parseIntSafe(number) {
|
|
|
37
37
|
let inThread = false
|
|
38
38
|
|
|
39
39
|
module.exports = {
|
|
40
|
-
// important
|
|
41
|
-
PORT: process.env.
|
|
40
|
+
// important - prefer app port to generic port
|
|
41
|
+
PORT: process.env.APP_PORT || process.env.PORT,
|
|
42
42
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
43
43
|
COUCH_DB_URL: process.env.COUCH_DB_URL,
|
|
44
44
|
MINIO_URL: process.env.MINIO_URL,
|
|
@@ -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,
|