@abtnode/core 1.16.43-beta-20250419-231352-c78ac93d → 1.16.43-beta-20250422-042711-c40bec75

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.
@@ -415,7 +415,7 @@ class DiskBlockletManager extends BaseBlockletManager {
415
415
  const { did } = job;
416
416
  const checkUpdate = await this.getAutoCheckUpdate({ did });
417
417
  if (checkUpdate?.enabled) {
418
- this.checkUpdateQueue.push(job, jobId, true, CHECK_UPDATE.JOB.INTERVAL);
418
+ this.checkUpdateQueue.push(job, jobId, true, CHECK_UPDATE.JOB.DAY_INTERVAL);
419
419
  }
420
420
  };
421
421
  this.checkUpdateQueue.on('finished', handleCheckUpdateComplete).on('failed', handleCheckUpdateComplete);
@@ -513,7 +513,7 @@ class DiskBlockletManager extends BaseBlockletManager {
513
513
  },
514
514
  entity: 'blocklet',
515
515
  action: 'autoCheckUpdate',
516
- interval: CHECK_UPDATE.JOB.INTERVAL,
516
+ interval: CHECK_UPDATE.JOB.DAY_INTERVAL,
517
517
  restoreCancelled: true,
518
518
  });
519
519
  }
@@ -2647,8 +2647,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2647
2647
  context,
2648
2648
  },
2649
2649
  jobId,
2650
- true,
2651
- CHECK_UPDATE.JOB.DAY_INTERVAL
2650
+ true
2652
2651
  );
2653
2652
  }
2654
2653
  }
@@ -17,6 +17,7 @@ const {
17
17
  checkStructVersion,
18
18
  checkVersionCompatibility,
19
19
  getBlockletStatus,
20
+ resolveMountPointConflict,
20
21
  } = require('../../../util/blocklet');
21
22
  const { resolveDownload, resolveDiffDownload, downloadFromUpload } = require('../../downloader/resolve-download');
22
23
 
