@deserialize/multi-vm-wallet 1.2.441 → 1.3.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 (98) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/SMART_WALLET_GUIDE.md +746 -0
  3. package/SMART_WALLET_IMPLEMENTATION.md +460 -0
  4. package/dist/IChainWallet.d.ts +3 -3
  5. package/dist/IChainWallet.js +5 -0
  6. package/dist/IChainWallet.js.map +1 -1
  7. package/dist/evm/SMART_WALLET_EXAMPLES.d.ts +20 -0
  8. package/dist/evm/SMART_WALLET_EXAMPLES.js +451 -0
  9. package/dist/evm/SMART_WALLET_EXAMPLES.js.map +1 -0
  10. package/dist/evm/aa-service/index.d.ts +16 -0
  11. package/dist/evm/aa-service/index.js +69 -0
  12. package/dist/evm/aa-service/index.js.map +1 -0
  13. package/dist/evm/aa-service/lib/account-adapter.d.ts +26 -0
  14. package/dist/evm/aa-service/lib/account-adapter.js +53 -0
  15. package/dist/evm/aa-service/lib/account-adapter.js.map +1 -0
  16. package/dist/evm/aa-service/lib/kernel-account.d.ts +91 -0
  17. package/dist/evm/aa-service/lib/kernel-account.js +251 -0
  18. package/dist/evm/aa-service/lib/kernel-account.js.map +1 -0
  19. package/dist/evm/aa-service/lib/kernel-modules.d.ts +240 -0
  20. package/dist/evm/aa-service/lib/kernel-modules.js +409 -0
  21. package/dist/evm/aa-service/lib/kernel-modules.js.map +1 -0
  22. package/dist/evm/aa-service/lib/session-keys.d.ts +170 -0
  23. package/dist/evm/aa-service/lib/session-keys.js +297 -0
  24. package/dist/evm/aa-service/lib/session-keys.js.map +1 -0
  25. package/dist/evm/aa-service/lib/type.d.ts +167 -0
  26. package/dist/evm/aa-service/lib/type.js +43 -0
  27. package/dist/evm/aa-service/lib/type.js.map +1 -0
  28. package/dist/evm/aa-service/services/account-abstraction.d.ts +614 -0
  29. package/dist/evm/aa-service/services/account-abstraction.js +754 -0
  30. package/dist/evm/aa-service/services/account-abstraction.js.map +1 -0
  31. package/dist/evm/aa-service/services/bundler.d.ts +29 -0
  32. package/dist/evm/aa-service/services/bundler.js +168 -0
  33. package/dist/evm/aa-service/services/bundler.js.map +1 -0
  34. package/dist/evm/evm.d.ts +67 -3
  35. package/dist/evm/evm.js +212 -7
  36. package/dist/evm/evm.js.map +1 -1
  37. package/dist/evm/index.d.ts +1 -0
  38. package/dist/evm/index.js +3 -0
  39. package/dist/evm/index.js.map +1 -1
  40. package/dist/evm/smartWallet.d.ts +265 -0
  41. package/dist/evm/smartWallet.js +675 -0
  42. package/dist/evm/smartWallet.js.map +1 -0
  43. package/dist/evm/smartWallet.types.d.ts +10 -0
  44. package/dist/evm/smartWallet.types.js +16 -0
  45. package/dist/evm/smartWallet.types.js.map +1 -0
  46. package/dist/evm/transaction.utils.d.ts +10 -10
  47. package/dist/evm/transaction.utils.js +12 -8
  48. package/dist/evm/transaction.utils.js.map +1 -1
  49. package/dist/evm/transactionParsing.js +77 -1
  50. package/dist/evm/transactionParsing.js.map +1 -1
  51. package/dist/helpers/index.d.ts +1 -0
  52. package/dist/helpers/index.js +15 -0
  53. package/dist/helpers/index.js.map +1 -1
  54. package/dist/helpers/routeScan.d.ts +191 -0
  55. package/dist/helpers/routeScan.js +114 -0
  56. package/dist/helpers/routeScan.js.map +1 -0
  57. package/dist/index.d.ts +0 -2
  58. package/dist/index.js +0 -2
  59. package/dist/index.js.map +1 -1
  60. package/dist/svm/svm.d.ts +4 -3
  61. package/dist/svm/svm.js +29 -18
  62. package/dist/svm/svm.js.map +1 -1
  63. package/dist/svm/transactionSender.js +2 -2
  64. package/dist/svm/transactionSender.js.map +1 -1
  65. package/dist/svm/utils.d.ts +4 -3
  66. package/dist/svm/utils.js +19 -6
  67. package/dist/svm/utils.js.map +1 -1
  68. package/dist/test.js +7 -0
  69. package/dist/test.js.map +1 -1
  70. package/dist/types.d.ts +19 -2
  71. package/dist/types.js.map +1 -1
  72. package/dist/vm.js +9 -7
  73. package/dist/vm.js.map +1 -1
  74. package/package.json +2 -2
  75. package/tsconfig.json +4 -3
  76. package/utils/IChainWallet.ts +3 -3
  77. package/utils/evm/SMART_WALLET_EXAMPLES.ts.bak +591 -0
  78. package/utils/evm/aa-service/index.ts +85 -0
  79. package/utils/evm/aa-service/lib/account-adapter.ts +60 -0
  80. package/utils/evm/aa-service/lib/kernel-account.ts +367 -0
  81. package/utils/evm/aa-service/lib/kernel-modules.ts +598 -0
  82. package/utils/evm/aa-service/lib/session-keys.ts +389 -0
  83. package/utils/evm/aa-service/lib/type.ts +236 -0
  84. package/utils/evm/aa-service/services/account-abstraction.ts +1015 -0
  85. package/utils/evm/aa-service/services/bundler.ts +217 -0
  86. package/utils/evm/evm.ts +268 -11
  87. package/utils/evm/index.ts +5 -1
  88. package/utils/evm/smartWallet.ts +797 -0
  89. package/utils/evm/smartWallet.types.ts +33 -0
  90. package/utils/evm/transaction.utils.ts +12 -10
  91. package/utils/evm/transactionParsing.ts +100 -14
  92. package/utils/helpers/index.ts +1 -0
  93. package/utils/helpers/routeScan.ts +397 -0
  94. package/utils/index.ts +0 -2
  95. package/utils/svm/svm.ts +50 -9
  96. package/utils/svm/utils.ts +52 -7
  97. package/utils/test.ts +7 -0
  98. package/utils/types.ts +24 -2
