@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.
- package/README.md +149 -1
- package/dist/esm/index.native113.js +1 -1
- package/dist/esm/index.native114.js +5 -2
- package/dist/esm/index.native115.js +18 -4
- package/dist/esm/index.native116.js +7 -18
- package/dist/esm/index.native117.js +3 -7
- package/dist/esm/index.native118.js +23 -3
- package/dist/esm/index.native119.js +8 -23
- package/dist/esm/index.native120.js +7 -8
- package/dist/esm/index.native121.js +71 -7
- package/dist/esm/index.native122.js +17 -70
- package/dist/esm/index.native123.js +3 -18
- package/dist/esm/index.native124.js +4 -3
- package/dist/esm/index.native125.js +4 -4
- package/dist/esm/index.native126.js +4 -4
- package/dist/esm/index.native127.js +19 -4
- package/dist/esm/index.native128.js +48 -15
- package/dist/esm/index.native129.js +17 -52
- package/dist/esm/index.native130.js +23 -17
- package/dist/esm/index.native131.js +8 -23
- package/dist/esm/index.native132.js +30 -8
- package/dist/esm/index.native133.js +7 -30
- package/dist/esm/index.native134.js +20 -7
- package/dist/esm/index.native135.js +2 -21
- package/dist/esm/index.native141.js +1 -1
- package/dist/esm/index.native150.js +79 -2
- package/dist/esm/index.native151.js +2 -109
- package/dist/esm/index.native152.js +109 -2
- package/dist/esm/index.native153.js +2 -79
- package/dist/esm/index.native155.js +1 -1
- package/dist/esm/index.native35.js +13 -12
- package/dist/esm/index.native51.js +1 -1
- package/dist/esm/index.native52.js +3 -3
- package/dist/esm/index.native55.js +1 -1
- package/dist/esm/index.native56.js +1 -1
- package/dist/esm/index.native60.js +377 -2
- package/dist/esm/index.native61.js +2 -4
- package/dist/esm/index.native62.js +38 -349
- package/dist/esm/index.native63.js +367 -2
- package/dist/esm/index.native64.js +2 -66
- package/dist/esm/index.native65.js +28 -364
- package/dist/esm/index.native66.js +29 -2
- package/dist/esm/index.native67.js +2 -29
- package/dist/esm/index.native68.js +2 -29
- package/dist/esm/index.native7.js +5 -9
- package/dist/esm/index.native84.js +1 -1
- package/dist/esm/index.web100.js +375 -9
- package/dist/esm/index.web101.js +2 -14
- package/dist/esm/index.web102.js +65 -13
- package/dist/esm/index.web103.js +364 -18
- package/dist/esm/index.web104.js +2 -6
- package/dist/esm/index.web105.js +29 -5
- package/dist/esm/index.web106.js +28 -10
- package/dist/esm/index.web107.js +6 -6
- package/dist/esm/index.web112.js +2 -5
- package/dist/esm/index.web113.js +21 -2
- package/dist/esm/index.web114.js +5 -5
- package/dist/esm/index.web115.js +44 -15
- package/dist/esm/index.web116.js +19 -7
- package/dist/esm/index.web117.js +79 -3
- package/dist/esm/index.web118.js +102 -22
- package/dist/esm/index.web119.js +32 -8
- package/dist/esm/index.web120.js +6 -7
- package/dist/esm/index.web121.js +4 -71
- package/dist/esm/index.web122.js +3 -18
- package/dist/esm/index.web123.js +20 -3
- package/dist/esm/index.web124.js +10 -5
- package/dist/esm/index.web125.js +20 -5
- package/dist/esm/index.web126.js +94 -5
- package/dist/esm/index.web127.js +20 -19
- package/dist/esm/index.web128.js +116 -51
- package/dist/esm/index.web129.js +4 -17
- package/dist/esm/index.web130.js +14 -19
- package/dist/esm/index.web131.js +7 -8
- package/dist/esm/index.web132.js +3 -30
- package/dist/esm/index.web133.js +23 -7
- package/dist/esm/index.web134.js +8 -20
- package/dist/esm/index.web135.js +7 -20
- package/dist/esm/index.web136.js +72 -5
- package/dist/esm/index.web137.js +15 -44
- package/dist/esm/index.web138.js +3 -19
- package/dist/esm/index.web139.js +4 -79
- package/dist/esm/index.web140.js +4 -103
- package/dist/esm/index.web141.js +4 -32
- package/dist/esm/index.web142.js +19 -6
- package/dist/esm/index.web143.js +49 -17
- package/dist/esm/index.web144.js +18 -10
- package/dist/esm/index.web145.js +23 -19
- package/dist/esm/index.web146.js +9 -94
- package/dist/esm/index.web147.js +30 -20
- package/dist/esm/index.web148.js +8 -118
- package/dist/esm/index.web149.js +19 -77
- package/dist/esm/index.web150.js +8 -2
- package/dist/esm/index.web151.js +2 -109
- package/dist/esm/index.web152.js +378 -2
- package/dist/esm/index.web153.js +832 -3
- package/dist/esm/index.web154.js +38 -46
- package/dist/esm/index.web155.js +2 -39
- package/dist/esm/index.web156.js +70 -2
- package/dist/esm/index.web157.js +31 -66
- package/dist/esm/index.web158.js +19 -33
- package/dist/esm/index.web159.js +76 -18
- package/dist/esm/index.web160.js +5 -8
- package/dist/esm/index.web161.js +2 -2
- package/dist/esm/index.web162.js +103 -372
- package/dist/esm/index.web163.js +2 -833
- package/dist/esm/index.web164.js +18 -5
- package/dist/esm/index.web165.js +28 -18
- package/dist/esm/index.web166.js +6 -26
- package/dist/esm/index.web167.js +9 -6
- package/dist/esm/index.web168.js +13 -11
- package/dist/esm/index.web169.js +8 -11
- package/dist/esm/index.web170.js +14 -7
- package/dist/esm/index.web171.js +80 -16
- package/dist/esm/index.web172.js +45 -79
- package/dist/esm/index.web173.js +1 -1
- package/dist/esm/index.web28.js +2 -2
- package/dist/esm/index.web29.js +1 -1
- package/dist/esm/index.web33.js +13 -12
- package/dist/esm/index.web40.js +12 -12
- package/dist/esm/index.web47.js +2 -2
- package/dist/esm/index.web50.js +1 -1
- package/dist/esm/index.web51.js +3 -3
- package/dist/esm/index.web54.js +1 -1
- package/dist/esm/index.web55.js +1 -1
- package/dist/esm/index.web59.js +2 -377
- package/dist/esm/index.web6.js +5 -9
- package/dist/esm/index.web60.js +4 -2
- package/dist/esm/index.web61.js +16 -64
- package/dist/esm/index.web62.js +45 -364
- package/dist/esm/index.web63.js +14 -2
- package/dist/esm/index.web64.js +55 -28
- package/dist/esm/index.web65.js +6 -28
- package/dist/esm/index.web66.js +22 -2
- package/dist/esm/index.web67.js +12 -2
- package/dist/esm/index.web68.js +3 -17
- package/dist/esm/index.web69.js +3 -45
- package/dist/esm/index.web70.js +34 -13
- package/dist/esm/index.web71.js +10 -53
- package/dist/esm/index.web72.js +4 -6
- package/dist/esm/index.web73.js +28 -21
- package/dist/esm/index.web74.js +6 -11
- package/dist/esm/index.web75.js +42 -3
- package/dist/esm/index.web76.js +55 -3
- package/dist/esm/index.web77.js +126 -33
- package/dist/esm/index.web78.js +22 -11
- package/dist/esm/index.web79.js +12 -4
- package/dist/esm/index.web80.js +102 -26
- package/dist/esm/index.web81.js +6 -6
- package/dist/esm/index.web82.js +3 -43
- package/dist/esm/index.web83.js +14 -55
- package/dist/esm/index.web84.js +33 -126
- package/dist/esm/index.web85.js +76 -21
- package/dist/esm/index.web86.js +2 -13
- package/dist/esm/index.web87.js +2 -105
- package/dist/esm/index.web88.js +12 -6
- package/dist/esm/index.web89.js +38 -3
- package/dist/esm/index.web90.js +6 -14
- package/dist/esm/index.web91.js +30 -30
- package/dist/esm/index.web92.js +8 -78
- package/dist/esm/index.web93.js +11 -2
- package/dist/esm/index.web94.js +12 -2
- package/dist/esm/index.web95.js +12 -11
- package/dist/esm/index.web96.js +17 -36
- package/dist/esm/index.web97.js +5 -6
- package/dist/esm/index.web98.js +5 -35
- package/dist/esm/index.web99.js +10 -8
- package/dist/native/index.native113.js +1 -1
- package/dist/native/index.native114.js +5 -2
- package/dist/native/index.native115.js +18 -4
- package/dist/native/index.native116.js +7 -18
- package/dist/native/index.native117.js +3 -7
- package/dist/native/index.native118.js +23 -3
- package/dist/native/index.native119.js +8 -23
- package/dist/native/index.native120.js +7 -8
- package/dist/native/index.native121.js +71 -7
- package/dist/native/index.native122.js +17 -70
- package/dist/native/index.native123.js +3 -18
- package/dist/native/index.native124.js +4 -3
- package/dist/native/index.native125.js +4 -4
- package/dist/native/index.native126.js +4 -4
- package/dist/native/index.native127.js +19 -4
- package/dist/native/index.native128.js +48 -15
- package/dist/native/index.native129.js +17 -52
- package/dist/native/index.native130.js +23 -17
- package/dist/native/index.native131.js +8 -23
- package/dist/native/index.native132.js +30 -8
- package/dist/native/index.native133.js +7 -30
- package/dist/native/index.native134.js +20 -7
- package/dist/native/index.native135.js +2 -21
- package/dist/native/index.native141.js +1 -1
- package/dist/native/index.native150.js +79 -2
- package/dist/native/index.native151.js +2 -109
- package/dist/native/index.native152.js +109 -2
- package/dist/native/index.native153.js +2 -79
- package/dist/native/index.native155.js +1 -1
- package/dist/native/index.native35.js +13 -12
- package/dist/native/index.native51.js +1 -1
- package/dist/native/index.native52.js +3 -3
- package/dist/native/index.native55.js +1 -1
- package/dist/native/index.native56.js +1 -1
- package/dist/native/index.native60.js +377 -2
- package/dist/native/index.native61.js +2 -4
- package/dist/native/index.native62.js +38 -349
- package/dist/native/index.native63.js +367 -2
- package/dist/native/index.native64.js +2 -66
- package/dist/native/index.native65.js +28 -364
- package/dist/native/index.native66.js +29 -2
- package/dist/native/index.native67.js +2 -29
- package/dist/native/index.native68.js +2 -29
- package/dist/native/index.native7.js +5 -9
- package/dist/native/index.native84.js +1 -1
- package/dist/native-types/actions/initiateMfaEnrollment.d.ts +9 -0
- package/dist/native-types/actions/initiateMfaVerification.d.ts +2 -0
- package/dist/native-types/actions/submitMfaEnrollment.d.ts +10 -0
- package/dist/native-types/actions/submitMfaVerification.d.ts +6 -0
- package/dist/native-types/auth/toAuthState.d.ts +10 -3
- package/dist/native-types/auth/withAuth.d.ts +1 -1
- package/dist/native-types/index.d.ts +4 -0
- package/dist/native-types/shared/validators.d.ts +4 -0
- package/dist/native-types/types.d.ts +2 -1
- package/dist/native-types/version.d.ts +1 -1
- package/dist/types/actions/initiateMfaEnrollment.d.ts +9 -0
- package/dist/types/actions/initiateMfaVerification.d.ts +2 -0
- package/dist/types/actions/submitMfaEnrollment.d.ts +10 -0
- package/dist/types/actions/submitMfaVerification.d.ts +6 -0
- package/dist/types/auth/toAuthState.d.ts +10 -3
- package/dist/types/auth/withAuth.d.ts +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/shared/validators.d.ts +4 -0
- package/dist/types/types.d.ts +2 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/web/index.web100.js +375 -9
- package/dist/web/index.web101.js +2 -14
- package/dist/web/index.web102.js +65 -13
- package/dist/web/index.web103.js +364 -18
- package/dist/web/index.web104.js +2 -6
- package/dist/web/index.web105.js +29 -5
- package/dist/web/index.web106.js +28 -10
- package/dist/web/index.web107.js +6 -6
- package/dist/web/index.web112.js +2 -5
- package/dist/web/index.web113.js +21 -2
- package/dist/web/index.web114.js +5 -5
- package/dist/web/index.web115.js +44 -15
- package/dist/web/index.web116.js +19 -7
- package/dist/web/index.web117.js +79 -3
- package/dist/web/index.web118.js +102 -22
- package/dist/web/index.web119.js +32 -8
- package/dist/web/index.web120.js +6 -7
- package/dist/web/index.web121.js +4 -71
- package/dist/web/index.web122.js +3 -18
- package/dist/web/index.web123.js +20 -3
- package/dist/web/index.web124.js +10 -5
- package/dist/web/index.web125.js +20 -5
- package/dist/web/index.web126.js +94 -5
- package/dist/web/index.web127.js +20 -19
- package/dist/web/index.web128.js +116 -51
- package/dist/web/index.web129.js +4 -17
- package/dist/web/index.web130.js +14 -19
- package/dist/web/index.web131.js +7 -8
- package/dist/web/index.web132.js +3 -30
- package/dist/web/index.web133.js +23 -7
- package/dist/web/index.web134.js +8 -20
- package/dist/web/index.web135.js +7 -20
- package/dist/web/index.web136.js +72 -5
- package/dist/web/index.web137.js +15 -44
- package/dist/web/index.web138.js +3 -19
- package/dist/web/index.web139.js +4 -79
- package/dist/web/index.web140.js +4 -103
- package/dist/web/index.web141.js +4 -32
- package/dist/web/index.web142.js +19 -6
- package/dist/web/index.web143.js +49 -17
- package/dist/web/index.web144.js +18 -10
- package/dist/web/index.web145.js +23 -19
- package/dist/web/index.web146.js +9 -94
- package/dist/web/index.web147.js +30 -20
- package/dist/web/index.web148.js +8 -118
- package/dist/web/index.web149.js +19 -77
- package/dist/web/index.web150.js +8 -2
- package/dist/web/index.web151.js +2 -109
- package/dist/web/index.web152.js +378 -2
- package/dist/web/index.web153.js +832 -3
- package/dist/web/index.web154.js +38 -46
- package/dist/web/index.web155.js +2 -39
- package/dist/web/index.web156.js +70 -2
- package/dist/web/index.web157.js +31 -66
- package/dist/web/index.web158.js +19 -33
- package/dist/web/index.web159.js +76 -18
- package/dist/web/index.web160.js +5 -8
- package/dist/web/index.web161.js +2 -2
- package/dist/web/index.web162.js +103 -372
- package/dist/web/index.web163.js +2 -833
- package/dist/web/index.web164.js +18 -5
- package/dist/web/index.web165.js +28 -18
- package/dist/web/index.web166.js +6 -26
- package/dist/web/index.web167.js +9 -6
- package/dist/web/index.web168.js +13 -11
- package/dist/web/index.web169.js +8 -11
- package/dist/web/index.web170.js +14 -7
- package/dist/web/index.web171.js +80 -16
- package/dist/web/index.web172.js +45 -79
- package/dist/web/index.web173.js +1 -1
- package/dist/web/index.web28.js +2 -2
- package/dist/web/index.web29.js +1 -1
- package/dist/web/index.web33.js +13 -12
- package/dist/web/index.web40.js +12 -12
- package/dist/web/index.web47.js +2 -2
- package/dist/web/index.web50.js +1 -1
- package/dist/web/index.web51.js +3 -3
- package/dist/web/index.web54.js +1 -1
- package/dist/web/index.web55.js +1 -1
- package/dist/web/index.web59.js +2 -377
- package/dist/web/index.web6.js +5 -9
- package/dist/web/index.web60.js +4 -2
- package/dist/web/index.web61.js +16 -64
- package/dist/web/index.web62.js +45 -364
- package/dist/web/index.web63.js +14 -2
- package/dist/web/index.web64.js +55 -28
- package/dist/web/index.web65.js +6 -28
- package/dist/web/index.web66.js +22 -2
- package/dist/web/index.web67.js +12 -2
- package/dist/web/index.web68.js +3 -17
- package/dist/web/index.web69.js +3 -45
- package/dist/web/index.web70.js +34 -13
- package/dist/web/index.web71.js +10 -53
- package/dist/web/index.web72.js +4 -6
- package/dist/web/index.web73.js +28 -21
- package/dist/web/index.web74.js +6 -11
- package/dist/web/index.web75.js +42 -3
- package/dist/web/index.web76.js +55 -3
- package/dist/web/index.web77.js +126 -33
- package/dist/web/index.web78.js +22 -11
- package/dist/web/index.web79.js +12 -4
- package/dist/web/index.web80.js +102 -26
- package/dist/web/index.web81.js +6 -6
- package/dist/web/index.web82.js +3 -43
- package/dist/web/index.web83.js +14 -55
- package/dist/web/index.web84.js +33 -126
- package/dist/web/index.web85.js +76 -21
- package/dist/web/index.web86.js +2 -13
- package/dist/web/index.web87.js +2 -105
- package/dist/web/index.web88.js +12 -6
- package/dist/web/index.web89.js +38 -3
- package/dist/web/index.web90.js +6 -14
- package/dist/web/index.web91.js +30 -30
- package/dist/web/index.web92.js +8 -78
- package/dist/web/index.web93.js +11 -2
- package/dist/web/index.web94.js +12 -2
- package/dist/web/index.web95.js +12 -11
- package/dist/web/index.web96.js +17 -36
- package/dist/web/index.web97.js +5 -6
- package/dist/web/index.web98.js +5 -35
- package/dist/web/index.web99.js +10 -8
- package/dist/web-types/actions/initiateMfaEnrollment.d.ts +9 -0
- package/dist/web-types/actions/initiateMfaVerification.d.ts +2 -0
- package/dist/web-types/actions/submitMfaEnrollment.d.ts +10 -0
- package/dist/web-types/actions/submitMfaVerification.d.ts +6 -0
- package/dist/web-types/auth/toAuthState.d.ts +10 -3
- package/dist/web-types/auth/withAuth.d.ts +1 -1
- package/dist/web-types/index.d.ts +4 -0
- package/dist/web-types/shared/validators.d.ts +4 -0
- package/dist/web-types/types.d.ts +2 -1
- package/dist/web-types/version.d.ts +1 -1
- 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,7 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
20
|
+
h as handleEthSign
|
|
7
21
|
};
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
9
|
+
a as handleGetCallsStatus
|
|
21
10
|
};
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
5
|
+
e as handleGetCapabilities
|
|
10
6
|
};
|
|
@@ -1,6 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
25
|
+
p as handlePersonalSign
|
|
6
26
|
};
|
|
@@ -1,26 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
10
|
+
i as handleRequestAccounts
|
|
26
11
|
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
9
|
+
n as handleSendCalls
|
|
11
10
|
};
|
|
@@ -1,10 +1,74 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
73
|
+
E as handleSendTransaction
|
|
10
74
|
};
|
|
@@ -1,74 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
20
|
+
p as handleSignTypedData
|
|
74
21
|
};
|
|
@@ -1,21 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
5
|
+
a as handleChainId
|
|
21
6
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
6
|
+
a as handleSwitchEthereumChain
|
|
7
7
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getCurrentUser as r } from "./index.native7.js";
|
|
2
|
+
async function n() {
|
|
3
|
+
return (await r())?.evmSmartAccounts || [];
|
|
4
4
|
}
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
n as handleAccounts
|
|
7
7
|
};
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
21
|
+
h as handleEthSign
|
|
7
22
|
};
|
|
@@ -1,22 +1,55 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
chainId: n.getState().chainId
|
|
12
|
+
const e = await u({
|
|
13
|
+
userOperationHash: i,
|
|
14
|
+
evmSmartAccount: c,
|
|
15
|
+
network: r[a]
|
|
11
16
|
});
|
|
12
|
-
return
|
|
13
|
-
} catch (
|
|
14
|
-
throw new
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
54
|
+
I as handleGetCallsStatus
|
|
22
55
|
};
|