@abtnode/blocklet-services 1.7.8 → 1.7.9
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/api/index.js +41 -1
- package/api/routes/blocklet.js +2 -2
- package/api/services/auth/connect/login.js +9 -1
- package/api/services/auth/connect/switch-passport.js +107 -0
- package/api/services/auth/connect/switch-profile.js +60 -0
- package/api/services/auth/index.js +4 -0
- package/api/util/index.js +1 -1
- package/build/asset-manifest.json +28 -28
- package/build/index.html +1 -1
- package/build/{precache-manifest.e66a1944c5bb1778fa8adfe34f4c1f85.js → precache-manifest.6d3980942db17d0030ae86fe37ac56e9.js} +26 -26
- package/build/service-worker.js +1 -1
- package/build/static/js/0.b63c03e9.chunk.js +3 -0
- package/build/static/js/{0.eaf6eaf4.chunk.js.LICENSE.txt → 0.b63c03e9.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/0.b63c03e9.chunk.js.map +1 -0
- package/build/static/js/1.20e8fca4.chunk.js +2 -0
- package/build/static/js/1.20e8fca4.chunk.js.map +1 -0
- package/build/static/js/10.0c4b966e.chunk.js +2 -0
- package/build/static/js/{10.434fab75.chunk.js.map → 10.0c4b966e.chunk.js.map} +1 -1
- package/build/static/js/4.fd2a994d.chunk.js +3 -0
- package/build/static/js/{4.76d33dd5.chunk.js.LICENSE.txt → 4.fd2a994d.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/4.fd2a994d.chunk.js.map +1 -0
- package/build/static/js/5.574360ce.chunk.js +2 -0
- package/build/static/js/5.574360ce.chunk.js.map +1 -0
- package/build/static/js/6.5f3e2cbf.chunk.js +2 -0
- package/build/static/js/6.5f3e2cbf.chunk.js.map +1 -0
- package/build/static/js/7.701587af.chunk.js +2 -0
- package/build/static/js/{7.e474a8ba.chunk.js.map → 7.701587af.chunk.js.map} +1 -1
- package/build/static/js/8.4b52a96d.chunk.js +2 -0
- package/build/static/js/8.4b52a96d.chunk.js.map +1 -0
- package/build/static/js/9.6262e0c5.chunk.js +2 -0
- package/build/static/js/{9.7e4058e6.chunk.js.map → 9.6262e0c5.chunk.js.map} +1 -1
- package/build/static/js/main.4ae86267.chunk.js +2 -0
- package/build/static/js/main.4ae86267.chunk.js.map +1 -0
- package/build/static/js/{runtime-main.64859e7d.js → runtime-main.3b7f6300.js} +2 -2
- package/build/static/js/{runtime-main.64859e7d.js.map → runtime-main.3b7f6300.js.map} +1 -1
- package/configs/auth.json +5 -6
- package/package.json +26 -26
- package/build/static/js/0.eaf6eaf4.chunk.js +0 -3
- package/build/static/js/0.eaf6eaf4.chunk.js.map +0 -1
- package/build/static/js/1.1492a6e4.chunk.js +0 -2
- package/build/static/js/1.1492a6e4.chunk.js.map +0 -1
- package/build/static/js/10.434fab75.chunk.js +0 -2
- package/build/static/js/4.76d33dd5.chunk.js +0 -3
- package/build/static/js/4.76d33dd5.chunk.js.map +0 -1
- package/build/static/js/5.011a4e81.chunk.js +0 -2
- package/build/static/js/5.011a4e81.chunk.js.map +0 -1
- package/build/static/js/6.7b36f606.chunk.js +0 -2
- package/build/static/js/6.7b36f606.chunk.js.map +0 -1
- package/build/static/js/7.e474a8ba.chunk.js +0 -2
- package/build/static/js/8.9861fd50.chunk.js +0 -2
- package/build/static/js/8.9861fd50.chunk.js.map +0 -1
- package/build/static/js/9.7e4058e6.chunk.js +0 -2
- package/build/static/js/main.3bfc814a.chunk.js +0 -2
- package/build/static/js/main.3bfc814a.chunk.js.map +0 -1
package/api/index.js
CHANGED
|
@@ -76,7 +76,11 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
76
76
|
const notificationService = initNotification({ node, options });
|
|
77
77
|
|
|
78
78
|
// Proxy engine
|
|
79
|
-
const proxy = httpProxy.createProxyServer({
|
|
79
|
+
const proxy = httpProxy.createProxyServer({
|
|
80
|
+
timeout: 3600 * 1000,
|
|
81
|
+
proxyTimeout: 3600 * 1000,
|
|
82
|
+
});
|
|
83
|
+
|
|
80
84
|
proxy.safeWeb = (req, res, opts = {}) => {
|
|
81
85
|
proxy.web(req, res, opts, (error) => {
|
|
82
86
|
if (error) {
|
|
@@ -285,9 +289,45 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
285
289
|
wsRouter.use('**', async (req, socket, head) => {
|
|
286
290
|
const { target } = ensureProxyUrl(req);
|
|
287
291
|
if (target) {
|
|
292
|
+
let isOpen = false;
|
|
293
|
+
let timer;
|
|
294
|
+
let proxyReq;
|
|
295
|
+
|
|
296
|
+
const setProxyReq = (x) => {
|
|
297
|
+
proxyReq = x;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
const setIsOpen = () => {
|
|
301
|
+
isOpen = true;
|
|
302
|
+
clearTimeout(timer);
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
proxy.once('open', setIsOpen);
|
|
306
|
+
proxy.once('proxyReqWs', setProxyReq);
|
|
307
|
+
|
|
308
|
+
timer = setTimeout(() => {
|
|
309
|
+
if (!isOpen) {
|
|
310
|
+
proxy.off('open', setIsOpen);
|
|
311
|
+
proxy.off('proxyReqWs', setProxyReq);
|
|
312
|
+
|
|
313
|
+
socket.write('HTTP/1.1 502 Proxy Timeout\r\n\r\n');
|
|
314
|
+
socket.destroy();
|
|
315
|
+
|
|
316
|
+
proxyReq?.destroy();
|
|
317
|
+
proxyReq = null;
|
|
318
|
+
}
|
|
319
|
+
}, 120 * 1000);
|
|
320
|
+
|
|
288
321
|
proxy.ws(req, socket, head, { target }, (error) => {
|
|
322
|
+
proxy.off('open', setIsOpen);
|
|
323
|
+
proxy.off('proxyReqWs', setProxyReq);
|
|
324
|
+
clearTimeout(timer);
|
|
325
|
+
proxyReq = null;
|
|
326
|
+
|
|
289
327
|
if (error) {
|
|
290
328
|
logger.error('socket proxy error', { from: req.url, to: target, error });
|
|
329
|
+
socket.write('HTTP/1.1 502 Proxy Error\r\n\r\n');
|
|
330
|
+
socket.destroy();
|
|
291
331
|
}
|
|
292
332
|
});
|
|
293
333
|
} else {
|
package/api/routes/blocklet.js
CHANGED
|
@@ -98,8 +98,6 @@ module.exports = {
|
|
|
98
98
|
});
|
|
99
99
|
|
|
100
100
|
if (fromSetup) {
|
|
101
|
-
await node.setBlockletInitialized({ did: blocklet.meta.did });
|
|
102
|
-
|
|
103
101
|
const { did: userDid, role } = req.user;
|
|
104
102
|
const { wallet, name, passportColor } = await req.getBlockletInfo();
|
|
105
103
|
const teamDid = blocklet.meta.did;
|
|
@@ -107,6 +105,8 @@ module.exports = {
|
|
|
107
105
|
const { pk, locale = 'en', extra = {} } = user;
|
|
108
106
|
const { baseUrl } = extra;
|
|
109
107
|
|
|
108
|
+
await node.setBlockletInitialized({ did: blocklet.meta.did, owner: { did: userDid, pk } });
|
|
109
|
+
|
|
110
110
|
// create vc
|
|
111
111
|
const vc = createPassportVC({
|
|
112
112
|
issuerName: name,
|
|
@@ -120,7 +120,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
120
120
|
// Get passport
|
|
121
121
|
const trustedPassports = (blocklet.trustedPassports || []).map((x) => x.issuerDid);
|
|
122
122
|
const trustedIssuers = [teamAppDid, ...trustedPassports].filter(Boolean);
|
|
123
|
-
|
|
123
|
+
const { vc: inputVC } = await getVCFromClaims({
|
|
124
124
|
claims,
|
|
125
125
|
challenge,
|
|
126
126
|
trustedIssuers,
|
|
@@ -128,6 +128,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
128
128
|
locale,
|
|
129
129
|
});
|
|
130
130
|
|
|
131
|
+
let vc = inputVC;
|
|
132
|
+
|
|
131
133
|
const config = (await req.getServiceConfig(NODE_SERVICES.AUTH)) || {};
|
|
132
134
|
const [invitedUserOnly, defaultRole, issuePassport] = await isInvitedUserOnly(config, node, teamDid);
|
|
133
135
|
|
|
@@ -240,6 +242,12 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
240
242
|
await updateSession({ sessionToken }, true);
|
|
241
243
|
logger.info('login.success', { userDid, role });
|
|
242
244
|
|
|
245
|
+
// if user provides owner passport AND app does not have owner, set this user to owner
|
|
246
|
+
if (inputVC && role === ROLES.OWNER && !blocklet.settings?.owner) {
|
|
247
|
+
logger.info('Bind owner for blocklet', { teamDid, userDid });
|
|
248
|
+
await node.setBlockletInitialized({ did: teamDid, owner: { did: userDid, pk: userPk } });
|
|
249
|
+
}
|
|
250
|
+
|
|
243
251
|
// issue passport for the first login user in a invite-only team
|
|
244
252
|
if (issuePassport) {
|
|
245
253
|
return {
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const get = require('lodash/get');
|
|
2
|
+
const { messages, getVCFromClaims, getUser, validatePassportStatus } = require('@abtnode/auth/lib/auth');
|
|
3
|
+
const { ROLES, VC_TYPE_GENERAL_PASSPORT, VC_TYPE_NODE_PASSPORT } = require('@abtnode/constant');
|
|
4
|
+
const {
|
|
5
|
+
validatePassport,
|
|
6
|
+
isUserPassportRevoked,
|
|
7
|
+
getRoleFromLocalPassport,
|
|
8
|
+
getRoleFromExternalPassport,
|
|
9
|
+
createUserPassport,
|
|
10
|
+
} = require('@abtnode/auth/lib/passport');
|
|
11
|
+
|
|
12
|
+
const vcTypes = [VC_TYPE_GENERAL_PASSPORT, VC_TYPE_NODE_PASSPORT];
|
|
13
|
+
|
|
14
|
+
module.exports = function createRoutes(node, authenticator, createSessionToken) {
|
|
15
|
+
return {
|
|
16
|
+
action: 'switch-passport',
|
|
17
|
+
onConnect: async ({ req, userDid, extraParams: { locale, connectedDid } }) => {
|
|
18
|
+
if (userDid && connectedDid && userDid !== connectedDid) {
|
|
19
|
+
throw new Error(messages.userMismatch[locale]);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const { wallet, did: teamDid } = await req.getBlockletInfo();
|
|
23
|
+
const user = await getUser(node, teamDid, userDid);
|
|
24
|
+
|
|
25
|
+
if (!user) {
|
|
26
|
+
throw new Error(messages.userNotFound[locale]);
|
|
27
|
+
}
|
|
28
|
+
if (!user.approved) {
|
|
29
|
+
throw new Error(messages.notAuthorized[locale]);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
verifiableCredential: async ({ context }) => {
|
|
34
|
+
const { request } = context;
|
|
35
|
+
const blocklet = await request.getBlocklet();
|
|
36
|
+
|
|
37
|
+
const trustedPassports = (blocklet.trustedPassports || []).map((x) => x.issuerDid);
|
|
38
|
+
const trustedIssuers = [wallet.address, ...trustedPassports].filter(Boolean);
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
description: messages.requestPassport[locale],
|
|
42
|
+
item: vcTypes,
|
|
43
|
+
trustedIssuers,
|
|
44
|
+
optional: false,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
onAuth: async ({ claims, challenge, userDid, updateSession, extraParams, req }) => {
|
|
51
|
+
const { locale } = extraParams;
|
|
52
|
+
const blocklet = await req.getBlocklet();
|
|
53
|
+
const { wallet, name, did: teamDid } = await req.getBlockletInfo();
|
|
54
|
+
|
|
55
|
+
// Validate user
|
|
56
|
+
const user = await getUser(node, teamDid, userDid);
|
|
57
|
+
if (!user) {
|
|
58
|
+
throw new Error(messages.userNotFound[locale]);
|
|
59
|
+
}
|
|
60
|
+
if (!user.approved) {
|
|
61
|
+
throw new Error(messages.notAuthorized[locale]);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Get passport
|
|
65
|
+
const trustedPassports = (blocklet.trustedPassports || []).map((x) => x.issuerDid);
|
|
66
|
+
const trustedIssuers = [wallet.address, ...trustedPassports].filter(Boolean);
|
|
67
|
+
const { vc } = await getVCFromClaims({ claims, challenge, trustedIssuers, vcTypes, locale });
|
|
68
|
+
|
|
69
|
+
// Get user passport from vc
|
|
70
|
+
let passport = createUserPassport(vc);
|
|
71
|
+
if (passport && isUserPassportRevoked(user, passport)) {
|
|
72
|
+
throw new Error(messages.passportRevoked[locale](name));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Get role
|
|
76
|
+
let role = ROLES.GUEST;
|
|
77
|
+
await validatePassport(get(vc, 'credentialSubject.passport'));
|
|
78
|
+
const issuerId = get(vc, 'issuer.id');
|
|
79
|
+
if (issuerId === wallet.address) {
|
|
80
|
+
role = getRoleFromLocalPassport(get(vc, 'credentialSubject.passport'));
|
|
81
|
+
} else {
|
|
82
|
+
// map external passport to local role
|
|
83
|
+
const { mappings = [] } = (blocklet.trustedPassports || []).find((x) => x.issuerDid === issuerId) || {};
|
|
84
|
+
role = await getRoleFromExternalPassport({
|
|
85
|
+
passport: get(vc, 'credentialSubject.passport'),
|
|
86
|
+
node,
|
|
87
|
+
teamDid,
|
|
88
|
+
locale,
|
|
89
|
+
mappings,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// check status of external passport if passport has an endpoint
|
|
93
|
+
const endpoint = get(vc, 'credentialStatus.id');
|
|
94
|
+
if (endpoint) {
|
|
95
|
+
await validatePassportStatus({ vcId: vc.id, endpoint, locale });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Recreate passport with correct role
|
|
100
|
+
passport = createUserPassport(vc, { role });
|
|
101
|
+
|
|
102
|
+
// Generate new session token that client can save to localStorage
|
|
103
|
+
const sessionToken = await createSessionToken(userDid, { passport, role });
|
|
104
|
+
await updateSession({ sessionToken }, true);
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const get = require('lodash/get');
|
|
2
|
+
const { messages, getUser } = require('@abtnode/auth/lib/auth');
|
|
3
|
+
const { NODE_SERVICES } = require('@abtnode/constant');
|
|
4
|
+
|
|
5
|
+
module.exports = function createRoutes(node) {
|
|
6
|
+
return {
|
|
7
|
+
action: 'switch-profile',
|
|
8
|
+
onConnect: async ({ req, userDid, extraParams: { locale, connectedDid } }) => {
|
|
9
|
+
if (userDid && connectedDid && userDid !== connectedDid) {
|
|
10
|
+
throw new Error(messages.userMismatch[locale]);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const config = await req.getServiceConfig(NODE_SERVICES.AUTH);
|
|
14
|
+
if (get(config, 'allowSwitchProfile', true) === false) {
|
|
15
|
+
throw new Error(messages.actionForbidden[locale]);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const { did: teamDid } = await req.getBlockletInfo();
|
|
19
|
+
const user = await getUser(node, teamDid, userDid);
|
|
20
|
+
|
|
21
|
+
if (!user) {
|
|
22
|
+
throw new Error(messages.userNotFound[locale]);
|
|
23
|
+
}
|
|
24
|
+
if (!user.approved) {
|
|
25
|
+
throw new Error(messages.notAuthorized[locale]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
profile: {
|
|
30
|
+
fields: get(config, 'profileFields') || ['fullName', 'avatar'],
|
|
31
|
+
description: messages.description[locale],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
onAuth: async ({ req, claims, userDid, extraParams: { locale } }) => {
|
|
37
|
+
const { did: teamDid } = await req.getBlockletInfo();
|
|
38
|
+
|
|
39
|
+
// check user approved
|
|
40
|
+
const user = await getUser(node, teamDid, userDid);
|
|
41
|
+
if (!user) {
|
|
42
|
+
throw new Error(messages.userNotFound[locale]);
|
|
43
|
+
}
|
|
44
|
+
if (!user.approved) {
|
|
45
|
+
throw new Error(messages.notAuthorized[locale]);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Update user
|
|
49
|
+
const profile = claims.find((x) => x.type === 'profile');
|
|
50
|
+
await node.updateUser({
|
|
51
|
+
teamDid,
|
|
52
|
+
user: {
|
|
53
|
+
...user,
|
|
54
|
+
...profile,
|
|
55
|
+
locale,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
};
|
|
@@ -17,6 +17,8 @@ const createIssuePassportAuth = require('./connect/issue-passport');
|
|
|
17
17
|
const createLostPassportListAuth = require('./connect/lost-passport-list');
|
|
18
18
|
const createLostPassportIssueAuth = require('./connect/lost-passport-issue');
|
|
19
19
|
const createSetupAuth = require('./connect/setup');
|
|
20
|
+
const createSwitchProfileAuth = require('./connect/switch-profile');
|
|
21
|
+
const createSwitchPassportAuth = require('./connect/switch-passport');
|
|
20
22
|
const createSessionRoutes = require('./session');
|
|
21
23
|
const createPassportRoutes = require('./passport');
|
|
22
24
|
const { getRedirectUrl } = require('../../util');
|
|
@@ -126,6 +128,8 @@ const init = ({ node, options }) => {
|
|
|
126
128
|
handler.attach(Object.assign({ app }, createLostPassportListAuth(node, authenticator, createSessionToken)));
|
|
127
129
|
handler.attach(Object.assign({ app }, createLostPassportIssueAuth(node, authenticator, createSessionToken)));
|
|
128
130
|
handler.attach(Object.assign({ app }, createSetupAuth(node, authenticator, createSessionToken)));
|
|
131
|
+
handler.attach(Object.assign({ app }, createSwitchProfileAuth(node, authenticator, createSessionToken)));
|
|
132
|
+
handler.attach(Object.assign({ app }, createSwitchPassportAuth(node, authenticator, createSessionToken)));
|
|
129
133
|
});
|
|
130
134
|
};
|
|
131
135
|
|
package/api/util/index.js
CHANGED
|
@@ -31,7 +31,7 @@ const getLogoFromLogoUrl = (blocklet, version) => {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
const getBlockletLogo = ({ baseUrl, blocklet }) => {
|
|
34
|
-
const version = blocklet
|
|
34
|
+
const version = get(blocklet, 'meta.version', '');
|
|
35
35
|
|
|
36
36
|
if (!baseUrl) {
|
|
37
37
|
return getLogoFromLogoUrl(blocklet, version);
|
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
|
-
"static/js/0.
|
|
4
|
-
"static/js/0.
|
|
5
|
-
"static/js/1.
|
|
6
|
-
"static/js/1.
|
|
7
|
-
"main.js": "/.blocklet/proxy/blocklet-service/static/js/main.
|
|
8
|
-
"main.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.
|
|
9
|
-
"runtime-main.js": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.
|
|
10
|
-
"runtime-main.js.map": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.
|
|
3
|
+
"static/js/0.b63c03e9.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/0.b63c03e9.chunk.js",
|
|
4
|
+
"static/js/0.b63c03e9.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/0.b63c03e9.chunk.js.map",
|
|
5
|
+
"static/js/1.20e8fca4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/1.20e8fca4.chunk.js",
|
|
6
|
+
"static/js/1.20e8fca4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/1.20e8fca4.chunk.js.map",
|
|
7
|
+
"main.js": "/.blocklet/proxy/blocklet-service/static/js/main.4ae86267.chunk.js",
|
|
8
|
+
"main.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.4ae86267.chunk.js.map",
|
|
9
|
+
"runtime-main.js": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.3b7f6300.js",
|
|
10
|
+
"runtime-main.js.map": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.3b7f6300.js.map",
|
|
11
11
|
"static/css/4.634341e0.chunk.css": "/.blocklet/proxy/blocklet-service/static/css/4.634341e0.chunk.css",
|
|
12
|
-
"static/js/4.
|
|
13
|
-
"static/js/4.
|
|
14
|
-
"static/js/5.
|
|
15
|
-
"static/js/5.
|
|
16
|
-
"static/js/6.
|
|
17
|
-
"static/js/6.
|
|
18
|
-
"static/js/7.
|
|
19
|
-
"static/js/7.
|
|
20
|
-
"static/js/8.
|
|
21
|
-
"static/js/8.
|
|
22
|
-
"static/js/9.
|
|
23
|
-
"static/js/9.
|
|
24
|
-
"static/js/10.
|
|
25
|
-
"static/js/10.
|
|
12
|
+
"static/js/4.fd2a994d.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/4.fd2a994d.chunk.js",
|
|
13
|
+
"static/js/4.fd2a994d.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/4.fd2a994d.chunk.js.map",
|
|
14
|
+
"static/js/5.574360ce.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/5.574360ce.chunk.js",
|
|
15
|
+
"static/js/5.574360ce.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/5.574360ce.chunk.js.map",
|
|
16
|
+
"static/js/6.5f3e2cbf.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/6.5f3e2cbf.chunk.js",
|
|
17
|
+
"static/js/6.5f3e2cbf.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/6.5f3e2cbf.chunk.js.map",
|
|
18
|
+
"static/js/7.701587af.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/7.701587af.chunk.js",
|
|
19
|
+
"static/js/7.701587af.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/7.701587af.chunk.js.map",
|
|
20
|
+
"static/js/8.4b52a96d.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/8.4b52a96d.chunk.js",
|
|
21
|
+
"static/js/8.4b52a96d.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/8.4b52a96d.chunk.js.map",
|
|
22
|
+
"static/js/9.6262e0c5.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/9.6262e0c5.chunk.js",
|
|
23
|
+
"static/js/9.6262e0c5.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/9.6262e0c5.chunk.js.map",
|
|
24
|
+
"static/js/10.0c4b966e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/10.0c4b966e.chunk.js",
|
|
25
|
+
"static/js/10.0c4b966e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/10.0c4b966e.chunk.js.map",
|
|
26
26
|
"index.html": "/.blocklet/proxy/blocklet-service/index.html",
|
|
27
|
-
"precache-manifest.
|
|
27
|
+
"precache-manifest.6d3980942db17d0030ae86fe37ac56e9.js": "/.blocklet/proxy/blocklet-service/precache-manifest.6d3980942db17d0030ae86fe37ac56e9.js",
|
|
28
28
|
"service-worker.js": "/.blocklet/proxy/blocklet-service/service-worker.js",
|
|
29
29
|
"static/css/4.634341e0.chunk.css.map": "/.blocklet/proxy/blocklet-service/static/css/4.634341e0.chunk.css.map",
|
|
30
|
-
"static/js/0.
|
|
31
|
-
"static/js/4.
|
|
30
|
+
"static/js/0.b63c03e9.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/0.b63c03e9.chunk.js.LICENSE.txt",
|
|
31
|
+
"static/js/4.fd2a994d.chunk.js.LICENSE.txt": "/.blocklet/proxy/blocklet-service/static/js/4.fd2a994d.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
|
"static/media/500.css": "/.blocklet/proxy/blocklet-service/static/media/rubik-latin-ext-500-normal.21b63491.woff2",
|
|
35
35
|
"static/media/600.css": "/.blocklet/proxy/blocklet-service/static/media/rubik-latin-ext-600-normal.d0d90e83.woff2"
|
|
36
36
|
},
|
|
37
37
|
"entrypoints": [
|
|
38
|
-
"static/js/runtime-main.
|
|
38
|
+
"static/js/runtime-main.3b7f6300.js",
|
|
39
39
|
"static/css/4.634341e0.chunk.css",
|
|
40
|
-
"static/js/4.
|
|
41
|
-
"static/js/main.
|
|
40
|
+
"static/js/4.fd2a994d.chunk.js",
|
|
41
|
+
"static/js/main.4ae86267.chunk.js"
|
|
42
42
|
]
|
|
43
43
|
}
|
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.634341e0.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,
|
|
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.634341e0.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,a,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)a=i[d],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&h.push(o[a][0]),o[a]=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 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&&(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=a(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={3:0},c=[],u=[];function a(e){return i.p+"static/js/"+({}[e]||e)+"."+{0:"b63c03e9",1:"20e8fca4",5:"574360ce",6:"5f3e2cbf",7:"701587af",8:"4b52a96d",9:"6262e0c5",10:"0c4b966e"}[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,u=document.createElement("script");u.charset="utf-8",u.timeout=120,i.nc&&u.setAttribute("nonce",i.nc),u.src=a(e);var l=new Error;c=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),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:u})}),12e4);u.onerror=u.onload=c,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.fd2a994d.chunk.js"></script><script src="/.blocklet/proxy/blocklet-service/static/js/main.4ae86267.chunk.js"></script></body></html>
|
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
self.__precacheManifest = (self.__precacheManifest || []).concat([
|
|
2
2
|
{
|
|
3
|
-
"revision": "
|
|
3
|
+
"revision": "37244607de6f72e26ffe70a74693f3db",
|
|
4
4
|
"url": "/.blocklet/proxy/blocklet-service/index.html"
|
|
5
5
|
},
|
|
6
6
|
{
|
|
7
|
-
"revision": "
|
|
7
|
+
"revision": "a2ae4b8fec2e6395b2fe",
|
|
8
8
|
"url": "/.blocklet/proxy/blocklet-service/static/css/4.634341e0.chunk.css"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
|
-
"revision": "
|
|
12
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/0.
|
|
11
|
+
"revision": "d26ff6b35970c71cad20",
|
|
12
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/0.b63c03e9.chunk.js"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"revision": "327dea51c54983f5708f4242bceacaed",
|
|
16
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/0.
|
|
16
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/0.b63c03e9.chunk.js.LICENSE.txt"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
"revision": "
|
|
20
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/1.
|
|
19
|
+
"revision": "ac088caed50ff246d009",
|
|
20
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/1.20e8fca4.chunk.js"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
"revision": "
|
|
24
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/10.
|
|
23
|
+
"revision": "c3dfab6fbc35271abb1c",
|
|
24
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/10.0c4b966e.chunk.js"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
"revision": "
|
|
28
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/4.
|
|
27
|
+
"revision": "a2ae4b8fec2e6395b2fe",
|
|
28
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/4.fd2a994d.chunk.js"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"revision": "ff58a668e6d753fa035087a671c28199",
|
|
32
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/4.
|
|
32
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/4.fd2a994d.chunk.js.LICENSE.txt"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"revision": "
|
|
36
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/5.
|
|
35
|
+
"revision": "5cc6cf5b1f5f44eaee6f",
|
|
36
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/5.574360ce.chunk.js"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
|
-
"revision": "
|
|
40
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/6.
|
|
39
|
+
"revision": "be433e004fe185586915",
|
|
40
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/6.5f3e2cbf.chunk.js"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
"revision": "
|
|
44
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/7.
|
|
43
|
+
"revision": "9871a1217ccfe87cd2f8",
|
|
44
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/7.701587af.chunk.js"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
|
-
"revision": "
|
|
48
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/8.
|
|
47
|
+
"revision": "1a99912fbcd9248629ec",
|
|
48
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/8.4b52a96d.chunk.js"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
|
-
"revision": "
|
|
52
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/9.
|
|
51
|
+
"revision": "d3454de49f8842d441a3",
|
|
52
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/9.6262e0c5.chunk.js"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"revision": "
|
|
56
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/main.
|
|
55
|
+
"revision": "3b825d7fb16ff8541bf7",
|
|
56
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/main.4ae86267.chunk.js"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
"revision": "
|
|
60
|
-
"url": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.
|
|
59
|
+
"revision": "c971562d345e14a37834",
|
|
60
|
+
"url": "/.blocklet/proxy/blocklet-service/static/js/runtime-main.3b7f6300.js"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
"revision": "a82dcb33d52ed6fa529e5ae8d5fda7f3",
|
package/build/service-worker.js
CHANGED
|
@@ -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.
|
|
17
|
+
"/.blocklet/proxy/blocklet-service/precache-manifest.6d3980942db17d0030ae86fe37ac56e9.js"
|
|
18
18
|
);
|
|
19
19
|
|
|
20
20
|
self.addEventListener('message', (event) => {
|