@abtnode/core 1.16.15-beta-12f50442 → 1.16.15-beta-d649cecc

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
@@ -112,6 +112,49 @@ class TeamAPI extends EventEmitter {
112
112
  this.dataDirs = dataDirs;
113
113
  }
114
114
 
115
+ // Tags
116
+ async createTag({ teamDid, tag }) {
117
+ if (!tag.title) {
118
+ throw new Error('Must specify tag.title to create');
119
+ }
120
+ if (!tag.color || !tag.color.match(/^#[0-9a-f]{6}$/i)) {
121
+ throw new Error('Must specify hex encoded tag.color to create');
122
+ }
123
+
124
+ const state = await this.getTagState(teamDid);
125
+ const doc = await state.insert(pick(tag, ['title', 'color', 'description']));
126
+ logger.info('tags created successfully', { teamDid, tag });
127
+ return doc;
128
+ }
129
+
130
+ async updateTag({ teamDid, tag }) {
131
+ if (!tag.id) {
132
+ throw new Error('Must specify tag.id to update');
133
+ }
134
+
135
+ const state = await this.getTagState(teamDid);
136
+ const result = await state.updateById(tag.id, pick(tag, ['title', 'color', 'description']));
137
+ logger.info('tags updated successfully', { teamDid, tag, result });
138
+ return state.findOne({ id: tag.id });
139
+ }
140
+
141
+ async deleteTag({ teamDid, tag }) {
142
+ if (!tag.id) {
143
+ throw new Error('Must specify tag.id to delete');
144
+ }
145
+
146
+ const state = await this.getTagState(teamDid);
147
+ const doc = await state.remove({ id: tag.id });
148
+ logger.info('tags deleted successfully', { teamDid, tag });
149
+ return doc;
150
+ }
151
+
152
+ async getTags({ teamDid, paging }) {
153
+ const state = await this.getTagState(teamDid);
154
+ const result = await state.paginate({}, { createdAt: -1 }, { pageSize: 20, ...paging });
155
+ return { tags: result.list, paging: result.paging };
156
+ }
157
+
115
158
  // User && Invitation
116
159
 
117
160
  async loginUser({ teamDid, user }) {
@@ -232,6 +275,7 @@ class TeamAPI extends EventEmitter {
232
275
  'remark',
233
276
  'avatar',
234
277
  'locale',
278
+ 'tags',
235
279
  // oauth relate fields
236
280
  'sourceProvider',
237
281
  'connectedAccounts',
@@ -306,6 +350,26 @@ class TeamAPI extends EventEmitter {
306
350
  return doc;
307
351
  }
308
352
 
353
+ updateUserExtra(args) {
354
+ if (args.extra) {
355
+ try {
356
+ args.extra = JSON.parse(args.extra);
357
+ } catch (err) {
358
+ throw new Error('extra should be a valid json string');
359
+ }
360
+ }
361
+
362
+ return this.updateUser({ teamDid: args.teamDid, user: pick(args, ['did', 'remark', 'extra']) });
363
+ }
364
+
365
+ async updateUserTags({ teamDid, did, tags }) {
366
+ const state = await this.getUserState(teamDid);
367
+ const doc = await state.updateTags(did, tags);
368
+ logger.info('user tags updated successfully', { teamDid, userDid: did, tags });
369
+ this.emit(EVENTS.USER_UPDATED, { teamDid, user: doc });
370
+ return doc;
371
+ }
372
+
309
373
  async removeUser({ teamDid, user }) {
310
374
  const { did } = user;
311
375
 
@@ -1232,6 +1296,10 @@ class TeamAPI extends EventEmitter {
1232
1296
  return this.teamManager.getUserState(did);
1233
1297
  }
1234
1298
 
1299
+ getTagState(did) {
1300
+ return this.teamManager.getTagState(did);
1301
+ }
1302
+
1235
1303
  getSessionState(did) {
1236
1304
  return this.teamManager.getSessionState(did);
1237
1305
  }
@@ -3598,10 +3598,14 @@ class FederatedBlockletManager extends DiskBlockletManager {
3598
3598
 
3599
3599
  let data;
3600
3600
  try {
3601
- const result = await request.post(url.href, {
3602
- // 初次申请时,member 不在站点群中,不需要对数据进行加密
3603
- site: memberSite,
3604
- });
3601
+ const result = await pRetry(
3602
+ () =>
3603
+ request.post(url.href, {
3604
+ // 初次申请时,member 不在站点群中,不需要对数据进行加密
3605
+ site: memberSite,
3606
+ }),
3607
+ { retries: 3 }
3608
+ );
3605
3609
  data = result.data;
3606
3610
  } catch (error) {
3607
3611
  logger.error('Failed to join federated login', { error, did, url: url.href });
@@ -3621,7 +3625,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3621
3625
 
3622
3626
  const newState = await this.getBlocklet(did);
3623
3627
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3624
- this.emit(BlockletEvents.updated, { masterAppUrl: appUrl });
3628
+ this.emit(BlockletEvents.updated, newState);
3625
3629
  return newState;
3626
3630
  }
3627
3631
 
@@ -3649,15 +3653,18 @@ class FederatedBlockletManager extends DiskBlockletManager {
3649
3653
  const url = new URL(masterSite.appUrl);
3650
3654
  url.pathname = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/federated/quit`;
3651
3655
  try {
3652
- await request.post(url.href, {
3653
- signer: permanentWallet.address,
3654
- data: signV2(permanentWallet.address, permanentWallet.secretKey, {
3655
- memberPid: blocklet.appPid,
3656
- }),
3657
- });
3656
+ await pRetry(
3657
+ () =>
3658
+ request.post(url.href, {
3659
+ signer: permanentWallet.address,
3660
+ data: signV2(permanentWallet.address, permanentWallet.secretKey, {
3661
+ memberPid: blocklet.appPid,
3662
+ }),
3663
+ }),
3664
+ { retries: 3 }
3665
+ );
3658
3666
  } catch (error) {
3659
- logger.error('Failed to quit blocklet', { error, did, url: url.href });
3660
- throw error;
3667
+ logger.error('Failed to quit blocklet, will still quit federated by itself', { error, did, url: url.href });
3661
3668
  }
3662
3669
  }
3663
3670
 
@@ -3670,6 +3677,64 @@ class FederatedBlockletManager extends DiskBlockletManager {
3670
3677
  return newState;
3671
3678
  }
3672
3679
 
3680
+ async disbandFederatedLogin({ did }) {
3681
+ const blocklet = await this.getBlocklet(did);
3682
+ const federated = defaults(cloneDeep(blocklet.settings.federated || {}), {
3683
+ config: {},
3684
+ sites: [],
3685
+ });
3686
+ const masterSite = federated.sites[0];
3687
+ // 只有 Master 可以调用这个逻辑
3688
+ if (masterSite && masterSite.isMaster !== false && masterSite.appPid === did) {
3689
+ const nodeInfo = await states.node.read();
3690
+ const blockletInfo = getBlockletInfo(blocklet, nodeInfo.sk);
3691
+ const { permanentWallet } = blockletInfo;
3692
+ logger.info('Disband federated login', {
3693
+ memberSite: {
3694
+ appId: blocklet.appDid,
3695
+ appPid: blocklet.appPid,
3696
+ appName: blockletInfo.name,
3697
+ appDescription: blockletInfo.description,
3698
+ appUrl: blockletInfo.appUrl,
3699
+ },
3700
+ masterAppUrl: masterSite.appUrl,
3701
+ });
3702
+
3703
+ const disbandQueue = federated.sites
3704
+ .filter((item) => item.appPid !== did)
3705
+ .map((item) => {
3706
+ return limitSync(async () => {
3707
+ const url = new URL(item.appUrl);
3708
+ url.pathname = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/federated/disband`;
3709
+ try {
3710
+ await pRetry(
3711
+ () =>
3712
+ request.post(url.href, {
3713
+ signer: permanentWallet.address,
3714
+ data: signV2(permanentWallet.address, permanentWallet.secretKey, {}),
3715
+ }),
3716
+ { retries: 1 }
3717
+ );
3718
+ } catch (error) {
3719
+ logger.error('Failed to disband blocklet, will still disband federated by itself', {
3720
+ error,
3721
+ did,
3722
+ url: url.href,
3723
+ });
3724
+ }
3725
+ });
3726
+ });
3727
+ await Promise.all(disbandQueue);
3728
+ await states.blockletExtras.setSettings(blocklet.appPid, {
3729
+ federated: null,
3730
+ });
3731
+ }
3732
+ const newState = await this.getBlocklet(did);
3733
+ this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3734
+ this.emit(BlockletEvents.updated, newState);
3735
+ return newState;
3736
+ }
3737
+
3673
3738
  /**
3674
3739
  * 更改 federated 配置
3675
3740
  * @param {object} param
@@ -3776,15 +3841,21 @@ class FederatedBlockletManager extends DiskBlockletManager {
3776
3841
  });
3777
3842
  try {
3778
3843
  const roleList = roles.map((item) => pick(item, ['name', 'title', 'description']));
3779
- await request.post(postUrl, {
3780
- signer: permanentWallet.address,
3781
- data: signV2(permanentWallet.address, permanentWallet.secretKey, {
3782
- masterPid: blocklet.appPid,
3783
- status,
3784
- delegation,
3785
- roles: roleList,
3786
- }),
3787
- });
3844
+ await pRetry(
3845
+ () =>
3846
+ request.post(postUrl, {
3847
+ signer: permanentWallet.address,
3848
+ data: signV2(permanentWallet.address, permanentWallet.secretKey, {
3849
+ masterPid: blocklet.appPid,
3850
+ status,
3851
+ delegation,
3852
+ roles: roleList,
3853
+ }),
3854
+ }),
3855
+ {
3856
+ retries: 3,
3857
+ }
3858
+ );
3788
3859
  } catch (error) {
3789
3860
  logger.error('Failed to post audit res to member-site', { error, did, url: postUrl });
3790
3861
  throw error;
package/lib/index.js CHANGED
@@ -263,6 +263,7 @@ function ABTNode(options) {
263
263
  configOAuth: blockletManager.configOAuth.bind(blockletManager),
264
264
  joinFederatedLogin: blockletManager.joinFederatedLogin.bind(blockletManager),
265
265
  quitFederatedLogin: blockletManager.quitFederatedLogin.bind(blockletManager),
266
+ disbandFederatedLogin: blockletManager.disbandFederatedLogin.bind(blockletManager),
266
267
  auditFederatedLogin: blockletManager.auditFederatedLogin.bind(blockletManager),
267
268
  configFederated: blockletManager.configFederated.bind(blockletManager),
268
269
  setFederated: blockletManager.setFederated.bind(blockletManager),
@@ -352,6 +353,8 @@ function ABTNode(options) {
352
353
  loginUser: teamAPI.loginUser.bind(teamAPI),
353
354
  removeUser: teamAPI.removeUser.bind(teamAPI),
354
355
  updateUser: teamAPI.updateUser.bind(teamAPI),
356
+ updateUserTags: teamAPI.updateUserTags.bind(teamAPI),
357
+ updateUserExtra: teamAPI.updateUserExtra.bind(teamAPI),
355
358
  updateUserApproval: teamAPI.updateUserApproval.bind(teamAPI),
356
359
  updateUserRole: teamAPI.updateUserRole.bind(teamAPI),
357
360
  getUserByDid: teamAPI.getUserByDid.bind(teamAPI),
@@ -359,6 +362,12 @@ function ABTNode(options) {
359
362
  isConnectedAccount: teamAPI.isConnectedAccount.bind(teamAPI),
360
363
  switchProfile: teamAPI.switchProfile.bind(teamAPI),
361
364
 
365
+ // Tagging
366
+ createTag: teamAPI.createTag.bind(teamAPI),
367
+ updateTag: teamAPI.updateTag.bind(teamAPI),
368
+ deleteTag: teamAPI.deleteTag.bind(teamAPI),
369
+ getTags: teamAPI.getTags.bind(teamAPI),
370
+
362
371
  // Access Control
363
372
  getRBAC: (did = options.nodeDid) => teamManager.getRBAC(did),
364
373
 
@@ -132,7 +132,7 @@ const getLogContent = async (action, args, context, result, info, node) => {
132
132
  }
133
133
  return `${actionName} component: **${getComponentNamesWithVersion(result, result.componentDids)}**`;
134
134
  case 'deleteComponent':
135
- return `removed ${result.deletedComponent.meta.title}@${result.deletedComponent.meta.version} ${ args.keepData !== false ? 'but kept its data and config' : 'and its data and config' }`; // prettier-ignore
135
+ return `removed ${result.deletedComponent.meta.title}@${result.deletedComponent.meta.version} ${args.keepData !== false ? 'but kept its data and config' : 'and its data and config'}`; // prettier-ignore
136
136
  case 'configBlocklet':
137
137
  return `updated following config for ${args.did?.length > 1 ? componentOrApplicationInfo(result, [args.did[1]]) : 'application'}: ${args.configs.map(x => `*${x.key}*`).join(', ')}`; // prettier-ignore
138
138
  case 'backupToSpaces':
@@ -151,6 +151,8 @@ const getLogContent = async (action, args, context, result, info, node) => {
151
151
  return `blocklet ${getBlockletInfo(result, info)} join federated login to ${args.appUrl}`;
152
152
  case 'quitFederatedLogin':
153
153
  return `blocklet ${getBlockletInfo(result, info)} quit federated login`;
154
+ case 'disbandFederatedLogin':
155
+ return `blocklet ${getBlockletInfo(result, info)} disband federated login`;
154
156
  case 'auditFederatedLogin':
155
157
  return `blocklet ${getBlockletInfo(result, info)} audit federated login member ${args.memberPid} with status: ${
156
158
  args.status
@@ -207,6 +209,8 @@ const getLogContent = async (action, args, context, result, info, node) => {
207
209
  return `enabled **${passport}** passport of user ${user}`;
208
210
  case 'updateUserApproval':
209
211
  return `${args.user.approved ? 'enabled' : 'disabled'} user ${user}`;
212
+ case 'updateUserTags':
213
+ return `set tags to ${args.tags} for user ${user}`;
210
214
  case 'deletePassportIssuance':
211
215
  return `removed passport issuance ${args.sessionId}`;
212
216
  case 'createMemberInvitation':
@@ -237,6 +241,12 @@ const getLogContent = async (action, args, context, result, info, node) => {
237
241
  return `issued **${args.role}** passport to ${user}`;
238
242
  case 'downloadLog':
239
243
  return `download log for ${args.days} day${args.days > 1 ? 's' : ''}`;
244
+ case 'createTag':
245
+ return `create tag ${args.tag.title}`;
246
+ case 'updateTag':
247
+ return `updated tag ${args.tag.id}`;
248
+ case 'deleteTag':
249
+ return `deleted tag ${args.tag.id}`;
240
250
 
241
251
  // accessKeys
242
252
  case 'createAccessKey':
@@ -334,6 +344,7 @@ const getLogCategory = (action) => {
334
344
  case 'backupToSpaces':
335
345
  case 'joinFederatedLogin':
336
346
  case 'quitFederatedLogin':
347
+ case 'disbandFederatedLogin':
337
348
  case 'auditFederatedLogin':
338
349
  case 'configFederated':
339
350
  return 'blocklet';
@@ -358,6 +369,7 @@ const getLogCategory = (action) => {
358
369
  case 'revokeUserPassport':
359
370
  case 'enableUserPassport':
360
371
  case 'updateUserApproval':
372
+ case 'updateUserTags':
361
373
  case 'createMemberInvitation':
362
374
  case 'deleteInvitation':
363
375
  case 'createRole':
@@ -368,6 +380,9 @@ const getLogCategory = (action) => {
368
380
  case 'delegateTransferNFT':
369
381
  case 'createTransferInvitation':
370
382
  case 'connectAccount':
383
+ case 'createTag':
384
+ case 'updateTag':
385
+ case 'deleteTag':
371
386
  return 'team';
372
387
 
373
388
  // accessKeys
@@ -0,0 +1,8 @@
1
+ const BaseState = require('./base');
2
+
3
+ /**
4
+ * @extends BaseState<import('@abtnode/models').TagState>
5
+ */
6
+ class Tag extends BaseState {}
7
+
8
+ module.exports = Tag;
@@ -1,6 +1,7 @@
1
1
  const pickBy = require('lodash/pickBy');
