@account-kit/smart-contracts 4.25.1 → 4.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/esm/src/ma-v2/account/common/modularAccountV2Base.js +29 -17
  2. package/dist/esm/src/ma-v2/account/common/modularAccountV2Base.js.map +1 -1
  3. package/dist/esm/src/ma-v2/account/nativeSMASigner.js +6 -2
  4. package/dist/esm/src/ma-v2/account/nativeSMASigner.js.map +1 -1
  5. package/dist/esm/src/ma-v2/modules/single-signer-validation/signer.js +6 -2
  6. package/dist/esm/src/ma-v2/modules/single-signer-validation/signer.js.map +1 -1
  7. package/dist/esm/src/ma-v2/permissionBuilder.js +8 -1
  8. package/dist/esm/src/ma-v2/permissionBuilder.js.map +1 -1
  9. package/dist/esm/src/ma-v2/permissionBuilderErrors.d.ts +22 -11
  10. package/dist/esm/src/ma-v2/permissionBuilderErrors.js +29 -11
  11. package/dist/esm/src/ma-v2/permissionBuilderErrors.js.map +1 -1
  12. package/dist/esm/src/ma-v2/utils.d.ts +2 -0
  13. package/dist/esm/src/ma-v2/utils.js +4 -1
  14. package/dist/esm/src/ma-v2/utils.js.map +1 -1
  15. package/dist/types/src/ma-v2/account/common/modularAccountV2Base.d.ts.map +1 -1
  16. package/dist/types/src/ma-v2/account/nativeSMASigner.d.ts.map +1 -1
  17. package/dist/types/src/ma-v2/modules/single-signer-validation/signer.d.ts.map +1 -1
  18. package/dist/types/src/ma-v2/permissionBuilder.d.ts.map +1 -1
  19. package/dist/types/src/ma-v2/permissionBuilderErrors.d.ts +22 -11
  20. package/dist/types/src/ma-v2/permissionBuilderErrors.d.ts.map +1 -1
  21. package/dist/types/src/ma-v2/utils.d.ts +2 -0
  22. package/dist/types/src/ma-v2/utils.d.ts.map +1 -1
  23. package/package.json +5 -5
  24. package/src/ma-v2/account/common/modularAccountV2Base.ts +29 -18
  25. package/src/ma-v2/account/nativeSMASigner.ts +7 -2
  26. package/src/ma-v2/modules/single-signer-validation/signer.ts +7 -2
  27. package/src/ma-v2/permissionBuilder.ts +9 -0
  28. package/src/ma-v2/permissionBuilderErrors.ts +26 -11
  29. package/src/ma-v2/utils.ts +8 -1
@@ -61,7 +61,7 @@ export const singleSignerMessageSigner = (
61
61
  },
62
62
 
