@account-kit/wallet-client 0.1.0-alpha.5 → 0.1.0-alpha.7

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 (121) hide show
  1. package/dist/esm/capabilities/eip7702Auth.js +3 -1
  2. package/dist/esm/capabilities/eip7702Auth.js.map +1 -1
  3. package/dist/esm/capabilities/overrides.js +8 -8
  4. package/dist/esm/capabilities/overrides.js.map +1 -1
  5. package/dist/esm/capabilities/permissions/index.d.ts +1 -1
  6. package/dist/esm/capabilities/permissions/index.js +6 -3
  7. package/dist/esm/capabilities/permissions/index.js.map +1 -1
  8. package/dist/esm/client/actions/grantPermissions.d.ts +5 -60
  9. package/dist/esm/client/actions/grantPermissions.js +5 -58
  10. package/dist/esm/client/actions/grantPermissions.js.map +1 -1
  11. package/dist/esm/client/actions/requestAccount.js +5 -2
  12. package/dist/esm/client/actions/requestAccount.js.map +1 -1
  13. package/dist/esm/client/actions/sendPreparedCalls.d.ts +6 -14
  14. package/dist/esm/client/actions/sendPreparedCalls.js +11 -12
  15. package/dist/esm/client/actions/sendPreparedCalls.js.map +1 -1
  16. package/dist/esm/client/actions/signPreparedCalls.d.ts +14 -0
  17. package/dist/esm/client/actions/signPreparedCalls.js +54 -0
  18. package/dist/esm/client/actions/signPreparedCalls.js.map +1 -0
  19. package/dist/esm/client/actions/signSignatureRequest.d.ts +8 -7
  20. package/dist/esm/client/actions/signSignatureRequest.js +69 -31
  21. package/dist/esm/client/actions/signSignatureRequest.js.map +1 -1
  22. package/dist/esm/client/client.e2e-test.js +80 -24
  23. package/dist/esm/client/client.e2e-test.js.map +1 -1
  24. package/dist/esm/client/decorator.d.ts +3 -1
  25. package/dist/esm/client/decorator.js +3 -1
  26. package/dist/esm/client/decorator.js.map +1 -1
  27. package/dist/esm/exports/index.d.ts +2 -1
  28. package/dist/esm/exports/index.js +2 -1
  29. package/dist/esm/exports/index.js.map +1 -1
  30. package/dist/esm/isomorphic/actions/createSession.js +18 -32
  31. package/dist/esm/isomorphic/actions/createSession.js.map +1 -1
  32. package/dist/esm/isomorphic/actions/prepareCalls.js +22 -16
  33. package/dist/esm/isomorphic/actions/prepareCalls.js.map +1 -1
  34. package/dist/esm/isomorphic/actions/sendPreparedCalls.d.ts +3 -3
  35. package/dist/esm/isomorphic/actions/sendPreparedCalls.js +76 -36
  36. package/dist/esm/isomorphic/actions/sendPreparedCalls.js.map +1 -1
  37. package/dist/esm/isomorphic/client.d.ts +139 -13
  38. package/dist/esm/isomorphic/utils/7702.d.ts +4 -3
  39. package/dist/esm/isomorphic/utils/7702.js +14 -6
  40. package/dist/esm/isomorphic/utils/7702.js.map +1 -1
  41. package/dist/esm/isomorphic/utils/decodeSignature.d.ts +3 -0
  42. package/dist/esm/isomorphic/utils/decodeSignature.js +13 -0
  43. package/dist/esm/isomorphic/utils/decodeSignature.js.map +1 -0
  44. package/dist/esm/local/client.js +2 -3
  45. package/dist/esm/local/client.js.map +1 -1
  46. package/dist/esm/remote/client.js +3 -7
  47. package/dist/esm/remote/client.js.map +1 -1
  48. package/dist/esm/rpc/examples.d.ts +3 -3
  49. package/dist/esm/rpc/examples.js +3 -3
  50. package/dist/esm/rpc/examples.js.map +1 -1
  51. package/dist/esm/rpc/request.d.ts +357 -49
  52. package/dist/esm/rpc/request.js +26 -53
  53. package/dist/esm/rpc/request.js.map +1 -1
  54. package/dist/esm/rpc/schema.d.ts +323 -57
  55. package/dist/esm/rpc/schema.js.map +1 -1
  56. package/dist/esm/schemas.d.ts +451 -13
  57. package/dist/esm/schemas.js +165 -52
  58. package/dist/esm/schemas.js.map +1 -1
  59. package/dist/esm/types.d.ts +3 -0
  60. package/dist/esm/types.js.map +1 -1
  61. package/dist/types/capabilities/eip7702Auth.d.ts.map +1 -1
  62. package/dist/types/capabilities/permissions/index.d.ts +1 -1
  63. package/dist/types/capabilities/permissions/index.d.ts.map +1 -1
  64. package/dist/types/client/actions/grantPermissions.d.ts +5 -60
  65. package/dist/types/client/actions/grantPermissions.d.ts.map +1 -1
  66. package/dist/types/client/actions/requestAccount.d.ts.map +1 -1
  67. package/dist/types/client/actions/sendPreparedCalls.d.ts +6 -14
  68. package/dist/types/client/actions/sendPreparedCalls.d.ts.map +1 -1
  69. package/dist/types/client/actions/signPreparedCalls.d.ts +15 -0
  70. package/dist/types/client/actions/signPreparedCalls.d.ts.map +1 -0
  71. package/dist/types/client/actions/signSignatureRequest.d.ts +8 -7
  72. package/dist/types/client/actions/signSignatureRequest.d.ts.map +1 -1
  73. package/dist/types/client/decorator.d.ts +3 -1
  74. package/dist/types/client/decorator.d.ts.map +1 -1
  75. package/dist/types/exports/index.d.ts +2 -1
  76. package/dist/types/exports/index.d.ts.map +1 -1
  77. package/dist/types/isomorphic/actions/createSession.d.ts.map +1 -1
  78. package/dist/types/isomorphic/actions/prepareCalls.d.ts.map +1 -1
  79. package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts +3 -3
  80. package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts.map +1 -1
  81. package/dist/types/isomorphic/client.d.ts +139 -13
  82. package/dist/types/isomorphic/client.d.ts.map +1 -1
  83. package/dist/types/isomorphic/utils/7702.d.ts +4 -3
  84. package/dist/types/isomorphic/utils/7702.d.ts.map +1 -1
  85. package/dist/types/isomorphic/utils/decodeSignature.d.ts +4 -0
  86. package/dist/types/isomorphic/utils/decodeSignature.d.ts.map +1 -0
  87. package/dist/types/remote/client.d.ts.map +1 -1
  88. package/dist/types/rpc/examples.d.ts +3 -3
  89. package/dist/types/rpc/examples.d.ts.map +1 -1
  90. package/dist/types/rpc/request.d.ts +357 -49
  91. package/dist/types/rpc/request.d.ts.map +1 -1
  92. package/dist/types/rpc/schema.d.ts +323 -57
  93. package/dist/types/rpc/schema.d.ts.map +1 -1
  94. package/dist/types/schemas.d.ts +451 -13
  95. package/dist/types/schemas.d.ts.map +1 -1
  96. package/dist/types/types.d.ts +3 -0
  97. package/dist/types/types.d.ts.map +1 -1
  98. package/package.json +5 -5
  99. package/src/capabilities/eip7702Auth.ts +17 -10
  100. package/src/capabilities/overrides.ts +8 -8
  101. package/src/capabilities/permissions/index.ts +8 -3
  102. package/src/client/actions/grantPermissions.ts +5 -60
  103. package/src/client/actions/requestAccount.ts +10 -8
  104. package/src/client/actions/sendPreparedCalls.ts +17 -17
  105. package/src/client/actions/signPreparedCalls.ts +72 -0
  106. package/src/client/actions/signSignatureRequest.ts +50 -46
  107. package/src/client/client.e2e-test.ts +101 -33
  108. package/src/client/decorator.ts +14 -5
  109. package/src/exports/index.ts +2 -1
  110. package/src/isomorphic/actions/createSession.ts +20 -42
  111. package/src/isomorphic/actions/prepareCalls.ts +25 -17
  112. package/src/isomorphic/actions/sendPreparedCalls.ts +104 -54
  113. package/src/isomorphic/utils/7702.ts +18 -8
  114. package/src/isomorphic/utils/decodeSignature.ts +18 -0
  115. package/src/local/client.ts +2 -6
  116. package/src/remote/client.ts +3 -10
  117. package/src/rpc/examples.ts +3 -4
  118. package/src/rpc/request.ts +41 -63
  119. package/src/rpc/schema.ts +2 -2
  120. package/src/schemas.ts +227 -53
  121. package/src/types.ts +4 -0
