@abtnode/core 1.16.25 → 1.16.26-beta-c724c8e6

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/api/team.js CHANGED
@@ -1345,6 +1345,13 @@ class TeamAPI extends EventEmitter {
1345
1345
  throw new Error(`Blocklet registry does not exist: ${sanitized}`);
1346
1346
  }
1347
1347
 
1348
+ const settings = await this.states.blockletExtras.getSettings(teamDid);
1349
+
1350
+ if (settings?.connectedStores?.length) {
1351
+ settings.connectedStores = settings.connectedStores.filter((x) => x.storeUrl !== sanitized);
1352
+ await this.states.blockletExtras.setSettings(teamDid, settings);
1353
+ }
1354
+
1348
1355
  return this.teamManager.updateStoreList(
1349
1356
  teamDid,
1350
1357
  storeList.filter((x) => x.url !== sanitized)
@@ -198,6 +198,8 @@ const {
198
198
  deleteRelease,
199
199
  getSelectedResources,
200
200
  updateSelectedResources,
201
+ connectToStore,
202
+ publishToStore,
201
203
  } = require('../project');
202
204
 
203
205
  const { formatEnvironments, getBlockletMeta, validateOwner, isCLI } = util;
@@ -2349,6 +2351,14 @@ class DiskBlockletManager extends BaseBlockletManager {
2349
2351
  return deleteRelease({ did, projectId, releaseId, manager: this });
2350
2352
  }
2351
2353
 
2354
+ connectToStore(params) {
2355
+ return connectToStore({ ...params, manager: this, blockletExtras: states.blockletExtras });
2356
+ }
2357
+
2358
+ publishToStore(params) {
2359
+ return publishToStore({ ...params, manager: this, blockletExtras: states.blockletExtras });
2360
+ }
2361
+
2352
2362
  getSelectedResources({ did, projectId, releaseId, componentDid } = {}) {
2353
2363
  return getSelectedResources({ did, projectId, releaseId, componentDid, manager: this });
2354
2364
  }
@@ -33,7 +33,7 @@ const {
33
33
  } = require('@blocklet/constant');
34
34
  const { update: updateMetaFile } = require('@blocklet/meta/lib/file');
35
35
  const getBlockletWallet = require('@blocklet/meta/lib/wallet');
36
- const { cloneDeep } = require('lodash');
36
+ const cloneDeep = require('lodash/cloneDeep');
37
37
 
38
38
  const { getBlockletDomainGroupName } = require('../../../util/router');
39
39
  const { getIpDnsDomainForBlocklet } = require('../../../util/get-domain-for-blocklet');
@@ -0,0 +1,69 @@
1
+ const validUrl = require('valid-url');
2
+
3
+ const { createConnect } = require('@blocklet/store');
4
+ const { BlockletEvents } = require('@blocklet/constant');
5
+
6
+ const connectToStore = async ({ did, storeName, storeId, storeUrl, blockletExtras, manager }) => {
7
+ if (!did) {
8
+ throw new Error('Invalid did');
9
+ }
10
+ // 校验是否为合法的url地址(必须是 http 或 https 协议),例如:https://store.blocklet.dev/
11
+ if (!validUrl.isWebUri(storeUrl)) {
12
+ throw new Error('Invalid store url:', storeUrl);
13
+ }
14
+ const settings = await blockletExtras.getSettings(did);
15
+
16
+ // eslint-disable-next-line no-async-promise-executor
17
+ return new Promise(async (resolve, reject) => {
18
+ try {
19
+ const fetchData = await createConnect({
20
+ connectUrl: storeUrl,
21
+ connectAction: 'connect-cli',
22
+ enableEncrypt: true,
23
+ openPage: (pageUrl) => {
24
+ resolve(pageUrl);
25
+ },
26
+ });
27
+ const { secretKey, developerDid, name, email } = fetchData;
28
+ if (!settings.connectedStores) {
29
+ settings.connectedStores = [];
30
+ }
31
+
32
+ const nextStore = {
33
+ storeId,
34
+ storeName,
35
+ storeUrl,
36
+ accessToken: secretKey,
37
+ developerDid,
38
+ developerName: name,
39
+ developerEmail: email,
40
+ };
41
+
42
+ const oldStore = settings.connectedStores.find((x) => x.storeUrl === storeUrl);
43
+ if (oldStore) {
44
+ Object.assign(oldStore, nextStore);
45
+ } else {
46
+ settings.connectedStores.push(nextStore);
47
+ }
48
+
49
+ await blockletExtras.setSettings(did, settings);
50
+
51
+ await manager.teamManager.createNotification({
52
+ teamDid: did,
53
+ title: `Connected ${storeName} successfully`,
54
+ description: `You can publish your blocklet to ${storeName} now`,
55
+ entityType: 'blocklet',
56
+ entityId: did,
57
+ severity: 'success',
58
+ });
59
+
60
+ manager.emit(BlockletEvents.updated, {
61
+ meta: { did },
62
+ });
63
+ } catch (error) {
64
+ reject(error);
65
+ }
66
+ });
67
+ };
68
+
69
+ module.exports = connectToStore;
@@ -91,6 +91,7 @@ const createPackRelease = async ({
91
91
 
92
92
  const release = await releaseState.upsertRelease({
93
93
  ...params,
94
+ publishedStoreIds: [],
94
95
  projectId,
95
96
  releaseId,
96
97
  status,
@@ -15,6 +15,8 @@ const { createReleaseSchema } = require('../../validators/project');
15
15
 
16
16
  const { getLogoFile, exportBlockletResources, getResourceList, checkResourceExists } = require('./util');
17
17
  const createPackRelease = require('./create-pack-release');
18
+ const connectToStore = require('./connect-to-store');
19
+ const publishToStore = require('./publish-to-store');
18
20
 
19
21
  const COMPONENT_CONFIG_MAP_DIR = '.component_config';
20
22
 
@@ -199,6 +201,7 @@ const createRelease = async ({
199
201
 
200
202
  const release = await releaseState.upsertRelease({
201
203
  ...params,
204
+ publishedStoreIds: [],
202
205
  projectId,
203
206
  releaseId,
204
207
  status,
@@ -410,4 +413,6 @@ module.exports = {
410
413
  deleteRelease,
411
414
  getSelectedResources,
412
415
  updateSelectedResources,
416
+ connectToStore,
417
+ publishToStore,
413
418
  };
@@ -0,0 +1,78 @@
1
+ const path = require('path');
2
+ const { PROJECT } = require('@blocklet/constant');
3
+ const { upload } = require('@blocklet/store');
4
+
5
+ function ensureArray(value) {
6
+ if (!value) {
7
+ return [];
8
+ }
9
+ if (typeof value === 'string') {
10
+ return JSON.parse(value);
11
+ }
12
+ return value;
13
+ }
14
+
15
+ function getReleaseDir(blocklet, projectId, releaseId) {
16
+ const projectDir = path.join(blocklet.env.dataDir, PROJECT.DIR, `${projectId}`);
17
+ return path.join(projectDir, PROJECT.RELEASE_DIR, `${releaseId}`);
18
+ }
19
+
20
+ const publishToStore = async ({ did, projectId, releaseId, type, storeId, manager, blockletExtras }) => {
21
+ if (
22
+ !did ||
23
+ !projectId ||
24
+ !releaseId ||
25
+ !type ||
26
+ !storeId ||
27
+ typeof projectId !== 'string' ||
28
+ typeof releaseId !== 'string'
29
+ ) {
30
+ throw new Error('params is failed');
31
+ }
32
+
33
+ const { releaseState } = await manager._getProjectState(did);
34
+
35
+ const release = await releaseState.findOne({ projectId, id: releaseId });
36
+ if (!release) {
37
+ throw new Error('release not found');
38
+ }
39
+
40
+ const settings = await blockletExtras.getSettings(did);
41
+
42
+ if (!settings.connectedStores) {
43
+ throw new Error('no connected stores');
44
+ }
45
+ const store = settings.connectedStores.find((x) => x.storeId === storeId);
46
+ if (!store) {
47
+ throw new Error('no connected stores');
48
+ }
49
+ const { storeUrl } = store;
50
+ const { accessToken, developerDid } = store;
51
+
52
+ const blocklet = await manager.getBlocklet(did);
53
+ if (!blocklet) {
54
+ throw new Error('blocklet not found');
55
+ }
56
+
57
+ const releaseDir = getReleaseDir(blocklet, projectId, releaseId);
58
+ const metaFile = path.join(releaseDir, '.blocklet', 'release', 'blocklet.json');
59
+
60
+ const response = await upload({
61
+ metaFile,
62
+ storeUrl,
63
+ accessToken,
64
+ developerDid,
65
+ });
66
+
67
+ release.publishedStoreIds = ensureArray(release.publishedStoreIds);
68
+ release.publishedStoreIds.push(storeId);
69
+
70
+ await releaseState.update(
71
+ { id: releaseId },
72
+ { $set: { publishedStoreIds: Array.from(new Set(release.publishedStoreIds)) } }
73
+ );
74
+
75
+ return response?.status;
76
+ };
77
+
78
+ module.exports = publishToStore;
@@ -1,5 +1,6 @@
1
1
  const { readFileSync, outputJson } = require('fs-extra');
2
- const { isEmpty, cloneDeep } = require('lodash');
2
+ const isEmpty = require('lodash/isEmpty');
3
+ const cloneDeep = require('lodash/cloneDeep');
3
4
  const { join } = require('path');
4
5
  const security = require('@abtnode/util/lib/security');
5
6
 
@@ -1,5 +1,5 @@
1
1
  const { outputJson, createWriteStream, createReadStream, ensureDir } = require('fs-extra');
2
- const { cloneDeep } = require('lodash');
2
+ const cloneDeep = require('lodash/cloneDeep');
3
3
  const { join, basename, dirname } = require('path');
4
4
  const { BLOCKLET_CONFIGURABLE_KEY } = require('@blocklet/constant');
5
5
  const isEmpty = require('lodash/isEmpty');
@@ -1,7 +1,7 @@
1
1
  const fs = require('fs-extra');
2
2
  const { isValid } = require('@arcblock/did');
3
3
  const { ensureDirSync } = require('fs-extra');
4
- const { isEmpty } = require('lodash');
4
+ const isEmpty = require('lodash/isEmpty');
5
5
  const { join } = require('path');
6
6
  const { getAppName } = require('@blocklet/meta/lib/util');
7
7
 
@@ -21,7 +21,7 @@ const { isValid } = require('@arcblock/did');
21
21
  const { BLOCKLET_CONFIGURABLE_KEY, BlockletEvents } = require('@blocklet/constant');
22
22
  const { SpaceClient, IncrementalBackupBlockletCommand } = require('@did-space/client');
23
23
  const { ensureDirSync, existsSync, remove } = require('fs-extra');
24
- const { isEmpty } = require('lodash');
24
+ const isEmpty = require('lodash/isEmpty');
25
25
  const { join, basename } = require('path');
26
26
  const { getAppName, getAppDescription } = require('@blocklet/meta/lib/util');
27
27
 
@@ -1,5 +1,6 @@
1
1
  const { removeSync, outputJsonSync, readJSONSync } = require('fs-extra');
2
- const { cloneDeep, isEmpty } = require('lodash');
2
+ const isEmpty = require('lodash/isEmpty');
3
+ const cloneDeep = require('lodash/cloneDeep');
3
4
  const { join } = require('path');
4
5
  const security = require('@abtnode/util/lib/security');
5
6
  const { BLOCKLET_CONFIGURABLE_KEY } = require('@blocklet/constant');
@@ -1,5 +1,5 @@
1
1
  const { isValid } = require('@arcblock/did');
2
- const { isEmpty } = require('lodash');
2
+ const isEmpty = require('lodash/isEmpty');
3
3
  const merge = require('lodash/merge');
4
4
  const { ensureDirSync, existsSync, rmSync, copy } = require('fs-extra');
5
5
 
package/lib/cert.js CHANGED
@@ -89,17 +89,21 @@ class Cert extends EventEmitter {
89
89
  return this.manager
90
90
  .issue({ domain, siteId, inBlockletSetup }, { delay, metadata: { inBlockletSetup, blockletDid: did } })
91
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;
92
+ // Blocklet Dashboard 中添加域名时,需要更新 domainAliases certificateId
93
+ // 直接在 Blocklet Server Dashboard 中添加域名时,不需要更新 domainAliases 中 certificateId
94
+ if (siteId) {
95
+ const site = await this.states.site.findOne({ id: siteId });
96
+ for (const d of site.domainAliases) {
97
+ if (d.value === domain) {
98
+ d.certificateId = cert.id;
99
+
100
+ break;
101
+ }
98
102
  }
99
- }
100
103
 
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 });
104
+ await this.states.site.update({ id: siteId }, { $set: { domainAliases: site.domainAliases } });
105
+ logger.info('updated cert id for domain alias', { domain, did, certId: cert.id });
106
+ }
103
107
 
104
108
  return cert;
105
109
  });
package/lib/index.js CHANGED
@@ -344,6 +344,8 @@ function ABTNode(options) {
344
344
  getProject: blockletManager.getProject.bind(blockletManager),
345
345
  updateProject: blockletManager.updateProject.bind(blockletManager),
346
346
  createRelease: blockletManager.createRelease.bind(blockletManager),
347
+ connectToStore: blockletManager.connectToStore.bind(blockletManager),
348
+ publishToStore: blockletManager.publishToStore.bind(blockletManager),
347
349
  getReleases: blockletManager.getReleases.bind(blockletManager),
348
350
  getRelease: blockletManager.getRelease.bind(blockletManager),
349
351
  deleteRelease: blockletManager.deleteRelease.bind(blockletManager),
@@ -1,7 +1,8 @@
1
1
  /* eslint-disable no-await-in-loop */
2
2
 
3
3
  const { DEFAULT_DID_REGISTRY, DEFAULT_DID_DOMAIN } = require('@abtnode/constant');
4
- const { isEmpty, omit } = require('lodash');
4
+ const omit = require('lodash/omit');
5
+ const isEmpty = require('lodash/isEmpty');
5
6
 
6
7
  const updateNodeInfo = async ({ printInfo, states }) => {
7
8
  // add didRegistry and didDomain
@@ -1,4 +1,4 @@
1
- const filesize = require('filesize');
1
+ const { filesize } = require('filesize');
2
2
  const { sendToAppChannel } = require('@blocklet/sdk/lib/util/send-notification');
3
3
  const { getAppPublicChannel } = require('@blocklet/meta/lib/channel');
4
4
 
@@ -57,7 +57,7 @@ class NodeMonitSender {
57
57
  const cpuContent = `${Math.floor(cpuPercent)}%`;
58
58
  const memoryPercent = (usedMem / totalMem) * 100;
59
59
  const memoryWanning = memoryPercent > 90;
60
- const memContent = `${filesize(Math.floor(usedMem))} (${Math.floor(memoryPercent)}%)`;
60
+ const memContent = `${filesize(Math.floor(usedMem), { base: 2 })} (${Math.floor(memoryPercent)}%)`;
61
61
 
62
62
  const sender = await this.getSender();
63
63
  const channel = getAppPublicChannel(sender.appDid);
@@ -29,6 +29,7 @@ class Release extends BaseState {
29
29
  'blockletLogo',
30
30
  'blockletIntroduction',
31
31
  'blockletScreenshots',
32
+ 'publishedStoreIds',
32
33
  'blockletComponents',
33
34
  'note',
34
35
  'status',
@@ -318,6 +318,7 @@ class TeamManager extends EventEmitter {
318
318
  }
319
319
 
320
320
  const metaDid = await this.states.blocklet.getBlockletMetaDid(did);
321
+
321
322
  await this.states.blockletExtras.setSettings(metaDid, { storeList: list });
322
323
  this.emit(BlockletEvents.storeChange, { meta: { did: metaDid } });
323
324
  }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.25",
6
+ "version": "1.16.26-beta-c724c8e6",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,41 +19,42 @@
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.25",
23
- "@abtnode/auth": "1.16.25",
24
- "@abtnode/certificate-manager": "1.16.25",
25
- "@abtnode/constant": "1.16.25",
26
- "@abtnode/cron": "1.16.25",
27
- "@abtnode/logger": "1.16.25",
28
- "@abtnode/models": "1.16.25",
29
- "@abtnode/queue": "1.16.25",
30
- "@abtnode/rbac": "1.16.25",
31
- "@abtnode/router-provider": "1.16.25",
32
- "@abtnode/static-server": "1.16.25",
33
- "@abtnode/timemachine": "1.16.25",
34
- "@abtnode/util": "1.16.25",
35
- "@arcblock/did": "1.18.113",
36
- "@arcblock/did-auth": "1.18.113",
37
- "@arcblock/did-ext": "^1.18.113",
22
+ "@abtnode/analytics": "1.16.26-beta-c724c8e6",
23
+ "@abtnode/auth": "1.16.26-beta-c724c8e6",
24
+ "@abtnode/certificate-manager": "1.16.26-beta-c724c8e6",
25
+ "@abtnode/constant": "1.16.26-beta-c724c8e6",
26
+ "@abtnode/cron": "1.16.26-beta-c724c8e6",
27
+ "@abtnode/logger": "1.16.26-beta-c724c8e6",
28
+ "@abtnode/models": "1.16.26-beta-c724c8e6",
29
+ "@abtnode/queue": "1.16.26-beta-c724c8e6",
30
+ "@abtnode/rbac": "1.16.26-beta-c724c8e6",
31
+ "@abtnode/router-provider": "1.16.26-beta-c724c8e6",
32
+ "@abtnode/static-server": "1.16.26-beta-c724c8e6",
33
+ "@abtnode/timemachine": "1.16.26-beta-c724c8e6",
34
+ "@abtnode/util": "1.16.26-beta-c724c8e6",
35
+ "@arcblock/did": "1.18.114",
36
+ "@arcblock/did-auth": "1.18.114",
37
+ "@arcblock/did-ext": "^1.18.114",
38
38
  "@arcblock/did-motif": "^1.1.13",
39
- "@arcblock/did-util": "1.18.113",
40
- "@arcblock/event-hub": "1.18.113",
41
- "@arcblock/jwt": "^1.18.113",
39
+ "@arcblock/did-util": "1.18.114",
40
+ "@arcblock/event-hub": "1.18.114",
41
+ "@arcblock/jwt": "^1.18.114",
42
42
  "@arcblock/pm2-events": "^0.0.5",
43
- "@arcblock/validator": "^1.18.113",
44
- "@arcblock/vc": "1.18.113",
45
- "@blocklet/constant": "1.16.25",
46
- "@blocklet/env": "1.16.25",
47
- "@blocklet/meta": "1.16.25",
48
- "@blocklet/resolver": "1.16.25",
49
- "@blocklet/sdk": "1.16.25",
50
- "@did-space/client": "^0.3.73",
43
+ "@arcblock/validator": "^1.18.114",
44
+ "@arcblock/vc": "1.18.114",
45
+ "@blocklet/constant": "1.16.26-beta-c724c8e6",
46
+ "@blocklet/env": "1.16.26-beta-c724c8e6",
47
+ "@blocklet/meta": "1.16.26-beta-c724c8e6",
48
+ "@blocklet/resolver": "1.16.26-beta-c724c8e6",
49
+ "@blocklet/sdk": "1.16.26-beta-c724c8e6",
50
+ "@blocklet/store": "1.16.26-beta-c724c8e6",
51
+ "@did-space/client": "^0.3.75",
51
52
  "@fidm/x509": "^1.2.1",
52
- "@ocap/mcrypto": "1.18.113",
53
- "@ocap/util": "1.18.113",
54
- "@ocap/wallet": "1.18.113",
53
+ "@ocap/mcrypto": "1.18.114",
54
+ "@ocap/util": "1.18.114",
55
+ "@ocap/wallet": "1.18.114",
55
56
  "@slack/webhook": "^5.0.4",
56
- "archiver": "^5.3.1",
57
+ "archiver": "^7.0.1",
57
58
  "axios": "^0.27.2",
58
59
  "axon": "^2.0.3",
59
60
  "chalk": "^4.1.2",
@@ -62,14 +63,14 @@
62
63
  "detect-port": "^1.5.1",
63
64
  "escape-string-regexp": "^4.0.0",
64
65
  "fast-glob": "^3.3.2",
65
- "filesize": "^6.4.0",
66
+ "filesize": "^10.1.1",
66
67
  "flat": "^5.0.2",
67
68
  "fs-extra": "^11.2.0",
68
69
  "get-port": "^5.1.1",
69
70
  "hasha": "^5.2.2",
70
71
  "is-base64": "^1.1.0",
71
72
  "is-url": "^1.2.4",
72
- "joi": "17.11.0",
73
+ "joi": "17.12.2",
73
74
  "joi-extension-semver": "^5.0.0",
74
75
  "js-yaml": "^4.1.0",
75
76
  "kill-port": "^2.0.1",
@@ -102,5 +103,5 @@
102
103
  "jest": "^29.7.0",
103
104
  "unzipper": "^0.10.11"
104
105
  },
105
- "gitHead": "8752b9a0caa8745e16e1de8db4ef696b713ffb4d"
106
+ "gitHead": "f2b51533d934be041b1cc5b4b2fc8c56f4855a26"
106
107
  }