@abtnode/blocklet-services 1.16.37-beta-20250104-120451-e4049aeb → 1.16.37-beta-20250107-235521-f1778ec0

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 (334) hide show
  1. package/LICENSE +1 -1
  2. package/api/index.js +1 -0
  3. package/api/libs/auth/utils.js +33 -31
  4. package/api/libs/connect/session.js +3 -2
  5. package/api/routes/blocklet.js +1 -1
  6. package/api/routes/oauth.js +22 -112
  7. package/api/routes/user.js +11 -26
  8. package/api/services/auth/connect/receive-transfer-app-owner.js +1 -2
  9. package/api/services/auth/connect/setup.js +7 -2
  10. package/api/services/auth/connect/verify-destroy.js +3 -16
  11. package/api/services/auth/index.js +4 -0
  12. package/api/services/auth/passkey.js +31 -0
  13. package/api/services/auth/passport.js +2 -2
  14. package/api/services/notification/index.js +10 -9
  15. package/api/socket/channel/did.js +3 -0
  16. package/api/socket/util.js +3 -1
  17. package/api/util/attach-shared-utils.js +5 -4
  18. package/api/util/index.js +5 -25
  19. package/dist/assets/Add-XINWD-cR.js +1 -0
  20. package/dist/assets/ArrowDropDown-BPjEGMbu.js +1 -0
  21. package/dist/assets/CheckCircle-B4plT5R4.js +1 -0
  22. package/dist/assets/ChevronLeft-B9PQ366h.js +1 -0
  23. package/dist/assets/ChevronRight-D6hU6q5w.js +1 -0
  24. package/dist/assets/DeleteOutline-CW6vHyu2.js +1 -0
  25. package/dist/assets/Done-CbA_lc17.js +1 -0
  26. package/dist/assets/Download-D114STME.js +1 -0
  27. package/dist/assets/EditIcon-DDucSncy.js +1 -0
  28. package/dist/assets/Error-CspIR8wP.js +1 -0
  29. package/dist/assets/{Google-BAgnJN1d.js → Google-Bzqa7SGD.js} +3 -3
  30. package/dist/assets/InfoOutlined-CQX14YIV.js +1 -0
  31. package/dist/assets/Launch-C1MUjdbY.js +1 -0
  32. package/dist/assets/LaunchOutlined-CeuwA75K.js +1 -0
  33. package/dist/assets/LockIcon-BIlUQ2kd.js +1 -0
  34. package/dist/assets/Loop-CRiiMs26.js +1 -0
  35. package/dist/assets/MoreHoriz-CyRd8YYN.js +1 -0
  36. package/dist/assets/PlayArrow-CpIW2rO1.js +1 -0
  37. package/dist/assets/QuestionMarkCircle-2fDrHopp.js +1 -0
  38. package/dist/assets/ServerLogo-DsurTeGQ.js +1 -0
  39. package/dist/assets/ViewList-VFshTvAg.js +1 -0
  40. package/dist/assets/_createAggregator-sgAa2ai2.js +1 -0
  41. package/dist/assets/abtwallet-o1JAGJkW.png +0 -0
  42. package/dist/assets/access-control-CaDZstFX.js +13 -0
  43. package/dist/assets/actions-BQfRapcY.js +1 -0
  44. package/dist/assets/add-component-core-B6O0kJAO.js +716 -0
  45. package/dist/assets/add-resource-DVAwgArl.js +1 -0
  46. package/dist/assets/addon-B934EFnq.js +31 -0
  47. package/dist/assets/analytics-DxPeznyU.js +47 -0
  48. package/dist/assets/android-Xe96zWxX.png +0 -0
  49. package/dist/assets/api-C7qcY4XU.js +1 -0
  50. package/dist/assets/audit-logs-Cw_LCWlO.js +58 -0
  51. package/dist/assets/base32-CdGlYCm2.js +1 -0
  52. package/dist/assets/branding-CVf-84lW.js +40 -0
  53. package/dist/assets/bundle-avatar-CZnIDw9E.js +1 -0
  54. package/dist/assets/button-DSj-WxvW.js +1 -0
  55. package/dist/assets/click-to-copy-DPKm1p6d.js +1 -0
  56. package/dist/assets/complete-Bf8ALY2S.js +45 -0
  57. package/dist/assets/{component-ChbClWUp.js → component-ChxoGFx9.js} +89 -89
  58. package/dist/assets/config-BUjuVbbC.js +1 -0
  59. package/dist/assets/config-D3mUi5yh.js +32 -0
  60. package/dist/assets/{config-navigation-CWPZjlHO.js → config-navigation-Bjlh79gM.js} +6 -6
  61. package/dist/assets/config-space-B_9C2jTG.js +1 -0
  62. package/dist/assets/confirm-CVFWPron.js +7 -0
  63. package/dist/assets/connect-Bw02nhZ6.js +5 -0
  64. package/dist/assets/connect-to-DL42-aQK.js +1 -0
  65. package/dist/assets/connect-whKFDq3K.js +1 -0
  66. package/dist/assets/{content-layout-B3qFdI6N.js → content-layout-C8ThavEP.js} +1 -1
  67. package/dist/assets/dashboard-Dff3slpj.js +86 -0
  68. package/dist/assets/did-address-DqD0tKOY.js +1 -0
  69. package/dist/assets/domain-CI3XUHBW.js +9 -0
  70. package/dist/assets/domain-list-jO4zHESZ.js +15 -0
  71. package/dist/assets/email-DZG9lqBd.js +18 -0
  72. package/dist/assets/exchange-passport-BMjrpZst.js +1 -0
  73. package/dist/assets/form-text-input-ClGC4JKP.js +11 -0
  74. package/dist/assets/{format-error-CpEoP1rb.js → format-error-C0Ke3VXF.js} +2 -2
  75. package/dist/assets/fuel-2t6oVtfW.js +32 -0
  76. package/dist/assets/fullpage-BiUo6gQd.js +1 -0
  77. package/dist/assets/get-safe-url-BtfNFuK0.js +1 -0
  78. package/dist/assets/get-safe-url-CV9wUymi.js +1 -0
  79. package/dist/assets/home-BpXMOH1X.js +1 -0
  80. package/dist/assets/iframe-03f6PMsP.js +1 -0
  81. package/dist/assets/index-1yj7N3BD.js +243 -0
  82. package/dist/assets/{index-CqfW2FZt.js → index-7gknQYQQ.js} +2 -2
  83. package/dist/assets/index-BRPzwIuP.js +1 -0
  84. package/dist/assets/index-BgE0mEyw.js +221 -0
  85. package/dist/assets/index-BqtzbaK6.js +5 -0
  86. package/dist/assets/index-BvpWi6M_.js +1 -0
  87. package/dist/assets/index-C89HTHWf.js +144 -0
  88. package/dist/assets/{index-D8zCBBsy.js → index-CEyrfuix.js} +1 -1
  89. package/dist/assets/index-CTEk7-E8.js +4 -0
  90. package/dist/assets/index-CcsFwEG1.js +1 -0
  91. package/dist/assets/index-ChdU5l0G.js +104 -0
  92. package/dist/assets/index-Cp3ZCh7o.js +1 -0
  93. package/dist/assets/index-D3rhPCZn.js +291 -0
  94. package/dist/assets/index-DOWnRwIi.js +134 -0
  95. package/dist/assets/{index-Cbi6kl34.js → index-DPyw3Xwp.js} +2 -2
  96. package/dist/assets/index-DQR2LIPC.js +11 -0
  97. package/dist/assets/index-DVYdq7IA.js +1 -0
  98. package/dist/assets/{index-Gze7IkP6.js → index-DoZ2YM4T.js} +1 -1
  99. package/dist/assets/index-XlyOkzy1.js +1 -0
  100. package/dist/assets/{index-CH1qAD3K.js → index-kGLQpRJK.js} +22 -22
  101. package/dist/assets/index-qpaXqEVJ.js +5 -0
  102. package/dist/assets/invitation-C8ZNSJG7.js +176 -0
  103. package/dist/assets/invite-wHYq3NmE.js +5 -0
  104. package/dist/assets/ios-CBDmY-ic.png +0 -0
  105. package/dist/assets/isEmail-BWNRBSAy.js +1 -0
  106. package/dist/assets/issue-passport-CIaz_hk6.js +1 -0
  107. package/dist/assets/item-wwVikGMU.js +1 -0
  108. package/dist/assets/{launch-result-message-BelGEFPb.js → launch-result-message-BEuCq9h1.js} +2 -2
  109. package/dist/assets/layout-DBXEc_NJ.js +29 -0
  110. package/dist/assets/list-header-BA3DiTcf.js +57 -0
  111. package/dist/assets/localization-DHa_wuSk.js +1 -0
  112. package/dist/assets/{log-C-mcb3Rv.js → log-Dc1jxENK.js} +9 -9
  113. package/dist/assets/login-BSMkjZ2F.js +1 -0
  114. package/dist/assets/login-oauth-callback-nhEQq-XX.js +1 -0
  115. package/dist/assets/logo-uploader-yBugHtcG.js +133 -0
  116. package/dist/assets/lost-passport-DAsg20NY.js +168 -0
  117. package/dist/assets/{lottie-react.esm-BpyUyTL6.js → lottie-react.esm-CHpXrEmm.js} +1 -1
  118. package/dist/assets/open-window-CVrMznBr.js +1 -0
  119. package/dist/assets/overview-Dc2oVKWy.js +12 -0
  120. package/dist/assets/{page-header-cgpPCMon.js → page-header-Htib6ejn.js} +1 -1
  121. package/dist/assets/permission-Bz0PVI3J.js +1 -0
  122. package/dist/assets/preferences-BVtsOmzg.js +1 -0
  123. package/dist/assets/publish-resource-6mtBRA7-.js +1 -0
  124. package/dist/assets/raf-schd.esm-Cxhj8umC.js +1 -0
  125. package/dist/assets/{react-beautiful-dnd.esm-C5fDIc0r.js → react-beautiful-dnd.esm-BPPmOpgZ.js} +4 -4
  126. package/dist/assets/relative-time-D13g3uDZ.js +1 -0
  127. package/dist/assets/sdk-BU36VFtK.js +1 -0
  128. package/dist/assets/session-6sDuFWud.js +1 -0
  129. package/dist/assets/setup-B2Eq0dKO.js +19 -0
  130. package/dist/assets/shorten-label-CKNjZbhF.js +1 -0
  131. package/dist/assets/simple-select-BMYrmYam.js +1 -0
  132. package/dist/assets/slicedToArray-BPEJIbVV.js +2 -0
  133. package/dist/assets/start-DcyUXnHe.js +187 -0
  134. package/dist/assets/step-actions-BdC024Vn.js +31 -0
  135. package/dist/assets/studio-BSlFbK1F.js +6 -0
  136. package/dist/assets/switch-control-DOeNAipI.js +13 -0
  137. package/dist/assets/toUpper-CPtwa1LG.js +1 -0
  138. package/dist/assets/transfer-l-kgY192.js +16 -0
  139. package/dist/assets/unsubscribe-Bn1ZPibc.js +1 -0
  140. package/dist/assets/use-mobile-DOkke39c.js +1 -0
  141. package/dist/assets/useAsync-Barwm_ml.js +1 -0
  142. package/dist/assets/useAsyncRetry-Ct0h3JKq.js +7 -0
  143. package/dist/assets/useLocalStorage-Bkgi6BS3.js +1 -0
  144. package/dist/assets/useSetState-Crt4S51m.js +1 -0
  145. package/dist/assets/user-center-tko9eOwU.js +202 -0
  146. package/dist/assets/util-Cd3QOWLR.js +1 -0
  147. package/dist/assets/{index-B4oT57Ax.css → vendor-arcblock-DhgPdlEj.css} +1 -1
  148. package/dist/assets/vendor-arcblock-oreSqNjg.js +3503 -0
  149. package/dist/assets/vendor-hooks-DHHsWSqV.js +7 -0
  150. package/dist/assets/vendor-mui-core-COxJgW9_.js +267 -0
  151. package/dist/assets/vendor-mui-x-Be0GxtOJ.js +6 -0
  152. package/dist/assets/vendor-react-D-afvo_7.js +61 -0
  153. package/dist/assets/vendor-utils-CV7RLr7b.js +11 -0
  154. package/dist/assets/wrap-locale-Dajt8i2A.js +1 -0
  155. package/dist/index.html +7 -2
  156. package/dist/service-worker.js +1 -1
  157. package/package.json +39 -39
  158. package/dist/assets/Add-B3vUgBj_.js +0 -1
  159. package/dist/assets/Alert-BeI3TGsH.js +0 -1
  160. package/dist/assets/ArrowDropDown-BDen6kv8.js +0 -1
  161. package/dist/assets/Autocomplete-B9XdXNLV.js +0 -1
  162. package/dist/assets/Avatar-VP6VjO6F.js +0 -1
  163. package/dist/assets/ButtonGroup-BQ3t8F0M.js +0 -1
  164. package/dist/assets/CSSTransition-CAyI_Voi.js +0 -1
  165. package/dist/assets/CheckCircle-C2NNCmBl.js +0 -1
  166. package/dist/assets/ChevronLeft-CnYlL3td.js +0 -1
  167. package/dist/assets/ChevronRight-CW0I-au3.js +0 -1
  168. package/dist/assets/Clear-CJ32w-ta.js +0 -1
  169. package/dist/assets/CloseOutlined-sL5HP2JB.js +0 -1
  170. package/dist/assets/Delete-Cw0XHQbI.js +0 -1
  171. package/dist/assets/DeleteOutline-CNDiVs89.js +0 -1
  172. package/dist/assets/DialogContentText-CEsqdDWz.js +0 -1
  173. package/dist/assets/Done-B1Id3HZ7.js +0 -1
  174. package/dist/assets/Download-5eyWxKFR.js +0 -1
  175. package/dist/assets/EditIcon-CyjMgREV.js +0 -1
  176. package/dist/assets/Error-CUxzkNdG.js +0 -1
  177. package/dist/assets/ExpandMore-CLLcIz7v.js +0 -1
  178. package/dist/assets/FormControl-BXjjQ2Cl.js +0 -1
  179. package/dist/assets/FormControlLabel-CRQiOFgY.js +0 -1
  180. package/dist/assets/FormGroup-CPYnhZEp.js +0 -1
  181. package/dist/assets/Grid-vQ4in7aJ.js +0 -1
  182. package/dist/assets/HelpOutline-CMsKsWc3.js +0 -1
  183. package/dist/assets/Hidden-ideB0Yow.js +0 -1
  184. package/dist/assets/InfoOutlined-5WyW673W.js +0 -1
  185. package/dist/assets/InputAdornment-BYO2j_v5.js +0 -1
  186. package/dist/assets/LastPage-CzXhZxbb.js +0 -1
  187. package/dist/assets/Launch-DYv1e-sP.js +0 -1
  188. package/dist/assets/LaunchOutlined-BxjL--pT.js +0 -1
  189. package/dist/assets/Link-BePn_RNM.js +0 -1
  190. package/dist/assets/ListItemButton-DFfqWy-t.js +0 -1
  191. package/dist/assets/ListSubheader-XVI0gGYq.js +0 -1
  192. package/dist/assets/LoadingButton-iTGCDYUz.js +0 -1
  193. package/dist/assets/LockIcon-Cj6s3Czr.js +0 -1
  194. package/dist/assets/Loop-JyIa8s4d.js +0 -1
  195. package/dist/assets/Menu-C6kynm4m.js +0 -1
  196. package/dist/assets/MoreHoriz-Cj6hh2tu.js +0 -1
  197. package/dist/assets/MoreVert-m5BY_p4K.js +0 -1
  198. package/dist/assets/OpenInNew-CIsQ-VD4.js +0 -1
  199. package/dist/assets/OutlinedInput-B93_cuhJ.js +0 -2
  200. package/dist/assets/PlayArrow-CSCQWAOp.js +0 -1
  201. package/dist/assets/QuestionMarkCircle-Bgaj2WkC.js +0 -1
  202. package/dist/assets/RadioGroup-DPurewE-.js +0 -1
  203. package/dist/assets/Search-Cy_vXJXs.js +0 -1
  204. package/dist/assets/Select-BoIViWSN.js +0 -1
  205. package/dist/assets/ServerLogo-C2FfSxkG.js +0 -1
  206. package/dist/assets/Stepper-CDMW7dY4.js +0 -1
  207. package/dist/assets/TextField-apRN2NFH.js +0 -1
  208. package/dist/assets/Toolbar-B0MDD2MX.js +0 -1
  209. package/dist/assets/ViewColumn-DLbcQUHz.js +0 -1
  210. package/dist/assets/ViewList-CYnd76EG.js +0 -1
  211. package/dist/assets/_createAggregator-jZ136RIi.js +0 -1
  212. package/dist/assets/access-control-D_3Sf3DH.js +0 -13
  213. package/dist/assets/actions-BEfqQHvh.js +0 -1
  214. package/dist/assets/add-component-core-8-K3kI62.js +0 -804
  215. package/dist/assets/add-resource-BJc9d35J.js +0 -1
  216. package/dist/assets/addon-C2s3597J.js +0 -31
  217. package/dist/assets/analytics-__YzXiEy.js +0 -52
  218. package/dist/assets/api-Du2npubO.js +0 -1
  219. package/dist/assets/audit-logs-DCsbxX3x.js +0 -59
  220. package/dist/assets/base32-CSHbjBse.js +0 -1
  221. package/dist/assets/branding-D8ZABeVU.js +0 -40
  222. package/dist/assets/bundle-avatar-DjGcv6Sg.js +0 -1
  223. package/dist/assets/button-BpodnaUj.js +0 -1
  224. package/dist/assets/click-to-copy-Ct4_CI1M.js +0 -1
  225. package/dist/assets/complete-CKV6Ebun.js +0 -45
  226. package/dist/assets/config-BnBRy_w4.js +0 -1
  227. package/dist/assets/config-C7arZYXl.js +0 -32
  228. package/dist/assets/config-space-D4B-Fcx4.js +0 -1
  229. package/dist/assets/confirm-CyScKRsz.js +0 -7
  230. package/dist/assets/connect-D50yPXAE.js +0 -5
  231. package/dist/assets/connect-DZgc6pEB.js +0 -1
  232. package/dist/assets/connect-to-Byo-gZWq.js +0 -29
  233. package/dist/assets/dashboard-lB4ZPVoV.js +0 -122
  234. package/dist/assets/deprecate-cv6v3EXd.js +0 -1
  235. package/dist/assets/did-address-pHUGf5mt.js +0 -1
  236. package/dist/assets/domain-UlRrTp1n.js +0 -9
  237. package/dist/assets/domain-list-CKs3EKNU.js +0 -15
  238. package/dist/assets/email-PtOk65dC.js +0 -18
  239. package/dist/assets/emotion-cache.browser.esm-DuQlBwjm.js +0 -1
  240. package/dist/assets/exchange-passport-DdO1PoJN.js +0 -1
  241. package/dist/assets/fallback-BMr0sE-j.js +0 -1
  242. package/dist/assets/form-text-input-C5wKQFKL.js +0 -11
  243. package/dist/assets/fuel-DkDXKRe9.js +0 -32
  244. package/dist/assets/fullpage-cRbvfPCn.js +0 -1
  245. package/dist/assets/get-safe-url-6c6RI8XT.js +0 -1
  246. package/dist/assets/get-safe-url-CwEZKvfc.js +0 -1
  247. package/dist/assets/home-D29pIqLK.js +0 -1
  248. package/dist/assets/iframe-BFiRQ7tw.js +0 -1
  249. package/dist/assets/index-72Zql8CQ.js +0 -5
  250. package/dist/assets/index-B27mVEab.js +0 -102
  251. package/dist/assets/index-B3dU1BRu.js +0 -1
  252. package/dist/assets/index-B5C90-kX.js +0 -1
  253. package/dist/assets/index-B6PbP50h.js +0 -1
  254. package/dist/assets/index-BUN78vRQ.js +0 -1
  255. package/dist/assets/index-BXoHPu8T.js +0 -5
  256. package/dist/assets/index-BcaFN_aP.js +0 -1
  257. package/dist/assets/index-Bgv4pLgc.js +0 -243
  258. package/dist/assets/index-BhxTb2Rs.js +0 -1
  259. package/dist/assets/index-Bo3ifRfa.js +0 -1
  260. package/dist/assets/index-BqLf0w23.js +0 -221
  261. package/dist/assets/index-C0UJXtze.js +0 -4
  262. package/dist/assets/index-C3YL4xGi.js +0 -1
  263. package/dist/assets/index-CMbz2eu6.js +0 -11
  264. package/dist/assets/index-CUdjeFH3.js +0 -1413
  265. package/dist/assets/index-C_mXaY4E.js +0 -1
  266. package/dist/assets/index-Cg_T1V-P.js +0 -544
  267. package/dist/assets/index-ChhcKroJ.js +0 -12
  268. package/dist/assets/index-CqnrpD4d.js +0 -134
  269. package/dist/assets/index-CtQolg_s.js +0 -1
  270. package/dist/assets/index-DSX7jfl3.js +0 -1
  271. package/dist/assets/index-DgoHglX6.js +0 -1
  272. package/dist/assets/index-Dim9am4F.js +0 -291
  273. package/dist/assets/index-DvwEbnCV.js +0 -13
  274. package/dist/assets/index-I-TxeVFM.js +0 -340
  275. package/dist/assets/index-ZSNG3xSj.js +0 -11
  276. package/dist/assets/index-foZCwT8M.css +0 -1
  277. package/dist/assets/index-q27UQsWn.js +0 -16
  278. package/dist/assets/index-q2_9XHCb.js +0 -721
  279. package/dist/assets/index-xuTvwkle.js +0 -316
  280. package/dist/assets/invitation-CI9oI0ML.js +0 -176
  281. package/dist/assets/invite-BD1LrTA8.js +0 -5
  282. package/dist/assets/isEmail-BCMyh8vZ.js +0 -1
  283. package/dist/assets/issue-passport-Bd-T51oN.js +0 -1
  284. package/dist/assets/item-CvCwtq6F.js +0 -1
  285. package/dist/assets/jss-plugin-props-sort.esm-KqvaA55X.js +0 -14
  286. package/dist/assets/layout-CqjS3RFh.js +0 -29
  287. package/dist/assets/list-header-DVNuHNDo.js +0 -57
  288. package/dist/assets/localization-Dutgz4tx.js +0 -1
  289. package/dist/assets/login-8AhFtIOc.js +0 -1
  290. package/dist/assets/login-oauth-callback-CsFM0yAZ.js +0 -1
  291. package/dist/assets/logo-uploader-DabQD2dA.js +0 -133
  292. package/dist/assets/lost-passport-CxN1g858.js +0 -168
  293. package/dist/assets/open-window-Banfzs4p.js +0 -1
  294. package/dist/assets/overview-DcAEoK9V.js +0 -12
  295. package/dist/assets/permission-WZrPwf2m.js +0 -1
  296. package/dist/assets/preferences-Ca7-Ov6u.js +0 -1
  297. package/dist/assets/publish-resource-DZ4bcjeq.js +0 -1
  298. package/dist/assets/purify.es-DutPtr9A.js +0 -2
  299. package/dist/assets/raf-schd.esm-CAeD1GPF.js +0 -1
  300. package/dist/assets/refType-Cd6nIb--.js +0 -1
  301. package/dist/assets/relative-time-DDo7Crj5.js +0 -1
  302. package/dist/assets/resource-dialog-CrGsGXEE.js +0 -299
  303. package/dist/assets/sdk-BTNAvCf8.js +0 -1
  304. package/dist/assets/selector-Br9-dR9y.js +0 -48
  305. package/dist/assets/session-BB2DljXy.js +0 -1
  306. package/dist/assets/setup-Cv1zGHfT.js +0 -19
  307. package/dist/assets/shorten-label-DT9X1B8w.js +0 -1
  308. package/dist/assets/simple-select-BAxNgpxE.js +0 -1
  309. package/dist/assets/slicedToArray-DyRQzefY.js +0 -2
  310. package/dist/assets/start-C7dSefgZ.js +0 -187
  311. package/dist/assets/step-actions-oy5A5R40.js +0 -31
  312. package/dist/assets/studio-Boj6f6bS.js +0 -6
  313. package/dist/assets/switch-control-ChW_GuaN.js +0 -13
  314. package/dist/assets/toPropertyKey-PLuKRk1e.js +0 -1
  315. package/dist/assets/toUpper-DXbBjpP8.js +0 -1
  316. package/dist/assets/transfer-CwhoFyG0.js +0 -16
  317. package/dist/assets/trim-D79XRDvY.js +0 -1
  318. package/dist/assets/uniqBy-BBGY8CA1.js +0 -1
  319. package/dist/assets/unsubscribe-BlsNq4VD.js +0 -1
  320. package/dist/assets/url-join-DILCgsel.js +0 -1
  321. package/dist/assets/use-mobile-B3qubz56.js +0 -1
  322. package/dist/assets/use-mobile-D8jiOBBW.js +0 -1
  323. package/dist/assets/useAsync-CwWuQ31n.js +0 -1
  324. package/dist/assets/useAsyncRetry-o3huFKOY.js +0 -7
  325. package/dist/assets/useFormControl-Bm0BZQS7.js +0 -1
  326. package/dist/assets/useLocalStorage-DdNsoUmT.js +0 -1
  327. package/dist/assets/useSetState-DuK5mvRn.js +0 -1
  328. package/dist/assets/useSlot-RdBOCJrx.js +0 -1
  329. package/dist/assets/useThemeProps-Bmm6xEda.js +0 -1
  330. package/dist/assets/user-center-6IaKm8kc.js +0 -201
  331. package/dist/assets/util-CZ4Gnuni.js +0 -1
  332. package/dist/assets/utils-DoM3o7-Q.js +0 -1
  333. package/dist/assets/visuallyHidden-Dan1xhjv.js +0 -1
  334. package/dist/assets/wrap-locale-DKHVNdE9.js +0 -1
