@abtnode/blocklet-services 1.16.34-beta-20241204-140321-4d75ca21 → 1.16.34-beta-20241205-145120-3a7aa096

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 (285) hide show
  1. package/api/libs/connect/session.js +4 -4
  2. package/api/middlewares/check-federated.js +157 -0
  3. package/api/routes/federated.js +529 -573
  4. package/api/routes/oauth.js +32 -54
  5. package/api/routes/user-session.js +239 -214
  6. package/api/routes/user.js +52 -45
  7. package/api/services/auth/connect/invite.js +1 -1
  8. package/api/services/auth/connect/issue-passport.js +1 -1
  9. package/api/services/auth/session.js +31 -9
  10. package/api/util/attach-shared-utils.js +6 -6
  11. package/api/util/federated.js +28 -72
  12. package/dist/assets/Add-CEkiASJk.js +1 -0
  13. package/dist/assets/{Alert-XwCbbCdw.js → Alert-D7cZ7kYh.js} +1 -1
  14. package/dist/assets/ArrowDropDown-CNA2YBpw.js +1 -0
  15. package/dist/assets/{Autocomplete-CtKfl8OV.js → Autocomplete-DqOPJmfP.js} +1 -1
  16. package/dist/assets/{Avatar-BuTYVz6S.js → Avatar-CC2uCgJO.js} +1 -1
  17. package/dist/assets/{ButtonGroup-9mTO_MUt.js → ButtonGroup-DVkbPyCf.js} +1 -1
  18. package/dist/assets/{CSSTransition-VPmtoKE7.js → CSSTransition-CAyoWadY.js} +1 -1
  19. package/dist/assets/CheckCircle-ne5PaInr.js +1 -0
  20. package/dist/assets/ChevronLeft-CzFyG6B9.js +1 -0
  21. package/dist/assets/ChevronRight-D28wkT_7.js +1 -0
  22. package/dist/assets/Delete-W0XHLr5E.js +1 -0
  23. package/dist/assets/DeleteOutline-CBAPet9Y.js +1 -0
  24. package/dist/assets/DialogContentText-DF6wXq4v.js +1 -0
  25. package/dist/assets/Done-BMgw3G29.js +1 -0
  26. package/dist/assets/Download-CWu1DNgF.js +1 -0
  27. package/dist/assets/{EditIcon-D5uy6dXe.js → EditIcon-L7k3tqrQ.js} +1 -1
  28. package/dist/assets/Error-DewSa72i.js +1 -0
  29. package/dist/assets/ExpandMore-dR0m3faK.js +1 -0
  30. package/dist/assets/FormControl-C3U9aSdK.js +1 -0
  31. package/dist/assets/{FormControlLabel-Ka9Y3VW4.js → FormControlLabel-uhzkWhIR.js} +1 -1
  32. package/dist/assets/FormGroup-zmk2zBRp.js +1 -0
  33. package/dist/assets/{Google-fmIzZ4SE.js → Google-BJOVX6-i.js} +1 -1
  34. package/dist/assets/{Grid-CLg9BKgo.js → Grid-CRcYquo8.js} +1 -1
  35. package/dist/assets/HelpOutline-1C4eFcXT.js +1 -0
  36. package/dist/assets/Hidden-C6Nsczh0.js +1 -0
  37. package/dist/assets/InfoOutlined-0F0dMk0M.js +1 -0
  38. package/dist/assets/{InputAdornment-7bcT-OxU.js → InputAdornment-HjZlszj5.js} +1 -1
  39. package/dist/assets/{LastPage-BNIPjfIv.js → LastPage-C8Ibu_ZS.js} +1 -1
  40. package/dist/assets/Launch-_9WY6qT8.js +1 -0
  41. package/dist/assets/LaunchOutlined-DpBWMSDU.js +1 -0
  42. package/dist/assets/{Link-Dgz_hg-A.js → Link-BHzX6Bty.js} +1 -1
  43. package/dist/assets/{ListItemButton-COVroopz.js → ListItemButton-Bg2hcpe4.js} +1 -1
  44. package/dist/assets/{ListSubheader-DoFPqSxT.js → ListSubheader-BnOsaMFL.js} +1 -1
  45. package/dist/assets/{LoadingButton-Cpsng3ic.js → LoadingButton-DHvQ4mj0.js} +1 -1
  46. package/dist/assets/{LockIcon-xMd6TgDT.js → LockIcon-BF2LVzIr.js} +1 -1
  47. package/dist/assets/Loop-DwW0YmEY.js +1 -0
  48. package/dist/assets/MarkEmailRead-BUgtVfuj.js +1 -0
  49. package/dist/assets/Menu-C0_eNw-R.js +1 -0
  50. package/dist/assets/MoreHoriz-B3eBOSmM.js +1 -0
  51. package/dist/assets/MoreVert-9FUIKqvo.js +1 -0
  52. package/dist/assets/OpenInNew-IfJ9_ovA.js +1 -0
  53. package/dist/assets/{Pagination-BdODbVsE.js → Pagination-KTMAbLPe.js} +1 -1
  54. package/dist/assets/PlayArrow-BzCvLnOA.js +1 -0
  55. package/dist/assets/{QuestionMarkCircle-CeLvEIhA.js → QuestionMarkCircle-Bp1qdiMj.js} +1 -1
  56. package/dist/assets/{RadioGroup-CkuUb_-r.js → RadioGroup-D6iB2v9N.js} +1 -1
  57. package/dist/assets/Search-CeQJr6Zd.js +1 -0
  58. package/dist/assets/{Select-BM5xijW7.js → Select-63T17LTs.js} +2 -2
  59. package/dist/assets/{ServerLogo-CocwN-L6.js → ServerLogo-BjD55kNo.js} +1 -1
  60. package/dist/assets/{Skeleton-BQ4gLbdR.js → Skeleton-Cguhg4Uf.js} +5 -5
  61. package/dist/assets/{Stack-690-8aHU.js → Stack-B2wvO5ch.js} +1 -1
  62. package/dist/assets/{Stepper-DPFFvB9h.js → Stepper-Cf6EXzKT.js} +1 -1
  63. package/dist/assets/{TextField-CFRK87D0.js → TextField-DaxOve82.js} +1 -1
  64. package/dist/assets/{Toolbar-Ba22YRhW.js → Toolbar-CbY6pPMn.js} +1 -1
  65. package/dist/assets/ViewColumn-BSkUFzQn.js +1 -0
  66. package/dist/assets/ViewList-BJW4-xJh.js +1 -0
  67. package/dist/assets/{_createAggregator-Ct5VkIH5.js → _createAggregator-gmWpxOiT.js} +1 -1
  68. package/dist/assets/access-control-hkwSmrDz.js +13 -0
  69. package/dist/assets/{actions-R7d7-bh3.js → actions-mviDIL98.js} +1 -1
  70. package/dist/assets/{add-component-core-qARkFBQB.js → add-component-core-D8ycTCOD.js} +10 -10
  71. package/dist/assets/add-resource-Dvlc6tV9.js +1 -0
  72. package/dist/assets/{addon-BJli1WRW.js → addon-CBWbLYEt.js} +1 -1
  73. package/dist/assets/{analytics-B3iUwhYK.js → analytics-DEYYvSpr.js} +7 -7
  74. package/dist/assets/api-09lpjN_y.js +1 -0
  75. package/dist/assets/{ar-7AvHBDLJ.js → ar-BENken66.js} +1 -1
  76. package/dist/assets/audit-logs-CKasQ1r7.js +58 -0
  77. package/dist/assets/{base32-Mo2B3fHT.js → base32-BodeVrwr.js} +1 -1
  78. package/dist/assets/{branding-BThKyvoW.js → branding-C6L3eHHi.js} +2 -2
  79. package/dist/assets/bundle-avatar-DGCY6XtV.js +1 -0
  80. package/dist/assets/{button-eTEsJSJ0.js → button-_kh3esRx.js} +1 -1
  81. package/dist/assets/{click-to-copy-CkFI8a1W.js → click-to-copy-Dhz68Zb7.js} +1 -1
  82. package/dist/assets/{complete-Bb-6z_26.js → complete-CbF_9acR.js} +4 -4
  83. package/dist/assets/{component-kGv-hUvT.js → component-TW3Q8q-H.js} +2 -2
  84. package/dist/assets/{config-BVYueZpV.js → config-DOKBlczF.js} +2 -2
  85. package/dist/assets/config-NLq72VC7.js +1 -0
  86. package/dist/assets/{config-navigation-NUbYVs4N.js → config-navigation-BrZYJfdX.js} +5 -5
  87. package/dist/assets/config-space-CgNK0LkG.js +1 -0
  88. package/dist/assets/{confirm-CIF7Vu-X.js → confirm-CgBlPewa.js} +1 -1
  89. package/dist/assets/{connect-Dj-BrpmM.js → connect-BLWlkmzZ.js} +2 -2
  90. package/dist/assets/connect-BoJDz_r9.js +1 -0
  91. package/dist/assets/{connect-to-ZJr8_Nq9.js → connect-to-Bjjro7dm.js} +1 -1
  92. package/dist/assets/{content-layout-DSpN7kL2.js → content-layout-De6X9MfH.js} +1 -1
  93. package/dist/assets/{dashboard-BUsMb2Wm.js → dashboard-DNfo36ET.js} +7 -7
  94. package/dist/assets/{de-S6ufmRx0.js → de-C8d8saMJ.js} +1 -1
  95. package/dist/assets/{deprecate-W6wP2f1U.js → deprecate-C8CVzteH.js} +1 -1
  96. package/dist/assets/{did-address-DpP51eII.js → did-address-CQAHayeq.js} +1 -1
  97. package/dist/assets/domain-4tz_iUAg.js +9 -0
  98. package/dist/assets/domain-list-CSCowbSF.js +15 -0
  99. package/dist/assets/{email-DETfN-BC.js → email-B7GCHFcD.js} +3 -3
  100. package/dist/assets/emotion-cache.browser.esm-7imm0F3K.js +1 -0
  101. package/dist/assets/{es-Sth9cv6C.js → es-8ZzWXB3U.js} +1 -1
  102. package/dist/assets/exchange-passport-BMGoDnTe.js +1 -0
  103. package/dist/assets/{fallback-CTOpqcoo.js → fallback-xgYg9R2J.js} +1 -1
  104. package/dist/assets/form-text-input-D8gtQI8g.js +11 -0
  105. package/dist/assets/{format-error-jTY-wvGv.js → format-error-kGGriKiA.js} +2 -2
  106. package/dist/assets/{fr-BX6bo8e1.js → fr-CDmTLuDM.js} +1 -1
  107. package/dist/assets/{fuel-Dx06V-YR.js → fuel-NUdjiJCN.js} +1 -1
  108. package/dist/assets/{fullpage-Dz8PPWdq.js → fullpage-BVHpRAYk.js} +1 -1
  109. package/dist/assets/{hi-pYobKga6.js → hi-DfYUKMCb.js} +1 -1
  110. package/dist/assets/{home-BCoo1Guo.js → home-rJKruo1j.js} +1 -1
  111. package/dist/assets/{id-Xei40tOm.js → id-BeY7iur-.js} +1 -1
  112. package/dist/assets/{iframe-GN8AUKA4.js → iframe-Cv3PJcvz.js} +1 -1
  113. package/dist/assets/index-6GwWrwWj.js +16 -0
  114. package/dist/assets/{index-cIe0Ged1.js → index-B2zxMB5n.js} +1 -1
  115. package/dist/assets/{index-B019qXp1.js → index-BHrceiDz.js} +1 -1
  116. package/dist/assets/{index-BDxuBkP1.js → index-BIDxxb9t.js} +1 -1
  117. package/dist/assets/{index-COdSzYad.js → index-BILgagmI.js} +2 -2
  118. package/dist/assets/{index-Bs9TLgSC.js → index-BM0eHOUA.js} +2 -2
  119. package/dist/assets/index-BaLRQJTh.js +102 -0
  120. package/dist/assets/{index-B3pPqycI.js → index-BlTIDXDG.js} +1 -1
  121. package/dist/assets/{index-BidszMO2.js → index-BnljNGH7.js} +38 -38
  122. package/dist/assets/{index-W2CQmt_X.js → index-BxZgdCUX.js} +2 -2
  123. package/dist/assets/{index-delqLXRr.js → index-C-s0lU62.js} +8 -8
  124. package/dist/assets/index-CBp5iNXP.js +1 -0
  125. package/dist/assets/{index-4RJk4AiM.js → index-CETPQNRT.js} +1 -1
  126. package/dist/assets/{index-yi-655mj.js → index-CKLF9fLH.js} +1 -1
  127. package/dist/assets/{index-BjfhU-QW.js → index-CMY8zSjT.js} +1 -1
  128. package/dist/assets/{index-ZPFypmuO.js → index-CTGtgEeG.js} +1 -1
  129. package/dist/assets/{index-BXHMtAUn.js → index-C_vk9fqw.js} +2 -2
  130. package/dist/assets/{index-q1m8Euwz.js → index-CuHWguJg.js} +1 -1
  131. package/dist/assets/{index-BxKrUgd9.js → index-Cu_bNPbk.js} +70 -70
  132. package/dist/assets/index-D1YHjvRT.js +4 -0
  133. package/dist/assets/{index-CG1XIXZC.js → index-D1YU1vFk.js} +1 -1
  134. package/dist/assets/{index-BzVm0XuZ.js → index-D2d4qfN2.js} +1 -1
  135. package/dist/assets/{index-UEoZJA9L.js → index-DAKGZhdR.js} +1 -1
  136. package/dist/assets/index-DQrMXKph.js +1 -0
  137. package/dist/assets/{index-CYQV6023.js → index-DToO2H3Q.js} +12 -12
  138. package/dist/assets/{index-DgonWrzm.js → index-DeYzXL4z.js} +4 -4
  139. package/dist/assets/{index-BP0LEaeg.js → index-DpZHKufu.js} +8 -8
  140. package/dist/assets/index-DqjLLD7P.js +5 -0
  141. package/dist/assets/{index-CjkNshyI.js → index-Dt4OruAC.js} +1 -1
  142. package/dist/assets/{index-B_EeAcSB.js → index-HYjTpFy9.js} +1 -1
  143. package/dist/assets/index-J3ZVv3j-.js +316 -0
  144. package/dist/assets/{index-rA_BKM5G.js → index-MtDT2QJN.js} +3 -3
  145. package/dist/assets/{index-8OiEpVkg.js → index-ag_Qlo60.js} +1 -1
  146. package/dist/assets/{index-B3Z8DzsY.js → index-mFPL7bdj.js} +3 -3
  147. package/dist/assets/{index-Db_Y81_-.js → index-nKobfUQ1.js} +1 -1
  148. package/dist/assets/{invitation-BPrK4inJ.js → invitation-DLNLgy6r.js} +5 -5
  149. package/dist/assets/invite-DPYR6t3s.js +5 -0
  150. package/dist/assets/{isEmail-BnC4loew.js → isEmail-i2tngnJi.js} +1 -1
  151. package/dist/assets/{issue-passport-573OuQnm.js → issue-passport-CBrIp3jc.js} +1 -1
  152. package/dist/assets/item-Brjh4PLo.js +1 -0
  153. package/dist/assets/{ja-DG0a06x8.js → ja-DvJTZg_Q.js} +1 -1
  154. package/dist/assets/{jss-plugin-props-sort.esm-Bp0MqRVc.js → jss-plugin-props-sort.esm-BX_bur4g.js} +4 -4
  155. package/dist/assets/{ko-BBC-RcU5.js → ko-C1lnK-Gx.js} +1 -1
  156. package/dist/assets/{launch-result-message-4m30f0Ag.js → launch-result-message-DF58OHNC.js} +1 -1
  157. package/dist/assets/{layout-Btp-_hcD.js → layout-BZwnld0E.js} +2 -2
  158. package/dist/assets/{list-header-DQEePd_T.js → list-header-DKFtTh4o.js} +1 -1
  159. package/dist/assets/localization-DIaD7pty.js +1 -0
  160. package/dist/assets/{log-DGIf8qzM.js → log-DcFRCLCX.js} +1 -1
  161. package/dist/assets/login-Bf5SQlPn.js +1 -0
  162. package/dist/assets/login-oauth-callback-BU7Pl33l.js +1 -0
  163. package/dist/assets/{logo-uploader-CC8WqbW-.js → logo-uploader-BbCcpszA.js} +4 -4
  164. package/dist/assets/{lost-passport-D_HnDqKr.js → lost-passport-D3RvUegp.js} +4 -4
  165. package/dist/assets/{lottie-react.esm-CtltdV0t.js → lottie-react.esm-ZH4Wk5XO.js} +1 -1
  166. package/dist/assets/notifications-BkSUBEzY.js +65 -0
  167. package/dist/assets/{open-window-CmBy5HkH.js → open-window-CSdTLwaf.js} +1 -1
  168. package/dist/assets/overview-DXC_j46y.js +12 -0
  169. package/dist/assets/{page-header-B5a7RE0E.js → page-header-Cri_UHX5.js} +1 -1
  170. package/dist/assets/{permission-CBfa-qlX.js → permission-DSn8EOQ9.js} +1 -1
  171. package/dist/assets/{preferences-CuRLxM0K.js → preferences-JFVWkPL4.js} +1 -1
  172. package/dist/assets/{pt-CNmFfxJU.js → pt-C86mXB8Z.js} +1 -1
  173. package/dist/assets/publish-resource-gk91W1J0.js +1 -0
  174. package/dist/assets/{raf-schd.esm-KaxPdV64.js → raf-schd.esm-CpouI05w.js} +1 -1
  175. package/dist/assets/{react-beautiful-dnd.esm-BlBywA4z.js → react-beautiful-dnd.esm-ChA2xoay.js} +1 -1
  176. package/dist/assets/refType-BXcUP-YS.js +1 -0
  177. package/dist/assets/{resource-dialog-DpLtB_Fw.js → resource-dialog-DZPqi5pw.js} +1 -1
  178. package/dist/assets/{ru-BVNv9w91.js → ru-Dxm-iAqn.js} +1 -1
  179. package/dist/assets/sdk-neE1aE7y.js +1 -0
  180. package/dist/assets/{selector-Drr6pXp9.js → selector--uPvisem.js} +4 -4
  181. package/dist/assets/session-D7-00CVs.js +1 -0
  182. package/dist/assets/{setup-cPNeqLVK.js → setup-CMaryrU8.js} +3 -3
  183. package/dist/assets/{shorten-label-DK0L2sJV.js → shorten-label-uAzGTCBy.js} +1 -1
  184. package/dist/assets/{simple-select-CHsQAOYZ.js → simple-select-M9sKVVQT.js} +1 -1
  185. package/dist/assets/{slicedToArray-n9LJBwV4.js → slicedToArray-CHm_9UsL.js} +2 -2
  186. package/dist/assets/{start-CcvndivR.js → start-D5P3Y_Mp.js} +1 -1
  187. package/dist/assets/{step-actions-D_1mpc4C.js → step-actions-DRDtE9i9.js} +2 -2
  188. package/dist/assets/studio-DDRR9uTH.js +6 -0
  189. package/dist/assets/{switch-control-2C3bwebR.js → switch-control-C8d_eiWi.js} +1 -1
  190. package/dist/assets/{th-CObnQ6OH.js → th-BamIf1b8.js} +1 -1
  191. package/dist/assets/{toUpper-DtTJYJCz.js → toUpper-Bq-NIfax.js} +1 -1
  192. package/dist/assets/{transfer-BNPHc5-e.js → transfer-COMtxr-_.js} +2 -2
  193. package/dist/assets/{trim-Boaje3e9.js → trim-Bn0r8NiZ.js} +1 -1
  194. package/dist/assets/{uniqBy-B2B_OSuq.js → uniqBy-Baa3ApX9.js} +1 -1
  195. package/dist/assets/unsubscribe-BUf0fqE6.js +1 -0
  196. package/dist/assets/{url-join-aL0dlRwK.js → url-join-BUPuIN5Z.js} +1 -1
  197. package/dist/assets/use-mobile-BexDu-6x.js +1 -0
  198. package/dist/assets/use-mobile-CUJBViwc.js +1 -0
  199. package/dist/assets/{useAsync-B5aCa8BU.js → useAsync-DlT-wYlz.js} +1 -1
  200. package/dist/assets/{useFormControl-De83T2k8.js → useFormControl-CW2PoJes.js} +1 -1
  201. package/dist/assets/{useLocalStorage-Cg4UWbtJ.js → useLocalStorage-BfN8jDuG.js} +1 -1
  202. package/dist/assets/{useSetState-C5EefhmT.js → useSetState-CKmZy4S9.js} +1 -1
  203. package/dist/assets/useSlot-BDokg4R-.js +1 -0
  204. package/dist/assets/{useSlotProps-9EZsnKiK.js → useSlotProps-BvV0G0yb.js} +1 -1
  205. package/dist/assets/{useThemeProps-DFbMvLjq.js → useThemeProps-28x2bH1r.js} +1 -1
  206. package/dist/assets/user-center-D6WQO8xG.js +1 -0
  207. package/dist/assets/user-sessions-DRnCKb0z.js +1 -0
  208. package/dist/assets/util-ZRcOJEuz.js +1 -0
  209. package/dist/assets/{vi-DPE1cpvE.js → vi-CTEgHnG8.js} +1 -1
  210. package/dist/assets/wrap-locale-Bsx6I5ww.js +1 -0
  211. package/dist/assets/{zh-ZJh718gR.js → zh-C9pcKSvk.js} +1 -1
  212. package/dist/assets/{zh-tw-q3KEUdcz.js → zh-tw-CuhSzmQN.js} +1 -1
  213. package/dist/index.html +1 -1
  214. package/dist/service-worker.js +1 -1
  215. package/package.json +26 -25
  216. package/api/middlewares/verify-federated-call.js +0 -36
  217. package/dist/assets/Add-DtejxYv7.js +0 -1
  218. package/dist/assets/ArrowDropDown-DLu5ghJ6.js +0 -1
  219. package/dist/assets/CheckCircle-BvTAg_Vb.js +0 -1
  220. package/dist/assets/ChevronLeft-CogeEPev.js +0 -1
  221. package/dist/assets/ChevronRight-BATWClLP.js +0 -1
  222. package/dist/assets/Delete-BvK_hDyw.js +0 -1
  223. package/dist/assets/DeleteOutline-CFkN2u6G.js +0 -1
  224. package/dist/assets/DialogContentText-BSTFqlB8.js +0 -1
  225. package/dist/assets/Done-BCayGyaP.js +0 -1
  226. package/dist/assets/Download-3v1IPpRg.js +0 -1
  227. package/dist/assets/Error-KMHXOqQS.js +0 -1
  228. package/dist/assets/ExpandMore-XeiYcXA0.js +0 -1
  229. package/dist/assets/FormControl-D9UzJGr3.js +0 -1
  230. package/dist/assets/FormGroup-BqZ71koG.js +0 -1
  231. package/dist/assets/HelpOutline-D-mVzldg.js +0 -1
  232. package/dist/assets/Hidden-B_FCIv2F.js +0 -1
  233. package/dist/assets/InfoOutlined-fhivWooJ.js +0 -1
  234. package/dist/assets/Launch-B6-uAhbQ.js +0 -1
  235. package/dist/assets/LaunchOutlined-BEenLVbN.js +0 -1
  236. package/dist/assets/Loop-tJ6uJkRI.js +0 -1
  237. package/dist/assets/MarkEmailRead-BNHtpgz2.js +0 -1
  238. package/dist/assets/Menu-CkD81HZ5.js +0 -1
  239. package/dist/assets/MoreHoriz-qqmi4YRC.js +0 -1
  240. package/dist/assets/MoreVert-BZZ4IBOf.js +0 -1
  241. package/dist/assets/OpenInNew-C5XvRsRC.js +0 -1
  242. package/dist/assets/PlayArrow-Cn0cfGNW.js +0 -1
  243. package/dist/assets/Search-DXRr3XZy.js +0 -1
  244. package/dist/assets/ViewColumn-GTnSFOFd.js +0 -1
  245. package/dist/assets/ViewList-BtVWmZJ0.js +0 -1
  246. package/dist/assets/access-control-BmMbklSe.js +0 -13
  247. package/dist/assets/add-resource-lnxpvPO7.js +0 -1
  248. package/dist/assets/api-lbSHYKYc.js +0 -1
  249. package/dist/assets/audit-logs-0TJ_0Mvw.js +0 -58
  250. package/dist/assets/bundle-avatar-CcIs5XOV.js +0 -1
  251. package/dist/assets/config-kysZ8p5u.js +0 -1
  252. package/dist/assets/config-space-BPpdFWKx.js +0 -1
  253. package/dist/assets/connect-DPIWGg69.js +0 -1
  254. package/dist/assets/domain-CcBPnmmR.js +0 -9
  255. package/dist/assets/domain-list-CVn1TPCl.js +0 -15
  256. package/dist/assets/emotion-cache.browser.esm-DkJEKl9I.js +0 -1
  257. package/dist/assets/exchange-passport-BetHiKY_.js +0 -1
  258. package/dist/assets/form-text-input-BUB_rL9o.js +0 -11
  259. package/dist/assets/index-B2fUK0Jg.js +0 -16
  260. package/dist/assets/index-BArNVkrG.js +0 -1
  261. package/dist/assets/index-CQSz6hXt.js +0 -316
  262. package/dist/assets/index-CRK13xk6.js +0 -102
  263. package/dist/assets/index-D_g2YpF8.js +0 -1
  264. package/dist/assets/index-De1VedzO.js +0 -5
  265. package/dist/assets/index-PD8enw5a.js +0 -4
  266. package/dist/assets/invite-VzUmhGJg.js +0 -5
  267. package/dist/assets/item-BoFU04RW.js +0 -1
  268. package/dist/assets/localization-BJhiRnk-.js +0 -1
  269. package/dist/assets/login-Cu5oiCaE.js +0 -1
  270. package/dist/assets/login-oauth-callback-Dim9h4c3.js +0 -1
  271. package/dist/assets/notifications-tGIsoEd6.js +0 -65
  272. package/dist/assets/overview-CmwcUtDq.js +0 -12
  273. package/dist/assets/publish-resource-aoq2ZIeT.js +0 -1
  274. package/dist/assets/refType-CNi4gHMp.js +0 -1
  275. package/dist/assets/sdk-CrAhZvgC.js +0 -1
  276. package/dist/assets/session-BGDxwrDP.js +0 -1
  277. package/dist/assets/studio-BdIpZDRv.js +0 -6
  278. package/dist/assets/unsubscribe-eud8OqTh.js +0 -1
  279. package/dist/assets/use-mobile-D7IK9xm6.js +0 -1
  280. package/dist/assets/use-mobile-TJQ6s1hH.js +0 -1
  281. package/dist/assets/useSlot-DebDFCUQ.js +0 -1
  282. package/dist/assets/user-center-BWtnQHWR.js +0 -1
  283. package/dist/assets/user-sessions-DTvyZm5S.js +0 -1
  284. package/dist/assets/util-BBKZBp8H.js +0 -1
  285. 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