@abtnode/core 1.16.54-beta-20251030-092518-0e109845 → 1.16.54-beta-20251031-043051-f3b56e3a
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/manager/disk.js +54 -19
- package/lib/blocklet/manager/helper/blue-green-start-blocklet.js +3 -0
- package/lib/blocklet/migration-dist/migration.cjs +1 -1
- package/lib/event/index.js +39 -1
- package/lib/router/helper.js +11 -0
- package/lib/util/index.js +6 -4
- package/package.json +25 -27
|
@@ -857,6 +857,16 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
857
857
|
|
|
858
858
|
const rest = await pAll(tasks, { concurrency: 6 });
|
|
859
859
|
|
|
860
|
+
const nextBlocklet = await this.ensureBlocklet(did, { e2eMode });
|
|
861
|
+
|
|
862
|
+
if (!['true', '1'].includes(process.env.ABT_NODE_DISABLE_BLUE_GREEN)) {
|
|
863
|
+
this.emit(BlockletEvents.blurOrGreenStarted, {
|
|
864
|
+
blocklet: nextBlocklet,
|
|
865
|
+
componentDids: inputComponentDids,
|
|
866
|
+
context,
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
|
|
860
870
|
return rest[0];
|
|
861
871
|
}
|
|
862
872
|
|
|
@@ -3274,17 +3284,25 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
3274
3284
|
const blueGreenComponentIds = await blueGreenGetComponentIds(oldBlocklet || blocklet, componentDids);
|
|
3275
3285
|
|
|
3276
3286
|
try {
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3287
|
+
if (process.env.ABT_NODE_DISABLE_BLUE_GREEN === 'true' || process.env.ABT_NODE_DISABLE_BLUE_GREEN === '1') {
|
|
3288
|
+
await states.blocklet.setBlockletStatus(did, BlockletStatus.downloading, {
|
|
3289
|
+
componentDids,
|
|
3290
|
+
isGreen: false,
|
|
3291
|
+
});
|
|
3292
|
+
} else {
|
|
3293
|
+
await Promise.all(
|
|
3294
|
+
blueGreenComponentIds.map(async (item) => {
|
|
3295
|
+
if (item.componentDids.length === 0) {
|
|
3296
|
+
return;
|
|
3297
|
+
}
|
|
3298
|
+
await states.blocklet.setBlockletStatus(did, BlockletStatus.downloading, {
|
|
3299
|
+
componentDids: item.componentDids,
|
|
3300
|
+
isGreen: item.changeToGreen,
|
|
3301
|
+
});
|
|
3302
|
+
})
|
|
3303
|
+
);
|
|
3304
|
+
}
|
|
3305
|
+
|
|
3288
3306
|
const state = await states.blocklet.getBlocklet(did);
|
|
3289
3307
|
this.emit(BlockletEvents.statusChange, state);
|
|
3290
3308
|
const { isCancelled } = await this._downloadBlocklet(
|
|
@@ -3429,19 +3447,31 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
3429
3447
|
|
|
3430
3448
|
try {
|
|
3431
3449
|
if (postAction === INSTALL_ACTIONS.UPGRADE_COMPONENT) {
|
|
3432
|
-
|
|
3433
|
-
{
|
|
3450
|
+
if (process.env.ABT_NODE_DISABLE_BLUE_GREEN === 'true' || process.env.ABT_NODE_DISABLE_BLUE_GREEN === '1') {
|
|
3451
|
+
await this._upgradeBlocklet({
|
|
3434
3452
|
newBlocklet: blocklet,
|
|
3435
3453
|
oldBlocklet,
|
|
3436
3454
|
componentDids,
|
|
3455
|
+
context,
|
|
3437
3456
|
action: postAction,
|
|
3438
3457
|
shouldCleanUploadFile,
|
|
3439
3458
|
url,
|
|
3440
|
-
}
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3459
|
+
});
|
|
3460
|
+
} else {
|
|
3461
|
+
await blueGreenUpgradeBlocklet(
|
|
3462
|
+
{
|
|
3463
|
+
newBlocklet: blocklet,
|
|
3464
|
+
oldBlocklet,
|
|
3465
|
+
componentDids,
|
|
3466
|
+
action: postAction,
|
|
3467
|
+
shouldCleanUploadFile,
|
|
3468
|
+
url,
|
|
3469
|
+
},
|
|
3470
|
+
context,
|
|
3471
|
+
this,
|
|
3472
|
+
states
|
|
3473
|
+
);
|
|
3474
|
+
}
|
|
3445
3475
|
} else {
|
|
3446
3476
|
await this._upgradeBlocklet({
|
|
3447
3477
|
newBlocklet: blocklet,
|
|
@@ -3510,6 +3540,11 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
3510
3540
|
}
|
|
3511
3541
|
|
|
3512
3542
|
async _onRestart({ did, componentDids, context, operator }) {
|
|
3543
|
+
if (process.env.ABT_NODE_DISABLE_BLUE_GREEN) {
|
|
3544
|
+
await this.stop({ did, componentDids, context, operator });
|
|
3545
|
+
await this.start({ did, componentDids, checkHealthImmediately: true });
|
|
3546
|
+
return;
|
|
3547
|
+
}
|
|
3513
3548
|
await blueGreenStartBlocklet({ did, componentDids, operator }, context, this, states);
|
|
3514
3549
|
}
|
|
3515
3550
|
|
|
@@ -5071,7 +5106,7 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
5071
5106
|
blocklet,
|
|
5072
5107
|
meta: b.meta,
|
|
5073
5108
|
script,
|
|
5074
|
-
|
|
5109
|
+
hookName: name,
|
|
5075
5110
|
nodeInfo,
|
|
5076
5111
|
env,
|
|
5077
5112
|
...hookArgs,
|
|
@@ -293,6 +293,9 @@ const blueGreenStartBlocklet = async (
|
|
|
293
293
|
}
|
|
294
294
|
throw error;
|
|
295
295
|
}
|
|
296
|
+
|
|
297
|
+
const nextBlocklet = await manager.ensureBlocklet(did, { e2eMode });
|
|
298
|
+
manager.emit(BlockletEvents.blurOrGreenStarted, { blocklet: nextBlocklet, componentDids, context });
|
|
296
299
|
}
|
|
297
300
|
|
|
298
301
|
const nextBlocklet = await manager.getBlocklet(did);
|
|
@@ -38983,7 +38983,7 @@ module.exports = require("zlib");
|
|
|
38983
38983
|
/***/ ((module) => {
|
|
38984
38984
|
|
|
38985
38985
|
"use strict";
|
|
38986
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.53","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib"
|
|
38986
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.53","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.53","@abtnode/auth":"1.16.53","@abtnode/certificate-manager":"1.16.53","@abtnode/constant":"1.16.53","@abtnode/cron":"1.16.53","@abtnode/db-cache":"1.16.53","@abtnode/docker-utils":"1.16.53","@abtnode/logger":"1.16.53","@abtnode/models":"1.16.53","@abtnode/queue":"1.16.53","@abtnode/rbac":"1.16.53","@abtnode/router-provider":"1.16.53","@abtnode/static-server":"1.16.53","@abtnode/timemachine":"1.16.53","@abtnode/util":"1.16.53","@aigne/aigne-hub":"^0.10.3","@arcblock/did":"^1.27.0","@arcblock/did-connect-js":"^1.27.0","@arcblock/did-ext":"^1.27.0","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"^1.27.0","@arcblock/event-hub":"^1.27.0","@arcblock/jwt":"^1.27.0","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.27.0","@arcblock/vc":"^1.27.0","@blocklet/constant":"1.16.53","@blocklet/did-space-js":"^1.2.0","@blocklet/env":"1.16.53","@blocklet/error":"^0.2.5","@blocklet/meta":"1.16.53","@blocklet/resolver":"1.16.53","@blocklet/sdk":"1.16.53","@blocklet/server-js":"1.16.53","@blocklet/store":"1.16.53","@blocklet/theme":"^3.1.54","@fidm/x509":"^1.2.1","@ocap/mcrypto":"^1.27.0","@ocap/util":"^1.27.0","@ocap/wallet":"^1.27.0","@slack/webhook":"^5.0.4","archiver":"^7.0.1","axios":"^1.7.9","axon":"^2.0.3","chalk":"^4.1.2","cross-spawn":"^7.0.3","dayjs":"^1.11.13","deep-diff":"^1.0.2","detect-port":"^1.5.1","envfile":"^7.1.0","escape-string-regexp":"^4.0.0","fast-glob":"^3.3.2","filesize":"^10.1.1","flat":"^5.0.2","fs-extra":"^11.2.0","get-port":"^5.1.1","hasha":"^5.2.2","is-base64":"^1.1.0","is-cidr":"4","is-ip":"3","is-url":"^1.2.4","joi":"17.12.2","joi-extension-semver":"^5.0.0","js-yaml":"^4.1.0","kill-port":"^2.0.1","lodash":"^4.17.21","node-stream-zip":"^1.15.0","p-all":"^3.0.0","p-limit":"^3.1.0","p-map":"^4.0.0","p-retry":"^4.6.2","p-wait-for":"^3.2.0","private-ip":"^2.3.4","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","slugify":"^1.6.6","ssri":"^8.0.1","stream-throttle":"^0.1.3","stream-to-promise":"^3.0.0","systeminformation":"^5.23.3","tail":"^2.2.4","tar":"^6.1.11","transliteration":"^2.3.5","ua-parser-js":"^1.0.2","ufo":"^1.5.3","uuid":"^11.1.0","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"axios-mock-adapter":"^2.1.0","expand-tilde":"^2.0.2","express":"^4.18.2","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
|
|
38987
38987
|
|
|
38988
38988
|
/***/ }),
|
|
38989
38989
|
|
package/lib/event/index.js
CHANGED
|
@@ -43,6 +43,7 @@ const {
|
|
|
43
43
|
rollbackBlockletSites,
|
|
44
44
|
routingSnapshotPrefix,
|
|
45
45
|
} = require('./util');
|
|
46
|
+
const { ensureBlockletHasMultipleInterfaces } = require('../router/helper');
|
|
46
47
|
|
|
47
48
|
/**
|
|
48
49
|
*
|
|
@@ -175,6 +176,40 @@ module.exports = ({
|
|
|
175
176
|
}
|
|
176
177
|
};
|
|
177
178
|
|
|
179
|
+
const handleBlockletBlurOrGreenStarted = async (name, { blocklet, componentDids, context }) => {
|
|
180
|
+
try {
|
|
181
|
+
// 只有某些 children 有多个接口时, 才需要更新路由
|
|
182
|
+
const hasMultipleInterfaces = ensureBlockletHasMultipleInterfaces(blocklet, componentDids);
|
|
183
|
+
if (!hasMultipleInterfaces) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
const changed = await ensureBlockletRouting(blocklet, context);
|
|
187
|
+
if (changed) {
|
|
188
|
+
const hash = await takeRoutingSnapshot(
|
|
189
|
+
{
|
|
190
|
+
message: `${routingSnapshotPrefix(blocklet)}Blur or green start blocklet ${blocklet.meta.name}`,
|
|
191
|
+
dryRun: false,
|
|
192
|
+
},
|
|
193
|
+
context
|
|
194
|
+
);
|
|
195
|
+
logger.info('created.url.mapping', { event: name, did: blocklet.meta.did, hash });
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
} catch (error) {
|
|
200
|
+
logger.error('create.url.mapping.error', { event: name, error });
|
|
201
|
+
teamManager.createNotification({
|
|
202
|
+
title: 'Blocklet URL Mapping Error',
|
|
203
|
+
// eslint-disable-next-line max-len
|
|
204
|
+
description: `Failed to create URL mapping for blocklet ${blocklet.meta.title}, due to: ${error.message}`,
|
|
205
|
+
entityType: 'blocklet',
|
|
206
|
+
entityId: blocklet.meta.did,
|
|
207
|
+
severity: 'error',
|
|
208
|
+
});
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
178
213
|
const handleBlockletInstall = async (name, { blocklet, context }) => {
|
|
179
214
|
try {
|
|
180
215
|
const changed = await ensureBlockletRouting(blocklet, context);
|
|
@@ -307,7 +342,9 @@ module.exports = ({
|
|
|
307
342
|
return;
|
|
308
343
|
}
|
|
309
344
|
|
|
310
|
-
if ([BlockletEvents.
|
|
345
|
+
if ([BlockletEvents.blurOrGreenStarted].includes(eventName)) {
|
|
346
|
+
await handleBlockletBlurOrGreenStarted(eventName, payload);
|
|
347
|
+
} else if ([BlockletEvents.installed].includes(eventName)) {
|
|
311
348
|
await handleBlockletInstall(eventName, payload);
|
|
312
349
|
|
|
313
350
|
try {
|
|
@@ -554,6 +591,7 @@ module.exports = ({
|
|
|
554
591
|
BlockletEvents.nftConsumed,
|
|
555
592
|
|
|
556
593
|
BlockletEvents.configTheme,
|
|
594
|
+
BlockletEvents.blurOrGreenStarted,
|
|
557
595
|
].forEach((eventName) => {
|
|
558
596
|
listen(blockletManager, eventName, handleBlockletEvent);
|
|
559
597
|
});
|
package/lib/router/helper.js
CHANGED
|
@@ -2083,6 +2083,16 @@ module.exports = function getRouterHelpers({
|
|
|
2083
2083
|
};
|
|
2084
2084
|
};
|
|
2085
2085
|
|
|
2086
|
+
const ensureBlockletHasMultipleInterfaces = (blocklet, componentDids) => {
|
|
2087
|
+
for (const child of blocklet.children) {
|
|
2088
|
+
const interfaces = (child.meta.interfaces || []).filter((x) => !!x.port);
|
|
2089
|
+
if (componentDids.includes(child.meta.did) && interfaces.length > 1) {
|
|
2090
|
+
return true;
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2093
|
+
return false;
|
|
2094
|
+
};
|
|
2095
|
+
|
|
2086
2096
|
module.exports.attachRuntimeDomainAliases = attachRuntimeDomainAliases;
|
|
2087
2097
|
module.exports.ensureLatestNodeInfo = ensureLatestNodeInfo;
|
|
2088
2098
|
module.exports.ensureLatestInterfaceInfo = ensureLatestInterfaceInfo;
|
|
@@ -2092,3 +2102,4 @@ module.exports.ensureBlockletWellknownRules = ensureBlockletWellknownRules;
|
|
|
2092
2102
|
module.exports.ensureBlockletProxyBehavior = ensureBlockletProxyBehavior;
|
|
2093
2103
|
module.exports.expandComponentRules = expandComponentRules;
|
|
2094
2104
|
module.exports.getDomainsByDid = getDomainsByDid;
|
|
2105
|
+
module.exports.ensureBlockletHasMultipleInterfaces = ensureBlockletHasMultipleInterfaces;
|
package/lib/util/index.js
CHANGED
|
@@ -286,17 +286,19 @@ const findInterfaceByName = (blocklet, name) => {
|
|
|
286
286
|
|
|
287
287
|
const findInterfacePortByName = (blocklet, name) => {
|
|
288
288
|
const found = findInterfaceByName(blocklet, name);
|
|
289
|
-
const { ports } = blocklet;
|
|
289
|
+
const { ports, greenPorts, greenStatus } = blocklet;
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
const realPorts = greenPorts && greenStatus === BlockletStatus.running ? greenPorts : ports;
|
|
292
|
+
|
|
293
|
+
if (!found || !realPorts) {
|
|
292
294
|
return null;
|
|
293
295
|
}
|
|
294
296
|
|
|
295
297
|
if (typeof found.port === 'string') {
|
|
296
|
-
return
|
|
298
|
+
return realPorts[found.port];
|
|
297
299
|
}
|
|
298
300
|
|
|
299
|
-
return
|
|
301
|
+
return realPorts[found.port.internal];
|
|
300
302
|
};
|
|
301
303
|
|
|
302
304
|
const getWellknownSitePort = async () => {
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.54-beta-
|
|
6
|
+
"version": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -11,29 +11,27 @@
|
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
13
|
"lint": "eslint tests lib --ignore-pattern 'tests/assets/*'",
|
|
14
|
-
"lint:fix": "eslint --fix tests lib"
|
|
15
|
-
"test": "bun test --bail --timeout 30000",
|
|
16
|
-
"coverage": "bun test --bail --timeout 30000 --coverage"
|
|
14
|
+
"lint:fix": "eslint --fix tests lib"
|
|
17
15
|
},
|
|
18
16
|
"keywords": [],
|
|
19
17
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
20
18
|
"license": "Apache-2.0",
|
|
21
19
|
"dependencies": {
|
|
22
|
-
"@abtnode/analytics": "1.16.54-beta-
|
|
23
|
-
"@abtnode/auth": "1.16.54-beta-
|
|
24
|
-
"@abtnode/certificate-manager": "1.16.54-beta-
|
|
25
|
-
"@abtnode/constant": "1.16.54-beta-
|
|
26
|
-
"@abtnode/cron": "1.16.54-beta-
|
|
27
|
-
"@abtnode/db-cache": "1.16.54-beta-
|
|
28
|
-
"@abtnode/docker-utils": "1.16.54-beta-
|
|
29
|
-
"@abtnode/logger": "1.16.54-beta-
|
|
30
|
-
"@abtnode/models": "1.16.54-beta-
|
|
31
|
-
"@abtnode/queue": "1.16.54-beta-
|
|
32
|
-
"@abtnode/rbac": "1.16.54-beta-
|
|
33
|
-
"@abtnode/router-provider": "1.16.54-beta-
|
|
34
|
-
"@abtnode/static-server": "1.16.54-beta-
|
|
35
|
-
"@abtnode/timemachine": "1.16.54-beta-
|
|
36
|
-
"@abtnode/util": "1.16.54-beta-
|
|
20
|
+
"@abtnode/analytics": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
21
|
+
"@abtnode/auth": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
22
|
+
"@abtnode/certificate-manager": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
23
|
+
"@abtnode/constant": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
24
|
+
"@abtnode/cron": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
25
|
+
"@abtnode/db-cache": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
26
|
+
"@abtnode/docker-utils": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
27
|
+
"@abtnode/logger": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
28
|
+
"@abtnode/models": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
29
|
+
"@abtnode/queue": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
30
|
+
"@abtnode/rbac": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
31
|
+
"@abtnode/router-provider": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
32
|
+
"@abtnode/static-server": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
33
|
+
"@abtnode/timemachine": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
34
|
+
"@abtnode/util": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
37
35
|
"@aigne/aigne-hub": "^0.10.3",
|
|
38
36
|
"@arcblock/did": "^1.27.0",
|
|
39
37
|
"@arcblock/did-connect-js": "^1.27.0",
|
|
@@ -45,15 +43,15 @@
|
|
|
45
43
|
"@arcblock/pm2-events": "^0.0.5",
|
|
46
44
|
"@arcblock/validator": "^1.27.0",
|
|
47
45
|
"@arcblock/vc": "^1.27.0",
|
|
48
|
-
"@blocklet/constant": "1.16.54-beta-
|
|
46
|
+
"@blocklet/constant": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
49
47
|
"@blocklet/did-space-js": "^1.2.0",
|
|
50
|
-
"@blocklet/env": "1.16.54-beta-
|
|
48
|
+
"@blocklet/env": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
51
49
|
"@blocklet/error": "^0.2.5",
|
|
52
|
-
"@blocklet/meta": "1.16.54-beta-
|
|
53
|
-
"@blocklet/resolver": "1.16.54-beta-
|
|
54
|
-
"@blocklet/sdk": "1.16.54-beta-
|
|
55
|
-
"@blocklet/server-js": "1.16.54-beta-
|
|
56
|
-
"@blocklet/store": "1.16.54-beta-
|
|
50
|
+
"@blocklet/meta": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
51
|
+
"@blocklet/resolver": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
52
|
+
"@blocklet/sdk": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
53
|
+
"@blocklet/server-js": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
54
|
+
"@blocklet/store": "1.16.54-beta-20251031-043051-f3b56e3a",
|
|
57
55
|
"@blocklet/theme": "^3.1.54",
|
|
58
56
|
"@fidm/x509": "^1.2.1",
|
|
59
57
|
"@ocap/mcrypto": "^1.27.0",
|
|
@@ -118,5 +116,5 @@
|
|
|
118
116
|
"express": "^4.18.2",
|
|
119
117
|
"unzipper": "^0.10.11"
|
|
120
118
|
},
|
|
121
|
-
"gitHead": "
|
|
119
|
+
"gitHead": "3c8d3d08531c55eef3de4d9657b2452850d5bcc7"
|
|
122
120
|
}
|