package/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2018-2020 ArcBlock
1
+ Copyright 2018-2025 ArcBlock
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
package/api/index.js CHANGED
@@ -416,6 +416,7 @@ module.exports = function createServer(node, serverOptions = {}) {
416
416
  createConnectRelayRoutes.init(server, node, options, wsRouter);
417
417
  authRoutes.attachDidAuthHandlers(server);
418
418
  authRoutes.createPassportRoutes.init(server, node);
419
+ authRoutes.createPasskeyRoutes.init(server, node);
419
420
  authRoutes.createCommonRoutes.init(server, node);
420
421
 
421
422
  // API: gql
@@ -33,38 +33,40 @@ async function transferPassport(fromUser, toUser, { req, teamDid, node, nodeInfo
33
33
  return;
34
34
  }
35
35
 
36
- const attachments = waitPassportList.map((x) => {
37
- const vcParams = {
38
- issuerName,
39
- issuerWallet,
40
- ownerDid: toUser.did,
41
- passport: { ...pick(x, ['name', 'title', 'specVersion']), endpoint: x.endpoint || blockletInfo.appUrl },
42
- endpoint: getPassportStatusEndpoint({
43
- baseUrl: x.endpoint || blockletInfo.appUrl,
44
- userDid: toUser.did,
45
- teamDid,
46
- }),
47
- ownerProfile: {
48
- email: toUser.email,
49
- fullName: toUser.fullName,
50
- avatar: getUserAvatarUrl(x.endpoint || blockletInfo.appUrl, toUser.avatar),
51
- },
52
- preferredColor: passportColor,
53
- types: teamDid === nodeInfo.did ? [VC_TYPE_NODE_PASSPORT] : x.types,
54
- purpose: teamDid === nodeInfo.did || isEmpty(x.types) ? 'login' : 'verification',
55
- display: x.display,
56
- };
57
-
58
- const vc = createPassportVC(vcParams);
59
- return {
60
- type: 'vc',
61
- data: {
62
- credential: vc,
63
- tag: x.name,
36
+ const attachments = await Promise.all(
37
+ waitPassportList.map(async (x) => {
38
+ const vcParams = {
39
+ issuerName,
40
+ issuerWallet,
41
+ ownerDid: toUser.did,
42
+ passport: { ...pick(x, ['name', 'title', 'specVersion']), endpoint: x.endpoint || blockletInfo.appUrl },
43
+ endpoint: getPassportStatusEndpoint({
44
+ baseUrl: x.endpoint || blockletInfo.appUrl,
45
+ userDid: toUser.did,
46
+ teamDid,
47
+ }),
48
+ ownerProfile: {
49
+ email: toUser.email,
50
+ fullName: toUser.fullName,
51
+ avatar: getUserAvatarUrl(x.endpoint || blockletInfo.appUrl, toUser.avatar),
52
+ },
53
+ preferredColor: passportColor,
54
+ types: teamDid === nodeInfo.did ? [VC_TYPE_NODE_PASSPORT] : x.types,
55
+ purpose: teamDid === nodeInfo.did || isEmpty(x.types) ? 'login' : 'verification',
64
56
  display: x.display,
65
- },
66
- };
67
- });
57
+ };
58
+
59
+ const vc = await createPassportVC(vcParams);
60
+ return {
61
+ type: 'vc',
62
+ data: {
63
+ credential: vc,
64
+ tag: x.name,
65
+ display: x.display,
66
+ },
67
+ };
68
+ })
69
+ );
68
70
  const insertPassportList = attachments.map((item, index) => {
69
71
  return {
70
72
  ...createUserPassport(item.data.credential, { role: item.data.tag, display: item.data.display }),
@@ -31,6 +31,7 @@ const {
31
31
  getPassportClaimUrl,
32
32
  } = require('@abtnode/auth/lib/passport');
33
33
  const { getKeyPairClaim, getAuthPrincipalForMigrateAppToV2 } = require('@abtnode/auth/lib/server');
34
+ const { checkInvitedUserOnly } = require('@abtnode/auth/lib/oauth');
34
35
  const { fromAppDid } = require('@arcblock/did-ext');
35
36
  const { LOGIN_PROVIDER, BLOCKLET_APP_SPACE_REQUIREMENT, DID_SPACES } = require('@blocklet/constant');
36
37
  const createTranslator = require('@abtnode/util/lib/translate');
@@ -46,7 +47,7 @@ const { getDidSpacesInfoByClaims, silentAuthorizationInConnect } = require('@abt
46
47
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
47
48
 
48
49
  const logger = require('../logger')('connect');
49
- const { checkInvitedUserOnly, createTokenFn, getDidConnectVersion } = require('../../util');
50
+ const { createTokenFn, getDidConnectVersion } = require('../../util');
50
51
  const { transferPassport, PASSPORT_VC_TYPES } = require('../auth/utils');
51
52
  const { migrateAccount, declareAccount } = require('../../services/oauth');
52
53
  const { getKycClaims, verifyKycClaims, getPassportVc, isProfileUrlSupported, getProfileItems } = require('../kyc');
@@ -393,7 +394,7 @@ module.exports = {
393
394
 
394
395
  const profile = claims.find((x) => x.type === 'profile');
395
396
 
396
- vc = createPassportVC({
397
+ vc = await createPassportVC({
397
398
  issuerName: name,
398
399
  issuerWallet: wallet,
399
400
  issuerAvatarUrl: getAppAvatarUrl(baseUrl),
@@ -244,7 +244,7 @@ module.exports = {
244
244
  const hasOwnerPassport = (user.passports || []).some((x) => x.name === role);
245
245
  if (hasOwnerPassport === false) {
246
246
  // create vc
247
- const vc = createPassportVC({
247
+ const vc = await createPassportVC({
248
248
  issuerName: name,
249
249
  issuerWallet: wallet,
250
250
  issuerAvatarUrl: getAppAvatarUrl(appUrl),
@@ -1,27 +1,25 @@
1
1
  const { handleInvitationReceive, getApplicationInfo } = require('@abtnode/auth/lib/auth');
2
- const { upsertToPassports, createPassportSvg } = require('@abtnode/auth/lib/passport');
2
+ const { createPassportList, createPassportSwitcher, checkInvitedUserOnly } = require('@abtnode/auth/lib/oauth');
3
3
  const {
4
4
  WELLKNOWN_SERVICE_PATH_PREFIX,
5
5
  PASSPORT_STATUS,
6
6
  ROLES,
7
7
  SECURITY_RULE_DEFAULT_ID,
8
8
  } = require('@abtnode/constant');
9
- const { extractUserAvatar, getUserAvatarUrl, getAppAvatarUrl } = require('@abtnode/util/lib/user');
9
+ const { extractUserAvatar, getUserAvatarUrl } = require('@abtnode/util/lib/user');
10
10
  const { fromAppDid } = require('@arcblock/did-ext');
11
- const { getBlockletAppIdList } = require('@blocklet/meta/lib/util');
12
- const uniq = require('lodash/uniq');
13
11
  const last = require('lodash/last');
14
12
  const pick = require('lodash/pick');
15
13
  const sortBy = require('lodash/sortBy');
16
14
  const cloneDeep = require('lodash/cloneDeep');
17
15
  const { joinURL } = require('ufo');
16
+ const { upsertToPassports } = require('@abtnode/auth/lib/passport');
18
17
  const { getWalletDid, getConnectedAccounts, getSourceProvider } = require('@blocklet/meta/lib/did-utils');
19
18
  const formatContext = require('@abtnode/util/lib/format-context');
20
19
  const createTranslator = require('@abtnode/util/lib/translate');
21
20
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
22
21
  const CustomError = require('@abtnode/util/lib/custom-error');
23
22
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
24
- const { getActivePassports } = require('@abtnode/util/lib/passport');
25
23
  const { withHttps, withTrailingSlash } = require('ufo');
26
24
 
27
25
  const logger = require('../libs/logger')('oauth');
@@ -34,7 +32,7 @@ const OAuthApple = require('../libs/auth/adapters/apple');
34
32
  const { getAvatarByEmail, transferPassport, getAvatarByUrl } = require('../libs/auth/utils');
35
33
  const initJwt = require('../libs/jwt');
36
34
  const { sendToUser } = require('../libs/notification');
37
- const { checkInvitedUserOnly, createTokenFn, getDidConnectVersion, redirectWithoutCache } = require('../util');
35
+ const { createTokenFn, getDidConnectVersion, redirectWithoutCache } = require('../util');
38
36
  const federatedUtil = require('../util/federated');
39
37
  const { isOAuthEmailVerified, isEmailUniqueRequired, isEmailKycRequired, isSameEmail } = require('../libs/kyc');
40
38
  const checkUser = require('../middlewares/check-user');
@@ -768,67 +766,25 @@ async function unbind(req, node) {
768
766
  }
769
767
 
770
768
  module.exports = {
771
- init(server, node, options) {
772
- server.get(`${prefixApi}/configs`, async (req, res) => {
769
+ checkUser,
770
+
771
+ init(router, node, options) {
772
+ const { createSessionToken } = initJwt(node, options);
773
+
774
+ router.get(`${prefixApi}/configs`, async (req, res) => {
773
775
  const blocklet = await req.getBlocklet();
774
776
  const oauthConfig = blocklet?.settings?.oauth || {};
775
777
  res.send(oauthConfig);
776
778
  });
777
779
 
778
- server.get(`${prefixApi}/passports`, checkUser, async (req, res) => {
779
- const userDid = req.user.did;
780
- const blockletInfo = await req.getBlockletInfo();
781
- const nodeInfo = await req.getNodeInfo();
782
- const { did: teamDid, wallet: blockletWallet, appUrl } = blockletInfo;
783
- const { passportColor } = await getApplicationInfo({ node, nodeInfo, teamDid });
784
- const issuerDidList = uniq([blockletWallet.address, ...getBlockletAppIdList(blockletInfo)]);
785
- // NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
786
- const user = await node.getUser({ teamDid, user: { did: userDid } });
787
- let ownerAvatarUrl = getUserAvatarUrl(appUrl, user.avatar);
788
- try {
789
- // FIXME: @zhanghan 暂时将 imageFilter 等 queryString 参数移除
790
- const ownerAvatarUrlInstance = new URL(ownerAvatarUrl);
791
- ownerAvatarUrlInstance.search = '';
792
- ownerAvatarUrl = ownerAvatarUrlInstance.href;
793
- } catch {
794
- /* empty */
795
- }
796
- let issuerAvatarUrl = getAppAvatarUrl(appUrl);
797
- try {
798
- // FIXME: @zhanghan 暂时将 imageFilter 等 queryString 参数移除
799
- const issuerAvatarUrlInstance = new URL(issuerAvatarUrl);
800
- issuerAvatarUrlInstance.search = '';
801
- issuerAvatarUrl = issuerAvatarUrlInstance.href;
802
- } catch {
803
- /* empty */
804
- }
780
+ router.get(`${prefixApi}/passports`, checkUser, createPassportList(node, 'service'));
781
+ router.post(
782
+ `${prefixApi}/switch`,
783
+ checkUser,
784
+ createPassportSwitcher(node, createTokenFn(createSessionToken), 'service')
785
+ );
805
786
 
806
- const { passports = [] } = user || {};
807
- const passportTypes = getActivePassports({ passports }, issuerDidList).map((x) => {
808
- return {
809
- ...pick(x, ['id', 'name', 'title', 'role', 'scope', 'role']),
810
- display:
811
- x.scope === 'custom'
812
- ? x.display
813
- : createPassportSvg({
814
- scope: x.scope,
815
- role: x.role,
816
- title: x.scope === 'kyc' ? x.name : x.title,
817
- issuer: x.issuer.name,
818
- issuerDid: x.issuer.id,
819
- issuerAvatarUrl,
820
- ownerName: user?.fullName,
821
- ownerDid: userDid,
822
- ownerAvatarUrl,
823
- isDataUrl: true,
824
- preferredColor: passportColor || 'auto',
825
- }),
826
- };
827
- });
828
- res.send(passportTypes);
829
- });
830
-
831
- server.post(`${prefixApi}/bind`, checkUser, async (req, res) => {
787
+ router.post(`${prefixApi}/bind`, checkUser, async (req, res) => {
832
788
  try {
833
789
  await bind(req, node, options);
834
790
  res.status(200).json({});
@@ -842,7 +798,7 @@ module.exports = {
842
798
  }
843
799
  });
844
800
 
845
- server.post(`${prefixApi}/unbind`, checkUser, async (req, res) => {
801
+ router.post(`${prefixApi}/unbind`, checkUser, async (req, res) => {
846
802
  try {
847
803
  await unbind(req, node, options);
848
804
  res.status(200).json({});
@@ -856,58 +812,12 @@ module.exports = {
856
812
  }
857
813
  });
858
814
 
859
- server.post(`${prefixApi}/switch`, checkUser, async (req, res) => {
860
- const { did: userDid, provider } = req.user;
861
- const { passportId } = req.body;
862
- const blocklet = await req.getBlocklet();
863
- const { did: teamDid, secret } = await req.getBlockletInfo();
864
- // NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
865
- const user = await node.getUser({ teamDid, user: { did: userDid } });
866
- const { passports = [] } = user || {};
867
- const passport = passportId
868
- ? passports.find((item) => item.id === passportId)
869
- : { name: 'Guest', role: 'guest', scope: 'passport' };
870
- await node.createAuditLog(
871
- {
872
- action: 'switchPassport',
873
- args: { teamDid, userDid, passport, provider: user?.sourceProvider },
874
- context: formatContext(Object.assign(req, { user })),
875
- result: user,
876
- },
877
- node
878
- );
879
- const { createSessionToken } = initJwt(node, options);
880
- const createToken = createTokenFn(createSessionToken);
881
- const sessionConfig = blocklet.settings?.session || {};
882
- const { sessionToken, refreshToken } = createToken(
883
- userDid,
884
- {
885
- secret,
886
- passport,
887
- role: passport.scope === 'passport' ? passport.role : ROLES.GUEST,
888
- fullName: user?.fullName,
889
- provider,
890
- walletOS: 'web',
891
- emailVerified: !!user?.emailVerified,
892
- phoneVerified: !!user?.phoneVerified,
893
- },
894
- { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
895
- );
896
-
897
- // for backward compatibility
898
- if (!getDidConnectVersion(req)) {
899
- res.status(200).send(sessionToken);
900
- }
901
-
902
- res.status(200).json({ sessionToken, refreshToken });
903
- });
904
-
905
815
  /**
906
816
  * oauth 方式登录
907
817
  * 1. 普通配置下,登录/注册是同样的流程,登录过程中会自动注册账号
908
818
  * 2. 仅邀请可登录模式下,只允许登录,不允许注册
909
819
  */
910
- server.post(`${prefixApi}/login`, async (req, res) => {
820
+ router.post(`${prefixApi}/login`, async (req, res) => {
911
821
  const { action = 'login' } = req.body;
912
822
  const actionMap = {
913
823
  login,
@@ -931,7 +841,7 @@ module.exports = {
931
841
  }
932
842
  });
933
843
 
934
- server.post(`${prefixApi}/getUser`, async (req, res) => {
844
+ router.post(`${prefixApi}/getUser`, async (req, res) => {
935
845
  const { provider, token, idToken, code, appPid } = req.body;
936
846
  const blocklet = await req.getBlocklet();
937
847
  const oauthInfo = await getOAuthUserInfo({ blocklet, provider, token, idToken, code, appPid });
@@ -959,7 +869,7 @@ module.exports = {
959
869
  };
960
870
  };
961
871
 
962
- server.get(`${prefix}/login/:provider`, checkReferrerMiddleware(), async (req, res) => {
872
+ router.get(`${prefix}/login/:provider`, checkReferrerMiddleware(), async (req, res) => {
963
873
  const { provider } = req.params;
964
874
  const blocklet = await req.getBlocklet();
965
875
  const availableProviderList = Object.keys(blocklet.settings?.oauth).filter(
@@ -977,7 +887,7 @@ module.exports = {
977
887
 
978
888
  // HACK: apple 需要特殊处理,callback 使用的是 post 请求返回的,通过特殊处理转为 get 请求,转由前端继续处理
979
889
  // 此处改为所有 provider 都兼容的模式
980
- server.post(`${prefix}/callback/:provider`, (req, res) => {
890
+ router.post(`${prefix}/callback/:provider`, (req, res) => {
981
891
  /**
982
892
  * @type {{code?: string, user?: {name: {firstName: string, lastName: string}, email: string}}}
983
893
  */
@@ -4,22 +4,23 @@ const { fromAppDid } = require('@arcblock/did-ext');
4
4
  const { extractUserAvatar } = require('@abtnode/util/lib/user');
5
5
  const formatContext = require('@abtnode/util/lib/format-context');
6
6
  const createTranslator = require('@abtnode/util/lib/translate');
7
+ const { fromBase64 } = require('@ocap/util');
7
8
  const { isFromPublicKey } = require('@arcblock/did');
8
9
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
9
- const sortBy = require('lodash/sortBy');
10
- const head = require('lodash/head');
11
10
  const pick = require('lodash/pick');
12
11
  const merge = require('lodash/merge');
13
12
  const omitBy = require('lodash/omitBy');
13
+ const { getLastUsedPassport } = require('@abtnode/auth/lib/passport');
14
14
  const { verify, decode } = require('@arcblock/jwt');
15
15
  const { getWallet } = require('@blocklet/meta/lib/did-utils');
16
16
  const { Joi } = require('@arcblock/validator');
17
17
  const { parse } = require('@abtnode/core/lib/util/ua');
18
+ const { checkInvitedUserOnly } = require('@abtnode/auth/lib/oauth');
18
19
  const getRequestIP = require('@abtnode/util/lib/get-request-ip');
19
20
  const formatError = require('@abtnode/util/lib/format-error');
20
21
  const CustomError = require('@abtnode/util/lib/custom-error');
21
22
 
22
- const { checkInvitedUserOnly, createTokenFn, getDidConnectVersion } = require('../util');
23
+ const { createTokenFn, getDidConnectVersion } = require('../util');
23
24
  const initJwt = require('../libs/jwt');
24
25
  const { getAvatarByUrl } = require('../libs/auth/utils');
25
26
  const { loginWalletSchema, loginOAuthSchema, loginUserWalletSchema, checkUserSchema } = require('../validators/login');
@@ -33,7 +34,12 @@ const { Profile } = require('../state/profile');
33
34
 
34
35
  const validateUser = (user) => {
35
36
  try {
36
- return user && user.did && user.pk && isFromPublicKey(user.did, user.pk);
37
+ return (
38
+ user &&
39
+ user.did &&
40
+ user.pk &&
41
+ (isFromPublicKey(user.did, user.pk) || isFromPublicKey(user.did, fromBase64(user.pk)))
42
+ );
37
43
  } catch (e) {
38
44
  return false;
39
45
  }
@@ -524,28 +530,7 @@ module.exports = {
524
530
  const { createSessionToken } = initJwt(node, options);
525
531
  const createToken = createTokenFn(createSessionToken);
526
532
  const sessionConfig = blocklet.settings?.session || {};
527
- const passports = currentUser?.passports || [];
528
-
529
- let passport = null;
530
- if (passportId) {
531
- passport = passports.find((x) => x.status === 'valid' && x.passportId === passportId);
532
- }
533
- if (!passport) {
534
- const now = new Date().getTime();
535
- passport = head(
536
- sortBy(passports, (x) => {
537
- const lastLoginAt = new Date(x.lastLoginAt).getTime();
538
- if (typeof lastLoginAt === 'number') {
539
- return now - lastLoginAt;
540
- }
541
- return now;
542
- })
543
- );
544
- }
545
-
546
- if (!passport) {
547
- passport = { name: 'Guest', role: 'guest' };
548
- }
533
+ const passport = getLastUsedPassport(currentUser?.passports || [], passportId);
549
534
 
550
535
  const lastLoginIp = getRequestIP(req);
551
536
  const loggedInUser = await node.loginUser({
@@ -236,8 +236,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
236
236
  preferredColor: passportColor,
237
237
  };
238
238
 
239
- const vc = createPassportVC(vcParams);
240
-
239
+ const vc = await createPassportVC(vcParams);
241
240
  const role = getRoleFromLocalPassport(get(vc, 'credentialSubject.passport'));
242
241
  const passport = createUserPassport(vc, { role });
243
242
 
@@ -30,7 +30,7 @@ const checkOwner = async ({ node, userDid, blocklet }) => {
30
30
  return user;
31
31
  };
32
32
 
33
- module.exports = function createRoutes(node, _authenticator, createSessionToken) {
33
+ module.exports = function createRoutes(node, authenticator, createSessionToken) {
34
34
  return {
35
35
  action: 'setup',
36
36
  onConnect: async ({ req, userDid, extraParams: { locale } }) => {
@@ -113,7 +113,12 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
113
113
 
114
114
  // Generate new session token that client can save to localStorage
115
115
  // HACK: 此处没有 passportId,所以特意不设置 refreshToken,失效后下次登录就能选择合适的 passport
116
- const sessionToken = await createSessionToken(userDid, { secret, role: 'owner', fullName: profile?.fullName });
116
+ const sessionToken = await createSessionToken(userDid, {
117
+ secret,
118
+ role: 'owner',
119
+ fullName: profile?.fullName,
120
+ elevated: true,
121
+ });
117
122
  await updateSession({ sessionToken }, true);
118
123
  logger.info('setup.connect.success', { userDid });
119
124
  } catch (err) {
@@ -1,6 +1,6 @@
1
1
  const { messages } = require('@abtnode/auth/lib/auth');
2
- const { authenticateByVc, getVerifyAccessClaims } = require('@abtnode/auth/lib/server');
3
- const { ROLES, MFA_PROTECTED_METHODS } = require('@abtnode/constant');
2
+ const { authenticateByVc, getVerifyAccessClaims, validateVerifyDestroyRequest } = require('@abtnode/auth/lib/server');
3
+ const { ROLES } = require('@abtnode/constant');
4
4
  const { getSourceAppPid } = require('@blocklet/sdk/lib/util/login');
5
5
  const { fromBase64 } = require('@ocap/util');
6
6
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
@@ -26,20 +26,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
26
26
  throw new Error(messages.notAuthorized[locale]);
27
27
  }
28
28
 
29
- // ensure payload is valid
30
- const parsed = JSON.parse(fromBase64(payload).toString());
31
- if (!MFA_PROTECTED_METHODS.includes(parsed.action)) {
32
- throw new Error(messages.notAllowed[locale]);
33
- }
34
-
35
- // ensure roles are valid
36
- const expected = roles
37
- .split(',')
38
- .map((x) => x.trim())
39
- .filter(Boolean);
40
- if (expected.some((x) => !ALLOWED_ROLES.includes(x))) {
41
- throw new Error(messages.notAllowed[locale]);
42
- }
29
+ const expected = validateVerifyDestroyRequest({ payload, roles, locale, allowedRoles: ALLOWED_ROLES });
43
30
 
44
31
  const sourceAppPid = getSourceAppPid(request);
45
32
  return {
@@ -37,6 +37,7 @@ const createVerifyDestroyAuth = require('./connect/verify-destroy');
37
37
  const createReceiveTransferAppOwnerRoutes = require('./connect/receive-transfer-app-owner');
38
38
  const createSessionRoutes = require('./session');
39
39
  const createPassportRoutes = require('./passport');
40
+ const createPasskeyRoutes = require('./passkey');
40
41
  const { getRedirectUrl, shouldIgnoreUrl, redirectWithoutCache } = require('../../util');
41
42
  const { createConnectToDidSpacesForUserRoute } = require('./connect/connect-to-did-spaces-for-user');
42
43
  const { isEmailKycRequired, isPhoneKycRequired } = require('../../libs/kyc');
@@ -249,6 +250,9 @@ const init = ({ node, options }) => {
249
250
 
250
251
  // public http api
251
252
  routes.createPassportRoutes = createPassportRoutes;
253
+ routes.createPasskeyRoutes = {
254
+ init: (router) => createPasskeyRoutes.init(router, node, options, createSessionToken),
255
+ };
252
256
  routes.createSessionRoutes = {
253
257
  // eslint-disable-next-line no-shadow
254
258
  init: (router, node) =>
@@ -0,0 +1,31 @@
1
+ const { createPasskeyHandlers } = require('@abtnode/auth/lib/passkey');
2
+ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
3
+ const { createPassportList, createPassportSwitcher } = require('@abtnode/auth/lib/oauth');
4
+ const { createTokenFn } = require('../../util');
5
+ const { checkUser } = require('../../routes/oauth');
6
+
7
+ module.exports = {
8
+ init(router, node, options, createSessionToken) {
9
+ const createToken = createTokenFn(createSessionToken);
10
+
11
+ const {
12
+ ensurePasskeySession,
13
+ ensureUser,
14
+ handleRegisterRequest,
15
+ handleRegisterResponse,
16
+ handleAuthRequest,
17
+ handleAuthResponse,
18
+ } = createPasskeyHandlers(node, 'service', createToken);
19
+
20
+ const prefix = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/passkey`;
21
+
22
+ router.get(`${prefix}/register`, handleRegisterRequest);
23
+ router.post(`${prefix}/register`, ensurePasskeySession, handleRegisterResponse);
24
+ router.get(`${prefix}/auth`, ensureUser, handleAuthRequest);
25
+ router.post(`${prefix}/auth`, ensurePasskeySession, handleAuthResponse);
26
+
27
+ // Following routes are same as oauth routes
28
+ router.get(`${prefix}/passports`, checkUser, createPassportList(node, 'service'));
29
+ router.post(`${prefix}/switch`, checkUser, createPassportSwitcher(node, createToken, 'service'));
30
+ },
31
+ };
@@ -2,8 +2,8 @@ const { getPassportStatus } = require('@abtnode/auth/lib/auth');
2
2
  const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
3
3
 
4
4
  module.exports = {
5
- init(server, node) {
6
- server.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/api/passport/status`, async (req, res) => {
5
+ init(router, node) {
6
+ router.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/api/passport/status`, async (req, res) => {
7
7
  const { vcId, userDid, locale } = req.query;
8
8
  const teamDid = req.headers['x-blocklet-did'];
9
9
 
@@ -23,14 +23,15 @@ const authenticateConnect = (req, cb) => {
23
23
  return;
24
24
  }
25
25
 
26
- if (!JWT.verify(token, pk)) {
27
- cb(new Error('token verify failed'));
28
- return;
29
- }
30
-
31
- const decoded = JWT.decode(token);
32
- const info = getTokenInfo(decoded);
33
- cb(null, info);
26
+ JWT.verify(token, pk)
27
+ .then(() => {
28
+ const decoded = JWT.decode(token);
29
+ const info = getTokenInfo(decoded);
30
+ cb(null, info);
31
+ })
32
+ .catch((err) => {
33
+ cb(err, null);
34
+ });
34
35
  };
35
36
 
36
37
  const authenticateJoinChannel = async ({ topic: channel, payload, node }) => {
@@ -45,7 +46,7 @@ const authenticateJoinChannel = async ({ topic: channel, payload, node }) => {
45
46
  // so we need to support token is valid for one day
46
47
  const tolerance = 3600 * 24;
47
48
 
48
- if (!JWT.verify(payload.token, payload.pk, { tolerance })) {
49
+ if (!(await JWT.verify(payload.token, payload.pk, { tolerance }))) {
49
50
  throw new Error(`verify did failed: ${info.did}`);
50
51
  }
51
52
 
@@ -20,6 +20,7 @@ const states = require('../../state');
20
20
  const { validateEmail, sendEmail } = require('../../libs/email');
21
21
  const { sendPush } = require('../../libs/push-kit');
22
22
  const { getBlockletInfo } = require('../../cache');
23
+ const { nanoid } = require('../../util');
23
24
 
24
25
  const CHANNEL_FIELD_MAP = {
25
26
  wallet: ['walletSendStatus', 'walletSendAt'],
@@ -192,6 +193,8 @@ const sendToUserDid = async ({ sender, receiver: rawDid, notification, options,
192
193
  });
193
194
  }
194
195
 
196
+ // 为消息添加一个ID,wallet钱包接受消息会使用这个字段
197
+ data.id = data.id || doc?.id || nanoid();
195
198
  // 发送钱包消息
196
199
  if (channels.includes('app')) {
197
200
  for (const receiverDid of receiverAppDidList) {
@@ -23,6 +23,8 @@ const parseNotification = (notification, senderInfo) => {
23
23
  x.createdAt = new Date();
24
24
  }
25
25
 
26
+ x.type = x.type || 'notification';
27
+
26
28
  x.sender = {
27
29
  // did is permanent did of an application that is used to identify the application by DID Wallet
28
30
  did: senderInfo.permanentWallet.address,
@@ -60,7 +62,7 @@ const ensureSenderApp = async ({ sender, node, nodeInfo }) => {
60
62
  }
61
63
 
62
64
  const { wallet } = appInfo;
63
- if (!JWT.verify(sender.token, wallet.publicKey)) {
65
+ if (!(await JWT.verify(sender.token, wallet.publicKey))) {
64
66
  throw new Error(`Invalid authentication token for sender blocklet: ${sender.appDid}`);
65
67
  }
66
68
 
@@ -159,6 +159,7 @@ module.exports = ({ node, req, options }) => {
159
159
  };
160
160
 
161
161
  const user = await verifySessionToken(token, secret, opt);
162
+
162
163
  if (user && visitorId) {
163
164
  const [userSession] = await node.getUserSession({
164
165
  teamDid,
@@ -166,14 +167,14 @@ module.exports = ({ node, req, options }) => {
166
167
  userDid: user.did,
167
168
  visitorId,
168
169
  });
169
- if (!userSession) return;
170
-
171
- req.userSession = userSession;
170
+ if (userSession) {
171
+ req.userSession = userSession;
172
+ }
172
173
  }
173
174
  req.user = user;
174
175
  }
175
176
  } catch (error) {
176
- logger.debug('Failed to ensureUser', { error });
177
+ console.error('Failed to ensureUser', error);
177
178
  }
178
179
  };
179
180