@abtnode/blocklet-services 1.16.32-beta-4d47ae7f → 1.16.32-beta-17be26d7

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 (300) hide show
  1. package/api/index.js +9 -8
  2. package/api/libs/auth/index.js +2 -0
  3. package/api/libs/auth/utils.js +4 -1
  4. package/api/libs/connect/session.js +86 -97
  5. package/api/libs/connect/v1.js +2 -10
  6. package/api/libs/email.js +1 -1
  7. package/api/libs/jwt.js +17 -3
  8. package/api/libs/kyc.js +213 -0
  9. package/api/routes/federated.js +37 -4
  10. package/api/routes/oauth.js +65 -7
  11. package/api/routes/openapi.js +12 -21
  12. package/api/routes/opencomponent.js +12 -19
  13. package/api/routes/openembed.js +15 -26
  14. package/api/routes/user-session.js +2 -0
  15. package/api/routes/user.js +17 -2
  16. package/api/services/analytics/index.js +21 -24
  17. package/api/services/auth/connect/invite.js +38 -24
  18. package/api/services/auth/connect/issue-kyc.js +58 -0
  19. package/api/services/auth/connect/login.js +1 -0
  20. package/api/services/auth/connect/update-kyc.js +82 -0
  21. package/api/services/auth/index.js +34 -10
  22. package/api/services/auth/passport.js +11 -14
  23. package/api/services/auth/session.js +196 -197
  24. package/api/services/kyc/index.js +92 -0
  25. package/api/services/notification/index.js +6 -16
  26. package/api/services/relay/index.js +3 -7
  27. package/api/services/studio/index.js +62 -65
  28. package/api/socket/channel/did.js +1 -0
  29. package/api/util/get-static-service-config.js +2 -10
  30. package/dist/assets/{Add-D8_0U-mi.js → Add-DPWETbuH.js} +1 -1
  31. package/dist/assets/Alert-DDr4PUmN.js +1 -0
  32. package/dist/assets/{ArrowDropDown-exkF-BIK.js → ArrowDropDown-BCZ8iqaM.js} +1 -1
  33. package/dist/assets/Avatar-Der2Q3Zi.js +1 -0
  34. package/dist/assets/{ButtonGroup-CTrZ2Hyv.js → ButtonGroup-zMm3edlK.js} +1 -1
  35. package/dist/assets/{CheckCircle-BNxyw6NJ.js → CheckCircle-BfztTFob.js} +1 -1
  36. package/dist/assets/ChevronLeft-CrTHRIqK.js +1 -0
  37. package/dist/assets/{ChevronRight-DBpo88DV.js → ChevronRight-CIt5KDbd.js} +1 -1
  38. package/dist/assets/{Close-DgxsFA7q.js → Close-CgA7Qef8.js} +1 -1
  39. package/dist/assets/{CloseOutlined-CN4iKY7n.js → CloseOutlined-OBzuC30j.js} +1 -1
  40. package/dist/assets/{Delete-BaSq9RZZ.js → Delete-DVYTl7-n.js} +1 -1
  41. package/dist/assets/{DeleteOutline-Du2BPdlg.js → DeleteOutline-DKoxIRL9.js} +1 -1
  42. package/dist/assets/DialogContentText-BnQAOkxN.js +1 -0
  43. package/dist/assets/{Done-BG-Fw8ts.js → Done-D1_3yhtX.js} +1 -1
  44. package/dist/assets/{Download-C1y29u9K.js → Download-CvngcFRX.js} +1 -1
  45. package/dist/assets/{Edit-u2-N8rQN.js → Edit-DQ3aLTS3.js} +1 -1
  46. package/dist/assets/{EditIcon-B2Y7T-CN.js → EditIcon-C5DCIJQ3.js} +1 -1
  47. package/dist/assets/{Error-B1K0WhCp.js → Error-DOhq8cCM.js} +1 -1
  48. package/dist/assets/{ExpandMore-DBQIHjkB.js → ExpandMore-BgcTT2Bb.js} +1 -1
  49. package/dist/assets/FormControl-D00yHDcj.js +1 -0
  50. package/dist/assets/FormControlLabel-BJXWJJky.js +1 -0
  51. package/dist/assets/FormGroup-CBgybl1l.js +1 -0
  52. package/dist/assets/{Google-CvB2nYH_.js → Google-Be2TlnTX.js} +1 -1
  53. package/dist/assets/{Hidden-DJwWGZh0.js → Hidden-Bg6BPxEd.js} +1 -1
  54. package/dist/assets/{InfoOutlined-BIY-Lnxg.js → InfoOutlined-BxTwuqiu.js} +1 -1
  55. package/dist/assets/{InputAdornment-VVruavKc.js → InputAdornment-BGOXKboF.js} +1 -1
  56. package/dist/assets/{InputLabel-3M9sMlBq.js → InputLabel-BaHBEVm2.js} +1 -1
  57. package/dist/assets/{LastPage-CBInTPpp.js → LastPage-DyrTuTrl.js} +1 -1
  58. package/dist/assets/{Launch-Dhq-grBI.js → Launch-CNWKbDVj.js} +1 -1
  59. package/dist/assets/{LaunchOutlined-DnkKRXxH.js → LaunchOutlined-BuQ3n0Nq.js} +1 -1
  60. package/dist/assets/{Link-Cpnh7s1v.js → Link-CiVKLn7B.js} +1 -1
  61. package/dist/assets/{ListItemText-CHjUage1.js → ListItemText-BW_owdy0.js} +1 -1
  62. package/dist/assets/{LoadingButton-C47nsxMx.js → LoadingButton-AM-IIW_5.js} +1 -1
  63. package/dist/assets/{LockIcon-CoUaWmH-.js → LockIcon-0vWjHODV.js} +1 -1
  64. package/dist/assets/{Loop-CbcENVkw.js → Loop-C8sLBH67.js} +1 -1
  65. package/dist/assets/{MoreHoriz-B4gnOmnB.js → MoreHoriz-i1hLrklo.js} +1 -1
  66. package/dist/assets/{MoreVert-CBWkVJTE.js → MoreVert-D_g6Th6c.js} +1 -1
  67. package/dist/assets/{OpenInNew-svkkbJCn.js → OpenInNew-DBNjDxil.js} +1 -1
  68. package/dist/assets/{Pagination-BBwBFjSJ.js → Pagination-DLYy7jWI.js} +2 -2
  69. package/dist/assets/{PlayArrow-D-mvqfoj.js → PlayArrow-ywjbMR8A.js} +1 -1
  70. package/dist/assets/{QuestionMarkCircle-Duxt-AlB.js → QuestionMarkCircle-UZOXHzIe.js} +1 -1
  71. package/dist/assets/{RadioGroup-C4DI71vM.js → RadioGroup-BOq5mI1A.js} +1 -1
  72. package/dist/assets/{Search-BOxcXluh.js → Search-Cm2FDsnl.js} +1 -1
  73. package/dist/assets/{Select-drnrjZt8.js → Select-_ZzhxUOz.js} +2 -2
  74. package/dist/assets/{ServerLogo-CxVp5JLf.js → ServerLogo-DeFJVAh8.js} +1 -1
  75. package/dist/assets/{Skeleton-YurB3EC5.js → Skeleton-D6pzHOGJ.js} +4 -4
  76. package/dist/assets/{Slider-BX1l_Lvj.js → Slider-ZYL8jZ1U.js} +1 -1
  77. package/dist/assets/Stack-DuNNAX-1.js +1 -0
  78. package/dist/assets/{Stepper-UV_DHoEg.js → Stepper-DJcNoyk4.js} +1 -1
  79. package/dist/assets/TextField-DvTYZ6EA.js +1 -0
  80. package/dist/assets/Toolbar-DbekG5v-.js +1 -0
  81. package/dist/assets/ViewColumn-BOqfI3PF.js +1 -0
  82. package/dist/assets/{ViewList-Bwkry3LO.js → ViewList-DloAt_wk.js} +1 -1
  83. package/dist/assets/access-control-Coh2AROp.js +13 -0
  84. package/dist/assets/{actions-5mXSkQB4.js → actions-DU4pTpmF.js} +1 -1
  85. package/dist/assets/{add-component-core-DFH5qH7x.js → add-component-core-DT8eSr6D.js} +61 -61
  86. package/dist/assets/add-resource-CSMNGPH3.js +1 -0
  87. package/dist/assets/{addon-CUxwPHa_.js → addon-DImOcoyp.js} +1 -1
  88. package/dist/assets/{analytics-B29460Yu.js → analytics-CdJi4q2Q.js} +7 -7
  89. package/dist/assets/api-DUETbHv8.js +1 -0
  90. package/dist/assets/ar-BywPGmOa.js +1 -0
  91. package/dist/assets/ar-cd9W8CrI.js +1 -0
  92. package/dist/assets/audit-logs-Bf2mKt3i.js +58 -0
  93. package/dist/assets/{button-BqgSoT0h.js → button-LdgYe-Yo.js} +1 -1
  94. package/dist/assets/{click-to-copy-CM2U6JEg.js → click-to-copy-GLcS-PQh.js} +1 -1
  95. package/dist/assets/{complete-DaiPBjLS.js → complete-d1PDQlj9.js} +1 -1
  96. package/dist/assets/component-Ny_sGfYr.js +768 -0
  97. package/dist/assets/{config-CxG4Kz4G.js → config-CFU2n19a.js} +2 -2
  98. package/dist/assets/{config-BygYwcXq.js → config-CpPqNxWJ.js} +1 -1
  99. package/dist/assets/{config-navigation-Rsc7sQGs.js → config-navigation-BQEWPLSH.js} +2 -2
  100. package/dist/assets/confirm-BdJlZzQ-.js +7 -0
  101. package/dist/assets/{connect-B87FT6ev.js → connect-BDR3XUNJ.js} +1 -1
  102. package/dist/assets/{connect-26mFy5d9.js → connect-ndruP8fv.js} +1 -1
  103. package/dist/assets/connect-to-D6gkq_5F.js +54 -0
  104. package/dist/assets/{content-layout-B7X0Mv3n.js → content-layout-9pObqqwC.js} +1 -1
  105. package/dist/assets/{dashboard-BrV_SESr.js → dashboard-Clr7sJbb.js} +4 -4
  106. package/dist/assets/de-DS4XAN75.js +1 -0
  107. package/dist/assets/{de-9vHBMa7b.js → de-qs3PjT55.js} +1 -1
  108. package/dist/assets/{did-address-BWnma-3-.js → did-address-DNmiCCjI.js} +1 -1
  109. package/dist/assets/domain-BM3Ias2K.js +9 -0
  110. package/dist/assets/{domain-list-wgNQeEgv.js → domain-list-BdKqoNlW.js} +2 -2
  111. package/dist/assets/email-03xGEqer.js +9 -0
  112. package/dist/assets/es-DXb9xB6c.js +1 -0
  113. package/dist/assets/es-XT3Dd0hc.js +1 -0
  114. package/dist/assets/{exchange-passport-BZ8Q-G3h.js → exchange-passport-BwiQ670F.js} +1 -1
  115. package/dist/assets/{fallback-C5E1lZAR.js → fallback-BLJkxLTK.js} +1 -1
  116. package/dist/assets/format-error-C43xGCjC.js +2 -0
  117. package/dist/assets/fr-C5TQA9s1.js +1 -0
  118. package/dist/assets/{fr-C5fh5fdm.js → fr-CMgZc3LR.js} +1 -1
  119. package/dist/assets/{fuel-XF4sXoDA.js → fuel-C7otG6Kf.js} +1 -1
  120. package/dist/assets/{fullpage-BOyZgu9A.js → fullpage-C4Et_NyD.js} +1 -1
  121. package/dist/assets/hi-C_Mli2FO.js +1 -0
  122. package/dist/assets/hi-Ch52Lky6.js +1 -0
  123. package/dist/assets/{home-Dajv5NTd.js → home-CZCCRVbe.js} +1 -1
  124. package/dist/assets/id-BkncNzMh.js +1 -0
  125. package/dist/assets/id-_x67Rh2B.js +1 -0
  126. package/dist/assets/{iframe-CmugPIuF.js → iframe-CPKiwkND.js} +1 -1
  127. package/dist/assets/index-AgTn3eU4.js +68 -0
  128. package/dist/assets/{index-DHNVLiI8.js → index-B3ThwVSS.js} +1 -1
  129. package/dist/assets/{index-BRJLJSjg.js → index-BCMjvLku.js} +2 -2
  130. package/dist/assets/{index-CrurRDDC.js → index-BK9kuqs5.js} +1 -1
  131. package/dist/assets/index-BRnCFYx3.js +262 -0
  132. package/dist/assets/{index-Dcphtm5y.js → index-BWVDn9BP.js} +1 -1
  133. package/dist/assets/{index-DfZjT3WA.js → index-BaC4EhQh.js} +212 -121
  134. package/dist/assets/index-Bc3FFnWG.js +126 -0
  135. package/dist/assets/{index-BtQK2llU.js → index-BlvJrvQX.js} +2 -2
  136. package/dist/assets/{index-CTFB4nHV.js → index-BrFlqDrV.js} +3 -3
  137. package/dist/assets/{index-BrcKk7u6.js → index-BzY4clAs.js} +1 -1
  138. package/dist/assets/{index-CFmNTsQh.js → index-CD6yQnY4.js} +1 -1
  139. package/dist/assets/{index-BvZ1bsPZ.js → index-CFpdZL6w.js} +5 -5
  140. package/dist/assets/{index-UKHQeYs5.js → index-CH2n2mOS.js} +1 -1
  141. package/dist/assets/index-CT70Tuv9.js +329 -0
  142. package/dist/assets/{index-BisUmH-h.js → index-CTil0VJz.js} +1 -1
  143. package/dist/assets/{index-C0qYe9TG.js → index-CWjTgh2V.js} +1 -1
  144. package/dist/assets/{index-D5lkEFWM.js → index-CbBjirNE.js} +1 -1
  145. package/dist/assets/{index-Ca5y7O4k.js → index-Cfnr_7cH.js} +12 -12
  146. package/dist/assets/{index-DPyKucXe.js → index-ChWrF7R7.js} +1 -1
  147. package/dist/assets/{index-Cixwi4BX.js → index-CzxDEhmG.js} +1 -1
  148. package/dist/assets/index-D9e3uQkW.js +4 -0
  149. package/dist/assets/{index-TlMkikTm.js → index-DPXmNWqb.js} +1 -1
  150. package/dist/assets/{index-hv_yaUi2.js → index-DR40cJFL.js} +4 -4
  151. package/dist/assets/{index-D0ZBFe_v.js → index-DiOkeCOc.js} +12 -12
  152. package/dist/assets/{index-DCkU-F0r.js → index-Dp6zROo4.js} +1 -1
  153. package/dist/assets/{index-p81jbN_h.js → index-Ez2y1Lea.js} +1 -1
  154. package/dist/assets/{index-C2sin8wt.js → index-TwQfcdR0.js} +1 -1
  155. package/dist/assets/{index-BK4259Qj.js → index-hkkOggLS.js} +1 -1
  156. package/dist/assets/{index-BiafpQ0u.js → index-lVfYf5Oq.js} +40 -40
  157. package/dist/assets/{index-BtQOF6n3.js → index-s95vTNww.js} +1 -1
  158. package/dist/assets/{index.es-w-0rtBPs.js → index.es-CkGqU4MQ.js} +1 -1
  159. package/dist/assets/index.esm-8yCk0S5h.js +1 -0
  160. package/dist/assets/{invitation-KAlNPJe6.js → invitation-DAGy7I2M.js} +1 -1
  161. package/dist/assets/{invite-C_RF0Rm2.js → invite-06pBNgrg.js} +1 -1
  162. package/dist/assets/{issue-passport-DM7CKvcB.js → issue-passport-CbtgsLgQ.js} +1 -1
  163. package/dist/assets/item-B0XIEv1j.js +1 -0
  164. package/dist/assets/ja-BemsOTjE.js +1 -0
  165. package/dist/assets/ja-j9_7sWtG.js +1 -0
  166. package/dist/assets/{jss-plugin-props-sort.esm-BzROyw1n.js → jss-plugin-props-sort.esm-D4wv_NcC.js} +1 -1
  167. package/dist/assets/ko-BcDVaiV3.js +1 -0
  168. package/dist/assets/ko-CqkhhVdi.js +1 -0
  169. package/dist/assets/{launch-result-message-CIfX9Pg1.js → launch-result-message-BGkFHBr0.js} +1 -1
  170. package/dist/assets/{layout-Bb2LZLxa.js → layout-C1fJ0PwQ.js} +2 -2
  171. package/dist/assets/{list-header-BDhQIu5L.js → list-header-D2TsmXsU.js} +1 -1
  172. package/dist/assets/localization-IrbI0TJr.js +1 -0
  173. package/dist/assets/{log-o0iKO5dx.js → log-Bx1CDJfR.js} +1 -1
  174. package/dist/assets/{login-B9UvusG-.js → login-Ci8kprd2.js} +1 -1
  175. package/dist/assets/{login-oauth-callback-cZ3oa4a_.js → login-oauth-callback-OcVe-Pko.js} +1 -1
  176. package/dist/assets/logo-uploader-DPtvNrwp.js +122 -0
  177. package/dist/assets/lost-passport-DQYzD5oM.js +168 -0
  178. package/dist/assets/{lottie-DsjCdNh-.js → lottie-Dtcij0yx.js} +1 -1
  179. package/dist/assets/notifications-u_yxMKF9.js +62 -0
  180. package/dist/assets/{open-window-B5RcEIrm.js → open-window-Ca8SnnJR.js} +1 -1
  181. package/dist/assets/overview-hyt-Fv0L.js +12 -0
  182. package/dist/assets/{page-header-BvuGyCDw.js → page-header-DZBo2jY4.js} +1 -1
  183. package/dist/assets/{permission-BuA9Zt4q.js → permission-DDD12SuE.js} +1 -1
  184. package/dist/assets/{preferences-BzcjmMUC.js → preferences-BzxjYd2D.js} +1 -1
  185. package/dist/assets/pt-DZmF_qcN.js +1 -0
  186. package/dist/assets/pt-NjuvVfFo.js +1 -0
  187. package/dist/assets/publish-resource-BL3ifBGp.js +1 -0
  188. package/dist/assets/react-iXxw1Yhu.js +57 -0
  189. package/dist/assets/{redux-BDPBPXLM.js → redux-Bma4eNss.js} +1 -1
  190. package/dist/assets/resource-dialog-DhmviK8K.js +57 -0
  191. package/dist/assets/ru-BFNdjdAO.js +1 -0
  192. package/dist/assets/ru-BsFEd75u.js +1 -0
  193. package/dist/assets/sdk-B37oViy1.js +1 -0
  194. package/dist/assets/{selector-DktPytoX.js → selector-B8IAFODK.js} +3 -3
  195. package/dist/assets/session-D3mS3Gz5.js +1 -0
  196. package/dist/assets/setup-TXTEwwLA.js +19 -0
  197. package/dist/assets/{shorten-label-3owfLRzi.js → shorten-label-DWH-tsmz.js} +1 -1
  198. package/dist/assets/{slicedToArray-CQG0j1sa.js → slicedToArray-Doa8i3Sy.js} +2 -2
  199. package/dist/assets/{spaces-DDj9ynWl.js → spaces-DPfrZKXe.js} +1 -1
  200. package/dist/assets/{start-DCKDZC67.js → start-DwEZv43D.js} +1 -1
  201. package/dist/assets/{step-actions-CoJc8417.js → step-actions-B1vsf_QO.js} +1 -1
  202. package/dist/assets/{studio-B_0UB40R.js → studio-CTK5QQPt.js} +1 -1
  203. package/dist/assets/{switch-control-Bun_5Zkk.js → switch-control-DJhTvGtn.js} +1 -1
  204. package/dist/assets/th-B61cOYck.js +1 -0
  205. package/dist/assets/th-C7TEM40B.js +1 -0
  206. package/dist/assets/{toUpper-Bf_TQKK7.js → toUpper-Bff1Q0mA.js} +1 -1
  207. package/dist/assets/{transfer-C7Cxyvnx.js → transfer-IRhzEeuE.js} +1 -1
  208. package/dist/assets/{uniqBy-BqI7ffNX.js → uniqBy-DIeGY4K_.js} +1 -1
  209. package/dist/assets/{unsubscribe-B-iaO9gM.js → unsubscribe-CwygyLJZ.js} +1 -1
  210. package/dist/assets/{url-join-BoNn2Qh7.js → url-join-D5TK65dM.js} +1 -1
  211. package/dist/assets/{use-blocklet-info-for-connect-did-spaces-CfK0RcTD.js → use-blocklet-info-for-connect-did-spaces-DaNxIRBj.js} +1 -1
  212. package/dist/assets/{use-mobile-C19pzcVe.js → use-mobile-BA_cO1yG.js} +1 -1
  213. package/dist/assets/{useAsync-Ca_M5Jhn.js → useAsync-Bl2lmnoD.js} +1 -1
  214. package/dist/assets/{useFormControl-Cs3LGXJe.js → useFormControl-CAWQrhew.js} +1 -1
  215. package/dist/assets/{useLocalStorage-3-rj5S6B.js → useLocalStorage-DkK4fk62.js} +1 -1
  216. package/dist/assets/{useSetState-BTR-3GfC.js → useSetState-OuMAH4bG.js} +1 -1
  217. package/dist/assets/useSlot-nO86v-Bn.js +1 -0
  218. package/dist/assets/{useSlotProps-CCXsWmb3.js → useSlotProps-B8lkbwkT.js} +1 -1
  219. package/dist/assets/{useThemeProps-BjkDmxHT.js → useThemeProps-CIT7yB5m.js} +1 -1
  220. package/dist/assets/user-center-BEb-hcxI.js +1 -0
  221. package/dist/assets/user-sessions-D_s7CT2k.js +1 -0
  222. package/dist/assets/{util-DBNeRhAr.js → util-znUxW1sG.js} +1 -1
  223. package/dist/assets/vi-B884zOLu.js +1 -0
  224. package/dist/assets/vi-C1X-AoyG.js +1 -0
  225. package/dist/assets/wrap-locale-BjkpLOO0.js +1 -0
  226. package/dist/assets/zh-DjEnl7LY.js +1 -0
  227. package/dist/assets/zh-kNAPjCk5.js +2 -0
  228. package/dist/assets/zh-tw-Bn1Pkz9A.js +1 -0
  229. package/dist/assets/zh-tw-DSZuinRu.js +1 -0
  230. package/dist/index.html +1 -1
  231. package/dist/service-worker.js +1 -1
  232. package/package.json +26 -25
  233. package/api/util/constants.js +0 -10
  234. package/dist/assets/AddBox-BpwHbwbG.js +0 -1
  235. package/dist/assets/Alert-Dlco0B3L.js +0 -1
  236. package/dist/assets/Avatar-B1SFM1MR.js +0 -1
  237. package/dist/assets/FilterList-DumRQ8ls.js +0 -26
  238. package/dist/assets/FormControl-CeSJJZgZ.js +0 -1
  239. package/dist/assets/FormControlLabel-CpH9LTeH.js +0 -1
  240. package/dist/assets/FormGroup-B0Xdxgiy.js +0 -1
  241. package/dist/assets/TextField-D_Jtjg13.js +0 -1
  242. package/dist/assets/Toolbar-D7_EWzTj.js +0 -1
  243. package/dist/assets/access-control-YUBGali8.js +0 -13
  244. package/dist/assets/add-resource-BJ9u32jP.js +0 -1
  245. package/dist/assets/api-DbvHYaVa.js +0 -1
  246. package/dist/assets/ar-BSACs5SN.js +0 -1
  247. package/dist/assets/ar-lTVP4T3d.js +0 -1
  248. package/dist/assets/audit-logs-C1AOwGce.js +0 -58
  249. package/dist/assets/component-npmbPVSM.js +0 -464
  250. package/dist/assets/confirm-3b8GTIgU.js +0 -7
  251. package/dist/assets/connect-to-B0Td9yUD.js +0 -54
  252. package/dist/assets/de-B3TxaybY.js +0 -1
  253. package/dist/assets/domain-CkCbH8sj.js +0 -9
  254. package/dist/assets/es-BY0KMFme.js +0 -1
  255. package/dist/assets/es-Bk9E9Gbf.js +0 -1
  256. package/dist/assets/format-error-BVI56bJg.js +0 -2
  257. package/dist/assets/fr-BiVZLeXU.js +0 -1
  258. package/dist/assets/hi-B_LrkIOS.js +0 -1
  259. package/dist/assets/hi-HiGtGtUs.js +0 -1
  260. package/dist/assets/id-CirrqXGd.js +0 -1
  261. package/dist/assets/id-jBXPD1he.js +0 -1
  262. package/dist/assets/index-2xySyQ5i.js +0 -262
  263. package/dist/assets/index-B0NvcpjT.js +0 -1
  264. package/dist/assets/index-B7Un-ZeO.js +0 -68
  265. package/dist/assets/index-BP53WpUP.js +0 -4
  266. package/dist/assets/index-C1Puqx4M.js +0 -304
  267. package/dist/assets/index-CLQi4cVY.js +0 -126
  268. package/dist/assets/index.esm-CptJw3C8.js +0 -1
  269. package/dist/assets/item-DIkrlQMP.js +0 -1
  270. package/dist/assets/ja-BOs7uPqI.js +0 -1
  271. package/dist/assets/ja-DKiHQ6DE.js +0 -1
  272. package/dist/assets/ko-BBYyf1yM.js +0 -1
  273. package/dist/assets/ko-D1G4UvNg.js +0 -1
  274. package/dist/assets/localization-V0WRiXKC.js +0 -1
  275. package/dist/assets/logo-uploader-D4yqBa_O.js +0 -122
  276. package/dist/assets/lost-passport-soFqeEb7.js +0 -168
  277. package/dist/assets/notifications-B9Mu8Fxb.js +0 -62
  278. package/dist/assets/overview-CFbnZdV0.js +0 -12
  279. package/dist/assets/pt-CcFeyma6.js +0 -1
  280. package/dist/assets/pt-DI2MIkSi.js +0 -1
  281. package/dist/assets/publish-resource-DwhFCZXw.js +0 -1
  282. package/dist/assets/react-CwUjkFxY.js +0 -57
  283. package/dist/assets/resource-dialog-BBzXGjTp.js +0 -57
  284. package/dist/assets/ru-B2L3CRQ4.js +0 -1
  285. package/dist/assets/ru-OymXgLUI.js +0 -1
  286. package/dist/assets/sdk-CI7TJ_xu.js +0 -1
  287. package/dist/assets/session-Cw-dytKR.js +0 -1
  288. package/dist/assets/setup-DRfpHXNv.js +0 -19
  289. package/dist/assets/th-CZbdb5PZ.js +0 -1
  290. package/dist/assets/th-CfNBHHtU.js +0 -1
  291. package/dist/assets/useSlot-C1f6ZTLt.js +0 -1
  292. package/dist/assets/user-center-BN2FDsvO.js +0 -1
  293. package/dist/assets/user-sessions-BIEmgTqD.js +0 -1
  294. package/dist/assets/vi-DbzhnofW.js +0 -1
  295. package/dist/assets/vi-DhjQx2Z1.js +0 -1
  296. package/dist/assets/wrap-locale-D7L9anic.js +0 -1
  297. package/dist/assets/zh-FO0C29Rb.js +0 -1
  298. package/dist/assets/zh-jGK5FFL0.js +0 -2
  299. package/dist/assets/zh-tw-DnmwTx49.js +0 -1
  300. package/dist/assets/zh-tw-cyWwf75a.js +0 -1
