@abtnode/blocklet-services 1.16.23-beta-ce222a8b → 1.16.23-beta-06c3a221

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/api/libs/connect/session.js +420 -275
  2. package/api/services/auth/connect/connect-to-did-spaces-for-user.js +118 -0
  3. package/api/services/auth/index.js +6 -0
  4. package/api/util/blocklet-utils.js +14 -1
  5. package/api/util/index.js +7 -4
  6. package/dist/assets/{Add-ajByPcIj.js → Add-yJOSofhS.js} +1 -1
  7. package/dist/assets/{Alert-CFkasftY.js → Alert-8z3IBaBE.js} +1 -1
  8. package/dist/assets/{ArrowDropDown-NRcn4eGZ.js → ArrowDropDown-oq6bnC5a.js} +1 -1
  9. package/dist/assets/Avatar-_iJamCVD.js +1 -0
  10. package/dist/assets/{ButtonGroup-zwK-MH7q.js → ButtonGroup-_ql_Aibf.js} +1 -1
  11. package/dist/assets/CardContent-Ys0Vqtd2.js +1 -0
  12. package/dist/assets/{CheckCircle-S9OUyuXN.js → CheckCircle-liPbTkS6.js} +1 -1
  13. package/dist/assets/{Checkbox-bpk8FEQq.js → Checkbox-Bx2RKhbj.js} +1 -1
  14. package/dist/assets/{ChevronRight-ZhfWwF7L.js → ChevronRight-NMNUHQcd.js} +1 -1
  15. package/dist/assets/{DeleteOutline-HeQeIARe.js → DeleteOutline-e-pVPJ10.js} +1 -1
  16. package/dist/assets/{Done-lxTx5lVr.js → Done-W__OCydG.js} +1 -1
  17. package/dist/assets/{Download-4YB-yuKj.js → Download-CRKeZxZn.js} +1 -1
  18. package/dist/assets/{Edit-aojYMuwh.js → Edit-LODr45Fi.js} +1 -1
  19. package/dist/assets/{EditIcon-5jr1bGdL.js → EditIcon-LBnnkl6f.js} +1 -1
  20. package/dist/assets/{ExpandMore-cZ1ewx7g.js → ExpandMore-gplG_N-e.js} +1 -1
  21. package/dist/assets/{FilterList-5j3ihtr9.js → FilterList-2hNiCvPk.js} +4 -4
  22. package/dist/assets/{FormControl-Iaw_dZMd.js → FormControl-UoCRB4Jz.js} +1 -1
  23. package/dist/assets/{FormControlLabel-G_qcyult.js → FormControlLabel-JXaJatAY.js} +1 -1
  24. package/dist/assets/FormGroup-LYg6ohnS.js +1 -0
  25. package/dist/assets/{Google-MEgv3OpG.js → Google-pA-zGfV6.js} +4 -4
  26. package/dist/assets/{Grid-TJcpPsWX.js → Grid-Cq0tl8Rn.js} +1 -1
  27. package/dist/assets/{Hidden-9A_Bbwv_.js → Hidden-dLDh01VC.js} +1 -1
  28. package/dist/assets/{Icon-XsvU9G-o.js → Icon-z5BPr8Nx.js} +1 -1
  29. package/dist/assets/{InfoOutlined-sSTAhtHe.js → InfoOutlined-LvZcP6jX.js} +1 -1
  30. package/dist/assets/{InputAdornment-jFfdz4wH.js → InputAdornment-i3kKzNb4.js} +1 -1
  31. package/dist/assets/{InputLabel-k2mM39EX.js → InputLabel-evB6-1NR.js} +1 -1
  32. package/dist/assets/{LastPage-61aG52DA.js → LastPage--eJf1sYv.js} +1 -1
  33. package/dist/assets/{Launch-bNztZ-H_.js → Launch-H3hBPB77.js} +1 -1
  34. package/dist/assets/{LaunchOutlined-FjF1cuOo.js → LaunchOutlined-Fi5DkFlC.js} +1 -1
  35. package/dist/assets/{ListItem-bizj1vQD.js → ListItem-OwJ_bemn.js} +1 -1
  36. package/dist/assets/{LockIcon-aZHOa9k5.js → LockIcon-8FiITHPK.js} +1 -1
  37. package/dist/assets/{Loop-n57vuQjY.js → Loop-RkvrEzoc.js} +1 -1
  38. package/dist/assets/{MoreHoriz-8XV1gAed.js → MoreHoriz-Krld2BKo.js} +1 -1
  39. package/dist/assets/{MoreVert-gYueO6LR.js → MoreVert-261tWqrz.js} +2 -2
  40. package/dist/assets/{OpenInNew-JbD46P5w.js → OpenInNew-LQ-81H0R.js} +1 -1
  41. package/dist/assets/Pagination-7IbC2E1j.js +2 -0
  42. package/dist/assets/{PlayArrow-irdN46jC.js → PlayArrow-jm3a4suc.js} +1 -1
  43. package/dist/assets/{RadioGroup-M3kUnjun.js → RadioGroup-D24cymg5.js} +1 -1
  44. package/dist/assets/{RevokeIcon-Gc8bXmuP.js → RevokeIcon-WQMnKK0f.js} +1 -1
  45. package/dist/assets/{Search-jPRpZqZ4.js → Search-vTBXAsZL.js} +1 -1
  46. package/dist/assets/{Select-J4ADjpz_.js → Select-SmZrX7GA.js} +2 -2
  47. package/dist/assets/{ServerLogo-fx-tG70I.js → ServerLogo-8Le5auvK.js} +1 -1
  48. package/dist/assets/{Skeleton--yHCDAFp.js → Skeleton-nt2aNRPQ.js} +2 -2
  49. package/dist/assets/{Slider-4kvt-KZB.js → Slider-d4v1rrsa.js} +1 -1
  50. package/dist/assets/{Stepper-axOIRLpt.js → Stepper-EoIiueJu.js} +1 -1
  51. package/dist/assets/{TableRow-Bs46c3E4.js → TableRow-Sa1WiM2f.js} +2 -2
  52. package/dist/assets/{TextField-1Z7QTeCq.js → TextField-YOGEC6UG.js} +1 -1
  53. package/dist/assets/{Toolbar-N0L4ADuv.js → Toolbar-g_XgSwzH.js} +1 -1
  54. package/dist/assets/{access-control-x7g9bHCo.js → access-control-ha2CvR_B.js} +1 -1
  55. package/dist/assets/actions-jNqiX7Ld.js +1 -0
  56. package/dist/assets/{add-component-core-5GNqGw0P.js → add-component-core-yLCSY4wH.js} +55 -106
  57. package/dist/assets/add-resource-Zq7wvJs3.js +1 -0
  58. package/dist/assets/{addon-_kPQ96dg.js → addon-obHI0Hlu.js} +1 -1
  59. package/dist/assets/{analytics-wqZcRJ5e.js → analytics-H1E3QYT7.js} +6 -6
  60. package/dist/assets/api-bqNzLg9V.js +1 -0
  61. package/dist/assets/{audit-logs-MGlmU7TX.js → audit-logs-ZmXjCk-d.js} +1 -1
  62. package/dist/assets/{button-79FD38lW.js → button-In_gPOZd.js} +1 -1
  63. package/dist/assets/{click-to-copy-i9BuOLR_.js → click-to-copy-XhsdyR0H.js} +1 -1
  64. package/dist/assets/{complete-rL8cmbqb.js → complete-xTzV9fpO.js} +3 -3
  65. package/dist/assets/{component-aGMvXt0f.js → component-xzW_-GxW.js} +2 -2
  66. package/dist/assets/{config-dEeuGhMN.js → config-14SNzi7t.js} +2 -2
  67. package/dist/assets/{config-ZPT5SC5S.js → config-UduKbzW1.js} +1 -1
  68. package/dist/assets/{config-navigation-Uj2N3PH9.js → config-navigation-RLlR4gZT.js} +1 -1
  69. package/dist/assets/{index-qLaMcboC.js → config-space-5XfyD3uq.js} +21 -21
  70. package/dist/assets/{confirm--GngDPTA.js → confirm-uXpKSgxe.js} +1 -1
  71. package/dist/assets/{connect-vdertisn.js → connect-EgJ1pw5R.js} +1 -1
  72. package/dist/assets/{connect-CHEQo0a6.js → connect-iOodfP1C.js} +1 -1
  73. package/dist/assets/connect-to--STm1j0r.js +54 -0
  74. package/dist/assets/{content-layout-KidHNGzw.js → content-layout-cxGNkYvv.js} +1 -1
  75. package/dist/assets/{dashboard-qhqjIruK.js → dashboard-VZ-60JmZ.js} +3 -3
  76. package/dist/assets/{did-address-S73i-pdz.js → did-address-2g3VKxYq.js} +1 -1
  77. package/dist/assets/domain-kIh8qZuR.js +9 -0
  78. package/dist/assets/{domain-list-0FjmZGtn.js → domain-list-KUxfUpxv.js} +2 -2
  79. package/dist/assets/{exchange-passport-jwC-4NXh.js → exchange-passport-bVmMiopY.js} +1 -1
  80. package/dist/assets/{fallback-i33j6P7U.js → fallback-K92qnnbp.js} +1 -1
  81. package/dist/assets/{fuel-3TfnRKa8.js → fuel-w6r1qdh0.js} +1 -1
  82. package/dist/assets/{fullpage-KjlhixoJ.js → fullpage-lM2QRYmz.js} +1 -1
  83. package/dist/assets/{home-6llx9wXk.js → home-rnjg5Uln.js} +1 -1
  84. package/dist/assets/{iframe-Yz2pjS5v.js → iframe-P4prqqj1.js} +1 -1
  85. package/dist/assets/{index-k_T7Fb0Z.js → index--eYfa2iB.js} +1 -1
  86. package/dist/assets/{index-aIQYShQ7.js → index--wu_gabw.js} +1 -1
  87. package/dist/assets/{index-1wpQpAq_.js → index-2l_gDibc.js} +12 -12
  88. package/dist/assets/{index-rA7wec7C.js → index-7C-cxYrr.js} +1 -1
  89. package/dist/assets/index-9wi_FbU7.js +201 -0
  90. package/dist/assets/{index-c5BS9vK7.js → index-BK7alHfP.js} +2 -2
  91. package/dist/assets/{index-ltXBEMrY.js → index-Cf01k-zf.js} +1 -1
  92. package/dist/assets/{index-JYzBf_ps.js → index-CjfmWq2Z.js} +9 -9
  93. package/dist/assets/{index-BzHjcQc_.js → index-Cvm-qMrO.js} +1 -1
  94. package/dist/assets/index-KBfdwv7I.js +54 -0
  95. package/dist/assets/{index-mTiuKhw_.js → index-L1aZ_oAt.js} +1 -1
  96. package/dist/assets/{index-lZnVOYie.js → index-LkzRmFOO.js} +1 -1
  97. package/dist/assets/{index-WWP1XuID.js → index-RTZQcUl-.js} +4 -4
  98. package/dist/assets/index-TCTrVMXW.css +1 -0
  99. package/dist/assets/{index-ds223o8U.js → index-Vu5Hi9e4.js} +87 -87
  100. package/dist/assets/{index-INqi1xrq.js → index-Y0SzaOzo.js} +1 -1
  101. package/dist/assets/{index-QCmQ2fyv.js → index-adip-Ngx.js} +7 -7
  102. package/dist/assets/{index-gSkYmla4.js → index-c7FpgR5O.js} +1 -1
  103. package/dist/assets/{index-O4LLF34I.js → index-hEDWKFf1.js} +3 -3
  104. package/dist/assets/index-kVRlFbO-.js +1 -0
  105. package/dist/assets/{index-FkNTqQ-G.js → index-kbsGDZwe.js} +11 -11
  106. package/dist/assets/{index-25p-XmCG.js → index-rNdWQJ8V.js} +5 -5
  107. package/dist/assets/{index-L3aba7lM.js → index-tUGh9zeW.js} +1 -1
  108. package/dist/assets/index-uPi27M7M.js +4 -0
  109. package/dist/assets/{index-D-i4JYjn.js → index-woVElijO.js} +1 -1
  110. package/dist/assets/{index-sTc8gcBt.js → index-xfPw64rO.js} +2 -2
  111. package/dist/assets/{index-JWbVhw8L.js → index-yTk3rOr5.js} +1 -1
  112. package/dist/assets/{index-6KS2jTkQ.js → index-ys1ZtEAO.js} +3 -3
  113. package/dist/assets/{index-_ztLpO_9.js → index-zbEPyFtV.js} +9 -9
  114. package/dist/assets/{index.es-6ul8J6NP.js → index.es-XZ3Qx7aN.js} +3 -3
  115. package/dist/assets/{index.esm-6fmOnLlr.js → index.esm-zHTA4cHV.js} +1 -1
  116. package/dist/assets/inter-latin-400-normal-U9R_j0_y.woff2 +0 -0
  117. package/dist/assets/inter-latin-400-normal-nYvLeTLv.woff +0 -0
  118. package/dist/assets/inter-latin-500-normal--CPASgsZ.woff +0 -0
  119. package/dist/assets/inter-latin-500-normal-JFocBHQx.woff2 +0 -0
  120. package/dist/assets/inter-latin-600-normal-274dML8R.woff +0 -0
  121. package/dist/assets/inter-latin-600-normal-dkrH7PHm.woff2 +0 -0
  122. package/dist/assets/inter-latin-700-normal-hxZXRi9v.woff +0 -0
  123. package/dist/assets/inter-latin-700-normal-ts3xWOyE.woff2 +0 -0
  124. package/dist/assets/inter-latin-900-normal-nKjH9plu.woff +0 -0
  125. package/dist/assets/inter-latin-900-normal-q9Lx9Ocb.woff2 +0 -0
  126. package/dist/assets/inter-latin-ext-400-normal-91vjqTvm.woff2 +0 -0
  127. package/dist/assets/inter-latin-ext-400-normal-PLSM5vss.woff +0 -0
  128. package/dist/assets/inter-latin-ext-500-normal-ErlJEjU1.woff +0 -0
  129. package/dist/assets/inter-latin-ext-500-normal-fbvEP8xx.woff2 +0 -0
  130. package/dist/assets/inter-latin-ext-600-normal-4NAZNGKz.woff +0 -0
  131. package/dist/assets/inter-latin-ext-600-normal-GqN-XZEm.woff2 +0 -0
  132. package/dist/assets/inter-latin-ext-700-normal-bu5Rtp3b.woff +0 -0
  133. package/dist/assets/inter-latin-ext-700-normal-gGtzKlLf.woff2 +0 -0
  134. package/dist/assets/inter-latin-ext-900-normal-93Wi4WDd.woff2 +0 -0
  135. package/dist/assets/inter-latin-ext-900-normal-eZXZQAvt.woff +0 -0
  136. package/dist/assets/{invite-4KxApyGd.js → invite-HGTaOopJ.js} +4 -4
  137. package/dist/assets/{issue-passport-Y4vJKWqY.js → issue-passport-dNZHjXJy.js} +1 -1
  138. package/dist/assets/{jss-plugin-props-sort.esm-bNdFmmWI.js → jss-plugin-props-sort.esm-4cc6LQ6N.js} +6 -6
  139. package/dist/assets/{launch-result-message-Gw05aJFc.js → launch-result-message-J5dZdjK9.js} +1 -1
  140. package/dist/assets/{layout-C_Yf85LS.js → layout-edWgKFS3.js} +1 -1
  141. package/dist/assets/{list-header-bF3C4y8d.js → list-header-cakMMeA9.js} +1 -1
  142. package/dist/assets/localization-LX2eCkms.js +1 -0
  143. package/dist/assets/{log-BvldHTmh.js → log-IJfNDeYa.js} +1 -1
  144. package/dist/assets/{login-pk5p7Zm2.js → login-GFXOoAOs.js} +1 -1
  145. package/dist/assets/{logo-uploader-lI4X4VyO.js → logo-uploader-Z7R8hvrQ.js} +3 -3
  146. package/dist/assets/{lost-passport-v7okomzq.js → lost-passport-rJt-K7ao.js} +3 -3
  147. package/dist/assets/{lottie-VjkVRY5T.js → lottie-THFzP1dC.js} +1 -1
  148. package/dist/assets/{notifications--C91qrT9.js → notifications-zMxY5VrS.js} +1 -1
  149. package/dist/assets/overview-dbKDHJQN.js +12 -0
  150. package/dist/assets/{page-header-AQjn6nUv.js → page-header-sm7Rcxwn.js} +1 -1
  151. package/dist/assets/{permission-KafxxvQ7.js → permission-dR7440gE.js} +1 -1
  152. package/dist/assets/{preferences-pNKXWhy8.js → preferences-WASfgwxe.js} +1 -1
  153. package/dist/assets/publish-resource-IPB1hxMa.js +1 -0
  154. package/dist/assets/react-cZEwd1y6.js +84 -0
  155. package/dist/assets/selector-PHzkH1QT.js +46 -0
  156. package/dist/assets/session-i2sKQu5g.js +1 -0
  157. package/dist/assets/setup-2IHOhLHH.js +19 -0
  158. package/dist/assets/{slicedToArray-iHBV1AH4.js → slicedToArray-rOQW0Qdz.js} +2 -2
  159. package/dist/assets/{spaces-KSL0u-_T.js → spaces-oi0UGr9V.js} +1 -1
  160. package/dist/assets/{start-6xcmlia7.js → start-kQG_xGdG.js} +1 -1
  161. package/dist/assets/{step-actions-IPtbge50.js → step-actions-eDIWEra3.js} +1 -1
  162. package/dist/assets/{studio-bzUKQWFR.js → studio-V05Kluaj.js} +1 -1
  163. package/dist/assets/{switch-control-zTdiwn5t.js → switch-control--qsuqvPZ.js} +1 -1
  164. package/dist/assets/{toUpper-9QpYH1G_.js → toUpper-2JfnfjSv.js} +1 -1
  165. package/dist/assets/{transfer-j5wSdn6J.js → transfer-_k5LHiPs.js} +1 -1
  166. package/dist/assets/ubuntu-mono-cyrillic-400-normal-Cet8Npzg.woff +0 -0
  167. package/dist/assets/ubuntu-mono-cyrillic-ext-400-normal-0Nr3QbWH.woff +0 -0
  168. package/dist/assets/ubuntu-mono-greek-400-normal-nPPFGWwV.woff +0 -0
  169. package/dist/assets/ubuntu-mono-greek-ext-400-normal-KdFZVwFm.woff +0 -0
  170. package/dist/assets/ubuntu-mono-latin-400-normal-Dp4O8cuq.woff +0 -0
  171. package/dist/assets/ubuntu-mono-latin-ext-400-normal-Ib0NXz3I.woff2 +0 -0
  172. package/dist/assets/ubuntu-mono-latin-ext-400-normal-QZPQh_Ya.woff +0 -0
  173. package/dist/assets/{uniqBy-T_x9cNk1.js → uniqBy-j0q8aAHN.js} +1 -1
  174. package/dist/assets/{unsubscribe-Qg8Pj5wI.js → unsubscribe-SgffzzOj.js} +1 -1
  175. package/dist/assets/use-blocklet-info-for-connect-did-spaces-7lIoXyoo.js +1 -0
  176. package/dist/assets/{useAsync-mWViTVP2.js → useAsync-Jl2-1Zhx.js} +1 -1
  177. package/dist/assets/{useFormControl-12MXghSo.js → useFormControl-ow2ZyMxu.js} +1 -1
  178. package/dist/assets/{useLocalStorage-B1umTbBO.js → useLocalStorage-g0dvG-aI.js} +1 -1
  179. package/dist/assets/{useSetState-F_JO3EPl.js → useSetState-k-0ecZPo.js} +1 -1
  180. package/dist/assets/user-center-Ri39cNVy.js +1 -0
  181. package/dist/assets/{util-Rw0-l4ul.js → util-IkWr1k8x.js} +1 -1
  182. package/dist/assets/{wrap-locale-BVbpwtIA.js → wrap-locale-vxpb_1WH.js} +1 -1
  183. package/dist/index.html +3 -4
  184. package/dist/manifest.webmanifest +1 -0
  185. package/dist/registerSW.js +1 -0
  186. package/dist/service-worker.js +1752 -2
  187. package/package.json +32 -31
  188. package/api/libs/spaces.js +0 -18
  189. package/dist/assets/Avatar-oXf5RLvL.js +0 -1
  190. package/dist/assets/CardContent-tbyZYmTd.js +0 -1
  191. package/dist/assets/FormGroup-o1EmG4rX.js +0 -1
  192. package/dist/assets/Pagination-oHY7RLeB.js +0 -2
  193. package/dist/assets/actions-iHA8qJjX.js +0 -1
  194. package/dist/assets/add-resource-HL_BNW_N.js +0 -1
  195. package/dist/assets/api-tCRKkuhZ.js +0 -1
  196. package/dist/assets/domain-nrgrnfgm.js +0 -9
  197. package/dist/assets/index-E1X2qGyA.js +0 -203
  198. package/dist/assets/index-Fay2ci-b.css +0 -1
  199. package/dist/assets/index-K1mxBnoK.js +0 -57
  200. package/dist/assets/index-ar7tP4SD.js +0 -54
  201. package/dist/assets/index-xJrYV_5m.js +0 -1
  202. package/dist/assets/lato-all-400-normal-J9JTbfbq.woff +0 -0
  203. package/dist/assets/lato-all-700-normal-hoWrJF_J.woff +0 -0
  204. package/dist/assets/lato-latin-400-normal-RIbX5ua0.woff2 +0 -0
  205. package/dist/assets/lato-latin-700-normal-VBjIIp-A.woff2 +0 -0
  206. package/dist/assets/lato-latin-ext-400-normal-vHgWfo9s.woff2 +0 -0
  207. package/dist/assets/lato-latin-ext-700-normal-uVlnzcMZ.woff2 +0 -0
  208. package/dist/assets/localization-162fXA43.js +0 -1
  209. package/dist/assets/overview-N1gtrKny.js +0 -12
  210. package/dist/assets/publish-resource-4zTF4AxH.js +0 -1
  211. package/dist/assets/react-BlEMLZWR.js +0 -87
  212. package/dist/assets/selector-e2Rb6BOt.js +0 -46
  213. package/dist/assets/session-Ry1S0mrL.js +0 -1
  214. package/dist/assets/setup-p8WSRnEO.js +0 -19
  215. package/dist/assets/ubuntu-mono-all-400-normal-bPeWxOcj.woff +0 -0
  216. package/dist/assets/ubuntu-mono-latin-ext-400-normal-pKhfBlxE.woff2 +0 -0
  217. package/dist/assets/use-blocklet-info-for-connect-did-spaces-ksjvoMK5.js +0 -1
  218. package/dist/assets/user-center-0l-lnKor.js +0 -1