2
2
  const get = require('lodash/get');
3
3
  const pick = require('lodash/pick');
4
+ const uniq = require('lodash/uniq');
4
5
  const { isValid } = require('@arcblock/did');
5
6
  const { PASSPORT_STATUS } = require('@abtnode/constant');
6
7
  const { BaseState } = require('@abtnode/models');
@@ -178,7 +179,8 @@ class User extends ExtendBase {
178
179
  // eslint-disable-next-line require-await
179
180
  async getUsers({ query, sort, paging } = {}) {
180
181
  const where = {};
181
- const { approved, role, search } = query || {};
182
+ const { approved, role, search, tags, includeTags } = query || {};
183
+ const shouldIncludeTag = (tags && tags.length) || includeTags;
182
184
 
183
185
  if (isNullOrUndefined(approved) === false) {
184
186
  where.approved = approved;
@@ -214,18 +216,18 @@ class User extends ExtendBase {
214
216
  sorting.createdAt = -1;
215
217
  }
216
218
 
217
- return this.paginate({ where }, sorting, paging);
219
+ return this.paginate({ where, include: shouldIncludeTag ? [this.getTagInclude(tags)] : [] }, sorting, paging);
218
220
  }
219
221
 
220
222
  // eslint-disable-next-line require-await
221
223
  async getUsersByDids({ dids, query }) {
222
- const { approved } = query || {};
224
+ const { approved, includeTags } = query || {};
223
225
  const condition = { did: dids };
224
226
  if (isNullOrUndefined(approved) === false) {
225
227
  condition.approved = !!approved;
226
228
  }
227
229
 
228
- return this.find({ where: condition });
230
+ return this.find({ where: condition, include: includeTags ? [this.getTagInclude()] : [] });
229
231
  }
230
232
 
231
233
  // eslint-disable-next-line require-await
@@ -261,8 +263,8 @@ class User extends ExtendBase {
261
263
  * get user by did
262
264
  * @param {string} did user's did
263
265
  */
264
- async getUser(did, { enableConnectedAccount = false } = {}) {
265
- let user = await this.findOne({ did });
266
+ async getUser(did, { enableConnectedAccount = false, includeTags = false } = {}) {
267
+ let user = await this.findOne({ where: { did }, include: includeTags ? [this.getTagInclude()] : [] });
266
268
  let connectedAccounts = [];
267
269
  let passports = [];
268
270
 
@@ -375,6 +377,33 @@ class User extends ExtendBase {
375
377
  const count = await this.passport.count({ id: passportId, status: PASSPORT_STATUS.VALID });
376
378
  return count > 0;
377
379
  }
380
+
381
+ async updateTags(did, tags) {
382
+ const user = await this.getUserByDid(did);
383
+ if (user) {
384
+ const instance = this.build(user);
385
+ await instance.setTags(uniq(tags));
386
+ return this.getUser(did, { includeTags: true });
387
+ }
388
+
389
+ return null;
390
+ }
391
+
392
+ getTagInclude(tags = []) {
393
+ const result = {
394
+ model: this.models.Tag,
395
+ as: 'tags',
396
+ through: {
397
+ attributes: [],
398
+ },
399
+ };
400
+
401
+ if (tags.length) {
402
+ result.where = { id: { [Op.in]: tags.filter(Boolean) } };
403
+ }
404
+
405
+ return result;
406
+ }
378
407
  }
379
408
 
380
409
  module.exports = User;
@@ -31,6 +31,7 @@ const States = {
31
31
  Passport: require('../states/passport'),
32
32
  ConnectedAccount: require('../states/connect-account'),
33
33
  Session: require('../states/session'),
34
+ Tag: require('../states/tag'),
34
35
  };
35
36
 
36
37
  const getDefaultTeamState = () => ({
@@ -39,6 +40,7 @@ const getDefaultTeamState = () => ({
39
40
  passport: null,
40
41
  connectedAccount: null,
41
42
  session: null,
43
+ tag: null,
42
44
  });
43
45
 
44
46
  class TeamManager extends EventEmitter {
@@ -90,6 +92,7 @@ class TeamManager extends EventEmitter {
90
92
  this.cache[this.nodeDid] = {
91
93
  rbac: await createRBAC({ storage: new MemoryStorage(), data: RBAC_CONFIG }),
92
94
  user: await this.createState(this.nodeDid, 'User'),
95
+ tag: await this.createState(this.nodeDid, 'Tag'),
93
96
  passport: await this.createState(this.nodeDid, 'Passport'),
94
97
  connectedAccount: await this.createState(this.nodeDid, 'ConnectedAccount'),
95
98
  session: await this.createState(this.nodeDid, 'Session'),
@@ -100,6 +103,10 @@ class TeamManager extends EventEmitter {
100
103
  return this.getState(teamDid, 'user');
101
104
  }
102
105
 
106
+ getTagState(teamDid) {
107
+ return this.getState(teamDid, 'tag');
108
+ }
109
+
103
110
  getPassportState(teamDid) {
104
111
  return this.getState(teamDid, 'passport');
105
112
  }
@@ -317,6 +324,7 @@ class TeamManager extends EventEmitter {
317
324
 
318
325
  const rbac = await this.getRBAC(did);
319
326
  const user = await this.createState(did, 'User');
327
+ const tag = await this.createState(did, 'Tag');
320
328
  const passport = await this.createState(did, 'Passport');
321
329
  const connectedAccount = await this.createState(did, 'ConnectedAccount');
322
330
  const session = await this.createState(did, 'Session');
@@ -324,6 +332,7 @@ class TeamManager extends EventEmitter {
324
332
  this.cache[did] = {
325
333
  rbac,
326
334
  user,
335
+ tag,
327
336
  session,
328
337
  passport,
329
338
  connectedAccount,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.15-beta-12f50442",
6
+ "version": "1.16.15-beta-d649cecc",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,19 +19,19 @@
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.15-beta-12f50442",
23
- "@abtnode/auth": "1.16.15-beta-12f50442",
24
- "@abtnode/certificate-manager": "1.16.15-beta-12f50442",
25
- "@abtnode/constant": "1.16.15-beta-12f50442",
26
- "@abtnode/cron": "1.16.15-beta-12f50442",
27
- "@abtnode/logger": "1.16.15-beta-12f50442",
28
- "@abtnode/models": "1.16.15-beta-12f50442",
29
- "@abtnode/queue": "1.16.15-beta-12f50442",
30
- "@abtnode/rbac": "1.16.15-beta-12f50442",
31
- "@abtnode/router-provider": "1.16.15-beta-12f50442",
32
- "@abtnode/static-server": "1.16.15-beta-12f50442",
33
- "@abtnode/timemachine": "1.16.15-beta-12f50442",
34
- "@abtnode/util": "1.16.15-beta-12f50442",
22
+ "@abtnode/analytics": "1.16.15-beta-d649cecc",
23
+ "@abtnode/auth": "1.16.15-beta-d649cecc",
24
+ "@abtnode/certificate-manager": "1.16.15-beta-d649cecc",
25
+ "@abtnode/constant": "1.16.15-beta-d649cecc",
26
+ "@abtnode/cron": "1.16.15-beta-d649cecc",
27
+ "@abtnode/logger": "1.16.15-beta-d649cecc",
28
+ "@abtnode/models": "1.16.15-beta-d649cecc",
29
+ "@abtnode/queue": "1.16.15-beta-d649cecc",
30
+ "@abtnode/rbac": "1.16.15-beta-d649cecc",
31
+ "@abtnode/router-provider": "1.16.15-beta-d649cecc",
32
+ "@abtnode/static-server": "1.16.15-beta-d649cecc",
33
+ "@abtnode/timemachine": "1.16.15-beta-d649cecc",
34
+ "@abtnode/util": "1.16.15-beta-d649cecc",
35
35
  "@arcblock/did": "1.18.89",
36
36
  "@arcblock/did-auth": "1.18.89",
37
37
  "@arcblock/did-ext": "^1.18.89",
@@ -42,11 +42,11 @@
42
42
  "@arcblock/pm2-events": "^0.0.5",
43
43
  "@arcblock/validator": "^1.18.89",
44
44
  "@arcblock/vc": "1.18.89",
45
- "@blocklet/constant": "1.16.15-beta-12f50442",
46
- "@blocklet/env": "1.16.15-beta-12f50442",
47
- "@blocklet/meta": "1.16.15-beta-12f50442",
48
- "@blocklet/resolver": "1.16.15-beta-12f50442",
49
- "@blocklet/sdk": "1.16.15-beta-12f50442",
45
+ "@blocklet/constant": "1.16.15-beta-d649cecc",
46
+ "@blocklet/env": "1.16.15-beta-d649cecc",
47
+ "@blocklet/meta": "1.16.15-beta-d649cecc",
48
+ "@blocklet/resolver": "1.16.15-beta-d649cecc",
49
+ "@blocklet/sdk": "1.16.15-beta-d649cecc",
50
50
  "@did-space/client": "^0.2.165",
51
51
  "@fidm/x509": "^1.2.1",
52
52
  "@ocap/mcrypto": "1.18.89",
@@ -100,5 +100,5 @@
100
100
  "jest": "^27.5.1",
101
101
  "unzipper": "^0.10.11"
102
102
  },
103
- "gitHead": "48bda4b29eb31a70e0eb9cab0bce6e544960c7fd"
103
+ "gitHead": "56941d1056a9e5f189992ace6e93971aa4226d07"
104
104
  }