@abtnode/blocklet-services 1.16.32-beta-4d47ae7f → 1.16.32-beta-0593a408
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/index.js +9 -8
- package/api/libs/auth/index.js +2 -0
- package/api/libs/auth/utils.js +4 -1
- package/api/libs/connect/session.js +86 -97
- package/api/libs/connect/v1.js +2 -10
- package/api/libs/email.js +1 -1
- package/api/libs/jwt.js +17 -3
- package/api/libs/kyc.js +213 -0
- package/api/routes/federated.js +37 -4
- package/api/routes/oauth.js +65 -7
- package/api/routes/openapi.js +12 -21
- package/api/routes/opencomponent.js +12 -19
- package/api/routes/openembed.js +15 -26
- package/api/routes/user-session.js +2 -0
- package/api/routes/user.js +17 -2
- package/api/services/analytics/index.js +21 -24
- package/api/services/auth/connect/invite.js +38 -24
- package/api/services/auth/connect/issue-kyc.js +58 -0
- package/api/services/auth/connect/login.js +1 -0
- package/api/services/auth/connect/update-kyc.js +82 -0
- package/api/services/auth/index.js +34 -10
- package/api/services/auth/passport.js +11 -14
- package/api/services/auth/session.js +196 -197
- package/api/services/kyc/index.js +92 -0
- package/api/services/notification/index.js +6 -16
- package/api/services/relay/index.js +3 -7
- package/api/services/studio/index.js +62 -65
- package/api/socket/channel/did.js +1 -0
- package/api/util/get-static-service-config.js +2 -10
- package/dist/assets/{Add-D8_0U-mi.js → Add-BXK5RFEZ.js} +1 -1
- package/dist/assets/Alert-CeGhMuEg.js +1 -0
- package/dist/assets/{ArrowDropDown-exkF-BIK.js → ArrowDropDown-JIsmOdUp.js} +1 -1
- package/dist/assets/Avatar-DlL4WPrD.js +1 -0
- package/dist/assets/{ButtonGroup-CTrZ2Hyv.js → ButtonGroup-ailEu1Nr.js} +1 -1
- package/dist/assets/{CheckCircle-BNxyw6NJ.js → CheckCircle-CEIChsEH.js} +1 -1
- package/dist/assets/ChevronLeft-D_bQ82yy.js +1 -0
- package/dist/assets/{ChevronRight-DBpo88DV.js → ChevronRight-BGd4BknI.js} +1 -1
- package/dist/assets/{Close-DgxsFA7q.js → Close-uLBCA-jx.js} +1 -1
- package/dist/assets/{CloseOutlined-CN4iKY7n.js → CloseOutlined-IVnREWlC.js} +1 -1
- package/dist/assets/{Delete-BaSq9RZZ.js → Delete-BVwa0m1R.js} +1 -1
- package/dist/assets/{DeleteOutline-Du2BPdlg.js → DeleteOutline-CZQhsml4.js} +1 -1
- package/dist/assets/DialogContentText-ClisAi23.js +1 -0
- package/dist/assets/{Done-BG-Fw8ts.js → Done-Dsagjn-5.js} +1 -1
- package/dist/assets/{Download-C1y29u9K.js → Download-BONj8GVi.js} +1 -1
- package/dist/assets/{Edit-u2-N8rQN.js → Edit-uwWLILxD.js} +1 -1
- package/dist/assets/{EditIcon-B2Y7T-CN.js → EditIcon-Ccz9ZvCO.js} +1 -1
- package/dist/assets/{Error-B1K0WhCp.js → Error-Cpv-DWNH.js} +1 -1
- package/dist/assets/{ExpandMore-DBQIHjkB.js → ExpandMore-DUJJgQvW.js} +1 -1
- package/dist/assets/FormControl-DFtCJG5u.js +1 -0
- package/dist/assets/FormControlLabel-DXsQRQXS.js +1 -0
- package/dist/assets/FormGroup-BYqGm4p-.js +1 -0
- package/dist/assets/{Google-CvB2nYH_.js → Google-_v-FGHrH.js} +1 -1
- package/dist/assets/{Hidden-DJwWGZh0.js → Hidden-qI_JwCnJ.js} +1 -1
- package/dist/assets/{InfoOutlined-BIY-Lnxg.js → InfoOutlined-ph3gfjxo.js} +1 -1
- package/dist/assets/{InputAdornment-VVruavKc.js → InputAdornment-ooDD0p7-.js} +1 -1
- package/dist/assets/{InputLabel-3M9sMlBq.js → InputLabel-BvnZs665.js} +1 -1
- package/dist/assets/{LastPage-CBInTPpp.js → LastPage-Cyi1MuLL.js} +1 -1
- package/dist/assets/{Launch-Dhq-grBI.js → Launch-DuItzynA.js} +1 -1
- package/dist/assets/{LaunchOutlined-DnkKRXxH.js → LaunchOutlined-D-2u70Um.js} +1 -1
- package/dist/assets/{Link-Cpnh7s1v.js → Link-Bi0x7esG.js} +1 -1
- package/dist/assets/{ListItemText-CHjUage1.js → ListItemText-5Rgq6wEi.js} +1 -1
- package/dist/assets/{LoadingButton-C47nsxMx.js → LoadingButton-D5Z3wmwU.js} +1 -1
- package/dist/assets/{LockIcon-CoUaWmH-.js → LockIcon-m3nszp09.js} +1 -1
- package/dist/assets/{Loop-CbcENVkw.js → Loop-DxSgdtYO.js} +1 -1
- package/dist/assets/{MoreHoriz-B4gnOmnB.js → MoreHoriz-BhT61kh5.js} +1 -1
- package/dist/assets/{MoreVert-CBWkVJTE.js → MoreVert-BZrKRQjN.js} +1 -1
- package/dist/assets/{OpenInNew-svkkbJCn.js → OpenInNew-BmjNdWrg.js} +1 -1
- package/dist/assets/{Pagination-BBwBFjSJ.js → Pagination-BuAgd0Fq.js} +2 -2
- package/dist/assets/{PlayArrow-D-mvqfoj.js → PlayArrow-duerFb9i.js} +1 -1
- package/dist/assets/{QuestionMarkCircle-Duxt-AlB.js → QuestionMarkCircle-e6Dqgeid.js} +1 -1
- package/dist/assets/{RadioGroup-C4DI71vM.js → RadioGroup-hK79XBIl.js} +1 -1
- package/dist/assets/{Search-BOxcXluh.js → Search-BMPJQuLV.js} +1 -1
- package/dist/assets/{Select-drnrjZt8.js → Select-BeArBHJP.js} +2 -2
- package/dist/assets/{ServerLogo-CxVp5JLf.js → ServerLogo-BNlEHeUQ.js} +1 -1
- package/dist/assets/{Skeleton-YurB3EC5.js → Skeleton-D5U61zVB.js} +4 -4
- package/dist/assets/{Slider-BX1l_Lvj.js → Slider-DTLSNhz0.js} +1 -1
- package/dist/assets/Stack-CZh-rd3Z.js +1 -0
- package/dist/assets/{Stepper-UV_DHoEg.js → Stepper-DRS0AaL5.js} +1 -1
- package/dist/assets/TextField-qwbmqJ_2.js +1 -0
- package/dist/assets/Toolbar-vbF-NV4R.js +1 -0
- package/dist/assets/ViewColumn-C39IjII_.js +1 -0
- package/dist/assets/{ViewList-Bwkry3LO.js → ViewList-D9Rx7CG7.js} +1 -1
- package/dist/assets/access-control-CZ2vCfvl.js +13 -0
- package/dist/assets/{actions-5mXSkQB4.js → actions-bp0tIFPr.js} +1 -1
- package/dist/assets/{add-component-core-DFH5qH7x.js → add-component-core-C1Hjv9Mu.js} +61 -61
- package/dist/assets/add-resource-ClftlsDn.js +1 -0
- package/dist/assets/{addon-CUxwPHa_.js → addon-CR-5t9SG.js} +1 -1
- package/dist/assets/{analytics-B29460Yu.js → analytics-DtV5hN-G.js} +7 -7
- package/dist/assets/api-BdPs8cnO.js +1 -0
- package/dist/assets/ar-BywPGmOa.js +1 -0
- package/dist/assets/ar-cd9W8CrI.js +1 -0
- package/dist/assets/audit-logs-CLta2fsb.js +58 -0
- package/dist/assets/{button-BqgSoT0h.js → button-C_Ohwi26.js} +1 -1
- package/dist/assets/{click-to-copy-CM2U6JEg.js → click-to-copy-DdG-v5Xf.js} +1 -1
- package/dist/assets/{complete-DaiPBjLS.js → complete-d1ZMK4NF.js} +1 -1
- package/dist/assets/component-C3cEDupm.js +768 -0
- package/dist/assets/{config-CxG4Kz4G.js → config-CoCmaQP0.js} +2 -2
- package/dist/assets/{config-BygYwcXq.js → config-Dx0nfjiu.js} +1 -1
- package/dist/assets/{config-navigation-Rsc7sQGs.js → config-navigation-WnNuhnxu.js} +2 -2
- package/dist/assets/confirm-BY-9Ale6.js +7 -0
- package/dist/assets/{connect-26mFy5d9.js → connect-DDUiaDOH.js} +1 -1
- package/dist/assets/{connect-B87FT6ev.js → connect-eNCvhZ4O.js} +1 -1
- package/dist/assets/connect-to-CTihUmuN.js +54 -0
- package/dist/assets/{content-layout-B7X0Mv3n.js → content-layout-DYHA2DoT.js} +1 -1
- package/dist/assets/{dashboard-BrV_SESr.js → dashboard-C8VgUavf.js} +4 -4
- package/dist/assets/de-DS4XAN75.js +1 -0
- package/dist/assets/{de-9vHBMa7b.js → de-qs3PjT55.js} +1 -1
- package/dist/assets/{did-address-BWnma-3-.js → did-address-Bye61gv9.js} +1 -1
- package/dist/assets/domain-JYDawt5A.js +9 -0
- package/dist/assets/{domain-list-wgNQeEgv.js → domain-list-1LRFMuDN.js} +2 -2
- package/dist/assets/email-THIe3MUl.js +9 -0
- package/dist/assets/es-DXb9xB6c.js +1 -0
- package/dist/assets/es-XT3Dd0hc.js +1 -0
- package/dist/assets/{exchange-passport-BZ8Q-G3h.js → exchange-passport-CvhlZqQF.js} +1 -1
- package/dist/assets/{fallback-C5E1lZAR.js → fallback-0bWgPkSN.js} +1 -1
- package/dist/assets/format-error-BOfFwKPG.js +2 -0
- package/dist/assets/fr-C5TQA9s1.js +1 -0
- package/dist/assets/{fr-C5fh5fdm.js → fr-CMgZc3LR.js} +1 -1
- package/dist/assets/{fuel-XF4sXoDA.js → fuel-CfBzTTU6.js} +1 -1
- package/dist/assets/{fullpage-BOyZgu9A.js → fullpage-ChxIZLoV.js} +1 -1
- package/dist/assets/hi-C_Mli2FO.js +1 -0
- package/dist/assets/hi-Ch52Lky6.js +1 -0
- package/dist/assets/{home-Dajv5NTd.js → home-DNnK3U-z.js} +1 -1
- package/dist/assets/id-BkncNzMh.js +1 -0
- package/dist/assets/id-_x67Rh2B.js +1 -0
- package/dist/assets/{iframe-CmugPIuF.js → iframe-BuZAORHf.js} +1 -1
- package/dist/assets/{index-Cixwi4BX.js → index--PkoOt7s.js} +1 -1
- package/dist/assets/{index-Dcphtm5y.js → index--Zmo4lNz.js} +1 -1
- package/dist/assets/{index-BiafpQ0u.js → index-52sgx-HD.js} +40 -40
- package/dist/assets/{index-BtQK2llU.js → index-B-Fz2GNJ.js} +2 -2
- package/dist/assets/{index-D0ZBFe_v.js → index-BElhBMsQ.js} +12 -12
- package/dist/assets/{index-BtQOF6n3.js → index-BM94YLjm.js} +1 -1
- package/dist/assets/{index-BrcKk7u6.js → index-BML-rKDv.js} +1 -1
- package/dist/assets/index-BVQpPnuL.js +262 -0
- package/dist/assets/{index-CTFB4nHV.js → index-Be2wLDD2.js} +3 -3
- package/dist/assets/{index-BisUmH-h.js → index-BlaHh4Bq.js} +1 -1
- package/dist/assets/{index-DHNVLiI8.js → index-BmJ_HmLz.js} +1 -1
- package/dist/assets/{index-BvZ1bsPZ.js → index-BmTem0RD.js} +5 -5
- package/dist/assets/{index-DPyKucXe.js → index-BqbUZVee.js} +1 -1
- package/dist/assets/{index-p81jbN_h.js → index-C0fRQdXZ.js} +1 -1
- package/dist/assets/index-C2qWDMpv.js +126 -0
- package/dist/assets/{index-TlMkikTm.js → index-C5cJ2AYH.js} +1 -1
- package/dist/assets/{index-CFmNTsQh.js → index-CMg55b21.js} +1 -1
- package/dist/assets/{index-UKHQeYs5.js → index-CeNlYeEB.js} +1 -1
- package/dist/assets/{index-D5lkEFWM.js → index-CmriykVM.js} +1 -1
- package/dist/assets/{index-Ca5y7O4k.js → index-CsqAQtnh.js} +12 -12
- package/dist/assets/{index-C2sin8wt.js → index-CuDHF3xN.js} +1 -1
- package/dist/assets/index-D0TT-qXy.js +329 -0
- package/dist/assets/index-D3wlHMtS.js +4 -0
- package/dist/assets/{index-BK4259Qj.js → index-DCx94jgM.js} +1 -1
- package/dist/assets/{index-DCkU-F0r.js → index-DCyB2kx5.js} +1 -1
- package/dist/assets/{index-CrurRDDC.js → index-DMGDz3J5.js} +1 -1
- package/dist/assets/{index-C0qYe9TG.js → index-Dg3ZdGFC.js} +1 -1
- package/dist/assets/index-Dn3O_6kH.js +68 -0
- package/dist/assets/{index-BRJLJSjg.js → index-DnNh-evc.js} +2 -2
- package/dist/assets/{index-hv_yaUi2.js → index-DyEaiz-D.js} +4 -4
- package/dist/assets/{index-DfZjT3WA.js → index-fpoxcuML.js} +212 -121
- package/dist/assets/{index.es-w-0rtBPs.js → index.es-BXRXZClL.js} +1 -1
- package/dist/assets/index.esm-BPFo6X8Z.js +1 -0
- package/dist/assets/{invitation-KAlNPJe6.js → invitation-D1Wp3bRP.js} +1 -1
- package/dist/assets/{invite-C_RF0Rm2.js → invite-YMYQJqN-.js} +1 -1
- package/dist/assets/{issue-passport-DM7CKvcB.js → issue-passport-BGReKwsC.js} +1 -1
- package/dist/assets/item-BXQ3arsv.js +1 -0
- package/dist/assets/ja-BemsOTjE.js +1 -0
- package/dist/assets/ja-j9_7sWtG.js +1 -0
- package/dist/assets/{jss-plugin-props-sort.esm-BzROyw1n.js → jss-plugin-props-sort.esm-C9YatkDP.js} +1 -1
- package/dist/assets/ko-BcDVaiV3.js +1 -0
- package/dist/assets/ko-CqkhhVdi.js +1 -0
- package/dist/assets/{launch-result-message-CIfX9Pg1.js → launch-result-message-BerDxO98.js} +1 -1
- package/dist/assets/{layout-Bb2LZLxa.js → layout-D4J5Y79b.js} +2 -2
- package/dist/assets/{list-header-BDhQIu5L.js → list-header-Be3w9ZWF.js} +1 -1
- package/dist/assets/localization-C6Hais-M.js +1 -0
- package/dist/assets/{log-o0iKO5dx.js → log-CQOOprUt.js} +1 -1
- package/dist/assets/{login-B9UvusG-.js → login-BE50q_9g.js} +1 -1
- package/dist/assets/{login-oauth-callback-cZ3oa4a_.js → login-oauth-callback-BPCfA25m.js} +1 -1
- package/dist/assets/logo-uploader-BQq1Bvz4.js +122 -0
- package/dist/assets/lost-passport-CqiiJzdw.js +168 -0
- package/dist/assets/{lottie-DsjCdNh-.js → lottie-8CewroZu.js} +1 -1
- package/dist/assets/notifications-hFiNE8Kp.js +62 -0
- package/dist/assets/{open-window-B5RcEIrm.js → open-window-DZuQsoOo.js} +1 -1
- package/dist/assets/overview-eXanKabi.js +12 -0
- package/dist/assets/{page-header-BvuGyCDw.js → page-header-D6emPvgS.js} +1 -1
- package/dist/assets/{permission-BuA9Zt4q.js → permission-CV9At0xV.js} +1 -1
- package/dist/assets/{preferences-BzcjmMUC.js → preferences-GIta-dYt.js} +1 -1
- package/dist/assets/pt-DZmF_qcN.js +1 -0
- package/dist/assets/pt-NjuvVfFo.js +1 -0
- package/dist/assets/publish-resource-E3qK4Lfb.js +1 -0
- package/dist/assets/react-BnX7dsCg.js +57 -0
- package/dist/assets/{redux-BDPBPXLM.js → redux-B4e5IkPl.js} +1 -1
- package/dist/assets/resource-dialog-DSlBHCVu.js +57 -0
- package/dist/assets/ru-BFNdjdAO.js +1 -0
- package/dist/assets/ru-BsFEd75u.js +1 -0
- package/dist/assets/sdk-C5Eo3Lk8.js +1 -0
- package/dist/assets/{selector-DktPytoX.js → selector-fvBTD9SB.js} +3 -3
- package/dist/assets/session-BHe45BP1.js +1 -0
- package/dist/assets/setup-p-Q92t4g.js +19 -0
- package/dist/assets/{shorten-label-3owfLRzi.js → shorten-label-BOSkgF_N.js} +1 -1
- package/dist/assets/{slicedToArray-CQG0j1sa.js → slicedToArray-CbPRhqfX.js} +2 -2
- package/dist/assets/{spaces-DDj9ynWl.js → spaces-Dv5sTFBl.js} +1 -1
- package/dist/assets/{start-DCKDZC67.js → start-D4PsKATv.js} +1 -1
- package/dist/assets/{step-actions-CoJc8417.js → step-actions-DvJ3jG2s.js} +1 -1
- package/dist/assets/{studio-B_0UB40R.js → studio-kDlNaA-v.js} +1 -1
- package/dist/assets/{switch-control-Bun_5Zkk.js → switch-control-CCflGHVj.js} +1 -1
- package/dist/assets/th-B61cOYck.js +1 -0
- package/dist/assets/th-C7TEM40B.js +1 -0
- package/dist/assets/{toUpper-Bf_TQKK7.js → toUpper-DxMwQ-7A.js} +1 -1
- package/dist/assets/{transfer-C7Cxyvnx.js → transfer-Cdc4gT4M.js} +1 -1
- package/dist/assets/{uniqBy-BqI7ffNX.js → uniqBy-C7E-hw0R.js} +1 -1
- package/dist/assets/{unsubscribe-B-iaO9gM.js → unsubscribe-CZRtq6xH.js} +1 -1
- package/dist/assets/{url-join-BoNn2Qh7.js → url-join-Cc5BAZ2e.js} +1 -1
- package/dist/assets/{use-blocklet-info-for-connect-did-spaces-CfK0RcTD.js → use-blocklet-info-for-connect-did-spaces-Dro42um_.js} +1 -1
- package/dist/assets/{use-mobile-C19pzcVe.js → use-mobile-BziK5djw.js} +1 -1
- package/dist/assets/{useAsync-Ca_M5Jhn.js → useAsync-fA1HnQaq.js} +1 -1
- package/dist/assets/{useFormControl-Cs3LGXJe.js → useFormControl-CQ_7pr9i.js} +1 -1
- package/dist/assets/{useLocalStorage-3-rj5S6B.js → useLocalStorage-CpPhACy5.js} +1 -1
- package/dist/assets/{useSetState-BTR-3GfC.js → useSetState-5snwvlLZ.js} +1 -1
- package/dist/assets/useSlot-GRhp-924.js +1 -0
- package/dist/assets/{useSlotProps-CCXsWmb3.js → useSlotProps-CPXTP7XP.js} +1 -1
- package/dist/assets/{useThemeProps-BjkDmxHT.js → useThemeProps-BnBMhVDF.js} +1 -1
- package/dist/assets/user-center-CuPwYsI_.js +1 -0
- package/dist/assets/user-sessions-lG0a9kqK.js +1 -0
- package/dist/assets/{util-DBNeRhAr.js → util-BBmowc-s.js} +1 -1
- package/dist/assets/vi-B884zOLu.js +1 -0
- package/dist/assets/vi-C1X-AoyG.js +1 -0
- package/dist/assets/wrap-locale-D-ibzwQK.js +1 -0
- package/dist/assets/zh-DjEnl7LY.js +1 -0
- package/dist/assets/zh-kNAPjCk5.js +2 -0
- package/dist/assets/zh-tw-Bn1Pkz9A.js +1 -0
- package/dist/assets/zh-tw-DSZuinRu.js +1 -0
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +26 -25
- package/api/util/constants.js +0 -10
- package/dist/assets/AddBox-BpwHbwbG.js +0 -1
- package/dist/assets/Alert-Dlco0B3L.js +0 -1
- package/dist/assets/Avatar-B1SFM1MR.js +0 -1
- package/dist/assets/FilterList-DumRQ8ls.js +0 -26
- package/dist/assets/FormControl-CeSJJZgZ.js +0 -1
- package/dist/assets/FormControlLabel-CpH9LTeH.js +0 -1
- package/dist/assets/FormGroup-B0Xdxgiy.js +0 -1
- package/dist/assets/TextField-D_Jtjg13.js +0 -1
- package/dist/assets/Toolbar-D7_EWzTj.js +0 -1
- package/dist/assets/access-control-YUBGali8.js +0 -13
- package/dist/assets/add-resource-BJ9u32jP.js +0 -1
- package/dist/assets/api-DbvHYaVa.js +0 -1
- package/dist/assets/ar-BSACs5SN.js +0 -1
- package/dist/assets/ar-lTVP4T3d.js +0 -1
- package/dist/assets/audit-logs-C1AOwGce.js +0 -58
- package/dist/assets/component-npmbPVSM.js +0 -464
- package/dist/assets/confirm-3b8GTIgU.js +0 -7
- package/dist/assets/connect-to-B0Td9yUD.js +0 -54
- package/dist/assets/de-B3TxaybY.js +0 -1
- package/dist/assets/domain-CkCbH8sj.js +0 -9
- package/dist/assets/es-BY0KMFme.js +0 -1
- package/dist/assets/es-Bk9E9Gbf.js +0 -1
- package/dist/assets/format-error-BVI56bJg.js +0 -2
- package/dist/assets/fr-BiVZLeXU.js +0 -1
- package/dist/assets/hi-B_LrkIOS.js +0 -1
- package/dist/assets/hi-HiGtGtUs.js +0 -1
- package/dist/assets/id-CirrqXGd.js +0 -1
- package/dist/assets/id-jBXPD1he.js +0 -1
- package/dist/assets/index-2xySyQ5i.js +0 -262
- package/dist/assets/index-B0NvcpjT.js +0 -1
- package/dist/assets/index-B7Un-ZeO.js +0 -68
- package/dist/assets/index-BP53WpUP.js +0 -4
- package/dist/assets/index-C1Puqx4M.js +0 -304
- package/dist/assets/index-CLQi4cVY.js +0 -126
- package/dist/assets/index.esm-CptJw3C8.js +0 -1
- package/dist/assets/item-DIkrlQMP.js +0 -1
- package/dist/assets/ja-BOs7uPqI.js +0 -1
- package/dist/assets/ja-DKiHQ6DE.js +0 -1
- package/dist/assets/ko-BBYyf1yM.js +0 -1
- package/dist/assets/ko-D1G4UvNg.js +0 -1
- package/dist/assets/localization-V0WRiXKC.js +0 -1
- package/dist/assets/logo-uploader-D4yqBa_O.js +0 -122
- package/dist/assets/lost-passport-soFqeEb7.js +0 -168
- package/dist/assets/notifications-B9Mu8Fxb.js +0 -62
- package/dist/assets/overview-CFbnZdV0.js +0 -12
- package/dist/assets/pt-CcFeyma6.js +0 -1
- package/dist/assets/pt-DI2MIkSi.js +0 -1
- package/dist/assets/publish-resource-DwhFCZXw.js +0 -1
- package/dist/assets/react-CwUjkFxY.js +0 -57
- package/dist/assets/resource-dialog-BBzXGjTp.js +0 -57
- package/dist/assets/ru-B2L3CRQ4.js +0 -1
- package/dist/assets/ru-OymXgLUI.js +0 -1
- package/dist/assets/sdk-CI7TJ_xu.js +0 -1
- package/dist/assets/session-Cw-dytKR.js +0 -1
- package/dist/assets/setup-DRfpHXNv.js +0 -19
- package/dist/assets/th-CZbdb5PZ.js +0 -1
- package/dist/assets/th-CfNBHHtU.js +0 -1
- package/dist/assets/useSlot-C1f6ZTLt.js +0 -1
- package/dist/assets/user-center-BN2FDsvO.js +0 -1
- package/dist/assets/user-sessions-BIEmgTqD.js +0 -1
- package/dist/assets/vi-DbzhnofW.js +0 -1
- package/dist/assets/vi-DhjQx2Z1.js +0 -1
- package/dist/assets/wrap-locale-D7L9anic.js +0 -1
- package/dist/assets/zh-FO0C29Rb.js +0 -1
- package/dist/assets/zh-jGK5FFL0.js +0 -2
- package/dist/assets/zh-tw-DnmwTx49.js +0 -1
- package/dist/assets/zh-tw-cyWwf75a.js +0 -1
package/api/libs/kyc.js
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
const get = require('lodash/get');
|
|
2
|
+
const uniq = require('lodash/uniq');
|
|
3
|
+
const pick = require('lodash/pick');
|
|
4
|
+
const semver = require('semver');
|
|
5
|
+
const { messages, getVCFromClaims } = require('@abtnode/auth/lib/auth');
|
|
6
|
+
const { getPassportClaimUrl, getKycAcquireUrl } = require('@abtnode/auth/lib/passport');
|
|
7
|
+
|
|
8
|
+
const { getTrustedIssuers } = require('../util/blocklet-utils');
|
|
9
|
+
const { PASSPORT_VC_TYPES } = require('./auth/utils');
|
|
10
|
+
|
|
11
|
+
const getPassportVc = async ({ blocklet, claims, challenge, locale, sourceAppPid, types = PASSPORT_VC_TYPES }) => {
|
|
12
|
+
const trustedIssuers = await getTrustedIssuers(blocklet, { sourceAppPid });
|
|
13
|
+
const { vc } = await getVCFromClaims({
|
|
14
|
+
claims,
|
|
15
|
+
challenge,
|
|
16
|
+
trustedIssuers,
|
|
17
|
+
types,
|
|
18
|
+
locale,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return vc;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @description 兼容老的 DID Wallet 版本,不是所有的 DID Wallet 都可以出示 profile url
|
|
26
|
+
* @param {import('../../types').DidWallet} didWallet
|
|
27
|
+
* @return {boolean}
|
|
28
|
+
*/
|
|
29
|
+
function isProfileUrlSupported(didWallet) {
|
|
30
|
+
if (!didWallet) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const { os, version } = didWallet;
|
|
35
|
+
const webCanUse = os === 'web' && semver.satisfies(version, '>= 4.13.0');
|
|
36
|
+
const iosCanUse = os === 'ios' && semver.satisfies(version, '>= 5.6.0');
|
|
37
|
+
const androidCanUse = os === 'android' && semver.satisfies(version, '>= 5.6.0');
|
|
38
|
+
|
|
39
|
+
return webCanUse || iosCanUse || androidCanUse;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @description
|
|
44
|
+
* @param {object} settings
|
|
45
|
+
* @param {import('../../types').DidWallet} didWallet
|
|
46
|
+
* @return {string[]}
|
|
47
|
+
*/
|
|
48
|
+
function getProfileItems(settings, didWallet) {
|
|
49
|
+
const profileItems = ['fullName', 'avatar'];
|
|
50
|
+
if (settings?.email?.enabled) {
|
|
51
|
+
profileItems.push('email');
|
|
52
|
+
}
|
|
53
|
+
if (settings?.phone?.enabled) {
|
|
54
|
+
profileItems.push('phone');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (isProfileUrlSupported(didWallet)) {
|
|
58
|
+
profileItems.push('url');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return uniq(profileItems);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const isEmailKycRequired = (blocklet) => {
|
|
65
|
+
return blocklet.settings.session?.email?.enabled && blocklet.settings.session?.email?.requireVerified;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const isEmailUniqueRequired = (blocklet) => {
|
|
69
|
+
return blocklet.settings.session?.email?.enabled && blocklet.settings.session?.email?.requireUnique;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const isOAuthKycTrusted = (blocklet) => {
|
|
73
|
+
return blocklet.settings.session?.email?.enabled && blocklet.settings.session?.email?.trustOauthProviders;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const isPhoneKycRequired = (blocklet) => {
|
|
77
|
+
return blocklet.settings.session?.phone?.enabled && blocklet.settings.session?.phone?.requireVerified;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const isPhoneUniqueRequired = (blocklet) => {
|
|
81
|
+
return blocklet.settings.session?.phone?.enabled && blocklet.settings.session?.phone?.requireUnique;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// github 的 email 是 verified, 其他 oauth 的 email 通过 email_verified 判断
|
|
85
|
+
const isOAuthEmailVerified = (blocklet, info) => {
|
|
86
|
+
return isOAuthKycTrusted(blocklet) && (!!info?.email_verified || info?.provider === 'github');
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const isProfileClaimRequired = (blocklet, user) => {
|
|
90
|
+
if (isEmailKycRequired(blocklet) && !user.email) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
if (isPhoneKycRequired(blocklet) && !user.phone) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
function getKycClaims(blocklet, user, locale, baseUrl, trustedIssuers) {
|
|
100
|
+
const claims = {};
|
|
101
|
+
if (isEmailKycRequired(blocklet) && !user?.emailVerified) {
|
|
102
|
+
const emailKycClaim = {
|
|
103
|
+
type: 'verifiableCredential',
|
|
104
|
+
description: messages.requestEmailKyc[locale],
|
|
105
|
+
item: ['VerifiedEmailCredential'],
|
|
106
|
+
trustedIssuers,
|
|
107
|
+
optional: false,
|
|
108
|
+
acquireUrl: getKycAcquireUrl(baseUrl, '', 'email'),
|
|
109
|
+
claimUrl: getPassportClaimUrl(baseUrl, '', 'email'),
|
|
110
|
+
};
|
|
111
|
+
claims.emailKyc = ['verifiableCredential', emailKycClaim];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (isPhoneKycRequired(blocklet) && !user?.phoneVerified) {
|
|
115
|
+
const phoneKycClaim = {
|
|
116
|
+
type: 'verifiableCredential',
|
|
117
|
+
description: messages.requestPhoneKyc[locale],
|
|
118
|
+
item: ['VerifiedPhoneCredential'],
|
|
119
|
+
trustedIssuers,
|
|
120
|
+
optional: false,
|
|
121
|
+
acquireUrl: getKycAcquireUrl(baseUrl, '', 'phone'),
|
|
122
|
+
claimUrl: getPassportClaimUrl(baseUrl, '', 'phone'),
|
|
123
|
+
};
|
|
124
|
+
claims.phoneKyc = ['verifiableCredential', phoneKycClaim];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return claims;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async function verifyKycClaims({ node, blocklet, teamDid, claims, challenge, locale, sourceAppPid, user }) {
|
|
131
|
+
const profile = claims.find((claim) => claim.type === 'profile');
|
|
132
|
+
const kycUpdates = pick(user || {}, ['emailVerified', 'phoneVerified']);
|
|
133
|
+
|
|
134
|
+
// verify email kyc
|
|
135
|
+
if (isEmailKycRequired(blocklet) && !user?.emailVerified) {
|
|
136
|
+
const emailKyc = await getPassportVc({
|
|
137
|
+
blocklet,
|
|
138
|
+
claims,
|
|
139
|
+
challenge,
|
|
140
|
+
locale,
|
|
141
|
+
sourceAppPid,
|
|
142
|
+
types: ['VerifiedEmailCredential'],
|
|
143
|
+
});
|
|
144
|
+
if (!emailKyc) {
|
|
145
|
+
throw new Error(messages.missingEmailKyc[locale]);
|
|
146
|
+
}
|
|
147
|
+
const email = get(emailKyc, 'credentialSubject.kyc.subject');
|
|
148
|
+
if (user && user.email && user.email !== email) {
|
|
149
|
+
throw new Error(messages.emailMismatch[locale]);
|
|
150
|
+
}
|
|
151
|
+
if (!user && isEmailUniqueRequired(blocklet)) {
|
|
152
|
+
const isEmailUsed = await node.isEmailUsed({ teamDid, email, verified: true });
|
|
153
|
+
if (isEmailUsed) {
|
|
154
|
+
throw new Error(messages.emailAlreadyUsed[locale]);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
kycUpdates.emailVerified = true;
|
|
159
|
+
} else if (!user && profile?.email && isEmailUniqueRequired(blocklet)) {
|
|
160
|
+
const isEmailUsed = await node.isEmailUsed({ teamDid, email: profile.email, verified: false });
|
|
161
|
+
if (isEmailUsed) {
|
|
162
|
+
throw new Error(messages.emailAlreadyUsed[locale]);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// verify phone kyc
|
|
167
|
+
if (isPhoneKycRequired(blocklet) && !user?.phoneVerified) {
|
|
168
|
+
const phoneKyc = await getPassportVc({
|
|
169
|
+
blocklet,
|
|
170
|
+
claims,
|
|
171
|
+
challenge,
|
|
172
|
+
locale,
|
|
173
|
+
sourceAppPid,
|
|
174
|
+
types: ['VerifiedPhoneCredential'],
|
|
175
|
+
});
|
|
176
|
+
if (!phoneKyc) {
|
|
177
|
+
throw new Error(messages.missingPhoneKyc[locale]);
|
|
178
|
+
}
|
|
179
|
+
const phone = get(phoneKyc, 'credentialSubject.kyc.subject');
|
|
180
|
+
if (user && user.phone && user.phone !== phone) {
|
|
181
|
+
throw new Error(messages.phoneMismatch[locale]);
|
|
182
|
+
}
|
|
183
|
+
if (!user && isPhoneUniqueRequired(blocklet)) {
|
|
184
|
+
const isPhoneUsed = await node.isPhoneUsed({ teamDid, phone, verified: true });
|
|
185
|
+
if (isPhoneUsed) {
|
|
186
|
+
throw new Error(messages.phoneAlreadyUsed[locale]);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
kycUpdates.phoneVerified = true;
|
|
190
|
+
} else if (!user && profile?.phone && isPhoneUniqueRequired(blocklet)) {
|
|
191
|
+
const isPhoneUsed = await node.isPhoneUsed({ teamDid, phone: profile.phone, verified: false });
|
|
192
|
+
if (isPhoneUsed) {
|
|
193
|
+
throw new Error(messages.phoneAlreadyUsed[locale]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return kycUpdates;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
module.exports = {
|
|
201
|
+
isEmailKycRequired,
|
|
202
|
+
isOAuthKycTrusted,
|
|
203
|
+
isPhoneKycRequired,
|
|
204
|
+
isEmailUniqueRequired,
|
|
205
|
+
isPhoneUniqueRequired,
|
|
206
|
+
isProfileUrlSupported,
|
|
207
|
+
isProfileClaimRequired,
|
|
208
|
+
isOAuthEmailVerified,
|
|
209
|
+
getProfileItems,
|
|
210
|
+
getKycClaims,
|
|
211
|
+
verifyKycClaims,
|
|
212
|
+
getPassportVc,
|
|
213
|
+
};
|
package/api/routes/federated.js
CHANGED
|
@@ -37,7 +37,18 @@ function getAuditLogActorByFederatedSite(blocklet) {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
async function syncSwitchProfile(user, { node, teamDid, dataDir }) {
|
|
40
|
-
const tempUser = pick(user, [
|
|
40
|
+
const tempUser = pick(user, [
|
|
41
|
+
'did',
|
|
42
|
+
'pk',
|
|
43
|
+
'avatar',
|
|
44
|
+
'fullName',
|
|
45
|
+
'email',
|
|
46
|
+
'phone',
|
|
47
|
+
'url',
|
|
48
|
+
'inviter',
|
|
49
|
+
'emailVerified',
|
|
50
|
+
'phoneVerified',
|
|
51
|
+
]);
|
|
41
52
|
|
|
42
53
|
// 处理 avatar
|
|
43
54
|
if (tempUser.avatar) {
|
|
@@ -58,7 +69,6 @@ async function syncSwitchProfile(user, { node, teamDid, dataDir }) {
|
|
|
58
69
|
/**
|
|
59
70
|
* 处理站点群中某一站点推送的同步 connectAccount 的请求
|
|
60
71
|
*/
|
|
61
|
-
|
|
62
72
|
async function syncConnectAccount(user, { node, teamDid, dataDir, blocklet }) {
|
|
63
73
|
const tempUser = pick(user, [
|
|
64
74
|
'did',
|
|
@@ -71,7 +81,8 @@ async function syncConnectAccount(user, { node, teamDid, dataDir, blocklet }) {
|
|
|
71
81
|
'connectedAccount',
|
|
72
82
|
'sourceAppPid',
|
|
73
83
|
'inviter',
|
|
74
|
-
'
|
|
84
|
+
'emailVerified',
|
|
85
|
+
'phoneVerified',
|
|
75
86
|
]);
|
|
76
87
|
const masterSite = getFederatedMaster(blocklet);
|
|
77
88
|
|
|
@@ -142,7 +153,23 @@ async function pullUserAccount(user, { node, teamDid, blocklet }) {
|
|
|
142
153
|
|
|
143
154
|
if (!currentUser) return null;
|
|
144
155
|
|
|
145
|
-
const syncUser = pick(currentUser, [
|
|
156
|
+
const syncUser = pick(currentUser, [
|
|
157
|
+
'did',
|
|
158
|
+
'pk',
|
|
159
|
+
'fullName',
|
|
160
|
+
'email',
|
|
161
|
+
'phone',
|
|
162
|
+
'url',
|
|
163
|
+
'remark',
|
|
164
|
+
'sourceProvider',
|
|
165
|
+
'locale',
|
|
166
|
+
'approved',
|
|
167
|
+
'extra',
|
|
168
|
+
'sourceAppPid',
|
|
169
|
+
'inviter',
|
|
170
|
+
'emailVerified',
|
|
171
|
+
'phoneVerified',
|
|
172
|
+
]);
|
|
146
173
|
syncUser.avatar = getUserAvatarUrl(currentUser.avatar, blocklet);
|
|
147
174
|
syncUser.email = syncUser.email || '';
|
|
148
175
|
syncUser.connectedAccounts = currentUser.connectedAccounts.map((x) => {
|
|
@@ -532,6 +559,8 @@ module.exports = {
|
|
|
532
559
|
fullName: doc.fullName,
|
|
533
560
|
provider: provider || LOGIN_PROVIDER.WALLET,
|
|
534
561
|
walletOS,
|
|
562
|
+
emailVerified: doc.emailVerified,
|
|
563
|
+
phoneVerified: doc.phoneVerified,
|
|
535
564
|
},
|
|
536
565
|
{
|
|
537
566
|
...sessionConfig,
|
|
@@ -611,6 +640,8 @@ module.exports = {
|
|
|
611
640
|
// 这里是 member 登录了 master 的账号,对于 master 来说,其实还是使用 wallet 来登录的
|
|
612
641
|
provider: LOGIN_PROVIDER.WALLET,
|
|
613
642
|
walletOS,
|
|
643
|
+
emailVerified: newUser.emailVerified,
|
|
644
|
+
phoneVerified: newUser.phoneVerified,
|
|
614
645
|
},
|
|
615
646
|
{
|
|
616
647
|
...sessionConfig,
|
|
@@ -701,6 +732,8 @@ module.exports = {
|
|
|
701
732
|
provider: provider || LOGIN_PROVIDER.WALLET,
|
|
702
733
|
walletOS,
|
|
703
734
|
sourceAppPid: verifySite.appPid,
|
|
735
|
+
emailVerified: newUser.emailVerified,
|
|
736
|
+
phoneVerified: newUser.phoneVerified,
|
|
704
737
|
},
|
|
705
738
|
{
|
|
706
739
|
...sessionConfig,
|
package/api/routes/oauth.js
CHANGED
|
@@ -31,6 +31,7 @@ const { sendToUser } = require('../libs/notification');
|
|
|
31
31
|
const { isInvitedUserOnly, createTokenFn, getDidConnectVersion } = require('../util');
|
|
32
32
|
const { ApiError } = require('../util/error');
|
|
33
33
|
const federatedUtil = require('../util/federated');
|
|
34
|
+
const { isOAuthEmailVerified, isEmailUniqueRequired, isEmailKycRequired } = require('../libs/kyc');
|
|
34
35
|
|
|
35
36
|
const PREFIX = WELLKNOWN_SERVICE_PATH_PREFIX;
|
|
36
37
|
|
|
@@ -49,6 +50,7 @@ const translations = {
|
|
|
49
50
|
cantUnbindWalletAccount: '不能解绑钱包账户',
|
|
50
51
|
cantUnbindSourceProvider: '不能解绑源账户',
|
|
51
52
|
accountNotExist: '第三方登录的账户不存在,无法完成解绑操作',
|
|
53
|
+
emailUniqueRequired: '当前邮箱已经绑定过另一个账户,请更换邮箱',
|
|
52
54
|
},
|
|
53
55
|
en: {
|
|
54
56
|
needInviteToLogin: 'You need to be invited to login in to this app',
|
|
@@ -62,6 +64,7 @@ const translations = {
|
|
|
62
64
|
cantUnbindWalletAccount: 'Cannot unbind wallet provider',
|
|
63
65
|
cantUnbindSourceProvider: 'Cannot unbind source provider',
|
|
64
66
|
accountNotExist: "Connected account is not exist, can't finish disconnect",
|
|
67
|
+
emailUniqueRequired: 'Current email is already bind to another account, please change email',
|
|
65
68
|
},
|
|
66
69
|
};
|
|
67
70
|
|
|
@@ -83,6 +86,11 @@ async function getOAuthUserInfo({ blocklet, provider, token, idToken, code, appP
|
|
|
83
86
|
const oauthToken = await authClient.getToken({ code });
|
|
84
87
|
oauthInfo = await authClient.getProfile(oauthToken);
|
|
85
88
|
}
|
|
89
|
+
|
|
90
|
+
if (oauthInfo) {
|
|
91
|
+
oauthInfo.provider = provider;
|
|
92
|
+
}
|
|
93
|
+
|
|
86
94
|
return oauthInfo;
|
|
87
95
|
}
|
|
88
96
|
|
|
@@ -244,11 +252,23 @@ async function login(req, node, options) {
|
|
|
244
252
|
throw new ApiError(403, t('needInviteToLogin', locale));
|
|
245
253
|
}
|
|
246
254
|
|
|
255
|
+
if (isEmailUniqueRequired(blocklet)) {
|
|
256
|
+
const used = await node.isEmailUsed({
|
|
257
|
+
teamDid,
|
|
258
|
+
email: oauthInfo.email,
|
|
259
|
+
verified: isEmailKycRequired(blocklet),
|
|
260
|
+
});
|
|
261
|
+
if (used) {
|
|
262
|
+
throw new ApiError(400, t('emailUniqueRequired', locale));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
247
266
|
passportForLog = { name: 'Guest', role: 'guest' };
|
|
248
267
|
profile = {
|
|
249
268
|
fullName: oauthInfo.name,
|
|
250
269
|
email: oauthInfo.email,
|
|
251
270
|
avatar,
|
|
271
|
+
emailVerified: isOAuthEmailVerified(blocklet, oauthInfo),
|
|
252
272
|
};
|
|
253
273
|
doc = await node.loginUser({
|
|
254
274
|
teamDid,
|
|
@@ -336,7 +356,6 @@ async function login(req, node, options) {
|
|
|
336
356
|
}
|
|
337
357
|
|
|
338
358
|
const { createSessionToken } = initJwt(node, options);
|
|
339
|
-
|
|
340
359
|
const createToken = createTokenFn(createSessionToken);
|
|
341
360
|
const sessionConfig = blocklet.settings?.session || {};
|
|
342
361
|
const { sessionToken, refreshToken } = createToken(
|
|
@@ -348,6 +367,8 @@ async function login(req, node, options) {
|
|
|
348
367
|
fullName,
|
|
349
368
|
provider,
|
|
350
369
|
walletOS: 'web',
|
|
370
|
+
emailVerified: !!doc?.emailVerified,
|
|
371
|
+
phoneVerified: !!doc?.phoneVerified,
|
|
351
372
|
},
|
|
352
373
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
353
374
|
);
|
|
@@ -399,6 +420,17 @@ async function invite(req, node, options) {
|
|
|
399
420
|
userDid = currentUser.did;
|
|
400
421
|
userPk = currentUser.pk;
|
|
401
422
|
} else {
|
|
423
|
+
if (isEmailUniqueRequired(blocklet)) {
|
|
424
|
+
const used = await node.isEmailUsed({
|
|
425
|
+
teamDid,
|
|
426
|
+
email: oauthInfo.email,
|
|
427
|
+
verified: isEmailKycRequired(blocklet),
|
|
428
|
+
});
|
|
429
|
+
if (used) {
|
|
430
|
+
throw new ApiError(400, t('emailUniqueRequired', locale));
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
402
434
|
let avatar = oauthInfo.picture ? await getAvatarByUrl(oauthInfo.picture) : await getAvatarByEmail(oauthInfo.email);
|
|
403
435
|
avatar = await extractUserAvatar(avatar, { dataDir });
|
|
404
436
|
profile = {
|
|
@@ -406,12 +438,15 @@ async function invite(req, node, options) {
|
|
|
406
438
|
fullName: oauthInfo.name,
|
|
407
439
|
avatar: getUserAvatarUrl(baseUrl, avatar),
|
|
408
440
|
};
|
|
441
|
+
if (profile.email === oauthInfo.email && isOAuthEmailVerified(blocklet, oauthInfo)) {
|
|
442
|
+
profile.emailVerified = true;
|
|
443
|
+
}
|
|
409
444
|
}
|
|
410
445
|
|
|
411
446
|
const statusEndpointBaseUrl = joinURL(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX);
|
|
412
447
|
const endpoint = baseUrl;
|
|
413
448
|
|
|
414
|
-
const { passport, response, role, inviteInfo } = await handleInvitationReceive({
|
|
449
|
+
const { passport, response, role, inviteInfo, user } = await handleInvitationReceive({
|
|
415
450
|
node,
|
|
416
451
|
req,
|
|
417
452
|
endpoint,
|
|
@@ -532,13 +567,21 @@ async function invite(req, node, options) {
|
|
|
532
567
|
}
|
|
533
568
|
|
|
534
569
|
const { createSessionToken } = initJwt(node, options);
|
|
535
|
-
|
|
536
570
|
const createToken = createTokenFn(createSessionToken);
|
|
537
571
|
const sessionConfig = blocklet.settings?.session || {};
|
|
538
572
|
|
|
539
573
|
const { sessionToken, refreshToken } = createToken(
|
|
540
574
|
userDid,
|
|
541
|
-
{
|
|
575
|
+
{
|
|
576
|
+
secret,
|
|
577
|
+
passport,
|
|
578
|
+
role,
|
|
579
|
+
fullName: profile.fullName,
|
|
580
|
+
provider,
|
|
581
|
+
walletOS: 'web',
|
|
582
|
+
emailVerified: !!user?.emailVerified,
|
|
583
|
+
phoneVerified: !!user?.phoneVerified,
|
|
584
|
+
},
|
|
542
585
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
543
586
|
);
|
|
544
587
|
|
|
@@ -601,6 +644,10 @@ async function bind(req, node, options) {
|
|
|
601
644
|
avatar,
|
|
602
645
|
};
|
|
603
646
|
|
|
647
|
+
if (mergeProfile.email === oauthInfo.email && isOAuthEmailVerified(blocklet, oauthInfo)) {
|
|
648
|
+
mergeProfile.emailVerified = true;
|
|
649
|
+
}
|
|
650
|
+
|
|
604
651
|
const currentTime = new Date().toISOString();
|
|
605
652
|
|
|
606
653
|
const connectedAccount = {
|
|
@@ -775,9 +822,11 @@ module.exports = {
|
|
|
775
822
|
'name'
|
|
776
823
|
).map((x) => {
|
|
777
824
|
return {
|
|
778
|
-
...pick(x, ['id', 'name', 'title', 'role']),
|
|
825
|
+
...pick(x, ['id', 'name', 'title', 'role', 'scope', 'role']),
|
|
779
826
|
display: createPassportSvg({
|
|
780
|
-
|
|
827
|
+
scope: x.scope,
|
|
828
|
+
role: x.role,
|
|
829
|
+
title: x.scope === 'passport' ? x.title : x.name,
|
|
781
830
|
issuer: x.issuer.name,
|
|
782
831
|
issuerDid: x.issuer.id,
|
|
783
832
|
issuerAvatarUrl,
|
|
@@ -850,7 +899,16 @@ module.exports = {
|
|
|
850
899
|
const sessionConfig = blocklet.settings?.session || {};
|
|
851
900
|
const { sessionToken, refreshToken } = createToken(
|
|
852
901
|
userDid,
|
|
853
|
-
{
|
|
902
|
+
{
|
|
903
|
+
secret,
|
|
904
|
+
passport,
|
|
905
|
+
role: passport.role,
|
|
906
|
+
fullName: user?.fullName,
|
|
907
|
+
provider,
|
|
908
|
+
walletOS: 'web',
|
|
909
|
+
emailVerified: !!user?.emailVerified,
|
|
910
|
+
phoneVerified: !!user?.phoneVerified,
|
|
911
|
+
},
|
|
854
912
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
855
913
|
);
|
|
856
914
|
|
package/api/routes/openapi.js
CHANGED
|
@@ -4,8 +4,8 @@ const { BLOCKLET_OPEN_API_FILE, BLOCKLET_OPEN_API_FILE_JSON } = require('@blockl
|
|
|
4
4
|
const pMap = require('p-map');
|
|
5
5
|
const YAML = require('yaml');
|
|
6
6
|
const { joinURL } = require('ufo');
|
|
7
|
-
const {
|
|
8
|
-
const { types } = require('@ocap/mcrypto');
|
|
7
|
+
const { fromPublicKey } = require('@ocap/wallet');
|
|
8
|
+
const { types, Hasher } = require('@ocap/mcrypto');
|
|
9
9
|
|
|
10
10
|
const { api } = require('../libs/api');
|
|
11
11
|
|
|
@@ -25,7 +25,7 @@ async function getOpenAPIJSON(appDir) {
|
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
async function getComponentOpenAPIData(component
|
|
28
|
+
async function getComponentOpenAPIData(component) {
|
|
29
29
|
const { mountPoint } = component;
|
|
30
30
|
const appDir = component?.env?.appDir;
|
|
31
31
|
const { title, description, did } = component?.meta || {};
|
|
@@ -45,7 +45,10 @@ async function getComponentOpenAPIData(component, { generateDid }) {
|
|
|
45
45
|
Object.keys(pathItem).forEach((method) => {
|
|
46
46
|
const operation = pathItem[method];
|
|
47
47
|
operation.tags = [title];
|
|
48
|
-
const
|
|
48
|
+
const walletPk = Hasher.SHA3.hash256(JSON.stringify(['openapi', did, pathname, method]));
|
|
49
|
+
const operationWallet = fromPublicKey(walletPk, {
|
|
50
|
+
role: types.RoleType.ROLE_ANY,
|
|
51
|
+
});
|
|
49
52
|
operation['x-id'] = operationWallet.address;
|
|
50
53
|
operation['x-did'] = did;
|
|
51
54
|
operation['x-path'] = pathname;
|
|
@@ -87,7 +90,7 @@ function mergeOpenAPI(dataList, { blocklet }) {
|
|
|
87
90
|
};
|
|
88
91
|
}
|
|
89
92
|
|
|
90
|
-
async function generateOpenAPIData({ blocklet, did
|
|
93
|
+
async function generateOpenAPIData({ blocklet, did }) {
|
|
91
94
|
const blockletCompontList = blocklet?.children || [];
|
|
92
95
|
const appUrl = blocklet?.environmentObj?.BLOCKLET_APP_URL;
|
|
93
96
|
const healthCheckUrl = joinURL(appUrl, '.well-known/service/health');
|
|
@@ -100,15 +103,13 @@ async function generateOpenAPIData({ blocklet, did, generateDid }) {
|
|
|
100
103
|
if (did) {
|
|
101
104
|
const findComponent = runningCompontList.find((component) => component?.meta?.did === did);
|
|
102
105
|
if (findComponent) {
|
|
103
|
-
const result = getComponentOpenAPIData(findComponent, { baseUrl: appUrl
|
|
106
|
+
const result = getComponentOpenAPIData(findComponent, { baseUrl: appUrl });
|
|
104
107
|
return result;
|
|
105
108
|
}
|
|
106
109
|
return null;
|
|
107
110
|
}
|
|
108
111
|
// 多个 component 组合
|
|
109
|
-
const componentListData = await pMap(runningCompontList, (x) =>
|
|
110
|
-
getComponentOpenAPIData(x, { baseUrl: appUrl, generateDid })
|
|
111
|
-
);
|
|
112
|
+
const componentListData = await pMap(runningCompontList, (x) => getComponentOpenAPIData(x, { baseUrl: appUrl }));
|
|
112
113
|
const result = mergeOpenAPI(componentListData, { blocklet });
|
|
113
114
|
return result;
|
|
114
115
|
}
|
|
@@ -119,12 +120,7 @@ module.exports = {
|
|
|
119
120
|
app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/openapi.yml`, async (req, res) => {
|
|
120
121
|
const { did } = req.query;
|
|
121
122
|
const blocklet = await req.getBlocklet({ useCache: false });
|
|
122
|
-
const
|
|
123
|
-
const rootSk = permanentWallet.secretKey;
|
|
124
|
-
function generateDid(didPath) {
|
|
125
|
-
return fromAppDid(didPath, rootSk, types.RoleType.ROLE_ASSET);
|
|
126
|
-
}
|
|
127
|
-
const data = await generateOpenAPIData({ blocklet, did, generateDid });
|
|
123
|
+
const data = await generateOpenAPIData({ blocklet, did });
|
|
128
124
|
const ymlData = YAML.stringify(data);
|
|
129
125
|
res.setHeader('Content-Disposition', 'attachment; filename="openapi.yml"');
|
|
130
126
|
res.status(200).send(ymlData);
|
|
@@ -133,12 +129,7 @@ module.exports = {
|
|
|
133
129
|
app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/openapi.json`, async (req, res) => {
|
|
134
130
|
const { did } = req.query;
|
|
135
131
|
const blocklet = await req.getBlocklet({ useCache: false });
|
|
136
|
-
const
|
|
137
|
-
const rootSk = permanentWallet.secretKey;
|
|
138
|
-
function generateDid(didPath) {
|
|
139
|
-
return fromAppDid(didPath, rootSk, types.RoleType.ROLE_ASSET);
|
|
140
|
-
}
|
|
141
|
-
const data = await generateOpenAPIData({ blocklet, did, generateDid });
|
|
132
|
+
const data = await generateOpenAPIData({ blocklet, did });
|
|
142
133
|
res.status(200).json(data);
|
|
143
134
|
});
|
|
144
135
|
},
|
|
@@ -4,8 +4,8 @@ const { BLOCKLET_OPEN_COMPONENT_FILE, BLOCKLET_OPEN_COMPONENT_FILE_JSON } = requ
|
|
|
4
4
|
const pMap = require('p-map');
|
|
5
5
|
const YAML = require('yaml');
|
|
6
6
|
const { joinURL } = require('ufo');
|
|
7
|
-
const {
|
|
8
|
-
const {
|
|
7
|
+
const { types, Hasher } = require('@ocap/mcrypto');
|
|
8
|
+
const { fromPublicKey } = require('@ocap/wallet');
|
|
9
9
|
|
|
10
10
|
const { api } = require('../libs/api');
|
|
11
11
|
|
|
@@ -25,7 +25,7 @@ async function getOpenComponentJSON(appDir) {
|
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
async function getComponentOpenComponentData(component
|
|
28
|
+
async function getComponentOpenComponentData(component) {
|
|
29
29
|
const { mountPoint } = component;
|
|
30
30
|
const appDir = component?.env?.appDir;
|
|
31
31
|
const { title, description, did } = component?.meta || {};
|
|
@@ -43,7 +43,10 @@ async function getComponentOpenComponentData(component, { generateDid }) {
|
|
|
43
43
|
const mergedPathname = joinURL(mountPoint, pathname);
|
|
44
44
|
const pathItem = jsonData.paths[pathname];
|
|
45
45
|
pathItem.tags = [title];
|
|
46
|
-
const
|
|
46
|
+
const walletPk = Hasher.SHA3.hash256(JSON.stringify(['opencomponent', did, pathname]));
|
|
47
|
+
const itemWallet = fromPublicKey(walletPk, {
|
|
48
|
+
role: types.RoleType.ROLE_ANY,
|
|
49
|
+
});
|
|
47
50
|
pathItem['x-id'] = itemWallet.address;
|
|
48
51
|
pathItem['x-did'] = did;
|
|
49
52
|
pathItem['x-path'] = pathname;
|
|
@@ -83,7 +86,7 @@ function mergeOpenComponent(dataList, { blocklet }) {
|
|
|
83
86
|
};
|
|
84
87
|
}
|
|
85
88
|
|
|
86
|
-
async function generateOpenComponentData({ blocklet, did
|
|
89
|
+
async function generateOpenComponentData({ blocklet, did }) {
|
|
87
90
|
const blockletCompontList = blocklet?.children || [];
|
|
88
91
|
const appUrl = blocklet?.environmentObj?.BLOCKLET_APP_URL;
|
|
89
92
|
const healthCheckUrl = joinURL(appUrl, '.well-known/service/health');
|
|
@@ -96,14 +99,14 @@ async function generateOpenComponentData({ blocklet, did, generateDid }) {
|
|
|
96
99
|
if (did) {
|
|
97
100
|
const findComponent = runningCompontList.find((component) => component?.meta?.did === did);
|
|
98
101
|
if (findComponent) {
|
|
99
|
-
const result = getComponentOpenComponentData(findComponent, { baseUrl: appUrl
|
|
102
|
+
const result = getComponentOpenComponentData(findComponent, { baseUrl: appUrl });
|
|
100
103
|
return result;
|
|
101
104
|
}
|
|
102
105
|
return null;
|
|
103
106
|
}
|
|
104
107
|
// 多个 component 组合
|
|
105
108
|
const componentListData = await pMap(runningCompontList, (x) =>
|
|
106
|
-
getComponentOpenComponentData(x, { baseUrl: appUrl
|
|
109
|
+
getComponentOpenComponentData(x, { baseUrl: appUrl })
|
|
107
110
|
);
|
|
108
111
|
const result = mergeOpenComponent(componentListData, { blocklet });
|
|
109
112
|
return result;
|
|
@@ -115,12 +118,7 @@ module.exports = {
|
|
|
115
118
|
app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/opencomponent.yml`, async (req, res) => {
|
|
116
119
|
const { did } = req.query;
|
|
117
120
|
const blocklet = await req.getBlocklet({ useCache: false });
|
|
118
|
-
const
|
|
119
|
-
const rootSk = permanentWallet.secretKey;
|
|
120
|
-
function generateDid(didPath) {
|
|
121
|
-
return fromAppDid(didPath, rootSk, types.RoleType.ROLE_ASSET);
|
|
122
|
-
}
|
|
123
|
-
const data = await generateOpenComponentData({ blocklet, did, generateDid });
|
|
121
|
+
const data = await generateOpenComponentData({ blocklet, did });
|
|
124
122
|
const ymlData = YAML.stringify(data);
|
|
125
123
|
res.setHeader('Content-Disposition', 'attachment; filename="opencomponent.yml"');
|
|
126
124
|
res.status(200).send(ymlData);
|
|
@@ -129,12 +127,7 @@ module.exports = {
|
|
|
129
127
|
app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/opencomponent.json`, async (req, res) => {
|
|
130
128
|
const { did } = req.query;
|
|
131
129
|
const blocklet = await req.getBlocklet({ useCache: false });
|
|
132
|
-
const
|
|
133
|
-
const rootSk = permanentWallet.secretKey;
|
|
134
|
-
function generateDid(didPath) {
|
|
135
|
-
return fromAppDid(didPath, rootSk, types.RoleType.ROLE_ASSET);
|
|
136
|
-
}
|
|
137
|
-
const data = await generateOpenComponentData({ blocklet, did, generateDid });
|
|
130
|
+
const data = await generateOpenComponentData({ blocklet, did });
|
|
138
131
|
res.status(200).json(data);
|
|
139
132
|
});
|
|
140
133
|
},
|