@abtnode/blocklet-services 1.16.41 → 1.16.42-beta-20250403-230303-c167c6a1

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 (332) hide show
  1. package/api/emails/_templates/verify-code-body.js +4 -4
  2. package/api/index.js +4 -1
  3. package/api/libs/connect/session.js +4 -6
  4. package/api/libs/jwt.js +3 -3
  5. package/api/libs/push-kit/index.js +5 -2
  6. package/api/routes/blocklet.js +1 -1
  7. package/api/routes/federated.js +12 -2
  8. package/api/routes/oauth.js +56 -270
  9. package/api/routes/user-session.js +40 -19
  10. package/api/routes/user.js +254 -266
  11. package/api/services/auth/connect/invite.js +4 -6
  12. package/api/services/auth/connect/issue-passport.js +4 -6
  13. package/api/services/auth/session.js +5 -6
  14. package/api/services/notification/index.js +20 -16
  15. package/api/services/notification/queue.js +9 -1
  16. package/api/socket/channel/did.js +8 -8
  17. package/api/socket/util.js +1 -4
  18. package/api/state/message.js +59 -0
  19. package/api/util/attach-shared-utils.js +1 -0
  20. package/api/util/federated.js +1 -1
  21. package/api/util/user-util.js +296 -0
  22. package/dist/assets/{ArrowDropDown-odHjNJIs.js → ArrowDropDown-ptWD82T6.js} +1 -1
  23. package/dist/assets/{CheckCircle-BqOSvJMp.js → CheckCircle-Btm_ouu-.js} +1 -1
  24. package/dist/assets/{ChevronLeft-Dv7rlUf5.js → ChevronLeft-Dlcukg5b.js} +1 -1
  25. package/dist/assets/{ChevronRight-CWeJn1iz.js → ChevronRight-Dum8C8k7.js} +1 -1
  26. package/dist/assets/{Community-CMFBTMi_.js → Community-BuDGbplJ.js} +1 -1
  27. package/dist/assets/{DeleteOutline-Cr-TyrUV.js → DeleteOutline-qIhkqz9A.js} +1 -1
  28. package/dist/assets/{Done-C1TA1wbA.js → Done-CxsGHhW2.js} +1 -1
  29. package/dist/assets/{Download-DxhnUTM_.js → Download-DtSKdPMo.js} +1 -1
  30. package/dist/assets/{EditIcon-Bgmg6UE0.js → EditIcon-BOKrjkh4.js} +1 -1
  31. package/dist/assets/{Email-BphlAPta.js → Email-D1oAzxhZ.js} +1 -1
  32. package/dist/assets/{Error-pXXvJFxN.js → Error-yZoplO-q.js} +1 -1
  33. package/dist/assets/{ExpandLess-Dc_dI20M.js → ExpandLess-DN5VsSyP.js} +1 -1
  34. package/dist/assets/{Google-DNUuYFIA.js → Google-Drf-_CBl.js} +1 -1
  35. package/dist/assets/{Holiday-DKefG3Bb.js → Holiday-CGw5hZXz.js} +1 -1
  36. package/dist/assets/{InfoOutlined-CEUhR4DY.js → InfoOutlined-CLOzYFOV.js} +1 -1
  37. package/dist/assets/{Launch-BUTOr3cR.js → Launch-BtdPv0ms.js} +1 -1
  38. package/dist/assets/{LaunchOutlined-QHq-RUJt.js → LaunchOutlined-Bxfn3D1k.js} +1 -1
  39. package/dist/assets/{Location-BuaxMxu4.js → Location-BNMzVuhr.js} +1 -1
  40. package/dist/assets/{LockIcon-CQ1tExIY.js → LockIcon-D-N7I3eV.js} +1 -1
  41. package/dist/assets/{Meeting-Cs60QtvP.js → Meeting-CHDEMp94.js} +1 -1
  42. package/dist/assets/{MoreHoriz-D1SOL47a.js → MoreHoriz-Ecf_Y2c5.js} +1 -1
  43. package/dist/assets/{OffSick-DinPaelp.js → OffSick-s49E5S0C.js} +1 -1
  44. package/dist/assets/{Phone-BmouKMyi.js → Phone-B7KVJqdR.js} +1 -1
  45. package/dist/assets/{PlayArrow-D7cGSxeN.js → PlayArrow-C5Hul3eK.js} +1 -1
  46. package/dist/assets/{QuestionMarkCircle-Dt9XJWEe.js → QuestionMarkCircle-D9Nr1DvN.js} +1 -1
  47. package/dist/assets/{ServerLogo-B33ZRE5q.js → ServerLogo-CJ7KvDlS.js} +1 -1
  48. package/dist/assets/{Timezone-CyMhRxlx.js → Timezone-fKWN5g03.js} +1 -1
  49. package/dist/assets/TuneOutlined-CIVU5KTm.js +1 -0
  50. package/dist/assets/{ViewList-vu1qOJ6P.js → ViewList-DQNBBLS5.js} +1 -1
  51. package/dist/assets/{WorkingRemotely-BP_VIHeM.js → WorkingRemotely-8AJSfiNI.js} +1 -1
  52. package/dist/assets/access-control-5GyLuYd7.js +14 -0
  53. package/dist/assets/{actions-4oGfCMlR.js → actions-BK1Ssw2h.js} +1 -1
  54. package/dist/assets/{add-component-core-CE0nArG4.js → add-component-core-Bm9enQVM.js} +31 -31
  55. package/dist/assets/{add-resource-BYM4JwzE.js → add-resource-Cqmj5BBD.js} +1 -1
  56. package/dist/assets/{addon-B9bb2bvM.js → addon-Dfs1zul7.js} +1 -1
  57. package/dist/assets/advanced-MSBu-f81.js +49 -0
  58. package/dist/assets/api-DeTTY4rz.js +1 -0
  59. package/dist/assets/appearance-_saX27MM.js +1 -0
  60. package/dist/assets/ar-Bd3GUoqC.js +3 -0
  61. package/dist/assets/{ar-CVzKLI4f.js → ar-DrRqcx2b.js} +1 -1
  62. package/dist/assets/{audit-logs-D8H5E0fC.js → audit-logs-C8OHcyQY.js} +3 -3
  63. package/dist/assets/base32-DY8fPTYx.js +1 -0
  64. package/dist/assets/branding-CanOP0qb.js +40 -0
  65. package/dist/assets/branding-DelDZvig.js +50 -0
  66. package/dist/assets/{bundle-avatar-DHwmIozH.js → bundle-avatar-CxGKqpL1.js} +1 -1
  67. package/dist/assets/button-GsH-bz74.js +1 -0
  68. package/dist/assets/{click-to-copy-B0HMuCN_.js → click-to-copy-BuZpdwN0.js} +1 -1
  69. package/dist/assets/{complete-BNf0-iqY.js → complete-CIxsaCVT.js} +1 -1
  70. package/dist/assets/{component-1r0VSsqq.js → component-vibwLNji.js} +102 -87
  71. package/dist/assets/{config-BeD5_8kr.js → config-BbT0ik5t.js} +1 -1
  72. package/dist/assets/{config-CqHmZdZv.js → config-Bl-eQAj5.js} +1 -1
  73. package/dist/assets/{config-navigation-DtN0_qFZ.js → config-navigation-Dw7tct52.js} +7 -7
  74. package/dist/assets/{config-space-DlwZewcm.js → config-space-D3pvjnQx.js} +1 -1
  75. package/dist/assets/{confirm-DmMN-34s.js → confirm-BzL9LNyf.js} +1 -1
  76. package/dist/assets/{connect-CC9dcVMV.js → connect-CzcOswsI.js} +1 -1
  77. package/dist/assets/connect-Czr8O47H.js +1 -0
  78. package/dist/assets/{connect-to-CzffwD9G.js → connect-to-LVtY3yeI.js} +1 -1
  79. package/dist/assets/{content-layout-7vu3yv_f.js → content-layout-CcLv-R_J.js} +1 -1
  80. package/dist/assets/dashboard-BuFzcMGR.js +213 -0
  81. package/dist/assets/de-4RuZHBym.js +3 -0
  82. package/dist/assets/{de-DIJPqt1Y.js → de-BRPos3d1.js} +1 -1
  83. package/dist/assets/{delete-confirm-BTaU_6Kx.js → delete-confirm-Bg3_0xz8.js} +1 -1
  84. package/dist/assets/{did-address-BC-0j4Pt.js → did-address-Dn6n8fAo.js} +1 -1
  85. package/dist/assets/doc-board-bg-DWZHV9Ng.png +0 -0
  86. package/dist/assets/domain-C_0cRyXj.js +9 -0
  87. package/dist/assets/{domain-action-card-DwQ7Q8wY.js → domain-action-card-B6WSK3W9.js} +2 -2
  88. package/dist/assets/domains-BQtz7ONz.js +1 -0
  89. package/dist/assets/{email-mj0bVFDS.js → email-qq2sglAS.js} +2 -2
  90. package/dist/assets/{es-C5RqG0zA.js → es-D2rCdMgt.js} +1 -1
  91. package/dist/assets/es-DPG1emNh.js +3 -0
  92. package/dist/assets/exchange-passport-CfAHAVKI.js +1 -0
  93. package/dist/assets/{fr-BHsPT43-.js → fr-DAFx50ef.js} +1 -1
  94. package/dist/assets/fr-u7MDLCDo.js +3 -0
  95. package/dist/assets/fuel-DVzKzmYw.js +32 -0
  96. package/dist/assets/{get-safe-url-BKl2A9x2.js → get-safe-url-CA3J0_99.js} +1 -1
  97. package/dist/assets/{get-safe-url-QFq5JNoE.js → get-safe-url-DnmtzIqo.js} +1 -1
  98. package/dist/assets/{hi-Bie09Alk.js → hi-CkD7b6N9.js} +1 -1
  99. package/dist/assets/hi-DS9ZR9W2.js +1 -0
  100. package/dist/assets/home--ykFBnb1.js +1 -0
  101. package/dist/assets/{id-IlcS05qm.js → id-BMWKdVei.js} +1 -1
  102. package/dist/assets/id-C459Zhwd.js +3 -0
  103. package/dist/assets/{iframe-B9mCpo4I.js → iframe-B5D34SYo.js} +1 -1
  104. package/dist/assets/{index-Ct7s2LPI.js → index-B1UWfhev.js} +3 -3
  105. package/dist/assets/{index-CJCg9yIK.js → index-B8T_6tqA.js} +1 -1
  106. package/dist/assets/{index-D_wVtHmh.js → index-BByO9801.js} +1 -1
  107. package/dist/assets/{index-DQ_RzIwU.js → index-BDliasS9.js} +1 -1
  108. package/dist/assets/index-BPS0iHSZ.js +4 -0
  109. package/dist/assets/index-BQLZ0lsX.js +1 -0
  110. package/dist/assets/index-BWpwjp4L.js +104 -0
  111. package/dist/assets/index-BqIq9Uma.js +138 -0
  112. package/dist/assets/{index-B4Q2DAdn.js → index-C6eHDaxg.js} +11 -11
  113. package/dist/assets/{index-BMSA5TdD.js → index-CBhHQMgh.js} +1 -1
  114. package/dist/assets/index-CClhZ8rs.js +1 -0
  115. package/dist/assets/index-CytYWl7a.js +113 -0
  116. package/dist/assets/index-D8CNdALX.js +2 -0
  117. package/dist/assets/index-DOdTZRA4.js +11 -0
  118. package/dist/assets/{index-79U1RPaq.js → index-Da6LyIoG.js} +2 -2
  119. package/dist/assets/{index-BJ2lJo7L.js → index-Dy3LPNyS.js} +42 -42
  120. package/dist/assets/index-ItdGu4Wh.js +2 -0
  121. package/dist/assets/{index-m8CaSxXx.js → index-J5kmwEca.js} +1 -1
  122. package/dist/assets/{index-fWGZM-oP.js → index-L3MBVAcg.js} +1 -1
  123. package/dist/assets/{index-BZvVDfZ4.js → index-VUi6PKrJ.js} +1 -1
  124. package/dist/assets/{index-u-lA6P_E.js → index-dCzPMsw6.js} +1 -1
  125. package/dist/assets/index-ndYC_y0r.js +15 -0
  126. package/dist/assets/{index-CGK3FEjY.js → index-vxB3STPb.js} +1 -1
  127. package/dist/assets/index-y6Dw39ly.js +290 -0
  128. package/dist/assets/{invitation-B8Qx_pFq.js → invitation-Cp6DuOW5.js} +8 -7
  129. package/dist/assets/invite-DjADjbzm.js +1 -0
  130. package/dist/assets/issue-passport-Bu5NvC_2.js +1 -0
  131. package/dist/assets/{item-BSGXym2I.js → item-ClBhYYKW.js} +1 -1
  132. package/dist/assets/ja-B5tIV7r-.js +3 -0
  133. package/dist/assets/{ja-C2daM668.js → ja-D2jInSAT.js} +1 -1
  134. package/dist/assets/keyboard-arrow-down-rounded-DadBVmpO.js +1 -0
  135. package/dist/assets/{ko-Lni8u0p_.js → ko-BGB5KJZq.js} +1 -1
  136. package/dist/assets/ko-CL3JJCJN.js +3 -0
  137. package/dist/assets/landing-page-BfVl47YO.js +1 -0
  138. package/dist/assets/{launch-result-message-ByEG8r_7.js → launch-result-message-BP5yMmIB.js} +1 -1
  139. package/dist/assets/{layout-BqhTD729.js → layout-D5G7Z8Ws.js} +1 -1
  140. package/dist/assets/list-CjtRvxdF.js +211 -0
  141. package/dist/assets/{list-header-BmTDmRY0.js → list-header-Cip98Afo.js} +1 -1
  142. package/dist/assets/localization-Tn68766t.js +1 -0
  143. package/dist/assets/{log-o_Cadt8j.js → log-_cZt5s1j.js} +1 -1
  144. package/dist/assets/{login-BQozrLDm.js → login-Bd9eibzl.js} +1 -1
  145. package/dist/assets/{login-oauth-callback-D7lIww1c.js → login-oauth-callback-Buv0sriC.js} +1 -1
  146. package/dist/assets/{logo-uploader-CUQ3aWZJ.js → logo-uploader-DGn3pkYl.js} +5 -4
  147. package/dist/assets/{lost-passport-DkETH2Lu.js → lost-passport-BplwQoPb.js} +3 -3
  148. package/dist/assets/omit-DYK_TtPQ.js +1 -0
  149. package/dist/assets/{open-window-BOl-kTC2.js → open-window-3TWqcI62.js} +1 -1
  150. package/dist/assets/overview-CJ3muOc6.js +84 -0
  151. package/dist/assets/{page-header-Dm1v9v5q.js → page-header-FKKsPnE9.js} +1 -1
  152. package/dist/assets/{permission-B5jnw9r2.js → permission-Dd3ufGD-.js} +1 -1
  153. package/dist/assets/preferences-D4OSAVTW.js +1 -0
  154. package/dist/assets/profile-embed--1Je95gw.js +1 -0
  155. package/dist/assets/pt-CYRkKZmh.js +1 -0
  156. package/dist/assets/{pt-D6N4RLzf.js → pt-DY0Ku5W5.js} +1 -1
  157. package/dist/assets/publish-resource-B4kuEUIu.js +1 -0
  158. package/dist/assets/{react-beautiful-dnd.esm-B9MfX9Xl.js → react-beautiful-dnd.esm-DxmtDCVc.js} +4 -4
  159. package/dist/assets/{relative-time-RQnsWZQc.js → relative-time-Bp0EO1aU.js} +1 -1
  160. package/dist/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
  161. package/dist/assets/roboto-cyrillic-400-normal-Dry59Hjn.woff +0 -0
  162. package/dist/assets/roboto-cyrillic-500-normal-CsCirF4J.woff +0 -0
  163. package/dist/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
  164. package/dist/assets/roboto-cyrillic-700-normal-CB1Rmiii.woff +0 -0
  165. package/dist/assets/roboto-cyrillic-700-normal-CzEIZVQR.woff2 +0 -0
  166. package/dist/assets/roboto-cyrillic-ext-400-normal-BxX1-eA_.woff +0 -0
  167. package/dist/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
  168. package/dist/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
  169. package/dist/assets/roboto-cyrillic-ext-500-normal-ElvJfk8V.woff +0 -0
  170. package/dist/assets/roboto-cyrillic-ext-700-normal-CIu0AXX2.woff +0 -0
  171. package/dist/assets/roboto-cyrillic-ext-700-normal-D_fA0fHY.woff2 +0 -0
  172. package/dist/assets/roboto-greek-400-normal-CAI06USH.woff +0 -0
  173. package/dist/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
  174. package/dist/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
  175. package/dist/assets/roboto-greek-500-normal-D8eQD5zT.woff +0 -0
  176. package/dist/assets/roboto-greek-700-normal-DCrt6r9F.woff +0 -0
  177. package/dist/assets/roboto-greek-700-normal-DpKAje7q.woff2 +0 -0
  178. package/dist/assets/roboto-latin-400-normal-551zQQ7R.woff +0 -0
  179. package/dist/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
  180. package/dist/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
  181. package/dist/assets/roboto-latin-500-normal-_8jDuD7w.woff +0 -0
  182. package/dist/assets/roboto-latin-700-normal-CTLkNcF_.woff +0 -0
  183. package/dist/assets/roboto-latin-700-normal-DZr4b_KL.woff2 +0 -0
  184. package/dist/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
  185. package/dist/assets/roboto-latin-ext-400-normal-uRIBRJt5.woff +0 -0
  186. package/dist/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
  187. package/dist/assets/roboto-latin-ext-500-normal-eJ10kk0m.woff +0 -0
  188. package/dist/assets/roboto-latin-ext-700-normal-BNPgmEQS.woff2 +0 -0
  189. package/dist/assets/roboto-latin-ext-700-normal-Cnx4FGpK.woff +0 -0
  190. package/dist/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
  191. package/dist/assets/roboto-math-400-normal-DHrwdhE6.woff +0 -0
  192. package/dist/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
  193. package/dist/assets/roboto-math-500-normal-CetgDdIa.woff +0 -0
  194. package/dist/assets/roboto-math-700-normal-CpTCM92H.woff +0 -0
  195. package/dist/assets/roboto-math-700-normal-xbpggnJp.woff2 +0 -0
  196. package/dist/assets/roboto-symbols-400-normal-bG5rsNFs.woff +0 -0
  197. package/dist/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
  198. package/dist/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
  199. package/dist/assets/roboto-symbols-500-normal-toKUCDph.woff +0 -0
  200. package/dist/assets/roboto-symbols-700-normal-B2QKVW64.woff +0 -0
  201. package/dist/assets/roboto-symbols-700-normal-DKkQdRpM.woff2 +0 -0
  202. package/dist/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
  203. package/dist/assets/roboto-vietnamese-400-normal-DgufTq8s.woff +0 -0
  204. package/dist/assets/roboto-vietnamese-500-normal-Dw5heWgq.woff +0 -0
  205. package/dist/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
  206. package/dist/assets/roboto-vietnamese-700-normal-BFWtvCOj.woff2 +0 -0
  207. package/dist/assets/roboto-vietnamese-700-normal-ChAl_rRV.woff +0 -0
  208. package/dist/assets/{ru-D-xvMzxI.js → ru-Cv5vRo7s.js} +1 -1
  209. package/dist/assets/ru-Dzg-gLvu.js +1 -0
  210. package/dist/assets/runtime-DCHSigWq.js +1 -0
  211. package/dist/assets/sdk-B4tneH2b.js +1 -0
  212. package/dist/assets/security-Ba0U57n2.js +95 -0
  213. package/dist/assets/session-BXc0WNE7.js +1 -0
  214. package/dist/assets/setup-bc5fgvzY.js +19 -0
  215. package/dist/assets/{shorten-label-DkFTGSoy.js → shorten-label-BcXnCxH2.js} +1 -1
  216. package/dist/assets/{simple-select-CqakAZFe.js → simple-select-D7qC2duk.js} +1 -1
  217. package/dist/assets/{slicedToArray-BuQur6Mi.js → slicedToArray-CG0jVe85.js} +2 -2
  218. package/dist/assets/{start-BSUY3DBl.js → start-kkjng8Di.js} +1 -1
  219. package/dist/assets/status-Bcehte3I.js +1 -0
  220. package/dist/assets/step-actions-CAn2VbnK.js +31 -0
  221. package/dist/assets/studio-Dnzc2A5y.js +6 -0
  222. package/dist/assets/{switch-control-BBlLGjaH.js → switch-control-DZceCxwF.js} +1 -1
  223. package/dist/assets/th-CevmRMq6.js +1 -0
  224. package/dist/assets/{th-CycIQ910.js → th-D6oDBVGi.js} +1 -1
  225. package/dist/assets/{traffic-CJDIGmp5.js → traffic-BbJxF2T-.js} +4 -4
  226. package/dist/assets/transfer-j5hCBx8d.js +16 -0
  227. package/dist/assets/{unsubscribe-afXXIHEf.js → unsubscribe-DJgSmFME.js} +1 -1
  228. package/dist/assets/{use-mobile-CUT5hy9q.js → use-mobile-DNsgYi-4.js} +1 -1
  229. package/dist/assets/use-mobile-DVecy9Ks.js +1 -0
  230. package/dist/assets/{useAsync-DM8qaMe4.js → useAsync-Bia14KO2.js} +1 -1
  231. package/dist/assets/{useAsyncRetry-B7SbzXVI.js → useAsyncRetry-C-QH3IsB.js} +1 -1
  232. package/dist/assets/{useLocalStorage-Dd4pybDP.js → useLocalStorage-BQFZ73WZ.js} +1 -1
  233. package/dist/assets/user-center-BZ0ZkNAA.js +67 -0
  234. package/dist/assets/{util-C_BCTHfw.js → util-C9Xcu_Dq.js} +1 -1
  235. package/dist/assets/{util-YyWTpLT7.js → util-WwcocPP-.js} +1 -1
  236. package/dist/assets/vendor-arcblock-B7hyNlnQ.js +1598 -0
  237. package/dist/assets/{vendor-hooks-sw5wvnca.js → vendor-hooks-DnflU2EL.js} +1 -1
  238. package/dist/assets/{vendor-mui-core-DxqV1NVn.js → vendor-mui-core-BL-xsBvI.js} +1 -1
  239. package/dist/assets/{vendor-mui-x-BjL1xCkk.js → vendor-mui-x-BmOE-0pQ.js} +1 -1
  240. package/dist/assets/vendor-utils-Cs6ARqvU.js +11 -0
  241. package/dist/assets/vendor-ux-did-connect-BDmhBveY.css +1 -0
  242. package/dist/assets/vendor-ux-did-connect-CWUKGZcn.js +1843 -0
  243. package/dist/assets/{vi-BqnfnvFP.js → vi-BKKJMbW2.js} +1 -1
  244. package/dist/assets/vi-PQuaKyKY.js +1 -0
  245. package/dist/assets/wrap-locale-DyRnlWyZ.js +1 -0
  246. package/dist/assets/zh-BBkG8qYp.js +4 -0
  247. package/dist/assets/{zh-CHmwTyCg.js → zh-D4Lak9gZ.js} +1 -1
  248. package/dist/assets/{zh-tw-D6K-qXNE.js → zh-tw-B08rjgK3.js} +1 -1
  249. package/dist/assets/zh-tw-BHJNqYL0.js +3 -0
  250. package/dist/images/all-done.png +0 -0
  251. package/dist/index.html +7 -7
  252. package/dist/service-worker.js +1 -1
  253. package/package.json +39 -40
  254. package/dist/assets/access-control-CpxcJItK.js +0 -14
  255. package/dist/assets/analytics-BXLe73MI.js +0 -11
  256. package/dist/assets/api-D9Yi7Zdr.js +0 -1
  257. package/dist/assets/appearance-DX7SoW1u.js +0 -1
  258. package/dist/assets/ar-2k9jaPIk.js +0 -3
  259. package/dist/assets/base32-BNpDT-6Q.js +0 -1
  260. package/dist/assets/branding-BW1rhy8d.js +0 -40
  261. package/dist/assets/button-CNnuiac8.js +0 -1
  262. package/dist/assets/connect-BfSOEYV-.js +0 -1
  263. package/dist/assets/dashboard-C_Q4TjPa.js +0 -216
  264. package/dist/assets/de-B9cLhykn.js +0 -3
  265. package/dist/assets/domain-CLMRXecU.js +0 -9
  266. package/dist/assets/domains-DF7TtN5q.js +0 -1
  267. package/dist/assets/es-BoQohonz.js +0 -3
  268. package/dist/assets/exchange-passport--DeUPzbW.js +0 -1
  269. package/dist/assets/form-text-input-BYF6lVnE.js +0 -11
  270. package/dist/assets/fr-doSYAOrt.js +0 -3
  271. package/dist/assets/fuel-D-kOZuF6.js +0 -32
  272. package/dist/assets/fullpage-DO8Hcbkl.js +0 -1
  273. package/dist/assets/hi-B_BwhpD8.js +0 -1
  274. package/dist/assets/home-CpnMpXiw.js +0 -1
  275. package/dist/assets/id-BgYIZCvk.js +0 -3
  276. package/dist/assets/index-BVOYP6aR.js +0 -11
  277. package/dist/assets/index-BsUr7wGb.js +0 -104
  278. package/dist/assets/index-C44fECmB.js +0 -138
  279. package/dist/assets/index-CmKAznDh.js +0 -109
  280. package/dist/assets/index-DqC2o5PB.js +0 -4
  281. package/dist/assets/index-DyTFEgKr.js +0 -1
  282. package/dist/assets/index-eCY24sH9.js +0 -137
  283. package/dist/assets/index-gTQQ3SoE.js +0 -290
  284. package/dist/assets/index-gcSQTx25.js +0 -1
  285. package/dist/assets/index.esm-CWepf7I_.js +0 -1
  286. package/dist/assets/inter-latin-300-normal-CvRFFuZy.woff2 +0 -0
  287. package/dist/assets/inter-latin-300-normal-ORCTF8i-.woff +0 -0
  288. package/dist/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  289. package/dist/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  290. package/dist/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  291. package/dist/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  292. package/dist/assets/inter-latin-700-normal-B8MtJ_2k.woff +0 -0
  293. package/dist/assets/inter-latin-700-normal-Sckx8rpT.woff2 +0 -0
  294. package/dist/assets/inter-latin-ext-300-normal-C2kLfG2J.woff2 +0 -0
  295. package/dist/assets/inter-latin-ext-300-normal-n8Ps4oXY.woff +0 -0
  296. package/dist/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  297. package/dist/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  298. package/dist/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  299. package/dist/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  300. package/dist/assets/inter-latin-ext-700-normal-6V9MnIL5.woff +0 -0
  301. package/dist/assets/inter-latin-ext-700-normal-CzikT_rs.woff2 +0 -0
  302. package/dist/assets/invite-BBaF_vyc.js +0 -1
  303. package/dist/assets/issue-passport-DC-ly7xg.js +0 -1
  304. package/dist/assets/ja-FMMLI8YD.js +0 -3
  305. package/dist/assets/ko-C0kmRXYE.js +0 -3
  306. package/dist/assets/list-BHs8uNT5.js +0 -200
  307. package/dist/assets/localization-daPAWMzR.js +0 -1
  308. package/dist/assets/login-bg-Cbfh9Uc2.png +0 -0
  309. package/dist/assets/omit-DZNQhOf-.js +0 -1
  310. package/dist/assets/overview-Bxm05EH6.js +0 -12
  311. package/dist/assets/preferences-uri2RXdB.js +0 -1
  312. package/dist/assets/profile-embed-DnIQcD-H.js +0 -1
  313. package/dist/assets/pt-C2UJZK-O.js +0 -1
  314. package/dist/assets/publish-resource-V53U1NNv.js +0 -1
  315. package/dist/assets/ru-DDA5s4-r.js +0 -1
  316. package/dist/assets/sdk-BKSsfgrc.js +0 -1
  317. package/dist/assets/session-6ZeN-aF2.js +0 -1
  318. package/dist/assets/setup-7Gq9K_8k.js +0 -19
  319. package/dist/assets/status-C52-BFuY.js +0 -1
  320. package/dist/assets/step-actions-CA74dwgt.js +0 -31
  321. package/dist/assets/studio-CAnZfyBM.js +0 -6
  322. package/dist/assets/th-DmqOUn4C.js +0 -1
  323. package/dist/assets/transfer-cG2e24sz.js +0 -16
  324. package/dist/assets/user-center-T8Xw464s.js +0 -67
  325. package/dist/assets/vendor-arcblock-DvaaLvvM.js +0 -2361
  326. package/dist/assets/vendor-utils-DR57WNxP.js +0 -11
  327. package/dist/assets/vendor-ux-did-connect-Bciw9Ypu.js +0 -1077
  328. package/dist/assets/vendor-ux-did-connect-DhgPdlEj.css +0 -1
  329. package/dist/assets/vi-Cf__CtPD.js +0 -1
  330. package/dist/assets/wrap-locale-CX50Vz0w.js +0 -1
  331. package/dist/assets/zh-NXspK2yu.js +0 -4
  332. package/dist/assets/zh-tw-DYYDVX5I.js +0 -3