@@ -1,4 +1,5 @@
1
1
  // Holds shared logic for session-manager v1 and v2
2
+ const { joinURL } = require('ufo');
2
3
  const get = require('lodash/get');
3
4
  const joinUrl = require('url-join');
4
5
  const formatContext = require('@abtnode/util/lib/format-context');
@@ -35,12 +36,19 @@ const {
35
36
  const { getKeyPairClaim, getAuthPrincipalForMigrateAppToV2 } = require('@abtnode/auth/lib/server');
36
37
  const merge = require('lodash/merge');
37
38
  const { fromAppDid } = require('@arcblock/did-ext');
38
- const { LOGIN_PROVIDER } = require('@blocklet/constant');
39
+ const { LOGIN_PROVIDER, BLOCKLET_APP_SPACE_REQUIREMENT, DID_SPACES } = require('@blocklet/constant');
39
40
  const pick = require('lodash/pick');
40
41
  const createTranslator = require('@abtnode/util/lib/translate');
41
-
42
- const { getRolesFromAuthConfig, getBlockletAppIdList } = require('@blocklet/meta/lib/util');
42
+ const {
43
+ getRolesFromAuthConfig,
44
+ getBlockletAppIdList,
45
+ forEachBlockletSync,
46
+ getAppName,
47
+ getAppDescription,
48
+ getAppUrl,
49
+ } = require('@blocklet/meta/lib/util');
43
50
  const { getSourceAppPid, getLoginProvider } = require('@blocklet/sdk/lib/util/login');
51
+ const { getDidSpacesInfoByClaims, silentAuthorizationInConnect } = require('@abtnode/auth/lib/util/spaces');
44
52
 
45
53
  const logger = require('../logger')('connect');
46
54
  const { isInvitedUserOnly, createTokenFn, getDidConnectVersion } = require('../../util');
@@ -142,9 +150,34 @@ const checkAppOwner = ({ role, blocklet, userDid, locale = 'en' }) => {
142
150
  }
143
151
  };
