@account-kit/wallet-client 0.1.0-alpha.2 → 0.1.0-alpha.4

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 (119) hide show
  1. package/dist/esm/capabilities/index.d.ts +5 -2
  2. package/dist/esm/capabilities/index.js +1 -1
  3. package/dist/esm/capabilities/index.js.map +1 -1
  4. package/dist/esm/capabilities/overrides.js +8 -8
  5. package/dist/esm/capabilities/overrides.js.map +1 -1
  6. package/dist/esm/capabilities/permissions/index.d.ts +10 -3
  7. package/dist/esm/capabilities/permissions/index.js +11 -2
  8. package/dist/esm/capabilities/permissions/index.js.map +1 -1
  9. package/dist/esm/capabilities/permissions/mav2.d.ts +2 -2
  10. package/dist/esm/capabilities/permissions/mav2.js +9 -1
  11. package/dist/esm/capabilities/permissions/mav2.js.map +1 -1
  12. package/dist/esm/client/actions/grantPermissions.d.ts +57 -3
  13. package/dist/esm/client/actions/grantPermissions.js +1 -0
  14. package/dist/esm/client/actions/grantPermissions.js.map +1 -1
  15. package/dist/esm/client/actions/requestAccount.js +2 -2
  16. package/dist/esm/client/actions/requestAccount.js.map +1 -1
  17. package/dist/esm/client/actions/signSignatureRequest.d.ts +4 -1
  18. package/dist/esm/client/actions/signSignatureRequest.js +22 -1
  19. package/dist/esm/client/actions/signSignatureRequest.js.map +1 -1
  20. package/dist/esm/client/client.e2e-test.js +13 -19
  21. package/dist/esm/client/client.e2e-test.js.map +1 -1
  22. package/dist/esm/client/index.d.ts +4 -3
  23. package/dist/esm/client/index.js +2 -2
  24. package/dist/esm/client/index.js.map +1 -1
  25. package/dist/esm/exports/index.d.ts +2 -2
  26. package/dist/esm/exports/index.js +1 -1
  27. package/dist/esm/exports/index.js.map +1 -1
  28. package/dist/esm/isomorphic/actions/createSession.js +25 -7
  29. package/dist/esm/isomorphic/actions/createSession.js.map +1 -1
  30. package/dist/esm/isomorphic/actions/prepareCalls.js +35 -12
  31. package/dist/esm/isomorphic/actions/prepareCalls.js.map +1 -1
  32. package/dist/esm/isomorphic/actions/sendPreparedCalls.js +26 -6
  33. package/dist/esm/isomorphic/actions/sendPreparedCalls.js.map +1 -1
  34. package/dist/esm/isomorphic/client.d.ts +11 -5
  35. package/dist/esm/isomorphic/utils/7702.d.ts +11 -0
  36. package/dist/esm/isomorphic/utils/7702.js +26 -0
  37. package/dist/esm/isomorphic/utils/7702.js.map +1 -0
  38. package/dist/esm/isomorphic/utils/createAccount.d.ts +2 -1
  39. package/dist/esm/isomorphic/utils/createAccount.js +30 -5
  40. package/dist/esm/isomorphic/utils/createAccount.js.map +1 -1
  41. package/dist/esm/isomorphic/utils/createDummySigner.js +3 -3
  42. package/dist/esm/isomorphic/utils/createDummySigner.js.map +1 -1
  43. package/dist/esm/isomorphic/utils/parsePermissionsContext.d.ts +2 -1
  44. package/dist/esm/isomorphic/utils/parsePermissionsContext.js +17 -5
  45. package/dist/esm/isomorphic/utils/parsePermissionsContext.js.map +1 -1
  46. package/dist/esm/local/client.js +2 -1
  47. package/dist/esm/local/client.js.map +1 -1
  48. package/dist/esm/remote/client.js +6 -2
  49. package/dist/esm/remote/client.js.map +1 -1
  50. package/dist/esm/rpc/examples.d.ts +230 -0
  51. package/dist/esm/rpc/examples.js +314 -0
  52. package/dist/esm/rpc/examples.js.map +1 -0
  53. package/dist/esm/rpc/request.d.ts +48 -17
  54. package/dist/esm/rpc/request.js +53 -14
  55. package/dist/esm/rpc/request.js.map +1 -1
  56. package/dist/esm/rpc/schema.d.ts +42 -11
  57. package/dist/esm/schemas.d.ts +29 -7
  58. package/dist/esm/schemas.js +120 -38
  59. package/dist/esm/schemas.js.map +1 -1
  60. package/dist/types/capabilities/index.d.ts +5 -2
  61. package/dist/types/capabilities/index.d.ts.map +1 -1
  62. package/dist/types/capabilities/overrides.d.ts.map +1 -1
  63. package/dist/types/capabilities/permissions/index.d.ts +10 -3
  64. package/dist/types/capabilities/permissions/index.d.ts.map +1 -1
  65. package/dist/types/capabilities/permissions/mav2.d.ts +2 -2
  66. package/dist/types/capabilities/permissions/mav2.d.ts.map +1 -1
  67. package/dist/types/client/actions/grantPermissions.d.ts +57 -3
  68. package/dist/types/client/actions/grantPermissions.d.ts.map +1 -1
  69. package/dist/types/client/actions/requestAccount.d.ts.map +1 -1
  70. package/dist/types/client/actions/signSignatureRequest.d.ts +4 -1
  71. package/dist/types/client/actions/signSignatureRequest.d.ts.map +1 -1
  72. package/dist/types/client/index.d.ts +4 -3
  73. package/dist/types/client/index.d.ts.map +1 -1
  74. package/dist/types/exports/index.d.ts +2 -2
  75. package/dist/types/exports/index.d.ts.map +1 -1
  76. package/dist/types/isomorphic/actions/createSession.d.ts.map +1 -1
  77. package/dist/types/isomorphic/actions/prepareCalls.d.ts.map +1 -1
  78. package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts.map +1 -1
  79. package/dist/types/isomorphic/client.d.ts +11 -5
  80. package/dist/types/isomorphic/client.d.ts.map +1 -1
  81. package/dist/types/isomorphic/utils/7702.d.ts +12 -0
  82. package/dist/types/isomorphic/utils/7702.d.ts.map +1 -0
  83. package/dist/types/isomorphic/utils/createAccount.d.ts +2 -1
  84. package/dist/types/isomorphic/utils/createAccount.d.ts.map +1 -1
  85. package/dist/types/isomorphic/utils/createDummySigner.d.ts.map +1 -1
  86. package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts +2 -1
  87. package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts.map +1 -1
  88. package/dist/types/remote/client.d.ts.map +1 -1
  89. package/dist/types/rpc/examples.d.ts +231 -0
  90. package/dist/types/rpc/examples.d.ts.map +1 -0
  91. package/dist/types/rpc/request.d.ts +48 -17
  92. package/dist/types/rpc/request.d.ts.map +1 -1
  93. package/dist/types/rpc/schema.d.ts +42 -11
  94. package/dist/types/rpc/schema.d.ts.map +1 -1
  95. package/dist/types/schemas.d.ts +29 -7
  96. package/dist/types/schemas.d.ts.map +1 -1
  97. package/package.json +2 -2
  98. package/src/capabilities/index.ts +5 -8
  99. package/src/capabilities/overrides.ts +23 -8
  100. package/src/capabilities/permissions/index.ts +21 -5
  101. package/src/capabilities/permissions/mav2.ts +12 -2
  102. package/src/client/actions/grantPermissions.ts +57 -3
  103. package/src/client/actions/requestAccount.ts +2 -3
  104. package/src/client/actions/signSignatureRequest.ts +31 -3
  105. package/src/client/client.e2e-test.ts +14 -21
  106. package/src/client/index.ts +12 -10
  107. package/src/exports/index.ts +2 -1
  108. package/src/isomorphic/actions/createSession.ts +28 -7
  109. package/src/isomorphic/actions/prepareCalls.ts +38 -11
  110. package/src/isomorphic/actions/sendPreparedCalls.ts +47 -20
  111. package/src/isomorphic/utils/7702.ts +58 -0
  112. package/src/isomorphic/utils/createAccount.ts +38 -6
  113. package/src/isomorphic/utils/createDummySigner.ts +3 -2
  114. package/src/isomorphic/utils/parsePermissionsContext.ts +23 -7
  115. package/src/local/client.ts +2 -3
  116. package/src/remote/client.ts +12 -2
  117. package/src/rpc/examples.ts +343 -0
  118. package/src/rpc/request.ts +75 -26
  119. 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-v060" | "user-operation-v070";
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-v060" | "user-operation-v070";
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: 100 | 200 | 400 | 500 | 600;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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"}
@@ -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").TNumber>;
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").TNumber>;
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,sEACD,CAAC;AAC/C,eAAO,MAAM,WAAW,mEAAsC,CAAC;AAC/D,eAAO,MAAM,QAAQ,qCAAkC,CAAC;AACxD,eAAO,MAAM,0BAA0B,qCAErC,CAAC;AAGH,eAAO,MAAM,QAAQ,qFAEa,CAAC;AAEnC,eAAO,MAAM,OAAO,qFAEc,CAAC;AAEnC,eAAO,MAAM,2BAA2B;;;;;;;;;;;;EAYtC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;EAgBtC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;EAgBjC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAejC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,eAAO,MAAM,mBAAmB;;;GAS/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;;;EAGpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AAEjD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4C7B,CAAC;AAEL,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAc/B,CAAC;AAEH,eAAO,MAAM,UAAU;;;EAUnB,CAAC"}
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.2",
5
+ "version": "0.1.0-alpha.4",
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": "435c18e58616f1f0706d6e4df6f23c7676062191"
73
+ "gitHead": "6c48e2daee9d8cc82ef179745d816994a359912d"
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
- permissions: Type.Optional(PermissionsCapability),
9
- paymasterService: Type.Optional(PaymasterCapability),
10
- gasParamsOverride: Type.Optional(GasParamsOverrideCapability),
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({ multiplier: Type.Number() });
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(Type.Union([TypeHex(), Mutliplier])),
10
- verificationGasLimit: Type.Optional(Type.Union([TypeHex(), Mutliplier])),
11
- callGasLimit: Type.Optional(Type.Union([TypeHex(), Mutliplier])),
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
- context: TypeHex(),
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.Number()),
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
- input: Hex,
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 preparedUO = await client.prepareCalls({
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
- * preparedUO.signatureRequest,
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
- * ...preparedUO,
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: 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 'eth_signTypedData_v4')
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
  }