@abtnode/blocklet-services 1.16.6-beta-4ea1eb90 → 1.16.6-beta-eaa4d39d

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.
@@ -43,7 +43,7 @@ const logger = require('@abtnode/logger')(require('../../../package.json').name)
43
43
  const { isInvitedUserOnly } = require('../../util');
44
44
  const { transferPassport } = require('../auth/utils');
45
45
  const { generateTranslate } = require('../translate');
46
- const { getRawUser, mergeUserData, migrateAccount, normalizeUser } = require('../../services/oauth');
46
+ const { mergeUserData, migrateAccount } = require('../../services/oauth');
47
47
 
48
48
  const vcTypes = [VC_TYPE_GENERAL_PASSPORT, VC_TYPE_NODE_PASSPORT];
49
49
 
@@ -135,7 +135,7 @@ module.exports = {
135
135
  onConnect: async ({ node, request, userDid, locale, passportId = '', componentId, action }) => {
136
136
  const blocklet = await request.getBlocklet();
137
137
  const config = await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
138
- const { did: teamDid } = await request.getBlockletInfo();
138
+ const { did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
139
139
 
140
140
  const profileFields = get(config, 'profileFields');
141
141
 
@@ -172,13 +172,16 @@ module.exports = {
172
172
  };
173
173
  }
174
174
 
175
- let user = await getRawUser(blocklet.meta.did, userDid, {
176
- getUser: node.getUser,
177
- getUsers: node.getUsers,
178
- });
179
- user = await normalizeUser(teamDid, user, {
180
- updateUser: node.updateUser,
181
- getBlockletInfo: request.getBlockletInfo,
175
+ const user = await node.getUser({
176
+ teamDid: blocklet.meta.did,
177
+ user: {
178
+ did: userDid,
179
+ },
180
+ options: {
181
+ enableConnectedAccout: true,
182
+ enableNormalize: true,
183
+ blockletSk: blockletWallet.secretKey,
184
+ },
182
185
  });
183
186
  if (user) {
184
187
  delete claims.profile;
@@ -201,16 +204,19 @@ module.exports = {
201
204
  action,
202
205
  }) => {
203
206
  const blocklet = await request.getBlocklet();
204
- const { wallet, name, passportColor, did: teamDid } = await request.getBlockletInfo();
207
+ const { wallet, name, passportColor, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
205
208
 
206
209
  // Check user approved
207
- let user = await getRawUser(teamDid, userDid, {
208
- getUser: node.getUser,
209
- getUsers: node.getUsers,
210
- });
211
- user = await normalizeUser(teamDid, user, {
212
- updateUser: node.updateUser,
213
- getBlockletInfo: request.getBlockletInfo,
210
+ const user = await node.getUser({
211
+ teamDid,
212
+ user: {
213
+ did: userDid,
214
+ },
215
+ options: {
216
+ enableConnectedAccout: true,
217
+ enableNormalize: true,
218
+ blockletSk: blockletWallet.secretKey,
219
+ },
214
220
  });
215
221
  if (user && !user.approved) {
216
222
  throw new Error(messages.notAllowed[locale]);
@@ -303,14 +309,16 @@ module.exports = {
303
309
  const passportForLog = passport || { name: 'Guest', role: 'guest' };
304
310
  if (user) {
305
311
  // Update user
306
- const doc = await node.updateUser({
312
+ const doc = await node.loginUser({
307
313
  teamDid,
308
- user: mergeUserData(user, {
314
+ user: {
315
+ did: user.did,
316
+ pk: user.pk,
309
317
  locale,
310
- lastUsedPassport: passport,
318
+ passport,
311
319
  lastLoginIp: get(request, 'headers[x-real-ip]') || '',
312
- connectedAccount: [{ provider: 'wallet', did: realDid }, connectedNft].filter(Boolean),
313
- }),
320
+ connectedAccount: [{ provider: 'wallet', did: realDid }, connectedNft],
321
+ },
314
322
  });
315
323
  await node.createAuditLog(
316
324
  {
@@ -325,7 +333,7 @@ module.exports = {
325
333
  // Create user
326
334
  const profile = claims.find((x) => x.type === 'profile');
327
335
 
328
- const doc = await node.addUser({
336
+ const doc = await node.loginUser({
329
337
  teamDid,
330
338
  user: {
331
339
  ...profile,
@@ -334,25 +342,17 @@ module.exports = {
334
342
  }),
335
343
  did: realDid,
336
344
  pk: realPk,
337
- approved: true,
338
345
  locale,
339
- passports: [passport].filter(Boolean),
340
- firstLoginAt: now,
341
- lastLoginAt: now,
346
+ passport,
342
347
  lastLoginIp: get(request, 'headers[x-real-ip]') || '',
343
- extraConfigs: {
344
- sourceProvider: 'wallet',
345
- connectedAccounts: [
346
- {
347
- provider: 'wallet',
348
- did: realDid,
349
- pk: realPk,
350
- firstLoginAt: now,
351
- lastLoginAt: now,
352
- },
353
- connectedNft,
354
- ].filter(Boolean),
355
- },
348
+ connectedAccount: [
349
+ {
350
+ provider: 'wallet',
351
+ did: realDid,
352
+ pk: realPk,
353
+ },
354
+ connectedNft,
355
+ ],
356
356
  },
357
357
  });
358
358
  await node.createAuditLog(
@@ -413,14 +413,17 @@ module.exports = {
413
413
  throw new Error(messages.actionForbidden[locale]);
414
414
  }
415
415
 
416
- const { did: teamDid } = await request.getBlockletInfo();
417
- let user = await getRawUser(teamDid, userDid, {
418
- getUser: node.getUser,
419
- getUsers: node.getUsers,
420
- });
421
- user = await normalizeUser(teamDid, user, {
422
- updateUser: node.updateUser,
423
- getBlockletInfo: request.getBlockletInfo,
416
+ const { did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
417
+ const user = await node.getUser({
418
+ teamDid,
419
+ user: {
420
+ did: userDid,
421
+ },
422
+ options: {
423
+ enableConnectedAccout: true,
424
+ enableNormalize: true,
425
+ blockletSk: blockletWallet.secretKey,
426
+ },
424
427
  });
425
428
 
426
429
  if (!user) {
@@ -440,16 +443,19 @@ module.exports = {
440
443
  },
441
444
  onApprove: async ({ node, request, locale, profile, userDid }) => {
442
445
  const blocklet = await request.getBlocklet();
443
- const teamDid = blocklet.meta.did;
446
+ const { did: teamDid, blocklet: blockletWallet } = await request.getBlockletInfo();
444
447
 
445
448
  // check user approved
446
- let user = await getRawUser(teamDid, userDid, {
447
- getUser: node.getUser,
448
- getUsers: node.getUsers,
449
- });
450
- user = await normalizeUser(teamDid, user, {
451
- updateUser: node.updateUser,
452
- getBlockletInfo: request.getBlockletInfo,
449
+ const user = await node.getUser({
450
+ teamDid,
451
+ user: {
452
+ did: userDid,
453
+ },
454
+ options: {
455
+ enableConnectedAccout: true,
456
+ enableNormalize: true,
457
+ blockletSk: blockletWallet.secretKey,
458
+ },
453
459
  });
454
460
  if (!user) {
455
461
  throw new Error(messages.userNotFound[locale]);
@@ -488,15 +494,18 @@ module.exports = {
488
494
  throw new Error(messages.userMismatch[locale]);
489
495
  }
490
496
 
491
- const { did: teamDid } = await request.getBlockletInfo();
497
+ const { did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
492
498
 
493
- let user = await getRawUser(teamDid, userDid, {
494
- getUser: node.getUser,
495
- getUsers: node.getUsers,
496
- });
497
- user = await normalizeUser(teamDid, user, {
498
- updateUser: node.updateUser,
499
- getBlockletInfo: request.getBlockletInfo,
499
+ const user = await node.getUser({
500
+ teamDid,
501
+ user: {
502
+ did: userDid,
503
+ },
504
+ options: {
505
+ enableConnectedAccout: true,
506
+ enableNormalize: true,
507
+ blockletSk: blockletWallet.secretKey,
508
+ },
500
509
  });
501
510
 
502
511
  if (!user) {
@@ -534,16 +543,19 @@ module.exports = {
534
543
  componentId,
535
544
  }) => {
536
545
  const blocklet = await request.getBlocklet();
537
- const { name, did: teamDid } = await request.getBlockletInfo();
546
+ const { name, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
538
547
 
539
548
  // Validate user
540
- let user = await getRawUser(teamDid, userDid, {
541
- getUser: node.getUser,
542
- getUsers: node.getUsers,
543
- });
544
- user = await normalizeUser(teamDid, user, {
545
- updateUser: node.updateUser,
546
- getBlockletInfo: request.getBlockletInfo,
549
+ const user = await node.getUser({
550
+ teamDid,
551
+ user: {
552
+ did: userDid,
553
+ },
554
+ options: {
555
+ enableConnectedAccout: true,
556
+ enableNormalize: true,
557
+ blockletSk: blockletWallet.secretKey,
558
+ },
547
559
  });
548
560
  if (!user) {
549
561
  throw new Error(messages.userNotFound[locale]);
@@ -616,7 +628,17 @@ module.exports = {
616
628
 
617
629
  // 基本流程与 login 一致,但在创建更新用户信息的逻辑不一样
618
630
  bindWallet: {
619
- onConnect: async ({ node, request, userDid, locale, passportId = '', componentId, previousUserDid }) => {
631
+ authPrincipal: async ({ email, locale, previousUserDid }) => {
632
+ const user = email || previousUserDid;
633
+
634
+ const message = locale === 'zh' ? `将你的 DID 钱包与账号 ${user} 绑定` : `Connect your DID Wallet with ${user}`;
635
+
636
+ return {
637
+ description: message,
638
+ supervised: true,
639
+ };
640
+ },
641
+ onConnect: async ({ node, request, userDid, locale, componentId, previousUserDid }) => {
620
642
  const translations = {
621
643
  en: {
622
644
  notFound: "Can't get bind account information",
@@ -632,7 +654,7 @@ module.exports = {
632
654
  },
633
655
  };
634
656
  const t = generateTranslate({ translations });
635
- const { did: teamDid } = await request.getBlockletInfo();
657
+ const { did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
636
658
 
637
659
  const walletUser = await node.getUser({ teamDid, user: { did: userDid } });
638
660
  if (walletUser) {
@@ -640,13 +662,16 @@ module.exports = {
640
662
  }
641
663
 
642
664
  const config = await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
643
- let oauthUser = await getRawUser(teamDid, previousUserDid, {
644
- getUser: node.getUser,
645
- getUsers: node.getUsers,
646
- });
647
- oauthUser = await normalizeUser(teamDid, oauthUser, {
648
- updateUser: node.updateUser,
649
- getBlockletInfo: request.getBlockletInfo,
665
+ const oauthUser = await node.getUser({
666
+ teamDid,
667
+ user: {
668
+ did: previousUserDid,
669
+ },
670
+ options: {
671
+ enableConnectedAccout: true,
672
+ enableNormalize: true,
673
+ blockletSk: blockletWallet.secretKey,
674
+ },
650
675
  });
651
676
 
652
677
  if (!oauthUser) {
@@ -658,13 +683,16 @@ module.exports = {
658
683
  throw new Error(t('alreadyBindWallet', locale));
659
684
  }
660
685
 
661
- let bindUser = await getRawUser(teamDid, userDid, {
662
- getUser: node.getUser,
663
- getUsers: node.getUsers,
664
- });
665
- bindUser = await normalizeUser(teamDid, bindUser, {
666
- updateUser: node.updateUser,
667
- getBlockletInfo: request.getBlockletInfo,
686
+ const bindUser = await node.getUser({
687
+ teamDid,
688
+ user: {
689
+ did: userDid,
690
+ },
691
+ options: {
692
+ enableConnectedAccout: true,
693
+ enableNormalize: true,
694
+ blockletSk: blockletWallet.secretKey,
695
+ },
668
696
  });
669
697
 
670
698
  if (bindUser) {
@@ -684,15 +712,14 @@ module.exports = {
684
712
  };
685
713
 
686
714
  // 至少需要一个 claim
687
- // if (oauthUser.avatar) {
688
- // delete claims.profile;
689
- // }
690
-
691
- if (passportId) {
692
- claims.verifiableCredential.target = passportId;
715
+ if (oauthUser.avatar) {
716
+ delete claims.profile;
717
+ }
718
+ if (Object.keys(claims).length > 0) {
719
+ return claims;
693
720
  }
694
721
 
695
- return claims;
722
+ return [];
696
723
  },
697
724
  onApprove: async ({ node, request, locale, userDid, userPk, claims, previousUserDid }) => {
698
725
  const blocklet = await request.getBlocklet();
@@ -701,13 +728,16 @@ module.exports = {
701
728
  const oauthUser = await node.getUser({ teamDid, user: { did: previousUserDid } });
702
729
  const nodeInfo = await request.getNodeInfo();
703
730
  // Check user approved
704
- let bindUser = await getRawUser(teamDid, userDid, {
705
- getUser: node.getUser,
706
- getUsers: node.getUsers,
707
- });
708
- bindUser = await normalizeUser(teamDid, bindUser, {
709
- updateUser: node.updateUser,
710
- getBlockletInfo: request.getBlockletInfo,
731
+ let bindUser = await node.getUser({
732
+ teamDid,
733
+ user: {
734
+ did: userDid,
735
+ },
736
+ options: {
737
+ enableConnectedAccout: true,
738
+ enableNormalize: true,
739
+ blockletSk: blockletWallet.secretKey,
740
+ },
711
741
  });
712
742
  if (bindUser && !bindUser.approved) {
713
743
  throw new Error(messages.notAllowed[locale]);
@@ -18,7 +18,7 @@ const { getAvatarByEmail, transferPassport } = require('../libs/auth/utils');
18
18
  const initJwt = require('../libs/jwt');
19
19
  const { sendToUser } = require('../libs/notification');
20
20
  const { generateTranslate } = require('../libs/translate');
21
- const { getRawUser, mergeUserData, declareAccount, migrateAccount, normalizeUser } = require('../services/oauth');
21
+ const { mergeUserData, declareAccount, migrateAccount } = require('../services/oauth');
22
22
  const { isInvitedUserOnly } = require('../util');
23
23
 
24
24
  const PREFIX = WELLKNOWN_SERVICE_PATH_PREFIX;
@@ -28,11 +28,18 @@ const prefix = `${PREFIX}/oauth`;
28
28
  const translations = {
29
29
  zh: {
30
30
  needInviteToLogin: '你需要被邀请才可以登录此应用',
31
+ alreadyMainAccount: '已给该账户分配一个主账户',
32
+ oauthCantBeOwner: '第三方登录的账户不能成为应用的拥有者',
33
+ oauthCantBindOauth: '第三方登录的账户无法绑定另一个第三方登录的账户',
31
34
  },
32
35
  en: {
33
36
  needInviteToLogin: 'You need to be invited to sign in to this app',
37
+ alreadyMainAccount: 'Current account is already a main account',
38
+ oauthCantBeOwner: "Can't login oauth account as owner",
39
+ oauthCantBindOauth: "Current account can't bind a third party account",
34
40
  },
35
41
  };
42
+
36
43
  const t = generateTranslate({ translations });
37
44
 
38
45
  function getAuthClient(blocklet, provider) {
@@ -49,13 +56,13 @@ function getAuthClient(blocklet, provider) {
49
56
 
50
57
  async function login(req, node, options) {
51
58
  const blocklet = await req.getBlocklet();
59
+ const { token, locale = 'en', provider, componentId } = req.body;
60
+
52
61
  if (!blocklet.settings?.owner) {
53
- throw new Error('Cant login oauth account as owner');
62
+ throw new Error(t('oauthCantBeOwner', locale));
54
63
  }
55
- const { token, locale = 'en', provider, componentId } = req.body;
56
64
  const authClient = getAuthClient(blocklet, provider);
57
65
 
58
- const currentTime = new Date().toISOString();
59
66
  const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
60
67
  const config = await req.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
61
68
  const nodeInfo = await req.getNodeInfo();
@@ -67,10 +74,16 @@ async function login(req, node, options) {
67
74
  const userPk = userWallet.publicKey;
68
75
  const lastLoginIp = get(req, 'headers[x-real-ip]') || '';
69
76
  let passport = { name: 'Guest', role: 'guest' };
70
- let currentUser = await getRawUser(teamDid, userDid, { getUser: node.getUser, getUsers: node.getUsers });
71
- currentUser = await normalizeUser(teamDid, currentUser, {
72
- updateUser: node.updateUser,
73
- getBlockletInfo: req.getBlockletInfo,
77
+ let currentUser = await node.getUser({
78
+ teamDid,
79
+ user: {
80
+ did: userDid,
81
+ },
82
+ options: {
83
+ enableConnectedAccout: true,
84
+ enableNormalize: true,
85
+ blockletSk: blockletWallet.secretKey,
86
+ },
74
87
  });
75
88
  // 当前账户已存在,更新账户信息
76
89
  if (currentUser) {
@@ -80,14 +93,14 @@ async function login(req, node, options) {
80
93
  if (lastUsedPassport) {
81
94
  passport = pick(lastUsedPassport, ['id', 'name', 'role']);
82
95
  }
83
- await node.updateUser({
96
+ await node.loginUser({
84
97
  teamDid,
85
- user: mergeUserData(currentUser, {
98
+ user: {
86
99
  locale,
87
100
  lastLoginIp,
88
- lastUsedPassport,
101
+ passport: lastUsedPassport,
89
102
  connectedAccount: { provider, did: userDid },
90
- }),
103
+ },
91
104
  });
92
105
  } else {
93
106
  currentUser = {
@@ -100,21 +113,14 @@ async function login(req, node, options) {
100
113
  if (invitedUserOnly) {
101
114
  throw new Error(t('needInviteToLogin', locale));
102
115
  }
103
- await node.addUser({
116
+ await node.loginUser({
104
117
  teamDid,
105
118
  user: {
106
- extraConfigs: {
107
- sourceProvider: provider,
108
- connectedAccounts: [
109
- {
110
- provider,
111
- id: oauthInfo.sub,
112
- did: userDid,
113
- pk: userPk,
114
- lastLoginAt: currentTime,
115
- firstLoginAt: currentTime,
116
- },
117
- ],
119
+ connectedAccount: {
120
+ provider,
121
+ id: oauthInfo.sub,
122
+ did: userDid,
123
+ pk: userPk,
118
124
  },
119
125
  did: userDid,
120
126
  pk: userPk,
@@ -122,11 +128,6 @@ async function login(req, node, options) {
122
128
  email: oauthInfo.email,
123
129
  avatar,
124
130
  locale,
125
- type: 'profile',
126
- approved: true,
127
- passports: [],
128
- firstLoginAt: currentTime,
129
- lastLoginAt: currentTime,
130
131
  lastLoginIp,
131
132
  },
132
133
  });
@@ -155,13 +156,16 @@ async function invite(req, node, options) {
155
156
  let userPk = userWallet.publicKey;
156
157
 
157
158
  let profile;
158
- let currentUser = await getRawUser(teamDid, userDid, {
159
- getUser: node.getUser,
160
- getUsers: node.getUsers,
161
- });
162
- currentUser = await normalizeUser(teamDid, currentUser, {
163
- updateUser: node.updateUser,
164
- getBlockletInfo: req.getBlockletInfo,
159
+ const currentUser = await node.getUser({
160
+ teamDid,
161
+ user: {
162
+ did: userDid,
163
+ },
164
+ options: {
165
+ enableConnectedAccout: true,
166
+ enableNormalize: true,
167
+ blockletSk: blockletWallet.secretKey,
168
+ },
165
169
  });
166
170
  const { dataDir, name: applicationName } = await getApplicationInfo({ node, nodeInfo, teamDid });
167
171
  if (currentUser) {
@@ -199,6 +203,7 @@ async function invite(req, node, options) {
199
203
  userDid,
200
204
  userPk,
201
205
  locale,
206
+ provider,
202
207
  });
203
208
 
204
209
  if (currentUser) {
@@ -225,28 +230,18 @@ async function invite(req, node, options) {
225
230
  );
226
231
  }
227
232
  } else {
228
- await node.updateUser({
233
+ await node.loginUser({
229
234
  teamDid,
230
- user: mergeUserData(
231
- {
232
- did: userDid,
233
- pk: userPk,
234
- extraConfigs: {
235
- sourceProvider: provider,
236
- },
237
- },
238
- {
235
+ user: {
236
+ did: userDid,
237
+ pk: userPk,
238
+ connectedAccount: {
239
239
  provider,
240
- connectedAccount: {
241
- provider,
242
- id: oauthInfo.sub,
243
- did: userWallet.address,
244
- pk: userWallet.publicKey,
245
- firstLoginAt: new Date().toISOString(),
246
- lastLoginAt: new Date().toISOString(),
247
- },
248
- }
249
- ),
240
+ id: oauthInfo.sub,
241
+ did: userWallet.address,
242
+ pk: userWallet.publicKey,
243
+ },
244
+ },
250
245
  });
251
246
  await declareAccount({ wallet: userWallet, moniker: oauthInfo.nickname, blocklet });
252
247
  }
@@ -269,17 +264,14 @@ async function bind(req, node, options) {
269
264
  const userWallet = fromAppDid(userInfo.sub, blockletWallet.secretKey, types.RoleType.ROLE_ACCOUNT);
270
265
  let oauthUser = await node.getUser({ teamDid, user: { did: userWallet.address } });
271
266
  if (oauthUser) {
272
- if (oauthUser.extraConfigs?.bindDid) {
273
- throw new Error('OAuth account is already bind to another wallet account');
274
- }
275
- throw new Error('OAuth account is already a main account');
267
+ throw new Error(t('alreadyMainAccount', locale));
276
268
  }
277
269
 
278
- // NOTICE: 这里获得的 userDid 已经是登录返回的 rawUserDid 了,无需再 getRawUser
270
+ // NOTICE: 这里获得的 userDid 已经是登录返回的 userDid 了,无需再去查询 connectedAccount
279
271
  const bindUser = await node.getUser({ teamDid, user: { did: userDid } });
280
272
 
281
273
  if (bindUser.extraConfigs?.sourceProvider !== 'wallet') {
282
- throw new Error("OAuth account can't bind to a oauth account");
274
+ throw new Error('oauthCantBindOauth', locale);
283
275
  }
284
276
 
285
277
  const mergePassport = (oauthUser?.passports || []).reduce((sum, cur) => {
@@ -2,11 +2,17 @@ const logger = require('@abtnode/logger')(require('../../../../package.json').na
2
2
 
3
3
  const { bindWallet } = require('../../../libs/connect/session');
4
4
 
5
- const { onConnect, onApprove } = bindWallet;
5
+ const { onConnect, onApprove, authPrincipal } = bindWallet;
6
6
 
7
7
  module.exports = function createRoutes(node, authenticator, createSessionToken) {
8
8
  return {
9
9
  action: 'bind-wallet',
10
+ authPrincipal: false,
11
+ claims: {
12
+ authPrincipal: async ({ extraParams: { locale, previousUserDid } }) => {
13
+ return authPrincipal({ locale, previousUserDid });
14
+ },
15
+ },
10
16
  onConnect: async ({ req, userDid, extraParams: { locale, passportId = '', componentId, previousUserDid } }) => {
11
17
  return onConnect({
12
18
  node,
@@ -243,8 +243,6 @@ module.exports = function createRoutes(node, _, createSessionToken) {
243
243
  dataDir,
244
244
  });
245
245
 
246
- const now = new Date().toISOString();
247
-
248
246
  if (user) {
249
247
  const doc = await node.updateUser({
250
248
  teamDid: appPid,
@@ -270,30 +268,20 @@ module.exports = function createRoutes(node, _, createSessionToken) {
270
268
  node
271
269
  );
272
270
  } else {
273
- const doc = await node.addUser({
271
+ const doc = await node.loginUser({
274
272
  teamDid: appPid,
275
273
  user: {
276
274
  ...profile,
277
275
  avatar,
278
276
  did: userDid,
279
277
  pk: userPk,
280
- approved: true,
281
278
  locale,
282
- passports: [passport],
283
- firstLoginAt: now,
284
- lastLoginAt: now,
279
+ passport,
285
280
  lastLoginIp: get(req, 'headers[x-real-ip]') || '',
286
- extraConfigs: {
287
- sourceProvider: 'wallet',
288
- connectedAccounts: [
289
- {
290
- provider: 'wallet',
291
- did: userDid,
292
- pk: userPk,
293
- lastLoginAt: now,
294
- firstLoginAt: now,
295
- },
296
- ],
281
+ connectedAccount: {
282
+ provider: 'wallet',
283
+ did: userDid,
284
+ pk: userPk,
297
285
  },
298
286
  },
299
287
  });
@@ -75,7 +75,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
75
75
  // Create user
76
76
  const profile = claims.find((x) => x.type === 'profile');
77
77
 
78
- const doc = await node.addUser({
78
+ const doc = await node.loginUser({
79
79
  teamDid,
80
80
  user: {
81
81
  ...profile,
@@ -84,15 +84,16 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
84
84
  }),
85
85
  did: userDid,
86
86
  pk: userPk,
87
- approved: true,
88
87
  locale,
89
- passports: [],
90
- firstLoginAt: new Date().toISOString(),
91
- lastLoginAt: new Date().toISOString(),
92
88
  lastLoginIp: get(req, 'headers[x-real-ip]') || '',
93
89
  extra: {
94
90
  baseUrl,
95
91
  },
92
+ connectedAccount: {
93
+ provider: 'wallet',
94
+ did: userDid,
95
+ pk: userPk,
96
+ },
96
97
  },
97
98
  });
98
99
  await node.createAuditLog(
@@ -12,6 +12,7 @@ const logger = require('@abtnode/logger')(`${require('../../../package.json').na
12
12
  function createWebsocketServer(node, ensureWsUser) {
13
13
  const wsServer = new WsServer({
14
14
  broadcastEventName: '@abtnode/blocklet-services:dashboard',
15
+ heartbeatTimeout: 60 * 1000 * 5,
15
16
 
16
17
  logger,
17
18