@abtnode/blocklet-services 1.16.34-beta-20241213-135509-c2832f80 → 1.16.34-beta-20241216-230644-e9ec07d8
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/cache.js +8 -8
- package/api/index.js +9 -12
- package/api/libs/connect/session.js +3 -0
- package/api/libs/jwt.js +17 -2
- package/api/middlewares/proxy-to-daemon.js +20 -13
- package/api/routes/dns-resolver.js +4 -4
- package/api/routes/env.js +1 -0
- package/api/services/auth/connect/invite.js +2 -0
- package/api/services/auth/connect/issue-passport.js +2 -0
- package/api/services/auth/connect/receive-transfer-app-owner.js +1 -0
- package/api/services/auth/connect/verify-destroy.js +112 -0
- package/api/services/auth/connect/verify-elevated.js +96 -0
- package/api/services/auth/index.js +4 -0
- package/api/util/attach-shared-utils.js +1 -1
- package/dist/assets/{Add-DcTdY6TL.js → Add-oziwJQxO.js} +1 -1
- package/dist/assets/{Alert-D-e8-MAP.js → Alert-B2UMxWD1.js} +1 -1
- package/dist/assets/{ArrowDropDown-BvKbPg9O.js → ArrowDropDown-pBeX48af.js} +1 -1
- package/dist/assets/{Autocomplete-BX46bk2_.js → Autocomplete-BlOvv6or.js} +1 -1
- package/dist/assets/{Avatar-BoZ94vwc.js → Avatar-D996AUZ6.js} +1 -1
- package/dist/assets/{ButtonGroup-CtoWRVeN.js → ButtonGroup-BREUzzil.js} +1 -1
- package/dist/assets/{CSSTransition-DhDaGYf6.js → CSSTransition-zaAbEPiZ.js} +1 -1
- package/dist/assets/{CheckCircle-DuplVjH9.js → CheckCircle-FLHDae-o.js} +1 -1
- package/dist/assets/{ChevronLeft-CRxnDPnp.js → ChevronLeft-CiKmoQ8h.js} +1 -1
- package/dist/assets/{ChevronRight-6ehYjoIB.js → ChevronRight-95UKQtj3.js} +1 -1
- package/dist/assets/{Clear-BkApEw3Y.js → Clear-6_9YOCNo.js} +1 -1
- package/dist/assets/{Delete-LBSof570.js → Delete-2JRITUjd.js} +1 -1
- package/dist/assets/{DeleteOutline-DoKDfJgl.js → DeleteOutline-ClfCE0Lj.js} +1 -1
- package/dist/assets/{DialogContentText-B73EoFbn.js → DialogContentText-D44OMnuk.js} +1 -1
- package/dist/assets/{DialogTitle-B7_qt6er.js → DialogTitle-DMKAXOmc.js} +1 -1
- package/dist/assets/{Done-BdhX20sl.js → Done-BdFUC8Hw.js} +1 -1
- package/dist/assets/{Download-cZILKd7o.js → Download-CMXqqksP.js} +1 -1
- package/dist/assets/{EditIcon-D9kgkBKD.js → EditIcon-bXgVKORX.js} +1 -1
- package/dist/assets/{Error-ClsC7NrR.js → Error-Z_CuZYH4.js} +1 -1
- package/dist/assets/{ExpandMore-DrecSXMe.js → ExpandMore-jcRO64rE.js} +1 -1
- package/dist/assets/{FormControl-Ve2KegjN.js → FormControl-D0w8yTS2.js} +1 -1
- package/dist/assets/{FormControlLabel-C10RDNgA.js → FormControlLabel-sbdGqFv7.js} +1 -1
- package/dist/assets/{FormGroup-C2DrHvar.js → FormGroup-Bcb4UUdo.js} +1 -1
- package/dist/assets/{Google-qzzGwT5f.js → Google-CpqMiC47.js} +1 -1
- package/dist/assets/{Grid-DZk6Z8OE.js → Grid-CkAEzm2H.js} +1 -1
- package/dist/assets/{HelpOutline-epGv8mXi.js → HelpOutline-BpufW7NN.js} +1 -1
- package/dist/assets/{Hidden-DPr9AEQp.js → Hidden-Cg7GJqQC.js} +1 -1
- package/dist/assets/{InfoOutlined-B8LkdcP3.js → InfoOutlined-B-lhOPpX.js} +1 -1
- package/dist/assets/{InputAdornment-gT40mObj.js → InputAdornment-BKVRkS63.js} +1 -1
- package/dist/assets/{LastPage-DrjUl7Ym.js → LastPage-Bu5G-pPf.js} +1 -1
- package/dist/assets/{Launch-CyTNEiOE.js → Launch-CZLWgEhO.js} +1 -1
- package/dist/assets/{LaunchOutlined-ByFC01OF.js → LaunchOutlined-CaVcl9-h.js} +1 -1
- package/dist/assets/{Link-51uCMh9H.js → Link-DmX7wc4Q.js} +1 -1
- package/dist/assets/{ListItemButton-DtweULpb.js → ListItemButton-D2yb3fbs.js} +1 -1
- package/dist/assets/{ListSubheader-DfLnu3fa.js → ListSubheader-BPyWzTb6.js} +1 -1
- package/dist/assets/{LoadingButton-jLzgx1P7.js → LoadingButton-CHAAyCOF.js} +1 -1
- package/dist/assets/{LockIcon-De6Ad6SH.js → LockIcon-CNS267tc.js} +1 -1
- package/dist/assets/{Loop-tTR2yrlz.js → Loop-BrR8FuGB.js} +1 -1
- package/dist/assets/{MarkEmailRead-B6ZiEWoQ.js → MarkEmailRead-BmNRVkyO.js} +1 -1
- package/dist/assets/{Menu-BeKA5iSq.js → Menu-DH85QS6H.js} +1 -1
- package/dist/assets/{MoreHoriz-B1JvEOcC.js → MoreHoriz-DQk1Wfli.js} +1 -1
- package/dist/assets/{MoreVert-GvhXcnsL.js → MoreVert-DPq_WKu9.js} +1 -1
- package/dist/assets/{OpenInNew-C7tW6zIz.js → OpenInNew-TXxyzsEy.js} +1 -1
- package/dist/assets/{OutlinedInput-Do_G2JiI.js → OutlinedInput-BVNOux2S.js} +1 -1
- package/dist/assets/{Pagination-CkastftC.js → Pagination-WU-N6cKj.js} +1 -1
- package/dist/assets/{PlayArrow-DDe0KUdi.js → PlayArrow-TyTORlLZ.js} +1 -1
- package/dist/assets/{QuestionMarkCircle-BbZ4QGV2.js → QuestionMarkCircle-90cRouXl.js} +1 -1
- package/dist/assets/{RadioGroup-CTXZALsL.js → RadioGroup-CBIFU9QD.js} +1 -1
- package/dist/assets/{Search-BctSuhZ0.js → Search-AoXzdD_X.js} +1 -1
- package/dist/assets/{Select-DYnsfpKN.js → Select-ChOe39sc.js} +1 -1
- package/dist/assets/{ServerLogo-BLAQXKZ3.js → ServerLogo-g2N3ZDmz.js} +1 -1
- package/dist/assets/{Skeleton-CVZKKwKZ.js → Skeleton-0YcPrg6p.js} +1 -1
- package/dist/assets/{Stack-Cc1e8uS3.js → Stack-D7Z2rgbj.js} +1 -1
- package/dist/assets/{Stepper-DsIq58ia.js → Stepper-DLsN98r-.js} +1 -1
- package/dist/assets/{TextField-CO9VOqaC.js → TextField-Ci5oxFIy.js} +1 -1
- package/dist/assets/{Toolbar-D_Z1ZGgn.js → Toolbar-CJeMK--o.js} +1 -1
- package/dist/assets/{ViewColumn-DQ20ttLn.js → ViewColumn-BwKeJgtn.js} +1 -1
- package/dist/assets/{ViewList-Bnq-Bz9v.js → ViewList-DW1lT38f.js} +1 -1
- package/dist/assets/{_createAggregator-dQcfls_H.js → _createAggregator-BKOLMTnl.js} +1 -1
- package/dist/assets/{access-control-BXwHzkCA.js → access-control-BO-NNa9L.js} +1 -1
- package/dist/assets/{actions-D67DGwR5.js → actions-CS1-onx7.js} +1 -1
- package/dist/assets/{add-component-core-Bfu_zvLX.js → add-component-core-CQpcjzTp.js} +1 -1
- package/dist/assets/add-resource-B4aCQWaa.js +1 -0
- package/dist/assets/{addon-yHbJNe3B.js → addon-RtY7NgSk.js} +1 -1
- package/dist/assets/{analytics-DecQzqwH.js → analytics-B1wTku12.js} +1 -1
- package/dist/assets/api-CxPenYpb.js +1 -0
- package/dist/assets/ar-ClAzJrsL.js +1 -0
- package/dist/assets/{audit-logs-Blyvfwui.js → audit-logs-ClsyAREU.js} +1 -1
- package/dist/assets/{base32-DTb-J1h_.js → base32-BRLhYt8r.js} +1 -1
- package/dist/assets/branding-Bw9x4GNJ.js +40 -0
- package/dist/assets/{bundle-avatar-TCiQIGsc.js → bundle-avatar-Bcu0-qbg.js} +1 -1
- package/dist/assets/{button-B2WmAAQP.js → button-CpNLLw_g.js} +1 -1
- package/dist/assets/{click-to-copy-C-hq6Slv.js → click-to-copy-DzbCL3sK.js} +1 -1
- package/dist/assets/{complete-CFh6Nef4.js → complete-D3R19SMR.js} +1 -1
- package/dist/assets/{component-G-UDGzGu.js → component-C1mVBi8e.js} +1 -1
- package/dist/assets/{config-R9luUUXo.js → config-lWDYH0JD.js} +1 -1
- package/dist/assets/{config-navigation-DAx0e99X.js → config-navigation-SPjZqHh0.js} +3 -3
- package/dist/assets/{config-CdE9iwiR.js → config-odm7jeyi.js} +1 -1
- package/dist/assets/{config-space-DGTpbWBc.js → config-space-C0tjrcWp.js} +1 -1
- package/dist/assets/{confirm-BC8TTdT0.js → confirm-Crbbzsvz.js} +1 -1
- package/dist/assets/{connect-DYbGPYA1.js → connect-B3-GVkfZ.js} +1 -1
- package/dist/assets/{connect-Ca4Z5ZCG.js → connect-DLLbGPl5.js} +1 -1
- package/dist/assets/{connect-to-CK3sPRsk.js → connect-to-C9eVFlcm.js} +1 -1
- package/dist/assets/{content-layout-DPhqwbjU.js → content-layout-BKC5bNW-.js} +1 -1
- package/dist/assets/{dashboard-DqNsUCmU.js → dashboard-8di0vHo9.js} +3 -3
- package/dist/assets/de-DXtamgji.js +1 -0
- package/dist/assets/{deprecate-BzwAgeY6.js → deprecate-C1HSovTS.js} +1 -1
- package/dist/assets/{did-address-_iA2JBVL.js → did-address-B0GIn9Ek.js} +1 -1
- package/dist/assets/{domain-CdS6WH7r.js → domain-D6w8Qhru.js} +1 -1
- package/dist/assets/{domain-list-DgnHKWqf.js → domain-list-DQRrwjcQ.js} +1 -1
- package/dist/assets/{email-pILbo7GY.js → email-R2H09wqy.js} +3 -3
- package/dist/assets/emotion-cache.browser.esm--gKiCyha.js +1 -0
- package/dist/assets/es-CpCX7I40.js +1 -0
- package/dist/assets/{exchange-passport-Bz0OFLm3.js → exchange-passport-BZGRS47V.js} +1 -1
- package/dist/assets/{fallback-DNotPO94.js → fallback-Dl7dgOaa.js} +1 -1
- package/dist/assets/{form-text-input-BMDOwfx4.js → form-text-input-lwoAZfFl.js} +1 -1
- package/dist/assets/{format-error-DwZSxaHw.js → format-error-DBtDfVh-.js} +1 -1
- package/dist/assets/fr-BEjay0TP.js +1 -0
- package/dist/assets/{fuel-BLdY2pe6.js → fuel-D41QERyB.js} +1 -1
- package/dist/assets/{fullpage-DizVq3Q0.js → fullpage-RXfv9M5o.js} +1 -1
- package/dist/assets/{get-safe-url-BFPkD_-w.js → get-safe-url-B3Azg5h8.js} +1 -1
- package/dist/assets/{get-safe-url-DZ-z9Y11.js → get-safe-url-D3hjXvs9.js} +1 -1
- package/dist/assets/hi-CiAkcvJi.js +1 -0
- package/dist/assets/{home-Tu1r9UUP.js → home-D8fBcNgB.js} +1 -1
- package/dist/assets/id-Bdd8R_aj.js +1 -0
- package/dist/assets/{iframe-CaVEoPzZ.js → iframe-DkewNhA3.js} +1 -1
- package/dist/assets/{index-D3U2QoHe.js → index-4GU9KEjL.js} +1 -1
- package/dist/assets/{index-4W47mya0.js → index-B07Wn0U-.js} +1 -1
- package/dist/assets/{index-DLfBZi9C.js → index-B1kpM8NP.js} +1 -1
- package/dist/assets/{index-DheUDLUu.js → index-BCgSGfV1.js} +1 -1
- package/dist/assets/{index-CWzdBGm2.js → index-BDUj-193.js} +1 -1
- package/dist/assets/{index-BuFsUoby.js → index-BUvwt8Ib.js} +1 -1
- package/dist/assets/{index-DWDFxHgN.js → index-BXO1IWsc.js} +1 -1
- package/dist/assets/{index-Bj8u1Jq1.js → index-BdLPd5L6.js} +49 -49
- package/dist/assets/{index-DUDLGVrz.js → index-BfV_ShLL.js} +3 -3
- package/dist/assets/{index-YElVd5eM.js → index-BfaLrSR3.js} +1 -1
- package/dist/assets/{index-Cyq88B7c.js → index-Bt6PI6pf.js} +1 -1
- package/dist/assets/{index-BH89MPC8.js → index-By7O71Mh.js} +1 -1
- package/dist/assets/{index-BcBVFEsU.js → index-CDcW4rnB.js} +1 -1
- package/dist/assets/{index-BEJPw-Yp.js → index-CFqjtwFE.js} +11 -11
- package/dist/assets/{index-BjsbrYRH.js → index-CGjZdtFl.js} +1 -1
- package/dist/assets/{index-CNW7JpLY.js → index-CIk-ynX5.js} +1 -1
- package/dist/assets/{index-d-mPwPwc.js → index-CKcc_fAq.js} +1 -1
- package/dist/assets/{index-DDG6nzV-.js → index-CPeY-Ohp.js} +1 -1
- package/dist/assets/{index-B3taNgzi.js → index-CZsgoYpY.js} +1 -1
- package/dist/assets/{index-dEKXkm4C.js → index-CqThjKMA.js} +20 -20
- package/dist/assets/{index-DEG_Pe1F.js → index-Cs4TyV1c.js} +1 -1
- package/dist/assets/{index-CzXHRu12.js → index-D-9CkeIG.js} +1 -1
- package/dist/assets/{index-DPiBRCz4.js → index-D6ldJXfX.js} +1 -1
- package/dist/assets/{index-Bn2ctnS8.js → index-DKINM6Nt.js} +1 -1
- package/dist/assets/{index-BXvoL3Iu.js → index-DOu_xcdl.js} +1 -1
- package/dist/assets/{index-DblJTJQz.js → index-DfXj7ybg.js} +1 -1
- package/dist/assets/{index-lJoTfApr.js → index-GUizGQzu.js} +3 -3
- package/dist/assets/{index-pMGk7BEW.js → index-QMWW0Bcs.js} +1 -1
- package/dist/assets/{index-BM80ek7x.js → index-SKdgoMeu.js} +16 -16
- package/dist/assets/index-c9cG5wja.js +1 -0
- package/dist/assets/{index-BWn04_iI.js → index-obymsIFm.js} +1 -1
- package/dist/assets/{index-CjBMqGWM.js → index-pWkpwD1Q.js} +1 -1
- package/dist/assets/{index-BOpUgQ8H.js → index-sMu-oGGn.js} +1 -1
- package/dist/assets/{invitation-BFbVuQFx.js → invitation-D4WpIn6x.js} +1 -1
- package/dist/assets/{invite-Bron7GEw.js → invite-BfB_aDyT.js} +1 -1
- package/dist/assets/{isEmail-5f9jXFqI.js → isEmail-F9TPpwIe.js} +1 -1
- package/dist/assets/{issue-passport-BMTa-EpO.js → issue-passport-CApp6bN1.js} +1 -1
- package/dist/assets/{item-BYnIVyyp.js → item-kzpPRPVR.js} +1 -1
- package/dist/assets/ja-DnQKgDGU.js +1 -0
- package/dist/assets/{jss-plugin-props-sort.esm-CxRI79tr.js → jss-plugin-props-sort.esm-CwPevptU.js} +1 -1
- package/dist/assets/ko-BHfb-bOw.js +1 -0
- package/dist/assets/{launch-result-message-DXzliFie.js → launch-result-message-CX_U99kd.js} +1 -1
- package/dist/assets/{layout-CAsilLGB.js → layout-DvMUwpg_.js} +1 -1
- package/dist/assets/{list-header-YJQAbm9g.js → list-header-uQE_23fF.js} +1 -1
- package/dist/assets/localization-CuAmUQDN.js +1 -0
- package/dist/assets/{log-Bdo9FkyE.js → log-CvLTE7pK.js} +1 -1
- package/dist/assets/{login-D8bQWYck.js → login-CFKL0FQd.js} +1 -1
- package/dist/assets/{login-oauth-callback-DQ0fJI0M.js → login-oauth-callback-BSY1JDGL.js} +1 -1
- package/dist/assets/{logo-uploader-cFGQ2Gvc.js → logo-uploader-DY_8qKDx.js} +3 -3
- package/dist/assets/{lost-passport-Cut0hEBf.js → lost-passport-B_QIprST.js} +3 -3
- package/dist/assets/{lottie-react.esm-BMrLVwC-.js → lottie-react.esm-BcWUpu_M.js} +1 -1
- package/dist/assets/{notifications-OcsJQIbe.js → notifications-SQYVBOJl.js} +1 -1
- package/dist/assets/{open-window-D7sglcpE.js → open-window-DT3o9_iM.js} +1 -1
- package/dist/assets/{overview-DYkC_WUD.js → overview-cXOMTeZY.js} +1 -1
- package/dist/assets/{page-header-Bs0D4BNJ.js → page-header-CLillI1Q.js} +1 -1
- package/dist/assets/{permission-BXmIoXZx.js → permission-BGFCgHaZ.js} +1 -1
- package/dist/assets/{preferences-C4gMbsXE.js → preferences-C-oVi6nW.js} +1 -1
- package/dist/assets/pt-BVlUCv-x.js +1 -0
- package/dist/assets/publish-resource-D_6RVXvs.js +1 -0
- package/dist/assets/{raf-schd.esm-4I_ky4wN.js → raf-schd.esm-BOV912qX.js} +1 -1
- package/dist/assets/{react-beautiful-dnd.esm-0qjksHeu.js → react-beautiful-dnd.esm-DaEDtLZw.js} +1 -1
- package/dist/assets/refType-DZSgX1z-.js +1 -0
- package/dist/assets/{resource-dialog-D7wZSQZM.js → resource-dialog-J8x4QYiR.js} +1 -1
- package/dist/assets/ru-9zTXB_9d.js +1 -0
- package/dist/assets/sdk-1vv5JP0C.js +1 -0
- package/dist/assets/{selector-CbAq7CNk.js → selector-DINv7b40.js} +1 -1
- package/dist/assets/session-CKflpSkt.js +1 -0
- package/dist/assets/{setup-CfBWQVLM.js → setup-Dl2ojiVm.js} +3 -3
- package/dist/assets/{shorten-label-DwdHohLo.js → shorten-label-DFTBgwE4.js} +1 -1
- package/dist/assets/{simple-select-DABb5zZb.js → simple-select-DosSi8_f.js} +1 -1
- package/dist/assets/{slicedToArray-oTB17pto.js → slicedToArray-grkGbmXV.js} +1 -1
- package/dist/assets/{start-6oXQjfyP.js → start-BU6y8pDq.js} +1 -1
- package/dist/assets/{step-actions-6E9sNomZ.js → step-actions-b3xtzolO.js} +1 -1
- package/dist/assets/{studio-rQhXFpEr.js → studio-DnP6IorH.js} +1 -1
- package/dist/assets/{switch-control-BEdKOp6L.js → switch-control-BOpP15eU.js} +1 -1
- package/dist/assets/th-dSEsbGj3.js +1 -0
- package/dist/assets/{toUpper-DUJEYm58.js → toUpper-Dp3pwZgt.js} +1 -1
- package/dist/assets/{transfer-I7cX7406.js → transfer-tZLszbhH.js} +1 -1
- package/dist/assets/{trim-Dlp2Wnor.js → trim-Bm98bTgi.js} +1 -1
- package/dist/assets/{uniqBy-BSt4eeqO.js → uniqBy-fYx3UGP9.js} +1 -1
- package/dist/assets/{unsubscribe-HqTE-lAn.js → unsubscribe-BZiPgFod.js} +1 -1
- package/dist/assets/{url-join-D5NytcuV.js → url-join-D_G6hgzn.js} +1 -1
- package/dist/assets/{use-mobile-kPLzB4n2.js → use-mobile-C3j-6YEm.js} +1 -1
- package/dist/assets/{use-mobile-CPfu5RWb.js → use-mobile-zO5gFHCz.js} +1 -1
- package/dist/assets/{useAsync-BYLVsyCe.js → useAsync-BZGW_Fx5.js} +1 -1
- package/dist/assets/{useFormControl-Cb-boaYc.js → useFormControl-Ddh25APR.js} +1 -1
- package/dist/assets/{useLocalStorage-DwpjAyRq.js → useLocalStorage-CE24rTA_.js} +1 -1
- package/dist/assets/{useSetState-BZm8P2F-.js → useSetState-BkRqzg1b.js} +1 -1
- package/dist/assets/{useSlot-2GhS7jdI.js → useSlot-BcsOw05W.js} +1 -1
- package/dist/assets/{useSlotProps-Dxo3NBwX.js → useSlotProps-DDlERLnv.js} +1 -1
- package/dist/assets/{useThemeProps-CK1ghsXu.js → useThemeProps-qe1GIVnM.js} +1 -1
- package/dist/assets/{user-center-De5_2TQv.js → user-center-BgYk7eUi.js} +1 -1
- package/dist/assets/{user-sessions-BIa10Xhc.js → user-sessions-U3mG72jr.js} +1 -1
- package/dist/assets/{util-CJcl9xCr.js → util-DXw3G0bm.js} +1 -1
- package/dist/assets/vi-DGJT58io.js +1 -0
- package/dist/assets/wrap-locale-BgPwnYQ_.js +1 -0
- package/dist/assets/zh-B5m-JMeT.js +1 -0
- package/dist/assets/zh-C0cVdfIo.js +2 -0
- package/dist/assets/zh-tw-DkLkQUwb.js +1 -0
- package/dist/assets/zh-tw-DwIjSsJ9.js +1 -0
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +21 -20
- package/dist/assets/add-resource-Bopi2F5-.js +0 -1
- package/dist/assets/api-DH8IdxXg.js +0 -1
- package/dist/assets/ar-B3QGVHSJ.js +0 -1
- package/dist/assets/branding-Cr7lzDNp.js +0 -40
- package/dist/assets/de-CuczgAA8.js +0 -1
- package/dist/assets/emotion-cache.browser.esm-FU3nBxaV.js +0 -1
- package/dist/assets/es-D938HYco.js +0 -1
- package/dist/assets/fr-BUgkJkru.js +0 -1
- package/dist/assets/hi-CLGvJ0VO.js +0 -1
- package/dist/assets/id-CoJHfLJv.js +0 -1
- package/dist/assets/index-D7t6icMl.js +0 -1
- package/dist/assets/ja-BfQ6NQ1Q.js +0 -1
- package/dist/assets/ko-OirMS2DQ.js +0 -1
- package/dist/assets/localization-CoaLMiV4.js +0 -1
- package/dist/assets/pt-DFNHF52P.js +0 -1
- package/dist/assets/publish-resource-D-e2YEIQ.js +0 -1
- package/dist/assets/refType-B6FV0kei.js +0 -1
- package/dist/assets/ru-D1ipkx7j.js +0 -1
- package/dist/assets/sdk-DbJuRsBZ.js +0 -1
- package/dist/assets/session-uB27dTXO.js +0 -1
- package/dist/assets/th-Bq0BOWuO.js +0 -1
- package/dist/assets/vi-w34NOSIe.js +0 -1
- package/dist/assets/wrap-locale-CZRJioV-.js +0 -1
- package/dist/assets/zh-BTeqEH4T.js +0 -1
- package/dist/assets/zh-C8AwRuvb.js +0 -2
- package/dist/assets/zh-tw-BvZpzT6d.js +0 -1
- package/dist/assets/zh-tw-CJBhIBvB.js +0 -1
package/api/cache.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
const
|
|
1
|
+
const { LRUCache } = require('lru-cache');
|
|
2
2
|
const nodemailer = require('nodemailer');
|
|
3
3
|
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
4
4
|
const md5 = require('@abtnode/util/lib/md5');
|
|
5
5
|
|
|
6
|
-
const cache = new
|
|
6
|
+
const cache = new LRUCache({
|
|
7
7
|
max: 100, // cache at most 100
|
|
8
|
-
|
|
8
|
+
ttl: 60 * 60 * 1000, // cache for 1 hour
|
|
9
9
|
});
|
|
10
10
|
|
|
11
|
-
const sessionCacheDisabledUser = new
|
|
11
|
+
const sessionCacheDisabledUser = new LRUCache({
|
|
12
12
|
max: 10000,
|
|
13
|
-
|
|
13
|
+
ttl: 86400 * 1000, // cache for 1 day
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
const securityConfigCache = new
|
|
16
|
+
const securityConfigCache = new LRUCache({
|
|
17
17
|
max: 5000, // 这里存储的是所有 blocklet 的缓存数据,需要设置的大一些
|
|
18
|
-
|
|
18
|
+
ttl: 86400 * 1000, // 这部分数据不会频繁变动,设置为 1 天,将来可以通过页面进行性能优化设置
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
// FIXME: @zhanghan 将来需要缩短 cache key 的长度
|
|
@@ -163,7 +163,7 @@ cache.removeSecurityConfig = ({ did } = {}) => {
|
|
|
163
163
|
const prefix = cache.keyFns.securityConfig(did);
|
|
164
164
|
securityConfigCache.forEach((value, key) => {
|
|
165
165
|
if (key.startsWith(prefix)) {
|
|
166
|
-
securityConfigCache.
|
|
166
|
+
securityConfigCache.delete(key);
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
};
|
package/api/index.js
CHANGED
|
@@ -206,17 +206,17 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
206
206
|
const did = get(data, 'meta.did');
|
|
207
207
|
if (did) {
|
|
208
208
|
logger.info('delete blocklet cache on update', { did, pid: process.pid });
|
|
209
|
-
cache.
|
|
210
|
-
cache.
|
|
211
|
-
cache.
|
|
209
|
+
cache.delete(cache.keyFns.blocklet(did));
|
|
210
|
+
cache.delete(cache.keyFns.blockletInfo(did));
|
|
211
|
+
cache.delete(cache.keyFns.notificationConfig(did));
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
// structV1Did is just for migration purpose and should be removed in the future
|
|
215
215
|
const structV1Did = get(data, 'structV1Did');
|
|
216
216
|
if (structV1Did) {
|
|
217
217
|
logger.info('delete blocklet cache on update', { structV1Did, pid: process.pid });
|
|
218
|
-
cache.
|
|
219
|
-
cache.
|
|
218
|
+
cache.delete(cache.keyFns.blocklet(structV1Did));
|
|
219
|
+
cache.delete(cache.keyFns.blockletInfo(structV1Did));
|
|
220
220
|
}
|
|
221
221
|
});
|
|
222
222
|
});
|
|
@@ -227,7 +227,8 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
227
227
|
});
|
|
228
228
|
eventHub.on(EVENTS.NODE_UPDATED, () => {
|
|
229
229
|
logger.info('node update', { pid: process.pid });
|
|
230
|
-
cache.
|
|
230
|
+
cache.delete(cache.keyFns.node());
|
|
231
|
+
proxyToDaemon.clearCache();
|
|
231
232
|
});
|
|
232
233
|
eventHub.on(TeamEvents.userPermissionUpdated, ({ teamDid, user } = {}) => {
|
|
233
234
|
logger.info('user permission updated', { teamDid, userDid: user?.did });
|
|
@@ -439,7 +440,7 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
439
440
|
checkMemberPermission(req, res, next);
|
|
440
441
|
}
|
|
441
442
|
},
|
|
442
|
-
proxyToDaemon({ proxy,
|
|
443
|
+
proxyToDaemon({ proxy, node })
|
|
443
444
|
);
|
|
444
445
|
});
|
|
445
446
|
|
|
@@ -451,11 +452,7 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
451
452
|
// media 相关处理代理到 daemon 中进行处理
|
|
452
453
|
'/api/media/upload/**',
|
|
453
454
|
].forEach((pathname) => {
|
|
454
|
-
server.use(
|
|
455
|
-
`${WELLKNOWN_SERVICE_PATH_PREFIX}${pathname}`,
|
|
456
|
-
checkMemberPermission,
|
|
457
|
-
proxyToDaemon({ proxy, ...options })
|
|
458
|
-
);
|
|
455
|
+
server.use(`${WELLKNOWN_SERVICE_PATH_PREFIX}${pathname}`, checkMemberPermission, proxyToDaemon({ proxy, node }));
|
|
459
456
|
});
|
|
460
457
|
|
|
461
458
|
// API: dns resolver
|
|
@@ -10,6 +10,7 @@ const {
|
|
|
10
10
|
getPassportStatusEndpoint,
|
|
11
11
|
getApplicationInfo,
|
|
12
12
|
verifyNFT,
|
|
13
|
+
canSessionBeElevated,
|
|
13
14
|
} = require('@abtnode/auth/lib/auth');
|
|
14
15
|
const {
|
|
15
16
|
NODE_SERVICES,
|
|
@@ -599,6 +600,7 @@ module.exports = {
|
|
|
599
600
|
walletOS,
|
|
600
601
|
emailVerified: updatedUser.emailVerified,
|
|
601
602
|
phoneVerified: updatedUser.phoneVerified,
|
|
603
|
+
elevated: canSessionBeElevated(role, await request.getNodeInfo()),
|
|
602
604
|
},
|
|
603
605
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
|
|
604
606
|
);
|
|
@@ -968,6 +970,7 @@ module.exports = {
|
|
|
968
970
|
walletOS: request.context.didwallet.os,
|
|
969
971
|
emailVerified: user.emailVerified,
|
|
970
972
|
phoneVerified: user.phoneVerified,
|
|
973
|
+
elevated: canSessionBeElevated(role, await request.getNodeInfo()),
|
|
971
974
|
},
|
|
972
975
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
|
|
973
976
|
);
|
package/api/libs/jwt.js
CHANGED
|
@@ -30,6 +30,7 @@ const initJwt = (node, options) => {
|
|
|
30
30
|
walletOS,
|
|
31
31
|
emailVerified = false,
|
|
32
32
|
phoneVerified = false,
|
|
33
|
+
elevated = false,
|
|
33
34
|
}
|
|
34
35
|
) =>
|
|
35
36
|
createAuthToken({
|
|
@@ -43,6 +44,7 @@ const initJwt = (node, options) => {
|
|
|
43
44
|
provider,
|
|
44
45
|
walletOS,
|
|
45
46
|
kyc: encodeKycStatus(emailVerified, phoneVerified),
|
|
47
|
+
elevated,
|
|
46
48
|
});
|
|
47
49
|
|
|
48
50
|
const verifySessionToken = (token, secret, { checkFromDb, teamDid, checkToken } = {}) =>
|
|
@@ -61,7 +63,16 @@ const initJwt = (node, options) => {
|
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
const {
|
|
66
|
+
const {
|
|
67
|
+
did,
|
|
68
|
+
role,
|
|
69
|
+
passport,
|
|
70
|
+
fullName,
|
|
71
|
+
provider = LOGIN_PROVIDER.WALLET,
|
|
72
|
+
walletOS,
|
|
73
|
+
kyc = 0,
|
|
74
|
+
elevated = false,
|
|
75
|
+
} = decoded;
|
|
65
76
|
let user;
|
|
66
77
|
if (!did) {
|
|
67
78
|
return reject(new Error('Invalid jwt token: invalid did'));
|
|
@@ -95,8 +106,12 @@ const initJwt = (node, options) => {
|
|
|
95
106
|
user.provider = provider;
|
|
96
107
|
user.walletOS = walletOS;
|
|
97
108
|
user.kyc = encodeKycStatus(user.emailVerified, user.phoneVerified);
|
|
109
|
+
user.elevated = elevated;
|
|
98
110
|
} else {
|
|
99
|
-
user = Object.assign(
|
|
111
|
+
user = Object.assign(
|
|
112
|
+
{ did, role, passport, fullName, provider, walletOS, kyc, elevated },
|
|
113
|
+
decodeKycStatus(kyc)
|
|
114
|
+
);
|
|
100
115
|
}
|
|
101
116
|
|
|
102
117
|
return resolve(user);
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
const jwt = require('jsonwebtoken');
|
|
2
|
-
const
|
|
2
|
+
const { LRUCache } = require('lru-cache');
|
|
3
3
|
const pick = require('lodash/pick');
|
|
4
4
|
|
|
5
5
|
const md5 = require('@abtnode/util/lib/md5');
|
|
6
6
|
const { AUTH_CERT_TYPE, WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
7
7
|
const { BLOCKLET_TENANT_MODES } = require('@blocklet/constant');
|
|
8
8
|
|
|
9
|
-
const cacheKey = (userDid, appPid, tenantMode) => md5(`${userDid}:${appPid}:${tenantMode}`);
|
|
9
|
+
const cacheKey = (userDid, elevated, appPid, tenantMode) => md5(`${userDid}:${elevated}:${appPid}:${tenantMode}`);
|
|
10
10
|
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
11
|
+
const cache = new LRUCache({
|
|
12
|
+
max: 200,
|
|
13
|
+
ttl: 60 * 60 * 1000, // cache for 1 hour
|
|
14
|
+
});
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const proxyToDaemon = ({ proxy, node }) => {
|
|
17
|
+
const getToken = async (did, tenantMode, user) => {
|
|
18
|
+
const key = cacheKey(user.did, user.elevated ? 1 : 0, did, tenantMode);
|
|
19
19
|
const cacheToken = cache.get(key);
|
|
20
20
|
if (cacheToken) {
|
|
21
21
|
return cacheToken;
|
|
@@ -28,9 +28,11 @@ const proxyToDaemon = ({ proxy, sessionSecret }) => {
|
|
|
28
28
|
role: user.role,
|
|
29
29
|
tenantMode,
|
|
30
30
|
blockletDid: did,
|
|
31
|
+
elevated: user.elevated,
|
|
32
|
+
kyc: user.kyc,
|
|
31
33
|
},
|
|
32
|
-
|
|
33
|
-
{ expiresIn: '
|
|
34
|
+
await node.getSessionSecret(),
|
|
35
|
+
{ expiresIn: '1h' }
|
|
34
36
|
);
|
|
35
37
|
|
|
36
38
|
cache.set(key, token);
|
|
@@ -38,12 +40,16 @@ const proxyToDaemon = ({ proxy, sessionSecret }) => {
|
|
|
38
40
|
return token;
|
|
39
41
|
};
|
|
40
42
|
|
|
41
|
-
return (req, res) => {
|
|
43
|
+
return async (req, res) => {
|
|
42
44
|
req.url = (req.originalUrl || '/').replace(WELLKNOWN_SERVICE_PATH_PREFIX, '');
|
|
43
45
|
// did returned ty req.getBlockletDid() is blocklet.meta.did
|
|
44
46
|
// the blocklet.meta.did is always the same as appPid in structV2 application
|
|
45
47
|
const did = req.getBlockletDid();
|
|
46
|
-
const token = getToken(
|
|
48
|
+
const token = await getToken(
|
|
49
|
+
did,
|
|
50
|
+
req.tenantMode || BLOCKLET_TENANT_MODES.SINGLE,
|
|
51
|
+
pick(req.user, ['did', 'role', 'elevated', 'kyc'])
|
|
52
|
+
);
|
|
47
53
|
|
|
48
54
|
req.headers.source = 'blocklet-service';
|
|
49
55
|
req.headers.authorization = `Bearer ${token}`;
|
|
@@ -54,3 +60,4 @@ const proxyToDaemon = ({ proxy, sessionSecret }) => {
|
|
|
54
60
|
};
|
|
55
61
|
|
|
56
62
|
module.exports = proxyToDaemon;
|
|
63
|
+
module.exports.clearCache = () => cache.clear();
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
const dns = require('dns');
|
|
2
|
-
const
|
|
2
|
+
const { LRUCache } = require('lru-cache');
|
|
3
3
|
const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
4
4
|
|
|
5
5
|
module.exports = {
|
|
6
6
|
init(app) {
|
|
7
|
-
const cache = new
|
|
7
|
+
const cache = new LRUCache({
|
|
8
8
|
max: 50, // cache at most 50
|
|
9
|
-
|
|
9
|
+
ttl: 5 * 60 * 1000, // cache for 5 minute
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/api/dns-resolve/`, (req, res) => {
|
|
@@ -26,7 +26,7 @@ module.exports = {
|
|
|
26
26
|
|
|
27
27
|
dns.lookup(hostname, (err, address) => {
|
|
28
28
|
if (err) {
|
|
29
|
-
cache.
|
|
29
|
+
cache.delete(hostname);
|
|
30
30
|
res.json({ address: null, error: err.message });
|
|
31
31
|
return;
|
|
32
32
|
}
|
package/api/routes/env.js
CHANGED
|
@@ -44,6 +44,7 @@ module.exports = {
|
|
|
44
44
|
serverEndpoint: "${serverEndpoint}",
|
|
45
45
|
serverVersion: "${info.version}",
|
|
46
46
|
mode: "${info.mode}",
|
|
47
|
+
enableSessionHardening: ${info.enableSessionHardening || false},
|
|
47
48
|
ownerNft: ${JSON.stringify(info.ownerNft || '')},
|
|
48
49
|
launcher: ${JSON.stringify(info.launcher || '')}
|
|
49
50
|
}`);
|
|
@@ -5,6 +5,7 @@ const {
|
|
|
5
5
|
messages,
|
|
6
6
|
checkWalletVersion,
|
|
7
7
|
beforeInvitationRequest,
|
|
8
|
+
canSessionBeElevated,
|
|
8
9
|
} = require('@abtnode/auth/lib/auth');
|
|
9
10
|
const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
|
|
10
11
|
const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
@@ -114,6 +115,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
114
115
|
walletOS,
|
|
115
116
|
emailVerified: !!user?.emailVerified,
|
|
116
117
|
phoneVerified: !!user?.phoneVerified,
|
|
118
|
+
elevated: canSessionBeElevated(role, nodeInfo),
|
|
117
119
|
},
|
|
118
120
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
119
121
|
);
|
|
@@ -4,6 +4,7 @@ const {
|
|
|
4
4
|
handleIssuePassportResponse,
|
|
5
5
|
checkWalletVersion,
|
|
6
6
|
beforeIssuePassportRequest,
|
|
7
|
+
canSessionBeElevated,
|
|
7
8
|
} = require('@abtnode/auth/lib/auth');
|
|
8
9
|
const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
|
|
9
10
|
const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
@@ -127,6 +128,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
127
128
|
walletOS,
|
|
128
129
|
emailVerified: !!user?.emailVerified,
|
|
129
130
|
phoneVerified: !!user?.phoneVerified,
|
|
131
|
+
elevated: canSessionBeElevated(role, nodeInfo),
|
|
130
132
|
},
|
|
131
133
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
132
134
|
);
|
|
@@ -389,6 +389,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
|
|
|
389
389
|
walletOS,
|
|
390
390
|
emailVerified: !!user?.emailVerified,
|
|
391
391
|
phoneVerified: !!user?.phoneVerified,
|
|
392
|
+
elevated: true,
|
|
392
393
|
},
|
|
393
394
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
394
395
|
);
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
const { messages } = require('@abtnode/auth/lib/auth');
|
|
2
|
+
const { authenticateByVc, getVerifyAccessClaims } = require('@abtnode/auth/lib/server');
|
|
3
|
+
const { ROLES, MFA_PROTECTED_METHODS } = require('@abtnode/constant');
|
|
4
|
+
const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
|
|
5
|
+
const { fromBase64 } = require('@ocap/util');
|
|
6
|
+
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
7
|
+
|
|
8
|
+
const logger = require('../../../libs/logger')();
|
|
9
|
+
const { createTokenFn, getDidConnectVersion } = require('../../../util');
|
|
10
|
+
const { PASSPORT_VC_TYPES } = require('../../../libs/auth/utils');
|
|
11
|
+
const { getTrustedIssuers } = require('../../../util/blocklet-utils');
|
|
12
|
+
|
|
13
|
+
const ALLOWED_ROLES = [ROLES.OWNER, ROLES.ADMIN, ROLES.MEMBER];
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line no-unused-vars
|
|
16
|
+
module.exports = function createRoutes(node, authenticator, createSessionToken) {
|
|
17
|
+
return {
|
|
18
|
+
action: 'verify-destroy',
|
|
19
|
+
onConnect: async ({ request, userDid, extraParams: { locale, payload, roles } }) => {
|
|
20
|
+
const blocklet = await request.getBlocklet();
|
|
21
|
+
const user = await node.getUser({ teamDid: blocklet.appPid, user: { did: userDid } });
|
|
22
|
+
if (!user) {
|
|
23
|
+
throw new Error(messages.notAllowed[locale]);
|
|
24
|
+
}
|
|
25
|
+
if (!user.approved) {
|
|
26
|
+
throw new Error(messages.notAuthorized[locale]);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ensure payload is valid
|
|
30
|
+
const parsed = JSON.parse(fromBase64(payload).toString());
|
|
31
|
+
if (!MFA_PROTECTED_METHODS.includes(parsed.action)) {
|
|
32
|
+
throw new Error(messages.notAllowed[locale]);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ensure roles are valid
|
|
36
|
+
const expected = roles
|
|
37
|
+
.split(',')
|
|
38
|
+
.map((x) => x.trim())
|
|
39
|
+
.filter(Boolean);
|
|
40
|
+
if (expected.some((x) => !ALLOWED_ROLES.includes(x))) {
|
|
41
|
+
throw new Error(messages.notAllowed[locale]);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
45
|
+
return {
|
|
46
|
+
verifiableCredential: getVerifyAccessClaims({
|
|
47
|
+
node,
|
|
48
|
+
passports: user.passports,
|
|
49
|
+
roles: expected,
|
|
50
|
+
types: PASSPORT_VC_TYPES,
|
|
51
|
+
source: 'blocklet',
|
|
52
|
+
trustedIssuers: await getTrustedIssuers(blocklet, { sourceAppPid }),
|
|
53
|
+
}),
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
onAuth: async ({ request, claims, challenge, userDid, updateSession, extraParams }) => {
|
|
58
|
+
const { locale, payload } = extraParams;
|
|
59
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
60
|
+
const [blocklet, blockletInfo, info] = await Promise.all([
|
|
61
|
+
request.getBlocklet(),
|
|
62
|
+
request.getBlockletInfo(),
|
|
63
|
+
node.getNodeInfo(),
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
const { role, user, passport } = await authenticateByVc({
|
|
67
|
+
node,
|
|
68
|
+
locale,
|
|
69
|
+
teamDid: blocklet.appPid,
|
|
70
|
+
userDid,
|
|
71
|
+
claims,
|
|
72
|
+
challenge,
|
|
73
|
+
types: PASSPORT_VC_TYPES,
|
|
74
|
+
trustedIssuers: await getTrustedIssuers(blocklet, { sourceAppPid }),
|
|
75
|
+
});
|
|
76
|
+
if (!ALLOWED_ROLES.includes(role)) {
|
|
77
|
+
throw new Error(messages.notAllowed[locale]);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const parsed = JSON.parse(fromBase64(payload).toString());
|
|
81
|
+
const session = await node.startSession({ data: { ...parsed, type: 'destroy', operator: userDid } });
|
|
82
|
+
|
|
83
|
+
logger.info('DestroySession.start', { sessionId: session.id, parsed, userDid, role });
|
|
84
|
+
|
|
85
|
+
const updates = { destroySessionId: session.id };
|
|
86
|
+
if (info.enableSessionHardening) {
|
|
87
|
+
const createToken = createTokenFn(createSessionToken);
|
|
88
|
+
const sessionConfig = blocklet.settings?.session || {};
|
|
89
|
+
|
|
90
|
+
const { sessionToken, refreshToken } = createToken(
|
|
91
|
+
userDid,
|
|
92
|
+
{
|
|
93
|
+
secret: blockletInfo.secret,
|
|
94
|
+
passport,
|
|
95
|
+
role,
|
|
96
|
+
fullName: user.fullName,
|
|
97
|
+
provider: LOGIN_PROVIDER.WALLET,
|
|
98
|
+
walletOS: request.context.didwallet.os,
|
|
99
|
+
emailVerified: user.emailVerified,
|
|
100
|
+
phoneVerified: user.phoneVerified,
|
|
101
|
+
elevated: true,
|
|
102
|
+
},
|
|
103
|
+
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
|
|
104
|
+
);
|
|
105
|
+
updates.sessionToken = sessionToken;
|
|
106
|
+
updates.refreshToken = refreshToken;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
await updateSession(updates, true);
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const { messages, canSessionBeElevated } = require('@abtnode/auth/lib/auth');
|
|
2
|
+
const { authenticateByVc, getVerifyAccessClaims } = require('@abtnode/auth/lib/server');
|
|
3
|
+
const { ROLES } = require('@abtnode/constant');
|
|
4
|
+
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
5
|
+
const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
|
|
6
|
+
|
|
7
|
+
const { createTokenFn, getDidConnectVersion } = require('../../../util');
|
|
8
|
+
const { PASSPORT_VC_TYPES } = require('../../../libs/auth/utils');
|
|
9
|
+
const { getTrustedIssuers } = require('../../../util/blocklet-utils');
|
|
10
|
+
|
|
11
|
+
const allowedRoles = [ROLES.OWNER, ROLES.ADMIN, ROLES.MEMBER];
|
|
12
|
+
|
|
13
|
+
// eslint-disable-next-line no-unused-vars
|
|
14
|
+
module.exports = function createRoutes(node, authenticator, createSessionToken) {
|
|
15
|
+
return {
|
|
16
|
+
action: 'verify-elevated',
|
|
17
|
+
onConnect: async ({ request, userDid, extraParams: { locale, connectedDid } }) => {
|
|
18
|
+
if (userDid && connectedDid && userDid !== connectedDid) {
|
|
19
|
+
throw new Error(messages.userMismatch[locale]);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const [blocklet, info] = await Promise.all([request.getBlocklet(), node.getNodeInfo()]);
|
|
23
|
+
if (!info.enableSessionHardening) {
|
|
24
|
+
throw new Error(messages.notEnabled[locale]);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const user = await node.getUser({ teamDid: blocklet.appPid, user: { did: userDid } });
|
|
28
|
+
if (!user) {
|
|
29
|
+
throw new Error(messages.notAllowed[locale]);
|
|
30
|
+
}
|
|
31
|
+
if (!user.approved) {
|
|
32
|
+
throw new Error(messages.notAuthorized[locale]);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
36
|
+
return {
|
|
37
|
+
verifiableCredential: getVerifyAccessClaims({
|
|
38
|
+
node,
|
|
39
|
+
passports: user.passports,
|
|
40
|
+
roles: allowedRoles,
|
|
41
|
+
types: PASSPORT_VC_TYPES,
|
|
42
|
+
source: 'blocklet',
|
|
43
|
+
trustedIssuers: await getTrustedIssuers(blocklet, { sourceAppPid }),
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
onAuth: async ({ request, claims, challenge, userDid, updateSession, extraParams }) => {
|
|
49
|
+
const { locale } = extraParams;
|
|
50
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
51
|
+
const [blocklet, blockletInfo, info] = await Promise.all([
|
|
52
|
+
request.getBlocklet(),
|
|
53
|
+
request.getBlockletInfo(),
|
|
54
|
+
node.getNodeInfo(),
|
|
55
|
+
]);
|
|
56
|
+
if (!info.enableSessionHardening) {
|
|
57
|
+
throw new Error(messages.notEnabled[locale]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const { role, user, passport } = await authenticateByVc({
|
|
61
|
+
node,
|
|
62
|
+
locale,
|
|
63
|
+
teamDid: blocklet.appPid,
|
|
64
|
+
userDid,
|
|
65
|
+
claims,
|
|
66
|
+
challenge,
|
|
67
|
+
types: PASSPORT_VC_TYPES,
|
|
68
|
+
trustedIssuers: await getTrustedIssuers(blocklet, { sourceAppPid }),
|
|
69
|
+
});
|
|
70
|
+
if (!allowedRoles.includes(role)) {
|
|
71
|
+
throw new Error(messages.notAllowed[locale]);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const createToken = createTokenFn(createSessionToken);
|
|
75
|
+
const sessionConfig = blocklet.settings?.session || {};
|
|
76
|
+
|
|
77
|
+
const { sessionToken, refreshToken } = createToken(
|
|
78
|
+
userDid,
|
|
79
|
+
{
|
|
80
|
+
secret: blockletInfo.secret,
|
|
81
|
+
passport,
|
|
82
|
+
role,
|
|
83
|
+
fullName: user.fullName,
|
|
84
|
+
provider: LOGIN_PROVIDER.WALLET,
|
|
85
|
+
walletOS: request.context.didwallet.os,
|
|
86
|
+
emailVerified: user.emailVerified,
|
|
87
|
+
phoneVerified: user.phoneVerified,
|
|
88
|
+
elevated: canSessionBeElevated(role, info),
|
|
89
|
+
},
|
|
90
|
+
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
await updateSession({ sessionToken, refreshToken }, true);
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
};
|
|
@@ -32,6 +32,8 @@ const createMigrateToStructV2Routes = require('./connect/migrate-app-to-struct-v
|
|
|
32
32
|
const createTransferAppOwnerRoutes = require('./connect/transfer-app-owner');
|
|
33
33
|
const createIssueKycAuth = require('./connect/issue-kyc');
|
|
34
34
|
const createUpdateKycAuth = require('./connect/update-kyc');
|
|
35
|
+
const createVerifyElevatedAuth = require('./connect/verify-elevated');
|
|
36
|
+
const createVerifyDestroyAuth = require('./connect/verify-destroy');
|
|
35
37
|
const createReceiveTransferAppOwnerRoutes = require('./connect/receive-transfer-app-owner');
|
|
36
38
|
const createSessionRoutes = require('./session');
|
|
37
39
|
const createPassportRoutes = require('./passport');
|
|
@@ -240,6 +242,8 @@ const init = ({ node, options }) => {
|
|
|
240
242
|
handler.attach(Object.assign({ app }, createCheckHasProjectIdAuth(node, options, createSessionToken)));
|
|
241
243
|
handler.attach(Object.assign({ app }, createIssueKycAuth(node, authenticator, createSessionToken)));
|
|
242
244
|
handler.attach(Object.assign({ app }, createUpdateKycAuth(node, authenticator, createSessionToken)));
|
|
245
|
+
handler.attach(Object.assign({ app }, createVerifyElevatedAuth(node, authenticator, createSessionToken)));
|
|
246
|
+
handler.attach(Object.assign({ app }, createVerifyDestroyAuth(node, authenticator, createSessionToken)));
|
|
243
247
|
});
|
|
244
248
|
};
|
|
245
249
|
|
|
@@ -182,7 +182,7 @@ module.exports = ({ node, req, options }) => {
|
|
|
182
182
|
await req.ensureUser({ token });
|
|
183
183
|
|
|
184
184
|
if (req.user) {
|
|
185
|
-
res.cookie('login_token', token, { maxAge:
|
|
185
|
+
res.cookie('login_token', token, { maxAge: 60 * 60 * 1000 });
|
|
186
186
|
}
|
|
187
187
|
};
|
|
188
188
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a2 as a,a3 as r,j as t}from"./index-
|
|
1
|
+
import{a2 as a,a3 as r,j as t}from"./index-CqThjKMA.js";var e={},u=r;Object.defineProperty(e,"__esModule",{value:!0});var d=e.default=void 0,v=u(a()),o=t;d=e.default=(0,v.default)((0,o.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z"}),"Add");export{d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aK as w,aL as T,az as c,j as e,aM as d,ao as H,aN as g,cj as y,ck as I,aQ as n,r as _,aO as U,aP as F,aI as V,aS as Z,aT as D}from"./index-
|
|
1
|
+
import{aK as w,aL as T,az as c,j as e,aM as d,ao as H,aN as g,cj as y,ck as I,aQ as n,r as _,aO as U,aP as F,aI as V,aS as Z,aT as D}from"./index-CqThjKMA.js";import{u as M}from"./useSlot-BcsOw05W.js";function K(o){return T("MuiAlert",o)}const S=w("MuiAlert",["root","action","icon","message","filled","colorSuccess","colorInfo","colorWarning","colorError","filledSuccess","filledInfo","filledWarning","filledError","outlined","outlinedSuccess","outlinedInfo","outlinedWarning","outlinedError","standard","standardSuccess","standardInfo","standardWarning","standardError"]),Q=c(e.jsx("path",{d:"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z"}),"SuccessOutlined"),q=c(e.jsx("path",{d:"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z"}),"ReportProblemOutlined"),G=c(e.jsx("path",{d:"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"ErrorOutline"),J=c(e.jsx("path",{d:"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z"}),"InfoOutlined"),X=c(e.jsx("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close"),Y=["action","children","className","closeText","color","components","componentsProps","icon","iconMapping","onClose","role","severity","slotProps","slots","variant"],oo=o=>{const{variant:s,color:r,severity:t,classes:l}=o,u={root:["root",`color${g(r||t)}`,`${s}${g(r||t)}`,`${s}`],icon:["icon"],message:["message"],action:["action"]};return D(u,K,l)},to=d(H,{name:"MuiAlert",slot:"Root",overridesResolver:(o,s)=>{const{ownerState:r}=o;return[s.root,s[r.variant],s[`${r.variant}${g(r.color||r.severity)}`]]}})(({theme:o})=>{const s=o.palette.mode==="light"?y:I,r=o.palette.mode==="light"?I:y;return n({},o.typography.body2,{backgroundColor:"transparent",display:"flex",padding:"6px 16px",variants:[...Object.entries(o.palette).filter(([,t])=>t.main&&t.light).map(([t])=>({props:{colorSeverity:t,variant:"standard"},style:{color:o.vars?o.vars.palette.Alert[`${t}Color`]:s(o.palette[t].light,.6),backgroundColor:o.vars?o.vars.palette.Alert[`${t}StandardBg`]:r(o.palette[t].light,.9),[`& .${S.icon}`]:o.vars?{color:o.vars.palette.Alert[`${t}IconColor`]}:{color:o.palette[t].main}}})),...Object.entries(o.palette).filter(([,t])=>t.main&&t.light).map(([t])=>({props:{colorSeverity:t,variant:"outlined"},style:{color:o.vars?o.vars.palette.Alert[`${t}Color`]:s(o.palette[t].light,.6),border:`1px solid ${(o.vars||o).palette[t].light}`,[`& .${S.icon}`]:o.vars?{color:o.vars.palette.Alert[`${t}IconColor`]}:{color:o.palette[t].main}}})),...Object.entries(o.palette).filter(([,t])=>t.main&&t.dark).map(([t])=>({props:{colorSeverity:t,variant:"filled"},style:n({fontWeight:o.typography.fontWeightMedium},o.vars?{color:o.vars.palette.Alert[`${t}FilledColor`],backgroundColor:o.vars.palette.Alert[`${t}FilledBg`]}:{backgroundColor:o.palette.mode==="dark"?o.palette[t].dark:o.palette[t].main,color:o.palette.getContrastText(o.palette[t].main)})}))]})}),so=d("div",{name:"MuiAlert",slot:"Icon",overridesResolver:(o,s)=>s.icon})({marginRight:12,padding:"7px 0",display:"flex",fontSize:22,opacity:.9}),eo=d("div",{name:"MuiAlert",slot:"Message",overridesResolver:(o,s)=>s.message})({padding:"8px 0",minWidth:0,overflow:"auto"}),j=d("div",{name:"MuiAlert",slot:"Action",overridesResolver:(o,s)=>s.action})({display:"flex",alignItems:"flex-start",padding:"4px 0 0 16px",marginLeft:"auto",marginRight:-8}),z={success:e.jsx(Q,{fontSize:"inherit"}),warning:e.jsx(q,{fontSize:"inherit"}),error:e.jsx(G,{fontSize:"inherit"}),info:e.jsx(J,{fontSize:"inherit"})},no=_.forwardRef(function(s,r){const t=U({props:s,name:"MuiAlert"}),{action:l,children:u,className:$,closeText:v="Close",color:f,components:x={},componentsProps:L={},icon:C,iconMapping:P=z,onClose:A,role:b="alert",severity:p="success",slotProps:h={},slots:O={},variant:R="standard"}=t,k=F(t,Y),a=n({},t,{color:f,severity:p,variant:R,colorSeverity:f||p}),i=oo(a),m={slots:n({closeButton:x.CloseButton,closeIcon:x.CloseIcon},O),slotProps:n({},L,h)},[B,E]=M("closeButton",{elementType:V,externalForwardedProps:m,ownerState:a}),[N,W]=M("closeIcon",{elementType:X,externalForwardedProps:m,ownerState:a});return e.jsxs(to,n({role:b,elevation:0,ownerState:a,className:Z(i.root,$),ref:r},k,{children:[C!==!1?e.jsx(so,{ownerState:a,className:i.icon,children:C||P[p]||z[p]}):null,e.jsx(eo,{ownerState:a,className:i.message,children:u}),l!=null?e.jsx(j,{ownerState:a,className:i.action,children:l}):null,l==null&&A?e.jsx(j,{ownerState:a,className:i.action,children:e.jsx(B,n({size:"small","aria-label":v,title:v,color:"inherit",onClick:A},E,{children:e.jsx(N,n({fontSize:"small"},W))}))}):null]}))});export{no as A,X as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a2 as r,a3 as a,j as t}from"./index-
|
|
1
|
+
import{a2 as r,a3 as a,j as t}from"./index-CqThjKMA.js";var e={},o=a;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(r()),p=t;u=e.default=(0,i.default)((0,p.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");export{u as d};
|