@abtnode/core 1.16.54-beta-20251016-050817-2fc632b8 → 1.16.54-beta-20251021-070951-25e3083c

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/lib/api/team.js CHANGED
@@ -39,7 +39,7 @@ const {
39
39
  getUserAvatarUrl: getFederatedUserAvatarUrl,
40
40
  } = require('@abtnode/auth/lib/util/federated');
41
41
  const { hasActiveOwnerPassport } = require('@abtnode/util/lib/passport');
42
- const getBlockletInfo = require('@blocklet/meta/lib/info');
42
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
43
43
  const { getUserAvatarUrl, getAppAvatarUrl, extractUserAvatar, getAvatarByUrl } = require('@abtnode/util/lib/user');
44
44
  const { getChainClient } = require('@abtnode/util/lib/get-chain-client');
45
45
  const { getWalletDid } = require('@blocklet/meta/lib/did-utils');
@@ -20,7 +20,7 @@ const isUndefined = require('lodash/isUndefined');
20
20
  const { sign } = require('@arcblock/jwt');
21
21
  const { isInServerlessMode } = require('@abtnode/util/lib/serverless');
22
22
  const sleep = require('@abtnode/util/lib/sleep');
23
- const getBlockletInfo = require('@blocklet/meta/lib/info');
23
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
24
24
  const { joinURL } = require('ufo');
25
25
  const { sendToUser } = require('@blocklet/sdk/lib/util/send-notification');
26
26
  const { getDidDomainForBlocklet } = require('@abtnode/util/lib/get-domain-for-blocklet');
@@ -122,7 +122,7 @@ const {
122
122
  shouldSyncFederated,
123
123
  getUserAvatarUrl,
124
124
  } = require('@abtnode/auth/lib/util/federated');
125
- const toBlockletDid = require('@blocklet/meta/lib/did');
125
+ const { toBlockletDid } = require('@blocklet/meta/lib/did');
126
126
  const { updateComponentDid, removeUploadFile } = require('@abtnode/util/lib/upload-component');
127
127
 
128
128
  const groupBy = require('lodash/groupBy');
