@abtnode/blocklet-services 1.16.34-beta-20241204-140321-4d75ca21 → 1.16.34-beta-20241206-124652-493dbc39

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.
Files changed (303) hide show
  1. package/api/libs/connect/session.js +4 -4
  2. package/api/libs/open-graph/index.js +1 -1
  3. package/api/middlewares/check-federated.js +157 -0
  4. package/api/routes/blocklet.js +19 -13
  5. package/api/routes/federated.js +529 -573
  6. package/api/routes/oauth.js +38 -55
  7. package/api/routes/user-session.js +239 -214
  8. package/api/routes/user.js +52 -45
  9. package/api/services/auth/connect/invite.js +1 -1
  10. package/api/services/auth/connect/issue-passport.js +1 -1
  11. package/api/services/auth/session.js +31 -9
  12. package/api/util/attach-shared-utils.js +6 -6
  13. package/api/util/federated.js +28 -72
  14. package/dist/assets/Add-Dr8htRSM.js +1 -0
  15. package/dist/assets/{Alert-XwCbbCdw.js → Alert-gRD_jJCj.js} +1 -1
  16. package/dist/assets/ArrowDropDown-DI04xnPr.js +1 -0
  17. package/dist/assets/{Autocomplete-CtKfl8OV.js → Autocomplete-DPolRnqk.js} +1 -1
  18. package/dist/assets/{Avatar-BuTYVz6S.js → Avatar-D6TPuXUP.js} +1 -1
  19. package/dist/assets/{ButtonGroup-9mTO_MUt.js → ButtonGroup-BcLw8gsE.js} +1 -1
  20. package/dist/assets/{CSSTransition-VPmtoKE7.js → CSSTransition-DdlHGsuR.js} +1 -1
  21. package/dist/assets/CheckCircle-BPxn_ieu.js +1 -0
  22. package/dist/assets/ChevronLeft-5FOp5_pf.js +1 -0
  23. package/dist/assets/ChevronRight-PVflalU6.js +1 -0
  24. package/dist/assets/Delete-CaO8fR6N.js +1 -0
  25. package/dist/assets/DeleteOutline-PIJBVOmm.js +1 -0
  26. package/dist/assets/{DialogContentText-BSTFqlB8.js → DialogContentText-BvYfkPC9.js} +1 -1
  27. package/dist/assets/Done-Cqnr64ll.js +1 -0
  28. package/dist/assets/Download-Bv95-VOA.js +1 -0
  29. package/dist/assets/{EditIcon-D5uy6dXe.js → EditIcon-B2INxzak.js} +1 -1
  30. package/dist/assets/Error-vrb7fyQU.js +1 -0
  31. package/dist/assets/ExpandMore-B3TZX84r.js +1 -0
  32. package/dist/assets/{FormControl-D9UzJGr3.js → FormControl-BlJhfvE4.js} +1 -1
  33. package/dist/assets/{FormControlLabel-Ka9Y3VW4.js → FormControlLabel-DUahNTJi.js} +1 -1
  34. package/dist/assets/FormGroup-BhKveWGx.js +1 -0
  35. package/dist/assets/{Google-fmIzZ4SE.js → Google-2VzbESXy.js} +1 -1
  36. package/dist/assets/{Grid-CLg9BKgo.js → Grid-HlOuSRmU.js} +1 -1
  37. package/dist/assets/HelpOutline-pRqeT6i_.js +1 -0
  38. package/dist/assets/{Hidden-B_FCIv2F.js → Hidden-BIaa-blE.js} +1 -1
  39. package/dist/assets/InfoOutlined-CvA_NzdD.js +1 -0
  40. package/dist/assets/InputAdornment-mbNfreso.js +1 -0
  41. package/dist/assets/{LastPage-BNIPjfIv.js → LastPage-BI2XzpBc.js} +1 -1
  42. package/dist/assets/Launch-DIHn67BI.js +1 -0
  43. package/dist/assets/LaunchOutlined-DBAHz0tb.js +1 -0
  44. package/dist/assets/{Link-Dgz_hg-A.js → Link-SvE6tGEV.js} +1 -1
  45. package/dist/assets/{ListItemButton-COVroopz.js → ListItemButton-DRswm1pu.js} +1 -1
  46. package/dist/assets/{ListSubheader-DoFPqSxT.js → ListSubheader-Cedlz0t5.js} +1 -1
  47. package/dist/assets/{LoadingButton-Cpsng3ic.js → LoadingButton-1nXdJV1_.js} +1 -1
  48. package/dist/assets/{LockIcon-xMd6TgDT.js → LockIcon-BlUU7Km8.js} +1 -1
  49. package/dist/assets/Loop-Do-1bTcZ.js +1 -0
  50. package/dist/assets/MarkEmailRead-DJzwbP2x.js +1 -0
  51. package/dist/assets/Menu-4JehMzAB.js +1 -0
  52. package/dist/assets/MoreHoriz-BiDBSm9w.js +1 -0
  53. package/dist/assets/MoreVert-BHPy5yQk.js +1 -0
  54. package/dist/assets/OpenInNew-Ox-Wg6B7.js +1 -0
  55. package/dist/assets/{Pagination-BdODbVsE.js → Pagination-DtmO1FEC.js} +1 -1
  56. package/dist/assets/PlayArrow-D8oFKkOl.js +1 -0
  57. package/dist/assets/{QuestionMarkCircle-CeLvEIhA.js → QuestionMarkCircle-CRCb7vLB.js} +1 -1
  58. package/dist/assets/RadioGroup-CAeo2G7k.js +1 -0
  59. package/dist/assets/Search-B4FkzoeR.js +1 -0
  60. package/dist/assets/{Select-BM5xijW7.js → Select-pOhG5uV8.js} +2 -2
  61. package/dist/assets/{ServerLogo-CocwN-L6.js → ServerLogo-C3qS1K9u.js} +1 -1
  62. package/dist/assets/{Skeleton-BQ4gLbdR.js → Skeleton-XhcFgkuH.js} +3 -3
  63. package/dist/assets/Stack-BGVSv0bm.js +1 -0
  64. package/dist/assets/{Stepper-DPFFvB9h.js → Stepper-1oUkII92.js} +1 -1
  65. package/dist/assets/{TextField-CFRK87D0.js → TextField-BYIMGo2O.js} +1 -1
  66. package/dist/assets/{Toolbar-Ba22YRhW.js → Toolbar-MXTUjpSN.js} +1 -1
  67. package/dist/assets/ViewColumn-Dl8WBRoz.js +1 -0
  68. package/dist/assets/ViewList-Dw7InfFl.js +1 -0
  69. package/dist/assets/_createAggregator-CF3Ywu_Z.js +1 -0
  70. package/dist/assets/access-control-CPDqmVDW.js +13 -0
  71. package/dist/assets/{actions-R7d7-bh3.js → actions-DB6zFAt9.js} +1 -1
  72. package/dist/assets/{add-component-core-qARkFBQB.js → add-component-core-DpqYAR-R.js} +11 -11
  73. package/dist/assets/add-resource-BY7yN1M7.js +1 -0
  74. package/dist/assets/{addon-BJli1WRW.js → addon-cSEDcT4t.js} +1 -1
  75. package/dist/assets/{analytics-B3iUwhYK.js → analytics-CObVf_QD.js} +8 -8
  76. package/dist/assets/api-SlMwqh4b.js +1 -0
  77. package/dist/assets/{ar-7AvHBDLJ.js → ar-BENken66.js} +1 -1
  78. package/dist/assets/audit-logs-BMMQleD-.js +58 -0
  79. package/dist/assets/{base32-Mo2B3fHT.js → base32-Cky7ZH4x.js} +1 -1
  80. package/dist/assets/{branding-BThKyvoW.js → branding-DD9lnLdg.js} +2 -2
  81. package/dist/assets/bundle-avatar-D1CsKnAr.js +1 -0
  82. package/dist/assets/{button-eTEsJSJ0.js → button-C2skqS2y.js} +1 -1
  83. package/dist/assets/{click-to-copy-CkFI8a1W.js → click-to-copy-B_U6uers.js} +1 -1
  84. package/dist/assets/complete-Cm1aTSRB.js +45 -0
  85. package/dist/assets/{component-kGv-hUvT.js → component-CU-7h3yK.js} +2 -2
  86. package/dist/assets/{config-BVYueZpV.js → config-CKVwTxh4.js} +2 -2
  87. package/dist/assets/config-GyMHYuIo.js +1 -0
  88. package/dist/assets/{config-navigation-NUbYVs4N.js → config-navigation-DqtZRu1x.js} +1 -1
  89. package/dist/assets/config-space-xHVn7Zw_.js +1 -0
  90. package/dist/assets/{confirm-CIF7Vu-X.js → confirm-BYGcMOdN.js} +1 -1
  91. package/dist/assets/{connect-Dj-BrpmM.js → connect-7KX0ip82.js} +1 -1
  92. package/dist/assets/connect-Cjg3Lm4D.js +1 -0
  93. package/dist/assets/connect-to-BWP8Cqu6.js +1 -0
  94. package/dist/assets/{content-layout-DSpN7kL2.js → content-layout-8jsNhe-5.js} +1 -1
  95. package/dist/assets/dashboard-BZreJCiA.js +165 -0
  96. package/dist/assets/{de-S6ufmRx0.js → de-C8d8saMJ.js} +1 -1
  97. package/dist/assets/{deprecate-W6wP2f1U.js → deprecate-Bj3Q5Wi_.js} +1 -1
  98. package/dist/assets/{did-address-DpP51eII.js → did-address-7Sb16VSB.js} +1 -1
  99. package/dist/assets/domain-D-DYyZbR.js +9 -0
  100. package/dist/assets/domain-list-p_9GKY-M.js +15 -0
  101. package/dist/assets/email-Canxuwlg.js +18 -0
  102. package/dist/assets/emotion-cache.browser.esm-DRs-CTgF.js +1 -0
  103. package/dist/assets/{es-Sth9cv6C.js → es-8ZzWXB3U.js} +1 -1
  104. package/dist/assets/exchange-passport-Dv2bo20G.js +1 -0
  105. package/dist/assets/{fallback-CTOpqcoo.js → fallback-BlcEp1VL.js} +1 -1
  106. package/dist/assets/form-text-input-D26GlKxQ.js +11 -0
  107. package/dist/assets/{format-error-jTY-wvGv.js → format-error-Dk89U0uh.js} +2 -2
  108. package/dist/assets/{fr-BX6bo8e1.js → fr-CDmTLuDM.js} +1 -1
  109. package/dist/assets/{fuel-Dx06V-YR.js → fuel-DeEVMoW6.js} +1 -1
  110. package/dist/assets/{fullpage-Dz8PPWdq.js → fullpage-CFHcuwWr.js} +1 -1
  111. package/dist/assets/{hi-pYobKga6.js → hi-DfYUKMCb.js} +1 -1
  112. package/dist/assets/{home-BCoo1Guo.js → home-D7XPwTjK.js} +1 -1
  113. package/dist/assets/{id-Xei40tOm.js → id-BeY7iur-.js} +1 -1
  114. package/dist/assets/{iframe-GN8AUKA4.js → iframe-tSt_So8C.js} +1 -1
  115. package/dist/assets/{index-delqLXRr.js → index-3lBO8ivG.js} +8 -8
  116. package/dist/assets/{index-BXHMtAUn.js → index-6dmWRa5a.js} +2 -2
  117. package/dist/assets/{index-rA_BKM5G.js → index-B6vN1Pjj.js} +3 -3
  118. package/dist/assets/{index-W2CQmt_X.js → index-BaYuwQfE.js} +1 -1
  119. package/dist/assets/index-BilCISvf.js +1 -0
  120. package/dist/assets/{index-B_EeAcSB.js → index-Bk-KtZtw.js} +1 -1
  121. package/dist/assets/index-C-OENO3T.js +16 -0
  122. package/dist/assets/{index-Db_Y81_-.js → index-C56N3wab.js} +2 -2
  123. package/dist/assets/{index-CG1XIXZC.js → index-C89kYDNU.js} +1 -1
  124. package/dist/assets/{index-B3Z8DzsY.js → index-CNE2uXX8.js} +6 -6
  125. package/dist/assets/index-CPFKRWiW.js +316 -0
  126. package/dist/assets/{index-COdSzYad.js → index-CQuGc78Y.js} +2 -2
  127. package/dist/assets/{index-cIe0Ged1.js → index-CswkYvFG.js} +1 -1
  128. package/dist/assets/index-CuJzImxJ.js +1 -0
  129. package/dist/assets/index-CwEyBOgW.js +4 -0
  130. package/dist/assets/{index-CjkNshyI.js → index-D-G-CrJO.js} +1 -1
  131. package/dist/assets/{index-8OiEpVkg.js → index-D0CXo93j.js} +1 -1
  132. package/dist/assets/{index-UEoZJA9L.js → index-D2m633vu.js} +1 -1
  133. package/dist/assets/index-DQjLOWie.js +5 -0
  134. package/dist/assets/{index-CYQV6023.js → index-DbUU7z6J.js} +11 -11
  135. package/dist/assets/{index-B019qXp1.js → index-DcWx2h61.js} +1 -1
  136. package/dist/assets/{index-B3pPqycI.js → index-DfQHFN6t.js} +1 -1
  137. package/dist/assets/{index-ZPFypmuO.js → index-DsLePqKc.js} +1 -1
  138. package/dist/assets/{index-DgonWrzm.js → index-DsZCBFlr.js} +9 -9
  139. package/dist/assets/{index-BxKrUgd9.js → index-DtdETaBU.js} +70 -70
  140. package/dist/assets/{index-yi-655mj.js → index-EWrqmue5.js} +1 -1
  141. package/dist/assets/{index-BjfhU-QW.js → index-Ed6XamYf.js} +1 -1
  142. package/dist/assets/{index-BzVm0XuZ.js → index-I4Wjjc9p.js} +1 -1
  143. package/dist/assets/index-K-RQRB6f.js +1 -0
  144. package/dist/assets/{index-q1m8Euwz.js → index-Qbrukcer.js} +1 -1
  145. package/dist/assets/index-fU8Snm90.js +102 -0
  146. package/dist/assets/{index-Bs9TLgSC.js → index-hcyZSWah.js} +2 -2
  147. package/dist/assets/index-tap0PKb5.js +29 -0
  148. package/dist/assets/{index-BP0LEaeg.js → index-vQSgatpS.js} +8 -8
  149. package/dist/assets/{index-BidszMO2.js → index-vRY4Eqk5.js} +39 -39
  150. package/dist/assets/{invitation-BPrK4inJ.js → invitation-BTS9OmKY.js} +5 -5
  151. package/dist/assets/invite-DdlZu1iK.js +5 -0
  152. package/dist/assets/{isEmail-BnC4loew.js → isEmail-CmNEnnPO.js} +1 -1
  153. package/dist/assets/issue-passport-BOYK0sdW.js +1 -0
  154. package/dist/assets/item-DiOlNyoQ.js +1 -0
  155. package/dist/assets/{ja-DG0a06x8.js → ja-DvJTZg_Q.js} +1 -1
  156. package/dist/assets/{jss-plugin-props-sort.esm-Bp0MqRVc.js → jss-plugin-props-sort.esm-B0GYUqad.js} +6 -6
  157. package/dist/assets/{ko-BBC-RcU5.js → ko-C1lnK-Gx.js} +1 -1
  158. package/dist/assets/{launch-result-message-4m30f0Ag.js → launch-result-message-CU6VqlMp.js} +1 -1
  159. package/dist/assets/{layout-Btp-_hcD.js → layout-BLLz87sa.js} +2 -2
  160. package/dist/assets/{list-header-DQEePd_T.js → list-header-XuCMCGCV.js} +1 -1
  161. package/dist/assets/localization-ClU7HEEr.js +1 -0
  162. package/dist/assets/{log-DGIf8qzM.js → log-CzdQsoGM.js} +6 -6
  163. package/dist/assets/login-DxPcP1jX.js +1 -0
  164. package/dist/assets/login-oauth-callback-6aacB0AP.js +1 -0
  165. package/dist/assets/{logo-uploader-CC8WqbW-.js → logo-uploader-FwiUnYYD.js} +4 -4
  166. package/dist/assets/lost-passport-CP1WD-6W.js +168 -0
  167. package/dist/assets/{lottie-react.esm-CtltdV0t.js → lottie-react.esm-D7IQJqb8.js} +1 -1
  168. package/dist/assets/notifications-BuECL_6T.js +65 -0
  169. package/dist/assets/open-window-Bg3rwEW-.js +1 -0
  170. package/dist/assets/overview-CjXvkE0B.js +12 -0
  171. package/dist/assets/{page-header-B5a7RE0E.js → page-header-ByFkqYoX.js} +1 -1
  172. package/dist/assets/{permission-CBfa-qlX.js → permission-DbhB5Z1v.js} +1 -1
  173. package/dist/assets/{preferences-CuRLxM0K.js → preferences-BYmMPHkz.js} +1 -1
  174. package/dist/assets/{pt-CNmFfxJU.js → pt-C86mXB8Z.js} +1 -1
  175. package/dist/assets/publish-resource-CRym3QNG.js +1 -0
  176. package/dist/assets/{raf-schd.esm-KaxPdV64.js → raf-schd.esm-B7lVwb88.js} +1 -1
  177. package/dist/assets/{react-beautiful-dnd.esm-BlBywA4z.js → react-beautiful-dnd.esm-DzxofBcj.js} +1 -1
  178. package/dist/assets/refType-C0MWXRP4.js +1 -0
  179. package/dist/assets/{resource-dialog-DpLtB_Fw.js → resource-dialog-DvLQ35FQ.js} +1 -1
  180. package/dist/assets/{ru-BVNv9w91.js → ru-Dxm-iAqn.js} +1 -1
  181. package/dist/assets/sdk-C9VDRIUH.js +1 -0
  182. package/dist/assets/{selector-Drr6pXp9.js → selector-CVbTF87I.js} +4 -4
  183. package/dist/assets/session-CfGQq4aA.js +1 -0
  184. package/dist/assets/setup-Cn5VZSrf.js +19 -0
  185. package/dist/assets/{shorten-label-DK0L2sJV.js → shorten-label-DkBNZBHq.js} +1 -1
  186. package/dist/assets/simple-select-Dar19mu0.js +1 -0
  187. package/dist/assets/{slicedToArray-n9LJBwV4.js → slicedToArray-Bh7YTn9v.js} +2 -2
  188. package/dist/assets/start-BeQmK9fc.js +187 -0
  189. package/dist/assets/{step-actions-D_1mpc4C.js → step-actions-DauWsHJ8.js} +2 -2
  190. package/dist/assets/studio-DsQEpBvk.js +6 -0
  191. package/dist/assets/{switch-control-2C3bwebR.js → switch-control-Dsh5_EeP.js} +1 -1
  192. package/dist/assets/{th-CObnQ6OH.js → th-BamIf1b8.js} +1 -1
  193. package/dist/assets/{toUpper-DtTJYJCz.js → toUpper-BzsouAll.js} +1 -1
  194. package/dist/assets/transfer-DaiNG55d.js +16 -0
  195. package/dist/assets/trim-BSxRkodT.js +1 -0
  196. package/dist/assets/uniqBy-DdK7WB2a.js +1 -0
  197. package/dist/assets/unsubscribe-QZHXePvC.js +1 -0
  198. package/dist/assets/{url-join-aL0dlRwK.js → url-join-Bz42DLTX.js} +1 -1
  199. package/dist/assets/{use-mobile-TJQ6s1hH.js → use-mobile-BORWdgFu.js} +1 -1
  200. package/dist/assets/{use-mobile-D7IK9xm6.js → use-mobile-BnLttn6s.js} +1 -1
  201. package/dist/assets/{useAsync-B5aCa8BU.js → useAsync-XGhszTqi.js} +1 -1
  202. package/dist/assets/{useFormControl-De83T2k8.js → useFormControl-CUbdx--c.js} +1 -1
  203. package/dist/assets/{useLocalStorage-Cg4UWbtJ.js → useLocalStorage-CQGh5cLr.js} +1 -1
  204. package/dist/assets/{useSetState-C5EefhmT.js → useSetState-DJ05e857.js} +1 -1
  205. package/dist/assets/useSlot-DcPzSHnC.js +1 -0
  206. package/dist/assets/{useSlotProps-9EZsnKiK.js → useSlotProps-D6DLjewQ.js} +1 -1
  207. package/dist/assets/{useThemeProps-DFbMvLjq.js → useThemeProps-D4tucCRV.js} +1 -1
  208. package/dist/assets/user-center-BA6Kltkg.js +1 -0
  209. package/dist/assets/user-sessions-DvMYo49k.js +1 -0
  210. package/dist/assets/util-CEeqN3nG.js +1 -0
  211. package/dist/assets/{vi-DPE1cpvE.js → vi-CTEgHnG8.js} +1 -1
  212. package/dist/assets/wrap-locale-Ce8iB_Ha.js +1 -0
  213. package/dist/assets/{zh-ZJh718gR.js → zh-C9pcKSvk.js} +1 -1
  214. package/dist/assets/{zh-tw-q3KEUdcz.js → zh-tw-CuhSzmQN.js} +1 -1
  215. package/dist/images/splash-landscape.png +0 -0
  216. package/dist/images/splash-portrait.png +0 -0
  217. package/dist/index.html +1 -1
  218. package/dist/service-worker.js +1 -1
  219. package/package.json +38 -37
  220. package/api/middlewares/verify-federated-call.js +0 -36
  221. package/dist/assets/Add-DtejxYv7.js +0 -1
  222. package/dist/assets/ArrowDropDown-DLu5ghJ6.js +0 -1
  223. package/dist/assets/CheckCircle-BvTAg_Vb.js +0 -1
  224. package/dist/assets/ChevronLeft-CogeEPev.js +0 -1
  225. package/dist/assets/ChevronRight-BATWClLP.js +0 -1
  226. package/dist/assets/Delete-BvK_hDyw.js +0 -1
  227. package/dist/assets/DeleteOutline-CFkN2u6G.js +0 -1
  228. package/dist/assets/Done-BCayGyaP.js +0 -1
  229. package/dist/assets/Download-3v1IPpRg.js +0 -1
  230. package/dist/assets/Error-KMHXOqQS.js +0 -1
  231. package/dist/assets/ExpandMore-XeiYcXA0.js +0 -1
  232. package/dist/assets/FormGroup-BqZ71koG.js +0 -1
  233. package/dist/assets/HelpOutline-D-mVzldg.js +0 -1
  234. package/dist/assets/InfoOutlined-fhivWooJ.js +0 -1
  235. package/dist/assets/InputAdornment-7bcT-OxU.js +0 -1
  236. package/dist/assets/Launch-B6-uAhbQ.js +0 -1
  237. package/dist/assets/LaunchOutlined-BEenLVbN.js +0 -1
  238. package/dist/assets/Loop-tJ6uJkRI.js +0 -1
  239. package/dist/assets/MarkEmailRead-BNHtpgz2.js +0 -1
  240. package/dist/assets/Menu-CkD81HZ5.js +0 -1
  241. package/dist/assets/MoreHoriz-qqmi4YRC.js +0 -1
  242. package/dist/assets/MoreVert-BZZ4IBOf.js +0 -1
  243. package/dist/assets/OpenInNew-C5XvRsRC.js +0 -1
  244. package/dist/assets/PlayArrow-Cn0cfGNW.js +0 -1
  245. package/dist/assets/RadioGroup-CkuUb_-r.js +0 -1
  246. package/dist/assets/Search-DXRr3XZy.js +0 -1
  247. package/dist/assets/Stack-690-8aHU.js +0 -1
  248. package/dist/assets/ViewColumn-GTnSFOFd.js +0 -1
  249. package/dist/assets/ViewList-BtVWmZJ0.js +0 -1
  250. package/dist/assets/_createAggregator-Ct5VkIH5.js +0 -1
  251. package/dist/assets/access-control-BmMbklSe.js +0 -13
  252. package/dist/assets/add-resource-lnxpvPO7.js +0 -1
  253. package/dist/assets/api-lbSHYKYc.js +0 -1
  254. package/dist/assets/audit-logs-0TJ_0Mvw.js +0 -58
  255. package/dist/assets/bundle-avatar-CcIs5XOV.js +0 -1
  256. package/dist/assets/complete-Bb-6z_26.js +0 -45
  257. package/dist/assets/config-kysZ8p5u.js +0 -1
  258. package/dist/assets/config-space-BPpdFWKx.js +0 -1
  259. package/dist/assets/connect-DPIWGg69.js +0 -1
  260. package/dist/assets/connect-to-ZJr8_Nq9.js +0 -1
  261. package/dist/assets/dashboard-BUsMb2Wm.js +0 -165
  262. package/dist/assets/domain-CcBPnmmR.js +0 -9
  263. package/dist/assets/domain-list-CVn1TPCl.js +0 -15
  264. package/dist/assets/email-DETfN-BC.js +0 -18
  265. package/dist/assets/emotion-cache.browser.esm-DkJEKl9I.js +0 -1
  266. package/dist/assets/exchange-passport-BetHiKY_.js +0 -1
  267. package/dist/assets/form-text-input-BUB_rL9o.js +0 -11
  268. package/dist/assets/index-4RJk4AiM.js +0 -1
  269. package/dist/assets/index-B2fUK0Jg.js +0 -16
  270. package/dist/assets/index-BArNVkrG.js +0 -1
  271. package/dist/assets/index-BDxuBkP1.js +0 -29
  272. package/dist/assets/index-CQSz6hXt.js +0 -316
  273. package/dist/assets/index-CRK13xk6.js +0 -102
  274. package/dist/assets/index-D_g2YpF8.js +0 -1
  275. package/dist/assets/index-De1VedzO.js +0 -5
  276. package/dist/assets/index-PD8enw5a.js +0 -4
  277. package/dist/assets/invite-VzUmhGJg.js +0 -5
  278. package/dist/assets/issue-passport-573OuQnm.js +0 -1
  279. package/dist/assets/item-BoFU04RW.js +0 -1
  280. package/dist/assets/localization-BJhiRnk-.js +0 -1
  281. package/dist/assets/login-Cu5oiCaE.js +0 -1
  282. package/dist/assets/login-oauth-callback-Dim9h4c3.js +0 -1
  283. package/dist/assets/lost-passport-D_HnDqKr.js +0 -168
  284. package/dist/assets/notifications-tGIsoEd6.js +0 -65
  285. package/dist/assets/open-window-CmBy5HkH.js +0 -1
  286. package/dist/assets/overview-CmwcUtDq.js +0 -12
  287. package/dist/assets/publish-resource-aoq2ZIeT.js +0 -1
  288. package/dist/assets/refType-CNi4gHMp.js +0 -1
  289. package/dist/assets/sdk-CrAhZvgC.js +0 -1
  290. package/dist/assets/session-BGDxwrDP.js +0 -1
  291. package/dist/assets/setup-cPNeqLVK.js +0 -19
  292. package/dist/assets/simple-select-CHsQAOYZ.js +0 -1
  293. package/dist/assets/start-CcvndivR.js +0 -187
  294. package/dist/assets/studio-BdIpZDRv.js +0 -6
  295. package/dist/assets/transfer-BNPHc5-e.js +0 -16
  296. package/dist/assets/trim-Boaje3e9.js +0 -1
  297. package/dist/assets/uniqBy-B2B_OSuq.js +0 -1
  298. package/dist/assets/unsubscribe-eud8OqTh.js +0 -1
  299. package/dist/assets/useSlot-DebDFCUQ.js +0 -1
  300. package/dist/assets/user-center-BWtnQHWR.js +0 -1
  301. package/dist/assets/user-sessions-DTvyZm5S.js +0 -1
  302. package/dist/assets/util-BBKZBp8H.js +0 -1
  303. package/dist/assets/wrap-locale-Ci8gmRb6.js +0 -1