@@ -3,13 +3,13 @@ const { BLOCKLET_OPENEMBED_PREFIX } = require('@blocklet/constant');
3
3
  const pMap = require('p-map');
4
4
  const YAML = require('yaml');
5
5
  const { joinURL, withQuery, withLeadingSlash, withoutTrailingSlash } = require('ufo');
6
- const { fromAppDid } = require('@arcblock/did-ext');
7
- const { types } = require('@ocap/mcrypto');
6
+ const { types, Hasher } = require('@ocap/mcrypto');
8
7
  const { hasStartEngine } = require('@blocklet/meta/lib/util');
8
+ const { fromPublicKey } = require('@ocap/wallet');
9
9
 
10
10
  const { api } = require('../libs/api');
11
11
 
12
- async function getComponentOpenEmbedData(component, { generateDid }) {
12
+ async function getComponentOpenEmbedData(component) {
13
13
  const port = component?.ports?.BLOCKLET_PORT || component?.environmentObj?.BLOCKLET_PORT;
14
14
  // NOTICE: 此处更倾向于使用本地地址,这也能达到更快的速度
15
15
  const url = joinURL(`http://127.0.0.1:${port}`, BLOCKLET_OPENEMBED_PREFIX);
@@ -40,7 +40,10 @@ async function getComponentOpenEmbedData(component, { generateDid }) {
40
40
  const mergedPathname = joinURL(mountPoint, pathname);
41
41
  const pathItem = result.embeds[pathname];
42
42
  pathItem.tags = [title];
43
- const itemWallet = generateDid(JSON.stringify(['openembed', did, pathname]));
43
+ const walletPk = Hasher.SHA3.hash256(JSON.stringify(['openembed', did, pathname]));
44
+ const itemWallet = fromPublicKey(walletPk, {
45
+ role: types.RoleType.ROLE_ANY,
46
+ });
44
47
  pathItem['x-meta'] = {
45
48
  id: itemWallet.address,
46
49
  did,
@@ -103,7 +106,7 @@ async function mergeOpenEmbed(dataList, { blocklet, node }) {
103
106
  };
104
107
  }
105
108
 
106
- async function generateOpenEmbedData({ blocklet, did, generateDid, node }) {
109
+ async function generateOpenEmbedData({ blocklet, did, node }) {
107
110
  const blockletCompontList = blocklet?.children || [];
108
111
  const appUrl = blocklet?.environmentObj?.BLOCKLET_APP_URL;
109
112
  const healthCheckUrl = joinURL(appUrl, '/.well-known/service/health');
@@ -116,20 +119,16 @@ async function generateOpenEmbedData({ blocklet, did, generateDid, node }) {
116
119
  if (did) {
117
120
  const findComponent = runningCompontList.find((component) => component?.meta?.did === did);
118
121
  if (findComponent) {
119
- const result = getComponentOpenEmbedData(findComponent, { baseUrl: appUrl, generateDid });
122
+ const result = getComponentOpenEmbedData(findComponent, { baseUrl: appUrl });
120
123
  return result;
121
124
  }
122
125
  return null;
123
126
  }
124
127
  // 多个 component 组合
125
- const componentListData = await pMap(
126
- runningCompontList,
127
- (x) => getComponentOpenEmbedData(x, { baseUrl: appUrl, generateDid }),
128
- {
129
- concurrency: 3,
130
- stopOnError: false,
131
- }
132
- );
128
+ const componentListData = await pMap(runningCompontList, (x) => getComponentOpenEmbedData(x, { baseUrl: appUrl }), {
129
+ concurrency: 3,
130
+ stopOnError: false,
131
+ });
133
132
  const result = await mergeOpenEmbed(componentListData, { blocklet, node });
134
133
  return result;
135
134
  }
@@ -140,12 +139,7 @@ module.exports = {
140
139
  app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/openembed.yaml`, async (req, res) => {
141
140
  const { did } = req.query;
142
141
  const blocklet = await req.getBlocklet({ useCache: false });
143
- const { permanentWallet } = await req.getBlockletInfo();
144
- const rootSk = permanentWallet.secretKey;
145
- function generateDid(didPath) {
146
- return fromAppDid(didPath, rootSk, types.RoleType.ROLE_ASSET);
147
- }
148
- const data = await generateOpenEmbedData({ blocklet, did, generateDid, node });
142
+ const data = await generateOpenEmbedData({ blocklet, did, node });
149
143
  const ymlData = YAML.stringify(data);
150
144
  res.setHeader('Content-Disposition', 'attachment; filename="openembed.yml"');
151
145
  res.status(200).send(ymlData);
@@ -154,13 +148,8 @@ module.exports = {
154
148
  app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/openembed.json`, async (req, res) => {
155
149
  const { did } = req.query;
156
150
  const blocklet = await req.getBlocklet({ useCache: false });
157
- const { permanentWallet } = await req.getBlockletInfo();
158
- const rootSk = permanentWallet.secretKey;
159
- function generateDid(didPath) {
160
- return fromAppDid(didPath, rootSk, types.RoleType.ROLE_ASSET);
161
- }
162
151
 
163
- const data = await generateOpenEmbedData({ blocklet, did, generateDid, node });
152
+ const data = await generateOpenEmbedData({ blocklet, did, node });
164
153
  res.status(200).json(data);
165
154
  });
166
155
  },
@@ -201,6 +201,8 @@ module.exports = {
201
201
  fullName: loggedInUser.fullName,
202
202
  provider,
203
203
  walletOS,
204
+ emailVerified: !!user.emailVerified,
205
+ phoneVerified: !!user.phoneVerified,
204
206
  },
205
207
  {
206
208
  ...sessionConfig,
@@ -295,7 +295,6 @@ async function login(req, node, options) {
295
295
  );
296
296
 
297
297
  const { createSessionToken } = initJwt(node, options);
298
-
299
298
  const createToken = createTokenFn(createSessionToken);
300
299
  const sessionConfig = blocklet.settings?.session || {};
301
300
  const { sessionToken, refreshToken } = createToken(
@@ -307,6 +306,8 @@ async function login(req, node, options) {
307
306
  fullName: userDoc.fullName,
308
307
  provider,
309
308
  walletOS: 'api',
309
+ emailVerified: !!userDoc.emailVerified,
310
+ phoneVerified: !!userDoc.phoneVerified,
310
311
  },
311
312
  { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
312
313
  );
@@ -526,6 +527,8 @@ module.exports = {
526
527
  fullName: loggedInUser.fullName,
527
528
  provider: 'wallet',
528
529
  walletOS,
530
+ emailVerified: !!loggedInUser.emailVerified,
531
+ phoneVerified: !!loggedInUser.phoneVerified,
529
532
  },
530
533
  { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
531
534
  );
@@ -801,7 +804,19 @@ module.exports = {
801
804
  }
802
805
 
803
806
  res.json(
804
- pick(user || {}, ['did', 'locale', 'avatar', 'fullName', 'email', 'phone', 'url', 'inviter', 'generation'])
807
+ pick(user || {}, [
808
+ 'did',
809
+ 'locale',
810
+ 'avatar',
811
+ 'fullName',
812
+ 'email',
813
+ 'phone',
814
+ 'url',
815
+ 'inviter',
816
+ 'generation',
817
+ 'emailVerified',
818
+ 'phoneVerified',
819
+ ])
805
820
  );
806
821
  });
807
822
 
@@ -1,38 +1,35 @@
1
1
  /* eslint-disable consistent-return */
2
2
  const fs = require('fs-extra');
3
3
  const { getHtmlResultPath } = require('@abtnode/analytics');
4
-
5
- const { PREFIXES } = require('../../util/constants');
4
+ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
6
5
 
7
6
  module.exports = {
8
7
  init({ app, node }) {
9
- PREFIXES.forEach((prefix) => {
10
- app.get(`${prefix}/api/analytics/traffic`, async (req, res) => {
11
- if (!req.user) {
12
- return res.status(403).send('You are not allowed to view this page');
13
- }
8
+ app.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/api/analytics/traffic`, async (req, res) => {
9
+ if (!req.user) {
10
+ return res.status(403).send('You are not allowed to view this page');
11
+ }
14
12
 
15
- const blocklet = await req.getBlocklet();
16
- if (!blocklet) {
17
- return res.status(400).send('Blocklet not found');
18
- }
13
+ const blocklet = await req.getBlocklet();
14
+ if (!blocklet) {
15
+ return res.status(400).send('Blocklet not found');
16
+ }
19
17
 
20
- if (blocklet.mode !== 'production') {
21
- return res.status(400).send('Traffic analytics are only available for production blocklets');
22
- }
18
+ if (blocklet.mode !== 'production') {
19
+ return res.status(400).send('Traffic analytics are only available for production blocklets');
20
+ }
23
21
 
24
- const { date } = req.query;
25
- if (!date) {
26
- return res.status(400).send('Date is required to load traffic analytics');
27
- }
22
+ const { date } = req.query;
23
+ if (!date) {
24
+ return res.status(400).send('Date is required to load traffic analytics');
25
+ }
28
26
 
29
- const filePath = getHtmlResultPath(node.dataDirs.data, date, blocklet.appPid);
30
- if (fs.existsSync(filePath) === false) {
31
- return res.status(400).send('Traffic insight for selected date not found');
32
- }
27
+ const filePath = getHtmlResultPath(node.dataDirs.data, date, blocklet.appPid);
28
+ if (fs.existsSync(filePath) === false) {
29
+ return res.status(400).send('Traffic insight for selected date not found');
30
+ }
33
31
 
34
- return res.sendFile(filePath);
35
- });
32
+ return res.sendFile(filePath);
36
33
  });
37
34
  },
38
35
  };
@@ -1,4 +1,3 @@
1
- const get = require('lodash/get');
2
1
  const { joinURL } = require('ufo');
3
2
  const {
4
3
  createInvitationRequest,
@@ -8,12 +7,15 @@ const {
8
7
  beforeInvitationRequest,
9
8
  } = require('@abtnode/auth/lib/auth');
10
9
  const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
11
- const { NODE_SERVICES, WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
10
+ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
12
11
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
13
12
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
14
13
 
15
14
  const { createTokenFn, getDidConnectVersion } = require('../../../util');
16
15
  const { getUserWithinFederated } = require('../../../util/federated');
16
+ const { getProfileItems, getKycClaims, verifyKycClaims } = require('../../../libs/kyc');
17
+ const { getTrustedIssuers } = require('../../../util/blocklet-utils');
18
+ const { getUser } = require('../../../libs/jwt');
17
19
  const logger = require('../../../libs/logger')('auth');
18
20
 
19
21
  module.exports = function createRoutes(node, authenticator, createSessionToken) {
@@ -27,37 +29,37 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
27
29
  await beforeInvitationRequest({ node, teamDid, locale, inviteId });
28
30
  },
29
31
 
30
- claims: {
31
- profile: async ({ extraParams, context }) => {
32
- const { locale } = extraParams;
32
+ onConnect: async ({ userDid, extraParams, request, baseUrl, didwallet }) => {
33
+ const { locale, inviteId } = extraParams;
34
+ checkWalletVersion({ didwallet, locale });
35
+ const nodeInfo = await request.getNodeInfo();
36
+ const blocklet = await request.getBlocklet();
37
+ const teamDid = request.get('x-blocklet-did');
33
38
 
34
- const config = await context.request.getServiceConfig(NODE_SERVICES.AUTH);
35
- const profileFields = get(config, 'profileFields');
36
-
37
- return {
38
- fields: profileFields || ['fullName', 'avatar'],
39
+ const claims = {
40
+ profile: {
41
+ fields: getProfileItems(blocklet.settings?.session, didwallet),
39
42
  description: messages.description[locale],
40
- };
41
- },
42
-
43
- signature: async ({ extraParams, context: { request, baseUrl, didwallet } }) => {
44
- const { locale, inviteId } = extraParams;
45
- checkWalletVersion({ didwallet, locale });
46
- const nodeInfo = await request.getNodeInfo();
47
- const teamDid = request.get('x-blocklet-did');
48
-
49
- return createInvitationRequest({
43
+ },
44
+ signature: await createInvitationRequest({
50
45
  node,
51
46
  nodeInfo,
52
47
  teamDid,
53
48
  inviteId,
54
49
  locale,
55
50
  baseUrl,
56
- });
57
- },
51
+ }),
52
+ };
53
+
54
+ const sourceAppPid = getSourceAppPid(request);
55
+ const user = await getUser(node, teamDid, userDid);
56
+ const trustedIssuers = await getTrustedIssuers(blocklet, { sourceAppPid });
57
+ Object.assign(claims, getKycClaims(blocklet, user, locale, baseUrl, trustedIssuers));
58
+
59
+ return claims;
58
60
  },
59
61
 
60
- onAuth: async ({ claims, userDid, userPk, updateSession, extraParams, req, baseUrl }) => {
62
+ onAuth: async ({ claims, userDid, userPk, challenge, updateSession, extraParams, req, baseUrl }) => {
61
63
  // NOTICE: 和 did-connect 相关的 visitorId 需要从 extraParams 中获取,不能从 headers 中获取
62
64
  const { locale, inviteId, visitorId } = extraParams;
63
65
  const sourceAppPid = getSourceAppPid(req);
@@ -68,7 +70,18 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
68
70
  const statusEndpointBaseUrl = joinURL(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX);
69
71
  const endpoint = baseUrl;
70
72
 
71
- await getUserWithinFederated({ sourceAppPid, teamDid, userDid, userPk }, { node, blocklet });
73
+ const existUser = await getUserWithinFederated({ sourceAppPid, teamDid, userDid, userPk }, { node, blocklet });
74
+
75
+ const kycUpdates = await verifyKycClaims({
76
+ node,
77
+ blocklet,
78
+ teamDid,
79
+ claims,
80
+ challenge,
81
+ locale,
82
+ sourceAppPid,
83
+ user: existUser,
84
+ });
72
85
 
73
86
  const { passport, response, role, profile, user } = await handleInvitationResponse({
74
87
  req,
@@ -82,6 +95,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
82
95
  claims,
83
96
  statusEndpointBaseUrl,
84
97
  endpoint,
98
+ kycUpdates,
85
99
  });
86
100
 
87
101
  const walletOS = req.context.didwallet.os;
@@ -0,0 +1,58 @@
1
+ const { joinURL } = require('ufo');
2
+ const {
3
+ checkWalletVersion,
4
+ beforeIssueKycRequest,
5
+ handleIssueKycResponse,
6
+ messages,
7
+ } = require('@abtnode/auth/lib/auth');
8
+ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
9
+
10
+ module.exports = function createRoutes(node) {
11
+ return {
12
+ action: 'issue-kyc',
13
+
14
+ onStart: async ({ extraParams, req }) => {
15
+ const { code, locale = 'en' } = extraParams;
16
+ const teamDid = req.get('x-blocklet-did');
17
+ await beforeIssueKycRequest({ node, teamDid, code, locale });
18
+ },
19
+
20
+ claims: {
21
+ profile: ({ extraParams, context: { didwallet } }) => {
22
+ const { locale } = extraParams;
23
+ checkWalletVersion({ didwallet, locale });
24
+ return {
25
+ type: 'profile',
26
+ description: messages.description[locale],
27
+ items: ['fullName', 'avatar'],
28
+ };
29
+ },
30
+ },
31
+
32
+ onAuth: async ({ userDid, userPk, claims, extraParams, request, baseUrl }) => {
33
+ const { locale, code, updateKyc, inviter } = extraParams;
34
+ const nodeInfo = await node.getNodeInfo();
35
+ const teamDid = request.get('x-blocklet-did');
36
+ const statusEndpointBaseUrl = joinURL(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX);
37
+ const endpoint = baseUrl;
38
+
39
+ const result = await handleIssueKycResponse({
40
+ request,
41
+ node,
42
+ nodeInfo,
43
+ teamDid,
44
+ userDid,
45
+ userPk,
46
+ code,
47
+ locale,
48
+ claims,
49
+ statusEndpointBaseUrl,
50
+ endpoint,
51
+ inviter,
52
+ updateKyc: updateKyc === '1',
53
+ });
54
+
55
+ return result;
56
+ },
57
+ };
58
+ };
@@ -58,6 +58,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
58
58
 
59
59
  return result;
60
60
  } catch (err) {
61
+ console.error(err);
61
62
  logger.error('login.error', { error: err, userDid });
62
63
  throw new Error(err.message);
63
64
  }
@@ -0,0 +1,82 @@
1
+ const { messages } = require('@abtnode/auth/lib/auth');
2
+ const { getKycClaims, verifyKycClaims, getProfileItems, isProfileClaimRequired } = require('../../../libs/kyc');
3
+ const { getTrustedIssuers } = require('../../../util/blocklet-utils');
4
+
5
+ // Used to update user kyc status using existing certificates
6
+ // eslint-disable-next-line no-unused-vars
7
+ module.exports = function createRoutes(node, authenticator, createSessionToken) {
8
+ return {
9
+ action: 'update-kyc',
10
+
11
+ onConnect: async ({ userDid, extraParams, request, baseUrl }) => {
12
+ const { locale, sourceAppPid } = extraParams;
13
+ const blocklet = await request.getBlocklet();
14
+ const user = await node.getUser({ teamDid: blocklet.appPid, user: { did: userDid } });
15
+ if (!user) {
16
+ throw new Error(messages.userNotFound[locale]);
17
+ }
18
+ if (!user.approved) {
19
+ throw new Error(messages.notAllowedAppUser[locale]);
20
+ }
21
+
22
+ const claims = {};
23
+ if (isProfileClaimRequired(blocklet, user)) {
24
+ const profileItems = getProfileItems(blocklet.settings?.session, request.context.didwallet);
25
+ claims.profile = {
26
+ type: 'profile',
27
+ description: messages.description[locale],
28
+ items: profileItems,
29
+ };
30
+ }
31
+
32
+ const trustedIssuers = await getTrustedIssuers(blocklet, { sourceAppPid });
33
+ return Object.assign(claims, getKycClaims(blocklet, user, locale, baseUrl, trustedIssuers));
34
+ },
35
+
36
+ onAuth: async ({ userDid, claims, challenge, extraParams, request }) => {
37
+ const { locale, sourceAppPid } = extraParams;
38
+ const profile = claims.find((claim) => claim.type === 'profile');
39
+ const blocklet = await request.getBlocklet();
40
+ const user = await node.getUser({ teamDid: blocklet.appPid, user: { did: userDid } });
41
+ if (!user) {
42
+ throw new Error(messages.userNotFound[locale]);
43
+ }
44
+ if (!user.approved) {
45
+ throw new Error(messages.notAllowedAppUser[locale]);
46
+ }
47
+
48
+ const kycUpdates = await verifyKycClaims({
49
+ node,
50
+ blocklet,
51
+ teamDid: blocklet.appPid,
52
+ claims,
53
+ challenge,
54
+ locale,
55
+ sourceAppPid,
56
+ user,
57
+ });
58
+
59
+ const profileUpdates = {};
60
+ if (profile) {
61
+ if (profile.email) {
62
+ profileUpdates.email = profile.email;
63
+ }
64
+ if (profile.phone) {
65
+ profileUpdates.phone = profile.phone;
66
+ }
67
+ }
68
+
69
+ const updatedUser = await node.updateUser({
70
+ teamDid: blocklet.appPid,
71
+ user: {
72
+ did: userDid,
73
+ kycChanged: true,
74
+ ...kycUpdates,
75
+ ...profileUpdates,
76
+ },
77
+ });
78
+
79
+ return updatedUser;
80
+ },
81
+ };
82
+ };
@@ -10,6 +10,7 @@ const {
10
10
  WHO_CAN_ACCESS,
11
11
  WHO_CAN_ACCESS_PREFIX_ROLES,
12
12
  ROLES,
13
+ WELLKNOWN_SERVICE_PATH_PREFIX,
13
14
  } = require('@abtnode/constant');
14
15
  const { BLOCKLET_MODES } = require('@blocklet/constant');
15
16
  const { setUserInfoHeaders } = require('@abtnode/auth/lib/auth');
@@ -37,12 +38,14 @@ const createCheckHasProjectIdAuth = require('./connect/check-has-project-id');
37
38
  const createFuelAuth = require('./connect/fuel');
38
39
  const createMigrateToStructV2Routes = require('./connect/migrate-app-to-struct-v2');
39
40
  const createTransferAppOwnerRoutes = require('./connect/transfer-app-owner');
41
+ const createIssueKycAuth = require('./connect/issue-kyc');
42
+ const createUpdateKycAuth = require('./connect/update-kyc');
40
43
  const createReceiveTransferAppOwnerRoutes = require('./connect/receive-transfer-app-owner');
41
44
  const createSessionRoutes = require('./session');
42
45
  const createPassportRoutes = require('./passport');
43
46
  const { getRedirectUrl, shouldIgnoreUrl } = require('../../util');
44
- const { PREFIXES } = require('../../util/constants');
45
47
  const { createConnectToDidSpacesForUserRoute } = require('./connect/connect-to-did-spaces-for-user');
48
+ const { isEmailKycRequired } = require('../../libs/kyc');
46
49
 
47
50
  const getTokenFromWsConnect = (req, options) => {
48
51
  const cookies = cookie.parse(req.headers.cookie || '');
@@ -244,6 +247,8 @@ const init = ({ node, options }) => {
244
247
  handler.attach(Object.assign({ app }, createReceiveTransferAppOwnerRoutes(node, options, createSessionToken)));
245
248
  handler.attach(Object.assign({ app }, createGenBlockletKeyPareAuth(node, options, createSessionToken)));
246
249
  handler.attach(Object.assign({ app }, createCheckHasProjectIdAuth(node, options, createSessionToken)));
250
+ handler.attach(Object.assign({ app }, createIssueKycAuth(node, authenticator, createSessionToken)));
251
+ handler.attach(Object.assign({ app }, createUpdateKycAuth(node, authenticator, createSessionToken)));
247
252
  });
248
253
  };
249
254
 
@@ -261,16 +266,14 @@ const init = ({ node, options }) => {
261
266
  };
262
267
  routes.createCommonRoutes = {
263
268
  init: (router) => {
264
- PREFIXES.forEach((prefix) => {
265
- router.get(`${prefix}/redirect-with-login`, async (req, res) => {
266
- if (req.query.setupToken) {
267
- await req.attachSetupToken({ res, token: req.query.setupToken }).catch((error) => {
268
- logger.error('attach login token failed when redirecting with login', { error }); // 不阻塞跳转
269
- });
270
- }
269
+ router.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/redirect-with-login`, async (req, res) => {
270
+ if (req.query.setupToken) {
271
+ await req.attachSetupToken({ res, token: req.query.setupToken }).catch((error) => {
272
+ logger.error('attach login token failed when redirecting with login', { error }); // 不阻塞跳转
273
+ });
274
+ }
271
275
 
272
- res.redirect('/');
273
- });
276
+ res.redirect('/');
274
277
  });
275
278
  },
276
279
  };
@@ -319,6 +322,27 @@ const init = ({ node, options }) => {
319
322
  next();
320
323
  };
321
324
 
325
+ middlewares.checkKyc = async (req, res, next) => {
326
+ if (req.user) {
327
+ const component = await req.getComponent();
328
+ if (component?.mode === 'development') {
329
+ return next();
330
+ }
331
+
332
+ const blocklet = await req.getBlocklet();
333
+ if (isEmailKycRequired(blocklet) && !req.user.emailVerified) {
334
+ if (req.accepts(['html', 'json']) === 'html') {
335
+ return res.redirect(getRedirectUrl({ req, pagePath: '/kyc/email', params: { updateKyc: 1 } }));
336
+ }
337
+
338
+ // Security principles: user should not known the reason
339
+ return res.status(403).json({ code: 403, error: REASON_403 });
340
+ }
341
+ }
342
+
343
+ return next();
344
+ };
345
+
322
346
  middlewares.checkAuth = async (req, res, next) => {
323
347
  const { blocked, authenticated, authorized, payable, requiredRoles } = await checkAuth({ req });
324
348
 
@@ -1,24 +1,21 @@
1
1
  const { getPassportStatus } = require('@abtnode/auth/lib/auth');
2
-
3
- const { PREFIXES } = require('../../util/constants');
2
+ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
4
3
 
5
4
  module.exports = {
6
5
  init(server, node) {
7
- PREFIXES.forEach((prefix) => {
8
- server.get(`${prefix}/api/passport/status`, async (req, res) => {
9
- const { vcId, userDid, locale } = req.query;
10
- const teamDid = req.headers['x-blocklet-did'];
6
+ server.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/api/passport/status`, async (req, res) => {
7
+ const { vcId, userDid, locale } = req.query;
8
+ const teamDid = req.headers['x-blocklet-did'];
11
9
 
12
- // HACK: 这里的 req.query.teamDid 可能是 blocklet 容器化之前的 teamDid(等于 blocklet.yml did),需要根据这个 did 找到现有对应的 teamDid,否则无法使用在容器化之前颁发的通行证来登录
13
- const blocklet = await node.getBlocklet({ did: req.query.teamDid, useCache: true });
14
- if (teamDid !== blocklet?.meta?.did) {
15
- throw new Error('teamDid is invalid');
16
- }
10
+ // HACK: 这里的 req.query.teamDid 可能是 blocklet 容器化之前的 teamDid(等于 blocklet.yml did),需要根据这个 did 找到现有对应的 teamDid,否则无法使用在容器化之前颁发的通行证来登录
11
+ const blocklet = await node.getBlocklet({ did: req.query.teamDid, useCache: true });
12
+ if (teamDid !== blocklet?.meta?.did) {
13
+ throw new Error('teamDid is invalid');
14
+ }
17
15
 
18
- const status = await getPassportStatus({ node, teamDid, userDid, vcId, locale });
16
+ const status = await getPassportStatus({ node, teamDid, userDid, vcId, locale });
19
17
 
20
- res.json(status);
21
- });
18
+ res.json(status);
22
19
  });
23
20
  },
24
21
  };