@abtnode/blocklet-services 1.16.34-beta-20241204-140321-4d75ca21 → 1.16.34-beta-20241206-124652-493dbc39
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/libs/connect/session.js +4 -4
- package/api/libs/open-graph/index.js +1 -1
- package/api/middlewares/check-federated.js +157 -0
- package/api/routes/blocklet.js +19 -13
- package/api/routes/federated.js +529 -573
- package/api/routes/oauth.js +38 -55
- package/api/routes/user-session.js +239 -214
- package/api/routes/user.js +52 -45
- package/api/services/auth/connect/invite.js +1 -1
- package/api/services/auth/connect/issue-passport.js +1 -1
- package/api/services/auth/session.js +31 -9
- package/api/util/attach-shared-utils.js +6 -6
- package/api/util/federated.js +28 -72
- package/dist/assets/Add-Dr8htRSM.js +1 -0
- package/dist/assets/{Alert-XwCbbCdw.js → Alert-gRD_jJCj.js} +1 -1
- package/dist/assets/ArrowDropDown-DI04xnPr.js +1 -0
- package/dist/assets/{Autocomplete-CtKfl8OV.js → Autocomplete-DPolRnqk.js} +1 -1
- package/dist/assets/{Avatar-BuTYVz6S.js → Avatar-D6TPuXUP.js} +1 -1
- package/dist/assets/{ButtonGroup-9mTO_MUt.js → ButtonGroup-BcLw8gsE.js} +1 -1
- package/dist/assets/{CSSTransition-VPmtoKE7.js → CSSTransition-DdlHGsuR.js} +1 -1
- package/dist/assets/CheckCircle-BPxn_ieu.js +1 -0
- package/dist/assets/ChevronLeft-5FOp5_pf.js +1 -0
- package/dist/assets/ChevronRight-PVflalU6.js +1 -0
- package/dist/assets/Delete-CaO8fR6N.js +1 -0
- package/dist/assets/DeleteOutline-PIJBVOmm.js +1 -0
- package/dist/assets/{DialogContentText-BSTFqlB8.js → DialogContentText-BvYfkPC9.js} +1 -1
- package/dist/assets/Done-Cqnr64ll.js +1 -0
- package/dist/assets/Download-Bv95-VOA.js +1 -0
- package/dist/assets/{EditIcon-D5uy6dXe.js → EditIcon-B2INxzak.js} +1 -1
- package/dist/assets/Error-vrb7fyQU.js +1 -0
- package/dist/assets/ExpandMore-B3TZX84r.js +1 -0
- package/dist/assets/{FormControl-D9UzJGr3.js → FormControl-BlJhfvE4.js} +1 -1
- package/dist/assets/{FormControlLabel-Ka9Y3VW4.js → FormControlLabel-DUahNTJi.js} +1 -1
- package/dist/assets/FormGroup-BhKveWGx.js +1 -0
- package/dist/assets/{Google-fmIzZ4SE.js → Google-2VzbESXy.js} +1 -1
- package/dist/assets/{Grid-CLg9BKgo.js → Grid-HlOuSRmU.js} +1 -1
- package/dist/assets/HelpOutline-pRqeT6i_.js +1 -0
- package/dist/assets/{Hidden-B_FCIv2F.js → Hidden-BIaa-blE.js} +1 -1
- package/dist/assets/InfoOutlined-CvA_NzdD.js +1 -0
- package/dist/assets/InputAdornment-mbNfreso.js +1 -0
- package/dist/assets/{LastPage-BNIPjfIv.js → LastPage-BI2XzpBc.js} +1 -1
- package/dist/assets/Launch-DIHn67BI.js +1 -0
- package/dist/assets/LaunchOutlined-DBAHz0tb.js +1 -0
- package/dist/assets/{Link-Dgz_hg-A.js → Link-SvE6tGEV.js} +1 -1
- package/dist/assets/{ListItemButton-COVroopz.js → ListItemButton-DRswm1pu.js} +1 -1
- package/dist/assets/{ListSubheader-DoFPqSxT.js → ListSubheader-Cedlz0t5.js} +1 -1
- package/dist/assets/{LoadingButton-Cpsng3ic.js → LoadingButton-1nXdJV1_.js} +1 -1
- package/dist/assets/{LockIcon-xMd6TgDT.js → LockIcon-BlUU7Km8.js} +1 -1
- package/dist/assets/Loop-Do-1bTcZ.js +1 -0
- package/dist/assets/MarkEmailRead-DJzwbP2x.js +1 -0
- package/dist/assets/Menu-4JehMzAB.js +1 -0
- package/dist/assets/MoreHoriz-BiDBSm9w.js +1 -0
- package/dist/assets/MoreVert-BHPy5yQk.js +1 -0
- package/dist/assets/OpenInNew-Ox-Wg6B7.js +1 -0
- package/dist/assets/{Pagination-BdODbVsE.js → Pagination-DtmO1FEC.js} +1 -1
- package/dist/assets/PlayArrow-D8oFKkOl.js +1 -0
- package/dist/assets/{QuestionMarkCircle-CeLvEIhA.js → QuestionMarkCircle-CRCb7vLB.js} +1 -1
- package/dist/assets/RadioGroup-CAeo2G7k.js +1 -0
- package/dist/assets/Search-B4FkzoeR.js +1 -0
- package/dist/assets/{Select-BM5xijW7.js → Select-pOhG5uV8.js} +2 -2
- package/dist/assets/{ServerLogo-CocwN-L6.js → ServerLogo-C3qS1K9u.js} +1 -1
- package/dist/assets/{Skeleton-BQ4gLbdR.js → Skeleton-XhcFgkuH.js} +3 -3
- package/dist/assets/Stack-BGVSv0bm.js +1 -0
- package/dist/assets/{Stepper-DPFFvB9h.js → Stepper-1oUkII92.js} +1 -1
- package/dist/assets/{TextField-CFRK87D0.js → TextField-BYIMGo2O.js} +1 -1
- package/dist/assets/{Toolbar-Ba22YRhW.js → Toolbar-MXTUjpSN.js} +1 -1
- package/dist/assets/ViewColumn-Dl8WBRoz.js +1 -0
- package/dist/assets/ViewList-Dw7InfFl.js +1 -0
- package/dist/assets/_createAggregator-CF3Ywu_Z.js +1 -0
- package/dist/assets/access-control-CPDqmVDW.js +13 -0
- package/dist/assets/{actions-R7d7-bh3.js → actions-DB6zFAt9.js} +1 -1
- package/dist/assets/{add-component-core-qARkFBQB.js → add-component-core-DpqYAR-R.js} +11 -11
- package/dist/assets/add-resource-BY7yN1M7.js +1 -0
- package/dist/assets/{addon-BJli1WRW.js → addon-cSEDcT4t.js} +1 -1
- package/dist/assets/{analytics-B3iUwhYK.js → analytics-CObVf_QD.js} +8 -8
- package/dist/assets/api-SlMwqh4b.js +1 -0
- package/dist/assets/{ar-7AvHBDLJ.js → ar-BENken66.js} +1 -1
- package/dist/assets/audit-logs-BMMQleD-.js +58 -0
- package/dist/assets/{base32-Mo2B3fHT.js → base32-Cky7ZH4x.js} +1 -1
- package/dist/assets/{branding-BThKyvoW.js → branding-DD9lnLdg.js} +2 -2
- package/dist/assets/bundle-avatar-D1CsKnAr.js +1 -0
- package/dist/assets/{button-eTEsJSJ0.js → button-C2skqS2y.js} +1 -1
- package/dist/assets/{click-to-copy-CkFI8a1W.js → click-to-copy-B_U6uers.js} +1 -1
- package/dist/assets/complete-Cm1aTSRB.js +45 -0
- package/dist/assets/{component-kGv-hUvT.js → component-CU-7h3yK.js} +2 -2
- package/dist/assets/{config-BVYueZpV.js → config-CKVwTxh4.js} +2 -2
- package/dist/assets/config-GyMHYuIo.js +1 -0
- package/dist/assets/{config-navigation-NUbYVs4N.js → config-navigation-DqtZRu1x.js} +1 -1
- package/dist/assets/config-space-xHVn7Zw_.js +1 -0
- package/dist/assets/{confirm-CIF7Vu-X.js → confirm-BYGcMOdN.js} +1 -1
- package/dist/assets/{connect-Dj-BrpmM.js → connect-7KX0ip82.js} +1 -1
- package/dist/assets/connect-Cjg3Lm4D.js +1 -0
- package/dist/assets/connect-to-BWP8Cqu6.js +1 -0
- package/dist/assets/{content-layout-DSpN7kL2.js → content-layout-8jsNhe-5.js} +1 -1
- package/dist/assets/dashboard-BZreJCiA.js +165 -0
- package/dist/assets/{de-S6ufmRx0.js → de-C8d8saMJ.js} +1 -1
- package/dist/assets/{deprecate-W6wP2f1U.js → deprecate-Bj3Q5Wi_.js} +1 -1
- package/dist/assets/{did-address-DpP51eII.js → did-address-7Sb16VSB.js} +1 -1
- package/dist/assets/domain-D-DYyZbR.js +9 -0
- package/dist/assets/domain-list-p_9GKY-M.js +15 -0
- package/dist/assets/email-Canxuwlg.js +18 -0
- package/dist/assets/emotion-cache.browser.esm-DRs-CTgF.js +1 -0
- package/dist/assets/{es-Sth9cv6C.js → es-8ZzWXB3U.js} +1 -1
- package/dist/assets/exchange-passport-Dv2bo20G.js +1 -0
- package/dist/assets/{fallback-CTOpqcoo.js → fallback-BlcEp1VL.js} +1 -1
- package/dist/assets/form-text-input-D26GlKxQ.js +11 -0
- package/dist/assets/{format-error-jTY-wvGv.js → format-error-Dk89U0uh.js} +2 -2
- package/dist/assets/{fr-BX6bo8e1.js → fr-CDmTLuDM.js} +1 -1
- package/dist/assets/{fuel-Dx06V-YR.js → fuel-DeEVMoW6.js} +1 -1
- package/dist/assets/{fullpage-Dz8PPWdq.js → fullpage-CFHcuwWr.js} +1 -1
- package/dist/assets/{hi-pYobKga6.js → hi-DfYUKMCb.js} +1 -1
- package/dist/assets/{home-BCoo1Guo.js → home-D7XPwTjK.js} +1 -1
- package/dist/assets/{id-Xei40tOm.js → id-BeY7iur-.js} +1 -1
- package/dist/assets/{iframe-GN8AUKA4.js → iframe-tSt_So8C.js} +1 -1
- package/dist/assets/{index-delqLXRr.js → index-3lBO8ivG.js} +8 -8
- package/dist/assets/{index-BXHMtAUn.js → index-6dmWRa5a.js} +2 -2
- package/dist/assets/{index-rA_BKM5G.js → index-B6vN1Pjj.js} +3 -3
- package/dist/assets/{index-W2CQmt_X.js → index-BaYuwQfE.js} +1 -1
- package/dist/assets/index-BilCISvf.js +1 -0
- package/dist/assets/{index-B_EeAcSB.js → index-Bk-KtZtw.js} +1 -1
- package/dist/assets/index-C-OENO3T.js +16 -0
- package/dist/assets/{index-Db_Y81_-.js → index-C56N3wab.js} +2 -2
- package/dist/assets/{index-CG1XIXZC.js → index-C89kYDNU.js} +1 -1
- package/dist/assets/{index-B3Z8DzsY.js → index-CNE2uXX8.js} +6 -6
- package/dist/assets/index-CPFKRWiW.js +316 -0
- package/dist/assets/{index-COdSzYad.js → index-CQuGc78Y.js} +2 -2
- package/dist/assets/{index-cIe0Ged1.js → index-CswkYvFG.js} +1 -1
- package/dist/assets/index-CuJzImxJ.js +1 -0
- package/dist/assets/index-CwEyBOgW.js +4 -0
- package/dist/assets/{index-CjkNshyI.js → index-D-G-CrJO.js} +1 -1
- package/dist/assets/{index-8OiEpVkg.js → index-D0CXo93j.js} +1 -1
- package/dist/assets/{index-UEoZJA9L.js → index-D2m633vu.js} +1 -1
- package/dist/assets/index-DQjLOWie.js +5 -0
- package/dist/assets/{index-CYQV6023.js → index-DbUU7z6J.js} +11 -11
- package/dist/assets/{index-B019qXp1.js → index-DcWx2h61.js} +1 -1
- package/dist/assets/{index-B3pPqycI.js → index-DfQHFN6t.js} +1 -1
- package/dist/assets/{index-ZPFypmuO.js → index-DsLePqKc.js} +1 -1
- package/dist/assets/{index-DgonWrzm.js → index-DsZCBFlr.js} +9 -9
- package/dist/assets/{index-BxKrUgd9.js → index-DtdETaBU.js} +70 -70
- package/dist/assets/{index-yi-655mj.js → index-EWrqmue5.js} +1 -1
- package/dist/assets/{index-BjfhU-QW.js → index-Ed6XamYf.js} +1 -1
- package/dist/assets/{index-BzVm0XuZ.js → index-I4Wjjc9p.js} +1 -1
- package/dist/assets/index-K-RQRB6f.js +1 -0
- package/dist/assets/{index-q1m8Euwz.js → index-Qbrukcer.js} +1 -1
- package/dist/assets/index-fU8Snm90.js +102 -0
- package/dist/assets/{index-Bs9TLgSC.js → index-hcyZSWah.js} +2 -2
- package/dist/assets/index-tap0PKb5.js +29 -0
- package/dist/assets/{index-BP0LEaeg.js → index-vQSgatpS.js} +8 -8
- package/dist/assets/{index-BidszMO2.js → index-vRY4Eqk5.js} +39 -39
- package/dist/assets/{invitation-BPrK4inJ.js → invitation-BTS9OmKY.js} +5 -5
- package/dist/assets/invite-DdlZu1iK.js +5 -0
- package/dist/assets/{isEmail-BnC4loew.js → isEmail-CmNEnnPO.js} +1 -1
- package/dist/assets/issue-passport-BOYK0sdW.js +1 -0
- package/dist/assets/item-DiOlNyoQ.js +1 -0
- package/dist/assets/{ja-DG0a06x8.js → ja-DvJTZg_Q.js} +1 -1
- package/dist/assets/{jss-plugin-props-sort.esm-Bp0MqRVc.js → jss-plugin-props-sort.esm-B0GYUqad.js} +6 -6
- package/dist/assets/{ko-BBC-RcU5.js → ko-C1lnK-Gx.js} +1 -1
- package/dist/assets/{launch-result-message-4m30f0Ag.js → launch-result-message-CU6VqlMp.js} +1 -1
- package/dist/assets/{layout-Btp-_hcD.js → layout-BLLz87sa.js} +2 -2
- package/dist/assets/{list-header-DQEePd_T.js → list-header-XuCMCGCV.js} +1 -1
- package/dist/assets/localization-ClU7HEEr.js +1 -0
- package/dist/assets/{log-DGIf8qzM.js → log-CzdQsoGM.js} +6 -6
- package/dist/assets/login-DxPcP1jX.js +1 -0
- package/dist/assets/login-oauth-callback-6aacB0AP.js +1 -0
- package/dist/assets/{logo-uploader-CC8WqbW-.js → logo-uploader-FwiUnYYD.js} +4 -4
- package/dist/assets/lost-passport-CP1WD-6W.js +168 -0
- package/dist/assets/{lottie-react.esm-CtltdV0t.js → lottie-react.esm-D7IQJqb8.js} +1 -1
- package/dist/assets/notifications-BuECL_6T.js +65 -0
- package/dist/assets/open-window-Bg3rwEW-.js +1 -0
- package/dist/assets/overview-CjXvkE0B.js +12 -0
- package/dist/assets/{page-header-B5a7RE0E.js → page-header-ByFkqYoX.js} +1 -1
- package/dist/assets/{permission-CBfa-qlX.js → permission-DbhB5Z1v.js} +1 -1
- package/dist/assets/{preferences-CuRLxM0K.js → preferences-BYmMPHkz.js} +1 -1
- package/dist/assets/{pt-CNmFfxJU.js → pt-C86mXB8Z.js} +1 -1
- package/dist/assets/publish-resource-CRym3QNG.js +1 -0
- package/dist/assets/{raf-schd.esm-KaxPdV64.js → raf-schd.esm-B7lVwb88.js} +1 -1
- package/dist/assets/{react-beautiful-dnd.esm-BlBywA4z.js → react-beautiful-dnd.esm-DzxofBcj.js} +1 -1
- package/dist/assets/refType-C0MWXRP4.js +1 -0
- package/dist/assets/{resource-dialog-DpLtB_Fw.js → resource-dialog-DvLQ35FQ.js} +1 -1
- package/dist/assets/{ru-BVNv9w91.js → ru-Dxm-iAqn.js} +1 -1
- package/dist/assets/sdk-C9VDRIUH.js +1 -0
- package/dist/assets/{selector-Drr6pXp9.js → selector-CVbTF87I.js} +4 -4
- package/dist/assets/session-CfGQq4aA.js +1 -0
- package/dist/assets/setup-Cn5VZSrf.js +19 -0
- package/dist/assets/{shorten-label-DK0L2sJV.js → shorten-label-DkBNZBHq.js} +1 -1
- package/dist/assets/simple-select-Dar19mu0.js +1 -0
- package/dist/assets/{slicedToArray-n9LJBwV4.js → slicedToArray-Bh7YTn9v.js} +2 -2
- package/dist/assets/start-BeQmK9fc.js +187 -0
- package/dist/assets/{step-actions-D_1mpc4C.js → step-actions-DauWsHJ8.js} +2 -2
- package/dist/assets/studio-DsQEpBvk.js +6 -0
- package/dist/assets/{switch-control-2C3bwebR.js → switch-control-Dsh5_EeP.js} +1 -1
- package/dist/assets/{th-CObnQ6OH.js → th-BamIf1b8.js} +1 -1
- package/dist/assets/{toUpper-DtTJYJCz.js → toUpper-BzsouAll.js} +1 -1
- package/dist/assets/transfer-DaiNG55d.js +16 -0
- package/dist/assets/trim-BSxRkodT.js +1 -0
- package/dist/assets/uniqBy-DdK7WB2a.js +1 -0
- package/dist/assets/unsubscribe-QZHXePvC.js +1 -0
- package/dist/assets/{url-join-aL0dlRwK.js → url-join-Bz42DLTX.js} +1 -1
- package/dist/assets/{use-mobile-TJQ6s1hH.js → use-mobile-BORWdgFu.js} +1 -1
- package/dist/assets/{use-mobile-D7IK9xm6.js → use-mobile-BnLttn6s.js} +1 -1
- package/dist/assets/{useAsync-B5aCa8BU.js → useAsync-XGhszTqi.js} +1 -1
- package/dist/assets/{useFormControl-De83T2k8.js → useFormControl-CUbdx--c.js} +1 -1
- package/dist/assets/{useLocalStorage-Cg4UWbtJ.js → useLocalStorage-CQGh5cLr.js} +1 -1
- package/dist/assets/{useSetState-C5EefhmT.js → useSetState-DJ05e857.js} +1 -1
- package/dist/assets/useSlot-DcPzSHnC.js +1 -0
- package/dist/assets/{useSlotProps-9EZsnKiK.js → useSlotProps-D6DLjewQ.js} +1 -1
- package/dist/assets/{useThemeProps-DFbMvLjq.js → useThemeProps-D4tucCRV.js} +1 -1
- package/dist/assets/user-center-BA6Kltkg.js +1 -0
- package/dist/assets/user-sessions-DvMYo49k.js +1 -0
- package/dist/assets/util-CEeqN3nG.js +1 -0
- package/dist/assets/{vi-DPE1cpvE.js → vi-CTEgHnG8.js} +1 -1
- package/dist/assets/wrap-locale-Ce8iB_Ha.js +1 -0
- package/dist/assets/{zh-ZJh718gR.js → zh-C9pcKSvk.js} +1 -1
- package/dist/assets/{zh-tw-q3KEUdcz.js → zh-tw-CuhSzmQN.js} +1 -1
- package/dist/images/splash-landscape.png +0 -0
- package/dist/images/splash-portrait.png +0 -0
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +38 -37
- package/api/middlewares/verify-federated-call.js +0 -36
- package/dist/assets/Add-DtejxYv7.js +0 -1
- package/dist/assets/ArrowDropDown-DLu5ghJ6.js +0 -1
- package/dist/assets/CheckCircle-BvTAg_Vb.js +0 -1
- package/dist/assets/ChevronLeft-CogeEPev.js +0 -1
- package/dist/assets/ChevronRight-BATWClLP.js +0 -1
- package/dist/assets/Delete-BvK_hDyw.js +0 -1
- package/dist/assets/DeleteOutline-CFkN2u6G.js +0 -1
- package/dist/assets/Done-BCayGyaP.js +0 -1
- package/dist/assets/Download-3v1IPpRg.js +0 -1
- package/dist/assets/Error-KMHXOqQS.js +0 -1
- package/dist/assets/ExpandMore-XeiYcXA0.js +0 -1
- package/dist/assets/FormGroup-BqZ71koG.js +0 -1
- package/dist/assets/HelpOutline-D-mVzldg.js +0 -1
- package/dist/assets/InfoOutlined-fhivWooJ.js +0 -1
- package/dist/assets/InputAdornment-7bcT-OxU.js +0 -1
- package/dist/assets/Launch-B6-uAhbQ.js +0 -1
- package/dist/assets/LaunchOutlined-BEenLVbN.js +0 -1
- package/dist/assets/Loop-tJ6uJkRI.js +0 -1
- package/dist/assets/MarkEmailRead-BNHtpgz2.js +0 -1
- package/dist/assets/Menu-CkD81HZ5.js +0 -1
- package/dist/assets/MoreHoriz-qqmi4YRC.js +0 -1
- package/dist/assets/MoreVert-BZZ4IBOf.js +0 -1
- package/dist/assets/OpenInNew-C5XvRsRC.js +0 -1
- package/dist/assets/PlayArrow-Cn0cfGNW.js +0 -1
- package/dist/assets/RadioGroup-CkuUb_-r.js +0 -1
- package/dist/assets/Search-DXRr3XZy.js +0 -1
- package/dist/assets/Stack-690-8aHU.js +0 -1
- package/dist/assets/ViewColumn-GTnSFOFd.js +0 -1
- package/dist/assets/ViewList-BtVWmZJ0.js +0 -1
- package/dist/assets/_createAggregator-Ct5VkIH5.js +0 -1
- package/dist/assets/access-control-BmMbklSe.js +0 -13
- package/dist/assets/add-resource-lnxpvPO7.js +0 -1
- package/dist/assets/api-lbSHYKYc.js +0 -1
- package/dist/assets/audit-logs-0TJ_0Mvw.js +0 -58
- package/dist/assets/bundle-avatar-CcIs5XOV.js +0 -1
- package/dist/assets/complete-Bb-6z_26.js +0 -45
- package/dist/assets/config-kysZ8p5u.js +0 -1
- package/dist/assets/config-space-BPpdFWKx.js +0 -1
- package/dist/assets/connect-DPIWGg69.js +0 -1
- package/dist/assets/connect-to-ZJr8_Nq9.js +0 -1
- package/dist/assets/dashboard-BUsMb2Wm.js +0 -165
- package/dist/assets/domain-CcBPnmmR.js +0 -9
- package/dist/assets/domain-list-CVn1TPCl.js +0 -15
- package/dist/assets/email-DETfN-BC.js +0 -18
- package/dist/assets/emotion-cache.browser.esm-DkJEKl9I.js +0 -1
- package/dist/assets/exchange-passport-BetHiKY_.js +0 -1
- package/dist/assets/form-text-input-BUB_rL9o.js +0 -11
- package/dist/assets/index-4RJk4AiM.js +0 -1
- package/dist/assets/index-B2fUK0Jg.js +0 -16
- package/dist/assets/index-BArNVkrG.js +0 -1
- package/dist/assets/index-BDxuBkP1.js +0 -29
- package/dist/assets/index-CQSz6hXt.js +0 -316
- package/dist/assets/index-CRK13xk6.js +0 -102
- package/dist/assets/index-D_g2YpF8.js +0 -1
- package/dist/assets/index-De1VedzO.js +0 -5
- package/dist/assets/index-PD8enw5a.js +0 -4
- package/dist/assets/invite-VzUmhGJg.js +0 -5
- package/dist/assets/issue-passport-573OuQnm.js +0 -1
- package/dist/assets/item-BoFU04RW.js +0 -1
- package/dist/assets/localization-BJhiRnk-.js +0 -1
- package/dist/assets/login-Cu5oiCaE.js +0 -1
- package/dist/assets/login-oauth-callback-Dim9h4c3.js +0 -1
- package/dist/assets/lost-passport-D_HnDqKr.js +0 -168
- package/dist/assets/notifications-tGIsoEd6.js +0 -65
- package/dist/assets/open-window-CmBy5HkH.js +0 -1
- package/dist/assets/overview-CmwcUtDq.js +0 -12
- package/dist/assets/publish-resource-aoq2ZIeT.js +0 -1
- package/dist/assets/refType-CNi4gHMp.js +0 -1
- package/dist/assets/sdk-CrAhZvgC.js +0 -1
- package/dist/assets/session-BGDxwrDP.js +0 -1
- package/dist/assets/setup-cPNeqLVK.js +0 -19
- package/dist/assets/simple-select-CHsQAOYZ.js +0 -1
- package/dist/assets/start-CcvndivR.js +0 -187
- package/dist/assets/studio-BdIpZDRv.js +0 -6
- package/dist/assets/transfer-BNPHc5-e.js +0 -16
- package/dist/assets/trim-Boaje3e9.js +0 -1
- package/dist/assets/uniqBy-B2B_OSuq.js +0 -1
- package/dist/assets/unsubscribe-eud8OqTh.js +0 -1
- package/dist/assets/useSlot-DebDFCUQ.js +0 -1
- package/dist/assets/user-center-BWtnQHWR.js +0 -1
- package/dist/assets/user-sessions-DTvyZm5S.js +0 -1
- package/dist/assets/util-BBKZBp8H.js +0 -1
- package/dist/assets/wrap-locale-Ci8gmRb6.js +0 -1
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
/* eslint-disable no-await-in-loop */
|
|
2
2
|
const { WELLKNOWN_SERVICE_PATH_PREFIX, SESSION_TTL } = require('@abtnode/constant');
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
4
|
+
const pick = require('lodash/pick');
|
|
5
5
|
const defaults = require('lodash/defaults');
|
|
6
6
|
const cloneDeep = require('lodash/cloneDeep');
|
|
7
|
-
// const sortBy = require('lodash/sortBy');
|
|
8
7
|
const omit = require('lodash/omit');
|
|
9
8
|
const pLimit = require('p-limit');
|
|
10
|
-
|
|
9
|
+
const { getSourceProvider } = require('@blocklet/meta/lib/did-utils');
|
|
11
10
|
const getRequestIP = require('@abtnode/util/lib/get-request-ip');
|
|
12
|
-
|
|
11
|
+
const { getFederatedMembers, getFederatedMaster } = require('@abtnode/auth/lib/util/federated');
|
|
12
|
+
const { messages } = require('@abtnode/auth/lib/auth');
|
|
13
|
+
const { Joi } = require('@arcblock/validator');
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
const logger = require('../libs/logger')('blocklet-services:user-session');
|
|
15
16
|
const ensureBlocklet = require('../middlewares/ensure-blocklet');
|
|
16
17
|
const { getUserAvatarUrl } = require('../util/federated');
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
const initJwt = require('../libs/jwt');
|
|
19
|
+
const { createTokenFn, getDidConnectVersion } = require('../util');
|
|
20
|
+
const checkUser = require('../middlewares/check-user');
|
|
19
21
|
|
|
20
22
|
const prefix = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/user-session`;
|
|
21
23
|
const limit = pLimit(5);
|
|
@@ -88,228 +90,251 @@ async function patchUserSessionData(userSession, { blocklet, appPid, teamDid, no
|
|
|
88
90
|
userSession.user.roleTitle = passport?.title || 'guest';
|
|
89
91
|
}
|
|
90
92
|
|
|
93
|
+
const loginSessionSchema = Joi.object({
|
|
94
|
+
// uuid 版本需要保持跟数据库 model 定义一致
|
|
95
|
+
id: Joi.string().uuid({ version: 'uuidv4' }).required(),
|
|
96
|
+
userDid: Joi.DID().required(),
|
|
97
|
+
appPid: Joi.DID().required(),
|
|
98
|
+
passportId: Joi.string().allow('', null).optional(),
|
|
99
|
+
}).unknown(true);
|
|
100
|
+
|
|
91
101
|
module.exports = {
|
|
92
102
|
// eslint-disable-next-line no-unused-vars
|
|
93
103
|
init(app, node, options) {
|
|
94
|
-
// FIXME: @zhanghan 登录要确保安全性
|
|
95
104
|
// NOTE: 保留 /login 路由,该功能不是针对于某一个实体来操作的,需要更明确表达意图
|
|
96
|
-
app.post(`${prefix}/login`, ensureBlocklet(), (req, res) => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
105
|
+
app.post(`${prefix}/login`, ensureBlocklet(), async (req, res) => {
|
|
106
|
+
const { blocklet } = req;
|
|
107
|
+
const loginUserSession = req.body;
|
|
108
|
+
|
|
109
|
+
const { value: validUserSession, error } = loginSessionSchema.validate(loginUserSession);
|
|
110
|
+
|
|
111
|
+
if (error) {
|
|
112
|
+
logger.error('Failed to login by user-session', {
|
|
113
|
+
error,
|
|
114
|
+
loginUserSession,
|
|
115
|
+
});
|
|
116
|
+
res.status(400).json({ error });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const teamDid = blocklet.appPid;
|
|
121
|
+
const [validSession] = await node.getUserSession({
|
|
122
|
+
teamDid,
|
|
123
|
+
userDid: validUserSession.userDid,
|
|
124
|
+
id: validUserSession.id,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
if (validSession) {
|
|
128
|
+
const user = await node.getUser({ teamDid, user: { did: validUserSession.userDid } });
|
|
129
|
+
if (!user.approved) {
|
|
130
|
+
res.status(401).json(messages.notAllowedAppUser.en);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const sourceProvider = getSourceProvider(user);
|
|
134
|
+
|
|
135
|
+
const provider = sourceProvider || LOGIN_PROVIDER.WALLET;
|
|
136
|
+
|
|
137
|
+
const masterSite = getFederatedMaster(blocklet);
|
|
138
|
+
const memberSiteList = getFederatedMembers(blocklet);
|
|
139
|
+
const memberSite = memberSiteList.find((item) => item.appPid === validUserSession.appPid);
|
|
140
|
+
const postUser = pick(user, ['did', 'pk', 'fullName', 'locale', 'inviter', 'generation']);
|
|
141
|
+
postUser.lastLoginAt = getRequestIP(req);
|
|
142
|
+
|
|
143
|
+
if (user.email) {
|
|
144
|
+
postUser.email = user.email;
|
|
145
|
+
}
|
|
146
|
+
if (user.avatar) {
|
|
147
|
+
postUser.avatar = getUserAvatarUrl(user.avatar, blocklet);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
let result = {};
|
|
151
|
+
|
|
152
|
+
const walletOS = validSession?.extra?.walletOS || 'web';
|
|
153
|
+
|
|
154
|
+
const isFederatedLogin = memberSite && masterSite.appPid === teamDid;
|
|
155
|
+
if (isFederatedLogin) {
|
|
156
|
+
try {
|
|
157
|
+
result = await node.loginFederated({
|
|
158
|
+
did: teamDid,
|
|
159
|
+
data: {
|
|
160
|
+
user: postUser,
|
|
161
|
+
passport: validUserSession.passportId ? { id: validUserSession.passportId } : undefined,
|
|
162
|
+
walletOS,
|
|
163
|
+
provider,
|
|
164
|
+
},
|
|
165
|
+
site: memberSite,
|
|
166
|
+
});
|
|
167
|
+
} catch (err) {
|
|
168
|
+
logger.error('Failed to login federated', { error: err, memberSite });
|
|
169
|
+
if (err.response) {
|
|
170
|
+
const { status, data } = err.response;
|
|
171
|
+
res.status(status).json(data);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
throw err;
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
const { createSessionToken } = initJwt(node, options);
|
|
178
|
+
const createToken = createTokenFn(createSessionToken);
|
|
179
|
+
const { secret } = await req.getBlockletInfo();
|
|
180
|
+
const sessionConfig = blocklet.settings?.session || {};
|
|
181
|
+
const targetPassport = validUserSession.passportId
|
|
182
|
+
? (user?.passports || []).find((item) => item.id === validUserSession.passportId)
|
|
183
|
+
: null;
|
|
184
|
+
const loggedInUser = await node.loginUser({
|
|
185
|
+
teamDid,
|
|
186
|
+
user: {
|
|
187
|
+
did: postUser.did,
|
|
188
|
+
pk: postUser.pk,
|
|
189
|
+
passport: targetPassport,
|
|
190
|
+
connectedAccount: {
|
|
191
|
+
provider,
|
|
192
|
+
did: user.did,
|
|
193
|
+
pk: user.pk,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
result = createToken(
|
|
199
|
+
user.did,
|
|
200
|
+
{
|
|
201
|
+
secret,
|
|
202
|
+
passport: targetPassport,
|
|
203
|
+
role: targetPassport?.role || 'guest',
|
|
204
|
+
fullName: loggedInUser.fullName,
|
|
205
|
+
provider,
|
|
206
|
+
walletOS,
|
|
207
|
+
emailVerified: !!user?.emailVerified,
|
|
208
|
+
phoneVerified: !!user?.phoneVerified,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
...sessionConfig,
|
|
212
|
+
didConnectVersion: getDidConnectVersion(req),
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const lastLoginIp = getRequestIP(req);
|
|
218
|
+
const ua = req.get('user-agent');
|
|
219
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
220
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
221
|
+
|
|
222
|
+
const userSessionDoc = await node.upsertUserSession({
|
|
223
|
+
id: validUserSession.id,
|
|
224
|
+
teamDid,
|
|
225
|
+
userDid: validUserSession.userDid,
|
|
226
|
+
visitorId: validSession.visitorId,
|
|
227
|
+
appPid: validUserSession.appPid,
|
|
228
|
+
passportId: validUserSession.passportId,
|
|
229
|
+
status: 'online',
|
|
230
|
+
ua: null,
|
|
231
|
+
lastLoginIp,
|
|
232
|
+
extra: {
|
|
233
|
+
walletOS,
|
|
234
|
+
walletDeviceMessageToken,
|
|
235
|
+
walletDeviceId,
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
if (isFederatedLogin) {
|
|
240
|
+
node.syncUserSession({
|
|
241
|
+
teamDid,
|
|
242
|
+
userDid: validUserSession.userDid,
|
|
243
|
+
visitorId: userSessionDoc.visitorId,
|
|
244
|
+
passportId: validUserSession.passportId,
|
|
245
|
+
targetAppPid: validUserSession.appPid,
|
|
246
|
+
ua,
|
|
247
|
+
lastLoginIp,
|
|
248
|
+
extra: {
|
|
249
|
+
walletOS,
|
|
250
|
+
walletDeviceMessageToken,
|
|
251
|
+
walletDeviceId,
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
logger.info('quick-login with', {
|
|
257
|
+
teamDid,
|
|
258
|
+
visitorId: userSessionDoc.visitorId,
|
|
259
|
+
// 记录日志应该使用原始的值
|
|
260
|
+
userDid: loginUserSession.userDid,
|
|
261
|
+
appPid: loginUserSession.appPid,
|
|
262
|
+
passportId: loginUserSession.passportId,
|
|
263
|
+
extra: {
|
|
264
|
+
walletOS,
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
res.json({ ...result, visitorId: userSessionDoc.visitorId });
|
|
269
|
+
} else {
|
|
270
|
+
logger.warn('failed to quick-login with', {
|
|
271
|
+
teamDid,
|
|
272
|
+
id: loginUserSession.id,
|
|
273
|
+
userDid: loginUserSession.userDid,
|
|
274
|
+
appPid: loginUserSession.appPid,
|
|
275
|
+
passportId: loginUserSession.passportId,
|
|
276
|
+
});
|
|
277
|
+
res.status(401).json({ error: 'session expired' });
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
app.get(`${prefix}/myself`, ensureBlocklet(), checkUser, async (req, res) => {
|
|
282
|
+
const { blocklet } = req;
|
|
283
|
+
const { appPid } = blocklet;
|
|
284
|
+
const teamDid = appPid;
|
|
285
|
+
|
|
286
|
+
// 用户管理自己所有的登录会话,不限制 visitorId
|
|
287
|
+
const userSessions = await node.getUserSession({
|
|
288
|
+
teamDid,
|
|
289
|
+
appPid, // 不需要向主站查询 member 的会话列表,所以固定为 teamDid 即可
|
|
290
|
+
userDid: req.user.did,
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
const pendingList = userSessions.map((item) =>
|
|
294
|
+
limit(() =>
|
|
295
|
+
patchUserSessionData(item, {
|
|
296
|
+
blocklet,
|
|
297
|
+
appPid,
|
|
298
|
+
teamDid,
|
|
299
|
+
node,
|
|
300
|
+
})
|
|
301
|
+
)
|
|
302
|
+
);
|
|
303
|
+
await Promise.all(pendingList);
|
|
304
|
+
|
|
305
|
+
const result = userSessions
|
|
306
|
+
.filter((x) => {
|
|
307
|
+
return x?.user?.approved;
|
|
308
|
+
})
|
|
309
|
+
.map((x) => {
|
|
310
|
+
// NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
|
|
311
|
+
return omit(x, ['extra.walletDeviceId', 'extra.walletDeviceMessageToken']);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
res.json(result);
|
|
289
315
|
});
|
|
290
316
|
|
|
291
317
|
/**
|
|
292
318
|
* 获取指定用户的所有登录会话
|
|
293
|
-
*
|
|
319
|
+
* 使用的场景:
|
|
320
|
+
* 1. 用户在未登录状态下,查询当前设备符合快捷登录的会话,实现快速登录
|
|
321
|
+
* 2. 用户在登录状态下,查询当前设备可以使用快捷登录切换的账号
|
|
294
322
|
*/
|
|
295
323
|
app.get(`${prefix}`, ensureBlocklet(), async (req, res) => {
|
|
296
324
|
const { blocklet } = req;
|
|
297
|
-
const
|
|
325
|
+
const { appPid } = blocklet;
|
|
326
|
+
const teamDid = appPid;
|
|
298
327
|
const requestIp = getRequestIP(req);
|
|
299
|
-
const
|
|
328
|
+
const currentUserAgent = req.get('user-agent');
|
|
329
|
+
const visitorId = req.get('x-blocklet-visitor-id');
|
|
300
330
|
|
|
301
|
-
|
|
302
|
-
const { userDid, appPid, visitorId } = req.query;
|
|
303
|
-
|
|
304
|
-
if (!visitorId && !userDid) {
|
|
331
|
+
if (!visitorId) {
|
|
305
332
|
res.json([]);
|
|
306
333
|
return;
|
|
307
334
|
}
|
|
308
335
|
|
|
309
336
|
const userSessions = await node.getUserSession({
|
|
310
|
-
appPid,
|
|
311
337
|
teamDid,
|
|
312
|
-
userDid,
|
|
313
338
|
visitorId,
|
|
314
339
|
});
|
|
315
340
|
|
|
@@ -317,7 +342,7 @@ module.exports = {
|
|
|
317
342
|
limit(() =>
|
|
318
343
|
patchUserSessionData(item, {
|
|
319
344
|
blocklet,
|
|
320
|
-
appPid,
|
|
345
|
+
appPid: item.appPid,
|
|
321
346
|
teamDid,
|
|
322
347
|
node,
|
|
323
348
|
})
|
|
@@ -325,15 +350,15 @@ module.exports = {
|
|
|
325
350
|
);
|
|
326
351
|
await Promise.all(pendingList);
|
|
327
352
|
|
|
328
|
-
// NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
|
|
329
353
|
const result = userSessions
|
|
330
354
|
.filter((x) => {
|
|
331
|
-
if (x.lastLoginIp !== requestIp || x.ua !==
|
|
355
|
+
if (x.lastLoginIp !== requestIp || x.ua !== currentUserAgent || x.status === 'expired') {
|
|
332
356
|
return false;
|
|
333
357
|
}
|
|
334
358
|
return x?.user?.approved;
|
|
335
359
|
})
|
|
336
360
|
.map((x) => {
|
|
361
|
+
// NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
|
|
337
362
|
return omit(x, ['extra.walletDeviceId', 'extra.walletDeviceMessageToken']);
|
|
338
363
|
});
|
|
339
364
|
|