@abtnode/core 1.16.54-beta-20251030-060219-f2f1ed96 → 1.16.54-beta-20251031-043051-f3b56e3a

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.
@@ -857,6 +857,16 @@ class DiskBlockletManager extends BaseBlockletManager {
857
857
 
858
858
  const rest = await pAll(tasks, { concurrency: 6 });
859
859
 
860
+ const nextBlocklet = await this.ensureBlocklet(did, { e2eMode });
861
+
862
+ if (!['true', '1'].includes(process.env.ABT_NODE_DISABLE_BLUE_GREEN)) {
863
+ this.emit(BlockletEvents.blurOrGreenStarted, {
864
+ blocklet: nextBlocklet,
865
+ componentDids: inputComponentDids,
866
+ context,
867
+ });
868
+ }
869
+
860
870
  return rest[0];
861
871
  }
862
872
 
@@ -3274,17 +3284,25 @@ class DiskBlockletManager extends BaseBlockletManager {
3274
3284
  const blueGreenComponentIds = await blueGreenGetComponentIds(oldBlocklet || blocklet, componentDids);
3275
3285
 
3276
3286
  try {
3277
- await Promise.all(
3278
- blueGreenComponentIds.map(async (item) => {
3279
- if (item.componentDids.length === 0) {
3280
- return;
3281
- }
3282
- await states.blocklet.setBlockletStatus(did, BlockletStatus.downloading, {
3283
- componentDids: item.componentDids,
3284
- isGreen: item.changeToGreen,
3285
- });
3286
- })
3287
- );
3287
+ if (process.env.ABT_NODE_DISABLE_BLUE_GREEN === 'true' || process.env.ABT_NODE_DISABLE_BLUE_GREEN === '1') {
3288
+ await states.blocklet.setBlockletStatus(did, BlockletStatus.downloading, {
3289
+ componentDids,
3290
+ isGreen: false,
3291
+ });
3292
+ } else {
3293
+ await Promise.all(
3294
+ blueGreenComponentIds.map(async (item) => {
3295
+ if (item.componentDids.length === 0) {
3296
+ return;
3297
+ }
3298
+ await states.blocklet.setBlockletStatus(did, BlockletStatus.downloading, {
3299
+ componentDids: item.componentDids,
3300
+ isGreen: item.changeToGreen,
3301
+ });
3302
+ })
3303
+ );
3304
+ }
3305
+
3288
3306
  const state = await states.blocklet.getBlocklet(did);
3289
3307
  this.emit(BlockletEvents.statusChange, state);
3290
3308
  const { isCancelled } = await this._downloadBlocklet(
@@ -3429,19 +3447,31 @@ class DiskBlockletManager extends BaseBlockletManager {
3429
3447
 
3430
3448
  try {
3431
3449
  if (postAction === INSTALL_ACTIONS.UPGRADE_COMPONENT) {
3432
- await blueGreenUpgradeBlocklet(
3433
- {
3450
+ if (process.env.ABT_NODE_DISABLE_BLUE_GREEN === 'true' || process.env.ABT_NODE_DISABLE_BLUE_GREEN === '1') {
3451
+ await this._upgradeBlocklet({
3434
3452
  newBlocklet: blocklet,
3435
3453
  oldBlocklet,
3436
3454
  componentDids,
3455
+ context,
3437
3456
  action: postAction,
3438
3457
  shouldCleanUploadFile,
3439
3458
  url,
3440
- },
3441
- context,
3442
- this,
3443
- states
3444
- );
3459
+ });
3460
+ } else {
3461
+ await blueGreenUpgradeBlocklet(
3462
+ {
3463
+ newBlocklet: blocklet,
3464
+ oldBlocklet,
3465
+ componentDids,
3466
+ action: postAction,
3467
+ shouldCleanUploadFile,
3468
+ url,
3469
+ },
3470
+ context,
3471
+ this,
3472
+ states
3473
+ );
3474
+ }
3445
3475
  } else {
3446
3476
  await this._upgradeBlocklet({
3447
3477
  newBlocklet: blocklet,
@@ -3510,6 +3540,11 @@ class DiskBlockletManager extends BaseBlockletManager {
3510
3540
  }
3511
3541
 
3512
3542
  async _onRestart({ did, componentDids, context, operator }) {
3543
+ if (process.env.ABT_NODE_DISABLE_BLUE_GREEN) {
3544
+ await this.stop({ did, componentDids, context, operator });
3545
+ await this.start({ did, componentDids, checkHealthImmediately: true });
3546
+ return;
3547
+ }
3513
3548
  await blueGreenStartBlocklet({ did, componentDids, operator }, context, this, states);
3514
3549
  }
3515
3550
 
@@ -5071,7 +5106,7 @@ class DiskBlockletManager extends BaseBlockletManager {
5071
5106
  blocklet,
5072
5107
  meta: b.meta,
5073
5108
  script,
5074
- hooksName: name,
5109
+ hookName: name,
5075
5110
  nodeInfo,
5076
5111
  env,
5077
5112
  ...hookArgs,
@@ -293,6 +293,9 @@ const blueGreenStartBlocklet = async (
293
293
  }
294
294
  throw error;
295
295
  }
296
+
297
+ const nextBlocklet = await manager.ensureBlocklet(did, { e2eMode });
298
+ manager.emit(BlockletEvents.blurOrGreenStarted, { blocklet: nextBlocklet, componentDids, context });
296
299
  }
297
300
 
298
301
  const nextBlocklet = await manager.getBlocklet(did);
@@ -38983,7 +38983,7 @@ module.exports = require("zlib");
38983
38983
  /***/ ((module) => {
38984
38984
 
38985
38985
  "use strict";
38986
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.53","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"bun test --bail --timeout 30000","coverage":"bun test --bail --timeout 30000 --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.53","@abtnode/auth":"1.16.53","@abtnode/certificate-manager":"1.16.53","@abtnode/constant":"1.16.53","@abtnode/cron":"1.16.53","@abtnode/db-cache":"1.16.53","@abtnode/docker-utils":"1.16.53","@abtnode/logger":"1.16.53","@abtnode/models":"1.16.53","@abtnode/queue":"1.16.53","@abtnode/rbac":"1.16.53","@abtnode/router-provider":"1.16.53","@abtnode/static-server":"1.16.53","@abtnode/timemachine":"1.16.53","@abtnode/util":"1.16.53","@aigne/aigne-hub":"^0.10.3","@arcblock/did":"^1.27.0","@arcblock/did-connect-js":"^1.27.0","@arcblock/did-ext":"^1.27.0","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"^1.27.0","@arcblock/event-hub":"^1.27.0","@arcblock/jwt":"^1.27.0","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.27.0","@arcblock/vc":"^1.27.0","@blocklet/constant":"1.16.53","@blocklet/did-space-js":"^1.2.0","@blocklet/env":"1.16.53","@blocklet/error":"^0.2.5","@blocklet/meta":"1.16.53","@blocklet/resolver":"1.16.53","@blocklet/sdk":"1.16.53","@blocklet/server-js":"1.16.53","@blocklet/store":"1.16.53","@blocklet/theme":"^3.1.54","@fidm/x509":"^1.2.1","@ocap/mcrypto":"^1.27.0","@ocap/util":"^1.27.0","@ocap/wallet":"^1.27.0","@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","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","p-wait-for":"^3.2.0","private-ip":"^2.3.4","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","slugify":"^1.6.6","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":"^11.1.0","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"axios-mock-adapter":"^2.1.0","expand-tilde":"^2.0.2","express":"^4.18.2","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
38986
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.53","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.53","@abtnode/auth":"1.16.53","@abtnode/certificate-manager":"1.16.53","@abtnode/constant":"1.16.53","@abtnode/cron":"1.16.53","@abtnode/db-cache":"1.16.53","@abtnode/docker-utils":"1.16.53","@abtnode/logger":"1.16.53","@abtnode/models":"1.16.53","@abtnode/queue":"1.16.53","@abtnode/rbac":"1.16.53","@abtnode/router-provider":"1.16.53","@abtnode/static-server":"1.16.53","@abtnode/timemachine":"1.16.53","@abtnode/util":"1.16.53","@aigne/aigne-hub":"^0.10.3","@arcblock/did":"^1.27.0","@arcblock/did-connect-js":"^1.27.0","@arcblock/did-ext":"^1.27.0","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"^1.27.0","@arcblock/event-hub":"^1.27.0","@arcblock/jwt":"^1.27.0","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.27.0","@arcblock/vc":"^1.27.0","@blocklet/constant":"1.16.53","@blocklet/did-space-js":"^1.2.0","@blocklet/env":"1.16.53","@blocklet/error":"^0.2.5","@blocklet/meta":"1.16.53","@blocklet/resolver":"1.16.53","@blocklet/sdk":"1.16.53","@blocklet/server-js":"1.16.53","@blocklet/store":"1.16.53","@blocklet/theme":"^3.1.54","@fidm/x509":"^1.2.1","@ocap/mcrypto":"^1.27.0","@ocap/util":"^1.27.0","@ocap/wallet":"^1.27.0","@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","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","p-wait-for":"^3.2.0","private-ip":"^2.3.4","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","slugify":"^1.6.6","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":"^11.1.0","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"axios-mock-adapter":"^2.1.0","expand-tilde":"^2.0.2","express":"^4.18.2","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
38987
38987
 
38988
38988
  /***/ }),
38989
38989
 
@@ -43,6 +43,7 @@ const {
43
43
  rollbackBlockletSites,
44
44
  routingSnapshotPrefix,
45
45
  } = require('./util');
46
+ const { ensureBlockletHasMultipleInterfaces } = require('../router/helper');
46
47
 
47
48
  /**
48
49
  *
@@ -175,6 +176,40 @@ module.exports = ({
175
176
  }
176
177
  };
177
178
 
179
+ const handleBlockletBlurOrGreenStarted = async (name, { blocklet, componentDids, context }) => {
180
+ try {
181
+ // 只有某些 children 有多个接口时, 才需要更新路由
182
+ const hasMultipleInterfaces = ensureBlockletHasMultipleInterfaces(blocklet, componentDids);
183
+ if (!hasMultipleInterfaces) {
184
+ return false;
185
+ }
186
+ const changed = await ensureBlockletRouting(blocklet, context);
187
+ if (changed) {
188
+ const hash = await takeRoutingSnapshot(
189
+ {
190
+ message: `${routingSnapshotPrefix(blocklet)}Blur or green start blocklet ${blocklet.meta.name}`,
191
+ dryRun: false,
192
+ },
193
+ context
194
+ );
195
+ logger.info('created.url.mapping', { event: name, did: blocklet.meta.did, hash });
196
+ return true;
197
+ }
198
+ return false;
199
+ } catch (error) {
200
+ logger.error('create.url.mapping.error', { event: name, error });
201
+ teamManager.createNotification({
202
+ title: 'Blocklet URL Mapping Error',
203
+ // eslint-disable-next-line max-len
204
+ description: `Failed to create URL mapping for blocklet ${blocklet.meta.title}, due to: ${error.message}`,
205
+ entityType: 'blocklet',
206
+ entityId: blocklet.meta.did,
207
+ severity: 'error',
208
+ });
209
+ return false;
210
+ }
211
+ };
212
+
178
213
  const handleBlockletInstall = async (name, { blocklet, context }) => {
179
214
  try {
180
215
  const changed = await ensureBlockletRouting(blocklet, context);
@@ -307,7 +342,9 @@ module.exports = ({
307
342
  return;
308
343
  }
309
344
 
310
- if ([BlockletEvents.installed].includes(eventName)) {
345
+ if ([BlockletEvents.blurOrGreenStarted].includes(eventName)) {
346
+ await handleBlockletBlurOrGreenStarted(eventName, payload);
347
+ } else if ([BlockletEvents.installed].includes(eventName)) {
311
348
  await handleBlockletInstall(eventName, payload);
312
349
 
313
350
  try {
@@ -554,6 +591,7 @@ module.exports = ({
554
591
  BlockletEvents.nftConsumed,
555
592
 
556
593
  BlockletEvents.configTheme,
594
+ BlockletEvents.blurOrGreenStarted,
557
595
  ].forEach((eventName) => {
558
596
  listen(blockletManager, eventName, handleBlockletEvent);
559
597
  });
@@ -2083,6 +2083,16 @@ module.exports = function getRouterHelpers({
2083
2083
  };
2084
2084
  };
2085
2085
 
2086
+ const ensureBlockletHasMultipleInterfaces = (blocklet, componentDids) => {
2087
+ for (const child of blocklet.children) {
2088
+ const interfaces = (child.meta.interfaces || []).filter((x) => !!x.port);
2089
+ if (componentDids.includes(child.meta.did) && interfaces.length > 1) {
2090
+ return true;
2091
+ }
2092
+ }
2093
+ return false;
2094
+ };
2095
+
2086
2096
  module.exports.attachRuntimeDomainAliases = attachRuntimeDomainAliases;
2087
2097
  module.exports.ensureLatestNodeInfo = ensureLatestNodeInfo;
2088
2098
  module.exports.ensureLatestInterfaceInfo = ensureLatestInterfaceInfo;
@@ -2092,3 +2102,4 @@ module.exports.ensureBlockletWellknownRules = ensureBlockletWellknownRules;
2092
2102
  module.exports.ensureBlockletProxyBehavior = ensureBlockletProxyBehavior;
2093
2103
  module.exports.expandComponentRules = expandComponentRules;
2094
2104
  module.exports.getDomainsByDid = getDomainsByDid;
2105
+ module.exports.ensureBlockletHasMultipleInterfaces = ensureBlockletHasMultipleInterfaces;
@@ -369,9 +369,6 @@ const getAppSystemEnvironments = (blocklet, nodeInfo, dataDirs) => {
369
369
  const appSk = toHex(wallet.secretKey);
370
370
  const appPk = toHex(wallet.publicKey);
371
371
 
372
- const ethWallet = fromSecretKey(appSk.slice(0, 66), 'ethereum');
373
- const ethPk = toHex(ethWallet.publicKey);
374
-
375
372
  const appId = wallet.address;
376
373
  const appName = title || name || result.name;
377
374
  const appDescription = description || result.description;
@@ -380,11 +377,6 @@ const getAppSystemEnvironments = (blocklet, nodeInfo, dataDirs) => {
380
377
  const appPid = blocklet.appPid || appId;
381
378
  const appPsk = toHex(isMigrated ? blocklet.migratedFrom[0].appSk : appSk);
382
379
 
383
- // Calculate permanent public key (PPK)
384
- const appPpk = isMigrated ? toHex(fromSecretKey(appPsk, wallet.type).publicKey) : appPk;
385
- const ethPermanentWallet = fromSecretKey(appPsk.slice(0, 66), 'ethereum');
386
- const appPpkEth = toHex(ethPermanentWallet.publicKey);
387
-
388
380
  /* 获取 did domain 方式:
389
381
  * 1. 先从 site 里读
390
382
  * 2. 如果没有,再拼接
@@ -406,12 +398,9 @@ const getAppSystemEnvironments = (blocklet, nodeInfo, dataDirs) => {
406
398
  return {
407
399
  BLOCKLET_DID: did, // BLOCKLET_DID is always same as BLOCKLET_APP_PID in structV2 application
408
400
  BLOCKLET_APP_PK: appPk,
409
- BLOCKLET_APP_PK_ETH: ethPk,
410
401
  BLOCKLET_APP_SK: appSk,
411
402
  BLOCKLET_APP_ID: appId,
412
403
  BLOCKLET_APP_PSK: appPsk, // permanent sk even the blocklet has been migrated
413
- BLOCKLET_APP_PPK: appPpk, // permanent pk corresponding to PSK
414
- BLOCKLET_APP_PPK_ETH: appPpkEth, // permanent pk corresponding to PSK for ethereum
415
404
  BLOCKLET_APP_PID: appPid, // permanent did even the blocklet has been migrated
416
405
  BLOCKLET_APP_NAME: appName,
417
406
  BLOCKLET_APP_NAME_SLUG: urlPathFriendly(slugify(appName)),
@@ -554,6 +543,21 @@ const getRuntimeEnvironments = (blocklet, nodeEnvironments, ancestors, isGreen =
554
543
  const rootBlockletInfo =
555
544
  blocklet === root ? blockletInfo : getBlockletInfo(root, nodeEnvironments.ABT_NODE_SK, { returnWallet: true });
556
545
 
546
+ const { wallet } = rootBlockletInfo;
547
+ const appSk = toHex(wallet.secretKey);
548
+ const appPk = toHex(wallet.publicKey);
549
+
550
+ const ethWallet = fromSecretKey(appSk.slice(0, 66), 'ethereum');
551
+ const ethPk = toHex(ethWallet.publicKey);
552
+
553
+ const isMigrated = Array.isArray(root.migratedFrom) && root.migratedFrom.length > 0;
554
+ const appPsk = toHex(isMigrated ? root.migratedFrom[0].appSk : appSk);
555
+
556
+ // Calculate permanent public key (PPK)
557
+ const appPpk = isMigrated ? toHex(fromSecretKey(appPsk, wallet.type).publicKey) : appPk;
558
+ const ethPermanentWallet = fromSecretKey(appPsk.slice(0, 66), 'ethereum');
559
+ const appPpkEth = toHex(ethPermanentWallet.publicKey);
560
+
557
561
  const env = {
558
562
  ...blocklet.configObj,
559
563
  ...getSharedConfigObj((ancestors || [])[0], blocklet, true),
@@ -570,6 +574,10 @@ const getRuntimeEnvironments = (blocklet, nodeEnvironments, ancestors, isGreen =
570
574
  BLOCKLET_APP_ASK: accessWallet?.secretKey,
571
575
  ...nodeEnvironments,
572
576
  ...safeNodeEnvironments,
577
+ BLOCKLET_APP_PPK: appPpk, // permanent pk corresponding to PSK
578
+ BLOCKLET_APP_PPK_ETH: appPpkEth, // permanent pk corresponding to PSK for ethereum
579
+ BLOCKLET_APP_PK: appPk,
580
+ BLOCKLET_APP_PK_ETH: ethPk,
573
581
  };
574
582
 
575
583
  const aigne = get(root, 'settings.aigne', {});
package/lib/util/index.js CHANGED
@@ -286,17 +286,19 @@ const findInterfaceByName = (blocklet, name) => {
286
286
 
287
287
  const findInterfacePortByName = (blocklet, name) => {
288
288
  const found = findInterfaceByName(blocklet, name);
289
- const { ports } = blocklet;
289
+ const { ports, greenPorts, greenStatus } = blocklet;
290
290
 
291
- if (!found || !ports) {
291
+ const realPorts = greenPorts && greenStatus === BlockletStatus.running ? greenPorts : ports;
292
+
293
+ if (!found || !realPorts) {
292
294
  return null;
293
295
  }
294
296
 
295
297
  if (typeof found.port === 'string') {
296
- return ports[found.port];
298
+ return realPorts[found.port];
297
299
  }
298
300
 
299
- return ports[found.port.internal];
301
+ return realPorts[found.port.internal];
300
302
  };
301
303
 
302
304
  const getWellknownSitePort = async () => {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.54-beta-20251030-060219-f2f1ed96",
6
+ "version": "1.16.54-beta-20251031-043051-f3b56e3a",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -11,29 +11,27 @@
11
11
  ],
12
12
  "scripts": {
13
13
  "lint": "eslint tests lib --ignore-pattern 'tests/assets/*'",
14
- "lint:fix": "eslint --fix tests lib",
15
- "test": "bun test --bail --timeout 30000",
16
- "coverage": "bun test --bail --timeout 30000 --coverage"
14
+ "lint:fix": "eslint --fix tests lib"
17
15
  },
18
16
  "keywords": [],
19
17
  "author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
20
18
  "license": "Apache-2.0",
21
19
  "dependencies": {
22
- "@abtnode/analytics": "1.16.54-beta-20251030-060219-f2f1ed96",
23
- "@abtnode/auth": "1.16.54-beta-20251030-060219-f2f1ed96",
24
- "@abtnode/certificate-manager": "1.16.54-beta-20251030-060219-f2f1ed96",
25
- "@abtnode/constant": "1.16.54-beta-20251030-060219-f2f1ed96",
26
- "@abtnode/cron": "1.16.54-beta-20251030-060219-f2f1ed96",
27
- "@abtnode/db-cache": "1.16.54-beta-20251030-060219-f2f1ed96",
28
- "@abtnode/docker-utils": "1.16.54-beta-20251030-060219-f2f1ed96",
29
- "@abtnode/logger": "1.16.54-beta-20251030-060219-f2f1ed96",
30
- "@abtnode/models": "1.16.54-beta-20251030-060219-f2f1ed96",
31
- "@abtnode/queue": "1.16.54-beta-20251030-060219-f2f1ed96",
32
- "@abtnode/rbac": "1.16.54-beta-20251030-060219-f2f1ed96",
33
- "@abtnode/router-provider": "1.16.54-beta-20251030-060219-f2f1ed96",
34
- "@abtnode/static-server": "1.16.54-beta-20251030-060219-f2f1ed96",
35
- "@abtnode/timemachine": "1.16.54-beta-20251030-060219-f2f1ed96",
36
- "@abtnode/util": "1.16.54-beta-20251030-060219-f2f1ed96",
20
+ "@abtnode/analytics": "1.16.54-beta-20251031-043051-f3b56e3a",
21
+ "@abtnode/auth": "1.16.54-beta-20251031-043051-f3b56e3a",
22
+ "@abtnode/certificate-manager": "1.16.54-beta-20251031-043051-f3b56e3a",
23
+ "@abtnode/constant": "1.16.54-beta-20251031-043051-f3b56e3a",
24
+ "@abtnode/cron": "1.16.54-beta-20251031-043051-f3b56e3a",
25
+ "@abtnode/db-cache": "1.16.54-beta-20251031-043051-f3b56e3a",
26
+ "@abtnode/docker-utils": "1.16.54-beta-20251031-043051-f3b56e3a",
27
+ "@abtnode/logger": "1.16.54-beta-20251031-043051-f3b56e3a",
28
+ "@abtnode/models": "1.16.54-beta-20251031-043051-f3b56e3a",
29
+ "@abtnode/queue": "1.16.54-beta-20251031-043051-f3b56e3a",
30
+ "@abtnode/rbac": "1.16.54-beta-20251031-043051-f3b56e3a",
31
+ "@abtnode/router-provider": "1.16.54-beta-20251031-043051-f3b56e3a",
32
+ "@abtnode/static-server": "1.16.54-beta-20251031-043051-f3b56e3a",
33
+ "@abtnode/timemachine": "1.16.54-beta-20251031-043051-f3b56e3a",
34
+ "@abtnode/util": "1.16.54-beta-20251031-043051-f3b56e3a",
37
35
  "@aigne/aigne-hub": "^0.10.3",
38
36
  "@arcblock/did": "^1.27.0",
39
37
  "@arcblock/did-connect-js": "^1.27.0",
@@ -45,15 +43,15 @@
45
43
  "@arcblock/pm2-events": "^0.0.5",
46
44
  "@arcblock/validator": "^1.27.0",
47
45
  "@arcblock/vc": "^1.27.0",
48
- "@blocklet/constant": "1.16.54-beta-20251030-060219-f2f1ed96",
46
+ "@blocklet/constant": "1.16.54-beta-20251031-043051-f3b56e3a",
49
47
  "@blocklet/did-space-js": "^1.2.0",
50
- "@blocklet/env": "1.16.54-beta-20251030-060219-f2f1ed96",
48
+ "@blocklet/env": "1.16.54-beta-20251031-043051-f3b56e3a",
51
49
  "@blocklet/error": "^0.2.5",
52
- "@blocklet/meta": "1.16.54-beta-20251030-060219-f2f1ed96",
53
- "@blocklet/resolver": "1.16.54-beta-20251030-060219-f2f1ed96",
54
- "@blocklet/sdk": "1.16.54-beta-20251030-060219-f2f1ed96",
55
- "@blocklet/server-js": "1.16.54-beta-20251030-060219-f2f1ed96",
56
- "@blocklet/store": "1.16.54-beta-20251030-060219-f2f1ed96",
50
+ "@blocklet/meta": "1.16.54-beta-20251031-043051-f3b56e3a",
51
+ "@blocklet/resolver": "1.16.54-beta-20251031-043051-f3b56e3a",
52
+ "@blocklet/sdk": "1.16.54-beta-20251031-043051-f3b56e3a",
53
+ "@blocklet/server-js": "1.16.54-beta-20251031-043051-f3b56e3a",
54
+ "@blocklet/store": "1.16.54-beta-20251031-043051-f3b56e3a",
57
55
  "@blocklet/theme": "^3.1.54",
58
56
  "@fidm/x509": "^1.2.1",
59
57
  "@ocap/mcrypto": "^1.27.0",
@@ -118,5 +116,5 @@
118
116
  "express": "^4.18.2",
119
117
  "unzipper": "^0.10.11"
120
118
  },
121
- "gitHead": "a4182e02a693b097c76b6a9907a8a1d4816ee914"
119
+ "gitHead": "3c8d3d08531c55eef3de4d9657b2452850d5bcc7"
122
120
  }