@abtnode/core 1.16.15-beta-f60064f3 → 1.16.15-beta-103b95c0

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
  }
@@ -2963,6 +2963,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2963
2963
 
2964
2964
  const dataDir = path.join(this.dataDirs.data, name);
2965
2965
  const logsDir = path.join(this.dataDirs.logs, name);
2966
+ const cacheDir = path.join(this.dataDirs.cache, name);
2966
2967
 
2967
2968
  logger.info(`clean blocklet ${blocklet.meta.did} data`, { keepData, keepLogsDir, keepConfigs });
2968
2969
 
@@ -2973,6 +2974,9 @@ class DiskBlockletManager extends BaseBlockletManager {
2973
2974
  fs.removeSync(logsDir);
2974
2975
  logger.info(`removed blocklet ${blocklet.meta.did} logs dir: ${logsDir}`);
2975
2976
 
2977
+ fs.removeSync(cacheDir);
2978
+ logger.info(`removed blocklet ${blocklet.meta.did} cache dir: ${cacheDir}`);
2979
+
2976
2980
  await states.blockletExtras.remove({ did: blocklet.meta.did });
2977
2981
  logger.info(`removed blocklet ${blocklet.meta.did} extra data`);
2978
2982
  } else {
@@ -3594,10 +3598,14 @@ class FederatedBlockletManager extends DiskBlockletManager {
3594
3598
 
3595
3599
  let data;
3596
3600
  try {
3597
- const result = await request.post(url.href, {
3598
- // 初次申请时,member 不在站点群中,不需要对数据进行加密
3599
- site: memberSite,
3600
- });
3601
+ const result = await pRetry(
3602
+ () =>
3603
+ request.post(url.href, {
3604
+ // 初次申请时,member 不在站点群中,不需要对数据进行加密
3605
+ site: memberSite,
3606
+ }),
3607
+ { retries: 3 }
3608
+ );
3601
3609
  data = result.data;
3602
3610
  } catch (error) {
3603
3611
  logger.error('Failed to join federated login', { error, did, url: url.href });
@@ -3617,7 +3625,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3617
3625
 
3618
3626
  const newState = await this.getBlocklet(did);
3619
3627
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3620
- this.emit(BlockletEvents.updated, { masterAppUrl: appUrl });
3628
+ this.emit(BlockletEvents.updated, newState);
3621
3629
  return newState;
3622
3630
  }
3623
3631
 
@@ -3645,15 +3653,18 @@ class FederatedBlockletManager extends DiskBlockletManager {
3645
3653
  const url = new URL(masterSite.appUrl);
3646
3654
  url.pathname = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/federated/quit`;
3647
3655
  try {
3648
- await request.post(url.href, {
3649
- signer: permanentWallet.address,
3650
- data: signV2(permanentWallet.address, permanentWallet.secretKey, {
3651
- memberPid: blocklet.appPid,
3652
- }),
3653
- });
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
+ );
3654
3666
  } catch (error) {
3655
- logger.error('Failed to quit blocklet', { error, did, url: url.href });
3656
- throw error;
3667
+ logger.error('Failed to quit blocklet, will still quit federated by itself', { error, did, url: url.href });
3657
3668
  }
3658
3669
  }
3659
3670
 
@@ -3666,6 +3677,64 @@ class FederatedBlockletManager extends DiskBlockletManager {
3666
3677
  return newState;
3667
3678
  }
3668
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
+
3669
3738
  /**
3670
3739
  * 更改 federated 配置
3671
3740
  * @param {object} param
@@ -3772,15 +3841,21 @@ class FederatedBlockletManager extends DiskBlockletManager {
3772
3841
  });
3773
3842
  try {
3774
3843
  const roleList = roles.map((item) => pick(item, ['name', 'title', 'description']));
3775
- await request.post(postUrl, {
3776
- signer: permanentWallet.address,
3777
- data: signV2(permanentWallet.address, permanentWallet.secretKey, {
3778
- masterPid: blocklet.appPid,
3779
- status,
3780
- delegation,
3781
- roles: roleList,
3782
- }),
3783
- });
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
+ );
3784
3859
  } catch (error) {
3785
3860
  logger.error('Failed to post audit res to member-site', { error, did, url: postUrl });
3786
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
 
@@ -1154,6 +1154,14 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
1154
1154
  return true;
1155
1155
  };
1156
1156
 
1157
+ const clearBlockletRoutingCache = async (blocklet) => {
1158
+ const info = await nodeState.read();
1159
+ const provider = providers[info.routing.provider];
1160
+ if (provider) {
1161
+ await provider.clearCache(blocklet.appPid);
1162
+ }
1163
+ };
1164
+
1157
1165
  /**
1158
1166
  * Remove routing for blocklet
1159
1167
  *
@@ -1166,6 +1174,7 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
1166
1174
  siteChanged = await _removeBlockletSites(blocklet, context);
1167
1175
  }
1168
1176
 
1177
+ await clearBlockletRoutingCache(blocklet);
1169
1178
  return ruleChanged || siteChanged;
1170
1179
  };
1171
1180
 
@@ -174,12 +174,12 @@ class Router {
174
174
  return this.provider.getLogDir();
175
175
  }
176
176
 
177
- searchCache(pattern) {
178
- return this.provider.searchCache(pattern);
177
+ searchCache(pattern, group) {
178
+ return this.provider.searchCache(pattern, group);
179
179
  }
180
180
 
181
- clearCache() {
182
- return this.provider.clearCache();
181
+ clearCache(group) {
182
+ return this.provider.clearCache(group);
183
183
  }
184
184
  }
185
185
 
@@ -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/lib/util/cache.js CHANGED
@@ -1,6 +1,5 @@
1
1
  const fs = require('fs-extra');
2
2
  const path = require('path');
3
- const { forEachComponentV2 } = require('@blocklet/meta/lib/util');
4
3
  const { getAppImageCacheDir, getAppOgCacheDir } = require('@abtnode/util/lib/blocklet');
5
4
 
6
5
  const clearCacheDir = (dir) => {
@@ -25,7 +24,7 @@ const clearCache = async (params, node, blockletManager) => {
25
24
  const info = await node.getNodeInfo({ useCache: true });
26
25
  const provider = node.getRouterProvider(info.routing.provider);
27
26
  if (params.pattern) {
28
- const files = await provider.searchCache(params.pattern);
27
+ const files = await provider.searchCache(params.pattern, params.teamDid);
29
28
  files.forEach((x) => fs.rmSync(x, { force: true }));
30
29
  return files.map((x) => x.replace(baseDir, ''));
31
30
  }
@@ -52,17 +51,10 @@ const clearCache = async (params, node, blockletManager) => {
52
51
  clearCacheDir(x);
53
52
  removed.push(x);
54
53
  });
55
- await forEachComponentV2(
56
- blocklet,
57
- async (component) => {
58
- const files = await provider.searchCache(component.meta.did);
59
- files.forEach((x) => fs.rmSync(x, { force: true }));
60
- removed.push(...files);
61
- },
62
- { parallel: true, sync: true }
63
- );
54
+ // reset blocklet router cache
55
+ const result = await provider.clearCache(params.teamDid);
56
+ removed.push(...result);
64
57
 
65
- // FIXME: @wangshijun can we bust cache for image-filter in nginx?
66
58
  return removed.map((x) => x.replace(baseDir, ''));
67
59
  };
68
60
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.15-beta-f60064f3",
6
+ "version": "1.16.15-beta-103b95c0",
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-f60064f3",
23
- "@abtnode/auth": "1.16.15-beta-f60064f3",
24
- "@abtnode/certificate-manager": "1.16.15-beta-f60064f3",
25
- "@abtnode/constant": "1.16.15-beta-f60064f3",
26
- "@abtnode/cron": "1.16.15-beta-f60064f3",
27
- "@abtnode/logger": "1.16.15-beta-f60064f3",
28
- "@abtnode/models": "1.16.15-beta-f60064f3",
29
- "@abtnode/queue": "1.16.15-beta-f60064f3",
30
- "@abtnode/rbac": "1.16.15-beta-f60064f3",
31
- "@abtnode/router-provider": "1.16.15-beta-f60064f3",
32
- "@abtnode/static-server": "1.16.15-beta-f60064f3",
33
- "@abtnode/timemachine": "1.16.15-beta-f60064f3",
34
- "@abtnode/util": "1.16.15-beta-f60064f3",
22
+ "@abtnode/analytics": "1.16.15-beta-103b95c0",
23
+ "@abtnode/auth": "1.16.15-beta-103b95c0",
24
+ "@abtnode/certificate-manager": "1.16.15-beta-103b95c0",
25
+ "@abtnode/constant": "1.16.15-beta-103b95c0",
26
+ "@abtnode/cron": "1.16.15-beta-103b95c0",
27
+ "@abtnode/logger": "1.16.15-beta-103b95c0",
28
+ "@abtnode/models": "1.16.15-beta-103b95c0",
29
+ "@abtnode/queue": "1.16.15-beta-103b95c0",
30
+ "@abtnode/rbac": "1.16.15-beta-103b95c0",
31
+ "@abtnode/router-provider": "1.16.15-beta-103b95c0",
32
+ "@abtnode/static-server": "1.16.15-beta-103b95c0",
33
+ "@abtnode/timemachine": "1.16.15-beta-103b95c0",
34
+ "@abtnode/util": "1.16.15-beta-103b95c0",
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-f60064f3",
46
- "@blocklet/env": "1.16.15-beta-f60064f3",
47
- "@blocklet/meta": "1.16.15-beta-f60064f3",
48
- "@blocklet/resolver": "1.16.15-beta-f60064f3",
49
- "@blocklet/sdk": "1.16.15-beta-f60064f3",
45
+ "@blocklet/constant": "1.16.15-beta-103b95c0",
46
+ "@blocklet/env": "1.16.15-beta-103b95c0",
47
+ "@blocklet/meta": "1.16.15-beta-103b95c0",
48
+ "@blocklet/resolver": "1.16.15-beta-103b95c0",
49
+ "@blocklet/sdk": "1.16.15-beta-103b95c0",
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": "13e58931ad03716d069ab55a8cd3623d5fce8108"
103
+ "gitHead": "ba3bbf1566e9c3d62dbdf93d2ede8a1d4249c407"
104
104
  }