@coinbase/cdp-hooks 0.0.73 → 0.0.75

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 (303) hide show
  1. package/README.md +231 -2
  2. package/dist/esm/index.js +55 -48
  3. package/dist/esm/index10.js +1 -1
  4. package/dist/esm/index100.js +9 -3
  5. package/dist/esm/index101.js +2 -327
  6. package/dist/esm/index102.js +2 -14
  7. package/dist/esm/index103.js +3 -5
  8. package/dist/esm/index104.js +299 -28
  9. package/dist/esm/index105.js +14 -2
  10. package/dist/esm/index106.js +4 -7
  11. package/dist/esm/index107.js +29 -188
  12. package/dist/esm/index108.js +2 -32
  13. package/dist/esm/index109.js +7 -21
  14. package/dist/esm/index11.js +1 -1
  15. package/dist/esm/index110.js +214 -5
  16. package/dist/esm/index111.js +30 -72
  17. package/dist/esm/index112.js +21 -5
  18. package/dist/esm/index113.js +5 -5
  19. package/dist/esm/index114.js +69 -31
  20. package/dist/esm/index115.js +5 -75
  21. package/dist/esm/index116.js +6 -3
  22. package/dist/esm/index117.js +28 -16
  23. package/dist/esm/index118.js +57 -433
  24. package/dist/esm/index119.js +3 -31
  25. package/dist/esm/index12.js +1 -1
  26. package/dist/esm/index120.js +17 -20
  27. package/dist/esm/index121.js +439 -21
  28. package/dist/esm/index122.js +28 -32
  29. package/dist/esm/index123.js +18 -185
  30. package/dist/esm/index124.js +31 -6
  31. package/dist/esm/index125.js +35 -2
  32. package/dist/esm/index126.js +189 -8
  33. package/dist/esm/index127.js +7 -17
  34. package/dist/esm/index128.js +2 -28
  35. package/dist/esm/index129.js +12 -8
  36. package/dist/esm/index13.js +1 -1
  37. package/dist/esm/index130.js +15 -52
  38. package/dist/esm/index131.js +23 -41
  39. package/dist/esm/index132.js +8 -8
  40. package/dist/esm/index133.js +55 -7
  41. package/dist/esm/index134.js +44 -15
  42. package/dist/esm/index135.js +8 -18
  43. package/dist/esm/index136.js +7 -24
  44. package/dist/esm/index137.js +16 -16
  45. package/dist/esm/index138.js +17 -53
  46. package/dist/esm/index139.js +22 -9
  47. package/dist/esm/index14.js +1 -1
  48. package/dist/esm/index140.js +15 -159
  49. package/dist/esm/index141.js +53 -20
  50. package/dist/esm/index142.js +11 -127
  51. package/dist/esm/index143.js +153 -31
  52. package/dist/esm/index144.js +21 -6
  53. package/dist/esm/index145.js +127 -27
  54. package/dist/esm/index146.js +31 -184
  55. package/dist/esm/index147.js +7 -4
  56. package/dist/esm/index148.js +26 -63
  57. package/dist/esm/index149.js +192 -3
  58. package/dist/esm/index15.js +1 -1
  59. package/dist/esm/index150.js +4 -21
  60. package/dist/esm/index151.js +61 -13
  61. package/dist/esm/index152.js +3 -24
  62. package/dist/esm/index153.js +20 -11
  63. package/dist/esm/index154.js +15 -33
  64. package/dist/esm/index155.js +24 -3
  65. package/dist/esm/index156.js +11 -18
  66. package/dist/esm/index157.js +33 -26
  67. package/dist/esm/index158.js +3 -36
  68. package/dist/esm/index159.js +18 -7
  69. package/dist/esm/index16.js +1 -1
  70. package/dist/esm/index160.js +26 -24
  71. package/dist/esm/index161.js +34 -27
  72. package/dist/esm/index162.js +7 -64
  73. package/dist/esm/index163.js +25 -9
  74. package/dist/esm/index164.js +28 -33
  75. package/dist/esm/index165.js +64 -27
  76. package/dist/esm/index166.js +9 -24
  77. package/dist/esm/index167.js +33 -3
  78. package/dist/esm/index168.js +27 -14
  79. package/dist/esm/index169.js +24 -103
  80. package/dist/esm/index170.js +3 -64
  81. package/dist/esm/index171.js +14 -5
  82. package/dist/esm/index172.js +103 -6
  83. package/dist/esm/index173.js +62 -25
  84. package/dist/esm/index174.js +5 -38
  85. package/dist/esm/index175.js +6 -13
  86. package/dist/esm/index176.js +24 -39
  87. package/dist/esm/index177.js +38 -5
  88. package/dist/esm/index178.js +13 -11
  89. package/dist/esm/index179.js +42 -19
  90. package/dist/esm/index18.js +5 -5
  91. package/dist/esm/index180.js +5 -78
  92. package/dist/esm/index181.js +12 -2
  93. package/dist/esm/index182.js +19 -37
  94. package/dist/esm/index183.js +73 -105
  95. package/dist/esm/index184.js +2 -49
  96. package/dist/esm/index185.js +36 -31
  97. package/dist/esm/index186.js +110 -8
  98. package/dist/esm/index187.js +48 -6
  99. package/dist/esm/index188.js +32 -6
  100. package/dist/esm/index189.js +8 -11
  101. package/dist/esm/index19.js +5 -5
  102. package/dist/esm/index190.js +6 -10
  103. package/dist/esm/index191.js +6 -13
  104. package/dist/esm/index192.js +11 -32
  105. package/dist/esm/index193.js +11 -5
  106. package/dist/esm/index194.js +13 -8
  107. package/dist/esm/index195.js +30 -17
  108. package/dist/esm/index196.js +5 -32
  109. package/dist/esm/index197.js +8 -20
  110. package/dist/esm/index198.js +19 -3
  111. package/dist/esm/index199.js +31 -17
  112. package/dist/esm/index2.js +2 -2
  113. package/dist/esm/index20.js +5 -5
  114. package/dist/esm/index200.js +20 -10
  115. package/dist/esm/index201.js +3 -21
  116. package/dist/esm/index202.js +16 -21
  117. package/dist/esm/index203.js +10 -5
  118. package/dist/esm/index204.js +21 -5
  119. package/dist/esm/index205.js +22 -8
  120. package/dist/esm/index206.js +5 -104
  121. package/dist/esm/index207.js +6 -3
  122. package/dist/esm/index208.js +8 -18
  123. package/dist/esm/index209.js +99 -166
  124. package/dist/esm/index21.js +5 -5
  125. package/dist/esm/index210.js +3 -18
  126. package/dist/esm/index211.js +19 -10
  127. package/dist/esm/index212.js +171 -38
  128. package/dist/esm/index213.js +18 -2
  129. package/dist/esm/index214.js +10 -70
  130. package/dist/esm/index215.js +37 -33
  131. package/dist/esm/index216.js +2 -15
  132. package/dist/esm/index217.js +69 -40
  133. package/dist/esm/index218.js +35 -2
  134. package/dist/esm/index219.js +14 -4
  135. package/dist/esm/index22.js +7 -8
  136. package/dist/esm/index220.js +2 -11
  137. package/dist/esm/index221.js +39 -18
  138. package/dist/esm/index222.js +2 -8
  139. package/dist/esm/index223.js +4 -11
  140. package/dist/esm/index224.js +9 -65
  141. package/dist/esm/index225.js +17 -63
  142. package/dist/esm/index226.js +7 -185
  143. package/dist/esm/index227.js +10 -21
  144. package/dist/esm/index228.js +66 -42
  145. package/dist/esm/index229.js +61 -72
  146. package/dist/esm/index23.js +8 -34
  147. package/dist/esm/index230.js +180 -35
  148. package/dist/esm/index231.js +21 -15
  149. package/dist/esm/index232.js +34 -5
  150. package/dist/esm/index233.js +76 -7
  151. package/dist/esm/index234.js +40 -6
  152. package/dist/esm/index235.js +16 -36
  153. package/dist/esm/index236.js +13 -15
  154. package/dist/esm/index237.js +7 -8
  155. package/dist/esm/index238.js +6 -12
  156. package/dist/esm/index239.js +36 -9
  157. package/dist/esm/index24.js +57 -18
  158. package/dist/esm/index240.js +15 -16
  159. package/dist/esm/index241.js +8 -22
  160. package/dist/esm/index242.js +8 -26
  161. package/dist/esm/index243.js +10 -2
  162. package/dist/esm/index244.js +16 -13
  163. package/dist/esm/index245.js +21 -11
  164. package/dist/esm/index246.js +30 -47
  165. package/dist/esm/index247.js +2 -10
  166. package/dist/esm/index248.js +10 -10
  167. package/dist/esm/index249.js +11 -13
  168. package/dist/esm/index25.js +8 -11
  169. package/dist/esm/index250.js +47 -8
  170. package/dist/esm/index251.js +9 -15
  171. package/dist/esm/index252.js +12 -23
  172. package/dist/esm/index253.js +14 -11
  173. package/dist/esm/index254.js +8 -24
  174. package/dist/esm/index255.js +15 -51
  175. package/dist/esm/index256.js +24 -17
  176. package/dist/esm/index257.js +11 -14
  177. package/dist/esm/index258.js +24 -11
  178. package/dist/esm/index259.js +49 -101
  179. package/dist/esm/index26.js +34 -12
  180. package/dist/esm/index260.js +17 -5
  181. package/dist/esm/index261.js +13 -222
  182. package/dist/esm/index262.js +11 -6
  183. package/dist/esm/index263.js +104 -7
  184. package/dist/esm/index264.js +5 -26
  185. package/dist/esm/index265.js +222 -18
  186. package/dist/esm/index266.js +6 -145
  187. package/dist/esm/index267.js +6 -12
  188. package/dist/esm/index268.js +26 -35
  189. package/dist/esm/index269.js +18 -40
  190. package/dist/esm/index27.js +18 -54
  191. package/dist/esm/index270.js +146 -2
  192. package/dist/esm/index271.js +13 -69
  193. package/dist/esm/index272.js +36 -4
  194. package/dist/esm/index273.js +41 -136
  195. package/dist/esm/index274.js +68 -16
  196. package/dist/esm/index275.js +3 -155
  197. package/dist/esm/index276.js +134 -7
  198. package/dist/esm/index277.js +140 -98
  199. package/dist/esm/index278.js +9 -134
  200. package/dist/esm/index279.js +16 -78
  201. package/dist/esm/index28.js +11 -57
  202. package/dist/esm/index280.js +114 -2
  203. package/dist/esm/index281.js +124 -687
  204. package/dist/esm/index282.js +73 -133
  205. package/dist/esm/index283.js +2 -43
  206. package/dist/esm/index284.js +675 -178
  207. package/dist/esm/index285.js +138 -3
  208. package/dist/esm/index286.js +40 -63
  209. package/dist/esm/index287.js +200 -4
  210. package/dist/esm/index288.js +3 -40
  211. package/dist/esm/index289.js +65 -7
  212. package/dist/esm/index29.js +12 -56
  213. package/dist/esm/index290.js +4 -62
  214. package/dist/esm/index291.js +33 -70
  215. package/dist/esm/index292.js +8 -4
  216. package/dist/esm/index293.js +55 -187
  217. package/dist/esm/index294.js +61 -47
  218. package/dist/esm/index295.js +4 -45
  219. package/dist/esm/index296.js +194 -4
  220. package/dist/esm/index297.js +64 -5
  221. package/dist/esm/index298.js +45 -2
  222. package/dist/esm/index299.js +4 -21
  223. package/dist/esm/index3.js +1 -1
  224. package/dist/esm/index30.js +54 -5
  225. package/dist/esm/index300.js +7 -0
  226. package/dist/esm/index301.js +4 -0
  227. package/dist/esm/index302.js +24 -0
  228. package/dist/esm/index31.js +57 -47
  229. package/dist/esm/index32.js +56 -33
  230. package/dist/esm/index33.js +5 -4
  231. package/dist/esm/index34.js +46 -8
  232. package/dist/esm/index35.js +31 -67
  233. package/dist/esm/index36.js +3 -9
  234. package/dist/esm/index37.js +9 -28
  235. package/dist/esm/index38.js +68 -70
  236. package/dist/esm/index39.js +9 -19
  237. package/dist/esm/index40.js +26 -108
  238. package/dist/esm/index41.js +70 -60
  239. package/dist/esm/index42.js +19 -24
  240. package/dist/esm/index43.js +110 -40
  241. package/dist/esm/index44.js +57 -34
  242. package/dist/esm/index45.js +20 -54
  243. package/dist/esm/index46.js +37 -160
  244. package/dist/esm/index47.js +36 -38
  245. package/dist/esm/index48.js +58 -9
  246. package/dist/esm/index49.js +161 -29
  247. package/dist/esm/index5.js +3 -3
  248. package/dist/esm/index50.js +39 -36
  249. package/dist/esm/index51.js +7 -7
  250. package/dist/esm/index52.js +30 -28
  251. package/dist/esm/index53.js +34 -44
  252. package/dist/esm/index54.js +9 -88
  253. package/dist/esm/index55.js +26 -37
  254. package/dist/esm/index56.js +46 -8
  255. package/dist/esm/index57.js +88 -6
  256. package/dist/esm/index58.js +40 -16
  257. package/dist/esm/index59.js +8 -8
  258. package/dist/esm/index6.js +2 -2
  259. package/dist/esm/index60.js +6 -13
  260. package/dist/esm/index61.js +16 -7
  261. package/dist/esm/index62.js +8 -9
  262. package/dist/esm/index63.js +13 -16
  263. package/dist/esm/index64.js +7 -46
  264. package/dist/esm/index65.js +9 -13
  265. package/dist/esm/index66.js +15 -15
  266. package/dist/esm/index67.js +46 -13
  267. package/dist/esm/index68.js +13 -6
  268. package/dist/esm/index69.js +15 -34
  269. package/dist/esm/index7.js +1 -1
  270. package/dist/esm/index70.js +13 -9
  271. package/dist/esm/index71.js +5 -7
  272. package/dist/esm/index72.js +35 -25
  273. package/dist/esm/index73.js +9 -10
  274. package/dist/esm/index74.js +7 -13
  275. package/dist/esm/index75.js +25 -11
  276. package/dist/esm/index76.js +10 -116
  277. package/dist/esm/index77.js +13 -32
  278. package/dist/esm/index78.js +11 -79
  279. package/dist/esm/index79.js +108 -169
  280. package/dist/esm/index8.js +2 -2
  281. package/dist/esm/index80.js +26 -37
  282. package/dist/esm/index81.js +79 -6
  283. package/dist/esm/index82.js +177 -13
  284. package/dist/esm/index83.js +44 -13
  285. package/dist/esm/index84.js +6 -99
  286. package/dist/esm/index85.js +13 -72
  287. package/dist/esm/index86.js +13 -87
  288. package/dist/esm/index87.js +93 -142
  289. package/dist/esm/index88.js +65 -129
  290. package/dist/esm/index89.js +73 -54
  291. package/dist/esm/index9.js +1 -1
  292. package/dist/esm/index90.js +148 -23
  293. package/dist/esm/index91.js +133 -102
  294. package/dist/esm/index92.js +68 -6
  295. package/dist/esm/index93.js +23 -131
  296. package/dist/esm/index94.js +101 -271
  297. package/dist/esm/index95.js +7 -3
  298. package/dist/esm/index96.js +132 -4
  299. package/dist/esm/index97.js +276 -9
  300. package/dist/esm/index98.js +3 -2
  301. package/dist/esm/index99.js +4 -2
  302. package/dist/types/index.d.ts +33 -0
  303. package/package.json +3 -3