@@ -14,22 +14,22 @@ function VerifyCodeBody({ appName, locale = 'en', code, magicLink, }) {
14
14
  const translations = {
15
15
  en: {
16
16
  title: `Login to ${appName}`,
17
- followConfirmation: `Thank you for signing up for ${appName}. To confirm your account, please follow the button below.`,
17
+ followConfirmation: `Thank you for login to ${appName}. To confirm your account, please click the button below.`,
18
18
  confirmButton: 'Confirm account',
19
19
  useConfirmLink: 'If Confirm Button does not work, please use the link below.',
20
20
  orEnterCode: `Or enter the following code in the application: `,
21
- followEnterCode: `Thank you for signing up for ${appName}. To confirm your account, please enter the following code in the application`,
21
+ followEnterCode: `Thank you for login to ${appName}. To confirm your account, please enter the following code in the application`,
22
22
  codeExpiresIn: `This code expires in ${constant_1.VERIFY_CODE_TTL / 60 / 1000} minutes.`,
23
23
  doNotShareCodeTitle: 'Do NOT share this code with anyone.',
24
24
  doNotShareCode: "Only enter this code on the official application's website. If someone asks for this code, it could be a scam.",
25
25
  },
26
26
  zh: {
27
27
  title: `登录 ${appName}`,
28
- followConfirmation: `感谢您注册 ${appName},请点击以下按钮确认您的账户。`,
28
+ followConfirmation: `感谢您登录 ${appName},请点击以下按钮确认您的账户。`,
29
29
  confirmButton: '确认账户',
30
30
  useConfirmLink: '如果确认按钮无法工作,请使用以下链接。',
31
31
  orEnterCode: `或者在应用中输入以下代码:`,
32
- followEnterCode: `感谢您注册 ${appName},请在应用中输入以下代码确认您的账户。`,
32
+ followEnterCode: `感谢您登录 ${appName},请在应用中输入以下代码确认您的账户。`,
33
33
  codeExpiresIn: `此代码将在${constant_1.VERIFY_CODE_TTL / 60 / 1000}分钟内过期。`,
34
34
  doNotShareCodeTitle: '请勿将此代码分享给任何人。',
35
35
  doNotShareCode: '请仅在官方应用的网站上输入此代码。如果有人要求提供此代码,这可能是一个骗局。',
package/api/index.js CHANGED
@@ -22,6 +22,7 @@ const {
22
22
  RESOURCE_PATTERN,
23
23
  } = require('@blocklet/constant');
24
24
  const { getAppOgCacheDir } = require('@abtnode/util/lib/blocklet');
25
+ const { ensureLocale } = require('@abtnode/util/lib/middlewares/ensure-locale');
25
26
  const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
26
27
  const createInvite = require('@abtnode/auth/lib/invitation');
27
28
  const { getStatusFromError } = require('@abtnode/util/lib/custom-error');
@@ -448,6 +449,8 @@ module.exports = function createServer(node, serverOptions = {}) {
448
449
  server.set('trust proxy', 'loopback');
449
450
 
450
451
  server.use(cookieParser());
452
+ // 此时没有执行 bodyParser,所以不使用 body 进行判断
453
+ server.use(ensureLocale({ methods: ['query', 'cookies'] }));
451
454
 
452
455
  // Shared util functions on current request
453
456
  server.use((req, res, next) => {
@@ -649,7 +652,7 @@ self.blocklet = {
649
652
  });
650
653
 
651
654
  // This must come after all proxied requests that begins with WELLKNOWN_SERVICE_PATH_PREFIX
652
- server.use(WELLKNOWN_SERVICE_PATH_PREFIX, bodyParser);
655
+ server.use(WELLKNOWN_SERVICE_PATH_PREFIX, bodyParser, ensureLocale({ force: true }));
653
656
 
654
657
  // Studio service
655
658
  StudioService.init(server, node);
@@ -47,6 +47,7 @@ const { getSourceAppPid, getLoginProvider } = require('@blocklet/sdk/lib/util/lo
47
47
  const { getDidSpacesInfoByClaims, silentAuthorizationInConnect } = require('@abtnode/auth/lib/util/spaces');
48
48
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
49
49
  const { PASSPORT_LOG_ACTION, PASSPORT_SOURCE, PASSPORT_STATUS } = require('@abtnode/constant');
50
+ const { getDeviceData } = require('@abtnode/util/lib/device');
50
51
 
51
52
  const logger = require('../logger')('connect');
52
53
  const { createTokenFn, getDidConnectVersion } = require('../../util');
@@ -595,11 +596,10 @@ module.exports = {
595
596
  );
596
597
  }
597
598
  const lastLoginIp = getRequestIP(request);
598
- const walletDeviceMessageToken = request.get('wallet-device-message-token');
599
- const walletDeviceId = request.get('wallet-device-id');
600
599
  const ua = request.get('user-agent');
601
600
  // request.context.store.connectedWallet
602
601
  const walletOS = request.context.didwallet.os;
602
+ const deviceData = getDeviceData({ req: request });
603
603
 
604
604
  const userSessionDoc = await node.upsertUserSession({
605
605
  teamDid,
@@ -612,8 +612,7 @@ module.exports = {
612
612
  lastLoginIp,
613
613
  extra: {
614
614
  walletOS,
615
- walletDeviceMessageToken,
616
- walletDeviceId,
615
+ device: deviceData,
617
616
  },
618
617
  });
619
618
 
@@ -651,8 +650,7 @@ module.exports = {
651
650
  lastLoginIp,
652
651
  extra: {
653
652
  walletOS,
654
- walletDeviceMessageToken,
655
- walletDeviceId,
653
+ device: deviceData,
656
654
  },
657
655
  });
658
656
  });
package/api/libs/jwt.js CHANGED
@@ -47,7 +47,7 @@ const initJwt = (node, options) => {
47
47
  elevated,
48
48
  });
49
49
 
50
- const verifySessionToken = (token, secret, { checkFromDb, teamDid, checkToken } = {}) =>
50
+ const verifySessionToken = (token, secret, { checkFromDb, teamDid, checkToken, locale = 'en' } = {}) =>
51
51
  // eslint-disable-next-line implicit-arrow-linebreak
52
52
  new Promise((resolve, reject) => {
53
53
  jwt.verify(token, secret, async (err, decoded) => {
@@ -91,13 +91,13 @@ const initJwt = (node, options) => {
91
91
  }
92
92
 
93
93
  if (!user.approved) {
94
- return reject(new Error(`Invalid jwt token: ${messages.notAllowedAppUser.en}`));
94
+ return reject(new Error(`Invalid jwt token: ${messages.notAllowedAppUser[locale]}`));
95
95
  }
96
96
 
97
97
  if (passport && passport.id) {
98
98
  const valid = await node.isPassportValid({ teamDid, passportId: passport.id });
99
99
  if (valid === false) {
100
- return reject(new Error(`Passport ${passport.name} has been revoked`));
100
+ return reject(new Error(messages.passportRevoked[locale](passport.name, passport.issuer?.name)));
101
101
  }
102
102
  }
103
103
 
@@ -56,10 +56,13 @@ async function sendPush(receiver, notification, { node, teamDid }) {
56
56
  user.userSessions.forEach((x) => {
57
57
  // NOTICE: 这里需要转为小写来判断
58
58
  const platform = x?.extra?.walletOS?.toLowerCase();
59
- const deviceToken = x?.extra?.walletDeviceMessageToken;
59
+ // 兼容处理,支持读取 walletDeviceMessageToken
60
+ const deviceToken = x?.extra?.device?.messageToken || x?.extra?.walletDeviceMessageToken;
61
+ const deviceClientName = x?.extra?.device?.clientName;
60
62
  if (platform && ['ios', 'android', 'ios-sandbox'].includes(platform) && deviceToken) {
61
63
  acc.push({
62
64
  platform,
65
+ deviceClientName,
63
66
  deviceToken,
64
67
  userDid: x.userDid,
65
68
  });
@@ -70,7 +73,7 @@ async function sendPush(receiver, notification, { node, teamDid }) {
70
73
  }, []);
71
74
 
72
75
  const filterTargets = uniqWith(targets, (a, b) => {
73
- return a.deviceToken === b.deviceToken && a.platform === b.platform;
76
+ return a.deviceToken === b.deviceToken && a.platform === b.platform && a.deviceClientName === b.deviceClientName;
74
77
  });
75
78
 
76
79
  if (filterTargets.length === 0) {
@@ -2,7 +2,7 @@
2
2
  const fs = require('fs-extra');
3
3
  const path = require('path');
4
4
  const get = require('lodash/get');
5
- const cloneDeep = require('lodash/cloneDeep');
5
+ const cloneDeep = require('@abtnode/util/lib/deep-clone');
6
6
  const dayjs = require('@abtnode/util/lib/dayjs');
7
7
  const JWT = require('@arcblock/jwt');
8
8
  const { isValid } = require('@arcblock/did');
@@ -1,4 +1,4 @@
1
- const { WELLKNOWN_SERVICE_PATH_PREFIX, FEDERATED } = require('@abtnode/constant');
1
+ const { WELLKNOWN_SERVICE_PATH_PREFIX, FEDERATED, PASSPORT_STATUS } = require('@abtnode/constant');
2
2
  const { signV2 } = require('@arcblock/jwt');
3
3
  const isNil = require('lodash/isNil');
4
4
  const pick = require('lodash/pick');
@@ -573,13 +573,23 @@ module.exports = {
573
573
  }
574
574
  );
575
575
  if (prevUser?.approved === false) {
576
- res.status(401).json({ error: messages.notAllowedAppUser.en });
576
+ res.status(401).json({ error: messages.notAllowedAppUser[req.blockletLocale] });
577
577
  return;
578
578
  }
579
579
  // HACK: member 调用 master 时,将 passport 的 role 还原为 master 中原有的 role
580
580
  const targetPassport = passport?.id
581
581
  ? (prevUser?.passports || []).find((item) => item.id === passport.id)
582
582
  : null;
583
+ if (targetPassport?.status === PASSPORT_STATUS.EXPIRED) {
584
+ res.status(401).json({ error: messages.passportExpired[req.blockletLocale] });
585
+ return;
586
+ }
587
+ if (targetPassport?.status === PASSPORT_STATUS.REVOKED) {
588
+ res.status(401).json({
589
+ error: messages.passportRevoked[req.blockletLocale](targetPassport.title, targetPassport.issuer?.name),
590
+ });
591
+ return;
592
+ }
583
593
 
584
594
  // HACK: 用户在 master 中存在时,不更新任何用户信息;不存在时,将新增一个用户
585
595
  const filterUserInfo = prevUser ? {} : user;
@@ -1,23 +1,15 @@
1
- const { messages, handleInvitationReceive, getApplicationInfo } = require('@abtnode/auth/lib/auth');
2
- const { createPassportList, createPassportSwitcher, checkInvitedUserOnly } = require('@abtnode/auth/lib/oauth');
3
- const {
4
- WELLKNOWN_SERVICE_PATH_PREFIX,
5
- PASSPORT_STATUS,
6
- ROLES,
7
- SECURITY_RULE_DEFAULT_ID,
8
- } = require('@abtnode/constant');
1
+ const { handleInvitationReceive, getApplicationInfo } = require('@abtnode/auth/lib/auth');
2
+ const { createPassportList, createPassportSwitcher } = require('@abtnode/auth/lib/oauth');
3
+ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
9
4
  const { extractUserAvatar, getUserAvatarUrl } = require('@abtnode/util/lib/user');
10
5
  const { fromAppDid } = require('@arcblock/did-ext');
11
- const last = require('lodash/last');
12
6
  const pick = require('lodash/pick');
13
- const sortBy = require('lodash/sortBy');
14
- const cloneDeep = require('lodash/cloneDeep');
7
+ const cloneDeep = require('@abtnode/util/lib/deep-clone');
15
8
  const { joinURL } = require('ufo');
16
9
  const { upsertToPassports } = require('@abtnode/auth/lib/passport');
17
10
  const { getWalletDid, getConnectedAccounts, getSourceProvider } = require('@blocklet/meta/lib/did-utils');
18
11
  const formatContext = require('@abtnode/util/lib/format-context');
19
12
  const createTranslator = require('@abtnode/util/lib/translate');
20
- const getRequestIP = require('@abtnode/util/lib/get-request-ip');
21
13
  const CustomError = require('@abtnode/util/lib/custom-error');
22
14
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
23
15
  const { withHttps, withTrailingSlash } = require('ufo');
@@ -34,6 +26,7 @@ const initJwt = require('../libs/jwt');
34
26
  const { sendToUser } = require('../libs/notification');
35
27
  const { createTokenFn, getDidConnectVersion, redirectWithoutCache } = require('../util');
36
28
  const federatedUtil = require('../util/federated');
29
+ const userUtil = require('../util/user-util');
37
30
  const { isOAuthEmailVerified, isEmailUniqueRequired, isEmailKycRequired, isSameEmail } = require('../libs/kyc');
38
31
  const checkUser = require('../middlewares/check-user');
39
32
 
@@ -175,13 +168,12 @@ function getAuthClient(blocklet, provider, { legacy = false, appPid } = {}) {
175
168
 
176
169
  async function login(req, node, options) {
177
170
  const blocklet = await req.getBlocklet();
171
+ const teamDid = blocklet.appPid;
178
172
  const { locale = 'en', provider, inviter = null, sourceAppPid = null } = req.body;
179
- const visitorId = req.get('x-blocklet-visitor-id');
180
173
  if (!blocklet.settings?.owner) {
181
174
  throw new CustomError(400, t('oauthCantBeOwner', locale));
182
175
  }
183
176
 
184
- const { did: teamDid, secret, appUrl } = await req.getBlockletInfo();
185
177
  const { info: oauthInfo, wallet: userWallet } = await getOAuthFederatedUserInfo(req, {
186
178
  blocklet,
187
179
  });
@@ -189,20 +181,10 @@ async function login(req, node, options) {
189
181
  const userDid = userWallet.address;
190
182
  const userPk = userWallet.publicKey;
191
183
 
192
- const { accessPolicyConfig } = await req.getSecurityConfig({ id: SECURITY_RULE_DEFAULT_ID });
193
- const nodeInfo = await req.getNodeInfo();
194
- const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
195
- const isInvitedUserOnly = await checkInvitedUserOnly(accessPolicyConfig, node, teamDid);
196
-
197
- const lastLoginIp = getRequestIP(req);
198
- let passport = { name: 'Guest', role: 'guest' };
199
184
  let currentUser = await federatedUtil.getUserWithinFederated(
200
185
  { sourceAppPid, teamDid, userDid, userPk },
201
186
  { node, blocklet }
202
187
  );
203
- let doc;
204
- let passportForLog;
205
- const fullName = currentUser?.fullName || oauthInfo?.name;
206
188
  const connectedAccount = {
207
189
  provider,
208
190
  did: userDid,
@@ -210,43 +192,14 @@ async function login(req, node, options) {
210
192
  id: oauthInfo.sub,
211
193
  userInfo: oauthInfo,
212
194
  };
213
- const masterSite = federatedUtil.getFederatedMaster(blocklet);
214
195
  let profile;
215
- // 当前账户已存在,更新账户信息
216
- if (currentUser) {
217
- profile = {
218
- fullName: currentUser.fullName,
219
- email: currentUser.email || '',
220
- avatar: currentUser.avatar,
221
- };
222
- const allPassports = currentUser.passports || [];
223
- const validPassports = allPassports.filter((item) => item.status === PASSPORT_STATUS.VALID);
224
- const lastUsedPassport = last(sortBy(validPassports, 'lastLoginAt'));
225
- passportForLog = lastUsedPassport;
226
- if (lastUsedPassport) {
227
- passport = pick(lastUsedPassport, ['id', 'name', 'role', 'scope']);
228
- }
229
-
230
- doc = await node.loginUser({
231
- teamDid,
232
- user: {
233
- did: currentUser.did,
234
- pk: currentUser.pk,
235
- locale,
236
- lastLoginIp,
237
- sourceAppPid,
238
- passport: lastUsedPassport,
239
- connectedAccount,
240
- },
241
- });
242
- } else {
196
+ const lastUsedPassport = userUtil.getLastUsedPassport({ passports: currentUser?.passports });
197
+ if (!currentUser) {
243
198
  currentUser = {
244
199
  did: userDid,
245
200
  pk: userPk,
246
201
  };
247
- if (isInvitedUserOnly) {
248
- throw new CustomError(403, messages.notInvited[locale]);
249
- }
202
+ await userUtil.checkNeedInvite({ req, node, teamDid, locale });
250
203
 
251
204
  if (isEmailUniqueRequired(blocklet)) {
252
205
  const used = await node.isEmailUsed({
@@ -261,116 +214,28 @@ async function login(req, node, options) {
261
214
  }
262
215
 
263
216
  // 当前 oauth 账户不存在,自动添加一个新用户
264
- let avatar = oauthInfo.picture ? await getAvatarByUrl(oauthInfo.picture) : await getAvatarByEmail(oauthInfo.email);
265
- avatar = await extractUserAvatar(avatar, { dataDir });
266
- passportForLog = { name: 'Guest', role: 'guest', scope: 'passport' };
217
+ const avatar = oauthInfo.picture
218
+ ? await userUtil.getAvatarBnByUrl(oauthInfo.picture, { req, node })
219
+ : await userUtil.getAvatarBnByEmail(oauthInfo.email, { req, node });
267
220
  profile = {
268
221
  fullName: oauthInfo.name,
269
222
  email: oauthInfo.email,
270
223
  avatar,
271
224
  emailVerified: isOAuthEmailVerified(blocklet, oauthInfo),
225
+ inviter,
272
226
  };
273
- doc = await node.loginUser({
274
- teamDid,
275
- user: {
276
- connectedAccount,
277
- did: userDid,
278
- pk: userPk,
279
- sourceAppPid,
280
- ...profile,
281
- locale,
282
- inviter,
283
- lastLoginIp,
284
- },
285
- });
286
227
  }
287
228
 
288
- await node.createAuditLog(
229
+ const { sessionToken, refreshToken, visitorId } = await userUtil.loginUserSession(
289
230
  {
290
- action: 'login',
291
- args: { teamDid, userDid: currentUser.did || userDid, passport: passportForLog, provider, sourceAppPid },
292
- context: formatContext(Object.assign(req, { user: doc })),
293
- result: doc,
294
- },
295
- node
296
- );
297
-
298
- const ua = req.get('user-agent');
299
- const walletDeviceMessageToken = req.get('wallet-device-message-token');
300
- const walletDeviceId = req.get('wallet-device-id');
301
- const userSessionDoc = await node.upsertUserSession({
302
- teamDid,
303
- userDid: currentUser.did,
304
- visitorId,
305
- appPid: teamDid,
306
- passportId: passport?.id,
307
- status: 'online',
308
- ua: null,
309
- lastLoginIp,
310
- extra: {
311
- walletOS: 'web',
312
- walletDeviceMessageToken,
313
- walletDeviceId,
314
- },
315
- });
316
-
317
- if (federatedUtil.shouldSyncFederated(sourceAppPid, blocklet)) {
318
- const syncUserData = {
319
- did: userDid,
320
- pk: userPk,
321
- ...profile,
322
- avatar: getUserAvatarUrl(appUrl, profile.avatar),
323
- connectedAccount: [connectedAccount],
324
- inviter: doc.inviter,
325
- };
326
-
327
- node
328
- .syncFederated({
329
- did: teamDid,
330
- data: {
331
- users: [
332
- {
333
- ...syncUserData,
334
- action: 'connectAccount',
335
- sourceAppPid: sourceAppPid || masterSite?.appPid,
336
- },
337
- ],
338
- },
339
- })
340
- .then(() => {
341
- node.syncUserSession({
342
- teamDid,
343
- userDid: userSessionDoc.userDid,
344
- visitorId: userSessionDoc.visitorId,
345
- passportId: passport?.id,
346
- targetAppPid: sourceAppPid,
347
- ua,
348
- lastLoginIp,
349
- extra: {
350
- walletOS: 'web',
351
- walletDeviceMessageToken,
352
- walletDeviceId,
353
- },
354
- });
355
- });
356
- }
357
-
358
- const { createSessionToken } = initJwt(node, options);
359
- const createToken = createTokenFn(createSessionToken);
360
- const sessionConfig = blocklet.settings?.session || {};
361
- const { sessionToken, refreshToken } = createToken(
362
- currentUser.did,
363
- {
364
- secret,
365
- passport,
366
- role: passport.scope === 'passport' ? passport.role : ROLES.GUEST,
367
- fullName,
368
- provider,
369
- walletOS: 'web',
370
- emailVerified: !!doc?.emailVerified,
371
- phoneVerified: !!doc?.phoneVerified,
231
+ did: currentUser.did || userDid,
232
+ pk: currentUser.pk,
233
+ profile,
234
+ passport: lastUsedPassport,
235
+ sourceAppPid,
236
+ connectedAccount,
372
237
  },
373
- { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
238
+ { req, node, options }
374
239
  );
375
240
 
376
241
  // for backward compatibility
@@ -381,42 +246,35 @@ async function login(req, node, options) {
381
246
  return {
382
247
  sessionToken,
383
248
  refreshToken,
384
- visitorId: userSessionDoc.visitorId,
249
+ visitorId,
385
250
  };
386
251
  }
387
252
 
388
253
  async function invite(req, node, options) {
389
254
  const { locale, inviteId, baseUrl, provider = LOGIN_PROVIDER.AUTH0, sourceAppPid = null } = req.body;
390
- const visitorId = req.get('x-blocklet-visitor-id');
391
255
  const blocklet = await req.getBlocklet();
392
-
393
- const { did: teamDid, secret } = await req.getBlockletInfo();
256
+ const teamDid = blocklet.appPid;
394
257
 
395
258
  const { info: oauthInfo, wallet: userWallet } = await getOAuthFederatedUserInfo(req, {
396
259
  blocklet,
397
260
  });
398
261
 
399
262
  const nodeInfo = await req.getNodeInfo();
400
- let userDid = userWallet.address;
401
- let userPk = userWallet.publicKey;
263
+ const userDid = userWallet.address;
264
+ const userPk = userWallet.publicKey;
402
265
 
403
266
  let profile;
404
-
405
- const currentUser = await federatedUtil.getUserWithinFederated(
267
+ let currentUser = await federatedUtil.getUserWithinFederated(
406
268
  { sourceAppPid, teamDid, userDid, userPk },
407
269
  { node, blocklet }
408
270
  );
409
271
 
410
- const { dataDir, name: applicationName } = await getApplicationInfo({ node, nodeInfo, teamDid });
411
- if (currentUser) {
412
- profile = {
413
- email: currentUser.email,
414
- fullName: currentUser.fullName,
415
- avatar: getUserAvatarUrl(baseUrl, currentUser.avatar),
272
+ const { name: applicationName } = await getApplicationInfo({ node, nodeInfo, teamDid });
273
+ if (!currentUser) {
274
+ currentUser = {
275
+ did: userDid,
276
+ pk: userPk,
416
277
  };
417
- userDid = currentUser.did;
418
- userPk = currentUser.pk;
419
- } else {
420
278
  if (isEmailUniqueRequired(blocklet)) {
421
279
  const used = await node.isEmailUsed({
422
280
  teamDid,
@@ -429,8 +287,9 @@ async function invite(req, node, options) {
429
287
  }
430
288
  }
431
289
 
432
- let avatar = oauthInfo.picture ? await getAvatarByUrl(oauthInfo.picture) : await getAvatarByEmail(oauthInfo.email);
433
- avatar = await extractUserAvatar(avatar, { dataDir });
290
+ const avatar = oauthInfo.picture
291
+ ? await userUtil.getAvatarBnByUrl(oauthInfo.picture, { req, node })
292
+ : await userUtil.getAvatarBnByEmail(oauthInfo.email, { req, node });
434
293
  profile = {
435
294
  email: oauthInfo.email,
436
295
  fullName: oauthInfo.name,
@@ -450,7 +309,11 @@ async function invite(req, node, options) {
450
309
  endpoint,
451
310
  inviteId,
452
311
  nodeInfo,
453
- profile,
312
+ profile: profile || {
313
+ email: currentUser.email,
314
+ fullName: currentUser.fullName,
315
+ avatar: getUserAvatarUrl(baseUrl, currentUser.avatar),
316
+ },
454
317
  statusEndpointBaseUrl,
455
318
  teamDid,
456
319
  userDid: userWallet.address,
@@ -458,10 +321,6 @@ async function invite(req, node, options) {
458
321
  locale,
459
322
  provider,
460
323
  });
461
- const masterSite = federatedUtil.getFederatedMaster(blocklet);
462
- const syncData = {
463
- users: [],
464
- };
465
324
 
466
325
  if (currentUser) {
467
326
  const walletDid = getWalletDid(currentUser);
@@ -485,102 +344,29 @@ async function invite(req, node, options) {
485
344
  { req }
486
345
  );
487
346
  }
488
- } else {
489
- const connectedAccount = {
490
- provider,
491
- id: oauthInfo.sub,
492
- did: userWallet.address,
493
- pk: userWallet.publicKey,
494
- userInfo: oauthInfo,
495
- };
496
- await node.loginUser({
497
- teamDid,
498
- user: {
499
- did: userDid,
500
- pk: userPk,
501
- connectedAccount,
502
- sourceAppPid,
503
- inviter: inviteInfo.inviter?.did,
504
- remark: inviteInfo.remark,
505
- },
506
- });
507
- if (federatedUtil.shouldSyncFederated(sourceAppPid, blocklet)) {
508
- const syncUserData = {
509
- did: userDid,
510
- pk: userPk,
511
- ...profile,
512
- inviter: inviteInfo.inviter?.did,
513
- connectedAccount: [connectedAccount],
514
- };
515
- syncData.users.push({
516
- ...syncUserData,
517
- action: 'connectAccount',
518
- // HACK: @zhanghan 这里会造成 master 中的用户也增加 sourceAppPid 字段,需要在 sync 接收端处理
519
- sourceAppPid: sourceAppPid || masterSite?.appPid,
520
- });
521
- }
522
347
  }
523
- const lastLoginIp = getRequestIP(req);
524
- const ua = req.get('user-agent');
525
- const walletDeviceMessageToken = req.get('wallet-device-message-token');
526
- const walletDeviceId = req.get('wallet-device-id');
527
- const userSessionDoc = await node.upsertUserSession({
528
- teamDid,
529
- userDid,
530
- visitorId,
531
- appPid: teamDid,
532
- passportId: passport.id,
533
- status: 'online',
534
- ua: null,
535
- lastLoginIp,
536
- extra: {
537
- walletOS: 'web',
538
- walletDeviceMessageToken,
539
- walletDeviceId,
540
- },
541
- });
348
+ const connectedAccount = {
349
+ provider,
350
+ id: oauthInfo.sub,
351
+ did: userWallet.address,
352
+ pk: userWallet.publicKey,
353
+ userInfo: oauthInfo,
354
+ };
542
355
 
543
- if (federatedUtil.shouldSyncFederated(sourceAppPid, blocklet)) {
544
- node
545
- .syncFederated({
546
- did: teamDid,
547
- data: syncData,
548
- })
549
- .then(() => {
550
- node.syncUserSession({
551
- teamDid,
552
- userDid: userSessionDoc.userDid,
553
- visitorId: userSessionDoc.visitorId,
554
- passportId: passport?.id,
555
- targetAppPid: sourceAppPid,
556
- ua,
557
- lastLoginIp,
558
- extra: {
559
- walletOS: 'web',
560
- walletDeviceMessageToken,
561
- walletDeviceId,
562
- },
563
- });
564
- });
356
+ if (profile) {
357
+ profile.inviter = inviteInfo.inviter?.did;
565
358
  }
566
359
 
567
- const { createSessionToken } = initJwt(node, options);
568
- const createToken = createTokenFn(createSessionToken);
569
- const sessionConfig = blocklet.settings?.session || {};
570
-
571
- const { sessionToken, refreshToken } = createToken(
572
- userDid,
360
+ const { sessionToken, refreshToken, visitorId } = await userUtil.loginUserSession(
573
361
  {
574
- secret,
362
+ did: currentUser.did,
363
+ pk: currentUser.pk,
364
+ profile,
575
365
  passport,
576
- role,
577
- fullName: profile.fullName,
578
- provider,
579
- walletOS: 'web',
580
- emailVerified: !!user?.emailVerified,
581
- phoneVerified: !!user?.phoneVerified,
366
+ sourceAppPid,
367
+ connectedAccount,
582
368
  },
583
- { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
369
+ { req, node, options, loggedUser: user }
584
370
  );
585
371
 
586
372
  // for backward compatibility
@@ -591,7 +377,7 @@ async function invite(req, node, options) {
591
377
  return {
592
378
  sessionToken,
593
379
  refreshToken,
594
- visitorId: userSessionDoc.visitorId,
380
+ visitorId,
595
381
  };
596
382
  }
597
383