@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/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
- var import_redlock, getClient, OPTIONS, newRedlock, doWithLock;
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 permissions2 = flatten(
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 permissions2) {
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 path6 = (0, import_path7.join)(TOP_LEVEL_PATH, "packages/client", filename);
12323
- delete require.cache[require.resolve(path6)];
12324
- return require(path6);
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 (!import_fs6.default.existsSync(path5)) {
12355
- import_fs6.default.mkdirSync(path5);
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 (import_fs6.default.existsSync(filename)) {
12360
- const currentHash = import_fs6.default.readFileSync(metadataName, "utf8");
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
- import_fs6.default.unlinkSync(filename);
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
- import_fs6.default.writeFileSync(filename, pluginJs);
12375
- import_fs6.default.writeFileSync(metadataName, hash2);
12395
+ import_fs7.default.writeFileSync(filename, pluginJs);
12396
+ import_fs7.default.writeFileSync(metadataName, hash2);
12376
12397
  return require(filename);
12377
12398
  }
12378
- var import_fs6, import_path8, DATASOURCE_PATH, AUTOMATION_PATH, getPluginMetadata, getDatasourcePlugin, getAutomationPlugin;
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
- import_fs6 = __toESM(require("fs"));
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 = import_fs6.default.readFileSync((0, import_path8.join)(path5, "package.json"), "utf8");
12391
- const schema = import_fs6.default.readFileSync((0, import_path8.join)(path5, "schema.json"), "utf8");
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 import_fs7, import_path9, getLicenseVersion, getProVersion;
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
- import_fs7 = __toESM(require("fs"));
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 (import_fs7.default.existsSync(verFile)) {
13670
- return import_fs7.default.readFileSync(verFile, "utf8");
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
- import_fs7.default.writeFileSync(verFile, devVer);
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 (import_fs8.default.existsSync(LICENSE_FILE_PATH)) {
14120
- const token = import_fs8.default.readFileSync(LICENSE_FILE_PATH, { encoding: "utf-8" });
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
- import_fs8.default.writeFileSync(LICENSE_FILE_PATH, signedLicense, { encoding: "utf-8" });
14146
+ import_fs9.default.writeFileSync(LICENSE_FILE_PATH, signedLicense, { encoding: "utf-8" });
14126
14147
  }
14127
14148
  function deleteOfflineLicense() {
14128
- import_fs8.default.rmSync(LICENSE_FILE_PATH, { force: true });
14149
+ import_fs9.default.rmSync(LICENSE_FILE_PATH, { force: true });
14129
14150
  }
14130
- var import_fs8, import_path10, import_os2, import_jsonwebtoken, SUB_DIRECTORY, DIRECTORY, OFFLINE_LICENSE_FILE, LICENSE_FILE_PATH, PUBLIC_KEY;
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
- import_fs8 = __toESM(require("fs"));
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 (!import_fs8.default.existsSync(DIRECTORY)) {
14143
- import_fs8.default.mkdirSync(DIRECTORY);
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 import_fs9.default.readFileSync((0, import_path11.join)(directory, name), "utf8");
15619
+ return import_fs10.default.readFileSync((0, import_path11.join)(directory, name), "utf8");
15599
15620
  }
15600
- var import_fs9, import_path11;
15621
+ var import_fs10, import_path11;
15601
15622
  var init_fileSystem2 = __esm({
15602
15623
  "../pro/packages/pro/src/utilities/fileSystem.ts"() {
15603
- import_fs9 = __toESM(require("fs"));
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 (import_fs10.default.existsSync(tarPath)) {
18573
- import_fs10.default.rmSync(tarPath);
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 import_fs10;
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
- import_fs10 = __toESM(require("fs"));
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 = import_fs11.default.createReadStream(path5);
19342
+ ctx.body = import_fs12.default.createReadStream(path5);
19322
19343
  }
19323
- var import_fs11;
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
- import_fs11 = __toESM(require("fs"));
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
- const metadata = await db2.get(DocumentType2.APP_METADATA);
21873
- metadata.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
21874
- metadata.updatedBy = getGlobalIDFromUserMetadataID2((_a2 = ctx.user) == null ? void 0 : _a2.userId);
21875
- const response2 = await db2.put(metadata);
21876
- metadata._rev = response2.rev;
21877
- await cache_exports.app.invalidateAppMetadata(appId, metadata);
21878
- await setDebounce(appId, DEBOUNCE_TIME_SEC);
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 = import_fs12.default.createWriteStream(path5);
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
- import_fs12.default.writeFileSync((0, import_path12.join)(tmpPath, path5), contents);
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 (import_fs12.default.existsSync(downloadedPath)) {
24899
- const allFiles = import_fs12.default.readdirSync(downloadedPath);
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
- import_fs12.default.renameSync(path5, (0, import_path12.join)(downloadedPath, "..", file));
24931
+ import_fs13.default.renameSync(path5, (0, import_path12.join)(downloadedPath, "..", file));
24903
24932
  }
24904
- import_fs12.default.rmdirSync(downloadedPath);
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, import_fs12.default.readdirSync(tmpPath));
24913
- import_fs12.default.rmSync(tmpPath, { recursive: true, force: true });
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 import_fs12, import_path12, uuid3, tar3, MemoryStream2;
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
- import_fs12 = __toESM(require("fs"));
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 import_fs13.default.createReadStream(template.file.path);
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 import_fs13.default.createReadStream((0, import_path13.join)(tmpPath, name, "db", "dump.txt"));
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
- import_fs13.default.mkdirSync(tmpPath);
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 import_fs13.default.readFileSync((0, import_path13.join)(tmpPath, GLOBAL_DB_EXPORT_FILE), "utf8");
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 import_fs13.default.readdirSync(tmpPath).filter((dir) => dir !== GLOBAL_DB_EXPORT_FILE);
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 && import_fs13.default.lstatSync(template.file.path).isDirectory();
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 = import_fs13.default.readdirSync(tmpPath);
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 (import_fs13.default.lstatSync(path5).isDirectory()) {
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 = import_fs13.default.createReadStream((0, import_path13.join)(tmpPath, DB_EXPORT_FILE));
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, import_fs13, uuid4, tar4;
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
- import_fs13 = __toESM(require("fs"));
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.log(`Execution time: ${executionTime} milliseconds`);
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 permissions2 = {};
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
- permissions2[resource] = perms;
41089
+ permissions[resource] = perms;
41057
41090
  }
41058
41091
  }
41059
41092
  const finalPermissions = {};
41060
- for (let [resource, permission] of Object.entries(permissions2)) {
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 permissions2 = {};
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
- permissions2[level] = roles_exports.getExternalRoleID(role._id);
41116
+ permissions[level] = roles_exports.getExternalRoleID(role._id);
41084
41117
  }
41085
41118
  }
41086
41119
  }
41087
- ctx.body = Object.assign(getBasePermissions(resourceId), permissions2);
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, import_fs14, uuid6, send2, toggleBetaUiFeature, serveBuilder, uploadFile, deleteObjects, serveApp, serveBuilderPreview, serveClientLibrary, getSignedUploadURL;
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
- import_fs14 = __toESM(require("fs"));
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 (!import_fs14.default.existsSync(builderPath)) {
42978
- import_fs14.default.mkdirSync(builderPath);
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")) || !import_fs15.default.existsSync(path5)) {
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, import_fs15;
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
- import_fs15 = __toESM(require("fs"));
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 && import_fs16.default.existsSync(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 import_fs16, STARTUP_RAN;
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
- import_fs16 = __toESM(require("fs"));
44630
+ import_fs17 = __toESM(require("fs"));
44598
44631
  init_watch();
44599
44632
  init_automations8();
44600
44633
  init_fileSystem();