144
152
 
153
+ /**
154
+ * @description
155
+ * @param {import('@abtnode/client').BlockletState} blocklet
156
+ * @return {boolean}
157
+ */
158
+ const isDidSpaceRequiredOnConnect = (blocklet) => {
159
+ let flag = false;
160
+
161
+ forEachBlockletSync(blocklet, (b) => {
162
+ flag = flag || b?.meta?.capabilities?.didSpace === BLOCKLET_APP_SPACE_REQUIREMENT.REQUIRED_ON_CONNECT;
163
+ });
164
+
165
+ return !!flag;
166
+ };
167
+
145
168
  module.exports = {
146
169
  login: {
147
- onConnect: async ({ node, request, userDid, locale, passportId = '', componentId, action, baseUrl }) => {
170
+ /**
171
+ *
172
+ * @param {{
173
+ * node: import('@abtnode/core').TNode
174
+ * }} param0
175
+ * @returns
176
+ */
177
+ onConnect: async ({ node, request, userDid, locale = 'en', passportId = '', componentId, action, baseUrl }) => {
178
+ /**
179
+ * @type {import('@abtnode/client').BlockletState}
180
+ */
148
181
  const blocklet = await request.getBlocklet();
149
182
  const config = await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
150
183
  const { did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
@@ -174,6 +207,35 @@ module.exports = {
174
207
  if (passportId) {
175
208
  claims.verifiableCredential.target = passportId;
176
209
  }
210
+
211
+ // attach assetOrVC claim when space is required for user
212
+ if (isDidSpaceRequiredOnConnect(blocklet)) {
213
+ const currentUser = await node.getUser({
214
+ teamDid,
215
+ user: {
216
+ did: userDid,
217
+ },
218
+ });
219
+
220
+ if (!currentUser?.didSpace?.endpoint) {
221
+ // 当这个用户没有 didSpace endpoint 时,我们需要用户主动授权
222
+ claims.assetOrVC = {
223
+ description: messages.requestDidSpace[locale],
224
+ optional: false,
225
+ filters: [
226
+ {
227
+ tag: DID_SPACES.NFT_TAG, // 用于筛选 NFT
228
+ },
229
+ {
230
+ type: DID_SPACES.VC_TYPES, // 用于筛选 VC
231
+ },
232
+ ],
233
+ meta: {
234
+ purpose: 'DidSpace',
235
+ },
236
+ };
237
+ }
238
+ }
177
239
  }
178
240
 
179
241
  if (action === 'exchangePassport') {
@@ -203,297 +265,390 @@ module.exports = {
203
265
  return claims;
204
266
  },
205
267
 
206
- onApprove: async ({
207
- node,
208
- request,
209
- locale,
210
- challenge,
211
- userDid,
212
- userPk,
213
- claims,
214
- baseUrl,
215
- createSessionToken,
216
- componentId,
217
- action,
218
- visitorId,
219
- }) => {
220
- const blocklet = await request.getBlocklet();
221
- const blockletInfo = await request.getBlockletInfo();
222
- const { wallet, secret, name, passportColor, did: teamDid } = blockletInfo;
223
- const sourceAppPid = getSourceAppPid(request);
224
-
225
- // Check user approved
226
- const currentUser = await getUserWithinFederated({ sourceAppPid, teamDid, userDid, userPk }, { node, blocklet });
227
- if (currentUser && !currentUser.approved) {
228
- throw new Error(messages.notAllowed[locale]);
229
- }
268
+ onApprove:
269
+ /**
270
+ * @description
271
+ * @param {{
272
+ * node: import('@abtnode/core').TNode,
273
+ * claims: any[],
274
+ * }} {
275
+ * node,
276
+ * request,
277
+ * locale,
278
+ * challenge,
279
+ * userDid,
280
+ * userPk,
281
+ * claims,
282
+ * baseUrl,
283
+ * createSessionToken,
284
+ * componentId,
285
+ * action,
286
+ * visitorId,
287
+ * }
288
+ * @return {*}
289
+ */
290
+ async ({
291
+ node,
292
+ request,
293
+ locale,
294
+ challenge,
295
+ userDid,
296
+ userPk,
297
+ claims,
298
+ baseUrl,
299
+ createSessionToken,
300
+ componentId,
301
+ action,
302
+ visitorId,
303
+ }) => {
304
+ /** @type {import('@abtnode/client').BlockletState} */
305
+ const blocklet = await request.getBlocklet();
306
+ const blockletInfo = await request.getBlockletInfo();
307
+ const { wallet, secret, name, passportColor, did: teamDid } = blockletInfo;
308
+ const sourceAppPid = getSourceAppPid(request);
309
+
310
+ // Check user approved
311
+ const currentUser = await getUserWithinFederated(
312
+ { sourceAppPid, teamDid, userDid, userPk },
313
+ { node, blocklet }
314
+ );
315
+ if (currentUser && !currentUser.approved) {
316
+ throw new Error(messages.notAllowed[locale]);
317
+ }
230
318
 
231
- const realDid = currentUser?.did || userDid;
232
- const realPk = currentUser?.pk || userPk;
319
+ const realDid = currentUser?.did || userDid;
320
+ const realPk = currentUser?.pk || userPk;
321
+
322
+ // Get auth config
323
+ const authConfig = (await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId })) || {};
324
+
325
+ let vc;
326
+ let nftState;
327
+ let invitedUserOnly = false;
328
+ let defaultRole = ROLES.GUEST;
329
+ let defaultTtl = 0;
330
+ let defaultTtlPolicy = 'never';
331
+ let issuePassport = false;
332
+
333
+ const provider = getLoginProvider(request);
334
+ const masterSite = getFederatedMaster(blocklet);
335
+
336
+ // Get passport vc
337
+ if (action === 'login') {
338
+ vc = await getPassportVc({
339
+ blocklet,
340
+ claims,
341
+ challenge,
342
+ locale,
343
+ sourceAppPid,
344
+ });
345
+ [invitedUserOnly, defaultRole, issuePassport] = await isInvitedUserOnly(authConfig, node, teamDid);
346
+ if (invitedUserOnly && !vc) {
347
+ throw new Error(messages.missingCredentialClaim[locale]);
348
+ }
349
+ const shouldConnectSpace = claims.some(
350
+ (x) => x?.meta?.purpose === 'DidSpace' && ['asset', 'verifiableCredential'].includes(x.type)
351
+ );
352
+ if (shouldConnectSpace) {
353
+ const didSpaceInfo = await getDidSpacesInfoByClaims({ claims });
354
+
355
+ const appUrl = getAppUrl(blocklet);
356
+ const { data } = await silentAuthorizationInConnect(didSpaceInfo, {
357
+ appInfo: {
358
+ appDid: blocklet.appDid,
359
+ appName: getAppName(blocklet),
360
+ appDescription: getAppDescription(blocklet),
361
+ appUrl,
362
+ scopes: 'list:object read:object write:object',
363
+ referrer: joinURL(appUrl, '/.well-known/service/connect'),
364
+ },
365
+ verifyNFTParams: {
366
+ claims,
367
+ challenge,
368
+ locale,
369
+ },
370
+ });
233
371
 
234
- // Get auth config
235
- const authConfig = (await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId })) || {};
372
+ /**
373
+ * @type {Omit<import('@abtnode/client').SpaceGatewayInput, 'protected'>}
374
+ */
375
+ const spaceGateway = {
376
+ did: data.did,
377
+ name: data.name,
378
+ endpoint: data.endpoint,
379
+ url: didSpaceInfo.didSpacesCoreUrl,
380
+ };
381
+
382
+ const user = await node.getUser({
383
+ teamDid,
384
+ user: {
385
+ did: userDid,
386
+ },
387
+ });
236
388
 
237
- let vc;
238
- let nftState;
239
- let invitedUserOnly = false;
240
- let defaultRole = ROLES.GUEST;
241
- let defaultTtl = 0;
242
- let defaultTtlPolicy = 'never';
243
- let issuePassport = false;
389
+ await node.updateUser({
390
+ teamDid,
391
+ user: {
392
+ did: userDid,
393
+ didSpace: {
394
+ ...user.didSpace,
395
+ ...spaceGateway,
396
+ },
397
+ },
398
+ });
399
+ }
400
+ } else if (action === 'exchangePassport') {
401
+ const claim = claims.find((x) => x.type === 'asset');
402
+ const isConnected = await node.isConnectedAccount({ teamDid, did: claim.asset });
403
+ if (isConnected) {
404
+ throw new Error(messages.nftAlreadyUsed[locale]);
405
+ }
244
406
 
245
- const provider = getLoginProvider(request);
246
- const masterSite = getFederatedMaster(blocklet);
407
+ nftState = await verifyNFT({ claims, challenge, locale, chainHost: MAIN_CHAIN_ENDPOINT });
408
+ const matchFactory = blocklet.trustedFactories.find((x) => x.factoryAddress === nftState.parent);
409
+ if (!matchFactory) {
410
+ throw new Error(messages.invalidNftParent[locale]);
411
+ }
247
412
 
248
- // Get passport vc
249
- if (action === 'login') {
250
- vc = await getPassportVc({ blocklet, claims, challenge, locale, sourceAppPid });
251
- [invitedUserOnly, defaultRole, issuePassport] = await isInvitedUserOnly(authConfig, node, teamDid);
252
- if (invitedUserOnly && !vc) {
253
- throw new Error(messages.missingCredentialClaim[locale]);
254
- }
255
- } else if (action === 'exchangePassport') {
256
- const claim = claims.find((x) => x.type === 'asset');
257
- const isConnected = await node.isConnectedAccount({ teamDid, did: claim.asset });
258
- if (isConnected) {
259
- throw new Error(messages.nftAlreadyUsed[locale]);
413
+ defaultRole = matchFactory.passport.role;
414
+ defaultTtl = matchFactory.passport.ttl;
415
+ defaultTtlPolicy = matchFactory.passport.ttlPolicy;
416
+ issuePassport = true;
260
417
  }
261
418
 
262
- nftState = await verifyNFT({ claims, challenge, locale, chainHost: MAIN_CHAIN_ENDPOINT });
263
- const matchFactory = blocklet.trustedFactories.find((x) => x.factoryAddress === nftState.parent);
264
- if (!matchFactory) {
265
- throw new Error(messages.invalidNftParent[locale]);
266
- }
419
+ if (issuePassport) {
420
+ let expirationDate;
421
+ if (nftState && defaultTtl) {
422
+ if (defaultTtlPolicy === 'mint') {
423
+ expirationDate = +new Date(nftState.context.genesisTime) + defaultTtl;
424
+ }
425
+ if (defaultTtlPolicy === 'exchange') {
426
+ expirationDate = +new Date() + defaultTtl;
427
+ }
428
+ }
267
429
 
268
- defaultRole = matchFactory.passport.role;
269
- defaultTtl = matchFactory.passport.ttl;
270
- defaultTtlPolicy = matchFactory.passport.ttlPolicy;
271
- issuePassport = true;
272
- }
430
+ logger.info(`issue passport to user at the ${action} workflow`, {
431
+ role: defaultRole,
432
+ expire: expirationDate,
433
+ policy: defaultTtlPolicy,
434
+ ttl: defaultTtl,
435
+ });
273
436
 
274
- if (issuePassport) {
275
- let expirationDate;
276
- if (nftState && defaultTtl) {
277
- if (defaultTtlPolicy === 'mint') {
278
- expirationDate = +new Date(nftState.context.genesisTime) + defaultTtl;
279
- }
280
- if (defaultTtlPolicy === 'exchange') {
281
- expirationDate = +new Date() + defaultTtl;
282
- }
437
+ const profile = claims.find((x) => x.type === 'profile');
438
+ vc = createPassportVC({
439
+ issuerName: name,
440
+ issuerWallet: wallet,
441
+ issuerAvatarUrl: getAppAvatarUrl(baseUrl),
442
+ ownerDid: realDid,
443
+ passport: await createPassport({
444
+ name: defaultRole,
445
+ node,
446
+ teamDid,
447
+ locale,
448
+ endpoint: baseUrl,
449
+ }),
450
+ endpoint: getPassportStatusEndpoint({
451
+ baseUrl: joinUrl(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX),
452
+ userDid: realDid,
453
+ teamDid,
454
+ }),
455
+ ownerProfile: profile,
456
+ preferredColor: passportColor,
457
+ expirationDate: expirationDate ? new Date(expirationDate).toISOString() : undefined,
458
+ });
283
459
  }
284
460
 
285
- logger.info(`issue passport to user at the ${action} workflow`, {
286
- role: defaultRole,
287
- expire: expirationDate,
288
- policy: defaultTtlPolicy,
289
- ttl: defaultTtl,
290
- });
461
+ // Get user passport from vc
462
+ let passport = vc ? createUserPassport(vc) : null;
463
+ if (currentUser && passport && isUserPassportRevoked(currentUser, passport)) {
464
+ throw new Error(messages.passportRevoked[locale](passport.title, name));
465
+ }
291
466
 
292
- const profile = claims.find((x) => x.type === 'profile');
293
- vc = createPassportVC({
294
- issuerName: name,
295
- issuerWallet: wallet,
296
- issuerAvatarUrl: getAppAvatarUrl(baseUrl),
297
- ownerDid: realDid,
298
- passport: await createPassport({
299
- name: defaultRole,
300
- node,
301
- teamDid,
302
- locale,
303
- endpoint: baseUrl,
304
- }),
305
- endpoint: getPassportStatusEndpoint({
306
- baseUrl: joinUrl(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX),
307
- userDid: realDid,
308
- teamDid,
309
- }),
310
- ownerProfile: profile,
311
- preferredColor: passportColor,
312
- expirationDate: expirationDate ? new Date(expirationDate).toISOString() : undefined,
313
- });
314
- }
467
+ // Get role
468
+ const role = await getRoleFromVC({ vc, node, locale, blocklet, teamDid, sourceAppPid });
469
+ await validateRole({ role, authConfig, locale, node, teamDid });
315
470
 
316
- // Get user passport from vc
317
- let passport = vc ? createUserPassport(vc) : null;
318
- if (currentUser && passport && isUserPassportRevoked(currentUser, passport)) {
319
- throw new Error(messages.passportRevoked[locale](passport.title, name));
320
- }
471
+ checkAppOwner({ role, blocklet, userDid, locale });
321
472
 
322
- // Get role
323
- const role = await getRoleFromVC({ vc, node, locale, blocklet, teamDid, sourceAppPid });
324
- await validateRole({ role, authConfig, locale, node, teamDid });
325
-
326
- checkAppOwner({ role, blocklet, userDid, locale });
473
+ // Recreate passport with correct role
474
+ passport = vc ? createUserPassport(vc, { role }) : null;
327
475
 
328
- // Recreate passport with correct role
329
- passport = vc ? createUserPassport(vc, { role }) : null;
476
+ const now = new Date().toISOString();
477
+ const connectedNft = nftState
478
+ ? {
479
+ provider: LOGIN_PROVIDER.NFT,
480
+ did: nftState.address,
481
+ owner: nftState.owner,
482
+ firstLoginAt: now,
483
+ lastLoginAt: now,
484
+ }
485
+ : null;
330
486
 
331
- const now = new Date().toISOString();
332
- const connectedNft = nftState
333
- ? {
334
- provider: LOGIN_PROVIDER.NFT,
335
- did: nftState.address,
336
- owner: nftState.owner,
337
- firstLoginAt: now,
338
- lastLoginAt: now,
339
- }
340
- : null;
487
+ let fullName = currentUser?.fullName;
488
+ // Update profile
489
+ const passportForLog = passport || { name: 'Guest', role: 'guest' };
341
490
 
342
- let fullName = currentUser?.fullName;
343
- // Update profile
344
- const passportForLog = passport || { name: 'Guest', role: 'guest' };
491
+ const connectAccount = { provider, did: userDid, pk: userPk };
345
492
 
346
- const connectAccount = { provider, did: userDid, pk: userPk };
493
+ let updatedUser;
494
+ if (currentUser) {
495
+ updatedUser = await node.loginUser({
496
+ teamDid,
497
+ user: {
498
+ did: currentUser.did,
499
+ pk: currentUser.pk,
500
+ locale,
501
+ passport,
502
+ sourceAppPid,
503
+ lastLoginIp: get(request, 'headers[x-real-ip]') || '',
504
+ connectedAccount: [connectAccount, connectedNft],
505
+ },
506
+ });
507
+ await node.createAuditLog(
508
+ {
509
+ action,
510
+ args: { teamDid, userDid: realDid, passport: passportForLog, provider, sourceAppPid },
511
+ context: formatContext(Object.assign(request, { user: updatedUser })),
512
+ result: updatedUser,
513
+ },
514
+ node
515
+ );
516
+ } else {
517
+ // Create user
518
+ const profile = claims.find((x) => x.type === 'profile');
519
+ fullName = profile.fullName;
520
+
521
+ updatedUser = await node.loginUser({
522
+ teamDid,
523
+ user: {
524
+ ...profile,
525
+ avatar: await extractUserAvatar(get(profile, 'avatar'), {
526
+ dataDir: blocklet.env.dataDir,
527
+ }),
528
+ did: realDid,
529
+ pk: realPk,
530
+ locale,
531
+ passport,
532
+ sourceAppPid,
533
+ lastLoginIp: get(request, 'headers[x-real-ip]') || '',
534
+ connectedAccount: [connectAccount, connectedNft],
535
+ },
536
+ });
537
+ await node.createAuditLog(
538
+ {
539
+ action: 'addUser',
540
+ args: {
541
+ teamDid,
542
+ userDid: realDid,
543
+ sourceAppPid,
544
+ provider,
545
+ reason: `first login as ${passportForLog.role}`,
546
+ },
547
+ context: formatContext(Object.assign(request, { user: updatedUser })),
548
+ result: updatedUser,
549
+ },
550
+ node
551
+ );
552
+ }
553
+ const lastLoginIp = request.headers['x-real-ip'];
554
+ const ua = request.headers['user-agent'];
555
+ // request.context.store.connectedWallet
556
+ const walletOS = request.context.didwallet.os;
347
557
 
348
- let updatedUser;
349
- if (currentUser) {
350
- updatedUser = await node.loginUser({
558
+ const userSessionDoc = await node.upsertUserSession({
351
559
  teamDid,
352
- user: {
353
- did: currentUser.did,
354
- pk: currentUser.pk,
355
- locale,
356
- passport,
357
- sourceAppPid,
358
- lastLoginIp: get(request, 'headers[x-real-ip]') || '',
359
- connectedAccount: [connectAccount, connectedNft],
560
+ visitorId,
561
+ userDid: realDid,
562
+ appPid: teamDid,
563
+ passportId: passport?.id,
564
+ status: 'online',
565
+ ua,
566
+ lastLoginIp,
567
+ extra: {
568
+ walletOS,
360
569
  },
361
570
  });
362
- await node.createAuditLog(
363
- {
364
- action,
365
- args: { teamDid, userDid: realDid, passport: passportForLog, provider, sourceAppPid },
366
- context: formatContext(Object.assign(request, { user: updatedUser })),
367
- result: updatedUser,
368
- },
571
+
572
+ if (shouldSyncFederated(sourceAppPid, blocklet)) {
369
573
  node
370
- );
371
- } else {
372
- // Create user
373
- const profile = claims.find((x) => x.type === 'profile');
374
- fullName = profile.fullName;
574
+ .syncFederated({
575
+ did: teamDid,
576
+ data: {
577
+ users: [
578
+ {
579
+ did: updatedUser.did,
580
+ pk: updatedUser.pk,
581
+ fullName: updatedUser.fullName,
582
+ email: updatedUser.email || '',
583
+ avatar: getUserAvatarUrl(updatedUser.avatar, blocklet),
584
+ connectedAccount: [connectAccount, connectedNft],
585
+ action: 'connectAccount',
586
+ sourceAppPid: sourceAppPid || masterSite.appPid,
587
+ },
588
+ ],
589
+ },
590
+ })
591
+ .then(() => {
592
+ node.syncUserSession({
593
+ teamDid,
594
+ userDid: realDid,
595
+ visitorId: userSessionDoc.visitorId,
596
+ passportId: passport?.id,
597
+ targetAppPid: sourceAppPid,
598
+ ua,
599
+ lastLoginIp,
600
+ extra: {
601
+ walletOS,
602
+ },
603
+ });
604
+ });
605
+ }
375
606
 
376
- updatedUser = await node.loginUser({
377
- teamDid,
378
- user: {
379
- ...profile,
380
- avatar: await extractUserAvatar(get(profile, 'avatar'), {
381
- dataDir: blocklet.env.dataDir,
382
- }),
383
- did: realDid,
384
- pk: realPk,
385
- locale,
386
- passport,
387
- sourceAppPid,
388
- lastLoginIp: get(request, 'headers[x-real-ip]') || '',
389
- connectedAccount: [connectAccount, connectedNft],
390
- },
391
- });
392
- await node.createAuditLog(
607
+ // Generate new session token that client can save to localStorage
608
+ const createToken = createTokenFn(createSessionToken);
609
+ const sessionConfig = blocklet.settings?.session || {};
610
+
611
+ const { sessionToken, refreshToken } = createToken(
612
+ realDid,
393
613
  {
394
- action: 'addUser',
395
- args: {
396
- teamDid,
397
- userDid: realDid,
398
- sourceAppPid,
399
- provider,
400
- reason: `first login as ${passportForLog.role}`,
401
- },
402
- context: formatContext(Object.assign(request, { user: updatedUser })),
403
- result: updatedUser,
614
+ secret,
615
+ passport,
616
+ role,
617
+ fullName,
618
+ // NOTE: token 中存储当前的 login provider
619
+ provider,
620
+ walletOS,
404
621
  },
405
- node
622
+ { ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
406
623
  );
407
- }
408
- const lastLoginIp = request.headers['x-real-ip'];
409
- const ua = request.headers['user-agent'];
410
- // request.context.store.connectedWallet
411
- const walletOS = request.context.didwallet.os;
412
-
413
- const userSessionDoc = await node.upsertUserSession({
414
- teamDid,
415
- visitorId,
416
- userDid: realDid,
417
- appPid: teamDid,
418
- passportId: passport?.id,
419
- status: 'online',
420
- ua,
421
- lastLoginIp,
422
- extra: {
423
- walletOS,
424
- },
425
- });
624
+ logger.info(`${action}.success`, { userDid: realDid, role });
625
+
626
+ if (
627
+ // if user provides owner passport AND app does not have owner, set this user to owner
628
+ (vc && role === ROLES.OWNER && !blocklet.settings?.owner) ||
629
+ // if the user will receive a owner passport AND app does not have owner, set this user to owner
630
+ (issuePassport && defaultRole === ROLES.OWNER && !blocklet.settings?.owner)
631
+ ) {
632
+ logger.info('Bind owner for blocklet', { teamDid, userDid: realDid });
633
+ await node.setBlockletInitialized({ did: teamDid, owner: { did: realDid, pk: realPk } });
634
+ }
426
635
 
427
- if (shouldSyncFederated(sourceAppPid, blocklet)) {
428
- node
429
- .syncFederated({
430
- did: teamDid,
431
- data: {
432
- users: [
433
- {
434
- did: updatedUser.did,
435
- pk: updatedUser.pk,
436
- fullName: updatedUser.fullName,
437
- email: updatedUser.email || '',
438
- avatar: getUserAvatarUrl(updatedUser.avatar, blocklet),
439
- connectedAccount: [connectAccount, connectedNft],
440
- action: 'connectAccount',
441
- sourceAppPid: sourceAppPid || masterSite.appPid,
442
- },
443
- ],
444
- },
445
- })
446
- .then(() => {
447
- node.syncUserSession({
448
- teamDid,
636
+ // issue passport for the first login user in a invite-only team
637
+ if (issuePassport) {
638
+ return {
639
+ disposition: 'attachment',
640
+ type: 'VerifiableCredential',
641
+ data: vc,
642
+ sessionToken,
643
+ refreshToken,
644
+ visitorId: userSessionDoc.visitorId,
645
+ nextWorkflowData: {
449
646
  userDid: realDid,
450
- visitorId: userSessionDoc.visitorId,
451
- passportId: passport?.id,
452
- targetAppPid: sourceAppPid,
453
- ua,
454
- lastLoginIp,
455
- extra: {
456
- walletOS,
457
- },
458
- });
459
- });
460
- }
461
-
462
- // Generate new session token that client can save to localStorage
463
- const createToken = createTokenFn(createSessionToken);
464
- const sessionConfig = blocklet.settings?.session || {};
465
-
466
- const { sessionToken, refreshToken } = createToken(
467
- realDid,
468
- {
469
- secret,
470
- passport,
471
- role,
472
- fullName,
473
- // NOTE: token 中存储当前的 login provider
474
- provider,
475
- walletOS,
476
- },
477
- { ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
478
- );
479
- logger.info(`${action}.success`, { userDid: realDid, role });
480
-
481
- if (
482
- // if user provides owner passport AND app does not have owner, set this user to owner
483
- (vc && role === ROLES.OWNER && !blocklet.settings?.owner) ||
484
- // if the user will receive a owner passport AND app does not have owner, set this user to owner
485
- (issuePassport && defaultRole === ROLES.OWNER && !blocklet.settings?.owner)
486
- ) {
487
- logger.info('Bind owner for blocklet', { teamDid, userDid: realDid });
488
- await node.setBlockletInitialized({ did: teamDid, owner: { did: realDid, pk: realPk } });
489
- }
647
+ },
648
+ };
649
+ }
490
650
 
491
- // issue passport for the first login user in a invite-only team
492
- if (issuePassport) {
493
651
  return {
494
- disposition: 'attachment',
495
- type: 'VerifiableCredential',
496
- data: vc,
497
652
  sessionToken,
498
653
  refreshToken,
499
654
  visitorId: userSessionDoc.visitorId,
@@ -501,17 +656,7 @@ module.exports = {
501
656
  userDid: realDid,
502
657
  },
503
658
  };
504
- }
505
-
506
- return {
507
- sessionToken,
508
- refreshToken,
509
- visitorId: userSessionDoc.visitorId,
510
- nextWorkflowData: {
511
- userDid: realDid,
512
- },
513
- };
514
- },
659
+ },
515
660
  },
516
661
 
517
662
  switchProfile: {