@abtnode/blocklet-services 1.7.14 → 1.7.15

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.
Files changed (55) hide show
  1. package/api/index.js +6 -3
  2. package/api/middlewares/check-blocklet.js +14 -0
  3. package/api/services/auth/connect/login.js +21 -2
  4. package/api/services/auth/connect/switch-passport.js +10 -0
  5. package/api/services/auth/connect/switch-profile.js +11 -1
  6. package/api/util/index.js +45 -6
  7. package/build/asset-manifest.json +28 -28
  8. package/build/index.html +1 -1
  9. package/build/{precache-manifest.62677c47082207508be287829a517379.js → precache-manifest.fa7b4ab579d57fabdd2f661bbe9477eb.js} +27 -27
  10. package/build/service-worker.js +1 -1
  11. package/build/static/js/0.0e886baa.chunk.js +3 -0
  12. package/build/static/js/{0.d567f606.chunk.js.LICENSE.txt → 0.0e886baa.chunk.js.LICENSE.txt} +0 -0
  13. package/build/static/js/0.0e886baa.chunk.js.map +1 -0
  14. package/build/static/js/1.ad8ebbc7.chunk.js +2 -0
  15. package/build/static/js/1.ad8ebbc7.chunk.js.map +1 -0
  16. package/build/static/js/10.4bc669a4.chunk.js +2 -0
  17. package/build/static/js/10.4bc669a4.chunk.js.map +1 -0
  18. package/build/static/js/4.5ba3405d.chunk.js +3 -0
  19. package/build/static/js/{4.ec5cc748.chunk.js.LICENSE.txt → 4.5ba3405d.chunk.js.LICENSE.txt} +31 -43
  20. package/build/static/js/4.5ba3405d.chunk.js.map +1 -0
  21. package/build/static/js/5.bbb19a41.chunk.js +2 -0
  22. package/build/static/js/5.bbb19a41.chunk.js.map +1 -0
  23. package/build/static/js/6.81f46015.chunk.js +2 -0
  24. package/build/static/js/6.81f46015.chunk.js.map +1 -0
  25. package/build/static/js/7.bf50e386.chunk.js +2 -0
  26. package/build/static/js/7.bf50e386.chunk.js.map +1 -0
  27. package/build/static/js/8.7b812796.chunk.js +2 -0
  28. package/build/static/js/8.7b812796.chunk.js.map +1 -0
  29. package/build/static/js/9.fb2b8a65.chunk.js +2 -0
  30. package/build/static/js/9.fb2b8a65.chunk.js.map +1 -0
  31. package/build/static/js/main.de8a9159.chunk.js +2 -0
  32. package/build/static/js/main.de8a9159.chunk.js.map +1 -0
  33. package/build/static/js/{runtime-main.49dce7d3.js → runtime-main.829b2277.js} +2 -2
  34. package/build/static/js/{runtime-main.49dce7d3.js.map → runtime-main.829b2277.js.map} +1 -1
  35. package/package.json +32 -29
  36. package/build/static/js/0.d567f606.chunk.js +0 -3
  37. package/build/static/js/0.d567f606.chunk.js.map +0 -1
  38. package/build/static/js/1.ab9dcdd2.chunk.js +0 -2
  39. package/build/static/js/1.ab9dcdd2.chunk.js.map +0 -1
  40. package/build/static/js/10.605a889f.chunk.js +0 -2
  41. package/build/static/js/10.605a889f.chunk.js.map +0 -1
  42. package/build/static/js/4.ec5cc748.chunk.js +0 -3
  43. package/build/static/js/4.ec5cc748.chunk.js.map +0 -1
  44. package/build/static/js/5.20ba603f.chunk.js +0 -2
  45. package/build/static/js/5.20ba603f.chunk.js.map +0 -1
  46. package/build/static/js/6.f3503586.chunk.js +0 -2
  47. package/build/static/js/6.f3503586.chunk.js.map +0 -1
  48. package/build/static/js/7.9310535b.chunk.js +0 -2
  49. package/build/static/js/7.9310535b.chunk.js.map +0 -1
  50. package/build/static/js/8.ec34ae8e.chunk.js +0 -2
  51. package/build/static/js/8.ec34ae8e.chunk.js.map +0 -1
  52. package/build/static/js/9.0c82bd91.chunk.js +0 -2
  53. package/build/static/js/9.0c82bd91.chunk.js.map +0 -1
  54. package/build/static/js/main.f3a4f0ac.chunk.js +0 -2
  55. package/build/static/js/main.f3a4f0ac.chunk.js.map +0 -1
