@coinbase/cdp-core 0.0.68 → 0.0.69

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 (364) hide show
  1. package/README.md +149 -1
  2. package/dist/esm/index.native113.js +1 -1
  3. package/dist/esm/index.native114.js +5 -2
  4. package/dist/esm/index.native115.js +18 -4
  5. package/dist/esm/index.native116.js +7 -18
  6. package/dist/esm/index.native117.js +3 -7
  7. package/dist/esm/index.native118.js +23 -3
  8. package/dist/esm/index.native119.js +8 -23
  9. package/dist/esm/index.native120.js +7 -8
  10. package/dist/esm/index.native121.js +71 -7
  11. package/dist/esm/index.native122.js +17 -70
  12. package/dist/esm/index.native123.js +3 -18
  13. package/dist/esm/index.native124.js +4 -3
  14. package/dist/esm/index.native125.js +4 -4
  15. package/dist/esm/index.native126.js +4 -4
  16. package/dist/esm/index.native127.js +19 -4
  17. package/dist/esm/index.native128.js +48 -15
  18. package/dist/esm/index.native129.js +17 -52
  19. package/dist/esm/index.native130.js +23 -17
  20. package/dist/esm/index.native131.js +8 -23
  21. package/dist/esm/index.native132.js +30 -8
  22. package/dist/esm/index.native133.js +7 -30
  23. package/dist/esm/index.native134.js +20 -7
  24. package/dist/esm/index.native135.js +2 -21
  25. package/dist/esm/index.native141.js +1 -1
  26. package/dist/esm/index.native150.js +79 -2
  27. package/dist/esm/index.native151.js +2 -109
  28. package/dist/esm/index.native152.js +109 -2
  29. package/dist/esm/index.native153.js +2 -79
  30. package/dist/esm/index.native155.js +1 -1
  31. package/dist/esm/index.native35.js +13 -12
  32. package/dist/esm/index.native51.js +1 -1
  33. package/dist/esm/index.native52.js +3 -3
  34. package/dist/esm/index.native55.js +1 -1
  35. package/dist/esm/index.native56.js +1 -1
  36. package/dist/esm/index.native60.js +377 -2
  37. package/dist/esm/index.native61.js +2 -4
  38. package/dist/esm/index.native62.js +38 -349
  39. package/dist/esm/index.native63.js +367 -2
  40. package/dist/esm/index.native64.js +2 -66
  41. package/dist/esm/index.native65.js +28 -364
  42. package/dist/esm/index.native66.js +29 -2
  43. package/dist/esm/index.native67.js +2 -29
  44. package/dist/esm/index.native68.js +2 -29
  45. package/dist/esm/index.native7.js +5 -9
  46. package/dist/esm/index.native84.js +1 -1
  47. package/dist/esm/index.web100.js +375 -9
  48. package/dist/esm/index.web101.js +2 -14
  49. package/dist/esm/index.web102.js +65 -13
  50. package/dist/esm/index.web103.js +364 -18
  51. package/dist/esm/index.web104.js +2 -6
  52. package/dist/esm/index.web105.js +29 -5
  53. package/dist/esm/index.web106.js +28 -10
  54. package/dist/esm/index.web107.js +6 -6
  55. package/dist/esm/index.web112.js +2 -5
  56. package/dist/esm/index.web113.js +21 -2
  57. package/dist/esm/index.web114.js +5 -5
  58. package/dist/esm/index.web115.js +44 -15
  59. package/dist/esm/index.web116.js +19 -7
  60. package/dist/esm/index.web117.js +79 -3
  61. package/dist/esm/index.web118.js +102 -22
  62. package/dist/esm/index.web119.js +32 -8
  63. package/dist/esm/index.web120.js +6 -7
  64. package/dist/esm/index.web121.js +4 -71
  65. package/dist/esm/index.web122.js +3 -18
  66. package/dist/esm/index.web123.js +20 -3
  67. package/dist/esm/index.web124.js +10 -5
  68. package/dist/esm/index.web125.js +20 -5
  69. package/dist/esm/index.web126.js +94 -5
  70. package/dist/esm/index.web127.js +20 -19
  71. package/dist/esm/index.web128.js +116 -51
  72. package/dist/esm/index.web129.js +4 -17
  73. package/dist/esm/index.web130.js +14 -19
  74. package/dist/esm/index.web131.js +7 -8
  75. package/dist/esm/index.web132.js +3 -30
  76. package/dist/esm/index.web133.js +23 -7
  77. package/dist/esm/index.web134.js +8 -20
  78. package/dist/esm/index.web135.js +7 -20
  79. package/dist/esm/index.web136.js +72 -5
  80. package/dist/esm/index.web137.js +15 -44
  81. package/dist/esm/index.web138.js +3 -19
  82. package/dist/esm/index.web139.js +4 -79
  83. package/dist/esm/index.web140.js +4 -103
  84. package/dist/esm/index.web141.js +4 -32
  85. package/dist/esm/index.web142.js +19 -6
  86. package/dist/esm/index.web143.js +49 -17
  87. package/dist/esm/index.web144.js +18 -10
  88. package/dist/esm/index.web145.js +23 -19
  89. package/dist/esm/index.web146.js +9 -94
  90. package/dist/esm/index.web147.js +30 -20
  91. package/dist/esm/index.web148.js +8 -118
  92. package/dist/esm/index.web149.js +19 -77
  93. package/dist/esm/index.web150.js +8 -2
  94. package/dist/esm/index.web151.js +2 -109
  95. package/dist/esm/index.web152.js +378 -2
  96. package/dist/esm/index.web153.js +832 -3
  97. package/dist/esm/index.web154.js +38 -46
  98. package/dist/esm/index.web155.js +2 -39
  99. package/dist/esm/index.web156.js +70 -2
  100. package/dist/esm/index.web157.js +31 -66
  101. package/dist/esm/index.web158.js +19 -33
  102. package/dist/esm/index.web159.js +76 -18
  103. package/dist/esm/index.web160.js +5 -8
  104. package/dist/esm/index.web161.js +2 -2
  105. package/dist/esm/index.web162.js +103 -372
  106. package/dist/esm/index.web163.js +2 -833
  107. package/dist/esm/index.web164.js +18 -5
  108. package/dist/esm/index.web165.js +28 -18
  109. package/dist/esm/index.web166.js +6 -26
  110. package/dist/esm/index.web167.js +9 -6
  111. package/dist/esm/index.web168.js +13 -11
  112. package/dist/esm/index.web169.js +8 -11
  113. package/dist/esm/index.web170.js +14 -7
  114. package/dist/esm/index.web171.js +80 -16
  115. package/dist/esm/index.web172.js +45 -79
  116. package/dist/esm/index.web173.js +1 -1
  117. package/dist/esm/index.web28.js +2 -2
  118. package/dist/esm/index.web29.js +1 -1
  119. package/dist/esm/index.web33.js +13 -12
  120. package/dist/esm/index.web40.js +12 -12
  121. package/dist/esm/index.web47.js +2 -2
  122. package/dist/esm/index.web50.js +1 -1
  123. package/dist/esm/index.web51.js +3 -3
  124. package/dist/esm/index.web54.js +1 -1
  125. package/dist/esm/index.web55.js +1 -1
  126. package/dist/esm/index.web59.js +2 -377
  127. package/dist/esm/index.web6.js +5 -9
  128. package/dist/esm/index.web60.js +4 -2
  129. package/dist/esm/index.web61.js +16 -64
  130. package/dist/esm/index.web62.js +45 -364
  131. package/dist/esm/index.web63.js +14 -2
  132. package/dist/esm/index.web64.js +55 -28
  133. package/dist/esm/index.web65.js +6 -28
  134. package/dist/esm/index.web66.js +22 -2
  135. package/dist/esm/index.web67.js +12 -2
  136. package/dist/esm/index.web68.js +3 -17
  137. package/dist/esm/index.web69.js +3 -45
  138. package/dist/esm/index.web70.js +34 -13
  139. package/dist/esm/index.web71.js +10 -53
  140. package/dist/esm/index.web72.js +4 -6
  141. package/dist/esm/index.web73.js +28 -21
  142. package/dist/esm/index.web74.js +6 -11
  143. package/dist/esm/index.web75.js +42 -3
  144. package/dist/esm/index.web76.js +55 -3
  145. package/dist/esm/index.web77.js +126 -33
  146. package/dist/esm/index.web78.js +22 -11
  147. package/dist/esm/index.web79.js +12 -4
  148. package/dist/esm/index.web80.js +102 -26
  149. package/dist/esm/index.web81.js +6 -6
  150. package/dist/esm/index.web82.js +3 -43
  151. package/dist/esm/index.web83.js +14 -55
  152. package/dist/esm/index.web84.js +33 -126
  153. package/dist/esm/index.web85.js +76 -21
  154. package/dist/esm/index.web86.js +2 -13
  155. package/dist/esm/index.web87.js +2 -105
  156. package/dist/esm/index.web88.js +12 -6
  157. package/dist/esm/index.web89.js +38 -3
  158. package/dist/esm/index.web90.js +6 -14
  159. package/dist/esm/index.web91.js +30 -30
  160. package/dist/esm/index.web92.js +8 -78
  161. package/dist/esm/index.web93.js +11 -2
  162. package/dist/esm/index.web94.js +12 -2
  163. package/dist/esm/index.web95.js +12 -11
  164. package/dist/esm/index.web96.js +17 -36
  165. package/dist/esm/index.web97.js +5 -6
  166. package/dist/esm/index.web98.js +5 -35
  167. package/dist/esm/index.web99.js +10 -8
  168. package/dist/native/index.native113.js +1 -1
  169. package/dist/native/index.native114.js +5 -2
  170. package/dist/native/index.native115.js +18 -4
  171. package/dist/native/index.native116.js +7 -18
  172. package/dist/native/index.native117.js +3 -7
  173. package/dist/native/index.native118.js +23 -3
  174. package/dist/native/index.native119.js +8 -23
  175. package/dist/native/index.native120.js +7 -8
  176. package/dist/native/index.native121.js +71 -7
  177. package/dist/native/index.native122.js +17 -70
  178. package/dist/native/index.native123.js +3 -18
  179. package/dist/native/index.native124.js +4 -3
  180. package/dist/native/index.native125.js +4 -4
  181. package/dist/native/index.native126.js +4 -4
  182. package/dist/native/index.native127.js +19 -4
  183. package/dist/native/index.native128.js +48 -15
  184. package/dist/native/index.native129.js +17 -52
  185. package/dist/native/index.native130.js +23 -17
  186. package/dist/native/index.native131.js +8 -23
  187. package/dist/native/index.native132.js +30 -8
  188. package/dist/native/index.native133.js +7 -30
  189. package/dist/native/index.native134.js +20 -7
  190. package/dist/native/index.native135.js +2 -21
  191. package/dist/native/index.native141.js +1 -1
  192. package/dist/native/index.native150.js +79 -2
  193. package/dist/native/index.native151.js +2 -109
  194. package/dist/native/index.native152.js +109 -2
  195. package/dist/native/index.native153.js +2 -79
  196. package/dist/native/index.native155.js +1 -1
  197. package/dist/native/index.native35.js +13 -12
  198. package/dist/native/index.native51.js +1 -1
  199. package/dist/native/index.native52.js +3 -3
  200. package/dist/native/index.native55.js +1 -1
  201. package/dist/native/index.native56.js +1 -1
  202. package/dist/native/index.native60.js +377 -2
  203. package/dist/native/index.native61.js +2 -4
  204. package/dist/native/index.native62.js +38 -349
  205. package/dist/native/index.native63.js +367 -2
  206. package/dist/native/index.native64.js +2 -66
  207. package/dist/native/index.native65.js +28 -364
  208. package/dist/native/index.native66.js +29 -2
  209. package/dist/native/index.native67.js +2 -29
  210. package/dist/native/index.native68.js +2 -29
  211. package/dist/native/index.native7.js +5 -9
  212. package/dist/native/index.native84.js +1 -1
  213. package/dist/native-types/actions/initiateMfaEnrollment.d.ts +9 -0
  214. package/dist/native-types/actions/initiateMfaVerification.d.ts +2 -0
  215. package/dist/native-types/actions/submitMfaEnrollment.d.ts +10 -0
  216. package/dist/native-types/actions/submitMfaVerification.d.ts +6 -0
  217. package/dist/native-types/auth/toAuthState.d.ts +10 -3
  218. package/dist/native-types/auth/withAuth.d.ts +1 -1
  219. package/dist/native-types/index.d.ts +4 -0
  220. package/dist/native-types/shared/validators.d.ts +4 -0
  221. package/dist/native-types/types.d.ts +2 -1
  222. package/dist/native-types/version.d.ts +1 -1
  223. package/dist/types/actions/initiateMfaEnrollment.d.ts +9 -0
  224. package/dist/types/actions/initiateMfaVerification.d.ts +2 -0
  225. package/dist/types/actions/submitMfaEnrollment.d.ts +10 -0
  226. package/dist/types/actions/submitMfaVerification.d.ts +6 -0
  227. package/dist/types/auth/toAuthState.d.ts +10 -3
  228. package/dist/types/auth/withAuth.d.ts +1 -1
  229. package/dist/types/index.d.ts +4 -0
  230. package/dist/types/shared/validators.d.ts +4 -0
  231. package/dist/types/types.d.ts +2 -1
  232. package/dist/types/version.d.ts +1 -1
  233. package/dist/web/index.web100.js +375 -9
  234. package/dist/web/index.web101.js +2 -14
  235. package/dist/web/index.web102.js +65 -13
  236. package/dist/web/index.web103.js +364 -18
  237. package/dist/web/index.web104.js +2 -6
  238. package/dist/web/index.web105.js +29 -5
  239. package/dist/web/index.web106.js +28 -10
  240. package/dist/web/index.web107.js +6 -6
  241. package/dist/web/index.web112.js +2 -5
  242. package/dist/web/index.web113.js +21 -2
  243. package/dist/web/index.web114.js +5 -5
  244. package/dist/web/index.web115.js +44 -15
  245. package/dist/web/index.web116.js +19 -7
  246. package/dist/web/index.web117.js +79 -3
  247. package/dist/web/index.web118.js +102 -22
  248. package/dist/web/index.web119.js +32 -8
  249. package/dist/web/index.web120.js +6 -7
  250. package/dist/web/index.web121.js +4 -71
  251. package/dist/web/index.web122.js +3 -18
  252. package/dist/web/index.web123.js +20 -3
  253. package/dist/web/index.web124.js +10 -5
  254. package/dist/web/index.web125.js +20 -5
  255. package/dist/web/index.web126.js +94 -5
  256. package/dist/web/index.web127.js +20 -19
  257. package/dist/web/index.web128.js +116 -51
  258. package/dist/web/index.web129.js +4 -17
  259. package/dist/web/index.web130.js +14 -19
  260. package/dist/web/index.web131.js +7 -8
  261. package/dist/web/index.web132.js +3 -30
  262. package/dist/web/index.web133.js +23 -7
  263. package/dist/web/index.web134.js +8 -20
  264. package/dist/web/index.web135.js +7 -20
  265. package/dist/web/index.web136.js +72 -5
  266. package/dist/web/index.web137.js +15 -44
  267. package/dist/web/index.web138.js +3 -19
  268. package/dist/web/index.web139.js +4 -79
  269. package/dist/web/index.web140.js +4 -103
  270. package/dist/web/index.web141.js +4 -32
  271. package/dist/web/index.web142.js +19 -6
  272. package/dist/web/index.web143.js +49 -17
  273. package/dist/web/index.web144.js +18 -10
  274. package/dist/web/index.web145.js +23 -19
  275. package/dist/web/index.web146.js +9 -94
  276. package/dist/web/index.web147.js +30 -20
  277. package/dist/web/index.web148.js +8 -118
  278. package/dist/web/index.web149.js +19 -77
  279. package/dist/web/index.web150.js +8 -2
  280. package/dist/web/index.web151.js +2 -109
  281. package/dist/web/index.web152.js +378 -2
  282. package/dist/web/index.web153.js +832 -3
  283. package/dist/web/index.web154.js +38 -46
  284. package/dist/web/index.web155.js +2 -39
  285. package/dist/web/index.web156.js +70 -2
  286. package/dist/web/index.web157.js +31 -66
  287. package/dist/web/index.web158.js +19 -33
  288. package/dist/web/index.web159.js +76 -18
  289. package/dist/web/index.web160.js +5 -8
  290. package/dist/web/index.web161.js +2 -2
  291. package/dist/web/index.web162.js +103 -372
  292. package/dist/web/index.web163.js +2 -833
  293. package/dist/web/index.web164.js +18 -5
  294. package/dist/web/index.web165.js +28 -18
  295. package/dist/web/index.web166.js +6 -26
  296. package/dist/web/index.web167.js +9 -6
  297. package/dist/web/index.web168.js +13 -11
  298. package/dist/web/index.web169.js +8 -11
  299. package/dist/web/index.web170.js +14 -7
  300. package/dist/web/index.web171.js +80 -16
  301. package/dist/web/index.web172.js +45 -79
  302. package/dist/web/index.web173.js +1 -1
  303. package/dist/web/index.web28.js +2 -2
  304. package/dist/web/index.web29.js +1 -1
  305. package/dist/web/index.web33.js +13 -12
  306. package/dist/web/index.web40.js +12 -12
  307. package/dist/web/index.web47.js +2 -2
  308. package/dist/web/index.web50.js +1 -1
  309. package/dist/web/index.web51.js +3 -3
  310. package/dist/web/index.web54.js +1 -1
  311. package/dist/web/index.web55.js +1 -1
  312. package/dist/web/index.web59.js +2 -377
  313. package/dist/web/index.web6.js +5 -9
  314. package/dist/web/index.web60.js +4 -2
  315. package/dist/web/index.web61.js +16 -64
  316. package/dist/web/index.web62.js +45 -364
  317. package/dist/web/index.web63.js +14 -2
  318. package/dist/web/index.web64.js +55 -28
  319. package/dist/web/index.web65.js +6 -28
  320. package/dist/web/index.web66.js +22 -2
  321. package/dist/web/index.web67.js +12 -2
  322. package/dist/web/index.web68.js +3 -17
  323. package/dist/web/index.web69.js +3 -45
  324. package/dist/web/index.web70.js +34 -13
  325. package/dist/web/index.web71.js +10 -53
  326. package/dist/web/index.web72.js +4 -6
  327. package/dist/web/index.web73.js +28 -21
  328. package/dist/web/index.web74.js +6 -11
  329. package/dist/web/index.web75.js +42 -3
  330. package/dist/web/index.web76.js +55 -3
  331. package/dist/web/index.web77.js +126 -33
  332. package/dist/web/index.web78.js +22 -11
  333. package/dist/web/index.web79.js +12 -4
  334. package/dist/web/index.web80.js +102 -26
  335. package/dist/web/index.web81.js +6 -6
  336. package/dist/web/index.web82.js +3 -43
  337. package/dist/web/index.web83.js +14 -55
  338. package/dist/web/index.web84.js +33 -126
  339. package/dist/web/index.web85.js +76 -21
  340. package/dist/web/index.web86.js +2 -13
  341. package/dist/web/index.web87.js +2 -105
  342. package/dist/web/index.web88.js +12 -6
  343. package/dist/web/index.web89.js +38 -3
  344. package/dist/web/index.web90.js +6 -14
  345. package/dist/web/index.web91.js +30 -30
  346. package/dist/web/index.web92.js +8 -78
  347. package/dist/web/index.web93.js +11 -2
  348. package/dist/web/index.web94.js +12 -2
  349. package/dist/web/index.web95.js +12 -11
  350. package/dist/web/index.web96.js +17 -36
  351. package/dist/web/index.web97.js +5 -6
  352. package/dist/web/index.web98.js +5 -35
  353. package/dist/web/index.web99.js +10 -8
  354. package/dist/web-types/actions/initiateMfaEnrollment.d.ts +9 -0
  355. package/dist/web-types/actions/initiateMfaVerification.d.ts +2 -0
  356. package/dist/web-types/actions/submitMfaEnrollment.d.ts +10 -0
  357. package/dist/web-types/actions/submitMfaVerification.d.ts +6 -0
  358. package/dist/web-types/auth/toAuthState.d.ts +10 -3
  359. package/dist/web-types/auth/withAuth.d.ts +1 -1
  360. package/dist/web-types/index.d.ts +4 -0
  361. package/dist/web-types/shared/validators.d.ts +4 -0
  362. package/dist/web-types/types.d.ts +2 -1
  363. package/dist/web-types/version.d.ts +1 -1
  364. package/package.json +3 -3
