@account-kit/wallet-client 0.1.0-alpha.1 → 0.1.0-alpha.11
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/dist/esm/client/actions/createAccount.d.ts +27 -2
- package/dist/esm/client/actions/createAccount.js +25 -0
- package/dist/esm/client/actions/createAccount.js.map +1 -1
- package/dist/esm/client/actions/formatSign.d.ts +28 -0
- package/dist/esm/client/actions/formatSign.js +30 -0
- package/dist/esm/client/actions/formatSign.js.map +1 -0
- package/dist/esm/client/actions/getCallsStatus.d.ts +22 -4
- package/dist/esm/client/actions/getCallsStatus.js +19 -0
- package/dist/esm/client/actions/getCallsStatus.js.map +1 -1
- package/dist/esm/client/actions/grantPermissions.d.ts +63 -6
- package/dist/esm/client/actions/grantPermissions.js +63 -3
- package/dist/esm/client/actions/grantPermissions.js.map +1 -1
- package/dist/esm/client/actions/listAccounts.d.ts +32 -4
- package/dist/esm/client/actions/listAccounts.js +35 -2
- package/dist/esm/client/actions/listAccounts.js.map +1 -1
- package/dist/esm/client/actions/prepareCalls.d.ts +32 -6
- package/dist/esm/client/actions/prepareCalls.js +39 -5
- package/dist/esm/client/actions/prepareCalls.js.map +1 -1
- package/dist/esm/client/actions/prepareSign.d.ts +25 -0
- package/dist/esm/client/actions/prepareSign.js +28 -0
- package/dist/esm/client/actions/prepareSign.js.map +1 -0
- package/dist/esm/client/actions/requestAccount.d.ts +24 -6
- package/dist/esm/client/actions/requestAccount.js +38 -7
- package/dist/esm/client/actions/requestAccount.js.map +1 -1
- package/dist/esm/client/actions/sendPreparedCalls.d.ts +33 -4
- package/dist/esm/client/actions/sendPreparedCalls.js +37 -1
- package/dist/esm/client/actions/sendPreparedCalls.js.map +1 -1
- package/dist/esm/client/actions/signMessage.d.ts +25 -5
- package/dist/esm/client/actions/signMessage.js +22 -2
- package/dist/esm/client/actions/signMessage.js.map +1 -1
- package/dist/esm/client/actions/signPreparedCalls.d.ts +14 -0
- package/dist/esm/client/actions/signPreparedCalls.js +43 -0
- package/dist/esm/client/actions/signPreparedCalls.js.map +1 -0
- package/dist/esm/client/actions/signSignatureRequest.d.ts +39 -5
- package/dist/esm/client/actions/signSignatureRequest.js +69 -11
- package/dist/esm/client/actions/signSignatureRequest.js.map +1 -1
- package/dist/esm/client/actions/signTypedData.d.ts +37 -4
- package/dist/esm/client/actions/signTypedData.js +34 -1
- package/dist/esm/client/actions/signTypedData.js.map +1 -1
- package/dist/esm/client/client.e2e-test.js +249 -45
- package/dist/esm/client/client.e2e-test.js.map +1 -1
- package/dist/esm/client/decorator.d.ts +12 -8
- package/dist/esm/client/decorator.js +5 -3
- package/dist/esm/client/decorator.js.map +1 -1
- package/dist/esm/client/index.d.ts +38 -12
- package/dist/esm/client/index.js +0 -3
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/exports/index.d.ts +5 -6
- package/dist/esm/exports/index.js +4 -6
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/exports/internal.d.ts +1 -10
- package/dist/esm/exports/internal.js +0 -12
- package/dist/esm/exports/internal.js.map +1 -1
- package/dist/esm/internal/decorator.d.ts +2 -0
- package/dist/esm/internal/decorator.js +10 -0
- package/dist/esm/internal/decorator.js.map +1 -0
- package/dist/esm/isomorphic/actions/createSession.d.ts +1 -2
- package/dist/esm/isomorphic/actions/createSession.js +40 -11
- package/dist/esm/isomorphic/actions/createSession.js.map +1 -1
- package/dist/esm/isomorphic/actions/formatSign.d.ts +8 -0
- package/dist/esm/isomorphic/actions/formatSign.js +42 -0
- package/dist/esm/isomorphic/actions/formatSign.js.map +1 -0
- package/dist/esm/isomorphic/actions/getCallsStatus.d.ts +1 -15
- package/dist/esm/isomorphic/actions/getCallsStatus.js +38 -27
- package/dist/esm/isomorphic/actions/getCallsStatus.js.map +1 -1
- package/dist/esm/isomorphic/actions/prepareCalls.d.ts +1 -2
- package/dist/esm/isomorphic/actions/prepareCalls.js +78 -20
- package/dist/esm/isomorphic/actions/prepareCalls.js.map +1 -1
- package/dist/esm/isomorphic/actions/prepareSign.d.ts +7 -0
- package/dist/esm/isomorphic/actions/prepareSign.js +49 -0
- package/dist/esm/isomorphic/actions/prepareSign.js.map +1 -0
- package/dist/esm/isomorphic/actions/sendPreparedCalls.d.ts +3 -4
- package/dist/esm/isomorphic/actions/sendPreparedCalls.js +165 -25
- package/dist/esm/isomorphic/actions/sendPreparedCalls.js.map +1 -1
- package/dist/esm/isomorphic/client.d.ts +204 -27
- package/dist/esm/isomorphic/client.js +6 -2
- package/dist/esm/isomorphic/client.js.map +1 -1
- package/dist/esm/isomorphic/utils/7702.d.ts +19 -0
- package/dist/esm/isomorphic/utils/7702.js +70 -0
- package/dist/esm/isomorphic/utils/7702.js.map +1 -0
- package/dist/esm/isomorphic/utils/createAccount.d.ts +5 -4
- package/dist/esm/isomorphic/utils/createAccount.js +84 -10
- package/dist/esm/isomorphic/utils/createAccount.js.map +1 -1
- package/dist/esm/isomorphic/utils/createDummySigner.js +3 -3
- package/dist/esm/isomorphic/utils/createDummySigner.js.map +1 -1
- package/dist/esm/isomorphic/utils/decodeSignature.d.ts +3 -0
- package/dist/esm/isomorphic/utils/decodeSignature.js +15 -0
- package/dist/esm/isomorphic/utils/decodeSignature.js.map +1 -0
- package/dist/esm/isomorphic/utils/parsePermissionsContext.d.ts +6 -5
- package/dist/esm/isomorphic/utils/parsePermissionsContext.js +19 -6
- package/dist/esm/isomorphic/utils/parsePermissionsContext.js.map +1 -1
- package/dist/esm/isomorphic/utils/supportsFeature.d.ts +4 -0
- package/dist/esm/isomorphic/utils/supportsFeature.js +21 -0
- package/dist/esm/isomorphic/utils/supportsFeature.js.map +1 -0
- package/dist/esm/local/client.d.ts +3 -3
- package/dist/esm/local/client.js +11 -4
- package/dist/esm/local/client.js.map +1 -1
- package/dist/esm/remote/client.d.ts +9 -3
- package/dist/esm/remote/client.js +10 -11
- package/dist/esm/remote/client.js.map +1 -1
- package/dist/esm/types.d.ts +27 -13
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.d.ts +1 -0
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/client/actions/createAccount.d.ts +27 -2
- package/dist/types/client/actions/createAccount.d.ts.map +1 -1
- package/dist/types/client/actions/formatSign.d.ts +29 -0
- package/dist/types/client/actions/formatSign.d.ts.map +1 -0
- package/dist/types/client/actions/getCallsStatus.d.ts +22 -4
- package/dist/types/client/actions/getCallsStatus.d.ts.map +1 -1
- package/dist/types/client/actions/grantPermissions.d.ts +63 -6
- package/dist/types/client/actions/grantPermissions.d.ts.map +1 -1
- package/dist/types/client/actions/listAccounts.d.ts +32 -4
- package/dist/types/client/actions/listAccounts.d.ts.map +1 -1
- package/dist/types/client/actions/prepareCalls.d.ts +32 -6
- package/dist/types/client/actions/prepareCalls.d.ts.map +1 -1
- package/dist/types/client/actions/prepareSign.d.ts +26 -0
- package/dist/types/client/actions/prepareSign.d.ts.map +1 -0
- package/dist/types/client/actions/requestAccount.d.ts +24 -6
- package/dist/types/client/actions/requestAccount.d.ts.map +1 -1
- package/dist/types/client/actions/sendPreparedCalls.d.ts +33 -4
- package/dist/types/client/actions/sendPreparedCalls.d.ts.map +1 -1
- package/dist/types/client/actions/signMessage.d.ts +25 -5
- package/dist/types/client/actions/signMessage.d.ts.map +1 -1
- package/dist/types/client/actions/signPreparedCalls.d.ts +15 -0
- package/dist/types/client/actions/signPreparedCalls.d.ts.map +1 -0
- package/dist/types/client/actions/signSignatureRequest.d.ts +39 -5
- package/dist/types/client/actions/signSignatureRequest.d.ts.map +1 -1
- package/dist/types/client/actions/signTypedData.d.ts +37 -4
- package/dist/types/client/actions/signTypedData.d.ts.map +1 -1
- package/dist/types/client/decorator.d.ts +12 -8
- package/dist/types/client/decorator.d.ts.map +1 -1
- package/dist/types/client/index.d.ts +38 -12
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/exports/index.d.ts +5 -6
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/exports/internal.d.ts +1 -10
- package/dist/types/exports/internal.d.ts.map +1 -1
- package/dist/types/internal/decorator.d.ts +3 -0
- package/dist/types/internal/decorator.d.ts.map +1 -0
- package/dist/types/isomorphic/actions/createSession.d.ts +1 -2
- package/dist/types/isomorphic/actions/createSession.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/formatSign.d.ts +9 -0
- package/dist/types/isomorphic/actions/formatSign.d.ts.map +1 -0
- package/dist/types/isomorphic/actions/getCallsStatus.d.ts +1 -15
- package/dist/types/isomorphic/actions/getCallsStatus.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/prepareCalls.d.ts +1 -2
- package/dist/types/isomorphic/actions/prepareCalls.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/prepareSign.d.ts +8 -0
- package/dist/types/isomorphic/actions/prepareSign.d.ts.map +1 -0
- package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts +3 -4
- package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts.map +1 -1
- package/dist/types/isomorphic/client.d.ts +204 -27
- package/dist/types/isomorphic/client.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/7702.d.ts +20 -0
- package/dist/types/isomorphic/utils/7702.d.ts.map +1 -0
- package/dist/types/isomorphic/utils/createAccount.d.ts +5 -4
- package/dist/types/isomorphic/utils/createAccount.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/createDummySigner.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/decodeSignature.d.ts +4 -0
- package/dist/types/isomorphic/utils/decodeSignature.d.ts.map +1 -0
- package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts +6 -5
- package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/supportsFeature.d.ts +5 -0
- package/dist/types/isomorphic/utils/supportsFeature.d.ts.map +1 -0
- package/dist/types/local/client.d.ts +3 -3
- package/dist/types/local/client.d.ts.map +1 -1
- package/dist/types/remote/client.d.ts +9 -3
- package/dist/types/remote/client.d.ts.map +1 -1
- package/dist/types/types.d.ts +27 -13
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +9 -6
- package/src/client/actions/createAccount.ts +27 -2
- package/src/client/actions/formatSign.ts +53 -0
- package/src/client/actions/getCallsStatus.ts +21 -12
- package/src/client/actions/grantPermissions.ts +69 -26
- package/src/client/actions/listAccounts.ts +44 -6
- package/src/client/actions/prepareCalls.ts +46 -26
- package/src/client/actions/prepareSign.ts +46 -0
- package/src/client/actions/requestAccount.ts +60 -41
- package/src/client/actions/sendPreparedCalls.ts +44 -7
- package/src/client/actions/signMessage.ts +26 -21
- package/src/client/actions/signPreparedCalls.ts +67 -0
- package/src/client/actions/signSignatureRequest.ts +84 -20
- package/src/client/actions/signTypedData.ts +40 -19
- package/src/client/client.e2e-test.ts +408 -127
- package/src/client/decorator.ts +28 -26
- package/src/client/index.ts +50 -40
- package/src/exports/index.ts +5 -13
- package/src/exports/internal.ts +2 -10
- package/src/internal/decorator.ts +12 -0
- package/src/isomorphic/actions/createSession.ts +56 -13
- package/src/isomorphic/actions/formatSign.ts +76 -0
- package/src/isomorphic/actions/getCallsStatus.ts +47 -33
- package/src/isomorphic/actions/prepareCalls.ts +95 -23
- package/src/isomorphic/actions/prepareSign.ts +88 -0
- package/src/isomorphic/actions/sendPreparedCalls.ts +218 -42
- package/src/isomorphic/client.ts +10 -2
- package/src/isomorphic/utils/7702.ts +135 -0
- package/src/isomorphic/utils/createAccount.ts +101 -13
- package/src/isomorphic/utils/createDummySigner.ts +3 -2
- package/src/isomorphic/utils/decodeSignature.ts +21 -0
- package/src/isomorphic/utils/parsePermissionsContext.ts +29 -11
- package/src/isomorphic/utils/supportsFeature.ts +34 -0
- package/src/local/client.ts +58 -55
- package/src/remote/client.ts +19 -19
- package/src/types.ts +29 -23
- package/src/utils.ts +2 -0
- package/dist/esm/capabilities/index.d.ts +0 -31
- package/dist/esm/capabilities/index.js +0 -10
- package/dist/esm/capabilities/index.js.map +0 -1
- package/dist/esm/capabilities/overrides.d.ts +0 -26
- package/dist/esm/capabilities/overrides.js +0 -14
- package/dist/esm/capabilities/overrides.js.map +0 -1
- package/dist/esm/capabilities/paymaster.d.ts +0 -3
- package/dist/esm/capabilities/paymaster.js +0 -5
- package/dist/esm/capabilities/paymaster.js.map +0 -1
- package/dist/esm/capabilities/permissions/index.d.ts +0 -138
- package/dist/esm/capabilities/permissions/index.js +0 -71
- package/dist/esm/capabilities/permissions/index.js.map +0 -1
- package/dist/esm/capabilities/permissions/mav2.d.ts +0 -36
- package/dist/esm/capabilities/permissions/mav2.js +0 -79
- package/dist/esm/capabilities/permissions/mav2.js.map +0 -1
- package/dist/esm/rpc/request.d.ts +0 -352
- package/dist/esm/rpc/request.js +0 -204
- package/dist/esm/rpc/request.js.map +0 -1
- package/dist/esm/rpc/schema.d.ts +0 -342
- package/dist/esm/rpc/schema.js +0 -5
- package/dist/esm/rpc/schema.js.map +0 -1
- package/dist/esm/schemas.d.ts +0 -216
- package/dist/esm/schemas.js +0 -211
- package/dist/esm/schemas.js.map +0 -1
- package/dist/types/capabilities/index.d.ts +0 -32
- package/dist/types/capabilities/index.d.ts.map +0 -1
- package/dist/types/capabilities/overrides.d.ts +0 -27
- package/dist/types/capabilities/overrides.d.ts.map +0 -1
- package/dist/types/capabilities/paymaster.d.ts +0 -4
- package/dist/types/capabilities/paymaster.d.ts.map +0 -1
- package/dist/types/capabilities/permissions/index.d.ts +0 -139
- package/dist/types/capabilities/permissions/index.d.ts.map +0 -1
- package/dist/types/capabilities/permissions/mav2.d.ts +0 -37
- package/dist/types/capabilities/permissions/mav2.d.ts.map +0 -1
- package/dist/types/rpc/request.d.ts +0 -353
- package/dist/types/rpc/request.d.ts.map +0 -1
- package/dist/types/rpc/schema.d.ts +0 -343
- package/dist/types/rpc/schema.d.ts.map +0 -1
- package/dist/types/schemas.d.ts +0 -217
- package/dist/types/schemas.d.ts.map +0 -1
- package/src/capabilities/index.ts +0 -13
- package/src/capabilities/overrides.ts +0 -20
- package/src/capabilities/paymaster.ts +0 -5
- package/src/capabilities/permissions/index.ts +0 -142
- package/src/capabilities/permissions/mav2.ts +0 -127
- package/src/rpc/request.ts +0 -273
- package/src/rpc/schema.ts +0 -40
- package/src/schemas.ts +0 -257
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { LocalAccountSigner } from "@aa-sdk/core";
|
|
2
2
|
import { alchemy, arbitrumSepolia } from "@account-kit/infra";
|
|
3
3
|
import { describe, expect, it } from "bun:test";
|
|
4
|
-
import { createPublicClient, zeroAddress, type Address } from "viem";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { createPublicClient, zeroAddress, type Address, type Hex } from "viem";
|
|
5
|
+
import { createSmartWalletClient, type SmartWalletClient } from "./index.js";
|
|
6
|
+
import { sleep } from "bun";
|
|
7
7
|
|
|
8
8
|
describe("Client E2E Tests", () => {
|
|
9
9
|
const transport = alchemy(
|
|
@@ -17,7 +17,7 @@ describe("Client E2E Tests", () => {
|
|
|
17
17
|
);
|
|
18
18
|
describe("Local Mode Tests", () => {
|
|
19
19
|
const signer = LocalAccountSigner.privateKeyToAccountSigner(
|
|
20
|
-
"
|
|
20
|
+
"0xbaca22d9b6846ec09a4da378ffa07e2f14ce7d65675d135911b6fd281416bb03",
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
const client = createSmartWalletClient({
|
|
@@ -35,21 +35,38 @@ describe("Client E2E Tests", () => {
|
|
|
35
35
|
it("should successfully get a counterfactual address", async () => {
|
|
36
36
|
const account = await client.requestAccount();
|
|
37
37
|
expect(account.address).toMatchInlineSnapshot(
|
|
38
|
-
`"
|
|
38
|
+
`"0xa46944b7a39c35d931D514ACAc3ac77c226a81ff"`,
|
|
39
39
|
);
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
+
it("should successfully request account with different salt", async () => {
|
|
43
|
+
const account = await client.requestAccount({
|
|
44
|
+
id: "f4c1d956-24ef-4002-a141-2c9d6d92af1a",
|
|
45
|
+
creationHint: { salt: "0x1" },
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
expect(account.address).toMatchInlineSnapshot(
|
|
49
|
+
`"0xA692f0E5AfAD20F771443D89C635146C6A592f06"`,
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("should not cache account if different inputs provided", async () => {
|
|
54
|
+
const account = await client.requestAccount();
|
|
55
|
+
const account2 = await client.requestAccount({
|
|
56
|
+
id: "52ab44be-b03e-47ed-ad65-43014ea5fbfc",
|
|
57
|
+
creationHint: { salt: "0x2" },
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
expect(account.address).not.toEqual(account2.address);
|
|
61
|
+
});
|
|
62
|
+
|
|
42
63
|
it("can correctly sign a message", async () => {
|
|
43
64
|
const account = await client.requestAccount();
|
|
44
65
|
const message = "hello world";
|
|
45
|
-
const signature = await client.signMessage(message);
|
|
46
|
-
const publicClient = createPublicClient({
|
|
47
|
-
chain: arbitrumSepolia,
|
|
48
|
-
transport,
|
|
49
|
-
});
|
|
66
|
+
const signature = await client.signMessage({ message });
|
|
50
67
|
const isValid = await publicClient.verifyMessage({
|
|
51
68
|
address: account.address,
|
|
52
|
-
message
|
|
69
|
+
message,
|
|
53
70
|
signature,
|
|
54
71
|
});
|
|
55
72
|
expect(isValid).toBeTrue();
|
|
@@ -66,83 +83,171 @@ describe("Client E2E Tests", () => {
|
|
|
66
83
|
expect(isValid).toBeTrue();
|
|
67
84
|
});
|
|
68
85
|
|
|
69
|
-
it("
|
|
70
|
-
const account = await client.requestAccount(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
from: account.address,
|
|
74
|
-
capabilities: {
|
|
75
|
-
paymasterService: {
|
|
76
|
-
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
77
|
-
},
|
|
78
|
-
},
|
|
86
|
+
it("can correctly sign a message with a different account", async () => {
|
|
87
|
+
const account = await client.requestAccount({
|
|
88
|
+
id: "f4c1d956-24ef-4002-a141-2c9d6d92af1a",
|
|
89
|
+
creationHint: { salt: "0x1" },
|
|
79
90
|
});
|
|
91
|
+
const message = "hello world";
|
|
80
92
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
const signature = await client.signMessage({
|
|
94
|
+
message,
|
|
95
|
+
account: account.address,
|
|
96
|
+
});
|
|
97
|
+
const isValid = await publicClient.verifyMessage({
|
|
98
|
+
address: account.address,
|
|
99
|
+
message,
|
|
100
|
+
signature,
|
|
101
|
+
});
|
|
102
|
+
expect(isValid).toBeTrue();
|
|
103
|
+
});
|
|
88
104
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
signature,
|
|
94
|
-
},
|
|
105
|
+
it("can correctly sign typed data with a different account", async () => {
|
|
106
|
+
const account = await client.requestAccount({
|
|
107
|
+
id: "f4c1d956-24ef-4002-a141-2c9d6d92af1a",
|
|
108
|
+
creationHint: { salt: "0x1" },
|
|
95
109
|
});
|
|
96
110
|
|
|
97
|
-
|
|
111
|
+
const signature = await client.signTypedData({
|
|
112
|
+
...givenTypedData,
|
|
113
|
+
account: account.address,
|
|
114
|
+
});
|
|
115
|
+
const isValid = await publicClient.verifyTypedData({
|
|
116
|
+
...givenTypedData,
|
|
117
|
+
signature,
|
|
118
|
+
address: account.address,
|
|
119
|
+
});
|
|
120
|
+
expect(isValid).toBeTrue();
|
|
98
121
|
});
|
|
99
122
|
|
|
100
|
-
it(
|
|
101
|
-
|
|
123
|
+
it(
|
|
124
|
+
"should successfully send a UO with paymaster using 7702",
|
|
125
|
+
async () => {
|
|
126
|
+
const _signer = LocalAccountSigner.privateKeyToAccountSigner(
|
|
127
|
+
"0x49daf21e92c997093e9ffdf7e7ddbf8970e9eadc5d4847d0f690db25d5128e1f",
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
const _client = createSmartWalletClient({
|
|
131
|
+
transport,
|
|
132
|
+
chain: arbitrumSepolia,
|
|
133
|
+
mode: "local",
|
|
134
|
+
signer: _signer,
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
const account = await _client.requestAccount({
|
|
138
|
+
creationHint: {
|
|
139
|
+
accountType: "7702",
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const preparedCalls = await _client.prepareCalls({
|
|
144
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
145
|
+
from: account.address,
|
|
146
|
+
capabilities: {
|
|
147
|
+
paymasterService: {
|
|
148
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
});
|
|
102
152
|
|
|
103
|
-
|
|
153
|
+
const signedCalls = await _client.signPreparedCalls(preparedCalls);
|
|
104
154
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
key: {
|
|
109
|
-
publicKey: await sessionKey.getAddress(),
|
|
110
|
-
type: "secp256k1",
|
|
111
|
-
},
|
|
112
|
-
permissions: [{ type: "root" }],
|
|
113
|
-
});
|
|
155
|
+
const result = await _client.sendPreparedCalls(signedCalls);
|
|
156
|
+
|
|
157
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
114
158
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
159
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
timeout: 45_000,
|
|
163
|
+
},
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
it(
|
|
167
|
+
"should successfully send a UO with paymaster",
|
|
168
|
+
async () => {
|
|
169
|
+
const account = await client.requestAccount();
|
|
170
|
+
const preparedCalls = await client.prepareCalls({
|
|
171
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
172
|
+
from: account.address,
|
|
173
|
+
capabilities: {
|
|
174
|
+
paymasterService: {
|
|
175
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
176
|
+
},
|
|
121
177
|
},
|
|
122
|
-
|
|
123
|
-
},
|
|
124
|
-
});
|
|
178
|
+
});
|
|
125
179
|
|
|
126
|
-
|
|
127
|
-
sessionKey,
|
|
128
|
-
preparedUO.signatureRequest,
|
|
129
|
-
);
|
|
180
|
+
const signedCalls = await client.signPreparedCalls(preparedCalls);
|
|
130
181
|
|
|
131
|
-
|
|
132
|
-
...preparedUO,
|
|
133
|
-
signature,
|
|
134
|
-
capabilities: {
|
|
135
|
-
permissions,
|
|
136
|
-
},
|
|
137
|
-
});
|
|
182
|
+
const result = await client.sendPreparedCalls(signedCalls);
|
|
138
183
|
|
|
139
|
-
|
|
140
|
-
|
|
184
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
185
|
+
|
|
186
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
timeout: 45_000,
|
|
190
|
+
},
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
it(
|
|
194
|
+
"should successfully create a session with grantPermissions and send a UO",
|
|
195
|
+
async () => {
|
|
196
|
+
const account = await client.requestAccount();
|
|
197
|
+
|
|
198
|
+
const sessionKey = LocalAccountSigner.generatePrivateKeySigner();
|
|
199
|
+
|
|
200
|
+
const permissions = await client.grantPermissions({
|
|
201
|
+
account: account.address,
|
|
202
|
+
expirySec: Math.floor(Date.now() / 1000) + 60 * 60,
|
|
203
|
+
key: {
|
|
204
|
+
publicKey: await sessionKey.getAddress(),
|
|
205
|
+
type: "secp256k1",
|
|
206
|
+
},
|
|
207
|
+
permissions: [{ type: "root" }],
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
const sessionKeyClient = createSmartWalletClient({
|
|
211
|
+
transport,
|
|
212
|
+
chain: arbitrumSepolia,
|
|
213
|
+
mode: "local",
|
|
214
|
+
signer: sessionKey,
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
const preparedCalls = await sessionKeyClient.prepareCalls({
|
|
218
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
219
|
+
from: account.address,
|
|
220
|
+
capabilities: {
|
|
221
|
+
paymasterService: {
|
|
222
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
223
|
+
},
|
|
224
|
+
permissions,
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
const signedCalls =
|
|
229
|
+
await sessionKeyClient.signPreparedCalls(preparedCalls);
|
|
230
|
+
|
|
231
|
+
const result = await sessionKeyClient.sendPreparedCalls({
|
|
232
|
+
...signedCalls,
|
|
233
|
+
capabilities: {
|
|
234
|
+
permissions,
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
239
|
+
|
|
240
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
timeout: 45_000,
|
|
244
|
+
},
|
|
245
|
+
);
|
|
141
246
|
});
|
|
142
247
|
|
|
143
248
|
describe("Remote Mode Tests", () => {
|
|
144
249
|
const signer = LocalAccountSigner.privateKeyToAccountSigner(
|
|
145
|
-
"
|
|
250
|
+
"0xd7b061ef04d29cf68b3c89356678eccec9988de8d5ed892c19461c4a9d65925d",
|
|
146
251
|
);
|
|
147
252
|
|
|
148
253
|
const client = createSmartWalletClient({
|
|
@@ -160,18 +265,35 @@ describe("Client E2E Tests", () => {
|
|
|
160
265
|
it("should successfully get a counterfactual address", async () => {
|
|
161
266
|
const account = await client.requestAccount();
|
|
162
267
|
expect(account.address).toMatchInlineSnapshot(
|
|
163
|
-
`"
|
|
268
|
+
`"0x76E765e80FFAC96ac10Aa8908a8267A3B80d606D"`,
|
|
269
|
+
);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
it("should successfully request account with different salt", async () => {
|
|
273
|
+
const account = await client.requestAccount({
|
|
274
|
+
id: "26b375e3-c94a-4e98-b6b7-5a97121aa583",
|
|
275
|
+
creationHint: { salt: "0x1" },
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
expect(account.address).toMatchInlineSnapshot(
|
|
279
|
+
`"0xdfdd407b9569D40BEFa503208753E59cAc9713fA"`,
|
|
164
280
|
);
|
|
165
281
|
});
|
|
166
282
|
|
|
283
|
+
it("should not cache account if different inputs provided", async () => {
|
|
284
|
+
const account = await client.requestAccount();
|
|
285
|
+
const account2 = await client.requestAccount({
|
|
286
|
+
id: "2a3320b4-6ed2-4833-a488-5188e9bdd9d2",
|
|
287
|
+
creationHint: { salt: "0x2" },
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
expect(account.address).not.toEqual(account2.address);
|
|
291
|
+
});
|
|
292
|
+
|
|
167
293
|
it("can correctly sign a message", async () => {
|
|
168
294
|
const account = await client.requestAccount();
|
|
169
295
|
const message = "hello world";
|
|
170
|
-
const signature = await client.signMessage(message);
|
|
171
|
-
const publicClient = createPublicClient({
|
|
172
|
-
chain: arbitrumSepolia,
|
|
173
|
-
transport,
|
|
174
|
-
});
|
|
296
|
+
const signature = await client.signMessage({ message });
|
|
175
297
|
const isValid = await publicClient.verifyMessage({
|
|
176
298
|
address: account.address,
|
|
177
299
|
message: "hello world",
|
|
@@ -191,71 +313,208 @@ describe("Client E2E Tests", () => {
|
|
|
191
313
|
expect(isValid).toBeTrue();
|
|
192
314
|
});
|
|
193
315
|
|
|
194
|
-
it("
|
|
195
|
-
const account = await client.requestAccount(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
from: account.address,
|
|
199
|
-
capabilities: {
|
|
200
|
-
paymasterService: {
|
|
201
|
-
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
202
|
-
},
|
|
203
|
-
},
|
|
316
|
+
it("can correctly sign a message with a different account", async () => {
|
|
317
|
+
const account = await client.requestAccount({
|
|
318
|
+
id: "26b375e3-c94a-4e98-b6b7-5a97121aa583",
|
|
319
|
+
creationHint: { salt: "0x1" },
|
|
204
320
|
});
|
|
205
321
|
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
322
|
+
const message = "hello world";
|
|
323
|
+
const signature = await client.signMessage({
|
|
324
|
+
message,
|
|
325
|
+
account: account.address,
|
|
326
|
+
});
|
|
327
|
+
const isValid = await publicClient.verifyMessage({
|
|
328
|
+
address: account.address,
|
|
329
|
+
message: "hello world",
|
|
212
330
|
signature,
|
|
213
331
|
});
|
|
214
|
-
|
|
215
|
-
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
332
|
+
expect(isValid).toBeTrue();
|
|
216
333
|
});
|
|
217
334
|
|
|
218
|
-
it("
|
|
219
|
-
const account = await client.requestAccount(
|
|
220
|
-
|
|
221
|
-
|
|
335
|
+
it("can correctly sign typed data with a different account", async () => {
|
|
336
|
+
const account = await client.requestAccount({
|
|
337
|
+
id: "26b375e3-c94a-4e98-b6b7-5a97121aa583",
|
|
338
|
+
creationHint: { salt: "0x1" },
|
|
339
|
+
});
|
|
222
340
|
|
|
223
|
-
const
|
|
341
|
+
const signature = await client.signTypedData({
|
|
342
|
+
...givenTypedData,
|
|
224
343
|
account: account.address,
|
|
225
|
-
expiry: Math.floor(Date.now() / 1000) + 60 * 60,
|
|
226
|
-
key: {
|
|
227
|
-
publicKey: await sessionKey.getAddress(),
|
|
228
|
-
type: "secp256k1",
|
|
229
|
-
},
|
|
230
|
-
permissions: [{ type: "root" }],
|
|
231
344
|
});
|
|
232
345
|
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
paymasterService: {
|
|
238
|
-
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
239
|
-
},
|
|
240
|
-
permissions,
|
|
241
|
-
},
|
|
346
|
+
const isValid = await publicClient.verifyTypedData({
|
|
347
|
+
...givenTypedData,
|
|
348
|
+
signature,
|
|
349
|
+
address: account.address,
|
|
242
350
|
});
|
|
351
|
+
expect(isValid).toBeTrue();
|
|
352
|
+
});
|
|
243
353
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
354
|
+
it(
|
|
355
|
+
"should successfully send a UO with paymaster",
|
|
356
|
+
async () => {
|
|
357
|
+
const account = await client.requestAccount();
|
|
358
|
+
const preparedCalls = await client.prepareCalls({
|
|
359
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
360
|
+
from: account.address,
|
|
361
|
+
capabilities: {
|
|
362
|
+
paymasterService: {
|
|
363
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
});
|
|
248
367
|
|
|
249
|
-
|
|
250
|
-
...preparedUO,
|
|
251
|
-
signature,
|
|
252
|
-
capabilities: {
|
|
253
|
-
permissions,
|
|
254
|
-
},
|
|
255
|
-
});
|
|
368
|
+
const signedCalls = await client.signPreparedCalls(preparedCalls);
|
|
256
369
|
|
|
257
|
-
|
|
258
|
-
|
|
370
|
+
const result = await client.sendPreparedCalls(signedCalls);
|
|
371
|
+
|
|
372
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
373
|
+
|
|
374
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
timeout: 45_000,
|
|
378
|
+
},
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
it(
|
|
382
|
+
"should successfully drop and replace a UO with repeat calls",
|
|
383
|
+
async () => {
|
|
384
|
+
const account = await client.requestAccount();
|
|
385
|
+
const preparedCalls = await client.prepareCalls({
|
|
386
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
387
|
+
from: account.address,
|
|
388
|
+
capabilities: {
|
|
389
|
+
paymasterService: {
|
|
390
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
391
|
+
},
|
|
392
|
+
},
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
const signedCalls = await client.signPreparedCalls(preparedCalls);
|
|
396
|
+
const result = await client.sendPreparedCalls(signedCalls);
|
|
397
|
+
|
|
398
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
399
|
+
|
|
400
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
401
|
+
|
|
402
|
+
const prepareCalls2 = await client.prepareCalls({
|
|
403
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
404
|
+
from: account.address,
|
|
405
|
+
capabilities: {
|
|
406
|
+
paymasterService: {
|
|
407
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
});
|
|
411
|
+
const signedCalls2 = await client.signPreparedCalls(prepareCalls2);
|
|
412
|
+
const result2 = await client.sendPreparedCalls(signedCalls2);
|
|
413
|
+
|
|
414
|
+
expect(result2.preparedCallIds).toBeArrayOfSize(1);
|
|
415
|
+
|
|
416
|
+
await waitForUserOpSuccess(client, result2.preparedCallIds[0]);
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
timeout: 90_000,
|
|
420
|
+
},
|
|
421
|
+
);
|
|
422
|
+
|
|
423
|
+
it(
|
|
424
|
+
"should successfully send a UO with paymaster using 7702",
|
|
425
|
+
async () => {
|
|
426
|
+
const _signer = LocalAccountSigner.privateKeyToAccountSigner(
|
|
427
|
+
"0x00d35c6d307b5cddeb70aeed96ee27a551fee58bf1a43858477e6c11f9172ba8",
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
const _client = createSmartWalletClient({
|
|
431
|
+
transport,
|
|
432
|
+
chain: arbitrumSepolia,
|
|
433
|
+
mode: "remote",
|
|
434
|
+
signer: _signer,
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
const account = await _client.requestAccount({
|
|
438
|
+
creationHint: {
|
|
439
|
+
accountType: "7702",
|
|
440
|
+
},
|
|
441
|
+
});
|
|
442
|
+
expect(account.address).toBe(await _signer.getAddress());
|
|
443
|
+
|
|
444
|
+
const preparedCalls = await _client.prepareCalls({
|
|
445
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
446
|
+
from: account.address,
|
|
447
|
+
capabilities: {
|
|
448
|
+
paymasterService: {
|
|
449
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
450
|
+
},
|
|
451
|
+
},
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
const signedCalls = await _client.signPreparedCalls(preparedCalls);
|
|
455
|
+
|
|
456
|
+
const result = await _client.sendPreparedCalls(signedCalls);
|
|
457
|
+
|
|
458
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
459
|
+
|
|
460
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
461
|
+
},
|
|
462
|
+
{ timeout: 45_000 },
|
|
463
|
+
);
|
|
464
|
+
|
|
465
|
+
it(
|
|
466
|
+
"should successfully create a session with grantPermissions and send a UO",
|
|
467
|
+
async () => {
|
|
468
|
+
const account = await client.requestAccount();
|
|
469
|
+
|
|
470
|
+
const sessionKey = LocalAccountSigner.generatePrivateKeySigner();
|
|
471
|
+
|
|
472
|
+
const permissions = await client.grantPermissions({
|
|
473
|
+
account: account.address,
|
|
474
|
+
expirySec: Math.floor(Date.now() / 1000) + 60 * 60,
|
|
475
|
+
key: {
|
|
476
|
+
publicKey: await sessionKey.getAddress(),
|
|
477
|
+
type: "secp256k1",
|
|
478
|
+
},
|
|
479
|
+
permissions: [{ type: "root" }],
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
const sessionKeyClient = createSmartWalletClient({
|
|
483
|
+
transport,
|
|
484
|
+
chain: arbitrumSepolia,
|
|
485
|
+
mode: "remote",
|
|
486
|
+
signer: sessionKey,
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
const preparedCalls = await sessionKeyClient.prepareCalls({
|
|
490
|
+
calls: [{ to: zeroAddress, value: "0x0" }],
|
|
491
|
+
from: account.address,
|
|
492
|
+
capabilities: {
|
|
493
|
+
paymasterService: {
|
|
494
|
+
policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
|
|
495
|
+
},
|
|
496
|
+
permissions,
|
|
497
|
+
},
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
const signedCalls =
|
|
501
|
+
await sessionKeyClient.signPreparedCalls(preparedCalls);
|
|
502
|
+
|
|
503
|
+
const result = await sessionKeyClient.sendPreparedCalls({
|
|
504
|
+
...signedCalls,
|
|
505
|
+
capabilities: {
|
|
506
|
+
permissions,
|
|
507
|
+
},
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
expect(result.preparedCallIds).toBeArrayOfSize(1);
|
|
511
|
+
|
|
512
|
+
await waitForUserOpSuccess(client, result.preparedCallIds[0]);
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
timeout: 45_000,
|
|
516
|
+
},
|
|
517
|
+
);
|
|
259
518
|
});
|
|
260
519
|
|
|
261
520
|
const givenTypedData = {
|
|
@@ -291,3 +550,25 @@ describe("Client E2E Tests", () => {
|
|
|
291
550
|
},
|
|
292
551
|
} as const;
|
|
293
552
|
});
|
|
553
|
+
|
|
554
|
+
const waitForUserOpSuccess = async (
|
|
555
|
+
client: SmartWalletClient,
|
|
556
|
+
preparedCallId: Hex,
|
|
557
|
+
) => {
|
|
558
|
+
const maxTimeoutMs = 1000 * 30;
|
|
559
|
+
const deadline = Date.now() + maxTimeoutMs;
|
|
560
|
+
while (Date.now() < deadline) {
|
|
561
|
+
const status = (await client.getCallsStatus(preparedCallId)).status;
|
|
562
|
+
if (status === 200) {
|
|
563
|
+
// Success.
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
if (status !== 100) {
|
|
567
|
+
// Error.
|
|
568
|
+
throw new Error(`Get call status failed with status ${status}.`);
|
|
569
|
+
}
|
|
570
|
+
// Pending.
|
|
571
|
+
await sleep(5000);
|
|
572
|
+
}
|
|
573
|
+
throw new Error("Timed out waiting for successful call status.");
|
|
574
|
+
};
|