@abtnode/blocklet-services 1.16.37-beta-20250102-115729-ae7f327e → 1.16.37-beta-20250106-134442-ea92021c
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/LICENSE +1 -1
- package/api/index.js +1 -0
- package/api/libs/auth/utils.js +33 -31
- package/api/libs/connect/session.js +1 -1
- package/api/routes/blocklet.js +1 -1
- package/api/routes/oauth.js +21 -111
- package/api/routes/user.js +9 -25
- package/api/services/auth/connect/receive-transfer-app-owner.js +1 -2
- package/api/services/auth/connect/setup.js +7 -2
- package/api/services/auth/connect/verify-destroy.js +3 -16
- package/api/services/auth/index.js +4 -0
- package/api/services/auth/passkey.js +31 -0
- package/api/services/auth/passport.js +2 -2
- package/api/services/notification/index.js +10 -9
- package/api/socket/channel/did.js +4 -3
- package/api/socket/util.js +1 -1
- package/api/util/attach-shared-utils.js +5 -4
- package/api/util/index.js +5 -0
- package/dist/assets/Add-BWCYHsqO.js +1 -0
- package/dist/assets/ArrowDropDown-BpEWICfl.js +1 -0
- package/dist/assets/CheckCircle-CwD9Ke3p.js +1 -0
- package/dist/assets/ChevronLeft-DSkEbRl3.js +1 -0
- package/dist/assets/ChevronRight-D0L8yvDK.js +1 -0
- package/dist/assets/DeleteOutline-CXidpj4T.js +1 -0
- package/dist/assets/Done-C64D3evS.js +1 -0
- package/dist/assets/Download-Dw32CPvU.js +1 -0
- package/dist/assets/EditIcon-tG6wkTV8.js +1 -0
- package/dist/assets/Error-DJ3gIUKv.js +1 -0
- package/dist/assets/{Google-BuyGXo_n.js → Google-xPNZ3SW6.js} +3 -3
- package/dist/assets/InfoOutlined-C68E276M.js +1 -0
- package/dist/assets/Launch-BGwEi50t.js +1 -0
- package/dist/assets/LaunchOutlined-Ca3gdurT.js +1 -0
- package/dist/assets/LockIcon-DkGeStY0.js +1 -0
- package/dist/assets/Loop-BGNTppkv.js +1 -0
- package/dist/assets/MoreHoriz-ByYwcz4x.js +1 -0
- package/dist/assets/PlayArrow-D2eSJrmH.js +1 -0
- package/dist/assets/QuestionMarkCircle-CRU8b9ID.js +1 -0
- package/dist/assets/ServerLogo-2zkqpStV.js +1 -0
- package/dist/assets/ViewList-3IpnvMH9.js +1 -0
- package/dist/assets/_createAggregator-CTc4wR3U.js +1 -0
- package/dist/assets/abtwallet-o1JAGJkW.png +0 -0
- package/dist/assets/access-control-Cc5_tP4v.js +13 -0
- package/dist/assets/actions-DfuRxUKW.js +1 -0
- package/dist/assets/add-component-core-CMZl0Aw9.js +716 -0
- package/dist/assets/add-resource-DNWGI5Hi.js +1 -0
- package/dist/assets/addon-VajLOBqQ.js +31 -0
- package/dist/assets/analytics-DjT9BDYe.js +47 -0
- package/dist/assets/android-Xe96zWxX.png +0 -0
- package/dist/assets/api-C7qcY4XU.js +1 -0
- package/dist/assets/audit-logs-DXIS1eea.js +58 -0
- package/dist/assets/base32-DpVKJ4W_.js +1 -0
- package/dist/assets/branding-DP6PFXBo.js +40 -0
- package/dist/assets/bundle-avatar-CzB889SV.js +1 -0
- package/dist/assets/button-D3f-aYWj.js +1 -0
- package/dist/assets/click-to-copy-oC180fIr.js +1 -0
- package/dist/assets/complete-Ck7c7oAE.js +45 -0
- package/dist/assets/{component-CkbTdshc.js → component-BZTnOYBQ.js} +89 -89
- package/dist/assets/config-B592SaBl.js +32 -0
- package/dist/assets/config-C-7B0ly9.js +1 -0
- package/dist/assets/{config-navigation-CghjCkdz.js → config-navigation-BVFjfkWf.js} +6 -6
- package/dist/assets/config-space-D5tEidjS.js +1 -0
- package/dist/assets/confirm-vgd_1-1V.js +7 -0
- package/dist/assets/connect-LMZbP6sp.js +5 -0
- package/dist/assets/connect-gaOu1HRw.js +1 -0
- package/dist/assets/connect-to-D-QS37Vn.js +1 -0
- package/dist/assets/{content-layout-ANaBTlDS.js → content-layout-D25Q_vVO.js} +1 -1
- package/dist/assets/dashboard-BgW0SYmh.js +86 -0
- package/dist/assets/did-address-DAnP601f.js +1 -0
- package/dist/assets/domain-b6cmz4S4.js +9 -0
- package/dist/assets/domain-list-DLXeNUEV.js +15 -0
- package/dist/assets/email-KHVOUytb.js +18 -0
- package/dist/assets/exchange-passport-Ah6Oc4Hf.js +1 -0
- package/dist/assets/form-text-input-f773Hgdy.js +11 -0
- package/dist/assets/{format-error-D2V1IlSA.js → format-error-C0Ke3VXF.js} +2 -2
- package/dist/assets/fuel-D2M3FXAV.js +32 -0
- package/dist/assets/fullpage-Dpka7-iX.js +1 -0
- package/dist/assets/get-safe-url-6EgCrTPK.js +1 -0
- package/dist/assets/get-safe-url-BBLBic7f.js +1 -0
- package/dist/assets/home-DYkbr7a5.js +1 -0
- package/dist/assets/iframe-Dh23G9Wt.js +1 -0
- package/dist/assets/index-8-kTmhK2.js +4 -0
- package/dist/assets/index-BCJq3WNv.js +5 -0
- package/dist/assets/{index-BSHm8cVk.js → index-BEcpBIIf.js} +2 -2
- package/dist/assets/index-BUoBUFo9.js +243 -0
- package/dist/assets/index-B_nW8jWg.js +1 -0
- package/dist/assets/index-BodKukbo.js +11 -0
- package/dist/assets/index-BxUQG_ZS.js +291 -0
- package/dist/assets/{index-BZXNfshl.js → index-C6UmPiZc.js} +2 -2
- package/dist/assets/index-CDceAH6O.js +129 -0
- package/dist/assets/index-CeXw2vcO.js +1 -0
- package/dist/assets/index-CgyFjfCK.js +1 -0
- package/dist/assets/index-Cp3ZCh7o.js +1 -0
- package/dist/assets/{index-CUC8utCb.js → index-CqdCpHy-.js} +1 -1
- package/dist/assets/index-Cy5HwFoQ.js +221 -0
- package/dist/assets/index-DPVdZRyD.js +134 -0
- package/dist/assets/index-DTOMtrZi.js +144 -0
- package/dist/assets/index-DVYdq7IA.js +1 -0
- package/dist/assets/{index-DUI49Z8_.js → index-DoZ2YM4T.js} +1 -1
- package/dist/assets/{index-BDf4kEgE.js → index-YMnfgOF9.js} +2 -2
- package/dist/assets/index-_s_fLZnI.js +104 -0
- package/dist/assets/index-f88YxSnq.js +1 -0
- package/dist/assets/invitation-CxB-x_xn.js +176 -0
- package/dist/assets/invite-DBeeLtl3.js +5 -0
- package/dist/assets/ios-CBDmY-ic.png +0 -0
- package/dist/assets/isEmail-BWNRBSAy.js +1 -0
- package/dist/assets/issue-passport-DDvmexL3.js +1 -0
- package/dist/assets/item-6MGDbiPN.js +1 -0
- package/dist/assets/{launch-result-message-KFpSWl3O.js → launch-result-message-CDh6C7yN.js} +2 -2
- package/dist/assets/layout-CNG79gdU.js +29 -0
- package/dist/assets/list-header-CWds6opx.js +57 -0
- package/dist/assets/localization--GnHWBZu.js +1 -0
- package/dist/assets/{log-Bq3RbJRi.js → log-BeVAiHHb.js} +9 -9
- package/dist/assets/login-A-Fb7Rrc.js +1 -0
- package/dist/assets/login-oauth-callback-CBpbmy7Y.js +1 -0
- package/dist/assets/logo-uploader-CC0caghQ.js +133 -0
- package/dist/assets/lost-passport-HU2qWAuA.js +168 -0
- package/dist/assets/{lottie-react.esm-C3V68SQT.js → lottie-react.esm-CHpXrEmm.js} +1 -1
- package/dist/assets/open-window-BvQJJhL_.js +1 -0
- package/dist/assets/overview-DIREa8hS.js +12 -0
- package/dist/assets/{page-header-DjhLNLyP.js → page-header-1PJsLh7u.js} +1 -1
- package/dist/assets/permission-BBg-Yh9T.js +1 -0
- package/dist/assets/preferences-CB5uOidv.js +1 -0
- package/dist/assets/publish-resource-CmcZx-V_.js +1 -0
- package/dist/assets/raf-schd.esm-Cxhj8umC.js +1 -0
- package/dist/assets/{react-beautiful-dnd.esm-X7VVnJcV.js → react-beautiful-dnd.esm-CCGMJ6tB.js} +4 -4
- package/dist/assets/relative-time-gSR-I79i.js +1 -0
- package/dist/assets/sdk-BKgHFqrA.js +1 -0
- package/dist/assets/session-DjolhruE.js +1 -0
- package/dist/assets/setup-IWaLQEGW.js +19 -0
- package/dist/assets/shorten-label-cn1YaOcx.js +1 -0
- package/dist/assets/simple-select-C05FGhNJ.js +1 -0
- package/dist/assets/slicedToArray-DuBRe18s.js +2 -0
- package/dist/assets/start-DpxK1ev8.js +187 -0
- package/dist/assets/step-actions-DcWKBXOu.js +31 -0
- package/dist/assets/studio-B_CDfqTQ.js +6 -0
- package/dist/assets/switch-control-VwZyV9qS.js +13 -0
- package/dist/assets/toUpper-CD1KHWl4.js +1 -0
- package/dist/assets/transfer-BjIffkrb.js +16 -0
- package/dist/assets/unsubscribe-BdE7c0PR.js +1 -0
- package/dist/assets/use-mobile-CRGhfnSw.js +1 -0
- package/dist/assets/useAsync-Barwm_ml.js +1 -0
- package/dist/assets/useAsyncRetry-VpCDo2sM.js +7 -0
- package/dist/assets/useLocalStorage-DTPZT3h6.js +1 -0
- package/dist/assets/useSetState-Crt4S51m.js +1 -0
- package/dist/assets/user-center-DNT8JJcs.js +202 -0
- package/dist/assets/util-D-lyK2FV.js +1 -0
- package/dist/assets/{index-B4oT57Ax.css → vendor-arcblock-DhgPdlEj.css} +1 -1
- package/dist/assets/vendor-arcblock-DrV4Yh4h.js +3503 -0
- package/dist/assets/vendor-hooks-DHHsWSqV.js +7 -0
- package/dist/assets/vendor-mui-core-BHQ3rDZc.js +267 -0
- package/dist/assets/vendor-mui-x-CYVoSAR5.js +6 -0
- package/dist/assets/vendor-react-D-afvo_7.js +61 -0
- package/dist/assets/vendor-utils-CV7RLr7b.js +11 -0
- package/dist/assets/wrap-locale-Brk8trIp.js +1 -0
- package/dist/index.html +7 -2
- package/dist/service-worker.js +1 -1
- package/package.json +41 -41
- package/dist/assets/Add-DoWwr2Ul.js +0 -1
- package/dist/assets/Alert-W6ZoTZ3g.js +0 -1
- package/dist/assets/ArrowDropDown-DQkl2nkF.js +0 -1
- package/dist/assets/Autocomplete-D-KX7tlO.js +0 -1
- package/dist/assets/Avatar-hKVZimRi.js +0 -1
- package/dist/assets/ButtonGroup-3SFP3-pq.js +0 -1
- package/dist/assets/CSSTransition-VHrj2IrJ.js +0 -1
- package/dist/assets/CheckCircle-BDJMl1SC.js +0 -1
- package/dist/assets/ChevronLeft-B-NWC0xt.js +0 -1
- package/dist/assets/ChevronRight-Ddp2NEiN.js +0 -1
- package/dist/assets/Clear-De-d2EF8.js +0 -1
- package/dist/assets/CloseOutlined-BctPwMsA.js +0 -1
- package/dist/assets/Delete-3M81lrPw.js +0 -1
- package/dist/assets/DeleteOutline-ANDKP8NK.js +0 -1
- package/dist/assets/DialogContentText-Dn5BO5iN.js +0 -1
- package/dist/assets/Done-Bhem2M06.js +0 -1
- package/dist/assets/Download-BPmZzvvE.js +0 -1
- package/dist/assets/EditIcon-D33iMvFv.js +0 -1
- package/dist/assets/Error-BCA7Sqlp.js +0 -1
- package/dist/assets/ExpandMore-5qu10-VQ.js +0 -1
- package/dist/assets/FormControl-OqvyHuZv.js +0 -1
- package/dist/assets/FormControlLabel-DOOEGsWf.js +0 -1
- package/dist/assets/FormGroup-CMuwdC56.js +0 -1
- package/dist/assets/Grid-DtUfQ3Vj.js +0 -1
- package/dist/assets/HelpOutline-Bmrs_0Er.js +0 -1
- package/dist/assets/Hidden-CUtsI_97.js +0 -1
- package/dist/assets/InfoOutlined-Cs_orBaQ.js +0 -1
- package/dist/assets/InputAdornment-BEqTI4V4.js +0 -1
- package/dist/assets/LastPage-Bb4DD2DL.js +0 -1
- package/dist/assets/Launch-DHVfRKfR.js +0 -1
- package/dist/assets/LaunchOutlined-Bb4OL7ma.js +0 -1
- package/dist/assets/Link-DVsnc_O1.js +0 -1
- package/dist/assets/ListItemButton-ChDufQ0D.js +0 -1
- package/dist/assets/ListSubheader-BH5XlJEK.js +0 -1
- package/dist/assets/LoadingButton-D11bbs7Z.js +0 -1
- package/dist/assets/LockIcon-Dxf0oSGl.js +0 -1
- package/dist/assets/Loop-CYBwfB9B.js +0 -1
- package/dist/assets/Menu-BbykPAXR.js +0 -1
- package/dist/assets/MoreHoriz-XHayrhxr.js +0 -1
- package/dist/assets/MoreVert-BO-o5JnK.js +0 -1
- package/dist/assets/OpenInNew-__JhP3_b.js +0 -1
- package/dist/assets/OutlinedInput-DYGzdilY.js +0 -2
- package/dist/assets/PlayArrow-l1xyNa8v.js +0 -1
- package/dist/assets/QuestionMarkCircle-CgS1lsZu.js +0 -1
- package/dist/assets/RadioGroup-D2BrBv0W.js +0 -1
- package/dist/assets/Search-C-_AhyGc.js +0 -1
- package/dist/assets/Select-DdaHDvk1.js +0 -1
- package/dist/assets/ServerLogo-3sWhasNo.js +0 -1
- package/dist/assets/Stepper-AlrTJRkZ.js +0 -1
- package/dist/assets/TextField-F_rhcivt.js +0 -1
- package/dist/assets/Toolbar-NIQ6PygD.js +0 -1
- package/dist/assets/ViewColumn-hY5ABDIE.js +0 -1
- package/dist/assets/ViewList-DTOCqN2q.js +0 -1
- package/dist/assets/_createAggregator-C_N0DCeP.js +0 -1
- package/dist/assets/access-control-4hTaCeVw.js +0 -13
- package/dist/assets/actions-x_23wAjB.js +0 -1
- package/dist/assets/add-component-core-ChNA1r63.js +0 -804
- package/dist/assets/add-resource-Cn0pNFEC.js +0 -1
- package/dist/assets/addon-Buee4n4q.js +0 -31
- package/dist/assets/analytics-BKlawrzh.js +0 -52
- package/dist/assets/api-CSS3RGWL.js +0 -1
- package/dist/assets/audit-logs-CZXS4N0R.js +0 -59
- package/dist/assets/base32-CxcE4z8e.js +0 -1
- package/dist/assets/branding-C1OjV7l2.js +0 -40
- package/dist/assets/bundle-avatar-O5LAhLys.js +0 -1
- package/dist/assets/button-Bk5F6Z8J.js +0 -1
- package/dist/assets/click-to-copy-BBJwL23k.js +0 -1
- package/dist/assets/complete-zUtTPZWF.js +0 -45
- package/dist/assets/config-B1LTpJFT.js +0 -32
- package/dist/assets/config-DS2yUOy5.js +0 -1
- package/dist/assets/config-space-Bw1lK4NV.js +0 -1
- package/dist/assets/confirm-ULP5BJCc.js +0 -7
- package/dist/assets/connect-B7eXSDIr.js +0 -1
- package/dist/assets/connect-iIwcK5jn.js +0 -5
- package/dist/assets/connect-to-AXzvKU6L.js +0 -29
- package/dist/assets/dashboard-DOZ7LRQI.js +0 -122
- package/dist/assets/deprecate-Bo7yGTJO.js +0 -1
- package/dist/assets/did-address-DdPH8Oii.js +0 -1
- package/dist/assets/domain-BPKUv94X.js +0 -9
- package/dist/assets/domain-list-Cc3vVMhj.js +0 -15
- package/dist/assets/email-RMPOCYzR.js +0 -18
- package/dist/assets/emotion-cache.browser.esm-XJ-XPpML.js +0 -1
- package/dist/assets/exchange-passport-BXag-hFz.js +0 -1
- package/dist/assets/fallback-C1u7ttF8.js +0 -1
- package/dist/assets/form-text-input-CihqUkoN.js +0 -11
- package/dist/assets/fuel-DYi3vbS8.js +0 -32
- package/dist/assets/fullpage-DRR65bg5.js +0 -1
- package/dist/assets/get-safe-url-BRitJXVO.js +0 -1
- package/dist/assets/get-safe-url-V1nDCXmu.js +0 -1
- package/dist/assets/home-DvWIY2vO.js +0 -1
- package/dist/assets/iframe-BgHkFTAs.js +0 -1
- package/dist/assets/index-2qT6Nx8y.js +0 -1
- package/dist/assets/index-6R7fU17e.js +0 -1
- package/dist/assets/index-B0lK7ost.js +0 -16
- package/dist/assets/index-B5C90-kX.js +0 -1
- package/dist/assets/index-BFWnlhoS.js +0 -544
- package/dist/assets/index-BHTgfI3J.js +0 -1413
- package/dist/assets/index-Bk2jPh4B.js +0 -1
- package/dist/assets/index-Bof7se0O.js +0 -129
- package/dist/assets/index-BrmO4-ZK.js +0 -5
- package/dist/assets/index-BuDChzu6.js +0 -1
- package/dist/assets/index-Bu_gkGlR.js +0 -12
- package/dist/assets/index-C16yDs-W.js +0 -13
- package/dist/assets/index-CORQxWB5.js +0 -243
- package/dist/assets/index-Cv5S4z7J.js +0 -1
- package/dist/assets/index-CyUo44rA.js +0 -102
- package/dist/assets/index-D-H65z2j.js +0 -11
- package/dist/assets/index-D2DRxJlW.js +0 -1
- package/dist/assets/index-DC_6kAED.js +0 -721
- package/dist/assets/index-DF3kd1Sh.js +0 -1
- package/dist/assets/index-DesHTrdZ.js +0 -134
- package/dist/assets/index-Dz6UVrgJ.js +0 -291
- package/dist/assets/index-Q-uhDp8D.js +0 -221
- package/dist/assets/index-TosM5wPB.js +0 -1
- package/dist/assets/index-Tzm7gzea.js +0 -4
- package/dist/assets/index-cTQLMlpc.js +0 -11
- package/dist/assets/index-fZw7Vpgz.js +0 -1
- package/dist/assets/index-foZCwT8M.css +0 -1
- package/dist/assets/index-hcmgeyWk.js +0 -1
- package/dist/assets/index-uWCiD0vp.js +0 -316
- package/dist/assets/index-vYhCTuA2.js +0 -1
- package/dist/assets/index-yHuDMvJG.js +0 -340
- package/dist/assets/invitation-CEnhUxqR.js +0 -176
- package/dist/assets/invite-Djgak5cM.js +0 -5
- package/dist/assets/isEmail-CVqVoLMc.js +0 -1
- package/dist/assets/issue-passport-OTW1CE4-.js +0 -1
- package/dist/assets/item-DuOVC0zG.js +0 -1
- package/dist/assets/jss-plugin-props-sort.esm-C1sdxDXq.js +0 -14
- package/dist/assets/layout-qVa0Azu2.js +0 -29
- package/dist/assets/list-header-BEzk1po8.js +0 -57
- package/dist/assets/localization-CSEYhUZ2.js +0 -1
- package/dist/assets/login-C3EevTE0.js +0 -1
- package/dist/assets/login-oauth-callback-AOtjEuqk.js +0 -1
- package/dist/assets/logo-uploader-BFKU96PE.js +0 -133
- package/dist/assets/lost-passport-Iq98nbcM.js +0 -168
- package/dist/assets/open-window-lc2oKdlW.js +0 -1
- package/dist/assets/overview-DzTYyyOK.js +0 -12
- package/dist/assets/permission-BZvOkDQF.js +0 -1
- package/dist/assets/preferences-C93eFPAg.js +0 -1
- package/dist/assets/publish-resource-X3eI0niL.js +0 -1
- package/dist/assets/purify.es-DutPtr9A.js +0 -2
- package/dist/assets/raf-schd.esm-Bwmb5y9p.js +0 -1
- package/dist/assets/refType-CEDeXbgm.js +0 -1
- package/dist/assets/relative-time-CTnNqlzz.js +0 -1
- package/dist/assets/resource-dialog-BgQL1Bby.js +0 -299
- package/dist/assets/sdk-DOHTCfK1.js +0 -1
- package/dist/assets/selector-C2hu0WUk.js +0 -48
- package/dist/assets/session-B2D3crc6.js +0 -1
- package/dist/assets/setup-CIZIzYOP.js +0 -19
- package/dist/assets/shorten-label-CfxSH4kN.js +0 -1
- package/dist/assets/simple-select-BP_h5NOM.js +0 -1
- package/dist/assets/slicedToArray-WKq_kWhB.js +0 -2
- package/dist/assets/start-Ceyr0Slk.js +0 -187
- package/dist/assets/step-actions-BKTyBqOr.js +0 -31
- package/dist/assets/studio-wrdTUHb8.js +0 -6
- package/dist/assets/switch-control-Bhky7auW.js +0 -13
- package/dist/assets/toPropertyKey-PLuKRk1e.js +0 -1
- package/dist/assets/toUpper-zlUBufNw.js +0 -1
- package/dist/assets/transfer-Bs21EL8V.js +0 -16
- package/dist/assets/trim-Ci8FKlWl.js +0 -1
- package/dist/assets/uniqBy-DX0iyhMx.js +0 -1
- package/dist/assets/unsubscribe-C74g_s8L.js +0 -1
- package/dist/assets/url-join-GUOMgSK4.js +0 -1
- package/dist/assets/use-mobile-C8gQQg5h.js +0 -1
- package/dist/assets/use-mobile-QzoRHUEw.js +0 -1
- package/dist/assets/useAsync-CA1s-Q3Q.js +0 -1
- package/dist/assets/useAsyncRetry-CC8wuBBZ.js +0 -7
- package/dist/assets/useFormControl--BH_DJ53.js +0 -1
- package/dist/assets/useLocalStorage-CvimZx-D.js +0 -1
- package/dist/assets/useSetState-BYl9GHuD.js +0 -1
- package/dist/assets/useSlot-B-WSi9Gx.js +0 -1
- package/dist/assets/useThemeProps-CKP9Y0ID.js +0 -1
- package/dist/assets/user-center-D4cWW8SV.js +0 -334
- package/dist/assets/util-DKzAB6dy.js +0 -1
- package/dist/assets/utils-DoM3o7-Q.js +0 -1
- package/dist/assets/visuallyHidden-Dan1xhjv.js +0 -1
- package/dist/assets/wrap-locale-CmUR3sB1.js +0 -1
package/LICENSE
CHANGED
package/api/index.js
CHANGED
|
@@ -416,6 +416,7 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
416
416
|
createConnectRelayRoutes.init(server, node, options, wsRouter);
|
|
417
417
|
authRoutes.attachDidAuthHandlers(server);
|
|
418
418
|
authRoutes.createPassportRoutes.init(server, node);
|
|
419
|
+
authRoutes.createPasskeyRoutes.init(server, node);
|
|
419
420
|
authRoutes.createCommonRoutes.init(server, node);
|
|
420
421
|
|
|
421
422
|
// API: gql
|
package/api/libs/auth/utils.js
CHANGED
|
@@ -33,38 +33,40 @@ async function transferPassport(fromUser, toUser, { req, teamDid, node, nodeInfo
|
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
const attachments =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const vc = createPassportVC(vcParams);
|
|
59
|
-
return {
|
|
60
|
-
type: 'vc',
|
|
61
|
-
data: {
|
|
62
|
-
credential: vc,
|
|
63
|
-
tag: x.name,
|
|
36
|
+
const attachments = await Promise.all(
|
|
37
|
+
waitPassportList.map(async (x) => {
|
|
38
|
+
const vcParams = {
|
|
39
|
+
issuerName,
|
|
40
|
+
issuerWallet,
|
|
41
|
+
ownerDid: toUser.did,
|
|
42
|
+
passport: { ...pick(x, ['name', 'title', 'specVersion']), endpoint: x.endpoint || blockletInfo.appUrl },
|
|
43
|
+
endpoint: getPassportStatusEndpoint({
|
|
44
|
+
baseUrl: x.endpoint || blockletInfo.appUrl,
|
|
45
|
+
userDid: toUser.did,
|
|
46
|
+
teamDid,
|
|
47
|
+
}),
|
|
48
|
+
ownerProfile: {
|
|
49
|
+
email: toUser.email,
|
|
50
|
+
fullName: toUser.fullName,
|
|
51
|
+
avatar: getUserAvatarUrl(x.endpoint || blockletInfo.appUrl, toUser.avatar),
|
|
52
|
+
},
|
|
53
|
+
preferredColor: passportColor,
|
|
54
|
+
types: teamDid === nodeInfo.did ? [VC_TYPE_NODE_PASSPORT] : x.types,
|
|
55
|
+
purpose: teamDid === nodeInfo.did || isEmpty(x.types) ? 'login' : 'verification',
|
|
64
56
|
display: x.display,
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const vc = await createPassportVC(vcParams);
|
|
60
|
+
return {
|
|
61
|
+
type: 'vc',
|
|
62
|
+
data: {
|
|
63
|
+
credential: vc,
|
|
64
|
+
tag: x.name,
|
|
65
|
+
display: x.display,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
})
|
|
69
|
+
);
|
|
68
70
|
const insertPassportList = attachments.map((item, index) => {
|
|
69
71
|
return {
|
|
70
72
|
...createUserPassport(item.data.credential, { role: item.data.tag, display: item.data.display }),
|
package/api/routes/blocklet.js
CHANGED
|
@@ -244,7 +244,7 @@ module.exports = {
|
|
|
244
244
|
const hasOwnerPassport = (user.passports || []).some((x) => x.name === role);
|
|
245
245
|
if (hasOwnerPassport === false) {
|
|
246
246
|
// create vc
|
|
247
|
-
const vc = createPassportVC({
|
|
247
|
+
const vc = await createPassportVC({
|
|
248
248
|
issuerName: name,
|
|
249
249
|
issuerWallet: wallet,
|
|
250
250
|
issuerAvatarUrl: getAppAvatarUrl(appUrl),
|
package/api/routes/oauth.js
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
const { handleInvitationReceive, getApplicationInfo } = require('@abtnode/auth/lib/auth');
|
|
2
|
-
const {
|
|
2
|
+
const { createPassportList, createPassportSwitcher } = require('@abtnode/auth/lib/oauth');
|
|
3
3
|
const {
|
|
4
4
|
WELLKNOWN_SERVICE_PATH_PREFIX,
|
|
5
5
|
PASSPORT_STATUS,
|
|
6
6
|
ROLES,
|
|
7
7
|
SECURITY_RULE_DEFAULT_ID,
|
|
8
8
|
} = require('@abtnode/constant');
|
|
9
|
-
const { extractUserAvatar, getUserAvatarUrl
|
|
9
|
+
const { extractUserAvatar, getUserAvatarUrl } = require('@abtnode/util/lib/user');
|
|
10
10
|
const { fromAppDid } = require('@arcblock/did-ext');
|
|
11
|
-
const { getBlockletAppIdList } = require('@blocklet/meta/lib/util');
|
|
12
|
-
const uniq = require('lodash/uniq');
|
|
13
11
|
const last = require('lodash/last');
|
|
14
12
|
const pick = require('lodash/pick');
|
|
15
13
|
const sortBy = require('lodash/sortBy');
|
|
16
14
|
const cloneDeep = require('lodash/cloneDeep');
|
|
17
15
|
const { joinURL } = require('ufo');
|
|
16
|
+
const { upsertToPassports } = require('@abtnode/auth/lib/passport');
|
|
18
17
|
const { getWalletDid, getConnectedAccounts, getSourceProvider } = require('@blocklet/meta/lib/did-utils');
|
|
19
18
|
const formatContext = require('@abtnode/util/lib/format-context');
|
|
20
19
|
const createTranslator = require('@abtnode/util/lib/translate');
|
|
21
20
|
const getRequestIP = require('@abtnode/util/lib/get-request-ip');
|
|
22
21
|
const CustomError = require('@abtnode/util/lib/custom-error');
|
|
23
22
|
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
24
|
-
const { getActivePassports } = require('@abtnode/util/lib/passport');
|
|
25
23
|
const { withHttps, withTrailingSlash } = require('ufo');
|
|
26
24
|
|
|
27
25
|
const logger = require('../libs/logger')('oauth');
|
|
@@ -768,67 +766,25 @@ async function unbind(req, node) {
|
|
|
768
766
|
}
|
|
769
767
|
|
|
770
768
|
module.exports = {
|
|
771
|
-
|
|
772
|
-
|
|
769
|
+
checkUser,
|
|
770
|
+
|
|
771
|
+
init(router, node, options) {
|
|
772
|
+
const { createSessionToken } = initJwt(node, options);
|
|
773
|
+
|
|
774
|
+
router.get(`${prefixApi}/configs`, async (req, res) => {
|
|
773
775
|
const blocklet = await req.getBlocklet();
|
|
774
776
|
const oauthConfig = blocklet?.settings?.oauth || {};
|
|
775
777
|
res.send(oauthConfig);
|
|
776
778
|
});
|
|
777
779
|
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
const issuerDidList = uniq([blockletWallet.address, ...getBlockletAppIdList(blockletInfo)]);
|
|
785
|
-
// NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
|
|
786
|
-
const user = await node.getUser({ teamDid, user: { did: userDid } });
|
|
787
|
-
let ownerAvatarUrl = getUserAvatarUrl(appUrl, user.avatar);
|
|
788
|
-
try {
|
|
789
|
-
// FIXME: @zhanghan 暂时将 imageFilter 等 queryString 参数移除
|
|
790
|
-
const ownerAvatarUrlInstance = new URL(ownerAvatarUrl);
|
|
791
|
-
ownerAvatarUrlInstance.search = '';
|
|
792
|
-
ownerAvatarUrl = ownerAvatarUrlInstance.href;
|
|
793
|
-
} catch {
|
|
794
|
-
/* empty */
|
|
795
|
-
}
|
|
796
|
-
let issuerAvatarUrl = getAppAvatarUrl(appUrl);
|
|
797
|
-
try {
|
|
798
|
-
// FIXME: @zhanghan 暂时将 imageFilter 等 queryString 参数移除
|
|
799
|
-
const issuerAvatarUrlInstance = new URL(issuerAvatarUrl);
|
|
800
|
-
issuerAvatarUrlInstance.search = '';
|
|
801
|
-
issuerAvatarUrl = issuerAvatarUrlInstance.href;
|
|
802
|
-
} catch {
|
|
803
|
-
/* empty */
|
|
804
|
-
}
|
|
780
|
+
router.get(`${prefixApi}/passports`, checkUser, createPassportList(node, 'service'));
|
|
781
|
+
router.post(
|
|
782
|
+
`${prefixApi}/switch`,
|
|
783
|
+
checkUser,
|
|
784
|
+
createPassportSwitcher(node, createTokenFn(createSessionToken), 'service')
|
|
785
|
+
);
|
|
805
786
|
|
|
806
|
-
|
|
807
|
-
const passportTypes = getActivePassports({ passports }, issuerDidList).map((x) => {
|
|
808
|
-
return {
|
|
809
|
-
...pick(x, ['id', 'name', 'title', 'role', 'scope', 'role']),
|
|
810
|
-
display:
|
|
811
|
-
x.scope === 'custom'
|
|
812
|
-
? x.display
|
|
813
|
-
: createPassportSvg({
|
|
814
|
-
scope: x.scope,
|
|
815
|
-
role: x.role,
|
|
816
|
-
title: x.scope === 'kyc' ? x.name : x.title,
|
|
817
|
-
issuer: x.issuer.name,
|
|
818
|
-
issuerDid: x.issuer.id,
|
|
819
|
-
issuerAvatarUrl,
|
|
820
|
-
ownerName: user?.fullName,
|
|
821
|
-
ownerDid: userDid,
|
|
822
|
-
ownerAvatarUrl,
|
|
823
|
-
isDataUrl: true,
|
|
824
|
-
preferredColor: passportColor || 'auto',
|
|
825
|
-
}),
|
|
826
|
-
};
|
|
827
|
-
});
|
|
828
|
-
res.send(passportTypes);
|
|
829
|
-
});
|
|
830
|
-
|
|
831
|
-
server.post(`${prefixApi}/bind`, checkUser, async (req, res) => {
|
|
787
|
+
router.post(`${prefixApi}/bind`, checkUser, async (req, res) => {
|
|
832
788
|
try {
|
|
833
789
|
await bind(req, node, options);
|
|
834
790
|
res.status(200).json({});
|
|
@@ -842,7 +798,7 @@ module.exports = {
|
|
|
842
798
|
}
|
|
843
799
|
});
|
|
844
800
|
|
|
845
|
-
|
|
801
|
+
router.post(`${prefixApi}/unbind`, checkUser, async (req, res) => {
|
|
846
802
|
try {
|
|
847
803
|
await unbind(req, node, options);
|
|
848
804
|
res.status(200).json({});
|
|
@@ -856,58 +812,12 @@ module.exports = {
|
|
|
856
812
|
}
|
|
857
813
|
});
|
|
858
814
|
|
|
859
|
-
server.post(`${prefixApi}/switch`, checkUser, async (req, res) => {
|
|
860
|
-
const { did: userDid, provider } = req.user;
|
|
861
|
-
const { passportId } = req.body;
|
|
862
|
-
const blocklet = await req.getBlocklet();
|
|
863
|
-
const { did: teamDid, secret } = await req.getBlockletInfo();
|
|
864
|
-
// NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
|
|
865
|
-
const user = await node.getUser({ teamDid, user: { did: userDid } });
|
|
866
|
-
const { passports = [] } = user || {};
|
|
867
|
-
const passport = passportId
|
|
868
|
-
? passports.find((item) => item.id === passportId)
|
|
869
|
-
: { name: 'Guest', role: 'guest', scope: 'passport' };
|
|
870
|
-
await node.createAuditLog(
|
|
871
|
-
{
|
|
872
|
-
action: 'switchPassport',
|
|
873
|
-
args: { teamDid, userDid, passport, provider: user?.sourceProvider },
|
|
874
|
-
context: formatContext(Object.assign(req, { user })),
|
|
875
|
-
result: user,
|
|
876
|
-
},
|
|
877
|
-
node
|
|
878
|
-
);
|
|
879
|
-
const { createSessionToken } = initJwt(node, options);
|
|
880
|
-
const createToken = createTokenFn(createSessionToken);
|
|
881
|
-
const sessionConfig = blocklet.settings?.session || {};
|
|
882
|
-
const { sessionToken, refreshToken } = createToken(
|
|
883
|
-
userDid,
|
|
884
|
-
{
|
|
885
|
-
secret,
|
|
886
|
-
passport,
|
|
887
|
-
role: passport.scope === 'passport' ? passport.role : ROLES.GUEST,
|
|
888
|
-
fullName: user?.fullName,
|
|
889
|
-
provider,
|
|
890
|
-
walletOS: 'web',
|
|
891
|
-
emailVerified: !!user?.emailVerified,
|
|
892
|
-
phoneVerified: !!user?.phoneVerified,
|
|
893
|
-
},
|
|
894
|
-
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
895
|
-
);
|
|
896
|
-
|
|
897
|
-
// for backward compatibility
|
|
898
|
-
if (!getDidConnectVersion(req)) {
|
|
899
|
-
res.status(200).send(sessionToken);
|
|
900
|
-
}
|
|
901
|
-
|
|
902
|
-
res.status(200).json({ sessionToken, refreshToken });
|
|
903
|
-
});
|
|
904
|
-
|
|
905
815
|
/**
|
|
906
816
|
* oauth 方式登录
|
|
907
817
|
* 1. 普通配置下,登录/注册是同样的流程,登录过程中会自动注册账号
|
|
908
818
|
* 2. 仅邀请可登录模式下,只允许登录,不允许注册
|
|
909
819
|
*/
|
|
910
|
-
|
|
820
|
+
router.post(`${prefixApi}/login`, async (req, res) => {
|
|
911
821
|
const { action = 'login' } = req.body;
|
|
912
822
|
const actionMap = {
|
|
913
823
|
login,
|
|
@@ -931,7 +841,7 @@ module.exports = {
|
|
|
931
841
|
}
|
|
932
842
|
});
|
|
933
843
|
|
|
934
|
-
|
|
844
|
+
router.post(`${prefixApi}/getUser`, async (req, res) => {
|
|
935
845
|
const { provider, token, idToken, code, appPid } = req.body;
|
|
936
846
|
const blocklet = await req.getBlocklet();
|
|
937
847
|
const oauthInfo = await getOAuthUserInfo({ blocklet, provider, token, idToken, code, appPid });
|
|
@@ -959,7 +869,7 @@ module.exports = {
|
|
|
959
869
|
};
|
|
960
870
|
};
|
|
961
871
|
|
|
962
|
-
|
|
872
|
+
router.get(`${prefix}/login/:provider`, checkReferrerMiddleware(), async (req, res) => {
|
|
963
873
|
const { provider } = req.params;
|
|
964
874
|
const blocklet = await req.getBlocklet();
|
|
965
875
|
const availableProviderList = Object.keys(blocklet.settings?.oauth).filter(
|
|
@@ -977,7 +887,7 @@ module.exports = {
|
|
|
977
887
|
|
|
978
888
|
// HACK: apple 需要特殊处理,callback 使用的是 post 请求返回的,通过特殊处理转为 get 请求,转由前端继续处理
|
|
979
889
|
// 此处改为所有 provider 都兼容的模式
|
|
980
|
-
|
|
890
|
+
router.post(`${prefix}/callback/:provider`, (req, res) => {
|
|
981
891
|
/**
|
|
982
892
|
* @type {{code?: string, user?: {name: {firstName: string, lastName: string}, email: string}}}
|
|
983
893
|
*/
|
package/api/routes/user.js
CHANGED
|
@@ -4,13 +4,13 @@ const { fromAppDid } = require('@arcblock/did-ext');
|
|
|
4
4
|
const { extractUserAvatar } = require('@abtnode/util/lib/user');
|
|
5
5
|
const formatContext = require('@abtnode/util/lib/format-context');
|
|
6
6
|
const createTranslator = require('@abtnode/util/lib/translate');
|
|
7
|
+
const { fromBase64 } = require('@ocap/util');
|
|
7
8
|
const { isFromPublicKey } = require('@arcblock/did');
|
|
8
9
|
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
9
|
-
const sortBy = require('lodash/sortBy');
|
|
10
|
-
const head = require('lodash/head');
|
|
11
10
|
const pick = require('lodash/pick');
|
|
12
11
|
const merge = require('lodash/merge');
|
|
13
12
|
const omitBy = require('lodash/omitBy');
|
|
13
|
+
const { getLastUsedPassport } = require('@abtnode/auth/lib/passport');
|
|
14
14
|
const { verify, decode } = require('@arcblock/jwt');
|
|
15
15
|
const { getWallet } = require('@blocklet/meta/lib/did-utils');
|
|
16
16
|
const { Joi } = require('@arcblock/validator');
|
|
@@ -33,7 +33,12 @@ const { Profile } = require('../state/profile');
|
|
|
33
33
|
|
|
34
34
|
const validateUser = (user) => {
|
|
35
35
|
try {
|
|
36
|
-
return
|
|
36
|
+
return (
|
|
37
|
+
user &&
|
|
38
|
+
user.did &&
|
|
39
|
+
user.pk &&
|
|
40
|
+
(isFromPublicKey(user.did, user.pk) || isFromPublicKey(user.did, fromBase64(user.pk)))
|
|
41
|
+
);
|
|
37
42
|
} catch (e) {
|
|
38
43
|
return false;
|
|
39
44
|
}
|
|
@@ -524,28 +529,7 @@ module.exports = {
|
|
|
524
529
|
const { createSessionToken } = initJwt(node, options);
|
|
525
530
|
const createToken = createTokenFn(createSessionToken);
|
|
526
531
|
const sessionConfig = blocklet.settings?.session || {};
|
|
527
|
-
const
|
|
528
|
-
|
|
529
|
-
let passport = null;
|
|
530
|
-
if (passportId) {
|
|
531
|
-
passport = passports.find((x) => x.status === 'valid' && x.passportId === passportId);
|
|
532
|
-
}
|
|
533
|
-
if (!passport) {
|
|
534
|
-
const now = new Date().getTime();
|
|
535
|
-
passport = head(
|
|
536
|
-
sortBy(passports, (x) => {
|
|
537
|
-
const lastLoginAt = new Date(x.lastLoginAt).getTime();
|
|
538
|
-
if (typeof lastLoginAt === 'number') {
|
|
539
|
-
return now - lastLoginAt;
|
|
540
|
-
}
|
|
541
|
-
return now;
|
|
542
|
-
})
|
|
543
|
-
);
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
if (!passport) {
|
|
547
|
-
passport = { name: 'Guest', role: 'guest' };
|
|
548
|
-
}
|
|
532
|
+
const passport = getLastUsedPassport(currentUser?.passports || [], passportId);
|
|
549
533
|
|
|
550
534
|
const lastLoginIp = getRequestIP(req);
|
|
551
535
|
const loggedInUser = await node.loginUser({
|
|
@@ -236,8 +236,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
|
|
|
236
236
|
preferredColor: passportColor,
|
|
237
237
|
};
|
|
238
238
|
|
|
239
|
-
const vc = createPassportVC(vcParams);
|
|
240
|
-
|
|
239
|
+
const vc = await createPassportVC(vcParams);
|
|
241
240
|
const role = getRoleFromLocalPassport(get(vc, 'credentialSubject.passport'));
|
|
242
241
|
const passport = createUserPassport(vc, { role });
|
|
243
242
|
|
|
@@ -30,7 +30,7 @@ const checkOwner = async ({ node, userDid, blocklet }) => {
|
|
|
30
30
|
return user;
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
module.exports = function createRoutes(node,
|
|
33
|
+
module.exports = function createRoutes(node, authenticator, createSessionToken) {
|
|
34
34
|
return {
|
|
35
35
|
action: 'setup',
|
|
36
36
|
onConnect: async ({ req, userDid, extraParams: { locale } }) => {
|
|
@@ -113,7 +113,12 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
|
|
|
113
113
|
|
|
114
114
|
// Generate new session token that client can save to localStorage
|
|
115
115
|
// HACK: 此处没有 passportId,所以特意不设置 refreshToken,失效后下次登录就能选择合适的 passport
|
|
116
|
-
const sessionToken = await createSessionToken(userDid, {
|
|
116
|
+
const sessionToken = await createSessionToken(userDid, {
|
|
117
|
+
secret,
|
|
118
|
+
role: 'owner',
|
|
119
|
+
fullName: profile?.fullName,
|
|
120
|
+
elevated: true,
|
|
121
|
+
});
|
|
117
122
|
await updateSession({ sessionToken }, true);
|
|
118
123
|
logger.info('setup.connect.success', { userDid });
|
|
119
124
|
} catch (err) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const { messages } = require('@abtnode/auth/lib/auth');
|
|
2
|
-
const { authenticateByVc, getVerifyAccessClaims } = require('@abtnode/auth/lib/server');
|
|
3
|
-
const { ROLES
|
|
2
|
+
const { authenticateByVc, getVerifyAccessClaims, validateVerifyDestroyRequest } = require('@abtnode/auth/lib/server');
|
|
3
|
+
const { ROLES } = require('@abtnode/constant');
|
|
4
4
|
const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
|
|
5
5
|
const { fromBase64 } = require('@ocap/util');
|
|
6
6
|
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
@@ -26,20 +26,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
26
26
|
throw new Error(messages.notAuthorized[locale]);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
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
|
-
}
|
|
29
|
+
const expected = validateVerifyDestroyRequest({ payload, roles, locale, allowedRoles: ALLOWED_ROLES });
|
|
43
30
|
|
|
44
31
|
const sourceAppPid = getSourceAppPid(request);
|
|
45
32
|
return {
|
|
@@ -37,6 +37,7 @@ const createVerifyDestroyAuth = require('./connect/verify-destroy');
|
|
|
37
37
|
const createReceiveTransferAppOwnerRoutes = require('./connect/receive-transfer-app-owner');
|
|
38
38
|
const createSessionRoutes = require('./session');
|
|
39
39
|
const createPassportRoutes = require('./passport');
|
|
40
|
+
const createPasskeyRoutes = require('./passkey');
|
|
40
41
|
const { getRedirectUrl, shouldIgnoreUrl, redirectWithoutCache } = require('../../util');
|
|
41
42
|
const { createConnectToDidSpacesForUserRoute } = require('./connect/connect-to-did-spaces-for-user');
|
|
42
43
|
const { isEmailKycRequired, isPhoneKycRequired } = require('../../libs/kyc');
|
|
@@ -249,6 +250,9 @@ const init = ({ node, options }) => {
|
|
|
249
250
|
|
|
250
251
|
// public http api
|
|
251
252
|
routes.createPassportRoutes = createPassportRoutes;
|
|
253
|
+
routes.createPasskeyRoutes = {
|
|
254
|
+
init: (router) => createPasskeyRoutes.init(router, node, options, createSessionToken),
|
|
255
|
+
};
|
|
252
256
|
routes.createSessionRoutes = {
|
|
253
257
|
// eslint-disable-next-line no-shadow
|
|
254
258
|
init: (router, node) =>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const { createPasskeyHandlers } = require('@abtnode/auth/lib/passkey');
|
|
2
|
+
const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
3
|
+
const { createPassportList, createPassportSwitcher } = require('@abtnode/auth/lib/oauth');
|
|
4
|
+
const { createTokenFn } = require('../../util');
|
|
5
|
+
const { checkUser } = require('../../routes/oauth');
|
|
6
|
+
|
|
7
|
+
module.exports = {
|
|
8
|
+
init(router, node, options, createSessionToken) {
|
|
9
|
+
const createToken = createTokenFn(createSessionToken);
|
|
10
|
+
|
|
11
|
+
const {
|
|
12
|
+
ensurePasskeySession,
|
|
13
|
+
ensureUser,
|
|
14
|
+
handleRegisterRequest,
|
|
15
|
+
handleRegisterResponse,
|
|
16
|
+
handleAuthRequest,
|
|
17
|
+
handleAuthResponse,
|
|
18
|
+
} = createPasskeyHandlers(node, 'service', createToken);
|
|
19
|
+
|
|
20
|
+
const prefix = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/passkey`;
|
|
21
|
+
|
|
22
|
+
router.get(`${prefix}/register`, handleRegisterRequest);
|
|
23
|
+
router.post(`${prefix}/register`, ensurePasskeySession, handleRegisterResponse);
|
|
24
|
+
router.get(`${prefix}/auth`, ensureUser, handleAuthRequest);
|
|
25
|
+
router.post(`${prefix}/auth`, ensurePasskeySession, handleAuthResponse);
|
|
26
|
+
|
|
27
|
+
// Following routes are same as oauth routes
|
|
28
|
+
router.get(`${prefix}/passports`, checkUser, createPassportList(node, 'service'));
|
|
29
|
+
router.post(`${prefix}/switch`, checkUser, createPassportSwitcher(node, createToken, 'service'));
|
|
30
|
+
},
|
|
31
|
+
};
|
|
@@ -2,8 +2,8 @@ const { getPassportStatus } = require('@abtnode/auth/lib/auth');
|
|
|
2
2
|
const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
3
3
|
|
|
4
4
|
module.exports = {
|
|
5
|
-
init(
|
|
6
|
-
|
|
5
|
+
init(router, node) {
|
|
6
|
+
router.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/api/passport/status`, async (req, res) => {
|
|
7
7
|
const { vcId, userDid, locale } = req.query;
|
|
8
8
|
const teamDid = req.headers['x-blocklet-did'];
|
|
9
9
|
|
|
@@ -23,14 +23,15 @@ const authenticateConnect = (req, cb) => {
|
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
JWT.verify(token, pk)
|
|
27
|
+
.then(() => {
|
|
28
|
+
const decoded = JWT.decode(token);
|
|
29
|
+
const info = getTokenInfo(decoded);
|
|
30
|
+
cb(null, info);
|
|
31
|
+
})
|
|
32
|
+
.catch((err) => {
|
|
33
|
+
cb(err, null);
|
|
34
|
+
});
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
const authenticateJoinChannel = async ({ topic: channel, payload, node }) => {
|
|
@@ -45,7 +46,7 @@ const authenticateJoinChannel = async ({ topic: channel, payload, node }) => {
|
|
|
45
46
|
// so we need to support token is valid for one day
|
|
46
47
|
const tolerance = 3600 * 24;
|
|
47
48
|
|
|
48
|
-
if (!JWT.verify(payload.token, payload.pk, { tolerance })) {
|
|
49
|
+
if (!(await JWT.verify(payload.token, payload.pk, { tolerance }))) {
|
|
49
50
|
throw new Error(`verify did failed: ${info.did}`);
|
|
50
51
|
}
|
|
51
52
|
|
|
@@ -171,13 +171,14 @@ const sendToUserDid = async ({ sender, receiver: rawDid, notification, options,
|
|
|
171
171
|
await Promise.all(
|
|
172
172
|
notifications.map(async (data) => {
|
|
173
173
|
let doc = null;
|
|
174
|
-
|
|
174
|
+
const isSaveSkipped = data.type?.toLowerCase() === 'passthrough';
|
|
175
|
+
if (data.id && !isSaveSkipped) {
|
|
175
176
|
doc = await node.getNotificationById({
|
|
176
177
|
teamDid: _teamDid,
|
|
177
178
|
id: data.id,
|
|
178
179
|
});
|
|
179
180
|
}
|
|
180
|
-
if (!data.id && !isServer && sender.type !== 'server') {
|
|
181
|
+
if (!data.id && !isServer && sender.type !== 'server' && !isSaveSkipped) {
|
|
181
182
|
doc = await node.createNotification({
|
|
182
183
|
teamDid,
|
|
183
184
|
...data,
|
|
@@ -298,7 +299,7 @@ const sendToUserDid = async ({ sender, receiver: rawDid, notification, options,
|
|
|
298
299
|
}
|
|
299
300
|
}
|
|
300
301
|
|
|
301
|
-
if (channels.includes('webhook')) {
|
|
302
|
+
if (channels.includes('webhook') && !isSaveSkipped) {
|
|
302
303
|
// 发送 webhook
|
|
303
304
|
for (const webhook of webhookList) {
|
|
304
305
|
let webhookSender = webhookSenders.get(webhook.type);
|
package/api/socket/util.js
CHANGED
|
@@ -60,7 +60,7 @@ const ensureSenderApp = async ({ sender, node, nodeInfo }) => {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
const { wallet } = appInfo;
|
|
63
|
-
if (!JWT.verify(sender.token, wallet.publicKey)) {
|
|
63
|
+
if (!(await JWT.verify(sender.token, wallet.publicKey))) {
|
|
64
64
|
throw new Error(`Invalid authentication token for sender blocklet: ${sender.appDid}`);
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -159,6 +159,7 @@ module.exports = ({ node, req, options }) => {
|
|
|
159
159
|
};
|
|
160
160
|
|
|
161
161
|
const user = await verifySessionToken(token, secret, opt);
|
|
162
|
+
|
|
162
163
|
if (user && visitorId) {
|
|
163
164
|
const [userSession] = await node.getUserSession({
|
|
164
165
|
teamDid,
|
|
@@ -166,14 +167,14 @@ module.exports = ({ node, req, options }) => {
|
|
|
166
167
|
userDid: user.did,
|
|
167
168
|
visitorId,
|
|
168
169
|
});
|
|
169
|
-
if (
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
if (userSession) {
|
|
171
|
+
req.userSession = userSession;
|
|
172
|
+
}
|
|
172
173
|
}
|
|
173
174
|
req.user = user;
|
|
174
175
|
}
|
|
175
176
|
} catch (error) {
|
|
176
|
-
|
|
177
|
+
console.error('Failed to ensureUser', error);
|
|
177
178
|
}
|
|
178
179
|
};
|
|
179
180
|
|
package/api/util/index.js
CHANGED
|
@@ -84,6 +84,7 @@ const getRedirectUrl = ({ req, pagePath, params = {} }) => {
|
|
|
84
84
|
const launchType = redirectUrlObj.searchParams.get('launchType');
|
|
85
85
|
const chainHost = redirectUrlObj.searchParams.get('chainHost');
|
|
86
86
|
const visitorId = redirectUrlObj.searchParams.get('visitorId');
|
|
87
|
+
const inviter = redirectUrlObj.searchParams.get('inviter');
|
|
87
88
|
|
|
88
89
|
const nftId = redirectUrlObj.searchParams.get('nftId');
|
|
89
90
|
redirectUrlObj.searchParams.delete('__start__');
|
|
@@ -133,6 +134,10 @@ const getRedirectUrl = ({ req, pagePath, params = {} }) => {
|
|
|
133
134
|
url.searchParams.set('visitorId', visitorId);
|
|
134
135
|
}
|
|
135
136
|
|
|
137
|
+
if (inviter) {
|
|
138
|
+
url.searchParams.set('inviter', inviter);
|
|
139
|
+
}
|
|
140
|
+
|
|
136
141
|
Object.keys(params).forEach((key) => {
|
|
137
142
|
if (params[key] === undefined) {
|
|
138
143
|
return;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as r,j as a}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as t}from"./vendor-arcblock-DrV4Yh4h.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,d=o(t()),v=a;u=e.default=(0,d.default)((0,v.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z"}),"Add");export{u as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as r,j as a}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as t}from"./vendor-arcblock-DrV4Yh4h.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(t()),p=a;u=e.default=(0,i.default)((0,p.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");export{u as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as r,j as a}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as t}from"./vendor-arcblock-DrV4Yh4h.js";var e={},i=r;Object.defineProperty(e,"__esModule",{value:!0});var o=e.default=void 0,u=i(t()),l=a;o=e.default=(0,u.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{o as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as r,j as t}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as a}from"./vendor-arcblock-DrV4Yh4h.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),f=t;u=e.default=(0,i.default)((0,f.jsx)("path",{d:"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z"}),"ChevronLeft");export{u as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as r,j as t}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as a}from"./vendor-arcblock-DrV4Yh4h.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var i=e.default=void 0,u=o(a()),v=t;i=e.default=(0,u.default)((0,v.jsx)("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}),"ChevronRight");export{i as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as t,j as r}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as a}from"./vendor-arcblock-DrV4Yh4h.js";var e={},u=t;Object.defineProperty(e,"__esModule",{value:!0});var i=e.default=void 0,o=u(a()),l=r;i=e.default=(0,o.default)((0,l.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z"}),"DeleteOutline");export{i as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as r,j as a}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as t}from"./vendor-arcblock-DrV4Yh4h.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(t()),l=a;u=e.default=(0,i.default)((0,l.jsx)("path",{d:"M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z"}),"Done");export{u as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a1 as a,j as r}from"./vendor-mui-core-BHQ3rDZc.js";import{ai as t}from"./vendor-arcblock-DrV4Yh4h.js";var e={},o=a;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(t()),d=r;u=e.default=(0,i.default)((0,d.jsx)("path",{d:"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z"}),"Download");export{u as d};
|