package/README.md CHANGED
@@ -969,6 +969,147 @@ function MfaVerification() {
969
969
  }
970
970
  ```
971
971
 
972
+ #### Check MFA Configuration
973
+
974
+ Use `useGetMfaConfig` to check whether MFA is enabled for your project:
975
+
976
+ ```tsx lines
977
+ import { useGetMfaConfig } from "@coinbase/cdp-hooks";
978
+ import { useState, useEffect } from "react";
979
+
980
+ function MfaStatus() {
981
+ const { getMfaConfig } = useGetMfaConfig();
982
+ const [config, setConfig] = useState<{
983
+ enabled: boolean;
984
+ totpConfig: { enabled: boolean };
985
+ createdAt: string;
986
+ updatedAt: string;
987
+ } | null>(null);
988
+
989
+ useEffect(() => {
990
+ const fetchMfaConfig = async () => {
991
+ try {
992
+ const result = await getMfaConfig();
993
+ setConfig(result);
994
+ console.log("MFA enabled:", result.enabled);
995
+ console.log("TOTP enabled:", result.totpConfig.enabled);
996
+ } catch (error) {
997
+ console.error("Failed to fetch MFA config:", error);
998
+ }
999
+ };
1000
+
1001
+ fetchMfaConfig();
1002
+ }, []);
1003
+
1004
+ if (!config) {
1005
+ return <div>Loading MFA configuration...</div>;
1006
+ }
1007
+
1008
+ return (
1009
+ <div>
1010
+ <h3>MFA Configuration</h3>
1011
+ <p>MFA Enabled: {config.enabled ? "Yes" : "No"}</p>
1012
+ <p>TOTP Enabled: {config.totpConfig.enabled ? "Yes" : "No"}</p>
1013
+ <p>Last Updated: {new Date(config.updatedAt).toLocaleDateString()}</p>
1014
+ </div>
1015
+ );
1016
+ }
1017
+ ```
1018
+
1019
+ #### Track MFA Enrollment Prompts
1020
+
1021
+ Use `useRecordMfaEnrollmentPrompted` to track when users are shown the MFA enrollment prompt:
1022
+
1023
+ ```tsx lines
1024
+ import {
1025
+ useRecordMfaEnrollmentPrompted,
1026
+ useCurrentUser
1027
+ } from "@coinbase/cdp-hooks";
1028
+ import { useState } from "react";
1029
+
1030
+ function MfaEnrollmentPrompt() {
1031
+ const { recordMfaEnrollmentPrompted } = useRecordMfaEnrollmentPrompted();
1032
+ const { currentUser } = useCurrentUser();
1033
+ const [showPrompt, setShowPrompt] = useState(true);
1034
+
1035
+ const handleSkip = async () => {
1036
+ try {
1037
+ // Record that the user was prompted and chose to skip
1038
+ const result = await recordMfaEnrollmentPrompted();
1039
+
1040
+ console.log("Enrollment prompt recorded at:", result.enrollmentPromptedAt);
1041
+
1042
+ // User's state is now updated with the timestamp
1043
+ console.log("Last prompted:", currentUser?.mfaMethods?.enrollmentPromptedAt);
1044
+
1045
+ setShowPrompt(false);
1046
+ } catch (error) {
1047
+ console.error("Failed to record MFA prompt:", error);
1048
+ }
1049
+ };
1050
+
1051
+ const handleEnroll = async () => {
1052
+ // Record the prompt before starting enrollment
1053
+ await recordMfaEnrollmentPrompted();
1054
+
1055
+ // Navigate to enrollment flow
1056
+ console.log("Starting MFA enrollment...");
1057
+ };
1058
+
1059
+ // Check if user was recently prompted (within last 30 days)
1060
+ const wasRecentlyPrompted = () => {
1061
+ if (!currentUser?.mfaMethods?.enrollmentPromptedAt) {
1062
+ return false;
1063
+ }
1064
+
1065
+ const promptedDate = new Date(currentUser.mfaMethods.enrollmentPromptedAt);
1066
+ const thirtyDaysAgo = new Date();
1067
+ thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
1068
+
1069
+ return promptedDate > thirtyDaysAgo;
1070
+ };
1071
+
1072
+ // Don't show prompt if user was recently prompted or already enrolled
1073
+ if (!showPrompt || wasRecentlyPrompted() || currentUser?.mfaMethods?.totp) {
1074
+ return null;
1075
+ }
1076
+
1077
+ return (
1078
+ <div style={{
1079
+ padding: "20px",
1080
+ backgroundColor: "#f0f9ff",
1081
+ border: "1px solid #bae6fd",
1082
+ borderRadius: "8px"
1083
+ }}>
1084
+ <h3>🔒 Secure Your Account with MFA</h3>
1085
+ <p>
1086
+ Add an extra layer of security by enabling Multi-Factor Authentication.
1087
+ </p>
1088
+
1089
+ <div style={{ marginTop: "15px", display: "flex", gap: "10px" }}>
1090
+ <button onClick={handleEnroll}>
1091
+ Enable MFA
1092
+ </button>
1093
+
1094
+ <button onClick={handleSkip} style={{ backgroundColor: "#e5e7eb" }}>
1095
+ Skip for Now
1096
+ </button>
1097
+ </div>
1098
+
1099
+ <p style={{ fontSize: "12px", marginTop: "10px", color: "#6b7280" }}>
1100
+ You won't be prompted again for 30 days
1101
+ </p>
1102
+ </div>
1103
+ );
1104
+ }
1105
+ ```
1106
+
1107
+ **Use Cases for Tracking Enrollment Prompts:**
1108
+ - Track when users skip MFA enrollment to avoid over-prompting
1109
+ - Implement smart re-prompting logic based on time intervals
1110
+ - Analyze MFA adoption rates across your user base
1111
+ - Identify users who need additional education about MFA benefits
1112
+
972
1113
  ### View User Information
973
1114
 
974
1115
  Once the end user has signed in, you can display their information in your application:
@@ -1463,7 +1604,95 @@ function SignData() {
1463
1604
 
1464
1605
  End users can export their private keys from their embedded wallet, allowing them to import them into compatible wallets of their choice.
1465
1606
 
1466
- #### Export EVM Private Key
1607
+ #### Secure Iframe Export (Recommended)
1608
+
1609
+ The secure iframe hooks are the recommended way to export private keys. They create a secure iframe that copies the private key directly to the user's clipboard without ever exposing it to your application's JavaScript context.
1610
+
1611
+ ##### Export EVM Private Key via Iframe
1612
+
1613
+ ```tsx lines
1614
+ import { useEvmKeyExportIframe, useEvmAddress } from "@coinbase/cdp-hooks";
1615
+ import { useRef, useState } from "react";
1616
+
1617
+ function ExportEvmKey() {
1618
+ const { evmAddress } = useEvmAddress();
1619
+ const containerRef = useRef<HTMLDivElement>(null);
1620
+ const [isActive, setIsActive] = useState(false);
1621
+
1622
+ const { status, cleanup } = useEvmKeyExportIframe({
1623
+ address: isActive && evmAddress ? evmAddress : "",
1624
+ containerRef: isActive ? containerRef : { current: null },
1625
+ label: "Copy Private Key",
1626
+ copiedLabel: "Copied!",
1627
+ });
1628
+
1629
+ return (
1630
+ <div>
1631
+ {!isActive ? (
1632
+ <button onClick={() => setIsActive(true)} disabled={!evmAddress}>
1633
+ Show Export Button
1634
+ </button>
1635
+ ) : (
1636
+ <button onClick={() => { cleanup(); setIsActive(false); }}>
1637
+ Hide Export Button
1638
+ </button>
1639
+ )}
1640
+ {isActive && (
1641
+ <div>
1642
+ <div ref={containerRef} />
1643
+ <p>Status: {status ?? "initializing"}</p>
1644
+ </div>
1645
+ )}
1646
+ </div>
1647
+ );
1648
+ }
1649
+ ```
1650
+
1651
+ ##### Export Solana Private Key via Iframe
1652
+
1653
+ ```tsx lines
1654
+ import { useSolanaKeyExportIframe, useSolanaAddress } from "@coinbase/cdp-hooks";
1655
+ import { useRef, useState } from "react";
1656
+
1657
+ function ExportSolanaKey() {
1658
+ const { solanaAddress } = useSolanaAddress();
1659
+ const containerRef = useRef<HTMLDivElement>(null);
1660
+ const [isActive, setIsActive] = useState(false);
1661
+
1662
+ const { status, cleanup } = useSolanaKeyExportIframe({
1663
+ address: isActive && solanaAddress ? solanaAddress : "",
1664
+ containerRef: isActive ? containerRef : { current: null },
1665
+ label: "Copy Private Key",
1666
+ copiedLabel: "Copied!",
1667
+ });
1668
+
1669
+ return (
1670
+ <div>
1671
+ {!isActive ? (
1672
+ <button onClick={() => setIsActive(true)} disabled={!solanaAddress}>
1673
+ Show Export Button
1674
+ </button>
1675
+ ) : (
1676
+ <button onClick={() => { cleanup(); setIsActive(false); }}>
1677
+ Hide Export Button
1678
+ </button>
1679
+ )}
1680
+ {isActive && (
1681
+ <div>
1682
+ <div ref={containerRef} />
1683
+ <p>Status: {status ?? "initializing"}</p>
1684
+ </div>
1685
+ )}
1686
+ </div>
1687
+ );
1688
+ }
1689
+ ```
1690
+
1691
+ #### Direct Export (Deprecated)
1692
+
1693
+ > **⚠️ Deprecated:** The direct export hooks expose the private key to your application's JavaScript context and will be removed soon. Use the secure iframe hooks above instead.
1694
+
1695
+ ##### Export EVM Private Key (Deprecated)
1467
1696
 
1468
1697
  ```tsx lines
