@abtnode/core 1.16.8-next-f9099675 → 1.16.8-next-e7fab584
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/blocklet/downloader/blocklet-downloader.js +11 -2
- package/lib/blocklet/downloader/bundle-downloader.js +37 -3
- package/lib/blocklet/downloader/resolve-download.js +7 -1
- package/lib/blocklet/manager/disk.js +5 -1
- package/lib/blocklet/manager/helper/install-application-from-backup.js +10 -1
- package/lib/blocklet/manager/helper/install-component-from-upload.js +1 -2
- package/lib/crons/monitor-disk-usage.js +4 -0
- package/lib/event.js +1 -0
- package/lib/index.js +17 -16
- package/lib/migrations/1.16.6-chain-info.js +1 -1
- package/lib/states/access-key.js +1 -1
- package/lib/states/base.js +1 -1
- package/lib/states/blocklet-extras.js +1 -1
- package/lib/states/blocklet.js +1 -1
- package/lib/states/index.js +2 -1
- package/lib/states/node.js +1 -1
- package/lib/util/sysinfo.js +1 -1
- package/package.json +28 -28
|
@@ -2,6 +2,7 @@ const { EventEmitter } = require('events');
|
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const get = require('lodash/get');
|
|
5
|
+
const pick = require('lodash/pick');
|
|
5
6
|
const { toBase58 } = require('@ocap/util');
|
|
6
7
|
|
|
7
8
|
const defaultLogger = require('@abtnode/logger')('@abtnode/core:blocklet-downloader');
|
|
@@ -119,6 +120,7 @@ class BlockletDownloader extends EventEmitter {
|
|
|
119
120
|
* @param {{
|
|
120
121
|
* preDownload: ({ downloadList: Array<meta>, downloadComponentIds: Array<string> }) => any
|
|
121
122
|
* postDownload: ({ downloadList: Array<meta>, downloadComponentIds: Array<string>, isCancelled: boolean }) => any
|
|
123
|
+
* onProgress: ({ step?: string, ...extras }) => any
|
|
122
124
|
* skipCheckIntegrity: boolean
|
|
123
125
|
* }} [options={}]
|
|
124
126
|
* @return {*}
|
|
@@ -130,7 +132,7 @@ class BlockletDownloader extends EventEmitter {
|
|
|
130
132
|
|
|
131
133
|
this.logger.info('Download Blocklet', { name, did });
|
|
132
134
|
|
|
133
|
-
const { preDownload = () => {}, postDownload = () => {}, skipCheckIntegrity } = options;
|
|
135
|
+
const { preDownload = () => {}, postDownload = () => {}, skipCheckIntegrity, onProgress = () => {} } = options;
|
|
134
136
|
|
|
135
137
|
const { downloadComponentIds, downloadList } = await this.getDownloadList({
|
|
136
138
|
blocklet,
|
|
@@ -148,7 +150,14 @@ class BlockletDownloader extends EventEmitter {
|
|
|
148
150
|
const tasks = [];
|
|
149
151
|
for (const meta of downloadList) {
|
|
150
152
|
const url = meta.dist.tarball;
|
|
151
|
-
tasks.push(
|
|
153
|
+
tasks.push(
|
|
154
|
+
this.bundleDownloader.download(meta, did, url, {
|
|
155
|
+
...options,
|
|
156
|
+
onProgress: (data) => {
|
|
157
|
+
onProgress({ ...data, component: pick(meta, ['title', 'name', 'did', 'version']) });
|
|
158
|
+
},
|
|
159
|
+
})
|
|
160
|
+
);
|
|
152
161
|
}
|
|
153
162
|
const results = await Promise.all(tasks);
|
|
154
163
|
|
|
@@ -66,12 +66,15 @@ class BundleDownloader extends EventEmitter {
|
|
|
66
66
|
this.downloadLocks[lockName] = lock;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
const onProgress = context.onProgress || (() => {});
|
|
70
|
+
|
|
69
71
|
try {
|
|
70
72
|
await lock.acquire();
|
|
71
73
|
this.logger.info('downloaded blocklet for installing', { name, version, tarball, integrity });
|
|
72
74
|
const cwd = path.join(this.downloadDir, 'download', name);
|
|
73
75
|
await fs.ensureDir(cwd);
|
|
74
76
|
this.logger.info('start download blocklet', { name, version, cwd, tarball, integrity });
|
|
77
|
+
onProgress({ status: 'downloading' });
|
|
75
78
|
const tarballPath = await this._downloadTarball({
|
|
76
79
|
name,
|
|
77
80
|
did,
|
|
@@ -84,6 +87,7 @@ class BundleDownloader extends EventEmitter {
|
|
|
84
87
|
rootDid,
|
|
85
88
|
url,
|
|
86
89
|
context,
|
|
90
|
+
onProgress,
|
|
87
91
|
});
|
|
88
92
|
this.logger.info('downloaded blocklet tar file', { name, version, tarballPath });
|
|
89
93
|
if (tarballPath === downloadFile.CANCEL) {
|
|
@@ -92,7 +96,13 @@ class BundleDownloader extends EventEmitter {
|
|
|
92
96
|
}
|
|
93
97
|
|
|
94
98
|
// resolve tarball and mv tarball to cache after resolved
|
|
95
|
-
await resolveDownload(tarballPath, this.installDir, {
|
|
99
|
+
await resolveDownload(tarballPath, this.installDir, {
|
|
100
|
+
removeTarFile: false,
|
|
101
|
+
onProgress: ({ name: _name }) => {
|
|
102
|
+
onProgress({ status: 'extracting', name: _name });
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
onProgress({ status: 'completed' });
|
|
96
106
|
await this._addCacheTarFile(tarballPath, integrity, getComponentBundleId({ meta }));
|
|
97
107
|
|
|
98
108
|
this.logger.info('resolved blocklet tar file to install dir', { name, version });
|
|
@@ -130,7 +140,18 @@ class BundleDownloader extends EventEmitter {
|
|
|
130
140
|
* @return {*}
|
|
131
141
|
* @memberof BlockletManager
|
|
132
142
|
*/
|
|
133
|
-
async _downloadTarball({
|
|
143
|
+
async _downloadTarball({
|
|
144
|
+
url,
|
|
145
|
+
cwd,
|
|
146
|
+
tarball,
|
|
147
|
+
did,
|
|
148
|
+
integrity,
|
|
149
|
+
verify = true,
|
|
150
|
+
ctrlStore = {},
|
|
151
|
+
rootDid,
|
|
152
|
+
context = {},
|
|
153
|
+
onProgress = () => {},
|
|
154
|
+
}) {
|
|
134
155
|
fs.mkdirSync(cwd, { recursive: true });
|
|
135
156
|
|
|
136
157
|
const tarballName = url.split('/').slice(-1)[0];
|
|
@@ -172,7 +193,20 @@ class BundleDownloader extends EventEmitter {
|
|
|
172
193
|
headers['x-download-token'] = exist.token;
|
|
173
194
|
}
|
|
174
195
|
|
|
175
|
-
await downloadFile(
|
|
196
|
+
await downloadFile(
|
|
197
|
+
url,
|
|
198
|
+
path.join(cwd, tarballName),
|
|
199
|
+
{
|
|
200
|
+
cancelCtrl,
|
|
201
|
+
onProgress: ({ total, current }) => {
|
|
202
|
+
onProgress({ status: 'downloading', total, current });
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
...context,
|
|
207
|
+
headers,
|
|
208
|
+
}
|
|
209
|
+
);
|
|
176
210
|
|
|
177
211
|
if (ctrlStore[rootDid]) {
|
|
178
212
|
ctrlStore[rootDid].delete(did);
|
|
@@ -26,7 +26,7 @@ const asyncFs = fs.promises;
|
|
|
26
26
|
const resolveDownload = async (
|
|
27
27
|
tarFile,
|
|
28
28
|
dist,
|
|
29
|
-
{ cwd = '/', removeTarFile = true, logger = defaultLogger, originalMeta } = {}
|
|
29
|
+
{ cwd = '/', removeTarFile = true, logger = defaultLogger, originalMeta, onProgress } = {}
|
|
30
30
|
) => {
|
|
31
31
|
// eslint-disable-next-line no-param-reassign
|
|
32
32
|
tarFile = path.join(cwd, tarFile);
|
|
@@ -36,6 +36,9 @@ const resolveDownload = async (
|
|
|
36
36
|
const downloadDir = path.join(path.dirname(tarFile), path.basename(tarFile, path.extname(tarFile)));
|
|
37
37
|
const tmp = `${downloadDir}-tmp`;
|
|
38
38
|
try {
|
|
39
|
+
if (typeof onProgress === 'function') {
|
|
40
|
+
onProgress({ name: 'blocklet.tar.gz' });
|
|
41
|
+
}
|
|
39
42
|
await expandTarball({ source: tarFile, dest: tmp, strip: 0 });
|
|
40
43
|
} catch (error) {
|
|
41
44
|
logger.error('expand blocklet tar file error', { error });
|
|
@@ -78,6 +81,9 @@ const resolveDownload = async (
|
|
|
78
81
|
}
|
|
79
82
|
await validateBlockletEntry(downloadDir, meta);
|
|
80
83
|
|
|
84
|
+
if (typeof onProgress === 'function') {
|
|
85
|
+
onProgress({ name: 'blocklet.zip' });
|
|
86
|
+
}
|
|
81
87
|
await ensureBlockletExpanded(meta, downloadDir);
|
|
82
88
|
|
|
83
89
|
installDir = getBundleDir(dist, meta);
|
|
@@ -2118,7 +2118,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2118
2118
|
|
|
2119
2119
|
if (level === 0) {
|
|
2120
2120
|
component.diskInfo = await getDiskInfo(component, {
|
|
2121
|
-
useFakeDiskInfo: !diskInfo,
|
|
2121
|
+
useFakeDiskInfo: !diskInfo || isBeforeInstalled(component.status),
|
|
2122
2122
|
});
|
|
2123
2123
|
}
|
|
2124
2124
|
|
|
@@ -2504,6 +2504,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2504
2504
|
*/
|
|
2505
2505
|
async _downloadBlocklet(blocklet, context = {}) {
|
|
2506
2506
|
const {
|
|
2507
|
+
appDid,
|
|
2507
2508
|
meta: { did },
|
|
2508
2509
|
} = blocklet;
|
|
2509
2510
|
|
|
@@ -2516,6 +2517,9 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2516
2517
|
});
|
|
2517
2518
|
this.emit(BlockletEvents.statusChange, blocklet1);
|
|
2518
2519
|
},
|
|
2520
|
+
onProgress: async (data) => {
|
|
2521
|
+
this.emit(BlockletEvents.downloadBundleProgress, { appDid: appDid || did, meta: { did }, ...data });
|
|
2522
|
+
},
|
|
2519
2523
|
postDownload: async ({ isCancelled }) => {
|
|
2520
2524
|
if (!isCancelled) {
|
|
2521
2525
|
// since preferences only exist in blocklet bundle, we need to populate then after downloaded
|
|
@@ -196,7 +196,12 @@ const installApplicationFromBackup = async ({
|
|
|
196
196
|
try {
|
|
197
197
|
logger.info('start download blocklet', { did });
|
|
198
198
|
// 从 store 下载 blocklet
|
|
199
|
-
await manager.blockletDownloader.download(blockletState, {
|
|
199
|
+
await manager.blockletDownloader.download(blockletState, {
|
|
200
|
+
skipCheckIntegrity: true,
|
|
201
|
+
onProgress: async (data) => {
|
|
202
|
+
manager.emit(BlockletEvents.downloadBundleProgress, { appDid: wallet.address, meta: { did }, ...data });
|
|
203
|
+
},
|
|
204
|
+
});
|
|
200
205
|
} catch (error) {
|
|
201
206
|
logger.error('download blocklet failed', { did, error });
|
|
202
207
|
|
|
@@ -205,6 +210,10 @@ const installApplicationFromBackup = async ({
|
|
|
205
210
|
throw error;
|
|
206
211
|
}
|
|
207
212
|
logger.info('start install blocklet', { did });
|
|
213
|
+
|
|
214
|
+
const state = await states.blocklet.setBlockletStatus(did, BlockletStatus.installing);
|
|
215
|
+
manager.emit(BlockletEvents.statusChange, state);
|
|
216
|
+
|
|
208
217
|
return manager._installBlocklet({ did, context });
|
|
209
218
|
}
|
|
210
219
|
|
|
@@ -87,9 +87,8 @@ const installComponentFromUpload = async ({
|
|
|
87
87
|
};
|
|
88
88
|
const index = newBlocklet.children.findIndex((child) => child.meta.did === meta.did);
|
|
89
89
|
if (index >= 0) {
|
|
90
|
-
// if upgrade, do not update mountPoint
|
|
90
|
+
// if upgrade, do not update mountPoint
|
|
91
91
|
newChild.mountPoint = newBlocklet.children[index].mountPoint;
|
|
92
|
-
newChild.meta.title = newBlocklet.children[index].meta.title;
|
|
93
92
|
newBlocklet.children.splice(index, 1, newChild);
|
|
94
93
|
} else {
|
|
95
94
|
newBlocklet.children.push(newChild);
|
|
@@ -10,6 +10,10 @@ const check = async (threshold) => {
|
|
|
10
10
|
const { disks } = await info.getSysInfo();
|
|
11
11
|
for (const disk of disks) {
|
|
12
12
|
const usageRatio = (disk.used / disk.total) * 100;
|
|
13
|
+
if (Number.isNaN(usageRatio)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
13
17
|
const usageRatioPercent = `${usageRatio.toFixed(2)}%`;
|
|
14
18
|
logger.info('check disk usage', { usage: usageRatioPercent, threshold });
|
|
15
19
|
|
package/lib/event.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -523,24 +523,25 @@ function ABTNode(options) {
|
|
|
523
523
|
};
|
|
524
524
|
|
|
525
525
|
if (options.daemon) {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
526
|
+
onStatesReady(() => {
|
|
527
|
+
// start cert manager
|
|
528
|
+
certManager
|
|
529
|
+
.start()
|
|
530
|
+
.then(() => logger.info('Certificate manager service start successfully'))
|
|
531
|
+
.catch((error) => logger.error('Certificate manager service start failed', { error }));
|
|
532
|
+
|
|
533
|
+
// start jobs
|
|
533
534
|
setTimeout(() => {
|
|
534
|
-
|
|
535
|
+
if (process.env.NODE_ENV === 'development') {
|
|
536
|
+
initCron();
|
|
537
|
+
} else {
|
|
538
|
+
pm2Events.resume();
|
|
539
|
+
initCron();
|
|
540
|
+
createCLILog('startServer');
|
|
541
|
+
logger.info('Cron jobs start successfully on daemon start');
|
|
542
|
+
}
|
|
535
543
|
}, 1000);
|
|
536
|
-
}
|
|
537
|
-
// We should only respond to pm2 events when node is alive
|
|
538
|
-
events.on(EVENTS.NODE_STARTED, () => {
|
|
539
|
-
pm2Events.resume();
|
|
540
|
-
initCron();
|
|
541
|
-
createCLILog('startServer');
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
+
});
|
|
544
545
|
}
|
|
545
546
|
|
|
546
547
|
events.on(EVENTS.NODE_STOPPED, () => {
|
|
@@ -71,7 +71,7 @@ module.exports = async ({ states, printInfo }) => {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
if (shouldUpdate) {
|
|
74
|
-
await states.blockletExtras.update({
|
|
74
|
+
await states.blockletExtras.update({ did: extra.did }, { $set: { configs: appConfigs } });
|
|
75
75
|
printInfo(`Blocklet in blocklet_extra.db updated: ${extra.did}`);
|
|
76
76
|
}
|
|
77
77
|
}
|
package/lib/states/access-key.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const get = require('lodash/get');
|
|
2
2
|
const { fromRandom } = require('@ocap/wallet');
|
|
3
3
|
const { toBase58 } = require('@ocap/util');
|
|
4
|
-
const logger = require('@abtnode/logger')('@abtnode/core:access-key');
|
|
4
|
+
const logger = require('@abtnode/logger')('@abtnode/core:states:access-key');
|
|
5
5
|
const BaseState = require('./base');
|
|
6
6
|
|
|
7
7
|
const validateRemark = (remark) => {
|
package/lib/states/base.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable function-paren-newline */
|
|
2
2
|
/* eslint-disable no-underscore-dangle */
|
|
3
3
|
/* eslint-disable consistent-return */
|
|
4
|
-
const logger = require('@abtnode/logger')('
|
|
4
|
+
const logger = require('@abtnode/logger')('@abtnode/core:states:blocklet-extras');
|
|
5
5
|
const { EXPIRED_BLOCKLET_DATA_RETENTION_DAYS } = require('@abtnode/constant');
|
|
6
6
|
const camelCase = require('lodash/camelCase');
|
|
7
7
|
const get = require('lodash/get');
|
package/lib/states/blocklet.js
CHANGED
|
@@ -19,7 +19,7 @@ const {
|
|
|
19
19
|
const { BlockletStatus, BlockletSource, BLOCKLET_MODES, BLOCKLET_DEFAULT_PORT_NAME } = require('@blocklet/constant');
|
|
20
20
|
const { APP_STRUCT_VERSION } = require('@abtnode/constant');
|
|
21
21
|
|
|
22
|
-
const logger = require('@abtnode/logger')('
|
|
22
|
+
const logger = require('@abtnode/logger')('@abtnode/core:states:blocklet');
|
|
23
23
|
|
|
24
24
|
const BaseState = require('./base');
|
|
25
25
|
const { checkDuplicateComponents, ensureMeta } = require('../util/blocklet');
|
package/lib/states/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
const { createSequelize, createStateFactory, getServerModels, setupModels } = require('@abtnode/models');
|
|
3
|
+
const logger = require('@abtnode/logger')('@abtnode/core:states');
|
|
3
4
|
|
|
4
5
|
const NodeState = require('./node');
|
|
5
6
|
const BlockletState = require('./blocklet');
|
|
@@ -22,7 +23,7 @@ const init = (dataDirs, config = {}) => {
|
|
|
22
23
|
const dbPath = getDbFilePath(path.join(dataDirs.core, 'server.db'));
|
|
23
24
|
const sequelize = createSequelize(dbPath);
|
|
24
25
|
setupModels(models, sequelize);
|
|
25
|
-
|
|
26
|
+
logger.info(`Init server states in ${dbPath}`);
|
|
26
27
|
|
|
27
28
|
const notificationState = new NotificationState(models.Notification, config);
|
|
28
29
|
const nodeState = new NodeState(models.Server, config, dataDirs, notificationState);
|
package/lib/states/node.js
CHANGED
|
@@ -5,7 +5,7 @@ const isEmpty = require('lodash/isEmpty');
|
|
|
5
5
|
const security = require('@abtnode/util/lib/security');
|
|
6
6
|
const { isFromPublicKey } = require('@arcblock/did');
|
|
7
7
|
const { NODE_MODES, DISK_ALERT_THRESHOLD_PERCENT, EVENTS, SERVER_STATUS } = require('@abtnode/constant');
|
|
8
|
-
// const logger = require('@abtnode/logger')('@abtnode/core:node');
|
|
8
|
+
// const logger = require('@abtnode/logger')('@abtnode/core:states:node');
|
|
9
9
|
|
|
10
10
|
const BaseState = require('./base');
|
|
11
11
|
const { validateOwner } = require('../util');
|
package/lib/util/sysinfo.js
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.8-next-
|
|
6
|
+
"version": "1.16.8-next-e7fab584",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -19,36 +19,36 @@
|
|
|
19
19
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@abtnode/auth": "1.16.8-next-
|
|
23
|
-
"@abtnode/certificate-manager": "1.16.8-next-
|
|
24
|
-
"@abtnode/constant": "1.16.8-next-
|
|
25
|
-
"@abtnode/cron": "1.16.8-next-
|
|
26
|
-
"@abtnode/logger": "1.16.8-next-
|
|
27
|
-
"@abtnode/models": "1.16.8-next-
|
|
28
|
-
"@abtnode/queue": "1.16.8-next-
|
|
29
|
-
"@abtnode/rbac": "1.16.8-next-
|
|
30
|
-
"@abtnode/router-provider": "1.16.8-next-
|
|
31
|
-
"@abtnode/static-server": "1.16.8-next-
|
|
32
|
-
"@abtnode/timemachine": "1.16.8-next-
|
|
33
|
-
"@abtnode/util": "1.16.8-next-
|
|
34
|
-
"@arcblock/did": "1.18.
|
|
35
|
-
"@arcblock/did-auth": "1.18.
|
|
36
|
-
"@arcblock/did-ext": "^1.18.
|
|
22
|
+
"@abtnode/auth": "1.16.8-next-e7fab584",
|
|
23
|
+
"@abtnode/certificate-manager": "1.16.8-next-e7fab584",
|
|
24
|
+
"@abtnode/constant": "1.16.8-next-e7fab584",
|
|
25
|
+
"@abtnode/cron": "1.16.8-next-e7fab584",
|
|
26
|
+
"@abtnode/logger": "1.16.8-next-e7fab584",
|
|
27
|
+
"@abtnode/models": "1.16.8-next-e7fab584",
|
|
28
|
+
"@abtnode/queue": "1.16.8-next-e7fab584",
|
|
29
|
+
"@abtnode/rbac": "1.16.8-next-e7fab584",
|
|
30
|
+
"@abtnode/router-provider": "1.16.8-next-e7fab584",
|
|
31
|
+
"@abtnode/static-server": "1.16.8-next-e7fab584",
|
|
32
|
+
"@abtnode/timemachine": "1.16.8-next-e7fab584",
|
|
33
|
+
"@abtnode/util": "1.16.8-next-e7fab584",
|
|
34
|
+
"@arcblock/did": "1.18.80",
|
|
35
|
+
"@arcblock/did-auth": "1.18.80",
|
|
36
|
+
"@arcblock/did-ext": "^1.18.80",
|
|
37
37
|
"@arcblock/did-motif": "^1.1.10",
|
|
38
|
-
"@arcblock/did-util": "1.18.
|
|
39
|
-
"@arcblock/event-hub": "1.18.
|
|
40
|
-
"@arcblock/jwt": "^1.18.
|
|
38
|
+
"@arcblock/did-util": "1.18.80",
|
|
39
|
+
"@arcblock/event-hub": "1.18.80",
|
|
40
|
+
"@arcblock/jwt": "^1.18.80",
|
|
41
41
|
"@arcblock/pm2-events": "^0.0.5",
|
|
42
|
-
"@arcblock/validator": "^1.18.
|
|
43
|
-
"@arcblock/vc": "1.18.
|
|
44
|
-
"@blocklet/constant": "1.16.8-next-
|
|
45
|
-
"@blocklet/meta": "1.16.8-next-
|
|
46
|
-
"@blocklet/sdk": "1.16.8-next-
|
|
42
|
+
"@arcblock/validator": "^1.18.80",
|
|
43
|
+
"@arcblock/vc": "1.18.80",
|
|
44
|
+
"@blocklet/constant": "1.16.8-next-e7fab584",
|
|
45
|
+
"@blocklet/meta": "1.16.8-next-e7fab584",
|
|
46
|
+
"@blocklet/sdk": "1.16.8-next-e7fab584",
|
|
47
47
|
"@did-space/client": "^0.2.91",
|
|
48
48
|
"@fidm/x509": "^1.2.1",
|
|
49
|
-
"@ocap/mcrypto": "1.18.
|
|
50
|
-
"@ocap/util": "1.18.
|
|
51
|
-
"@ocap/wallet": "1.18.
|
|
49
|
+
"@ocap/mcrypto": "1.18.80",
|
|
50
|
+
"@ocap/util": "1.18.80",
|
|
51
|
+
"@ocap/wallet": "1.18.80",
|
|
52
52
|
"@slack/webhook": "^5.0.4",
|
|
53
53
|
"archiver": "^5.3.1",
|
|
54
54
|
"axios": "^0.27.2",
|
|
@@ -96,5 +96,5 @@
|
|
|
96
96
|
"express": "^4.18.2",
|
|
97
97
|
"jest": "^27.5.1"
|
|
98
98
|
},
|
|
99
|
-
"gitHead": "
|
|
99
|
+
"gitHead": "65d5a71c762d73765befe957e3361a2570dc9882"
|
|
100
100
|
}
|