@abtnode/core 1.7.9 → 1.7.10
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 +12 -10
- package/lib/cert.js +14 -0
- package/lib/event.js +4 -0
- package/lib/index.js +2 -2
- package/lib/router/index.js +1 -1
- package/lib/router/manager.js +3 -3
- package/lib/util/blocklet.js +1 -2
- package/lib/util/index.js +2 -7
- package/package.json +20 -21
- package/lib/util/service.js +0 -81
|
@@ -627,7 +627,7 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
627
627
|
}
|
|
628
628
|
|
|
629
629
|
// eslint-disable-next-line no-unused-vars
|
|
630
|
-
async config({ did, childDid, configs: newConfigs }, context) {
|
|
630
|
+
async config({ did, childDid, configs: newConfigs, skipHook }, context) {
|
|
631
631
|
logger.info('config blocklet', { did });
|
|
632
632
|
if (!Array.isArray(newConfigs)) {
|
|
633
633
|
throw new Error('configs list is not an array');
|
|
@@ -694,15 +694,17 @@ class BlockletManager extends BaseBlockletManager {
|
|
|
694
694
|
blocklet.configObj[x.key] = x.value;
|
|
695
695
|
}
|
|
696
696
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
697
|
+
if (!skipHook) {
|
|
698
|
+
// FIXME: we should also call preConfig for child blocklets
|
|
699
|
+
await hooks.preConfig(blocklet.env.appId, {
|
|
700
|
+
appDir: blocklet.env.appDir,
|
|
701
|
+
hooks: Object.assign(blocklet.meta.hooks || {}, blocklet.meta.scripts || {}),
|
|
702
|
+
exitOnError: true,
|
|
703
|
+
env: { ...getRuntimeEnvironments(blocklet, nodeEnvironments), ...blocklet.configObj },
|
|
704
|
+
did,
|
|
705
|
+
context,
|
|
706
|
+
});
|
|
707
|
+
}
|
|
706
708
|
|
|
707
709
|
// update db
|
|
708
710
|
const configs = childDid
|
package/lib/cert.js
CHANGED
|
@@ -37,6 +37,16 @@ const onCertIssued = (cert) => {
|
|
|
37
37
|
});
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
+
const onCertIssueFailed = (cert) => {
|
|
41
|
+
states.notification.create({
|
|
42
|
+
title: 'Certificate Issue Failed',
|
|
43
|
+
description: `Failed to issue certificate for ${cert.domain}`,
|
|
44
|
+
severity: 'error',
|
|
45
|
+
entityType: 'certificate',
|
|
46
|
+
entityId: cert.id,
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
|
|
40
50
|
const getDomainFromInput = (input) => {
|
|
41
51
|
if (Object.prototype.toString.call(input) === '[object Object]') {
|
|
42
52
|
return input.domain;
|
|
@@ -58,6 +68,10 @@ class Cert extends EventEmitter {
|
|
|
58
68
|
|
|
59
69
|
this.manager.on('cert.expired', onCertExpired);
|
|
60
70
|
this.manager.on('cert.about_to_expire', onCertAboutExpire);
|
|
71
|
+
this.manager.on('cert.error', (cert) => {
|
|
72
|
+
this.emit('cert.error', cert);
|
|
73
|
+
onCertIssueFailed(cert);
|
|
74
|
+
});
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
start() {
|
package/lib/event.js
CHANGED
|
@@ -25,6 +25,7 @@ module.exports = ({
|
|
|
25
25
|
handleRouting,
|
|
26
26
|
domainStatus,
|
|
27
27
|
teamAPI,
|
|
28
|
+
certManager,
|
|
28
29
|
}) => {
|
|
29
30
|
const notificationState = states.notification;
|
|
30
31
|
const nodeState = states.node;
|
|
@@ -230,5 +231,8 @@ module.exports = ({
|
|
|
230
231
|
events.handleServerEvent = handleServerEvent;
|
|
231
232
|
events.handleBlockletEvent = handleBlockletEvent;
|
|
232
233
|
|
|
234
|
+
certManager.on('cert.issued', (data) => onEvent(EVENTS.CERT_ISSUED, data));
|
|
235
|
+
certManager.on('cert.error', (data) => onEvent(EVENTS.CERT_ERROR, data));
|
|
236
|
+
|
|
233
237
|
return events;
|
|
234
238
|
};
|
package/lib/index.js
CHANGED
|
@@ -10,6 +10,7 @@ const {
|
|
|
10
10
|
fromBlockletSource,
|
|
11
11
|
toBlockletSource,
|
|
12
12
|
} = require('@blocklet/meta/lib/constants');
|
|
13
|
+
const { getServiceMetas } = require('@blocklet/meta/lib/service');
|
|
13
14
|
const { listProviders } = require('@abtnode/router-provider');
|
|
14
15
|
const { DEFAULT_CERTIFICATE_EMAIL, EVENTS } = require('@abtnode/constant');
|
|
15
16
|
|
|
@@ -29,7 +30,6 @@ const IP = require('./util/ip');
|
|
|
29
30
|
const DomainStatus = require('./util/domain-status');
|
|
30
31
|
const Upgrade = require('./util/upgrade');
|
|
31
32
|
const resetNode = require('./util/reset-node');
|
|
32
|
-
const { getServices } = require('./util/service');
|
|
33
33
|
const DiskMonitor = require('./util/disk-monitor');
|
|
34
34
|
const createQueue = require('./queue');
|
|
35
35
|
const createEvents = require('./event');
|
|
@@ -377,7 +377,7 @@ function ABTNode(options) {
|
|
|
377
377
|
endSession: (params, context) => states.session.end(params.id, context),
|
|
378
378
|
|
|
379
379
|
// Services
|
|
380
|
-
getServices: (params, context) =>
|
|
380
|
+
getServices: (params, context) => getServiceMetas({ stringifySchema: true }, context),
|
|
381
381
|
|
|
382
382
|
// Utilities: moved here because some deps require native build
|
|
383
383
|
getSysInfo,
|
package/lib/router/index.js
CHANGED
|
@@ -110,7 +110,7 @@ class Router {
|
|
|
110
110
|
await this.provider.update({
|
|
111
111
|
routingTable: this.routingTable,
|
|
112
112
|
certificates,
|
|
113
|
-
|
|
113
|
+
commonHeaders: headers,
|
|
114
114
|
services,
|
|
115
115
|
nodeInfo: pick(nodeInfo, ['name', 'version', 'port', 'mode', 'enableWelcomePage', 'routing']),
|
|
116
116
|
});
|
package/lib/router/manager.js
CHANGED
|
@@ -222,7 +222,7 @@ class RouterManager extends EventEmitter {
|
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
// let custom domain in front of protected domain
|
|
225
|
-
const domainAliases = [{ value: domainAlias, isProtected: false }, ...dbSite.domainAliases];
|
|
225
|
+
const domainAliases = [{ value: domainAlias, isProtected: false }, ...(dbSite.domainAliases || [])];
|
|
226
226
|
|
|
227
227
|
const updateResult = await states.site.update({ _id: id }, { $set: { domainAliases } });
|
|
228
228
|
logger.debug('add domain alias update result', { id, updateResult, domainAlias });
|
|
@@ -420,7 +420,7 @@ class RouterManager extends EventEmitter {
|
|
|
420
420
|
}
|
|
421
421
|
|
|
422
422
|
async getMatchedCert(domain) {
|
|
423
|
-
const certs = await this.certManager.
|
|
423
|
+
const certs = await this.certManager.getAllNormal();
|
|
424
424
|
const matchedCert = certs.find((cert) => this.isCertMatchedDomain(cert, domain));
|
|
425
425
|
|
|
426
426
|
if (matchedCert) {
|
|
@@ -546,7 +546,7 @@ class RouterManager extends EventEmitter {
|
|
|
546
546
|
getRoutingParams: async () => ({
|
|
547
547
|
sites: await ensureLatestInfo(sites),
|
|
548
548
|
certificates,
|
|
549
|
-
|
|
549
|
+
commonHeaders: get(info, 'routing.headers', {}),
|
|
550
550
|
services: [], // TODO: do we need to add some item here?
|
|
551
551
|
nodeInfo: info,
|
|
552
552
|
}),
|
package/lib/util/blocklet.js
CHANGED
|
@@ -48,7 +48,6 @@ const { validate: validateEngine, get: getEngine } = require('../blocklet/manage
|
|
|
48
48
|
|
|
49
49
|
const isRequirementsSatisfied = require('./requirement');
|
|
50
50
|
const { getDidDomainForBlocklet } = require('./get-domain-for-blocklet');
|
|
51
|
-
const { getServices } = require('./service');
|
|
52
51
|
const {
|
|
53
52
|
isBeforeInstalled,
|
|
54
53
|
expandBundle,
|
|
@@ -1024,7 +1023,7 @@ const fixAndVerifyBlockletMeta = (meta, did) => {
|
|
|
1024
1023
|
}
|
|
1025
1024
|
|
|
1026
1025
|
// this step comes last because it has side effects: the meta is changed
|
|
1027
|
-
return fixAndValidateService(meta
|
|
1026
|
+
return fixAndValidateService(meta);
|
|
1028
1027
|
};
|
|
1029
1028
|
|
|
1030
1029
|
const getUpdateMetaList = (oldMetas = [], newMetas = []) => {
|
package/lib/util/index.js
CHANGED
|
@@ -35,7 +35,6 @@ const DEFAULT_WELLKNOWN_PORT = 8088;
|
|
|
35
35
|
|
|
36
36
|
const logger = require('@abtnode/logger')('@abtnode/core:util');
|
|
37
37
|
|
|
38
|
-
const { getServices } = require('./service');
|
|
39
38
|
const request = require('./request');
|
|
40
39
|
|
|
41
40
|
const validateOwner = (owner) => {
|
|
@@ -496,13 +495,9 @@ const lib = {
|
|
|
496
495
|
ensureDataDirs,
|
|
497
496
|
getDataDirs,
|
|
498
497
|
getBaseUrls,
|
|
499
|
-
getBlockletMeta:
|
|
500
|
-
parseBlockletMeta(dir, {
|
|
501
|
-
serviceMetas: getServices(),
|
|
502
|
-
...opts,
|
|
503
|
-
}),
|
|
498
|
+
getBlockletMeta: parseBlockletMeta,
|
|
504
499
|
validateBlockletMeta: (meta, opts = {}) => {
|
|
505
|
-
fixAndValidateService(meta
|
|
500
|
+
fixAndValidateService(meta);
|
|
506
501
|
return validateMeta(meta, opts);
|
|
507
502
|
},
|
|
508
503
|
getBlockletMetaByUrl,
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.7.
|
|
6
|
+
"version": "1.7.10",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -19,31 +19,30 @@
|
|
|
19
19
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@abtnode/certificate-manager": "1.7.
|
|
23
|
-
"@abtnode/constant": "1.7.
|
|
24
|
-
"@abtnode/cron": "1.7.
|
|
25
|
-
"@abtnode/db": "1.7.
|
|
26
|
-
"@abtnode/logger": "1.7.
|
|
27
|
-
"@abtnode/queue": "1.7.
|
|
28
|
-
"@abtnode/rbac": "1.7.
|
|
29
|
-
"@abtnode/router-provider": "1.7.
|
|
30
|
-
"@abtnode/static-server": "1.7.
|
|
31
|
-
"@abtnode/timemachine": "1.7.
|
|
32
|
-
"@abtnode/util": "1.7.
|
|
33
|
-
"@arcblock/did": "^1.16.
|
|
22
|
+
"@abtnode/certificate-manager": "1.7.10",
|
|
23
|
+
"@abtnode/constant": "1.7.10",
|
|
24
|
+
"@abtnode/cron": "1.7.10",
|
|
25
|
+
"@abtnode/db": "1.7.10",
|
|
26
|
+
"@abtnode/logger": "1.7.10",
|
|
27
|
+
"@abtnode/queue": "1.7.10",
|
|
28
|
+
"@abtnode/rbac": "1.7.10",
|
|
29
|
+
"@abtnode/router-provider": "1.7.10",
|
|
30
|
+
"@abtnode/static-server": "1.7.10",
|
|
31
|
+
"@abtnode/timemachine": "1.7.10",
|
|
32
|
+
"@abtnode/util": "1.7.10",
|
|
33
|
+
"@arcblock/did": "^1.16.5",
|
|
34
34
|
"@arcblock/did-motif": "^1.1.5",
|
|
35
|
-
"@arcblock/event-hub": "1.16.
|
|
35
|
+
"@arcblock/event-hub": "1.16.5",
|
|
36
36
|
"@arcblock/pm2-events": "^0.0.5",
|
|
37
|
-
"@arcblock/vc": "^1.16.
|
|
38
|
-
"@blocklet/meta": "1.7.
|
|
37
|
+
"@arcblock/vc": "^1.16.5",
|
|
38
|
+
"@blocklet/meta": "1.7.10",
|
|
39
39
|
"@fidm/x509": "^1.2.1",
|
|
40
40
|
"@nedb/core": "^1.2.2",
|
|
41
41
|
"@nedb/multi": "^1.2.2",
|
|
42
|
-
"@ocap/mcrypto": "^1.16.
|
|
43
|
-
"@ocap/util": "^1.16.
|
|
44
|
-
"@ocap/wallet": "^1.16.
|
|
42
|
+
"@ocap/mcrypto": "^1.16.5",
|
|
43
|
+
"@ocap/util": "^1.16.5",
|
|
44
|
+
"@ocap/wallet": "^1.16.5",
|
|
45
45
|
"@slack/webhook": "^5.0.3",
|
|
46
|
-
"ajv": "^7.0.3",
|
|
47
46
|
"axios": "^0.26.1",
|
|
48
47
|
"axon": "^2.0.3",
|
|
49
48
|
"chalk": "^4.0.0",
|
|
@@ -78,5 +77,5 @@
|
|
|
78
77
|
"express": "^4.17.1",
|
|
79
78
|
"jest": "^27.4.5"
|
|
80
79
|
},
|
|
81
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "8eab10fd39b6183a2fa4d2706f52e8b2ecaa059a"
|
|
82
81
|
}
|
package/lib/util/service.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
const fs = require('fs-extra');
|
|
2
|
-
const cloneDeep = require('lodash/cloneDeep');
|
|
3
|
-
const Ajv = require('ajv').default;
|
|
4
|
-
|
|
5
|
-
const { NODE_SERVICES } = require('@abtnode/constant');
|
|
6
|
-
|
|
7
|
-
const ajv = new Ajv({
|
|
8
|
-
useDefaults: true,
|
|
9
|
-
removeAdditional: 'all',
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
const SERVICES = {
|
|
13
|
-
AUTH: fs.readJSONSync(require.resolve('@abtnode/blocklet-services/configs/auth.json')),
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const getServices = ({ stringifySchema = false } = {}) => {
|
|
17
|
-
const list = Object.values(SERVICES).map((x) => {
|
|
18
|
-
const data = cloneDeep(x);
|
|
19
|
-
if (stringifySchema) {
|
|
20
|
-
data.schema = JSON.stringify(x.schema);
|
|
21
|
-
}
|
|
22
|
-
return data;
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// backward compatible
|
|
26
|
-
const authService = cloneDeep(list.find((x) => x.name === NODE_SERVICES.AUTH));
|
|
27
|
-
authService.name = NODE_SERVICES.AUTH_SERVICE;
|
|
28
|
-
list.push(authService);
|
|
29
|
-
|
|
30
|
-
return list;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const getServiceMeta = (serviceName) => {
|
|
34
|
-
if (!serviceName) {
|
|
35
|
-
throw new Error('service name should not be empty');
|
|
36
|
-
}
|
|
37
|
-
const metas = getServices();
|
|
38
|
-
const meta = metas.find((x) => x.name === serviceName);
|
|
39
|
-
if (!meta) {
|
|
40
|
-
throw new Error(`service ${serviceName} does not exist`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return meta;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const getServiceConfig = (service, customConfig) => {
|
|
47
|
-
const serviceMeta = typeof service === 'string' ? getServiceMeta(service) : service;
|
|
48
|
-
|
|
49
|
-
const validate = ajv.compile(serviceMeta.schema.JSONSchema);
|
|
50
|
-
|
|
51
|
-
const data = cloneDeep(customConfig || {});
|
|
52
|
-
// this method may have side effect thar will fill default value to customConfig
|
|
53
|
-
validate(data || {});
|
|
54
|
-
|
|
55
|
-
return data;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const getDefaultServiceConfig = (service) => {
|
|
59
|
-
const serviceMeta = typeof service === 'string' ? getServiceMeta(service) : service;
|
|
60
|
-
|
|
61
|
-
// parse empty custom config to get default config
|
|
62
|
-
return getServiceConfig(serviceMeta, {});
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
const findService = (services, name) => {
|
|
66
|
-
const names = [name];
|
|
67
|
-
|
|
68
|
-
// backward compatible
|
|
69
|
-
if (name === NODE_SERVICES.AUTH) {
|
|
70
|
-
names.push(NODE_SERVICES.AUTH_SERVICE);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return (services || []).find((x) => names.includes(x.name));
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
module.exports = {
|
|
77
|
-
getServices,
|
|
78
|
-
getServiceConfig,
|
|
79
|
-
getDefaultServiceConfig,
|
|
80
|
-
findService,
|
|
81
|
-
};
|