@abtnode/blocklet-services 1.7.10 → 1.7.13

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 (52) hide show
  1. package/api/middlewares/proxy-to-daemon.js +4 -2
  2. package/api/routes/blocklet.js +39 -2
  3. package/api/services/auth/connect/fuel.js +73 -0
  4. package/api/services/auth/connect/invite.js +1 -0
  5. package/api/services/auth/connect/issue-passport.js +1 -0
  6. package/api/services/auth/connect/setup.js +11 -1
  7. package/api/services/auth/index.js +2 -0
  8. package/build/asset-manifest.json +28 -28
  9. package/build/index.html +1 -1
  10. package/build/{precache-manifest.6bba5a0937fec8cc0577975770db10ff.js → precache-manifest.5f319c29c408a50466b0d034dc444e5f.js} +26 -26
  11. package/build/service-worker.js +1 -1
  12. package/build/static/js/0.86df5972.chunk.js +3 -0
  13. package/build/static/js/{0.8641a485.chunk.js.LICENSE.txt → 0.86df5972.chunk.js.LICENSE.txt} +0 -0
  14. package/build/static/js/0.86df5972.chunk.js.map +1 -0
  15. package/build/static/js/1.b67e3571.chunk.js +2 -0
  16. package/build/static/js/1.b67e3571.chunk.js.map +1 -0
  17. package/build/static/js/{10.eae356ec.chunk.js → 10.6f840670.chunk.js} +2 -2
  18. package/build/static/js/{10.eae356ec.chunk.js.map → 10.6f840670.chunk.js.map} +1 -1
  19. package/build/static/js/4.6313a12f.chunk.js +3 -0
  20. package/build/static/js/{4.973ae192.chunk.js.LICENSE.txt → 4.6313a12f.chunk.js.LICENSE.txt} +0 -0
  21. package/build/static/js/4.6313a12f.chunk.js.map +1 -0
  22. package/build/static/js/5.4fa6174b.chunk.js +2 -0
  23. package/build/static/js/5.4fa6174b.chunk.js.map +1 -0
  24. package/build/static/js/6.84afc8e0.chunk.js +2 -0
  25. package/build/static/js/{6.60aaf58a.chunk.js.map → 6.84afc8e0.chunk.js.map} +1 -1
  26. package/build/static/js/7.33ef0515.chunk.js +2 -0
  27. package/build/static/js/7.33ef0515.chunk.js.map +1 -0
  28. package/build/static/js/{8.7e2dd683.chunk.js → 8.6684f959.chunk.js} +2 -2
  29. package/build/static/js/{8.7e2dd683.chunk.js.map → 8.6684f959.chunk.js.map} +1 -1
  30. package/build/static/js/9.d7a1d6be.chunk.js +2 -0
  31. package/build/static/js/9.d7a1d6be.chunk.js.map +1 -0
  32. package/build/static/js/main.d9f162f2.chunk.js +2 -0
  33. package/build/static/js/main.d9f162f2.chunk.js.map +1 -0
  34. package/build/static/js/{runtime-main.d47db38c.js → runtime-main.c57b91d0.js} +2 -2
  35. package/build/static/js/{runtime-main.d47db38c.js.map → runtime-main.c57b91d0.js.map} +1 -1
  36. package/package.json +25 -26
  37. package/build/static/js/0.8641a485.chunk.js +0 -3
  38. package/build/static/js/0.8641a485.chunk.js.map +0 -1
  39. package/build/static/js/1.d6f10e20.chunk.js +0 -2
  40. package/build/static/js/1.d6f10e20.chunk.js.map +0 -1
  41. package/build/static/js/4.973ae192.chunk.js +0 -3
  42. package/build/static/js/4.973ae192.chunk.js.map +0 -1
  43. package/build/static/js/5.a97b78a4.chunk.js +0 -2
  44. package/build/static/js/5.a97b78a4.chunk.js.map +0 -1
  45. package/build/static/js/6.60aaf58a.chunk.js +0 -2
  46. package/build/static/js/7.6ffbad13.chunk.js +0 -2
  47. package/build/static/js/7.6ffbad13.chunk.js.map +0 -1
  48. package/build/static/js/9.9561f820.chunk.js +0 -2
  49. package/build/static/js/9.9561f820.chunk.js.map +0 -1
  50. package/build/static/js/main.73e47d11.chunk.js +0 -2
  51. package/build/static/js/main.73e47d11.chunk.js.map +0 -1
  52. package/configs/auth.json +0 -66