@@ -1,18 +1,19 @@
1
1
  import type { SmartAccountClient, SmartContractAccount } from "@aa-sdk/core";
2
2
  import {
3
3
  concatHex,
4
- type Authorization,
4
+ numberToHex,
5
5
  type Address,
6
6
  type Chain,
7
7
  type Transport,
8
8
  isAddress,
9
9
  } from "viem";
10
10
  import type { WalletServerViemRpcSchema } from "../../rpc/schema.js";
11
+ import { PreparedCall_Authorization } from "../../schemas.js";
11
12
  import type { Eip7702AuthCapability } from "../../capabilities/eip7702Auth.ts";
12
13
  import type { Static } from "@sinclair/typebox";
13
14
  import { InvalidRequestError } from "ox/RpcResponse";
14
15
 
15
- export const createAuthorization = async (
16
+ export const createAuthorizationRequest = async (
16
17
  client: SmartAccountClient<
17
18
  Transport,
18
19
  Chain,
@@ -21,18 +22,27 @@ export const createAuthorization = async (
21
22
  WalletServerViemRpcSchema
22
23
  >,
23
24
  params: { address: Address; delegation: Address },
24
- ): Promise<Authorization<number, false> | undefined> => {
25
+ ): Promise<Static<typeof PreparedCall_Authorization> | undefined> => {
25
26
  const expectedCode = concatHex(["0xef0100", params.delegation]);
26
27
  const code = (await client.getCode({ address: params.address })) ?? "0x";
27
28
  if (code.toLowerCase() === expectedCode.toLowerCase()) {
28
29
  return undefined; // Already authorized.
29
30
  }
30
- return {
31
- chainId: client.chain.id,
31
+ const data = {
32
32
  address: params.delegation,
33
- nonce: await client.getTransactionCount({
34
- address: params.address,
35
- }),
33
+ nonce: numberToHex(
34
+ await client.getTransactionCount({
35
+ address: params.address,
36
+ }),
37
+ ),
38
+ };
39
+ return {
40
+ type: "authorization" as const,
41
+ data,
42
+ chainId: numberToHex(client.chain.id),
43
+ signatureRequest: {
44
+ type: "eip7702Auth" as const,
45
+ },
36
46
  };
37
47
  };
38
48
 
@@ -0,0 +1,18 @@
1
+ import { Value } from "@sinclair/typebox/value";
2
+ import type { Static, StaticDecode } from "@sinclair/typebox";
3
+ import { TypeEcdsaSig } from "../../schemas.js";
4
+ import { assertNever } from "../../utils.js";
5
+
6
+ export const decodeSignature = (
7
+ signature: Static<typeof TypeEcdsaSig>["signature"],
8
+ ): StaticDecode<typeof TypeEcdsaSig>["signature"] => {
9
+ switch (signature.type) {
10
+ case "ecdsa":
11
+ case "secp256k1":
12
+ return Value.Decode(TypeEcdsaSig, { signature } satisfies Static<
13
+ typeof TypeEcdsaSig
14
+ >).signature;
15
+ default:
16
+ return assertNever(signature, "Unexpected signature type");
17
+ }
18
+ };
@@ -121,19 +121,15 @@ const innerClientActions = (
121
121
  grantPermissions: async (signer, params) => {
122
122
  const { signatureRequest, fullPreSignatureDeferredActionDigest } =
123
123
  await isomorphicClient.createSession(params);
124
- const { signedAuthorization, signature } = await signSignatureRequest(
125
- signer,
126
- signatureRequest,
127
- );
124
+ const signature = await signSignatureRequest(signer, signatureRequest);
128
125
  return {
129
126
  context: encodePermissionsContext({
130
127
  contextVersion: "LOCAL_MODE_DEFERRED_ACTION",
131
128
  deferredAction: buildDeferredActionDigest({
132
129
  fullPreSignatureDeferredActionDigest,
133
- sig: prefixSignatureKeyType(signature, "secp256k1"),
130
+ sig: prefixSignatureKeyType(signature.data, signature.type),
134
131
  }),
135
132
  }),
136
- signedAuthorization,
137
133
  };
138
134
  },
139
135
  };
@@ -1,5 +1,5 @@
1
1
  import { Provider } from "ox";
2
- import { BaseError, createClient, custom, type Address } from "viem";
2
+ import { createClient, custom, type Address } from "viem";
3
3
  import { encodePermissionsContext } from "../capabilities/permissions/mav2.js";
4
4
  import { signSignatureRequest } from "../client/actions/signSignatureRequest.js";
5
5
  import { internalStateDecorator } from "../internal/decorator.js";
@@ -54,20 +54,13 @@ const innerClientActions = (
54
54
  method: "wallet_createSession",
55
55
  params: [params],
56
56
  });
57
- if (signatureRequest.type !== "eth_signTypedData_v4") {
58
- throw new BaseError("Unexpected signature request type");
59
- }
60
- const { signedAuthorization, signature } = await signSignatureRequest(
61
- signer,
62
- signatureRequest,
63
- );
57
+ const signature = await signSignatureRequest(signer, signatureRequest);
64
58
  return {
65
59
  context: encodePermissionsContext({
66
60
  contextVersion: "REMOTE_MODE_DEFERRED_ACTION",
67
61
  sessionId,
68
- signature,
62
+ signature: signature.data,
69
63
  }),
70
- signedAuthorization,
71
64
  };
72
65
  },
73
66
  };