package/README.md CHANGED
@@ -302,6 +302,155 @@ if (signedIn) {
302
302
  }
303
303
  ```
304
304
 
305
+ ### Multi-Factor Authentication
306
+
307
+ The SDK supports Time-based One-Time Password (TOTP) multi-factor authentication to add an extra layer of security to your application. Users can enroll in MFA using authenticator apps like Google Authenticator or Authy.
308
+
309
+ > **Important**: Users must be authenticated (signed in) before they can enroll in MFA or perform MFA verification.
310
+
311
+ #### MFA Enrollment Flow
312
+
313
+ The enrollment flow consists of two steps:
314
+ 1. **Initiate enrollment** - Generate a TOTP secret and QR code
315
+ 2. **Submit enrollment** - Verify the user's authenticator app is configured correctly
316
+
317
+ ```typescript lines
318
+ import {
319
+ initiateMfaEnrollment,
320
+ submitMfaEnrollment,
321
+ getCurrentUser
322
+ } from "@coinbase/cdp-core";
323
+
324
+ // Step 1: Initiate MFA enrollment (user must be signed in)
325
+ const enrollment = await initiateMfaEnrollment({
326
+ mfaMethod: "totp"
327
+ });
328
+
329
+ // Display QR code for user to scan with their authenticator app
330
+ console.log("Scan this QR code URL:", enrollment.authUrl);
331
+ // Or display the secret for manual entry
332
+ console.log("Or enter this secret manually:", enrollment.secret);
333
+
334
+ // Step 2: After user adds to their authenticator app, verify with the 6-digit code
335
+ const result = await submitMfaEnrollment({
336
+ mfaMethod: "totp",
337
+ mfaCode: "123456" // The 6-digit code from the user's authenticator app
338
+ });
339
+
340
+ // After successful enrollment, the user object is updated with MFA information
341
+ console.log("MFA enrolled for user:", result.user.userId);
342
+ console.log("MFA enrollment info:", result.user.mfaMethods?.totp);
343
+ // Output: { enrolledAt: "2024-01-01T00:00:00Z" }
344
+
345
+ // The current user now has MFA enabled
346
+ const user = await getCurrentUser();
347
+ console.log("User MFA status:", user.mfaMethods);
348
+ ```
349
+
350
+ #### MFA Verification Flow
351
+
352
+ When performing sensitive operations that require MFA verification, use the verification flow:
353
+
354
+ ```typescript lines
355
+ import {
356
+ initiateMfaVerification,
357
+ submitMfaVerification
358
+ } from "@coinbase/cdp-core";
359
+
360
+ // Step 1: Initiate MFA verification (user must be signed in and enrolled in MFA)
361
+ await initiateMfaVerification({
362
+ mfaMethod: "totp"
363
+ });
364
+
365
+ // Step 2: Submit the 6-digit code from the user's authenticator app
366
+ await submitMfaVerification({
367
+ mfaMethod: "totp",
368
+ mfaCode: "654321" // The current 6-digit code from the authenticator app
369
+ });
370
+
371
+ // MFA verification successful - user can now perform sensitive operations
372
+ console.log("MFA verification completed");
373
+ ```
374
+
375
+ #### Complete Example: MFA Setup and Usage
376
+
377
+ ```typescript lines
378
+ import {
379
+ initialize,
380
+ signInWithEmail,
381
+ verifyEmailOTP,
382
+ initiateMfaEnrollment,
383
+ submitMfaEnrollment,
384
+ initiateMfaVerification,
385
+ submitMfaVerification,
386
+ getCurrentUser,
387
+ signEvmTransaction
388
+ } from "@coinbase/cdp-core";
389
+
390
+ // Initialize the SDK
391
+ await initialize({
392
+ projectId: "your-project-id"
393
+ });
394
+
395
+ // Sign in the user first
396
+ const { flowId } = await signInWithEmail({
397
+ email: "user@example.com"
398
+ });
399
+
400
+ const { user } = await verifyEmailOTP({
401
+ flowId,
402
+ otp: "123456"
403
+ });
404
+
405
+ // Check if user has MFA enabled
406
+ if (!user.mfaMethods?.totp) {
407
+ // Enroll in MFA
408
+ const enrollment = await initiateMfaEnrollment({
409
+ mfaMethod: "totp"
410
+ });
411
+
412
+ // Show QR code to user (in a real app, you'd display this as an actual QR code)
413
+ console.log("Please scan this QR code with your authenticator app:");
414
+ console.log(enrollment.authUrl);
415
+
416
+ // Get the code from user input
417
+ const mfaCode = prompt("Enter the 6-digit code from your authenticator app:");
418
+
419
+ // Complete enrollment
420
+ const result = await submitMfaEnrollment({
421
+ mfaMethod: "totp",
422
+ mfaCode
423
+ });
424
+
425
+ console.log("MFA successfully enabled!");
426
+ console.log("Enrolled at:", result.user.mfaMethods.totp.enrolledAt);
427
+ }
428
+
429
+ // Later, when performing a sensitive operation that requires MFA...
430
+ try {
431
+ // Attempt the operation
432
+ await signEvmTransaction({ /* ... */ });
433
+ } catch (error) {
434
+ // If MFA is required, the operation will fail
435
+ // Initiate MFA verification
436
+ await initiateMfaVerification({
437
+ mfaMethod: "totp"
438
+ });
439
+
440
+ // Get MFA code from user
441
+ const verificationCode = prompt("Enter your 6-digit MFA code:");
442
+
443
+ // Submit verification
444
+ await submitMfaVerification({
445
+ mfaMethod: "totp",
446
+ mfaCode: verificationCode
447
+ });
448
+
449
+ // Retry the operation after successful MFA verification
450
+ await signEvmTransaction({ /* ... */ });
451
+ }
452
+ ```
453
+
305
454
  ### Create Accounts Manually
306
455
 
307
456
  If you configured your SDK without `createOnLogin`, you can manually create accounts for authenticated users when needed. This gives you full control over when accounts are created.
@@ -910,4 +1059,3 @@ const client = createWalletClient({
910
1059
  chain: mainnet,
911
1060
  });
912
1061
  ```
