@abtnode/core 1.16.13-beta-90ded76f → 1.16.13-beta-ef672597
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.
|
@@ -458,10 +458,37 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
458
458
|
return { did, isInstalled: !!blocklet, isRunning };
|
|
459
459
|
}
|
|
460
460
|
|
|
461
|
-
async start(
|
|
461
|
+
async start(
|
|
462
|
+
{ did, throwOnError, checkHealthImmediately = false, e2eMode = false, componentDids: inputComponentDids, atomic },
|
|
463
|
+
context
|
|
464
|
+
) {
|
|
465
|
+
const blocklet = await this.ensureBlocklet(did, { e2eMode });
|
|
466
|
+
|
|
467
|
+
if (atomic || !blocklet.structVersion) {
|
|
468
|
+
return this._start(
|
|
469
|
+
{ did, throwOnError, checkHealthImmediately, e2eMode, componentDids: inputComponentDids },
|
|
470
|
+
context
|
|
471
|
+
);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
const componentDids = inputComponentDids?.length ? inputComponentDids : blocklet.children.map((x) => x.meta.did);
|
|
475
|
+
|
|
476
|
+
const tasks = componentDids.map((componentDid) =>
|
|
477
|
+
this._start({ did, throwOnError, checkHealthImmediately, e2eMode, componentDids: [componentDid] }, context)
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
return Promise.any(tasks).catch((err) => {
|
|
481
|
+
throw new Error(err.errors.join(', '));
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
async _start(
|
|
486
|
+
{ blocklet: inputBlocklet, did, throwOnError, checkHealthImmediately = false, e2eMode = false, componentDids },
|
|
487
|
+
context
|
|
488
|
+
) {
|
|
462
489
|
logger.info('start blocklet', { did, componentDids, throwOnError, checkHealthImmediately, e2eMode });
|
|
463
490
|
// should check blocklet integrity
|
|
464
|
-
const blocklet1 = await this.ensureBlocklet(did, { e2eMode });
|
|
491
|
+
const blocklet1 = inputBlocklet || (await this.ensureBlocklet(did, { e2eMode }));
|
|
465
492
|
|
|
466
493
|
await this.checkControllerStatus(blocklet1, 'start');
|
|
467
494
|
|
|
@@ -485,9 +512,9 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
485
512
|
// blocklet may be manually stopped durning starting
|
|
486
513
|
// so error message would not be sent if blocklet is stopped
|
|
487
514
|
// so we need update status first
|
|
488
|
-
await states.blocklet.setBlockletStatus(did, BlockletStatus.starting, { componentDids });
|
|
515
|
+
const doc1 = await states.blocklet.setBlockletStatus(did, BlockletStatus.starting, { componentDids });
|
|
489
516
|
blocklet1.status = BlockletStatus.starting;
|
|
490
|
-
this.emit(BlockletEvents.statusChange,
|
|
517
|
+
this.emit(BlockletEvents.statusChange, doc1);
|
|
491
518
|
|
|
492
519
|
if (blocklet1.mode === BLOCKLET_MODES.DEVELOPMENT) {
|
|
493
520
|
const { logsDir } = blocklet1.env;
|
|
@@ -569,6 +596,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
569
596
|
await this.deleteProcess({ did, componentDids });
|
|
570
597
|
const res = await states.blocklet.setBlockletStatus(did, BlockletStatus.error, { componentDids });
|
|
571
598
|
this.emit(BlockletEvents.startFailed, { ...res, error: { message: error.message } });
|
|
599
|
+
this.emit(BlockletEvents.statusChange, { ...res, error: { message: error.message } });
|
|
572
600
|
|
|
573
601
|
if (throwOnError) {
|
|
574
602
|
throw new Error(description);
|
|
@@ -585,9 +613,9 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
585
613
|
const { processId } = blocklet.env;
|
|
586
614
|
|
|
587
615
|
if (updateStatus) {
|
|
588
|
-
await states.blocklet.setBlockletStatus(did, BlockletStatus.stopping, { componentDids });
|
|
616
|
+
const doc = await states.blocklet.setBlockletStatus(did, BlockletStatus.stopping, { componentDids });
|
|
589
617
|
blocklet.status = BlockletStatus.stopping;
|
|
590
|
-
this.emit(BlockletEvents.statusChange,
|
|
618
|
+
this.emit(BlockletEvents.statusChange, doc);
|
|
591
619
|
}
|
|
592
620
|
|
|
593
621
|
try {
|
|
@@ -1994,6 +2022,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1994
2022
|
components: getComponentsInternalInfo(res),
|
|
1995
2023
|
});
|
|
1996
2024
|
|
|
2025
|
+
this.emit(BlockletEvents.statusChange, res);
|
|
1997
2026
|
this.emit(BlockletEvents.started, res);
|
|
1998
2027
|
logger.info('blocklet healthy', { did, name, time: Date.now() - startedAt });
|
|
1999
2028
|
} catch (error) {
|
|
@@ -2006,7 +2035,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2006
2035
|
logger.error('check blocklet if started failed', { did, name, context, timeout, error });
|
|
2007
2036
|
|
|
2008
2037
|
await this.deleteProcess({ did, componentDids }, context);
|
|
2009
|
-
await states.blocklet.setBlockletStatus(did, BlockletStatus.error, { componentDids });
|
|
2038
|
+
const doc = await states.blocklet.setBlockletStatus(did, BlockletStatus.error, { componentDids });
|
|
2010
2039
|
|
|
2011
2040
|
this._createNotification(did, {
|
|
2012
2041
|
title: 'Blocklet Start Failed',
|
|
@@ -2017,6 +2046,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2017
2046
|
});
|
|
2018
2047
|
|
|
2019
2048
|
this.emit(BlockletEvents.startFailed, { meta, error });
|
|
2049
|
+
this.emit(BlockletEvents.statusChange, { ...doc, error });
|
|
2020
2050
|
|
|
2021
2051
|
if (throwOnError) {
|
|
2022
2052
|
throw error;
|
|
@@ -25,6 +25,7 @@ const { BaseRestore } = require('./base');
|
|
|
25
25
|
const { BlockletExtrasRestore } = require('./blocklet-extras');
|
|
26
26
|
const { BlockletRestore } = require('./blocklet');
|
|
27
27
|
const { BlockletsRestore } = require('./blocklets');
|
|
28
|
+
const states = require('../../../states');
|
|
28
29
|
|
|
29
30
|
class SpacesRestore extends BaseRestore {
|
|
30
31
|
/**
|
|
@@ -105,6 +106,11 @@ class SpacesRestore extends BaseRestore {
|
|
|
105
106
|
|
|
106
107
|
async syncFromSpaces() {
|
|
107
108
|
const { endpoint, wallet, delegation } = this.input;
|
|
109
|
+
/**
|
|
110
|
+
* @type {import('@abtnode/client').NodeState}
|
|
111
|
+
*/
|
|
112
|
+
const node = await states.node.read();
|
|
113
|
+
const serverDid = node.did;
|
|
108
114
|
|
|
109
115
|
const spaceClient = new SpaceClient({
|
|
110
116
|
endpoint,
|
|
@@ -131,6 +137,7 @@ class SpacesRestore extends BaseRestore {
|
|
|
131
137
|
|
|
132
138
|
userDid: this.input.userDid,
|
|
133
139
|
referrer: this.input.referrer,
|
|
140
|
+
serverDid,
|
|
134
141
|
})
|
|
135
142
|
);
|
|
136
143
|
|
package/lib/router/helper.js
CHANGED
|
@@ -19,7 +19,7 @@ const downloadFile = require('@abtnode/util/lib/download-file');
|
|
|
19
19
|
const { updateBlockletDocument } = require('@abtnode/util/lib/did-document');
|
|
20
20
|
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
21
21
|
const { forEachBlockletSync } = require('@blocklet/meta/lib/util');
|
|
22
|
-
const { processLogByDate } = require('@abtnode/
|
|
22
|
+
const { processLogByDate } = require('@abtnode/analytics');
|
|
23
23
|
const {
|
|
24
24
|
DOMAIN_FOR_DEFAULT_SITE,
|
|
25
25
|
DOMAIN_FOR_IP_SITE_REGEXP,
|
|
@@ -39,6 +39,7 @@ const {
|
|
|
39
39
|
WELLKNOWN_ACME_CHALLENGE_PREFIX,
|
|
40
40
|
WELLKNOWN_DID_RESOLVER_PREFIX,
|
|
41
41
|
WELLKNOWN_PING_PREFIX,
|
|
42
|
+
WELLKNOWN_ANALYTICS_PREFIX,
|
|
42
43
|
LOG_RETAIN_IN_DAYS,
|
|
43
44
|
EVENTS,
|
|
44
45
|
DEFAULT_IP_DOMAIN,
|
|
@@ -54,8 +55,9 @@ const {
|
|
|
54
55
|
BLOCKLET_MODES,
|
|
55
56
|
} = require('@blocklet/constant');
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
const pkg = require('../../package.json');
|
|
59
|
+
// eslint-disable-next-line
|
|
60
|
+
const logger = require('@abtnode/logger')(`${pkg.name}:router:helper`);
|
|
59
61
|
const {
|
|
60
62
|
getProviderFromNodeInfo,
|
|
61
63
|
getHttpsCertInfo,
|
|
@@ -79,6 +81,32 @@ const isServiceFeDevelopment = process.env.ABT_NODE_SERVICE_FE_PORT;
|
|
|
79
81
|
|
|
80
82
|
const hasRuleByPrefix = (site, value) => site.rules.find((x) => x.isProtected && get(x, 'from.pathPrefix') === value);
|
|
81
83
|
|
|
84
|
+
const pingWellknownRule = {
|
|
85
|
+
isProtected: true,
|
|
86
|
+
from: { pathPrefix: WELLKNOWN_PING_PREFIX },
|
|
87
|
+
to: {
|
|
88
|
+
type: ROUTING_RULE_TYPES.DIRECT_RESPONSE,
|
|
89
|
+
response: {
|
|
90
|
+
status: 200,
|
|
91
|
+
contentType: 'application/javascript',
|
|
92
|
+
body: "'pong'",
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const analyticsWellknownRule = {
|
|
98
|
+
isProtected: true,
|
|
99
|
+
from: { pathPrefix: WELLKNOWN_ANALYTICS_PREFIX },
|
|
100
|
+
to: {
|
|
101
|
+
type: ROUTING_RULE_TYPES.DIRECT_RESPONSE,
|
|
102
|
+
response: {
|
|
103
|
+
status: 200,
|
|
104
|
+
contentType: 'text/html',
|
|
105
|
+
body: pkg.version,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
82
110
|
/**
|
|
83
111
|
* replace 888-888-888-888 with accessible ip for domain
|
|
84
112
|
*/
|
|
@@ -796,46 +824,12 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
796
824
|
to: proxyTarget,
|
|
797
825
|
};
|
|
798
826
|
|
|
799
|
-
const pingWellknownRule = {
|
|
800
|
-
isProtected: true,
|
|
801
|
-
from: { pathPrefix: WELLKNOWN_PING_PREFIX },
|
|
802
|
-
to: {
|
|
803
|
-
type: ROUTING_RULE_TYPES.DIRECT_RESPONSE,
|
|
804
|
-
response: {
|
|
805
|
-
status: 200,
|
|
806
|
-
contentType: 'application/javascript',
|
|
807
|
-
body: "'pong'",
|
|
808
|
-
},
|
|
809
|
-
port: info.port,
|
|
810
|
-
},
|
|
811
|
-
};
|
|
812
|
-
|
|
813
827
|
if (site) {
|
|
814
|
-
const didResolverRuleUpdateRes = await upsertSiteRule(
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
context
|
|
820
|
-
);
|
|
821
|
-
|
|
822
|
-
const acmeRuleUpdateRes = await upsertSiteRule(
|
|
823
|
-
{
|
|
824
|
-
site,
|
|
825
|
-
rule: acmeChallengeWellknownRule,
|
|
826
|
-
},
|
|
827
|
-
context
|
|
828
|
-
);
|
|
829
|
-
|
|
830
|
-
const pingRuleRes = await upsertSiteRule(
|
|
831
|
-
{
|
|
832
|
-
site,
|
|
833
|
-
rule: pingWellknownRule,
|
|
834
|
-
},
|
|
835
|
-
context
|
|
836
|
-
);
|
|
837
|
-
|
|
838
|
-
return didResolverRuleUpdateRes || acmeRuleUpdateRes || pingRuleRes;
|
|
828
|
+
const didResolverRuleUpdateRes = await upsertSiteRule({ site, rule: didResolverWellknownRule }, context);
|
|
829
|
+
const acmeRuleUpdateRes = await upsertSiteRule({ site, rule: acmeChallengeWellknownRule }, context);
|
|
830
|
+
const pingRuleRes = await upsertSiteRule({ site, rule: pingWellknownRule }, context);
|
|
831
|
+
const analyticsRuleRes = await upsertSiteRule({ site, rule: analyticsWellknownRule }, context);
|
|
832
|
+
return didResolverRuleUpdateRes || acmeRuleUpdateRes || pingRuleRes || analyticsRuleRes;
|
|
839
833
|
}
|
|
840
834
|
|
|
841
835
|
await routerManager.addRoutingSite(
|
|
@@ -844,7 +838,7 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
844
838
|
domain: DOMAIN_FOR_INTERNAL_SITE,
|
|
845
839
|
port: await getWellknownSitePort(),
|
|
846
840
|
name: NAME_FOR_WELLKNOWN_SITE,
|
|
847
|
-
rules: [didResolverWellknownRule, acmeChallengeWellknownRule, pingWellknownRule],
|
|
841
|
+
rules: [didResolverWellknownRule, acmeChallengeWellknownRule, pingWellknownRule, analyticsWellknownRule],
|
|
848
842
|
isProtected: true,
|
|
849
843
|
},
|
|
850
844
|
skipCheckDynamicBlacklist: true,
|
|
@@ -911,13 +905,19 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
911
905
|
|
|
912
906
|
try {
|
|
913
907
|
const result = await siteState.update({ id: dashboardSite.id }, { $set: { domainAliases } });
|
|
914
|
-
|
|
915
908
|
updatedResult.push(result);
|
|
916
909
|
} catch (error) {
|
|
917
910
|
logger.error('add dashboard domain rule failed', { error });
|
|
918
911
|
console.error('Add dashboard domain rule failed:', error);
|
|
919
912
|
}
|
|
920
913
|
|
|
914
|
+
try {
|
|
915
|
+
const result = await upsertSiteRule({ site: dashboardSite, rule: analyticsWellknownRule }, context);
|
|
916
|
+
updatedResult.push(result);
|
|
917
|
+
} catch (error) {
|
|
918
|
+
logger.error('add dashboard analytics rule failed', { error });
|
|
919
|
+
}
|
|
920
|
+
|
|
921
921
|
const defaultRule = sites.find((x) => x.domain === DOMAIN_FOR_DEFAULT_SITE);
|
|
922
922
|
if (!defaultRule) {
|
|
923
923
|
try {
|
|
@@ -1293,7 +1293,9 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
1293
1293
|
}
|
|
1294
1294
|
|
|
1295
1295
|
const groups = [];
|
|
1296
|
-
const server = sites.find((x) =>
|
|
1296
|
+
const server = sites.find((x) =>
|
|
1297
|
+
x.rules.some((rule) => rule.to.type === ROUTING_RULE_TYPES.DAEMON && rule.to.did === info.did)
|
|
1298
|
+
);
|
|
1297
1299
|
if (server) {
|
|
1298
1300
|
groups.push({
|
|
1299
1301
|
did: info.did,
|
|
@@ -1312,12 +1314,13 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
1312
1314
|
hosts: site.domainAliases.map((d) => d.value).filter(Boolean),
|
|
1313
1315
|
});
|
|
1314
1316
|
});
|
|
1317
|
+
logger.info('Prepare analyze router logs', groups);
|
|
1315
1318
|
|
|
1316
1319
|
const logDir = providers[providerName].getLogDir();
|
|
1317
|
-
const doAnalyze = async (date) => {
|
|
1318
|
-
logger.info('Start analyze router logs', { date
|
|
1320
|
+
const doAnalyze = async (date, groupsRaw) => {
|
|
1321
|
+
logger.info('Start analyze router logs', { date });
|
|
1319
1322
|
try {
|
|
1320
|
-
let results = await processLogByDate(logDir, dataDirs.tmp, dataDirs.data, date,
|
|
1323
|
+
let results = await processLogByDate(logDir, dataDirs.tmp, dataDirs.data, date, groupsRaw);
|
|
1321
1324
|
logger.info('Done analyze router logs', { date, results });
|
|
1322
1325
|
|
|
1323
1326
|
results = await Promise.all(
|
|
@@ -1328,7 +1331,6 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
1328
1331
|
);
|
|
1329
1332
|
logger.info('Done insert insight results', { date, results });
|
|
1330
1333
|
} catch (err) {
|
|
1331
|
-
console.error(err);
|
|
1332
1334
|
logger.error('Failed to analyze router logs', { date, error: err });
|
|
1333
1335
|
}
|
|
1334
1336
|
};
|
|
@@ -1337,13 +1339,13 @@ module.exports = function getRouterHelpers({ dataDirs, routingSnapshot, routerMa
|
|
|
1337
1339
|
if (fs.existsSync(analyzeLock)) {
|
|
1338
1340
|
// FIXME: @wangshijun how do we support real time logs
|
|
1339
1341
|
const date = dayjs().subtract(1, 'day').format('YYYY-MM-DD');
|
|
1340
|
-
await doAnalyze(date);
|
|
1342
|
+
await doAnalyze(date, cloneDeep(groups));
|
|
1341
1343
|
} else {
|
|
1342
1344
|
fs.writeFileSync(analyzeLock, '1');
|
|
1343
1345
|
for (let i = 1; i <= 30; i++) {
|
|
1344
1346
|
const date = dayjs().subtract(i, 'day').format('YYYY-MM-DD');
|
|
1345
1347
|
// eslint-disable-next-line no-await-in-loop
|
|
1346
|
-
await doAnalyze(date);
|
|
1348
|
+
await doAnalyze(date, cloneDeep(groups));
|
|
1347
1349
|
}
|
|
1348
1350
|
}
|
|
1349
1351
|
};
|
package/lib/states/blocklet.js
CHANGED
|
@@ -519,12 +519,16 @@ class BlockletState extends BaseState {
|
|
|
519
519
|
const doc = await this.getBlocklet(did);
|
|
520
520
|
|
|
521
521
|
if (doc.meta?.group === BlockletGroup.gateway && !doc.children?.length) {
|
|
522
|
-
|
|
522
|
+
const res = await this.updateBlocklet(did, { status });
|
|
523
|
+
statusLock.release();
|
|
524
|
+
return res;
|
|
523
525
|
}
|
|
524
526
|
|
|
525
527
|
// for backward compatibility
|
|
526
528
|
if (!doc.structVersion && !doc.children?.length) {
|
|
527
|
-
|
|
529
|
+
const res = await this.updateBlocklet(did, { status });
|
|
530
|
+
statusLock.release();
|
|
531
|
+
return res;
|
|
528
532
|
}
|
|
529
533
|
|
|
530
534
|
// update children status
|
|
@@ -661,10 +665,10 @@ class BlockletState extends BaseState {
|
|
|
661
665
|
|
|
662
666
|
_getStatusLock(did) {
|
|
663
667
|
if (!this.statusLocks.has(did)) {
|
|
664
|
-
this.statusLocks
|
|
668
|
+
this.statusLocks.set(did, new Lock());
|
|
665
669
|
}
|
|
666
670
|
|
|
667
|
-
return this.statusLocks
|
|
671
|
+
return this.statusLocks.get(did);
|
|
668
672
|
}
|
|
669
673
|
|
|
670
674
|
async _getOccupiedPorts() {
|
package/lib/util/blocklet.js
CHANGED
|
@@ -570,7 +570,7 @@ const startBlockletProcess = async (
|
|
|
570
570
|
};
|
|
571
571
|
|
|
572
572
|
const clusterMode = get(b.meta, 'capabilities.clusterMode', false);
|
|
573
|
-
if (clusterMode &&
|
|
573
|
+
if (clusterMode && b.mode !== BLOCKLET_MODES.DEVELOPMENT) {
|
|
574
574
|
const clusterSize = Number(blocklet.configObj.BLOCKLET_CLUSTER_SIZE) || +process.env.ABT_NODE_MAX_CLUSTER_SIZE;
|
|
575
575
|
options.execMode = 'cluster';
|
|
576
576
|
options.mergeLogs = true;
|
package/lib/util/spaces.js
CHANGED
|
@@ -63,7 +63,9 @@ async function getSpaceNameByEndpoint(endpoint, defaultValue = '') {
|
|
|
63
63
|
timeout: 3000,
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
const spaceName = headers['x-space-name'];
|
|
67
|
+
|
|
68
|
+
return spaceName ? decodeURIComponent(spaceName) : defaultValue;
|
|
67
69
|
} catch (error) {
|
|
68
70
|
console.error(error);
|
|
69
71
|
return defaultValue;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.13-beta-
|
|
6
|
+
"version": "1.16.13-beta-ef672597",
|
|
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/
|
|
23
|
-
"@abtnode/
|
|
24
|
-
"@abtnode/
|
|
25
|
-
"@abtnode/
|
|
26
|
-
"@abtnode/
|
|
27
|
-
"@abtnode/logger": "1.16.13-beta-
|
|
28
|
-
"@abtnode/models": "1.16.13-beta-
|
|
29
|
-
"@abtnode/queue": "1.16.13-beta-
|
|
30
|
-
"@abtnode/rbac": "1.16.13-beta-
|
|
31
|
-
"@abtnode/router-provider": "1.16.13-beta-
|
|
32
|
-
"@abtnode/static-server": "1.16.13-beta-
|
|
33
|
-
"@abtnode/timemachine": "1.16.13-beta-
|
|
34
|
-
"@abtnode/util": "1.16.13-beta-
|
|
22
|
+
"@abtnode/analytics": "1.16.13-beta-ef672597",
|
|
23
|
+
"@abtnode/auth": "1.16.13-beta-ef672597",
|
|
24
|
+
"@abtnode/certificate-manager": "1.16.13-beta-ef672597",
|
|
25
|
+
"@abtnode/constant": "1.16.13-beta-ef672597",
|
|
26
|
+
"@abtnode/cron": "1.16.13-beta-ef672597",
|
|
27
|
+
"@abtnode/logger": "1.16.13-beta-ef672597",
|
|
28
|
+
"@abtnode/models": "1.16.13-beta-ef672597",
|
|
29
|
+
"@abtnode/queue": "1.16.13-beta-ef672597",
|
|
30
|
+
"@abtnode/rbac": "1.16.13-beta-ef672597",
|
|
31
|
+
"@abtnode/router-provider": "1.16.13-beta-ef672597",
|
|
32
|
+
"@abtnode/static-server": "1.16.13-beta-ef672597",
|
|
33
|
+
"@abtnode/timemachine": "1.16.13-beta-ef672597",
|
|
34
|
+
"@abtnode/util": "1.16.13-beta-ef672597",
|
|
35
35
|
"@arcblock/did": "1.18.84",
|
|
36
36
|
"@arcblock/did-auth": "1.18.84",
|
|
37
37
|
"@arcblock/did-ext": "^1.18.84",
|
|
@@ -42,11 +42,11 @@
|
|
|
42
42
|
"@arcblock/pm2-events": "^0.0.5",
|
|
43
43
|
"@arcblock/validator": "^1.18.84",
|
|
44
44
|
"@arcblock/vc": "1.18.84",
|
|
45
|
-
"@blocklet/constant": "1.16.13-beta-
|
|
46
|
-
"@blocklet/meta": "1.16.13-beta-
|
|
47
|
-
"@blocklet/resolver": "1.16.13-beta-
|
|
48
|
-
"@blocklet/sdk": "1.16.13-beta-
|
|
49
|
-
"@did-space/client": "^0.2.
|
|
45
|
+
"@blocklet/constant": "1.16.13-beta-ef672597",
|
|
46
|
+
"@blocklet/meta": "1.16.13-beta-ef672597",
|
|
47
|
+
"@blocklet/resolver": "1.16.13-beta-ef672597",
|
|
48
|
+
"@blocklet/sdk": "1.16.13-beta-ef672597",
|
|
49
|
+
"@did-space/client": "^0.2.124",
|
|
50
50
|
"@fidm/x509": "^1.2.1",
|
|
51
51
|
"@ocap/mcrypto": "1.18.84",
|
|
52
52
|
"@ocap/util": "1.18.84",
|
|
@@ -96,5 +96,5 @@
|
|
|
96
96
|
"express": "^4.18.2",
|
|
97
97
|
"jest": "^27.5.1"
|
|
98
98
|
},
|
|
99
|
-
"gitHead": "
|
|
99
|
+
"gitHead": "ed5abea5072dee26860ed43139bfee17461b19a1"
|
|
100
100
|
}
|