@@ -82,9 +82,8 @@ const SendPreparedCalls = [
82
82
  },
83
83
  chainId: "0x66eee",
84
84
  signature: {
85
- type: "ecdsa",
86
- signature:
87
- "0xb1a055089b1ba8387ed435f2bd0afe7ff69f22b928cdfdea1b5323c64d6af387164de3fa6febf031b544de46a84d6fb7f084b9798ddfaba820950c257139a7321b",
85
+ type: "secp256k1",
86
+ data: "0xb1a055089b1ba8387ed435f2bd0afe7ff69f22b928cdfdea1b5323c64d6af387164de3fa6febf031b544de46a84d6fb7f084b9798ddfaba820950c257139a7321b",
88
87
  },
89
88
  },
90
89
  ],
@@ -200,7 +199,7 @@ const CreateSession = [
200
199
  type: "root",
201
200
  },
202
201
  ],
203
- expiry: 1747969653,
202
+ expirySec: 1747969653,
204
203
  },
205
204
  ],
206
205
  },
@@ -6,57 +6,43 @@ import {
6
6
  RemotePermission,
7
7
  } from "../capabilities/permissions/index.js";
8
8
  import {
9
+ TypeCallArray,
10
+ TypePrepareCall_UserOpV060_Signed,
11
+ TypePrepareCall_UserOpV070_Signed,
12
+ PreparedCall_Authorization,
13
+ PreparedCall_UserOpV060,
14
+ PreparedCall_UserOpV070,
9
15
  TypeAddress,
10
16
  TypeBase64UrlEncodedString,
11
17
  TypeCreationOptions,
12
- TypeEip7702AuthExtendedFields,
13
18
  TypeHex,
14
19
  TypeSerializedInitcode,
15
- TypeSignatureRequest,
16
- TypeUserOperationRequest_v6,
17
- TypeUserOperationRequest_v7,
20
+ TypeTypedDataSignatureRequest,
18
21
  TypeUuid,
19
- TypeSignatureType,
20
22
  } from "../schemas.js";