913
-
@@ -1,4 +1,4 @@
1
- import { version as r } from "./index.native150.js";
1
+ import { version as r } from "./index.native151.js";
2
2
  function e() {
3
3
  return r;
4
4
  }
@@ -1,4 +1,7 @@
1
- const o = "2.33.0";
1
+ import { getCurrentUser as r } from "./index.native7.js";
2
+ async function n() {
3
+ return (await r())?.evmAccounts || [];
4
+ }
2
5
  export {
3
- o as version
6
+ n as handleAccounts
4
7
  };
@@ -1,7 +1,21 @@
1
- import { getCurrentUser as r } from "./index.native7.js";
2
- async function n() {
3
- return (await r())?.evmAccounts || [];
1
+ import { signEvmHash as o } from "./index.native7.js";
2
+ import { validateUserOwnsEOA as a, EIP1193ProviderError as i, STANDARD_ERROR_CODES as s } from "./index.native26.js";
3
+ async function h(t) {
4
+ const [n, e] = t;
5
+ await a(e);
6
+ try {
7
+ const { signature: r } = await o({
8
+ evmAccount: e,
9
+ hash: n
10
+ });
11
+ return r;
12
+ } catch (r) {
13
+ throw new i(
14
+ s.provider.userRejectedRequest,
15
+ r instanceof Error ? r.message : "Signing failed"
16
+ );
17
+ }
4
18
  }
5
19
  export {
6
- n as handleAccounts
20
+ h as handleEthSign
7
21
  };
@@ -1,21 +1,10 @@
1
- import { signEvmHash as o } from "./index.native7.js";
2
- import { validateUserOwnsEOA as a, EIP1193ProviderError as i, STANDARD_ERROR_CODES as s } from "./index.native26.js";
3
- async function h(t) {
4
- const [n, e] = t;
5
- await a(e);
6
- try {
7
- const { signature: r } = await o({
8
- evmAccount: e,
9
- hash: n
10
- });
11
- return r;
12
- } catch (r) {
13
- throw new i(
14
- s.provider.userRejectedRequest,
15
- r instanceof Error ? r.message : "Signing failed"
16
- );
17
- }
1
+ import { EIP1193ProviderError as t, STANDARD_ERROR_CODES as r } from "./index.native26.js";
2
+ async function a(o, e) {
3
+ throw new t(
4
+ r.provider.unsupportedMethod,
5
+ "wallet_getCallsStatus is not supported with EOAs"
6
+ );
18
7
  }
19
8
  export {
20
- h as handleEthSign
9
+ a as handleGetCallsStatus
21
10
  };
@@ -1,10 +1,6 @@
1
- import { EIP1193ProviderError as t, STANDARD_ERROR_CODES as r } from "./index.native26.js";
2
- async function a(o, e) {
3
- throw new t(
4
- r.provider.unsupportedMethod,
5
- "wallet_getCallsStatus is not supported with EOAs"
6
- );
1
+ async function e() {
2
+ return {};
7
3
  }
8
4
  export {
9
- a as handleGetCallsStatus
5
+ e as handleGetCapabilities
10
6
  };
@@ -1,6 +1,26 @@
1
- async function e() {
2
- return {};
1
+ import { hexToString as s, hashMessage as i, bytesToString as a } from "viem";
2
+ import { signEvmMessage as g } from "./index.native7.js";
3
+ import { validateUserOwnsAddress as c, EIP1193ProviderError as d, STANDARD_ERROR_CODES as f } from "./index.native26.js";
4
+ async function p(r) {
5
+ const [n, t] = r;
6
+ await c(t);
7
+ const o = u(n);
8
+ try {
9
+ const { signature: e } = await g({
10
+ evmAccount: t,
11
+ message: o
12
+ });
13
+ return e;
14
+ } catch (e) {
15
+ throw new d(
16
+ f.provider.userRejectedRequest,
17
+ e instanceof Error ? e.message : "Signing failed"
18
+ );
19
+ }
20
+ }
21
+ function u(r) {
22
+ return typeof r == "string" ? s(r) : typeof r.raw == "string" ? r.raw : i(a(r.raw));
3
23
  }
4
24
  export {
5
- e as handleGetCapabilities
25
+ p as handlePersonalSign
6
26
  };
@@ -1,26 +1,11 @@
1
- import { hexToString as s, hashMessage as i, bytesToString as a } from "viem";
2
- import { signEvmMessage as g } from "./index.native7.js";
3
- import { validateUserOwnsAddress as c, EIP1193ProviderError as d, STANDARD_ERROR_CODES as f } from "./index.native26.js";
4
- async function p(r) {
5
- const [n, t] = r;
6
- await c(t);
7
- const o = u(n);
8
- try {
9
- const { signature: e } = await g({
10
- evmAccount: t,
11
- message: o
12
- });
13
- return e;
14
- } catch (e) {
15
- throw new d(
16
- f.provider.userRejectedRequest,
17
- e instanceof Error ? e.message : "Signing failed"
18
- );
19
- }
20
- }
21
- function u(r) {
22
- return typeof r == "string" ? s(r) : typeof r.raw == "string" ? r.raw : i(a(r.raw));
1
+ import { fromNumber as c } from "./index.native155.js";
2
+ import { validateUserConnected as o } from "./index.native26.js";
3
+ async function i(t, e) {
4
+ const n = await o();
5
+ return t.emit("connect", {
6
+ chainId: c(e.getState().chainId)
7
+ }), n.evmAccounts || [];
23
8
  }
24
9
  export {
25
- p as handlePersonalSign
10
+ i as handleRequestAccounts
26
11
  };
@@ -1,11 +1,10 @@
1
- import { fromNumber as c } from "./index.native155.js";
2
- import { validateUserConnected as o } from "./index.native26.js";
3
- async function i(t, e) {
4
- const n = await o();
5
- return t.emit("connect", {
6
- chainId: c(e.getState().chainId)
7
- }), n.evmAccounts || [];
1
+ import { EIP1193ProviderError as r, STANDARD_ERROR_CODES as o } from "./index.native26.js";
2
+ async function n(e, t) {
3
+ throw new r(
4
+ o.provider.unsupportedMethod,
5
+ "wallet_sendCalls is not supported with EOAs"
6
+ );
8
7
  }
9
8
  export {
10
- i as handleRequestAccounts
9
+ n as handleSendCalls
11
10
  };
@@ -1,10 +1,74 @@
1
- import { EIP1193ProviderError as r, STANDARD_ERROR_CODES as o } from "./index.native26.js";
2
- async function n(e, t) {
3
- throw new r(
4
- o.provider.unsupportedMethod,
5
- "wallet_sendCalls is not supported with EOAs"
6
- );
1
+ import { createWalletClient as u } from "viem";
2
+ import { sendEvmTransaction as l, signEvmTransaction as w } from "./index.native7.js";
3
+ import { isChainIdSupportedForCDPSends as v, sendTransactionChainIdToNameMapping as T } from "./index.native40.js";
4
+ import { RPCRequestError as t, STANDARD_ERROR_CODES as i, validateUserOwnsEOA as P } from "./index.native26.js";
5
+ async function E(e, d, m) {
6
+ const [a] = e;
7
+ if (!a || typeof a != "object")
8
+ throw new t(
9
+ i.rpc.invalidParams,
10
+ "Transaction parameter must be an object"
11
+ );
12
+ if (!a.to)
13
+ throw new t(
14
+ i.rpc.invalidParams,
15
+ "Transaction must include 'to' field"
16
+ );
17
+ await P(a.from);
18
+ const o = d.getState(), r = a.chainId ? Number(a.chainId) : o.chainId;
19
+ if (v(r))
20
+ try {
21
+ const { transactionHash: n } = await l({
22
+ evmAccount: a.from,
23
+ transaction: { ...c(a), chainId: r },
24
+ network: T[r]
25
+ });
26
+ return n;
27
+ } catch (n) {
28
+ throw new t(
29
+ i.rpc.transactionRejected,
30
+ n instanceof Error ? n.message : "Transaction failed"
31
+ );
32
+ }
33
+ else
34
+ try {
35
+ const n = u({
36
+ // Safe as we check before calling this handler that chainId is configured
37
+ chain: o.chains.find((s) => s.id === r),
38
+ transport: m[r],
39
+ account: a.from
40
+ }), p = o.chains.find((s) => s.id === r), h = await n.prepareTransactionRequest({
41
+ ...c(a),
42
+ chain: p
43
+ }), { signedTransaction: f } = await w({
44
+ evmAccount: a.from,
45
+ transaction: {
46
+ ...h,
47
+ type: "eip1559"
48
+ }
49
+ });
50
+ return await n.sendRawTransaction({
51
+ serializedTransaction: f
52
+ });
53
+ } catch (n) {
54
+ throw new t(
55
+ i.rpc.transactionRejected,
56
+ n instanceof Error ? n.message : "Transaction failed"
57
+ );
58
+ }
59
+ }
60
+ function c(e) {
61
+ return {
62
+ to: e.to,
63
+ data: e.data,
64
+ value: e.value ? BigInt(e.value) : void 0,
65
+ nonce: e.nonce ? Number(e.nonce) : void 0,
66
+ gas: e.gas ? BigInt(e.gas) : void 0,
67
+ maxFeePerGas: e.maxFeePerGas ? BigInt(e.maxFeePerGas) : void 0,
68
+ maxPriorityFeePerGas: e.maxPriorityFeePerGas ? BigInt(e.maxPriorityFeePerGas) : void 0,
69
+ type: "eip1559"
70
+ };
7
71
  }
8
72
  export {
9
- n as handleSendCalls
73
+ E as handleSendTransaction
10
74
  };
@@ -1,74 +1,21 @@
1
- import { createWalletClient as u } from "viem";
2
- import { sendEvmTransaction as l, signEvmTransaction as w } from "./index.native7.js";
3
- import { isChainIdSupportedForCDPSends as v, sendTransactionChainIdToNameMapping as T } from "./index.native40.js";
4
- import { RPCRequestError as t, STANDARD_ERROR_CODES as i, validateUserOwnsEOA as P } from "./index.native26.js";
5
- async function E(e, d, m) {
6
- const [a] = e;
7
- if (!a || typeof a != "object")
8
- throw new t(
9
- i.rpc.invalidParams,
10
- "Transaction parameter must be an object"
1
+ import { signEvmTypedData as n } from "./index.native7.js";
2
+ import { validateUserOwnsEOA as o, EIP1193ProviderError as i, STANDARD_ERROR_CODES as s } from "./index.native26.js";
3
+ async function p(t) {
4
+ const [r, a] = t;
5
+ await o(r);
6
+ try {
7
+ const { signature: e } = await n({
8
+ evmAccount: r,
9
+ typedData: JSON.parse(a)
10
+ });
11
+ return e;
12
+ } catch (e) {
13
+ throw new i(
14
+ s.provider.userRejectedRequest,
15
+ e instanceof Error ? e.message : "Signing failed"
11
16
  );
12
- if (!a.to)
13
- throw new t(
14
- i.rpc.invalidParams,
15
- "Transaction must include 'to' field"
16
- );
17
- await P(a.from);
18
- const o = d.getState(), r = a.chainId ? Number(a.chainId) : o.chainId;
19
- if (v(r))
20
- try {
21
- const { transactionHash: n } = await l({
22
- evmAccount: a.from,
23
- transaction: { ...c(a), chainId: r },
24
- network: T[r]
25
- });
26
- return n;
27
- } catch (n) {
28
- throw new t(
29
- i.rpc.transactionRejected,
30
- n instanceof Error ? n.message : "Transaction failed"
31
- );
32
- }
33
- else
34
- try {
35
- const n = u({
36
- // Safe as we check before calling this handler that chainId is configured
37
- chain: o.chains.find((s) => s.id === r),
38
- transport: m[r],
39
- account: a.from
40
- }), p = o.chains.find((s) => s.id === r), h = await n.prepareTransactionRequest({
41
- ...c(a),
42
- chain: p
43
- }), { signedTransaction: f } = await w({
44
- evmAccount: a.from,
45
- transaction: {
46
- ...h,
47
- type: "eip1559"
48
- }
49
- });
50
- return await n.sendRawTransaction({
51
- serializedTransaction: f
52
- });
53
- } catch (n) {
54
- throw new t(
55
- i.rpc.transactionRejected,
56
- n instanceof Error ? n.message : "Transaction failed"
57
- );
58
- }
59
- }
60
- function c(e) {
61
- return {
62
- to: e.to,
63
- data: e.data,
64
- value: e.value ? BigInt(e.value) : void 0,
65
- nonce: e.nonce ? Number(e.nonce) : void 0,
66
- gas: e.gas ? BigInt(e.gas) : void 0,
67
- maxFeePerGas: e.maxFeePerGas ? BigInt(e.maxFeePerGas) : void 0,
68
- maxPriorityFeePerGas: e.maxPriorityFeePerGas ? BigInt(e.maxPriorityFeePerGas) : void 0,
69
- type: "eip1559"
70
- };
17
+ }
71
18
  }
72
19
  export {
73
- E as handleSendTransaction
20
+ p as handleSignTypedData
74
21
  };
@@ -1,21 +1,6 @@
1
- import { signEvmTypedData as n } from "./index.native7.js";
2
- import { validateUserOwnsEOA as o, EIP1193ProviderError as i, STANDARD_ERROR_CODES as s } from "./index.native26.js";
3
- async function p(t) {
4
- const [r, a] = t;
5
- await o(r);
6
- try {
7
- const { signature: e } = await n({
8
- evmAccount: r,
9
- typedData: JSON.parse(a)
10
- });
11
- return e;
12
- } catch (e) {
13
- throw new i(
14
- s.provider.userRejectedRequest,
15
- e instanceof Error ? e.message : "Signing failed"
16
- );
17
- }
1
+ async function a(n) {
2
+ return `0x${n.getState().chainId.toString(16)}`;
18
3
  }
19
4
  export {
20
- p as handleSignTypedData
5
+ a as handleChainId
21
6
  };
@@ -1,6 +1,7 @@
1
- async function a(n) {
2
- return `0x${n.getState().chainId.toString(16)}`;
1
+ import { getCurrentUser as t, signOut as n } from "./index.native7.js";
2
+ async function i() {
3
+ await t() && await n();
3
4
  }
4
5
  export {
5
- a as handleChainId
6
+ i as handleDisconnect
6
7
  };
@@ -1,7 +1,7 @@
1
- import { getCurrentUser as t, signOut as n } from "./index.native7.js";
2
- async function i() {
3
- await t() && await n();
1
+ function a(t, e) {
2
+ const n = Number.parseInt(t[0].chainId, 16);
3
+ e.getState().setChainId(n);
4
4
  }
5
5
  export {
6
- i as handleDisconnect
6
+ a as handleSwitchEthereumChain
7
7
  };
@@ -1,7 +1,7 @@
1
- function a(t, e) {
2
- const n = Number.parseInt(t[0].chainId, 16);
3
- e.getState().setChainId(n);
1
+ import { getCurrentUser as r } from "./index.native7.js";
2
+ async function n() {
3
+ return (await r())?.evmSmartAccounts || [];
4
4
  }
5
5
  export {
6
- a as handleSwitchEthereumChain
6
+ n as handleAccounts
7
7
  };
@@ -1,7 +1,22 @@
1
- import { getCurrentUser as r } from "./index.native7.js";
2
- async function n() {
3
- return (await r())?.evmSmartAccounts || [];
1
+ import { signAndWrapTypedDataForSmartAccount as s } from "./index.native47.js";
2
+ import { validateUserOwnsSmartAccount as c, EIP1193ProviderError as i, STANDARD_ERROR_CODES as d } from "./index.native26.js";
3
+ async function h(e, n) {
4
+ const [a, t] = e, o = await c(t);
5
+ try {
6
+ const { signature: r } = await s({
7
+ smartAccount: t,
8
+ ownerAddress: o.evmAccounts[0],
9
+ hash: a,
10
+ chainId: n.getState().chainId
11
+ });
12
+ return r;
13
+ } catch (r) {
14
+ throw new i(
15
+ d.provider.userRejectedRequest,
16
+ r instanceof Error ? r.message : "Signing failed"
17
+ );
18
+ }
4
19
  }
5
20
  export {
6
- n as handleAccounts
21
+ h as handleEthSign
7
22
  };
@@ -1,22 +1,55 @@
1
- import { signAndWrapTypedDataForSmartAccount as s } from "./index.native47.js";
2
- import { validateUserOwnsSmartAccount as c, EIP1193ProviderError as i, STANDARD_ERROR_CODES as d } from "./index.native26.js";
3
- async function h(e, n) {
4
- const [a, t] = e, o = await c(t);
1
+ import { getUserOperation as u } from "./index.native7.js";
2
+ import { isChainIdSupportedForCDPUserOps as p, userOperationChainIdToNameMapping as r, userOperationNameToChainIdMapping as m } from "./index.native40.js";
3
+ import { validateUserHasEvmSmartAccount as d, RPCRequestError as o, STANDARD_ERROR_CODES as n } from "./index.native26.js";
4
+ async function I(t, s) {
5
+ const i = t[0], c = (await d()).evmSmartAccounts?.[0], a = s.getState().chainId;
6
+ if (!p(a) || !r[a])
7
+ throw new o(
8
+ n.rpc.invalidParams,
9
+ "Chain ID is not supported for user operations"
10
+ );
5
11
  try {
6
- const { signature: r } = await s({
7
- smartAccount: t,
8
- ownerAddress: o.evmAccounts[0],
9
- hash: a,
10
- chainId: n.getState().chainId
12
+ const e = await u({
13
+ userOperationHash: i,
14
+ evmSmartAccount: c,
15
+ network: r[a]
11
16
  });
12
- return r;
13
- } catch (r) {
14
- throw new i(
15
- d.provider.userRejectedRequest,
16
- r instanceof Error ? r.message : "Signing failed"
17
+ return l(e);
18
+ } catch (e) {
19
+ throw console.log("Failed to get user operation status", e), new o(
20
+ n.rpc.internal,
21
+ "Failed to get user operation status"
17
22
  );
18
23
  }
19
24
  }
25
+ function l(t) {
26
+ return {
27
+ atomic: !0,
28
+ chainId: m[t.network] ?? 0,
29
+ receipts: t.receipts?.map((s) => ({
30
+ transactionHash: s.transactionHash,
31
+ blockHash: s.blockHash,
32
+ blockNumber: BigInt(s.blockNumber ?? 0),
33
+ gasUsed: BigInt(s.gasUsed ?? 0),
34
+ logs: [],
35
+ status: ""
36
+ })),
37
+ id: t.userOpHash,
38
+ status: h(t.status),
39
+ version: "1"
40
+ };
41
+ }
42
+ function h(t) {
43
+ switch (t) {
44
+ case "dropped":
45
+ case "failed":
46
+ return 400;
47
+ case "complete":
48
+ return 200;
49
+ default:
50
+ return 100;
51
+ }
52
+ }
20
53
  export {
21
- h as handleEthSign
54
+ I as handleGetCallsStatus
22
55
  };