@account-kit/wallet-client 0.1.0-alpha.9 → 4.50.0

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 (276) hide show
  1. package/LICENSE +21 -0
  2. package/dist/esm/client/actions/formatSign.d.ts +30 -0
  3. package/dist/esm/client/actions/formatSign.js +32 -0
  4. package/dist/esm/client/actions/formatSign.js.map +1 -0
  5. package/dist/esm/client/actions/getCallsStatus.d.ts +6 -3
  6. package/dist/esm/client/actions/getCallsStatus.js +3 -0
  7. package/dist/esm/client/actions/getCallsStatus.js.map +1 -1
  8. package/dist/esm/client/actions/grantPermissions.d.ts +10 -11
  9. package/dist/esm/client/actions/grantPermissions.js +26 -12
  10. package/dist/esm/client/actions/grantPermissions.js.map +1 -1
  11. package/dist/esm/client/actions/listAccounts.d.ts +10 -3
  12. package/dist/esm/client/actions/listAccounts.js +14 -2
  13. package/dist/esm/client/actions/listAccounts.js.map +1 -1
  14. package/dist/esm/client/actions/prepareCalls.d.ts +6 -3
  15. package/dist/esm/client/actions/prepareCalls.js +12 -8
  16. package/dist/esm/client/actions/prepareCalls.js.map +1 -1
  17. package/dist/esm/client/actions/prepareSign.d.ts +28 -0
  18. package/dist/esm/client/actions/prepareSign.js +31 -0
  19. package/dist/esm/client/actions/prepareSign.js.map +1 -0
  20. package/dist/esm/client/actions/requestAccount.d.ts +3 -1
  21. package/dist/esm/client/actions/requestAccount.js +5 -3
  22. package/dist/esm/client/actions/requestAccount.js.map +1 -1
  23. package/dist/esm/client/actions/sendPreparedCalls.d.ts +3 -1
  24. package/dist/esm/client/actions/sendPreparedCalls.js +2 -0
  25. package/dist/esm/client/actions/sendPreparedCalls.js.map +1 -1
  26. package/dist/esm/client/actions/signMessage.d.ts +5 -2
  27. package/dist/esm/client/actions/signMessage.js +5 -2
  28. package/dist/esm/client/actions/signMessage.js.map +1 -1
  29. package/dist/esm/client/actions/signPreparedCalls.d.ts +2 -2
  30. package/dist/esm/client/actions/signPreparedCalls.js +3 -3
  31. package/dist/esm/client/actions/signPreparedCalls.js.map +1 -1
  32. package/dist/esm/client/actions/signSignatureRequest.d.ts +6 -10
  33. package/dist/esm/client/actions/signSignatureRequest.js +4 -7
  34. package/dist/esm/client/actions/signSignatureRequest.js.map +1 -1
  35. package/dist/esm/client/actions/signTypedData.d.ts +2 -0
  36. package/dist/esm/client/actions/signTypedData.js +2 -0
  37. package/dist/esm/client/actions/signTypedData.js.map +1 -1
  38. package/dist/esm/client/decorator.d.ts +0 -2
  39. package/dist/esm/client/decorator.js +1 -3
  40. package/dist/esm/client/decorator.js.map +1 -1
  41. package/dist/esm/client/index.d.ts +10 -6
  42. package/dist/esm/client/index.js +18 -21
  43. package/dist/esm/client/index.js.map +1 -1
  44. package/dist/esm/exports/index.d.ts +1 -5
  45. package/dist/esm/exports/index.js +1 -6
  46. package/dist/esm/exports/index.js.map +1 -1
  47. package/dist/esm/internal/account.d.ts +33 -0
  48. package/dist/esm/{isomorphic/utils/createAccount.js → internal/account.js} +25 -49
  49. package/dist/esm/internal/account.js.map +1 -0
  50. package/dist/esm/types.d.ts +5 -11
  51. package/dist/esm/types.js.map +1 -1
  52. package/dist/esm/utils.d.ts +13 -1
  53. package/dist/esm/utils.js +13 -1
  54. package/dist/esm/utils.js.map +1 -1
  55. package/dist/esm/version.d.ts +1 -0
  56. package/dist/esm/version.js +4 -0
  57. package/dist/esm/version.js.map +1 -0
  58. package/dist/types/client/actions/formatSign.d.ts +31 -0
  59. package/dist/types/client/actions/formatSign.d.ts.map +1 -0
  60. package/dist/types/client/actions/getCallsStatus.d.ts +6 -3
  61. package/dist/types/client/actions/getCallsStatus.d.ts.map +1 -1
  62. package/dist/types/client/actions/grantPermissions.d.ts +10 -11
  63. package/dist/types/client/actions/grantPermissions.d.ts.map +1 -1
  64. package/dist/types/client/actions/listAccounts.d.ts +10 -3
  65. package/dist/types/client/actions/listAccounts.d.ts.map +1 -1
  66. package/dist/types/client/actions/prepareCalls.d.ts +6 -3
  67. package/dist/types/client/actions/prepareCalls.d.ts.map +1 -1
  68. package/dist/types/client/actions/prepareSign.d.ts +29 -0
  69. package/dist/types/client/actions/prepareSign.d.ts.map +1 -0
  70. package/dist/types/client/actions/requestAccount.d.ts +3 -1
  71. package/dist/types/client/actions/requestAccount.d.ts.map +1 -1
  72. package/dist/types/client/actions/sendPreparedCalls.d.ts +3 -1
  73. package/dist/types/client/actions/sendPreparedCalls.d.ts.map +1 -1
  74. package/dist/types/client/actions/signMessage.d.ts +5 -2
  75. package/dist/types/client/actions/signMessage.d.ts.map +1 -1
  76. package/dist/types/client/actions/signPreparedCalls.d.ts +2 -2
  77. package/dist/types/client/actions/signPreparedCalls.d.ts.map +1 -1
  78. package/dist/types/client/actions/signSignatureRequest.d.ts +6 -10
  79. package/dist/types/client/actions/signSignatureRequest.d.ts.map +1 -1
  80. package/dist/types/client/actions/signTypedData.d.ts +2 -0
  81. package/dist/types/client/actions/signTypedData.d.ts.map +1 -1
  82. package/dist/types/client/decorator.d.ts +0 -2
  83. package/dist/types/client/decorator.d.ts.map +1 -1
  84. package/dist/types/client/index.d.ts +10 -6
  85. package/dist/types/client/index.d.ts.map +1 -1
  86. package/dist/types/exports/index.d.ts +1 -5
  87. package/dist/types/exports/index.d.ts.map +1 -1
  88. package/dist/types/internal/account.d.ts +34 -0
  89. package/dist/types/internal/account.d.ts.map +1 -0
  90. package/dist/types/types.d.ts +5 -11
  91. package/dist/types/types.d.ts.map +1 -1
  92. package/dist/types/utils.d.ts +13 -1
  93. package/dist/types/utils.d.ts.map +1 -1
  94. package/dist/types/version.d.ts +2 -0
  95. package/dist/types/version.d.ts.map +1 -0
  96. package/package.json +33 -28
  97. package/src/client/actions/formatSign.ts +55 -0
  98. package/src/client/actions/getCallsStatus.ts +10 -6
  99. package/src/client/actions/grantPermissions.ts +46 -18
  100. package/src/client/actions/listAccounts.ts +22 -5
  101. package/src/client/actions/prepareCalls.ts +22 -16
  102. package/src/client/actions/prepareSign.ts +51 -0
  103. package/src/client/actions/requestAccount.ts +6 -4
  104. package/src/client/actions/sendPreparedCalls.ts +3 -1
  105. package/src/client/actions/signMessage.ts +5 -2
  106. package/src/client/actions/signPreparedCalls.ts +8 -12
  107. package/src/client/actions/signSignatureRequest.ts +12 -15
  108. package/src/client/actions/signTypedData.ts +2 -0
  109. package/src/client/decorator.ts +1 -8
  110. package/src/client/index.ts +41 -33
  111. package/src/exports/index.ts +1 -13
  112. package/src/internal/account.ts +120 -0
  113. package/src/types.ts +7 -18
  114. package/src/utils.ts +13 -1
  115. package/src/version.ts +3 -0
  116. package/dist/esm/capabilities/eip7702Auth.d.ts +0 -4
  117. package/dist/esm/capabilities/eip7702Auth.js +0 -18
  118. package/dist/esm/capabilities/eip7702Auth.js.map +0 -1
  119. package/dist/esm/capabilities/index.d.ts +0 -41
  120. package/dist/esm/capabilities/index.js +0 -14
  121. package/dist/esm/capabilities/index.js.map +0 -1
  122. package/dist/esm/capabilities/multiDimensionalNonce.d.ts +0 -3
  123. package/dist/esm/capabilities/multiDimensionalNonce.js +0 -7
  124. package/dist/esm/capabilities/multiDimensionalNonce.js.map +0 -1
  125. package/dist/esm/capabilities/overrides.d.ts +0 -26
  126. package/dist/esm/capabilities/overrides.js +0 -14
  127. package/dist/esm/capabilities/overrides.js.map +0 -1
  128. package/dist/esm/capabilities/paymaster.d.ts +0 -3
  129. package/dist/esm/capabilities/paymaster.js +0 -5
  130. package/dist/esm/capabilities/paymaster.js.map +0 -1
  131. package/dist/esm/capabilities/permissions/index.d.ts +0 -145
  132. package/dist/esm/capabilities/permissions/index.js +0 -83
  133. package/dist/esm/capabilities/permissions/index.js.map +0 -1
  134. package/dist/esm/capabilities/permissions/mav2.d.ts +0 -36
  135. package/dist/esm/capabilities/permissions/mav2.js +0 -88
  136. package/dist/esm/capabilities/permissions/mav2.js.map +0 -1
  137. package/dist/esm/client/actions/createAccount.d.ts +0 -35
  138. package/dist/esm/client/actions/createAccount.js +0 -32
  139. package/dist/esm/client/actions/createAccount.js.map +0 -1
  140. package/dist/esm/client/client.e2e-test.d.ts +0 -1
  141. package/dist/esm/client/client.e2e-test.js +0 -375
  142. package/dist/esm/client/client.e2e-test.js.map +0 -1
  143. package/dist/esm/exports/internal.d.ts +0 -14
  144. package/dist/esm/exports/internal.js +0 -16
  145. package/dist/esm/exports/internal.js.map +0 -1
  146. package/dist/esm/isomorphic/actions/createSession.d.ts +0 -14
  147. package/dist/esm/isomorphic/actions/createSession.js +0 -95
  148. package/dist/esm/isomorphic/actions/createSession.js.map +0 -1
  149. package/dist/esm/isomorphic/actions/getCallsStatus.d.ts +0 -21
  150. package/dist/esm/isomorphic/actions/getCallsStatus.js +0 -113
  151. package/dist/esm/isomorphic/actions/getCallsStatus.js.map +0 -1
  152. package/dist/esm/isomorphic/actions/prepareCalls.d.ts +0 -8
  153. package/dist/esm/isomorphic/actions/prepareCalls.js +0 -116
  154. package/dist/esm/isomorphic/actions/prepareCalls.js.map +0 -1
  155. package/dist/esm/isomorphic/actions/sendPreparedCalls.d.ts +0 -8
  156. package/dist/esm/isomorphic/actions/sendPreparedCalls.js +0 -157
  157. package/dist/esm/isomorphic/actions/sendPreparedCalls.js.map +0 -1
  158. package/dist/esm/isomorphic/client.d.ts +0 -239
  159. package/dist/esm/isomorphic/client.js +0 -37
  160. package/dist/esm/isomorphic/client.js.map +0 -1
  161. package/dist/esm/isomorphic/utils/7702.d.ts +0 -23
  162. package/dist/esm/isomorphic/utils/7702.js +0 -75
  163. package/dist/esm/isomorphic/utils/7702.js.map +0 -1
  164. package/dist/esm/isomorphic/utils/createAccount.d.ts +0 -24
  165. package/dist/esm/isomorphic/utils/createAccount.js.map +0 -1
  166. package/dist/esm/isomorphic/utils/createDummySigner.d.ts +0 -3
  167. package/dist/esm/isomorphic/utils/createDummySigner.js +0 -17
  168. package/dist/esm/isomorphic/utils/createDummySigner.js.map +0 -1
  169. package/dist/esm/isomorphic/utils/decodeSignature.d.ts +0 -3
  170. package/dist/esm/isomorphic/utils/decodeSignature.js +0 -13
  171. package/dist/esm/isomorphic/utils/decodeSignature.js.map +0 -1
  172. package/dist/esm/isomorphic/utils/parsePermissionsContext.d.ts +0 -21
  173. package/dist/esm/isomorphic/utils/parsePermissionsContext.js +0 -34
  174. package/dist/esm/isomorphic/utils/parsePermissionsContext.js.map +0 -1
  175. package/dist/esm/isomorphic/utils/supportsFeature.d.ts +0 -4
  176. package/dist/esm/isomorphic/utils/supportsFeature.js +0 -21
  177. package/dist/esm/isomorphic/utils/supportsFeature.js.map +0 -1
  178. package/dist/esm/local/client.d.ts +0 -3
  179. package/dist/esm/local/client.js +0 -97
  180. package/dist/esm/local/client.js.map +0 -1
  181. package/dist/esm/remote/client.d.ts +0 -9
  182. package/dist/esm/remote/client.js +0 -41
  183. package/dist/esm/remote/client.js.map +0 -1
  184. package/dist/esm/rpc/examples.d.ts +0 -230
  185. package/dist/esm/rpc/examples.js +0 -314
  186. package/dist/esm/rpc/examples.js.map +0 -1
  187. package/dist/esm/rpc/request.d.ts +0 -755
  188. package/dist/esm/rpc/request.js +0 -214
  189. package/dist/esm/rpc/request.js.map +0 -1
  190. package/dist/esm/rpc/schema.d.ts +0 -703
  191. package/dist/esm/rpc/schema.js +0 -5
  192. package/dist/esm/rpc/schema.js.map +0 -1
  193. package/dist/esm/schemas.d.ts +0 -712
  194. package/dist/esm/schemas.js +0 -463
  195. package/dist/esm/schemas.js.map +0 -1
  196. package/dist/types/capabilities/eip7702Auth.d.ts +0 -5
  197. package/dist/types/capabilities/eip7702Auth.d.ts.map +0 -1
  198. package/dist/types/capabilities/index.d.ts +0 -42
  199. package/dist/types/capabilities/index.d.ts.map +0 -1
  200. package/dist/types/capabilities/multiDimensionalNonce.d.ts +0 -4
  201. package/dist/types/capabilities/multiDimensionalNonce.d.ts.map +0 -1
  202. package/dist/types/capabilities/overrides.d.ts +0 -27
  203. package/dist/types/capabilities/overrides.d.ts.map +0 -1
  204. package/dist/types/capabilities/paymaster.d.ts +0 -4
  205. package/dist/types/capabilities/paymaster.d.ts.map +0 -1
  206. package/dist/types/capabilities/permissions/index.d.ts +0 -146
  207. package/dist/types/capabilities/permissions/index.d.ts.map +0 -1
  208. package/dist/types/capabilities/permissions/mav2.d.ts +0 -37
  209. package/dist/types/capabilities/permissions/mav2.d.ts.map +0 -1
  210. package/dist/types/client/actions/createAccount.d.ts +0 -36
  211. package/dist/types/client/actions/createAccount.d.ts.map +0 -1
  212. package/dist/types/client/client.e2e-test.d.ts +0 -2
  213. package/dist/types/client/client.e2e-test.d.ts.map +0 -1
  214. package/dist/types/exports/internal.d.ts +0 -15
  215. package/dist/types/exports/internal.d.ts.map +0 -1
  216. package/dist/types/isomorphic/actions/createSession.d.ts +0 -15
  217. package/dist/types/isomorphic/actions/createSession.d.ts.map +0 -1
  218. package/dist/types/isomorphic/actions/getCallsStatus.d.ts +0 -22
  219. package/dist/types/isomorphic/actions/getCallsStatus.d.ts.map +0 -1
  220. package/dist/types/isomorphic/actions/prepareCalls.d.ts +0 -9
  221. package/dist/types/isomorphic/actions/prepareCalls.d.ts.map +0 -1
  222. package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts +0 -9
  223. package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts.map +0 -1
  224. package/dist/types/isomorphic/client.d.ts +0 -240
  225. package/dist/types/isomorphic/client.d.ts.map +0 -1
  226. package/dist/types/isomorphic/utils/7702.d.ts +0 -24
  227. package/dist/types/isomorphic/utils/7702.d.ts.map +0 -1
  228. package/dist/types/isomorphic/utils/createAccount.d.ts +0 -25
  229. package/dist/types/isomorphic/utils/createAccount.d.ts.map +0 -1
  230. package/dist/types/isomorphic/utils/createDummySigner.d.ts +0 -4
  231. package/dist/types/isomorphic/utils/createDummySigner.d.ts.map +0 -1
  232. package/dist/types/isomorphic/utils/decodeSignature.d.ts +0 -4
  233. package/dist/types/isomorphic/utils/decodeSignature.d.ts.map +0 -1
  234. package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts +0 -22
  235. package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts.map +0 -1
  236. package/dist/types/isomorphic/utils/supportsFeature.d.ts +0 -5
  237. package/dist/types/isomorphic/utils/supportsFeature.d.ts.map +0 -1
  238. package/dist/types/local/client.d.ts +0 -4
  239. package/dist/types/local/client.d.ts.map +0 -1
  240. package/dist/types/remote/client.d.ts +0 -10
  241. package/dist/types/remote/client.d.ts.map +0 -1
  242. package/dist/types/rpc/examples.d.ts +0 -231
  243. package/dist/types/rpc/examples.d.ts.map +0 -1
  244. package/dist/types/rpc/request.d.ts +0 -756
  245. package/dist/types/rpc/request.d.ts.map +0 -1
  246. package/dist/types/rpc/schema.d.ts +0 -704
  247. package/dist/types/rpc/schema.d.ts.map +0 -1
  248. package/dist/types/schemas.d.ts +0 -713
  249. package/dist/types/schemas.d.ts.map +0 -1
  250. package/src/capabilities/eip7702Auth.ts +0 -26
  251. package/src/capabilities/index.ts +0 -14
  252. package/src/capabilities/multiDimensionalNonce.ts +0 -7
  253. package/src/capabilities/overrides.ts +0 -35
  254. package/src/capabilities/paymaster.ts +0 -5
  255. package/src/capabilities/permissions/index.ts +0 -163
  256. package/src/capabilities/permissions/mav2.ts +0 -138
  257. package/src/client/actions/createAccount.ts +0 -53
  258. package/src/client/client.e2e-test.ts +0 -463
  259. package/src/exports/internal.ts +0 -17
  260. package/src/isomorphic/actions/createSession.ts +0 -159
  261. package/src/isomorphic/actions/getCallsStatus.ts +0 -170
  262. package/src/isomorphic/actions/prepareCalls.ts +0 -170
  263. package/src/isomorphic/actions/sendPreparedCalls.ts +0 -232
  264. package/src/isomorphic/client.ts +0 -94
  265. package/src/isomorphic/utils/7702.ts +0 -143
  266. package/src/isomorphic/utils/createAccount.ts +0 -170
  267. package/src/isomorphic/utils/createDummySigner.ts +0 -27
  268. package/src/isomorphic/utils/decodeSignature.ts +0 -18
  269. package/src/isomorphic/utils/parsePermissionsContext.ts +0 -49
  270. package/src/isomorphic/utils/supportsFeature.ts +0 -34
  271. package/src/local/client.ts +0 -136
  272. package/src/remote/client.ts +0 -67
  273. package/src/rpc/examples.ts +0 -342
  274. package/src/rpc/request.ts +0 -300
  275. package/src/rpc/schema.ts +0 -40
  276. package/src/schemas.ts +0 -657