21
23
  import { Examples } from "./examples.js";
22
- import { Eip7702AuthCapability } from "../capabilities/eip7702Auth.js";
23
24
 
24
25
  export const wallet_sendPreparedCalls = Type.Object(
25
26
  {
26
27
  Request: Type.Object({
27
28
  method: Type.Literal("wallet_sendPreparedCalls"),
28
29
  params: Type.Tuple([
29
- Type.Object({
30
- type: Type.Union([
31
- Type.Literal("user-operation-v060", {
32
- title: "User Operation (Entrypoint v0.6.0)",
33
- }),
34
- Type.Literal("user-operation-v070", {
35
- title: "User Operation (Entrypoint v0.7.0)",
36
- }),
37
- ]),
38
- data: Type.Union([
39
- Type.Omit(TypeUserOperationRequest_v6, ["signature"], {
40
- title: "Unsigned User Operation (Entrypoint v0.6.0)",
41
- }),
42
- Type.Omit(TypeUserOperationRequest_v7, ["signature"], {
43
- title: "Unsigned User Operation (Entrypoint v0.7.0)",
44
- }),
30
+ Type.Intersect([
31
+ Type.Union([
32
+ TypeCallArray,
33
+ TypePrepareCall_UserOpV060_Signed,
34
+ TypePrepareCall_UserOpV070_Signed,
45
35
  ]),
46
- chainId: TypeHex(),
47
- signature: Type.Object({
48
- type: Type.Exclude(TypeSignatureType, Type.Literal("contract")),
49
- signature: TypeHex(),
36
+ Type.Object({
37
+ capabilities: Type.Optional(
38
+ Type.Object({
39
+ permissions: Type.Optional(
40
+ Type.Union([PermissionsContext, RemotePermission]),
41
+ ),
42
+ }),
43
+ ),
50
44
  }),
51
- signedAuthorization: Type.Optional(TypeEip7702AuthExtendedFields),
52
- capabilities: Type.Optional(
53
- Type.Object({
54
- permissions: Type.Optional(
55
- Type.Union([PermissionsContext, RemotePermission]),
56
- ),
57
- }),
58
- ),
59
- }),
45
+ ]),
60
46
  ]),
61
47
  }),
62
48
  ReturnType: Type.Object({
@@ -89,26 +75,23 @@ export const wallet_prepareCalls = Type.Object(
89
75
  }),
90
76
  ]),
91
77
  }),
92
- ReturnType: Type.Object({
93
- type: Type.Union([
94
- Type.Literal("user-operation-v060", {
95
- title: "User Operation (Entrypoint v0.6.0)",
96
- }),
97
- Type.Literal("user-operation-v070", {
98
- title: "User Operation (Entrypoint v0.7.0)",
99
- }),
100
- ]),
101
- data: Type.Union([
102
- Type.Omit(TypeUserOperationRequest_v6, ["signature"], {
103
- title: "Unsigned User Operation (Entrypoint v0.6.0)",
104
- }),
105
- Type.Omit(TypeUserOperationRequest_v7, ["signature"], {
106
- title: "Unsigned User Operation (Entrypoint v0.7.0)",
107
- }),
108
- ]),
109
- chainId: TypeHex(),
110
- signatureRequest: TypeSignatureRequest,
111
- }),
78
+ ReturnType: Type.Union([
79
+ Type.Object(
80
+ {
81
+ type: Type.Literal("array"),
82
+ data: Type.Array(
83
+ Type.Union([
84
+ PreparedCall_UserOpV060,
85
+ PreparedCall_UserOpV070,
86
+ PreparedCall_Authorization,
87
+ ]),
88
+ ),
89
+ },
90
+ { description: "Array of prepared calls" },
91
+ ),
92
+ PreparedCall_UserOpV060,
93
+ PreparedCall_UserOpV070,
94
+ ]),
112
95
  },
113
96
  {
114
97
  description:
@@ -133,7 +116,7 @@ export const wallet_requestAccount = Type.Object(
133
116
  ),
134
117
  },
135
118
  {
136
- title: "Using signer address",
119
+ description: "Using signer address",
137
120
  },
138
121
  ),
139
122
  Type.Object(
@@ -144,7 +127,7 @@ export const wallet_requestAccount = Type.Object(
144
127
  ),
145
128
  },
146
129
  {
147
- title: "Using smart contract account address",
130
+ description: "Using smart contract account address",
148
131
  },
149
132
  ),
