@abtnode/core 1.16.8-beta-186fd5aa → 1.16.8-next-c66e39c7
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 +42 -62
- package/lib/blocklet/manager/disk.js +2 -8
- package/lib/blocklet/manager/helper/migrate-application-to-struct-v2.js +5 -5
- package/lib/blocklet/storage/backup/blocklet-extras.js +2 -2
- package/lib/blocklet/storage/backup/blocklet.js +2 -2
- package/lib/index.js +17 -16
- package/lib/migrations/1.16.8-component-title.js +1 -1
- package/lib/migrations/1.6.9-update-node-info-and-certificate.js +1 -1
- package/lib/migrations/index.js +190 -40
- package/lib/monitor/node-runtime-monitor.js +2 -29
- package/lib/router/helper.js +6 -6
- package/lib/router/manager.js +35 -36
- package/lib/states/access-key.js +3 -20
- package/lib/states/audit-log.js +7 -8
- package/lib/states/backup.js +11 -59
- package/lib/states/base.js +13 -5
- package/lib/states/blocklet-extras.js +11 -8
- package/lib/states/blocklet.js +148 -222
- package/lib/states/cache.js +3 -21
- package/lib/states/connect-account.js +8 -0
- package/lib/states/index.js +28 -18
- package/lib/states/job.js +8 -0
- package/lib/states/migration.js +3 -4
- package/lib/states/node.js +104 -145
- package/lib/states/notification.js +18 -40
- package/lib/states/passport.js +8 -0
- package/lib/states/session.js +28 -44
- package/lib/states/site.js +32 -39
- package/lib/states/user.js +169 -378
- package/lib/states/webhook.js +5 -7
- package/lib/team/manager.js +108 -116
- package/lib/util/blocklet.js +0 -1
- package/lib/util/index.js +3 -0
- package/lib/util/queue.js +14 -20
- package/lib/util/ready.js +1 -1
- package/lib/webhook/index.js +6 -4
- package/package.json +19 -18
- package/lib/states/challenge.js +0 -58
package/lib/api/team.js
CHANGED
|
@@ -25,7 +25,7 @@ const {
|
|
|
25
25
|
} = require('@abtnode/auth/lib/passport');
|
|
26
26
|
const { getPassportStatusEndpoint } = require('@abtnode/auth/lib/auth');
|
|
27
27
|
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
28
|
-
const { parseUserAvatar } = require('@abtnode/util/lib/user
|
|
28
|
+
const { parseUserAvatar } = require('@abtnode/util/lib/user');
|
|
29
29
|
const { getChainClient } = require('@abtnode/util/lib/get-chain-client');
|
|
30
30
|
const { getWalletDid } = require('@blocklet/meta/lib/did-utils');
|
|
31
31
|
|
|
@@ -85,7 +85,7 @@ const sendPassportVcNotification = ({ userDid, appWallet: wallet, locale, vc })
|
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
const formatTransferData = (data) => ({
|
|
88
|
-
transferId: data.
|
|
88
|
+
transferId: data.id,
|
|
89
89
|
remark: data.remark || '',
|
|
90
90
|
expireDate: new Date(data.expireDate).toString(),
|
|
91
91
|
appDid: data.appDid,
|
|
@@ -119,13 +119,12 @@ class TeamAPI extends EventEmitter {
|
|
|
119
119
|
if (teamDid !== nodeInfo.did) {
|
|
120
120
|
throw new Error('Cannot add user of owner role');
|
|
121
121
|
}
|
|
122
|
-
|
|
123
122
|
if (await state.count({ role: ROLES.OWNER })) {
|
|
124
123
|
throw new Error('The owner already exists');
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
126
|
|
|
128
|
-
const { _action, ...doc } = await state.
|
|
127
|
+
const { _action, ...doc } = await state.loginUser(user);
|
|
129
128
|
if (_action === 'update') {
|
|
130
129
|
logger.info('user updated successfully', { teamDid, userDid: user.did });
|
|
131
130
|
this.emit(EVENTS.USER_UPDATED, { teamDid, user: doc });
|
|
@@ -162,7 +161,7 @@ class TeamAPI extends EventEmitter {
|
|
|
162
161
|
}
|
|
163
162
|
}
|
|
164
163
|
|
|
165
|
-
const doc = await state.
|
|
164
|
+
const doc = await state.addUser(user);
|
|
166
165
|
|
|
167
166
|
logger.info('user added successfully', { teamDid, userDid: user.did, userPk: user.pk, userName: user.fullName });
|
|
168
167
|
|
|
@@ -183,7 +182,7 @@ class TeamAPI extends EventEmitter {
|
|
|
183
182
|
return doc;
|
|
184
183
|
}
|
|
185
184
|
|
|
186
|
-
async getUsers({ teamDid, query, paging: inputPaging, sort, dids
|
|
185
|
+
async getUsers({ teamDid, query, paging: inputPaging, sort, dids }) {
|
|
187
186
|
const state = await this.getUserState(teamDid);
|
|
188
187
|
|
|
189
188
|
if (inputPaging?.pageSize > MAX_USER_PAGE_SIZE) {
|
|
@@ -205,14 +204,6 @@ class TeamAPI extends EventEmitter {
|
|
|
205
204
|
pageCount: 1,
|
|
206
205
|
page: 1,
|
|
207
206
|
};
|
|
208
|
-
} else if (sourceIds) {
|
|
209
|
-
list = await state.getUsersBySourceIds({ query, sourceIds });
|
|
210
|
-
paging = {
|
|
211
|
-
total: list.length,
|
|
212
|
-
pageSize: sourceIds.length,
|
|
213
|
-
pageCount: 1,
|
|
214
|
-
page: 1,
|
|
215
|
-
};
|
|
216
207
|
} else {
|
|
217
208
|
const doc = await state.getUsers({ query, sort, paging: { pageSize: 20, ...inputPaging } });
|
|
218
209
|
list = doc.list;
|
|
@@ -239,8 +230,8 @@ class TeamAPI extends EventEmitter {
|
|
|
239
230
|
'avatar',
|
|
240
231
|
'locale',
|
|
241
232
|
// oauth relate fields
|
|
242
|
-
'
|
|
243
|
-
'
|
|
233
|
+
'sourceProvider',
|
|
234
|
+
'connectedAccounts',
|
|
244
235
|
])
|
|
245
236
|
// eslint-disable-next-line function-paren-newline
|
|
246
237
|
),
|
|
@@ -250,36 +241,44 @@ class TeamAPI extends EventEmitter {
|
|
|
250
241
|
|
|
251
242
|
async getUsersCount({ teamDid }) {
|
|
252
243
|
const state = await this.getUserState(teamDid);
|
|
253
|
-
|
|
254
244
|
return state.count();
|
|
255
245
|
}
|
|
256
246
|
|
|
257
247
|
async getUsersCountPerRole({ teamDid }) {
|
|
258
248
|
const roles = await this.getRoles({ teamDid });
|
|
259
|
-
|
|
260
249
|
const state = await this.getUserState(teamDid);
|
|
250
|
+
const names = ['$all', ...roles.map((x) => x.name), '$none'];
|
|
251
|
+
return Promise.all(
|
|
252
|
+
names.map(async (name) => {
|
|
253
|
+
const count = await state.countByPassport({ name, status: PASSPORT_STATUS.VALID });
|
|
254
|
+
return { key: name, value: count };
|
|
255
|
+
})
|
|
256
|
+
);
|
|
257
|
+
}
|
|
261
258
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
for (const { name } of roles) {
|
|
268
|
-
// eslint-disable-next-line no-await-in-loop
|
|
269
|
-
const count = await state.count({ passports: { $elemMatch: { name, status: PASSPORT_STATUS.VALID } } });
|
|
270
|
-
res.push({ key: name, value: count });
|
|
271
|
-
}
|
|
259
|
+
async getUser({ teamDid, user, options = {} }) {
|
|
260
|
+
const state = await this.getUserState(teamDid);
|
|
261
|
+
return state.getUser(user.did, options);
|
|
262
|
+
}
|
|
272
263
|
|
|
273
|
-
|
|
274
|
-
|
|
264
|
+
async getUserByDid({ teamDid, userDid }) {
|
|
265
|
+
const state = await this.getUserState(teamDid);
|
|
266
|
+
return state.getUserByDid(userDid);
|
|
267
|
+
}
|
|
275
268
|
|
|
276
|
-
|
|
269
|
+
async isUserValid({ teamDid, userDid }) {
|
|
270
|
+
const state = await this.getUserState(teamDid);
|
|
271
|
+
return state.isUserValid(userDid);
|
|
277
272
|
}
|
|
278
273
|
|
|
279
|
-
async
|
|
274
|
+
async isPassportValid({ teamDid, passportId }) {
|
|
280
275
|
const state = await this.getUserState(teamDid);
|
|
276
|
+
return state.isPassportValid(passportId);
|
|
277
|
+
}
|
|
281
278
|
|
|
282
|
-
|
|
279
|
+
async isConnectedAccount({ teamDid, did }) {
|
|
280
|
+
const state = await this.getUserState(teamDid);
|
|
281
|
+
return state.isConnectedAccount(did);
|
|
283
282
|
}
|
|
284
283
|
|
|
285
284
|
async getOwner({ teamDid }) {
|
|
@@ -298,12 +297,9 @@ class TeamAPI extends EventEmitter {
|
|
|
298
297
|
|
|
299
298
|
async updateUser({ teamDid, user }) {
|
|
300
299
|
const state = await this.getUserState(teamDid);
|
|
301
|
-
|
|
302
|
-
const doc = await state.update(user);
|
|
303
|
-
|
|
300
|
+
const doc = await state.updateUser(user.did, user);
|
|
304
301
|
logger.info('user updated successfully', { teamDid, userDid: user.did });
|
|
305
302
|
this.emit(EVENTS.USER_UPDATED, { teamDid, user: doc });
|
|
306
|
-
|
|
307
303
|
return doc;
|
|
308
304
|
}
|
|
309
305
|
|
|
@@ -321,9 +317,7 @@ class TeamAPI extends EventEmitter {
|
|
|
321
317
|
const state = await this.getUserState(teamDid);
|
|
322
318
|
|
|
323
319
|
await state.remove({ did });
|
|
324
|
-
|
|
325
320
|
logger.info('user removed successfully', { teamDid, userDid: did });
|
|
326
|
-
|
|
327
321
|
this.emit(EVENTS.USER_REMOVED, { teamDid, user: { did } });
|
|
328
322
|
|
|
329
323
|
return { did };
|
|
@@ -545,15 +539,14 @@ class TeamAPI extends EventEmitter {
|
|
|
545
539
|
}
|
|
546
540
|
|
|
547
541
|
const state = await this.getSessionState(teamDid);
|
|
548
|
-
|
|
549
|
-
const invitation = await state.findOne({ _id: inviteId, type: 'invite' });
|
|
542
|
+
const invitation = await state.read(inviteId);
|
|
550
543
|
if (!invitation) {
|
|
551
544
|
return null;
|
|
552
545
|
}
|
|
553
546
|
|
|
554
547
|
return {
|
|
555
548
|
// eslint-disable-next-line no-underscore-dangle
|
|
556
|
-
inviteId: invitation.
|
|
549
|
+
inviteId: invitation.id,
|
|
557
550
|
role: invitation.role,
|
|
558
551
|
remark: invitation.remark,
|
|
559
552
|
expireDate: new Date(invitation.expireDate).toString(),
|
|
@@ -571,7 +564,7 @@ class TeamAPI extends EventEmitter {
|
|
|
571
564
|
|
|
572
565
|
return invitations.filter(filter || ((x) => x.status !== 'success')).map((d) => ({
|
|
573
566
|
// eslint-disable-next-line no-underscore-dangle
|
|
574
|
-
inviteId: d.
|
|
567
|
+
inviteId: d.id,
|
|
575
568
|
role: d.role,
|
|
576
569
|
remark: d.remark,
|
|
577
570
|
expireDate: new Date(d.expireDate).toString(),
|
|
@@ -695,7 +688,7 @@ class TeamAPI extends EventEmitter {
|
|
|
695
688
|
|
|
696
689
|
const state = await this.getSessionState(appDid);
|
|
697
690
|
|
|
698
|
-
const transfer = await state.
|
|
691
|
+
const transfer = await state.read(transferId);
|
|
699
692
|
if (!transfer) {
|
|
700
693
|
return null;
|
|
701
694
|
}
|
|
@@ -826,6 +819,7 @@ class TeamAPI extends EventEmitter {
|
|
|
826
819
|
}
|
|
827
820
|
const { id } = await state.start({
|
|
828
821
|
type: 'passport-issuance',
|
|
822
|
+
key: userDid,
|
|
829
823
|
expireDate, // session expireDate
|
|
830
824
|
name: role.name,
|
|
831
825
|
title: role.title,
|
|
@@ -851,14 +845,14 @@ class TeamAPI extends EventEmitter {
|
|
|
851
845
|
const query = { type: 'passport-issuance' };
|
|
852
846
|
|
|
853
847
|
if (ownerDid) {
|
|
854
|
-
query.
|
|
848
|
+
query.key = ownerDid;
|
|
855
849
|
}
|
|
856
850
|
|
|
857
851
|
const list = await state.find(query);
|
|
858
852
|
|
|
859
853
|
return list.map((d) => ({
|
|
860
854
|
// eslint-disable-next-line no-underscore-dangle
|
|
861
|
-
id: d.
|
|
855
|
+
id: d.id,
|
|
862
856
|
name: d.name,
|
|
863
857
|
title: d.title,
|
|
864
858
|
expireDate: new Date(d.expireDate).toString(),
|
|
@@ -869,13 +863,7 @@ class TeamAPI extends EventEmitter {
|
|
|
869
863
|
|
|
870
864
|
async getPassportIssuance({ teamDid, sessionId }) {
|
|
871
865
|
const state = await this.getSessionState(teamDid);
|
|
872
|
-
|
|
873
|
-
const doc = await state.findOne({ _id: sessionId });
|
|
874
|
-
|
|
875
|
-
if (doc) {
|
|
876
|
-
doc.id = doc._id;
|
|
877
|
-
}
|
|
878
|
-
|
|
866
|
+
const doc = await state.read(sessionId);
|
|
879
867
|
return doc;
|
|
880
868
|
}
|
|
881
869
|
|
|
@@ -1007,11 +995,9 @@ class TeamAPI extends EventEmitter {
|
|
|
1007
995
|
|
|
1008
996
|
async getPermissions({ teamDid }) {
|
|
1009
997
|
const rbac = await this.getRBAC(teamDid);
|
|
1010
|
-
|
|
1011
998
|
const permissions = await rbac.getPermissions();
|
|
1012
|
-
|
|
1013
999
|
return permissions.map((d) => {
|
|
1014
|
-
d.isProtected = d.extra && d.extra.isProtected;
|
|
1000
|
+
d.isProtected = !!(d.extra && d.extra.isProtected);
|
|
1015
1001
|
return pick(d, ['name', 'description', 'isProtected']);
|
|
1016
1002
|
});
|
|
1017
1003
|
}
|
|
@@ -1022,7 +1008,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1022
1008
|
await validateCreatePermission({ name, description });
|
|
1023
1009
|
|
|
1024
1010
|
const rbac = await this.getRBAC(teamDid);
|
|
1025
|
-
|
|
1026
1011
|
const added = await rbac.createPermission({ name, description });
|
|
1027
1012
|
|
|
1028
1013
|
return pick(added, ['name', 'description']);
|
|
@@ -1034,7 +1019,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1034
1019
|
await validateUpdatePermission({ name, description });
|
|
1035
1020
|
|
|
1036
1021
|
const rbac = await this.getRBAC(teamDid);
|
|
1037
|
-
|
|
1038
1022
|
const state = await rbac.updatePermission({ name, description });
|
|
1039
1023
|
|
|
1040
1024
|
return pick(state, ['name', 'description']);
|
|
@@ -1044,7 +1028,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1044
1028
|
logger.info('grant', { teamDid, roleName, grantName });
|
|
1045
1029
|
|
|
1046
1030
|
const rbac = await this.getRBAC(teamDid);
|
|
1047
|
-
|
|
1048
1031
|
await rbac.grant(roleName, grantName);
|
|
1049
1032
|
|
|
1050
1033
|
return true;
|
|
@@ -1054,7 +1037,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1054
1037
|
logger.info('revoke', { teamDid, roleName, grantName });
|
|
1055
1038
|
|
|
1056
1039
|
const rbac = await this.getRBAC(teamDid);
|
|
1057
|
-
|
|
1058
1040
|
await rbac.revoke(roleName, grantName);
|
|
1059
1041
|
|
|
1060
1042
|
return true;
|
|
@@ -1064,7 +1046,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1064
1046
|
logger.info('update grants', { teamDid, roleName, grantNames });
|
|
1065
1047
|
|
|
1066
1048
|
const rbac = await this.getRBAC(teamDid);
|
|
1067
|
-
|
|
1068
1049
|
const role = await rbac.updateGrants(roleName, grantNames);
|
|
1069
1050
|
|
|
1070
1051
|
return pick(role, ['name', 'grants', 'title', 'description']);
|
|
@@ -1076,7 +1057,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1076
1057
|
validateReservedRole(name);
|
|
1077
1058
|
|
|
1078
1059
|
const rbac = await this.getRBAC(teamDid);
|
|
1079
|
-
|
|
1080
1060
|
await rbac.removeRole(name);
|
|
1081
1061
|
|
|
1082
1062
|
return true;
|
|
@@ -636,7 +636,6 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
636
636
|
|
|
637
637
|
/**
|
|
638
638
|
* FIXME: @linchen support cancel
|
|
639
|
-
* FIXME: @wangshijun create audit log for this
|
|
640
639
|
* @param {import('@abtnode/client').RequestRestoreBlockletInput} input
|
|
641
640
|
* @memberof BlockletManager
|
|
642
641
|
*/
|
|
@@ -1883,7 +1882,6 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1883
1882
|
}
|
|
1884
1883
|
|
|
1885
1884
|
/**
|
|
1886
|
-
* FIXME: @wangshijun create audit log for this
|
|
1887
1885
|
* @param {{
|
|
1888
1886
|
* blocklet: import('@abtnode/client').BlockletState,
|
|
1889
1887
|
* context: {
|
|
@@ -1916,7 +1914,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1916
1914
|
});
|
|
1917
1915
|
await spacesBackup.backup();
|
|
1918
1916
|
|
|
1919
|
-
await states.backup.success(backup.
|
|
1917
|
+
await states.backup.success(backup.id, {
|
|
1920
1918
|
targetUrl: getBackupFilesUrlFromEndpoint(getBackupEndpoint(blocklet?.environments)),
|
|
1921
1919
|
});
|
|
1922
1920
|
|
|
@@ -1930,7 +1928,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1930
1928
|
blocklet,
|
|
1931
1929
|
});
|
|
1932
1930
|
} catch (error) {
|
|
1933
|
-
await states.backup.fail(backup.
|
|
1931
|
+
await states.backup.fail(backup.id, {
|
|
1934
1932
|
message: error?.message,
|
|
1935
1933
|
});
|
|
1936
1934
|
this.emit(BlockletEvents.backupProgress, {
|
|
@@ -1947,8 +1945,6 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1947
1945
|
}
|
|
1948
1946
|
|
|
1949
1947
|
/**
|
|
1950
|
-
* FIXME: @linchen support cancel
|
|
1951
|
-
* FIXME: @wangshijun create audit log for this
|
|
1952
1948
|
* @param {{
|
|
1953
1949
|
* input: import('@abtnode/client').RequestRestoreBlockletInput,
|
|
1954
1950
|
* context: Record<string, string>,
|
|
@@ -2937,7 +2933,6 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2937
2933
|
}
|
|
2938
2934
|
|
|
2939
2935
|
/**
|
|
2940
|
-
* FIXME: @wangshijun create audit log for this
|
|
2941
2936
|
* @param {{
|
|
2942
2937
|
* blocklet: import('@abtnode/client').BlockletState,
|
|
2943
2938
|
* context: {
|
|
@@ -2992,7 +2987,6 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2992
2987
|
|
|
2993
2988
|
/**
|
|
2994
2989
|
* FIXME: @linchen support cancel
|
|
2995
|
-
* FIXME: @wangshijun create audit log for this
|
|
2996
2990
|
* @param {import('@abtnode/client').RequestRestoreBlockletInput} input
|
|
2997
2991
|
* @memberof BlockletManager
|
|
2998
2992
|
*/
|
|
@@ -216,7 +216,7 @@ const migrateApplicationToStructV2 = async ({ did, appSk: newAppSk, context = {}
|
|
|
216
216
|
|
|
217
217
|
const backupBlocklet = await states.blocklet.findOne({ 'meta.did': oldBlocklet.meta.did });
|
|
218
218
|
const backupExtra = cloneDeep(extraData);
|
|
219
|
-
const backupSite = await states.site.findOne({
|
|
219
|
+
const backupSite = await states.site.findOne({ id: siteData.id });
|
|
220
220
|
|
|
221
221
|
const { appPid } = oldBlocklet;
|
|
222
222
|
|
|
@@ -447,7 +447,7 @@ const migrateApplicationToStructV2 = async ({ did, appSk: newAppSk, context = {}
|
|
|
447
447
|
|
|
448
448
|
// update routing
|
|
449
449
|
await states.site.update(
|
|
450
|
-
{
|
|
450
|
+
{ id: siteData.id },
|
|
451
451
|
{ $set: { domain: siteData.domain, domainAliases: siteData.domainAliases, rules: siteData.rules } }
|
|
452
452
|
);
|
|
453
453
|
|
|
@@ -473,12 +473,12 @@ const migrateApplicationToStructV2 = async ({ did, appSk: newAppSk, context = {}
|
|
|
473
473
|
logger.error('Migrate application state failed: ', { did, error });
|
|
474
474
|
|
|
475
475
|
try {
|
|
476
|
-
await states.blocklet.remove({
|
|
476
|
+
await states.blocklet.remove({ id: backupBlocklet.id });
|
|
477
477
|
await states.blocklet.remove({ 'meta.did': blockletData.meta.did });
|
|
478
478
|
await states.blocklet.insert(backupBlocklet);
|
|
479
|
-
await states.blockletExtras.remove({
|
|
479
|
+
await states.blockletExtras.remove({ id: backupExtra.id });
|
|
480
480
|
await states.blockletExtras.insert(backupExtra);
|
|
481
|
-
await states.site.remove({
|
|
481
|
+
await states.site.remove({ id: backupSite.id });
|
|
482
482
|
await states.site.insert(backupSite);
|
|
483
483
|
|
|
484
484
|
logger.info('Rollback application state');
|
|
@@ -50,8 +50,8 @@ class BlockletExtrasBackup extends BaseBackup {
|
|
|
50
50
|
const current = queue.pop();
|
|
51
51
|
|
|
52
52
|
// 删除父 blocklet 的某些数据
|
|
53
|
-
if (current.
|
|
54
|
-
delete current.
|
|
53
|
+
if (current.id) {
|
|
54
|
+
delete current.id;
|
|
55
55
|
delete current.createdAt;
|
|
56
56
|
delete current.updatedAt;
|
|
57
57
|
}
|
|
@@ -39,8 +39,8 @@ class BlockletBackup extends BaseBackup {
|
|
|
39
39
|
const current = queue.pop();
|
|
40
40
|
|
|
41
41
|
// 父组件才需要删除的属性
|
|
42
|
-
if (current.
|
|
43
|
-
delete current.
|
|
42
|
+
if (current.id) {
|
|
43
|
+
delete current.id;
|
|
44
44
|
delete current.createdAt;
|
|
45
45
|
delete current.startedAt;
|
|
46
46
|
delete current.installedAt;
|
package/lib/index.js
CHANGED
|
@@ -66,17 +66,21 @@ function ABTNode(options) {
|
|
|
66
66
|
options.daemon = false;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// 0. ensure data dirs
|
|
69
70
|
const dataDirs = ensureDataDirs(options.dataDir);
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
// 1. initialize storage
|
|
73
|
+
states.init(dataDirs, options);
|
|
72
74
|
|
|
75
|
+
// 2. initialize queues
|
|
76
|
+
const concurrency = getQueueConcurrencyByMem();
|
|
73
77
|
logger.info('startup and installation queue currency', { concurrency });
|
|
74
78
|
|
|
75
|
-
//
|
|
79
|
+
// 2.1 initialize the start queue
|
|
76
80
|
const startQueue = createQueue({
|
|
77
81
|
daemon: options.daemon,
|
|
82
|
+
model: states.job,
|
|
78
83
|
name: 'jobs',
|
|
79
|
-
dataDir: dataDirs.core,
|
|
80
84
|
onJob: async (job) => {
|
|
81
85
|
if (typeof blockletManager.onJob === 'function') {
|
|
82
86
|
await blockletManager.onJob(job);
|
|
@@ -88,11 +92,11 @@ function ABTNode(options) {
|
|
|
88
92
|
},
|
|
89
93
|
});
|
|
90
94
|
|
|
91
|
-
//
|
|
95
|
+
// 2.2 initialize the install queue
|
|
92
96
|
const installQueue = createQueue({
|
|
93
97
|
daemon: options.daemon,
|
|
98
|
+
model: states.job,
|
|
94
99
|
name: 'install_queue',
|
|
95
|
-
dataDir: dataDirs.core,
|
|
96
100
|
onJob: async (job) => {
|
|
97
101
|
if (typeof blockletManager.onJob === 'function') {
|
|
98
102
|
await blockletManager.onJob(job);
|
|
@@ -109,8 +113,8 @@ function ABTNode(options) {
|
|
|
109
113
|
|
|
110
114
|
const backupQueue = createQueue({
|
|
111
115
|
daemon: options.daemon,
|
|
116
|
+
model: states.job,
|
|
112
117
|
name: 'backup_queue',
|
|
113
|
-
dataDir: dataDirs.core,
|
|
114
118
|
onJob: async (job) => {
|
|
115
119
|
if (typeof blockletManager.onJob === 'function') {
|
|
116
120
|
await blockletManager.onJob(job);
|
|
@@ -129,7 +133,7 @@ function ABTNode(options) {
|
|
|
129
133
|
const restoreQueue = createQueue({
|
|
130
134
|
daemon: options.daemon,
|
|
131
135
|
name: 'restore_queue',
|
|
132
|
-
|
|
136
|
+
model: states.job,
|
|
133
137
|
onJob: async (job) => {
|
|
134
138
|
if (typeof blockletManager.onJob === 'function') {
|
|
135
139
|
await blockletManager.onJob(job);
|
|
@@ -145,27 +149,26 @@ function ABTNode(options) {
|
|
|
145
149
|
},
|
|
146
150
|
});
|
|
147
151
|
|
|
148
|
-
// Initialize storage
|
|
149
|
-
states.init(dataDirs, options);
|
|
150
|
-
|
|
151
152
|
const certManager = new Cert({
|
|
152
153
|
maintainerEmail: DEFAULT_CERTIFICATE_EMAIL,
|
|
153
154
|
dataDir: dataDirs.certManagerModule,
|
|
154
155
|
states,
|
|
155
156
|
});
|
|
156
157
|
|
|
158
|
+
// 3. init routing manager
|
|
157
159
|
const routerManager = new RouterManager({ certManager });
|
|
158
160
|
const routingSnapshot = new RoutingSnapshot({
|
|
159
161
|
baseDir: dataDirs.core,
|
|
160
162
|
getRoutingData: async () => {
|
|
161
163
|
const sites = await states.site.getSites();
|
|
162
|
-
|
|
163
164
|
return { sites };
|
|
164
165
|
},
|
|
165
166
|
});
|
|
166
167
|
|
|
168
|
+
// 4. init team manager
|
|
167
169
|
const teamManager = new TeamManager({ nodeDid: options.nodeDid, dataDirs, states });
|
|
168
170
|
|
|
171
|
+
// 5. init blocklet manager
|
|
169
172
|
const blockletManager = new BlockletManager({
|
|
170
173
|
dataDirs,
|
|
171
174
|
startQueue,
|
|
@@ -339,6 +342,9 @@ function ABTNode(options) {
|
|
|
339
342
|
updateUser: teamAPI.updateUser.bind(teamAPI),
|
|
340
343
|
updateUserApproval: teamAPI.updateUserApproval.bind(teamAPI),
|
|
341
344
|
updateUserRole: teamAPI.updateUserRole.bind(teamAPI),
|
|
345
|
+
getUserByDid: teamAPI.getUserByDid.bind(teamAPI),
|
|
346
|
+
isPassportValid: teamAPI.isPassportValid.bind(teamAPI),
|
|
347
|
+
isConnectedAccount: teamAPI.isConnectedAccount.bind(teamAPI),
|
|
342
348
|
|
|
343
349
|
// Access Control
|
|
344
350
|
getRBAC: (did = options.nodeDid) => teamManager.getRBAC(did),
|
|
@@ -377,10 +383,6 @@ function ABTNode(options) {
|
|
|
377
383
|
addBlockletStore: teamAPI.addStore.bind(teamAPI),
|
|
378
384
|
deleteBlockletStore: teamAPI.deleteStore.bind(teamAPI),
|
|
379
385
|
|
|
380
|
-
// Challenge
|
|
381
|
-
generateChallenge: states.challenge.generate.bind(states.challenge),
|
|
382
|
-
verifyChallenge: states.challenge.verify.bind(states.challenge),
|
|
383
|
-
|
|
384
386
|
// Notifications
|
|
385
387
|
getNotifications: states.notification.findPaginated.bind(states.notification),
|
|
386
388
|
readNotifications: states.notification.read.bind(states.notification),
|
|
@@ -425,7 +427,6 @@ function ABTNode(options) {
|
|
|
425
427
|
// Access Key
|
|
426
428
|
getAccessKeys: states.accessKey.list.bind(states.accessKey),
|
|
427
429
|
getAccessKey: states.accessKey.detail.bind(states.accessKey),
|
|
428
|
-
getAccessKeyByTag: states.accessKey.getAccessKeyByTag.bind(states.accessKey),
|
|
429
430
|
createAccessKey: states.accessKey.create.bind(states.accessKey),
|
|
430
431
|
updateAccessKey: states.accessKey.update.bind(states.accessKey),
|
|
431
432
|
deleteAccessKey: states.accessKey.remove.bind(states.accessKey),
|
|
@@ -59,7 +59,7 @@ module.exports = async ({ states, printInfo }) => {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
if (shouldUpdate) {
|
|
62
|
-
await states.blocklet.update({
|
|
62
|
+
await states.blocklet.update({ id: app.id }, { $set: { children: app.children } });
|
|
63
63
|
printInfo(`Blocklet in blocklet.db updated: ${app.meta?.title}`);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -16,7 +16,7 @@ const updateNodeInfo = async ({ printInfo, states }) => {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
if (!isEmpty(data)) {
|
|
19
|
-
await states.node.update({
|
|
19
|
+
await states.node.update({ did: info.did }, { $set: data });
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
printInfo('update did registry and did domain successfully');
|