@abtnode/blocklet-services 1.16.6-beta-56be9f01 → 1.16.6-beta-e2082fec
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/connect/session.js +31 -14
- package/api/libs/jwt.js +3 -8
- package/api/routes/oauth.js +52 -18
- package/api/services/auth/connect/invite.js +2 -1
- package/api/services/auth/connect/receive-transfer-app-owner.js +2 -1
- package/api/services/auth/connect/setup.js +2 -1
- package/api/services/auth/index.js +2 -1
- package/api/services/auth/session.js +2 -1
- package/api/util/attach-shared-utils.js +1 -1
- package/build/asset-manifest.json +29 -29
- package/build/index.html +1 -1
- package/build/static/css/{293.ea9ee64d.chunk.css → 933.be984e1d.chunk.css} +1 -1
- package/build/static/js/{21.e7883f61.chunk.js → 21.4b495d85.chunk.js} +3 -3
- package/build/static/js/343.3bc8fb37.chunk.js +2 -0
- package/build/static/js/{437.d815f0c0.chunk.js → 437.075e8453.chunk.js} +2 -2
- package/build/static/js/{460.9225f4c4.chunk.js → 460.4763afe0.chunk.js} +2 -2
- package/build/static/js/{547.614f46b8.chunk.js → 547.03d5d719.chunk.js} +2 -2
- package/build/static/js/{573.2992dbf5.chunk.js → 573.b071429e.chunk.js} +2 -2
- package/build/static/js/{682.c64ae291.chunk.js → 682.a8bf723a.chunk.js} +2 -2
- package/build/static/js/{711.6c22b7c7.chunk.js → 711.56427a24.chunk.js} +2 -2
- package/build/static/js/716.0d2a2d32.chunk.js +2 -0
- package/build/static/js/{737.73437907.chunk.js → 737.15a41e1c.chunk.js} +2 -2
- package/build/static/js/868.ac8df3a0.chunk.js +2 -0
- package/build/static/js/933.5a8322ac.chunk.js +3 -0
- package/build/static/js/main.ea4f5b3d.js +3 -0
- package/build/static/js/{main.68e1dab9.js.LICENSE.txt → main.ea4f5b3d.js.LICENSE.txt} +1 -1
- package/package.json +34 -34
- package/build/static/js/293.636e2bb7.chunk.js +0 -3
- package/build/static/js/343.1aba65c1.chunk.js +0 -2
- package/build/static/js/716.bcea7c98.chunk.js +0 -2
- package/build/static/js/868.9c03fa86.chunk.js +0 -2
- package/build/static/js/main.68e1dab9.js +0 -3
- /package/build/static/js/{21.e7883f61.chunk.js.LICENSE.txt → 21.4b495d85.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{293.636e2bb7.chunk.js.LICENSE.txt → 933.5a8322ac.chunk.js.LICENSE.txt} +0 -0
|
@@ -204,7 +204,14 @@ module.exports = {
|
|
|
204
204
|
action,
|
|
205
205
|
}) => {
|
|
206
206
|
const blocklet = await request.getBlocklet();
|
|
207
|
-
const {
|
|
207
|
+
const {
|
|
208
|
+
wallet,
|
|
209
|
+
secret,
|
|
210
|
+
name,
|
|
211
|
+
passportColor,
|
|
212
|
+
did: teamDid,
|
|
213
|
+
wallet: blockletWallet,
|
|
214
|
+
} = await request.getBlockletInfo();
|
|
208
215
|
|
|
209
216
|
// Check user approved
|
|
210
217
|
const user = await node.getUser({
|
|
@@ -341,7 +348,7 @@ module.exports = {
|
|
|
341
348
|
await node.createAuditLog(
|
|
342
349
|
{
|
|
343
350
|
action,
|
|
344
|
-
args: { teamDid, userDid: realDid, passport: passportForLog },
|
|
351
|
+
args: { teamDid, userDid: realDid, passport: passportForLog, provider: 'wallet' },
|
|
345
352
|
context: formatContext(Object.assign(request, { user: doc })),
|
|
346
353
|
result: doc,
|
|
347
354
|
},
|
|
@@ -385,7 +392,7 @@ module.exports = {
|
|
|
385
392
|
}
|
|
386
393
|
|
|
387
394
|
// Generate new session token that client can save to localStorage
|
|
388
|
-
const sessionToken = await createSessionToken(realDid, { passport, role });
|
|
395
|
+
const sessionToken = await createSessionToken(realDid, { secret, passport, role });
|
|
389
396
|
logger.info(`${action}.success`, { userDid: realDid, role });
|
|
390
397
|
|
|
391
398
|
if (
|
|
@@ -561,7 +568,7 @@ module.exports = {
|
|
|
561
568
|
componentId,
|
|
562
569
|
}) => {
|
|
563
570
|
const blocklet = await request.getBlocklet();
|
|
564
|
-
const { name, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
|
|
571
|
+
const { name, did: teamDid, wallet: blockletWallet, secret } = await request.getBlockletInfo();
|
|
565
572
|
|
|
566
573
|
// Validate user
|
|
567
574
|
const user = await node.getUser({
|
|
@@ -631,7 +638,7 @@ module.exports = {
|
|
|
631
638
|
await node.createAuditLog(
|
|
632
639
|
{
|
|
633
640
|
action: 'switchPassport',
|
|
634
|
-
args: { teamDid, userDid, passport: passportForLog },
|
|
641
|
+
args: { teamDid, userDid, passport: passportForLog, provider: 'wallet' },
|
|
635
642
|
context: formatContext(Object.assign(request, { user })),
|
|
636
643
|
result: {},
|
|
637
644
|
},
|
|
@@ -639,7 +646,7 @@ module.exports = {
|
|
|
639
646
|
);
|
|
640
647
|
|
|
641
648
|
// Generate new session token that client can save to localStorage
|
|
642
|
-
const sessionToken = await createSessionToken(userDid, { passport, role });
|
|
649
|
+
const sessionToken = await createSessionToken(userDid, { secret, passport, role });
|
|
643
650
|
return sessionToken;
|
|
644
651
|
},
|
|
645
652
|
},
|
|
@@ -783,6 +790,14 @@ module.exports = {
|
|
|
783
790
|
});
|
|
784
791
|
const currentTime = new Date().toISOString();
|
|
785
792
|
|
|
793
|
+
const connectedAccount = {
|
|
794
|
+
provider: 'wallet',
|
|
795
|
+
did: userDid,
|
|
796
|
+
pk: userPk,
|
|
797
|
+
lastLoginAt: currentTime,
|
|
798
|
+
firstLoginAt: currentTime,
|
|
799
|
+
};
|
|
800
|
+
|
|
786
801
|
await node.updateUser({
|
|
787
802
|
teamDid,
|
|
788
803
|
user: mergeUserData(
|
|
@@ -796,13 +811,7 @@ module.exports = {
|
|
|
796
811
|
{
|
|
797
812
|
locale,
|
|
798
813
|
lastLoginIp: get(request, 'headers[x-real-ip]') || '',
|
|
799
|
-
connectedAccount
|
|
800
|
-
provider: 'wallet',
|
|
801
|
-
did: userDid,
|
|
802
|
-
pk: userPk,
|
|
803
|
-
lastLoginAt: currentTime,
|
|
804
|
-
firstLoginAt: currentTime,
|
|
805
|
-
},
|
|
814
|
+
connectedAccount,
|
|
806
815
|
}
|
|
807
816
|
),
|
|
808
817
|
});
|
|
@@ -836,7 +845,15 @@ module.exports = {
|
|
|
836
845
|
const oauthAccount = connectedAccounts.find((item) => item.provider === sourceProvider);
|
|
837
846
|
const userWallet = fromAppDid(oauthAccount.id, blockletWallet.secretKey, types.RoleType.ROLE_ACCOUNT);
|
|
838
847
|
await migrateAccount({ wallet: userWallet, blocklet, user: bindUser });
|
|
839
|
-
|
|
848
|
+
await node.createAuditLog(
|
|
849
|
+
{
|
|
850
|
+
action: 'connectAccount',
|
|
851
|
+
args: { teamDid, connectedAccount, provider: 'wallet', userDid: oauthUser.did },
|
|
852
|
+
context: formatContext(Object.assign(request, { user: oauthUser })),
|
|
853
|
+
result: bindUser,
|
|
854
|
+
},
|
|
855
|
+
node
|
|
856
|
+
);
|
|
840
857
|
|
|
841
858
|
return {
|
|
842
859
|
nextWorkflowData: {
|
package/api/libs/jwt.js
CHANGED
|
@@ -14,14 +14,9 @@ const getUser = async (node, teamDid, userDid) => {
|
|
|
14
14
|
|
|
15
15
|
// eslint-disable-next-line no-unused-vars
|
|
16
16
|
const initJwt = (node, options) => {
|
|
17
|
-
const
|
|
18
|
-
const ttl = options.sessionTtl || '1d';
|
|
17
|
+
const ttl = options.sessionTtl || '7d';
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
throw new Error('Auth service require a non-empty session secret to start');
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const createSessionToken = async (did, { role, passport }) =>
|
|
19
|
+
const createSessionToken = async (did, { role, secret, passport }) =>
|
|
25
20
|
createAuthToken({
|
|
26
21
|
did,
|
|
27
22
|
passport,
|
|
@@ -30,7 +25,7 @@ const initJwt = (node, options) => {
|
|
|
30
25
|
expiresIn: ttl,
|
|
31
26
|
});
|
|
32
27
|
|
|
33
|
-
const verifySessionToken = (token, teamDid) =>
|
|
28
|
+
const verifySessionToken = (token, secret, teamDid) =>
|
|
34
29
|
// eslint-disable-next-line implicit-arrow-linebreak
|
|
35
30
|
new Promise((resolve, reject) => {
|
|
36
31
|
jwt.verify(token, secret, async (err, decoded) => {
|
package/api/routes/oauth.js
CHANGED
|
@@ -13,6 +13,7 @@ const uniqBy = require('lodash/uniqBy');
|
|
|
13
13
|
const sortBy = require('lodash/sortBy');
|
|
14
14
|
const joinUrl = require('url-join');
|
|
15
15
|
const { getWalletDid } = require('@blocklet/meta/lib/did-utils');
|
|
16
|
+
const formatContext = require('@abtnode/util/lib/format-context');
|
|
16
17
|
|
|
17
18
|
const { AuthenticationClient } = require('../libs/auth/adapters/auth0');
|
|
18
19
|
const { getAvatarByEmail, transferPassport } = require('../libs/auth/utils');
|
|
@@ -64,7 +65,7 @@ async function login(req, node, options) {
|
|
|
64
65
|
}
|
|
65
66
|
const authClient = getAuthClient(blocklet, provider);
|
|
66
67
|
|
|
67
|
-
const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
|
|
68
|
+
const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
|
|
68
69
|
const config = await req.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
|
|
69
70
|
const nodeInfo = await req.getNodeInfo();
|
|
70
71
|
const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
|
|
@@ -86,15 +87,18 @@ async function login(req, node, options) {
|
|
|
86
87
|
blockletSk: blockletWallet.secretKey,
|
|
87
88
|
},
|
|
88
89
|
});
|
|
90
|
+
let doc;
|
|
91
|
+
let passportForLog;
|
|
89
92
|
// 当前账户已存在,更新账户信息
|
|
90
93
|
if (currentUser) {
|
|
91
94
|
const allPassports = currentUser.passports || [];
|
|
92
95
|
const validPassports = allPassports.filter((item) => item.status === PASSPORT_STATUS.VALID);
|
|
93
96
|
const lastUsedPassport = last(sortBy(validPassports, 'lastLoginAt'));
|
|
97
|
+
passportForLog = lastUsedPassport;
|
|
94
98
|
if (lastUsedPassport) {
|
|
95
99
|
passport = pick(lastUsedPassport, ['id', 'name', 'role']);
|
|
96
100
|
}
|
|
97
|
-
await node.loginUser({
|
|
101
|
+
doc = await node.loginUser({
|
|
98
102
|
teamDid,
|
|
99
103
|
user: {
|
|
100
104
|
did: currentUser.did,
|
|
@@ -116,7 +120,8 @@ async function login(req, node, options) {
|
|
|
116
120
|
if (invitedUserOnly) {
|
|
117
121
|
throw new Error(t('needInviteToLogin', locale));
|
|
118
122
|
}
|
|
119
|
-
|
|
123
|
+
passportForLog = { name: 'Guest', role: 'guest' };
|
|
124
|
+
doc = await node.loginUser({
|
|
120
125
|
teamDid,
|
|
121
126
|
user: {
|
|
122
127
|
connectedAccount: {
|
|
@@ -137,9 +142,20 @@ async function login(req, node, options) {
|
|
|
137
142
|
await declareAccount({ wallet: userWallet, moniker: oauthInfo.nickname, blocklet });
|
|
138
143
|
}
|
|
139
144
|
|
|
145
|
+
await node.createAuditLog(
|
|
146
|
+
{
|
|
147
|
+
action: 'login',
|
|
148
|
+
args: { teamDid, userDid: currentUser.did || userDid, passport: passportForLog, provider },
|
|
149
|
+
context: formatContext(Object.assign(req, { user: doc })),
|
|
150
|
+
result: doc,
|
|
151
|
+
},
|
|
152
|
+
node
|
|
153
|
+
);
|
|
154
|
+
|
|
140
155
|
const { createSessionToken } = initJwt(node, options);
|
|
141
156
|
|
|
142
157
|
const sessionToken = await createSessionToken(currentUser.did, {
|
|
158
|
+
secret,
|
|
143
159
|
passport,
|
|
144
160
|
role: passport.role,
|
|
145
161
|
});
|
|
@@ -151,7 +167,7 @@ async function invite(req, node, options) {
|
|
|
151
167
|
const blocklet = await req.getBlocklet();
|
|
152
168
|
const authClient = getAuthClient(blocklet, provider);
|
|
153
169
|
|
|
154
|
-
const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
|
|
170
|
+
const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
|
|
155
171
|
const nodeInfo = await req.getNodeInfo();
|
|
156
172
|
const oauthInfo = await authClient.getProfile(token);
|
|
157
173
|
const userWallet = fromAppDid(oauthInfo.sub, blockletWallet.secretKey, types.RoleType.ROLE_ACCOUNT);
|
|
@@ -250,7 +266,7 @@ async function invite(req, node, options) {
|
|
|
250
266
|
|
|
251
267
|
const { createSessionToken } = initJwt(node, options);
|
|
252
268
|
|
|
253
|
-
const sessionToken = await createSessionToken(userDid, { passport, role });
|
|
269
|
+
const sessionToken = await createSessionToken(userDid, { secret, passport, role });
|
|
254
270
|
return sessionToken;
|
|
255
271
|
}
|
|
256
272
|
|
|
@@ -302,6 +318,15 @@ async function bind(req, node, options) {
|
|
|
302
318
|
|
|
303
319
|
const currentTime = new Date().toISOString();
|
|
304
320
|
|
|
321
|
+
const connectedAccount = {
|
|
322
|
+
provider,
|
|
323
|
+
id: userInfo.sub,
|
|
324
|
+
did: userWallet.address,
|
|
325
|
+
pk: userWallet.publicKey,
|
|
326
|
+
firstLoginAt: currentTime,
|
|
327
|
+
lastLoginAt: currentTime,
|
|
328
|
+
};
|
|
329
|
+
|
|
305
330
|
await node.updateUser({
|
|
306
331
|
teamDid,
|
|
307
332
|
user: {
|
|
@@ -315,19 +340,13 @@ async function bind(req, node, options) {
|
|
|
315
340
|
},
|
|
316
341
|
{
|
|
317
342
|
locale,
|
|
318
|
-
connectedAccount
|
|
319
|
-
provider,
|
|
320
|
-
id: userInfo.sub,
|
|
321
|
-
did: userWallet.address,
|
|
322
|
-
pk: userWallet.publicKey,
|
|
323
|
-
firstLoginAt: currentTime,
|
|
324
|
-
lastLoginAt: currentTime,
|
|
325
|
-
},
|
|
343
|
+
connectedAccount,
|
|
326
344
|
}
|
|
327
345
|
),
|
|
328
346
|
},
|
|
329
347
|
});
|
|
330
348
|
if (oauthUser) {
|
|
349
|
+
// NOTICE: 这种情况已经不存在了,目前只有当 oauthUser 不存在时,才能进行 connect 操作(将来可能放开这个限制) 2023-05-03
|
|
331
350
|
// 将 oauth 绑定的 did 记录在 oauth 用户的表中
|
|
332
351
|
await node.updateUser({
|
|
333
352
|
teamDid,
|
|
@@ -349,6 +368,15 @@ async function bind(req, node, options) {
|
|
|
349
368
|
}
|
|
350
369
|
const nodeInfo = await req.getNodeInfo();
|
|
351
370
|
await transferPassport(oauthUser, bindUser, { req, node, teamDid, nodeInfo });
|
|
371
|
+
await node.createAuditLog(
|
|
372
|
+
{
|
|
373
|
+
action: 'connectAccount',
|
|
374
|
+
args: { teamDid, connectedAccount, provider, userDid: bindUser.did },
|
|
375
|
+
context: formatContext(Object.assign(req, { user: bindUser })),
|
|
376
|
+
result: bindUser,
|
|
377
|
+
},
|
|
378
|
+
node
|
|
379
|
+
);
|
|
352
380
|
}
|
|
353
381
|
|
|
354
382
|
module.exports = {
|
|
@@ -401,21 +429,28 @@ module.exports = {
|
|
|
401
429
|
|
|
402
430
|
server.post(`${prefix}/bind`, async (req, res) => {
|
|
403
431
|
await bind(req, node, options);
|
|
404
|
-
// TODO: @zhanghan 需要增加 auditLog
|
|
405
432
|
res.status(200).send('');
|
|
406
433
|
});
|
|
407
434
|
|
|
408
435
|
server.post(`${prefix}/switch`, async (req, res) => {
|
|
409
436
|
const userDid = req.user.did;
|
|
410
437
|
const { passportId } = req.body;
|
|
411
|
-
const { did: teamDid } = await req.getBlockletInfo();
|
|
438
|
+
const { did: teamDid, secret } = await req.getBlockletInfo();
|
|
412
439
|
// NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
|
|
413
440
|
const user = await node.getUser({ teamDid, user: { did: userDid } });
|
|
414
441
|
const { passports = [] } = user || {};
|
|
415
442
|
const passport = passports.find((item) => item.id === passportId);
|
|
443
|
+
await node.createAuditLog(
|
|
444
|
+
{
|
|
445
|
+
action: 'switchPassport',
|
|
446
|
+
args: { teamDid, userDid, passport, provider: user?.extraConfigs?.sourceProvider },
|
|
447
|
+
context: formatContext(Object.assign(req, { user })),
|
|
448
|
+
result: user,
|
|
449
|
+
},
|
|
450
|
+
node
|
|
451
|
+
);
|
|
416
452
|
const { createSessionToken } = initJwt(node, options);
|
|
417
|
-
const sessionToken = await createSessionToken(userDid, { passport, role: passport.role });
|
|
418
|
-
// TODO: @zhanghan 需要增加 auditLog
|
|
453
|
+
const sessionToken = await createSessionToken(userDid, { secret, passport, role: passport.role });
|
|
419
454
|
res.status(200).send(sessionToken);
|
|
420
455
|
});
|
|
421
456
|
|
|
@@ -432,7 +467,6 @@ module.exports = {
|
|
|
432
467
|
};
|
|
433
468
|
try {
|
|
434
469
|
const result = await actionMap[action](req, node, options);
|
|
435
|
-
// TODO: @zhanghan 需要增加 auditLog
|
|
436
470
|
res.send(result);
|
|
437
471
|
} catch (err) {
|
|
438
472
|
res.status(400).send(err.message);
|
|
@@ -53,6 +53,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
53
53
|
onAuth: async ({ claims, userDid, userPk, updateSession, extraParams, req, baseUrl }) => {
|
|
54
54
|
const { locale, inviteId } = extraParams;
|
|
55
55
|
const nodeInfo = await req.getNodeInfo();
|
|
56
|
+
const { secret } = await req.getBlockletInfo();
|
|
56
57
|
const teamDid = req.headers['x-blocklet-did'];
|
|
57
58
|
const statusEndpointBaseUrl = joinUrl(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX);
|
|
58
59
|
const endpoint = baseUrl;
|
|
@@ -72,7 +73,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
72
73
|
});
|
|
73
74
|
|
|
74
75
|
// Generate new session token that client can save to localStorage
|
|
75
|
-
const sessionToken = await createSessionToken(userDid, { passport, role });
|
|
76
|
+
const sessionToken = await createSessionToken(userDid, { secret, passport, role });
|
|
76
77
|
await updateSession({ sessionToken }, true);
|
|
77
78
|
await updateSession({ passportId: response.data.id });
|
|
78
79
|
logger.info('invite.success', { userDid });
|
|
@@ -202,6 +202,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
|
|
|
202
202
|
wallet: issuerWallet,
|
|
203
203
|
passportColor,
|
|
204
204
|
dataDir,
|
|
205
|
+
secret,
|
|
205
206
|
} = await getApplicationInfo({ node, teamDid: appPid });
|
|
206
207
|
|
|
207
208
|
const statusEndpointBaseUrl = baseUrl;
|
|
@@ -367,7 +368,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
|
|
|
367
368
|
logger.info('transfer ownership success', { userDid });
|
|
368
369
|
|
|
369
370
|
// Generate new session token that client can save to localStorage
|
|
370
|
-
const sessionToken = await createSessionToken(userDid, { passport: vc, role });
|
|
371
|
+
const sessionToken = await createSessionToken(userDid, { secret, passport: vc, role });
|
|
371
372
|
await updateSession({ sessionToken }, true);
|
|
372
373
|
await updateSession({ passportId: vc?.id });
|
|
373
374
|
logger.info('invite.success', { userDid });
|
|
@@ -48,6 +48,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
|
|
|
48
48
|
const blocklet = await req.getBlocklet();
|
|
49
49
|
const teamDid = blocklet.meta.did;
|
|
50
50
|
const user = await checkOwner({ node, userDid, blocklet });
|
|
51
|
+
const { secret } = await req.getBlockletInfo();
|
|
51
52
|
|
|
52
53
|
// ensure owner proof form previous workflow
|
|
53
54
|
if (!proof || !proof.claim || !proof.pk) {
|
|
@@ -109,7 +110,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
// Generate new session token that client can save to localStorage
|
|
112
|
-
const sessionToken = await createSessionToken(userDid, { role: 'owner' });
|
|
113
|
+
const sessionToken = await createSessionToken(userDid, { secret, role: 'owner' });
|
|
113
114
|
await updateSession({ sessionToken }, true);
|
|
114
115
|
logger.info('setup.connect.success', { userDid });
|
|
115
116
|
} catch (err) {
|
|
@@ -69,7 +69,8 @@ const init = ({ node, options }) => {
|
|
|
69
69
|
try {
|
|
70
70
|
if (token) {
|
|
71
71
|
const teamDid = req.getBlockletDid();
|
|
72
|
-
const
|
|
72
|
+
const { secret } = await req.getBlockletInfo();
|
|
73
|
+
const result = await verifySessionToken(token, secret, teamDid);
|
|
73
74
|
if (result && result.avatar && result.avatar.startsWith(USER_AVATAR_URL_PREFIX)) {
|
|
74
75
|
result.avatar = `${WELLKNOWN_SERVICE_PATH_PREFIX}${USER_AVATAR_PATH_PREFIX}/${
|
|
75
76
|
result.avatar.split('/').slice(-1)[0]
|
|
@@ -27,9 +27,10 @@ module.exports = {
|
|
|
27
27
|
let nextToken = '';
|
|
28
28
|
if (req.query[encKey]) {
|
|
29
29
|
try {
|
|
30
|
+
const { secret } = await req.getBlockletInfo();
|
|
30
31
|
const encryptionKey = decodeEncryptionKey(req.query[encKey]);
|
|
31
32
|
nextToken = JSON.stringify(
|
|
32
|
-
await createSessionToken(user.did, { passport: user.passport, role: user.role })
|
|
33
|
+
await createSessionToken(user.did, { secret, passport: user.passport, role: user.role })
|
|
33
34
|
);
|
|
34
35
|
nextToken = Buffer.from(SealedBox.seal(Buffer.from(nextToken), encryptionKey)).toString('base64');
|
|
35
36
|
} catch {
|
|
@@ -88,7 +88,7 @@ module.exports = ({ node, req, options }) => {
|
|
|
88
88
|
const did = req.getBlockletDid();
|
|
89
89
|
const context = req.getServiceContext();
|
|
90
90
|
|
|
91
|
-
return cache.getBlocklet({ did, context, node, force: useCache });
|
|
91
|
+
return cache.getBlocklet({ did, context, node, force: !useCache });
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
req.getNodeInfo = () => cache.getNodeInfo({ node });
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"main.css": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css",
|
|
4
|
-
"main.js": "/.blocklet/proxy/blocklet-service/static/js/main.
|
|
5
|
-
"static/js/716.
|
|
4
|
+
"main.js": "/.blocklet/proxy/blocklet-service/static/js/main.ea4f5b3d.js",
|
|
5
|
+
"static/js/716.0d2a2d32.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/716.0d2a2d32.chunk.js",
|
|
6
6
|
"static/js/359.c47779c2.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/359.c47779c2.chunk.js",
|
|
7
7
|
"static/js/255.279b1bca.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/255.279b1bca.chunk.js",
|
|
8
8
|
"static/js/371.f67a06b4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/371.f67a06b4.chunk.js",
|
|
9
|
-
"static/js/737.
|
|
10
|
-
"static/js/460.
|
|
11
|
-
"static/js/868.
|
|
12
|
-
"static/js/547.
|
|
13
|
-
"static/js/343.
|
|
14
|
-
"static/js/682.
|
|
15
|
-
"static/js/711.
|
|
16
|
-
"static/js/437.
|
|
9
|
+
"static/js/737.15a41e1c.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/737.15a41e1c.chunk.js",
|
|
10
|
+
"static/js/460.4763afe0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/460.4763afe0.chunk.js",
|
|
11
|
+
"static/js/868.ac8df3a0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/868.ac8df3a0.chunk.js",
|
|
12
|
+
"static/js/547.03d5d719.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/547.03d5d719.chunk.js",
|
|
13
|
+
"static/js/343.3bc8fb37.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/343.3bc8fb37.chunk.js",
|
|
14
|
+
"static/js/682.a8bf723a.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/682.a8bf723a.chunk.js",
|
|
15
|
+
"static/js/711.56427a24.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/711.56427a24.chunk.js",
|
|
16
|
+
"static/js/437.075e8453.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/437.075e8453.chunk.js",
|
|
17
17
|
"static/js/690.afb99ee7.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/690.afb99ee7.chunk.js",
|
|
18
18
|
"static/js/576.d7d4814e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/576.d7d4814e.chunk.js",
|
|
19
19
|
"static/js/42.c390a3f4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/42.c390a3f4.chunk.js",
|
|
20
|
-
"static/js/21.
|
|
20
|
+
"static/js/21.4b495d85.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/21.4b495d85.chunk.js",
|
|
21
21
|
"static/js/162.f681dc46.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/162.f681dc46.chunk.js",
|
|
22
22
|
"static/js/610.40349d57.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/610.40349d57.chunk.js",
|
|
23
|
-
"static/css/
|
|
24
|
-
"static/js/
|
|
23
|
+
"static/css/933.be984e1d.chunk.css": "/.blocklet/proxy/blocklet-service/static/css/933.be984e1d.chunk.css",
|
|
24
|
+
"static/js/933.5a8322ac.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/933.5a8322ac.chunk.js",
|
|
25
25
|
"static/js/199.3d76c24b.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/199.3d76c24b.chunk.js",
|
|
26
|
-
"static/js/573.
|
|
26
|
+
"static/js/573.b071429e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/573.b071429e.chunk.js",
|
|
27
27
|
"static/media/ubuntu-mono-all-400-normal.woff": "/.blocklet/proxy/blocklet-service/static/media/ubuntu-mono-all-400-normal.c879328bc62e9c68268f.woff",
|
|
28
28
|
"static/media/lato-all-400-normal.woff": "/.blocklet/proxy/blocklet-service/static/media/lato-all-400-normal.3dc1eff492ab1f598560.woff",
|
|
29
29
|
"static/media/iconify.cjs": "/.blocklet/proxy/blocklet-service/static/media/iconify.26e4076719101e021ba0.cjs",
|
|
@@ -46,32 +46,32 @@
|
|
|
46
46
|
"router-template-styles/styles.css": "/.blocklet/proxy/blocklet-service/router-template-styles/styles.css",
|
|
47
47
|
"index.html": "/.blocklet/proxy/blocklet-service/index.html",
|
|
48
48
|
"main.632501d5.css.map": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css.map",
|
|
49
|
-
"main.
|
|
50
|
-
"716.
|
|
49
|
+
"main.ea4f5b3d.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.ea4f5b3d.js.map",
|
|
50
|
+
"716.0d2a2d32.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/716.0d2a2d32.chunk.js.map",
|
|
51
51
|
"359.c47779c2.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/359.c47779c2.chunk.js.map",
|
|
52
52
|
"255.279b1bca.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/255.279b1bca.chunk.js.map",
|
|
53
53
|
"371.f67a06b4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/371.f67a06b4.chunk.js.map",
|
|
54
|
-
"737.
|
|
55
|
-
"460.
|
|
56
|
-
"868.
|
|
57
|
-
"547.
|
|
58
|
-
"343.
|
|
59
|
-
"682.
|
|
60
|
-
"711.
|
|
61
|
-
"437.
|
|
54
|
+
"737.15a41e1c.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/737.15a41e1c.chunk.js.map",
|
|
55
|
+
"460.4763afe0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/460.4763afe0.chunk.js.map",
|
|
56
|
+
"868.ac8df3a0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/868.ac8df3a0.chunk.js.map",
|
|
57
|
+
"547.03d5d719.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/547.03d5d719.chunk.js.map",
|
|
58
|
+
"343.3bc8fb37.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/343.3bc8fb37.chunk.js.map",
|
|
59
|
+
"682.a8bf723a.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/682.a8bf723a.chunk.js.map",
|
|
60
|
+
"711.56427a24.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/711.56427a24.chunk.js.map",
|
|
61
|
+
"437.075e8453.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/437.075e8453.chunk.js.map",
|
|
62
62
|
"690.afb99ee7.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/690.afb99ee7.chunk.js.map",
|
|
63
63
|
"576.d7d4814e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/576.d7d4814e.chunk.js.map",
|
|
64
64
|
"42.c390a3f4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/42.c390a3f4.chunk.js.map",
|
|
65
|
-
"21.
|
|
65
|
+
"21.4b495d85.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/21.4b495d85.chunk.js.map",
|
|
66
66
|
"162.f681dc46.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/162.f681dc46.chunk.js.map",
|
|
67
67
|
"610.40349d57.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/610.40349d57.chunk.js.map",
|
|
68
|
-
"
|
|
69
|
-
"
|
|
68
|
+
"933.be984e1d.chunk.css.map": "/.blocklet/proxy/blocklet-service/static/css/933.be984e1d.chunk.css.map",
|
|
69
|
+
"933.5a8322ac.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/933.5a8322ac.chunk.js.map",
|
|
70
70
|
"199.3d76c24b.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/199.3d76c24b.chunk.js.map",
|
|
71
|
-
"573.
|
|
71
|
+
"573.b071429e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/573.b071429e.chunk.js.map"
|
|
72
72
|
},
|
|
73
73
|
"entrypoints": [
|
|
74
74
|
"static/css/main.632501d5.css",
|
|
75
|
-
"static/js/main.
|
|
75
|
+
"static/js/main.ea4f5b3d.js"
|
|
76
76
|
]
|
|
77
77
|
}
|
package/build/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/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><script src="/__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/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><script src="/__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.ea4f5b3d.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
.xterm{font-feature-settings:"liga" 0;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{height:0;left:-9999em;opacity:0;overflow:hidden;position:absolute;resize:none;top:0;white-space:nowrap;width:0;z-index:-5}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;bottom:0;cursor:default;left:0;overflow-y:scroll;position:absolute;right:0;top:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{left:0;position:absolute;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;left:-9999em;line-height:normal;position:absolute;top:0;visibility:hidden}.xterm{cursor:text}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{bottom:0;color:transparent;left:0;position:absolute;right:0;top:0;z-index:10}.xterm .live-region{height:1px;left:-9999px;overflow:hidden;position:absolute;width:1px}.xterm-dim{opacity:.5}.xterm-underline{text-decoration:underline}@media (prefers-color-scheme:dark){.wmde-markdown,.wmde-markdown-var{--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-invalid-illegal-text:#f0f6fc;--color-prettylights-syntax-invalid-illegal-bg:#8e1519;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-italic:#c9d1d9;--color-prettylights-syntax-markup-bold:#c9d1d9;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-ignored-text:#c9d1d9;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-brackethighlighter-angle:#8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-fg-subtle:#484f58;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:hsla(215,8%,47%,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-attention-subtle:rgba(187,128,9,.15);--color-danger-fg:#f85149;color-scheme:dark}}@media (prefers-color-scheme:light){.wmde-markdown,.wmde-markdown-var{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-fg-subtle:#6e7781;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-attention-subtle:#fff8c5;--color-danger-fg:#cf222e;color-scheme:light}}[data-color-mode*=dark] .wmde-markdown,[data-color-mode*=dark] .wmde-markdown-var,body[data-color-mode*=dark]{--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-invalid-illegal-text:#f0f6fc;--color-prettylights-syntax-invalid-illegal-bg:#8e1519;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-italic:#c9d1d9;--color-prettylights-syntax-markup-bold:#c9d1d9;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-ignored-text:#c9d1d9;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-brackethighlighter-angle:#8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-fg-subtle:#484f58;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:hsla(215,8%,47%,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-attention-subtle:rgba(187,128,9,.15);--color-danger-fg:#f85149;color-scheme:dark}[data-color-mode*=light] .wmde-markdown,[data-color-mode*=light] .wmde-markdown-var,body[data-color-mode*=light]{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-fg-subtle:#6e7781;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-attention-subtle:#fff8c5;--color-danger-fg:#cf222e;color-scheme:light}.wmde-markdown{-webkit-text-size-adjust:100%;word-wrap:break-word;background-color:var(--color-canvas-default);color:var(--color-fg-default);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5}.wmde-markdown details,.wmde-markdown figcaption,.wmde-markdown figure{display:block}.wmde-markdown summary{display:list-item}.wmde-markdown [hidden]{display:none!important}.wmde-markdown a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}.wmde-markdown a:active,.wmde-markdown a:hover{outline-width:0}.wmde-markdown abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.wmde-markdown b,.wmde-markdown strong{font-weight:600}.wmde-markdown dfn{font-style:italic}.wmde-markdown h1{border-bottom:1px solid var(--color-border-muted);font-size:2em;font-weight:600;margin:.67em 0;padding-bottom:.3em}.wmde-markdown mark{background-color:var(--color-attention-subtle);color:var(--color-text-primary)}.wmde-markdown small{font-size:90%}.wmde-markdown sub,.wmde-markdown sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.wmde-markdown sub{bottom:-.25em}.wmde-markdown sup{top:-.5em}.wmde-markdown img{background-color:var(--color-canvas-default);border-style:none;box-sizing:content-box;max-width:100%}.wmde-markdown code,.wmde-markdown kbd,.wmde-markdown pre,.wmde-markdown samp{font-family:monospace,monospace;font-size:1em}.wmde-markdown figure{margin:1em 40px}.wmde-markdown hr{background:transparent;background-color:var(--color-border-default);border:0;box-sizing:content-box;height:.25em;margin:24px 0;overflow:hidden;padding:0}.wmde-markdown input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}.wmde-markdown [type=button],.wmde-markdown [type=reset],.wmde-markdown [type=submit]{-webkit-appearance:button}.wmde-markdown [type=button]::-moz-focus-inner,.wmde-markdown [type=reset]::-moz-focus-inner,.wmde-markdown [type=submit]::-moz-focus-inner{border-style:none;padding:0}.wmde-markdown [type=button]:-moz-focusring,.wmde-markdown [type=reset]:-moz-focusring,.wmde-markdown [type=submit]:-moz-focusring{outline:1px dotted ButtonText}.wmde-markdown [type=checkbox],.wmde-markdown [type=radio]{box-sizing:border-box;padding:0}.wmde-markdown [type=number]::-webkit-inner-spin-button,.wmde-markdown [type=number]::-webkit-outer-spin-button{height:auto}.wmde-markdown [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.wmde-markdown [type=search]::-webkit-search-cancel-button,.wmde-markdown [type=search]::-webkit-search-decoration{-webkit-appearance:none}.wmde-markdown ::-webkit-input-placeholder{color:inherit;opacity:.54}.wmde-markdown ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.wmde-markdown a:hover{text-decoration:underline}.wmde-markdown hr:after,.wmde-markdown hr:before{content:"";display:table}.wmde-markdown hr:after{clear:both}.wmde-markdown table{border-collapse:collapse;border-spacing:0;display:block;max-width:100%;overflow:auto;width:-webkit-max-content;width:max-content}.wmde-markdown td,.wmde-markdown th{padding:0}.wmde-markdown details summary{cursor:pointer}.wmde-markdown details:not([open])>:not(summary){display:none!important}.wmde-markdown kbd{background-color:var(--color-canvas-subtle);border-bottom-color:var(--color-neutral-muted);border:1px solid var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted);color:var(--color-fg-default);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.wmde-markdown h1,.wmde-markdown h2,.wmde-markdown h3,.wmde-markdown h4,.wmde-markdown h5,.wmde-markdown h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.wmde-markdown h2{border-bottom:1px solid var(--color-border-muted);font-size:1.5em;font-weight:600;padding-bottom:.3em}.wmde-markdown h3{font-size:1.25em;font-weight:600}.wmde-markdown h4{font-size:1em;font-weight:600}.wmde-markdown h5{font-size:.875em;font-weight:600}.wmde-markdown h6{color:var(--color-fg-muted);font-size:.85em;font-weight:600}.wmde-markdown p{margin-bottom:10px;margin-top:0}.wmde-markdown blockquote{border-left:.25em solid var(--color-border-default);color:var(--color-fg-muted);margin:0;padding:0 1em}.wmde-markdown ol,.wmde-markdown ul{margin-bottom:0;margin-top:0;padding-left:2em}.wmde-markdown ol ol,.wmde-markdown ul ol{list-style-type:lower-roman}.wmde-markdown ol ol ol,.wmde-markdown ol ul ol,.wmde-markdown ul ol ol,.wmde-markdown ul ul ol{list-style-type:lower-alpha}.wmde-markdown dd{margin-left:0}.wmde-markdown code,.wmde-markdown pre,.wmde-markdown tt{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.wmde-markdown pre{word-wrap:normal;margin-bottom:0;margin-top:0}.wmde-markdown .octicon{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}.wmde-markdown ::-webkit-input-placeholder{color:var(--color-fg-subtle);opacity:1}.wmde-markdown ::placeholder{color:var(--color-fg-subtle);opacity:1}.wmde-markdown input::-webkit-inner-spin-button,.wmde-markdown input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.wmde-markdown [data-catalyst]{display:block}.wmde-markdown:after,.wmde-markdown:before{content:"";display:table}.wmde-markdown:after{clear:both}.wmde-markdown>:first-child{margin-top:0!important}.wmde-markdown>:last-child{margin-bottom:0!important}.wmde-markdown a:not([href]){color:inherit;text-decoration:none}.wmde-markdown .absent{color:var(--color-danger-fg)}.wmde-markdown a.anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.wmde-markdown .anchor:focus{outline:none}.wmde-markdown blockquote,.wmde-markdown details,.wmde-markdown dl,.wmde-markdown ol,.wmde-markdown p,.wmde-markdown pre,.wmde-markdown table,.wmde-markdown ul{margin-bottom:16px;margin-top:0}.wmde-markdown blockquote>:first-child{margin-top:0}.wmde-markdown blockquote>:last-child{margin-bottom:0}.wmde-markdown sup>a:before{content:"["}.wmde-markdown sup>a:after{content:"]"}.wmde-markdown h1 .octicon-link,.wmde-markdown h2 .octicon-link,.wmde-markdown h3 .octicon-link,.wmde-markdown h4 .octicon-link,.wmde-markdown h5 .octicon-link,.wmde-markdown h6 .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.wmde-markdown h1:hover .anchor,.wmde-markdown h2:hover .anchor,.wmde-markdown h3:hover .anchor,.wmde-markdown h4:hover .anchor,.wmde-markdown h5:hover .anchor,.wmde-markdown h6:hover .anchor{text-decoration:none}.wmde-markdown h1:hover .anchor .octicon-link,.wmde-markdown h2:hover .anchor .octicon-link,.wmde-markdown h3:hover .anchor .octicon-link,.wmde-markdown h4:hover .anchor .octicon-link,.wmde-markdown h5:hover .anchor .octicon-link,.wmde-markdown h6:hover .anchor .octicon-link{visibility:visible}.wmde-markdown h1 code,.wmde-markdown h1 tt,.wmde-markdown h2 code,.wmde-markdown h2 tt,.wmde-markdown h3 code,.wmde-markdown h3 tt,.wmde-markdown h4 code,.wmde-markdown h4 tt,.wmde-markdown h5 code,.wmde-markdown h5 tt,.wmde-markdown h6 code,.wmde-markdown h6 tt{font-size:inherit;padding:0 .2em}.wmde-markdown ol.no-list,.wmde-markdown ul.no-list{list-style-type:none;padding:0}.wmde-markdown ol[type="1"]{list-style-type:decimal}.wmde-markdown ol[type=a]{list-style-type:lower-alpha}.wmde-markdown ol[type=i]{list-style-type:lower-roman}.wmde-markdown div>ol:not([type]){list-style-type:decimal}.wmde-markdown ol ol,.wmde-markdown ol ul,.wmde-markdown ul ol,.wmde-markdown ul ul{margin-bottom:0;margin-top:0}.wmde-markdown li>p{margin-top:16px}.wmde-markdown li+li{margin-top:.25em}.wmde-markdown dl{padding:0}.wmde-markdown dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.wmde-markdown dl dd{margin-bottom:16px;padding:0 16px}.wmde-markdown table th{font-weight:600}.wmde-markdown table td,.wmde-markdown table th{border:1px solid var(--color-border-default);padding:6px 13px}.wmde-markdown table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.wmde-markdown table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.wmde-markdown table img{background-color:transparent}.wmde-markdown img[align=right]{padding-left:20px}.wmde-markdown img[align=left]{padding-right:20px}.wmde-markdown .emoji{background-color:transparent;max-width:none;vertical-align:text-top}.wmde-markdown span.frame{display:block;overflow:hidden}.wmde-markdown span.frame>span{border:1px solid var(--color-border-default);display:block;float:left;margin:13px 0 0;overflow:hidden;padding:7px;width:auto}.wmde-markdown span.frame span img{display:block;float:left}.wmde-markdown span.frame span span{clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}.wmde-markdown span.align-center{clear:both;display:block;overflow:hidden}.wmde-markdown span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.wmde-markdown span.align-center span img{margin:0 auto;text-align:center}.wmde-markdown span.align-right{clear:both;display:block;overflow:hidden}.wmde-markdown span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.wmde-markdown span.align-right span img{margin:0;text-align:right}.wmde-markdown span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.wmde-markdown span.float-left span{margin:13px 0 0}.wmde-markdown span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.wmde-markdown span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.wmde-markdown code,.wmde-markdown tt{background-color:var(--color-neutral-muted);border-radius:6px;font-size:85%;margin:0;padding:.2em .4em}.wmde-markdown code br,.wmde-markdown tt br{display:none}.wmde-markdown del code{text-decoration:inherit}.wmde-markdown pre code{font-size:100%}.wmde-markdown pre>code{background:transparent;border:0;margin:0;padding:0;white-space:pre;word-break:normal}.wmde-markdown pre{background-color:var(--color-canvas-subtle);border-radius:6px;font-size:85%;line-height:1.45}.wmde-markdown pre code,.wmde-markdown pre tt{word-wrap:normal;background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0}.wmde-markdown pre>code{display:block;overflow:auto;padding:16px}.wmde-markdown .csv-data td,.wmde-markdown .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}.wmde-markdown .csv-data .blob-num{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}.wmde-markdown .csv-data tr{border-top:0}.wmde-markdown .csv-data th{background:var(--color-canvas-subtle);border-top:0;font-weight:600}.wmde-markdown .footnotes{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}.wmde-markdown .footnotes ol{padding-left:16px}.wmde-markdown .footnotes li{position:relative}.wmde-markdown .footnotes li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}.wmde-markdown .footnotes li:target{color:var(--color-fg-default)}.wmde-markdown .footnotes .data-footnote-backref g-emoji{font-family:monospace}.wmde-markdown .task-list-item{list-style-type:none}.wmde-markdown .task-list-item label{font-weight:400}.wmde-markdown .task-list-item.enabled label{cursor:pointer}.wmde-markdown .task-list-item+.wmde-markdown .task-list-item{margin-top:3px}.wmde-markdown .task-list-item .handle{display:none}.wmde-markdown .task-list-item-checkbox,.wmde-markdown input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.wmde-markdown .contains-task-list:dir(rtl) .task-list-item-checkbox,.wmde-markdown .contains-task-list:dir(rtl) input[type=checkbox]{margin:0 -1.6em .25em .2em}.wmde-markdown ::-webkit-calendar-picker-indicator{-webkit-filter:invert(50%);filter:invert(50%)}.wmde-markdown pre[class*=language-]{position:relative}.wmde-markdown pre .copied{background:var(--color-border-default);border-radius:5px;color:var(--color-fg-defaul);cursor:pointer;display:flex;font-size:12px;padding:6px;position:absolute;right:6px;top:6px;transition:all .3s;visibility:hidden}.wmde-markdown pre .copied .octicon-copy{display:block}.wmde-markdown pre .copied .octicon-check{display:none}.wmde-markdown pre:hover .copied{visibility:visible}.wmde-markdown pre:hover .copied:hover{background:var(--color-prettylights-syntax-entity-tag);color:var(--color-canvas-default)}.wmde-markdown pre .copied.active,.wmde-markdown pre:hover .copied:active{background:#2e9b33;color:var(--color-canvas-default)}.wmde-markdown pre .active .octicon-copy{display:none}.wmde-markdown pre .active .octicon-check{display:block}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--color-prettylights-syntax-comment)}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.selector,.token.symbol,.token.tag{color:var(--color-prettylights-syntax-entity-tag)}.token.maybe-class-name{color:var(--color-prettylights-syntax-variable)}.token.attr-name,.token.boolean,.token.builtin,.token.char,.token.number,.token.operator,.token.property-access,.token.selector .token.class,.token.string{color:var(--color-prettylights-syntax-constant)}.token.deleted{color:var(--color-prettylights-syntax-markup-deleted-text)}.code-line .token.deleted{background-color:var(--color-prettylights-syntax-markup-deleted-bg)}.token.inserted{color:var(--color-prettylights-syntax-markup-inserted-text)}.code-line .token.inserted{background-color:var(--color-prettylights-syntax-markup-inserted-bg)}.token.variable{color:var(--color-prettylights-syntax-constant)}.language-css .token.string,.style .token.string,.token.atrule,.token.attr-value,.token.class-name,.token.color,.token.entity,.token.function,.token.url{color:var(--color-prettylights-syntax-string)}.token.important,.token.keyword,.token.regex,.token.rule{color:var(--color-prettylights-syntax-keyword)}.token.coord{color:var(--color-prettylights-syntax-meta-diff-range)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
|
|
2
2
|
|
|
3
3
|
/*! @algolia/autocomplete-theme-classic 1.9.2 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */:root{--aa-search-input-height:44px;--aa-input-icon-size:20px;--aa-base-unit:16;--aa-spacing-factor:1;--aa-spacing:calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px);--aa-spacing-half:calc(var(--aa-spacing)/2);--aa-panel-max-height:650px;--aa-base-z-index:9999;--aa-font-size:calc(var(--aa-base-unit)*1px);--aa-font-family:inherit;--aa-font-weight-medium:500;--aa-font-weight-semibold:600;--aa-font-weight-bold:700;--aa-icon-size:20px;--aa-icon-stroke-width:1.6;--aa-icon-color-rgb:119,119,163;--aa-icon-color-alpha:1;--aa-action-icon-size:20px;--aa-text-color-rgb:38,38,39;--aa-text-color-alpha:1;--aa-primary-color-rgb:62,52,211;--aa-primary-color-alpha:0.2;--aa-muted-color-rgb:128,126,163;--aa-muted-color-alpha:0.6;--aa-panel-border-color-rgb:128,126,163;--aa-panel-border-color-alpha:0.3;--aa-input-border-color-rgb:128,126,163;--aa-input-border-color-alpha:0.8;--aa-background-color-rgb:255,255,255;--aa-background-color-alpha:1;--aa-input-background-color-rgb:255,255,255;--aa-input-background-color-alpha:1;--aa-selected-color-rgb:179,173,214;--aa-selected-color-alpha:0.205;--aa-description-highlight-background-color-rgb:245,223,77;--aa-description-highlight-background-color-alpha:0.5;--aa-detached-media-query:(max-width:680px);--aa-detached-modal-media-query:(min-width:680px);--aa-detached-modal-max-width:680px;--aa-detached-modal-max-height:500px;--aa-overlay-color-rgb:115,114,129;--aa-overlay-color-alpha:0.4;--aa-panel-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);--aa-scrollbar-width:13px;--aa-scrollbar-track-background-color-rgb:234,234,234;--aa-scrollbar-track-background-color-alpha:1;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb);--aa-scrollbar-thumb-background-color-alpha:1}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}}body.dark,body[data-theme=dark]{--aa-text-color-rgb:183,192,199;--aa-primary-color-rgb:146,138,255;--aa-muted-color-rgb:146,138,255;--aa-input-background-color-rgb:0,3,9;--aa-background-color-rgb:21,24,42;--aa-selected-color-rgb:146,138,255;--aa-selected-color-alpha:0.25;--aa-description-highlight-background-color-rgb:0 255 255;--aa-description-highlight-background-color-alpha:0.25;--aa-icon-color-rgb:119,119,163;--aa-panel-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--aa-scrollbar-track-background-color-rgb:44,46,64;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb)}.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{box-sizing:border-box}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);font-weight:400;line-height:1em;margin:0;padding:0;text-align:left}.aa-Form{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Form:focus-within{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;height:44px;height:var(--aa-search-input-height);order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);height:auto;max-height:20px;max-height:var(--aa-input-icon-size);width:20px;width:var(--aa-input-icon-size)}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-left:calc(var(--aa-spacing)*.75 - 1px);padding-right:8px;padding-right:var(--aa-spacing-half);width:47px;width:calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px)}@media (hover:none) and (pointer:coarse){.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;padding-left:calc(var(--aa-spacing-half)/2 - 1px);width:39px;width:calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px)}}.aa-SubmitButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0}.aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-LoadingIndicator[hidden]{display:none}.aa-InputWrapper{order:3;position:relative;width:100%}.aa-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font:inherit;height:44px;height:var(--aa-search-input-height);padding:0;width:100%}.aa-Input::-moz-placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input::placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.aa-InputWrapperSuffix{align-items:center;display:flex;height:44px;height:var(--aa-search-input-height);order:4}.aa-ClearButton{align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;height:100%;margin:0;padding:0 12.83333px;padding:0 calc(var(--aa-spacing)*.83333 - .5px)}@media (hover:none) and (pointer:coarse){.aa-ClearButton{padding:0 10.16667px;padding:0 calc(var(--aa-spacing)*.66667 - .5px)}}.aa-ClearButton:focus,.aa-ClearButton:hover{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}.aa-ClearButton[hidden]{display:none}.aa-ClearButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-icon-size)}.aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:4px;border-radius:calc(var(--aa-spacing)/4);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);margin:8px 0 0;overflow:hidden;position:absolute;transition:opacity .2s ease-in,filter .2s ease-in}@media screen and (prefers-reduced-motion){.aa-Panel{transition:none}}.aa-Panel button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{height:100%;margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-y:auto;padding:0;position:relative;text-align:left}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-x:hidden;overflow-y:auto;padding:8px;padding:var(--aa-spacing-half);scrollbar-color:#fff #eaeaea;scrollbar-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));scrollbar-width:thin}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:var(--aa-scrollbar-width)}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:#eaeaea;background-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#fff;background-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha));border-color:#eaeaea;border-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));border-radius:9999px;border-style:solid;border-width:3px 2px 3px 3px}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-Source:empty{display:none}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px;padding:var(--aa-spacing)}.aa-List{list-style:none;margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0;margin:var(--aa-spacing-half) .5em var(--aa-spacing-half) 0}.aa-SourceHeader:empty{display:none}.aa-SourceHeaderTitle{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);display:inline-block;font-size:.8em;font-weight:600;font-weight:var(--aa-font-weight-semibold);margin:0;padding:0 8px 0 0;padding:0 var(--aa-spacing-half) 0 0;position:relative;z-index:9999;z-index:var(--aa-base-z-index)}.aa-SourceHeaderLine{border-bottom:1px solid #3e34d3;border-bottom:1px solid rgba(var(--aa-primary-color-rgb),1);display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;top:var(--aa-spacing-half);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-SourceFooterSeeAll{background:linear-gradient(180deg,#fff,rgba(128,126,163,.14));background:linear-gradient(180deg,rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha)),rgba(128,126,163,.14));border:1px solid rgba(128,126,163,.6);border:1px solid rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));border-radius:5px;box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);color:inherit;font-size:.95em;font-weight:500;font-weight:var(--aa-font-weight-medium);padding:.475em 1em .6em;-webkit-text-decoration:none;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #3e34d3;border:1px solid rgba(var(--aa-primary-color-rgb),1);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1)}.aa-Item{align-items:center;border-radius:3px;cursor:pointer;display:grid;min-height:40px;min-height:calc(var(--aa-spacing)*2.5);padding:4px;padding:calc(var(--aa-spacing-half)/2)}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205);background-color:rgba(var(--aa-selected-color-rgb),var(--aa-selected-color-alpha))}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);align-items:center;background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:3px;box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));color:#7777a3;color:rgba(var(--aa-icon-color-rgb),var(--aa-icon-color-alpha));display:flex;flex-shrink:0;font-size:.7em;height:28px;height:calc(var(--aa-icon-size) + var(--aa-spacing-half));justify-content:center;overflow:hidden;text-align:center;width:28px;width:calc(var(--aa-icon-size) + var(--aa-spacing-half))}.aa-ItemIcon img{height:auto;max-height:20px;max-height:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);max-width:20px;max-width:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);width:auto}.aa-ItemIcon svg{height:20px;height:var(--aa-icon-size);width:20px;width:var(--aa-icon-size)}.aa-ItemIcon--alignTop{align-self:flex-start}.aa-ItemIcon--noBorder{background:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px;padding:var(--aa-spacing-half)}.aa-ItemContent{grid-gap:8px;grid-gap:var(--aa-spacing-half);align-items:center;cursor:pointer;display:grid;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent:empty{display:none}.aa-ItemContent mark{background:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:700;font-weight:var(--aa-font-weight-bold)}.aa-ItemContent--dual{display:flex;flex-direction:column;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle{display:block}.aa-ItemContent--indented{padding-left:36px;padding-left:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-ItemContentBody{grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);display:grid;gap:4px;gap:calc(var(--aa-spacing-half)/2)}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon:before{border-color:rgba(128,126,163,.64);border-color:rgba(var(--aa-muted-color-rgb),.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before{border-width:0 0 1.5px;margin-left:8px;margin-left:var(--aa-spacing-half);margin-right:4px;margin-right:calc(var(--aa-spacing-half)/2);width:10px;width:calc(var(--aa-spacing-half) + 2px)}.aa-ItemContentSubtitle--standalone{grid-gap:8px;grid-gap:var(--aa-spacing-half);align-items:center;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));display:grid;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;height:var(--aa-spacing-half);width:8px;width:var(--aa-spacing-half)}.aa-ItemContentSubtitleCategory{color:#807ea3;color:rgba(var(--aa-muted-color-rgb),1);font-weight:500}.aa-ItemContentDescription{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-ItemContentDescription:empty{display:none}.aa-ItemContentDescription mark{background:rgba(245,223,77,.5);background:rgba(var(--aa-description-highlight-background-color-rgb),var(--aa-description-highlight-background-color-alpha));color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:500;font-weight:var(--aa-font-weight-medium)}.aa-ItemContentDash{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));display:none;opacity:.4}.aa-ItemContentTag{background-color:rgba(62,52,211,.2);background-color:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha));border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);align-items:center;color:inherit;display:grid;gap:4px;gap:calc(var(--aa-spacing-half)/2);grid-auto-flow:column;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;-webkit-text-decoration:none;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.33333px;margin:0 calc(var(--aa-spacing)/-3);padding:0 2px 0 0}.aa-ItemActionButton{align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;flex-shrink:0;padding:0}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}@media (hover:none) and (pointer:coarse){.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}}.aa-ItemActionButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));margin:5.33333px;margin:calc(var(--aa-spacing)/3);width:20px;width:var(--aa-action-icon-size)}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{align-items:center;background:#3e34d3;background:rgba(var(--aa-primary-color-rgb),1);color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;padding:var(--aa-spacing-half) var(--aa-spacing);position:relative}.aa-PanelHeader:after{background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));bottom:-8px;bottom:calc(var(--aa-spacing-half)*-1);content:"";height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0}.aa-PanelFooter,.aa-PanelHeader:after{z-index:9999;z-index:var(--aa-base-z-index)}.aa-PanelFooter{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 1px 0 rgba(128,126,163,.3);box-shadow:inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;justify-content:space-between;margin:0;padding:16px;padding:var(--aa-spacing);position:relative}.aa-PanelFooter:after{background-image:linear-gradient(hsla(0,0%,100%,0),rgba(128,126,163,.6));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha)));content:"";height:16px;height:var(--aa-spacing);left:0;opacity:.12;pointer-events:none;position:absolute;right:0;top:-16px;top:calc(var(--aa-spacing)*-1);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-DetachedContainer{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));bottom:0;box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-DetachedContainer:after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px;margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid rgba(128,126,163,.3);border-bottom:1px solid rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:8px;padding:var(--aa-spacing-half)}.aa-DetachedCancelButton{background:none;border:0;border-radius:3px;color:inherit;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));cursor:pointer;font:inherit;margin:0 0 0 8px;margin:0 0 0 var(--aa-spacing-half);padding:0 8px;padding:0 var(--aa-spacing-half)}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha))}.aa-DetachedContainer--modal{border-radius:6px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;max-width:var(--aa-detached-modal-max-width);position:absolute;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:var(--aa-detached-modal-max-height);padding-bottom:8px;padding-bottom:var(--aa-spacing-half);position:static}.aa-DetachedSearchButton{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;font:inherit;font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);height:44px;height:var(--aa-search-input-height);margin:0;padding:0 5.5px;padding:0 calc(var(--aa-search-input-height)/8);position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 3px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-DetachedSearchButtonIcon{align-items:center;color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);cursor:auto;display:flex;flex-shrink:0;height:100%;justify-content:center;width:36px;width:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-DetachedSearchButtonQuery{color:#262627;color:rgba(var(--aa-text-color-rgb),1);line-height:1.25em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aa-DetachedSearchButtonPlaceholder[hidden]{display:none}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:hsla(244,6%,48%,.4);background-color:rgba(var(--aa-overlay-color-rgb),var(--aa-overlay-color-alpha));height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-GradientBottom,.aa-GradientTop{height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-GradientTop{background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));top:0}.aa-GradientBottom{background-image:linear-gradient(hsla(0,0%,100%,0),#fff);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-background-color-rgb),1));border-bottom-left-radius:4px;border-bottom-left-radius:calc(var(--aa-spacing)/4);border-bottom-right-radius:4px;border-bottom-right-radius:calc(var(--aa-spacing)/4);bottom:0}@media (hover:none) and (pointer:coarse){.aa-DesktopOnly{display:none}}@media (hover:hover){.aa-TouchOnly{display:none}}
|
|
4
|
-
/*# sourceMappingURL=
|
|
4
|
+
/*# sourceMappingURL=933.be984e1d.chunk.css.map*/
|