@@ -0,0 +1,409 @@
1
+ "use strict";
2
+ /**
3
+ * Kernel Module Management
4
+ *
5
+ * Handles installation and management of ERC-7579 modules for Kernel v3 accounts:
6
+ * - Validators: Session keys, multi-sig, passkeys
7
+ * - Executors: Additional execution logic
8
+ * - Hooks: Pre/post execution hooks
9
+ * - Fallbacks: Handle unknown function calls
10
+ *
11
+ * ERC-7579 Module Types:
12
+ * 1 = Validator
13
+ * 2 = Executor
14
+ * 3 = Fallback
15
+ * 4 = Hook
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.MODULE_TYPE_IDS = void 0;
19
+ exports.prepareInstallModule = prepareInstallModule;
20
+ exports.installModule = installModule;
21
+ exports.prepareUninstallModule = prepareUninstallModule;
22
+ exports.uninstallModule = uninstallModule;
23
+ exports.isModuleInstalled = isModuleInstalled;
24
+ exports.prepareInstallSessionKey = prepareInstallSessionKey;
25
+ exports.createSessionKey = createSessionKey;
26
+ exports.prepareRevokeSessionKey = prepareRevokeSessionKey;
27
+ exports.revokeSessionKey = revokeSessionKey;
28
+ exports.prepareInstallMultiSigValidator = prepareInstallMultiSigValidator;
29
+ exports.installMultiSigValidator = installMultiSigValidator;
30
+ const viem_1 = require("viem");
31
+ exports.MODULE_TYPE_IDS = {
32
+ validator: 1,
33
+ executor: 2,
34
+ fallback: 3,
35
+ hook: 4
36
+ };
37
+ /**
38
+ * Prepare installModule call (for batching)
39
+ *
40
+ * Returns a Call object that can be batched with other operations.
41
+ * Use this when you want to install multiple modules in one transaction.
42
+ *
43
+ * @example
44
+ * // Batch install multiple modules
45
+ * const calls = [
46
+ * prepareInstallModule({ account, moduleType: 'validator', moduleAddress: '0x...' }),
47
+ * prepareInstallModule({ account, moduleType: 'hook', moduleAddress: '0x...' })
48
+ * ];
49
+ * await aaService.sendBatchTransaction({ account, calls });
50
+ */
51
+ function prepareInstallModule(config) {
52
+ const { account, moduleType, moduleAddress, initData = '0x' } = config;
53
+ // Get the module type ID according to ERC-7579
54
+ const moduleTypeId = exports.MODULE_TYPE_IDS[moduleType];
55
+ // Encode the installModule call
56
+ // function installModule(uint256 moduleTypeId, address module, bytes calldata initData)
57
+ const calldata = (0, viem_1.encodePacked)(['bytes4', 'uint256', 'address', 'bytes'], [
58
+ '0x8f6e1e8e', // installModule selector
59
+ BigInt(moduleTypeId),
60
+ moduleAddress,
61
+ initData
62
+ ]);
63
+ return {
64
+ to: account.address,
65
+ data: calldata
66
+ };
67
+ }
68
+ /**
69
+ * Install a module on a Kernel account (execute immediately)
70
+ *
71
+ * This uses the ERC-7579 standard installModule function.
72
+ * For batching multiple modules, use prepareInstallModule instead.
73
+ *
74
+ * @example
75
+ * // Install a single module
76
+ * const userOpHash = await installModule({
77
+ * account,
78
+ * bundlerManager,
79
+ * moduleType: 'validator',
80
+ * moduleAddress: SESSION_KEY_VALIDATOR_ADDRESS,
81
+ * initData: encodedPermissions
82
+ * });
83
+ */
84
+ async function installModule(config) {
85
+ const { account, bundlerManager, moduleType, moduleAddress, initData = '0x' } = config;
86
+ const bundlerClient = bundlerManager.getClient(account.chain);
87
+ console.log(`Installing ${moduleType} module at ${moduleAddress}...`);
88
+ // Use prepareInstallModule to get the call
89
+ const call = prepareInstallModule({
90
+ account,
91
+ moduleType,
92
+ moduleAddress,
93
+ initData
94
+ });
95
+ // Execute immediately
96
+ const userOpHash = await bundlerClient.sendUserOperation({
97
+ account: account.account,
98
+ calls: [call]
99
+ });
100
+ console.log(`✅ Module installation submitted: ${userOpHash}`);
101
+ return userOpHash;
102
+ }
103
+ /**
104
+ * Prepare uninstallModule call (for batching)
105
+ *
106
+ * Returns a Call object that can be batched with other operations.
107
+ *
108
+ * @example
109
+ * // Batch uninstall multiple modules
110
+ * const calls = [
111
+ * prepareUninstallModule({ account, moduleType: 'validator', moduleAddress: '0x...' }),
112
+ * prepareUninstallModule({ account, moduleType: 'hook', moduleAddress: '0x...' })
113
+ * ];
114
+ * await aaService.sendBatchTransaction({ account, calls });
115
+ */
116
+ function prepareUninstallModule(config) {
117
+ const { account, moduleType, moduleAddress, deInitData = '0x' } = config;
118
+ const moduleTypeId = exports.MODULE_TYPE_IDS[moduleType];
119
+ // Encode the uninstallModule call
120
+ // function uninstallModule(uint256 moduleTypeId, address module, bytes calldata deInitData)
121
+ const calldata = (0, viem_1.encodePacked)(['bytes4', 'uint256', 'address', 'bytes'], [
122
+ '0xbf8a8dc4', // uninstallModule selector
123
+ BigInt(moduleTypeId),
124
+ moduleAddress,
125
+ deInitData
126
+ ]);
127
+ return {
128
+ to: account.address,
129
+ data: calldata
130
+ };
131
+ }
132
+ /**
133
+ * Uninstall a module from a Kernel account (execute immediately)
134
+ *
135
+ * For batching multiple uninstalls, use prepareUninstallModule instead.
136
+ *
137
+ * @example
138
+ * // Uninstall a single module
139
+ * const userOpHash = await uninstallModule({
140
+ * account,
141
+ * bundlerManager,
142
+ * moduleType: 'validator',
143
+ * moduleAddress: SESSION_KEY_VALIDATOR_ADDRESS
144
+ * });
145
+ */
146
+ async function uninstallModule(config) {
147
+ const { account, bundlerManager, moduleType, moduleAddress, deInitData = '0x' } = config;
148
+ const bundlerClient = bundlerManager.getClient(account.chain);
149
+ console.log(`Uninstalling ${moduleType} module at ${moduleAddress}...`);
150
+ // Use prepareUninstallModule to get the call
151
+ const call = prepareUninstallModule({
152
+ account,
153
+ moduleType,
154
+ moduleAddress,
155
+ deInitData
156
+ });
157
+ // Execute immediately
158
+ const userOpHash = await bundlerClient.sendUserOperation({
159
+ account: account.account,
160
+ calls: [call]
161
+ });
162
+ console.log(`✅ Module uninstallation submitted: ${userOpHash}`);
163
+ return userOpHash;
164
+ }
165
+ /**
166
+ * Check if a module is installed on an account
167
+ *
168
+ * @example
169
+ * const isInstalled = await isModuleInstalled({
170
+ * account,
171
+ * bundlerManager,
172
+ * moduleType: 'validator',
173
+ * moduleAddress: SESSION_KEY_VALIDATOR_ADDRESS
174
+ * });
175
+ */
176
+ async function isModuleInstalled(config) {
177
+ const { account, bundlerManager, moduleType, moduleAddress } = config;
178
+ const publicClient = bundlerManager.getClient(account.chain);
179
+ const moduleTypeId = exports.MODULE_TYPE_IDS[moduleType];
180
+ try {
181
+ // Call isModuleInstalled(uint256 moduleTypeId, address module)
182
+ const result = await publicClient.readContract({
183
+ address: account.address,
184
+ abi: (0, viem_1.parseAbi)([
185
+ 'function isModuleInstalled(uint256 moduleTypeId, address module, bytes calldata additionalContext) view returns (bool)'
186
+ ]),
187
+ functionName: 'isModuleInstalled',
188
+ args: [BigInt(moduleTypeId), moduleAddress, '0x']
189
+ });
190
+ return result;
191
+ }
192
+ catch (error) {
193
+ console.error('Error checking module installation:', error);
194
+ return false;
195
+ }
196
+ }
197
+ // ============================================
198
+ // Session Key Helpers
199
+ // ============================================
200
+ /**
201
+ * Prepare session key installation call (for batching)
202
+ *
203
+ * Returns a Call object that can be batched with other operations.
204
+ *
205
+ * @example
206
+ * // Batch install session key with other modules
207
+ * const calls = [
208
+ * prepareInstallSessionKey({ account, sessionKeyAddress, permissions }),
209
+ * prepareInstallModule({ account, moduleType: 'hook', moduleAddress: '0x...' })
210
+ * ];
211
+ * await aaService.sendBatchTransaction({ account, calls });
212
+ */
213
+ function prepareInstallSessionKey(config) {
214
+ const { account, sessionKeyAddress, permissions } = config;
215
+ // Encode session key permissions
216
+ const initData = encodeSessionKeyPermissions(sessionKeyAddress, permissions);
217
+ // Get session key validator address for your chain
218
+ const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
219
+ // Return the install module call
220
+ return prepareInstallModule({
221
+ account,
222
+ moduleType: 'validator',
223
+ moduleAddress: SESSION_KEY_VALIDATOR,
224
+ initData
225
+ });
226
+ }
227
+ /**
228
+ * Create and install a session key validator (execute immediately)
229
+ *
230
+ * Session keys allow delegated access with specific permissions.
231
+ * Perfect for automated operations like recurring payments.
232
+ *
233
+ * For batching with other operations, use prepareInstallSessionKey instead.
234
+ *
235
+ * @example
236
+ * // Install session key for monthly savings automation
237
+ * const sessionKey = privateKeyToAccount('0x...');
238
+ *
239
+ * await createSessionKey({
240
+ * account,
241
+ * bundlerManager,
242
+ * sessionKeyAddress: sessionKey.address,
243
+ * permissions: [{
244
+ * target: USDC_ADDRESS,
245
+ * functionSelector: '0xa9059cbb', // transfer(address,uint256)
246
+ * maxValuePerUse: parseUnits('100', 6), // Max 100 USDC per tx
247
+ * validUntil: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days
248
+ * maxUses: 1 // Once per month
249
+ * }]
250
+ * });
251
+ */
252
+ async function createSessionKey(config) {
253
+ const { account, bundlerManager, sessionKeyAddress, permissions } = config;
254
+ // Encode session key permissions
255
+ const initData = encodeSessionKeyPermissions(sessionKeyAddress, permissions);
256
+ // Get session key validator address for your chain
257
+ const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
258
+ // Install the session key validator with permissions
259
+ return installModule({
260
+ account,
261
+ bundlerManager,
262
+ moduleType: 'validator',
263
+ moduleAddress: SESSION_KEY_VALIDATOR,
264
+ initData
265
+ });
266
+ }
267
+ /**
268
+ * Prepare session key revocation call (for batching)
269
+ *
270
+ * Returns a Call object that can be batched with other operations.
271
+ *
272
+ * @example
273
+ * // Batch revoke multiple session keys
274
+ * const calls = [
275
+ * prepareRevokeSessionKey({ account, sessionKeyAddress: key1 }),
276
+ * prepareRevokeSessionKey({ account, sessionKeyAddress: key2 })
277
+ * ];
278
+ * await aaService.sendBatchTransaction({ account, calls });
279
+ */
280
+ function prepareRevokeSessionKey(config) {
281
+ const { account, sessionKeyAddress } = config;
282
+ const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
283
+ const deInitData = (0, viem_1.encodePacked)(['address'], [sessionKeyAddress]);
284
+ return prepareUninstallModule({
285
+ account,
286
+ moduleType: 'validator',
287
+ moduleAddress: SESSION_KEY_VALIDATOR,
288
+ deInitData
289
+ });
290
+ }
291
+ /**
292
+ * Revoke a session key (execute immediately)
293
+ *
294
+ * For batching with other operations, use prepareRevokeSessionKey instead.
295
+ */
296
+ async function revokeSessionKey(account, bundlerManager, sessionKeyAddress) {
297
+ const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
298
+ const deInitData = (0, viem_1.encodePacked)(['address'], [sessionKeyAddress]);
299
+ return uninstallModule({
300
+ account,
301
+ bundlerManager,
302
+ moduleType: 'validator',
303
+ moduleAddress: SESSION_KEY_VALIDATOR,
304
+ deInitData
305
+ });
306
+ }
307
+ // ============================================
308
+ // Helper Functions
309
+ // ============================================
310
+ function encodeSessionKeyPermissions(sessionKeyAddress, permissions) {
311
+ // This encoding depends on your session key validator implementation
312
+ // Example encoding for a simple permission structure:
313
+ const encodedPermissions = permissions.map(p => {
314
+ return (0, viem_1.encodePacked)(['address', 'uint256', 'bytes4', 'uint256', 'uint48', 'uint48', 'uint48'], [
315
+ p.target,
316
+ p.maxValuePerUse ?? 0n,
317
+ p.functionSelector ?? '0x00000000',
318
+ p.maxGasPerUse ?? 0n,
319
+ BigInt(p.validAfter ?? 0),
320
+ BigInt(p.validUntil ?? 0),
321
+ BigInt(p.maxUses ?? 0)
322
+ ]);
323
+ });
324
+ // Combine session key address with permissions
325
+ return (0, viem_1.encodePacked)(['address', 'uint256', 'bytes[]'], [
326
+ sessionKeyAddress,
327
+ BigInt(permissions.length),
328
+ encodedPermissions
329
+ ]);
330
+ }
331
+ function getSessionKeyValidatorAddress(chainId) {
332
+ // Known session key validator addresses per chain
333
+ // These would be pre-deployed or use a universal address
334
+ const addresses = {
335
+ 1: '0x0000000000000000000000000000000000000000', // Mainnet
336
+ 11155111: '0x0000000000000000000000000000000000000000', // Sepolia
337
+ // Add more chains as needed
338
+ };
339
+ const address = addresses[chainId];
340
+ if (!address) {
341
+ throw new Error(`Session key validator not available for chain ${chainId}`);
342
+ }
343
+ return address;
344
+ }
345
+ // ============================================
346
+ // Multi-Signature Module Helpers
347
+ // ============================================
348
+ /**
349
+ * Prepare multi-sig validator installation call (for batching)
350
+ *
351
+ * Returns a Call object that can be batched with other operations.
352
+ *
353
+ * @example
354
+ * // Batch install multi-sig with session key
355
+ * const calls = [
356
+ * prepareInstallMultiSigValidator({ account, owners, threshold: 2 }),
357
+ * prepareInstallSessionKey({ account, sessionKeyAddress, permissions })
358
+ * ];
359
+ * await aaService.sendBatchTransaction({ account, calls });
360
+ */
361
+ function prepareInstallMultiSigValidator(config) {
362
+ const { account, owners, threshold } = config;
363
+ const initData = (0, viem_1.encodePacked)(['address[]', 'uint256'], [owners, BigInt(threshold)]);
364
+ const MULTISIG_VALIDATOR = getMultiSigValidatorAddress(account.chain.id);
365
+ return prepareInstallModule({
366
+ account,
367
+ moduleType: 'validator',
368
+ moduleAddress: MULTISIG_VALIDATOR,
369
+ initData
370
+ });
371
+ }
372
+ /**
373
+ * Install a multi-signature validator (execute immediately)
374
+ *
375
+ * For batching with other operations, use prepareInstallMultiSigValidator instead.
376
+ *
377
+ * @example
378
+ * await installMultiSigValidator({
379
+ * account,
380
+ * bundlerManager,
381
+ * owners: [owner1, owner2, owner3],
382
+ * threshold: 2 // 2 of 3 signatures required
383
+ * });
384
+ */
385
+ async function installMultiSigValidator(config) {
386
+ const { account, bundlerManager, owners, threshold } = config;
387
+ const initData = (0, viem_1.encodePacked)(['address[]', 'uint256'], [owners, BigInt(threshold)]);
388
+ const MULTISIG_VALIDATOR = getMultiSigValidatorAddress(account.chain.id);
389
+ return installModule({
390
+ account,
391
+ bundlerManager,
392
+ moduleType: 'validator',
393
+ moduleAddress: MULTISIG_VALIDATOR,
394
+ initData
395
+ });
396
+ }
397
+ function getMultiSigValidatorAddress(chainId) {
398
+ // Known multi-sig validator addresses per chain
399
+ const addresses = {
400
+ 1: '0x0000000000000000000000000000000000000000',
401
+ 11155111: '0x0000000000000000000000000000000000000000',
402
+ };
403
+ const address = addresses[chainId];
404
+ if (!address) {
405
+ throw new Error(`Multi-sig validator not available for chain ${chainId}`);
406
+ }
407
+ return address;
408
+ }
409
+ //# sourceMappingURL=kernel-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-modules.js","sourceRoot":"","sources":["../../../../utils/evm/aa-service/lib/kernel-modules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * EIP-7702 Session Keys Utilities
3
+ *
4
+ * Utilities for creating and managing session keys with ZeroDev's permission system.
5
+ * This uses the NEW EIP-7702 pattern, not the legacy smart account pattern.
6
+ *
7
+ * Key differences from legacy pattern:
8
+ * - Uses `eip7702Account` instead of `address`
9
+ * - Uses `addressToEmptyAccount` for permission validator creation
10
+ * - Passes `sessionKeySigner` to `deserializePermissionAccount`
11
+ * - No sudo validator needed, only permission plugin
12
+ */
13
+ import { Hex, Address } from 'viem';
14
+ import { Chain } from 'viem/chains';
15
+ import { PrivateKeyAccount } from 'viem/accounts';
16
+ import { ModularSigner } from '@zerodev/permissions';
17
+ export interface SessionKeyPermissionRule {
18
+ target: Hex;
19
+ abi: any[];
20
+ functionName: string;
21
+ args?: any[];
22
+ }
23
+ export interface CreateSessionKeyApprovalOptions {
24
+ sessionKeyAddress: Address;
25
+ owner: PrivateKeyAccount;
26
+ chain: Chain;
27
+ entryPointVersion?: '0.6' | '0.7';
28
+ useSudoPolicy?: boolean;
29
+ permissions?: SessionKeyPermissionRule[];
30
+ }
31
+ export interface SessionKeyInfo {
32
+ privateKey: Hex;
33
+ address: Address;
34
+ signer: ModularSigner;
35
+ }
36
+ export interface DeserializedSessionKey {
37
+ account: any;
38
+ client: any;
39
+ }
40
+ /**
41
+ * Generate a new session key
42
+ *
43
+ * Creates a new keypair for use as a session key.
44
+ * The private key should be stored securely and shared with the agent.
45
+ * The address should be shared with the owner for approval.
46
+ *
47
+ * @returns Session key info including private key, address, and signer
48
+ *
49
+ * @example
50
+ * const sessionKey = await generateSessionKey();
51
+ * console.log("Share this address with owner:", sessionKey.address);
52
+ * console.log("Keep this private key secure:", sessionKey.privateKey);
53
+ */
54
+ export declare function generateSessionKey(): Promise<SessionKeyInfo>;
55
+ /**
56
+ * Recreate session key from private key
57
+ *
58
+ * Recreates a session key signer from a stored private key.
59
+ *
60
+ * @param privateKey - The session key private key
61
+ * @returns Session key info
62
+ *
63
+ * @example
64
+ * const sessionKey = await recreateSessionKey(storedPrivateKey);
65
+ */
66
+ export declare function recreateSessionKey(privateKey: Hex): Promise<SessionKeyInfo>;
67
+ /**
68
+ * Create session key approval (Owner side)
69
+ *
70
+ * The owner calls this to create an approval for a session key address.
71
+ * This uses the NEW EIP-7702 pattern with addressToEmptyAccount.
72
+ *
73
+ * @param options - Configuration options
74
+ * @returns Serialized approval string to share with the agent
75
+ *
76
+ * @example
77
+ * // Owner approves session key
78
+ * const approval = await createSessionKeyApproval({
79
+ * sessionKeyAddress: '0x...', // Agent's session key address
80
+ * owner: ownerAccount,
81
+ * chain: sepolia,
82
+ * permissions: [{
83
+ * target: USDC_ADDRESS,
84
+ * abi: parseAbi(['function transfer(address to, uint256 amount)']),
85
+ * functionName: 'transfer',
86
+ * args: [null, { condition: 3, value: parseUnits('10', 6) }]
87
+ * }]
88
+ * });
89
+ * // Share approval with agent
90
+ */
91
+ export declare function createSessionKeyApproval(options: CreateSessionKeyApprovalOptions): Promise<string>;
92
+ /**
93
+ * Deserialize session key account (Agent side)
94
+ *
95
+ * The agent calls this to reconstruct the session key account from the approval.
96
+ * This requires BOTH the approval AND the session key signer.
97
+ *
98
+ * @param approval - Approval string from owner
99
+ * @param sessionKeySigner - Session key signer (created from private key)
100
+ * @param chain - Chain to use
101
+ * @param entryPointVersion - EntryPoint version
102
+ * @returns Deserialized session key account
103
+ *
104
+ * @example
105
+ * // Agent deserializes with private key
106
+ * const sessionKey = await recreateSessionKey(storedPrivateKey);
107
+ * const account = await deserializeSessionKey({
108
+ * approval,
109
+ * sessionKeySigner: sessionKey.signer,
110
+ * chain: sepolia
111
+ * });
112
+ */
113
+ export declare function deserializeSessionKey(options: {
114
+ approval: string;
115
+ sessionKeySigner: ModularSigner;
116
+ chain: Chain;
117
+ entryPointVersion?: '0.6' | '0.7';
118
+ }): Promise<any>;
119
+ /**
120
+ * Create kernel client for session key
121
+ *
122
+ * Creates a client for sending transactions with the session key.
123
+ *
124
+ * @param account - Deserialized session key account
125
+ * @param chain - Chain to use
126
+ * @param bundlerUrl - Bundler RPC URL
127
+ * @param paymasterUrl - Optional paymaster URL for gas sponsorship
128
+ * @returns Kernel account client
129
+ *
130
+ * @example
131
+ * const client = createSessionKeyClient({
132
+ * account: sessionKeyAccount,
133
+ * chain: sepolia,
134
+ * bundlerUrl: 'https://api.pimlico.io/...'
135
+ * });
136
+ */
137
+ export declare function createSessionKeyClient(options: {
138
+ account: any;
139
+ chain: Chain;
140
+ bundlerUrl: string;
141
+ paymasterUrl?: string;
142
+ }): any;
143
+ /**
144
+ * Create USDC transfer permission rule
145
+ *
146
+ * Helper to create a permission rule for USDC transfers with a maximum amount.
147
+ *
148
+ * @param usdcAddress - USDC contract address
149
+ * @param maxAmount - Maximum USDC amount (in USDC units, e.g., "10" for 10 USDC)
150
+ * @returns Permission rule
151
+ *
152
+ * @example
153
+ * const rule = createUSDCTransferPermission(
154
+ * '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
155
+ * '10' // Max 10 USDC
156
+ * );
157
+ */
158
+ export declare function createUSDCTransferPermission(usdcAddress: Hex, maxAmount: string): SessionKeyPermissionRule;
159
+ /**
160
+ * Create ETH transfer permission rule
161
+ *
162
+ * Helper to create a permission rule for ETH transfers with a maximum value.
163
+ *
164
+ * @param maxValue - Maximum ETH value (in ether units, e.g., "0.1" for 0.1 ETH)
165
+ * @returns Permission rule
166
+ *
167
+ * @example
168
+ * const rule = createETHTransferPermission('0.1'); // Max 0.1 ETH
169
+ */
170
+ export declare function createETHTransferPermission(maxValue: string): SessionKeyPermissionRule;