@@ -1,463 +0,0 @@
1
- import { LocalAccountSigner } from "@aa-sdk/core";
2
- import { alchemy, arbitrumSepolia } from "@account-kit/infra";
3
- import { describe, expect, it } from "bun:test";
4
- import { createPublicClient, zeroAddress, type Address } from "viem";
5
- import { createSmartWalletClient } from "./index.js";
6
-
7
- describe("Client E2E Tests", () => {
8
- const transport = alchemy(
9
- process.env.ALCHEMY_PROXY_RPC_URL
10
- ? {
11
- rpcUrl: process.env.ALCHEMY_PROXY_RPC_URL,
12
- }
13
- : {
14
- apiKey: process.env.TEST_ALCHEMY_API_KEY!,
15
- },
16
- );
17
- describe("Local Mode Tests", () => {
18
- const signer = LocalAccountSigner.privateKeyToAccountSigner(
19
- "0xbaca22d9b6846ec09a4da378ffa07e2f14ce7d65675d135911b6fd281416bb03",
20
- );
21
-
22
- const client = createSmartWalletClient({
23
- transport,
24
- chain: arbitrumSepolia,
25
- mode: "local",
26
- signer,
27
- });
28
-
29
- const publicClient = createPublicClient({
30
- chain: arbitrumSepolia,
31
- transport,
32
- });
33
-
34
- it("should successfully get a counterfactual address", async () => {
35
- const account = await client.requestAccount();
36
- expect(account.address).toMatchInlineSnapshot(
37
- `"0xa46944b7a39c35d931D514ACAc3ac77c226a81ff"`,
38
- );
39
- });
40
-
41
- it("should successfully request account with different salt", async () => {
42
- const account = await client.requestAccount({
43
- id: "f4c1d956-24ef-4002-a141-2c9d6d92af1a",
44
- creationHint: { salt: "0x1" },
45
- });
46
-
47
- expect(account.address).toMatchInlineSnapshot(
48
- `"0xA692f0E5AfAD20F771443D89C635146C6A592f06"`,
49
- );
50
- });
51
-
52
- it("should not cache account if different inputs provided", async () => {
53
- const account = await client.requestAccount();
54
- const account2 = await client.requestAccount({
55
- id: "52ab44be-b03e-47ed-ad65-43014ea5fbfc",
56
- creationHint: { salt: "0x2" },
57
- });
58
-
59
- expect(account.address).not.toEqual(account2.address);
60
- });
61
-
62
- it("can correctly sign a message", async () => {
63
- const account = await client.requestAccount();
64
- const message = "hello world";
65
- const signature = await client.signMessage({ message });
66
- const isValid = await publicClient.verifyMessage({
67
- address: account.address,
68
- message,
69
- signature,
70
- });
71
- expect(isValid).toBeTrue();
72
- });
73
-
74
- it("can correctly sign typed data", async () => {
75
- const account = await client.requestAccount();
76
- const signature = await client.signTypedData(givenTypedData);
77
- const isValid = await publicClient.verifyTypedData({
78
- ...givenTypedData,
79
- signature,
80
- address: account.address,
81
- });
82
- expect(isValid).toBeTrue();
83
- });
84
-
85
- it("can correctly sign a message with a different account", async () => {
86
- const account = await client.requestAccount({
87
- id: "f4c1d956-24ef-4002-a141-2c9d6d92af1a",
88
- creationHint: { salt: "0x1" },
89
- });
90
- const message = "hello world";
91
-
92
- const signature = await client.signMessage({
93
- message,
94
- account: account.address,
95
- });
96
- const isValid = await publicClient.verifyMessage({
97
- address: account.address,
98
- message,
99
- signature,
100
- });
101
- expect(isValid).toBeTrue();
102
- });
103
-
104
- it("can correctly sign typed data with a different account", async () => {
105
- const account = await client.requestAccount({
106
- id: "f4c1d956-24ef-4002-a141-2c9d6d92af1a",
107
- creationHint: { salt: "0x1" },
108
- });
109
-
110
- const signature = await client.signTypedData({
111
- ...givenTypedData,
112
- account: account.address,
113
- });
114
- const isValid = await publicClient.verifyTypedData({
115
- ...givenTypedData,
116
- signature,
117
- address: account.address,
118
- });
119
- expect(isValid).toBeTrue();
120
- });
121
-
122
- it("should successfully send a UO with paymaster using 7702", async () => {
123
- const _signer = LocalAccountSigner.privateKeyToAccountSigner(
124
- "0x49daf21e92c997093e9ffdf7e7ddbf8970e9eadc5d4847d0f690db25d5128e1f",
125
- );
126
-
127
- const _client = createSmartWalletClient({
128
- transport,
129
- chain: arbitrumSepolia,
130
- mode: "local",
131
- signer: _signer,
132
- });
133
-
134
- const account = await _client.requestAccount({
135
- creationHint: {
136
- accountType: "7702",
137
- },
138
- });
139
-
140
- const preparedCalls = await _client.prepareCalls({
141
- calls: [{ to: zeroAddress, value: "0x0" }],
142
- from: account.address,
143
- capabilities: {
144
- paymasterService: {
145
- policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
146
- },
147
- },
148
- });
149
-
150
- const signedCalls = await _client.signPreparedCalls(preparedCalls);
151
-
152
- const result = await _client.sendPreparedCalls(signedCalls);
153
-
154
- expect(result.preparedCallIds).toBeArrayOfSize(1);
155
- });
156
-
157
- it("should successfully send a UO with paymaster", async () => {
158
- const account = await client.requestAccount();
159
- const preparedCalls = await client.prepareCalls({
160
- calls: [{ to: zeroAddress, value: "0x0" }],
161
- from: account.address,
162
- capabilities: {
163
- paymasterService: {
164
- policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
165
- },
166
- },
167
- });
168
-
169
- const signedCalls = await client.signPreparedCalls(preparedCalls);
170
-
171
- const result = await client.sendPreparedCalls(signedCalls);
172
-
173
- expect(result.preparedCallIds).toBeArrayOfSize(1);
174
- });
175
-
176
- it("should successfully create a session with grantPermissions and send a UO", async () => {
177
- const account = await client.requestAccount();
178
-
179
- const sessionKey = LocalAccountSigner.generatePrivateKeySigner();
180
-
181
- const permissions = await client.grantPermissions({
182
- account: account.address,
183
- expirySec: Math.floor(Date.now() / 1000) + 60 * 60,
184
- key: {
185
- publicKey: await sessionKey.getAddress(),
186
- type: "secp256k1",
187
- },
188
- permissions: [{ type: "root" }],
189
- });
190
-
191
- const sessionKeyClient = createSmartWalletClient({
192
- transport,
193
- chain: arbitrumSepolia,
194
- mode: "local",
195
- signer: sessionKey,
196
- });
197
-
198
- const preparedCalls = await sessionKeyClient.prepareCalls({
199
- calls: [{ to: zeroAddress, value: "0x0" }],
200
- from: account.address,
201
- capabilities: {
202
- paymasterService: {
203
- policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
204
- },
205
- permissions,
206
- },
207
- });
208
-
209
- const signedCalls =
210
- await sessionKeyClient.signPreparedCalls(preparedCalls);
211
-
212
- const result = await sessionKeyClient.sendPreparedCalls({
213
- ...signedCalls,
214
- capabilities: {
215
- permissions,
216
- },
217
- });
218
-
219
- expect(result.preparedCallIds).toBeArrayOfSize(1);
220
- });
221
- });
222
-
223
- describe("Remote Mode Tests", () => {
224
- const signer = LocalAccountSigner.privateKeyToAccountSigner(
225
- "0xd7b061ef04d29cf68b3c89356678eccec9988de8d5ed892c19461c4a9d65925d",
226
- );
227
-
228
- const client = createSmartWalletClient({
229
- transport,
230
- chain: arbitrumSepolia,
231
- mode: "remote",
232
- signer,
233
- });
234
-
235
- const publicClient = createPublicClient({
236
- chain: arbitrumSepolia,
237
- transport,
238
- });
239
-
240
- it("should successfully get a counterfactual address", async () => {
241
- const account = await client.requestAccount();
242
- expect(account.address).toMatchInlineSnapshot(
243
- `"0x76E765e80FFAC96ac10Aa8908a8267A3B80d606D"`,
244
- );
245
- });
246
-
247
- it("should successfully request account with different salt", async () => {
248
- const account = await client.requestAccount({
249
- id: "26b375e3-c94a-4e98-b6b7-5a97121aa583",
250
- creationHint: { salt: "0x1" },
251
- });
252
-
253
- expect(account.address).toMatchInlineSnapshot(
254
- `"0xdfdd407b9569D40BEFa503208753E59cAc9713fA"`,
255
- );
256
- });
257
-
258
- it("should not cache account if different inputs provided", async () => {
259
- const account = await client.requestAccount();
260
- const account2 = await client.requestAccount({
261
- id: "2a3320b4-6ed2-4833-a488-5188e9bdd9d2",
262
- creationHint: { salt: "0x2" },
263
- });
264
-
265
- expect(account.address).not.toEqual(account2.address);
266
- });
267
-
268
- it("can correctly sign a message", async () => {
269
- const account = await client.requestAccount();
270
- const message = "hello world";
271
- const signature = await client.signMessage({ message });
272
- const isValid = await publicClient.verifyMessage({
273
- address: account.address,
274
- message: "hello world",
275
- signature,
276
- });
277
- expect(isValid).toBeTrue();
278
- });
279
-
280
- it("can correctly sign typed data", async () => {
281
- const account = await client.requestAccount();
282
- const signature = await client.signTypedData(givenTypedData);
283
- const isValid = await publicClient.verifyTypedData({
284
- ...givenTypedData,
285
- signature,
286
- address: account.address,
287
- });
288
- expect(isValid).toBeTrue();
289
- });
290
-
291
- it("can correctly sign a message with a different account", async () => {
292
- const account = await client.requestAccount({
293
- id: "26b375e3-c94a-4e98-b6b7-5a97121aa583",
294
- creationHint: { salt: "0x1" },
295
- });
296
-
297
- const message = "hello world";
298
- const signature = await client.signMessage({
299
- message,
300
- account: account.address,
301
- });
302
- const isValid = await publicClient.verifyMessage({
303
- address: account.address,
304
- message: "hello world",
305
- signature,
306
- });
307
- expect(isValid).toBeTrue();
308
- });
309
-
310
- it("can correctly sign typed data with a different account", async () => {
311
- const account = await client.requestAccount({
312
- id: "26b375e3-c94a-4e98-b6b7-5a97121aa583",
313
- creationHint: { salt: "0x1" },
314
- });
315
-
316
- const signature = await client.signTypedData({
317
- ...givenTypedData,
318
- account: account.address,
319
- });
320
-
321
- const isValid = await publicClient.verifyTypedData({
322
- ...givenTypedData,
323
- signature,
324
- address: account.address,
325
- });
326
- expect(isValid).toBeTrue();
327
- });
328
-
329
- it("should successfully send a UO with paymaster", async () => {
330
- const account = await client.requestAccount();
331
- const preparedCalls = await client.prepareCalls({
332
- calls: [{ to: zeroAddress, value: "0x0" }],
333
- from: account.address,
334
- capabilities: {
335
- paymasterService: {
336
- policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
337
- },
338
- },
339
- });
340
-
341
- const signedCalls = await client.signPreparedCalls(preparedCalls);
342
-
343
- const result = await client.sendPreparedCalls(signedCalls);
344
-
345
- expect(result.preparedCallIds).toBeArrayOfSize(1);
346
- });
347
-
348
- it("should successfully send a UO with paymaster using 7702", async () => {
349
- const _signer = LocalAccountSigner.privateKeyToAccountSigner(
350
- "0x00d35c6d307b5cddeb70aeed96ee27a551fee58bf1a43858477e6c11f9172ba8",
351
- );
352
-
353
- const _client = createSmartWalletClient({
354
- transport,
355
- chain: arbitrumSepolia,
356
- mode: "remote",
357
- signer: _signer,
358
- });
359
-
360
- const account = await _client.requestAccount({
361
- creationHint: {
362
- accountType: "7702",
363
- },
364
- });
365
- expect(account.address).toBe(await _signer.getAddress());
366
-
367
- const preparedCalls = await _client.prepareCalls({
368
- calls: [{ to: zeroAddress, value: "0x0" }],
369
- from: account.address,
370
- capabilities: {
371
- paymasterService: {
372
- policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
373
- },
374
- },
375
- });
376
-
377
- const signedCalls = await _client.signPreparedCalls(preparedCalls);
378
-
379
- const result = await _client.sendPreparedCalls(signedCalls);
380
-
381
- expect(result.preparedCallIds).toBeArrayOfSize(1);
382
- });
383
-
384
- it("should successfully create a session with grantPermissions and send a UO", async () => {
385
- const account = await client.requestAccount();
386
-
387
- const sessionKey = LocalAccountSigner.generatePrivateKeySigner();
388
-
389
- const permissions = await client.grantPermissions({
390
- account: account.address,
391
- expirySec: Math.floor(Date.now() / 1000) + 60 * 60,
392
- key: {
393
- publicKey: await sessionKey.getAddress(),
394
- type: "secp256k1",
395
- },
396
- permissions: [{ type: "root" }],
397
- });
398
-
399
- const sessionKeyClient = createSmartWalletClient({
400
- transport,
401
- chain: arbitrumSepolia,
402
- mode: "remote",
403
- signer: sessionKey,
404
- });
405
-
406
- const preparedCalls = await sessionKeyClient.prepareCalls({
407
- calls: [{ to: zeroAddress, value: "0x0" }],
408
- from: account.address,
409
- capabilities: {
410
- paymasterService: {
411
- policyId: process.env.TEST_PAYMASTER_POLICY_ID!,
412
- },
413
- permissions,
414
- },
415
- });
416
-
417
- const signedCalls =
418
- await sessionKeyClient.signPreparedCalls(preparedCalls);
419
-
420
- const result = await sessionKeyClient.sendPreparedCalls({
421
- ...signedCalls,
422
- capabilities: {
423
- permissions,
424
- },
425
- });
426
-
427
- expect(result.preparedCallIds).toBeArrayOfSize(1);
428
- });
429
- });
430
-
431
- const givenTypedData = {
432
- types: {
433
- Person: [
434
- { name: "name", type: "string" },
435
- { name: "wallet", type: "address" },
436
- ],
437
- Mail: [
438
- { name: "from", type: "Person" },
439
- { name: "to", type: "Person" },
440
- { name: "contents", type: "string" },
441
- ],
442
- },
443
- primaryType: "Mail" as const,
444
- domain: {
445
- name: "Ether Mail",
446
- version: "1",
447
- chainId: 1,
448
- verifyingContract:
449
- "0xbbc68f94D29d52EE8D4994E54d6ED0fEAeb99C2c" as Address,
450
- },
451
- message: {
452
- from: {
453
- name: "Alice",
454
- wallet: "0xFC24e57486116026740634F629ffC4E5C95A6893",
455
- },
456
- to: {
457
- name: "Bob",
458
- wallet: "0xe7a26f006EAA562308C5df235C02BFB9a5849177",
459
- },
460
- contents: "Hello, Bob!",
461
- },
462
- } as const;
463
- });
@@ -1,17 +0,0 @@
1
- // exports from this file are meant to be imported by our packages in the monorepo
2
- // we will expose this in the package.json as a named export like `this-pkg/internal`
3
- // TODO: name `this-pkg`
4
- export * from "../capabilities/index.js";
5
- export * from "../capabilities/paymaster.js";
6
- export * from "../capabilities/permissions/index.js";
7
- export * from "../capabilities/permissions/mav2.js";
8
- export type * from "../isomorphic/client.js";
9
- export { createIsomorphicClient } from "../isomorphic/client.js";
10
- export { createDummySigner } from "../isomorphic/utils/createDummySigner.js";
11
- export { prepareInitialOwners } from "../isomorphic/utils/createAccount.js";
12
- export * from "../rpc/request.js";
13
- export * as RpcSchemas from "../rpc/request.js";
14
- export * from "../rpc/schema.js";
15
- export * from "../schemas.js";
16
- export type * from "../types.ts";
17
- export * from "../utils.js";
@@ -1,159 +0,0 @@
1
- import {
2
- createSmartAccountClient,
3
- type SmartAccountClient,
4
- type SmartContractAccount,
5
- } from "@aa-sdk/core";
6
- import {
7
- deferralActions,
8
- PermissionBuilder,
9
- } from "@account-kit/smart-contracts/experimental";
10
- import type { Static } from "@sinclair/typebox";
11
- import { Value } from "@sinclair/typebox/value";
12
- import {
13
- ChainNotFoundError,
14
- custom,
15
- hashTypedData,
16
- hexToNumber,
17
- toHex,
18
- type Chain,
19
- type Hex,
20
- type Transport,
21
- } from "viem";
22
- import { InvalidRequestError } from "ox/RpcResponse";
23
- import { TypePermission } from "../../capabilities/permissions/index.js";
24
- import { isGlobalValidation } from "../../capabilities/permissions/mav2.js";
25
- import type { wallet_createSession } from "../../rpc/request.js";
26
- import type { WalletServerViemRpcSchema } from "../../rpc/schema.js";
27
- import { createAccount, isModularAccountV2 } from "../utils/createAccount.js";
28
- import { createDummySigner } from "../utils/createDummySigner.js";
29
- import { supportsFeature } from "../utils/supportsFeature.js";
30
- import { isDelegated } from "../utils/7702.js";
31
-
32
- export type CreateSessionParams = Omit<
33
- Static<
34
- (typeof wallet_createSession)["properties"]["Request"]["properties"]["params"]
35
- >[0],
36
- "chainId"
37
- > & {
38
- entityId?: Hex;
39
- };
40
-
41
- export type CreateSessionResult = Omit<
42
- Static<(typeof wallet_createSession)["properties"]["ReturnType"]>,
43
- "sessionId"
44
- > & {
45
- sessionId: Hex | null;
46
- entityId: Hex;
47
- fullPreSignatureDeferredActionDigest: Hex;
48
- };
49
-
50
- export async function createSession(
51
- client: SmartAccountClient<
52
- Transport,
53
- Chain,
54
- SmartContractAccount | undefined,
55
- Record<string, unknown>,
56
- WalletServerViemRpcSchema
57
- >,
58
- params: CreateSessionParams,
59
- ): Promise<CreateSessionResult> {
60
- if (!client.chain) {
61
- throw new ChainNotFoundError();
62
- }
63
-
64
- const { counterfactualInfo, delegation } = await client.request({
65
- method: "wallet_requestAccount",
66
- params: [
67
- {
68
- accountAddress: params.account,
69
- includeCounterfactualInfo: true,
70
- },
71
- ],
72
- });
73
-
74
- if (
75
- delegation &&
76
- !(await isDelegated(client, {
77
- address: params.account,
78
- delegation,
79
- }))
80
- ) {
81
- throw new InvalidRequestError({
82
- message:
83
- "7702 account must be delegated before calling `wallet_createSession`",
84
- });
85
- }
86
-
87
- if (!delegation && !counterfactualInfo) {
88
- throw new InvalidRequestError({
89
- message: "No counterfactual info found.",
90
- });
91
- }
92
-
93
- if (
94
- counterfactualInfo &&
95
- !supportsFeature(counterfactualInfo, "permissions")
96
- ) {
97
- throw new InvalidRequestError({
98
- message: "Account type does not support createSession",
99
- });
100
- }
101
-
102
- // At this point we know the account supports the permission feature
103
- const account = await createAccount({
104
- chain: client.chain,
105
- transport: custom(client.transport),
106
- signer: createDummySigner(params.account),
107
- accountAddress: params.account,
108
- counterfactualInfo,
109
- delegation,
110
- });
111
-
112
- if (!isModularAccountV2(account)) {
113
- throw new InvalidRequestError({
114
- message: "Sessions are currently only supported by MAv2 accounts.",
115
- });
116
- }
117
-
118
- const _client = createSmartAccountClient({
119
- chain: client.chain,
120
- transport: custom(client.transport),
121
- account,
122
- }).extend(deferralActions);
123
-
124
- const { entityId, nonce } = await _client.getEntityIdAndNonce({
125
- entityId: params.entityId ? hexToNumber(params.entityId) : undefined,
126
- isGlobalValidation: isGlobalValidation(params),
127
- });
128
-
129
- const { typedData, fullPreSignatureDeferredActionDigest } =
130
- await new PermissionBuilder({
131
- client: _client,
132
- key: {
133
- ...params.key,
134
- // Alias 'ecdsa' to 'secp256k1'
135
- type: params.key.type === "ecdsa" ? "secp256k1" : params.key.type,
136
- },
137
- entityId,
138
- nonce,
139
- deadline: params.expirySec,
140
- })
141
- .addPermissions({
142
- permissions: params.permissions.map((permission) =>
143
- Value.Encode(TypePermission, permission),
144
- ),
145
- })
146
- .compileDeferred();
147
-
148
- return {
149
- sessionId: null, // In remote mode, the server will set this later.
150
- chainId: toHex(client.chain.id),
151
- entityId: toHex(entityId),
152
- signatureRequest: {
153
- type: "eth_signTypedData_v4" as const,
154
- data: typedData,
155
- rawPayload: hashTypedData(typedData),
156
- },
157
- fullPreSignatureDeferredActionDigest,
158
- };
159
- }