@abtnode/blocklet-services 1.8.58 → 1.8.60

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.
@@ -1,12 +1,13 @@
1
1
  const get = require('lodash/get');
2
2
 
3
- const { findWebInterface, findComponentById } = require('@blocklet/meta/lib/util');
4
- const { getDefaultServiceConfig, findService } = require('@blocklet/meta/lib/service');
3
+ const { findComponentById } = require('@blocklet/meta/lib/util');
4
+ const { getDefaultServiceConfig } = require('@blocklet/meta/lib/service');
5
5
  const { WHO_CAN_ACCESS } = require('@abtnode/constant');
6
6
  const cache = require('../cache');
7
7
 
8
8
  const formatContext = require('./format-context');
9
9
  const getDynamicServiceConfig = require('./get-dynamic-service-config');
10
+ const getStaticServiceConfig = require('./get-static-service-config');
10
11
 
11
12
  module.exports = ({ node, req, options }) => {
12
13
  req.getBlockletUrl = () => req.headers['x-blocklet-url'] || get(options, 'blockletUrl', '');
@@ -34,7 +35,7 @@ module.exports = ({ node, req, options }) => {
34
35
 
35
36
  /**
36
37
  * @return obj | null
37
- * @TODO get service config from routing rule
38
+ * @FIXME this api should ensure high performance
38
39
  */
39
40
  req.getServiceConfig = async (serviceName, { componentId } = {}) => {
40
41
  if (!serviceName) {
@@ -66,32 +67,21 @@ module.exports = ({ node, req, options }) => {
66
67
  appDynamicConfig = null;
67
68
  }
68
69
 
69
- const defaultConfigWithAppDynamic = { ...defaultConfig, ...appDynamicConfig };
70
-
71
70
  const _componentId = componentId || req.getBlockletComponentId();
72
71
 
72
+ const componentStaticConfig = getStaticServiceConfig(serviceName, app, _componentId);
73
+
74
+ const config = { ...defaultConfig, ...componentStaticConfig, ...appDynamicConfig };
75
+
73
76
  const component = findComponentById(app, _componentId);
74
77
 
75
78
  if (!component) {
76
- return defaultConfigWithAppDynamic;
77
- }
78
-
79
- const _interface = findWebInterface(component);
80
- if (!_interface) {
81
- return defaultConfigWithAppDynamic;
79
+ return config;
82
80
  }
83
81
 
84
- // find service
85
- const service = findService(_interface.services, serviceName);
86
- const componentStaticConfig = service?.config;
87
-
88
82
  const componentDynamicConfig = getDynamicServiceConfig(serviceName, component, { type: 'component' });
89
83
 
90
- if (!componentStaticConfig && !componentDynamicConfig) {
91
- return defaultConfigWithAppDynamic;
92
- }
93
-
94
- return { ...defaultConfig, ...componentStaticConfig, ...appDynamicConfig, ...componentDynamicConfig };
84
+ return { ...config, ...componentDynamicConfig };
95
85
  };
96
86
 
97
87
  req.getBlocklet = async ({ useCache = true } = {}) => {
@@ -0,0 +1,63 @@
1
+ const omit = require('lodash/omit');
2
+ const difference = require('lodash/difference');
3
+ const { findWebInterface, forEachBlockletSync } = require('@blocklet/meta/lib/util');
4
+ const { findService } = require('@blocklet/meta/lib/service');
5
+ const { NODE_SERVICES } = require('@abtnode/constant');
6
+
7
+ // [a, b], [b, c] => [a, b, c]
8
+ const mergeProfileFields = (a = [], b = []) => a.concat(difference(b, a));
9
+
10
+ const getAuthConfig = (app, componentId) => {
11
+ const ret = {};
12
+
13
+ let rootConfig = null;
14
+ let hasComponent = false;
15
+
16
+ forEachBlockletSync(app, (component, { id, level }) => {
17
+ if (id === componentId) {
18
+ hasComponent = true;
19
+ }
20
+
21
+ const _interface = findWebInterface(component);
22
+ if (_interface) {
23
+ const service = findService(_interface.services, NODE_SERVICES.AUTH);
24
+ const { config } = service || {};
25
+ if (config) {
26
+ if (level === 0) {
27
+ rootConfig = config;
28
+ // 统一使用 root component 的 allowSwitchProfile
29
+ if (config.allowSwitchProfile !== undefined) {
30
+ ret.allowSwitchProfile = config.allowSwitchProfile;
31
+ }
32
+ }
33
+
34
+ if (id === componentId) {
35
+ hasComponent = true;
36
+ // 忽略 component 的 allowSwitchProfile
37
+ Object.assign(ret, omit(config, ['profileFields', 'allowSwitchProfile']));
38
+ }
39
+
40
+ if (config.profileFields) {
41
+ ret.profileFields = mergeProfileFields(ret.profileFields, config.profileFields);
42
+ }
43
+ }
44
+ }
45
+ });
46
+
47
+ // 如果没找到 component 时, 使用 root component 的 config #6101
48
+ if (!hasComponent && rootConfig) {
49
+ Object.assign(ret, omit(rootConfig, ['profileFields']));
50
+ }
51
+
52
+ return ret;
53
+ };
54
+
55
+ const getStaticServiceConfig = (serviceName, app, componentId) => {
56
+ if (serviceName === NODE_SERVICES.AUTH) {
57
+ return getAuthConfig(app, componentId);
58
+ }
59
+
60
+ throw new Error(`Invalid service name: ${serviceName}`);
61
+ };
62
+
63
+ module.exports = getStaticServiceConfig;
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css",
4
- "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.70a93224.js",
4
+ "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.a359ba8b.js",
5
5
  "static/js/560.3efa5410.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/560.3efa5410.chunk.js",
6
6
  "static/js/255.d2001b91.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/255.d2001b91.chunk.js",
7
7
  "static/js/371.f9acea25.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/371.f9acea25.chunk.js",
8
8
  "static/js/737.05b818c2.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/737.05b818c2.chunk.js",
9
9
  "static/js/906.f8540d1c.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/906.f8540d1c.chunk.js",
10
10
  "static/js/868.ffa052dc.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/868.ffa052dc.chunk.js",
11
- "static/js/409.5bba479c.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/409.5bba479c.chunk.js",
11
+ "static/js/409.fd7e8305.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/409.fd7e8305.chunk.js",
12
12
  "static/js/682.c64ae291.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/682.c64ae291.chunk.js",
13
13
  "static/js/998.92ae1f72.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/998.92ae1f72.chunk.js",
14
14
  "static/js/437.d815f0c0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/437.d815f0c0.chunk.js",
@@ -42,14 +42,14 @@
42
42
  "router-template-styles/styles.css": "/.blocklet/proxy/blocklet-service/router-template-styles/styles.css",
43
43
  "index.html": "/.blocklet/proxy/blocklet-service/index.html",
44
44
  "main.632501d5.css.map": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css.map",
45
- "main.70a93224.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.70a93224.js.map",
45
+ "main.a359ba8b.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.a359ba8b.js.map",
46
46
  "560.3efa5410.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/560.3efa5410.chunk.js.map",
47
47
  "255.d2001b91.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/255.d2001b91.chunk.js.map",
48
48
  "371.f9acea25.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/371.f9acea25.chunk.js.map",
49
49
  "737.05b818c2.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/737.05b818c2.chunk.js.map",
50
50
  "906.f8540d1c.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/906.f8540d1c.chunk.js.map",
51
51
  "868.ffa052dc.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/868.ffa052dc.chunk.js.map",
52
- "409.5bba479c.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/409.5bba479c.chunk.js.map",
52
+ "409.fd7e8305.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/409.fd7e8305.chunk.js.map",
53
53
  "682.c64ae291.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/682.c64ae291.chunk.js.map",
54
54
  "998.92ae1f72.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/998.92ae1f72.chunk.js.map",
55
55
  "437.d815f0c0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/437.d815f0c0.chunk.js.map",
@@ -64,6 +64,6 @@
64
64
  },
65
65
  "entrypoints": [
66
66
  "static/css/main.632501d5.css",
67
- "static/js/main.70a93224.js"
67
+ "static/js/main.a359ba8b.js"
68
68
  ]
69
69
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/.well-known/service/blocklet/favicon"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><script src=".well-known/service/api/env"></script><script src="__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.70a93224.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/.well-known/service/blocklet/favicon"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><script src=".well-known/service/api/env"></script><script src="__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.a359ba8b.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>