@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.
@@ -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
- // FIXME: we should also call preConfig for child blocklets
698
- await hooks.preConfig(blocklet.env.appId, {
699
- appDir: blocklet.env.appDir,
700
- hooks: Object.assign(blocklet.meta.hooks || {}, blocklet.meta.scripts || {}),
701
- exitOnError: true,
702
- env: { ...getRuntimeEnvironments(blocklet, nodeEnvironments), ...blocklet.configObj },
703
- did,
704
- context,
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) => getServices({ stringifySchema: true }, 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,
@@ -110,7 +110,7 @@ class Router {
110
110
  await this.provider.update({
111
111
  routingTable: this.routingTable,
112
112
  certificates,
113
- globalHeaders: headers,
113
+ commonHeaders: headers,
114
114
  services,
115
115
  nodeInfo: pick(nodeInfo, ['name', 'version', 'port', 'mode', 'enableWelcomePage', 'routing']),
116
116
  });
@@ -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.getAll();
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
- globalHeaders: get(info, 'routing.headers', {}),
549
+ commonHeaders: get(info, 'routing.headers', {}),
550
550
  services: [], // TODO: do we need to add some item here?
551
551
  nodeInfo: info,
552
552
  }),
@@ -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, getServices());
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: (dir, opts = {}) =>
500
- parseBlockletMeta(dir, {
501
- serviceMetas: getServices(),
502
- ...opts,
503
- }),
498
+ getBlockletMeta: parseBlockletMeta,
504
499
  validateBlockletMeta: (meta, opts = {}) => {
505
- fixAndValidateService(meta, getServices(), opts.fix);
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.9",
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.9",
23
- "@abtnode/constant": "1.7.9",
24
- "@abtnode/cron": "1.7.9",
25
- "@abtnode/db": "1.7.9",
26
- "@abtnode/logger": "1.7.9",
27
- "@abtnode/queue": "1.7.9",
28
- "@abtnode/rbac": "1.7.9",
29
- "@abtnode/router-provider": "1.7.9",
30
- "@abtnode/static-server": "1.7.9",
31
- "@abtnode/timemachine": "1.7.9",
32
- "@abtnode/util": "1.7.9",
33
- "@arcblock/did": "^1.16.4",
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.4",
35
+ "@arcblock/event-hub": "1.16.5",
36
36
  "@arcblock/pm2-events": "^0.0.5",
37
- "@arcblock/vc": "^1.16.4",
38
- "@blocklet/meta": "1.7.9",
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.4",
43
- "@ocap/util": "^1.16.4",
44
- "@ocap/wallet": "^1.16.4",
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": "285f4fedd41fcb8e1814ce5d8250ac10616e67e0"
80
+ "gitHead": "8eab10fd39b6183a2fa4d2706f52e8b2ecaa059a"
82
81
  }
@@ -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
- };