150
133
  ]),
@@ -229,18 +212,13 @@ export const wallet_createSession = Type.Object(
229
212
  PermissionsData,
230
213
  Type.Object({
231
214
  account: TypeAddress,
232
- capabilities: Type.Optional(
233
- Type.Object({
234
- eip7702Auth: Type.Optional(Eip7702AuthCapability),
235
- }),
236
- ),
237
215
  }),
238
216
  ]),
239
217
  ]),
240
218
  }),
241
219
  ReturnType: Type.Object({
242
220
  sessionId: TypeHex(),
243
- signatureRequest: TypeSignatureRequest,
221
+ signatureRequest: TypeTypedDataSignatureRequest,
244
222
  }),
245
223
  },
246
224
  {
package/src/rpc/schema.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { type Static, type StaticDecode } from "@sinclair/typebox";
1
+ import { type Static } from "@sinclair/typebox";
2
2
  import { RpcSchema } from "ox";
3
3
  import * as Requests from "./request.js";
4
4
 
5
5
  export const WalletServerRpcSchema = RpcSchema.from<
6
6
  | Static<typeof Requests.wallet_prepareCalls>
7
- | StaticDecode<typeof Requests.wallet_sendPreparedCalls>
7
+ | Static<typeof Requests.wallet_sendPreparedCalls>
8
8
  | Static<typeof Requests.wallet_createAccount>
9
9
  | Static<typeof Requests.wallet_requestAccount>
10
10
  | Static<typeof Requests.wallet_listAccounts>