@abtnode/blocklet-services 1.16.31-beta-52250475 → 1.16.31-beta-a0cc72cf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/libs/connect/session.js +365 -374
- package/api/routes/federated.js +13 -1
- package/api/routes/oauth.js +10 -4
- package/api/routes/user-session.js +1 -1
- package/api/routes/user.js +21 -26
- package/api/services/auth/connect/issue-passport.js +2 -1
- package/api/services/auth/connect/login.js +2 -1
- package/api/util/federated.js +1 -1
- package/api/validators/login.js +3 -0
- package/dist/assets/{Add-DMLXuapt.js → Add-I80IZ6n7.js} +1 -1
- package/dist/assets/{AddBox-CpBdwq7q.js → AddBox-DZneyqwz.js} +1 -1
- package/dist/assets/{Alert-DdUTjamT.js → Alert-zOnAbv2N.js} +1 -1
- package/dist/assets/{ArrowDropDown-DpF0L6m2.js → ArrowDropDown-BAI37_Gq.js} +1 -1
- package/dist/assets/{Avatar-Ba5K-SpV.js → Avatar-I4LrexTj.js} +1 -1
- package/dist/assets/{ButtonGroup-oqbT9mJ7.js → ButtonGroup-lq54G41C.js} +1 -1
- package/dist/assets/{CheckCircle-Df4UlXEP.js → CheckCircle-DYAGJy_x.js} +1 -1
- package/dist/assets/{ChevronRight-MsONzKko.js → ChevronRight-BRnAN7b1.js} +1 -1
- package/dist/assets/{Close-BzQI1nKM.js → Close-BTC0-_wc.js} +1 -1
- package/dist/assets/CloseOutlined-C9xrS2j0.js +1 -0
- package/dist/assets/{Delete-eYuUFe-a.js → Delete-cMnabl-R.js} +1 -1
- package/dist/assets/{DeleteOutline-avstszKw.js → DeleteOutline-BIO4C7JH.js} +1 -1
- package/dist/assets/{Done-CDaSY-gN.js → Done-O71rXdD5.js} +1 -1
- package/dist/assets/{Download-DA76-zAj.js → Download-DLpabTh2.js} +1 -1
- package/dist/assets/{Edit-DrnFKfrQ.js → Edit-CmcAptnE.js} +1 -1
- package/dist/assets/{EditIcon-FTgbeCiz.js → EditIcon-BuoKkmB1.js} +1 -1
- package/dist/assets/{Error-EtOO_F4K.js → Error-Dfzerimh.js} +1 -1
- package/dist/assets/{ExpandMore-CAfMRIG3.js → ExpandMore-C8uCTD8b.js} +1 -1
- package/dist/assets/{FilterList-CfRY6G_6.js → FilterList-D-UubHll.js} +1 -1
- package/dist/assets/{FormControl-CJxOqtCV.js → FormControl-OvOdEegG.js} +1 -1
- package/dist/assets/{FormControlLabel-BKsoLGHz.js → FormControlLabel-CihXnmsn.js} +1 -1
- package/dist/assets/{FormGroup-Chc5NbDQ.js → FormGroup-bSyoAX3O.js} +1 -1
- package/dist/assets/{Google-C72krpFT.js → Google-BGGVcwSc.js} +1 -1
- package/dist/assets/{Hidden-v7r91ILG.js → Hidden-BQDFSM76.js} +1 -1
- package/dist/assets/{InfoOutlined-D6TSS9ex.js → InfoOutlined-DBWAnpQx.js} +1 -1
- package/dist/assets/{InputAdornment-B1JGDyvY.js → InputAdornment-BD2B7KXz.js} +1 -1
- package/dist/assets/{InputLabel-Ds1qPSij.js → InputLabel-D84lrsDr.js} +1 -1
- package/dist/assets/{LastPage-5otHasfZ.js → LastPage-CYe3NEpf.js} +1 -1
- package/dist/assets/{Launch-CsBFqx2_.js → Launch-D4UdpeqK.js} +1 -1
- package/dist/assets/{LaunchOutlined-B4YtdACN.js → LaunchOutlined-CCNsoMJq.js} +1 -1
- package/dist/assets/{Link-JTCdKmrw.js → Link-yMVGUiQU.js} +1 -1
- package/dist/assets/{ListItemText-CJO6iQaY.js → ListItemText-CKNC4df7.js} +1 -1
- package/dist/assets/{LoadingButton-MZJ0ZCPE.js → LoadingButton-CQXrQzbw.js} +1 -1
- package/dist/assets/{LockIcon-BEsB4YZ5.js → LockIcon-HnjLCHYb.js} +1 -1
- package/dist/assets/{Loop-D4rRjL2T.js → Loop-BOj32-EN.js} +1 -1
- package/dist/assets/{MoreHoriz-B5rpG1Ew.js → MoreHoriz-BAiNkoIT.js} +1 -1
- package/dist/assets/{MoreVert-BqoNOXb1.js → MoreVert-Bh_9XRgK.js} +1 -1
- package/dist/assets/{OpenInNew-D9pZObQI.js → OpenInNew-C7zQWaJQ.js} +1 -1
- package/dist/assets/{Pagination-BiImme98.js → Pagination-BrpPdQzH.js} +1 -1
- package/dist/assets/{PlayArrow-DpuhKo6D.js → PlayArrow-C9C45emm.js} +1 -1
- package/dist/assets/{QuestionMarkCircle-D8s3T__Z.js → QuestionMarkCircle-DIZZk7yo.js} +1 -1
- package/dist/assets/{RadioGroup-D4XxZA_m.js → RadioGroup-sWPe7aB5.js} +1 -1
- package/dist/assets/{Search-eHBEQt38.js → Search-Cgo3NMCI.js} +1 -1
- package/dist/assets/{Select-CHwe79IG.js → Select-BBu0WXuJ.js} +1 -1
- package/dist/assets/{ServerLogo-Cg7KWr6l.js → ServerLogo-CWawb3Zp.js} +1 -1
- package/dist/assets/{Skeleton-LO2AMjQj.js → Skeleton-CkIVGU1D.js} +1 -1
- package/dist/assets/{Slider-D_aaap0D.js → Slider-Cn9FLGlV.js} +1 -1
- package/dist/assets/{Stepper-Cn0ehU0z.js → Stepper-C_FjBtqi.js} +1 -1
- package/dist/assets/{TextField-By686O81.js → TextField-CJ7QYMjw.js} +1 -1
- package/dist/assets/{Toolbar-CILlK-1t.js → Toolbar-Q23C-iDI.js} +1 -1
- package/dist/assets/{ViewList-DOAqHfHm.js → ViewList-BoKWsY80.js} +1 -1
- package/dist/assets/{access-control-YiOVUeX5.js → access-control-EwNEzlpi.js} +1 -1
- package/dist/assets/{actions-BoMQPbbF.js → actions-BKSdyNqT.js} +1 -1
- package/dist/assets/{add-component-core-C3-hSwf4.js → add-component-core-RC7Fs2pT.js} +1 -1
- package/dist/assets/{add-resource-YzQQokOB.js → add-resource-DIR7_dPH.js} +1 -1
- package/dist/assets/{addon-BMJifOIu.js → addon-ONOe2S8L.js} +1 -1
- package/dist/assets/{analytics-Mv3diYQv.js → analytics-Bhag2G5L.js} +1 -1
- package/dist/assets/api-BSu5xlAU.js +1 -0
- package/dist/assets/{ar-CqvGG4eC.js → ar-2JePd-i1.js} +1 -1
- package/dist/assets/{audit-logs-BNNOk6hr.js → audit-logs-BU-xvmln.js} +1 -1
- package/dist/assets/{button-jtk50dQY.js → button-7TJATba9.js} +1 -1
- package/dist/assets/{click-to-copy-CuY68HMG.js → click-to-copy-Dl9rmVPj.js} +1 -1
- package/dist/assets/{complete-bFHLAkpC.js → complete-DkNOyV_P.js} +1 -1
- package/dist/assets/{component-BaAw_jvb.js → component-BXR5INzc.js} +1 -1
- package/dist/assets/{config-CL6WfXG0.js → config-Plcj7Z1g.js} +1 -1
- package/dist/assets/{config-BHCviFXO.js → config-fW9tZ5OS.js} +1 -1
- package/dist/assets/{config-navigation-DOxLg4SG.js → config-navigation-B48CL-zI.js} +1 -1
- package/dist/assets/{confirm-Dx6jUaOz.js → confirm-3NbF1L_x.js} +1 -1
- package/dist/assets/{connect-W750gtDi.js → connect-CbCtfK-J.js} +1 -1
- package/dist/assets/{connect-CdF3A2Vn.js → connect-aFCVU3El.js} +1 -1
- package/dist/assets/{connect-to-DSVNCjA-.js → connect-to-EW7Q1E_v.js} +1 -1
- package/dist/assets/{content-layout-BEZyVpjO.js → content-layout-Cc54lTYS.js} +1 -1
- package/dist/assets/{dashboard-CigfHyBK.js → dashboard-BKagq2iF.js} +3 -3
- package/dist/assets/{de-l0XzFKav.js → de-DFRVy5eA.js} +1 -1
- package/dist/assets/{did-address-CR96fGSF.js → did-address-DKoES_ji.js} +1 -1
- package/dist/assets/{domain-DvAmfnwX.js → domain-BgClmH_C.js} +1 -1
- package/dist/assets/{domain-list-BFAh6gG5.js → domain-list-CvFnbmld.js} +1 -1
- package/dist/assets/{es-DYmEeFzA.js → es-D3TLX5Mb.js} +1 -1
- package/dist/assets/{exchange-passport-C9lSXYeG.js → exchange-passport-B464PWKR.js} +1 -1
- package/dist/assets/{fallback-DVHgA8PG.js → fallback-CBYR9h-e.js} +1 -1
- package/dist/assets/{format-error-xm5q5N3Z.js → format-error-BaAV9G7k.js} +1 -1
- package/dist/assets/{fr-DwS-xj4v.js → fr-B2p5dLWr.js} +1 -1
- package/dist/assets/{fuel-B2bKQ7Ww.js → fuel-BDHaADt3.js} +1 -1
- package/dist/assets/{fullpage-9fehs0lR.js → fullpage-BnFto_Qs.js} +1 -1
- package/dist/assets/{hi-Dj91QHv6.js → hi-DmXVnjfE.js} +1 -1
- package/dist/assets/{home-CVEpIfo3.js → home-a6Wm9NpF.js} +1 -1
- package/dist/assets/{id-CzhlCzfQ.js → id-BPCkzz44.js} +1 -1
- package/dist/assets/{iframe-4KnzoKaC.js → iframe-CBtn_TBO.js} +1 -1
- package/dist/assets/{index-DFAKgndM.js → index-8gFOBGo_.js} +1 -1
- package/dist/assets/{index-DbFNRcRj.js → index-B3paoq5_.js} +1 -1
- package/dist/assets/index-B4hUQJhX.js +16 -0
- package/dist/assets/{index-Da_LrvSz.js → index-BDlLDYvt.js} +3 -3
- package/dist/assets/{index-3IKYL1th.js → index-BKLCLOA9.js} +1 -1
- package/dist/assets/{index-3TcO2NHG.js → index-BOgiLbtH.js} +1 -1
- package/dist/assets/{index-C01E65Yy.js → index-BpVGDF04.js} +1 -1
- package/dist/assets/{index-CplLRft2.js → index-BtM-vyTe.js} +1 -1
- package/dist/assets/{index-CPYtoS2i.js → index-C0cETyyP.js} +1 -1
- package/dist/assets/{index-J--b5UMY.js → index-C80uWXRm.js} +1 -1
- package/dist/assets/{index-Cggmiiia.js → index-CeJkM0v0.js} +112 -118
- package/dist/assets/{index-ChjVC0V6.js → index-CetmzgXE.js} +1 -1
- package/dist/assets/{index-DnemmBZZ.js → index-CqAbJ70W.js} +1 -1
- package/dist/assets/{index-Z80N-6o6.js → index-CuelF_jl.js} +1 -1
- package/dist/assets/{index-Dm5LygxH.js → index-Cwh-4NKd.js} +1 -1
- package/dist/assets/{index-CzyLZl7H.js → index-D4pJnFVI.js} +24 -24
- package/dist/assets/{index-CtsIzdJq.js → index-DF3k62Ty.js} +1 -1
- package/dist/assets/{index-BHBa5bY_.js → index-DGtbPi0N.js} +1 -1
- package/dist/assets/{index-Cc3xWU8h.js → index-DLia2Jhf.js} +1 -1
- package/dist/assets/{index-BLG5zTvA.js → index-DMw4Feqc.js} +1 -1
- package/dist/assets/{index-7ATAUQCS.js → index-DVbwRv7P.js} +1 -1
- package/dist/assets/index-DXjrORHu.js +262 -0
- package/dist/assets/{index-BJflKzAj.js → index-DaCuyf8Z.js} +1 -1
- package/dist/assets/{index-Ro4L6Nk9.js → index-DdCK795w.js} +1 -1
- package/dist/assets/{index-Dnz1P7hS.js → index-DePrwIuq.js} +1 -1
- package/dist/assets/{index-DFxBHRuN.js → index-KzRn9Uki.js} +1 -1
- package/dist/assets/{index-BZeVpmIU.js → index-N5X8rYLb.js} +1 -1
- package/dist/assets/{index-xFQdePlH.js → index-NJO-AV3k.js} +4 -4
- package/dist/assets/{index-BIwlKqnv.js → index-R_qcDhvO.js} +1 -1
- package/dist/assets/{index-tZwe6kGH.js → index-agl_dRQV.js} +6 -6
- package/dist/assets/{index-BjygIrih.js → index-gGHBBe5W.js} +1 -1
- package/dist/assets/{index-Cx6pRmO2.js → index-rA68FgXF.js} +1 -1
- package/dist/assets/{index.es-Bu678ogX.js → index.es-DFdctp2x.js} +1 -1
- package/dist/assets/{index.esm-eUQd5uNf.js → index.esm-CFsU8w0K.js} +1 -1
- package/dist/assets/{invitation-BtBp97Li.js → invitation-BlOWLFne.js} +1 -1
- package/dist/assets/{invite-D6nXY3dB.js → invite-CFlZFfg1.js} +1 -1
- package/dist/assets/{issue-passport-NVB_pTUn.js → issue-passport-St9nHFvC.js} +1 -1
- package/dist/assets/{item-BvTmy-2T.js → item-DOgjriFM.js} +1 -1
- package/dist/assets/{ja-Ut-jFS9r.js → ja-DdBhyqmR.js} +1 -1
- package/dist/assets/{jss-plugin-props-sort.esm-DF2UeHPM.js → jss-plugin-props-sort.esm-c-SBfCOD.js} +1 -1
- package/dist/assets/{ko-Clp4qzRT.js → ko-DagkAgw5.js} +1 -1
- package/dist/assets/{launch-result-message--yAIU8ij.js → launch-result-message-D3CziAcu.js} +1 -1
- package/dist/assets/{layout-CfszkMaR.js → layout-MACoKNsG.js} +1 -1
- package/dist/assets/{list-header-BvVRSRDr.js → list-header-DhwSnJnp.js} +1 -1
- package/dist/assets/localization-xFD_U4gq.js +1 -0
- package/dist/assets/{log--54sjPHz.js → log-B-JblZ0r.js} +1 -1
- package/dist/assets/login-C83bYG8j.js +1 -0
- package/dist/assets/{login-oauth-callback-D6HMi3t4.js → login-oauth-callback-Ctd8Dcwv.js} +1 -1
- package/dist/assets/{logo-uploader-Ct05IBgW.js → logo-uploader-rFAlv-AM.js} +3 -3
- package/dist/assets/{lost-passport-DFkMMATo.js → lost-passport-4ilrc0t6.js} +3 -3
- package/dist/assets/{lottie-CHlQE8LI.js → lottie-Bs_qDpq1.js} +1 -1
- package/dist/assets/{notifications-DNefq6Ai.js → notifications-B2TXlNM3.js} +1 -1
- package/dist/assets/{open-window-Hoovi1SQ.js → open-window-BKDECXFb.js} +1 -1
- package/dist/assets/{overview-C99SD8Sj.js → overview-CTaMouVs.js} +1 -1
- package/dist/assets/{page-header-BcMcWChj.js → page-header-Djdf8MqY.js} +1 -1
- package/dist/assets/{permission-CoUl_-TD.js → permission-1n-2KaUs.js} +1 -1
- package/dist/assets/{preferences-BhQwvtNs.js → preferences-CRyQEGdV.js} +1 -1
- package/dist/assets/{pt-BXaJbqdY.js → pt-DTmAqAWs.js} +1 -1
- package/dist/assets/publish-resource-CD04R7uB.js +1 -0
- package/dist/assets/{react-CM36OPYv.js → react-CRxH9paf.js} +3 -3
- package/dist/assets/{redux-CmQ0AupQ.js → redux-C8lvFe8Y.js} +1 -1
- package/dist/assets/resource-dialog-eUQ9Rieo.js +57 -0
- package/dist/assets/{ru-p_K_7IoQ.js → ru-BZQlsXeO.js} +1 -1
- package/dist/assets/sdk-BXUiACrc.js +1 -0
- package/dist/assets/{selector-DplhIXMq.js → selector-BLtj8aBh.js} +1 -1
- package/dist/assets/session-Dan-0IB6.js +1 -0
- package/dist/assets/{setup-CHeBPg1W.js → setup-Bh9EEaAK.js} +3 -3
- package/dist/assets/{shorten-label-Bfc9PQs9.js → shorten-label-DjqkCLzY.js} +1 -1
- package/dist/assets/{slicedToArray-ZTJkdcdS.js → slicedToArray-CFnOoRku.js} +1 -1
- package/dist/assets/{spaces-BKVgtwre.js → spaces-sWb-sM6K.js} +1 -1
- package/dist/assets/{start-Bma6-tzj.js → start-DM_Zrd60.js} +1 -1
- package/dist/assets/{step-actions-CZsxCY_f.js → step-actions-ClgpxDjL.js} +1 -1
- package/dist/assets/{studio-BG-LwJ0Y.js → studio-8ExST0OO.js} +1 -1
- package/dist/assets/{switch-control-BQicjBlL.js → switch-control-Ci_o7kPC.js} +1 -1
- package/dist/assets/{th-BJT9w_Lk.js → th-DSRLorcE.js} +1 -1
- package/dist/assets/{toUpper-Cl4b2ZOs.js → toUpper-CSIvaKYq.js} +1 -1
- package/dist/assets/{transfer-iCxgFgdA.js → transfer-Dp2qO4AW.js} +1 -1
- package/dist/assets/{uniqBy-Depm40zB.js → uniqBy-DKCUtl0E.js} +1 -1
- package/dist/assets/{unsubscribe-j4j95BgM.js → unsubscribe-YG--STBD.js} +1 -1
- package/dist/assets/{url-join-CXExeXLp.js → url-join-BXSzjowB.js} +1 -1
- package/dist/assets/use-blocklet-info-for-connect-did-spaces-D8nRG2iM.js +1 -0
- package/dist/assets/{use-mobile-Bjgo--1J.js → use-mobile-CDGh6sE-.js} +1 -1
- package/dist/assets/{useAsync-BrIwhlfT.js → useAsync-CnzzTKxD.js} +1 -1
- package/dist/assets/{useFormControl-xR1NlgHj.js → useFormControl-BFbYcjEq.js} +1 -1
- package/dist/assets/{useLocalStorage-C1CX-JWm.js → useLocalStorage-Cw0scMnB.js} +1 -1
- package/dist/assets/{useSetState-Buep2Jkr.js → useSetState-DnqVazcm.js} +1 -1
- package/dist/assets/{useSlot-DJoDEpM7.js → useSlot-CBKrwC9m.js} +1 -1
- package/dist/assets/{useSlotProps-thaabt4w.js → useSlotProps-D1Us3MLI.js} +1 -1
- package/dist/assets/{useThemeProps-DthQbzYX.js → useThemeProps-C4TUmygR.js} +1 -1
- package/dist/assets/user-center-Cgd_P5Em.js +1 -0
- package/dist/assets/{user-sessions-ChQlFWXn.js → user-sessions-D_vg4EZo.js} +1 -1
- package/dist/assets/{util-BKJ5oRJz.js → util-Bfxkvo2e.js} +1 -1
- package/dist/assets/{vi-CycHlNkN.js → vi-dE7BhTCc.js} +1 -1
- package/dist/assets/wrap-locale-Cm_sNVY7.js +1 -0
- package/dist/assets/{zh-Dv1l1HNj.js → zh-DfGqeTts.js} +1 -1
- package/dist/assets/{zh-tw-44W5osxR.js → zh-tw-COZAaB9V.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +38 -38
- package/dist/assets/CloseOutlined-CcRedm-I.js +0 -1
- package/dist/assets/api-jAQ8N-C_.js +0 -1
- package/dist/assets/index-BvJGY_nw.js +0 -16
- package/dist/assets/index-CcMsQvPf.js +0 -262
- package/dist/assets/localization-CdHA54kI.js +0 -1
- package/dist/assets/login-eHr1AdTW.js +0 -1
- package/dist/assets/publish-resource-BrX6QZZv.js +0 -1
- package/dist/assets/resource-dialog-DPp8WhH6.js +0 -57
- package/dist/assets/sdk-SqTk_6RZ.js +0 -1
- package/dist/assets/session-B20aBevE.js +0 -1
- package/dist/assets/use-blocklet-info-for-connect-did-spaces-ByFtSRMu.js +0 -1
- package/dist/assets/user-center-LFYa8NAO.js +0 -1
- package/dist/assets/wrap-locale-B9-80Orf.js +0 -1
|
@@ -331,422 +331,391 @@ module.exports = {
|
|
|
331
331
|
return claims;
|
|
332
332
|
},
|
|
333
333
|
|
|
334
|
-
onApprove:
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
* @return {*}
|
|
355
|
-
*/
|
|
356
|
-
async ({
|
|
357
|
-
node,
|
|
358
|
-
request,
|
|
359
|
-
locale,
|
|
360
|
-
challenge,
|
|
361
|
-
userDid,
|
|
362
|
-
userPk,
|
|
363
|
-
claims,
|
|
364
|
-
baseUrl,
|
|
365
|
-
createSessionToken,
|
|
366
|
-
componentId,
|
|
367
|
-
action,
|
|
368
|
-
visitorId,
|
|
369
|
-
}) => {
|
|
370
|
-
/** @type {import('@abtnode/client').BlockletState} */
|
|
371
|
-
const blocklet = await request.getBlocklet();
|
|
372
|
-
const blockletInfo = await request.getBlockletInfo();
|
|
373
|
-
const { wallet, secret, name, passportColor, did: teamDid } = blockletInfo;
|
|
374
|
-
const sourceAppPid = getSourceAppPid(request);
|
|
375
|
-
|
|
376
|
-
// Check user approved
|
|
377
|
-
const currentUser = await getUserWithinFederated(
|
|
378
|
-
{ sourceAppPid, teamDid, userDid, userPk },
|
|
379
|
-
{ node, blocklet }
|
|
380
|
-
);
|
|
381
|
-
if (currentUser && !currentUser.approved) {
|
|
382
|
-
throw new Error(messages.notAllowedAppUser[locale]);
|
|
383
|
-
}
|
|
334
|
+
onApprove: async ({
|
|
335
|
+
node,
|
|
336
|
+
request,
|
|
337
|
+
locale,
|
|
338
|
+
challenge,
|
|
339
|
+
userDid,
|
|
340
|
+
userPk,
|
|
341
|
+
claims,
|
|
342
|
+
baseUrl,
|
|
343
|
+
createSessionToken,
|
|
344
|
+
componentId,
|
|
345
|
+
action,
|
|
346
|
+
visitorId,
|
|
347
|
+
inviter,
|
|
348
|
+
}) => {
|
|
349
|
+
/** @type {import('@abtnode/client').BlockletState} */
|
|
350
|
+
const blocklet = await request.getBlocklet();
|
|
351
|
+
const blockletInfo = await request.getBlockletInfo();
|
|
352
|
+
const { wallet, secret, name, passportColor, did: teamDid } = blockletInfo;
|
|
353
|
+
const sourceAppPid = getSourceAppPid(request);
|
|
384
354
|
|
|
385
|
-
|
|
386
|
-
|
|
355
|
+
// Check user approved
|
|
356
|
+
const currentUser = await getUserWithinFederated({ sourceAppPid, teamDid, userDid, userPk }, { node, blocklet });
|
|
357
|
+
if (currentUser && !currentUser.approved) {
|
|
358
|
+
throw new Error(messages.notAllowedAppUser[locale]);
|
|
359
|
+
}
|
|
387
360
|
|
|
388
|
-
|
|
389
|
-
|
|
361
|
+
const realDid = currentUser?.did || userDid;
|
|
362
|
+
const realPk = currentUser?.pk || userPk;
|
|
390
363
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
let invitedUserOnly = false;
|
|
394
|
-
let defaultRole = ROLES.GUEST;
|
|
395
|
-
let defaultTtl = 0;
|
|
396
|
-
let defaultTtlPolicy = 'never';
|
|
397
|
-
let issuePassport = false;
|
|
364
|
+
// Get auth config
|
|
365
|
+
const authConfig = (await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId })) || {};
|
|
398
366
|
|
|
399
|
-
|
|
400
|
-
|
|
367
|
+
let vc;
|
|
368
|
+
let nftState;
|
|
369
|
+
let invitedUserOnly = false;
|
|
370
|
+
let defaultRole = ROLES.GUEST;
|
|
371
|
+
let defaultTtl = 0;
|
|
372
|
+
let defaultTtlPolicy = 'never';
|
|
373
|
+
let issuePassport = false;
|
|
401
374
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
vc = await getPassportVc({
|
|
405
|
-
blocklet,
|
|
406
|
-
claims,
|
|
407
|
-
challenge,
|
|
408
|
-
locale,
|
|
409
|
-
sourceAppPid,
|
|
410
|
-
});
|
|
411
|
-
[invitedUserOnly, defaultRole, issuePassport] = await isInvitedUserOnly(authConfig, node, teamDid);
|
|
412
|
-
if (invitedUserOnly && !vc) {
|
|
413
|
-
throw new Error(messages.missingCredentialClaim[locale]);
|
|
414
|
-
}
|
|
415
|
-
} else if (action === 'exchangePassport') {
|
|
416
|
-
const claim = claims.find((x) => x.type === 'asset');
|
|
417
|
-
const isConnected = await node.isConnectedAccount({ teamDid, did: claim.asset });
|
|
418
|
-
if (isConnected) {
|
|
419
|
-
throw new Error(messages.nftAlreadyUsed[locale]);
|
|
420
|
-
}
|
|
375
|
+
const provider = getLoginProvider(request);
|
|
376
|
+
const masterSite = getFederatedMaster(blocklet);
|
|
421
377
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
378
|
+
// Get passport vc
|
|
379
|
+
if (action === 'login') {
|
|
380
|
+
vc = await getPassportVc({
|
|
381
|
+
blocklet,
|
|
382
|
+
claims,
|
|
383
|
+
challenge,
|
|
384
|
+
locale,
|
|
385
|
+
sourceAppPid,
|
|
386
|
+
});
|
|
387
|
+
[invitedUserOnly, defaultRole, issuePassport] = await isInvitedUserOnly(authConfig, node, teamDid);
|
|
388
|
+
if (invitedUserOnly && !vc) {
|
|
389
|
+
throw new Error(messages.missingCredentialClaim[locale]);
|
|
390
|
+
}
|
|
391
|
+
} else if (action === 'exchangePassport') {
|
|
392
|
+
const claim = claims.find((x) => x.type === 'asset');
|
|
393
|
+
const isConnected = await node.isConnectedAccount({ teamDid, did: claim.asset });
|
|
394
|
+
if (isConnected) {
|
|
395
|
+
throw new Error(messages.nftAlreadyUsed[locale]);
|
|
396
|
+
}
|
|
427
397
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
398
|
+
nftState = await verifyNFT({ claims, challenge, locale, chainHost: MAIN_CHAIN_ENDPOINT });
|
|
399
|
+
const matchFactory = blocklet.trustedFactories.find((x) => x.factoryAddress === nftState.parent);
|
|
400
|
+
if (!matchFactory) {
|
|
401
|
+
throw new Error(messages.invalidNftParent[locale]);
|
|
432
402
|
}
|
|
433
403
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
}
|
|
440
|
-
if (defaultTtlPolicy === 'exchange') {
|
|
441
|
-
expirationDate = +new Date() + defaultTtl;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
404
|
+
defaultRole = matchFactory.passport.role;
|
|
405
|
+
defaultTtl = matchFactory.passport.ttl;
|
|
406
|
+
defaultTtlPolicy = matchFactory.passport.ttlPolicy;
|
|
407
|
+
issuePassport = true;
|
|
408
|
+
}
|
|
444
409
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
410
|
+
if (issuePassport) {
|
|
411
|
+
let expirationDate;
|
|
412
|
+
if (nftState && defaultTtl) {
|
|
413
|
+
if (defaultTtlPolicy === 'mint') {
|
|
414
|
+
expirationDate = +new Date(nftState.context.genesisTime) + defaultTtl;
|
|
415
|
+
}
|
|
416
|
+
if (defaultTtlPolicy === 'exchange') {
|
|
417
|
+
expirationDate = +new Date() + defaultTtl;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
451
420
|
|
|
452
|
-
|
|
421
|
+
logger.info(`issue passport to user at the ${action} workflow`, {
|
|
422
|
+
role: defaultRole,
|
|
423
|
+
expire: expirationDate,
|
|
424
|
+
policy: defaultTtlPolicy,
|
|
425
|
+
ttl: defaultTtl,
|
|
426
|
+
});
|
|
453
427
|
|
|
454
|
-
|
|
455
|
-
issuerName: name,
|
|
456
|
-
issuerWallet: wallet,
|
|
457
|
-
issuerAvatarUrl: getAppAvatarUrl(baseUrl),
|
|
458
|
-
ownerDid: realDid,
|
|
459
|
-
passport: await createPassport({
|
|
460
|
-
name: defaultRole,
|
|
461
|
-
node,
|
|
462
|
-
teamDid,
|
|
463
|
-
locale,
|
|
464
|
-
endpoint: baseUrl,
|
|
465
|
-
}),
|
|
466
|
-
endpoint: getPassportStatusEndpoint({
|
|
467
|
-
baseUrl: joinURL(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX),
|
|
468
|
-
userDid: realDid,
|
|
469
|
-
teamDid,
|
|
470
|
-
}),
|
|
471
|
-
ownerProfile: profile,
|
|
472
|
-
preferredColor: passportColor,
|
|
473
|
-
expirationDate: expirationDate ? new Date(expirationDate).toISOString() : undefined,
|
|
474
|
-
});
|
|
475
|
-
}
|
|
428
|
+
const profile = claims.find((x) => x.type === 'profile');
|
|
476
429
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
430
|
+
vc = createPassportVC({
|
|
431
|
+
issuerName: name,
|
|
432
|
+
issuerWallet: wallet,
|
|
433
|
+
issuerAvatarUrl: getAppAvatarUrl(baseUrl),
|
|
434
|
+
ownerDid: realDid,
|
|
435
|
+
passport: await createPassport({
|
|
436
|
+
name: defaultRole,
|
|
437
|
+
node,
|
|
438
|
+
teamDid,
|
|
439
|
+
locale,
|
|
440
|
+
endpoint: baseUrl,
|
|
441
|
+
}),
|
|
442
|
+
endpoint: getPassportStatusEndpoint({
|
|
443
|
+
baseUrl: joinURL(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX),
|
|
444
|
+
userDid: realDid,
|
|
445
|
+
teamDid,
|
|
446
|
+
}),
|
|
447
|
+
ownerProfile: profile,
|
|
448
|
+
preferredColor: passportColor,
|
|
449
|
+
expirationDate: expirationDate ? new Date(expirationDate).toISOString() : undefined,
|
|
450
|
+
});
|
|
451
|
+
}
|
|
482
452
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
453
|
+
// Get user passport from vc
|
|
454
|
+
let passport = vc ? createUserPassport(vc) : null;
|
|
455
|
+
if (currentUser && passport && isUserPassportRevoked(currentUser, passport)) {
|
|
456
|
+
throw new Error(messages.passportRevoked[locale](passport.title, name));
|
|
457
|
+
}
|
|
486
458
|
|
|
487
|
-
|
|
459
|
+
// Get role
|
|
460
|
+
const role = await getRoleFromVC({ vc, node, locale, blocklet, teamDid, sourceAppPid });
|
|
461
|
+
await validateRole({ role, authConfig, locale, node, teamDid });
|
|
488
462
|
|
|
489
|
-
|
|
490
|
-
passport = vc ? createUserPassport(vc, { role }) : null;
|
|
463
|
+
checkAppOwner({ role, blocklet, userDid, locale });
|
|
491
464
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
? {
|
|
495
|
-
provider: LOGIN_PROVIDER.NFT,
|
|
496
|
-
did: nftState.address,
|
|
497
|
-
owner: nftState.owner,
|
|
498
|
-
firstLoginAt: now,
|
|
499
|
-
lastLoginAt: now,
|
|
500
|
-
}
|
|
501
|
-
: null;
|
|
465
|
+
// Recreate passport with correct role
|
|
466
|
+
passport = vc ? createUserPassport(vc, { role }) : null;
|
|
502
467
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
468
|
+
const now = new Date().toISOString();
|
|
469
|
+
const connectedNft = nftState
|
|
470
|
+
? {
|
|
471
|
+
provider: LOGIN_PROVIDER.NFT,
|
|
472
|
+
did: nftState.address,
|
|
473
|
+
owner: nftState.owner,
|
|
474
|
+
firstLoginAt: now,
|
|
475
|
+
lastLoginAt: now,
|
|
476
|
+
}
|
|
477
|
+
: null;
|
|
506
478
|
|
|
507
|
-
|
|
479
|
+
let fullName = currentUser?.fullName;
|
|
480
|
+
// Update profile
|
|
481
|
+
const passportForLog = passport || { name: 'Guest', role: 'guest' };
|
|
508
482
|
|
|
509
|
-
|
|
510
|
-
const profile = claims.find((x) => x.type === 'profile');
|
|
483
|
+
const connectAccount = { provider, did: userDid, pk: userPk };
|
|
511
484
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
}
|
|
485
|
+
let updatedUser;
|
|
486
|
+
const profile = claims.find((x) => x.type === 'profile');
|
|
515
487
|
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
user: {
|
|
520
|
-
did: currentUser.did,
|
|
521
|
-
pk: currentUser.pk,
|
|
522
|
-
locale,
|
|
523
|
-
passport,
|
|
524
|
-
sourceAppPid,
|
|
525
|
-
lastLoginIp: getRequestIP(request),
|
|
526
|
-
connectedAccount: [connectAccount, connectedNft],
|
|
527
|
-
...profile,
|
|
528
|
-
avatar: await extractUserAvatar(get(profile, 'avatar'), {
|
|
529
|
-
dataDir: blocklet.env.dataDir,
|
|
530
|
-
}),
|
|
531
|
-
},
|
|
532
|
-
});
|
|
533
|
-
await node.createAuditLog(
|
|
534
|
-
{
|
|
535
|
-
action,
|
|
536
|
-
args: { teamDid, userDid: realDid, passport: passportForLog, provider, sourceAppPid },
|
|
537
|
-
context: formatContext(Object.assign(request, { user: updatedUser })),
|
|
538
|
-
result: updatedUser,
|
|
539
|
-
},
|
|
540
|
-
node
|
|
541
|
-
);
|
|
542
|
-
} else {
|
|
543
|
-
// Create user
|
|
544
|
-
fullName = profile.fullName;
|
|
488
|
+
if (profile) {
|
|
489
|
+
profile.url = profile?.url || '';
|
|
490
|
+
}
|
|
545
491
|
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
user: {
|
|
549
|
-
...profile,
|
|
550
|
-
avatar: await extractUserAvatar(get(profile, 'avatar'), {
|
|
551
|
-
dataDir: blocklet.env.dataDir,
|
|
552
|
-
}),
|
|
553
|
-
did: realDid,
|
|
554
|
-
pk: realPk,
|
|
555
|
-
locale,
|
|
556
|
-
passport,
|
|
557
|
-
sourceAppPid,
|
|
558
|
-
lastLoginIp: getRequestIP(request),
|
|
559
|
-
connectedAccount: [connectAccount, connectedNft],
|
|
560
|
-
},
|
|
561
|
-
});
|
|
562
|
-
await node.createAuditLog(
|
|
563
|
-
{
|
|
564
|
-
action: 'addUser',
|
|
565
|
-
args: {
|
|
566
|
-
teamDid,
|
|
567
|
-
userDid: realDid,
|
|
568
|
-
sourceAppPid,
|
|
569
|
-
provider,
|
|
570
|
-
reason: `first login as ${passportForLog.role}`,
|
|
571
|
-
},
|
|
572
|
-
context: formatContext(Object.assign(request, { user: updatedUser })),
|
|
573
|
-
result: updatedUser,
|
|
574
|
-
},
|
|
575
|
-
node
|
|
576
|
-
);
|
|
577
|
-
}
|
|
578
|
-
const lastLoginIp = getRequestIP(request);
|
|
579
|
-
const walletDeviceMessageToken = request.get('wallet-device-message-token');
|
|
580
|
-
const walletDeviceId = request.get('wallet-device-id');
|
|
581
|
-
const ua = request.get('user-agent');
|
|
582
|
-
// request.context.store.connectedWallet
|
|
583
|
-
const walletOS = request.context.didwallet.os;
|
|
584
|
-
|
|
585
|
-
const userSessionDoc = await node.upsertUserSession({
|
|
492
|
+
if (currentUser) {
|
|
493
|
+
updatedUser = await node.loginUser({
|
|
586
494
|
teamDid,
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
495
|
+
user: {
|
|
496
|
+
did: currentUser.did,
|
|
497
|
+
pk: currentUser.pk,
|
|
498
|
+
locale,
|
|
499
|
+
passport,
|
|
500
|
+
sourceAppPid,
|
|
501
|
+
lastLoginIp: getRequestIP(request),
|
|
502
|
+
connectedAccount: [connectAccount, connectedNft],
|
|
503
|
+
...profile,
|
|
504
|
+
avatar: await extractUserAvatar(get(profile, 'avatar'), {
|
|
505
|
+
dataDir: blocklet.env.dataDir,
|
|
506
|
+
}),
|
|
598
507
|
},
|
|
599
508
|
});
|
|
600
|
-
|
|
601
|
-
|
|
509
|
+
await node.createAuditLog(
|
|
510
|
+
{
|
|
511
|
+
action,
|
|
512
|
+
args: { teamDid, userDid: realDid, passport: passportForLog, provider, sourceAppPid },
|
|
513
|
+
context: formatContext(Object.assign(request, { user: updatedUser })),
|
|
514
|
+
result: updatedUser,
|
|
515
|
+
},
|
|
602
516
|
node
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
{
|
|
608
|
-
did: updatedUser.did,
|
|
609
|
-
pk: updatedUser.pk,
|
|
610
|
-
fullName: updatedUser.fullName,
|
|
611
|
-
email: updatedUser.email || '',
|
|
612
|
-
avatar: getUserAvatarUrl(updatedUser.avatar, blocklet),
|
|
613
|
-
connectedAccount: [connectAccount, connectedNft],
|
|
614
|
-
action: 'connectAccount',
|
|
615
|
-
sourceAppPid: sourceAppPid || masterSite.appPid,
|
|
616
|
-
},
|
|
617
|
-
],
|
|
618
|
-
},
|
|
619
|
-
})
|
|
620
|
-
.then(() => {
|
|
621
|
-
node.syncUserSession({
|
|
622
|
-
teamDid,
|
|
623
|
-
userDid: realDid,
|
|
624
|
-
visitorId: userSessionDoc.visitorId,
|
|
625
|
-
passportId: passport?.id,
|
|
626
|
-
targetAppPid: sourceAppPid,
|
|
627
|
-
ua,
|
|
628
|
-
lastLoginIp,
|
|
629
|
-
extra: {
|
|
630
|
-
walletOS,
|
|
631
|
-
walletDeviceMessageToken,
|
|
632
|
-
walletDeviceId,
|
|
633
|
-
},
|
|
634
|
-
});
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
// Generate new session token that client can save to localStorage
|
|
639
|
-
const createToken = createTokenFn(createSessionToken);
|
|
640
|
-
const sessionConfig = blocklet.settings?.session || {};
|
|
517
|
+
);
|
|
518
|
+
} else {
|
|
519
|
+
// Create user
|
|
520
|
+
fullName = profile.fullName;
|
|
641
521
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
{
|
|
645
|
-
|
|
522
|
+
updatedUser = await node.loginUser({
|
|
523
|
+
teamDid,
|
|
524
|
+
user: {
|
|
525
|
+
...profile,
|
|
526
|
+
avatar: await extractUserAvatar(get(profile, 'avatar'), {
|
|
527
|
+
dataDir: blocklet.env.dataDir,
|
|
528
|
+
}),
|
|
529
|
+
did: realDid,
|
|
530
|
+
pk: realPk,
|
|
531
|
+
locale,
|
|
646
532
|
passport,
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
533
|
+
sourceAppPid,
|
|
534
|
+
lastLoginIp: getRequestIP(request),
|
|
535
|
+
connectedAccount: [connectAccount, connectedNft],
|
|
536
|
+
inviter,
|
|
537
|
+
},
|
|
538
|
+
});
|
|
539
|
+
await node.createAuditLog(
|
|
540
|
+
{
|
|
541
|
+
action: 'addUser',
|
|
542
|
+
args: {
|
|
543
|
+
teamDid,
|
|
544
|
+
userDid: realDid,
|
|
545
|
+
sourceAppPid,
|
|
546
|
+
provider,
|
|
547
|
+
reason: `first login as ${passportForLog.role}`,
|
|
548
|
+
},
|
|
549
|
+
context: formatContext(Object.assign(request, { user: updatedUser })),
|
|
550
|
+
result: updatedUser,
|
|
652
551
|
},
|
|
653
|
-
|
|
552
|
+
node
|
|
654
553
|
);
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
554
|
+
}
|
|
555
|
+
const lastLoginIp = getRequestIP(request);
|
|
556
|
+
const walletDeviceMessageToken = request.get('wallet-device-message-token');
|
|
557
|
+
const walletDeviceId = request.get('wallet-device-id');
|
|
558
|
+
const ua = request.get('user-agent');
|
|
559
|
+
// request.context.store.connectedWallet
|
|
560
|
+
const walletOS = request.context.didwallet.os;
|
|
561
|
+
|
|
562
|
+
const userSessionDoc = await node.upsertUserSession({
|
|
563
|
+
teamDid,
|
|
564
|
+
visitorId,
|
|
565
|
+
userDid: realDid,
|
|
566
|
+
appPid: teamDid,
|
|
567
|
+
passportId: passport?.id,
|
|
568
|
+
status: 'online',
|
|
569
|
+
ua,
|
|
570
|
+
lastLoginIp,
|
|
571
|
+
extra: {
|
|
572
|
+
walletOS,
|
|
573
|
+
walletDeviceMessageToken,
|
|
574
|
+
walletDeviceId,
|
|
575
|
+
},
|
|
576
|
+
});
|
|
666
577
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
},
|
|
687
|
-
verifyNFTParams: {
|
|
688
|
-
claims,
|
|
689
|
-
challenge,
|
|
690
|
-
locale,
|
|
578
|
+
if (shouldSyncFederated(sourceAppPid, blocklet)) {
|
|
579
|
+
node
|
|
580
|
+
.syncFederated({
|
|
581
|
+
did: teamDid,
|
|
582
|
+
data: {
|
|
583
|
+
users: [
|
|
584
|
+
{
|
|
585
|
+
did: updatedUser.did,
|
|
586
|
+
pk: updatedUser.pk,
|
|
587
|
+
fullName: updatedUser.fullName,
|
|
588
|
+
email: updatedUser.email || '',
|
|
589
|
+
avatar: getUserAvatarUrl(updatedUser.avatar, blocklet),
|
|
590
|
+
connectedAccount: [connectAccount, connectedNft],
|
|
591
|
+
action: 'connectAccount',
|
|
592
|
+
sourceAppPid: sourceAppPid || masterSite.appPid,
|
|
593
|
+
inviter: updatedUser.inviter,
|
|
594
|
+
generation: updatedUser.generation,
|
|
595
|
+
},
|
|
596
|
+
],
|
|
691
597
|
},
|
|
598
|
+
})
|
|
599
|
+
.then(() => {
|
|
600
|
+
node.syncUserSession({
|
|
601
|
+
teamDid,
|
|
602
|
+
userDid: realDid,
|
|
603
|
+
visitorId: userSessionDoc.visitorId,
|
|
604
|
+
passportId: passport?.id,
|
|
605
|
+
targetAppPid: sourceAppPid,
|
|
606
|
+
ua,
|
|
607
|
+
lastLoginIp,
|
|
608
|
+
extra: {
|
|
609
|
+
walletOS,
|
|
610
|
+
walletDeviceMessageToken,
|
|
611
|
+
walletDeviceId,
|
|
612
|
+
},
|
|
613
|
+
});
|
|
692
614
|
});
|
|
615
|
+
}
|
|
693
616
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
const spaceGateway = {
|
|
698
|
-
did: data.did,
|
|
699
|
-
name: data.name,
|
|
700
|
-
endpoint: data.endpoint,
|
|
701
|
-
url: didSpaceInfo.didSpacesCoreUrl,
|
|
702
|
-
};
|
|
617
|
+
// Generate new session token that client can save to localStorage
|
|
618
|
+
const createToken = createTokenFn(createSessionToken);
|
|
619
|
+
const sessionConfig = blocklet.settings?.session || {};
|
|
703
620
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
621
|
+
const { sessionToken, refreshToken } = createToken(
|
|
622
|
+
realDid,
|
|
623
|
+
{
|
|
624
|
+
secret,
|
|
625
|
+
passport,
|
|
626
|
+
role,
|
|
627
|
+
fullName,
|
|
628
|
+
// NOTE: token 中存储当前的 login provider
|
|
629
|
+
provider,
|
|
630
|
+
walletOS,
|
|
631
|
+
},
|
|
632
|
+
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
|
|
633
|
+
);
|
|
634
|
+
logger.info(`${action}.success`, { userDid: realDid, role });
|
|
635
|
+
|
|
636
|
+
if (
|
|
637
|
+
// if user provides owner passport AND app does not have owner, set this user to owner
|
|
638
|
+
(vc && role === ROLES.OWNER && !blocklet.settings?.owner) ||
|
|
639
|
+
// if the user will receive a owner passport AND app does not have owner, set this user to owner
|
|
640
|
+
(issuePassport && defaultRole === ROLES.OWNER && !blocklet.settings?.owner)
|
|
641
|
+
) {
|
|
642
|
+
logger.info('Bind owner for blocklet', { teamDid, userDid: realDid });
|
|
643
|
+
await node.setBlockletInitialized({ did: teamDid, owner: { did: realDid, pk: realPk } });
|
|
644
|
+
}
|
|
713
645
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
646
|
+
// @note: 当第一个用户将要成为 owner 的时候,也是需要绑定 DID Space 的,所以延后执行在此时设置 DID Spaces
|
|
647
|
+
const shouldConnectSpace = claims.some(
|
|
648
|
+
(x) => x?.meta?.purpose === 'DidSpace' && ['asset', 'verifiableCredential'].includes(x.type)
|
|
649
|
+
);
|
|
650
|
+
if (action === 'login' && shouldConnectSpace) {
|
|
651
|
+
const didSpaceInfo = await getDidSpacesInfoByClaims({ claims });
|
|
652
|
+
|
|
653
|
+
const appUrl = getAppUrl(blocklet);
|
|
654
|
+
const { data } = await silentAuthorizationInConnect(didSpaceInfo, {
|
|
655
|
+
appInfo: {
|
|
656
|
+
appDid: blocklet.appDid,
|
|
657
|
+
appName: getAppName(blocklet),
|
|
658
|
+
appDescription: getAppDescription(blocklet),
|
|
659
|
+
appUrl,
|
|
660
|
+
scopes: DID_SPACES.AUTHORIZE.DEFAULT_SCOPE,
|
|
661
|
+
referrer: joinURL(appUrl, '/.well-known/service/connect'),
|
|
662
|
+
metadata: {
|
|
663
|
+
did: blocklet.meta.did,
|
|
722
664
|
},
|
|
723
|
-
}
|
|
724
|
-
|
|
665
|
+
},
|
|
666
|
+
verifyNFTParams: {
|
|
667
|
+
claims,
|
|
668
|
+
challenge,
|
|
669
|
+
locale,
|
|
670
|
+
},
|
|
671
|
+
});
|
|
725
672
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
673
|
+
/**
|
|
674
|
+
* @type {Omit<import('@abtnode/client').SpaceGatewayInput, 'protected'>}
|
|
675
|
+
*/
|
|
676
|
+
const spaceGateway = {
|
|
677
|
+
did: data.did,
|
|
678
|
+
name: data.name,
|
|
679
|
+
endpoint: data.endpoint,
|
|
680
|
+
url: didSpaceInfo.didSpacesCoreUrl,
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
const user = await node.getUser({
|
|
730
684
|
teamDid,
|
|
731
|
-
|
|
732
|
-
|
|
685
|
+
user: {
|
|
686
|
+
did: userDid,
|
|
687
|
+
},
|
|
688
|
+
options: {
|
|
689
|
+
enableConnectedAccount: true,
|
|
690
|
+
},
|
|
691
|
+
});
|
|
733
692
|
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
refreshToken,
|
|
742
|
-
visitorId: userSessionDoc.visitorId,
|
|
743
|
-
nextWorkflowData: {
|
|
744
|
-
userDid: realDid,
|
|
693
|
+
await node.updateUser({
|
|
694
|
+
teamDid,
|
|
695
|
+
user: {
|
|
696
|
+
did: user.did,
|
|
697
|
+
didSpace: {
|
|
698
|
+
...user?.didSpace,
|
|
699
|
+
...spaceGateway,
|
|
745
700
|
},
|
|
746
|
-
}
|
|
747
|
-
}
|
|
701
|
+
},
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
// @NOTE: 异步地刷新 profile
|
|
706
|
+
Profile.refresh({
|
|
707
|
+
node,
|
|
708
|
+
blocklet,
|
|
709
|
+
teamDid,
|
|
710
|
+
userDid,
|
|
711
|
+
}).catch((error) => console.warn(error));
|
|
748
712
|
|
|
713
|
+
// issue passport for the first login user in a invite-only team
|
|
714
|
+
if (issuePassport) {
|
|
749
715
|
return {
|
|
716
|
+
disposition: 'attachment',
|
|
717
|
+
type: 'VerifiableCredential',
|
|
718
|
+
data: vc,
|
|
750
719
|
sessionToken,
|
|
751
720
|
refreshToken,
|
|
752
721
|
visitorId: userSessionDoc.visitorId,
|
|
@@ -754,7 +723,17 @@ module.exports = {
|
|
|
754
723
|
userDid: realDid,
|
|
755
724
|
},
|
|
756
725
|
};
|
|
757
|
-
}
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
return {
|
|
729
|
+
sessionToken,
|
|
730
|
+
refreshToken,
|
|
731
|
+
visitorId: userSessionDoc.visitorId,
|
|
732
|
+
nextWorkflowData: {
|
|
733
|
+
userDid: realDid,
|
|
734
|
+
},
|
|
735
|
+
};
|
|
736
|
+
},
|
|
758
737
|
},
|
|
759
738
|
|
|
760
739
|
switchProfile: {
|
|
@@ -846,7 +825,17 @@ module.exports = {
|
|
|
846
825
|
node
|
|
847
826
|
);
|
|
848
827
|
|
|
849
|
-
const syncUserData = pick(doc, [
|
|
828
|
+
const syncUserData = pick(doc, [
|
|
829
|
+
'did',
|
|
830
|
+
'pk',
|
|
831
|
+
'fullName',
|
|
832
|
+
'avatar',
|
|
833
|
+
'email',
|
|
834
|
+
'phone',
|
|
835
|
+
'url',
|
|
836
|
+
'inviter',
|
|
837
|
+
'generation',
|
|
838
|
+
]);
|
|
850
839
|
if (syncUserData.avatar) {
|
|
851
840
|
syncUserData.avatar = getUserAvatarUrl(syncUserData.avatar, blocklet);
|
|
852
841
|
}
|
|
@@ -1172,6 +1161,8 @@ module.exports = {
|
|
|
1172
1161
|
email: bindUser?.email,
|
|
1173
1162
|
fullName: bindUser?.fullName,
|
|
1174
1163
|
avatar: bindUser?.avatar,
|
|
1164
|
+
inviter: bindUser?.inviter,
|
|
1165
|
+
generation: bindUser?.generation,
|
|
1175
1166
|
});
|
|
1176
1167
|
const currentTime = new Date().toISOString();
|
|
1177
1168
|
|