@budibase/server 2.6.19-alpha.31 → 2.6.19-alpha.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builder/assets/{index.8469b14c.css → index.a96c516c.css} +1 -1
- package/builder/assets/{index.3dd3d237.js → index.b6e30d5b.js} +3 -3
- package/builder/index.html +2 -2
- package/dist/automation.js +79 -65
- package/dist/automation.js.map +3 -3
- package/dist/index.js +183 -150
- package/dist/index.js.map +3 -3
- package/dist/query.js +23 -13
- package/dist/query.js.map +2 -2
- package/package.json +8 -8
- package/src/middleware/builder.ts +22 -13
- package/src/threads/automation.ts +5 -1
- package/src/utilities/fileSystem/app.ts +14 -4
package/dist/index.js
CHANGED
|
@@ -3368,9 +3368,76 @@ var init_users3 = __esm({
|
|
|
3368
3368
|
// ../backend-core/src/redis/redlockImpl.ts
|
|
3369
3369
|
var redlockImpl_exports = {};
|
|
3370
3370
|
__export(redlockImpl_exports, {
|
|
3371
|
-
doWithLock: () => doWithLock
|
|
3371
|
+
doWithLock: () => doWithLock,
|
|
3372
|
+
newRedlock: () => newRedlock
|
|
3372
3373
|
});
|
|
3373
|
-
|
|
3374
|
+
async function getClient(type, opts) {
|
|
3375
|
+
if (type === "custom" /* CUSTOM */) {
|
|
3376
|
+
return newRedlock(opts);
|
|
3377
|
+
}
|
|
3378
|
+
if (environment_default.isTest() && type !== "try_once" /* TRY_ONCE */) {
|
|
3379
|
+
return newRedlock(OPTIONS.TEST);
|
|
3380
|
+
}
|
|
3381
|
+
switch (type) {
|
|
3382
|
+
case "try_once" /* TRY_ONCE */: {
|
|
3383
|
+
return newRedlock(OPTIONS.TRY_ONCE);
|
|
3384
|
+
}
|
|
3385
|
+
case "try_twice" /* TRY_TWICE */: {
|
|
3386
|
+
return newRedlock(OPTIONS.TRY_TWICE);
|
|
3387
|
+
}
|
|
3388
|
+
case "default" /* DEFAULT */: {
|
|
3389
|
+
return newRedlock(OPTIONS.DEFAULT);
|
|
3390
|
+
}
|
|
3391
|
+
case "delay_500" /* DELAY_500 */: {
|
|
3392
|
+
return newRedlock(OPTIONS.DELAY_500);
|
|
3393
|
+
}
|
|
3394
|
+
default: {
|
|
3395
|
+
throw new Error(`Could not get redlock client: ${type}`);
|
|
3396
|
+
}
|
|
3397
|
+
}
|
|
3398
|
+
}
|
|
3399
|
+
async function newRedlock(opts = {}) {
|
|
3400
|
+
let options2 = { ...OPTIONS.DEFAULT, ...opts };
|
|
3401
|
+
const redisWrapper = await getLockClient();
|
|
3402
|
+
const client3 = redisWrapper.getClient();
|
|
3403
|
+
return new import_redlock.default([client3], options2);
|
|
3404
|
+
}
|
|
3405
|
+
function getLockName(opts) {
|
|
3406
|
+
const prefix = opts.systemLock ? "system" : getTenantId();
|
|
3407
|
+
let name = `lock:${prefix}_${opts.name}`;
|
|
3408
|
+
if (opts.resource) {
|
|
3409
|
+
name = name + `_${opts.resource}`;
|
|
3410
|
+
}
|
|
3411
|
+
return name;
|
|
3412
|
+
}
|
|
3413
|
+
async function doWithLock(opts, task) {
|
|
3414
|
+
const redlock = await getClient(opts.type, opts.customOptions);
|
|
3415
|
+
let lock;
|
|
3416
|
+
try {
|
|
3417
|
+
const name = getLockName(opts);
|
|
3418
|
+
lock = await redlock.lock(name, opts.ttl);
|
|
3419
|
+
const result = await task();
|
|
3420
|
+
return { executed: true, result };
|
|
3421
|
+
} catch (e) {
|
|
3422
|
+
console.warn("lock error");
|
|
3423
|
+
if (e.name === "LockError") {
|
|
3424
|
+
if (opts.type === "try_once" /* TRY_ONCE */) {
|
|
3425
|
+
return { executed: false };
|
|
3426
|
+
} else {
|
|
3427
|
+
console.error(e);
|
|
3428
|
+
throw e;
|
|
3429
|
+
}
|
|
3430
|
+
} else {
|
|
3431
|
+
console.error(e);
|
|
3432
|
+
throw e;
|
|
3433
|
+
}
|
|
3434
|
+
} finally {
|
|
3435
|
+
if (lock) {
|
|
3436
|
+
await lock.unlock();
|
|
3437
|
+
}
|
|
3438
|
+
}
|
|
3439
|
+
}
|
|
3440
|
+
var import_redlock, OPTIONS;
|
|
3374
3441
|
var init_redlockImpl = __esm({
|
|
3375
3442
|
"../backend-core/src/redis/redlockImpl.ts"() {
|
|
3376
3443
|
import_redlock = __toESM(require("redlock"));
|
|
@@ -3378,33 +3445,14 @@ var init_redlockImpl = __esm({
|
|
|
3378
3445
|
init_src();
|
|
3379
3446
|
init_context2();
|
|
3380
3447
|
init_environment2();
|
|
3381
|
-
getClient = async (type, opts) => {
|
|
3382
|
-
if (type === "custom" /* CUSTOM */) {
|
|
3383
|
-
return newRedlock(opts);
|
|
3384
|
-
}
|
|
3385
|
-
if (environment_default.isTest() && type !== "try_once" /* TRY_ONCE */) {
|
|
3386
|
-
return newRedlock(OPTIONS.TEST);
|
|
3387
|
-
}
|
|
3388
|
-
switch (type) {
|
|
3389
|
-
case "try_once" /* TRY_ONCE */: {
|
|
3390
|
-
return newRedlock(OPTIONS.TRY_ONCE);
|
|
3391
|
-
}
|
|
3392
|
-
case "default" /* DEFAULT */: {
|
|
3393
|
-
return newRedlock(OPTIONS.DEFAULT);
|
|
3394
|
-
}
|
|
3395
|
-
case "delay_500" /* DELAY_500 */: {
|
|
3396
|
-
return newRedlock(OPTIONS.DELAY_500);
|
|
3397
|
-
}
|
|
3398
|
-
default: {
|
|
3399
|
-
throw new Error(`Could not get redlock client: ${type}`);
|
|
3400
|
-
}
|
|
3401
|
-
}
|
|
3402
|
-
};
|
|
3403
3448
|
OPTIONS = {
|
|
3404
3449
|
TRY_ONCE: {
|
|
3405
3450
|
// immediately throws an error if the lock is already held
|
|
3406
3451
|
retryCount: 0
|
|
3407
3452
|
},
|
|
3453
|
+
TRY_TWICE: {
|
|
3454
|
+
retryCount: 1
|
|
3455
|
+
},
|
|
3408
3456
|
TEST: {
|
|
3409
3457
|
// higher retry count in unit tests
|
|
3410
3458
|
// due to high contention.
|
|
@@ -3431,44 +3479,6 @@ var init_redlockImpl = __esm({
|
|
|
3431
3479
|
retryDelay: 500
|
|
3432
3480
|
}
|
|
3433
3481
|
};
|
|
3434
|
-
newRedlock = async (opts = {}) => {
|
|
3435
|
-
let options2 = { ...OPTIONS.DEFAULT, ...opts };
|
|
3436
|
-
const redisWrapper = await getLockClient();
|
|
3437
|
-
const client3 = redisWrapper.getClient();
|
|
3438
|
-
return new import_redlock.default([client3], options2);
|
|
3439
|
-
};
|
|
3440
|
-
doWithLock = async (opts, task) => {
|
|
3441
|
-
const redlock = await getClient(opts.type, opts.customOptions);
|
|
3442
|
-
let lock;
|
|
3443
|
-
try {
|
|
3444
|
-
const prefix = opts.systemLock ? "system" : getTenantId();
|
|
3445
|
-
let name = `lock:${prefix}_${opts.name}`;
|
|
3446
|
-
if (opts.resource) {
|
|
3447
|
-
name = name + `_${opts.resource}`;
|
|
3448
|
-
}
|
|
3449
|
-
lock = await redlock.lock(name, opts.ttl);
|
|
3450
|
-
const result = await task();
|
|
3451
|
-
return { executed: true, result };
|
|
3452
|
-
} catch (e) {
|
|
3453
|
-
console.warn("lock error");
|
|
3454
|
-
if (e.name === "LockError") {
|
|
3455
|
-
if (opts.type === "try_once" /* TRY_ONCE */) {
|
|
3456
|
-
console.warn(e);
|
|
3457
|
-
return { executed: false };
|
|
3458
|
-
} else {
|
|
3459
|
-
console.error(e);
|
|
3460
|
-
throw e;
|
|
3461
|
-
}
|
|
3462
|
-
} else {
|
|
3463
|
-
console.error(e);
|
|
3464
|
-
throw e;
|
|
3465
|
-
}
|
|
3466
|
-
} finally {
|
|
3467
|
-
if (lock) {
|
|
3468
|
-
await lock.unlock();
|
|
3469
|
-
}
|
|
3470
|
-
}
|
|
3471
|
-
};
|
|
3472
3482
|
}
|
|
3473
3483
|
});
|
|
3474
3484
|
|
|
@@ -9079,10 +9089,10 @@ function doesHaveBasePermission(permType, permLevel, rolesHierarchy) {
|
|
|
9079
9089
|
...new Set(rolesHierarchy.map((role) => role.permissionId))
|
|
9080
9090
|
];
|
|
9081
9091
|
const builtins = Object.values(BUILTIN_PERMISSIONS);
|
|
9082
|
-
let
|
|
9092
|
+
let permissions = flatten(
|
|
9083
9093
|
builtins.filter((builtin) => basePermissions.indexOf(builtin._id) !== -1).map((builtin) => builtin.permissions)
|
|
9084
9094
|
);
|
|
9085
|
-
for (let permission of
|
|
9095
|
+
for (let permission of permissions) {
|
|
9086
9096
|
if (permission.type === permType && getAllowedLevels(permission.level).indexOf(permLevel) !== -1) {
|
|
9087
9097
|
return true;
|
|
9088
9098
|
}
|
|
@@ -12298,10 +12308,11 @@ var init_clientLibrary = __esm({
|
|
|
12298
12308
|
});
|
|
12299
12309
|
|
|
12300
12310
|
// src/utilities/fileSystem/app.ts
|
|
12301
|
-
var import_path7, NODE_MODULES_PATH, createApp, deleteApp, getComponentLibraryManifest;
|
|
12311
|
+
var import_fs6, import_path7, NODE_MODULES_PATH, createApp, deleteApp, getComponentLibraryManifest;
|
|
12302
12312
|
var init_app7 = __esm({
|
|
12303
12313
|
"src/utilities/fileSystem/app.ts"() {
|
|
12304
12314
|
init_budibaseDir();
|
|
12315
|
+
import_fs6 = __toESM(require("fs"));
|
|
12305
12316
|
import_path7 = require("path");
|
|
12306
12317
|
init_constants4();
|
|
12307
12318
|
init_clientLibrary();
|
|
@@ -12319,9 +12330,19 @@ var init_app7 = __esm({
|
|
|
12319
12330
|
const appId = context_exports.getAppId();
|
|
12320
12331
|
const filename = "manifest.json";
|
|
12321
12332
|
if (environment_default2.isDev() || environment_default2.isTest()) {
|
|
12322
|
-
const
|
|
12323
|
-
|
|
12324
|
-
|
|
12333
|
+
const paths = [
|
|
12334
|
+
(0, import_path7.join)(TOP_LEVEL_PATH, "packages/client", filename),
|
|
12335
|
+
(0, import_path7.join)(process.cwd(), "client", filename)
|
|
12336
|
+
];
|
|
12337
|
+
for (let path6 of paths) {
|
|
12338
|
+
if (import_fs6.default.existsSync(path6)) {
|
|
12339
|
+
delete require.cache[require.resolve(path6)];
|
|
12340
|
+
return require(path6);
|
|
12341
|
+
}
|
|
12342
|
+
}
|
|
12343
|
+
throw new Error(
|
|
12344
|
+
`Unable to find ${filename} in development environment (may need to build).`
|
|
12345
|
+
);
|
|
12325
12346
|
}
|
|
12326
12347
|
if (!appId) {
|
|
12327
12348
|
throw new Error("No app ID found - cannot get component libraries");
|
|
@@ -12351,19 +12372,19 @@ var init_app7 = __esm({
|
|
|
12351
12372
|
async function getPluginImpl(path5, plugin) {
|
|
12352
12373
|
var _a2;
|
|
12353
12374
|
const hash2 = (_a2 = plugin.schema) == null ? void 0 : _a2.hash;
|
|
12354
|
-
if (!
|
|
12355
|
-
|
|
12375
|
+
if (!import_fs7.default.existsSync(path5)) {
|
|
12376
|
+
import_fs7.default.mkdirSync(path5);
|
|
12356
12377
|
}
|
|
12357
12378
|
const filename = (0, import_path8.join)(path5, plugin.name);
|
|
12358
12379
|
const metadataName = `${filename}.bbmetadata`;
|
|
12359
|
-
if (
|
|
12360
|
-
const currentHash =
|
|
12380
|
+
if (import_fs7.default.existsSync(filename)) {
|
|
12381
|
+
const currentHash = import_fs7.default.readFileSync(metadataName, "utf8");
|
|
12361
12382
|
if (currentHash === hash2) {
|
|
12362
12383
|
return require(filename);
|
|
12363
12384
|
} else {
|
|
12364
12385
|
console.log(`Updating plugin: ${plugin.name}`);
|
|
12365
12386
|
delete require.cache[require.resolve(filename)];
|
|
12366
|
-
|
|
12387
|
+
import_fs7.default.unlinkSync(filename);
|
|
12367
12388
|
}
|
|
12368
12389
|
}
|
|
12369
12390
|
const pluginKey = objectStore_exports2.getPluginJSKey(plugin);
|
|
@@ -12371,15 +12392,15 @@ async function getPluginImpl(path5, plugin) {
|
|
|
12371
12392
|
objectStore_exports2.ObjectStoreBuckets.PLUGINS,
|
|
12372
12393
|
pluginKey
|
|
12373
12394
|
);
|
|
12374
|
-
|
|
12375
|
-
|
|
12395
|
+
import_fs7.default.writeFileSync(filename, pluginJs);
|
|
12396
|
+
import_fs7.default.writeFileSync(metadataName, hash2);
|
|
12376
12397
|
return require(filename);
|
|
12377
12398
|
}
|
|
12378
|
-
var
|
|
12399
|
+
var import_fs7, import_path8, DATASOURCE_PATH, AUTOMATION_PATH, getPluginMetadata, getDatasourcePlugin, getAutomationPlugin;
|
|
12379
12400
|
var init_plugin5 = __esm({
|
|
12380
12401
|
"src/utilities/fileSystem/plugin.ts"() {
|
|
12381
12402
|
init_budibaseDir();
|
|
12382
|
-
|
|
12403
|
+
import_fs7 = __toESM(require("fs"));
|
|
12383
12404
|
import_path8 = require("path");
|
|
12384
12405
|
init_src2();
|
|
12385
12406
|
DATASOURCE_PATH = (0, import_path8.join)(budibaseTempDir2(), "datasource");
|
|
@@ -12387,8 +12408,8 @@ var init_plugin5 = __esm({
|
|
|
12387
12408
|
getPluginMetadata = async (path5) => {
|
|
12388
12409
|
let metadata = {};
|
|
12389
12410
|
try {
|
|
12390
|
-
const pkg2 =
|
|
12391
|
-
const schema =
|
|
12411
|
+
const pkg2 = import_fs7.default.readFileSync((0, import_path8.join)(path5, "package.json"), "utf8");
|
|
12412
|
+
const schema = import_fs7.default.readFileSync((0, import_path8.join)(path5, "schema.json"), "utf8");
|
|
12392
12413
|
metadata.schema = JSON.parse(schema);
|
|
12393
12414
|
metadata.package = JSON.parse(pkg2);
|
|
12394
12415
|
if (!metadata.package.name || !metadata.package.version || !metadata.package.description) {
|
|
@@ -13656,21 +13677,21 @@ __export(version_exports, {
|
|
|
13656
13677
|
getLicenseVersion: () => getLicenseVersion,
|
|
13657
13678
|
getProVersion: () => getProVersion
|
|
13658
13679
|
});
|
|
13659
|
-
var
|
|
13680
|
+
var import_fs8, import_path9, getLicenseVersion, getProVersion;
|
|
13660
13681
|
var init_version2 = __esm({
|
|
13661
13682
|
"../pro/packages/pro/src/constants/version.ts"() {
|
|
13662
13683
|
init_src2();
|
|
13663
|
-
|
|
13684
|
+
import_fs8 = __toESM(require("fs"));
|
|
13664
13685
|
import_path9 = __toESM(require("path"));
|
|
13665
13686
|
getLicenseVersion = () => {
|
|
13666
13687
|
if (environment_default.isDev()) {
|
|
13667
13688
|
const DEV_VER_FILENAME = "dev-version.txt";
|
|
13668
13689
|
const verFile = import_path9.default.join(objectStore_exports2.budibaseTempDir(), DEV_VER_FILENAME);
|
|
13669
|
-
if (
|
|
13670
|
-
return
|
|
13690
|
+
if (import_fs8.default.existsSync(verFile)) {
|
|
13691
|
+
return import_fs8.default.readFileSync(verFile, "utf8");
|
|
13671
13692
|
} else {
|
|
13672
13693
|
const devVer = utils_exports2.newid();
|
|
13673
|
-
|
|
13694
|
+
import_fs8.default.writeFileSync(verFile, devVer);
|
|
13674
13695
|
return devVer;
|
|
13675
13696
|
}
|
|
13676
13697
|
} else {
|
|
@@ -14116,21 +14137,21 @@ function getOfflineLicense() {
|
|
|
14116
14137
|
}
|
|
14117
14138
|
}
|
|
14118
14139
|
function getOfflineLicenseFromDisk() {
|
|
14119
|
-
if (
|
|
14120
|
-
const token =
|
|
14140
|
+
if (import_fs9.default.existsSync(LICENSE_FILE_PATH)) {
|
|
14141
|
+
const token = import_fs9.default.readFileSync(LICENSE_FILE_PATH, { encoding: "utf-8" });
|
|
14121
14142
|
return import_jsonwebtoken.default.verify(token, PUBLIC_KEY, { algorithms: ["RS256"] });
|
|
14122
14143
|
}
|
|
14123
14144
|
}
|
|
14124
14145
|
function writeOfflineLicenseToDisk(signedLicense) {
|
|
14125
|
-
|
|
14146
|
+
import_fs9.default.writeFileSync(LICENSE_FILE_PATH, signedLicense, { encoding: "utf-8" });
|
|
14126
14147
|
}
|
|
14127
14148
|
function deleteOfflineLicense() {
|
|
14128
|
-
|
|
14149
|
+
import_fs9.default.rmSync(LICENSE_FILE_PATH, { force: true });
|
|
14129
14150
|
}
|
|
14130
|
-
var
|
|
14151
|
+
var import_fs9, import_path10, import_os2, import_jsonwebtoken, SUB_DIRECTORY, DIRECTORY, OFFLINE_LICENSE_FILE, LICENSE_FILE_PATH, PUBLIC_KEY;
|
|
14131
14152
|
var init_offline = __esm({
|
|
14132
14153
|
"../pro/packages/pro/src/sdk/licensing/licenses/offline.ts"() {
|
|
14133
|
-
|
|
14154
|
+
import_fs9 = __toESM(require("fs"));
|
|
14134
14155
|
import_path10 = require("path");
|
|
14135
14156
|
import_os2 = require("os");
|
|
14136
14157
|
import_jsonwebtoken = __toESM(require("jsonwebtoken"));
|
|
@@ -14139,8 +14160,8 @@ var init_offline = __esm({
|
|
|
14139
14160
|
DIRECTORY = (0, import_path10.join)((0, import_os2.tmpdir)(), SUB_DIRECTORY);
|
|
14140
14161
|
OFFLINE_LICENSE_FILE = "offline_license.txt";
|
|
14141
14162
|
LICENSE_FILE_PATH = (0, import_path10.join)(DIRECTORY, OFFLINE_LICENSE_FILE);
|
|
14142
|
-
if (!
|
|
14143
|
-
|
|
14163
|
+
if (!import_fs9.default.existsSync(DIRECTORY)) {
|
|
14164
|
+
import_fs9.default.mkdirSync(DIRECTORY);
|
|
14144
14165
|
}
|
|
14145
14166
|
PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv\nXtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1\nl2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C\n8suunQP5bEScqEY2kclqzSf8e6xqMzPUg3mL/pNa1iEv7TuLbU9nJfgR36l0WmZY\n94fWnSaT8OSXSqcxsaByf06gfS3HAoTJNc7eqz1Hf9fUORQGPUAnFK8cT3SfdA36\nd/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR\nmwIDAQAB\n-----END PUBLIC KEY-----\n";
|
|
14146
14167
|
}
|
|
@@ -15595,12 +15616,12 @@ var init_groups6 = __esm({
|
|
|
15595
15616
|
|
|
15596
15617
|
// ../pro/packages/pro/src/utilities/fileSystem.ts
|
|
15597
15618
|
function loadJSFile(directory, name) {
|
|
15598
|
-
return
|
|
15619
|
+
return import_fs10.default.readFileSync((0, import_path11.join)(directory, name), "utf8");
|
|
15599
15620
|
}
|
|
15600
|
-
var
|
|
15621
|
+
var import_fs10, import_path11;
|
|
15601
15622
|
var init_fileSystem2 = __esm({
|
|
15602
15623
|
"../pro/packages/pro/src/utilities/fileSystem.ts"() {
|
|
15603
|
-
|
|
15624
|
+
import_fs10 = __toESM(require("fs"));
|
|
15604
15625
|
import_path11 = require("path");
|
|
15605
15626
|
}
|
|
15606
15627
|
});
|
|
@@ -18569,8 +18590,8 @@ async function runBackup(trigger3, tenantId, appId, opts) {
|
|
|
18569
18590
|
}
|
|
18570
18591
|
});
|
|
18571
18592
|
await updateMetadata2("complete" /* COMPLETE */, { filename, contents });
|
|
18572
|
-
if (
|
|
18573
|
-
|
|
18593
|
+
if (import_fs11.default.existsSync(tarPath)) {
|
|
18594
|
+
import_fs11.default.rmSync(tarPath);
|
|
18574
18595
|
}
|
|
18575
18596
|
} catch (err) {
|
|
18576
18597
|
logging_exports.logAlert("App backup error", err);
|
|
@@ -18628,14 +18649,14 @@ async function exportProcessor(job, opts) {
|
|
|
18628
18649
|
});
|
|
18629
18650
|
});
|
|
18630
18651
|
}
|
|
18631
|
-
var
|
|
18652
|
+
var import_fs11;
|
|
18632
18653
|
var init_processing = __esm({
|
|
18633
18654
|
"../pro/packages/pro/src/sdk/backups/processing.ts"() {
|
|
18634
18655
|
init_src2();
|
|
18635
18656
|
init_backup5();
|
|
18636
18657
|
init_src();
|
|
18637
18658
|
init_queue4();
|
|
18638
|
-
|
|
18659
|
+
import_fs11 = __toESM(require("fs"));
|
|
18639
18660
|
}
|
|
18640
18661
|
});
|
|
18641
18662
|
|
|
@@ -19318,15 +19339,15 @@ async function downloadBackup(ctx) {
|
|
|
19318
19339
|
const backupId = ctx.params.backupId;
|
|
19319
19340
|
const { metadata, path: path5 } = await backups_default.downloadAppBackup(backupId);
|
|
19320
19341
|
ctx.attachment(`backup-${metadata.timestamp}.tar.gz`);
|
|
19321
|
-
ctx.body =
|
|
19342
|
+
ctx.body = import_fs12.default.createReadStream(path5);
|
|
19322
19343
|
}
|
|
19323
|
-
var
|
|
19344
|
+
var import_fs12;
|
|
19324
19345
|
var init_backups3 = __esm({
|
|
19325
19346
|
"../pro/packages/pro/src/api/controllers/apps/backups.ts"() {
|
|
19326
19347
|
init_src();
|
|
19327
19348
|
init_sdk2();
|
|
19328
19349
|
init_src2();
|
|
19329
|
-
|
|
19350
|
+
import_fs12 = __toESM(require("fs"));
|
|
19330
19351
|
}
|
|
19331
19352
|
});
|
|
19332
19353
|
|
|
@@ -21869,13 +21890,21 @@ async function updateAppUpdatedAt(ctx) {
|
|
|
21869
21890
|
}
|
|
21870
21891
|
await db_exports.doWithDB(appId, async (db2) => {
|
|
21871
21892
|
var _a2;
|
|
21872
|
-
|
|
21873
|
-
|
|
21874
|
-
|
|
21875
|
-
|
|
21876
|
-
|
|
21877
|
-
|
|
21878
|
-
|
|
21893
|
+
try {
|
|
21894
|
+
const metadata = await db2.get(DocumentType2.APP_METADATA);
|
|
21895
|
+
metadata.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
21896
|
+
metadata.updatedBy = getGlobalIDFromUserMetadataID2((_a2 = ctx.user) == null ? void 0 : _a2.userId);
|
|
21897
|
+
const response2 = await db2.put(metadata);
|
|
21898
|
+
metadata._rev = response2.rev;
|
|
21899
|
+
await cache_exports.app.invalidateAppMetadata(appId, metadata);
|
|
21900
|
+
await setDebounce(appId, DEBOUNCE_TIME_SEC);
|
|
21901
|
+
} catch (err) {
|
|
21902
|
+
if ((err == null ? void 0 : err.status) === 409) {
|
|
21903
|
+
return;
|
|
21904
|
+
} else {
|
|
21905
|
+
throw err;
|
|
21906
|
+
}
|
|
21907
|
+
}
|
|
21879
21908
|
});
|
|
21880
21909
|
}
|
|
21881
21910
|
async function builder(ctx) {
|
|
@@ -24850,7 +24879,7 @@ async function exportDB(dbName, opts = {}) {
|
|
|
24850
24879
|
return db_exports.doWithDB(dbName, async (db2) => {
|
|
24851
24880
|
if (opts == null ? void 0 : opts.exportPath) {
|
|
24852
24881
|
const path5 = opts == null ? void 0 : opts.exportPath;
|
|
24853
|
-
const writeStream =
|
|
24882
|
+
const writeStream = import_fs13.default.createWriteStream(path5);
|
|
24854
24883
|
await db2.dump(writeStream, exportOpts);
|
|
24855
24884
|
return path5;
|
|
24856
24885
|
} else {
|
|
@@ -24885,7 +24914,7 @@ async function exportApp(appId, config) {
|
|
|
24885
24914
|
ObjectStoreBuckets2.APPS,
|
|
24886
24915
|
(0, import_path12.join)(appPath, path5)
|
|
24887
24916
|
);
|
|
24888
|
-
|
|
24917
|
+
import_fs13.default.writeFileSync((0, import_path12.join)(tmpPath, path5), contents);
|
|
24889
24918
|
}
|
|
24890
24919
|
} else {
|
|
24891
24920
|
tmpPath = await objectStore_exports2.retrieveDirectory(
|
|
@@ -24895,13 +24924,13 @@ async function exportApp(appId, config) {
|
|
|
24895
24924
|
}
|
|
24896
24925
|
}
|
|
24897
24926
|
const downloadedPath = (0, import_path12.join)(tmpPath, appPath);
|
|
24898
|
-
if (
|
|
24899
|
-
const allFiles =
|
|
24927
|
+
if (import_fs13.default.existsSync(downloadedPath)) {
|
|
24928
|
+
const allFiles = import_fs13.default.readdirSync(downloadedPath);
|
|
24900
24929
|
for (let file of allFiles) {
|
|
24901
24930
|
const path5 = (0, import_path12.join)(downloadedPath, file);
|
|
24902
|
-
|
|
24931
|
+
import_fs13.default.renameSync(path5, (0, import_path12.join)(downloadedPath, "..", file));
|
|
24903
24932
|
}
|
|
24904
|
-
|
|
24933
|
+
import_fs13.default.rmdirSync(downloadedPath);
|
|
24905
24934
|
}
|
|
24906
24935
|
const dbPath = (0, import_path12.join)(tmpPath, DB_EXPORT_FILE);
|
|
24907
24936
|
await exportDB(appId, {
|
|
@@ -24909,8 +24938,8 @@ async function exportApp(appId, config) {
|
|
|
24909
24938
|
exportPath: dbPath
|
|
24910
24939
|
});
|
|
24911
24940
|
if (config == null ? void 0 : config.tar) {
|
|
24912
|
-
const tarPath = tarFilesToTmp(tmpPath,
|
|
24913
|
-
|
|
24941
|
+
const tarPath = tarFilesToTmp(tmpPath, import_fs13.default.readdirSync(tmpPath));
|
|
24942
|
+
import_fs13.default.rmSync(tmpPath, { recursive: true, force: true });
|
|
24914
24943
|
return tarPath;
|
|
24915
24944
|
} else {
|
|
24916
24945
|
return tmpPath;
|
|
@@ -24924,7 +24953,7 @@ async function streamExportApp(appId, excludeRows) {
|
|
|
24924
24953
|
});
|
|
24925
24954
|
return streamFile(tmpPath);
|
|
24926
24955
|
}
|
|
24927
|
-
var
|
|
24956
|
+
var import_fs13, import_path12, uuid3, tar3, MemoryStream2;
|
|
24928
24957
|
var init_exports2 = __esm({
|
|
24929
24958
|
"src/sdk/app/backups/exports.ts"() {
|
|
24930
24959
|
init_src2();
|
|
@@ -24933,7 +24962,7 @@ var init_exports2 = __esm({
|
|
|
24933
24962
|
init_constants4();
|
|
24934
24963
|
init_utils9();
|
|
24935
24964
|
init_constants7();
|
|
24936
|
-
|
|
24965
|
+
import_fs13 = __toESM(require("fs"));
|
|
24937
24966
|
import_path12 = require("path");
|
|
24938
24967
|
init_environment3();
|
|
24939
24968
|
uuid3 = require("uuid/v4");
|
|
@@ -25014,16 +25043,16 @@ async function getTemplateStream(template) {
|
|
|
25014
25043
|
throw new Error("Cannot import a non-text based file.");
|
|
25015
25044
|
}
|
|
25016
25045
|
if (template.file) {
|
|
25017
|
-
return
|
|
25046
|
+
return import_fs14.default.createReadStream(template.file.path);
|
|
25018
25047
|
} else if (template.key) {
|
|
25019
25048
|
const [type, name] = template.key.split("/");
|
|
25020
25049
|
const tmpPath = await downloadTemplate(type, name);
|
|
25021
|
-
return
|
|
25050
|
+
return import_fs14.default.createReadStream((0, import_path13.join)(tmpPath, name, "db", "dump.txt"));
|
|
25022
25051
|
}
|
|
25023
25052
|
}
|
|
25024
25053
|
function untarFile(file) {
|
|
25025
25054
|
const tmpPath = (0, import_path13.join)(budibaseTempDir2(), uuid4());
|
|
25026
|
-
|
|
25055
|
+
import_fs14.default.mkdirSync(tmpPath);
|
|
25027
25056
|
tar4.extract({
|
|
25028
25057
|
sync: true,
|
|
25029
25058
|
cwd: tmpPath,
|
|
@@ -25032,20 +25061,20 @@ function untarFile(file) {
|
|
|
25032
25061
|
return tmpPath;
|
|
25033
25062
|
}
|
|
25034
25063
|
function getGlobalDBFile(tmpPath) {
|
|
25035
|
-
return
|
|
25064
|
+
return import_fs14.default.readFileSync((0, import_path13.join)(tmpPath, GLOBAL_DB_EXPORT_FILE), "utf8");
|
|
25036
25065
|
}
|
|
25037
25066
|
function getListOfAppsInMulti(tmpPath) {
|
|
25038
|
-
return
|
|
25067
|
+
return import_fs14.default.readdirSync(tmpPath).filter((dir) => dir !== GLOBAL_DB_EXPORT_FILE);
|
|
25039
25068
|
}
|
|
25040
25069
|
async function importApp(appId, db2, template) {
|
|
25041
25070
|
var _a2, _b2;
|
|
25042
25071
|
let prodAppId = db_exports.getProdAppID(appId);
|
|
25043
25072
|
let dbStream;
|
|
25044
25073
|
const isTar = template.file && ((_b2 = (_a2 = template == null ? void 0 : template.file) == null ? void 0 : _a2.type) == null ? void 0 : _b2.endsWith("gzip"));
|
|
25045
|
-
const isDirectory = template.file &&
|
|
25074
|
+
const isDirectory = template.file && import_fs14.default.lstatSync(template.file.path).isDirectory();
|
|
25046
25075
|
if (template.file && (isTar || isDirectory)) {
|
|
25047
25076
|
const tmpPath = isTar ? untarFile(template.file) : template.file.path;
|
|
25048
|
-
const contents =
|
|
25077
|
+
const contents = import_fs14.default.readdirSync(tmpPath);
|
|
25049
25078
|
if (contents.length) {
|
|
25050
25079
|
let promises = [];
|
|
25051
25080
|
let excludedFiles = [GLOBAL_DB_EXPORT_FILE, DB_EXPORT_FILE];
|
|
@@ -25055,7 +25084,7 @@ async function importApp(appId, db2, template) {
|
|
|
25055
25084
|
continue;
|
|
25056
25085
|
}
|
|
25057
25086
|
filename = (0, import_path13.join)(prodAppId, filename);
|
|
25058
|
-
if (
|
|
25087
|
+
if (import_fs14.default.lstatSync(path5).isDirectory()) {
|
|
25059
25088
|
promises.push(
|
|
25060
25089
|
objectStore_exports2.uploadDirectory(ObjectStoreBuckets2.APPS, path5, filename)
|
|
25061
25090
|
);
|
|
@@ -25071,7 +25100,7 @@ async function importApp(appId, db2, template) {
|
|
|
25071
25100
|
}
|
|
25072
25101
|
await Promise.all(promises);
|
|
25073
25102
|
}
|
|
25074
|
-
dbStream =
|
|
25103
|
+
dbStream = import_fs14.default.createReadStream((0, import_path13.join)(tmpPath, DB_EXPORT_FILE));
|
|
25075
25104
|
} else {
|
|
25076
25105
|
dbStream = await getTemplateStream(template);
|
|
25077
25106
|
}
|
|
@@ -25083,7 +25112,7 @@ async function importApp(appId, db2, template) {
|
|
|
25083
25112
|
await updateAutomations(prodAppId, db2);
|
|
25084
25113
|
return ok;
|
|
25085
25114
|
}
|
|
25086
|
-
var import_path13,
|
|
25115
|
+
var import_path13, import_fs14, uuid4, tar4;
|
|
25087
25116
|
var init_imports = __esm({
|
|
25088
25117
|
"src/sdk/app/backups/imports.ts"() {
|
|
25089
25118
|
init_src2();
|
|
@@ -25093,7 +25122,7 @@ var init_imports = __esm({
|
|
|
25093
25122
|
init_fileSystem();
|
|
25094
25123
|
init_constants4();
|
|
25095
25124
|
import_path13 = require("path");
|
|
25096
|
-
|
|
25125
|
+
import_fs14 = __toESM(require("fs"));
|
|
25097
25126
|
init_sdk3();
|
|
25098
25127
|
init_src();
|
|
25099
25128
|
uuid4 = require("uuid/v4");
|
|
@@ -37588,7 +37617,7 @@ function executeSynchronously(job) {
|
|
|
37588
37617
|
});
|
|
37589
37618
|
});
|
|
37590
37619
|
}
|
|
37591
|
-
var import_string_templates8, import_fp8, FILTER_STEP_ID, LOOP_STEP_ID, CRON_STEP_ID, STOPPED_STATUS, Orchestrator, removeStalled;
|
|
37620
|
+
var import_string_templates8, import_fp8, import_perf_hooks2, FILTER_STEP_ID, LOOP_STEP_ID, CRON_STEP_ID, STOPPED_STATUS, Orchestrator, removeStalled;
|
|
37592
37621
|
var init_automation4 = __esm({
|
|
37593
37622
|
"src/threads/automation.ts"() {
|
|
37594
37623
|
init_utils18();
|
|
@@ -37604,6 +37633,7 @@ var init_automation4 = __esm({
|
|
|
37604
37633
|
init_src2();
|
|
37605
37634
|
import_string_templates8 = __toESM(require_src2());
|
|
37606
37635
|
import_fp8 = require("lodash/fp");
|
|
37636
|
+
import_perf_hooks2 = require("perf_hooks");
|
|
37607
37637
|
init_utils20();
|
|
37608
37638
|
init_environment3();
|
|
37609
37639
|
utils_default.threadSetup();
|
|
@@ -37767,7 +37797,7 @@ var init_automation4 = __esm({
|
|
|
37767
37797
|
return;
|
|
37768
37798
|
}
|
|
37769
37799
|
}
|
|
37770
|
-
const start2 = performance.now();
|
|
37800
|
+
const start2 = import_perf_hooks2.performance.now();
|
|
37771
37801
|
for (let step of automation.definition.steps) {
|
|
37772
37802
|
if (timeoutFlag) {
|
|
37773
37803
|
break;
|
|
@@ -37951,9 +37981,12 @@ var init_automation4 = __esm({
|
|
|
37951
37981
|
loopSteps = [];
|
|
37952
37982
|
}
|
|
37953
37983
|
}
|
|
37954
|
-
const end2 = performance.now();
|
|
37984
|
+
const end2 = import_perf_hooks2.performance.now();
|
|
37955
37985
|
const executionTime = end2 - start2;
|
|
37956
|
-
console.
|
|
37986
|
+
console.info(`Execution time: ${executionTime} milliseconds`, {
|
|
37987
|
+
_logKey: "automation",
|
|
37988
|
+
executionTime
|
|
37989
|
+
});
|
|
37957
37990
|
try {
|
|
37958
37991
|
await storeLog2(this._automation, this.executionOutput);
|
|
37959
37992
|
} catch (e) {
|
|
@@ -41040,7 +41073,7 @@ function fetchLevels(ctx) {
|
|
|
41040
41073
|
async function fetch40(ctx) {
|
|
41041
41074
|
const db2 = context_exports.getAppDB();
|
|
41042
41075
|
const dbRoles = await getAllDBRoles(db2);
|
|
41043
|
-
let
|
|
41076
|
+
let permissions = {};
|
|
41044
41077
|
for (let role of dbRoles) {
|
|
41045
41078
|
if (!role.permissions) {
|
|
41046
41079
|
continue;
|
|
@@ -41053,11 +41086,11 @@ async function fetch40(ctx) {
|
|
|
41053
41086
|
const levels = Array.isArray(levelArr) ? levelArr : [levelArr];
|
|
41054
41087
|
const perms = {};
|
|
41055
41088
|
levels.forEach((level) => perms[level] = roleId);
|
|
41056
|
-
|
|
41089
|
+
permissions[resource] = perms;
|
|
41057
41090
|
}
|
|
41058
41091
|
}
|
|
41059
41092
|
const finalPermissions = {};
|
|
41060
|
-
for (let [resource, permission] of Object.entries(
|
|
41093
|
+
for (let [resource, permission] of Object.entries(permissions)) {
|
|
41061
41094
|
const basePerms = getBasePermissions(resource);
|
|
41062
41095
|
finalPermissions[resource] = Object.assign(basePerms, permission);
|
|
41063
41096
|
}
|
|
@@ -41072,7 +41105,7 @@ async function getResourcePerms(ctx) {
|
|
|
41072
41105
|
})
|
|
41073
41106
|
);
|
|
41074
41107
|
const rolesList = body2.rows.map((row2) => row2.doc);
|
|
41075
|
-
let
|
|
41108
|
+
let permissions = {};
|
|
41076
41109
|
for (let level of SUPPORTED_LEVELS) {
|
|
41077
41110
|
for (let role of rolesList) {
|
|
41078
41111
|
const rolePerms = roles_exports.checkForRoleResourceArray(
|
|
@@ -41080,11 +41113,11 @@ async function getResourcePerms(ctx) {
|
|
|
41080
41113
|
resourceId
|
|
41081
41114
|
);
|
|
41082
41115
|
if (rolePerms && rolePerms[resourceId] && rolePerms[resourceId].indexOf(level) !== -1) {
|
|
41083
|
-
|
|
41116
|
+
permissions[level] = roles_exports.getExternalRoleID(role._id);
|
|
41084
41117
|
}
|
|
41085
41118
|
}
|
|
41086
41119
|
}
|
|
41087
|
-
ctx.body = Object.assign(getBasePermissions(resourceId),
|
|
41120
|
+
ctx.body = Object.assign(getBasePermissions(resourceId), permissions);
|
|
41088
41121
|
}
|
|
41089
41122
|
async function addPermission(ctx) {
|
|
41090
41123
|
ctx.body = await updatePermissionOnRole(
|
|
@@ -42947,7 +42980,7 @@ async function prepareUpload({ s3Key, bucket, metadata, file }) {
|
|
|
42947
42980
|
key: response2.Key
|
|
42948
42981
|
};
|
|
42949
42982
|
}
|
|
42950
|
-
var import_string_templates10, import_aws_sdk4,
|
|
42983
|
+
var import_string_templates10, import_aws_sdk4, import_fs15, uuid6, send2, toggleBetaUiFeature, serveBuilder, uploadFile, deleteObjects, serveApp, serveBuilderPreview, serveClientLibrary, getSignedUploadURL;
|
|
42951
42984
|
var init_static = __esm({
|
|
42952
42985
|
"src/api/controllers/static/index.ts"() {
|
|
42953
42986
|
init_centralPath();
|
|
@@ -42958,7 +42991,7 @@ var init_static = __esm({
|
|
|
42958
42991
|
init_utils9();
|
|
42959
42992
|
init_src2();
|
|
42960
42993
|
import_aws_sdk4 = __toESM(require("aws-sdk"));
|
|
42961
|
-
|
|
42994
|
+
import_fs15 = __toESM(require("fs"));
|
|
42962
42995
|
init_sdk3();
|
|
42963
42996
|
init_src4();
|
|
42964
42997
|
require("svelte/register");
|
|
@@ -42974,8 +43007,8 @@ var init_static = __esm({
|
|
|
42974
43007
|
return;
|
|
42975
43008
|
}
|
|
42976
43009
|
let builderPath = resolve(TOP_LEVEL_PATH, "new_design_ui");
|
|
42977
|
-
if (!
|
|
42978
|
-
|
|
43010
|
+
if (!import_fs15.default.existsSync(builderPath)) {
|
|
43011
|
+
import_fs15.default.mkdirSync(builderPath);
|
|
42979
43012
|
}
|
|
42980
43013
|
await objectStore_exports2.downloadTarballDirect(
|
|
42981
43014
|
"https://cdn.budi.live/beta:design_ui/new_ui.tar.gz",
|
|
@@ -44474,7 +44507,7 @@ function watch() {
|
|
|
44474
44507
|
usePolling: true,
|
|
44475
44508
|
interval: 250
|
|
44476
44509
|
}).on("all", async (event, path5) => {
|
|
44477
|
-
if (!(path5 == null ? void 0 : path5.endsWith(".tar.gz")) || !
|
|
44510
|
+
if (!(path5 == null ? void 0 : path5.endsWith(".tar.gz")) || !import_fs16.default.existsSync(path5)) {
|
|
44478
44511
|
return;
|
|
44479
44512
|
}
|
|
44480
44513
|
await tenancy.doInTenant(constants_exports.DEFAULT_TENANT_ID, async () => {
|
|
@@ -44490,13 +44523,13 @@ function watch() {
|
|
|
44490
44523
|
});
|
|
44491
44524
|
});
|
|
44492
44525
|
}
|
|
44493
|
-
var import_path15, import_chokidar,
|
|
44526
|
+
var import_path15, import_chokidar, import_fs16;
|
|
44494
44527
|
var init_watch = __esm({
|
|
44495
44528
|
"src/watch.ts"() {
|
|
44496
44529
|
import_path15 = __toESM(require("path"));
|
|
44497
44530
|
init_environment3();
|
|
44498
44531
|
import_chokidar = __toESM(require("chokidar"));
|
|
44499
|
-
|
|
44532
|
+
import_fs16 = __toESM(require("fs"));
|
|
44500
44533
|
init_src2();
|
|
44501
44534
|
init_plugins5();
|
|
44502
44535
|
}
|
|
@@ -44552,7 +44585,7 @@ async function startup(app2, server2) {
|
|
|
44552
44585
|
shutdown9(server2);
|
|
44553
44586
|
}
|
|
44554
44587
|
}
|
|
44555
|
-
if (environment_default2.SELF_HOSTED && !environment_default2.MULTI_TENANCY && environment_default2.PLUGINS_DIR &&
|
|
44588
|
+
if (environment_default2.SELF_HOSTED && !environment_default2.MULTI_TENANCY && environment_default2.PLUGINS_DIR && import_fs17.default.existsSync(environment_default2.PLUGINS_DIR)) {
|
|
44556
44589
|
watch();
|
|
44557
44590
|
}
|
|
44558
44591
|
await installation_exports.checkInstallVersion();
|
|
@@ -44587,14 +44620,14 @@ async function startup(app2, server2) {
|
|
|
44587
44620
|
}
|
|
44588
44621
|
}
|
|
44589
44622
|
}
|
|
44590
|
-
var
|
|
44623
|
+
var import_fs17, STARTUP_RAN;
|
|
44591
44624
|
var init_startup = __esm({
|
|
44592
44625
|
"src/startup.ts"() {
|
|
44593
44626
|
init_environment3();
|
|
44594
44627
|
init_redis4();
|
|
44595
44628
|
init_workerRequests();
|
|
44596
44629
|
init_src2();
|
|
44597
|
-
|
|
44630
|
+
import_fs17 = __toESM(require("fs"));
|
|
44598
44631
|
init_watch();
|
|
44599
44632
|
init_automations8();
|
|
44600
44633
|
init_fileSystem();
|