1469
1698
  import { useExportEvmAccount, useEvmAddress } from "@coinbase/cdp-hooks";
@@ -1491,7 +1720,7 @@ function ExportEvmKey() {
1491
1720
  }
1492
1721
  ```
1493
1722
 
1494
- #### Export Solana Private Key
1723
+ ##### Export Solana Private Key (Deprecated)
1495
1724
 
1496
1725
  When your application is configured with `solana: { createOnLogin: true }`, you can export Solana private keys:
1497
1726
 
package/dist/esm/index.js CHANGED
@@ -2,76 +2,83 @@ import { APIError as i, OAuth2ProviderType as a } from "@coinbase/cdp-core";
2
2
  import { Analytics as e } from "./index2.js";
3
3
  import "react";
4
4
  import { VERSION as o } from "./index3.js";
5
- import { CDPContext as p, CDPHooksProvider as S } from "./index4.js";
6
- import { useAuthenticateWithJWT as c, useConfig as E, useCurrentUser as x, useEnforceAuthenticated as A, useEnforceUnauthenticated as l, useEvmAccounts as d, useEvmAddress as g, useEvmSmartAccounts as v, useExportEvmAccount as h, useExportSolanaAccount as I, useGetAccessToken as P, useIsInitialized as k, useIsSignedIn as O, useOAuthState as T, useSendEvmTransaction as C, useSendSolanaTransaction as L, useSendUserOperation as M, useSignEvmHash as V, useSignEvmMessage as W, useSignEvmTransaction as y, useSignEvmTypedData as U, useSignInWithEmail as D, useSignInWithOAuth as b, useSignInWithSms as G, useSignOut as H, useSignSolanaMessage as R, useSignSolanaTransaction as z, useSolanaAccounts as F, useSolanaAddress as J, useVerifyEmailOTP as N, useVerifySmsOTP as X, useWaitForUserOperation as j } from "./index5.js";
7
- import { useCreateSpendPermission as w } from "./index6.js";
8
- import { useListSpendPermissions as K } from "./index7.js";
5
+ import { CDPContext as f, CDPHooksProvider as p } from "./index4.js";
6
+ import { useAuthenticateWithJWT as c, useConfig as x, useCurrentUser as E, useEnforceAuthenticated as l, useEnforceUnauthenticated as A, useEvmAccounts as d, useEvmAddress as g, useEvmSmartAccounts as v, useExportEvmAccount as h, useExportSolanaAccount as I, useGetAccessToken as P, useIsInitialized as k, useIsSignedIn as C, useOAuthState as O, useSendEvmTransaction as T, useSendSolanaTransaction as M, useSendUserOperation as y, useSignEvmHash as L, useSignEvmMessage as V, useSignEvmTransaction as W, useSignEvmTypedData as U, useSignInWithEmail as D, useSignInWithOAuth as G, useSignInWithSms as R, useSignOut as b, useSignSolanaMessage as H, useSignSolanaTransaction as K, useSolanaAccounts as z, useSolanaAddress as F, useVerifyEmailOTP as J, useVerifySmsOTP as N, useWaitForUserOperation as X } from "./index5.js";
7
+ import { useCreateSpendPermission as q } from "./index6.js";
8
+ import { useListSpendPermissions as B } from "./index7.js";
9
9
  import { useRevokeSpendPermission as Y } from "./index8.js";
10
10
  import { useLinkGoogle as _ } from "./index9.js";
11
11
  import { useLinkApple as ee } from "./index10.js";
12
- import { useLinkSms as se } from "./index11.js";
13
- import { useLinkEmail as te } from "./index12.js";
12
+ import { useLinkSms as re } from "./index11.js";
13
+ import { useLinkEmail as se } from "./index12.js";
14
14
  import { useLinkOAuth as ue } from "./index13.js";
15
15
  import { useCreateEvmEoaAccount as ae } from "./index14.js";
16
- import { useCreateEvmSmartAccount as pe } from "./index15.js";
17
- import { useCreateSolanaAccount as fe } from "./index16.js";
18
- import { useX402 as Ee } from "./index17.js";
19
- import { useInitiateMfaEnrollment as Ae } from "./index18.js";
20
- import { useSubmitMfaEnrollment as de } from "./index19.js";
21
- import { useInitiateMfaVerification as ve } from "./index20.js";
22
- import { useSubmitMfaVerification as Ie } from "./index21.js";
16
+ import { useCreateEvmSmartAccount as fe } from "./index15.js";
17
+ import { useCreateSolanaAccount as Se } from "./index16.js";
18
+ import { useX402 as xe } from "./index17.js";
19
+ import { useGetMfaConfig as le } from "./index18.js";
20
+ import { useRecordMfaEnrollmentPrompted as de } from "./index19.js";
21
+ import { useInitiateMfaEnrollment as ve } from "./index20.js";
22
+ import { useSubmitMfaEnrollment as Ie } from "./index21.js";
23
+ import { useInitiateMfaVerification as ke } from "./index22.js";
24
+ import { useSubmitMfaVerification as Oe } from "./index23.js";
25
+ import { useEvmKeyExportIframe as Me, useSolanaKeyExportIframe as ye } from "./index24.js";
23
26
  e.registerPackageVersion("hooks", o);
24
27
  export {
25
28
  i as APIError,
26
- p as CDPContext,
27
- S as CDPHooksProvider,
29
+ f as CDPContext,
30
+ p as CDPHooksProvider,
28
31
  a as OAuth2ProviderType,
29
32
  c as useAuthenticateWithJWT,
30
- E as useConfig,
33
+ x as useConfig,
31
34
  ae as useCreateEvmEoaAccount,
32
- pe as useCreateEvmSmartAccount,
33
- fe as useCreateSolanaAccount,
34
- w as useCreateSpendPermission,
35
- x as useCurrentUser,
36
- A as useEnforceAuthenticated,
37
- l as useEnforceUnauthenticated,
35
+ fe as useCreateEvmSmartAccount,
36
+ Se as useCreateSolanaAccount,
37
+ q as useCreateSpendPermission,
38
+ E as useCurrentUser,
39
+ l as useEnforceAuthenticated,
40
+ A as useEnforceUnauthenticated,
38
41
  d as useEvmAccounts,
39
42
  g as useEvmAddress,
43
+ Me as useEvmKeyExportIframe,
40
44
  v as useEvmSmartAccounts,
41
45
  h as useExportEvmAccount,
42
46
  I as useExportSolanaAccount,
43
47
  P as useGetAccessToken,
44
- Ae as useInitiateMfaEnrollment,
45
- ve as useInitiateMfaVerification,
48
+ le as useGetMfaConfig,
49
+ ve as useInitiateMfaEnrollment,
50
+ ke as useInitiateMfaVerification,
46
51
  k as useIsInitialized,
47
- O as useIsSignedIn,
52
+ C as useIsSignedIn,
48
53
  ee as useLinkApple,
49
- te as useLinkEmail,
54
+ se as useLinkEmail,
50
55
  _ as useLinkGoogle,
51
56
  ue as useLinkOAuth,
52
- se as useLinkSms,
53
- K as useListSpendPermissions,
54
- T as useOAuthState,
57
+ re as useLinkSms,
58
+ B as useListSpendPermissions,
59
+ O as useOAuthState,
60
+ de as useRecordMfaEnrollmentPrompted,
55
61
  Y as useRevokeSpendPermission,
56
- C as useSendEvmTransaction,
57
- L as useSendSolanaTransaction,
58
- M as useSendUserOperation,
59
- V as useSignEvmHash,
60
- W as useSignEvmMessage,
61
- y as useSignEvmTransaction,
62
+ T as useSendEvmTransaction,
63
+ M as useSendSolanaTransaction,
64
+ y as useSendUserOperation,
65
+ L as useSignEvmHash,
66
+ V as useSignEvmMessage,
67
+ W as useSignEvmTransaction,
62
68
  U as useSignEvmTypedData,
63
69
  D as useSignInWithEmail,
64
- b as useSignInWithOAuth,
65
- G as useSignInWithSms,
66
- H as useSignOut,
67
- R as useSignSolanaMessage,
68
- z as useSignSolanaTransaction,
69
- F as useSolanaAccounts,
70
- J as useSolanaAddress,
71
- de as useSubmitMfaEnrollment,
72
- Ie as useSubmitMfaVerification,
73
- N as useVerifyEmailOTP,
74
- X as useVerifySmsOTP,
75
- j as useWaitForUserOperation,
76
- Ee as useX402
70
+ G as useSignInWithOAuth,
71
+ R as useSignInWithSms,
72
+ b as useSignOut,
73
+ H as useSignSolanaMessage,
74
+ K as useSignSolanaTransaction,
75
+ z as useSolanaAccounts,
76
+ F as useSolanaAddress,
77
+ ye as useSolanaKeyExportIframe,
78
+ Ie as useSubmitMfaEnrollment,
79
+ Oe as useSubmitMfaVerification,
80
+ J as useVerifyEmailOTP,
81
+ N as useVerifySmsOTP,
82
+ X as useWaitForUserOperation,
83
+ xe as useX402
77
84
  };
@@ -1,5 +1,5 @@
1
1
  import "./index2.js";
2
- import { useSendHookCallOnce as t } from "./index22.js";
2
+ import { useSendHookCallOnce as t } from "./index25.js";
3
3
  import "react";
4
4
  import { useLinkOAuth as o } from "./index13.js";
5
5
  function u() {
@@ -1,5 +1,11 @@
1
- const e = `Ethereum Signed Message:
2
- `;
1
+ const e = {
2
+ gwei: 9,
3
+ wei: 18
4
+ }, t = {
5
+ ether: -9,
6
+ wei: 9
7
+ };
3
8
  export {
4
- e as presignMessagePrefix
9
+ e as etherUnits,
10
+ t as gweiUnits
5
11
  };