@account-kit/wallet-client 0.1.0-alpha.2 → 0.1.0-alpha.3
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/capabilities/index.d.ts +5 -2
- package/dist/esm/capabilities/index.js +1 -1
- package/dist/esm/capabilities/index.js.map +1 -1
- package/dist/esm/capabilities/overrides.js +8 -8
- package/dist/esm/capabilities/overrides.js.map +1 -1
- package/dist/esm/capabilities/permissions/index.d.ts +10 -3
- package/dist/esm/capabilities/permissions/index.js +11 -2
- package/dist/esm/capabilities/permissions/index.js.map +1 -1
- package/dist/esm/capabilities/permissions/mav2.d.ts +2 -2
- package/dist/esm/capabilities/permissions/mav2.js +9 -1
- package/dist/esm/capabilities/permissions/mav2.js.map +1 -1
- package/dist/esm/client/actions/grantPermissions.d.ts +57 -3
- package/dist/esm/client/actions/grantPermissions.js +1 -0
- package/dist/esm/client/actions/grantPermissions.js.map +1 -1
- package/dist/esm/client/actions/requestAccount.js +2 -2
- package/dist/esm/client/actions/requestAccount.js.map +1 -1
- package/dist/esm/client/actions/signSignatureRequest.d.ts +4 -1
- package/dist/esm/client/actions/signSignatureRequest.js +22 -1
- package/dist/esm/client/actions/signSignatureRequest.js.map +1 -1
- package/dist/esm/client/client.e2e-test.js +13 -19
- package/dist/esm/client/client.e2e-test.js.map +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/isomorphic/actions/createSession.js +25 -7
- package/dist/esm/isomorphic/actions/createSession.js.map +1 -1
- package/dist/esm/isomorphic/actions/prepareCalls.js +35 -12
- package/dist/esm/isomorphic/actions/prepareCalls.js.map +1 -1
- package/dist/esm/isomorphic/actions/sendPreparedCalls.js +26 -6
- package/dist/esm/isomorphic/actions/sendPreparedCalls.js.map +1 -1
- package/dist/esm/isomorphic/client.d.ts +11 -5
- package/dist/esm/isomorphic/utils/7702.d.ts +11 -0
- package/dist/esm/isomorphic/utils/7702.js +26 -0
- package/dist/esm/isomorphic/utils/7702.js.map +1 -0
- package/dist/esm/isomorphic/utils/createAccount.d.ts +2 -1
- package/dist/esm/isomorphic/utils/createAccount.js +30 -5
- 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/parsePermissionsContext.d.ts +2 -1
- package/dist/esm/isomorphic/utils/parsePermissionsContext.js +17 -5
- package/dist/esm/isomorphic/utils/parsePermissionsContext.js.map +1 -1
- package/dist/esm/local/client.js +2 -1
- package/dist/esm/local/client.js.map +1 -1
- package/dist/esm/remote/client.js +6 -2
- package/dist/esm/remote/client.js.map +1 -1
- package/dist/esm/rpc/examples.d.ts +230 -0
- package/dist/esm/rpc/examples.js +314 -0
- package/dist/esm/rpc/examples.js.map +1 -0
- package/dist/esm/rpc/request.d.ts +48 -17
- package/dist/esm/rpc/request.js +53 -14
- package/dist/esm/rpc/request.js.map +1 -1
- package/dist/esm/rpc/schema.d.ts +42 -11
- package/dist/esm/schemas.d.ts +29 -7
- package/dist/esm/schemas.js +120 -38
- package/dist/esm/schemas.js.map +1 -1
- package/dist/types/capabilities/index.d.ts +5 -2
- package/dist/types/capabilities/index.d.ts.map +1 -1
- package/dist/types/capabilities/overrides.d.ts.map +1 -1
- package/dist/types/capabilities/permissions/index.d.ts +10 -3
- package/dist/types/capabilities/permissions/index.d.ts.map +1 -1
- package/dist/types/capabilities/permissions/mav2.d.ts +2 -2
- package/dist/types/capabilities/permissions/mav2.d.ts.map +1 -1
- package/dist/types/client/actions/grantPermissions.d.ts +57 -3
- package/dist/types/client/actions/grantPermissions.d.ts.map +1 -1
- package/dist/types/client/actions/requestAccount.d.ts.map +1 -1
- package/dist/types/client/actions/signSignatureRequest.d.ts +4 -1
- package/dist/types/client/actions/signSignatureRequest.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/createSession.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/prepareCalls.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts.map +1 -1
- package/dist/types/isomorphic/client.d.ts +11 -5
- package/dist/types/isomorphic/client.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/7702.d.ts +12 -0
- package/dist/types/isomorphic/utils/7702.d.ts.map +1 -0
- package/dist/types/isomorphic/utils/createAccount.d.ts +2 -1
- 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/parsePermissionsContext.d.ts +2 -1
- package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts.map +1 -1
- package/dist/types/remote/client.d.ts.map +1 -1
- package/dist/types/rpc/examples.d.ts +231 -0
- package/dist/types/rpc/examples.d.ts.map +1 -0
- package/dist/types/rpc/request.d.ts +48 -17
- package/dist/types/rpc/request.d.ts.map +1 -1
- package/dist/types/rpc/schema.d.ts +42 -11
- package/dist/types/rpc/schema.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +29 -7
- package/dist/types/schemas.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/capabilities/index.ts +5 -8
- package/src/capabilities/overrides.ts +23 -8
- package/src/capabilities/permissions/index.ts +21 -5
- package/src/capabilities/permissions/mav2.ts +12 -2
- package/src/client/actions/grantPermissions.ts +57 -3
- package/src/client/actions/requestAccount.ts +2 -3
- package/src/client/actions/signSignatureRequest.ts +31 -3
- package/src/client/client.e2e-test.ts +14 -21
- package/src/client/index.ts +1 -1
- package/src/isomorphic/actions/createSession.ts +28 -7
- package/src/isomorphic/actions/prepareCalls.ts +38 -11
- package/src/isomorphic/actions/sendPreparedCalls.ts +47 -20
- package/src/isomorphic/utils/7702.ts +58 -0
- package/src/isomorphic/utils/createAccount.ts +38 -6
- package/src/isomorphic/utils/createDummySigner.ts +3 -2
- package/src/isomorphic/utils/parsePermissionsContext.ts +23 -7
- package/src/local/client.ts +2 -3
- package/src/remote/client.ts +12 -2
- package/src/rpc/examples.ts +343 -0
- package/src/rpc/request.ts +75 -26
- package/src/schemas.ts +218 -87
|
@@ -4,6 +4,9 @@ export declare const WalletServerRpcSchema: {
|
|
|
4
4
|
capabilities?: {
|
|
5
5
|
permissions?: {
|
|
6
6
|
context: `0x${string}`;
|
|
7
|
+
} | {
|
|
8
|
+
signature: `0x${string}`;
|
|
9
|
+
sessionId: `0x${string}`;
|
|
7
10
|
} | undefined;
|
|
8
11
|
paymasterService?: {
|
|
9
12
|
policyId: string;
|
|
@@ -43,7 +46,7 @@ export declare const WalletServerRpcSchema: {
|
|
|
43
46
|
method: "wallet_prepareCalls";
|
|
44
47
|
};
|
|
45
48
|
ReturnType: {
|
|
46
|
-
type: "user-operation-
|
|
49
|
+
type: "user-operation-v070" | "user-operation-v060";
|
|
47
50
|
chainId: `0x${string}`;
|
|
48
51
|
data: {
|
|
49
52
|
sender: `0x${string}`;
|
|
@@ -72,7 +75,7 @@ export declare const WalletServerRpcSchema: {
|
|
|
72
75
|
maxFeePerGas: `0x${string}`;
|
|
73
76
|
maxPriorityFeePerGas: `0x${string}`;
|
|
74
77
|
};
|
|
75
|
-
signatureRequest: {
|
|
78
|
+
signatureRequest: ({
|
|
76
79
|
type: "personal_sign";
|
|
77
80
|
data: string | {
|
|
78
81
|
raw: `0x${string}`;
|
|
@@ -81,8 +84,8 @@ export declare const WalletServerRpcSchema: {
|
|
|
81
84
|
type: "eth_signTypedData_v4";
|
|
82
85
|
data: {
|
|
83
86
|
domain?: {
|
|
84
|
-
salt?: `0x${string}` | undefined;
|
|
85
87
|
chainId?: number | undefined;
|
|
88
|
+
salt?: `0x${string}` | undefined;
|
|
86
89
|
name?: string | undefined;
|
|
87
90
|
verifyingContract?: `0x${string}` | undefined;
|
|
88
91
|
version?: string | undefined;
|
|
@@ -98,17 +101,34 @@ export declare const WalletServerRpcSchema: {
|
|
|
98
101
|
[x: string]: unknown;
|
|
99
102
|
};
|
|
100
103
|
};
|
|
104
|
+
}) & {
|
|
105
|
+
authorizationRequest?: {
|
|
106
|
+
nonce: number;
|
|
107
|
+
chainId: number;
|
|
108
|
+
address: `0x${string}`;
|
|
109
|
+
} | undefined;
|
|
101
110
|
};
|
|
102
111
|
};
|
|
103
112
|
} | {
|
|
104
113
|
Request: {
|
|
105
114
|
params: [{
|
|
115
|
+
signedAuthorization?: {
|
|
116
|
+
nonce: `0x${string}`;
|
|
117
|
+
chainId: `0x${string}`;
|
|
118
|
+
address: `0x${string}`;
|
|
119
|
+
r: `0x${string}`;
|
|
120
|
+
s: `0x${string}`;
|
|
121
|
+
yParity: `0x${string}`;
|
|
122
|
+
} | undefined;
|
|
106
123
|
capabilities?: {
|
|
107
|
-
permissions
|
|
124
|
+
permissions?: {
|
|
108
125
|
context: `0x${string}`;
|
|
109
|
-
}
|
|
126
|
+
} | {
|
|
127
|
+
signature: `0x${string}`;
|
|
128
|
+
sessionId: `0x${string}`;
|
|
129
|
+
} | undefined;
|
|
110
130
|
} | undefined;
|
|
111
|
-
type: "user-operation-
|
|
131
|
+
type: "user-operation-v070" | "user-operation-v060";
|
|
112
132
|
signature: {
|
|
113
133
|
type: "ecdsa";
|
|
114
134
|
signature: `0x${string}`;
|
|
@@ -154,6 +174,8 @@ export declare const WalletServerRpcSchema: {
|
|
|
154
174
|
creationOptions?: {
|
|
155
175
|
salt?: `0x${string}` | undefined;
|
|
156
176
|
accountType?: "sma-b" | undefined;
|
|
177
|
+
} | {
|
|
178
|
+
accountType: "7702";
|
|
157
179
|
} | undefined;
|
|
158
180
|
signerAddress: `0x${string}`;
|
|
159
181
|
}];
|
|
@@ -170,6 +192,8 @@ export declare const WalletServerRpcSchema: {
|
|
|
170
192
|
creationHint?: {
|
|
171
193
|
salt?: `0x${string}` | undefined;
|
|
172
194
|
accountType?: "sma-b" | undefined;
|
|
195
|
+
} | {
|
|
196
|
+
accountType: "7702";
|
|
173
197
|
} | undefined;
|
|
174
198
|
includeCounterfactualInfo?: boolean | undefined;
|
|
175
199
|
signerAddress: `0x${string}`;
|
|
@@ -185,6 +209,7 @@ export declare const WalletServerRpcSchema: {
|
|
|
185
209
|
factoryAddress: `0x${string}`;
|
|
186
210
|
factoryType: "unknown" | "LightAccountV2.0.0" | "LightAccountV1.1.0" | "LightAccountV1.0.2" | "LightAccountV1.0.1" | "MAv1.0.0-MultiOwner" | "LightAccountV2.0.0-MultiOwner" | "MAv1.0.0-MultiSig" | "MAv2.0.0-sma-b" | "MAv2.0.0-ma-ssv" | "MAv2.0.0-ma-webauthn";
|
|
187
211
|
} | undefined;
|
|
212
|
+
delegation?: `0x${string}` | undefined;
|
|
188
213
|
accountAddress: `0x${string}`;
|
|
189
214
|
id: string;
|
|
190
215
|
};
|
|
@@ -224,8 +249,8 @@ export declare const WalletServerRpcSchema: {
|
|
|
224
249
|
} | {
|
|
225
250
|
type: "erc20-token-transfer";
|
|
226
251
|
data: {
|
|
227
|
-
allowance: `0x${string}`;
|
|
228
252
|
address: `0x${string}`;
|
|
253
|
+
allowance: `0x${string}`;
|
|
229
254
|
};
|
|
230
255
|
} | {
|
|
231
256
|
type: "gas-limit";
|
|
@@ -264,7 +289,7 @@ export declare const WalletServerRpcSchema: {
|
|
|
264
289
|
};
|
|
265
290
|
ReturnType: {
|
|
266
291
|
sessionId: `0x${string}`;
|
|
267
|
-
signatureRequest: {
|
|
292
|
+
signatureRequest: ({
|
|
268
293
|
type: "personal_sign";
|
|
269
294
|
data: string | {
|
|
270
295
|
raw: `0x${string}`;
|
|
@@ -273,8 +298,8 @@ export declare const WalletServerRpcSchema: {
|
|
|
273
298
|
type: "eth_signTypedData_v4";
|
|
274
299
|
data: {
|
|
275
300
|
domain?: {
|
|
276
|
-
salt?: `0x${string}` | undefined;
|
|
277
301
|
chainId?: number | undefined;
|
|
302
|
+
salt?: `0x${string}` | undefined;
|
|
278
303
|
name?: string | undefined;
|
|
279
304
|
verifyingContract?: `0x${string}` | undefined;
|
|
280
305
|
version?: string | undefined;
|
|
@@ -290,6 +315,12 @@ export declare const WalletServerRpcSchema: {
|
|
|
290
315
|
[x: string]: unknown;
|
|
291
316
|
};
|
|
292
317
|
};
|
|
318
|
+
}) & {
|
|
319
|
+
authorizationRequest?: {
|
|
320
|
+
nonce: number;
|
|
321
|
+
chainId: number;
|
|
322
|
+
address: `0x${string}`;
|
|
323
|
+
} | undefined;
|
|
293
324
|
};
|
|
294
325
|
};
|
|
295
326
|
} | {
|
|
@@ -301,8 +332,8 @@ export declare const WalletServerRpcSchema: {
|
|
|
301
332
|
receipts?: {
|
|
302
333
|
status: `0x${string}`;
|
|
303
334
|
logs: {
|
|
304
|
-
data: `0x${string}`;
|
|
305
335
|
address: `0x${string}`;
|
|
336
|
+
data: `0x${string}`;
|
|
306
337
|
topics: `0x${string}`[];
|
|
307
338
|
}[];
|
|
308
339
|
blockHash: `0x${string}`;
|
|
@@ -313,7 +344,7 @@ export declare const WalletServerRpcSchema: {
|
|
|
313
344
|
chainId: `0x${string}`;
|
|
314
345
|
id: `0x${string}`;
|
|
315
346
|
atomic: boolean;
|
|
316
|
-
status:
|
|
347
|
+
status: 200 | 100 | 400 | 500 | 600;
|
|
317
348
|
};
|
|
318
349
|
};
|
|
319
350
|
export type WalletServerRpcSchemaType = typeof WalletServerRpcSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/rpc/schema.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/rpc/schema.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ/B,CAAC;AAEJ,MAAM,MAAM,yBAAyB,GAAG,OAAO,qBAAqB,CAAC;AAErE,KAAK,qBAAqB,GAAG;KAC1B,CAAC,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG;QACrD,MAAM,EAAE,CAAC,CAAC;QACV,UAAU,EAAE,OAAO,CACjB,yBAAyB,CAAC,SAAS,CAAC,EACpC;YAAE,MAAM,EAAE,CAAC,CAAA;SAAE,CACd,CAAC,QAAQ,CAAC,CAAC;QACZ,UAAU,EAAE,OAAO,CACjB,yBAAyB,EACzB;YAAE,OAAO,EAAE;gBAAE,MAAM,EAAE,CAAC,CAAA;aAAE,CAAA;SAAE,CAC3B,CAAC,YAAY,CAAC,CAAC;KACjB;CACF,CAAC;AAGF,MAAM,MAAM,yBAAyB,GAAG;IACtC,qBAAqB,CAAC,sBAAsB,CAAC;IAC7C,qBAAqB,CAAC,uBAAuB,CAAC;IAC9C,qBAAqB,CAAC,qBAAqB,CAAC;IAC5C,qBAAqB,CAAC,qBAAqB,CAAC;IAC5C,qBAAqB,CAAC,0BAA0B,CAAC;IACjD,qBAAqB,CAAC,uBAAuB,CAAC;IAC9C,qBAAqB,CAAC,sBAAsB,CAAC;CAC9C,CAAC"}
|
package/dist/types/schemas.d.ts
CHANGED
|
@@ -35,6 +35,19 @@ export declare const TypeUserOperationRequest_v7: import("@sinclair/typebox").TO
|
|
|
35
35
|
paymasterPostOpGasLimit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">>;
|
|
36
36
|
signature: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
37
37
|
}>;
|
|
38
|
+
export declare const TypeEip7702AuthRequest: import("@sinclair/typebox").TObject<{
|
|
39
|
+
chainId: import("@sinclair/typebox").TInteger;
|
|
40
|
+
address: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
41
|
+
nonce: import("@sinclair/typebox").TInteger;
|
|
42
|
+
}>;
|
|
43
|
+
export declare const TypeEip7702AuthExtendedFields: import("@sinclair/typebox").TObject<{
|
|
44
|
+
chainId: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
45
|
+
nonce: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
46
|
+
address: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
47
|
+
r: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
48
|
+
s: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
49
|
+
yParity: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
50
|
+
}>;
|
|
38
51
|
export declare const TypeWebAuthnPublicKey: import("@sinclair/typebox").TObject<{
|
|
39
52
|
x: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, bigint>;
|
|
40
53
|
y: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, bigint>;
|
|
@@ -123,12 +136,15 @@ export declare const TypeCounterfactualInfo: import("@sinclair/typebox").TInters
|
|
|
123
136
|
}>]>]>]>;
|
|
124
137
|
}>]>, import("@sinclair/typebox").TObject<{
|
|
125
138
|
type: import("@sinclair/typebox").TLiteral<"7702">;
|
|
139
|
+
implementationAddress: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
126
140
|
}>]>]>;
|
|
127
141
|
export type TypeCounterfactualInfo = Static<typeof TypeCounterfactualInfo>;
|
|
128
|
-
export declare const TypeCreationOptions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
142
|
+
export declare const TypeCreationOptions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
129
143
|
accountType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<"sma-b">>;
|
|
130
144
|
salt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">>;
|
|
131
|
-
}
|
|
145
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
146
|
+
accountType: import("@sinclair/typebox").TLiteral<"7702">;
|
|
147
|
+
}>]>>;
|
|
132
148
|
export type TypeCreationOptions = Static<typeof TypeCreationOptions>;
|
|
133
149
|
export type TypeAccountType = Exclude<Static<typeof TypeCreationOptions>, undefined>["accountType"];
|
|
134
150
|
export declare const KeySigner: import("@sinclair/typebox").TObject<{
|
|
@@ -138,7 +154,7 @@ export declare const KeySigner: import("@sinclair/typebox").TObject<{
|
|
|
138
154
|
export type KeySigner = Static<typeof KeySigner>;
|
|
139
155
|
export declare const TTypedDataDefinition: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TObject<{
|
|
140
156
|
domain: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
141
|
-
chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").
|
|
157
|
+
chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
142
158
|
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
143
159
|
salt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">>;
|
|
144
160
|
verifyingContract: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">>;
|
|
@@ -152,8 +168,8 @@ export declare const TTypedDataDefinition: import("@sinclair/typebox").TTransfor
|
|
|
152
168
|
message: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>;
|
|
153
169
|
}>, {
|
|
154
170
|
domain?: {
|
|
155
|
-
salt?: `0x${string}` | undefined;
|
|
156
171
|
chainId?: number | undefined;
|
|
172
|
+
salt?: `0x${string}` | undefined;
|
|
157
173
|
name?: string | undefined;
|
|
158
174
|
verifyingContract?: `0x${string}` | undefined;
|
|
159
175
|
version?: string | undefined;
|
|
@@ -169,7 +185,7 @@ export declare const TTypedDataDefinition: import("@sinclair/typebox").TTransfor
|
|
|
169
185
|
[x: string]: unknown;
|
|
170
186
|
};
|
|
171
187
|
}>;
|
|
172
|
-
export declare const TypeSignatureRequest: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
188
|
+
export declare const TypeSignatureRequest: import("@sinclair/typebox").TIntersect<[import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
173
189
|
type: import("@sinclair/typebox").TLiteral<"personal_sign">;
|
|
174
190
|
data: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
|
|
175
191
|
raw: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
@@ -178,7 +194,7 @@ export declare const TypeSignatureRequest: import("@sinclair/typebox").TUnion<[i
|
|
|
178
194
|
type: import("@sinclair/typebox").TLiteral<"eth_signTypedData_v4">;
|
|
179
195
|
data: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TObject<{
|
|
180
196
|
domain: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
181
|
-
chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").
|
|
197
|
+
chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
182
198
|
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
183
199
|
salt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">>;
|
|
184
200
|
verifyingContract: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">>;
|
|
@@ -192,8 +208,8 @@ export declare const TypeSignatureRequest: import("@sinclair/typebox").TUnion<[i
|
|
|
192
208
|
message: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>;
|
|
193
209
|
}>, {
|
|
194
210
|
domain?: {
|
|
195
|
-
salt?: `0x${string}` | undefined;
|
|
196
211
|
chainId?: number | undefined;
|
|
212
|
+
salt?: `0x${string}` | undefined;
|
|
197
213
|
name?: string | undefined;
|
|
198
214
|
verifyingContract?: `0x${string}` | undefined;
|
|
199
215
|
version?: string | undefined;
|
|
@@ -209,6 +225,12 @@ export declare const TypeSignatureRequest: import("@sinclair/typebox").TUnion<[i
|
|
|
209
225
|
[x: string]: unknown;
|
|
210
226
|
};
|
|
211
227
|
}>;
|
|
228
|
+
}>]>, import("@sinclair/typebox").TObject<{
|
|
229
|
+
authorizationRequest: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
230
|
+
chainId: import("@sinclair/typebox").TInteger;
|
|
231
|
+
address: import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">;
|
|
232
|
+
nonce: import("@sinclair/typebox").TInteger;
|
|
233
|
+
}>>;
|
|
212
234
|
}>]>;
|
|
213
235
|
export declare const TypeCallId: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TTemplateLiteralSyntax<"0x${string}">, {
|
|
214
236
|
chainId: `0x${string}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,mBAAmB,CAAC;AAU3B,eAAO,MAAM,OAAO,GAAI,UAAU,aAAa,
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,mBAAmB,CAAC;AAU3B,eAAO,MAAM,OAAO,GAAI,UAAU,aAAa,sEAG3C,CAAC;AAEL,eAAO,MAAM,WAAW,mEAA0C,CAAC;AAEnE,eAAO,MAAM,QAAQ,qCAEnB,CAAC;AAEH,eAAO,MAAM,0BAA0B,qCAErC,CAAC;AAGH,eAAO,MAAM,QAAQ,qFAEa,CAAC;AAEnC,eAAO,MAAM,OAAO,qFAEc,CAAC;AAEnC,eAAO,MAAM,2BAA2B;;;;;;;;;;;;EA0BtC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;EAgBtC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;EAOxC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyFhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;EA4BjC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0BjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,eAAO,MAAM,mBAAmB;;;;;KA0B/B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,OAAO,CACnC,MAAM,CAAC,OAAO,mBAAmB,CAAC,EAClC,SAAS,CACV,CAAC,aAAa,CAAC,CAAC;AAEjB,eAAO,MAAM,SAAS;;;EAMpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AAEjD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4C7B,CAAC;AA4BL,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAK/B,CAAC;AAEH,eAAO,MAAM,UAAU;;;EAUnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@account-kit/wallet-client",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.1.0-alpha.
|
|
5
|
+
"version": "0.1.0-alpha.3",
|
|
6
6
|
"main": "./dist/esm/exports/index.js",
|
|
7
7
|
"module": "./dist/esm/exports/index.js",
|
|
8
8
|
"types": "./dist/types/exports/index.d.ts",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"access": "public",
|
|
71
71
|
"registry": "https://registry.npmjs.org/"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "017c20b3777d96b1b4ab6f01385725aa2689416a"
|
|
74
74
|
}
|
|
@@ -3,11 +3,8 @@ import { GasParamsOverrideCapability } from "./overrides.js";
|
|
|
3
3
|
import { PaymasterCapability } from "./paymaster.js";
|
|
4
4
|
import { PermissionsCapability } from "./permissions/index.js";
|
|
5
5
|
|
|
6
|
-
export const Capabilities = Type.Object(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
-
{ minProperties: 1 },
|
|
13
|
-
);
|
|
6
|
+
export const Capabilities = Type.Object({
|
|
7
|
+
permissions: Type.Optional(PermissionsCapability),
|
|
8
|
+
paymasterService: Type.Optional(PaymasterCapability),
|
|
9
|
+
gasParamsOverride: Type.Optional(GasParamsOverrideCapability),
|
|
10
|
+
});
|
|
@@ -1,20 +1,35 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { TypeHex } from "../schemas.js";
|
|
3
3
|
|
|
4
|
-
export const Mutliplier = Type.Object(
|
|
4
|
+
export const Mutliplier = Type.Object(
|
|
5
|
+
{ multiplier: Type.Number() },
|
|
6
|
+
{ title: "Multiplier" },
|
|
7
|
+
);
|
|
5
8
|
|
|
6
9
|
// This is still being defined in https://github.com/ethereum/ERCs/pull/947/files#diff-dab085f963ca621595044bcbc0922705aa38b69f5bf8770dcb3d0496a633efcfR158
|
|
7
10
|
export const GasParamsOverrideCapability = Type.Object(
|
|
8
11
|
{
|
|
9
|
-
preVerificationGas: Type.Optional(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
preVerificationGas: Type.Optional(
|
|
13
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
14
|
+
),
|
|
15
|
+
verificationGasLimit: Type.Optional(
|
|
16
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
17
|
+
),
|
|
18
|
+
callGasLimit: Type.Optional(
|
|
19
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
20
|
+
),
|
|
12
21
|
paymasterVerificationGasLimit: Type.Optional(
|
|
13
|
-
Type.Union([TypeHex(), Mutliplier]),
|
|
22
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
23
|
+
),
|
|
24
|
+
paymasterPostOpGasLimit: Type.Optional(
|
|
25
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
26
|
+
),
|
|
27
|
+
maxFeePerGas: Type.Optional(
|
|
28
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
29
|
+
),
|
|
30
|
+
maxPriorityFeePerGas: Type.Optional(
|
|
31
|
+
Type.Union([TypeHex({ title: "Absolute" }), Mutliplier]),
|
|
14
32
|
),
|
|
15
|
-
paymasterPostOpGasLimit: Type.Optional(Type.Union([TypeHex(), Mutliplier])),
|
|
16
|
-
maxFeePerGas: Type.Optional(Type.Union([TypeHex(), Mutliplier])),
|
|
17
|
-
maxPriorityFeePerGas: Type.Optional(Type.Union([TypeHex(), Mutliplier])),
|
|
18
33
|
},
|
|
19
34
|
{ minProperties: 1 },
|
|
20
35
|
);
|
|
@@ -24,7 +24,7 @@ const Permission = <
|
|
|
24
24
|
type: Type.Literal(typeEnum),
|
|
25
25
|
data,
|
|
26
26
|
},
|
|
27
|
-
{ description },
|
|
27
|
+
{ description, title: `${typeString}` },
|
|
28
28
|
),
|
|
29
29
|
)
|
|
30
30
|
.Decode((value) => ({
|
|
@@ -124,19 +124,35 @@ export const TypePermission = Type.Union([
|
|
|
124
124
|
|
|
125
125
|
export const PermissionsArray = Type.Array(TypePermission, { minItems: 1 });
|
|
126
126
|
|
|
127
|
-
export const PermissionsContext = Type.Object(
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
export const PermissionsContext = Type.Object(
|
|
128
|
+
{
|
|
129
|
+
context: TypeHex(),
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
title: "Permissions context",
|
|
133
|
+
},
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
export const RemotePermission = Type.Object(
|
|
137
|
+
{
|
|
138
|
+
sessionId: TypeHex(),
|
|
139
|
+
signature: TypeHex(),
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
title: "Remote permission",
|
|
143
|
+
},
|
|
144
|
+
);
|
|
130
145
|
|
|
131
146
|
export const PermissionsData = Type.Object({
|
|
132
147
|
chainId: TypeHex(),
|
|
133
|
-
expiry: Type.Optional(Type.
|
|
148
|
+
expiry: Type.Optional(Type.Integer()),
|
|
134
149
|
key: KeySigner,
|
|
135
150
|
permissions: PermissionsArray,
|
|
136
151
|
});
|
|
137
152
|
|
|
138
153
|
export const PermissionsCapability = Type.Union([
|
|
139
154
|
PermissionsContext,
|
|
155
|
+
RemotePermission,
|
|
140
156
|
// TODO: support permissions object here instead of only context-encoded permissions
|
|
141
157
|
// PermissionsData,
|
|
142
158
|
]);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PermissionType } from "@account-kit/smart-contracts/experimental";
|
|
2
2
|
import type { Static } from "@sinclair/typebox";
|
|
3
3
|
import { concatHex, sliceHex, type Hex } from "viem";
|
|
4
|
-
import type { PermissionsData } from "./index.ts";
|
|
5
4
|
import type { KeySigner } from "../../schemas.ts";
|
|
6
5
|
import { assertNever } from "../../utils.js";
|
|
6
|
+
import type { PermissionsCapability, PermissionsData } from "./index.ts";
|
|
7
7
|
|
|
8
8
|
export const SESSION_ID_LENGTH_BYTES = 16;
|
|
9
9
|
export const ENTITY_ID_LENGTH_BYTES = 4;
|
|
@@ -69,8 +69,18 @@ export const encodePermissionsContext = (
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
export const decodePermissionsContext = (
|
|
72
|
-
|
|
72
|
+
capability: Static<typeof PermissionsCapability>,
|
|
73
73
|
): DecodedPermissionsContext => {
|
|
74
|
+
if (!("context" in capability)) {
|
|
75
|
+
return {
|
|
76
|
+
contextVersion: "REMOTE_MODE_DEFERRED_ACTION",
|
|
77
|
+
sessionId: capability.sessionId,
|
|
78
|
+
signature: capability.signature,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const input = capability.context;
|
|
83
|
+
|
|
74
84
|
const contextVersion = sliceHex(input, 0, 1) as ContextVersionHex;
|
|
75
85
|
switch (contextVersion) {
|
|
76
86
|
case "0x00": {
|
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
import type { InnerWalletApiClient } from "../../types.ts";
|
|
9
9
|
import type { SmartAccountSigner } from "@aa-sdk/core";
|
|
10
10
|
import type { CreateSessionParams } from "../../isomorphic/actions/createSession.ts";
|
|
11
|
+
import { TypeEip7702AuthExtendedFields } from "../../schemas.js";
|
|
12
|
+
import type { Static } from "@sinclair/typebox";
|
|
11
13
|
|
|
12
14
|
export type GrantPermissionsParams<
|
|
13
15
|
TAccount extends JsonRpcAccount<Address> | undefined =
|
|
@@ -20,6 +22,7 @@ export type GrantPermissionsParams<
|
|
|
20
22
|
|
|
21
23
|
export type GrantPermissionsResult = {
|
|
22
24
|
context: Hex;
|
|
25
|
+
signedAuthorization?: Static<typeof TypeEip7702AuthExtendedFields>;
|
|
23
26
|
};
|
|
24
27
|
|
|
25
28
|
/**
|
|
@@ -37,6 +40,7 @@ export type GrantPermissionsResult = {
|
|
|
37
40
|
* @param {Array} params.permissions - Array of permission objects defining what the session key can do
|
|
38
41
|
* @returns {Promise<GrantPermissionsResult>} A Promise that resolves to the result containing a context identifier
|
|
39
42
|
* @returns {Hex} result.context - A hex identifier for the granted permissions context
|
|
43
|
+
* @returns {Static<typeof TypeEip7702AuthExtendedFields>} result.signedAuthorization - The EIP-7702 authorization fields, if applicable
|
|
40
44
|
*
|
|
41
45
|
* @example
|
|
42
46
|
* // Create a session key and grant root permissions
|
|
@@ -54,7 +58,7 @@ export type GrantPermissionsResult = {
|
|
|
54
58
|
* });
|
|
55
59
|
*
|
|
56
60
|
* // Use the permissions to prepare a call
|
|
57
|
-
* const
|
|
61
|
+
* const preparedCall = await client.prepareCalls({
|
|
58
62
|
* calls: [{ to: zeroAddress, value: "0x0" }],
|
|
59
63
|
* from: account.address,
|
|
60
64
|
* capabilities: {
|
|
@@ -68,17 +72,67 @@ export type GrantPermissionsResult = {
|
|
|
68
72
|
* // Sign with the session key
|
|
69
73
|
* const signature = await signSignatureRequest(
|
|
70
74
|
* sessionKey,
|
|
71
|
-
*
|
|
75
|
+
* preparedCall.signatureRequest,
|
|
72
76
|
* );
|
|
73
77
|
*
|
|
74
78
|
* // Send the prepared call using the session key
|
|
75
79
|
* const result = await client.sendPreparedCalls({
|
|
76
|
-
* ...
|
|
80
|
+
* ...preparedCall,
|
|
77
81
|
* signature,
|
|
78
82
|
* capabilities: {
|
|
79
83
|
* permissions,
|
|
80
84
|
* },
|
|
81
85
|
* });
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* // Create a session key and grant root permissions using a 7702 account
|
|
89
|
+
* const sessionKey = LocalAccountSigner.generatePrivateKeySigner();
|
|
90
|
+
* const account = await client.requestAccount({
|
|
91
|
+
* creationHint: {
|
|
92
|
+
* accountType: "7702",
|
|
93
|
+
* }
|
|
94
|
+
* });
|
|
95
|
+
*
|
|
96
|
+
* const permissions = await client.grantPermissions({
|
|
97
|
+
* account: account.address,
|
|
98
|
+
* expiry: Math.floor(Date.now() / 1000) + 60 * 60, // 1 hour from now
|
|
99
|
+
* key: {
|
|
100
|
+
* publicKey: await sessionKey.getAddress(),
|
|
101
|
+
* type: "secp256k1",
|
|
102
|
+
* },
|
|
103
|
+
* permissions: [{ type: "root" }],
|
|
104
|
+
* });
|
|
105
|
+
*
|
|
106
|
+
* // Use the permissions to prepare a call
|
|
107
|
+
* const preparedCall = await client.prepareCalls({
|
|
108
|
+
* calls: [{ to: zeroAddress, value: "0x0" }],
|
|
109
|
+
* from: account.address,
|
|
110
|
+
* capabilities: {
|
|
111
|
+
* paymasterService: {
|
|
112
|
+
* policyId: "your-paymaster-policy-id",
|
|
113
|
+
* },
|
|
114
|
+
* permissions,
|
|
115
|
+
* },
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* // Sign with the session key
|
|
119
|
+
* // If the 7702 account delegation is not yet installed, the result
|
|
120
|
+
* // here will include a `signedAuthorization` field that that
|
|
121
|
+
* // must be included when sending the account's first call.
|
|
122
|
+
* const { signedAuthorization, ...signature} = await signSignatureRequest(
|
|
123
|
+
* sessionKey,
|
|
124
|
+
* preparedCall.signatureRequest,
|
|
125
|
+
* );
|
|
126
|
+
*
|
|
127
|
+
* // Send the prepared call using the session key
|
|
128
|
+
* const result = await client.sendPreparedCalls({
|
|
129
|
+
* ...preparedCall,
|
|
130
|
+
* signature,
|
|
131
|
+
* signedAuthorization,
|
|
132
|
+
* capabilities: {
|
|
133
|
+
* permissions,
|
|
134
|
+
* },
|
|
135
|
+
* });
|
|
82
136
|
*/
|
|
83
137
|
export async function grantPermissions<
|
|
84
138
|
TAccount extends JsonRpcAccount<Address> | undefined =
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
import type { Static } from "@sinclair/typebox";
|
|
6
6
|
import { Value } from "@sinclair/typebox/value";
|
|
7
7
|
import type { Address } from "abitype";
|
|
8
|
-
import deepEqual from "deep-equal";
|
|
9
8
|
import { custom, type IsUndefined, type JsonRpcAccount } from "viem";
|
|
10
9
|
import { createAccount } from "../../isomorphic/utils/createAccount.js";
|
|
11
10
|
import type { wallet_requestAccount } from "../../rpc/request.js";
|
|
12
11
|
import { TypeSerializedInitcode } from "../../schemas.js";
|
|
13
12
|
import type { InnerWalletApiClient } from "../../types.js";
|
|
13
|
+
import deepEqual from "deep-equal";
|
|
14
14
|
|
|
15
15
|
export type RequestAccountParams<
|
|
16
16
|
TAccount extends JsonRpcAccount<Address> | undefined =
|
|
@@ -27,7 +27,6 @@ export type RequestAccountParams<
|
|
|
27
27
|
> & { accountAddress?: Address }
|
|
28
28
|
: never;
|
|
29
29
|
|
|
30
|
-
// TODO: this could be more specific potentially :shrug:
|
|
31
30
|
export type RequestAccountResult = SmartContractAccount;
|
|
32
31
|
|
|
33
32
|
/**
|
|
@@ -90,7 +89,7 @@ export async function requestAccount(
|
|
|
90
89
|
});
|
|
91
90
|
|
|
92
91
|
const account = await createAccount({
|
|
93
|
-
accountAddress
|
|
92
|
+
accountAddress,
|
|
94
93
|
counterfactualInfo: Value.Parse(
|
|
95
94
|
TypeSerializedInitcode,
|
|
96
95
|
counterfactualInfo!,
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import type { SmartAccountSigner } from "@aa-sdk/core";
|
|
2
2
|
import type { Static } from "@sinclair/typebox";
|
|
3
|
-
import { type Hex } from "viem";
|
|
3
|
+
import { type Hex, toHex } from "viem";
|
|
4
4
|
import { TypeSignatureRequest } from "../../schemas.js";
|
|
5
5
|
import { assertNever } from "../../utils.js";
|
|
6
|
+
import type { Eip7702ExtendedFields } from "@aa-sdk/core";
|
|
6
7
|
|
|
7
8
|
export type SignSignatureRequestParams = Static<typeof TypeSignatureRequest>;
|
|
8
9
|
|
|
9
10
|
export type SignSignatureRequestResult = {
|
|
10
11
|
type: "ecdsa";
|
|
11
12
|
signature: Hex;
|
|
13
|
+
signedAuthorization?: Eip7702ExtendedFields["eip7702Auth"];
|
|
12
14
|
};
|
|
13
15
|
|
|
14
16
|
/**
|
|
@@ -17,11 +19,12 @@ export type SignSignatureRequestResult = {
|
|
|
17
19
|
*
|
|
18
20
|
* @param {SmartAccountSigner} signer - The signer to use for signing the request
|
|
19
21
|
* @param {SignSignatureRequestParams} params - The signature request parameters
|
|
20
|
-
* @param {string} params.type - The type of signature request ('personal_sign' or '
|
|
22
|
+
* @param {string} params.type - The type of signature request ('personal_sign', 'eth_signTypedData_v4', or 'signature_with_authorization')
|
|
21
23
|
* @param {any} params.data - The data to sign, format depends on the signature type
|
|
22
24
|
* @returns {Promise<SignSignatureRequestResult>} A Promise that resolves to the signature result
|
|
23
25
|
* @returns {string} result.type - The signature type (currently only 'ecdsa' is supported)
|
|
24
26
|
* @returns {Hex} result.signature - The hex-encoded signature
|
|
27
|
+
* @returns {Eip7702ExtendedFields["eip7702Auth"]} result.signedAuthorization - The signed EIP-7702 authorization, if applicable
|
|
25
28
|
*
|
|
26
29
|
* @example
|
|
27
30
|
* // Sign a personal message
|
|
@@ -58,8 +61,33 @@ export async function signSignatureRequest(
|
|
|
58
61
|
? await signer.signTypedData(params.data)
|
|
59
62
|
: assertNever(params, "Unexpected signature request type");
|
|
60
63
|
|
|
64
|
+
if (!params.authorizationRequest) {
|
|
65
|
+
return {
|
|
66
|
+
type: "ecdsa" as const,
|
|
67
|
+
signature,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (!signer.signAuthorization) {
|
|
72
|
+
throw new Error("Signer does not implement signAuthorization");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const authSig = await signer.signAuthorization(params.authorizationRequest);
|
|
76
|
+
const { r, s } = authSig;
|
|
77
|
+
const yParity = toHex(authSig.yParity ?? authSig.v - 27n);
|
|
78
|
+
|
|
79
|
+
const signedAuthorization = {
|
|
80
|
+
chainId: toHex(params.authorizationRequest.chainId),
|
|
81
|
+
nonce: toHex(params.authorizationRequest.nonce),
|
|
82
|
+
address: params.authorizationRequest.address,
|
|
83
|
+
r,
|
|
84
|
+
s,
|
|
85
|
+
yParity,
|
|
86
|
+
};
|
|
87
|
+
|
|
61
88
|
return {
|
|
62
|
-
type: "ecdsa",
|
|
89
|
+
type: "ecdsa" as const,
|
|
63
90
|
signature,
|
|
91
|
+
signedAuthorization,
|
|
64
92
|
};
|
|
65
93
|
}
|