@abtnode/core 1.16.8-beta-186fd5aa → 1.16.8-next-d1e52353
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 +24 -64
- 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 +14 -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 +136 -225
- 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 +187 -374
- 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,35 +241,23 @@ 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);
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
-
}
|
|
272
|
-
|
|
273
|
-
const none = await state.count({ passports: { $size: 0 } });
|
|
274
|
-
res.push({ key: '$none', value: none });
|
|
275
|
-
|
|
276
|
-
return res;
|
|
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
|
+
);
|
|
277
257
|
}
|
|
278
258
|
|
|
279
259
|
async getUser({ teamDid, user, options = {} }) {
|
|
280
260
|
const state = await this.getUserState(teamDid);
|
|
281
|
-
|
|
282
261
|
return state.getUser(user.did, options);
|
|
283
262
|
}
|
|
284
263
|
|
|
@@ -298,12 +277,9 @@ class TeamAPI extends EventEmitter {
|
|
|
298
277
|
|
|
299
278
|
async updateUser({ teamDid, user }) {
|
|
300
279
|
const state = await this.getUserState(teamDid);
|
|
301
|
-
|
|
302
|
-
const doc = await state.update(user);
|
|
303
|
-
|
|
280
|
+
const doc = await state.updateUser(user.did, user);
|
|
304
281
|
logger.info('user updated successfully', { teamDid, userDid: user.did });
|
|
305
282
|
this.emit(EVENTS.USER_UPDATED, { teamDid, user: doc });
|
|
306
|
-
|
|
307
283
|
return doc;
|
|
308
284
|
}
|
|
309
285
|
|
|
@@ -321,9 +297,7 @@ class TeamAPI extends EventEmitter {
|
|
|
321
297
|
const state = await this.getUserState(teamDid);
|
|
322
298
|
|
|
323
299
|
await state.remove({ did });
|
|
324
|
-
|
|
325
300
|
logger.info('user removed successfully', { teamDid, userDid: did });
|
|
326
|
-
|
|
327
301
|
this.emit(EVENTS.USER_REMOVED, { teamDid, user: { did } });
|
|
328
302
|
|
|
329
303
|
return { did };
|
|
@@ -545,15 +519,14 @@ class TeamAPI extends EventEmitter {
|
|
|
545
519
|
}
|
|
546
520
|
|
|
547
521
|
const state = await this.getSessionState(teamDid);
|
|
548
|
-
|
|
549
|
-
const invitation = await state.findOne({ _id: inviteId, type: 'invite' });
|
|
522
|
+
const invitation = await state.read(inviteId);
|
|
550
523
|
if (!invitation) {
|
|
551
524
|
return null;
|
|
552
525
|
}
|
|
553
526
|
|
|
554
527
|
return {
|
|
555
528
|
// eslint-disable-next-line no-underscore-dangle
|
|
556
|
-
inviteId: invitation.
|
|
529
|
+
inviteId: invitation.id,
|
|
557
530
|
role: invitation.role,
|
|
558
531
|
remark: invitation.remark,
|
|
559
532
|
expireDate: new Date(invitation.expireDate).toString(),
|
|
@@ -571,7 +544,7 @@ class TeamAPI extends EventEmitter {
|
|
|
571
544
|
|
|
572
545
|
return invitations.filter(filter || ((x) => x.status !== 'success')).map((d) => ({
|
|
573
546
|
// eslint-disable-next-line no-underscore-dangle
|
|
574
|
-
inviteId: d.
|
|
547
|
+
inviteId: d.id,
|
|
575
548
|
role: d.role,
|
|
576
549
|
remark: d.remark,
|
|
577
550
|
expireDate: new Date(d.expireDate).toString(),
|
|
@@ -695,7 +668,7 @@ class TeamAPI extends EventEmitter {
|
|
|
695
668
|
|
|
696
669
|
const state = await this.getSessionState(appDid);
|
|
697
670
|
|
|
698
|
-
const transfer = await state.
|
|
671
|
+
const transfer = await state.read(transferId);
|
|
699
672
|
if (!transfer) {
|
|
700
673
|
return null;
|
|
701
674
|
}
|
|
@@ -826,6 +799,7 @@ class TeamAPI extends EventEmitter {
|
|
|
826
799
|
}
|
|
827
800
|
const { id } = await state.start({
|
|
828
801
|
type: 'passport-issuance',
|
|
802
|
+
key: userDid,
|
|
829
803
|
expireDate, // session expireDate
|
|
830
804
|
name: role.name,
|
|
831
805
|
title: role.title,
|
|
@@ -851,14 +825,14 @@ class TeamAPI extends EventEmitter {
|
|
|
851
825
|
const query = { type: 'passport-issuance' };
|
|
852
826
|
|
|
853
827
|
if (ownerDid) {
|
|
854
|
-
query.
|
|
828
|
+
query.key = ownerDid;
|
|
855
829
|
}
|
|
856
830
|
|
|
857
831
|
const list = await state.find(query);
|
|
858
832
|
|
|
859
833
|
return list.map((d) => ({
|
|
860
834
|
// eslint-disable-next-line no-underscore-dangle
|
|
861
|
-
id: d.
|
|
835
|
+
id: d.id,
|
|
862
836
|
name: d.name,
|
|
863
837
|
title: d.title,
|
|
864
838
|
expireDate: new Date(d.expireDate).toString(),
|
|
@@ -869,13 +843,7 @@ class TeamAPI extends EventEmitter {
|
|
|
869
843
|
|
|
870
844
|
async getPassportIssuance({ teamDid, sessionId }) {
|
|
871
845
|
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
|
-
|
|
846
|
+
const doc = await state.read(sessionId);
|
|
879
847
|
return doc;
|
|
880
848
|
}
|
|
881
849
|
|
|
@@ -1007,11 +975,9 @@ class TeamAPI extends EventEmitter {
|
|
|
1007
975
|
|
|
1008
976
|
async getPermissions({ teamDid }) {
|
|
1009
977
|
const rbac = await this.getRBAC(teamDid);
|
|
1010
|
-
|
|
1011
978
|
const permissions = await rbac.getPermissions();
|
|
1012
|
-
|
|
1013
979
|
return permissions.map((d) => {
|
|
1014
|
-
d.isProtected = d.extra && d.extra.isProtected;
|
|
980
|
+
d.isProtected = !!(d.extra && d.extra.isProtected);
|
|
1015
981
|
return pick(d, ['name', 'description', 'isProtected']);
|
|
1016
982
|
});
|
|
1017
983
|
}
|
|
@@ -1022,7 +988,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1022
988
|
await validateCreatePermission({ name, description });
|
|
1023
989
|
|
|
1024
990
|
const rbac = await this.getRBAC(teamDid);
|
|
1025
|
-
|
|
1026
991
|
const added = await rbac.createPermission({ name, description });
|
|
1027
992
|
|
|
1028
993
|
return pick(added, ['name', 'description']);
|
|
@@ -1034,7 +999,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1034
999
|
await validateUpdatePermission({ name, description });
|
|
1035
1000
|
|
|
1036
1001
|
const rbac = await this.getRBAC(teamDid);
|
|
1037
|
-
|
|
1038
1002
|
const state = await rbac.updatePermission({ name, description });
|
|
1039
1003
|
|
|
1040
1004
|
return pick(state, ['name', 'description']);
|
|
@@ -1044,7 +1008,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1044
1008
|
logger.info('grant', { teamDid, roleName, grantName });
|
|
1045
1009
|
|
|
1046
1010
|
const rbac = await this.getRBAC(teamDid);
|
|
1047
|
-
|
|
1048
1011
|
await rbac.grant(roleName, grantName);
|
|
1049
1012
|
|
|
1050
1013
|
return true;
|
|
@@ -1054,7 +1017,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1054
1017
|
logger.info('revoke', { teamDid, roleName, grantName });
|
|
1055
1018
|
|
|
1056
1019
|
const rbac = await this.getRBAC(teamDid);
|
|
1057
|
-
|
|
1058
1020
|
await rbac.revoke(roleName, grantName);
|
|
1059
1021
|
|
|
1060
1022
|
return true;
|
|
@@ -1064,7 +1026,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1064
1026
|
logger.info('update grants', { teamDid, roleName, grantNames });
|
|
1065
1027
|
|
|
1066
1028
|
const rbac = await this.getRBAC(teamDid);
|
|
1067
|
-
|
|
1068
1029
|
const role = await rbac.updateGrants(roleName, grantNames);
|
|
1069
1030
|
|
|
1070
1031
|
return pick(role, ['name', 'grants', 'title', 'description']);
|
|
@@ -1076,7 +1037,6 @@ class TeamAPI extends EventEmitter {
|
|
|
1076
1037
|
validateReservedRole(name);
|
|
1077
1038
|
|
|
1078
1039
|
const rbac = await this.getRBAC(teamDid);
|
|
1079
|
-
|
|
1080
1040
|
await rbac.removeRole(name);
|
|
1081
1041
|
|
|
1082
1042
|
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,
|
|
@@ -377,10 +380,6 @@ function ABTNode(options) {
|
|
|
377
380
|
addBlockletStore: teamAPI.addStore.bind(teamAPI),
|
|
378
381
|
deleteBlockletStore: teamAPI.deleteStore.bind(teamAPI),
|
|
379
382
|
|
|
380
|
-
// Challenge
|
|
381
|
-
generateChallenge: states.challenge.generate.bind(states.challenge),
|
|
382
|
-
verifyChallenge: states.challenge.verify.bind(states.challenge),
|
|
383
|
-
|
|
384
383
|
// Notifications
|
|
385
384
|
getNotifications: states.notification.findPaginated.bind(states.notification),
|
|
386
385
|
readNotifications: states.notification.read.bind(states.notification),
|
|
@@ -425,7 +424,6 @@ function ABTNode(options) {
|
|
|
425
424
|
// Access Key
|
|
426
425
|
getAccessKeys: states.accessKey.list.bind(states.accessKey),
|
|
427
426
|
getAccessKey: states.accessKey.detail.bind(states.accessKey),
|
|
428
|
-
getAccessKeyByTag: states.accessKey.getAccessKeyByTag.bind(states.accessKey),
|
|
429
427
|
createAccessKey: states.accessKey.create.bind(states.accessKey),
|
|
430
428
|
updateAccessKey: states.accessKey.update.bind(states.accessKey),
|
|
431
429
|
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');
|