@abtnode/blocklet-services 1.16.16-beta-740ea329 → 1.16.16-beta-d6c5ed65
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/libs/auth/utils.js +2 -1
- package/api/libs/connect/session.js +75 -30
- package/api/libs/connect/shared.js +4 -5
- package/api/libs/connect/v1.js +7 -9
- package/api/routes/federated.js +84 -11
- package/api/routes/oauth.js +140 -37
- package/api/routes/user.js +7 -2
- package/api/services/auth/connect/switch-passport.js +5 -5
- package/api/util/blocklet-utils.js +2 -3
- package/build/asset-manifest.json +55 -55
- package/build/index.html +1 -1
- package/build/service-worker.js +1 -1
- package/build/service-worker.js.map +1 -1
- package/build/static/js/1480.36129849.chunk.js +2 -0
- package/build/static/js/{1565.a6f98c38.chunk.js → 1565.ad002b88.chunk.js} +2 -2
- package/build/static/js/{1660.5c8ade93.chunk.js → 1660.9fb17942.chunk.js} +2 -2
- package/build/static/js/{1760.95d0c320.chunk.js → 1760.71e0c151.chunk.js} +2 -2
- package/build/static/js/{2653.11a1ad57.chunk.js → 2653.6f37e8a0.chunk.js} +2 -2
- package/build/static/js/2686.7ae70bfd.chunk.js +2 -0
- package/build/static/js/4023.4be0c818.chunk.js +2 -0
- package/build/static/js/{4716.47aa133c.chunk.js → 4716.17a45b6a.chunk.js} +2 -2
- package/build/static/js/{4802.63425dd4.chunk.js → 4802.b7fa8e82.chunk.js} +2 -2
- package/build/static/js/50.cbaa5a4e.chunk.js +3 -0
- package/build/static/js/{5176.42904a22.chunk.js → 5176.53f7f419.chunk.js} +2 -2
- package/build/static/js/{5628.773a32da.chunk.js → 5628.aa14b1a7.chunk.js} +2 -2
- package/build/static/js/5662.522d3713.chunk.js +2 -0
- package/build/static/js/5683.7e5d47f1.chunk.js +2 -0
- package/build/static/js/6186.6462ea21.chunk.js +2 -0
- package/build/static/js/{6452.b1899621.chunk.js → 6452.4226209b.chunk.js} +2 -2
- package/build/static/js/{6629.36e61c26.chunk.js → 6629.785fe237.chunk.js} +3 -3
- package/build/static/js/{6640.53cdcb95.chunk.js → 6640.e453c619.chunk.js} +2 -2
- package/build/static/js/6737.7fe9f13a.chunk.js +2 -0
- package/build/static/js/{6771.735ebd3f.chunk.js → 6771.1e778542.chunk.js} +3 -3
- package/build/static/js/{6856.e5c166e6.chunk.js → 6856.9aaf692c.chunk.js} +2 -2
- package/build/static/js/{7006.9a53f7ed.chunk.js → 7006.b72aff66.chunk.js} +2 -2
- package/build/static/js/{7465.ba1027a7.chunk.js → 7465.999f0039.chunk.js} +3 -3
- package/build/static/js/{9409.befe72b4.chunk.js → 9409.fe4a0af0.chunk.js} +2 -2
- package/build/static/js/{9620.59bc85b8.chunk.js → 9620.db1568ef.chunk.js} +2 -2
- package/build/static/js/{9899.c8ff588e.chunk.js → 9899.92626f0a.chunk.js} +2 -2
- package/build/static/js/main.85d66eb2.js +3 -0
- package/build/static/js/{main.3ba3901e.js.LICENSE.txt → main.85d66eb2.js.LICENSE.txt} +1 -1
- package/package.json +23 -23
- package/build/static/js/1480.30b94380.chunk.js +0 -2
- package/build/static/js/2307.2e451912.chunk.js +0 -2
- package/build/static/js/2686.07687254.chunk.js +0 -2
- package/build/static/js/4023.0f348986.chunk.js +0 -2
- package/build/static/js/5683.3bdd2338.chunk.js +0 -2
- package/build/static/js/6186.61596c22.chunk.js +0 -2
- package/build/static/js/6606.9f17eaa6.chunk.js +0 -3
- package/build/static/js/6737.5f735a29.chunk.js +0 -2
- package/build/static/js/main.3ba3901e.js +0 -3
- /package/build/static/js/{6606.9f17eaa6.chunk.js.LICENSE.txt → 50.cbaa5a4e.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{6629.36e61c26.chunk.js.LICENSE.txt → 6629.785fe237.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{6771.735ebd3f.chunk.js.LICENSE.txt → 6771.1e778542.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{7465.ba1027a7.chunk.js.LICENSE.txt → 7465.999f0039.chunk.js.LICENSE.txt} +0 -0
package/api/routes/oauth.js
CHANGED
|
@@ -19,6 +19,7 @@ const logger = require('@abtnode/logger')('blocklet-services:oauth');
|
|
|
19
19
|
|
|
20
20
|
const { AuthenticationClient } = require('../libs/auth/adapters/auth0');
|
|
21
21
|
const { getAvatarByEmail, transferPassport, getAvatarByUrl } = require('../libs/auth/utils');
|
|
22
|
+
const { api } = require('../libs/api');
|
|
22
23
|
const initJwt = require('../libs/jwt');
|
|
23
24
|
const { sendToUser } = require('../libs/notification');
|
|
24
25
|
const { isInvitedUserOnly, createTokenFn, getDidConnectVersion } = require('../util');
|
|
@@ -27,6 +28,7 @@ const { ApiError } = require('../util/error');
|
|
|
27
28
|
const PREFIX = WELLKNOWN_SERVICE_PATH_PREFIX;
|
|
28
29
|
|
|
29
30
|
const prefix = `${PREFIX}/oauth`;
|
|
31
|
+
const prefixApi = `${PREFIX}/api/oauth`;
|
|
30
32
|
|
|
31
33
|
const translations = {
|
|
32
34
|
zh: {
|
|
@@ -62,23 +64,42 @@ function getAuthClient(blocklet, provider) {
|
|
|
62
64
|
|
|
63
65
|
async function login(req, node, options) {
|
|
64
66
|
const blocklet = await req.getBlocklet();
|
|
65
|
-
const { token, locale = 'en', provider, componentId } = req.body;
|
|
67
|
+
const { token, locale = 'en', provider, componentId, sourceAppPid } = req.body;
|
|
66
68
|
|
|
67
69
|
if (!blocklet.settings?.owner) {
|
|
68
70
|
throw new ApiError(400, t('oauthCantBeOwner', locale));
|
|
69
71
|
}
|
|
70
|
-
const
|
|
72
|
+
const { did: teamDid, wallet: blockletWallet, secret, appUrl } = await req.getBlockletInfo();
|
|
73
|
+
let userWallet;
|
|
74
|
+
let oauthInfo;
|
|
75
|
+
let federatedSessionToken;
|
|
76
|
+
let federatedRefreshToken;
|
|
77
|
+
|
|
78
|
+
// NOTICE: 如果是统一登录,则向 master 站点发起 oauth 登录请求,auth0 的账户信息必须由 master 来生成
|
|
79
|
+
if (sourceAppPid) {
|
|
80
|
+
const federatedSites = blocklet.settings?.federated?.sites || [];
|
|
81
|
+
const loginSite = federatedSites.find((x) => x.appPid === sourceAppPid);
|
|
82
|
+
const postData = { token, locale, provider, componentId };
|
|
83
|
+
const url = joinUrl(loginSite.appUrl, WELLKNOWN_SERVICE_PATH_PREFIX, '/api/oauth/login');
|
|
84
|
+
const { data } = await api.post(url, postData, {
|
|
85
|
+
headers: {
|
|
86
|
+
'x-did-connect-version': getDidConnectVersion(req),
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
({ sessionToken: federatedSessionToken, refreshToken: federatedRefreshToken, oauthInfo, userWallet } = data);
|
|
90
|
+
} else {
|
|
91
|
+
const authClient = getAuthClient(blocklet, provider);
|
|
92
|
+
oauthInfo = await authClient.getProfile(token);
|
|
93
|
+
userWallet = fromAppDid(oauthInfo.sub, blockletWallet.secretKey);
|
|
94
|
+
}
|
|
95
|
+
const userDid = userWallet.address;
|
|
96
|
+
const userPk = userWallet.publicKey;
|
|
71
97
|
|
|
72
|
-
const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
|
|
73
98
|
const config = await req.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
|
|
74
99
|
const nodeInfo = await req.getNodeInfo();
|
|
75
100
|
const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
|
|
76
101
|
const [invitedUserOnly] = await isInvitedUserOnly(config, node, teamDid);
|
|
77
|
-
const oauthInfo = await authClient.getProfile(token);
|
|
78
102
|
|
|
79
|
-
const userWallet = fromAppDid(oauthInfo.sub, blockletWallet.secretKey);
|
|
80
|
-
const userDid = userWallet.address;
|
|
81
|
-
const userPk = userWallet.publicKey;
|
|
82
103
|
const lastLoginIp = get(req, 'headers[x-real-ip]') || '';
|
|
83
104
|
let passport = { name: 'Guest', role: 'guest' };
|
|
84
105
|
let currentUser = await node.getUser({
|
|
@@ -93,8 +114,20 @@ async function login(req, node, options) {
|
|
|
93
114
|
let doc;
|
|
94
115
|
let passportForLog;
|
|
95
116
|
const fullName = currentUser?.fullName || oauthInfo?.nickname;
|
|
117
|
+
const connectedAccount = {
|
|
118
|
+
provider,
|
|
119
|
+
did: userDid,
|
|
120
|
+
pk: userPk,
|
|
121
|
+
id: oauthInfo.sub,
|
|
122
|
+
};
|
|
123
|
+
let profile;
|
|
96
124
|
// 当前账户已存在,更新账户信息
|
|
97
125
|
if (currentUser) {
|
|
126
|
+
profile = {
|
|
127
|
+
fullName: currentUser.fullName,
|
|
128
|
+
email: currentUser.email || '',
|
|
129
|
+
avatar: currentUser.avatar,
|
|
130
|
+
};
|
|
98
131
|
const allPassports = currentUser.passports || [];
|
|
99
132
|
const validPassports = allPassports.filter((item) => item.status === PASSPORT_STATUS.VALID);
|
|
100
133
|
const lastUsedPassport = last(sortBy(validPassports, 'lastLoginAt'));
|
|
@@ -102,6 +135,7 @@ async function login(req, node, options) {
|
|
|
102
135
|
if (lastUsedPassport) {
|
|
103
136
|
passport = pick(lastUsedPassport, ['id', 'name', 'role']);
|
|
104
137
|
}
|
|
138
|
+
|
|
105
139
|
doc = await node.loginUser({
|
|
106
140
|
teamDid,
|
|
107
141
|
user: {
|
|
@@ -109,14 +143,15 @@ async function login(req, node, options) {
|
|
|
109
143
|
pk: currentUser.pk,
|
|
110
144
|
locale,
|
|
111
145
|
lastLoginIp,
|
|
146
|
+
sourceAppPid,
|
|
112
147
|
passport: lastUsedPassport,
|
|
113
|
-
connectedAccount
|
|
148
|
+
connectedAccount,
|
|
114
149
|
},
|
|
115
150
|
});
|
|
116
151
|
} else {
|
|
117
152
|
currentUser = {
|
|
118
|
-
did:
|
|
119
|
-
pk:
|
|
153
|
+
did: userDid,
|
|
154
|
+
pk: userPk,
|
|
120
155
|
};
|
|
121
156
|
let avatar = oauthInfo.picture ? await getAvatarByUrl(oauthInfo.picture) : await getAvatarByEmail(oauthInfo.email);
|
|
122
157
|
avatar = await extractUserAvatar(avatar, { dataDir });
|
|
@@ -125,20 +160,19 @@ async function login(req, node, options) {
|
|
|
125
160
|
throw new ApiError(403, t('needInviteToLogin', locale));
|
|
126
161
|
}
|
|
127
162
|
passportForLog = { name: 'Guest', role: 'guest' };
|
|
163
|
+
profile = {
|
|
164
|
+
fullName: oauthInfo.nickname,
|
|
165
|
+
email: oauthInfo.email,
|
|
166
|
+
avatar,
|
|
167
|
+
};
|
|
128
168
|
doc = await node.loginUser({
|
|
129
169
|
teamDid,
|
|
130
170
|
user: {
|
|
131
|
-
connectedAccount
|
|
132
|
-
provider,
|
|
133
|
-
id: oauthInfo.sub,
|
|
134
|
-
did: userDid,
|
|
135
|
-
pk: userPk,
|
|
136
|
-
},
|
|
171
|
+
connectedAccount,
|
|
137
172
|
did: userDid,
|
|
138
173
|
pk: userPk,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
avatar,
|
|
174
|
+
sourceAppPid,
|
|
175
|
+
...profile,
|
|
142
176
|
locale,
|
|
143
177
|
lastLoginIp,
|
|
144
178
|
},
|
|
@@ -148,13 +182,30 @@ async function login(req, node, options) {
|
|
|
148
182
|
await node.createAuditLog(
|
|
149
183
|
{
|
|
150
184
|
action: 'login',
|
|
151
|
-
args: { teamDid, userDid: currentUser.did || userDid, passport: passportForLog, provider },
|
|
185
|
+
args: { teamDid, userDid: currentUser.did || userDid, passport: passportForLog, provider, sourceAppPid },
|
|
152
186
|
context: formatContext(Object.assign(req, { user: doc })),
|
|
153
187
|
result: doc,
|
|
154
188
|
},
|
|
155
189
|
node
|
|
156
190
|
);
|
|
157
191
|
|
|
192
|
+
// NOTICE: 采用异步来更新,不阻塞接口的正常响应
|
|
193
|
+
node.syncFederated({
|
|
194
|
+
did: teamDid,
|
|
195
|
+
data: {
|
|
196
|
+
users: [
|
|
197
|
+
{
|
|
198
|
+
did: userDid,
|
|
199
|
+
pk: userPk,
|
|
200
|
+
...profile,
|
|
201
|
+
avatar: getUserAvatarUrl(appUrl, profile.avatar),
|
|
202
|
+
connectedAccount: [connectedAccount],
|
|
203
|
+
action: 'connectAccount',
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
|
|
158
209
|
const { createSessionToken } = initJwt(node, options);
|
|
159
210
|
|
|
160
211
|
const createToken = createTokenFn(createSessionToken);
|
|
@@ -176,7 +227,14 @@ async function login(req, node, options) {
|
|
|
176
227
|
return sessionToken;
|
|
177
228
|
}
|
|
178
229
|
|
|
179
|
-
return {
|
|
230
|
+
return {
|
|
231
|
+
sessionToken,
|
|
232
|
+
refreshToken,
|
|
233
|
+
federatedSessionToken,
|
|
234
|
+
federatedRefreshToken,
|
|
235
|
+
oauthInfo,
|
|
236
|
+
userWallet: pick(userWallet, ['type', 'publicKey', 'address']),
|
|
237
|
+
};
|
|
180
238
|
}
|
|
181
239
|
|
|
182
240
|
async function invite(req, node, options) {
|
|
@@ -262,17 +320,33 @@ async function invite(req, node, options) {
|
|
|
262
320
|
);
|
|
263
321
|
}
|
|
264
322
|
} else {
|
|
323
|
+
const connectedAccount = {
|
|
324
|
+
provider,
|
|
325
|
+
id: oauthInfo.sub,
|
|
326
|
+
did: userWallet.address,
|
|
327
|
+
pk: userWallet.publicKey,
|
|
328
|
+
};
|
|
265
329
|
await node.loginUser({
|
|
266
330
|
teamDid,
|
|
267
331
|
user: {
|
|
268
332
|
did: userDid,
|
|
269
333
|
pk: userPk,
|
|
270
|
-
connectedAccount
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
334
|
+
connectedAccount,
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
// NOTICE: 采用异步来更新,不阻塞接口的正常响应
|
|
338
|
+
node.syncFederated({
|
|
339
|
+
did: teamDid,
|
|
340
|
+
data: {
|
|
341
|
+
users: [
|
|
342
|
+
{
|
|
343
|
+
did: userDid,
|
|
344
|
+
pk: userPk,
|
|
345
|
+
...profile,
|
|
346
|
+
connectedAccount: [connectedAccount],
|
|
347
|
+
action: 'connectAccount',
|
|
348
|
+
},
|
|
349
|
+
],
|
|
276
350
|
},
|
|
277
351
|
});
|
|
278
352
|
}
|
|
@@ -369,6 +443,22 @@ async function bind(req, node, options) {
|
|
|
369
443
|
},
|
|
370
444
|
});
|
|
371
445
|
|
|
446
|
+
// NOTICE: 采用异步来更新,不阻塞接口的正常响应
|
|
447
|
+
node.syncFederated({
|
|
448
|
+
did: teamDid,
|
|
449
|
+
data: {
|
|
450
|
+
users: [
|
|
451
|
+
{
|
|
452
|
+
did: bindUser.did,
|
|
453
|
+
pk: bindUser.pk,
|
|
454
|
+
...mergeProfile,
|
|
455
|
+
connectedAccount: [connectedAccount],
|
|
456
|
+
action: 'connectAccount',
|
|
457
|
+
},
|
|
458
|
+
],
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
|
|
372
462
|
if (!oauthUser) {
|
|
373
463
|
oauthUser = {
|
|
374
464
|
did: userWallet.address,
|
|
@@ -390,12 +480,15 @@ async function bind(req, node, options) {
|
|
|
390
480
|
|
|
391
481
|
module.exports = {
|
|
392
482
|
init(server, node, options) {
|
|
393
|
-
|
|
483
|
+
async function configsFn(req, res) {
|
|
394
484
|
const blocklet = await req.getBlocklet();
|
|
395
485
|
const oauthConfig = blocklet?.settings?.oauth || {};
|
|
396
486
|
res.send(oauthConfig);
|
|
397
|
-
}
|
|
398
|
-
server.get(`${prefix}/
|
|
487
|
+
}
|
|
488
|
+
server.get(`${prefix}/configs`, configsFn);
|
|
489
|
+
server.get(`${prefixApi}/configs`, configsFn);
|
|
490
|
+
|
|
491
|
+
async function passportsFn(req, res) {
|
|
399
492
|
if (!req.user) {
|
|
400
493
|
res.status(401).send('Unauthorized');
|
|
401
494
|
}
|
|
@@ -457,9 +550,11 @@ module.exports = {
|
|
|
457
550
|
};
|
|
458
551
|
});
|
|
459
552
|
res.send(passportTypes);
|
|
460
|
-
}
|
|
553
|
+
}
|
|
554
|
+
server.get(`${prefix}/passports`, passportsFn);
|
|
555
|
+
server.get(`${prefixApi}/passports`, passportsFn);
|
|
461
556
|
|
|
462
|
-
|
|
557
|
+
async function bindFn(req, res) {
|
|
463
558
|
try {
|
|
464
559
|
await bind(req, node, options);
|
|
465
560
|
res.status(200).json({});
|
|
@@ -471,9 +566,12 @@ module.exports = {
|
|
|
471
566
|
}
|
|
472
567
|
throw err;
|
|
473
568
|
}
|
|
474
|
-
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
server.post(`${prefix}/bind`, bindFn);
|
|
572
|
+
server.post(`${prefixApi}/bind`, bindFn);
|
|
475
573
|
|
|
476
|
-
|
|
574
|
+
async function switchFn(req, res) {
|
|
477
575
|
const { did: userDid, provider } = req.user;
|
|
478
576
|
const { passportId } = req.body;
|
|
479
577
|
const blocklet = await req.getBlocklet();
|
|
@@ -506,14 +604,17 @@ module.exports = {
|
|
|
506
604
|
}
|
|
507
605
|
|
|
508
606
|
res.status(200).json({ sessionToken, refreshToken });
|
|
509
|
-
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
server.post(`${prefix}/switch`, switchFn);
|
|
610
|
+
server.post(`${prefixApi}/switch`, switchFn);
|
|
510
611
|
|
|
511
612
|
/**
|
|
512
613
|
* oauth 方式登录
|
|
513
614
|
* 1. 普通配置下,登录/注册是同样的流程,登录过程中会自动注册账号
|
|
514
615
|
* 2. 仅邀请可登录模式下,只允许登录,不允许注册
|
|
515
616
|
*/
|
|
516
|
-
|
|
617
|
+
async function loginFn(req, res) {
|
|
517
618
|
const { action = 'login' } = req.body;
|
|
518
619
|
const actionMap = {
|
|
519
620
|
login,
|
|
@@ -530,6 +631,8 @@ module.exports = {
|
|
|
530
631
|
}
|
|
531
632
|
throw err;
|
|
532
633
|
}
|
|
533
|
-
}
|
|
634
|
+
}
|
|
635
|
+
server.post(`${prefix}/login`, loginFn);
|
|
636
|
+
server.post(`${prefixApi}/login`, loginFn);
|
|
534
637
|
},
|
|
535
638
|
};
|
package/api/routes/user.js
CHANGED
|
@@ -27,6 +27,7 @@ const validateUser = (user) => {
|
|
|
27
27
|
const PREFIX = WELLKNOWN_SERVICE_PATH_PREFIX;
|
|
28
28
|
|
|
29
29
|
const prefix = `${PREFIX}/user`;
|
|
30
|
+
const prefixApi = `${PREFIX}/api/user`;
|
|
30
31
|
const translations = {
|
|
31
32
|
zh: {
|
|
32
33
|
needInviteToLogin: '你需要被邀请才可以登录此应用',
|
|
@@ -148,6 +149,7 @@ async function loginWallet(
|
|
|
148
149
|
if (!validateUser(loginParams.user) || !validateUser(loginParams.user.connectedAccount)) {
|
|
149
150
|
throw new ApiError(400, t('userInfoError', locale));
|
|
150
151
|
}
|
|
152
|
+
// TODO: @zhanghan 暂不支持统一登录模式登录
|
|
151
153
|
const doc = await node.loginUser(loginParams);
|
|
152
154
|
|
|
153
155
|
// NOTICE: 使用 provider: wallet 登录的账号,其账号是由 wallet 产生的,所以不需要到链上 declare 了
|
|
@@ -209,6 +211,7 @@ async function loginOAuth(
|
|
|
209
211
|
if (!validateUser(loginParams.user) || !validateUser(loginParams.user.connectedAccount)) {
|
|
210
212
|
throw new ApiError(400, t('userInfoError', locale));
|
|
211
213
|
}
|
|
214
|
+
// TODO: @zhanghan 暂不支持统一登录模式登录
|
|
212
215
|
const doc = await node.loginUser(loginParams);
|
|
213
216
|
return doc;
|
|
214
217
|
}
|
|
@@ -279,7 +282,7 @@ async function login(req, node, options) {
|
|
|
279
282
|
|
|
280
283
|
module.exports = {
|
|
281
284
|
init(server, node, options) {
|
|
282
|
-
|
|
285
|
+
async function loginFn(req, res) {
|
|
283
286
|
try {
|
|
284
287
|
const data = await login(req, node, options);
|
|
285
288
|
res.status(200).json(data);
|
|
@@ -291,6 +294,8 @@ module.exports = {
|
|
|
291
294
|
}
|
|
292
295
|
throw err;
|
|
293
296
|
}
|
|
294
|
-
}
|
|
297
|
+
}
|
|
298
|
+
server.post(`${prefix}/login`, verifySig, loginFn);
|
|
299
|
+
server.post(`${prefixApi}/login`, verifySig, loginFn);
|
|
295
300
|
},
|
|
296
301
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
|
|
2
2
|
const { switchPassport } = require('../../../libs/connect/session');
|
|
3
3
|
|
|
4
4
|
const { onConnect, onApprove } = switchPassport;
|
|
@@ -7,7 +7,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
7
7
|
return {
|
|
8
8
|
action: 'switch-passport',
|
|
9
9
|
onConnect: ({ userDid, baseUrl, extraParams: { locale, connectedDid }, req, request }) => {
|
|
10
|
-
const
|
|
10
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
11
11
|
return onConnect({
|
|
12
12
|
node,
|
|
13
13
|
request: req,
|
|
@@ -15,12 +15,12 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
15
15
|
userDid,
|
|
16
16
|
previousUserDid: connectedDid,
|
|
17
17
|
baseUrl,
|
|
18
|
-
|
|
18
|
+
sourceAppPid,
|
|
19
19
|
});
|
|
20
20
|
},
|
|
21
21
|
|
|
22
22
|
onAuth: async ({ claims, challenge, userDid, updateSession, extraParams, req, request }) => {
|
|
23
|
-
const
|
|
23
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
24
24
|
const { sessionToken, refreshToken } = await onApprove({
|
|
25
25
|
node,
|
|
26
26
|
request: req,
|
|
@@ -29,7 +29,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
29
29
|
verifiableCredential: claims.find((x) => x.type === 'verifiableCredential'),
|
|
30
30
|
userDid,
|
|
31
31
|
createSessionToken,
|
|
32
|
-
|
|
32
|
+
sourceAppPid,
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
await updateSession({ sessionToken, refreshToken }, true);
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
2
1
|
const { getBlockletAppIdList } = require('@blocklet/meta/lib/util');
|
|
3
2
|
const pick = require('lodash/pick');
|
|
4
3
|
const logger = require('@abtnode/logger')(require('../../package.json').name);
|
|
@@ -32,9 +31,9 @@ async function getFederatedTrustedIssuers(blocklet) {
|
|
|
32
31
|
return [...new Set(issuers.filter(Boolean))];
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
async function getTrustedIssuers(blocklet, {
|
|
34
|
+
async function getTrustedIssuers(blocklet, { sourceAppPid } = {}) {
|
|
36
35
|
let federatedTrustedIssuers = [];
|
|
37
|
-
if (
|
|
36
|
+
if (sourceAppPid) {
|
|
38
37
|
federatedTrustedIssuers = await getFederatedTrustedIssuers(blocklet);
|
|
39
38
|
}
|
|
40
39
|
|
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"main.css": "/.well-known/service/static/static/css/main.7ea79dc8.css",
|
|
4
|
-
"main.js": "/.well-known/service/static/static/js/main.
|
|
5
|
-
"static/js/4716.
|
|
6
|
-
"static/js/6856.
|
|
7
|
-
"static/js/1660.
|
|
8
|
-
"static/js/9899.
|
|
9
|
-
"static/js/6737.
|
|
10
|
-
"static/js/1760.
|
|
11
|
-
"static/js/9620.
|
|
12
|
-
"static/js/1480.
|
|
13
|
-
"static/js/6186.
|
|
4
|
+
"main.js": "/.well-known/service/static/static/js/main.85d66eb2.js",
|
|
5
|
+
"static/js/4716.17a45b6a.chunk.js": "/.well-known/service/static/static/js/4716.17a45b6a.chunk.js",
|
|
6
|
+
"static/js/6856.9aaf692c.chunk.js": "/.well-known/service/static/static/js/6856.9aaf692c.chunk.js",
|
|
7
|
+
"static/js/1660.9fb17942.chunk.js": "/.well-known/service/static/static/js/1660.9fb17942.chunk.js",
|
|
8
|
+
"static/js/9899.92626f0a.chunk.js": "/.well-known/service/static/static/js/9899.92626f0a.chunk.js",
|
|
9
|
+
"static/js/6737.7fe9f13a.chunk.js": "/.well-known/service/static/static/js/6737.7fe9f13a.chunk.js",
|
|
10
|
+
"static/js/1760.71e0c151.chunk.js": "/.well-known/service/static/static/js/1760.71e0c151.chunk.js",
|
|
11
|
+
"static/js/9620.db1568ef.chunk.js": "/.well-known/service/static/static/js/9620.db1568ef.chunk.js",
|
|
12
|
+
"static/js/1480.36129849.chunk.js": "/.well-known/service/static/static/js/1480.36129849.chunk.js",
|
|
13
|
+
"static/js/6186.6462ea21.chunk.js": "/.well-known/service/static/static/js/6186.6462ea21.chunk.js",
|
|
14
14
|
"static/js/4682.8e18351a.chunk.js": "/.well-known/service/static/static/js/4682.8e18351a.chunk.js",
|
|
15
15
|
"static/js/6711.9a173439.chunk.js": "/.well-known/service/static/static/js/6711.9a173439.chunk.js",
|
|
16
16
|
"static/js/8437.994560bd.chunk.js": "/.well-known/service/static/static/js/8437.994560bd.chunk.js",
|
|
17
17
|
"static/js/6378.29466d9e.chunk.js": "/.well-known/service/static/static/js/6378.29466d9e.chunk.js",
|
|
18
18
|
"static/js/5434.523d071d.chunk.js": "/.well-known/service/static/static/js/5434.523d071d.chunk.js",
|
|
19
|
-
"static/js/9409.
|
|
19
|
+
"static/js/9409.fe4a0af0.chunk.js": "/.well-known/service/static/static/js/9409.fe4a0af0.chunk.js",
|
|
20
20
|
"static/js/4420.55971847.chunk.js": "/.well-known/service/static/static/js/4420.55971847.chunk.js",
|
|
21
|
-
"static/js/5628.
|
|
21
|
+
"static/js/5628.aa14b1a7.chunk.js": "/.well-known/service/static/static/js/5628.aa14b1a7.chunk.js",
|
|
22
22
|
"static/js/941.6a4ed4dd.chunk.js": "/.well-known/service/static/static/js/941.6a4ed4dd.chunk.js",
|
|
23
23
|
"static/js/6576.f78daf32.chunk.js": "/.well-known/service/static/static/js/6576.f78daf32.chunk.js",
|
|
24
|
-
"static/js/5176.
|
|
24
|
+
"static/js/5176.53f7f419.chunk.js": "/.well-known/service/static/static/js/5176.53f7f419.chunk.js",
|
|
25
25
|
"static/js/9102.828066ce.chunk.js": "/.well-known/service/static/static/js/9102.828066ce.chunk.js",
|
|
26
26
|
"static/js/3688.9bb1c7a8.chunk.js": "/.well-known/service/static/static/js/3688.9bb1c7a8.chunk.js",
|
|
27
|
-
"static/js/2653.
|
|
27
|
+
"static/js/2653.6f37e8a0.chunk.js": "/.well-known/service/static/static/js/2653.6f37e8a0.chunk.js",
|
|
28
28
|
"static/js/3593.c1eddcd6.chunk.js": "/.well-known/service/static/static/js/3593.c1eddcd6.chunk.js",
|
|
29
29
|
"static/css/4802.bf353f58.chunk.css": "/.well-known/service/static/static/css/4802.bf353f58.chunk.css",
|
|
30
|
-
"static/js/4802.
|
|
31
|
-
"static/js/6771.
|
|
30
|
+
"static/js/4802.b7fa8e82.chunk.js": "/.well-known/service/static/static/js/4802.b7fa8e82.chunk.js",
|
|
31
|
+
"static/js/6771.1e778542.chunk.js": "/.well-known/service/static/static/js/6771.1e778542.chunk.js",
|
|
32
32
|
"static/css/5982.ac464505.chunk.css": "/.well-known/service/static/static/css/5982.ac464505.chunk.css",
|
|
33
33
|
"static/js/5982.89bdb419.chunk.js": "/.well-known/service/static/static/js/5982.89bdb419.chunk.js",
|
|
34
|
-
"static/js/4023.
|
|
35
|
-
"static/js/6452.
|
|
36
|
-
"static/js/1565.
|
|
34
|
+
"static/js/4023.4be0c818.chunk.js": "/.well-known/service/static/static/js/4023.4be0c818.chunk.js",
|
|
35
|
+
"static/js/6452.4226209b.chunk.js": "/.well-known/service/static/static/js/6452.4226209b.chunk.js",
|
|
36
|
+
"static/js/1565.ad002b88.chunk.js": "/.well-known/service/static/static/js/1565.ad002b88.chunk.js",
|
|
37
37
|
"static/js/2393.c5bbedfd.chunk.js": "/.well-known/service/static/static/js/2393.c5bbedfd.chunk.js",
|
|
38
|
-
"static/js/5683.
|
|
39
|
-
"static/js/
|
|
40
|
-
"static/js/7006.
|
|
38
|
+
"static/js/5683.7e5d47f1.chunk.js": "/.well-known/service/static/static/js/5683.7e5d47f1.chunk.js",
|
|
39
|
+
"static/js/5662.522d3713.chunk.js": "/.well-known/service/static/static/js/5662.522d3713.chunk.js",
|
|
40
|
+
"static/js/7006.b72aff66.chunk.js": "/.well-known/service/static/static/js/7006.b72aff66.chunk.js",
|
|
41
41
|
"static/js/5960.adcd2848.chunk.js": "/.well-known/service/static/static/js/5960.adcd2848.chunk.js",
|
|
42
42
|
"static/js/2631.54f86f84.chunk.js": "/.well-known/service/static/static/js/2631.54f86f84.chunk.js",
|
|
43
43
|
"static/js/4355.68364e13.chunk.js": "/.well-known/service/static/static/js/4355.68364e13.chunk.js",
|
|
@@ -45,22 +45,22 @@
|
|
|
45
45
|
"static/js/3595.cbf763c8.chunk.js": "/.well-known/service/static/static/js/3595.cbf763c8.chunk.js",
|
|
46
46
|
"static/js/4164.5adbbbba.chunk.js": "/.well-known/service/static/static/js/4164.5adbbbba.chunk.js",
|
|
47
47
|
"static/js/4319.8d9e189e.chunk.js": "/.well-known/service/static/static/js/4319.8d9e189e.chunk.js",
|
|
48
|
-
"static/js/6629.
|
|
48
|
+
"static/js/6629.785fe237.chunk.js": "/.well-known/service/static/static/js/6629.785fe237.chunk.js",
|
|
49
49
|
"static/js/1013.48b6d77d.chunk.js": "/.well-known/service/static/static/js/1013.48b6d77d.chunk.js",
|
|
50
50
|
"static/js/4042.3c8e0025.chunk.js": "/.well-known/service/static/static/js/4042.3c8e0025.chunk.js",
|
|
51
51
|
"static/js/5465.e0965b1d.chunk.js": "/.well-known/service/static/static/js/5465.e0965b1d.chunk.js",
|
|
52
52
|
"static/js/4764.51208c0d.chunk.js": "/.well-known/service/static/static/js/4764.51208c0d.chunk.js",
|
|
53
|
-
"static/js/2686.
|
|
53
|
+
"static/js/2686.7ae70bfd.chunk.js": "/.well-known/service/static/static/js/2686.7ae70bfd.chunk.js",
|
|
54
54
|
"static/js/7606.25231f8c.chunk.js": "/.well-known/service/static/static/js/7606.25231f8c.chunk.js",
|
|
55
55
|
"static/js/476.1f6135d6.chunk.js": "/.well-known/service/static/static/js/476.1f6135d6.chunk.js",
|
|
56
56
|
"static/js/8143.5bd71f08.chunk.js": "/.well-known/service/static/static/js/8143.5bd71f08.chunk.js",
|
|
57
57
|
"static/js/6498.bd96fa39.chunk.js": "/.well-known/service/static/static/js/6498.bd96fa39.chunk.js",
|
|
58
58
|
"static/css/4706.7a92e9f9.chunk.css": "/.well-known/service/static/static/css/4706.7a92e9f9.chunk.css",
|
|
59
59
|
"static/js/4706.df5b600d.chunk.js": "/.well-known/service/static/static/js/4706.df5b600d.chunk.js",
|
|
60
|
-
"static/js/
|
|
60
|
+
"static/js/50.cbaa5a4e.chunk.js": "/.well-known/service/static/static/js/50.cbaa5a4e.chunk.js",
|
|
61
61
|
"static/js/6700.5dfd9c70.chunk.js": "/.well-known/service/static/static/js/6700.5dfd9c70.chunk.js",
|
|
62
|
-
"static/js/6640.
|
|
63
|
-
"static/js/7465.
|
|
62
|
+
"static/js/6640.e453c619.chunk.js": "/.well-known/service/static/static/js/6640.e453c619.chunk.js",
|
|
63
|
+
"static/js/7465.999f0039.chunk.js": "/.well-known/service/static/static/js/7465.999f0039.chunk.js",
|
|
64
64
|
"static/js/8604.ad77a749.chunk.js": "/.well-known/service/static/static/js/8604.ad77a749.chunk.js",
|
|
65
65
|
"static/js/6380.2b96be29.chunk.js": "/.well-known/service/static/static/js/6380.2b96be29.chunk.js",
|
|
66
66
|
"static/js/6465.e704f56b.chunk.js": "/.well-known/service/static/static/js/6465.e704f56b.chunk.js",
|
|
@@ -95,43 +95,43 @@
|
|
|
95
95
|
"index.html": "/.well-known/service/static/index.html",
|
|
96
96
|
"static/media/space-connected.svg": "/.well-known/service/static/static/media/space-connected.9a4e18fd2bc7d065191b0d241a131c28.svg",
|
|
97
97
|
"main.7ea79dc8.css.map": "/.well-known/service/static/static/css/main.7ea79dc8.css.map",
|
|
98
|
-
"main.
|
|
99
|
-
"4716.
|
|
100
|
-
"6856.
|
|
101
|
-
"1660.
|
|
102
|
-
"9899.
|
|
103
|
-
"6737.
|
|
104
|
-
"1760.
|
|
105
|
-
"9620.
|
|
106
|
-
"1480.
|
|
107
|
-
"6186.
|
|
98
|
+
"main.85d66eb2.js.map": "/.well-known/service/static/static/js/main.85d66eb2.js.map",
|
|
99
|
+
"4716.17a45b6a.chunk.js.map": "/.well-known/service/static/static/js/4716.17a45b6a.chunk.js.map",
|
|
100
|
+
"6856.9aaf692c.chunk.js.map": "/.well-known/service/static/static/js/6856.9aaf692c.chunk.js.map",
|
|
101
|
+
"1660.9fb17942.chunk.js.map": "/.well-known/service/static/static/js/1660.9fb17942.chunk.js.map",
|
|
102
|
+
"9899.92626f0a.chunk.js.map": "/.well-known/service/static/static/js/9899.92626f0a.chunk.js.map",
|
|
103
|
+
"6737.7fe9f13a.chunk.js.map": "/.well-known/service/static/static/js/6737.7fe9f13a.chunk.js.map",
|
|
104
|
+
"1760.71e0c151.chunk.js.map": "/.well-known/service/static/static/js/1760.71e0c151.chunk.js.map",
|
|
105
|
+
"9620.db1568ef.chunk.js.map": "/.well-known/service/static/static/js/9620.db1568ef.chunk.js.map",
|
|
106
|
+
"1480.36129849.chunk.js.map": "/.well-known/service/static/static/js/1480.36129849.chunk.js.map",
|
|
107
|
+
"6186.6462ea21.chunk.js.map": "/.well-known/service/static/static/js/6186.6462ea21.chunk.js.map",
|
|
108
108
|
"4682.8e18351a.chunk.js.map": "/.well-known/service/static/static/js/4682.8e18351a.chunk.js.map",
|
|
109
109
|
"6711.9a173439.chunk.js.map": "/.well-known/service/static/static/js/6711.9a173439.chunk.js.map",
|
|
110
110
|
"8437.994560bd.chunk.js.map": "/.well-known/service/static/static/js/8437.994560bd.chunk.js.map",
|
|
111
111
|
"6378.29466d9e.chunk.js.map": "/.well-known/service/static/static/js/6378.29466d9e.chunk.js.map",
|
|
112
112
|
"5434.523d071d.chunk.js.map": "/.well-known/service/static/static/js/5434.523d071d.chunk.js.map",
|
|
113
|
-
"9409.
|
|
113
|
+
"9409.fe4a0af0.chunk.js.map": "/.well-known/service/static/static/js/9409.fe4a0af0.chunk.js.map",
|
|
114
114
|
"4420.55971847.chunk.js.map": "/.well-known/service/static/static/js/4420.55971847.chunk.js.map",
|
|
115
|
-
"5628.
|
|
115
|
+
"5628.aa14b1a7.chunk.js.map": "/.well-known/service/static/static/js/5628.aa14b1a7.chunk.js.map",
|
|
116
116
|
"941.6a4ed4dd.chunk.js.map": "/.well-known/service/static/static/js/941.6a4ed4dd.chunk.js.map",
|
|
117
117
|
"6576.f78daf32.chunk.js.map": "/.well-known/service/static/static/js/6576.f78daf32.chunk.js.map",
|
|
118
|
-
"5176.
|
|
118
|
+
"5176.53f7f419.chunk.js.map": "/.well-known/service/static/static/js/5176.53f7f419.chunk.js.map",
|
|
119
119
|
"9102.828066ce.chunk.js.map": "/.well-known/service/static/static/js/9102.828066ce.chunk.js.map",
|
|
120
120
|
"3688.9bb1c7a8.chunk.js.map": "/.well-known/service/static/static/js/3688.9bb1c7a8.chunk.js.map",
|
|
121
|
-
"2653.
|
|
121
|
+
"2653.6f37e8a0.chunk.js.map": "/.well-known/service/static/static/js/2653.6f37e8a0.chunk.js.map",
|
|
122
122
|
"3593.c1eddcd6.chunk.js.map": "/.well-known/service/static/static/js/3593.c1eddcd6.chunk.js.map",
|
|
123
123
|
"4802.bf353f58.chunk.css.map": "/.well-known/service/static/static/css/4802.bf353f58.chunk.css.map",
|
|
124
|
-
"4802.
|
|
125
|
-
"6771.
|
|
124
|
+
"4802.b7fa8e82.chunk.js.map": "/.well-known/service/static/static/js/4802.b7fa8e82.chunk.js.map",
|
|
125
|
+
"6771.1e778542.chunk.js.map": "/.well-known/service/static/static/js/6771.1e778542.chunk.js.map",
|
|
126
126
|
"5982.ac464505.chunk.css.map": "/.well-known/service/static/static/css/5982.ac464505.chunk.css.map",
|
|
127
127
|
"5982.89bdb419.chunk.js.map": "/.well-known/service/static/static/js/5982.89bdb419.chunk.js.map",
|
|
128
|
-
"4023.
|
|
129
|
-
"6452.
|
|
130
|
-
"1565.
|
|
128
|
+
"4023.4be0c818.chunk.js.map": "/.well-known/service/static/static/js/4023.4be0c818.chunk.js.map",
|
|
129
|
+
"6452.4226209b.chunk.js.map": "/.well-known/service/static/static/js/6452.4226209b.chunk.js.map",
|
|
130
|
+
"1565.ad002b88.chunk.js.map": "/.well-known/service/static/static/js/1565.ad002b88.chunk.js.map",
|
|
131
131
|
"2393.c5bbedfd.chunk.js.map": "/.well-known/service/static/static/js/2393.c5bbedfd.chunk.js.map",
|
|
132
|
-
"5683.
|
|
133
|
-
"
|
|
134
|
-
"7006.
|
|
132
|
+
"5683.7e5d47f1.chunk.js.map": "/.well-known/service/static/static/js/5683.7e5d47f1.chunk.js.map",
|
|
133
|
+
"5662.522d3713.chunk.js.map": "/.well-known/service/static/static/js/5662.522d3713.chunk.js.map",
|
|
134
|
+
"7006.b72aff66.chunk.js.map": "/.well-known/service/static/static/js/7006.b72aff66.chunk.js.map",
|
|
135
135
|
"5960.adcd2848.chunk.js.map": "/.well-known/service/static/static/js/5960.adcd2848.chunk.js.map",
|
|
136
136
|
"2631.54f86f84.chunk.js.map": "/.well-known/service/static/static/js/2631.54f86f84.chunk.js.map",
|
|
137
137
|
"4355.68364e13.chunk.js.map": "/.well-known/service/static/static/js/4355.68364e13.chunk.js.map",
|
|
@@ -139,22 +139,22 @@
|
|
|
139
139
|
"3595.cbf763c8.chunk.js.map": "/.well-known/service/static/static/js/3595.cbf763c8.chunk.js.map",
|
|
140
140
|
"4164.5adbbbba.chunk.js.map": "/.well-known/service/static/static/js/4164.5adbbbba.chunk.js.map",
|
|
141
141
|
"4319.8d9e189e.chunk.js.map": "/.well-known/service/static/static/js/4319.8d9e189e.chunk.js.map",
|
|
142
|
-
"6629.
|
|
142
|
+
"6629.785fe237.chunk.js.map": "/.well-known/service/static/static/js/6629.785fe237.chunk.js.map",
|
|
143
143
|
"1013.48b6d77d.chunk.js.map": "/.well-known/service/static/static/js/1013.48b6d77d.chunk.js.map",
|
|
144
144
|
"4042.3c8e0025.chunk.js.map": "/.well-known/service/static/static/js/4042.3c8e0025.chunk.js.map",
|
|
145
145
|
"5465.e0965b1d.chunk.js.map": "/.well-known/service/static/static/js/5465.e0965b1d.chunk.js.map",
|
|
146
146
|
"4764.51208c0d.chunk.js.map": "/.well-known/service/static/static/js/4764.51208c0d.chunk.js.map",
|
|
147
|
-
"2686.
|
|
147
|
+
"2686.7ae70bfd.chunk.js.map": "/.well-known/service/static/static/js/2686.7ae70bfd.chunk.js.map",
|
|
148
148
|
"7606.25231f8c.chunk.js.map": "/.well-known/service/static/static/js/7606.25231f8c.chunk.js.map",
|
|
149
149
|
"476.1f6135d6.chunk.js.map": "/.well-known/service/static/static/js/476.1f6135d6.chunk.js.map",
|
|
150
150
|
"8143.5bd71f08.chunk.js.map": "/.well-known/service/static/static/js/8143.5bd71f08.chunk.js.map",
|
|
151
151
|
"6498.bd96fa39.chunk.js.map": "/.well-known/service/static/static/js/6498.bd96fa39.chunk.js.map",
|
|
152
152
|
"4706.7a92e9f9.chunk.css.map": "/.well-known/service/static/static/css/4706.7a92e9f9.chunk.css.map",
|
|
153
153
|
"4706.df5b600d.chunk.js.map": "/.well-known/service/static/static/js/4706.df5b600d.chunk.js.map",
|
|
154
|
-
"
|
|
154
|
+
"50.cbaa5a4e.chunk.js.map": "/.well-known/service/static/static/js/50.cbaa5a4e.chunk.js.map",
|
|
155
155
|
"6700.5dfd9c70.chunk.js.map": "/.well-known/service/static/static/js/6700.5dfd9c70.chunk.js.map",
|
|
156
|
-
"6640.
|
|
157
|
-
"7465.
|
|
156
|
+
"6640.e453c619.chunk.js.map": "/.well-known/service/static/static/js/6640.e453c619.chunk.js.map",
|
|
157
|
+
"7465.999f0039.chunk.js.map": "/.well-known/service/static/static/js/7465.999f0039.chunk.js.map",
|
|
158
158
|
"8604.ad77a749.chunk.js.map": "/.well-known/service/static/static/js/8604.ad77a749.chunk.js.map",
|
|
159
159
|
"6380.2b96be29.chunk.js.map": "/.well-known/service/static/static/js/6380.2b96be29.chunk.js.map",
|
|
160
160
|
"6465.e704f56b.chunk.js.map": "/.well-known/service/static/static/js/6465.e704f56b.chunk.js.map",
|
|
@@ -168,6 +168,6 @@
|
|
|
168
168
|
},
|
|
169
169
|
"entrypoints": [
|
|
170
170
|
"static/css/main.7ea79dc8.css",
|
|
171
|
-
"static/js/main.
|
|
171
|
+
"static/js/main.85d66eb2.js"
|
|
172
172
|
]
|
|
173
173
|
}
|