@@ -1,21 +1,23 @@
1
1
  /* eslint-disable no-await-in-loop */
2
2
  const { WELLKNOWN_SERVICE_PATH_PREFIX, SESSION_TTL } = require('@abtnode/constant');
3
- // const { LOGIN_PROVIDER } = require('@blocklet/constant');
4
- // const pick = require('lodash/pick');
3
+ const { LOGIN_PROVIDER } = require('@blocklet/constant');
4
+ const pick = require('lodash/pick');
5
5
  const defaults = require('lodash/defaults');
6
6
  const cloneDeep = require('lodash/cloneDeep');
7
- // const sortBy = require('lodash/sortBy');
8
7
  const omit = require('lodash/omit');
9
8
  const pLimit = require('p-limit');
10
- // const { getSourceProvider } = require('@blocklet/meta/lib/did-utils');
9
+ const { getSourceProvider } = require('@blocklet/meta/lib/did-utils');
11
10
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
12
- // const { messages } = require('@abtnode/auth/lib/auth');
11
+ const { getFederatedMembers, getFederatedMaster } = require('@abtnode/auth/lib/util/federated');
12
+ const { messages } = require('@abtnode/auth/lib/auth');
13
+ const { Joi } = require('@arcblock/validator');
13
14
 
14
- // const logger = require('../libs/logger')('blocklet-services:user-session');
15
+ const logger = require('../libs/logger')('blocklet-services:user-session');
15
16
  const ensureBlocklet = require('../middlewares/ensure-blocklet');