@@ -1,4 +1,5 @@
1
1
  const jwt = require('jsonwebtoken');
2
+ const pick = require('lodash/pick');
2
3
  const LRU = require('lru-cache');
3
4
 
4
5
  const proxyToDaemon = ({ proxy, sessionSecret }) => {
@@ -7,7 +8,7 @@ const proxyToDaemon = ({ proxy, sessionSecret }) => {
7
8
  maxAge: 86400 * 1000, // cache for 1 day
8
9
  });
9
10
 
10
- const getToken = (did) => {
11
+ const getToken = (did, user) => {
11
12
  const cacheToken = cache.get(did);
12
13
  if (cacheToken) {
13
14
  return cacheToken;
@@ -17,6 +18,7 @@ const proxyToDaemon = ({ proxy, sessionSecret }) => {
17
18
  {
18
19
  type: 'blocklet',
19
20
  did,
21
+ actual: pick(user, ['did', 'role', 'fullName']),
20
22
  },
21
23
  sessionSecret,
22
24
  { expiresIn: '1d' }
@@ -30,7 +32,7 @@ const proxyToDaemon = ({ proxy, sessionSecret }) => {
30
32
  return async (req, res) => {
31
33
  req.url = '/api/gql';
32
34
  const did = req.getBlockletDid();
33
- const token = getToken(did);
35
+ const token = getToken(did, req.user);
34
36
 
35
37
  req.headers.authorization = `Bearer ${token}`;
36
38
  proxy.safeWeb(req, res, {
@@ -6,6 +6,7 @@ const cloneDeep = require('lodash/cloneDeep');
6
6
  const joinUrl = require('url-join');
7
7
  const JWT = require('@arcblock/jwt');
8
8
 
9
+ const formatContext = require('@abtnode/util/lib/format-context');
9
10
  const { fixBlockletStatus, wipeSensitiveData } = require('@blocklet/meta/lib/util');
10
11
  const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
11
12
  const logger = require('@abtnode/logger')(require('../../package.json').name);
@@ -83,6 +84,15 @@ module.exports = {
83
84
  childDid,
84
85
  configs,
85
86
  });
87
+ await node.createAuditLog(
88
+ {
89
+ action: 'configBlocklet',
90
+ args: { did: blocklet.meta.did },
91
+ context: formatContext(req),
92
+ result: doc,
93
+ },
94
+ node
95
+ );
86
96
 
87
97
  res.json(polishBlocklet(doc));
88
98
  });
@@ -96,6 +106,15 @@ module.exports = {
96
106
  checkHealthImmediately: true,
97
107
  throwOnError: true,
98
108
  });
109
+ await node.createAuditLog(
110
+ {
111
+ action: 'startBlocklet',
112
+ args: { did: blocklet.meta.did },
113
+ context: formatContext(req),
114
+ result: doc,
115
+ },
116
+ node
117
+ );
99
118
 
100
119
  if (fromSetup) {
101
120
  const { did: userDid, role } = req.user;
@@ -130,7 +149,7 @@ module.exports = {
130
149
 
131
150
  // write passport to db
132
151
  const passport = createUserPassport(vc, { role });
133
- await node.updateUser({
152
+ const result = await node.updateUser({
134
153
  teamDid,
135
154
  user: {
136
155
  did: userDid,
@@ -138,6 +157,15 @@ module.exports = {
138
157
  passports: upsertToPassports(user.passports || [], passport),
139
158
  },
140
159
  });
160
+ await node.createAuditLog(
161
+ {
162
+ action: 'updateUser',
163
+ args: { teamDid, passport, reason: 'setup blocklet' },
164
+ context: formatContext(req),
165
+ result,
166
+ },
167
+ node
168
+ );
141
169
 
142
170
  // send vc to wallet
143
171
  const receiver = userDid;
@@ -181,7 +209,16 @@ module.exports = {
181
209
  const { whoCanAccess } = req.body;
182
210
  const blocklet = await req.getBlocklet();
183
211
 
184
- await node.configWhoCanAccess({ teamDid: blocklet.meta.did, value: whoCanAccess });
212
+ const result = await node.configWhoCanAccess({ teamDid: blocklet.meta.did, value: whoCanAccess });
213
+ await node.createAuditLog(
214
+ {
215
+ action: 'configWhoCanAccess',
216
+ args: { teamDid: blocklet.meta.did, value: whoCanAccess, reason: 'setup blocklet' },
217
+ context: formatContext(req),
218
+ result,
219
+ },
220
+ node
221
+ );
185
222
 
186
223
  const newBlocklet = await req.getBlocklet({ useCache: false });
187
224
 
@@ -0,0 +1,73 @@
1
+ const { fromTokenToUnit } = require('@ocap/util');
2
+ const { fromAddress } = require('@ocap/wallet');
3
+ const Client = require('@ocap/client');
4
+ const logger = require('@abtnode/logger')(require('../../../../package.json').name);
5
+
6
+ module.exports = function createRoutes() {
7
+ return {
8
+ action: 'fuel',
9
+
10
+ claims: {
11
+ prepareTx: async ({ context: { request }, extraParams }) => {
12
+ const { amount, locale, symbol, address, decimal, endpoint } = extraParams;
13
+ const { wallet } = await request.getBlockletInfo();
14
+ if (!Number(amount) || Number(amount) < 0) {
15
+ throw new Error(`Invalid amount: ${amount}`);
16
+ }
17
+
18
+ const description = {
19
+ en: `Please pay ${amount} ${symbol} to application`,
20
+ zh: `请支付 ${amount} ${symbol}`,
21
+ };
22
+
23
+ const tokens = [
24
+ {
25
+ address,
26
+ value: fromTokenToUnit(amount, decimal).toString(),
27
+ },
28
+ ];
29
+
30
+ return {
31
+ type: 'TransferV3Tx',
32
+ partialTx: {
33
+ itx: {
34
+ inputs: [],
35
+ outputs: [
36
+ {
37
+ // 转给 app
38
+ owner: wallet.address,
39
+ tokens,
40
+ },
41
+ ],
42
+ },
43
+ },
44
+ requirement: {
45
+ tokens,
46
+ },
47
+ description: description[locale] || description.en,
48
+ chainInfo: { host: endpoint },
49
+ };
50
+ },
51
+ },
52
+ onAuth: async ({ claims, userDid, extraParams: { locale, endpoint } }) => {
53
+ try {
54
+ const client = new Client(`${endpoint}/api/gql?locale=${locale}`.replace(/\/+/g, '/').trim());
55
+ const claim = claims.find((x) => x.type === 'prepareTx');
56
+ const tx = client.decodeTx(claim.finalTx);
57
+ const hash = await client.sendTransferV3Tx({
58
+ tx,
59
+ wallet: fromAddress(userDid),
60
+ });
61
+ logger.info('fuel_application.onAuth', { claims, userDid, hash });
62
+ return { hash, tx: claim.finalTx };
63
+ } catch (err) {
64
+ logger.info('fuel_application.onAuth.error', err);
65
+ const errors = {
66
+ en: 'Failed to fuel the application',
67
+ zh: '支付失败',
68
+ };
69
+ throw new Error(errors[locale] || errors.en);
70
+ }
71
+ },
72
+ };
73
+ };
@@ -58,6 +58,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
58
58
  const endpoint = baseUrl;
59
59
 
60
60
  const { passport, response, role } = await handleInvitationResponse({
61
+ req,
61
62
  node,
62
63
  nodeInfo,
63
64
  teamDid,
@@ -46,6 +46,7 @@ module.exports = function createRoutes(node) {
46
46
  const endpoint = baseUrl;
47
47
 
48
48
  return handleIssuePassportResponse({
49
+ req,
49
50
  node,
50
51
  nodeInfo,
51
52
  teamDid,
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable arrow-parens */
2
2
  const { messages } = require('@abtnode/auth/lib/auth');
3
+ const formatContext = require('@abtnode/util/lib/format-context');
3
4
  const { getServerAuthMethod } = require('@abtnode/auth/lib/util/get-auth-method');
4
5
  const { getLaunchFreeBlockletClaims, ensureBlockletPermission } = require('@abtnode/auth/lib/server');
5
6
 
@@ -80,7 +81,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
80
81
  } else {
81
82
  // Create user
82
83
  const profile = claims.find((x) => x.type === 'profile');
83
- await node.addUser({
84
+ const doc = await node.addUser({
84
85
  teamDid,
85
86
  user: {
86
87
  ...profile,
@@ -96,6 +97,15 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
96
97
  },
97
98
  },
98
99
  });
100
+ await node.createAuditLog(
101
+ {
102
+ action: 'addUser',
103
+ args: { teamDid, profile, reason: 'setup blocklet' },
104
+ context: formatContext(Object.assign(req, { user: doc })),
105
+ result: doc,
106
+ },
107
+ node
108
+ );
99
109
  }
100
110
 
101
111
  // Generate new session token that client can save to localStorage
@@ -19,6 +19,7 @@ const createLostPassportIssueAuth = require('./connect/lost-passport-issue');
19
19
  const createSetupAuth = require('./connect/setup');
20
20
  const createSwitchProfileAuth = require('./connect/switch-profile');
21
21
  const createSwitchPassportAuth = require('./connect/switch-passport');
22
+ const createFuelAuth = require('./connect/fuel');
22
23
  const createSessionRoutes = require('./session');
23
24
  const createPassportRoutes = require('./passport');
24
25
  const { getRedirectUrl } = require('../../util');
@@ -130,6 +131,7 @@ const init = ({ node, options }) => {
130
131
  handler.attach(Object.assign({ app }, createSetupAuth(node, authenticator, createSessionToken)));
131
132
  handler.attach(Object.assign({ app }, createSwitchProfileAuth(node, authenticator, createSessionToken)));
132
133
  handler.attach(Object.assign({ app }, createSwitchPassportAuth(node, authenticator, createSessionToken)));
134
+ handler.attach(Object.assign({ app }, createFuelAuth(authenticator, createSessionToken)));
133
135
  });
134
136
  };
135
137
 
@@ -1,41 +1,41 @@
1
1
  {
2
2
  "files": {
3
- "static/js/0.8641a485.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/0.8641a485.chunk.js",
4
- "static/js/0.8641a485.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/0.8641a485.chunk.js.map",
5
- "static/js/1.d6f10e20.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/1.d6f10e20.chunk.js",
6
- "static/js/1.d6f10e20.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/1.d6f10e20.chunk.js.map",
7
- "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.73e47d11.chunk.js",
8
- "main.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.73e47d11.chunk.js.map",
9
- "runtime-main.js": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.d47db38c.js",
10
- "runtime-main.js.map": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.d47db38c.js.map",
3
+ "static/js/0.86df5972.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/0.86df5972.chunk.js",
4
+ "static/js/0.86df5972.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/0.86df5972.chunk.js.map",
5
+ "static/js/1.b67e3571.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/1.b67e3571.chunk.js",
6
+ "static/js/1.b67e3571.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/1.b67e3571.chunk.js.map",
7
+ "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.d9f162f2.chunk.js",
8
+ "main.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.d9f162f2.chunk.js.map",
9
+ "runtime-main.js": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.c57b91d0.js",
10
+ "runtime-main.js.map": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.c57b91d0.js.map",
11
11
  "static/css/4.6e1172e8.chunk.css": "/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css",
12
- "static/js/4.973ae192.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/4.973ae192.chunk.js",
13
- "static/js/4.973ae192.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/4.973ae192.chunk.js.map",
14
- "static/js/5.a97b78a4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/5.a97b78a4.chunk.js",
15
- "static/js/5.a97b78a4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/5.a97b78a4.chunk.js.map",
16
- "static/js/6.60aaf58a.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/6.60aaf58a.chunk.js",
17
- "static/js/6.60aaf58a.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/6.60aaf58a.chunk.js.map",
18
- "static/js/7.6ffbad13.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/7.6ffbad13.chunk.js",
19
- "static/js/7.6ffbad13.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/7.6ffbad13.chunk.js.map",
20
- "static/js/8.7e2dd683.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/8.7e2dd683.chunk.js",
21
- "static/js/8.7e2dd683.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/8.7e2dd683.chunk.js.map",
22
- "static/js/9.9561f820.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/9.9561f820.chunk.js",
23
- "static/js/9.9561f820.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/9.9561f820.chunk.js.map",
24
- "static/js/10.eae356ec.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/10.eae356ec.chunk.js",
25
- "static/js/10.eae356ec.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/10.eae356ec.chunk.js.map",
12
+ "static/js/4.6313a12f.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/4.6313a12f.chunk.js",
13
+ "static/js/4.6313a12f.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/4.6313a12f.chunk.js.map",
14
+ "static/js/5.4fa6174b.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/5.4fa6174b.chunk.js",
15
+ "static/js/5.4fa6174b.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/5.4fa6174b.chunk.js.map",
16
+ "static/js/6.84afc8e0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/6.84afc8e0.chunk.js",
17
+ "static/js/6.84afc8e0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/6.84afc8e0.chunk.js.map",
18
+ "static/js/7.33ef0515.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/7.33ef0515.chunk.js",
19
+ "static/js/7.33ef0515.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/7.33ef0515.chunk.js.map",
20
+ "static/js/8.6684f959.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/8.6684f959.chunk.js",
21
+ "static/js/8.6684f959.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/8.6684f959.chunk.js.map",
22
+ "static/js/9.d7a1d6be.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/9.d7a1d6be.chunk.js",
23
+ "static/js/9.d7a1d6be.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/9.d7a1d6be.chunk.js.map",
24
+ "static/js/10.6f840670.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/10.6f840670.chunk.js",
25
+ "static/js/10.6f840670.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/10.6f840670.chunk.js.map",
26
26
  "index.html": "/.blocklet/proxy/blocklet-service/index.html",
27
- "precache-manifest.6bba5a0937fec8cc0577975770db10ff.js": "/.blocklet/proxy/blocklet-service/precache-manifest.6bba5a0937fec8cc0577975770db10ff.js",
27
+ "precache-manifest.5f319c29c408a50466b0d034dc444e5f.js": "/.blocklet/proxy/blocklet-service/precache-manifest.5f319c29c408a50466b0d034dc444e5f.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.8641a485.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/0.8641a485.chunk.js.LICENSE.txt",
31
- "static/js/4.973ae192.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/4.973ae192.chunk.js.LICENSE.txt",
30
+ "static/js/0.86df5972.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/0.86df5972.chunk.js.LICENSE.txt",
31
+ "static/js/4.6313a12f.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/4.6313a12f.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.d47db38c.js",
36
+ "static/js/runtime-main.c57b91d0.js",
37
37
  "static/css/4.6e1172e8.chunk.css",
38
- "static/js/4.973ae192.chunk.js",
39
- "static/js/main.73e47d11.chunk.js"
38
+ "static/js/4.6313a12f.chunk.js",
39
+ "static/js/main.d9f162f2.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,c,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)c=i[d],Object.prototype.hasOwnProperty.call(o,c)&&o[c]&&h.push(o[c][0]),o[c]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,s);h.length;)h.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&&(u.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=c(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={3:0},a=[],u=[];function c(e){return i.p+"static/js/"+({}[e]||e)+"."+{0:"8641a485",1:"d6f10e20",5:"a97b78a4",6:"60aaf58a",7:"6ffbad13",8:"7e2dd683",9:"9561f820",10:"eae356ec"}[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,u=document.createElement("script");u.charset="utf-8",u.timeout=120,i.nc&&u.setAttribute("nonce",i.nc),u.src=c(e);var l=new Error;a=function(t){u.onerror=u.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:u})}),12e4);u.onerror=u.onload=a,document.head.appendChild(u)}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.973ae192.chunk.js"></script><script src="/.blocklet/proxy/blocklet-service/static/js/main.73e47d11.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,c,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)c=i[d],Object.prototype.hasOwnProperty.call(o,c)&&o[c]&&h.push(o[c][0]),o[c]=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 u.push.apply(u,f||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,l=1;l<r.length;l++){var f=r[l];0!==o[f]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return 0===u.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=c(e),document.head.appendChild(t)}})),a.length=0),e}var n={},o={3:0},u=[],a=[];function c(e){return i.p+"static/js/"+({}[e]||e)+"."+{0:"86df5972",1:"b67e3571",5:"4fa6174b",6:"84afc8e0",7:"33ef0515",8:"6684f959",9:"d7a1d6be",10:"6f840670"}[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 u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=c(e);var l=new Error;u=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),u=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",l.name="ChunkLoadError",l.type=n,l.request=u,r[1](l)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,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.6313a12f.chunk.js"></script><script src="/.blocklet/proxy/blocklet-service/static/js/main.d9f162f2.chunk.js"></script></body></html>
@@ -1,63 +1,63 @@
1
1
  self.__precacheManifest = (self.__precacheManifest || []).concat([
2
2
  {
3
- "revision": "17b89e7b66ac3ce0d38d406f58ff7617",
3
+ "revision": "a19ce0c70af4a07b116d8fbc248a51f1",
4
4
  "url": "/.blocklet/proxy/blocklet-service/index.html"
5
5
  },
6
6
  {
7
- "revision": "21fa9fb0eb31456e8a3a",
7
+ "revision": "437987ff0517271c0a92",
8
8
  "url": "/.blocklet/proxy/blocklet-service/static/css/4.6e1172e8.chunk.css"
9
9
  },
10
10
  {
11
- "revision": "0f753569d791e77fb7fe",
12
- "url": "/.blocklet/proxy/blocklet-service/static/js/0.8641a485.chunk.js"
11
+ "revision": "04a91ad2d8c36747964e",
12
+ "url": "/.blocklet/proxy/blocklet-service/static/js/0.86df5972.chunk.js"
13
13
  },
14
14
  {
15
15
  "revision": "327dea51c54983f5708f4242bceacaed",
16
- "url": "/.blocklet/proxy/blocklet-service/static/js/0.8641a485.chunk.js.LICENSE.txt"
16
+ "url": "/.blocklet/proxy/blocklet-service/static/js/0.86df5972.chunk.js.LICENSE.txt"
17
17
  },
18
18
  {
19
- "revision": "85120b3c1f61c452cbcf",
20
- "url": "/.blocklet/proxy/blocklet-service/static/js/1.d6f10e20.chunk.js"
19
+ "revision": "3dbd88e527885e6e42e7",
20
+ "url": "/.blocklet/proxy/blocklet-service/static/js/1.b67e3571.chunk.js"
21
21
  },
22
22
  {
23
- "revision": "41837fa479ea4ec70880",
24
- "url": "/.blocklet/proxy/blocklet-service/static/js/10.eae356ec.chunk.js"
23
+ "revision": "ca7f50172626e083f46a",
24
+ "url": "/.blocklet/proxy/blocklet-service/static/js/10.6f840670.chunk.js"
25
25
  },
26
26
  {
27
- "revision": "21fa9fb0eb31456e8a3a",
28
- "url": "/.blocklet/proxy/blocklet-service/static/js/4.973ae192.chunk.js"
27
+ "revision": "437987ff0517271c0a92",
28
+ "url": "/.blocklet/proxy/blocklet-service/static/js/4.6313a12f.chunk.js"
29
29
  },
30
30
  {
31
31
  "revision": "ff58a668e6d753fa035087a671c28199",
32
- "url": "/.blocklet/proxy/blocklet-service/static/js/4.973ae192.chunk.js.LICENSE.txt"
32
+ "url": "/.blocklet/proxy/blocklet-service/static/js/4.6313a12f.chunk.js.LICENSE.txt"
33
33
  },
34
34
  {
35
- "revision": "8dd20f1b08a1809a0506",
36
- "url": "/.blocklet/proxy/blocklet-service/static/js/5.a97b78a4.chunk.js"
35
+ "revision": "efd27043ddbc260f1d27",
36
+ "url": "/.blocklet/proxy/blocklet-service/static/js/5.4fa6174b.chunk.js"
37
37
  },
38
38
  {
39
- "revision": "2ef366c977548d4b126b",
40
- "url": "/.blocklet/proxy/blocklet-service/static/js/6.60aaf58a.chunk.js"
39
+ "revision": "bc7b85b88539c8eb1f09",
40
+ "url": "/.blocklet/proxy/blocklet-service/static/js/6.84afc8e0.chunk.js"
41
41
  },
42
42
  {
43
- "revision": "720fa5bd6dd6387ed923",
44
- "url": "/.blocklet/proxy/blocklet-service/static/js/7.6ffbad13.chunk.js"
43
+ "revision": "f36b4fc1fa5b0347902e",
44
+ "url": "/.blocklet/proxy/blocklet-service/static/js/7.33ef0515.chunk.js"
45
45
  },
46
46
  {
47
- "revision": "e9a09e425c605f74b307",
48
- "url": "/.blocklet/proxy/blocklet-service/static/js/8.7e2dd683.chunk.js"
47
+ "revision": "a003004d1f7bc219318a",
48
+ "url": "/.blocklet/proxy/blocklet-service/static/js/8.6684f959.chunk.js"
49
49
  },
50
50
  {
51
- "revision": "e3f6d6b168900962d252",
52
- "url": "/.blocklet/proxy/blocklet-service/static/js/9.9561f820.chunk.js"
51
+ "revision": "f48329058818843822c8",
52
+ "url": "/.blocklet/proxy/blocklet-service/static/js/9.d7a1d6be.chunk.js"
53
53
  },
54
54
  {
55
- "revision": "0d137dbd2339ca1d9a64",
56
- "url": "/.blocklet/proxy/blocklet-service/static/js/main.73e47d11.chunk.js"
55
+ "revision": "3ebe70c165bd34bebb61",
56
+ "url": "/.blocklet/proxy/blocklet-service/static/js/main.d9f162f2.chunk.js"
57
57
  },
58
58
  {
59
- "revision": "9a17203f116f3efb5e79",
60
- "url": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.d47db38c.js"
59
+ "revision": "9ece040f628293537d19",
60
+ "url": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.c57b91d0.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.6bba5a0937fec8cc0577975770db10ff.js"
17
+ "/.blocklet/proxy/blocklet-service/precache-manifest.5f319c29c408a50466b0d034dc444e5f.js"
18
18
  );
19
19
 
20
20
  self.addEventListener('message', (event) => {