@talken/talkenkit 2.3.12 → 2.3.14

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 (411) hide show
  1. package/dist/components/RainbowKitProvider/RainbowKitProvider.d.ts +8 -1
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +1030 -117
  4. package/dist/solana/SolanaWalletProvider.d.ts +7 -2
  5. package/dist/solana/hooks/index.d.ts +12 -0
  6. package/dist/solana/hooks/useSolanaAccount.d.ts +98 -0
  7. package/dist/solana/hooks/useSolanaConnection.d.ts +72 -0
  8. package/dist/solana/hooks/useSolanaSendTransaction.d.ts +98 -0
  9. package/dist/solana/hooks/useSolanaSignMessage.d.ts +82 -0
  10. package/dist/wallets/walletConnectors/abcWallet/abcApi.d.ts +2 -1
  11. package/dist/wallets/walletConnectors/abcWallet/abcApi.js +4 -3
  12. package/dist/wallets/walletConnectors/abcWallet/abcBitcoinConnector.js +4 -3
  13. package/dist/wallets/walletConnectors/abcWallet/abcConnector.d.ts +1 -1
  14. package/dist/wallets/walletConnectors/abcWallet/abcConnector.js +6 -5
  15. package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +3 -3
  16. package/dist/wallets/walletConnectors/abcWallet/abcSolProvider.d.ts +14 -19
  17. package/dist/wallets/walletConnectors/abcWallet/abcSolProvider.js +4 -1
  18. package/dist/wallets/walletConnectors/abcWallet/abcSolanaConnector.js +3 -3
  19. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +1 -1
  20. package/dist/wallets/walletConnectors/abcWallet/abcSolanaWallet.js +7 -6
  21. package/dist/wallets/walletConnectors/abcWallet/abcWallet.js +7 -6
  22. package/dist/wallets/walletConnectors/abcWallet/api/AuthApi.js +4 -4
  23. package/dist/wallets/walletConnectors/abcWallet/api/BaseApiClient.js +3 -3
  24. package/dist/wallets/walletConnectors/abcWallet/api/BitcoinApi.js +4 -4
  25. package/dist/wallets/walletConnectors/abcWallet/api/SigningApi.js +4 -4
  26. package/dist/wallets/walletConnectors/abcWallet/api/SolanaApi.d.ts +2 -0
  27. package/dist/wallets/walletConnectors/abcWallet/api/SolanaApi.js +5 -4
  28. package/dist/wallets/walletConnectors/abcWallet/api/TransactionApi.js +4 -4
  29. package/dist/wallets/walletConnectors/abcWallet/api/WalletApi.d.ts +2 -1
  30. package/dist/wallets/walletConnectors/abcWallet/api/WalletApi.js +5 -4
  31. package/dist/wallets/walletConnectors/abcWallet/api/index.js +13 -12
  32. package/dist/wallets/walletConnectors/abcWallet/index.js +27 -26
  33. package/dist/wallets/walletConnectors/abcWallet/networkConfig.d.ts +189 -0
  34. package/dist/wallets/walletConnectors/abcWallet/networkConfig.js +33 -0
  35. package/dist/wallets/walletConnectors/abcWallet/types.d.ts +19 -2
  36. package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
  37. package/dist/wallets/walletConnectors/{chunk-24SQ562R.js → chunk-25LLSYLN.js} +12 -12
  38. package/dist/wallets/walletConnectors/{chunk-3WVSOTC4.js → chunk-2E2TVL4A.js} +8 -8
  39. package/dist/wallets/walletConnectors/chunk-2GODJ6NU.js +398 -0
  40. package/dist/wallets/walletConnectors/{chunk-43LOEA55.js → chunk-2PDAR5KA.js} +10 -10
  41. package/dist/wallets/walletConnectors/{chunk-4LVXMPGO.js → chunk-2RVWT7N7.js} +1 -1
  42. package/dist/wallets/walletConnectors/{chunk-3UNSJDAS.js → chunk-2XFKRGDK.js} +10 -10
  43. package/dist/wallets/walletConnectors/chunk-2ZFMD7GF.js +419 -0
  44. package/dist/wallets/walletConnectors/chunk-3OYZYIBX.js +361 -0
  45. package/dist/wallets/walletConnectors/chunk-3WRALPTT.js +403 -0
  46. package/dist/wallets/walletConnectors/{chunk-2J66VMY5.js → chunk-43LPUTHW.js} +19 -14
  47. package/dist/wallets/walletConnectors/{chunk-2GIBC7XF.js → chunk-4H6TSGD7.js} +5 -5
  48. package/dist/wallets/walletConnectors/chunk-4OPIMV4N.js +376 -0
  49. package/dist/wallets/walletConnectors/{chunk-5OFAP55G.js → chunk-4QPXFUDC.js} +1 -1
  50. package/dist/wallets/walletConnectors/chunk-4TFDVNMF.js +370 -0
  51. package/dist/wallets/walletConnectors/chunk-4VO5XDCV.js +63 -0
  52. package/dist/wallets/walletConnectors/chunk-4YKA5OIT.js +63 -0
  53. package/dist/wallets/walletConnectors/{chunk-OEB7MRS5.js → chunk-5AAIZIND.js} +3 -3
  54. package/dist/wallets/walletConnectors/{chunk-SUXK3JW6.js → chunk-5DDAV4BZ.js} +2 -2
  55. package/dist/wallets/walletConnectors/chunk-5KCTAEQB.js +391 -0
  56. package/dist/wallets/walletConnectors/chunk-5OKJZU3F.js +63 -0
  57. package/dist/wallets/walletConnectors/chunk-5PBZRTEM.js +63 -0
  58. package/dist/wallets/walletConnectors/chunk-5SLXMCS2.js +34 -0
  59. package/dist/wallets/walletConnectors/{chunk-BHMMHU7Y.js → chunk-5VL7T6AY.js} +46 -5
  60. package/dist/wallets/walletConnectors/{chunk-NKJLO4QH.js → chunk-62ZC3BGR.js} +4 -4
  61. package/dist/wallets/walletConnectors/{chunk-OHRTTVNJ.js → chunk-636QKXSN.js} +1 -1
  62. package/dist/wallets/walletConnectors/chunk-6DMWYDIO.js +390 -0
  63. package/dist/wallets/walletConnectors/{chunk-ESRU5KCF.js → chunk-6KO5WQ5C.js} +7 -2
  64. package/dist/wallets/walletConnectors/chunk-6URAISNZ.js +388 -0
  65. package/dist/wallets/walletConnectors/{chunk-6KUCZXJE.js → chunk-6V3335LE.js} +7 -7
  66. package/dist/wallets/walletConnectors/{chunk-CNHVIXPV.js → chunk-75NE2OUD.js} +48 -7
  67. package/dist/wallets/walletConnectors/chunk-76O6JH3T.js +39 -0
  68. package/dist/wallets/walletConnectors/chunk-7UHZX522.js +369 -0
  69. package/dist/wallets/walletConnectors/{chunk-DMRM7XAS.js → chunk-A7KV643A.js} +21 -16
  70. package/dist/wallets/walletConnectors/chunk-ADMITKUE.js +63 -0
  71. package/dist/wallets/walletConnectors/{chunk-P2E4LSYH.js → chunk-AKYC5VZG.js} +8 -3
  72. package/dist/wallets/walletConnectors/chunk-AL7R7JQU.js +124 -0
  73. package/dist/wallets/walletConnectors/{chunk-3J3XZMJ7.js → chunk-AY4TMZG6.js} +2 -2
  74. package/dist/wallets/walletConnectors/{chunk-ASUECF4H.js → chunk-AZRYTD6J.js} +8 -8
  75. package/dist/wallets/walletConnectors/{chunk-BKXPGZMQ.js → chunk-B23AX3U3.js} +46 -5
  76. package/dist/wallets/walletConnectors/{chunk-SPR4W5TG.js → chunk-BNSBK5PQ.js} +2 -2
  77. package/dist/wallets/walletConnectors/{chunk-RSZS2RMC.js → chunk-BPLIASJE.js} +1 -1
  78. package/dist/wallets/walletConnectors/chunk-CB4CSXNY.js +63 -0
  79. package/dist/wallets/walletConnectors/chunk-CGLM5KXH.js +1683 -0
  80. package/dist/wallets/walletConnectors/chunk-CNI3U6UK.js +39 -0
  81. package/dist/wallets/walletConnectors/chunk-CSLAM3IH.js +39 -0
  82. package/dist/wallets/walletConnectors/chunk-CTSR4YUH.js +376 -0
  83. package/dist/wallets/walletConnectors/{chunk-X5LRFFBP.js → chunk-D6MSZOEN.js} +90 -94
  84. package/dist/wallets/walletConnectors/{chunk-DAZZIITX.js → chunk-DA7TFV7F.js} +7 -2
  85. package/dist/wallets/walletConnectors/{chunk-JBRW4UTW.js → chunk-DHVD2NUK.js} +9 -4
  86. package/dist/wallets/walletConnectors/chunk-DPL5VRGJ.js +156 -0
  87. package/dist/wallets/walletConnectors/chunk-DSEWXHE6.js +44 -0
  88. package/dist/wallets/walletConnectors/chunk-DU6M25IR.js +269 -0
  89. package/dist/wallets/walletConnectors/chunk-E3PO2XKJ.js +433 -0
  90. package/dist/wallets/walletConnectors/chunk-E5YF2QC2.js +63 -0
  91. package/dist/wallets/walletConnectors/chunk-ENAFVPRZ.js +374 -0
  92. package/dist/wallets/walletConnectors/chunk-ENHE6LS7.js +368 -0
  93. package/dist/wallets/walletConnectors/chunk-EPUITAK3.js +63 -0
  94. package/dist/wallets/walletConnectors/chunk-EQZ6IAAM.js +39 -0
  95. package/dist/wallets/walletConnectors/chunk-F2LC3G36.js +269 -0
  96. package/dist/wallets/walletConnectors/chunk-F5HCFRTK.js +1683 -0
  97. package/dist/wallets/walletConnectors/chunk-F5Q4VDER.js +156 -0
  98. package/dist/wallets/walletConnectors/{chunk-HDYBRMYW.js → chunk-FGBDWBWQ.js} +2 -2
  99. package/dist/wallets/walletConnectors/{chunk-MY5YIDOB.js → chunk-FROV5VDF.js} +6 -24
  100. package/dist/wallets/walletConnectors/chunk-GUUGKRZB.js +63 -0
  101. package/dist/wallets/walletConnectors/chunk-GZ55OZIT.js +157 -0
  102. package/dist/wallets/walletConnectors/chunk-H7SRDBPI.js +384 -0
  103. package/dist/wallets/walletConnectors/chunk-HDXHEBGM.js +403 -0
  104. package/dist/wallets/walletConnectors/chunk-HGI3FA2A.js +157 -0
  105. package/dist/wallets/walletConnectors/chunk-HMSFBY7V.js +39 -0
  106. package/dist/wallets/walletConnectors/{chunk-DP2HUTLN.js → chunk-IABRLMSP.js} +7 -7
  107. package/dist/wallets/walletConnectors/chunk-IL52SYJK.js +44 -0
  108. package/dist/wallets/walletConnectors/{chunk-KD2OAMDA.js → chunk-ISAMATTH.js} +2 -2
  109. package/dist/wallets/walletConnectors/chunk-IXPVDDZD.js +365 -0
  110. package/dist/wallets/walletConnectors/{chunk-GLPRLW3S.js → chunk-JNKT32C7.js} +7 -7
  111. package/dist/wallets/walletConnectors/chunk-JW4RQLJT.js +156 -0
  112. package/dist/wallets/walletConnectors/chunk-JXPLBYVW.js +157 -0
  113. package/dist/wallets/walletConnectors/chunk-K6BNM6VP.js +63 -0
  114. package/dist/wallets/walletConnectors/chunk-KEV4GPRY.js +63 -0
  115. package/dist/wallets/walletConnectors/{chunk-WAO3KL5U.js → chunk-KJHOGJ3A.js} +13 -5
  116. package/dist/wallets/walletConnectors/chunk-KN4I4DKC.js +157 -0
  117. package/dist/wallets/walletConnectors/chunk-KNK6YFEK.js +63 -0
  118. package/dist/wallets/walletConnectors/chunk-KSKNDJYL.js +63 -0
  119. package/dist/wallets/walletConnectors/chunk-KYA553D7.js +371 -0
  120. package/dist/wallets/walletConnectors/{chunk-TUUNSVKZ.js → chunk-KZG5KU7A.js} +2 -2
  121. package/dist/wallets/walletConnectors/chunk-L57JYRQZ.js +63 -0
  122. package/dist/wallets/walletConnectors/chunk-LB3ISYMC.js +44 -0
  123. package/dist/wallets/walletConnectors/{chunk-25JJ3PT5.js → chunk-LLFZ4GNK.js} +43 -5
  124. package/dist/wallets/walletConnectors/chunk-LLJELGMX.js +63 -0
  125. package/dist/wallets/walletConnectors/chunk-LOP2R3QJ.js +1683 -0
  126. package/dist/wallets/walletConnectors/chunk-LTX3ZSQI.js +39 -0
  127. package/dist/wallets/walletConnectors/chunk-MF46Q5RP.js +44 -0
  128. package/dist/wallets/walletConnectors/chunk-MGPMSUFB.js +372 -0
  129. package/dist/wallets/walletConnectors/chunk-MK45L6B7.js +123 -0
  130. package/dist/wallets/walletConnectors/chunk-MOJC7LE6.js +63 -0
  131. package/dist/wallets/walletConnectors/chunk-MT2QHWYE.js +156 -0
  132. package/dist/wallets/walletConnectors/{chunk-W7R3JGSC.js → chunk-MZOFZ2NQ.js} +2 -2
  133. package/dist/wallets/walletConnectors/chunk-N6CRHH2H.js +400 -0
  134. package/dist/wallets/walletConnectors/chunk-N6QHQDQP.js +381 -0
  135. package/dist/wallets/walletConnectors/chunk-NALBGCUS.js +63 -0
  136. package/dist/wallets/walletConnectors/chunk-NOD2A4Q7.js +430 -0
  137. package/dist/wallets/walletConnectors/chunk-NOL7MBZU.js +1683 -0
  138. package/dist/wallets/walletConnectors/{chunk-IOLHAU7H.js → chunk-NX5MQHSQ.js} +10 -2
  139. package/dist/wallets/walletConnectors/chunk-OA5K3AQN.js +370 -0
  140. package/dist/wallets/walletConnectors/chunk-Q3LW5UK5.js +135 -0
  141. package/dist/wallets/walletConnectors/chunk-QDCXRBX6.js +63 -0
  142. package/dist/wallets/walletConnectors/chunk-QHHR2DQK.js +269 -0
  143. package/dist/wallets/walletConnectors/chunk-QIDXRXV6.js +63 -0
  144. package/dist/wallets/walletConnectors/{chunk-IA4EQFSS.js → chunk-QKUFFUM5.js} +2 -2
  145. package/dist/wallets/walletConnectors/chunk-QNY3A52P.js +156 -0
  146. package/dist/wallets/walletConnectors/chunk-QQEXHPNE.js +385 -0
  147. package/dist/wallets/walletConnectors/chunk-RASK6XWI.js +436 -0
  148. package/dist/wallets/walletConnectors/chunk-RFMJC64I.js +364 -0
  149. package/dist/wallets/walletConnectors/chunk-RVJ32DTM.js +373 -0
  150. package/dist/wallets/walletConnectors/{chunk-U2CUEL35.js → chunk-RY4RAB3D.js} +1 -1
  151. package/dist/wallets/walletConnectors/chunk-S64JWSGA.js +63 -0
  152. package/dist/wallets/walletConnectors/chunk-SG6KN7NJ.js +377 -0
  153. package/dist/wallets/walletConnectors/chunk-SGLHM6AU.js +157 -0
  154. package/dist/wallets/walletConnectors/chunk-SK2XYNK4.js +44 -0
  155. package/dist/wallets/walletConnectors/chunk-SKBQVOZL.js +1683 -0
  156. package/dist/wallets/walletConnectors/chunk-SQAILDYS.js +1683 -0
  157. package/dist/wallets/walletConnectors/chunk-SRTBTRBU.js +372 -0
  158. package/dist/wallets/walletConnectors/chunk-T23ZNPHL.js +269 -0
  159. package/dist/wallets/walletConnectors/chunk-T3AL3VAQ.js +44 -0
  160. package/dist/wallets/walletConnectors/chunk-T4QIWLWU.js +357 -0
  161. package/dist/wallets/walletConnectors/chunk-T7NXVYE6.js +372 -0
  162. package/dist/wallets/walletConnectors/chunk-THQEUSX4.js +63 -0
  163. package/dist/wallets/walletConnectors/chunk-TLJSBPMQ.js +63 -0
  164. package/dist/wallets/walletConnectors/chunk-TPGMXU6M.js +63 -0
  165. package/dist/wallets/walletConnectors/chunk-UBDYVLI4.js +370 -0
  166. package/dist/wallets/walletConnectors/chunk-UH6AUMQQ.js +63 -0
  167. package/dist/wallets/walletConnectors/chunk-UTPJPY4R.js +44 -0
  168. package/dist/wallets/walletConnectors/{chunk-W23N7VC4.js → chunk-UV5HHESJ.js} +4 -22
  169. package/dist/wallets/walletConnectors/{chunk-4UGXLYKP.js → chunk-V3XKL7AD.js} +2 -2
  170. package/dist/wallets/walletConnectors/chunk-VIH2AOMF.js +63 -0
  171. package/dist/wallets/walletConnectors/chunk-VIRHJPFQ.js +269 -0
  172. package/dist/wallets/walletConnectors/chunk-VQI2B7XW.js +269 -0
  173. package/dist/wallets/walletConnectors/chunk-VQYANLI2.js +44 -0
  174. package/dist/wallets/walletConnectors/chunk-VRTDF4O3.js +63 -0
  175. package/dist/wallets/walletConnectors/chunk-VRUPSQK4.js +269 -0
  176. package/dist/wallets/walletConnectors/chunk-VWZP7KJD.js +157 -0
  177. package/dist/wallets/walletConnectors/chunk-VZCI2K6Y.js +124 -0
  178. package/dist/wallets/walletConnectors/chunk-WIZH35IC.js +39 -0
  179. package/dist/wallets/walletConnectors/chunk-WOZ5REMN.js +436 -0
  180. package/dist/wallets/walletConnectors/chunk-WPEGBCDE.js +157 -0
  181. package/dist/wallets/walletConnectors/chunk-WPJESUNP.js +379 -0
  182. package/dist/wallets/walletConnectors/chunk-WZ322AWR.js +44 -0
  183. package/dist/wallets/walletConnectors/chunk-WZAIQD3G.js +156 -0
  184. package/dist/wallets/walletConnectors/chunk-XC5EXBMU.js +385 -0
  185. package/dist/wallets/walletConnectors/chunk-XWCS76ZC.js +1683 -0
  186. package/dist/wallets/walletConnectors/chunk-XZHB7HU4.js +157 -0
  187. package/dist/wallets/walletConnectors/chunk-Y5677NVB.js +285 -0
  188. package/dist/wallets/walletConnectors/chunk-YC73LM6F.js +63 -0
  189. package/dist/wallets/walletConnectors/{chunk-RLBGBBIO.js → chunk-YEHCPL4R.js} +2 -2
  190. package/dist/wallets/walletConnectors/chunk-YHWQOKFW.js +39 -0
  191. package/dist/wallets/walletConnectors/chunk-YIB6VMOF.js +156 -0
  192. package/dist/wallets/walletConnectors/chunk-YPL4NJGA.js +156 -0
  193. package/dist/wallets/walletConnectors/chunk-YQP7DZ7T.js +269 -0
  194. package/dist/wallets/walletConnectors/chunk-ZBMGJDJA.js +436 -0
  195. package/dist/wallets/walletConnectors/{chunk-XYPR4BAF.js → chunk-ZIYAL44B.js} +1 -1
  196. package/dist/wallets/walletConnectors/chunk-ZX6LABEF.js +130 -0
  197. package/dist/wallets/walletConnectors/index.js +35 -34
  198. package/package.json +1 -1
  199. package/dist/Arc-R3PUWRPJ.js +0 -7
  200. package/dist/Brave-24BM36UM.js +0 -7
  201. package/dist/Browser-4R4QKTV2.js +0 -7
  202. package/dist/Chrome-TLI42HDP.js +0 -7
  203. package/dist/Edge-AZ34LAFM.js +0 -7
  204. package/dist/Firefox-ZDK7RHKK.js +0 -7
  205. package/dist/Linux-VYP66PDO.js +0 -7
  206. package/dist/Macos-5QL4JBJE.js +0 -7
  207. package/dist/Opera-BKMCKUXC.js +0 -7
  208. package/dist/Safari-PXQIVS6N.js +0 -7
  209. package/dist/Windows-GTAT3OTE.js +0 -7
  210. package/dist/abcWallet-AYWSIGAG.js +0 -7
  211. package/dist/ar_AR-ZRPPM56D.js +0 -7
  212. package/dist/arbitrum-IA4OWRTN.js +0 -7
  213. package/dist/argentWallet-M6SBG4CU.js +0 -7
  214. package/dist/assets-NU2OP443.js +0 -7
  215. package/dist/avalanche-MXEFEDSW.js +0 -7
  216. package/dist/base-Z4LFBE5D.js +0 -7
  217. package/dist/berasigWallet-NNBFDHFK.js +0 -7
  218. package/dist/bestWallet-XRIABRUE.js +0 -7
  219. package/dist/bifrostWallet-ORF3DABG.js +0 -7
  220. package/dist/binanceWallet-BCWLBY3Q.js +0 -7
  221. package/dist/bitgetWallet-CLYTW54T.js +0 -7
  222. package/dist/bitskiWallet-X5NWL5CE.js +0 -7
  223. package/dist/bitverseWallet-6SGDFATJ.js +0 -7
  224. package/dist/blast-TN2WIMWF.js +0 -7
  225. package/dist/bloomWallet-MXLAOWS6.js +0 -7
  226. package/dist/braveWallet-6QAF4GDN.js +0 -7
  227. package/dist/bsc-RVE67I5L.js +0 -7
  228. package/dist/bybitWallet-GR4PFINZ.js +0 -7
  229. package/dist/celo-E6XU57FO.js +0 -7
  230. package/dist/chunk-M2CMB5B2.js +0 -93
  231. package/dist/chunk-Y7ZSI2YC.js +0 -227
  232. package/dist/clvWallet-ZIMSRU5J.js +0 -7
  233. package/dist/coin98Wallet-RFXRNVWP.js +0 -7
  234. package/dist/coinbaseWallet-WWX6LF36.js +0 -7
  235. package/dist/compassWallet-3LBTWCKI.js +0 -7
  236. package/dist/components/AbcLoginModal/AbcAuthModal.d.ts +0 -43
  237. package/dist/components/AbcLoginModal/AbcLoginModal.d.ts +0 -18
  238. package/dist/components/AbcLoginModal/EmailLogin.d.ts +0 -11
  239. package/dist/components/AbcLoginModal/OtpLogin.d.ts +0 -13
  240. package/dist/components/AbcLoginModal/PasswordInput.d.ts +0 -12
  241. package/dist/components/AbcLoginModal/PinInput.d.ts +0 -13
  242. package/dist/components/AbcLoginModal/PinSetup.d.ts +0 -11
  243. package/dist/components/AbcLoginModal/index.d.ts +0 -12
  244. package/dist/components/AbcLoginModal/styles.css.d.ts +0 -29
  245. package/dist/components/ConnectOptions/AbcWaasAuth/hooks/useUserTypeDetection.d.ts +0 -0
  246. package/dist/components/ConnectOptions/AbcWaasLoginSection.css.d.ts +0 -8
  247. package/dist/components/ConnectOptions/AbcWaasLoginSection.d.ts +0 -8
  248. package/dist/components/ConnectOptions/CompactMobileOptions.css.d.ts +0 -26
  249. package/dist/components/ConnectOptions/CompactMobileOptions.d.ts +0 -19
  250. package/dist/components/ConnectOptions/DesktopOptions.css.d.ts +0 -4
  251. package/dist/components/ConnectOptions/DesktopOptions.d.ts +0 -34
  252. package/dist/components/ConnectOptions/ExternalWallets/WalletList.d.ts +0 -94
  253. package/dist/connect-MR6XDLIE.js +0 -7
  254. package/dist/coreWallet-52SXITOT.js +0 -7
  255. package/dist/create-X4WFHLCW.js +0 -7
  256. package/dist/cronos-ROYR77VZ.js +0 -7
  257. package/dist/dawnWallet-ONVAA3S4.js +0 -7
  258. package/dist/de_DE-GYZFZXWH.js +0 -7
  259. package/dist/desigWallet-WJMSF3PS.js +0 -7
  260. package/dist/en_US-AV7YDYDW.js +0 -7
  261. package/dist/encryption-3YHRI3PA.js +0 -14
  262. package/dist/enkryptWallet-FR4QCDFK.js +0 -7
  263. package/dist/es_419-OGVOQEFZ.js +0 -7
  264. package/dist/ethereum-RFBAMUVK.js +0 -7
  265. package/dist/flow-NBCRNYVF.js +0 -7
  266. package/dist/foxWallet-5ESSNXJV.js +0 -7
  267. package/dist/fr_FR-Q5QBQBX2.js +0 -1355
  268. package/dist/frameWallet-FDBUY4AA.js +0 -7
  269. package/dist/frontierWallet-HNIG7QYQ.js +0 -7
  270. package/dist/gateWallet-ZVEZILRP.js +0 -7
  271. package/dist/gnosis-T7U5EW2Q.js +0 -7
  272. package/dist/hardhat-NEEC6JX7.js +0 -7
  273. package/dist/hi_IN-7I7LRHGW.js +0 -7
  274. package/dist/id_ID-ZMGZ2JFV.js +0 -7
  275. package/dist/imTokenWallet-N2MYFADO.js +0 -7
  276. package/dist/injectedWallet-H7LYKTQS.js +0 -7
  277. package/dist/iopayWallet-IJHJ7NYT.js +0 -7
  278. package/dist/ja_JP-NYBCHQTZ.js +0 -7
  279. package/dist/kaia-A33DVQBT.js +0 -7
  280. package/dist/kaiaWallet-5K6WZ3AH.js +0 -7
  281. package/dist/kaikasWallet-F6Z6IPWN.js +0 -7
  282. package/dist/ko_KR-67WE736M.js +0 -7
  283. package/dist/krakenWallet-DAOXUKWO.js +0 -7
  284. package/dist/kresusWallet-AUJWLAOF.js +0 -7
  285. package/dist/ledgerWallet-KZKJ5Q2S.js +0 -7
  286. package/dist/login-CWDTIDNK.js +0 -7
  287. package/dist/magicEden-PKT2ZXEQ.js +0 -7
  288. package/dist/manta-5V6W5D7G.js +0 -7
  289. package/dist/mantle-KBL3OIYT.js +0 -7
  290. package/dist/metaMaskWallet-YFHEHW7V.js +0 -7
  291. package/dist/mewWallet-6V4UZOQC.js +0 -7
  292. package/dist/ms_MY-65AJIBUS.js +0 -7
  293. package/dist/nestWallet-BFZZZYLV.js +0 -7
  294. package/dist/oktoWallet-GJFOPPEA.js +0 -7
  295. package/dist/okxWallet-GJMKZIND.js +0 -7
  296. package/dist/omniWallet-DEYUMT4A.js +0 -7
  297. package/dist/oneInchWallet-D7BQOLOO.js +0 -7
  298. package/dist/oneKeyWallet-4MM7G2SZ.js +0 -7
  299. package/dist/optimism-YWJ3IQHA.js +0 -7
  300. package/dist/paraSwapWallet-TMV5MUEF.js +0 -7
  301. package/dist/phantomWallet-IPGVKCAB.js +0 -7
  302. package/dist/polygon-WWEUOMKW.js +0 -7
  303. package/dist/pt_BR-DMJANC65.js +0 -7
  304. package/dist/rabbyWallet-FLVUU35F.js +0 -7
  305. package/dist/rainbowWallet-2SR6TVBF.js +0 -7
  306. package/dist/ramperWallet-AF5AKK2S.js +0 -7
  307. package/dist/refresh-HJGJRASX.js +0 -7
  308. package/dist/ronin-PNHX5V6H.js +0 -7
  309. package/dist/roninWallet-SAB5ESVK.js +0 -7
  310. package/dist/ru_RU-WER7RQ6A.js +0 -1355
  311. package/dist/safeWallet-VUYZPLY4.js +0 -7
  312. package/dist/safeheronWallet-6JG77AKC.js +0 -7
  313. package/dist/safepalWallet-KQJ4OCNH.js +0 -7
  314. package/dist/scan-DEOT2M37.js +0 -7
  315. package/dist/scroll-NMZWDUQH.js +0 -7
  316. package/dist/secure-GEK7TTJY.js +0 -8
  317. package/dist/secure-NK6LHWDT.js +0 -7
  318. package/dist/seifWallet-QATOS33A.js +0 -7
  319. package/dist/sign-A7IJEUT5.js +0 -7
  320. package/dist/subWallet-LOZELSAO.js +0 -7
  321. package/dist/tahoWallet-L6KHUNKD.js +0 -7
  322. package/dist/talismanWallet-BLXUHONV.js +0 -7
  323. package/dist/th_TH-JOSHEZ6D.js +0 -1355
  324. package/dist/tokenPocketWallet-BVMBOYTC.js +0 -7
  325. package/dist/tokenaryWallet-Z2IGVXSA.js +0 -7
  326. package/dist/tr_TR-EAMG2YPO.js +0 -1355
  327. package/dist/trustWallet-E2GVGE4U.js +0 -7
  328. package/dist/uk_UA-GO2TRVWA.js +0 -1355
  329. package/dist/uniswapWallet-T26M44R7.js +0 -7
  330. package/dist/valoraWallet-RX3ONO47.js +0 -7
  331. package/dist/vi_VN-5HLLSOJA.js +0 -7
  332. package/dist/walletConnectWallet-FNSU4KNU.js +0 -7
  333. package/dist/wallets/walletConnectors/chunk-4IRVZPIN.js +0 -63
  334. package/dist/wallets/walletConnectors/chunk-4NLOE5S3.js +0 -63
  335. package/dist/wallets/walletConnectors/chunk-5LXC3Z5Q.js +0 -567
  336. package/dist/wallets/walletConnectors/chunk-5MSMALF7.js +0 -63
  337. package/dist/wallets/walletConnectors/chunk-6KOHIL7T.js +0 -63
  338. package/dist/wallets/walletConnectors/chunk-6RJNPH5L.js +0 -280
  339. package/dist/wallets/walletConnectors/chunk-6TLWAEJV.js +0 -63
  340. package/dist/wallets/walletConnectors/chunk-6YPK343Z.js +0 -63
  341. package/dist/wallets/walletConnectors/chunk-73B7HWCT.js +0 -436
  342. package/dist/wallets/walletConnectors/chunk-74ALNZG4.js +0 -63
  343. package/dist/wallets/walletConnectors/chunk-7FFIZE76.js +0 -63
  344. package/dist/wallets/walletConnectors/chunk-7P5HZGEV.js +0 -627
  345. package/dist/wallets/walletConnectors/chunk-A6LBRVGP.js +0 -63
  346. package/dist/wallets/walletConnectors/chunk-AEQOPQL6.js +0 -240
  347. package/dist/wallets/walletConnectors/chunk-BC2UIAF7.js +0 -63
  348. package/dist/wallets/walletConnectors/chunk-BXCOGV3N.js +0 -599
  349. package/dist/wallets/walletConnectors/chunk-CM5OGUJV.js +0 -63
  350. package/dist/wallets/walletConnectors/chunk-F4JFONDA.js +0 -601
  351. package/dist/wallets/walletConnectors/chunk-GOPPX56D.js +0 -63
  352. package/dist/wallets/walletConnectors/chunk-GXHCAEWR.js +0 -63
  353. package/dist/wallets/walletConnectors/chunk-HOE4UOHR.js +0 -514
  354. package/dist/wallets/walletConnectors/chunk-HS2FAOAJ.js +0 -63
  355. package/dist/wallets/walletConnectors/chunk-I5V7LWJH.js +0 -63
  356. package/dist/wallets/walletConnectors/chunk-IHM7I7D5.js +0 -63
  357. package/dist/wallets/walletConnectors/chunk-J4HQCVKX.js +0 -63
  358. package/dist/wallets/walletConnectors/chunk-JCMXNOQ5.js +0 -63
  359. package/dist/wallets/walletConnectors/chunk-JJAJOFZI.js +0 -63
  360. package/dist/wallets/walletConnectors/chunk-KFIUFVQH.js +0 -624
  361. package/dist/wallets/walletConnectors/chunk-KFROJI25.js +0 -535
  362. package/dist/wallets/walletConnectors/chunk-KHVILXGK.js +0 -514
  363. package/dist/wallets/walletConnectors/chunk-LGT7LQAJ.js +0 -63
  364. package/dist/wallets/walletConnectors/chunk-LHBQ2Z3Q.js +0 -63
  365. package/dist/wallets/walletConnectors/chunk-M76GLEFL.js +0 -63
  366. package/dist/wallets/walletConnectors/chunk-MFIE6UCG.js +0 -63
  367. package/dist/wallets/walletConnectors/chunk-NA5G3LSC.js +0 -63
  368. package/dist/wallets/walletConnectors/chunk-NASGGIUS.js +0 -63
  369. package/dist/wallets/walletConnectors/chunk-NLKL4KD2.js +0 -63
  370. package/dist/wallets/walletConnectors/chunk-NURTFXQU.js +0 -568
  371. package/dist/wallets/walletConnectors/chunk-NVM3JZ4L.js +0 -63
  372. package/dist/wallets/walletConnectors/chunk-NWDLOM7Q.js +0 -646
  373. package/dist/wallets/walletConnectors/chunk-OMYDLPUM.js +0 -63
  374. package/dist/wallets/walletConnectors/chunk-P2MTINFI.js +0 -280
  375. package/dist/wallets/walletConnectors/chunk-PDWD3ZCR.js +0 -63
  376. package/dist/wallets/walletConnectors/chunk-PHD5KHRQ.js +0 -63
  377. package/dist/wallets/walletConnectors/chunk-PLL7P7HY.js +0 -63
  378. package/dist/wallets/walletConnectors/chunk-PQJWUKUD.js +0 -63
  379. package/dist/wallets/walletConnectors/chunk-PUFQKZA7.js +0 -63
  380. package/dist/wallets/walletConnectors/chunk-PZJYVPGG.js +0 -63
  381. package/dist/wallets/walletConnectors/chunk-Q5B5ICDI.js +0 -63
  382. package/dist/wallets/walletConnectors/chunk-RUZBOPMI.js +0 -63
  383. package/dist/wallets/walletConnectors/chunk-RYXFFAB2.js +0 -63
  384. package/dist/wallets/walletConnectors/chunk-S2B56ZVJ.js +0 -481
  385. package/dist/wallets/walletConnectors/chunk-SFP47DS6.js +0 -63
  386. package/dist/wallets/walletConnectors/chunk-SMACAFVM.js +0 -63
  387. package/dist/wallets/walletConnectors/chunk-SNZL5LJ6.js +0 -637
  388. package/dist/wallets/walletConnectors/chunk-SSDCG5BG.js +0 -63
  389. package/dist/wallets/walletConnectors/chunk-VLEVJVJR.js +0 -63
  390. package/dist/wallets/walletConnectors/chunk-VXUJQQDI.js +0 -63
  391. package/dist/wallets/walletConnectors/chunk-W2VDZD74.js +0 -478
  392. package/dist/wallets/walletConnectors/chunk-WCPI7IUU.js +0 -63
  393. package/dist/wallets/walletConnectors/chunk-WYSKBMHW.js +0 -280
  394. package/dist/wallets/walletConnectors/chunk-XDRZSWHB.js +0 -63
  395. package/dist/wallets/walletConnectors/chunk-XEIKWKH7.js +0 -63
  396. package/dist/wallets/walletConnectors/chunk-XKVRDEDK.js +0 -63
  397. package/dist/wallets/walletConnectors/chunk-XYAAXWWU.js +0 -63
  398. package/dist/wallets/walletConnectors/chunk-Z3WO2EBZ.js +0 -63
  399. package/dist/wallets/walletConnectors/chunk-ZADNKI5I.js +0 -63
  400. package/dist/wallets/walletConnectors/chunk-ZAGAF6PO.js +0 -63
  401. package/dist/wigwamWallet-5GKUN7ZJ.js +0 -7
  402. package/dist/xdc-X7V4QFNF.js +0 -7
  403. package/dist/xdefiWallet-ZA65GDWS.js +0 -7
  404. package/dist/zealWallet-URNQ2AWF.js +0 -7
  405. package/dist/zerionWallet-CYFHB5PA.js +0 -7
  406. package/dist/zetachain-BMJKVYBN.js +0 -7
  407. package/dist/zh_CN-THPIFVWJ.js +0 -7
  408. package/dist/zh_HK-R7XP4TGF.js +0 -7
  409. package/dist/zh_TW-F5LD752V.js +0 -7
  410. package/dist/zkSync-JL26RB7U.js +0 -7
  411. package/dist/zora-YZH32HP3.js +0 -7