16
17
  const { getUserAvatarUrl } = require('../util/federated');
17
- // const initJwt = require('../libs/jwt');
18
- // const { createTokenFn, getDidConnectVersion } = require('../util');
18
+ const initJwt = require('../libs/jwt');
19
+ const { createTokenFn, getDidConnectVersion } = require('../util');
20
+ const checkUser = require('../middlewares/check-user');
19
21
 
20
22
  const prefix = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/user-session`;
21
23
  const limit = pLimit(5);
@@ -88,228 +90,251 @@ async function patchUserSessionData(userSession, { blocklet, appPid, teamDid, no
88
90
  userSession.user.roleTitle = passport?.title || 'guest';
89
91
  }
90
92
 
93
+ const loginSessionSchema = Joi.object({
94
+ // uuid 版本需要保持跟数据库 model 定义一致
95
+ id: Joi.string().uuid({ version: 'uuidv4' }).required(),
96
+ userDid: Joi.DID().required(),
97
+ appPid: Joi.DID().required(),
98
+ passportId: Joi.string().allow('', null).optional(),
99
+ }).unknown(true);
100
+
91
101
  module.exports = {
92
102
  // eslint-disable-next-line no-unused-vars
93
103
  init(app, node, options) {
94
- // FIXME: @zhanghan 登录要确保安全性
95
104
  // NOTE: 保留 /login 路由,该功能不是针对于某一个实体来操作的,需要更明确表达意图
96
- app.post(`${prefix}/login`, ensureBlocklet(), (req, res) => {
97
- res.status(400).json({ error: 'not supported' });
98
-
99
- // const { blocklet } = req;
100
- // const loginUserSession = req.body;
101
- // // let visitorId = req.body?.visitorId;
102
- // // if (!visitorId) {
103
- // // visitorId = req.get('x-blocklet-visitor-id');
104
- // // }
105
- // if (!loginUserSession.id) {
106
- // res.status(400).json({ error: 'not supported' });
107
- // return;
108
- // }
109
-
110
- // if (!loginUserSession.userDid) {
111
- // res.status(400).json({ error: 'userDid is required' });
112
- // return;
113
- // }
114
- // if (!loginUserSession.appPid) {
115
- // res.status(400).json({ error: 'appPid is required' });
116
- // return;
117
- // }
118
-
119
- // const teamDid = blocklet.appPid;
120
- // const userSessions = await node.getUserSession({
121
- // teamDid,
122
- // userDid: loginUserSession.userDid,
123
- // // visitorId,
124
- // id: loginUserSession.id,
125
- // });
126
- // const now = Date.now();
127
- // const sessionTtl = blocklet.settings?.session?.ttl || SESSION_TTL;
128
- // // NOTICE: 保持与前端一致的排序方式,确保此时续期的是前端展示的 walletOS
129
- // const sortedUserSessions = sortBy(userSessions, (x) => now - new Date(x.updatedAt).getTime());
130
- // const validSession = sortedUserSessions.some((x) => now - new Date(x.updatedAt).getTime() < sessionTtl * 1000);
131
-
132
- // if (validSession) {
133
- // const user = await node.getUser({ teamDid, user: { did: loginUserSession.userDid } });
134
- // if (!user.approved) {
135
- // res.status(401).json(messages.notAllowedAppUser.en);
136
- // return;
137
- // }
138
- // const federated = defaults(cloneDeep(blocklet.settings.federated || {}), {
139
- // config: {
140
- // appId: blocklet.appDid,
141
- // appPid: teamDid,
142
- // },
143
- // sites: [],
144
- // });
145
- // const sourceProvider = getSourceProvider(user);
146
-
147
- // const provider = sourceProvider || LOGIN_PROVIDER.WALLET;
148
-
149
- // const memberSite = federated.sites.find(
150
- // (item) => item.appPid === loginUserSession.appPid && item.isMaster === false
151
- // );
152
- // const postUser = pick(user, ['did', 'pk', 'fullName', 'locale', 'inviter', 'generation']);
153
- // postUser.lastLoginAt = getRequestIP(req);
154
-
155
- // if (user.email) {
156
- // postUser.email = user.email;
157
- // }
158
- // if (user.avatar) {
159
- // postUser.avatar = getUserAvatarUrl(user.avatar, blocklet);
160
- // }
161
-
162
- // let result = {};
163
-
164
- // const walletOS = validSession?.extra?.walletOS || 'web';
165
-
166
- // const isFederatedLogin = !!memberSite;
167
- // if (isFederatedLogin) {
168
- // try {
169
- // result = await node.loginFederated({
170
- // did: teamDid,
171
- // data: {
172
- // user: postUser,
173
- // passport: loginUserSession.passportId ? { id: loginUserSession.passportId } : undefined,
174
- // walletOS,
175
- // provider,
176
- // },
177
- // site: memberSite,
178
- // });
179
- // } catch (err) {
180
- // if (err.response) {
181
- // const { status, data } = err.response;
182
- // res.status(status).json(data);
183
- // return;
184
- // }
185
- // throw err;
186
- // }
187
- // } else {
188
- // const { createSessionToken } = initJwt(node, options);
189
- // const createToken = createTokenFn(createSessionToken);
190
- // const { secret } = await req.getBlockletInfo();
191
- // const sessionConfig = blocklet.settings?.session || {};
192
- // const targetPassport = loginUserSession.passportId
193
- // ? (user?.passports || []).find((item) => item.id === loginUserSession.passportId)
194
- // : null;
195
- // const loggedInUser = await node.loginUser({
196
- // teamDid,
197
- // user: {
198
- // did: postUser.did,
199
- // pk: postUser.pk,
200
- // passport: targetPassport,
201
- // connectedAccount: {
202
- // provider,
203
- // did: user.did,
204
- // pk: user.pk,
205
- // },
206
- // },
207
- // });
208
-
209
- // result = createToken(
210
- // user.did,
211
- // {
212
- // secret,
213
- // passport: targetPassport,
214
- // role: targetPassport?.role || 'guest',
215
- // fullName: loggedInUser.fullName,
216
- // provider,
217
- // walletOS,
218
- // emailVerified: !!user?.emailVerified,
219
- // phoneVerified: !!user?.phoneVerified,
220
- // },
221
- // {
222
- // ...sessionConfig,
223
- // didConnectVersion: getDidConnectVersion(req),
224
- // }
225
- // );
226
- // }
227
-
228
- // const lastLoginIp = getRequestIP(req);
229
- // const ua = req.get('user-agent');
230
- // const walletDeviceMessageToken = req.get('wallet-device-message-token');
231
- // const walletDeviceId = req.get('wallet-device-id');
232
-
233
- // const userSessionDoc = await node.upsertUserSession({
234
- // id: loginUserSession.id,
235
- // teamDid,
236
- // userDid: loginUserSession.userDid,
237
- // // visitorId,
238
- // appPid: loginUserSession.appPid,
239
- // passportId: loginUserSession.passportId,
240
- // status: 'online',
241
- // ua,
242
- // lastLoginIp,
243
- // extra: {
244
- // walletOS,
245
- // walletDeviceMessageToken,
246
- // walletDeviceId,
247
- // },
248
- // });
249
-
250
- // if (isFederatedLogin) {
251
- // node.syncUserSession({
252
- // teamDid,
253
- // userDid: loginUserSession.userDid,
254
- // visitorId: userSessionDoc.visitorId,
255
- // passportId: loginUserSession.passportId,
256
- // targetAppPid: loginUserSession.appPid,
257
- // ua,
258
- // lastLoginIp,
259
- // extra: {
260
- // walletOS,
261
- // walletDeviceMessageToken,
262
- // walletDeviceId,
263
- // },
264
- // });
265
- // }
266
-
267
- // logger.info('quick-login with', {
268
- // teamDid,
269
- // // visitorId,
270
- // userDid: loginUserSession.userDid,
271
- // appPid: loginUserSession.appPid,
272
- // passportId: loginUserSession.passportId,
273
- // extra: {
274
- // walletOS,
275
- // },
276
- // });
277
-
278
- // res.json({ ...result, visitorId: userSessionDoc.visitorId });
279
- // } else {
280
- // logger.warn('failed to quick-login with', {
281
- // teamDid,
282
- // // visitorId,
283
- // userDid: loginUserSession.userDid,
284
- // appPid: loginUserSession.appPid,
285
- // passportId: loginUserSession.passportId,
286
- // });
287
- // res.status(401).json({ error: 'session expired' });
288
- // }
105
+ app.post(`${prefix}/login`, ensureBlocklet(), async (req, res) => {
106
+ const { blocklet } = req;
107
+ const loginUserSession = req.body;
108
+
109
+ const { value: validUserSession, error } = loginSessionSchema.validate(loginUserSession);
110
+
111
+ if (error) {
112
+ logger.error('Failed to login by user-session', {
113
+ error,
114
+ loginUserSession,
115
+ });
116
+ res.status(400).json({ error });
117
+ return;
118
+ }
119
+
120
+ const teamDid = blocklet.appPid;
121
+ const [validSession] = await node.getUserSession({
122
+ teamDid,
123
+ userDid: validUserSession.userDid,
124
+ id: validUserSession.id,
125
+ });
126
+
127
+ if (validSession) {
128
+ const user = await node.getUser({ teamDid, user: { did: validUserSession.userDid } });
129
+ if (!user.approved) {
130
+ res.status(401).json(messages.notAllowedAppUser.en);
131
+ return;
132
+ }
133
+ const sourceProvider = getSourceProvider(user);
134
+
135
+ const provider = sourceProvider || LOGIN_PROVIDER.WALLET;
136
+
137
+ const masterSite = getFederatedMaster(blocklet);
138
+ const memberSiteList = getFederatedMembers(blocklet);
139
+ const memberSite = memberSiteList.find((item) => item.appPid === validUserSession.appPid);
140
+ const postUser = pick(user, ['did', 'pk', 'fullName', 'locale', 'inviter', 'generation']);
141
+ postUser.lastLoginAt = getRequestIP(req);
142
+
143
+ if (user.email) {
144
+ postUser.email = user.email;
145
+ }
146
+ if (user.avatar) {
147
+ postUser.avatar = getUserAvatarUrl(user.avatar, blocklet);
148
+ }
149
+
150
+ let result = {};
151
+
152
+ const walletOS = validSession?.extra?.walletOS || 'web';
153
+
154
+ const isFederatedLogin = memberSite && masterSite.appPid === teamDid;
155
+ if (isFederatedLogin) {
156
+ try {
157
+ result = await node.loginFederated({
158
+ did: teamDid,
159
+ data: {
160
+ user: postUser,
161
+ passport: validUserSession.passportId ? { id: validUserSession.passportId } : undefined,
162
+ walletOS,
163
+ provider,
164
+ },
165
+ site: memberSite,
166
+ });
167
+ } catch (err) {
168
+ logger.error('Failed to login federated', { error: err, memberSite });
169
+ if (err.response) {
170
+ const { status, data } = err.response;
171
+ res.status(status).json(data);
172
+ return;
173
+ }
174
+ throw err;
175
+ }
176
+ } else {
177
+ const { createSessionToken } = initJwt(node, options);
178
+ const createToken = createTokenFn(createSessionToken);
179
+ const { secret } = await req.getBlockletInfo();
180
+ const sessionConfig = blocklet.settings?.session || {};
181
+ const targetPassport = validUserSession.passportId
182
+ ? (user?.passports || []).find((item) => item.id === validUserSession.passportId)
183
+ : null;
184
+ const loggedInUser = await node.loginUser({
185
+ teamDid,
186
+ user: {
187
+ did: postUser.did,
188
+ pk: postUser.pk,
189
+ passport: targetPassport,
190
+ connectedAccount: {
191
+ provider,
192
+ did: user.did,
193
+ pk: user.pk,
194
+ },
195
+ },
196
+ });
197
+
198
+ result = createToken(
199
+ user.did,
200
+ {
201
+ secret,
202
+ passport: targetPassport,
203
+ role: targetPassport?.role || 'guest',
204
+ fullName: loggedInUser.fullName,
205
+ provider,
206
+ walletOS,
207
+ emailVerified: !!user?.emailVerified,
208
+ phoneVerified: !!user?.phoneVerified,
209
+ },
210
+ {
211
+ ...sessionConfig,
212
+ didConnectVersion: getDidConnectVersion(req),
213
+ }
214
+ );
215
+ }
216
+
217
+ const lastLoginIp = getRequestIP(req);
218
+ const ua = req.get('user-agent');
219
+ const walletDeviceMessageToken = req.get('wallet-device-message-token');
220
+ const walletDeviceId = req.get('wallet-device-id');
221
+
222
+ const userSessionDoc = await node.upsertUserSession({
223
+ id: validUserSession.id,
224
+ teamDid,
225
+ userDid: validUserSession.userDid,
226
+ visitorId: validSession.visitorId,
227
+ appPid: validUserSession.appPid,
228
+ passportId: validUserSession.passportId,
229
+ status: 'online',
230
+ ua: null,
231
+ lastLoginIp,
232
+ extra: {
233
+ walletOS,
234
+ walletDeviceMessageToken,
235
+ walletDeviceId,
236
+ },
237
+ });
238
+
239
+ if (isFederatedLogin) {
240
+ node.syncUserSession({
241
+ teamDid,
242
+ userDid: validUserSession.userDid,
243
+ visitorId: userSessionDoc.visitorId,
244
+ passportId: validUserSession.passportId,
245
+ targetAppPid: validUserSession.appPid,
246
+ ua,
247
+ lastLoginIp,
248
+ extra: {
249
+ walletOS,
250
+ walletDeviceMessageToken,
251
+ walletDeviceId,
252
+ },
253
+ });
254
+ }
255
+
256
+ logger.info('quick-login with', {
257
+ teamDid,
258
+ visitorId: userSessionDoc.visitorId,
259
+ // 记录日志应该使用原始的值
260
+ userDid: loginUserSession.userDid,
261
+ appPid: loginUserSession.appPid,
262
+ passportId: loginUserSession.passportId,
263
+ extra: {
264
+ walletOS,
265
+ },
266
+ });
267
+
268
+ res.json({ ...result, visitorId: userSessionDoc.visitorId });
269
+ } else {
270
+ logger.warn('failed to quick-login with', {
271
+ teamDid,
272
+ id: loginUserSession.id,
273
+ userDid: loginUserSession.userDid,
274
+ appPid: loginUserSession.appPid,
275
+ passportId: loginUserSession.passportId,
276
+ });
277
+ res.status(401).json({ error: 'session expired' });
278
+ }
279
+ });
280
+
281
+ app.get(`${prefix}/myself`, ensureBlocklet(), checkUser, async (req, res) => {
282
+ const { blocklet } = req;
283
+ const { appPid } = blocklet;
284
+ const teamDid = appPid;
285
+
286
+ // 用户管理自己所有的登录会话,不限制 visitorId
287
+ const userSessions = await node.getUserSession({
288
+ teamDid,
289
+ appPid, // 不需要向主站查询 member 的会话列表,所以固定为 teamDid 即可
290
+ userDid: req.user.did,
291
+ });
292
+
293
+ const pendingList = userSessions.map((item) =>
294
+ limit(() =>
295
+ patchUserSessionData(item, {
296
+ blocklet,
297
+ appPid,
298
+ teamDid,
299
+ node,
300
+ })
301
+ )
302
+ );
303
+ await Promise.all(pendingList);
304
+
305
+ const result = userSessions
306
+ .filter((x) => {
307
+ return x?.user?.approved;
308
+ })
309
+ .map((x) => {
310
+ // NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
311
+ return omit(x, ['extra.walletDeviceId', 'extra.walletDeviceMessageToken']);
312
+ });
313
+
314
+ res.json(result);
289
315
  });
290
316
 
291
317
  /**
292
318
  * 获取指定用户的所有登录会话
293
- * FIXME: @zhanghan 获取要确保安全性
319
+ * 使用的场景:
320
+ * 1. 用户在未登录状态下,查询当前设备符合快捷登录的会话,实现快速登录
321
+ * 2. 用户在登录状态下,查询当前设备可以使用快捷登录切换的账号
294
322
  */
295
323
  app.get(`${prefix}`, ensureBlocklet(), async (req, res) => {
296
324
  const { blocklet } = req;
297
- const teamDid = blocklet.appPid;
325
+ const { appPid } = blocklet;
326
+ const teamDid = appPid;
298
327
  const requestIp = getRequestIP(req);
299
- const userAgent = req.get('user-agent');
328
+ const currentUserAgent = req.get('user-agent');
329
+ const visitorId = req.get('x-blocklet-visitor-id');
300
330
 
301
- // NOTICE: 此处的 visitorId 必须显式传入,否则用户将无法正常查询自己的所有 sessions
302
- const { userDid, appPid, visitorId } = req.query;
303
-
304
- if (!visitorId && !userDid) {
331
+ if (!visitorId) {
305
332
  res.json([]);
306
333
  return;
307
334
  }
308
335
 
309
336
  const userSessions = await node.getUserSession({
310
- appPid,
311
337
  teamDid,
312
- userDid,
313
338
  visitorId,
314
339
  });
315
340
 
@@ -317,7 +342,7 @@ module.exports = {
317
342
  limit(() =>
318
343
  patchUserSessionData(item, {
319
344
  blocklet,
320
- appPid,
345
+ appPid: item.appPid,
321
346
  teamDid,
322
347
  node,
323
348
  })
@@ -325,15 +350,15 @@ module.exports = {
325
350
  );
326
351
  await Promise.all(pendingList);
327
352
 
328
- // NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
329
353
  const result = userSessions
330
354
  .filter((x) => {
331
- if (x.lastLoginIp !== requestIp || x.ua !== userAgent || x.status === 'expired') {
355
+ if (x.lastLoginIp !== requestIp || x.ua !== currentUserAgent || x.status === 'expired') {
332
356
  return false;
333
357
  }
334
358
  return x?.user?.approved;
335
359
  })
336
360
  .map((x) => {
361
+ // NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
337
362
  return omit(x, ['extra.walletDeviceId', 'extra.walletDeviceMessageToken']);
338
363
  });
339
364