@blocklet/cli 1.16.49-beta-20250815-032308-7bcf0b85 → 1.16.49-beta-20250819-084933-3bcbd851

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.
@@ -451,7 +451,7 @@ const verifyEndpoint = async (opts) => {
451
451
  opts.connectEndpoint = opts.endpoint;
452
452
  opts.endpoint = endpoint;
453
453
 
454
- if (appPid) {
454
+ if (appPid && !opts.appDid) {
455
455
  opts.appDid = appPid;
456
456
  }
457
457
 
@@ -12,7 +12,7 @@ const get = require('lodash/get');
12
12
  const isEqual = require('lodash/isEqual');
13
13
  const isObject = require('lodash/isObject');
14
14
  const readLastLines = require('read-last-lines');
15
- const pm2 = require('@abtnode/util/lib/async-pm2');
15
+ const pm2 = require('@abtnode/util/lib/pm2/async-pm2');
16
16
  const { isInServerlessMode } = require('@abtnode/util/lib/serverless');
17
17
  const ensureEndpointHealthy = require('@abtnode/util/lib/ensure-endpoint-healthy');
18
18
  const { runMigrationScripts, runSchemaMigrations } = require('@abtnode/core/lib/migrations');
@@ -41,11 +41,12 @@ const {
41
41
  const { canUseFileSystemIsolateApi, SAFE_NODE_VERSION } = require('@abtnode/util/lib/security');
42
42
  const { ensureDockerRedis } = require('@abtnode/core/lib/util/docker/ensure-docker-redis');
43
43
  const { ensureDockerPostgres } = require('@abtnode/core/lib/util/docker/ensure-docker-postgres');
44
+ const { getDaemonInstanceCount, getServiceInstanceCount } = require('@abtnode/util/lib/pm2/get-instance-number');
45
+ const { pm2StartOrReload } = require('@abtnode/util/lib/pm2/pm2-start-or-reload');
44
46
 
45
47
  const { version } = require('../../../package.json');
46
48
  const debug = require('../../debug')('start');
47
49
  const util = require('../../util');
48
- const getServiceInstanceNumber = require('../../util/get-service-instance-number');
49
50
  const {
50
51
  getConfigFileFromAncestors,
51
52
  getRunningConfigFile,
@@ -246,7 +247,7 @@ const startService = async (logDir, maxMemoryRestart, environments) => {
246
247
 
247
248
  try {
248
249
  await wrapSpinner('Starting blocklet service...', async () => {
249
- await pm2.startAsync({
250
+ await pm2StartOrReload({
250
251
  namespace: 'daemon',
251
252
  name: PROCESS_NAME_SERVICE,
252
253
  script: './lib/process/service.js',
@@ -254,18 +255,20 @@ const startService = async (logDir, maxMemoryRestart, environments) => {
254
255
  output: path.join(logDir, 'service.stdout.log'),
255
256
  error: path.join(logDir, 'service.stderr.log'),
256
257
  cwd: getCliCwd(),
257
- wait_ready: true,
258
258
  max_restarts: 3,
259
- listen_timeout: 3000,
260
- pmx: false,
259
+ wait_ready: true,
260
+ listen_timeout: 40_000,
261
+ kill_timeout: 10_000,
262
+ execMode: 'cluster',
263
+ shutdown_with_message: true,
264
+ instances: getServiceInstanceCount(),
261
265
  time: true,
266
+ pmx: false,
262
267
  env: {
263
268
  ...environments,
264
269
  ABT_NODE_SERVICE_PORT: servicePort,
265
270
  },
266
- execMode: 'cluster',
267
271
  mergeLogs: true,
268
- instances: getServiceInstanceNumber(),
269
272
  interpreter_args: environments.ABT_NODE_KERNEL_MODE === ABT_NODE_KERNEL_OR_BLOCKLET_MODE.PERFORMANT ? [] : ['--optimize_for_size'],
270
273
  });
271
274
 
@@ -410,6 +413,10 @@ const exec = async ({ workingDir, config, dataDir, mode, updateDb, forceIntranet
410
413
  process.env.ABT_NODE_CACHE_SQLITE_PATH = path.join(dataDir, 'core', 'db-cache.db');
411
414
  }
412
415
 
416
+ if (!process.env.ABT_NODE_DATA_DIR) {
417
+ process.env.ABT_NODE_DATA_DIR = dataDir;
418
+ }
419
+
413
420
  const redisUrl = await ensureDockerRedis();
414
421
  if (redisUrl) {
415
422
  process.env.ABT_NODE_CACHE_REDIS_URL = redisUrl;
@@ -437,7 +444,7 @@ const exec = async ({ workingDir, config, dataDir, mode, updateDb, forceIntranet
437
444
  const { node, getBaseUrls, publishEvent, wallet } = await nodeLib.getNode({ dir: workingDir });
438
445
 
439
446
  // start event-hub
440
- const eventHubPort = await startEventHub(logDir, proxyMaxMemoryLimit);
447
+ const [eventHubPort, pm2EventHubPort] = await startEventHub(logDir, proxyMaxMemoryLimit, config.node.sk);
441
448
 
442
449
  return new Promise((resolve) => {
443
450
  node.onReady(async () => {
@@ -600,6 +607,7 @@ const exec = async ({ workingDir, config, dataDir, mode, updateDb, forceIntranet
600
607
  ABT_NODE_JOB_NAME: process.env.ABT_NODE_JOB_NAME || '', // used to trigger log analyzing
601
608
  ABT_NODE_BINARY_NAME,
602
609
  ABT_NODE_COMMAND_NAME,
610
+ ABT_NODE_EVENT_HTTP_PORT: pm2EventHubPort,
603
611
  BLOCKLET_SERVER_RUNNING_BEFORE: isRunning ? '1' : '',
604
612
  ABT_NODE_ENSURE_RUNNING_CHECK_INTERVAL: process.env.ABT_NODE_ENSURE_RUNNING_CHECK_INTERVAL,
605
613
  ABT_NODE_ENSURE_RUNNING_DEFERRED_TIME: process.env.ABT_NODE_ENSURE_RUNNING_DEFERRED_TIME,
@@ -628,7 +636,7 @@ const exec = async ({ workingDir, config, dataDir, mode, updateDb, forceIntranet
628
636
  // check localhost listening
629
637
  await wrapSpinner('Starting server daemon...', async () => {
630
638
  // start daemon
631
- await pm2.startAsync({
639
+ await pm2StartOrReload({
632
640
  namespace: 'daemon',
633
641
  name: PROCESS_NAME_DAEMON,
634
642
  script: './lib/process/daemon.js',
@@ -638,10 +646,15 @@ const exec = async ({ workingDir, config, dataDir, mode, updateDb, forceIntranet
638
646
  cwd: getCliCwd(),
639
647
  max_restarts: 3,
640
648
  wait_ready: true,
641
- listen_timeout: 3000,
642
- env: environments,
649
+ min_uptime: 15_000,
650
+ listen_timeout: 40_000,
651
+ kill_timeout: 10_000,
652
+ execMode: 'cluster',
653
+ shutdown_with_message: true,
654
+ instances: getDaemonInstanceCount(),
643
655
  time: true,
644
656
  pmx: false,
657
+ env: environments,
645
658
  interpreter_args:
646
659
  environments.ABT_NODE_KERNEL_MODE === ABT_NODE_KERNEL_OR_BLOCKLET_MODE.PERFORMANT
647
660
  ? []
@@ -4,7 +4,7 @@ const capitalize = require('lodash/capitalize');
4
4
  const { clearRouterByConfigKeyword, clearDockerContainer, checkDockerInstalled } = require('@abtnode/router-provider');
5
5
  const tryWithTimeout = require('@abtnode/util/lib/try-with-timeout');
6
6
  const sleep = require('@abtnode/util/lib/sleep');
7
- const pm2 = require('@abtnode/util/lib/async-pm2');
7
+ const pm2 = require('@abtnode/util/lib/pm2/async-pm2');
8
8
  const pAll = require('p-all');
9
9
 
10
10
  const {
@@ -1,5 +1,5 @@
1
1
  const path = require('path');
2
- const pm2 = require('@abtnode/util/lib/async-pm2');
2
+ const pm2 = require('@abtnode/util/lib/pm2/async-pm2');
3
3
 
4
4
  const { PROCESS_NAME_DAEMON } = require('@abtnode/constant');
5
5
 
package/lib/port.js CHANGED
@@ -3,6 +3,7 @@ const {
3
3
  PROCESS_NAME_UPDATER,
4
4
  PROCESS_NAME_SERVICE,
5
5
  PROCESS_NAME_EVENT_HUB,
6
+ PROCESS_NAME_PM2_EVENT_HUB,
6
7
  } = require('@abtnode/constant');
7
8
 
8
9
  const ports = {
@@ -10,6 +11,7 @@ const ports = {
10
11
  [PROCESS_NAME_UPDATER]: 40405,
11
12
  [PROCESS_NAME_SERVICE]: 40406,
12
13
  [PROCESS_NAME_EVENT_HUB]: 40407,
14
+ [PROCESS_NAME_PM2_EVENT_HUB]: 40411,
13
15
  };
14
16
 
15
17
  const getInternalPort = (processName) => {
@@ -1,6 +1,10 @@
1
1
  /* eslint-disable no-console */
2
2
  /* eslint-disable no-await-in-loop */
3
3
 
4
+ const { loadReloadEnv } = require('@abtnode/util/lib/pm2/pm2-start-or-reload');
5
+
6
+ loadReloadEnv();
7
+
4
8
  if (!process.env.NODE_ENV) {
5
9
  process.env.NODE_ENV = 'production';
6
10
  }
@@ -25,12 +29,13 @@ const ABTNode = require('@abtnode/core');
25
29
 
26
30
  const getNodeWallet = require('@abtnode/util/lib/get-app-wallet');
27
31
 
28
- const { getDisplayName } = require('@blocklet/meta/lib/util');
29
-
30
32
  const { SERVER_STATUS } = require('@abtnode/constant');
31
33
 
32
34
  const createServer = require('@abtnode/webapp/blocklet'); // eslint-disable-line
33
35
 
36
+ const { setupGracefulShutdown } = require('@abtnode/util/lib/pm2/setup-graceful-shutdown');
37
+ const ensureBlockletRunning = require('@abtnode/core/lib/blocklet/manager/ensure-blocklet-running');
38
+
34
39
  const wallet = getNodeWallet(process.env.ABT_NODE_SK);
35
40
  const dataDir = process.env.ABT_NODE_DATA_DIR;
36
41
 
@@ -47,18 +52,6 @@ const node = ABTNode({
47
52
  node.collectorPath = path.dirname(require.resolve('@blocklet/form-collector'));
48
53
  node.themeBuilderPath = path.dirname(require.resolve('@blocklet/theme-builder'));
49
54
 
50
- const syncComponentStatus = async () => {
51
- const apps = await node.getBlocklets({ includeRuntimeInfo: false });
52
- for (let i = 0; i < apps.length; i++) {
53
- const app = apps[i];
54
- try {
55
- await node.syncBlockletStatus(app.meta.did, { forceSync: true });
56
- } catch (err) {
57
- logger.error(`Blocklet ${getDisplayName(app)} status sync failed: ${err.message}`);
58
- }
59
- }
60
- };
61
-
62
55
  logger.info('Waiting for Blocklet Server Daemon instance created');
63
56
  node.onReady(async () => {
64
57
  logger.info('Blocklet Server Daemon instance was created');
@@ -74,8 +67,11 @@ node.onReady(async () => {
74
67
  logger.info('Service gateway was restarted');
75
68
 
76
69
  const server = createServer(node);
70
+ setupGracefulShutdown(server);
71
+
77
72
  server.listen(process.env.ABT_NODE_PORT, '0.0.0.0', async (err) => {
78
73
  if (err) throw err;
74
+ process.send?.('ready');
79
75
  console.info(`> Blocklet Server Daemon ready on ${process.env.ABT_NODE_PORT}`);
80
76
 
81
77
  // Should resume upgrading if we are in process
@@ -98,12 +94,16 @@ node.onReady(async () => {
98
94
  await node.updateNodeStatus(SERVER_STATUS.RUNNING);
99
95
  if (runningBefore) {
100
96
  logger.info('> Blocklet Server is restarted from running before');
97
+ // 如果之前是运行中, 直接跳过快速重启检查
98
+ ensureBlockletRunning.whenCycleCheck = true;
99
+ } else {
100
+ logger.info('> Blocklet Server is stopped from running before');
101
101
  }
102
-
103
- await syncComponentStatus();
104
102
  }
105
103
  } catch (e) {
106
104
  console.error('> Blocklet Server failed to restart running blocklets', e);
105
+ } finally {
106
+ ensureBlockletRunning.canRunEnsureBlockletRunning = true;
107
107
  }
108
108
 
109
109
  try {
@@ -0,0 +1,24 @@
1
+ /* eslint-disable no-console */
2
+ const { setupGracefulShutdown } = require('@abtnode/util/lib/pm2/setup-graceful-shutdown');
3
+ const server = require('@arcblock/event-hub/lib/server-abtnode.js');
4
+ const pm2 = require('@abtnode/util/lib/pm2/async-pm2');
5
+ const md5 = require('@abtnode/util/lib/md5');
6
+
7
+ setupGracefulShutdown(server);
8
+
9
+ const pm2Pwd = md5(`${process.env.ABT_NODE_SK}-fetch-pm2`);
10
+
11
+ server.register(
12
+ 'pm2/start',
13
+ async (payload) => {
14
+ const { pm2Config, pwd } = payload || {};
15
+ if (!pwd || pwd !== pm2Pwd) {
16
+ return { ok: false, error: 'unauthorized start the blocklet' };
17
+ }
18
+ await pm2.startAsync(pm2Config);
19
+ return { ok: true, data: 'ok' };
20
+ },
21
+ { authRequired: false }
22
+ );
23
+
24
+ module.exports = server;
@@ -1,6 +1,10 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
3
 
4
+ const { loadReloadEnv } = require('@abtnode/util/lib/pm2/pm2-start-or-reload');
5
+
6
+ loadReloadEnv();
7
+
4
8
  if (!process.env.NODE_ENV) {
5
9
  process.env.NODE_ENV = 'production';
6
10
  }
@@ -20,6 +24,7 @@ const ABTNode = require('@abtnode/core');
20
24
  const getNodeWallet = require('@abtnode/util/lib/get-app-wallet');
21
25
 
22
26
  const createServer = require('@abtnode/blocklet-services');
27
+ const { setupGracefulShutdown } = require('@abtnode/util/lib/pm2/setup-graceful-shutdown');
23
28
 
24
29
  const { version } = require('../../package.json');
25
30
 
@@ -60,12 +65,15 @@ const notifyServerVersionToApps = async (server) => {
60
65
 
61
66
  node.onReady(() => {
62
67
  const server = createServer(node);
68
+ setupGracefulShutdown(server);
63
69
 
64
70
  server.listen(port, '0.0.0.0', async (err) => {
65
71
  if (err) throw err;
66
72
  // eslint-disable-next-line
67
73
  console.log(`> Blocklet Service ready on ${port}`);
68
74
 
75
+ process.send?.('ready');
76
+
69
77
  try {
70
78
  if (dataDir && fs.existsSync(path.join(dataDir, 'start.lock')) === false) {
71
79
  const nodeInfo = await node.getNodeInfo();
@@ -1,4 +1,4 @@
1
- const pm2 = require('@abtnode/util/lib/async-pm2');
1
+ const pm2 = require('@abtnode/util/lib/pm2/async-pm2');
2
2
  const { PROCESS_NAME_DAEMON } = require('@abtnode/constant');
3
3
 
4
4
  const exitWhenServerStopped = () => {
package/lib/util/index.js CHANGED
@@ -9,14 +9,12 @@ const { filesize } = require('filesize');
9
9
  const fs = require('fs-extra');
10
10
  const git = require('git-rev-sync');
11
11
  const uniq = require('lodash/uniq');
12
- const portUsed = require('port-used');
13
12
  const pRetry = require('p-retry');
14
13
  const { joinURL } = require('ufo');
15
14
  const getNodeWallet = require('@abtnode/util/lib/get-app-wallet');
16
15
  const isDocker = require('@abtnode/util/lib/is-docker');
17
16
  const isGitpod = require('@abtnode/util/lib/is-gitpod');
18
- const ensureListening = require('@abtnode/util/lib/ensure-listening');
19
- const pm2 = require('@abtnode/util/lib/async-pm2');
17
+ const pm2 = require('@abtnode/util/lib/pm2/async-pm2');
20
18
  const getIP = require('@abtnode/util/lib/get-ip');
21
19
  const sleep = require('@abtnode/util/lib/sleep');
22
20
  const axios = require('@abtnode/util/lib/axios');
@@ -24,9 +22,12 @@ const cloud = require('@abtnode/util/lib/cloud');
24
22
  const { formatError } = require('@blocklet/error');
25
23
  const { updateServerDocument } = require('@abtnode/util/lib/did-document');
26
24
  const { getProvider } = require('@abtnode/router-provider');
25
+ const portUsed = require('port-used');
27
26
  const { decideHttpPort, decideHttpsPort } = require('@abtnode/router-provider/lib/util');
28
- const tryWithTimeout = require('@abtnode/util/lib/try-with-timeout');
29
27
  const codespaces = require('@abtnode/util/lib/codespaces');
28
+ const ensureEndpointHealthy = require('@abtnode/util/lib/ensure-endpoint-healthy');
29
+ const { isProcessRunningByPm2 } = require('@abtnode/util/lib/pm2/pm2-start-or-reload');
30
+
30
31
  const {
31
32
  PROCESS_NAME_EVENT_HUB,
32
33
  PROXY_MAX_MEM_LIMIT_IN_MB,
@@ -34,12 +35,13 @@ const {
34
35
  DEFAULT_HTTP_PORT,
35
36
  NODE_MODES,
36
37
  DEFAULT_HTTPS_PORT,
38
+ PROCESS_NAME_PM2_EVENT_HUB,
37
39
  } = require('@abtnode/constant');
38
40
  const gitUserName = require('git-user-name');
39
41
 
40
42
  const pkg = require('../../package.json');
41
43
  const { symbols, wrapSpinner } = require('../ui');
42
- const { getInternalPort: getPort } = require('../port');
44
+ const { getInternalPort } = require('../port');
43
45
  const debug = require('../debug')('util');
44
46
  const getCLIBinaryName = require('./get-cli-binary-name');
45
47
  const printError = require('./print-error');
@@ -115,6 +117,11 @@ const checkRoutingProvider = async (info, { configDir } = {}) => {
115
117
  return true;
116
118
  }
117
119
 
120
+ const isHasRunning = await isProcessRunningByPm2(PROCESS_NAME_EVENT_HUB);
121
+ if (isHasRunning) {
122
+ return true;
123
+ }
124
+
118
125
  const result = await Provider.check({ configDir });
119
126
  if (!result.available) {
120
127
  printError(result.error);
@@ -221,31 +228,41 @@ const getGitHash = (dir) => git.long(dir);
221
228
 
222
229
  const getCliCwd = () => path.dirname(path.dirname(__dirname));
223
230
 
224
- const startEventHub = async (logDir, maxMemoryRestart = PROXY_MAX_MEM_LIMIT_IN_MB) => {
225
- const port = getPort(PROCESS_NAME_EVENT_HUB);
231
+ const startEventHub = async (logDir, maxMemoryRestart = PROXY_MAX_MEM_LIMIT_IN_MB, ABT_NODE_SK = '') => {
232
+ const port = getInternalPort(PROCESS_NAME_EVENT_HUB);
233
+ const pm2EventHubPort = getInternalPort(PROCESS_NAME_PM2_EVENT_HUB);
226
234
  debug('start event hub', { port });
227
235
 
228
236
  const tryStartEventHub = async () => {
229
237
  try {
230
238
  await wrapSpinner('Starting event hub...', async () => {
231
239
  await pm2.startAsync({
232
- namespace: 'daemon',
240
+ // 因为 pm2 的 bug, 子进程会继承 namespace 和众多参数, 所以这里的 namespace 会给 blocklets 用
241
+ namespace: 'blocklets',
233
242
  name: PROCESS_NAME_EVENT_HUB,
234
- script: require.resolve('@arcblock/event-hub/lib/server-abtnode.js'),
243
+ script: './lib/process/event-hub.js',
235
244
  max_memory_restart: `${maxMemoryRestart}M`,
236
245
  output: path.join(logDir, 'event.output.log'),
237
246
  error: path.join(logDir, 'event.error.log'),
238
- cwd: getCliCwd(),
239
- wait_ready: true,
240
- max_restarts: 3,
247
+ wait_ready: false,
241
248
  listen_timeout: 3000,
249
+ exec_mode: 'cluster',
250
+ max_restarts: 3,
251
+ cwd: getCliCwd(),
242
252
  time: true,
243
253
  pmx: false,
244
254
  env: {
245
255
  ABT_NODE_EVENT_PORT: port,
256
+ ABT_NODE_EVENT_HTTP_PORT: pm2EventHubPort,
257
+ ABT_NODE_SK,
246
258
  },
247
259
  });
248
- await tryWithTimeout(() => ensureListening(port), 10000);
260
+ await ensureEndpointHealthy({
261
+ protocol: 'tcp',
262
+ port,
263
+ timeout: 5 * 60 * 1000, // wait up to 5 minutes
264
+ minConsecutiveTime: 2000,
265
+ });
249
266
  });
250
267
 
251
268
  process.env.ABT_NODE_EVENT_PORT = port;
@@ -257,7 +274,7 @@ const startEventHub = async (logDir, maxMemoryRestart = PROXY_MAX_MEM_LIMIT_IN_M
257
274
 
258
275
  await tryStartEventHub();
259
276
 
260
- return port;
277
+ return [port, pm2EventHubPort];
261
278
  };
262
279
 
263
280
  const killPm2Process = async (name) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blocklet/cli",
3
- "version": "1.16.49-beta-20250815-032308-7bcf0b85",
3
+ "version": "1.16.49-beta-20250819-084933-3bcbd851",
4
4
  "description": "Command line tools to manage Blocklet Server",
5
5
  "homepage": "https://github.com/ArcBlock/blocklet-server#readme",
6
6
  "bin": {
@@ -35,33 +35,33 @@
35
35
  "url": "https://github.com/ArcBlock/blocklet-server/issues"
36
36
  },
37
37
  "dependencies": {
38
- "@abtnode/blocklet-services": "1.16.49-beta-20250815-032308-7bcf0b85",
39
- "@abtnode/client": "1.16.49-beta-20250815-032308-7bcf0b85",
40
- "@abtnode/constant": "1.16.49-beta-20250815-032308-7bcf0b85",
41
- "@abtnode/core": "1.16.49-beta-20250815-032308-7bcf0b85",
42
- "@abtnode/db-cache": "1.16.49-beta-20250815-032308-7bcf0b85",
43
- "@abtnode/logger": "1.16.49-beta-20250815-032308-7bcf0b85",
44
- "@abtnode/models": "1.16.49-beta-20250815-032308-7bcf0b85",
45
- "@abtnode/router-provider": "1.16.49-beta-20250815-032308-7bcf0b85",
46
- "@abtnode/util": "1.16.49-beta-20250815-032308-7bcf0b85",
47
- "@abtnode/webapp": "1.16.49-beta-20250815-032308-7bcf0b85",
48
- "@arcblock/did": "1.21.2",
49
- "@arcblock/event-hub": "1.21.2",
38
+ "@abtnode/blocklet-services": "1.16.49-beta-20250819-084933-3bcbd851",
39
+ "@abtnode/client": "1.16.49-beta-20250819-084933-3bcbd851",
40
+ "@abtnode/constant": "1.16.49-beta-20250819-084933-3bcbd851",
41
+ "@abtnode/core": "1.16.49-beta-20250819-084933-3bcbd851",
42
+ "@abtnode/db-cache": "1.16.49-beta-20250819-084933-3bcbd851",
43
+ "@abtnode/logger": "1.16.49-beta-20250819-084933-3bcbd851",
44
+ "@abtnode/models": "1.16.49-beta-20250819-084933-3bcbd851",
45
+ "@abtnode/router-provider": "1.16.49-beta-20250819-084933-3bcbd851",
46
+ "@abtnode/util": "1.16.49-beta-20250819-084933-3bcbd851",
47
+ "@abtnode/webapp": "1.16.49-beta-20250819-084933-3bcbd851",
48
+ "@arcblock/did": "1.22.2",
49
+ "@arcblock/event-hub": "1.22.2",
50
50
  "@arcblock/ipfs-only-hash": "^0.0.2",
51
- "@arcblock/jwt": "1.21.2",
52
- "@arcblock/ws": "1.21.3",
53
- "@blocklet/constant": "1.16.49-beta-20250815-032308-7bcf0b85",
51
+ "@arcblock/jwt": "1.22.2",
52
+ "@arcblock/ws": "1.22.2",
53
+ "@blocklet/constant": "1.16.49-beta-20250819-084933-3bcbd851",
54
54
  "@blocklet/error": "^0.2.5",
55
55
  "@blocklet/form-collector": "^0.1.8",
56
- "@blocklet/images": "1.16.49-beta-20250815-032308-7bcf0b85",
57
- "@blocklet/meta": "1.16.49-beta-20250815-032308-7bcf0b85",
58
- "@blocklet/resolver": "1.16.49-beta-20250815-032308-7bcf0b85",
59
- "@blocklet/store": "1.16.49-beta-20250815-032308-7bcf0b85",
56
+ "@blocklet/images": "1.16.49-beta-20250819-084933-3bcbd851",
57
+ "@blocklet/meta": "1.16.49-beta-20250819-084933-3bcbd851",
58
+ "@blocklet/resolver": "1.16.49-beta-20250819-084933-3bcbd851",
59
+ "@blocklet/store": "1.16.49-beta-20250819-084933-3bcbd851",
60
60
  "@blocklet/theme-builder": "^0.4.6",
61
- "@ocap/client": "1.21.2",
62
- "@ocap/mcrypto": "1.21.2",
63
- "@ocap/util": "1.21.2",
64
- "@ocap/wallet": "1.21.2",
61
+ "@ocap/client": "1.22.2",
62
+ "@ocap/mcrypto": "1.22.2",
63
+ "@ocap/util": "1.22.2",
64
+ "@ocap/wallet": "1.22.2",
65
65
  "@vercel/ncc": "^0.38.3",
66
66
  "archiver": "^7.0.1",
67
67
  "async": "^3.2.4",
@@ -154,7 +154,7 @@
154
154
  "engines": {
155
155
  "node": ">=14"
156
156
  },
157
- "gitHead": "75dd236eb42d14a5093c1364e51625412aa91790",
157
+ "gitHead": "b8bbf2279e9a29bd58eac7b66e1db16e851a183c",
158
158
  "devDependencies": {
159
159
  "@types/fs-extra": "^11.0.4",
160
160
  "@types/jest": "^29.5.13"
@@ -1,12 +0,0 @@
1
- const os = require('os');
2
-
3
- module.exports = () => {
4
- // unit: GB
5
- const memorySize = Math.floor(os.totalmem() / 1024 / 1024 / 1024) || 1;
6
-
7
- const cpuLength = os.cpus().length || 1;
8
-
9
- const customConfig = +process.env.ABT_NODE_MAX_CLUSTER_SIZE || Number.MAX_SAFE_INTEGER;
10
-
11
- return Math.max(Math.min(memorySize, cpuLength, customConfig), 1);
12
- };