package/api/index.js CHANGED
@@ -32,6 +32,7 @@ const createBlockletRoutes = require('./routes/blocklet');
32
32
  const createDnsResolver = require('./routes/dns-resolver');
33
33
  const checkRunning = require('./middlewares/check-running');
34
34
  const checkAdminPermission = require('./middlewares/check-admin-permission');
35
+ const checkBlocklet = require('./middlewares/check-blocklet');
35
36
  const proxyToDaemon = require('./middlewares/proxy-to-daemon');
36
37
  const attachSharedUtils = require('./util/attach-shared-utils');
37
38
 
@@ -202,6 +203,8 @@ module.exports = function createServer(node, serverOptions = {}) {
202
203
  res.sendWebPage();
203
204
  });
204
205
 
206
+ server.use(checkBlocklet);
207
+
205
208
  // Middleware: check running
206
209
  // Request would not arrive here before blocklet is installed, because there is no config in router provider(nginx)
207
210
  server.use(checkRunning);
@@ -220,8 +223,8 @@ module.exports = function createServer(node, serverOptions = {}) {
220
223
  });
221
224
 
222
225
  // After all service middleware, we can now safely pass all traffic to blocklets
223
- server.use((req, res, next) => {
224
- const { target } = ensureProxyUrl(req);
226
+ server.use(async (req, res, next) => {
227
+ const { target } = await ensureProxyUrl(req);
225
228
 
226
229
  if (target) {
227
230
  proxy.safeWeb(req, res, {
@@ -287,7 +290,7 @@ module.exports = function createServer(node, serverOptions = {}) {
287
290
 
288
291
  // Final: directly proxy all websocket request to target blocklet
289
292
  wsRouter.use('**', async (req, socket, head) => {
290
- const { target } = ensureProxyUrl(req);
293
+ const { target } = await ensureProxyUrl(req);
291
294
  if (target) {
292
295
  let isOpen = false;
293
296
  let timer;
@@ -0,0 +1,14 @@
1
+ const logger = require('@abtnode/logger')(require('../../package.json').name);
2
+
3
+ module.exports = async (req, res, next) => {
4
+ const blocklet = await req.getBlocklet?.();
5
+
6
+ if (!blocklet) {
7
+ logger.error('blocklet not found', { url: req.url, method: req.method, headers: req.headers });
8
+ res.status(500).send('blocklet not found');
9
+ return;
10
+ }
11
+
12
+ req.blocklet = blocklet;
13
+ next();
14
+ };
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable arrow-parens */
2
2
  const get = require('lodash/get');
3
3
  const joinUrl = require('url-join');
4
+ const formatContext = require('@abtnode/util/lib/format-context');
4
5
  const {
5
6
  messages,
6
7
  getVCFromClaims,
@@ -209,7 +210,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
209
210
  try {
210
211
  if (user) {
211
212
  // Update user
212
- await node.updateUser({
213
+ const doc = await node.updateUser({
213
214
  teamDid,
214
215
  user: {
215
216
  did: userDid,
@@ -219,10 +220,19 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
219
220
  lastLoginAt: new Date().toISOString(),
220
221
  },
221
222
  });
223
+ await node.createAuditLog(
224
+ {
225
+ action: 'login',
226
+ args: { teamDid, userDid, passport },
227
+ context: formatContext(Object.assign(req, { user: doc })),
228
+ result: doc,
229
+ },
230
+ node
231
+ );
222
232
  } else {
223
233
  // Create user
224
234
  const profile = claims.find((x) => x.type === 'profile');
225
- await node.addUser({
235
+ const doc = await node.addUser({
226
236
  teamDid,
227
237
  user: {
228
238
  ...profile,
@@ -235,6 +245,15 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
235
245
  lastLoginAt: new Date().toISOString(),
236
246
  },
237
247
  });
248
+ await node.createAuditLog(
249
+ {
250
+ action: 'addUser',
251
+ args: { teamDid, userDid, reason: `first login as ${passport.role}` },
252
+ context: formatContext(Object.assign(req, { user: doc })),
253
+ result: doc,
254
+ },
255
+ node
256
+ );
238
257
  }
239
258
 
240
259
  // Generate new session token that client can save to localStorage
@@ -1,4 +1,5 @@
1
1
  const get = require('lodash/get');
2
+ const formatContext = require('@abtnode/util/lib/format-context');
2
3
  const { messages, getVCFromClaims, getUser, validatePassportStatus } = require('@abtnode/auth/lib/auth');
3
4
  const { ROLES, VC_TYPE_GENERAL_PASSPORT, VC_TYPE_NODE_PASSPORT } = require('@abtnode/constant');
4
5
  const {
@@ -98,6 +99,15 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
98
99
 
99
100
  // Recreate passport with correct role
100
101
  passport = createUserPassport(vc, { role });
102
+ await node.createAuditLog(
103
+ {
104
+ action: 'switchPassport',
105
+ args: { teamDid, userDid, passport },
106
+ context: formatContext(Object.assign(req, { user })),
107
+ result: {},
108
+ },
109
+ node
110
+ );
101
111
 
102
112
  // Generate new session token that client can save to localStorage
103
113
  const sessionToken = await createSessionToken(userDid, { passport, role });
@@ -1,4 +1,5 @@
1
1
  const get = require('lodash/get');
2
+ const formatContext = require('@abtnode/util/lib/format-context');
2
3
  const { messages, getUser } = require('@abtnode/auth/lib/auth');
3
4
  const { NODE_SERVICES } = require('@abtnode/constant');
4
5
 
@@ -47,7 +48,7 @@ module.exports = function createRoutes(node) {
47
48
 
48
49
  // Update user
49
50
  const profile = claims.find((x) => x.type === 'profile');
50
- await node.updateUser({
51
+ const doc = await node.updateUser({
51
52
  teamDid,
52
53
  user: {
53
54
  ...user,
@@ -55,6 +56,15 @@ module.exports = function createRoutes(node) {
55
56
  locale,
56
57
  },
57
58
  });
59
+ await node.createAuditLog(
60
+ {
61
+ action: 'switchProfile',
62
+ args: { teamDid, userDid, profile },
63
+ context: formatContext(Object.assign(req, { user })),
64
+ result: doc,
65
+ },
66
+ node
67
+ );
58
68
  },
59
69
  };
60
70
  };
package/api/util/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  const joinUrl = require('url-join');
2
2
  const get = require('lodash/get');
3
3
  const { ROLES } = require('@abtnode/constant');
4
- const { BlockletSource, BLOCKLET_MODES } = require('@blocklet/meta/lib/constants');
4
+ const { BlockletSource, BLOCKLET_MODES, BlockletGroup } = require('@blocklet/meta/lib/constants');
5
+ const { findWebInterface } = require('@blocklet/meta/lib/util');
5
6
  const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
6
7
 
7
- const getBaseUrl = (req) => {
8
+ const getGroupPrefix = (req) => {
8
9
  if (req.headers['x-group-path-prefix']) {
9
10
  return `/${req.headers['x-group-path-prefix']}/`.replace(/\/+/g, '/');
10
11
  }
@@ -12,6 +13,14 @@ const getBaseUrl = (req) => {
12
13
  return '/';
13
14
  };
14
15
 
16
+ const getComponentPrefix = (req) => {
17
+ if (req.headers['x-path-prefix']) {
18
+ return `/${req.headers['x-path-prefix']}/`.replace(/\/+/g, '/');
19
+ }
20
+
21
+ return '/';
22
+ };
23
+
15
24
  const getLogoFromLogoUrl = (blocklet, version) => {
16
25
  try {
17
26
  if (!blocklet.meta.logoUrl) {
@@ -61,7 +70,33 @@ const shouldGotoStartPage = (req, blocklet) => {
61
70
  return false;
62
71
  };
63
72
 
64
- const ensureProxyUrl = (req) => {
73
+ const findRootWebPort = (blocklet) => {
74
+ if (!blocklet) {
75
+ return null;
76
+ }
77
+
78
+ if (blocklet.group !== BlockletGroup.gateway) {
79
+ // FIXME blocklet web port should be forced to BLOCKLET_PORT? (convention over configuration)
80
+ const webInterface = findWebInterface(blocklet);
81
+ return blocklet.ports[webInterface?.port || 'BLOCKLET_PORT'];
82
+ }
83
+
84
+ return findRootWebPort(blocklet.children[0]);
85
+ };
86
+
87
+ const ensureProxyUrl = async (req) => {
88
+ if (req.url.startsWith('/favicon')) {
89
+ // convert all faviconXXX to favicon to ensure file exists in root blocklet
90
+ req.url = '/favicon.ico';
91
+
92
+ const port = findRootWebPort(await req.getBlocklet());
93
+ if (port) {
94
+ return { target: `http://127.0.0.1:${port}` };
95
+ }
96
+
97
+ return { target: null };
98
+ }
99
+
65
100
  const target = req.headers['x-blocklet-url'];
66
101
 
67
102
  if (target) {
@@ -76,15 +111,18 @@ const ensureProxyUrl = (req) => {
76
111
  };
77
112
 
78
113
  const getRedirectUrl = ({ req, pagePath }) => {
79
- const baseUrl = getBaseUrl(req);
114
+ const groupPrefix = getGroupPrefix(req);
115
+ const componentPrefix = getComponentPrefix(req);
116
+ const redirectPrefix = groupPrefix === componentPrefix ? groupPrefix : componentPrefix;
117
+
80
118
  const redirectUrlObj = new URL(`http://localhost${req.url}`);
81
119
  // 重定向时考虑 serverUrl 查询参数的处理
82
120
  const serverUrl = redirectUrlObj.searchParams.get('serverUrl');
83
121
  redirectUrlObj.searchParams.delete('__start__');
84
122
  redirectUrlObj.searchParams.delete('serverUrl');
85
- const redirectUrl = `${baseUrl.replace(/\/+$/, '')}${redirectUrlObj.pathname}${redirectUrlObj.search}`;
123
+ const redirectUrl = `${redirectPrefix.replace(/\/+$/, '')}${redirectUrlObj.pathname}${redirectUrlObj.search}`;
86
124
 
87
- const url = new URL(`http://localhost${joinUrl(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX, pagePath || '/')}`);
125
+ const url = new URL(`http://localhost${joinUrl(groupPrefix, WELLKNOWN_SERVICE_PATH_PREFIX, pagePath || '/')}`);
88
126
  url.searchParams.set('redirect', redirectUrl);
89
127
 
90
128
  const locale = new URL(`http://localhost${req.url}`).searchParams.get('locale');
@@ -104,4 +142,5 @@ module.exports = {
104
142
  shouldGotoStartPage,
105
143
  ensureProxyUrl,
106
144
  getRedirectUrl,
145
+ findRootWebPort,
107
146
  };
@@ -1,41 +1,41 @@
1
1
  {
2
2
  "files": {
3
- "static/js/0.d567f606.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/0.d567f606.chunk.js",
4
- "static/js/0.d567f606.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/0.d567f606.chunk.js.map",
5
- "static/js/1.ab9dcdd2.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/1.ab9dcdd2.chunk.js",
6
- "static/js/1.ab9dcdd2.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/1.ab9dcdd2.chunk.js.map",
7
- "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.f3a4f0ac.chunk.js",
8
- "main.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.f3a4f0ac.chunk.js.map",
9
- "runtime-main.js": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.49dce7d3.js",
10
- "runtime-main.js.map": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.49dce7d3.js.map",
3
+ "static/js/0.0e886baa.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/0.0e886baa.chunk.js",
4
+ "static/js/0.0e886baa.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/0.0e886baa.chunk.js.map",
5
+ "static/js/1.ad8ebbc7.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/1.ad8ebbc7.chunk.js",
6
+ "static/js/1.ad8ebbc7.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/1.ad8ebbc7.chunk.js.map",
7
+ "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.de8a9159.chunk.js",
8
+ "main.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.de8a9159.chunk.js.map",
9
+ "runtime-main.js": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.829b2277.js",
10
+ "runtime-main.js.map": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.829b2277.js.map",
11
11
  "static/css/4.6e1172e8.chunk.css": "/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css",
12
- "static/js/4.ec5cc748.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/4.ec5cc748.chunk.js",
13
- "static/js/4.ec5cc748.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/4.ec5cc748.chunk.js.map",
14
- "static/js/5.20ba603f.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/5.20ba603f.chunk.js",
15
- "static/js/5.20ba603f.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/5.20ba603f.chunk.js.map",
16
- "static/js/6.f3503586.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/6.f3503586.chunk.js",
17
- "static/js/6.f3503586.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/6.f3503586.chunk.js.map",
18
- "static/js/7.9310535b.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/7.9310535b.chunk.js",
19
- "static/js/7.9310535b.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/7.9310535b.chunk.js.map",
20
- "static/js/8.ec34ae8e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/8.ec34ae8e.chunk.js",
21
- "static/js/8.ec34ae8e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/8.ec34ae8e.chunk.js.map",
22
- "static/js/9.0c82bd91.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/9.0c82bd91.chunk.js",
23
- "static/js/9.0c82bd91.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/9.0c82bd91.chunk.js.map",
24
- "static/js/10.605a889f.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/10.605a889f.chunk.js",
25
- "static/js/10.605a889f.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/10.605a889f.chunk.js.map",
12
+ "static/js/4.5ba3405d.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/4.5ba3405d.chunk.js",
13
+ "static/js/4.5ba3405d.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/4.5ba3405d.chunk.js.map",
14
+ "static/js/5.bbb19a41.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/5.bbb19a41.chunk.js",
15
+ "static/js/5.bbb19a41.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/5.bbb19a41.chunk.js.map",
16
+ "static/js/6.81f46015.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/6.81f46015.chunk.js",
17
+ "static/js/6.81f46015.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/6.81f46015.chunk.js.map",
18
+ "static/js/7.bf50e386.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/7.bf50e386.chunk.js",
19
+ "static/js/7.bf50e386.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/7.bf50e386.chunk.js.map",
20
+ "static/js/8.7b812796.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/8.7b812796.chunk.js",
21
+ "static/js/8.7b812796.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/8.7b812796.chunk.js.map",
22
+ "static/js/9.fb2b8a65.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/9.fb2b8a65.chunk.js",
23
+ "static/js/9.fb2b8a65.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/9.fb2b8a65.chunk.js.map",
24
+ "static/js/10.4bc669a4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/10.4bc669a4.chunk.js",
25
+ "static/js/10.4bc669a4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/10.4bc669a4.chunk.js.map",
26
26
  "index.html": "/.blocklet/proxy/blocklet-service/index.html",
27
- "precache-manifest.62677c47082207508be287829a517379.js": "/.blocklet/proxy/blocklet-service/precache-manifest.62677c47082207508be287829a517379.js",
27
+ "precache-manifest.fa7b4ab579d57fabdd2f661bbe9477eb.js": "/.blocklet/proxy/blocklet-service/precache-manifest.fa7b4ab579d57fabdd2f661bbe9477eb.js",
28
28
  "service-worker.js": "/.blocklet/proxy/blocklet-service/service-worker.js",
29
29
  "static/css/4.6e1172e8.chunk.css.map": "/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css.map",
30
- "static/js/0.d567f606.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/0.d567f606.chunk.js.LICENSE.txt",
31
- "static/js/4.ec5cc748.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/4.ec5cc748.chunk.js.LICENSE.txt",
30
+ "static/js/0.0e886baa.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/0.0e886baa.chunk.js.LICENSE.txt",
31
+ "static/js/4.5ba3405d.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/4.5ba3405d.chunk.js.LICENSE.txt",
32
32
  "static/media/400.css": "/.blocklet/proxy/blocklet-service/static/media/ubuntu-mono-latin-ext-400-normal.84fa8bc1.woff2",
33
33
  "static/media/700.css": "/.blocklet/proxy/blocklet-service/static/media/lato-latin-ext-700-normal.a48b0f04.woff2"
34
34
  },
35
35
  "entrypoints": [
36
- "static/js/runtime-main.49dce7d3.js",
36
+ "static/js/runtime-main.829b2277.js",
37
37
  "static/css/4.6e1172e8.chunk.css",
38
- "static/js/4.ec5cc748.chunk.js",
39
- "static/js/main.f3a4f0ac.chunk.js"
38
+ "static/js/4.5ba3405d.chunk.js",
39
+ "static/js/main.de8a9159.chunk.js"
40
40
  ]
41
41
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/.well-known/service/static/favicon.ico"/><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><link href="/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,u,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)u=i[d],Object.prototype.hasOwnProperty.call(o,u)&&o[u]&&h.push(o[u][0]),o[u]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),a.push.apply(a,s);h.length;)h.shift()();return c.push.apply(c,f||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,l=1;l<r.length;l++){var f=r[l];0!==o[f]&&(n=!1)}n&&(c.splice(t--,1),e=i(i.s=r[0]))}return 0===c.length&&(a.forEach((function(e){if(void 0===o[e]){o[e]=null;var t=document.createElement("link");i.nc&&t.setAttribute("nonce",i.nc),t.rel="prefetch",t.as="script",t.href=u(e),document.head.appendChild(t)}})),a.length=0),e}var n={},o={3:0},c=[],a=[];function u(e){return i.p+"static/js/"+({}[e]||e)+"."+{0:"d567f606",1:"ab9dcdd2",5:"20ba603f",6:"f3503586",7:"9310535b",8:"ec34ae8e",9:"0c82bd91",10:"605a889f"}[e]+".chunk.js"}function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var c,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=u(e);var l=new Error;c=function(t){a.onerror=a.onload=null,clearTimeout(f);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+c+")",l.name="ChunkLoadError",l.type=n,l.request=c,r[1](l)}o[e]=void 0}};var f=setTimeout((function(){c({type:"timeout",target:a})}),12e4);a.onerror=a.onload=c,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/.blocklet/proxy/blocklet-service/",i.oe=function(e){throw console.error(e),e};var l=this["webpackJsonp@abtnode/blocklet-services"]=this["webpackJsonp@abtnode/blocklet-services"]||[],f=l.push.bind(l);l.push=t,l=l.slice();for(var s=0;s<l.length;s++)t(l[s]);var p=f;r()}([])</script><script src="/.blocklet/proxy/blocklet-service/static/js/4.ec5cc748.chunk.js"></script><script src="/.blocklet/proxy/blocklet-service/static/js/main.f3a4f0ac.chunk.js"></script></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/.well-known/service/static/favicon.ico"/><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><link href="/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,u,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,b=[];d<i.length;d++)u=i[d],Object.prototype.hasOwnProperty.call(o,u)&&o[u]&&b.push(o[u][0]),o[u]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),c.push.apply(c,s);b.length;)b.shift()();return a.push.apply(a,f||[]),r()}function r(){for(var e,t=0;t<a.length;t++){for(var r=a[t],n=!0,l=1;l<r.length;l++){var f=r[l];0!==o[f]&&(n=!1)}n&&(a.splice(t--,1),e=i(i.s=r[0]))}return 0===a.length&&(c.forEach((function(e){if(void 0===o[e]){o[e]=null;var t=document.createElement("link");i.nc&&t.setAttribute("nonce",i.nc),t.rel="prefetch",t.as="script",t.href=u(e),document.head.appendChild(t)}})),c.length=0),e}var n={},o={3:0},a=[],c=[];function u(e){return i.p+"static/js/"+({}[e]||e)+"."+{0:"0e886baa",1:"ad8ebbc7",5:"bbb19a41",6:"81f46015",7:"bf50e386",8:"7b812796",9:"fb2b8a65",10:"4bc669a4"}[e]+".chunk.js"}function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var a,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=u(e);var l=new Error;a=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+a+")",l.name="ChunkLoadError",l.type=n,l.request=a,r[1](l)}o[e]=void 0}};var f=setTimeout((function(){a({type:"timeout",target:c})}),12e4);c.onerror=c.onload=a,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/.blocklet/proxy/blocklet-service/",i.oe=function(e){throw console.error(e),e};var l=this["webpackJsonp@abtnode/blocklet-services"]=this["webpackJsonp@abtnode/blocklet-services"]||[],f=l.push.bind(l);l.push=t,l=l.slice();for(var s=0;s<l.length;s++)t(l[s]);var p=f;r()}([])</script><script src="/.blocklet/proxy/blocklet-service/static/js/4.5ba3405d.chunk.js"></script><script src="/.blocklet/proxy/blocklet-service/static/js/main.de8a9159.chunk.js"></script></body></html>
@@ -1,63 +1,63 @@
1
1
  self.__precacheManifest = (self.__precacheManifest || []).concat([
2
2
  {
3
- "revision": "a2af109b17932d3a5cb484d80fb8e089",
3
+ "revision": "337a19b24f778adf46b25a39ae7caa0d",
4
4
  "url": "/.blocklet/proxy/blocklet-service/index.html"
5
5
  },
6
6
  {
7
- "revision": "9e010ad6ba6e808c4209",
7
+ "revision": "e2fe3e5a088ed2a118d0",
8
8
  "url": "/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css"
9
9
  },
10
10
  {
11
- "revision": "8d83b111c2f6c22b4104",
12
- "url": "/.blocklet/proxy/blocklet-service/static/js/0.d567f606.chunk.js"
11
+ "revision": "e9b8bd4130ce704c6e8b",
12
+ "url": "/.blocklet/proxy/blocklet-service/static/js/0.0e886baa.chunk.js"
13
13
  },
14
14
  {
15
15
  "revision": "327dea51c54983f5708f4242bceacaed",
16
- "url": "/.blocklet/proxy/blocklet-service/static/js/0.d567f606.chunk.js.LICENSE.txt"
16
+ "url": "/.blocklet/proxy/blocklet-service/static/js/0.0e886baa.chunk.js.LICENSE.txt"
17
17
  },
18
18
  {
19
- "revision": "fa2b03656d939081dbab",
20
- "url": "/.blocklet/proxy/blocklet-service/static/js/1.ab9dcdd2.chunk.js"
19
+ "revision": "f70e952e6980c42dd9ed",
20
+ "url": "/.blocklet/proxy/blocklet-service/static/js/1.ad8ebbc7.chunk.js"
21
21
  },
22
22
  {
23
- "revision": "cc23f3e373157cfee5e7",
24
- "url": "/.blocklet/proxy/blocklet-service/static/js/10.605a889f.chunk.js"
23
+ "revision": "6649c0da21b46b5ee2ef",
24
+ "url": "/.blocklet/proxy/blocklet-service/static/js/10.4bc669a4.chunk.js"
25
25
  },
26
26
  {
27
- "revision": "9e010ad6ba6e808c4209",
28
- "url": "/.blocklet/proxy/blocklet-service/static/js/4.ec5cc748.chunk.js"
27
+ "revision": "e2fe3e5a088ed2a118d0",
28
+ "url": "/.blocklet/proxy/blocklet-service/static/js/4.5ba3405d.chunk.js"
29
29
  },
30
30
  {
31
- "revision": "ff58a668e6d753fa035087a671c28199",
32
- "url": "/.blocklet/proxy/blocklet-service/static/js/4.ec5cc748.chunk.js.LICENSE.txt"
31
+ "revision": "f101b2fce3f1d0e331470363e3a5af12",
32
+ "url": "/.blocklet/proxy/blocklet-service/static/js/4.5ba3405d.chunk.js.LICENSE.txt"
33
33
  },
34
34
  {
35
- "revision": "56183c63a0b499e87622",
36
- "url": "/.blocklet/proxy/blocklet-service/static/js/5.20ba603f.chunk.js"
35
+ "revision": "b81a8615f477a8b3ca39",
36
+ "url": "/.blocklet/proxy/blocklet-service/static/js/5.bbb19a41.chunk.js"
37
37
  },
38
38
  {
39
- "revision": "e7c3ac5540644074e847",
40
- "url": "/.blocklet/proxy/blocklet-service/static/js/6.f3503586.chunk.js"
39
+ "revision": "1c40c9b1bb09350cdd66",
40
+ "url": "/.blocklet/proxy/blocklet-service/static/js/6.81f46015.chunk.js"
41
41
  },
42
42
  {
43
- "revision": "f3508d38d29259201323",
44
- "url": "/.blocklet/proxy/blocklet-service/static/js/7.9310535b.chunk.js"
43
+ "revision": "1a64c18f218d0400ad40",
44
+ "url": "/.blocklet/proxy/blocklet-service/static/js/7.bf50e386.chunk.js"
45
45
  },
46
46
  {
47
- "revision": "b975347c70c1c9cf3a19",
48
- "url": "/.blocklet/proxy/blocklet-service/static/js/8.ec34ae8e.chunk.js"
47
+ "revision": "c54ffdb1c50de7905e3d",
48
+ "url": "/.blocklet/proxy/blocklet-service/static/js/8.7b812796.chunk.js"
49
49
  },
50
50
  {
51
- "revision": "c4913f331bea9065ea2b",
52
- "url": "/.blocklet/proxy/blocklet-service/static/js/9.0c82bd91.chunk.js"
51
+ "revision": "d16debb8d421cef9037e",
52
+ "url": "/.blocklet/proxy/blocklet-service/static/js/9.fb2b8a65.chunk.js"
53
53
  },
54
54
  {
55
- "revision": "d1c361dfaa769857263a",
56
- "url": "/.blocklet/proxy/blocklet-service/static/js/main.f3a4f0ac.chunk.js"
55
+ "revision": "c68b2db4b388a2373487",
56
+ "url": "/.blocklet/proxy/blocklet-service/static/js/main.de8a9159.chunk.js"
57
57
  },
58
58
  {
59
- "revision": "f1b0162f72cbaa438103",
60
- "url": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.49dce7d3.js"
59
+ "revision": "014d106a0d49e329b5d9",
60
+ "url": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.829b2277.js"
61
61
  },
62
62
  {
63
63
  "revision": "a82dcb33d52ed6fa529e5ae8d5fda7f3",
@@ -14,7 +14,7 @@
14
14
  importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
15
15
 
16
16
  importScripts(
17
- "/.blocklet/proxy/blocklet-service/precache-manifest.62677c47082207508be287829a517379.js"
17
+ "/.blocklet/proxy/blocklet-service/precache-manifest.fa7b4ab579d57fabdd2f661bbe9477eb.js"
18
18
  );
19
19
 
20
20
  self.addEventListener('message', (event) => {