@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
@@ -11,6 +11,7 @@ const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
11
11
  const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
12
12
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
13
13
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
14
+ const { getDeviceData } = require('@abtnode/util/lib/device');
14
15
 
15
16
  const { createTokenFn, getDidConnectVersion } = require('../../../util');
16
17
  const { getUserWithinFederated } = require('../../../util/federated');
@@ -122,8 +123,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
122
123
 
123
124
  const lastLoginIp = getRequestIP(req);
124
125
  const ua = req.get('user-agent');
125
- const walletDeviceMessageToken = req.get('wallet-device-message-token');
126
- const walletDeviceId = req.get('wallet-device-id');
126
+ const deviceData = getDeviceData({ req });
127
127
  const userSessionDoc = await node.upsertUserSession({
128
128
  teamDid,
129
129
  visitorId,
@@ -135,8 +135,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
135
135
  lastLoginIp,
136
136
  extra: {
137
137
  walletOS,
138
- walletDeviceMessageToken,
139
- walletDeviceId,
138
+ device: deviceData,
140
139
  },
141
140
  });
142
141
  node.syncUserSession({
@@ -149,8 +148,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
149
148
  lastLoginIp,
150
149
  extra: {
151
150
  walletOS,
152
- walletDeviceMessageToken,
153
- walletDeviceId,
151
+ device: deviceData,
154
152
  },
155
153
  });
156
154
  await updateSession(
@@ -10,6 +10,7 @@ const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
10
10
  const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
11
11
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
12
12
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
13
+ const { getDeviceData } = require('@abtnode/util/lib/device');
13
14
 
14
15
  const { createTokenFn, getDidConnectVersion } = require('../../../util');
15
16
 
@@ -48,8 +49,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
48
49
  const walletOS = req.context?.didwallet?.os;
49
50
  const lastLoginIp = getRequestIP(req);
50
51
  const ua = req.get('user-agent');
51
- const walletDeviceMessageToken = req.get('wallet-device-message-token');
52
- const walletDeviceId = req.get('wallet-device-id');
52
+ const deviceData = getDeviceData({ req });
53
53
 
54
54
  const { response, passport, role } = await handleIssuePassportResponse({
55
55
  req,
@@ -96,8 +96,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
96
96
  lastLoginIp,
97
97
  extra: {
98
98
  walletOS,
99
- walletDeviceMessageToken,
100
- walletDeviceId,
99
+ device: deviceData,
101
100
  },
102
101
  });
103
102
  node.syncUserSession({
@@ -110,8 +109,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
110
109
  lastLoginIp,
111
110
  extra: {
112
111
  walletOS,
113
- walletDeviceMessageToken,
114
- walletDeviceId,
112
+ device: deviceData,
115
113
  },
116
114
  });
117
115
 
@@ -14,6 +14,7 @@ const {
14
14
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
15
15
  const { signResponse } = require('@blocklet/meta/lib/security');
16
16
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
17
+ const { getDeviceData } = require('@abtnode/util/lib/device');
17
18
  const isUrl = require('is-url');
18
19
 
19
20
  const { createTokenFn, getDidConnectVersion } = require('../../util');
@@ -230,6 +231,7 @@ module.exports = {
230
231
  throw new Error(`invalid token type ${t.tokenType}`);
231
232
  }
232
233
  },
234
+ locale: req.blockletLocale,
233
235
  });
234
236
 
235
237
  const user = await node.getUser({ teamDid, user: { did: userPid } });
@@ -268,8 +270,7 @@ module.exports = {
268
270
  );
269
271
  const ua = req.get('user-agent');
270
272
  const lastLoginIp = getRequestIP(req);
