@abtnode/blocklet-services 1.16.37-beta-20250104-120451-e4049aeb → 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/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-BAgnJN1d.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-ChbClWUp.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-CWPZjlHO.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-B3qFdI6N.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-CpEoP1rb.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-BEcpBIIf.js +5 -0
- 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-Cbi6kl34.js → index-C6UmPiZc.js} +2 -2
- package/dist/assets/{index-CH1qAD3K.js → index-CDceAH6O.js} +21 -21
- 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-D8zCBBsy.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-Gze7IkP6.js → index-DoZ2YM4T.js} +1 -1
- package/dist/assets/{index-CqfW2FZt.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-BelGEFPb.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-C-mcb3Rv.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-BpyUyTL6.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-cgpPCMon.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-C5fDIc0r.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 +39 -39
- package/dist/assets/Add-B3vUgBj_.js +0 -1
- package/dist/assets/Alert-BeI3TGsH.js +0 -1
- package/dist/assets/ArrowDropDown-BDen6kv8.js +0 -1
- package/dist/assets/Autocomplete-B9XdXNLV.js +0 -1
- package/dist/assets/Avatar-VP6VjO6F.js +0 -1
- package/dist/assets/ButtonGroup-BQ3t8F0M.js +0 -1
- package/dist/assets/CSSTransition-CAyI_Voi.js +0 -1
- package/dist/assets/CheckCircle-C2NNCmBl.js +0 -1
- package/dist/assets/ChevronLeft-CnYlL3td.js +0 -1
- package/dist/assets/ChevronRight-CW0I-au3.js +0 -1
- package/dist/assets/Clear-CJ32w-ta.js +0 -1
- package/dist/assets/CloseOutlined-sL5HP2JB.js +0 -1
- package/dist/assets/Delete-Cw0XHQbI.js +0 -1
- package/dist/assets/DeleteOutline-CNDiVs89.js +0 -1
- package/dist/assets/DialogContentText-CEsqdDWz.js +0 -1
- package/dist/assets/Done-B1Id3HZ7.js +0 -1
- package/dist/assets/Download-5eyWxKFR.js +0 -1
- package/dist/assets/EditIcon-CyjMgREV.js +0 -1
- package/dist/assets/Error-CUxzkNdG.js +0 -1
- package/dist/assets/ExpandMore-CLLcIz7v.js +0 -1
- package/dist/assets/FormControl-BXjjQ2Cl.js +0 -1
- package/dist/assets/FormControlLabel-CRQiOFgY.js +0 -1
- package/dist/assets/FormGroup-CPYnhZEp.js +0 -1
- package/dist/assets/Grid-vQ4in7aJ.js +0 -1
- package/dist/assets/HelpOutline-CMsKsWc3.js +0 -1
- package/dist/assets/Hidden-ideB0Yow.js +0 -1
- package/dist/assets/InfoOutlined-5WyW673W.js +0 -1
- package/dist/assets/InputAdornment-BYO2j_v5.js +0 -1
- package/dist/assets/LastPage-CzXhZxbb.js +0 -1
- package/dist/assets/Launch-DYv1e-sP.js +0 -1
- package/dist/assets/LaunchOutlined-BxjL--pT.js +0 -1
- package/dist/assets/Link-BePn_RNM.js +0 -1
- package/dist/assets/ListItemButton-DFfqWy-t.js +0 -1
- package/dist/assets/ListSubheader-XVI0gGYq.js +0 -1
- package/dist/assets/LoadingButton-iTGCDYUz.js +0 -1
- package/dist/assets/LockIcon-Cj6s3Czr.js +0 -1
- package/dist/assets/Loop-JyIa8s4d.js +0 -1
- package/dist/assets/Menu-C6kynm4m.js +0 -1
- package/dist/assets/MoreHoriz-Cj6hh2tu.js +0 -1
- package/dist/assets/MoreVert-m5BY_p4K.js +0 -1
- package/dist/assets/OpenInNew-CIsQ-VD4.js +0 -1
- package/dist/assets/OutlinedInput-B93_cuhJ.js +0 -2
- package/dist/assets/PlayArrow-CSCQWAOp.js +0 -1
- package/dist/assets/QuestionMarkCircle-Bgaj2WkC.js +0 -1
- package/dist/assets/RadioGroup-DPurewE-.js +0 -1
- package/dist/assets/Search-Cy_vXJXs.js +0 -1
- package/dist/assets/Select-BoIViWSN.js +0 -1
- package/dist/assets/ServerLogo-C2FfSxkG.js +0 -1
- package/dist/assets/Stepper-CDMW7dY4.js +0 -1
- package/dist/assets/TextField-apRN2NFH.js +0 -1
- package/dist/assets/Toolbar-B0MDD2MX.js +0 -1
- package/dist/assets/ViewColumn-DLbcQUHz.js +0 -1
- package/dist/assets/ViewList-CYnd76EG.js +0 -1
- package/dist/assets/_createAggregator-jZ136RIi.js +0 -1
- package/dist/assets/access-control-D_3Sf3DH.js +0 -13
- package/dist/assets/actions-BEfqQHvh.js +0 -1
- package/dist/assets/add-component-core-8-K3kI62.js +0 -804
- package/dist/assets/add-resource-BJc9d35J.js +0 -1
- package/dist/assets/addon-C2s3597J.js +0 -31
- package/dist/assets/analytics-__YzXiEy.js +0 -52
- package/dist/assets/api-Du2npubO.js +0 -1
- package/dist/assets/audit-logs-DCsbxX3x.js +0 -59
- package/dist/assets/base32-CSHbjBse.js +0 -1
- package/dist/assets/branding-D8ZABeVU.js +0 -40
- package/dist/assets/bundle-avatar-DjGcv6Sg.js +0 -1
- package/dist/assets/button-BpodnaUj.js +0 -1
- package/dist/assets/click-to-copy-Ct4_CI1M.js +0 -1
- package/dist/assets/complete-CKV6Ebun.js +0 -45
- package/dist/assets/config-BnBRy_w4.js +0 -1
- package/dist/assets/config-C7arZYXl.js +0 -32
- package/dist/assets/config-space-D4B-Fcx4.js +0 -1
- package/dist/assets/confirm-CyScKRsz.js +0 -7
- package/dist/assets/connect-D50yPXAE.js +0 -5
- package/dist/assets/connect-DZgc6pEB.js +0 -1
- package/dist/assets/connect-to-Byo-gZWq.js +0 -29
- package/dist/assets/dashboard-lB4ZPVoV.js +0 -122
- package/dist/assets/deprecate-cv6v3EXd.js +0 -1
- package/dist/assets/did-address-pHUGf5mt.js +0 -1
- package/dist/assets/domain-UlRrTp1n.js +0 -9
- package/dist/assets/domain-list-CKs3EKNU.js +0 -15
- package/dist/assets/email-PtOk65dC.js +0 -18
- package/dist/assets/emotion-cache.browser.esm-DuQlBwjm.js +0 -1
- package/dist/assets/exchange-passport-DdO1PoJN.js +0 -1
- package/dist/assets/fallback-BMr0sE-j.js +0 -1
- package/dist/assets/form-text-input-C5wKQFKL.js +0 -11
- package/dist/assets/fuel-DkDXKRe9.js +0 -32
- package/dist/assets/fullpage-cRbvfPCn.js +0 -1
- package/dist/assets/get-safe-url-6c6RI8XT.js +0 -1
- package/dist/assets/get-safe-url-CwEZKvfc.js +0 -1
- package/dist/assets/home-D29pIqLK.js +0 -1
- package/dist/assets/iframe-BFiRQ7tw.js +0 -1
- package/dist/assets/index-72Zql8CQ.js +0 -5
- package/dist/assets/index-B27mVEab.js +0 -102
- package/dist/assets/index-B3dU1BRu.js +0 -1
- package/dist/assets/index-B5C90-kX.js +0 -1
- package/dist/assets/index-B6PbP50h.js +0 -1
- package/dist/assets/index-BUN78vRQ.js +0 -1
- package/dist/assets/index-BXoHPu8T.js +0 -5
- package/dist/assets/index-BcaFN_aP.js +0 -1
- package/dist/assets/index-Bgv4pLgc.js +0 -243
- package/dist/assets/index-BhxTb2Rs.js +0 -1
- package/dist/assets/index-Bo3ifRfa.js +0 -1
- package/dist/assets/index-BqLf0w23.js +0 -221
- package/dist/assets/index-C0UJXtze.js +0 -4
- package/dist/assets/index-C3YL4xGi.js +0 -1
- package/dist/assets/index-CMbz2eu6.js +0 -11
- package/dist/assets/index-CUdjeFH3.js +0 -1413
- package/dist/assets/index-C_mXaY4E.js +0 -1
- package/dist/assets/index-Cg_T1V-P.js +0 -544
- package/dist/assets/index-ChhcKroJ.js +0 -12
- package/dist/assets/index-CqnrpD4d.js +0 -134
- package/dist/assets/index-CtQolg_s.js +0 -1
- package/dist/assets/index-DSX7jfl3.js +0 -1
- package/dist/assets/index-DgoHglX6.js +0 -1
- package/dist/assets/index-Dim9am4F.js +0 -291
- package/dist/assets/index-DvwEbnCV.js +0 -13
- package/dist/assets/index-I-TxeVFM.js +0 -340
- package/dist/assets/index-ZSNG3xSj.js +0 -11
- package/dist/assets/index-foZCwT8M.css +0 -1
- package/dist/assets/index-q27UQsWn.js +0 -16
- package/dist/assets/index-q2_9XHCb.js +0 -721
- package/dist/assets/index-xuTvwkle.js +0 -316
- package/dist/assets/invitation-CI9oI0ML.js +0 -176
- package/dist/assets/invite-BD1LrTA8.js +0 -5
- package/dist/assets/isEmail-BCMyh8vZ.js +0 -1
- package/dist/assets/issue-passport-Bd-T51oN.js +0 -1
- package/dist/assets/item-CvCwtq6F.js +0 -1
- package/dist/assets/jss-plugin-props-sort.esm-KqvaA55X.js +0 -14
- package/dist/assets/layout-CqjS3RFh.js +0 -29
- package/dist/assets/list-header-DVNuHNDo.js +0 -57
- package/dist/assets/localization-Dutgz4tx.js +0 -1
- package/dist/assets/login-8AhFtIOc.js +0 -1
- package/dist/assets/login-oauth-callback-CsFM0yAZ.js +0 -1
- package/dist/assets/logo-uploader-DabQD2dA.js +0 -133
- package/dist/assets/lost-passport-CxN1g858.js +0 -168
- package/dist/assets/open-window-Banfzs4p.js +0 -1
- package/dist/assets/overview-DcAEoK9V.js +0 -12
- package/dist/assets/permission-WZrPwf2m.js +0 -1
- package/dist/assets/preferences-Ca7-Ov6u.js +0 -1
- package/dist/assets/publish-resource-DZ4bcjeq.js +0 -1
- package/dist/assets/purify.es-DutPtr9A.js +0 -2
- package/dist/assets/raf-schd.esm-CAeD1GPF.js +0 -1
- package/dist/assets/refType-Cd6nIb--.js +0 -1
- package/dist/assets/relative-time-DDo7Crj5.js +0 -1
- package/dist/assets/resource-dialog-CrGsGXEE.js +0 -299
- package/dist/assets/sdk-BTNAvCf8.js +0 -1
- package/dist/assets/selector-Br9-dR9y.js +0 -48
- package/dist/assets/session-BB2DljXy.js +0 -1
- package/dist/assets/setup-Cv1zGHfT.js +0 -19
- package/dist/assets/shorten-label-DT9X1B8w.js +0 -1
- package/dist/assets/simple-select-BAxNgpxE.js +0 -1
- package/dist/assets/slicedToArray-DyRQzefY.js +0 -2
- package/dist/assets/start-C7dSefgZ.js +0 -187
- package/dist/assets/step-actions-oy5A5R40.js +0 -31
- package/dist/assets/studio-Boj6f6bS.js +0 -6
- package/dist/assets/switch-control-ChW_GuaN.js +0 -13
- package/dist/assets/toPropertyKey-PLuKRk1e.js +0 -1
- package/dist/assets/toUpper-DXbBjpP8.js +0 -1
- package/dist/assets/transfer-CwhoFyG0.js +0 -16
- package/dist/assets/trim-D79XRDvY.js +0 -1
- package/dist/assets/uniqBy-BBGY8CA1.js +0 -1
- package/dist/assets/unsubscribe-BlsNq4VD.js +0 -1
- package/dist/assets/url-join-DILCgsel.js +0 -1
- package/dist/assets/use-mobile-B3qubz56.js +0 -1
- package/dist/assets/use-mobile-D8jiOBBW.js +0 -1
- package/dist/assets/useAsync-CwWuQ31n.js +0 -1
- package/dist/assets/useAsyncRetry-o3huFKOY.js +0 -7
- package/dist/assets/useFormControl-Bm0BZQS7.js +0 -1
- package/dist/assets/useLocalStorage-DdNsoUmT.js +0 -1
- package/dist/assets/useSetState-DuK5mvRn.js +0 -1
- package/dist/assets/useSlot-RdBOCJrx.js +0 -1
- package/dist/assets/useThemeProps-Bmm6xEda.js +0 -1
- package/dist/assets/user-center-6IaKm8kc.js +0 -201
- package/dist/assets/util-CZ4Gnuni.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-DKHVNdE9.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
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as f}from"./vendor-react-D-afvo_7.js";import{j as s}from"./vendor-mui-core-BHQ3rDZc.js";var o={};Object.defineProperty(o,"__esModule",{value:!0});var l=o.default=void 0;b(f);var u=s;function b(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(p){return Object.getOwnPropertyDescriptor(e,p).enumerable})),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?a(Object(r),!0).forEach(function(n){m(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function m(e,t,r){return(t=y(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e){var t=d(e,"string");return typeof t=="symbol"?t:t+""}function d(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var i=function(t){return(0,u.jsx)("svg",c(c({},t),{},{children:(0,u.jsx)("path",{d:"M6.03984 17.625C6.08672 17.625 6.13359 17.6203 6.18047 17.6133L10.1227 16.9219C10.1695 16.9125 10.2141 16.8914 10.2469 16.8563L20.182 6.92109C20.2038 6.89941 20.221 6.87366 20.2328 6.8453C20.2445 6.81695 20.2506 6.78656 20.2506 6.75586C20.2506 6.72516 20.2445 6.69477 20.2328 6.66642C20.221 6.63806 20.2038 6.61231 20.182 6.59063L16.2867 2.69297C16.2422 2.64844 16.1836 2.625 16.1203 2.625C16.057 2.625 15.9984 2.64844 15.9539 2.69297L6.01875 12.6281C5.98359 12.6633 5.9625 12.7055 5.95312 12.7523L5.26172 16.6945C5.23892 16.8201 5.24707 16.9493 5.28545 17.071C5.32384 17.1927 5.39132 17.3032 5.48203 17.393C5.63672 17.543 5.83125 17.625 6.03984 17.625ZM7.61953 13.5375L16.1203 5.03906L17.8383 6.75703L9.3375 15.2555L7.25391 15.6234L7.61953 13.5375ZM20.625 19.5938H3.375C2.96016 19.5938 2.625 19.9289 2.625 20.3438V21.1875C2.625 21.2906 2.70937 21.375 2.8125 21.375H21.1875C21.2906 21.375 21.375 21.2906 21.375 21.1875V20.3438C21.375 19.9289 21.0398 19.5938 20.625 19.5938Z"})}))};i.defaultProps={width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"};i.displayName="edit";l=o.default=i;export{l 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()),s=a;u=e.default=(0,i.default)((0,s.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z"}),"Error");export{u as d};
|