@@ -0,0 +1,1683 @@
1
+ "use client";
2
+ import {
3
+ calculateExpiryTimestamp,
4
+ createAbcError,
5
+ isTokenExpired,
6
+ loadFromStorage,
7
+ parseApiError,
8
+ removeFromStorage,
9
+ saveToStorage
10
+ } from "./chunk-UV5HHESJ.js";
11
+ import {
12
+ secure_default
13
+ } from "./chunk-G2LI5MVX.js";
14
+ import {
15
+ getSolanaNetwork
16
+ } from "./chunk-ZX6LABEF.js";
17
+ import {
18
+ ABC_AUDIENCE,
19
+ ABC_ENDPOINTS,
20
+ DEFAULT_HEADERS,
21
+ REQUEST_TIMEOUT
22
+ } from "./chunk-VETRBBA2.js";
23
+
24
+ // src/wallets/walletConnectors/abcWallet/abcApi.ts
25
+ import { getAddress } from "viem";
26
+ var AbcWaasClient = class {
27
+ constructor(config) {
28
+ this.accessToken = null;
29
+ this.refreshToken = null;
30
+ this.expiresAt = null;
31
+ this.isRefreshing = false;
32
+ this.refreshPromise = null;
33
+ this.config = config;
34
+ this.baseURL = config.waasUrl;
35
+ this.secure = new secure_default(this.baseURL);
36
+ this.loadTokens();
37
+ }
38
+ /**
39
+ * Load tokens from storage
40
+ */
41
+ loadTokens() {
42
+ this.accessToken = loadFromStorage("access_token" /* ACCESS_TOKEN */);
43
+ this.refreshToken = loadFromStorage("refresh_token" /* REFRESH_TOKEN */);
44
+ this.expiresAt = loadFromStorage("expires_at" /* EXPIRES_AT */);
45
+ }
46
+ /**
47
+ * Save tokens to storage
48
+ */
49
+ saveTokens(accessToken, refreshToken, expiresIn) {
50
+ this.accessToken = accessToken;
51
+ this.refreshToken = refreshToken;
52
+ this.expiresAt = calculateExpiryTimestamp(expiresIn);
53
+ saveToStorage("access_token" /* ACCESS_TOKEN */, accessToken);
54
+ saveToStorage("refresh_token" /* REFRESH_TOKEN */, refreshToken);
55
+ saveToStorage("expires_at" /* EXPIRES_AT */, this.expiresAt);
56
+ }
57
+ /**
58
+ * Clear tokens
59
+ */
60
+ clearTokens() {
61
+ this.accessToken = null;
62
+ this.refreshToken = null;
63
+ this.expiresAt = null;
64
+ removeFromStorage("access_token" /* ACCESS_TOKEN */);
65
+ removeFromStorage("refresh_token" /* REFRESH_TOKEN */);
66
+ removeFromStorage("expires_at" /* EXPIRES_AT */);
67
+ }
68
+ /**
69
+ * Check if access token is expired
70
+ */
71
+ isTokenExpired() {
72
+ return isTokenExpired(this.expiresAt);
73
+ }
74
+ /**
75
+ * Get current access token
76
+ */
77
+ getAccessToken() {
78
+ return this.accessToken;
79
+ }
80
+ /**
81
+ * Refresh access token
82
+ */
83
+ async refreshAccessToken() {
84
+ if (this.isRefreshing) {
85
+ if (this.refreshPromise) {
86
+ await this.refreshPromise;
87
+ }
88
+ return;
89
+ }
90
+ if (!this.refreshToken) {
91
+ throw createAbcError(
92
+ "TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
93
+ "No refresh token available"
94
+ );
95
+ }
96
+ this.isRefreshing = true;
97
+ this.refreshPromise = (async () => {
98
+ try {
99
+ const isIframe = typeof window !== "undefined" && window.self !== window.top;
100
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
101
+ const response = await fetch(
102
+ `${talkenApiUrl}${ABC_ENDPOINTS.REFRESH_TOKEN}`,
103
+ {
104
+ method: "POST",
105
+ headers: DEFAULT_HEADERS,
106
+ credentials: "include",
107
+ // Important: withCredentials from reference
108
+ body: new URLSearchParams({
109
+ refresh_token: this.refreshToken || "",
110
+ // Use snake_case (reference pattern)
111
+ isIframe: String(isIframe)
112
+ }).toString()
113
+ }
114
+ );
115
+ const text = await response.text();
116
+ const data = text ? JSON.parse(text) : {};
117
+ if (response.ok && data.access_token) {
118
+ const expiresIn = data.expire_in || 3600;
119
+ this.saveTokens(
120
+ data.access_token,
121
+ data.refresh_token || this.refreshToken,
122
+ // Keep old if not provided
123
+ expiresIn
124
+ );
125
+ } else {
126
+ throw createAbcError(
127
+ "TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
128
+ "Failed to refresh token"
129
+ );
130
+ }
131
+ } finally {
132
+ this.isRefreshing = false;
133
+ this.refreshPromise = null;
134
+ }
135
+ })();
136
+ await this.refreshPromise;
137
+ }
138
+ /**
139
+ * Make HTTP request
140
+ */
141
+ async request(endpoint, options = {}) {
142
+ const {
143
+ method = "GET",
144
+ body,
145
+ headers = {},
146
+ skipAuth = false,
147
+ isRetry = false
148
+ } = options;
149
+ if (!skipAuth && this.isTokenExpired() && this.refreshToken) {
150
+ await this.refreshAccessToken();
151
+ }
152
+ const url = `${this.baseURL}${endpoint}`;
153
+ const requestHeaders = {
154
+ ...DEFAULT_HEADERS,
155
+ ...headers
156
+ };
157
+ if (!skipAuth && this.accessToken) {
158
+ requestHeaders.Authorization = `Bearer ${this.accessToken}`;
159
+ }
160
+ if (this.config.apiKey) {
161
+ requestHeaders["X-API-Key"] = this.config.apiKey;
162
+ }
163
+ try {
164
+ const controller = new AbortController();
165
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);
166
+ const requestBody = body ? new URLSearchParams(body).toString() : void 0;
167
+ const response = await fetch(url, {
168
+ method,
169
+ headers: requestHeaders,
170
+ body: requestBody,
171
+ signal: controller.signal
172
+ });
173
+ clearTimeout(timeoutId);
174
+ const text = await response.text();
175
+ let data;
176
+ if (text) {
177
+ try {
178
+ data = JSON.parse(text);
179
+ } catch (parseError) {
180
+ console.error("[AbcWaasClient] \u274C JSON parse error:", {
181
+ url,
182
+ method,
183
+ status: response.status,
184
+ responseText: text.substring(0, 200)
185
+ // Log first 200 chars
186
+ });
187
+ throw createAbcError(
188
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
189
+ "Invalid JSON response from server",
190
+ { text, parseError }
191
+ );
192
+ }
193
+ } else {
194
+ console.log("[AbcWaasClient] \u2139\uFE0F Empty response received:", {
195
+ url,
196
+ method,
197
+ status: response.status
198
+ });
199
+ data = { status: "success" };
200
+ }
201
+ if (response.status === 401 && !skipAuth && this.refreshToken && !isRetry) {
202
+ try {
203
+ await this.refreshAccessToken();
204
+ return await this.request(endpoint, {
205
+ ...options,
206
+ isRetry: true
207
+ // Prevent infinite retry loop
208
+ });
209
+ } catch (refreshError) {
210
+ console.error("Token refresh failed:", refreshError);
211
+ throw parseApiError({
212
+ response: {
213
+ status: response.status,
214
+ data
215
+ }
216
+ });
217
+ }
218
+ }
219
+ if (!response.ok) {
220
+ console.error("[AbcWaasClient] \u274C API Error:", {
221
+ url,
222
+ method,
223
+ status: response.status,
224
+ statusText: response.statusText,
225
+ data
226
+ });
227
+ throw parseApiError({
228
+ response: {
229
+ status: response.status,
230
+ data
231
+ }
232
+ });
233
+ }
234
+ return data;
235
+ } catch (error) {
236
+ console.error("[AbcWaasClient] \u274C Request failed:", {
237
+ url,
238
+ method,
239
+ error: error.message,
240
+ errorName: error.name,
241
+ errorType: error.constructor.name,
242
+ stack: error.stack
243
+ });
244
+ if (error.name === "AbortError") {
245
+ throw createAbcError(
246
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
247
+ "Request timeout",
248
+ error
249
+ );
250
+ }
251
+ if (error.code && error.message) {
252
+ throw error;
253
+ }
254
+ throw parseApiError(error);
255
+ }
256
+ }
257
+ /**
258
+ * Login with email and password
259
+ * NOTE: Tokens are stored in memory only. Call persistTokens() after PIN verification to save to localStorage.
260
+ */
261
+ async loginWithEmail(email, password) {
262
+ const response = await this.request(
263
+ ABC_ENDPOINTS.SNS_LOGIN,
264
+ {
265
+ method: "POST",
266
+ body: {
267
+ email,
268
+ token: password,
269
+ // Use password as token
270
+ service: "email",
271
+ audience: ABC_AUDIENCE
272
+ },
273
+ skipAuth: true
274
+ }
275
+ );
276
+ if (response.status === "success" && response.data) {
277
+ this.accessToken = response.data.accessToken;
278
+ this.refreshToken = response.data.refreshToken;
279
+ this.expiresAt = calculateExpiryTimestamp(response.data.expiresIn);
280
+ console.log(
281
+ "[AbcWaasClient] \u2705 Login successful, tokens stored in memory (not persisted yet)"
282
+ );
283
+ return response.data;
284
+ }
285
+ throw createAbcError(
286
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
287
+ "Email login failed",
288
+ response
289
+ );
290
+ }
291
+ /**
292
+ * Login with email and OTP (for PIN recovery)
293
+ * NOTE: Tokens are stored in memory only. Call persistTokens() after PIN verification to save to localStorage.
294
+ */
295
+ async loginWithOtp(email, otpCode) {
296
+ const response = await this.request(
297
+ ABC_ENDPOINTS.SNS_LOGIN,
298
+ {
299
+ method: "POST",
300
+ body: {
301
+ email,
302
+ token: otpCode,
303
+ service: "email",
304
+ audience: ABC_AUDIENCE
305
+ },
306
+ skipAuth: true
307
+ }
308
+ );
309
+ if (response.status === "success" && response.data) {
310
+ this.accessToken = response.data.accessToken;
311
+ this.refreshToken = response.data.refreshToken;
312
+ this.expiresAt = calculateExpiryTimestamp(response.data.expiresIn);
313
+ console.log(
314
+ "[AbcWaasClient] \u2705 OTP login successful, tokens stored in memory (not persisted yet)"
315
+ );
316
+ return response.data;
317
+ }
318
+ throw createAbcError(
319
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
320
+ "OTP login failed",
321
+ response
322
+ );
323
+ }
324
+ /**
325
+ * Login with social provider
326
+ * NOTE: Tokens are stored in memory only. Call persistTokens() after PIN verification to save to localStorage.
327
+ */
328
+ async loginWithSocial(provider, token, email) {
329
+ const response = await this.request(
330
+ ABC_ENDPOINTS.SNS_LOGIN,
331
+ {
332
+ method: "POST",
333
+ body: {
334
+ token,
335
+ service: provider,
336
+ audience: ABC_AUDIENCE,
337
+ email
338
+ },
339
+ skipAuth: true
340
+ }
341
+ );
342
+ if (response.status === "success" && response.data) {
343
+ this.accessToken = response.data.accessToken;
344
+ this.refreshToken = response.data.refreshToken;
345
+ this.expiresAt = calculateExpiryTimestamp(response.data.expiresIn);
346
+ console.log(
347
+ "[AbcWaasClient] \u2705 Social login successful, tokens stored in memory (not persisted yet)"
348
+ );
349
+ return response.data;
350
+ }
351
+ throw createAbcError(
352
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
353
+ "Social login failed",
354
+ response
355
+ );
356
+ }
357
+ /**
358
+ * Refresh access token using refresh token (public wrapper)
359
+ */
360
+ async refreshTokens(refreshTokenValue) {
361
+ const oldRefreshToken = this.refreshToken;
362
+ this.refreshToken = refreshTokenValue;
363
+ try {
364
+ await this.refreshAccessToken();
365
+ return {
366
+ accessToken: this.accessToken,
367
+ refreshToken: this.refreshToken,
368
+ expiresIn: Math.floor((this.expiresAt - Date.now()) / 1e3)
369
+ };
370
+ } catch (error) {
371
+ this.refreshToken = oldRefreshToken;
372
+ throw error;
373
+ }
374
+ }
375
+ /**
376
+ * Request OTP code for email
377
+ */
378
+ async requestOtpCode(email) {
379
+ const response = await this.request(
380
+ ABC_ENDPOINTS.SEND_OTP,
381
+ {
382
+ method: "POST",
383
+ body: { email },
384
+ skipAuth: true
385
+ }
386
+ );
387
+ if (response.status === "success" && response.data) {
388
+ return response.data;
389
+ }
390
+ throw createAbcError(
391
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
392
+ "Failed to request OTP",
393
+ response
394
+ );
395
+ }
396
+ /**
397
+ * Verify OTP code
398
+ */
399
+ async verifyOtpCode(email, code) {
400
+ const response = await this.request(ABC_ENDPOINTS.VERIFY_OTP, {
401
+ method: "POST",
402
+ body: { email, code },
403
+ skipAuth: true
404
+ });
405
+ return response.status === "success";
406
+ }
407
+ /**
408
+ * Check if email already exists
409
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:63-69
410
+ */
411
+ async emailCheck(email) {
412
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
413
+ const url = `${talkenApiUrl}/abc/emailCheck?email=${encodeURIComponent(email)}`;
414
+ const method = "GET";
415
+ console.log("[AbcWaasClient] \u{1F4EC} Checking email:", {
416
+ email,
417
+ url,
418
+ apiServer: talkenApiUrl
419
+ });
420
+ try {
421
+ const response = await fetch(url, {
422
+ method,
423
+ headers: DEFAULT_HEADERS
424
+ });
425
+ const text = await response.text();
426
+ const data = text ? JSON.parse(text) : { status: "success" };
427
+ if (!response.ok) {
428
+ console.error("[AbcWaasClient] \u274C API Error:", {
429
+ url,
430
+ method,
431
+ status: response.status,
432
+ statusText: response.statusText,
433
+ data
434
+ });
435
+ throw parseApiError({
436
+ response: {
437
+ status: response.status,
438
+ data
439
+ }
440
+ });
441
+ }
442
+ return data;
443
+ } catch (error) {
444
+ if (error.name === "AbortError") {
445
+ throw createAbcError(
446
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
447
+ "Request timeout",
448
+ error
449
+ );
450
+ }
451
+ throw parseApiError(error);
452
+ }
453
+ }
454
+ /**
455
+ * Send OTP code to email for signup
456
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:105-110
457
+ * Note: Uses ABC WaaS endpoint, not Talken API
458
+ */
459
+ async sendOtpCode(email) {
460
+ const endpoint = `/member/mail-service/${encodeURIComponent(email)}/sendcode`;
461
+ console.log("[AbcWaasClient] \u{1F4E7} Sending OTP code:", {
462
+ email,
463
+ endpoint,
464
+ fullUrl: `${this.baseURL}${endpoint}`
465
+ });
466
+ const response = await this.request(endpoint, {
467
+ method: "GET",
468
+ skipAuth: true
469
+ });
470
+ if (response.status === "success") {
471
+ return response;
472
+ }
473
+ throw createAbcError(
474
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
475
+ "Failed to send OTP code",
476
+ response
477
+ );
478
+ }
479
+ /**
480
+ * Verify OTP code for signup
481
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:112-123
482
+ * Note: Uses ABC WaaS endpoint, not Talken API
483
+ */
484
+ async verifyOtpCodeSignup(email, code) {
485
+ const endpoint = `/member/mail-service/${encodeURIComponent(email)}/verifycode`;
486
+ const requestBody = {
487
+ email,
488
+ code,
489
+ serviceid: ABC_AUDIENCE
490
+ // 'https://mw.myabcwallet.com'
491
+ };
492
+ console.log("[AbcWaasClient] \u{1F510} Verifying OTP code:", {
493
+ email,
494
+ code: `${code.substring(0, 2)}****`,
495
+ // Mask OTP for security
496
+ serviceid: ABC_AUDIENCE,
497
+ endpoint,
498
+ fullUrl: `${this.baseURL}${endpoint}`,
499
+ requestBody
500
+ });
501
+ const response = await this.request(endpoint, {
502
+ method: "POST",
503
+ body: requestBody,
504
+ skipAuth: true
505
+ });
506
+ console.log("[verifyOtpCodeSignup] Response:", response);
507
+ const isSuccess = response.status === "success" || response.status === 200 || response.message === "success";
508
+ if (isSuccess) {
509
+ return response;
510
+ }
511
+ console.error("[verifyOtpCodeSignup] Failed:", response);
512
+ throw createAbcError(
513
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
514
+ "Invalid or expired OTP code",
515
+ response
516
+ );
517
+ }
518
+ /**
519
+ * SNS (Social) Login via Google/Apple/Kakao
520
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:43-51
521
+ * Note: Uses Talken API server, not ABC WaaS
522
+ */
523
+ async snsLogin(params) {
524
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
525
+ const url = `${talkenApiUrl}/abc/snsLogin`;
526
+ console.log("[AbcWaasClient] \u{1F510} SNS Login:", {
527
+ service: params.service,
528
+ email: params.email,
529
+ audience: params.audience,
530
+ hasToken: !!params.token,
531
+ url
532
+ });
533
+ try {
534
+ const response = await fetch(url, {
535
+ method: "POST",
536
+ headers: {
537
+ ...DEFAULT_HEADERS
538
+ },
539
+ credentials: "include",
540
+ // withCredentials from reference
541
+ body: new URLSearchParams(params).toString()
542
+ });
543
+ const data = await response.json();
544
+ if (!response.ok) {
545
+ console.error("[AbcWaasClient] \u274C SNS Login failed:", {
546
+ url,
547
+ status: response.status,
548
+ statusText: response.statusText,
549
+ data
550
+ });
551
+ throw parseApiError({
552
+ response: {
553
+ status: response.status,
554
+ data
555
+ }
556
+ });
557
+ }
558
+ if (!data.access_token) {
559
+ throw createAbcError(
560
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
561
+ "SNS login failed: Invalid response from server",
562
+ { service: params.service, response: data }
563
+ );
564
+ }
565
+ console.log("[AbcWaasClient] \u2705 SNS login successful:", params.email);
566
+ return {
567
+ uid: "",
568
+ // Will be fetched later via info() API
569
+ email: params.email,
570
+ access_token: data.access_token,
571
+ refresh_token: data.refresh_token,
572
+ user_type: "existing"
573
+ // Default to existing, will be determined later
574
+ };
575
+ } catch (error) {
576
+ if (error.name === "AbortError") {
577
+ throw createAbcError(
578
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
579
+ "SNS login request timeout",
580
+ error
581
+ );
582
+ }
583
+ throw error;
584
+ }
585
+ }
586
+ /**
587
+ * Register new user
588
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:71-78
589
+ * Note: Uses Talken API server, not ABC WaaS
590
+ */
591
+ async registerUser(params) {
592
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
593
+ const url = `${talkenApiUrl}/abc/adduser`;
594
+ const method = "POST";
595
+ console.log("[AbcWaasClient] \u{1F4DD} Registering user:", {
596
+ username: params.username,
597
+ name: params.name,
598
+ hasPassword: !!params.password,
599
+ hasSecureChannel: !!params.secureChannel,
600
+ hasEmailCode: !!params.emailCode,
601
+ url
602
+ });
603
+ try {
604
+ const response = await fetch(url, {
605
+ method,
606
+ headers: {
607
+ ...DEFAULT_HEADERS
608
+ },
609
+ credentials: "include",
610
+ // withCredentials from reference
611
+ body: new URLSearchParams(params).toString()
612
+ });
613
+ const text = await response.text();
614
+ const data = text ? JSON.parse(text) : { status: "success" };
615
+ if (!response.ok) {
616
+ console.error("[AbcWaasClient] \u274C API Error:", {
617
+ url,
618
+ method,
619
+ status: response.status,
620
+ statusText: response.statusText,
621
+ data
622
+ });
623
+ throw parseApiError({
624
+ response: {
625
+ status: response.status,
626
+ data
627
+ }
628
+ });
629
+ }
630
+ return data;
631
+ } catch (error) {
632
+ if (error.name === "AbortError") {
633
+ throw createAbcError(
634
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
635
+ "Request timeout",
636
+ error
637
+ );
638
+ }
639
+ throw parseApiError(error);
640
+ }
641
+ }
642
+ /**
643
+ * Register new SNS user (email-based registration with OTP)
644
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:80-87
645
+ * Note: Uses Talken API server, not ABC WaaS
646
+ */
647
+ async registerSnsUser(params) {
648
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
649
+ const url = `${talkenApiUrl}/abc/snsAdduser`;
650
+ const method = "POST";
651
+ console.log("[AbcWaasClient] \u{1F4DD} Registering SNS user:", {
652
+ username: params.username,
653
+ name: params.name,
654
+ hasOtp: !!params.sixCode,
655
+ url
656
+ });
657
+ try {
658
+ const response = await fetch(url, {
659
+ method,
660
+ headers: {
661
+ ...DEFAULT_HEADERS
662
+ },
663
+ credentials: "include",
664
+ // withCredentials from reference
665
+ body: new URLSearchParams(params).toString()
666
+ });
667
+ const text = await response.text();
668
+ const data = text ? JSON.parse(text) : { status: "success" };
669
+ if (!response.ok) {
670
+ console.error("[AbcWaasClient] \u274C API Error:", {
671
+ url,
672
+ method,
673
+ status: response.status,
674
+ statusText: response.statusText,
675
+ data
676
+ });
677
+ throw parseApiError({
678
+ response: {
679
+ status: response.status,
680
+ data
681
+ }
682
+ });
683
+ }
684
+ console.log("[AbcWaasClient] \u2705 SNS user registered successfully");
685
+ return data;
686
+ } catch (error) {
687
+ if (error.name === "AbortError") {
688
+ throw createAbcError(
689
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
690
+ "Request timeout",
691
+ error
692
+ );
693
+ }
694
+ throw parseApiError(error);
695
+ }
696
+ }
697
+ /**
698
+ * Reset/Set password for existing user
699
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:89-95
700
+ * Note: Uses Talken API server, not ABC WaaS
701
+ */
702
+ async resetPassword(params) {
703
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
704
+ const url = `${talkenApiUrl}/abc/initpassword`;
705
+ const method = "POST";
706
+ console.log("[AbcWaasClient] \u{1F510} Setting password:", {
707
+ username: params.username,
708
+ hasPassword: !!params.password,
709
+ hasSecureChannel: !!params.secureChannel,
710
+ hasEmailCode: !!params.emailCode,
711
+ url
712
+ });
713
+ try {
714
+ const response = await fetch(url, {
715
+ method,
716
+ headers: {
717
+ ...DEFAULT_HEADERS
718
+ },
719
+ credentials: "include",
720
+ body: new URLSearchParams(params).toString()
721
+ });
722
+ const text = await response.text();
723
+ const data = text ? JSON.parse(text) : { status: "success" };
724
+ if (!response.ok) {
725
+ console.error("[AbcWaasClient] \u274C API Error:", {
726
+ url,
727
+ method,
728
+ status: response.status,
729
+ statusText: response.statusText,
730
+ data
731
+ });
732
+ throw parseApiError({
733
+ response: {
734
+ status: response.status,
735
+ data
736
+ }
737
+ });
738
+ }
739
+ console.log("[AbcWaasClient] \u2705 Password set successfully");
740
+ return data;
741
+ } catch (error) {
742
+ if (error.name === "AbortError") {
743
+ throw createAbcError(
744
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
745
+ "Request timeout",
746
+ error
747
+ );
748
+ }
749
+ throw parseApiError(error);
750
+ }
751
+ }
752
+ /**
753
+ * Generate or recover wallet
754
+ */
755
+ async generateOrRecoverWallet(params) {
756
+ const response = await this.request(
757
+ // Use 'any' to get raw API response
758
+ ABC_ENDPOINTS.MPC_WALLETS,
759
+ // Use correct EVM endpoint, not WALLETS_V3 (Solana only)
760
+ {
761
+ method: "POST",
762
+ body: {
763
+ uid: params.uid,
764
+ pin: params.pin,
765
+ chainId: params.chainId,
766
+ network: params.network || "mainnet"
767
+ }
768
+ }
769
+ );
770
+ if (response.status === "success" && response.data) {
771
+ const raw = response.data;
772
+ console.log("[AbcWaasClient] Raw wallet API response:", {
773
+ hasUid: !!raw.uid,
774
+ hasSid: !!raw.sid,
775
+ hasKeyId: !!raw.key_id,
776
+ hasWid: !!raw.wid,
777
+ hasPvencstr: !!raw.pvencstr,
778
+ hasEncryptDevicePassword: !!raw.encryptDevicePassword,
779
+ hasEncryptedShare: !!raw.encrypted_share,
780
+ hasPubkey: !!raw.pubkey,
781
+ allKeys: Object.keys(raw)
782
+ });
783
+ return {
784
+ address: raw.sid || "",
785
+ // FIX: sid is the EVM address
786
+ keyId: raw.key_id || raw.keyId || raw.sid,
787
+ encryptedShare: raw.encrypted_share || raw.key_id || "",
788
+ // Use key_id as fallback
789
+ uid: raw.uid,
790
+ sid: raw.sid,
791
+ wid: raw.wid,
792
+ // Preserve for Bitcoin signing
793
+ pvencstr: raw.pvencstr,
794
+ // Preserve for Bitcoin signing
795
+ encryptDevicePassword: raw.encryptDevicePassword,
796
+ // Preserve for Bitcoin signing
797
+ pubkey: raw.pubkey || null
798
+ };
799
+ }
800
+ throw createAbcError(
801
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
802
+ "Failed to generate wallet",
803
+ response
804
+ );
805
+ }
806
+ /**
807
+ * Sign EVM transaction (EIP-1559)
808
+ * Based on ABC WaaS official documentation
809
+ */
810
+ async signTransaction(params) {
811
+ this.loadTokens();
812
+ const wallet = loadFromStorage("wallet" /* WALLET */);
813
+ if (!wallet) {
814
+ throw createAbcError(
815
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
816
+ "Wallet information not found in storage"
817
+ );
818
+ }
819
+ const encryptedDevicePassword = await this.secure.getEncryptPlain(
820
+ wallet.encryptDevicePassword
821
+ );
822
+ const encryptedPvencstr = await this.secure.getEncryptPlain(
823
+ wallet.pvencstr
824
+ );
825
+ const encryptedWid = await this.secure.getEncryptPlain(wallet.wid);
826
+ const secureChannelId = await this.secure.getSecureChannelId();
827
+ const networkMap = {
828
+ // Ethereum Networks
829
+ 1: "ethereum",
830
+ // Ethereum Mainnet
831
+ 11155111: "ethereum_sepolia",
832
+ // Ethereum Sepolia Testnet
833
+ 17e3: "ethereum_holesky",
834
+ // Ethereum Holesky Testnet
835
+ // Polygon Networks
836
+ 137: "polygon",
837
+ // Polygon Mainnet
838
+ 80001: "polygon_amoy",
839
+ // Polygon Amoy Testnet
840
+ // Arbitrum Networks
841
+ 42161: "arbitrum",
842
+ // Arbitrum One
843
+ 421614: "arbitrum_sepolia",
844
+ // Arbitrum Sepolia
845
+ // Optimism Networks
846
+ 10: "optimism",
847
+ // Optimism Mainnet
848
+ 420: "optimism_sepolia",
849
+ // Optimism Sepolia
850
+ // Binance Smart Chain
851
+ 56: "binance",
852
+ // BSC Mainnet
853
+ 97: "binance_testnet",
854
+ // BSC Testnet
855
+ // Avalanche
856
+ 43114: "avalanche",
857
+ // Avalanche C-Chain
858
+ 43113: "avalanche_fuji",
859
+ // Avalanche Fuji Testnet
860
+ // Kaia (formerly Klaytn)
861
+ 8217: "kaia",
862
+ // Kaia Mainnet
863
+ 1001: "kaia_kairos",
864
+ // Kaia Kairos Testnet
865
+ // Other EVM Networks
866
+ 5e3: "mantle",
867
+ // Mantle Mainnet
868
+ 5001: "mantle_testnet",
869
+ // Mantle Testnet
870
+ 1284: "moonbeam",
871
+ // Moonbeam
872
+ 1285: "moonriver",
873
+ // Moonriver
874
+ 534352: "scroll",
875
+ // Scroll Mainnet
876
+ 534351: "scroll_testnet",
877
+ // Scroll Testnet
878
+ 2355: "silicon",
879
+ // Silicon
880
+ 1722641160: "silicon_sepolia",
881
+ // Silicon Sepolia
882
+ // Note: Taiko Mainnet has same Chain ID as Ethereum Holesky (17000)
883
+ // 17000: 'taiko', // Taiko Mainnet (conflicts with ethereum_holesky)
884
+ 167009: "taiko_hekla",
885
+ // Taiko Hekla Testnet
886
+ 1111: "wemix",
887
+ // Wemix Mainnet
888
+ 1112: "wemix_testnet",
889
+ // Wemix Testnet
890
+ 51828: "chainbounty",
891
+ // ChainBounty
892
+ 56580: "chainbounty_testnet"
893
+ // ChainBounty Testnet
894
+ };
895
+ const network = networkMap[params.chainId] || "ethereum";
896
+ const tx = params.transaction;
897
+ if (!tx.maxFeePerGas || !tx.maxPriorityFeePerGas || !tx.gasLimit || !tx.gas) {
898
+ try {
899
+ if (!tx.maxFeePerGas || !tx.maxPriorityFeePerGas) {
900
+ const gasFeeUrl = `${this.baseURL}${ABC_ENDPOINTS.GAS_SUGGESTED_FEES}?network=${network}`;
901
+ const gasFeeResponse = await fetch(gasFeeUrl, {
902
+ method: "GET",
903
+ headers: {
904
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
905
+ }
906
+ });
907
+ if (gasFeeResponse.ok) {
908
+ const gasData = await gasFeeResponse.json();
909
+ if (gasData.medium) {
910
+ if (!tx.maxFeePerGas) {
911
+ const maxFeeGwei = Number.parseFloat(
912
+ gasData.medium.suggestedMaxFeePerGas
913
+ );
914
+ tx.maxFeePerGas = Math.floor(maxFeeGwei * 1e9).toString();
915
+ }
916
+ if (!tx.maxPriorityFeePerGas) {
917
+ const priorityFeeGwei = Number.parseFloat(
918
+ gasData.medium.suggestedMaxPriorityFeePerGas
919
+ );
920
+ tx.maxPriorityFeePerGas = Math.floor(
921
+ priorityFeeGwei * 1e9
922
+ ).toString();
923
+ }
924
+ }
925
+ }
926
+ }
927
+ if (!tx.gasLimit && !tx.gas) {
928
+ const estimateBody = new URLSearchParams({
929
+ network,
930
+ to: tx.to || "0x",
931
+ // Use '0x' for contract deployment
932
+ ...tx.from ? { from: tx.from } : {},
933
+ ...tx.value ? { value: tx.value } : {},
934
+ ...tx.data && tx.data !== "0x" ? { data: tx.data } : {},
935
+ ...tx.maxFeePerGas ? { maxFeePerGas: tx.maxFeePerGas } : {},
936
+ ...tx.maxPriorityFeePerGas ? { maxPriorityFeePerGas: tx.maxPriorityFeePerGas } : {}
937
+ });
938
+ const estimateUrl = `${this.baseURL}${ABC_ENDPOINTS.GAS_ESTIMATE_EIP1559}`;
939
+ const estimateResponse = await fetch(estimateUrl, {
940
+ method: "POST",
941
+ headers: {
942
+ "Content-Type": "application/x-www-form-urlencoded",
943
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
944
+ },
945
+ body: estimateBody.toString()
946
+ });
947
+ const estimateData = await estimateResponse.json();
948
+ if (estimateResponse.ok && estimateData.result) {
949
+ tx.gasLimit = estimateData.result;
950
+ } else {
951
+ const fallbackGasLimit = "0x2dc6c0";
952
+ tx.gasLimit = fallbackGasLimit;
953
+ }
954
+ }
955
+ } catch (error) {
956
+ console.warn("Failed to fetch gas parameters from ABC WaaS:", error);
957
+ }
958
+ }
959
+ const bodyData = {
960
+ network,
961
+ encryptDevicePassword: encryptedDevicePassword,
962
+ pvencstr: encryptedPvencstr,
963
+ uid: wallet.uid,
964
+ wid: encryptedWid,
965
+ sid: getAddress(wallet.address),
966
+ // EIP-55 checksum format
967
+ // For contract deployment, 'to' is '0x' (ABC WaaS convention)
968
+ // Reference: talken-nft-drops/src/libs/abc-waas-provider/index.ts:800 - to: to ?? '0x'
969
+ to: tx.to === "0x" ? "0x" : getAddress(tx.to),
970
+ // Required by ABC WaaS API
971
+ // Always use EIP1559 type (ABC WaaS handles network-specific conversion)
972
+ type: "EIP1559",
973
+ // ourpubkey and ucpubkey are required by ABC WaaS (empty strings for now)
974
+ // Based on successful tg-wallet payload analysis
975
+ ourpubkey: "",
976
+ ucpubkey: ""
977
+ };
978
+ bodyData.from = getAddress(tx.from || wallet.address);
979
+ if (tx.value) {
980
+ let hexValue = tx.value.startsWith("0x") ? tx.value.slice(2) : tx.value;
981
+ if (hexValue.length % 2 !== 0) {
982
+ hexValue = `0${hexValue}`;
983
+ }
984
+ bodyData.value = `0x${hexValue}`;
985
+ } else {
986
+ bodyData.value = "0x0";
987
+ }
988
+ if (tx.gasLimit || tx.gas) {
989
+ const gasLimitValue = tx.gasLimit || tx.gas;
990
+ if (gasLimitValue.toString().startsWith("0x")) {
991
+ bodyData.gasLimit = gasLimitValue.toString();
992
+ } else {
993
+ bodyData.gasLimit = `0x${BigInt(gasLimitValue).toString(16)}`;
994
+ }
995
+ }
996
+ if (tx.maxFeePerGas) {
997
+ if (tx.maxFeePerGas.toString().startsWith("0x")) {
998
+ bodyData.maxFeePerGas = tx.maxFeePerGas.toString();
999
+ } else {
1000
+ bodyData.maxFeePerGas = `0x${BigInt(tx.maxFeePerGas).toString(16)}`;
1001
+ }
1002
+ }
1003
+ if (tx.maxPriorityFeePerGas) {
1004
+ if (tx.maxPriorityFeePerGas.toString().startsWith("0x")) {
1005
+ bodyData.maxPriorityFeePerGas = tx.maxPriorityFeePerGas.toString();
1006
+ } else {
1007
+ bodyData.maxPriorityFeePerGas = `0x${BigInt(tx.maxPriorityFeePerGas).toString(16)}`;
1008
+ }
1009
+ }
1010
+ if (tx.gasPrice) {
1011
+ if (tx.gasPrice.toString().startsWith("0x")) {
1012
+ bodyData.gasPrice = tx.gasPrice.toString();
1013
+ } else {
1014
+ bodyData.gasPrice = `0x${BigInt(tx.gasPrice).toString(16)}`;
1015
+ }
1016
+ }
1017
+ if (tx.data !== void 0 && tx.data !== null) {
1018
+ bodyData.data = tx.data || "0x";
1019
+ } else {
1020
+ bodyData.data = "0x";
1021
+ }
1022
+ const bodyString = new URLSearchParams(bodyData).toString();
1023
+ const url = `${this.baseURL}${ABC_ENDPOINTS.SIGN_TRANSACTION}`;
1024
+ const response = await fetch(url, {
1025
+ method: "POST",
1026
+ headers: {
1027
+ "Content-Type": "application/x-www-form-urlencoded",
1028
+ "Secure-Channel": secureChannelId,
1029
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1030
+ },
1031
+ body: bodyString
1032
+ });
1033
+ const res = await response.json();
1034
+ console.log("\u{1F4E1} ABC WaaS /sign response:", {
1035
+ status: response.status,
1036
+ ok: response.ok,
1037
+ response: res
1038
+ });
1039
+ if (!response.ok) {
1040
+ console.error("\u274C ABC WaaS API error details:", {
1041
+ status: response.status,
1042
+ statusText: response.statusText,
1043
+ errorCode: res.code,
1044
+ errorMessage: res.msg || res.message || res.detail,
1045
+ fullResponse: res
1046
+ });
1047
+ }
1048
+ if (response.status === 401 && this.refreshToken) {
1049
+ try {
1050
+ await this.refreshAccessToken();
1051
+ const retryResponse = await fetch(url, {
1052
+ method: "POST",
1053
+ headers: {
1054
+ "Content-Type": "application/x-www-form-urlencoded",
1055
+ "Secure-Channel": secureChannelId,
1056
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1057
+ },
1058
+ body: bodyString
1059
+ });
1060
+ const retryRes = await retryResponse.json();
1061
+ if (retryRes.serializedTx && retryRes.rawTx) {
1062
+ return {
1063
+ signature: retryRes.serializedTx,
1064
+ txHash: retryRes.rawTx
1065
+ };
1066
+ }
1067
+ throw createAbcError(
1068
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1069
+ "Failed to sign transaction after token refresh",
1070
+ retryRes
1071
+ );
1072
+ } catch (refreshError) {
1073
+ console.error("Token refresh failed in signTransaction:", refreshError);
1074
+ throw refreshError;
1075
+ }
1076
+ }
1077
+ if (res.serializedTx && res.rawTx) {
1078
+ return {
1079
+ signature: res.serializedTx,
1080
+ txHash: res.rawTx
1081
+ };
1082
+ }
1083
+ throw createAbcError(
1084
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1085
+ "Failed to sign transaction",
1086
+ res
1087
+ );
1088
+ }
1089
+ /**
1090
+ * Sign message (Personal Sign - EIP-191)
1091
+ * Based on tg-wallet-frontend reference implementation
1092
+ */
1093
+ async signMessage(params) {
1094
+ this.loadTokens();
1095
+ const wallet = loadFromStorage("wallet" /* WALLET */);
1096
+ if (!wallet) {
1097
+ throw createAbcError(
1098
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1099
+ "Wallet information not found in storage"
1100
+ );
1101
+ }
1102
+ const ethers = await import("ethers");
1103
+ const messageHash = ethers.ethers.utils.hashMessage(params.message);
1104
+ const hash = messageHash.startsWith("0x") ? messageHash.slice(2) : messageHash;
1105
+ const encryptedDevicePassword = await this.secure.getEncryptPlain(
1106
+ wallet.encryptDevicePassword
1107
+ );
1108
+ const encryptedPvencstr = await this.secure.getEncryptPlain(
1109
+ wallet.pvencstr
1110
+ );
1111
+ const encryptedWid = await this.secure.getEncryptPlain(wallet.wid);
1112
+ const secureChannelId = await this.secure.getSecureChannelId();
1113
+ const bodyData = {
1114
+ hash,
1115
+ encryptDevicePassword: encryptedDevicePassword,
1116
+ pvencstr: encryptedPvencstr,
1117
+ wid: encryptedWid,
1118
+ uid: wallet.uid,
1119
+ sid: wallet.sid
1120
+ };
1121
+ const bodyString = new URLSearchParams(bodyData).toString();
1122
+ const url = `${this.baseURL}${ABC_ENDPOINTS.SIGN_HASH}`;
1123
+ const response = await fetch(url, {
1124
+ method: "POST",
1125
+ headers: {
1126
+ "Content-Type": "application/x-www-form-urlencoded",
1127
+ "Secure-Channel": secureChannelId,
1128
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1129
+ },
1130
+ body: bodyString
1131
+ });
1132
+ const text = await response.text();
1133
+ if (!text) {
1134
+ throw createAbcError(
1135
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1136
+ `Empty response from sign API (status: ${response.status})`,
1137
+ { status: response.status }
1138
+ );
1139
+ }
1140
+ const res = JSON.parse(text);
1141
+ if (response.status === 401) {
1142
+ if (!this.refreshToken) {
1143
+ this.loadTokens();
1144
+ }
1145
+ if (this.refreshToken) {
1146
+ try {
1147
+ await this.refreshAccessToken();
1148
+ const retryResponse = await fetch(url, {
1149
+ method: "POST",
1150
+ headers: {
1151
+ "Content-Type": "application/x-www-form-urlencoded",
1152
+ "Secure-Channel": secureChannelId,
1153
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1154
+ },
1155
+ body: bodyString
1156
+ });
1157
+ const retryText = await retryResponse.text();
1158
+ if (!retryText) {
1159
+ throw createAbcError(
1160
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1161
+ `Empty response from retry (status: ${retryResponse.status})`,
1162
+ { status: retryResponse.status }
1163
+ );
1164
+ }
1165
+ const retryRes = JSON.parse(retryText);
1166
+ if (retryRes.status === "success" && retryRes.result?.signstr) {
1167
+ return { signature: retryRes.result.signstr };
1168
+ }
1169
+ throw createAbcError(
1170
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1171
+ "Failed to sign message after token refresh",
1172
+ retryRes
1173
+ );
1174
+ } catch (refreshError) {
1175
+ console.error("Token refresh failed in signMessage:", refreshError);
1176
+ throw refreshError;
1177
+ }
1178
+ }
1179
+ }
1180
+ if (res.signstr) {
1181
+ const signData = JSON.parse(res.signstr);
1182
+ const sigList = signData.sig_list?.[0];
1183
+ if (!sigList || !sigList.r || !sigList.s) {
1184
+ throw createAbcError(
1185
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1186
+ "Invalid signature format",
1187
+ res
1188
+ );
1189
+ }
1190
+ const v = (sigList.vsource || 0) + 27;
1191
+ const signature = sigList.r + sigList.s.slice(2) + v.toString(16).padStart(2, "0");
1192
+ return { signature };
1193
+ }
1194
+ throw createAbcError(
1195
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1196
+ "Failed to sign message",
1197
+ res
1198
+ );
1199
+ }
1200
+ /**
1201
+ * Sign typed data (EIP-712)
1202
+ * Reference: tg-wallet-frontend src/features/wallet/api/index.ts sign_typed_data()
1203
+ */
1204
+ async signTypedData(params) {
1205
+ this.loadTokens();
1206
+ const wallet = loadFromStorage("wallet" /* WALLET */);
1207
+ if (!wallet) {
1208
+ throw createAbcError(
1209
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1210
+ "Wallet information not found in storage"
1211
+ );
1212
+ }
1213
+ const encryptedDevicePassword = await this.secure.getEncryptPlain(
1214
+ wallet.encryptDevicePassword
1215
+ );
1216
+ const encryptedPvencstr = await this.secure.getEncryptPlain(
1217
+ wallet.pvencstr
1218
+ );
1219
+ const encryptedWid = await this.secure.getEncryptPlain(wallet.wid);
1220
+ const secureChannelId = await this.secure.getSecureChannelId();
1221
+ const getNetworkName = (chainId) => {
1222
+ const networkMap = {
1223
+ 1: "ethereum",
1224
+ // Ethereum Mainnet
1225
+ 11155111: "ethereum_sepolia",
1226
+ // Sepolia Testnet
1227
+ 8217: "klaytn",
1228
+ // Klaytn Mainnet
1229
+ 1001: "klaytn_baobab",
1230
+ // Klaytn Baobab Testnet
1231
+ 137: "polygon",
1232
+ // Polygon Mainnet
1233
+ 80002: "polygon_amoy",
1234
+ // Polygon Amoy Testnet
1235
+ 42161: "arbitrum",
1236
+ // Arbitrum One
1237
+ 421614: "arbitrum_sepolia",
1238
+ // Arbitrum Sepolia
1239
+ 5e3: "mantle",
1240
+ // Mantle Mainnet
1241
+ 5003: "mantle_testnet"
1242
+ // Mantle Testnet
1243
+ };
1244
+ return networkMap[chainId] || "ethereum";
1245
+ };
1246
+ const network = getNetworkName(wallet.chainId);
1247
+ const bodyData = {
1248
+ messageJson: params.typedData,
1249
+ // Server expects "messageJson" field
1250
+ version: "v4",
1251
+ // EIP-712 version
1252
+ network,
1253
+ // Network name (required for JSON-RPC)
1254
+ encryptDevicePassword: encryptedDevicePassword,
1255
+ pvencstr: encryptedPvencstr,
1256
+ wid: encryptedWid,
1257
+ uid: wallet.uid,
1258
+ sid: wallet.sid
1259
+ };
1260
+ const bodyString = new URLSearchParams(bodyData).toString();
1261
+ const url = `${this.baseURL}${ABC_ENDPOINTS.SIGN_TYPED}`;
1262
+ const response = await fetch(url, {
1263
+ method: "POST",
1264
+ headers: {
1265
+ "Content-Type": "application/x-www-form-urlencoded",
1266
+ "Secure-Channel": secureChannelId,
1267
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1268
+ },
1269
+ body: bodyString
1270
+ });
1271
+ const text = await response.text();
1272
+ if (!text) {
1273
+ throw createAbcError(
1274
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1275
+ `Empty response from signTypedData API (status: ${response.status})`,
1276
+ { status: response.status }
1277
+ );
1278
+ }
1279
+ const res = JSON.parse(text);
1280
+ if (response.status === 401 && this.refreshToken) {
1281
+ try {
1282
+ await this.refreshAccessToken();
1283
+ const retryResponse = await fetch(url, {
1284
+ method: "POST",
1285
+ headers: {
1286
+ "Content-Type": "application/x-www-form-urlencoded",
1287
+ "Secure-Channel": secureChannelId,
1288
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1289
+ },
1290
+ body: bodyString
1291
+ });
1292
+ const retryText = await retryResponse.text();
1293
+ if (!retryText) {
1294
+ throw createAbcError(
1295
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1296
+ `Empty response after retry (status: ${retryResponse.status})`,
1297
+ { status: retryResponse.status }
1298
+ );
1299
+ }
1300
+ const retryRes = JSON.parse(retryText);
1301
+ if (retryRes.serializedTx) {
1302
+ return { signature: retryRes.serializedTx };
1303
+ }
1304
+ throw createAbcError(
1305
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1306
+ "Failed to sign typed data after token refresh",
1307
+ retryRes
1308
+ );
1309
+ } catch (refreshError) {
1310
+ console.error("Token refresh failed in signTypedData:", refreshError);
1311
+ throw refreshError;
1312
+ }
1313
+ }
1314
+ if (res.serializedTx) {
1315
+ return { signature: res.serializedTx };
1316
+ }
1317
+ throw createAbcError(
1318
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1319
+ "Failed to sign typed data",
1320
+ res
1321
+ );
1322
+ }
1323
+ /**
1324
+ * Send raw transaction
1325
+ * Reference: tg-wallet-frontend src/features/wallet/api/index.ts sendRawTx()
1326
+ */
1327
+ async sendRawTransaction(chainId, signedTransaction) {
1328
+ const wallet = loadFromStorage("wallet" /* WALLET */);
1329
+ if (!wallet) {
1330
+ throw createAbcError(
1331
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1332
+ "Wallet information not found in storage"
1333
+ );
1334
+ }
1335
+ const getNetworkName = (chainId2) => {
1336
+ const networkMap = {
1337
+ 1: "ethereum",
1338
+ 11155111: "ethereum_sepolia",
1339
+ 8217: "klaytn",
1340
+ 1001: "klaytn_baobab",
1341
+ 137: "polygon",
1342
+ 80002: "polygon_amoy",
1343
+ 42161: "arbitrum",
1344
+ 421614: "arbitrum_sepolia",
1345
+ 5e3: "mantle",
1346
+ 5003: "mantle_testnet"
1347
+ };
1348
+ return networkMap[chainId2] || "ethereum";
1349
+ };
1350
+ const network = getNetworkName(chainId);
1351
+ const secureChannelId = await this.secure.getSecureChannelId();
1352
+ const bodyData = {
1353
+ signedSerializeTx: signedTransaction,
1354
+ network
1355
+ // rpc parameter
1356
+ };
1357
+ const bodyString = new URLSearchParams(bodyData).toString();
1358
+ const url = `${this.baseURL}${ABC_ENDPOINTS.SEND_RAW_TX}`;
1359
+ const response = await fetch(url, {
1360
+ method: "POST",
1361
+ headers: {
1362
+ "Content-Type": "application/x-www-form-urlencoded",
1363
+ "Secure-Channel": secureChannelId,
1364
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1365
+ },
1366
+ body: bodyString
1367
+ });
1368
+ const text = await response.text();
1369
+ if (!text) {
1370
+ throw createAbcError(
1371
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
1372
+ `Empty response from sendRawTx API (status: ${response.status})`,
1373
+ { status: response.status }
1374
+ );
1375
+ }
1376
+ const res = JSON.parse(text);
1377
+ console.log("\u{1F4E1} sendRawTransaction response:", {
1378
+ status: response.status,
1379
+ ok: response.ok,
1380
+ response: res
1381
+ });
1382
+ if (!response.ok) {
1383
+ console.error("\u274C sendRawTransaction error:", {
1384
+ status: response.status,
1385
+ errorMessage: res.errorMessage || res.msg || res.message,
1386
+ fullResponse: res
1387
+ });
1388
+ }
1389
+ if (response.status === 401 && this.refreshToken) {
1390
+ try {
1391
+ await this.refreshAccessToken();
1392
+ const retryResponse = await fetch(url, {
1393
+ method: "POST",
1394
+ headers: {
1395
+ "Content-Type": "application/x-www-form-urlencoded",
1396
+ "Secure-Channel": secureChannelId,
1397
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1398
+ },
1399
+ body: bodyString
1400
+ });
1401
+ const retryText = await retryResponse.text();
1402
+ if (!retryText) {
1403
+ throw createAbcError(
1404
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
1405
+ `Empty response after retry (status: ${retryResponse.status})`,
1406
+ { status: retryResponse.status }
1407
+ );
1408
+ }
1409
+ const retryRes = JSON.parse(retryText);
1410
+ if (retryRes.item || retryRes.txHash || retryRes.result?.txHash) {
1411
+ const txHash = retryRes.item || retryRes.txHash || retryRes.result.txHash;
1412
+ return { txHash };
1413
+ }
1414
+ throw createAbcError(
1415
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
1416
+ "Failed to send transaction after token refresh",
1417
+ retryRes
1418
+ );
1419
+ } catch (refreshError) {
1420
+ console.error(
1421
+ "Token refresh failed in sendRawTransaction:",
1422
+ refreshError
1423
+ );
1424
+ throw refreshError;
1425
+ }
1426
+ }
1427
+ if (res.result) {
1428
+ if (typeof res.result === "string") {
1429
+ console.log("\u2705 Transaction hash from result:", res.result);
1430
+ return { txHash: res.result };
1431
+ }
1432
+ if (res.result.txHash) {
1433
+ return { txHash: res.result.txHash };
1434
+ }
1435
+ }
1436
+ if (res.item) {
1437
+ return { txHash: res.item };
1438
+ }
1439
+ if (res.txHash) {
1440
+ return { txHash: res.txHash };
1441
+ }
1442
+ throw createAbcError(
1443
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
1444
+ "Failed to send transaction",
1445
+ res
1446
+ );
1447
+ }
1448
+ /**
1449
+ * Get wallet info
1450
+ */
1451
+ async getWalletInfo(uid) {
1452
+ const response = await this.request(ABC_ENDPOINTS.INFO, {
1453
+ method: "POST",
1454
+ body: { uid }
1455
+ });
1456
+ if (response.status === "success") {
1457
+ return response.data;
1458
+ }
1459
+ throw createAbcError(
1460
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1461
+ "Failed to get wallet info",
1462
+ response
1463
+ );
1464
+ }
1465
+ /**
1466
+ * Logout (clear tokens)
1467
+ */
1468
+ async logout() {
1469
+ this.clearTokens();
1470
+ }
1471
+ /**
1472
+ * Check if user is authenticated
1473
+ */
1474
+ isAuthenticated() {
1475
+ return !!this.accessToken && !this.isTokenExpired();
1476
+ }
1477
+ /**
1478
+ * Set tokens in client instance (useful when restoring from storage or state)
1479
+ * Call this before persistTokens() if you need to set tokens from external source
1480
+ */
1481
+ setTokens(accessToken, refreshToken, expiresAt) {
1482
+ this.accessToken = accessToken;
1483
+ this.refreshToken = refreshToken;
1484
+ this.expiresAt = expiresAt;
1485
+ }
1486
+ /**
1487
+ * Persist tokens to localStorage
1488
+ * Call this after PIN verification is complete
1489
+ *
1490
+ * SECURITY NOTE: This should only be called after full authentication (password + PIN)
1491
+ * to ensure tokens are only persisted after the user has proven ownership of both credentials.
1492
+ */
1493
+ persistTokens() {
1494
+ if (!this.accessToken || !this.refreshToken || !this.expiresAt) {
1495
+ console.warn(
1496
+ "[AbcWaasClient] \u26A0\uFE0F No tokens to persist - ensure login was successful first"
1497
+ );
1498
+ return;
1499
+ }
1500
+ console.log(
1501
+ "[AbcWaasClient] \u{1F4BE} Persisting tokens to localStorage after PIN verification"
1502
+ );
1503
+ saveToStorage("access_token" /* ACCESS_TOKEN */, this.accessToken);
1504
+ saveToStorage("refresh_token" /* REFRESH_TOKEN */, this.refreshToken);
1505
+ saveToStorage("expires_at" /* EXPIRES_AT */, this.expiresAt);
1506
+ }
1507
+ // ==========================================================================
1508
+ // Solana Methods
1509
+ // ==========================================================================
1510
+ /**
1511
+ * Generate or recover Solana wallet (Ed25519)
1512
+ * Reference: SigningService.ts:56-72, wallet/api/index.ts:56-72
1513
+ */
1514
+ async generateSolanaWallet(pin, isRecover = false) {
1515
+ const url = `${this.baseURL}/v3/wallet/${isRecover ? "recover" : "generate"}`;
1516
+ const response = await fetch(url, {
1517
+ method: "POST",
1518
+ headers: {
1519
+ ...DEFAULT_HEADERS,
1520
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1521
+ },
1522
+ body: JSON.stringify({
1523
+ curve: "ed25519",
1524
+ password: pin
1525
+ // PIN will be encrypted by Secure Channel
1526
+ })
1527
+ });
1528
+ const data = await response.json();
1529
+ if (!response.ok || data.status !== "success") {
1530
+ throw createAbcError(
1531
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1532
+ "Failed to generate Solana wallet",
1533
+ data
1534
+ );
1535
+ }
1536
+ const result = data.result;
1537
+ const solanaNetwork = getSolanaNetwork();
1538
+ const addressResult = await this.getSolanaAddress(
1539
+ result.public_key,
1540
+ solanaNetwork
1541
+ );
1542
+ return {
1543
+ uid: result.uid || "",
1544
+ sessionId: result.share_id,
1545
+ shareId: result.share_id,
1546
+ publicKey: result.public_key,
1547
+ address: addressResult,
1548
+ keyId: result.key_id || result.share_id,
1549
+ encryptedShare: result.encrypted_share || "",
1550
+ network: solanaNetwork
1551
+ };
1552
+ }
1553
+ /**
1554
+ * Get Solana address from Ed25519 public key
1555
+ * Reference: wallet/api/index.ts:74-82
1556
+ */
1557
+ async getSolanaAddress(publicKey, network) {
1558
+ const url = `${this.baseURL}/wapi/v2/solana/wallet/getAddress`;
1559
+ const response = await fetch(url, {
1560
+ method: "POST",
1561
+ headers: {
1562
+ ...DEFAULT_HEADERS,
1563
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1564
+ },
1565
+ body: JSON.stringify({
1566
+ network,
1567
+ publicKey
1568
+ })
1569
+ });
1570
+ const data = await response.json();
1571
+ if (!response.ok || data.status !== "success") {
1572
+ throw createAbcError(
1573
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
1574
+ "Failed to get Solana address",
1575
+ data
1576
+ );
1577
+ }
1578
+ return data.result?.data?.address;
1579
+ }
1580
+ /**
1581
+ * Sign Solana transaction with Ed25519
1582
+ * Reference: SigningService.ts:587-626, wallet/api/index.ts:114-122
1583
+ */
1584
+ async signSolanaTransaction(params) {
1585
+ const url = `${this.baseURL}/v3/wallet/sign`;
1586
+ const response = await fetch(url, {
1587
+ method: "POST",
1588
+ headers: {
1589
+ ...DEFAULT_HEADERS,
1590
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1591
+ },
1592
+ body: JSON.stringify({
1593
+ uid: params.uid,
1594
+ share_id: params.shareId,
1595
+ message: params.message,
1596
+ // Hex-encoded transaction
1597
+ password: params.pin
1598
+ // PIN will be encrypted
1599
+ })
1600
+ });
1601
+ const data = await response.json();
1602
+ if (!response.ok || data.status !== "success") {
1603
+ throw createAbcError(
1604
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1605
+ "Failed to sign Solana transaction",
1606
+ data
1607
+ );
1608
+ }
1609
+ return {
1610
+ signature: data.result?.signature
1611
+ };
1612
+ }
1613
+ /**
1614
+ * Sign Solana message with Ed25519
1615
+ * Reference: SigningService.ts:546-579
1616
+ */
1617
+ async signSolanaMessage(params) {
1618
+ const url = `${this.baseURL}/v3/wallet/sign`;
1619
+ const response = await fetch(url, {
1620
+ method: "POST",
1621
+ headers: {
1622
+ ...DEFAULT_HEADERS,
1623
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1624
+ },
1625
+ body: JSON.stringify({
1626
+ uid: params.uid,
1627
+ share_id: params.shareId,
1628
+ message: params.message,
1629
+ // Hex-encoded message
1630
+ password: params.pin
1631
+ })
1632
+ });
1633
+ const data = await response.json();
1634
+ if (!response.ok || data.status !== "success") {
1635
+ throw createAbcError(
1636
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
1637
+ "Failed to sign Solana message",
1638
+ data
1639
+ );
1640
+ }
1641
+ return {
1642
+ signature: data.result?.signature
1643
+ };
1644
+ }
1645
+ /**
1646
+ * Send Solana transaction
1647
+ * Reference: SigningService.ts:418, wallet/api/index.ts:124-132
1648
+ */
1649
+ async sendSolanaTransaction(params) {
1650
+ const url = `${this.baseURL}/wapi/v2/solana/tx/sendTransaction`;
1651
+ const response = await fetch(url, {
1652
+ method: "POST",
1653
+ headers: {
1654
+ ...DEFAULT_HEADERS,
1655
+ ...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
1656
+ },
1657
+ body: JSON.stringify({
1658
+ network: params.network,
1659
+ serializedTX: params.serializedTX,
1660
+ signatures: params.signatures
1661
+ })
1662
+ });
1663
+ const data = await response.json();
1664
+ if (!response.ok || data.status !== "success") {
1665
+ throw createAbcError(
1666
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
1667
+ "Failed to send Solana transaction",
1668
+ data
1669
+ );
1670
+ }
1671
+ return {
1672
+ txHash: data.result?.data
1673
+ };
1674
+ }
1675
+ };
1676
+ function createAbcWaasClient(config) {
1677
+ return new AbcWaasClient(config);
1678
+ }
1679
+
1680
+ export {
1681
+ AbcWaasClient,
1682
+ createAbcWaasClient
1683
+ };