@abtnode/core 1.16.0-beta-58020de5 → 1.16.0-beta-7a7d5d97
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.
|
@@ -11,12 +11,8 @@ const cloneDeep = require('lodash/cloneDeep');
|
|
|
11
11
|
const { isNFTExpired, getNftExpirationDate } = require('@abtnode/util/lib/nft');
|
|
12
12
|
const didDocument = require('@abtnode/util/lib/did-document');
|
|
13
13
|
const { sign } = require('@arcblock/jwt');
|
|
14
|
-
const { isEthereumDid } = require('@arcblock/did');
|
|
15
|
-
const { toSvg: createDidLogo } =
|
|
16
|
-
process.env.NODE_ENV !== 'test' ? require('@arcblock/did-motif') : require('@arcblock/did-motif/dist/did-motif.cjs');
|
|
17
|
-
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
18
|
-
const { createBlockiesSvg } = require('@blocklet/meta/lib/blockies');
|
|
19
14
|
const sleep = require('@abtnode/util/lib/sleep');
|
|
15
|
+
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
20
16
|
|
|
21
17
|
const logger = require('@abtnode/logger')('@abtnode/core:blocklet:manager');
|
|
22
18
|
const {
|
|
@@ -100,6 +96,7 @@ const {
|
|
|
100
96
|
isRotatingAppDid,
|
|
101
97
|
checkVersionCompatibility,
|
|
102
98
|
getBlockletKnownAs,
|
|
99
|
+
updateBlockletFallbackLogo,
|
|
103
100
|
} = require('../../util/blocklet');
|
|
104
101
|
const states = require('../../states');
|
|
105
102
|
const BaseBlockletManager = require('./base');
|
|
@@ -1916,11 +1913,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1916
1913
|
await fs.copy(src, dist);
|
|
1917
1914
|
}
|
|
1918
1915
|
|
|
1919
|
-
|
|
1920
|
-
await fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createBlockiesSvg(blocklet.meta.did));
|
|
1921
|
-
} else {
|
|
1922
|
-
await fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createDidLogo(blocklet.meta.did));
|
|
1923
|
-
}
|
|
1916
|
+
await updateBlockletFallbackLogo(blocklet);
|
|
1924
1917
|
|
|
1925
1918
|
// Init db
|
|
1926
1919
|
await this.teamManager.initTeam(blocklet.meta.did);
|
|
@@ -1945,12 +1938,13 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
1945
1938
|
if (blocklet.controller && process.env.NODE_ENV !== 'test') {
|
|
1946
1939
|
const nodeInfo = await states.node.read();
|
|
1947
1940
|
await consumeServerlessNFT({ nftId: blocklet.controller.nftId, nodeInfo, blocklet });
|
|
1941
|
+
this.emit(BlockletEvents.nftConsumed, { blocklet, context });
|
|
1948
1942
|
}
|
|
1949
1943
|
|
|
1950
1944
|
if (createNotification) {
|
|
1951
1945
|
this._createNotification(did, {
|
|
1952
1946
|
title: 'Blocklet Installed',
|
|
1953
|
-
description: `Blocklet ${meta.
|
|
1947
|
+
description: `Blocklet ${meta.title} is installed successfully. (Source: ${
|
|
1954
1948
|
deployedFrom || fromBlockletSource(source)
|
|
1955
1949
|
})`,
|
|
1956
1950
|
action: `/blocklets/${did}/overview`,
|
|
@@ -2065,7 +2059,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2065
2059
|
|
|
2066
2060
|
blocklet = await this.getBlocklet(did, context);
|
|
2067
2061
|
|
|
2068
|
-
await
|
|
2062
|
+
await updateBlockletFallbackLogo(blocklet);
|
|
2069
2063
|
|
|
2070
2064
|
await this._updateDependents(did);
|
|
2071
2065
|
|
|
@@ -2578,16 +2572,32 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2578
2572
|
const spacesRestore = new SpacesRestore({ ...input, event: this, userDid, referrer: context.referrer });
|
|
2579
2573
|
const params = await spacesRestore.restore();
|
|
2580
2574
|
|
|
2575
|
+
const removeRestoreDir = () => {
|
|
2576
|
+
if (fs.existsSync(spacesRestore.restoreDir)) {
|
|
2577
|
+
fs.remove(spacesRestore.restoreDir).catch((err) => {
|
|
2578
|
+
logger.error('failed to remove restore dir', { error: err, dir: spacesRestore.restoreDir });
|
|
2579
|
+
});
|
|
2580
|
+
}
|
|
2581
|
+
};
|
|
2582
|
+
|
|
2581
2583
|
this.emit(BlockletEvents.restoreProgress, { appDid: input.appDid, status: RESTORE_PROGRESS_STATUS.installing });
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2584
|
+
|
|
2585
|
+
try {
|
|
2586
|
+
await installApplicationFromBackup({
|
|
2587
|
+
url: `file://${spacesRestore.restoreDir}`,
|
|
2588
|
+
moveDir: true,
|
|
2589
|
+
...merge(...params),
|
|
2590
|
+
manager: this,
|
|
2591
|
+
states,
|
|
2592
|
+
controller: input.controller,
|
|
2593
|
+
context: { ...context, startImmediately: true },
|
|
2594
|
+
});
|
|
2595
|
+
|
|
2596
|
+
removeRestoreDir();
|
|
2597
|
+
} catch (error) {
|
|
2598
|
+
removeRestoreDir();
|
|
2599
|
+
throw error;
|
|
2600
|
+
}
|
|
2591
2601
|
|
|
2592
2602
|
this.emit(BlockletEvents.restoreProgress, { appDid: input.appDid, status: RESTORE_PROGRESS_STATUS.completed });
|
|
2593
2603
|
}
|
|
@@ -2600,14 +2610,28 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
2600
2610
|
const diskRestore = new DiskRestore({ ...input, event: this });
|
|
2601
2611
|
const params = await diskRestore.restore();
|
|
2602
2612
|
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2613
|
+
const removeRestoreDir = () => {
|
|
2614
|
+
if (fs.existsSync(diskRestore.restoreDir)) {
|
|
2615
|
+
fs.remove(diskRestore.restoreDir).catch((err) => {
|
|
2616
|
+
logger.error('failed to remove restore dir', { error: err, dir: diskRestore.restoreDir });
|
|
2617
|
+
});
|
|
2618
|
+
}
|
|
2619
|
+
};
|
|
2620
|
+
|
|
2621
|
+
try {
|
|
2622
|
+
await installApplicationFromBackup({
|
|
2623
|
+
url: `file://${diskRestore.restoreDir}`,
|
|
2624
|
+
...merge(...params),
|
|
2625
|
+
manager: this,
|
|
2626
|
+
states,
|
|
2627
|
+
move: true,
|
|
2628
|
+
sync: false, // use queue to download and install application
|
|
2629
|
+
});
|
|
2630
|
+
removeRestoreDir();
|
|
2631
|
+
} catch (error) {
|
|
2632
|
+
removeRestoreDir();
|
|
2633
|
+
throw error;
|
|
2634
|
+
}
|
|
2611
2635
|
}
|
|
2612
2636
|
}
|
|
2613
2637
|
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs-extra');
|
|
3
|
-
const { isEthereumDid } = require('@arcblock/did');
|
|
4
|
-
const { createBlockiesSvg } = require('@blocklet/meta/lib/blockies');
|
|
5
|
-
|
|
6
|
-
const { toSvg: createDidLogo } =
|
|
7
|
-
process.env.NODE_ENV !== 'test' ? require('@arcblock/did-motif') : require('@arcblock/did-motif/dist/did-motif.cjs');
|
|
8
1
|
const { BlockletStatus, BLOCKLET_MODES, fromBlockletStatus, BlockletSource } = require('@blocklet/constant');
|
|
9
2
|
|
|
10
3
|
const logger = require('@abtnode/logger')('@abtnode/core:install-app-dev');
|
|
11
|
-
const { ensureMeta } = require('../../../util/blocklet');
|
|
4
|
+
const { ensureMeta, updateBlockletFallbackLogo } = require('../../../util/blocklet');
|
|
12
5
|
|
|
13
6
|
/**
|
|
14
7
|
*
|
|
@@ -88,11 +81,7 @@ const installApplicationFromDev = async ({ folder, meta, states, manager } = {})
|
|
|
88
81
|
|
|
89
82
|
blocklet = await manager.getBlocklet(did);
|
|
90
83
|
|
|
91
|
-
|
|
92
|
-
await fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createBlockiesSvg(blocklet.meta.did));
|
|
93
|
-
} else {
|
|
94
|
-
await fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createDidLogo(blocklet.meta.did));
|
|
95
|
-
}
|
|
84
|
+
await updateBlockletFallbackLogo(blocklet);
|
|
96
85
|
|
|
97
86
|
return blocklet;
|
|
98
87
|
};
|
package/lib/util/blocklet.js
CHANGED
|
@@ -5,6 +5,7 @@ const path = require('path');
|
|
|
5
5
|
const joinURL = require('url-join');
|
|
6
6
|
const shelljs = require('shelljs');
|
|
7
7
|
const os = require('os');
|
|
8
|
+
const pRetry = require('p-retry');
|
|
8
9
|
const tar = require('tar');
|
|
9
10
|
const get = require('lodash/get');
|
|
10
11
|
const isEmpty = require('lodash/isEmpty');
|
|
@@ -21,7 +22,7 @@ const { stableStringify } = require('@arcblock/vc');
|
|
|
21
22
|
const { fromSecretKey, WalletType } = require('@ocap/wallet');
|
|
22
23
|
const { toHex, toBase58, isHex, toDid } = require('@ocap/util');
|
|
23
24
|
const { types } = require('@ocap/mcrypto');
|
|
24
|
-
const { isValid: isValidDid } = require('@arcblock/did');
|
|
25
|
+
const { isValid: isValidDid, isEthereumDid } = require('@arcblock/did');
|
|
25
26
|
const logger = require('@abtnode/logger')('@abtnode/core:util:blocklet');
|
|
26
27
|
const pm2 = require('@abtnode/util/lib/async-pm2');
|
|
27
28
|
const sleep = require('@abtnode/util/lib/sleep');
|
|
@@ -39,6 +40,9 @@ const {
|
|
|
39
40
|
APP_STRUCT_VERSION,
|
|
40
41
|
} = require('@abtnode/constant');
|
|
41
42
|
const formatBackSlash = require('@abtnode/util/lib/format-back-slash');
|
|
43
|
+
const { toSvg: createDidLogo } =
|
|
44
|
+
process.env.NODE_ENV !== 'test' ? require('@arcblock/did-motif') : require('@arcblock/did-motif/dist/did-motif.cjs');
|
|
45
|
+
const { createBlockiesSvg } = require('@blocklet/meta/lib/blockies');
|
|
42
46
|
|
|
43
47
|
const SCRIPT_ENGINES_WHITE_LIST = ['npm', 'npx', 'pnpm', 'yarn'];
|
|
44
48
|
|
|
@@ -1510,13 +1514,28 @@ const consumeServerlessNFT = async ({ nftId, nodeInfo, blocklet }) => {
|
|
|
1510
1514
|
const body = { nftId, appURL };
|
|
1511
1515
|
|
|
1512
1516
|
const { launcherUrl } = state.data.value;
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1517
|
+
|
|
1518
|
+
const func = async () => {
|
|
1519
|
+
const { data } = await axios.post(joinURL(launcherUrl, '/api/serverless/consume'), body, {
|
|
1520
|
+
headers: {
|
|
1521
|
+
'x-sig': toBase58(wallet.sign(stableStringify(body))),
|
|
1522
|
+
},
|
|
1523
|
+
});
|
|
1524
|
+
|
|
1525
|
+
return data;
|
|
1526
|
+
};
|
|
1527
|
+
|
|
1528
|
+
const delay = 10 * 1000;
|
|
1529
|
+
const result = await pRetry(func, {
|
|
1530
|
+
retries: 3,
|
|
1531
|
+
minTimeout: delay,
|
|
1532
|
+
maxTimeout: delay,
|
|
1533
|
+
onFailedAttempt: (error) => {
|
|
1534
|
+
logger.error(`attempt consume nft ${nftId} failed`, { error });
|
|
1516
1535
|
},
|
|
1517
1536
|
});
|
|
1518
1537
|
|
|
1519
|
-
logger.error('consume serverless nft success', { nftId, hash:
|
|
1538
|
+
logger.error('consume serverless nft success', { nftId, hash: result.hash });
|
|
1520
1539
|
} catch (error) {
|
|
1521
1540
|
logger.error('consume serverless nft failed', { nftId, error });
|
|
1522
1541
|
|
|
@@ -1863,7 +1882,16 @@ const getFixedBundleSource = (component) => {
|
|
|
1863
1882
|
return null;
|
|
1864
1883
|
};
|
|
1865
1884
|
|
|
1885
|
+
const updateBlockletFallbackLogo = async (blocklet) => {
|
|
1886
|
+
if (isEthereumDid(blocklet.meta.did)) {
|
|
1887
|
+
await fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createBlockiesSvg(blocklet.meta.did));
|
|
1888
|
+
} else {
|
|
1889
|
+
await fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createDidLogo(blocklet.meta.did));
|
|
1890
|
+
}
|
|
1891
|
+
};
|
|
1892
|
+
|
|
1866
1893
|
module.exports = {
|
|
1894
|
+
updateBlockletFallbackLogo,
|
|
1867
1895
|
consumeServerlessNFT,
|
|
1868
1896
|
forEachBlocklet,
|
|
1869
1897
|
getBlockletMetaFromUrl: (url) => getBlockletMetaFromUrl(url, { logger }),
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.0-beta-
|
|
6
|
+
"version": "1.16.0-beta-7a7d5d97",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -19,18 +19,18 @@
|
|
|
19
19
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@abtnode/auth": "1.16.0-beta-
|
|
23
|
-
"@abtnode/certificate-manager": "1.16.0-beta-
|
|
24
|
-
"@abtnode/constant": "1.16.0-beta-
|
|
25
|
-
"@abtnode/cron": "1.16.0-beta-
|
|
26
|
-
"@abtnode/db": "1.16.0-beta-
|
|
27
|
-
"@abtnode/logger": "1.16.0-beta-
|
|
28
|
-
"@abtnode/queue": "1.16.0-beta-
|
|
29
|
-
"@abtnode/rbac": "1.16.0-beta-
|
|
30
|
-
"@abtnode/router-provider": "1.16.0-beta-
|
|
31
|
-
"@abtnode/static-server": "1.16.0-beta-
|
|
32
|
-
"@abtnode/timemachine": "1.16.0-beta-
|
|
33
|
-
"@abtnode/util": "1.16.0-beta-
|
|
22
|
+
"@abtnode/auth": "1.16.0-beta-7a7d5d97",
|
|
23
|
+
"@abtnode/certificate-manager": "1.16.0-beta-7a7d5d97",
|
|
24
|
+
"@abtnode/constant": "1.16.0-beta-7a7d5d97",
|
|
25
|
+
"@abtnode/cron": "1.16.0-beta-7a7d5d97",
|
|
26
|
+
"@abtnode/db": "1.16.0-beta-7a7d5d97",
|
|
27
|
+
"@abtnode/logger": "1.16.0-beta-7a7d5d97",
|
|
28
|
+
"@abtnode/queue": "1.16.0-beta-7a7d5d97",
|
|
29
|
+
"@abtnode/rbac": "1.16.0-beta-7a7d5d97",
|
|
30
|
+
"@abtnode/router-provider": "1.16.0-beta-7a7d5d97",
|
|
31
|
+
"@abtnode/static-server": "1.16.0-beta-7a7d5d97",
|
|
32
|
+
"@abtnode/timemachine": "1.16.0-beta-7a7d5d97",
|
|
33
|
+
"@abtnode/util": "1.16.0-beta-7a7d5d97",
|
|
34
34
|
"@arcblock/did": "1.18.64",
|
|
35
35
|
"@arcblock/did-motif": "^1.1.10",
|
|
36
36
|
"@arcblock/did-util": "1.18.64",
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"@arcblock/jwt": "^1.18.64",
|
|
39
39
|
"@arcblock/pm2-events": "^0.0.5",
|
|
40
40
|
"@arcblock/vc": "1.18.64",
|
|
41
|
-
"@blocklet/constant": "1.16.0-beta-
|
|
42
|
-
"@blocklet/meta": "1.16.0-beta-
|
|
43
|
-
"@blocklet/sdk": "1.16.0-beta-
|
|
41
|
+
"@blocklet/constant": "1.16.0-beta-7a7d5d97",
|
|
42
|
+
"@blocklet/meta": "1.16.0-beta-7a7d5d97",
|
|
43
|
+
"@blocklet/sdk": "1.16.0-beta-7a7d5d97",
|
|
44
44
|
"@did-space/client": "^0.2.45",
|
|
45
45
|
"@fidm/x509": "^1.2.1",
|
|
46
46
|
"@ocap/client": "1.18.64",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"express": "^4.18.2",
|
|
92
92
|
"jest": "^27.5.1"
|
|
93
93
|
},
|
|
94
|
-
"gitHead": "
|
|
94
|
+
"gitHead": "c25ddcc371454b2e2f7038aa5e64c7b7c27763cb"
|
|
95
95
|
}
|