@@ -108,6 +109,8 @@ const installComponentFromUpload = async ({
108
109
  const action = index >= 0 ? INSTALL_ACTIONS.UPGRADE_COMPONENT : INSTALL_ACTIONS.INSTALL_COMPONENT;
109
110
 
110
111
  const { dynamicComponents } = await parseComponents(newChild);
112
+ dynamicComponents.forEach((comp) => resolveMountPointConflict(comp, newBlocklet));
113
+
111
114
  const newChildren = filterDuplicateComponents(dynamicComponents, newBlocklet.children).map((x) => ({
112
115
  ...x,
113
116
  installedAt: x.installedAt || new Date(),
@@ -19,6 +19,7 @@ const {
19
19
  validateBlocklet,
20
20
  filterRequiredComponents,
21
21
  getComponentNamesWithVersion,
22
+ resolveMountPointConflict,
22
23
  } = require('../../../util/blocklet');
23
24
  const StoreUtil = require('../../../util/store');
24
25
 
@@ -108,6 +109,9 @@ const installComponentFromUrl = async ({
108
109
  dynamicComponents.unshift(newChild);
109
110
  }
110
111
 
112
+ // 检查不存在的 blocklet mountPoint 是否冲突
113
+ dynamicComponents.forEach((comp) => resolveMountPointConflict(comp, blocklet));
114
+
111
115
  let newChildren = filterDuplicateComponents(dynamicComponents, blocklet.children).map((x) => ({
112
116
  ...x,
113
117
  installedAt: x.installedAt || new Date(),
@@ -43,6 +43,7 @@ const BLOCKLET_ROLES = [
43
43
  ];
44
44
 
45
45
  const isBlockletRole = (role) => role && BLOCKLET_ROLES.includes(role);
46
+ const isSystemRole = (role) => role && ROLES[(role || '').toUpperCase()];
46
47
 
47
48
  const BLOCKLET_MULTIPLE_TENANT_ROLES = [
48
49
  SERVER_ROLES.BLOCKLET_OWNER,
@@ -343,6 +344,8 @@ const CHECK_UPDATE = {
343
344
  JOB: {
344
345
  // 自动备份的时间间隔,单位为 s,目前是间隔2个小时
345
346
  INTERVAL: 2 * 60 * 60,
347
+ // 1 天
348
+ DAY_INTERVAL: 24 * 60 * 60,
346
349
  },
347
350
  };
348
351
 
@@ -590,6 +593,7 @@ module.exports = Object.freeze({
590
593
  SERVER_ROLES,
591
594
  BLOCKLET_ROLES,
592
595
  isBlockletRole,
596
+ isSystemRole,
593
597
  isBlockletMultipleTenantRole,
594
598
  AUTH_CERT_TYPE,
595
599
  RBAC_CONFIG,
@@ -38735,7 +38739,7 @@ module.exports = require("zlib");
38735
38739
  /***/ ((module) => {
38736
38740
 
38737
38741
  "use strict";
38738
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.42","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"node tools/jest.js","coverage":"npm run test -- --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.42","@abtnode/auth":"1.16.42","@abtnode/certificate-manager":"1.16.42","@abtnode/constant":"1.16.42","@abtnode/cron":"1.16.42","@abtnode/docker-utils":"1.16.42","@abtnode/logger":"1.16.42","@abtnode/models":"1.16.42","@abtnode/queue":"1.16.42","@abtnode/rbac":"1.16.42","@abtnode/router-provider":"1.16.42","@abtnode/static-server":"1.16.42","@abtnode/timemachine":"1.16.42","@abtnode/util":"1.16.42","@arcblock/did":"1.20.1","@arcblock/did-auth":"1.20.1","@arcblock/did-ext":"^1.20.1","@arcblock/did-motif":"^1.1.13","@arcblock/did-util":"1.20.1","@arcblock/event-hub":"1.20.1","@arcblock/jwt":"^1.20.1","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.20.1","@arcblock/vc":"1.20.1","@blocklet/constant":"1.16.42","@blocklet/did-space-js":"^1.0.48","@blocklet/env":"1.16.42","@blocklet/meta":"1.16.42","@blocklet/resolver":"1.16.42","@blocklet/sdk":"1.16.42","@blocklet/store":"1.16.42","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.20.1","@ocap/util":"1.20.1","@ocap/wallet":"1.20.1","@slack/webhook":"^5.0.4","archiver":"^7.0.1","axios":"^1.7.9","axon":"^2.0.3","chalk":"^4.1.2","cross-spawn":"^7.0.3","dayjs":"^1.11.13","deep-diff":"^1.0.2","detect-port":"^1.5.1","envfile":"^7.1.0","escape-string-regexp":"^4.0.0","fast-glob":"^3.3.2","filesize":"^10.1.1","flat":"^5.0.2","fs-extra":"^11.2.0","get-port":"^5.1.1","hasha":"^5.2.2","is-base64":"^1.1.0","is-cidr":"4","is-ip":"3","is-url":"^1.2.4","joi":"17.12.2","joi-extension-semver":"^5.0.0","js-yaml":"^4.1.0","kill-port":"^2.0.1","lodash":"^4.17.21","lru-cache":"^11.0.2","node-stream-zip":"^1.15.0","p-all":"^3.0.0","p-limit":"^3.1.0","p-map":"^4.0.0","p-retry":"^4.6.2","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","ssri":"^8.0.1","stream-throttle":"^0.1.3","stream-to-promise":"^3.0.0","systeminformation":"^5.23.3","tail":"^2.2.4","tar":"^6.1.11","transliteration":"^2.3.5","ua-parser-js":"^1.0.2","ufo":"^1.5.3","uuid":"^9.0.1","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"expand-tilde":"^2.0.2","express":"^4.18.2","jest":"^29.7.0","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
38742
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.42","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"node tools/jest.js","coverage":"npm run test -- --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.42","@abtnode/auth":"1.16.42","@abtnode/certificate-manager":"1.16.42","@abtnode/constant":"1.16.42","@abtnode/cron":"1.16.42","@abtnode/docker-utils":"1.16.42","@abtnode/logger":"1.16.42","@abtnode/models":"1.16.42","@abtnode/queue":"1.16.42","@abtnode/rbac":"1.16.42","@abtnode/router-provider":"1.16.42","@abtnode/static-server":"1.16.42","@abtnode/timemachine":"1.16.42","@abtnode/util":"1.16.42","@arcblock/did":"1.20.1","@arcblock/did-auth":"1.20.1","@arcblock/did-ext":"^1.20.1","@arcblock/did-motif":"^1.1.13","@arcblock/did-util":"1.20.1","@arcblock/event-hub":"1.20.1","@arcblock/jwt":"^1.20.1","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.20.1","@arcblock/vc":"1.20.1","@blocklet/constant":"1.16.42","@blocklet/did-space-js":"^1.0.48","@blocklet/env":"1.16.42","@blocklet/meta":"1.16.42","@blocklet/resolver":"1.16.42","@blocklet/sdk":"1.16.42","@blocklet/store":"1.16.42","@blocklet/theme":"^2.13.9","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.20.1","@ocap/util":"1.20.1","@ocap/wallet":"1.20.1","@slack/webhook":"^5.0.4","archiver":"^7.0.1","axios":"^1.7.9","axon":"^2.0.3","chalk":"^4.1.2","cross-spawn":"^7.0.3","dayjs":"^1.11.13","deep-diff":"^1.0.2","detect-port":"^1.5.1","envfile":"^7.1.0","escape-string-regexp":"^4.0.0","fast-glob":"^3.3.2","filesize":"^10.1.1","flat":"^5.0.2","fs-extra":"^11.2.0","get-port":"^5.1.1","hasha":"^5.2.2","is-base64":"^1.1.0","is-cidr":"4","is-ip":"3","is-url":"^1.2.4","joi":"17.12.2","joi-extension-semver":"^5.0.0","js-yaml":"^4.1.0","kill-port":"^2.0.1","lodash":"^4.17.21","lru-cache":"^11.0.2","node-stream-zip":"^1.15.0","p-all":"^3.0.0","p-limit":"^3.1.0","p-map":"^4.0.0","p-retry":"^4.6.2","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","ssri":"^8.0.1","stream-throttle":"^0.1.3","stream-to-promise":"^3.0.0","systeminformation":"^5.23.3","tail":"^2.2.4","tar":"^6.1.11","transliteration":"^2.3.5","ua-parser-js":"^1.0.2","ufo":"^1.5.3","uuid":"^9.0.1","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"expand-tilde":"^2.0.2","express":"^4.18.2","jest":"^29.7.0","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
38739
38743
 
38740
38744
  /***/ }),
38741
38745
 
@@ -1,12 +1,15 @@
1
1
  const logger = require('@abtnode/logger')('@abtnode/disk-monitor');
2
+ const { joinURL } = require('ufo');
2
3
  const info = require('../util/sysinfo');
3
4
  const states = require('../states');
4
5
 
5
6
  /**
6
- * @param {number} threshold Threshold for disk alerts, percentage
7
+ * @param {object} teamManager
7
8
  */
8
- const check = async (threshold, teamManager) => {
9
+ const check = async (teamManager) => {
9
10
  const { disks } = await info.getSysInfo();
11
+ const nodeInfo = await states.node.read();
12
+ const threshold = nodeInfo.diskAlertThreshold; // Threshold for disk alerts, percentage
10
13
  for (const disk of disks) {
11
14
  const usageRatio = (disk.used / disk.total) * 100;
12
15
  if (Number.isNaN(usageRatio)) {
@@ -20,6 +23,8 @@ const check = async (threshold, teamManager) => {
20
23
  continue;
21
24
  }
22
25
 
26
+ const actionPath = '/analytics/runtime';
27
+ const action = process.env.NODE_ENV === 'production' ? joinURL(nodeInfo.routing.adminPath, actionPath) : actionPath;
23
28
  // eslint-disable-next-line no-await-in-loop
24
29
  await teamManager.createNotification({
25
30
  title: 'Disk Usage Alert',
@@ -27,6 +32,7 @@ const check = async (threshold, teamManager) => {
27
32
  entityType: 'node',
28
33
  severity: 'warning',
29
34
  sticky: true,
35
+ action,
30
36
  });
31
37
  }
32
38
  };
@@ -35,9 +41,7 @@ const getCron = (teamManager) => ({
35
41
  name: 'monitor-disk-usage',
36
42
  time: '0 5 * * * *', // check every hour
37
43
  fn: async () => {
38
- const nodeInfo = await states.node.read();
39
- const threshold = nodeInfo.diskAlertThreshold;
40
- await check(threshold, teamManager);
44
+ await check(teamManager);
41
45
  },
42
46
  options: { runOnInit: true },
43
47
  });
@@ -35,6 +35,7 @@ const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
35
35
  const hashFiles = require('@abtnode/util/lib/hash-files');
36
36
  const didDocument = require('@abtnode/util/lib/did-document');
37
37
  const { BLOCKLET_MAX_MEM_LIMIT_IN_MB, BLOCKLET_INSTALL_TYPE, APP_STRUCT_VERSION } = require('@abtnode/constant');
38
+ const { BLOCKLET_THEME_LIGHT, BLOCKLET_THEME_DARK } = require('@blocklet/theme');
38
39
  const {
39
40
  parseComponents,
40
41
  ensureMeta,
@@ -50,6 +51,7 @@ const { getComponentApiKey } = require('@abtnode/util/lib/blocklet');
50
51
  const { toSvg: createDidLogo } =
51
52
  process.env.NODE_ENV !== 'test' ? require('@arcblock/did-motif') : require('@arcblock/did-motif/dist/did-motif.cjs');
52
53
  const { createBlockiesSvg } = require('@blocklet/meta/lib/blockies');
54
+ const formatName = require('@abtnode/util/lib/format-name');
53
55
 
54
56
  const SCRIPT_ENGINES_WHITE_LIST = ['npm', 'npx', 'pnpm', 'yarn'];
55
57
 
@@ -1510,6 +1512,10 @@ const getBlocklet = async ({
1510
1512
  }
1511
1513
 
1512
1514
  blocklet.settings.storeList = blocklet.settings.storeList || [];
1515
+ blocklet.settings.theme = blocklet.settings.theme || {
1516
+ light: BLOCKLET_THEME_LIGHT,
1517
+ dark: BLOCKLET_THEME_DARK,
1518
+ };
1513
1519
 
1514
1520
  const nodeInfo = await states.node.read();
1515
1521
 
@@ -1817,6 +1823,28 @@ const checkDuplicateMountPoint = (app, mountPoint) => {
1817
1823
  }
1818
1824
  };
1819
1825
 
1826
+ const resolveMountPointConflict = (comp, blocklet) => {
1827
+ try {
1828
+ if (!comp?.mountPoint) return comp;
1829
+
1830
+ const children = blocklet?.children || [];
1831
+
1832
+ const existingComponent = children.find((x) => x.mountPoint === comp.mountPoint && x.meta?.did !== comp.meta?.did);
1833
+ if (!existingComponent) return comp;
1834
+
1835
+ const baseName = formatName(comp?.meta?.name) || formatName(comp?.meta?.title);
1836
+ comp.mountPoint = children.some((x) => x.mountPoint === `/${baseName}`)
1837
+ ? comp.meta.did
1838
+ : baseName.toLocaleLowerCase();
1839
+
1840
+ return comp;
1841
+ } catch (error) {
1842
+ logger.error('Failed to resolve mount point:', error);
1843
+ comp.mountPoint = comp.meta.did;
1844
+ return comp;
1845
+ }
1846
+ };
1847
+
1820
1848
  const validateStore = (nodeInfo, storeUrl) => {
1821
1849
  if (nodeInfo.mode !== 'serverless') {
1822
1850
  return;
@@ -2306,4 +2334,5 @@ module.exports = {
2306
2334
  getPackConfig,
2307
2335
  getBlockletConfigObj,
2308
2336
  isDevelopmentMode,
2337
+ resolveMountPointConflict,
2309
2338
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.43-beta-20250419-231352-c78ac93d",
6
+ "version": "1.16.43-beta-20250422-042711-c40bec75",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,20 +19,20 @@
19
19
  "author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
20
20
  "license": "Apache-2.0",
21
21
  "dependencies": {
22
- "@abtnode/analytics": "1.16.43-beta-20250419-231352-c78ac93d",
23
- "@abtnode/auth": "1.16.43-beta-20250419-231352-c78ac93d",
24
- "@abtnode/certificate-manager": "1.16.43-beta-20250419-231352-c78ac93d",
25
- "@abtnode/constant": "1.16.43-beta-20250419-231352-c78ac93d",
26
- "@abtnode/cron": "1.16.43-beta-20250419-231352-c78ac93d",
27
- "@abtnode/docker-utils": "1.16.43-beta-20250419-231352-c78ac93d",
28
- "@abtnode/logger": "1.16.43-beta-20250419-231352-c78ac93d",
29
- "@abtnode/models": "1.16.43-beta-20250419-231352-c78ac93d",
30
- "@abtnode/queue": "1.16.43-beta-20250419-231352-c78ac93d",
31
- "@abtnode/rbac": "1.16.43-beta-20250419-231352-c78ac93d",
32
- "@abtnode/router-provider": "1.16.43-beta-20250419-231352-c78ac93d",
33
- "@abtnode/static-server": "1.16.43-beta-20250419-231352-c78ac93d",
34
- "@abtnode/timemachine": "1.16.43-beta-20250419-231352-c78ac93d",
35
- "@abtnode/util": "1.16.43-beta-20250419-231352-c78ac93d",
22
+ "@abtnode/analytics": "1.16.43-beta-20250422-042711-c40bec75",
23
+ "@abtnode/auth": "1.16.43-beta-20250422-042711-c40bec75",
24
+ "@abtnode/certificate-manager": "1.16.43-beta-20250422-042711-c40bec75",
25
+ "@abtnode/constant": "1.16.43-beta-20250422-042711-c40bec75",
26
+ "@abtnode/cron": "1.16.43-beta-20250422-042711-c40bec75",
27
+ "@abtnode/docker-utils": "1.16.43-beta-20250422-042711-c40bec75",
28
+ "@abtnode/logger": "1.16.43-beta-20250422-042711-c40bec75",
29
+ "@abtnode/models": "1.16.43-beta-20250422-042711-c40bec75",
30
+ "@abtnode/queue": "1.16.43-beta-20250422-042711-c40bec75",
31
+ "@abtnode/rbac": "1.16.43-beta-20250422-042711-c40bec75",
32
+ "@abtnode/router-provider": "1.16.43-beta-20250422-042711-c40bec75",
33
+ "@abtnode/static-server": "1.16.43-beta-20250422-042711-c40bec75",
34
+ "@abtnode/timemachine": "1.16.43-beta-20250422-042711-c40bec75",
35
+ "@abtnode/util": "1.16.43-beta-20250422-042711-c40bec75",
36
36
  "@arcblock/did": "1.20.1",
37
37
  "@arcblock/did-auth": "1.20.1",
38
38
  "@arcblock/did-ext": "^1.20.1",
@@ -43,13 +43,14 @@
43
43
  "@arcblock/pm2-events": "^0.0.5",
44
44
  "@arcblock/validator": "^1.20.1",
45
45
  "@arcblock/vc": "1.20.1",
46
- "@blocklet/constant": "1.16.43-beta-20250419-231352-c78ac93d",
46
+ "@blocklet/constant": "1.16.43-beta-20250422-042711-c40bec75",
47
47
  "@blocklet/did-space-js": "^1.0.48",
48
- "@blocklet/env": "1.16.43-beta-20250419-231352-c78ac93d",
49
- "@blocklet/meta": "1.16.43-beta-20250419-231352-c78ac93d",
50
- "@blocklet/resolver": "1.16.43-beta-20250419-231352-c78ac93d",
51
- "@blocklet/sdk": "1.16.43-beta-20250419-231352-c78ac93d",
52
- "@blocklet/store": "1.16.43-beta-20250419-231352-c78ac93d",
48
+ "@blocklet/env": "1.16.43-beta-20250422-042711-c40bec75",
49
+ "@blocklet/meta": "1.16.43-beta-20250422-042711-c40bec75",
50
+ "@blocklet/resolver": "1.16.43-beta-20250422-042711-c40bec75",
51
+ "@blocklet/sdk": "1.16.43-beta-20250422-042711-c40bec75",
52
+ "@blocklet/store": "1.16.43-beta-20250422-042711-c40bec75",
53
+ "@blocklet/theme": "^2.13.9",
53
54
  "@fidm/x509": "^1.2.1",
54
55
  "@ocap/mcrypto": "1.20.1",
55
56
  "@ocap/util": "1.20.1",
@@ -111,5 +112,5 @@
111
112
  "jest": "^29.7.0",
112
113
  "unzipper": "^0.10.11"
113
114
  },
114
- "gitHead": "207acad34e8ccf318cd7539c1ac717cee7951b53"
115
+ "gitHead": "836a400c1f953f421a8e95dc9a32ba883ac2586d"
115
116
  }