63
63
  signUserOperationHash: async (uoHash: Hex): Promise<Hex> => {
64
- const sig = await signer
64
+ let sig = await signer
65
65
  .signMessage({ raw: uoHash })
66
66
  .then((signature: Hex) =>
67
67
  packUOSignature({
@@ -70,7 +70,12 @@ export const singleSignerMessageSigner = (
70
70
  })
71
71
  );
72
72
 
73
- return deferredActionData ? concatHex([deferredActionData, sig]) : sig;
73
+ if (deferredActionData) {
74
+ sig = concatHex([deferredActionData, sig]);
75
+ deferredActionData = undefined;
76
+ }
77
+
78
+ return sig;
74
79
  },
75
80
 
76
81
  // we apply the expected 1271 packing here since the account contract will expect it
@@ -32,6 +32,7 @@ import {
32
32
  MultipleNativeTokenTransferError,
33
33
  NoFunctionsProvidedError,
34
34
  RootPermissionOnlyError,
35
+ SelectorNotAllowed,
35
36
  UnsupportedPermissionTypeError,
36
37
  ValidationConfigUnsetError,
37
38
  ZeroAddressError,
@@ -318,6 +319,14 @@ export class PermissionBuilder {
318
319
  if (permission.data.functions.length === 0) {
319
320
  throw new NoFunctionsProvidedError(permission);
320
321
  }
322
+ // Explicitly disallow adding execute & executeBatch
323
+ if (permission.data.functions.includes(ACCOUNT_EXECUTE_SELECTOR)) {
324
+ throw new SelectorNotAllowed("execute");
325
+ } else if (
326
+ permission.data.functions.includes(ACCOUNT_EXECUTEBATCH_SELECTOR)
327
+ ) {
328
+ throw new SelectorNotAllowed("executeBatch");
329
+ }
321
330
  this.selectors = [...this.selectors, ...permission.data.functions];
322
331
  }
323
332
 
@@ -1,7 +1,9 @@
1
1
  import { BaseError, type Address } from "@aa-sdk/core";
2
2
  import type { Permission } from "./permissionBuilder";
3
3
 
4
- export class RootPermissionOnlyError extends BaseError {
4
+ export abstract class PermissionBuilderError extends BaseError {}
5
+
6
+ export class RootPermissionOnlyError extends PermissionBuilderError {
5
7
  override name = "PermissionBuilder: RootPermissionOnlyError";
6
8
 
7
9
  /**
@@ -14,7 +16,7 @@ export class RootPermissionOnlyError extends BaseError {
14
16
  }
15
17
  }
16
18
 
17
- export class AccountAddressAsTargetError extends BaseError {
19
+ export class AccountAddressAsTargetError extends PermissionBuilderError {
18
20
  override name = "PermissionBuilder: AccountAddressAsTargetError";
19
21
 
20
22
  /**
@@ -29,7 +31,7 @@ export class AccountAddressAsTargetError extends BaseError {
29
31
  }
30
32
  }
31
33
 
32
- export class DuplicateTargetAddressError extends BaseError {
34
+ export class DuplicateTargetAddressError extends PermissionBuilderError {
33
35
  override name = "PermissionBuilder: DuplicateTargetAddressError";
34
36
 
35
37
  /**
@@ -45,7 +47,7 @@ export class DuplicateTargetAddressError extends BaseError {
45
47
  }
46
48
  }
47
49
 
48
- export class NoFunctionsProvidedError extends BaseError {
50
+ export class NoFunctionsProvidedError extends PermissionBuilderError {
49
51
  override name = "PermissionBuilder: NoFunctionsProvidedError";
50
52
 
51
53
  /**
@@ -58,7 +60,7 @@ export class NoFunctionsProvidedError extends BaseError {
58
60
  }
59
61
  }
60
62
 
61
- export class ExpiredDeadlineError extends BaseError {
63
+ export class ExpiredDeadlineError extends PermissionBuilderError {
62
64
  override name = "PermissionBuilder: ExpiredDeadlineError";
63
65
 
64
66
  /**
@@ -74,7 +76,7 @@ export class ExpiredDeadlineError extends BaseError {
74
76
  }
75
77
  }
76
78
 
77
- export class DeadlineOverLimitError extends BaseError {
79
+ export class DeadlineOverLimitError extends PermissionBuilderError {
78
80
  override name = "PermissionBuilder: DeadlineOverLimitError";
79
81
 
80
82
  /**
@@ -89,7 +91,7 @@ export class DeadlineOverLimitError extends BaseError {
89
91
  }
90
92
  }
91
93
 
92
- export class ValidationConfigUnsetError extends BaseError {
94
+ export class ValidationConfigUnsetError extends PermissionBuilderError {
93
95
  override name = "PermissionBuilder: ValidationConfigUnsetError";
94
96
 
95
97
  /**
@@ -100,7 +102,7 @@ export class ValidationConfigUnsetError extends BaseError {
100
102
  }
101
103
  }
102
104
 
103
- export class MultipleNativeTokenTransferError extends BaseError {
105
+ export class MultipleNativeTokenTransferError extends PermissionBuilderError {
104
106
  override name = "PermissionBuilder: MultipleNativeTokenTransferError";
105
107
 
106
108
  /**
@@ -115,7 +117,7 @@ export class MultipleNativeTokenTransferError extends BaseError {
115
117
  }
116
118
  }
117
119
 
118
- export class ZeroAddressError extends BaseError {
120
+ export class ZeroAddressError extends PermissionBuilderError {
119
121
  override name = "PermissionBuilder: ZeroAddressError";
120
122
 
121
123
  /**
@@ -128,7 +130,7 @@ export class ZeroAddressError extends BaseError {
128
130
  }
129
131
  }
130
132
 
131
- export class MultipleGasLimitError extends BaseError {
133
+ export class MultipleGasLimitError extends PermissionBuilderError {
132
134
  override name = "PermissionBuilder: MultipleGasLimitError";
133
135
 
134
136
  /**
@@ -141,7 +143,7 @@ export class MultipleGasLimitError extends BaseError {
141
143
  }
142
144
  }
143
145
 
144
- export class UnsupportedPermissionTypeError extends BaseError {
146
+ export class UnsupportedPermissionTypeError extends PermissionBuilderError {
145
147
  override name = "PermissionBuilder: UnsupportedPermissionTypeError";
146
148
 
147
149
  /**
@@ -151,3 +153,16 @@ export class UnsupportedPermissionTypeError extends BaseError {
151
153
  super(`Unsupported permission type`);
152
154
  }
153
155
  }
156
+
157
+ export class SelectorNotAllowed extends PermissionBuilderError {
158
+ override name = "SelectorNotAllowed";
159
+
160
+ /**
161
+ * Constructor for initializing an error message indicating that the selector being added is not allowed.
162
+ *
163
+ * @param {string} functionName The function name of the selector that is being added.
164
+ */
165
+ constructor(functionName: string) {
166
+ super(`Cannot add ${functionName} on the account`);
167
+ }
168
+ }
@@ -10,6 +10,7 @@ import {
10
10
  parseAbi,
11
11
  size,
12
12
  concatHex,
13
+ hexToNumber,
13
14
  } from "viem";
14
15
  import {
15
16
  arbitrum,
@@ -270,13 +271,19 @@ export const buildFullNonceKey = ({
270
271
  export const parseDeferredAction = (
271
272
  deferredAction: Hex
272
273
  ): {
274
+ entityId: number;
275
+ isGlobalValidation: boolean;
273
276
  nonce: bigint;
274
277
  deferredActionData: Hex;
275
278
  hasAssociatedExecHooks: boolean;
276
279
  } => {
280
+ // 2 for 0x, 2 for 00/01, 38 for parallel nonce, 8 for entity id, 2 for options byte, 16 for parallel nonce
277
281
  return {
282
+ entityId: hexToNumber(`0x${deferredAction.slice(42, 50)}`),
283
+ isGlobalValidation:
284
+ hexToNumber(`0x${deferredAction.slice(50, 52)}`) % 2 === 1,
278
285
  nonce: BigInt(`0x${deferredAction.slice(4, 68)}`),
279
- deferredActionData: `0x${deferredAction.slice(68)}`,
286
+ deferredActionData: `0x${deferredAction.slice(68)}` as `0x${string}`,
280
287
  hasAssociatedExecHooks: deferredAction[3] === "1",
281
288
  };
282
289
  };