@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
- if (isEthereumDid(blocklet.meta.did)) {
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.name}@${meta.version} is installed successfully. (Source: ${
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 fs.writeFile(path.join(blocklet.env.dataDir, 'logo.svg'), createDidLogo(blocklet.meta.did));
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
- await installApplicationFromBackup({
2583
- url: `file://${spacesRestore.restoreDir}`,
2584
- moveDir: true,
2585
- ...merge(...params),
2586
- manager: this,
2587
- states,
2588
- controller: input.controller,
2589
- context: { ...context, startImmediately: true },
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
- await installApplicationFromBackup({
2604
- url: `file://${diskRestore.restoreDir}`,
2605
- ...merge(...params),
2606
- manager: this,
2607
- states,
2608
- move: true,
2609
- sync: false, // use queue to download and install application
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
- if (isEthereumDid(blocklet.meta.did)) {
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
  };
@@ -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
- const { data } = await axios.post(joinURL(launcherUrl, '/api/serverless/consume'), body, {
1514
- headers: {
1515
- 'x-sig': toBase58(wallet.sign(stableStringify(body))),
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: data.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-58020de5",
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-58020de5",
23
- "@abtnode/certificate-manager": "1.16.0-beta-58020de5",
24
- "@abtnode/constant": "1.16.0-beta-58020de5",
25
- "@abtnode/cron": "1.16.0-beta-58020de5",
26
- "@abtnode/db": "1.16.0-beta-58020de5",
27
- "@abtnode/logger": "1.16.0-beta-58020de5",
28
- "@abtnode/queue": "1.16.0-beta-58020de5",
29
- "@abtnode/rbac": "1.16.0-beta-58020de5",
30
- "@abtnode/router-provider": "1.16.0-beta-58020de5",
31
- "@abtnode/static-server": "1.16.0-beta-58020de5",
32
- "@abtnode/timemachine": "1.16.0-beta-58020de5",
33
- "@abtnode/util": "1.16.0-beta-58020de5",
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-58020de5",
42
- "@blocklet/meta": "1.16.0-beta-58020de5",
43
- "@blocklet/sdk": "1.16.0-beta-58020de5",
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": "9d3f47f9827acf13e9efea38cd605d3b36f9f523"
94
+ "gitHead": "c25ddcc371454b2e2f7038aa5e64c7b7c27763cb"
95
95
  }