271
- const walletDeviceMessageToken = req.get('wallet-device-message-token');
272
- const walletDeviceId = req.get('wallet-device-id');
273
+ const deviceData = getDeviceData({ req });
273
274
  const userSession = await node.upsertUserSession({
274
275
  visitorId,
275
276
  teamDid,
@@ -280,8 +281,7 @@ module.exports = {
280
281
  lastLoginIp,
281
282
  extra: {
282
283
  walletOS,
283
- walletDeviceMessageToken,
284
- walletDeviceId,
284
+ device: deviceData,
285
285
  },
286
286
  });
287
287
  if (user?.sourceAppPid) {
@@ -294,8 +294,7 @@ module.exports = {
294
294
  lastLoginIp,
295
295
  extra: {
296
296
  walletOS,
297
- walletDeviceMessageToken,
298
- walletDeviceId,
297
+ device: deviceData,
299
298
  },
300
299
  });
301
300
  }
@@ -94,23 +94,27 @@ const init = ({ node }) => {
94
94
  heartbeatTimeout: 60 * 1000 * 10,
95
95
  });
96
96
 
97
- // Let first worker process do something as master
98
- if (process.env.NODE_APP_INSTANCE === '0') {
99
- // cron
100
- Cron.init({
101
- jobs: [
102
- // @ts-ignore
103
- {
104
- name: 'prune messages',
105
- time: '0 0 0 * * 1', // every Monday per week
106
- fn: () => states.message.prune(),
107
- },
108
- ],
109
- onError: (error, name) => {
110
- logger.error('Run job failed', { name, error });
97
+ // 清除离线的消息
98
+ Cron.init({
99
+ jobs: [
100
+ {
101
+ name: 'prune messages',
102
+ time: '0 0 0 * * 1', // every Monday per week
103
+ fn: () => states.message.prune(),
111
104
  },
112
- });
113
- }
105
+ {
106
+ name: 'message-data-cleanup',
107
+ // time: '0 0 8 * * *', // check every day
108
+ time: '0 0 * * * *', // check every hour
109
+ // time: '*/5 * * * * *', // check every 5 seconds
110
+ fn: () => states.message.pruneExpiredData(),
111
+ options: { runOnInit: false },
112
+ },
113
+ ],
114
+ onError: (error, name) => {
115
+ logger.error('Run job failed', { name, error });
116
+ },
117
+ });
114
118
 
115
119
  const wrapSendHandler = (fn, channel) => {
116
120
  return async (req, res) => {
@@ -4,7 +4,7 @@ const states = require('@abtnode/core/lib/states');
4
4
  const JWT = require('@arcblock/jwt');
5
5
  const md5 = require('@abtnode/util/lib/md5');
6
6
  const { wipeSensitiveData } = require('@blocklet/meta/lib/util');
7
- const cloneDeep = require('lodash/cloneDeep');
7
+ const cloneDeep = require('@abtnode/util/lib/deep-clone');
8
8
  const {
9
9
  NODE_MODES,
10
10
  EVENTS,
@@ -12,6 +12,7 @@ const {
12
12
  NOTIFICATION_SEND_STATUS,
13
13
  NOTIFICATION_SEND_FAILED_REASON,
14
14
  } = require('@abtnode/constant');
15
+ const { nanoid } = require('@blocklet/meta/lib/util');
15
16
  const get = require('lodash/get');
16
17
  const uniqBy = require('lodash/uniqBy');
17
18
  const { getWalletDid } = require('@blocklet/meta/lib/did-utils');
@@ -554,6 +555,13 @@ const init = ({ node, notificationService }) => {
554
555
  }
555
556
  }
556
557
 
558
+ // 如果 notification 没有 id,则生成一个, wallet 要基于这唯一个ID进行处理
559
+ if (!notification.id) {
560
+ notification.id = nanoid();
561
+ }
562
+
563
+ notification.type = notification.type || 'notification';
564
+
557
565
  const baseParams = {
558
566
  ...rest,
559
567
  teamDid,
@@ -199,7 +199,7 @@ const sendToAppDid = async ({
199
199
  wsServer,
200
200
  }) => {
201
201
  if (notification && sender) {
202
- const { keepForOfflineUser = true } = options || {};
202
+ const { keepForOfflineUser = true, ttl } = options || {};
203
203
  const teamDid = sender.appDid;
204
204
  const { id } = notification;
205
205
  if (Array.isArray(receiver)) {
@@ -227,14 +227,14 @@ const sendToAppDid = async ({
227
227
  });
228
228
  }
229
229
 
230
- // 这里仅 feed 类型不需要保存离线消息
231
- // connect|passthrough 类型都需要保存离线消息,目的是为了快速流转到下一步
232
- const isKeepForOfflineUser =
233
- keepForOfflineUser && (!notification.type || notification.type?.toLowerCase() !== 'feed');
234
-
235
- if (count <= 0 && isKeepForOfflineUser) {
230
+ if (count <= 0 && keepForOfflineUser) {
236
231
  logger.error('Online client was not found', { userDid: receiver });
237
- await states.message.insert({ did: receiver, event: EVENTS.MESSAGE, data: payload });
232
+ await states.message.insert({
233
+ did: receiver,
234
+ event: EVENTS.MESSAGE,
235
+ data: payload,
236
+ ttl: typeof ttl === 'number' && ttl > 0 ? ttl : null,
237
+ });
238
238
  }
239
239
  });
240
240
  return;
@@ -16,10 +16,7 @@ const parseNotification = (notification, senderInfo) => {
16
16
 
17
17
  // TODO: 如果通过 message id 实现消息去重, 消息顺序等
18
18
  notifications.forEach((x) => {
19
- if (!x.id) {
20
- x.createdAt = new Date();
21
- }
22
-
19
+ x.createdAt = x.createdAt || new Date();
23
20
  x.type = x.type || 'notification';
24
21
 
25
22
  x.sender = {
@@ -1,12 +1,29 @@
1
1
  const BaseState = require('@abtnode/core/lib/states/base');
2
+ const { Op, Sequelize } = require('sequelize');
3
+ const logger = require('@abtnode/logger')('@abtnode/core:states');
4
+
5
+ const DEFAULT_TTL = 30; // 30 minutes
6
+ const MAX_TTL = 7200; // 7200 minutes (5 days)
7
+ const MINUTE_IN_MS = 1000 * 60;
2
8
 
3
9
  class MessageState extends BaseState {
4
10
  insert(doc, ...args) {
11
+ const extra = {};
12
+ if (doc.ttl && typeof doc.ttl === 'number' && doc.ttl > 0) {
13
+ const ttl = Math.min(doc.ttl, MAX_TTL);
14
+ extra.expiredAt = new Date(Date.now() + MINUTE_IN_MS * ttl);
15
+ } else if (!doc.ttl && doc.event === 'message' && doc.data?.type) {
16
+ if (['feed', 'connect', 'passthrough'].includes(doc.data.type)) {
17
+ extra.expiredAt = new Date(Date.now() + MINUTE_IN_MS * DEFAULT_TTL); // 30分钟后过期
18
+ }
19
+ }
20
+
5
21
  return super.insert(
6
22
  {
7
23
  ...doc,
8
24
  createdAt: Date.now(),
9
25
  updatedAt: Date.now(),
26
+ ...extra,
10
27
  },
11
28
  ...args
12
29
  );
@@ -16,6 +33,48 @@ class MessageState extends BaseState {
16
33
  const t = time || 5 * 24 * 60 * 60 * 1000; // 5 day
17
34
  return this.remove({ createdAt: { $lt: Date.now() - t } });
18
35
  }
36
+
37
+ /**
38
+ * 如果有设置过期时间,则删除过期的数据,
39
+ * 如果没有设置过期时间,则清除数据的条件如下
40
+ * 1. 创建时间早于五分钟
41
+ * 2. event 类型为 'message'
42
+ * 3. data.type 为 'feed', 'connect' 或 'passthrough'
43
+ */
44
+ async pruneExpiredData() {
45
+ try {
46
+ // 获取指定时间前的时间戳
47
+ const expiryThreshold = new Date();
48
+
49
+ // 1. 删除有 expiredAt 的记录
50
+ const deletedExpiredData = await this.remove({
51
+ where: {
52
+ expiredAt: { [Op.lt]: expiryThreshold },
53
+ },
54
+ });
55
+
56
+ logger.info(`message data cleanup completed: deleted ${deletedExpiredData} expired records`);
57
+
58
+ // 2. 兼容代码,删除之前没有设置 expiredAt 的记录
59
+ const timeAgo = new Date();
60
+ timeAgo.setMinutes(timeAgo.getMinutes() - DEFAULT_TTL); // 设置过期时间
61
+
62
+ const where = {
63
+ createdAt: { [Op.lt]: timeAgo },
64
+ expiredAt: { [Op.is]: null },
65
+ event: 'message',
66
+ [Op.and]: [Sequelize.literal("json_extract(data, '$.type') IN ('feed', 'connect', 'passthrough')")],
67
+ };
68
+
69
+ const deletedCount = await this.remove({
70
+ where,
71
+ });
72
+
73
+ logger.info(`message data cleanup completed: deleted ${deletedCount} records`);
74
+ } catch (error) {
75
+ logger.error('Error during message data cleanup:', error);
76
+ }
77
+ }
19
78
  }
20
79
 
21
80
  module.exports = MessageState;
@@ -165,6 +165,7 @@ module.exports = ({ node, req, options }) => {
165
165
  const opt = {
166
166
  checkFromDb: (decoded) => cache.sessionCacheDisabledUser.get(decoded?.did),
167
167
  teamDid,
168
+ locale: req.blockletLocale,
168
169
  };
169
170
 
170
171
  const user = await verifySessionToken(token, secret, opt);
@@ -2,7 +2,7 @@ const { joinURL } = require('ufo');
2
2
  const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
3
3
  const pick = require('lodash/pick');
4
4
  const defaults = require('lodash/defaults');
5
- const cloneDeep = require('lodash/cloneDeep');
5
+ const cloneDeep = require('@abtnode/util/lib/deep-clone');
6
6
  const {
7
7
  shouldSyncFederated,
8
8
  isMaster,
@@ -0,0 +1,296 @@
1
+ const JWT = require('@arcblock/jwt');
2
+ const CustomError = require('@abtnode/util/lib/custom-error');
3
+ const { callFederated } = require('@abtnode/auth/lib/util/federated');
4
+ const { fromAppDid } = require('@arcblock/did-ext');
5
+ const sortBy = require('lodash/sortBy');
6
+ const pick = require('lodash/pick');
7
+ const last = require('lodash/last');
8
+ const { PASSPORT_STATUS, ROLES, SECURITY_RULE_DEFAULT_ID } = require('@abtnode/constant');
9
+
10
+ const { getApplicationInfo, messages } = require('@abtnode/auth/lib/auth');
11
+ const { extractUserAvatar, getAvatarByEmail, getUserAvatarUrl, getAvatarByUrl } = require('@abtnode/util/lib/user');
12
+ const getRequestIP = require('@abtnode/util/lib/get-request-ip');
13
+ const formatContext = require('@abtnode/util/lib/format-context');
14
+ const { checkInvitedUserOnly } = require('@abtnode/auth/lib/oauth');
15
+ const { getDeviceData } = require('@abtnode/util/lib/device');
16
+
17
+ const federatedUtil = require('./federated');
18
+ const initJwt = require('../libs/jwt');
19
+ const { createTokenFn, getDidConnectVersion } = require('.');
20
+
21
+ // 当无法从 gravatar 获取头像时,使用默认头像
22
+ const defaultAvatar =
23
+ 'data:image/png;base64,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';
24
+
25
+ /**
26
+ * @description 获取默认的通行证(常见用于 oauth 账户账户首次登录,无任何可以使用的通行证的情况下,日志中记录的通行证信息)
27
+ * @returns { name: string, role: string }
28
+ */
29
+ const getDefaultPassport = () => {
30
+ return { name: 'Guest', role: 'guest', scope: 'passport' };
31
+ };
32
+
33
+ /**
34
+ * @description 从 request 参数中获取验证码
35
+ * @param {object} options
36
+ * @param {object} options.logger 日志对象
37
+ * @param {object} options.req 请求对象
38
+ * @returns {Promise<string>}
39
+ */
40
+ const getVerifyCodeFromReq = async ({ logger, req }) => {
41
+ const { code, magicToken } = req.body;
42
+ const blocklet = await req.getBlocklet();
43
+ const blockletInfo = await req.getBlockletInfo();
44
+ const teamDid = blocklet.appPid;
45
+ let finalCode = code;
46
+ if (!code && magicToken) {
47
+ const valid = await JWT.verify(magicToken, blockletInfo.wallet.publicKey);
48
+ if (!valid) {
49
+ logger.error('Email login: Invalid magic token', { teamDid, magicToken });
50
+ throw new CustomError(401, 'Invalid magic link');
51
+ }
52
+ const decodeData = JWT.decode(magicToken, true);
53
+ if (!decodeData?.data?.code) {
54
+ logger.error('Email login: failed to parse magicToken data', { teamDid, magicToken, decodeData });
55
+ throw new CustomError(400, 'Invalid magic token format');
56
+ }
57
+ finalCode = decodeData?.data?.code;
58
+ }
59
+ return finalCode;
60
+ };
61
+
62
+ /**
63
+ * @description 根据 sub 获取用户钱包信息
64
+ * @param {string} sub 用户信息 sub
65
+ * @param {object} options
66
+ * @param {object} options.req 请求对象
67
+ * @returns {Promise<{ wallet: string }>} 用户钱包信息
68
+ */
69
+ const getUserFromSub = async (sub, { req }) => {
70
+ const blocklet = await req.getBlocklet();
71
+ const blockletInfo = await req.getBlockletInfo();
72
+ const { sourceAppPid = null } = req.body;
73
+
74
+ let userWallet;
75
+ if (sourceAppPid) {
76
+ const masterSite = federatedUtil.getFederatedMaster(blocklet);
77
+ const { permanentWallet } = blockletInfo;
78
+ const result = await callFederated({
79
+ action: 'getUser',
80
+ site: masterSite,
81
+ permanentWallet,
82
+ data: {
83
+ userSub: sub,
84
+ },
85
+ });
86
+ userWallet = result?.wallet;
87
+ } else {
88
+ userWallet = fromAppDid(sub, blockletInfo.wallet.secretKey);
89
+ }
90
+ return {
91
+ wallet: userWallet,
92
+ };
93
+ };
94
+
95
+ /**
96
+ * @description 获取上次使用的通行证
97
+ * @param {params} params
98
+ * @param {array} params.passports
99
+ * @returns {object} { id, name, role, scope }
100
+ */
101
+ const getLastUsedPassport = ({ passports = [] }) => {
102
+ let result;
103
+ const validPassports = passports.filter((item) => item.status === PASSPORT_STATUS.VALID);
104
+ const lastUsedPassport = last(sortBy(validPassports, 'lastLoginAt'));
105
+ if (lastUsedPassport) {
106
+ result = pick(lastUsedPassport, ['id', 'name', 'role', 'scope']);
107
+ }
108
+ return result;
109
+ };
110
+
111
+ const getAvatarBnByEmail = async (email, { req, node }) => {
112
+ if (!email) {
113
+ return defaultAvatar;
114
+ }
115
+ const blocklet = await req.getBlocklet();
116
+ const nodeInfo = await req.getNodeInfo();
117
+ const teamDid = blocklet.appPid;
118
+ const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
119
+ let result = await getAvatarByEmail(email);
120
+ if (!result) result = defaultAvatar;
121
+ result = await extractUserAvatar(result, { dataDir });
122
+
123
+ return result;
124
+ };
125
+
126
+ const getAvatarBnByUrl = async (url, { req, node }) => {
127
+ if (!url) {
128
+ return defaultAvatar;
129
+ }
130
+ const blocklet = await req.getBlocklet();
131
+ const nodeInfo = await req.getNodeInfo();
132
+ const teamDid = blocklet.appPid;
133
+ const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
134
+ let result;
135
+ try {
136
+ result = await getAvatarByUrl(url);
137
+ } catch {
138
+ result = defaultAvatar;
139
+ }
140
+ result = await extractUserAvatar(result, { dataDir });
141
+ return result;
142
+ };
143
+
144
+ const getUserNameByEmail = (email) => {
145
+ // 目前通过 email 前缀来获取用户名称
146
+ return email.split('@')[0];
147
+ };
148
+
149
+ const loginUserSession = async (
150
+ { did, pk, profile, passport, sourceAppPid, connectedAccount, provider },
151
+ { req, node, options, loggedUser }
152
+ ) => {
153
+ if (!did || !pk) {
154
+ throw new CustomError(400, 'Missing required parameters');
155
+ }
156
+ const blocklet = await req.getBlocklet();
157
+ const blockletInfo = await req.getBlockletInfo();
158
+ const { locale = 'en' } = req.query;
159
+ const teamDid = blocklet.appPid;
160
+ const lastLoginIp = getRequestIP(req);
161
+ const passportForLog = passport || getDefaultPassport();
162
+
163
+ if (!loggedUser) {
164
+ // eslint-disable-next-line no-param-reassign
165
+ loggedUser = await node.loginUser({
166
+ teamDid,
167
+ user: {
168
+ ...profile,
169
+ did,
170
+ pk,
171
+ locale,
172
+ lastLoginIp,
173
+ sourceAppPid,
174
+ passport,
175
+ connectedAccount,
176
+ },
177
+ });
178
+ }
179
+
180
+ await node.createAuditLog(
181
+ {
182
+ action: 'login',
183
+ args: {
184
+ teamDid,
185
+ userDid: did,
186
+ passport: passportForLog,
187
+ provider,
188
+ sourceAppPid,
189
+ },
190
+ context: formatContext(Object.assign(req, { user: loggedUser })),
191
+ result: loggedUser,
192
+ },
193
+ node
194
+ );
195
+
196
+ const ua = req.get('user-agent');
197
+ const visitorId = req.get('x-blocklet-visitor-id');
198
+ const deviceData = getDeviceData({ req });
199
+ const userSessionDoc = await node.upsertUserSession({
200
+ teamDid,
201
+ userDid: did,
202
+ visitorId,
203
+ appPid: teamDid,
204
+ passportId: passport?.id,
205
+ status: 'online',
206
+ ua: null,
207
+ lastLoginIp,
208
+ extra: {
209
+ walletOS: 'web',
210
+ device: deviceData,
211
+ },
212
+ });
213
+
214
+ if (federatedUtil.shouldSyncFederated(sourceAppPid, blocklet)) {
215
+ const syncUserData = {
216
+ ...profile,
217
+ did,
218
+ pk,
219
+ connectedAccount: [connectedAccount],
220
+ inviter: loggedUser.inviter,
221
+ };
222
+ if (syncUserData.avatar) {
223
+ syncUserData.avatar = getUserAvatarUrl(blockletInfo.appUrl, syncUserData.avatar);
224
+ }
225
+ const masterSite = federatedUtil.getFederatedMaster(blocklet);
226
+
227
+ await node.syncFederated({
228
+ did: teamDid,
229
+ data: {
230
+ users: [
231
+ {
232
+ ...syncUserData,
233
+ action: 'connectAccount',
234
+ sourceAppPid: sourceAppPid || masterSite?.appPid,
235
+ },
236
+ ],
237
+ },
238
+ });
239
+ await node.syncUserSession({
240
+ teamDid,
241
+ userDid: userSessionDoc.userDid,
242
+ visitorId: userSessionDoc.visitorId,
243
+ passportId: passport?.id,
244
+ targetAppPid: sourceAppPid,
245
+ ua,
246
+ lastLoginIp,
247
+ extra: {
248
+ walletOS: 'web',
249
+ device: deviceData,
250
+ },
251
+ });
252
+ }
253
+ const { createSessionToken } = initJwt(node, options);
254
+ const createToken = createTokenFn(createSessionToken);
255
+ const sessionConfig = blocklet.settings?.session || {};
256
+ const { sessionToken, refreshToken } = createToken(
257
+ did,
258
+ {
259
+ secret: blockletInfo.secret,
260
+ passport,
261
+ role: passport?.scope === 'passport' ? passport.role : ROLES.GUEST,
262
+ fullName: loggedUser.fullName,
263
+ provider,
264
+ walletOS: 'web',
265
+ emailVerified: !!loggedUser?.emailVerified,
266
+ phoneVerified: !!loggedUser?.phoneVerified,
267
+ },
268
+ { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
269
+ );
270
+
271
+ return {
272
+ sessionToken,
273
+ refreshToken,
274
+ visitorId: userSessionDoc.visitorId,
275
+ };
276
+ };
277
+
278
+ const checkNeedInvite = async ({ req, node, teamDid, locale }) => {
279
+ const { accessPolicyConfig } = await req.getSecurityConfig({ id: SECURITY_RULE_DEFAULT_ID });
280
+ const isInvitedUserOnly = await checkInvitedUserOnly(accessPolicyConfig, node, teamDid);
281
+ if (isInvitedUserOnly) {
282
+ throw new CustomError(403, messages.notInvited[locale]);
283
+ }
284
+ };
285
+
286
+ module.exports = {
287
+ getDefaultPassport,
288
+ getVerifyCodeFromReq,
289
+ getUserFromSub,
290
+ getLastUsedPassport,
291
+ getAvatarBnByEmail,
292
+ getAvatarBnByUrl,
293
+ getUserNameByEmail,
294
+ loginUserSession,
295
+ checkNeedInvite,
296
+ };
@@ -1 +1 @@
1
- import{a2 as e,j as t}from"./vendor-mui-core-DxqV1NVn.js";import{r as a}from"./vendor-ux-did-connect-Bciw9Ypu.js";var r={},o=e;Object.defineProperty(r,"__esModule",{value:!0});var u=r.default=void 0,i=o(a()),p=t;u=r.default=(0,i.default)((0,p.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");export{u as d};
1
+ import{a2 as e,j as t}from"./vendor-mui-core-BL-xsBvI.js";import{r as a}from"./vendor-ux-did-connect-CWUKGZcn.js";var r={},o=e;Object.defineProperty(r,"__esModule",{value:!0});var u=r.default=void 0,i=o(a()),p=t;u=r.default=(0,i.default)((0,p.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");export{u as d};
@@ -1 +1 @@
1
- import{a2 as r,j as t}from"./vendor-mui-core-DxqV1NVn.js";import{r as a}from"./vendor-ux-did-connect-Bciw9Ypu.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),l=t;u=e.default=(0,i.default)((0,l.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z"}),"CheckCircle");export{u as d};
1
+ import{a2 as r,j as t}from"./vendor-mui-core-BL-xsBvI.js";import{r as a}from"./vendor-ux-did-connect-CWUKGZcn.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),l=t;u=e.default=(0,i.default)((0,l.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z"}),"CheckCircle");export{u as d};
@@ -1 +1 @@
1
- import{a2 as r,j as t}from"./vendor-mui-core-DxqV1NVn.js";import{r as a}from"./vendor-ux-did-connect-Bciw9Ypu.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,f=o(a()),i=t;u=e.default=(0,f.default)((0,i.jsx)("path",{d:"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z"}),"ChevronLeft");export{u as d};
1
+ import{a2 as r,j as t}from"./vendor-mui-core-BL-xsBvI.js";import{r as a}from"./vendor-ux-did-connect-CWUKGZcn.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,f=o(a()),i=t;u=e.default=(0,f.default)((0,i.jsx)("path",{d:"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z"}),"ChevronLeft");export{u as d};
@@ -1 +1 @@
1
- import{a2 as r,j as t}from"./vendor-mui-core-DxqV1NVn.js";import{r as a}from"./vendor-ux-did-connect-Bciw9Ypu.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),v=t;u=e.default=(0,i.default)((0,v.jsx)("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}),"ChevronRight");export{u as d};
1
+ import{a2 as r,j as t}from"./vendor-mui-core-BL-xsBvI.js";import{r as a}from"./vendor-ux-did-connect-CWUKGZcn.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),v=t;u=e.default=(0,i.default)((0,v.jsx)("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}),"ChevronRight");export{u as d};