@abtnode/core 1.16.25-next-bc2f4c63 → 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 +7 -0
- package/lib/blocklet/downloader/resolve-download.js +2 -2
- package/lib/blocklet/manager/disk.js +10 -0
- package/lib/blocklet/manager/helper/migrate-application-to-struct-v2.js +1 -1
- package/lib/blocklet/project/connect-to-store.js +69 -0
- package/lib/blocklet/project/create-pack-release.js +13 -10
- package/lib/blocklet/project/index.js +20 -7
- package/lib/blocklet/project/publish-to-store.js +78 -0
- package/lib/blocklet/storage/backup/blocklet-extras.js +2 -1
- package/lib/blocklet/storage/backup/blocklet.js +1 -1
- package/lib/blocklet/storage/backup/disk.js +1 -1
- package/lib/blocklet/storage/backup/spaces.js +1 -1
- package/lib/blocklet/storage/restore/blocklet-extras.js +2 -1
- package/lib/blocklet/storage/restore/disk.js +1 -1
- package/lib/cert.js +13 -9
- package/lib/index.js +2 -0
- package/lib/migrations/1.6.9-update-node-info-and-certificate.js +2 -1
- package/lib/monitor/node-monit-sender.js +2 -2
- package/lib/states/project.js +3 -1
- package/lib/states/release.js +1 -0
- package/lib/team/manager.js +1 -0
- package/lib/util/blocklet.js +3 -0
- package/lib/util/install-external-dependencies.js +40 -17
- package/package.json +36 -35
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)
|
|
@@ -78,7 +78,7 @@ const resolveDownload = async (tarFile, dist, { removeTarFile = true, logger = d
|
|
|
78
78
|
|
|
79
79
|
await fs.move(downloadDir, installDir, { overwrite: true });
|
|
80
80
|
|
|
81
|
-
installExternalDependencies(installDir);
|
|
81
|
+
await installExternalDependencies({ appDir: installDir, forceInstall: true });
|
|
82
82
|
} catch (error) {
|
|
83
83
|
fs.removeSync(downloadDir);
|
|
84
84
|
fs.removeSync(tmp);
|
|
@@ -145,7 +145,7 @@ const resolveDiffDownload = async (
|
|
|
145
145
|
logger.info('Move downloadDir to installDir', { downloadDir, bundleDir });
|
|
146
146
|
await fs.move(downloadDir, bundleDir, { overwrite: true });
|
|
147
147
|
|
|
148
|
-
installExternalDependencies(bundleDir);
|
|
148
|
+
await installExternalDependencies({ appDir: bundleDir, forceInstall: true });
|
|
149
149
|
|
|
150
150
|
return { meta, installDir: bundleDir };
|
|
151
151
|
} catch (error) {
|
|
@@ -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
|
|
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;
|
|
@@ -62,10 +62,6 @@ const createPackRelease = async ({
|
|
|
62
62
|
throw new Error('project not found');
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
if (project0.type !== PROJECT.TYPES.pack) {
|
|
66
|
-
throw new Error('project type is not pack');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
65
|
const action = releaseId ? 'update' : 'create';
|
|
70
66
|
|
|
71
67
|
if (action === 'update') {
|
|
@@ -95,14 +91,13 @@ const createPackRelease = async ({
|
|
|
95
91
|
|
|
96
92
|
const release = await releaseState.upsertRelease({
|
|
97
93
|
...params,
|
|
94
|
+
publishedStoreIds: [],
|
|
98
95
|
projectId,
|
|
99
96
|
releaseId,
|
|
100
97
|
status,
|
|
101
98
|
});
|
|
102
|
-
const project = await projectState.updateProject(projectId, params);
|
|
103
99
|
|
|
104
100
|
const _releaseId = release.id;
|
|
105
|
-
|
|
106
101
|
const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
|
|
107
102
|
const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
|
|
108
103
|
const tmpResourceDir = path.join(projectDir, PROJECT.RESOURCE_DIR);
|
|
@@ -118,10 +113,6 @@ const createPackRelease = async ({
|
|
|
118
113
|
await fs.ensureDir(tmpResourceDir);
|
|
119
114
|
}
|
|
120
115
|
|
|
121
|
-
if (status === PROJECT.RELEASE_STATUS.draft) {
|
|
122
|
-
return release;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
116
|
const releaseExportDir = path.join(releaseDir, '.blocklet');
|
|
126
117
|
const releaseBundleDir = path.join(releaseExportDir, 'bundle');
|
|
127
118
|
const releaseReleaseDir = path.join(releaseExportDir, 'release');
|
|
@@ -129,6 +120,18 @@ const createPackRelease = async ({
|
|
|
129
120
|
const moniker = (urlPathFriendly(slugify(release.blockletTitle)) || 'blocklet').toLowerCase();
|
|
130
121
|
const releaseFileName = `${moniker}-${release.blockletVersion}.zip`;
|
|
131
122
|
const releaseFile = path.join(releaseDir, releaseFileName);
|
|
123
|
+
|
|
124
|
+
if (status !== PROJECT.RELEASE_STATUS.draft) {
|
|
125
|
+
params.lastReleaseId = _releaseId;
|
|
126
|
+
params.lastReleaseFiles = [releaseFileName];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const project = await projectState.updateProject(projectId, params);
|
|
130
|
+
|
|
131
|
+
if (status === PROJECT.RELEASE_STATUS.draft) {
|
|
132
|
+
return release;
|
|
133
|
+
}
|
|
134
|
+
|
|
132
135
|
if (fs.existsSync(releaseFile)) {
|
|
133
136
|
logger.error('release file already exists, remove it', releaseFile);
|
|
134
137
|
await fs.remove(releaseFile);
|
|
@@ -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
|
|
|
@@ -150,7 +152,9 @@ const createRelease = async ({
|
|
|
150
152
|
throw new Error('project not found');
|
|
151
153
|
}
|
|
152
154
|
|
|
153
|
-
|
|
155
|
+
const isPack = blockletComponents?.length > 0;
|
|
156
|
+
|
|
157
|
+
if (isPack) {
|
|
154
158
|
return createPackRelease({
|
|
155
159
|
did,
|
|
156
160
|
projectId,
|
|
@@ -197,14 +201,13 @@ const createRelease = async ({
|
|
|
197
201
|
|
|
198
202
|
const release = await releaseState.upsertRelease({
|
|
199
203
|
...params,
|
|
204
|
+
publishedStoreIds: [],
|
|
200
205
|
projectId,
|
|
201
206
|
releaseId,
|
|
202
207
|
status,
|
|
203
208
|
});
|
|
204
|
-
const project = await projectState.updateProject(projectId, params);
|
|
205
209
|
|
|
206
210
|
const _releaseId = release.id;
|
|
207
|
-
|
|
208
211
|
const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
|
|
209
212
|
const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
|
|
210
213
|
const tmpResourceDir = path.join(projectDir, PROJECT.RESOURCE_DIR);
|
|
@@ -220,10 +223,6 @@ const createRelease = async ({
|
|
|
220
223
|
await fs.ensureDir(tmpResourceDir);
|
|
221
224
|
}
|
|
222
225
|
|
|
223
|
-
if (status === PROJECT.RELEASE_STATUS.draft) {
|
|
224
|
-
return release;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
226
|
const releaseExportDir = path.join(releaseDir, '.blocklet');
|
|
228
227
|
const releaseBundleDir = path.join(releaseExportDir, 'bundle');
|
|
229
228
|
const releaseReleaseDir = path.join(releaseExportDir, 'release');
|
|
@@ -231,6 +230,18 @@ const createRelease = async ({
|
|
|
231
230
|
const moniker = (urlPathFriendly(slugify(release.blockletTitle)) || 'blocklet').toLowerCase();
|
|
232
231
|
const releaseFileName = `${moniker}-${release.blockletVersion}.zip`;
|
|
233
232
|
const releaseFile = path.join(releaseDir, releaseFileName);
|
|
233
|
+
|
|
234
|
+
if (status !== PROJECT.RELEASE_STATUS.draft) {
|
|
235
|
+
params.lastReleaseId = _releaseId;
|
|
236
|
+
params.lastReleaseFiles = [releaseFileName];
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const project = await projectState.updateProject(projectId, params);
|
|
240
|
+
|
|
241
|
+
if (status === PROJECT.RELEASE_STATUS.draft) {
|
|
242
|
+
return release;
|
|
243
|
+
}
|
|
244
|
+
|
|
234
245
|
if (fs.existsSync(releaseFile)) {
|
|
235
246
|
logger.error('release file already exists, remove it', releaseFile);
|
|
236
247
|
await fs.remove(releaseFile);
|
|
@@ -402,4 +413,6 @@ module.exports = {
|
|
|
402
413
|
deleteRelease,
|
|
403
414
|
getSelectedResources,
|
|
404
415
|
updateSelectedResources,
|
|
416
|
+
connectToStore,
|
|
417
|
+
publishToStore,
|
|
405
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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');
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
102
|
-
|
|
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
|
|
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);
|
package/lib/states/project.js
CHANGED
|
@@ -42,10 +42,12 @@ class Project extends BaseState {
|
|
|
42
42
|
'blockletDescription',
|
|
43
43
|
'blockletDid',
|
|
44
44
|
'blockletScreenshots',
|
|
45
|
+
'lastReleaseId',
|
|
46
|
+
'lastReleaseFiles',
|
|
45
47
|
]),
|
|
46
48
|
(x) => !isUndefinedOrNull(x)
|
|
47
49
|
);
|
|
48
|
-
|
|
50
|
+
_params.type = params.blockletComponents?.length ? 'pack' : 'resource';
|
|
49
51
|
const [, [updated]] = await this.update({ id }, { $set: _params });
|
|
50
52
|
return updated;
|
|
51
53
|
}
|
package/lib/states/release.js
CHANGED
package/lib/team/manager.js
CHANGED
|
@@ -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/lib/util/blocklet.js
CHANGED
|
@@ -104,6 +104,7 @@ const { validate: validateEngine, get: getEngine } = require('../blocklet/manage
|
|
|
104
104
|
const isRequirementsSatisfied = require('./requirement');
|
|
105
105
|
const { getDidDomainForBlocklet } = require('./get-domain-for-blocklet');
|
|
106
106
|
const { expandBundle, findInterfacePortByName, prettyURL, templateReplace, getServerDidDomain } = require('./index');
|
|
107
|
+
const { installExternalDependencies } = require('./install-external-dependencies');
|
|
107
108
|
|
|
108
109
|
/**
|
|
109
110
|
* get blocklet engine info, default is node
|
|
@@ -562,6 +563,8 @@ const startBlockletProcess = async (
|
|
|
562
563
|
const env = getRuntimeEnvironments(b, nodeEnvironments, ancestors);
|
|
563
564
|
const startedAt = Date.now();
|
|
564
565
|
|
|
566
|
+
await installExternalDependencies({ appDir: env?.BLOCKLET_APP_DIR });
|
|
567
|
+
|
|
565
568
|
// run hook
|
|
566
569
|
await preFlight(b, { env });
|
|
567
570
|
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { spawn } = require('child_process');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const path = require('path');
|
|
4
4
|
|
|
5
|
-
function
|
|
5
|
+
function isDependencyInstalled(appDir, dependency) {
|
|
6
|
+
return fs.existsSync(path.resolve(appDir, 'node_modules', dependency));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function installExternalDependencies({ appDir, forceInstall = false } = {}) {
|
|
6
10
|
if (!appDir) {
|
|
7
11
|
throw new Error('appDir is required');
|
|
8
12
|
}
|
|
@@ -22,25 +26,44 @@ function installExternalDependencies(appDir) {
|
|
|
22
26
|
// FIXME: 梁柱, 等未来所有的 blocklet 使用了正式版, 废弃 singleExternals
|
|
23
27
|
const { singleExternals, blockletExternalDependencies } = packageJson;
|
|
24
28
|
const externals = singleExternals || blockletExternalDependencies;
|
|
25
|
-
if (!externals || !externals
|
|
29
|
+
if (!Array.isArray(externals) || !externals.length) {
|
|
26
30
|
return;
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
const
|
|
30
|
-
cwd: appDir,
|
|
31
|
-
stdio: 'pipe',
|
|
32
|
-
shell: true,
|
|
33
|
-
env: {
|
|
34
|
-
...process.env,
|
|
35
|
-
NODE_ENV: 'production',
|
|
36
|
-
},
|
|
37
|
-
});
|
|
33
|
+
const isNeedInstall = forceInstall || externals.some((dependency) => !isDependencyInstalled(appDir, dependency));
|
|
38
34
|
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
if (result.error) {
|
|
43
|
-
throw result.error;
|
|
35
|
+
if (!isNeedInstall) {
|
|
36
|
+
return;
|
|
44
37
|
}
|
|
38
|
+
|
|
39
|
+
// eslint-disable-next-line consistent-return
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
const child = spawn('npm', ['install'], {
|
|
42
|
+
cwd: appDir,
|
|
43
|
+
stdio: 'pipe',
|
|
44
|
+
shell: true,
|
|
45
|
+
env: {
|
|
46
|
+
...process.env,
|
|
47
|
+
NODE_ENV: 'production',
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
let errorOutput = '';
|
|
52
|
+
child.stderr.on('data', (data) => {
|
|
53
|
+
errorOutput += data.toString();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
child.on('close', (code) => {
|
|
57
|
+
if (code !== 0 && errorOutput.trim()) {
|
|
58
|
+
reject(new Error(errorOutput));
|
|
59
|
+
} else {
|
|
60
|
+
resolve();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
child.on('error', (err) => {
|
|
65
|
+
reject(err);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
45
68
|
}
|
|
46
69
|
module.exports = { installExternalDependencies };
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.
|
|
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.
|
|
23
|
-
"@abtnode/auth": "1.16.
|
|
24
|
-
"@abtnode/certificate-manager": "1.16.
|
|
25
|
-
"@abtnode/constant": "1.16.
|
|
26
|
-
"@abtnode/cron": "1.16.
|
|
27
|
-
"@abtnode/logger": "1.16.
|
|
28
|
-
"@abtnode/models": "1.16.
|
|
29
|
-
"@abtnode/queue": "1.16.
|
|
30
|
-
"@abtnode/rbac": "1.16.
|
|
31
|
-
"@abtnode/router-provider": "1.16.
|
|
32
|
-
"@abtnode/static-server": "1.16.
|
|
33
|
-
"@abtnode/timemachine": "1.16.
|
|
34
|
-
"@abtnode/util": "1.16.
|
|
35
|
-
"@arcblock/did": "1.18.
|
|
36
|
-
"@arcblock/did-auth": "1.18.
|
|
37
|
-
"@arcblock/did-ext": "^1.18.
|
|
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.
|
|
40
|
-
"@arcblock/event-hub": "1.18.
|
|
41
|
-
"@arcblock/jwt": "^1.18.
|
|
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.
|
|
44
|
-
"@arcblock/vc": "1.18.
|
|
45
|
-
"@blocklet/constant": "1.16.
|
|
46
|
-
"@blocklet/env": "1.16.
|
|
47
|
-
"@blocklet/meta": "1.16.
|
|
48
|
-
"@blocklet/resolver": "1.16.
|
|
49
|
-
"@blocklet/sdk": "1.16.
|
|
50
|
-
"@
|
|
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.
|
|
53
|
-
"@ocap/util": "1.18.
|
|
54
|
-
"@ocap/wallet": "1.18.
|
|
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": "^
|
|
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": "^
|
|
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.
|
|
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": "
|
|
106
|
+
"gitHead": "f2b51533d934be041b1cc5b4b2fc8c56f4855a26"
|
|
106
107
|
}
|