@@ -3514,6 +3514,7 @@ class DiskBlockletManager extends BaseBlockletManager {
3514
3514
 
3515
3515
  const nodeInfo = await states.node.read();
3516
3516
  const successBlockletIds = new Set();
3517
+
3517
3518
  try {
3518
3519
  if (!skipRunningCheck) {
3519
3520
  await checkBlockletProcessHealthy(blocklet, {
@@ -4,7 +4,7 @@ const omit = require('lodash/omit');
4
4
  const toLower = require('lodash/toLower');
5
5
 
6
6
  const { forEachBlockletSync, getBlockletAppIdList } = require('@blocklet/meta/lib/util');
7
- const getBlockletInfo = require('@blocklet/meta/lib/info');
7
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
8
8
 
9
9
  const { BLOCKLET_CONFIGURABLE_KEY, BlockletEvents, BlockletStatus } = require('@blocklet/constant');
10
10
  const { INSTALL_ACTIONS } = require('@abtnode/constant');
@@ -3,7 +3,7 @@ const { BLOCKLET_INSTALL_TYPE, INSTALL_ACTIONS } = require('@abtnode/constant');
3
3
  const { BlockletStatus, BlockletEvents, BLOCKLET_CONFIGURABLE_KEY } = require('@blocklet/constant');
4
4
 
5
5
  const logger = require('@abtnode/logger')('@abtnode/core:install-app-general');
6
- const getApplicationWallet = require('@blocklet/meta/lib/wallet');
6
+ const { getApplicationWallet } = require('@blocklet/meta/lib/wallet');
7
7
  const { installBlockletTitleSchema, installBlockletDescriptionSchema } = require('@blocklet/meta/lib/schema');
8
8
 
9
9
  const StoreUtil = require('../../../util/store');
@@ -2,7 +2,7 @@ const path = require('path');
2
2
 
3
3
  const logger = require('@abtnode/logger')('@abtnode/core:install-component-upload');
4
4
  const uniq = require('lodash/uniq');
5
- const getComponentProcessId = require('@blocklet/meta/lib/get-component-process-id');
5
+ const { getComponentProcessId } = require('@blocklet/meta/lib/get-component-process-id');
6
6
  const { isInProgress, hasStartEngine } = require('@blocklet/meta/lib/util');
7
7
 
8
8
  const { BlockletSource, BlockletGroup, fromBlockletStatus } = require('@blocklet/constant');
@@ -4,7 +4,7 @@ const logger = require('@abtnode/logger')('@abtnode/core:install-component-url')
4
4
  const uniq = require('lodash/uniq');
5
5
  const { isFreeBlocklet, hasStartEngine } = require('@blocklet/meta/lib/util');
6
6
  const { titleSchema, updateMountPointSchema } = require('@blocklet/meta/lib/schema');
7
- const hasReservedKey = require('@blocklet/meta/lib/has-reserved-key');
7
+ const { hasReservedKey } = require('@blocklet/meta/lib/has-reserved-key');
8
8
  const formatName = require('@abtnode/util/lib/format-name');
9
9
 
10
10
  const { BlockletStatus, BlockletEvents, BlockletGroup } = require('@blocklet/constant');
@@ -32,7 +32,7 @@ const {
32
32
  CHAIN_PROP_MAP,
33
33
  } = require('@blocklet/constant');
34
34
  const { update: updateMetaFile } = require('@blocklet/meta/lib/file');
35
- const getBlockletWallet = require('@blocklet/meta/lib/wallet');
35
+ const { getApplicationWallet: getBlockletWallet } = require('@blocklet/meta/lib/wallet');
36
36
  const cloneDeep = require('@abtnode/util/lib/deep-clone');
37
37
 
38
38
  const { getBlockletDomainGroupName } = require('../../../util/router');
@@ -38963,7 +38963,7 @@ module.exports = require("zlib");
38963
38963
  /***/ ((module) => {
38964
38964
 
38965
38965
  "use strict";
38966
- 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":"node tools/jest.js","test:disk":"CI=true npm run test tests/blocklet/manager/disk.spec.js","test:blue":"CI=true npm run test tests/blocklet/manager/disk-blue-green.spec.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.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.1","@arcblock/did":"1.25.6","@arcblock/did-connect-js":"1.25.6","@arcblock/did-ext":"1.25.6","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"1.25.6","@arcblock/event-hub":"1.25.6","@arcblock/jwt":"1.25.6","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"1.25.6","@arcblock/vc":"1.25.6","@blocklet/constant":"1.16.53","@blocklet/did-space-js":"^1.1.33","@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.49","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.25.6","@ocap/util":"1.25.6","@ocap/wallet":"1.25.6","@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":{"expand-tilde":"^2.0.2","express":"^4.18.2","jest":"^29.7.0","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
38966
+ 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","coverage":"bun test --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.1","@arcblock/did":"^1.26.2","@arcblock/did-connect-js":"^1.26.2","@arcblock/did-ext":"^1.26.2","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"^1.26.2","@arcblock/event-hub":"^1.26.2","@arcblock/jwt":"^1.26.2","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.26.2","@arcblock/vc":"^1.26.2","@blocklet/constant":"1.16.53","@blocklet/did-space-js":"^1.1.34","@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.51","@fidm/x509":"^1.2.1","@ocap/mcrypto":"^1.26.2","@ocap/util":"^1.26.2","@ocap/wallet":"^1.26.2","@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","jest":"^29.7.0","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
38967
38967
 
38968
38968
  /***/ }),
38969
38969
 
@@ -3,17 +3,17 @@ const path = require('path');
3
3
  const { PROJECT } = require('@blocklet/constant');
4
4
 
5
5
  const fs = require('fs/promises');
6
- const getBlockletMeta = require('@blocklet/meta/lib/parse');
7
- const hasReservedKey = require('@blocklet/meta/lib/has-reserved-key');
6
+ const { parse: getBlockletMeta } = require('@blocklet/meta/lib/parse');
7
+ const { hasReservedKey } = require('@blocklet/meta/lib/has-reserved-key');
8
8
  const logger = require('@abtnode/logger')('@abtnode/core:publish-to-endpoint');
9
9
  const slugify = require('slugify');
10
10
  const tar = require('tar');
11
11
 
12
12
  const { default: axios } = require('axios');
13
13
  const hashFiles = require('@abtnode/util/lib/hash-files');
14
- const validateBlockletEntry = require('@blocklet/meta/lib/entry');
14
+ const { validateBlockletEntry } = require('@blocklet/meta/lib/entry');
15
15
  const { hasMountPoint } = require('@blocklet/meta/lib/engine');
16
- const urlPathFriendly = require('@blocklet/meta/lib/url-path-friendly').default;
16
+ const { urlPathFriendly } = require('@blocklet/meta/lib/url-path-friendly');
17
17
  const makeFormData = require('@abtnode/util/lib/make-from-data');
18
18
  const { fileFilter } = require('@abtnode/util/lib/check-file');
19
19
  const { formatError } = require('@blocklet/error');
@@ -196,7 +196,7 @@ const publishToEndpoint = async ({ did, projectId, endpointId, releaseId, manage
196
196
  'user-agent': 'PublishToEndpoint',
197
197
  'x-access-key-id': accessKeyId,
198
198
  'x-access-stamp': timestamp,
199
- 'x-access-signature': signWithAccessKey({
199
+ 'x-access-signature': await signWithAccessKey({
200
200
  accessKeyId,
201
201
  accessKeySecret,
202
202
  message: `${timestamp}-${accessKeyId}`,
@@ -18,7 +18,7 @@
18
18
 
19
19
  const { Hasher } = require('@ocap/mcrypto');
20
20
  const { toBuffer } = require('@ocap/util');
21
- const getBlockletInfo = require('@blocklet/meta/lib/info');
21
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
22
22
  const security = require('@abtnode/util/lib/security');
23
23
 
24
24
  class BaseBackup {
@@ -226,6 +226,7 @@ class SpacesBackup extends BaseBackup {
226
226
  this.throwErrorIfAborted();
227
227
 
228
228
  this.blocklet = await states.blocklet.getBlocklet(this.input.appDid);
229
+
229
230
  if (isEmpty(this.blocklet)) {
230
231
  throw new Error('blocklet cannot be empty');
231
232
  }
@@ -92,6 +92,11 @@ module.exports = ({
92
92
  return;
93
93
  }
94
94
  eventHub.on(name, (data) => {
95
+ if (process.env.TEST_LOG === 'true') {
96
+ // eslint-disable-next-line no-console
97
+ console.log('eventHub.on', name);
98
+ }
99
+
95
100
  if (name === BlockletEvents.removed) {
96
101
  // Cleanup cache in teamManager for every node instance
97
102
  teamManager.deleteTeam(data?.meta?.did).catch((error) => {
@@ -4,7 +4,7 @@ const cloneDeep = require('@abtnode/util/lib/deep-clone');
4
4
  const pLimit = require('p-limit');
5
5
  const dayjs = require('@abtnode/util/lib/dayjs');
6
6
  const { forEachBlocklet, isGatewayBlocklet, hasStartEngine } = require('@blocklet/meta/lib/util');
7
- const getComponentProcessId = require('@blocklet/meta/lib/get-component-process-id');
7
+ const { getComponentProcessId } = require('@blocklet/meta/lib/get-component-process-id');
8
8
  const { EVENTS } = require('@abtnode/constant');
9
9
  const { BlockletStatus } = require('@blocklet/constant');
10
10
  const defaultLogger = require('@abtnode/logger')('blocklet-runtime-monitor');
@@ -551,6 +551,16 @@ const getLogContent = async (action, args, context, result, info, node) => {
551
551
  case 'deleteAccessKey':
552
552
  return `deleted access key ${args.accessKeyId}`; // prettier-ignore
553
553
 
554
+ // remote signing
555
+ case 'remoteSign':
556
+ return `component \`${args.componentId}\` signed payload remotely (type: ${args.payloadType}):\n\`\`\`\n${args.payloadContent || '(no content)'}\n\`\`\``;
557
+ case 'remoteSignJWT':
558
+ return `component \`${args.componentId}\` signed JWT remotely${args.jwtVersion ? ` (version: ${args.jwtVersion})` : ''}:\n\`\`\`\n${args.payloadContent || '(no content)'}\n\`\`\``;
559
+ case 'remoteSignETH':
560
+ return `component \`${args.componentId}\` signed Ethereum data remotely${args.hashBeforeSign ? ' (pre-hashed)' : ''}:\n\`\`\`\n${args.dataContent || '(no content)'}\n\`\`\``;
561
+ case 'remoteDeriveWallet':
562
+ return `component \`${args.componentId}\` derived wallet from sub: \`${args.sub}\`${args.index !== undefined ? `, index: ${args.index}` : ''}`;
563
+
554
564
  // integrations
555
565
  case 'createWebHook':
556
566
  return `added integration ${result.id}: \n- type: ${args.type}\n${args.params.map(x => `- ${x.name}: ${x.value}`).join('\n')}`; // prettier-ignore
@@ -865,6 +875,10 @@ const getLogCategory = (action) => {
865
875
  case 'addBlockletResponseHeaderPolicy': // response-header-policy
866
876
  case 'updateBlockletResponseHeaderPolicy':
867
877
  case 'deleteBlockletResponseHeaderPolicy':
878
+ case 'remoteSign': // remote signing
879
+ case 'remoteSignJWT':
880
+ case 'remoteSignETH':
881
+ case 'remoteDeriveWallet':
868
882
  return 'security';
869
883
 
870
884
  // integrations
@@ -28,7 +28,7 @@ const { joinURL, withHttps } = require('ufo');
28
28
  const { isCustomDomain } = require('@abtnode/util/lib/url-evaluation');
29
29
  const dayjs = require('@abtnode/util/lib/dayjs');
30
30
  const { getDidDomainForBlocklet } = require('@abtnode/util/lib/get-domain-for-blocklet');
31
- const getBlockletInfo = require('@blocklet/meta/lib/info');
31
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
32
32
  const { getDomainsByDid } = require('../router/helper');
33
33
  const { isCLI, getDbFilePath } = require('../util');
34
34
  const { transformNotification } = require('../util/notification');
@@ -13,6 +13,7 @@ const cloneDeep = require('lodash/cloneDeep');
13
13
  const mergeWith = require('lodash/mergeWith');
14
14
  const toLower = require('lodash/toLower');
15
15
  const isEmpty = require('lodash/isEmpty');
16
+ const omit = require('lodash/omit');
16
17
  const streamToPromise = require('stream-to-promise');
17
18
  const { Throttle } = require('stream-throttle');
18
19
  const { slugify } = require('transliteration');
@@ -23,7 +24,7 @@ const isUrl = require('is-url');
23
24
  const semver = require('semver');
24
25
  const { chainInfo: chainInfoSchema } = require('@arcblock/did-connect-js/lib/schema');
25
26
 
26
- const urlPathFriendly = require('@blocklet/meta/lib/url-path-friendly').default;
27
+ const { urlPathFriendly } = require('@blocklet/meta/lib/url-path-friendly');
27
28
  const { fromSecretKey, fromPublicKey } = require('@ocap/wallet');
28
29
  const { toHex, isHex, toDid, toAddress, toBuffer } = require('@ocap/util');
29
30
  const { isValid: isValidDid, isEthereumDid } = require('@arcblock/did');
@@ -83,10 +84,10 @@ const {
83
84
  PROJECT,
84
85
  BLOCKLET_INTERFACE_TYPE_DOCKER,
85
86
  } = require('@blocklet/constant');
86
- const validateBlockletEntry = require('@blocklet/meta/lib/entry');
87
+ const { validateBlockletEntry } = require('@blocklet/meta/lib/entry');
87
88
  const { getBlockletEngine } = require('@blocklet/meta/lib/engine');
88
- const getBlockletInfo = require('@blocklet/meta/lib/info');
89
- const getBlockletWallet = require('@blocklet/meta/lib/wallet');
89
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
90
+ const { getApplicationWallet: getBlockletWallet } = require('@blocklet/meta/lib/wallet');
90
91
  const {
91
92
  forEachBlocklet,
92
93
  getDisplayName,
@@ -108,7 +109,7 @@ const {
108
109
  const { getComponentsInternalInfo } = require('@blocklet/meta/lib/blocklet');
109
110
  const { titleSchema, descriptionSchema, logoSchema } = require('@blocklet/meta/lib/schema');
110
111
  const { getBlockletMetaFromUrl } = require('@blocklet/meta/lib/util-meta');
111
- const getComponentProcessId = require('@blocklet/meta/lib/get-component-process-id');
112
+ const { getComponentProcessId } = require('@blocklet/meta/lib/get-component-process-id');
112
113
  const { isInServerlessMode } = require('@abtnode/util/lib/serverless');
113
114
  const { getDidDomainForBlocklet } = require('@abtnode/util/lib/get-domain-for-blocklet');
114
115
  const md5 = require('@abtnode/util/lib/md5');
@@ -522,6 +523,12 @@ const getRuntimeEnvironments = (blocklet, nodeEnvironments, ancestors, isGreen =
522
523
  ? getBlockletWallet(blocklet.meta.did, nodeEnvironments.ABT_NODE_SK, undefined, 1)
523
524
  : null;
524
525
 
526
+ // For Access Key authentication, components should use root app's wallet
527
+ // This ensures consistent accessKeyId across parent and child components
528
+ const accessKeyWallet = get(nodeEnvironments, 'ABT_NODE_SK')
529
+ ? getBlockletWallet(root.meta.did, nodeEnvironments.ABT_NODE_SK, undefined, 1)
530
+ : null;
531
+
525
532
  const BLOCKLET_APP_IDS = getBlockletAppIdList(root).join(',');
526
533
 
527
534
  const componentApiKey = getComponentApiKey({
@@ -530,6 +537,11 @@ const getRuntimeEnvironments = (blocklet, nodeEnvironments, ancestors, isGreen =
530
537
  component: blocklet,
531
538
  });
532
539
 
540
+ const blockletInfo = getBlockletInfo(blocklet, nodeEnvironments.ABT_NODE_SK, { returnWallet: true });
541
+
542
+ const rootBlockletInfo =
543
+ blocklet === root ? blockletInfo : getBlockletInfo(root, nodeEnvironments.ABT_NODE_SK, { returnWallet: true });
544
+
533
545
  const env = {
534
546
  ...blocklet.configObj,
535
547
  ...getSharedConfigObj((ancestors || [])[0], blocklet, true),
@@ -538,11 +550,15 @@ const getRuntimeEnvironments = (blocklet, nodeEnvironments, ancestors, isGreen =
538
550
  BLOCKLET_MOUNT_POINTS: JSON.stringify(componentsInternalInfo),
539
551
  BLOCKLET_MODE: blocklet.mode || BLOCKLET_MODES.PRODUCTION,
540
552
  BLOCKLET_APP_EK: tmp?.secretKey,
553
+ // for login token authentication
554
+ BLOCKLET_SESSION_SECRET: rootBlockletInfo.secret,
541
555
  BLOCKLET_APP_VERSION: root.meta.version,
542
556
  BLOCKLET_APP_IDS,
543
557
  BLOCKLET_COMPONENT_API_KEY: componentApiKey,
544
558
  ...nodeEnvironments,
545
559
  ...safeNodeEnvironments,
560
+ // compatible with previous version
561
+ ...(process.env.WITH_SK ? {} : { BLOCKLET_APP_ASK: accessKeyWallet?.secretKey }),
546
562
  };
547
563
 
548
564
  const aigne = get(root, 'settings.aigne', {});
@@ -757,13 +773,17 @@ const startBlockletProcess = async (
757
773
  max_restarts: b.mode === BLOCKLET_MODES.DEVELOPMENT ? 0 : 3,
758
774
  min_uptime: 60 * 1000,
759
775
  exp_backoff_restart_delay: 300,
760
- env: {
761
- ...environmentObj,
762
- ...env,
763
- NODE_ENV: 'production',
764
- BLOCKLET_START_AT: now,
765
- NODE_OPTIONS: await getSecurityNodeOptions(b, nodeInfo.enableFileSystemIsolation),
766
- },
776
+ env: omit(
777
+ {
778
+ ...environmentObj,
779
+ ...env,
780
+ NODE_ENV: 'production',
781
+ BLOCKLET_START_AT: now,
782
+ NODE_OPTIONS: await getSecurityNodeOptions(b, nodeInfo.enableFileSystemIsolation),
783
+ },
784
+ // should not inject appSk and appPsk to the blocklet environment
785
+ process.env.WITH_SK ? [] : ['BLOCKLET_APP_SK', 'BLOCKLET_APP_PSK']
786
+ ),
767
787
  script,
768
788
  args,
769
789
  interpreter,
@@ -1144,6 +1164,7 @@ const checkBlockletProcessHealthy = async (
1144
1164
  const startedAt = Date.now();
1145
1165
 
1146
1166
  await _checkProcessHealthy(b, { minConsecutiveTime, timeout, logToTerminal, isGreen });
1167
+
1147
1168
  logger.info('done check component healthy', { processId: b.env.processId, time: Date.now() - startedAt });
1148
1169
 
1149
1170
  if (setBlockletRunning) {
package/lib/util/index.js CHANGED
@@ -17,7 +17,7 @@ const StreamZip = require('node-stream-zip');
17
17
  const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
18
18
  const axios = require('@abtnode/util/lib/axios');
19
19
  const { encode: encodeBase32 } = require('@abtnode/util/lib/base32');
20
- const parseBlockletMeta = require('@blocklet/meta/lib/parse');
20
+ const { parse: parseBlockletMeta } = require('@blocklet/meta/lib/parse');
21
21
  const { BlockletStatus } = require('@blocklet/constant');
22
22
  const { replaceSlotToIp, isInProgress } = require('@blocklet/meta/lib/util');
23
23
  const {
@@ -20,7 +20,7 @@ const { createLaunchBlockletHandler, createServerlessInstallGuard } = require('@
20
20
  const { getDisplayName } = require('@blocklet/meta/lib/util');
21
21
  const { fromAppDid } = require('@arcblock/did-ext');
22
22
  const { fromRandom } = require('@ocap/wallet');
23
- const getBlockletInfo = require('@blocklet/meta/lib/info');
23
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
24
24
  const { getBlockletLogos } = require('@abtnode/util/lib/blocklet');
25
25
  const { PASSPORT_SOURCE, PASSPORT_LOG_ACTION, PASSPORT_ISSUE_ACTION } = require('@abtnode/constant');
26
26
 
@@ -1,7 +1,7 @@
1
1
  const path = require('path');
2
2
  const { BLOCKLET_SITE_GROUP_SUFFIX, DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT } = require('@abtnode/constant');
3
3
  const axios = require('@abtnode/util/lib/axios');
4
- const getBlockletInfo = require('@blocklet/meta/lib/info');
4
+ const { getBlockletInfo } = require('@blocklet/meta/lib/info');
5
5
  const { stableStringify } = require('@arcblock/vc');
6
6
  const { toBase58 } = require('@ocap/util');
7
7
  const { getDidDomainServiceURL } = require('@abtnode/util/lib/did-domain');
@@ -25,8 +25,8 @@ const getDidFromDomainGroupName = (name) => {
25
25
  return did;
26
26
  };
27
27
 
28
- const getNFTDomainHeaders = ({ wallet, payload }) => ({
29
- 'x-blocklet-sig': toBase58(wallet.sign(stableStringify(payload))),
28
+ const getNFTDomainHeaders = async ({ wallet, payload }) => ({
29
+ 'x-blocklet-sig': toBase58(await wallet.sign(stableStringify(payload))),
30
30
  });
31
31
 
32
32
  const updateNFTDomainRecord = async ({ name, value, blocklet, nodeInfo, bindCap }) => {
@@ -44,7 +44,7 @@ const updateNFTDomainRecord = async ({ name, value, blocklet, nodeInfo, bindCap
44
44
 
45
45
  let proof;
46
46
  if (bindCap) {
47
- proof = wallet.sign(stableStringify(`${bindCap.cap.sessionId}|${bindCap.cap.domain}`));
47
+ proof = await wallet.sign(stableStringify(`${bindCap.cap.sessionId}|${bindCap.cap.domain}`));
48
48
 
49
49
  payload.bindCap = bindCap;
50
50
  payload.proof = proof;
@@ -58,7 +58,7 @@ const updateNFTDomainRecord = async ({ name, value, blocklet, nodeInfo, bindCap
58
58
  method: 'POST',
59
59
  url: nftDomainServiceUrl.domain,
60
60
  data: payload,
61
- headers: getNFTDomainHeaders({ wallet, payload }),
61
+ headers: await getNFTDomainHeaders({ wallet, payload }),
62
62
  });
63
63
 
64
64
  return data;
@@ -92,7 +92,7 @@ const revokeAndDeleteNFTDomainRecord = async ({ name, blocklet, nodeInfo }) => {
92
92
  method: 'DELETE',
93
93
  url: nftDomainServiceUrl.domain,
94
94
  data: payload,
95
- headers: getNFTDomainHeaders({ wallet, payload }),
95
+ headers: await getNFTDomainHeaders({ wallet, payload }),
96
96
  });
97
97
 
98
98
  return data;
package/lib/util/store.js CHANGED
@@ -4,7 +4,7 @@ const isBase64 = require('is-base64');
4
4
  const semver = require('semver');
5
5
  const { BLOCKLET_STORE_API_PREFIX, BLOCKLET_STORE_META_PATH, BLOCKLET_STORE_DID } = require('@abtnode/constant');
6
6
  const { validateMeta, fixAndValidateService } = require('@blocklet/meta/lib/validate');
7
- const verifyMultiSig = require('@blocklet/meta/lib/verify-multi-sig');
7
+ const { verifyMultiSig } = require('@blocklet/meta/lib/verify-multi-sig');
8
8
  const isRequirementsSatisfied = require('./requirement');
9
9
 
10
10
  const { name } = require('../../package.json');
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable newline-per-chained-call */
2
2
  const Joi = require('joi');
3
3
  const { DOMAIN_FOR_DEFAULT_SITE, ROUTING_RULE_TYPES, ROUTER_CACHE_GROUPS } = require('@abtnode/constant');
4
- const urlPathFriendly = require('@blocklet/meta/lib/url-path-friendly').default;
4
+ const { urlPathFriendly } = require('@blocklet/meta/lib/url-path-friendly');
5
5
  const { getMultipleLangParams } = require('./util');
6
6
 
7
7
  const WILDCARD_DOMAIN_REGEX = /^\*.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.54-beta-20251016-050817-2fc632b8",
6
+ "version": "1.16.54-beta-20251021-070951-25e3083c",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -12,55 +12,53 @@
12
12
  "scripts": {
13
13
  "lint": "eslint tests lib --ignore-pattern 'tests/assets/*'",
14
14
  "lint:fix": "eslint --fix tests lib",
15
- "test": "node tools/jest.js",
16
- "test:disk": "CI=true npm run test tests/blocklet/manager/disk.spec.js",
17
- "test:blue": "CI=true npm run test tests/blocklet/manager/disk-blue-green.spec.js",
18
- "coverage": "npm run test -- --coverage"
15
+ "test": "bun test",
16
+ "coverage": "bun test --coverage"
19
17
  },
20
18
  "keywords": [],
21
19
  "author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
22
20
  "license": "Apache-2.0",
23
21
  "dependencies": {
24
- "@abtnode/analytics": "1.16.54-beta-20251016-050817-2fc632b8",
25
- "@abtnode/auth": "1.16.54-beta-20251016-050817-2fc632b8",
26
- "@abtnode/certificate-manager": "1.16.54-beta-20251016-050817-2fc632b8",
27
- "@abtnode/constant": "1.16.54-beta-20251016-050817-2fc632b8",
28
- "@abtnode/cron": "1.16.54-beta-20251016-050817-2fc632b8",
29
- "@abtnode/db-cache": "1.16.54-beta-20251016-050817-2fc632b8",
30
- "@abtnode/docker-utils": "1.16.54-beta-20251016-050817-2fc632b8",
31
- "@abtnode/logger": "1.16.54-beta-20251016-050817-2fc632b8",
32
- "@abtnode/models": "1.16.54-beta-20251016-050817-2fc632b8",
33
- "@abtnode/queue": "1.16.54-beta-20251016-050817-2fc632b8",
34
- "@abtnode/rbac": "1.16.54-beta-20251016-050817-2fc632b8",
35
- "@abtnode/router-provider": "1.16.54-beta-20251016-050817-2fc632b8",
36
- "@abtnode/static-server": "1.16.54-beta-20251016-050817-2fc632b8",
37
- "@abtnode/timemachine": "1.16.54-beta-20251016-050817-2fc632b8",
38
- "@abtnode/util": "1.16.54-beta-20251016-050817-2fc632b8",
22
+ "@abtnode/analytics": "1.16.54-beta-20251021-070951-25e3083c",
23
+ "@abtnode/auth": "1.16.54-beta-20251021-070951-25e3083c",
24
+ "@abtnode/certificate-manager": "1.16.54-beta-20251021-070951-25e3083c",
25
+ "@abtnode/constant": "1.16.54-beta-20251021-070951-25e3083c",
26
+ "@abtnode/cron": "1.16.54-beta-20251021-070951-25e3083c",
27
+ "@abtnode/db-cache": "1.16.54-beta-20251021-070951-25e3083c",
28
+ "@abtnode/docker-utils": "1.16.54-beta-20251021-070951-25e3083c",
29
+ "@abtnode/logger": "1.16.54-beta-20251021-070951-25e3083c",
30
+ "@abtnode/models": "1.16.54-beta-20251021-070951-25e3083c",
31
+ "@abtnode/queue": "1.16.54-beta-20251021-070951-25e3083c",
32
+ "@abtnode/rbac": "1.16.54-beta-20251021-070951-25e3083c",
33
+ "@abtnode/router-provider": "1.16.54-beta-20251021-070951-25e3083c",
34
+ "@abtnode/static-server": "1.16.54-beta-20251021-070951-25e3083c",
35
+ "@abtnode/timemachine": "1.16.54-beta-20251021-070951-25e3083c",
36
+ "@abtnode/util": "1.16.54-beta-20251021-070951-25e3083c",
39
37
  "@aigne/aigne-hub": "^0.10.1",
40
- "@arcblock/did": "1.25.6",
41
- "@arcblock/did-connect-js": "1.25.6",
42
- "@arcblock/did-ext": "1.25.6",
38
+ "@arcblock/did": "^1.26.2",
39
+ "@arcblock/did-connect-js": "^1.26.2",
40
+ "@arcblock/did-ext": "^1.26.2",
43
41
  "@arcblock/did-motif": "^1.1.14",
44
- "@arcblock/did-util": "1.25.6",
45
- "@arcblock/event-hub": "1.25.6",
46
- "@arcblock/jwt": "1.25.6",
42
+ "@arcblock/did-util": "^1.26.2",
43
+ "@arcblock/event-hub": "^1.26.2",
44
+ "@arcblock/jwt": "^1.26.2",
47
45
  "@arcblock/pm2-events": "^0.0.5",
48
- "@arcblock/validator": "1.25.6",
49
- "@arcblock/vc": "1.25.6",
50
- "@blocklet/constant": "1.16.54-beta-20251016-050817-2fc632b8",
51
- "@blocklet/did-space-js": "^1.1.33",
52
- "@blocklet/env": "1.16.54-beta-20251016-050817-2fc632b8",
46
+ "@arcblock/validator": "^1.26.2",
47
+ "@arcblock/vc": "^1.26.2",
48
+ "@blocklet/constant": "1.16.54-beta-20251021-070951-25e3083c",
49
+ "@blocklet/did-space-js": "^1.1.34",
50
+ "@blocklet/env": "1.16.54-beta-20251021-070951-25e3083c",
53
51
  "@blocklet/error": "^0.2.5",
54
- "@blocklet/meta": "1.16.54-beta-20251016-050817-2fc632b8",
55
- "@blocklet/resolver": "1.16.54-beta-20251016-050817-2fc632b8",
56
- "@blocklet/sdk": "1.16.54-beta-20251016-050817-2fc632b8",
57
- "@blocklet/server-js": "1.16.54-beta-20251016-050817-2fc632b8",
58
- "@blocklet/store": "1.16.54-beta-20251016-050817-2fc632b8",
59
- "@blocklet/theme": "^3.1.49",
52
+ "@blocklet/meta": "1.16.54-beta-20251021-070951-25e3083c",
53
+ "@blocklet/resolver": "1.16.54-beta-20251021-070951-25e3083c",
54
+ "@blocklet/sdk": "1.16.54-beta-20251021-070951-25e3083c",
55
+ "@blocklet/server-js": "1.16.54-beta-20251021-070951-25e3083c",
56
+ "@blocklet/store": "1.16.54-beta-20251021-070951-25e3083c",
57
+ "@blocklet/theme": "^3.1.51",
60
58
  "@fidm/x509": "^1.2.1",
61
- "@ocap/mcrypto": "1.25.6",
62
- "@ocap/util": "1.25.6",
63
- "@ocap/wallet": "1.25.6",
59
+ "@ocap/mcrypto": "^1.26.2",
60
+ "@ocap/util": "^1.26.2",
61
+ "@ocap/wallet": "^1.26.2",
64
62
  "@slack/webhook": "^5.0.4",
65
63
  "archiver": "^7.0.1",
66
64
  "axios": "^1.7.9",
@@ -115,10 +113,11 @@
115
113
  "xbytes": "^1.8.0"
116
114
  },
117
115
  "devDependencies": {
116
+ "axios-mock-adapter": "^2.1.0",
118
117
  "expand-tilde": "^2.0.2",
119
118
  "express": "^4.18.2",
120
119
  "jest": "^29.7.0",
121
120
  "unzipper": "^0.10.11"
122
121
  },
123
- "gitHead": "6b624f4b7eba2ecee164a57112adda1a93aff513"
122
+ "gitHead": "db517e9013dbad744e38883f56e4eba1fa1615c1"
124
123
  }