@abtnode/core 1.16.20-beta-28c66e0b → 1.16.20-beta-9c254d14
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/project/index.js +32 -5
- package/lib/cert.js +79 -70
- package/lib/event/index.js +15 -0
- package/lib/router/manager.js +17 -5
- package/package.json +21 -21
|
@@ -101,6 +101,24 @@ const deleteRelease = async ({ did, projectId, releaseId, manager }) => {
|
|
|
101
101
|
await fs.remove(releaseDir);
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
+
const checkResourceExists = async (projectDir, action, releaseId) => {
|
|
105
|
+
const releaseDir =
|
|
106
|
+
action === 'create'
|
|
107
|
+
? path.join(projectDir, PROJECT.RESOURCE_DIR)
|
|
108
|
+
: path.join(projectDir, PROJECT.RELEASE_DIR, `${releaseId}`, PROJECT.RESOURCE_DIR);
|
|
109
|
+
|
|
110
|
+
const configDir = path.join(releaseDir, COMPONENT_CONFIG_MAP_DIR);
|
|
111
|
+
const errMsg = 'resource should not be empty';
|
|
112
|
+
if (!fs.existsSync(configDir)) {
|
|
113
|
+
throw new Error(errMsg);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const files = await fs.readdir(configDir);
|
|
117
|
+
if (!files.length) {
|
|
118
|
+
throw new Error(errMsg);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
104
122
|
const createRelease = async ({
|
|
105
123
|
did,
|
|
106
124
|
projectId,
|
|
@@ -164,6 +182,12 @@ const createRelease = async ({
|
|
|
164
182
|
|
|
165
183
|
params.blockletDid = blockletDid;
|
|
166
184
|
|
|
185
|
+
const projectDir = path.join(blocklet.env.dataDir, PROJECT.DIR, `${projectId}`);
|
|
186
|
+
|
|
187
|
+
if (status !== PROJECT.RELEASE_STATUS.draft) {
|
|
188
|
+
await checkResourceExists(projectDir, action, releaseId);
|
|
189
|
+
}
|
|
190
|
+
|
|
167
191
|
const release = await releaseState.upsertRelease({
|
|
168
192
|
...params,
|
|
169
193
|
projectId,
|
|
@@ -174,7 +198,6 @@ const createRelease = async ({
|
|
|
174
198
|
|
|
175
199
|
const _releaseId = release.id;
|
|
176
200
|
|
|
177
|
-
const projectDir = path.join(blocklet.env.dataDir, PROJECT.DIR, `${projectId}`);
|
|
178
201
|
const tmpDir = path.join(manager.dataDirs.tmp, PROJECT.DIR, `${blockletDid}-${createRandomStr()}`);
|
|
179
202
|
const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
|
|
180
203
|
const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
|
|
@@ -251,7 +274,9 @@ const createRelease = async ({
|
|
|
251
274
|
|
|
252
275
|
// create resource
|
|
253
276
|
await fs.ensureDir(resourceDir);
|
|
254
|
-
|
|
277
|
+
const tmpBundleResourceDir = path.join(tmpBundleDir, 'resource');
|
|
278
|
+
await fs.copy(resourceDir, tmpBundleResourceDir);
|
|
279
|
+
await fs.remove(path.join(tmpBundleResourceDir, COMPONENT_CONFIG_MAP_DIR));
|
|
255
280
|
|
|
256
281
|
// create blocklet.yml
|
|
257
282
|
const resourceList = await fs.readdir(resourceDir);
|
|
@@ -267,7 +292,7 @@ const createRelease = async ({
|
|
|
267
292
|
logo: logoFileName,
|
|
268
293
|
resources: resourcesPaths.length ? resourcesPaths : undefined,
|
|
269
294
|
components: [],
|
|
270
|
-
files: ['screenshots'],
|
|
295
|
+
files: project.blockletScreenshots?.length ? ['screenshots'] : [],
|
|
271
296
|
screenshots: project.blockletScreenshots || [],
|
|
272
297
|
};
|
|
273
298
|
await updateMetaFile(path.join(tmpBundleDir, BLOCKLET_META_FILE), meta);
|
|
@@ -362,8 +387,10 @@ const updateSelectedResources = async ({ did, projectId, releaseId, componentDid
|
|
|
362
387
|
await fs.remove(file);
|
|
363
388
|
}
|
|
364
389
|
|
|
365
|
-
|
|
366
|
-
|
|
390
|
+
if (resources.length) {
|
|
391
|
+
await fs.ensureDir(path.dirname(file));
|
|
392
|
+
await fs.outputJSON(file, resources);
|
|
393
|
+
}
|
|
367
394
|
};
|
|
368
395
|
|
|
369
396
|
module.exports = {
|
package/lib/cert.js
CHANGED
|
@@ -4,50 +4,6 @@ const logger = require('@abtnode/logger')('@abtnode/core:cert');
|
|
|
4
4
|
const { EVENTS } = require('@abtnode/constant');
|
|
5
5
|
const { BlockletEvents } = require('@blocklet/constant');
|
|
6
6
|
|
|
7
|
-
const onCertExpired = (cert, states) => {
|
|
8
|
-
logger.info('send certificate expire notification', { domain: cert.domain });
|
|
9
|
-
states.notification.create({
|
|
10
|
-
title: 'SSL Certificate Expired',
|
|
11
|
-
description: `Your SSL certificate for domain ${cert.domain} has expired, please update it in Blocklet Server`,
|
|
12
|
-
severity: 'error',
|
|
13
|
-
entityType: 'certificate',
|
|
14
|
-
entityId: cert.id,
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const onCertAboutExpire = (cert, states) => {
|
|
19
|
-
logger.info('send certificate about-expire notification', { domain: cert.domain });
|
|
20
|
-
states.notification.create({
|
|
21
|
-
title: 'SSL Certificate Expire Warning',
|
|
22
|
-
description: `Your SSL certificate for domain ${cert.domain} will expire in ${
|
|
23
|
-
cert.expireInDays
|
|
24
|
-
} days (on ${new Date(cert.validTo).toLocaleString()}), please remember to update it in Blocklet Server`,
|
|
25
|
-
severity: 'warning',
|
|
26
|
-
entityType: 'certificate',
|
|
27
|
-
entityId: cert.id, // eslint-disable-line no-underscore-dangle
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const onCertIssued = (cert, states) => {
|
|
32
|
-
states.notification.create({
|
|
33
|
-
title: 'Certificate Issued',
|
|
34
|
-
description: `The ${cert.domain} certificate is issued successfully`,
|
|
35
|
-
severity: 'success',
|
|
36
|
-
entityType: 'certificate',
|
|
37
|
-
entityId: cert.id,
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const onCertIssueFailed = (cert, states) => {
|
|
42
|
-
states.notification.create({
|
|
43
|
-
title: 'Certificate Issue Failed',
|
|
44
|
-
description: `Failed to issue certificate for ${cert.domain}`,
|
|
45
|
-
severity: 'error',
|
|
46
|
-
entityType: 'certificate',
|
|
47
|
-
entityId: cert.id,
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
|
|
51
7
|
const getDomainFromInput = (input) => {
|
|
52
8
|
if (Object.prototype.toString.call(input) === '[object Object]') {
|
|
53
9
|
return input.domain;
|
|
@@ -62,15 +18,15 @@ class Cert extends EventEmitter {
|
|
|
62
18
|
|
|
63
19
|
this.manager = new CertificateManager({ maintainerEmail, dataDir });
|
|
64
20
|
|
|
65
|
-
this.manager.on('cert.issued', this.
|
|
66
|
-
this.manager.on('cert.expired', this.
|
|
67
|
-
this.manager.on('cert.about_to_expire', this.
|
|
68
|
-
this.manager.on('cert.error', this.
|
|
21
|
+
this.manager.on('cert.issued', this.onCertIssued.bind(this));
|
|
22
|
+
this.manager.on('cert.expired', this.onCertExpired.bind(this));
|
|
23
|
+
this.manager.on('cert.about_to_expire', this.onCertAboutToExpire.bind(this));
|
|
24
|
+
this.manager.on('cert.error', this.onCertError.bind(this));
|
|
69
25
|
|
|
70
26
|
/**
|
|
71
27
|
* Array<{domain: string, did: string}>
|
|
72
28
|
*/
|
|
73
|
-
this.
|
|
29
|
+
this.blockletDomains = [];
|
|
74
30
|
this.states = states;
|
|
75
31
|
}
|
|
76
32
|
|
|
@@ -116,18 +72,37 @@ class Cert extends EventEmitter {
|
|
|
116
72
|
}
|
|
117
73
|
|
|
118
74
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
75
|
+
* 签发证书
|
|
76
|
+
* @param object data
|
|
77
|
+
* @param string data.domain Domain name
|
|
78
|
+
* @param string data.did Blocklet DID
|
|
79
|
+
* @param object options
|
|
80
|
+
* @param number options.delay Delay time in ms
|
|
122
81
|
*/
|
|
123
|
-
issue({ domain, did }) {
|
|
82
|
+
issue({ domain, did, siteId, inBlockletSetup = false }, { delay = 0 } = {}) {
|
|
124
83
|
logger.info(`generate certificate for ${domain}`);
|
|
125
84
|
|
|
126
85
|
if (did) {
|
|
127
|
-
this.
|
|
86
|
+
this.bindBlocklet({ domain, did });
|
|
128
87
|
}
|
|
129
88
|
|
|
130
|
-
return this.manager
|
|
89
|
+
return this.manager
|
|
90
|
+
.issue({ domain, siteId, inBlockletSetup }, { delay, metadata: { inBlockletSetup, blockletDid: did } })
|
|
91
|
+
.then(async (cert) => {
|
|
92
|
+
const site = await this.states.site.findOne({ id: siteId });
|
|
93
|
+
for (const d of site.domainAliases) {
|
|
94
|
+
if (d.value === domain) {
|
|
95
|
+
d.certificateId = cert.id;
|
|
96
|
+
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
await this.states.site.update({ id: siteId }, { $set: { domainAliases: site.domainAliases } });
|
|
102
|
+
logger.info('updated cert id for domain alias', { domain, did, certId: cert.id });
|
|
103
|
+
|
|
104
|
+
return cert;
|
|
105
|
+
});
|
|
131
106
|
}
|
|
132
107
|
|
|
133
108
|
async upsertByDomain(data) {
|
|
@@ -157,11 +132,11 @@ class Cert extends EventEmitter {
|
|
|
157
132
|
return this.manager.updateWithoutValidations(id, data);
|
|
158
133
|
}
|
|
159
134
|
|
|
160
|
-
|
|
135
|
+
bindBlocklet({ domain, did }) {
|
|
161
136
|
// only save 100 domains in memory
|
|
162
|
-
const list = this.
|
|
137
|
+
const list = this.blockletDomains.slice(-100).filter((x) => x.domain !== domain);
|
|
163
138
|
list.push({ domain, did });
|
|
164
|
-
this.
|
|
139
|
+
this.blockletDomains = list;
|
|
165
140
|
}
|
|
166
141
|
|
|
167
142
|
/**
|
|
@@ -173,8 +148,8 @@ class Cert extends EventEmitter {
|
|
|
173
148
|
* domain: string
|
|
174
149
|
* }} cert
|
|
175
150
|
*/
|
|
176
|
-
|
|
177
|
-
const blockletDomain = this.
|
|
151
|
+
emitEvent(event, cert) {
|
|
152
|
+
const blockletDomain = this.blockletDomains.find((x) => x.domain === cert.domain);
|
|
178
153
|
if (blockletDomain) {
|
|
179
154
|
this.emit(event.blocklet, { ...cert, meta: { did: blockletDomain.did } });
|
|
180
155
|
} else {
|
|
@@ -182,24 +157,58 @@ class Cert extends EventEmitter {
|
|
|
182
157
|
}
|
|
183
158
|
}
|
|
184
159
|
|
|
185
|
-
|
|
186
|
-
this.
|
|
160
|
+
onCertIssued(cert) {
|
|
161
|
+
this.emitEvent({ blocklet: BlockletEvents.certIssued, server: EVENTS.CERT_ISSUED }, cert);
|
|
187
162
|
|
|
188
|
-
|
|
163
|
+
this.states.notification.create({
|
|
164
|
+
title: 'Certificate Issued',
|
|
165
|
+
description: `The ${cert.domain} certificate is issued successfully`,
|
|
166
|
+
severity: 'success',
|
|
167
|
+
entityType: 'certificate',
|
|
168
|
+
entityId: cert.id,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
logger.info('send certificate issued notification', { domain: cert.domain, certId: cert.id });
|
|
189
172
|
}
|
|
190
173
|
|
|
191
|
-
|
|
192
|
-
this.
|
|
174
|
+
onCertError(cert) {
|
|
175
|
+
this.emitEvent({ blocklet: BlockletEvents.certError, server: EVENTS.CERT_ERROR }, cert);
|
|
176
|
+
|
|
177
|
+
this.states.notification.create({
|
|
178
|
+
title: 'Certificate Issue Failed',
|
|
179
|
+
description: `Failed to issue certificate for ${cert.domain}`,
|
|
180
|
+
severity: 'error',
|
|
181
|
+
entityType: 'certificate',
|
|
182
|
+
entityId: cert.id,
|
|
183
|
+
});
|
|
193
184
|
|
|
194
|
-
|
|
185
|
+
logger.info('send certificate issue failed notification', { domain: cert.domain, certId: cert.id });
|
|
195
186
|
}
|
|
196
187
|
|
|
197
|
-
|
|
198
|
-
|
|
188
|
+
onCertExpired(cert) {
|
|
189
|
+
this.states.notification.create({
|
|
190
|
+
title: 'SSL Certificate Expired',
|
|
191
|
+
description: `Your SSL certificate for domain ${cert.domain} has expired, please update it in Blocklet Server`,
|
|
192
|
+
severity: 'error',
|
|
193
|
+
entityType: 'certificate',
|
|
194
|
+
entityId: cert.id,
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
logger.info('send certificate expire notification', { domain: cert.domain, certId: cert.id });
|
|
199
198
|
}
|
|
200
199
|
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
onCertAboutToExpire(cert) {
|
|
201
|
+
this.states.notification.create({
|
|
202
|
+
title: 'SSL Certificate Expire Warning',
|
|
203
|
+
description: `Your SSL certificate for domain ${cert.domain} will expire in ${
|
|
204
|
+
cert.expireInDays
|
|
205
|
+
} days (on ${new Date(cert.validTo).toLocaleString()}), please remember to update it in Blocklet Server`,
|
|
206
|
+
severity: 'warning',
|
|
207
|
+
entityType: 'certificate',
|
|
208
|
+
entityId: cert.id, // eslint-disable-line no-underscore-dangle
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
logger.info('send certificate about-expire notification', { domain: cert.domain, certId: cert.id });
|
|
203
212
|
}
|
|
204
213
|
}
|
|
205
214
|
|
package/lib/event/index.js
CHANGED
|
@@ -9,6 +9,7 @@ const {
|
|
|
9
9
|
BlockletSource,
|
|
10
10
|
BlockletEvents,
|
|
11
11
|
BlockletInternalEvents,
|
|
12
|
+
BLOCKLET_CONFIGURABLE_KEY,
|
|
12
13
|
} = require('@blocklet/constant');
|
|
13
14
|
const { EVENTS, BACKUPS } = require('@abtnode/constant');
|
|
14
15
|
const { NodeMonitSender } = require('../monitor/node-monit-sender');
|
|
@@ -380,6 +381,19 @@ module.exports = ({
|
|
|
380
381
|
}
|
|
381
382
|
};
|
|
382
383
|
|
|
384
|
+
const updateBlockletAPPURL = async (event, data) => {
|
|
385
|
+
if (data?.metadata?.inBlockletSetup === true && data?.metadata?.blockletDid) {
|
|
386
|
+
await blockletManager.config({
|
|
387
|
+
did: data?.metadata?.blockletDid,
|
|
388
|
+
configs: [{ key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_URL, value: `https://${data.domain}` }],
|
|
389
|
+
skipDidDocument: true,
|
|
390
|
+
skipHook: true,
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
logger.info(`update blocklet app url on ${event}`, { domain: data.domain, did: data?.metadata?.blockletDid });
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
|
|
383
397
|
/**
|
|
384
398
|
*
|
|
385
399
|
*
|
|
@@ -487,6 +501,7 @@ module.exports = ({
|
|
|
487
501
|
|
|
488
502
|
listen(certManager, EVENTS.CERT_ISSUED, onEvent);
|
|
489
503
|
listen(certManager, EVENTS.CERT_ERROR, onEvent);
|
|
504
|
+
listen(certManager, BlockletEvents.certIssued, updateBlockletAPPURL);
|
|
490
505
|
listen(certManager, BlockletEvents.certIssued, onEvent);
|
|
491
506
|
listen(certManager, BlockletEvents.certError, onEvent);
|
|
492
507
|
|
package/lib/router/manager.js
CHANGED
|
@@ -186,7 +186,10 @@ class RouterManager extends EventEmitter {
|
|
|
186
186
|
return dbSite;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
async addDomainAlias(
|
|
189
|
+
async addDomainAlias(
|
|
190
|
+
{ id, domainAlias: tmpAlias, force, type, nftDid, chainHost, inBlockletSetup = false },
|
|
191
|
+
context = {}
|
|
192
|
+
) {
|
|
190
193
|
const domainAlias = await validateAddDomainAlias(tmpAlias, context);
|
|
191
194
|
const dbSite = await states.site.findOne({ id });
|
|
192
195
|
if (!dbSite) {
|
|
@@ -224,19 +227,28 @@ class RouterManager extends EventEmitter {
|
|
|
224
227
|
item.chainHost = chainHost;
|
|
225
228
|
}
|
|
226
229
|
|
|
227
|
-
|
|
228
|
-
logger.
|
|
230
|
+
await states.site.update({ id }, { $set: { domainAliases: [...doc.domainAliases, item] } });
|
|
231
|
+
logger.info('added domain alias', { id, domainAlias });
|
|
229
232
|
|
|
233
|
+
const did = getDidFromDomainGroupName(doc.domain); // TODO: 是不是可靠?
|
|
230
234
|
if (type === 'nft-domain') {
|
|
231
|
-
const did = getDidFromDomainGroupName(doc.domain); // TODO: 是不是可靠?
|
|
232
235
|
const didDomain = doc.domainAliases.find((x) => isDidDomain(x.value));
|
|
233
236
|
const blocklet = await states.blocklet.getBlocklet(did);
|
|
234
237
|
const nodeInfo = await states.node.read();
|
|
235
238
|
|
|
236
239
|
await updateNFTDomainRecord({ name: domainAlias, value: didDomain.value, blocklet, nodeInfo });
|
|
237
|
-
logger.info('update nft domain record', { domain: domainAlias, didDomain
|
|
240
|
+
logger.info('update nft domain record', { domain: domainAlias, didDomain, nftDid, id });
|
|
238
241
|
}
|
|
239
242
|
|
|
243
|
+
this.certManager
|
|
244
|
+
.issue({ domain: domainAlias, did, siteId: id, inBlockletSetup }, { delay: 5000 })
|
|
245
|
+
.then(() => {
|
|
246
|
+
logger.info('issue cert for domain alias', { domain: domainAlias, did });
|
|
247
|
+
})
|
|
248
|
+
.catch((error) => {
|
|
249
|
+
logger.error('issue cert for domain alias failed', { error, domain: domainAlias, did });
|
|
250
|
+
}); // 延迟 5s, 需要等待的原因: Nginx Reload, DNS 生效
|
|
251
|
+
|
|
240
252
|
const newSite = await states.site.findOne({ id });
|
|
241
253
|
await attachRuntimeDomainAliases({ sites: newSite, context, node: states.node });
|
|
242
254
|
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.20-beta-
|
|
6
|
+
"version": "1.16.20-beta-9c254d14",
|
|
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.20-beta-
|
|
23
|
-
"@abtnode/auth": "1.16.20-beta-
|
|
24
|
-
"@abtnode/certificate-manager": "1.16.20-beta-
|
|
25
|
-
"@abtnode/constant": "1.16.20-beta-
|
|
26
|
-
"@abtnode/cron": "1.16.20-beta-
|
|
27
|
-
"@abtnode/logger": "1.16.20-beta-
|
|
28
|
-
"@abtnode/models": "1.16.20-beta-
|
|
29
|
-
"@abtnode/queue": "1.16.20-beta-
|
|
30
|
-
"@abtnode/rbac": "1.16.20-beta-
|
|
31
|
-
"@abtnode/router-provider": "1.16.20-beta-
|
|
32
|
-
"@abtnode/static-server": "1.16.20-beta-
|
|
33
|
-
"@abtnode/timemachine": "1.16.20-beta-
|
|
34
|
-
"@abtnode/util": "1.16.20-beta-
|
|
22
|
+
"@abtnode/analytics": "1.16.20-beta-9c254d14",
|
|
23
|
+
"@abtnode/auth": "1.16.20-beta-9c254d14",
|
|
24
|
+
"@abtnode/certificate-manager": "1.16.20-beta-9c254d14",
|
|
25
|
+
"@abtnode/constant": "1.16.20-beta-9c254d14",
|
|
26
|
+
"@abtnode/cron": "1.16.20-beta-9c254d14",
|
|
27
|
+
"@abtnode/logger": "1.16.20-beta-9c254d14",
|
|
28
|
+
"@abtnode/models": "1.16.20-beta-9c254d14",
|
|
29
|
+
"@abtnode/queue": "1.16.20-beta-9c254d14",
|
|
30
|
+
"@abtnode/rbac": "1.16.20-beta-9c254d14",
|
|
31
|
+
"@abtnode/router-provider": "1.16.20-beta-9c254d14",
|
|
32
|
+
"@abtnode/static-server": "1.16.20-beta-9c254d14",
|
|
33
|
+
"@abtnode/timemachine": "1.16.20-beta-9c254d14",
|
|
34
|
+
"@abtnode/util": "1.16.20-beta-9c254d14",
|
|
35
35
|
"@arcblock/did": "1.18.103",
|
|
36
36
|
"@arcblock/did-auth": "1.18.103",
|
|
37
37
|
"@arcblock/did-ext": "^1.18.103",
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
"@arcblock/pm2-events": "^0.0.5",
|
|
43
43
|
"@arcblock/validator": "^1.18.103",
|
|
44
44
|
"@arcblock/vc": "1.18.103",
|
|
45
|
-
"@blocklet/constant": "1.16.20-beta-
|
|
46
|
-
"@blocklet/env": "1.16.20-beta-
|
|
47
|
-
"@blocklet/meta": "1.16.20-beta-
|
|
48
|
-
"@blocklet/resolver": "1.16.20-beta-
|
|
49
|
-
"@blocklet/sdk": "1.16.20-beta-
|
|
50
|
-
"@did-space/client": "^0.3.
|
|
45
|
+
"@blocklet/constant": "1.16.20-beta-9c254d14",
|
|
46
|
+
"@blocklet/env": "1.16.20-beta-9c254d14",
|
|
47
|
+
"@blocklet/meta": "1.16.20-beta-9c254d14",
|
|
48
|
+
"@blocklet/resolver": "1.16.20-beta-9c254d14",
|
|
49
|
+
"@blocklet/sdk": "1.16.20-beta-9c254d14",
|
|
50
|
+
"@did-space/client": "^0.3.41",
|
|
51
51
|
"@fidm/x509": "^1.2.1",
|
|
52
52
|
"@ocap/mcrypto": "1.18.103",
|
|
53
53
|
"@ocap/util": "1.18.103",
|
|
@@ -101,5 +101,5 @@
|
|
|
101
101
|
"jest": "^27.5.1",
|
|
102
102
|
"unzipper": "^0.10.11"
|
|
103
103
|
},
|
|
104
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "2f74601e9a8f2e07e872a629b6abc8d4bc1fd371"
|
|
105
105
|
}
|