@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.
- package/api/emails/_templates/verify-code-body.js +4 -4
- package/api/index.js +4 -1
- package/api/libs/connect/session.js +4 -6
- package/api/libs/jwt.js +3 -3
- package/api/libs/push-kit/index.js +5 -2
- package/api/routes/blocklet.js +1 -1
- package/api/routes/federated.js +12 -2
- package/api/routes/oauth.js +56 -270
- package/api/routes/user-session.js +40 -19
- package/api/routes/user.js +254 -266
- package/api/services/auth/connect/invite.js +4 -6
- package/api/services/auth/connect/issue-passport.js +4 -6
- package/api/services/auth/session.js +5 -6
- package/api/services/notification/index.js +20 -16
- package/api/services/notification/queue.js +9 -1
- package/api/socket/channel/did.js +8 -8
- package/api/socket/util.js +1 -4
- package/api/state/message.js +59 -0
- package/api/util/attach-shared-utils.js +1 -0
- package/api/util/federated.js +1 -1
- package/api/util/user-util.js +296 -0
- package/dist/assets/{ArrowDropDown-odHjNJIs.js → ArrowDropDown-ptWD82T6.js} +1 -1
- package/dist/assets/{CheckCircle-BqOSvJMp.js → CheckCircle-Btm_ouu-.js} +1 -1
- package/dist/assets/{ChevronLeft-Dv7rlUf5.js → ChevronLeft-Dlcukg5b.js} +1 -1
- package/dist/assets/{ChevronRight-CWeJn1iz.js → ChevronRight-Dum8C8k7.js} +1 -1
- package/dist/assets/{Community-CMFBTMi_.js → Community-BuDGbplJ.js} +1 -1
- package/dist/assets/{DeleteOutline-Cr-TyrUV.js → DeleteOutline-qIhkqz9A.js} +1 -1
- package/dist/assets/{Done-C1TA1wbA.js → Done-CxsGHhW2.js} +1 -1
- package/dist/assets/{Download-DxhnUTM_.js → Download-DtSKdPMo.js} +1 -1
- package/dist/assets/{EditIcon-Bgmg6UE0.js → EditIcon-BOKrjkh4.js} +1 -1
- package/dist/assets/{Email-BphlAPta.js → Email-D1oAzxhZ.js} +1 -1
- package/dist/assets/{Error-pXXvJFxN.js → Error-yZoplO-q.js} +1 -1
- package/dist/assets/{ExpandLess-Dc_dI20M.js → ExpandLess-DN5VsSyP.js} +1 -1
- package/dist/assets/{Google-DNUuYFIA.js → Google-Drf-_CBl.js} +1 -1
- package/dist/assets/{Holiday-DKefG3Bb.js → Holiday-CGw5hZXz.js} +1 -1
- package/dist/assets/{InfoOutlined-CEUhR4DY.js → InfoOutlined-CLOzYFOV.js} +1 -1
- package/dist/assets/{Launch-BUTOr3cR.js → Launch-BtdPv0ms.js} +1 -1
- package/dist/assets/{LaunchOutlined-QHq-RUJt.js → LaunchOutlined-Bxfn3D1k.js} +1 -1
- package/dist/assets/{Location-BuaxMxu4.js → Location-BNMzVuhr.js} +1 -1
- package/dist/assets/{LockIcon-CQ1tExIY.js → LockIcon-D-N7I3eV.js} +1 -1
- package/dist/assets/{Meeting-Cs60QtvP.js → Meeting-CHDEMp94.js} +1 -1
- package/dist/assets/{MoreHoriz-D1SOL47a.js → MoreHoriz-Ecf_Y2c5.js} +1 -1
- package/dist/assets/{OffSick-DinPaelp.js → OffSick-s49E5S0C.js} +1 -1
- package/dist/assets/{Phone-BmouKMyi.js → Phone-B7KVJqdR.js} +1 -1
- package/dist/assets/{PlayArrow-D7cGSxeN.js → PlayArrow-C5Hul3eK.js} +1 -1
- package/dist/assets/{QuestionMarkCircle-Dt9XJWEe.js → QuestionMarkCircle-D9Nr1DvN.js} +1 -1
- package/dist/assets/{ServerLogo-B33ZRE5q.js → ServerLogo-CJ7KvDlS.js} +1 -1
- package/dist/assets/{Timezone-CyMhRxlx.js → Timezone-fKWN5g03.js} +1 -1
- package/dist/assets/TuneOutlined-CIVU5KTm.js +1 -0
- package/dist/assets/{ViewList-vu1qOJ6P.js → ViewList-DQNBBLS5.js} +1 -1
- package/dist/assets/{WorkingRemotely-BP_VIHeM.js → WorkingRemotely-8AJSfiNI.js} +1 -1
- package/dist/assets/access-control-5GyLuYd7.js +14 -0
- package/dist/assets/{actions-4oGfCMlR.js → actions-BK1Ssw2h.js} +1 -1
- package/dist/assets/{add-component-core-CE0nArG4.js → add-component-core-Bm9enQVM.js} +31 -31
- package/dist/assets/{add-resource-BYM4JwzE.js → add-resource-Cqmj5BBD.js} +1 -1
- package/dist/assets/{addon-B9bb2bvM.js → addon-Dfs1zul7.js} +1 -1
- package/dist/assets/advanced-MSBu-f81.js +49 -0
- package/dist/assets/api-DeTTY4rz.js +1 -0
- package/dist/assets/appearance-_saX27MM.js +1 -0
- package/dist/assets/ar-Bd3GUoqC.js +3 -0
- package/dist/assets/{ar-CVzKLI4f.js → ar-DrRqcx2b.js} +1 -1
- package/dist/assets/{audit-logs-D8H5E0fC.js → audit-logs-C8OHcyQY.js} +3 -3
- package/dist/assets/base32-DY8fPTYx.js +1 -0
- package/dist/assets/branding-CanOP0qb.js +40 -0
- package/dist/assets/branding-DelDZvig.js +50 -0
- package/dist/assets/{bundle-avatar-DHwmIozH.js → bundle-avatar-CxGKqpL1.js} +1 -1
- package/dist/assets/button-GsH-bz74.js +1 -0
- package/dist/assets/{click-to-copy-B0HMuCN_.js → click-to-copy-BuZpdwN0.js} +1 -1
- package/dist/assets/{complete-BNf0-iqY.js → complete-CIxsaCVT.js} +1 -1
- package/dist/assets/{component-1r0VSsqq.js → component-vibwLNji.js} +102 -87
- package/dist/assets/{config-BeD5_8kr.js → config-BbT0ik5t.js} +1 -1
- package/dist/assets/{config-CqHmZdZv.js → config-Bl-eQAj5.js} +1 -1
- package/dist/assets/{config-navigation-DtN0_qFZ.js → config-navigation-Dw7tct52.js} +7 -7
- package/dist/assets/{config-space-DlwZewcm.js → config-space-D3pvjnQx.js} +1 -1
- package/dist/assets/{confirm-DmMN-34s.js → confirm-BzL9LNyf.js} +1 -1
- package/dist/assets/{connect-CC9dcVMV.js → connect-CzcOswsI.js} +1 -1
- package/dist/assets/connect-Czr8O47H.js +1 -0
- package/dist/assets/{connect-to-CzffwD9G.js → connect-to-LVtY3yeI.js} +1 -1
- package/dist/assets/{content-layout-7vu3yv_f.js → content-layout-CcLv-R_J.js} +1 -1
- package/dist/assets/dashboard-BuFzcMGR.js +213 -0
- package/dist/assets/de-4RuZHBym.js +3 -0
- package/dist/assets/{de-DIJPqt1Y.js → de-BRPos3d1.js} +1 -1
- package/dist/assets/{delete-confirm-BTaU_6Kx.js → delete-confirm-Bg3_0xz8.js} +1 -1
- package/dist/assets/{did-address-BC-0j4Pt.js → did-address-Dn6n8fAo.js} +1 -1
- package/dist/assets/doc-board-bg-DWZHV9Ng.png +0 -0
- package/dist/assets/domain-C_0cRyXj.js +9 -0
- package/dist/assets/{domain-action-card-DwQ7Q8wY.js → domain-action-card-B6WSK3W9.js} +2 -2
- package/dist/assets/domains-BQtz7ONz.js +1 -0
- package/dist/assets/{email-mj0bVFDS.js → email-qq2sglAS.js} +2 -2
- package/dist/assets/{es-C5RqG0zA.js → es-D2rCdMgt.js} +1 -1
- package/dist/assets/es-DPG1emNh.js +3 -0
- package/dist/assets/exchange-passport-CfAHAVKI.js +1 -0
- package/dist/assets/{fr-BHsPT43-.js → fr-DAFx50ef.js} +1 -1
- package/dist/assets/fr-u7MDLCDo.js +3 -0
- package/dist/assets/fuel-DVzKzmYw.js +32 -0
- package/dist/assets/{get-safe-url-BKl2A9x2.js → get-safe-url-CA3J0_99.js} +1 -1
- package/dist/assets/{get-safe-url-QFq5JNoE.js → get-safe-url-DnmtzIqo.js} +1 -1
- package/dist/assets/{hi-Bie09Alk.js → hi-CkD7b6N9.js} +1 -1
- package/dist/assets/hi-DS9ZR9W2.js +1 -0
- package/dist/assets/home--ykFBnb1.js +1 -0
- package/dist/assets/{id-IlcS05qm.js → id-BMWKdVei.js} +1 -1
- package/dist/assets/id-C459Zhwd.js +3 -0
- package/dist/assets/{iframe-B9mCpo4I.js → iframe-B5D34SYo.js} +1 -1
- package/dist/assets/{index-Ct7s2LPI.js → index-B1UWfhev.js} +3 -3
- package/dist/assets/{index-CJCg9yIK.js → index-B8T_6tqA.js} +1 -1
- package/dist/assets/{index-D_wVtHmh.js → index-BByO9801.js} +1 -1
- package/dist/assets/{index-DQ_RzIwU.js → index-BDliasS9.js} +1 -1
- package/dist/assets/index-BPS0iHSZ.js +4 -0
- package/dist/assets/index-BQLZ0lsX.js +1 -0
- package/dist/assets/index-BWpwjp4L.js +104 -0
- package/dist/assets/index-BqIq9Uma.js +138 -0
- package/dist/assets/{index-B4Q2DAdn.js → index-C6eHDaxg.js} +11 -11
- package/dist/assets/{index-BMSA5TdD.js → index-CBhHQMgh.js} +1 -1
- package/dist/assets/index-CClhZ8rs.js +1 -0
- package/dist/assets/index-CytYWl7a.js +113 -0
- package/dist/assets/index-D8CNdALX.js +2 -0
- package/dist/assets/index-DOdTZRA4.js +11 -0
- package/dist/assets/{index-79U1RPaq.js → index-Da6LyIoG.js} +2 -2
- package/dist/assets/{index-BJ2lJo7L.js → index-Dy3LPNyS.js} +42 -42
- package/dist/assets/index-ItdGu4Wh.js +2 -0
- package/dist/assets/{index-m8CaSxXx.js → index-J5kmwEca.js} +1 -1
- package/dist/assets/{index-fWGZM-oP.js → index-L3MBVAcg.js} +1 -1
- package/dist/assets/{index-BZvVDfZ4.js → index-VUi6PKrJ.js} +1 -1
- package/dist/assets/{index-u-lA6P_E.js → index-dCzPMsw6.js} +1 -1
- package/dist/assets/index-ndYC_y0r.js +15 -0
- package/dist/assets/{index-CGK3FEjY.js → index-vxB3STPb.js} +1 -1
- package/dist/assets/index-y6Dw39ly.js +290 -0
- package/dist/assets/{invitation-B8Qx_pFq.js → invitation-Cp6DuOW5.js} +8 -7
- package/dist/assets/invite-DjADjbzm.js +1 -0
- package/dist/assets/issue-passport-Bu5NvC_2.js +1 -0
- package/dist/assets/{item-BSGXym2I.js → item-ClBhYYKW.js} +1 -1
- package/dist/assets/ja-B5tIV7r-.js +3 -0
- package/dist/assets/{ja-C2daM668.js → ja-D2jInSAT.js} +1 -1
- package/dist/assets/keyboard-arrow-down-rounded-DadBVmpO.js +1 -0
- package/dist/assets/{ko-Lni8u0p_.js → ko-BGB5KJZq.js} +1 -1
- package/dist/assets/ko-CL3JJCJN.js +3 -0
- package/dist/assets/landing-page-BfVl47YO.js +1 -0
- package/dist/assets/{launch-result-message-ByEG8r_7.js → launch-result-message-BP5yMmIB.js} +1 -1
- package/dist/assets/{layout-BqhTD729.js → layout-D5G7Z8Ws.js} +1 -1
- package/dist/assets/list-CjtRvxdF.js +211 -0
- package/dist/assets/{list-header-BmTDmRY0.js → list-header-Cip98Afo.js} +1 -1
- package/dist/assets/localization-Tn68766t.js +1 -0
- package/dist/assets/{log-o_Cadt8j.js → log-_cZt5s1j.js} +1 -1
- package/dist/assets/{login-BQozrLDm.js → login-Bd9eibzl.js} +1 -1
- package/dist/assets/{login-oauth-callback-D7lIww1c.js → login-oauth-callback-Buv0sriC.js} +1 -1
- package/dist/assets/{logo-uploader-CUQ3aWZJ.js → logo-uploader-DGn3pkYl.js} +5 -4
- package/dist/assets/{lost-passport-DkETH2Lu.js → lost-passport-BplwQoPb.js} +3 -3
- package/dist/assets/omit-DYK_TtPQ.js +1 -0
- package/dist/assets/{open-window-BOl-kTC2.js → open-window-3TWqcI62.js} +1 -1
- package/dist/assets/overview-CJ3muOc6.js +84 -0
- package/dist/assets/{page-header-Dm1v9v5q.js → page-header-FKKsPnE9.js} +1 -1
- package/dist/assets/{permission-B5jnw9r2.js → permission-Dd3ufGD-.js} +1 -1
- package/dist/assets/preferences-D4OSAVTW.js +1 -0
- package/dist/assets/profile-embed--1Je95gw.js +1 -0
- package/dist/assets/pt-CYRkKZmh.js +1 -0
- package/dist/assets/{pt-D6N4RLzf.js → pt-DY0Ku5W5.js} +1 -1
- package/dist/assets/publish-resource-B4kuEUIu.js +1 -0
- package/dist/assets/{react-beautiful-dnd.esm-B9MfX9Xl.js → react-beautiful-dnd.esm-DxmtDCVc.js} +4 -4
- package/dist/assets/{relative-time-RQnsWZQc.js → relative-time-Bp0EO1aU.js} +1 -1
- package/dist/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-400-normal-Dry59Hjn.woff +0 -0
- package/dist/assets/roboto-cyrillic-500-normal-CsCirF4J.woff +0 -0
- package/dist/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-700-normal-CB1Rmiii.woff +0 -0
- package/dist/assets/roboto-cyrillic-700-normal-CzEIZVQR.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-400-normal-BxX1-eA_.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-500-normal-ElvJfk8V.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-700-normal-CIu0AXX2.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-700-normal-D_fA0fHY.woff2 +0 -0
- package/dist/assets/roboto-greek-400-normal-CAI06USH.woff +0 -0
- package/dist/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
- package/dist/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
- package/dist/assets/roboto-greek-500-normal-D8eQD5zT.woff +0 -0
- package/dist/assets/roboto-greek-700-normal-DCrt6r9F.woff +0 -0
- package/dist/assets/roboto-greek-700-normal-DpKAje7q.woff2 +0 -0
- package/dist/assets/roboto-latin-400-normal-551zQQ7R.woff +0 -0
- package/dist/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
- package/dist/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
- package/dist/assets/roboto-latin-500-normal-_8jDuD7w.woff +0 -0
- package/dist/assets/roboto-latin-700-normal-CTLkNcF_.woff +0 -0
- package/dist/assets/roboto-latin-700-normal-DZr4b_KL.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-400-normal-uRIBRJt5.woff +0 -0
- package/dist/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-500-normal-eJ10kk0m.woff +0 -0
- package/dist/assets/roboto-latin-ext-700-normal-BNPgmEQS.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-700-normal-Cnx4FGpK.woff +0 -0
- package/dist/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
- package/dist/assets/roboto-math-400-normal-DHrwdhE6.woff +0 -0
- package/dist/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
- package/dist/assets/roboto-math-500-normal-CetgDdIa.woff +0 -0
- package/dist/assets/roboto-math-700-normal-CpTCM92H.woff +0 -0
- package/dist/assets/roboto-math-700-normal-xbpggnJp.woff2 +0 -0
- package/dist/assets/roboto-symbols-400-normal-bG5rsNFs.woff +0 -0
- package/dist/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
- package/dist/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
- package/dist/assets/roboto-symbols-500-normal-toKUCDph.woff +0 -0
- package/dist/assets/roboto-symbols-700-normal-B2QKVW64.woff +0 -0
- package/dist/assets/roboto-symbols-700-normal-DKkQdRpM.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-400-normal-DgufTq8s.woff +0 -0
- package/dist/assets/roboto-vietnamese-500-normal-Dw5heWgq.woff +0 -0
- package/dist/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-700-normal-BFWtvCOj.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-700-normal-ChAl_rRV.woff +0 -0
- package/dist/assets/{ru-D-xvMzxI.js → ru-Cv5vRo7s.js} +1 -1
- package/dist/assets/ru-Dzg-gLvu.js +1 -0
- package/dist/assets/runtime-DCHSigWq.js +1 -0
- package/dist/assets/sdk-B4tneH2b.js +1 -0
- package/dist/assets/security-Ba0U57n2.js +95 -0
- package/dist/assets/session-BXc0WNE7.js +1 -0
- package/dist/assets/setup-bc5fgvzY.js +19 -0
- package/dist/assets/{shorten-label-DkFTGSoy.js → shorten-label-BcXnCxH2.js} +1 -1
- package/dist/assets/{simple-select-CqakAZFe.js → simple-select-D7qC2duk.js} +1 -1
- package/dist/assets/{slicedToArray-BuQur6Mi.js → slicedToArray-CG0jVe85.js} +2 -2
- package/dist/assets/{start-BSUY3DBl.js → start-kkjng8Di.js} +1 -1
- package/dist/assets/status-Bcehte3I.js +1 -0
- package/dist/assets/step-actions-CAn2VbnK.js +31 -0
- package/dist/assets/studio-Dnzc2A5y.js +6 -0
- package/dist/assets/{switch-control-BBlLGjaH.js → switch-control-DZceCxwF.js} +1 -1
- package/dist/assets/th-CevmRMq6.js +1 -0
- package/dist/assets/{th-CycIQ910.js → th-D6oDBVGi.js} +1 -1
- package/dist/assets/{traffic-CJDIGmp5.js → traffic-BbJxF2T-.js} +4 -4
- package/dist/assets/transfer-j5hCBx8d.js +16 -0
- package/dist/assets/{unsubscribe-afXXIHEf.js → unsubscribe-DJgSmFME.js} +1 -1
- package/dist/assets/{use-mobile-CUT5hy9q.js → use-mobile-DNsgYi-4.js} +1 -1
- package/dist/assets/use-mobile-DVecy9Ks.js +1 -0
- package/dist/assets/{useAsync-DM8qaMe4.js → useAsync-Bia14KO2.js} +1 -1
- package/dist/assets/{useAsyncRetry-B7SbzXVI.js → useAsyncRetry-C-QH3IsB.js} +1 -1
- package/dist/assets/{useLocalStorage-Dd4pybDP.js → useLocalStorage-BQFZ73WZ.js} +1 -1
- package/dist/assets/user-center-BZ0ZkNAA.js +67 -0
- package/dist/assets/{util-C_BCTHfw.js → util-C9Xcu_Dq.js} +1 -1
- package/dist/assets/{util-YyWTpLT7.js → util-WwcocPP-.js} +1 -1
- package/dist/assets/vendor-arcblock-B7hyNlnQ.js +1598 -0
- package/dist/assets/{vendor-hooks-sw5wvnca.js → vendor-hooks-DnflU2EL.js} +1 -1
- package/dist/assets/{vendor-mui-core-DxqV1NVn.js → vendor-mui-core-BL-xsBvI.js} +1 -1
- package/dist/assets/{vendor-mui-x-BjL1xCkk.js → vendor-mui-x-BmOE-0pQ.js} +1 -1
- package/dist/assets/vendor-utils-Cs6ARqvU.js +11 -0
- package/dist/assets/vendor-ux-did-connect-BDmhBveY.css +1 -0
- package/dist/assets/vendor-ux-did-connect-CWUKGZcn.js +1843 -0
- package/dist/assets/{vi-BqnfnvFP.js → vi-BKKJMbW2.js} +1 -1
- package/dist/assets/vi-PQuaKyKY.js +1 -0
- package/dist/assets/wrap-locale-DyRnlWyZ.js +1 -0
- package/dist/assets/zh-BBkG8qYp.js +4 -0
- package/dist/assets/{zh-CHmwTyCg.js → zh-D4Lak9gZ.js} +1 -1
- package/dist/assets/{zh-tw-D6K-qXNE.js → zh-tw-B08rjgK3.js} +1 -1
- package/dist/assets/zh-tw-BHJNqYL0.js +3 -0
- package/dist/images/all-done.png +0 -0
- package/dist/index.html +7 -7
- package/dist/service-worker.js +1 -1
- package/package.json +39 -40
- package/dist/assets/access-control-CpxcJItK.js +0 -14
- package/dist/assets/analytics-BXLe73MI.js +0 -11
- package/dist/assets/api-D9Yi7Zdr.js +0 -1
- package/dist/assets/appearance-DX7SoW1u.js +0 -1
- package/dist/assets/ar-2k9jaPIk.js +0 -3
- package/dist/assets/base32-BNpDT-6Q.js +0 -1
- package/dist/assets/branding-BW1rhy8d.js +0 -40
- package/dist/assets/button-CNnuiac8.js +0 -1
- package/dist/assets/connect-BfSOEYV-.js +0 -1
- package/dist/assets/dashboard-C_Q4TjPa.js +0 -216
- package/dist/assets/de-B9cLhykn.js +0 -3
- package/dist/assets/domain-CLMRXecU.js +0 -9
- package/dist/assets/domains-DF7TtN5q.js +0 -1
- package/dist/assets/es-BoQohonz.js +0 -3
- package/dist/assets/exchange-passport--DeUPzbW.js +0 -1
- package/dist/assets/form-text-input-BYF6lVnE.js +0 -11
- package/dist/assets/fr-doSYAOrt.js +0 -3
- package/dist/assets/fuel-D-kOZuF6.js +0 -32
- package/dist/assets/fullpage-DO8Hcbkl.js +0 -1
- package/dist/assets/hi-B_BwhpD8.js +0 -1
- package/dist/assets/home-CpnMpXiw.js +0 -1
- package/dist/assets/id-BgYIZCvk.js +0 -3
- package/dist/assets/index-BVOYP6aR.js +0 -11
- package/dist/assets/index-BsUr7wGb.js +0 -104
- package/dist/assets/index-C44fECmB.js +0 -138
- package/dist/assets/index-CmKAznDh.js +0 -109
- package/dist/assets/index-DqC2o5PB.js +0 -4
- package/dist/assets/index-DyTFEgKr.js +0 -1
- package/dist/assets/index-eCY24sH9.js +0 -137
- package/dist/assets/index-gTQQ3SoE.js +0 -290
- package/dist/assets/index-gcSQTx25.js +0 -1
- package/dist/assets/index.esm-CWepf7I_.js +0 -1
- package/dist/assets/inter-latin-300-normal-CvRFFuZy.woff2 +0 -0
- package/dist/assets/inter-latin-300-normal-ORCTF8i-.woff +0 -0
- package/dist/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
- package/dist/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
- package/dist/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
- package/dist/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
- package/dist/assets/inter-latin-700-normal-B8MtJ_2k.woff +0 -0
- package/dist/assets/inter-latin-700-normal-Sckx8rpT.woff2 +0 -0
- package/dist/assets/inter-latin-ext-300-normal-C2kLfG2J.woff2 +0 -0
- package/dist/assets/inter-latin-ext-300-normal-n8Ps4oXY.woff +0 -0
- package/dist/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
- package/dist/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
- package/dist/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
- package/dist/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
- package/dist/assets/inter-latin-ext-700-normal-6V9MnIL5.woff +0 -0
- package/dist/assets/inter-latin-ext-700-normal-CzikT_rs.woff2 +0 -0
- package/dist/assets/invite-BBaF_vyc.js +0 -1
- package/dist/assets/issue-passport-DC-ly7xg.js +0 -1
- package/dist/assets/ja-FMMLI8YD.js +0 -3
- package/dist/assets/ko-C0kmRXYE.js +0 -3
- package/dist/assets/list-BHs8uNT5.js +0 -200
- package/dist/assets/localization-daPAWMzR.js +0 -1
- package/dist/assets/login-bg-Cbfh9Uc2.png +0 -0
- package/dist/assets/omit-DZNQhOf-.js +0 -1
- package/dist/assets/overview-Bxm05EH6.js +0 -12
- package/dist/assets/preferences-uri2RXdB.js +0 -1
- package/dist/assets/profile-embed-DnIQcD-H.js +0 -1
- package/dist/assets/pt-C2UJZK-O.js +0 -1
- package/dist/assets/publish-resource-V53U1NNv.js +0 -1
- package/dist/assets/ru-DDA5s4-r.js +0 -1
- package/dist/assets/sdk-BKSsfgrc.js +0 -1
- package/dist/assets/session-6ZeN-aF2.js +0 -1
- package/dist/assets/setup-7Gq9K_8k.js +0 -19
- package/dist/assets/status-C52-BFuY.js +0 -1
- package/dist/assets/step-actions-CA74dwgt.js +0 -31
- package/dist/assets/studio-CAnZfyBM.js +0 -6
- package/dist/assets/th-DmqOUn4C.js +0 -1
- package/dist/assets/transfer-cG2e24sz.js +0 -16
- package/dist/assets/user-center-T8Xw464s.js +0 -67
- package/dist/assets/vendor-arcblock-DvaaLvvM.js +0 -2361
- package/dist/assets/vendor-utils-DR57WNxP.js +0 -11
- package/dist/assets/vendor-ux-did-connect-Bciw9Ypu.js +0 -1077
- package/dist/assets/vendor-ux-did-connect-DhgPdlEj.css +0 -1
- package/dist/assets/vi-Cf__CtPD.js +0 -1
- package/dist/assets/wrap-locale-CX50Vz0w.js +0 -1
- package/dist/assets/zh-NXspK2yu.js +0 -4
- 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
|
|
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
|
|
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:
|
|
28
|
+
followConfirmation: `感谢您登录 ${appName},请点击以下按钮确认您的账户。`,
|
|
29
29
|
confirmButton: '确认账户',
|
|
30
30
|
useConfirmLink: '如果确认按钮无法工作,请使用以下链接。',
|
|
31
31
|
orEnterCode: `或者在应用中输入以下代码:`,
|
|
32
|
-
followEnterCode:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
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) {
|
package/api/routes/blocklet.js
CHANGED
|
@@ -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('
|
|
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');
|
package/api/routes/federated.js
CHANGED
|
@@ -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.
|
|
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;
|
package/api/routes/oauth.js
CHANGED
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
const {
|
|
2
|
-
const { createPassportList, createPassportSwitcher
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
|
229
|
+
const { sessionToken, refreshToken, visitorId } = await userUtil.loginUserSession(
|
|
289
230
|
{
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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
|
-
{
|
|
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
|
|
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
|
-
|
|
401
|
-
|
|
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 {
|
|
411
|
-
if (currentUser) {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
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
|
-
|
|
433
|
-
|
|
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
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
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 (
|
|
544
|
-
|
|
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 {
|
|
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
|
-
|
|
362
|
+
did: currentUser.did,
|
|
363
|
+
pk: currentUser.pk,
|
|
364
|
+
profile,
|
|
575
365
|
passport,
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
provider,
|
|
579
|
-
walletOS: 'web',
|
|
580
|
-
emailVerified: !!user?.emailVerified,
|
|
581
|
-
phoneVerified: !!user?.phoneVerified,
|
|
366
|
+
sourceAppPid,
|
|
367
|
+
connectedAccount,
|
|
582
368
|
},
|
|
583
|
-
{
|
|
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
|
|
380
|
+
visitorId,
|
|
595
381
|
};
|
|
596
382
|
}
|
|
597
383
|
|