@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
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
//
|
|
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('
|
|
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
|
-
|
|
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({
|
|
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;
|
package/api/socket/util.js
CHANGED
|
@@ -16,10 +16,7 @@ const parseNotification = (notification, senderInfo) => {
|
|
|
16
16
|
|
|
17
17
|
// TODO: 如果通过 message id 实现消息去重, 消息顺序等
|
|
18
18
|
notifications.forEach((x) => {
|
|
19
|
-
|
|
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 = {
|
package/api/state/message.js
CHANGED
|
@@ -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);
|
package/api/util/federated.js
CHANGED
|
@@ -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('
|
|
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,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAMAAAC5zwKfAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAMAUExURRxPxPz//xxOxxxPwh1OxR1OxxhQxBtQxBxPxRtPxf///xtQwh1PwB9NxxxQvh1OxBhQxf/+/xtPxxtQvRxQwB1PvhlRwhhRvhhQx/7//xtQwB1NyRpPyfv//x5MxR1NzB5Lyvn////9///8///+/P//+xtRvvf//+7///n/+f7+//38/x1Pwvr+//b//x1QvSBMzBtRuh9OxBlSwBtOzP3//hxOyev///j//BpOv/39/f78//T9//X5+/L/////+f/7/+j//xxQux9Qyh9NwP///RhMwiZRuBdSuhpMv/f9/xtMu/T//xpOwfv//BdPvx9QxyBPvhhOu///8yVPxv/6/CBRwB5Sxx1NvRtNtCZMry9RnyhMofv9/f3+/x5Kvvr9//X7/yROtB9TuidUvfz/+vz/+/7//P39+RpMyh1SwSZNpSJTwun2/xxRyBZMvhpNxiFPwxxKwiRLw/v5/ChTxf7//fb/+f//9ylRshtHwhVIuvv6/ytNvB5IxmiIvMPa/yJMvBpJuYKf2u37/ylQpChRpx9MzhxSxf/9+yBLwh9Sxf35/+79/yVNqSJMoylKqyVNnfv7+fb//fz/9SlRrUZmpxxOuSJVyfX8+x5PriFGnBVLthpKrJKs3iBLtCVSqR1IsyFOuLvS/5iu6BhRtY6q0zxdo+r6/0hqrSFElSBQtCNOzh9WxSJLyOL4/1ZwsipMwNnt/+X1/yVQwRxQwxlKxxpVwhlLxDFUld7z/0Rjnv769ytOmt/2/zpVo4qn1c7o/93v/y5WsTJYqPf/9E9wrq3C8Z656oul0SdEmyhSoP/3+SFUvpel2pO11CFTztDg/3qXzoeg3DteqyxNtbvW/yxVq2B8sH+a2Iyk3hZTxPb38/H6926Nwvr78er8/Pzz9ZGj0PDy/NXv/42v0oChyydMxPn59/P88VJxrytKpSVJoVNxpZSy2fL6/ylZwCFUspao1GGBxipTuDJUnJio2LHK/zdQilt7u8jk/36Uw9Tb7Zeivr7R8W6N0HUuep0AABFWSURBVFjDnJZ5VFNnGsZvbpZ7bxKy73siJQk3IShIgEAIWzEBokBRtgAxoIChjhgMTGMRBFE2Zam74ooK1qow04rjdqozouKxPW51mbEO55Rau4zanrazfnE6/82ZczLPPzcnOfd33/t+7/O8gaD/LfqBA3mK6M7O6DAD38TnEyGMgwGJRDIODNFNaWlEKDQRTXkGhUqpIjPpPAaPCKEoBiEQggAoChn4fEaoQFQmk3EwgUQSEUFDMI4Mhoh0Bp/BCML/L2GxsbEiSoxQKIyhsDgyGUwy0PlB0QEQBe+PhghERCIWi/Lw4UMKi8XCUJREJocpFPOAmCQU5oQOhDAW5bUADkOZTCYZlpJVYUGRSCjGYoXKQ8lkiMhgBDsIPgIKhKCwVBkdrVKRSShCoYQMjFYxg9NhMpCkUimZBMUIBQhMlqqCFYKOIKECYdXxhqLpbXlFCmWnsja9O2LBAnA+tFw7nU43MFEYDrWH6K1bi9om8vZXNDQ0KJgJEdMRQuFCQW6dl2sy0ZlkZWyoQGLC7m56RkXjRGNVVtZYcXEaGhcbm55Oe4eblsYAQCUcIpDGfT9/8cT+ki1l/f3XO/btG5t4993o6N9+tFESwWVA5E5lqBXSEnZP7++7/M9De7+Zavn6SGlZydpTq08cvxWHUQQ0CJWSQ57D7u1jm1/OpKZadUePms8fPHTywrUtayt+LZWJKBRwxKRQeUxF272XqalP1Mm4JeBOsurMl0bOjpY0LpLJRCyB5L84mhj8KjhNKIwGH0ci8SIkNGAJZvA3w7wTw9/PpOqu/KlpU08AFy/T+5/ozl89tivLBIZaIKG/tjS4FQ0yUIjIg0w8CMMoNBoqVSpVJCJTpfAcPixcFPbWqkW5K+uyG7tKWnQ6v36ooEltrMSpVKrYkWSdvHhmX/GCujp7VxediIKzjoURCoZxIEYaZGIgHBZoMCrt7AwCjzd4PIeLly4t6Rv2LuYXtWU0/zUnyb+sumBIqzVaNGw2O5C8I2d83bHrfznsfaeriyeBfgGyRBwEABk8kEEIjQaBHCGBl1zUnV285965M2fPlDa3bfd6Mz5+mpOkJtQ0NcnV5ZqUlEoHgRCoVFtnWjrG8ru3J0gkwNzAMCBzAYfHhUCoAyFEg8EQtCaNx89eevmng+c/mPnD7VetRdnZG35IcsvLEzelzC8PTykYkg/qCXjAl6w9+tnmqmxuvkDwi5//jeG9vqIoyqSDGCYiGJLvqVqxPtWsa7f2nn5ZUuXdVvbCbTQGNIWFkeEpTQUF1Xq9M2Cz2T43tj/YlbX7fQroVwSDZyABCBoMCw4HgVASKRgpXBomw6b3PP9MdzTKQQC9v3R7ONtT9sJRXhmw2Ao1ADgEtMzpSiz8/Ibmz0fXX9/ppYgoAu5cLp0E0ixYJiTjIESmIkwBgOB4YtEDZS3mcfVApk8TqDfv/Tjb0/HUUVmJ47Y5msw3qgf9BQU1Lr1T7LtxI9xd/8fre2hgwiMAEKQuk0jERJCMReTNC1OF0blcHhoXl9d3bLJX+8ajcJuNvcP68+h08YanDrecgM8BBxxptFoHCjLF+kG1XHPjd4WOya338mQyTALuDQLpEkwGiSgMxrywaBWRkZAbl97w6szdXu2amkSLTfOoWjcz+mrbhpsOo1xOAPPiw//2D53WiFt8cu1jgu1GoSVq3ZmsN+NkSF1drjQ6jMmPABWyBNwgUNqdgPxKpWjcNTUeVZmZaenpwYe+1N0tXbpt30232hnvnPXN4sa//3h/Xa8bZyc/jh/EbT02+fjUrkaFEt6Y8BsAnMdnICKI8hqolG5c+bZS1Vpy7LRWHcA1Fjwg91vND746VRQE6v36NZGRBPfTH0u/Xz/u9mXOxg+q2TYfrj29tWR1dOzbKzfCytdAFkShcflgXcCChbHRJ9aOXs1xlVsCFkuk/HGO+ecjd1Yn7LsZMOqv+Gdnqe76Fxf69vTfH3f4qJVaNcGFVzqsV0fXnlDKBDGcOOl/gAwAjMMWCmpVX2w5+4F6lioemM/G5VbzzE9bWru4AIjr/f4BKrtc+3R0rO67c1+fVlfiRqdeTyAkayfPbvlCVfuhEIGlJDoDwYJAOjmOQxF+WKs6dW1ERxgQO/XVVNyRc76lY/+EnbvhZo+lWu8XB3yVOVP9Hrt957n79Y7IxJQrfi3BJ9eNXDulqgW7EIsj04FPIOA/AzkOi1kQU3ti7YVLT+SJ+i/1+qaU5N4H/cPefO+2jps9c1L0TraPHfnti8t78rz5YyvW65ILCq7E71Dj4ieXLqx9VyZcIKTEkQ1ElBPMMAiGAVAIr75zUud3UauvOB8VVEetO3fHa6+be7jjh4AlfM0aXDMnkDPSPzbctn2J5/o6a0rBI7U/no0Pmk/eeYsMlisCw8FggJjALgiCQnM99tbnh3rj5882NS3PHIpKffZeaxGvLt/Tv7edwN60KbyQLa//pj+rrW4Janrvmc5RQ5Xr9T6NvP3QV612j4cI8gZBQFwbwL8XAQ1mmjxFWaUHrU7xQFNTOLUm6u7tkonFKxPqDvSP6ByBxJpNvoBWN1J2IM9u76bvvH3Q4WK79NU2jdh6sDSryDRNgmkCCkKkgwoRCg2BSaa0oqwjkznO+ZkpNeHzxTmf9g/nGd7M7Z7umNK5jerBQa3RoZvqyOtusC/mDz//NEeOu5xONlucNHkkqyiNT4IRGthaBrC2ELAPyaSEvIrm35uTBnBqSs0aI6F+6+as1oYlG+3eFRfbvyVodTotwd1+cYUXWrKqKLuqb+u43EV1EdiJriTzs+aKDJA2EA2AmBAZDV7JCuaqjOYWszbRxQ6vWeZQf3JuZ1X2R+mond63tzd5ebzfH7/c3b63j46lr6rI/m5p6SdaV6YLpw64oswtzRkGpgIAYySgvn9VZq1BTaZnNAkJ+RICuQEhgSAJkpBEAogbCeQCJERNuAgkXIQgRJAIAuEiUqSI3MwSFAURUHSFatUiq6uiruturejaaeu4KzOruFXHcXbrVju603b2b5/viwR2aafyMplJfnDme/Oe9zznnABgHBkhhhJXNwx9nyygypjSrVtVpXeLJieyNhIcuOwTx9OKtZL4DElEseb4kLLGEWrOmpjovqspiRhIoEqp4uTvh3rpRF8i4gYMRngYoG+9ueq7ZCNTyJRZ49NKT+5PKcjaeMUxHXti9z5puIXJtAilXbsfxjoZYTG5BRM9x/eVaO12mILy5O96zPXg7hAyBwYWCshBAWNadvTfj1QLQResErlx9sD24WgCQZcuOnL6VmlinyWpL7z01ukjnMyavTFZk1uqOvcZm5u11GKhOvJ+lbnFDShCFgDPtZgXAZZigCSF7pqi42HnJfGL1MYX4ktzD00hBgDML9hSNdcV1dxsl8oSUcAdLbrFgPNb7nFvWWqVqEpPDrm3rNu28djt2YuaNLnm1uzt8ZErNUEx5+a3rNVSpVLYcpW5PtSz5Z8fipiayKTOH0o+0eHIGzF1TPac7fzpp86z3ZPD+SM1LOxQiu5qjBF2KTWBKoBDqVtN9xzKAm02A23kHtoUAm0Murx0U4qrsuDHmf6qmR+PiUZSOgw1QJuyjz5HaSMrBtqIgTa9dQu0mSc2zU1soFaEvakEJXbZnnrEmZ6rNHhzxsZSsoaHOd4GWi5K7PxFxB5Qrf0SiK30EHv+6uW+u3pc99XTPDhoy6ozpDuVrhDH1JQB1tTUNYfLP8+AXr2iByq+lItevQ/S0KsXvXD1POIw/E4c7Jg4pKHiULdB6XTm6UgmE+6rr3Amk0OR56r87+IQvUgcMPnyio3dsOfVyS6QL612ZcQzFSpf+unK2sxakk6fjzMYEKVeR6idzt+eh2SBfEXZufE7JY3hgn0nX4N8xXrkCwwJCCyZs349CRNYSSr3ZeqznHJNe6FNmTc2HLCK6ADL4l3rjSAk4qqArF06ZF1hu1yb8wNMPmHjThDYBsIigWVRvFaRUEARoQ0bAVS+euuhHG1pZGfRJHtLbIALMThqEG9Knq4Gh7hoLteGgqJOjboZRsATcVIiOgI+XjwCGGR/mi8JCeTEzQ+pjJ3wmAmtpWd2f35sLNCnNtvlunZl795tdFdldi3FobcdfHRehbdGlEvi+WrBWveQWu8ZUgyyX0Ao+ohXsTF6PUqNF8RnfCAUtpZe/Mef3yqd07m5db2+MefaevUBAdN5RHSMphnxMmrTVi5enfbFZwcaADDbM0YxQN9gQlygAhv0RpjeUfzy1OdCrvj6o4PjHfrcjo7Ll/fs2XG5oyO3rmP89aNLKjU/ip/BhFwwGuke9JmZnkHP8BahVoSEWpGYhk2HYYi3FjeVR6QORDzRJD8unLHZyi5PjBd8ND5RVmazzdyerQYroh4czGAm9YEVObupN+xnViQIA4wJnlY6CTFglm5WC1rDLY0V5T/c4Ze+edN+4fbR/esKTr19W1Bg23/09gXULAlfPhEP8sOT+ooxs7TNQVY6PWYpiCHyowNgemUlWRFcv+7Tdo3M8tySekciGZW2lsjXfvPgcGFPT3//ie7Cww++WasRtyb1UTOeCBItFpmq/dN/XdOFpCtFC3YuhMHzp5OCSf5sNo8ChnPm8PUSC9jT8vh4K5NpHygxGqu/vnt8bu743a+r5VFR9kNMpkyGL2YmfZggv354ZonhDGFApMAAY0VkVgj52Imn1a3hN268zOBaG+05zTcaE/AClSotTQXhQmq5kZMzMFCCZ1osFiFY4u5juF9a4iAGJAzIVv5sMO3gwK8e6Z7teqHNeQ5OX9uMOiy+dVStMhpV6lErnsu1HzokEeDD//Jh+Ivq2e4j95aYdsiUWE3k5e/n5wMZ4epY2evHXeK/CpP6+laWD4pH4/n4jApts1ZbkYEXjKqbwIkNlgjDnyd2PX5dNnZ1SazgAUoQg4GFF7J3YGBttult0dwZsbqxL1EaNQgCkGGVDdx41mwfAKsgubPVKhAIStXqqDNzRWWmzMwlwYctQgG9vSlYvuLxNow4sye7/3lRVSxrxeONO8u1FQkyYYRWGyGUJVRoy+0leH6UQKy5CNHMhIzglkSzFLZ3EArIWrNijYLM89us3zWVDVOk/VLaG7VMKEwSMiGBcq1WLpdKZTIT4YxfqsVYeMye2tXQQPtleGQDu98BriAgPjS9Xhn3LWd86N83b2k0YMwBULqSyy0p5nIrpIDG5wuM4ltYvP3WuepvS+MtSCIkPJBYLEXjvGg0n0AGA8lad/TsH89H7hvkNzVVJCRIwXNIB+xNTfGeAB6IBnC9fkkAX5rw4ZRC1ig27tj0u89++4dIDTBQLhCo1XKBXLVQERD/Z0Xwy0VEz57CUrS1bP7kwJ9+f+Hkb75IToZ0Gpl8Pnnt9XclRm/LlfctMZDgYHhwHzISfO7cxw2f/HrTq8LTXz69eR/Wzad/P1346sAyaxZkxQoSzo8t4iGg0jFtbeYJm+1XQ/v7+19X7R/aZLNNmNvawsKuXMt73yIIBVzll5LC3pWu061RgAqbOvRms3kHvMAy5NMIim3bQnTO2vetqiDhIl4B0dHs7X5KZWb2+th7W4bz9fX19S319fr8lC33YjnZmZnplVPvXaYREJQ6NNoGpb+Is/7UqeHoACV9oy40zJdIpKWwY2FgxsVNp3u9d91HJvt40emhob4k1E5xODgikQifsD94u+xCkoyqD0L0DQsLgxMkg+tREEgkIrZIJPhAXmZlSsbKYPCf6CKRSAhl8UMAQwnLLHXRmhmrg1evXo3uG6F4w2P6uBc4EgphmbUzALJAdr380fobvnYcC5QjEC3GOXGBICgU3HKLcUy/0YYJq+fpCAstsng8EY/HQ7t7ynKrey9/EQ/+jxWEwlLgG8OUHSUo+kLXMn9c8GKzRT4UVggs2DwrhEWkuw/YfdR0HOH//PzxH4aShCBu74miAAAAAElFTkSuQmCC';
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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};
|