@metamask/smart-accounts-kit 0.4.0-beta.1 → 1.0.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 (75) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/dist/actions/index.cjs +5 -5
  3. package/dist/actions/index.d.cts +2 -2
  4. package/dist/actions/index.d.ts +2 -2
  5. package/dist/actions/index.mjs +4 -4
  6. package/dist/{chunk-HBAJRXQB.cjs → chunk-23YXLKTX.cjs} +11 -11
  7. package/dist/{chunk-HBAJRXQB.cjs.map → chunk-23YXLKTX.cjs.map} +1 -1
  8. package/dist/{chunk-GH5EK5MB.mjs → chunk-33AMUJBJ.mjs} +7 -7
  9. package/dist/chunk-33AMUJBJ.mjs.map +1 -0
  10. package/dist/{chunk-DRVPD5QI.mjs → chunk-45GHWVQA.mjs} +17 -34
  11. package/dist/chunk-45GHWVQA.mjs.map +1 -0
  12. package/dist/{chunk-OPJBYTWX.cjs → chunk-BYWRJGSK.cjs} +23 -40
  13. package/dist/chunk-BYWRJGSK.cjs.map +1 -0
  14. package/dist/{chunk-TEH426Y4.mjs → chunk-C5ZEEH2Z.mjs} +283 -184
  15. package/dist/chunk-C5ZEEH2Z.mjs.map +1 -0
  16. package/dist/{chunk-YYZWHBF2.mjs → chunk-NOCLGZGB.mjs} +173 -128
  17. package/dist/chunk-NOCLGZGB.mjs.map +1 -0
  18. package/dist/{chunk-5FLY3IPW.mjs → chunk-QCULIK3O.mjs} +27 -56
  19. package/dist/chunk-QCULIK3O.mjs.map +1 -0
  20. package/dist/{chunk-CLBI7P3Z.cjs → chunk-QMRKCB7T.cjs} +203 -158
  21. package/dist/chunk-QMRKCB7T.cjs.map +1 -0
  22. package/dist/{chunk-Q4V7BKAG.cjs → chunk-SOFB2MXG.cjs} +27 -56
  23. package/dist/chunk-SOFB2MXG.cjs.map +1 -0
  24. package/dist/{chunk-NGZLJAMA.cjs → chunk-UUOH2WAW.cjs} +12 -12
  25. package/dist/{chunk-NGZLJAMA.cjs.map → chunk-UUOH2WAW.cjs.map} +1 -1
  26. package/dist/{chunk-ZTGEG2ZA.mjs → chunk-WV2R7BXP.mjs} +2 -2
  27. package/dist/{chunk-7CVW7JE3.cjs → chunk-XN36L4RX.cjs} +102 -102
  28. package/dist/chunk-XN36L4RX.cjs.map +1 -0
  29. package/dist/{chunk-MIP7KJYH.cjs → chunk-YDLLC6PP.cjs} +252 -153
  30. package/dist/chunk-YDLLC6PP.cjs.map +1 -0
  31. package/dist/{chunk-XUVEYTD2.mjs → chunk-YTELOQ4I.mjs} +2 -2
  32. package/dist/contracts/index.cjs +5 -5
  33. package/dist/contracts/index.d.cts +3 -3
  34. package/dist/contracts/index.d.ts +3 -3
  35. package/dist/contracts/index.mjs +4 -4
  36. package/dist/{delegation-sP7mnAkl.d.ts → delegation-CvVXs0PO.d.ts} +52 -26
  37. package/dist/{delegation-Bd2v5lF5.d.cts → delegation-DIriDFkq.d.cts} +52 -26
  38. package/dist/experimental/index.cjs +4 -4
  39. package/dist/experimental/index.cjs.map +1 -1
  40. package/dist/experimental/index.d.cts +1 -1
  41. package/dist/experimental/index.d.ts +1 -1
  42. package/dist/experimental/index.mjs +5 -5
  43. package/dist/experimental/index.mjs.map +1 -1
  44. package/dist/{index-Bfcoh3WQ.d.ts → index-5EdxVa_d.d.ts} +92 -62
  45. package/dist/{index-B9w3fRT-.d.cts → index-ChTryO1-.d.ts} +4 -5
  46. package/dist/{index-DpokPMZc.d.ts → index-DC9baw8F.d.cts} +4 -5
  47. package/dist/{index-C8wAvC29.d.cts → index-Dvc4ir4O.d.cts} +92 -62
  48. package/dist/index.cjs +63 -33
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.cts +9 -11
  51. package/dist/index.d.ts +9 -11
  52. package/dist/index.mjs +55 -25
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/{smartAccountsEnvironment-YDC3jB33.d.cts → smartAccountsEnvironment-Czw9KUYZ.d.cts} +1 -1
  55. package/dist/{smartAccountsEnvironment-EW722Cnw.d.ts → smartAccountsEnvironment-u1CcFcGE.d.ts} +1 -1
  56. package/dist/{types-B9GE5CfG.d.ts → types-qdEHxd5Q.d.cts} +47 -29
  57. package/dist/{types-B9GE5CfG.d.cts → types-qdEHxd5Q.d.ts} +47 -29
  58. package/dist/utils/index.cjs +7 -5
  59. package/dist/utils/index.cjs.map +1 -1
  60. package/dist/utils/index.d.cts +3 -4
  61. package/dist/utils/index.d.ts +3 -4
  62. package/dist/utils/index.mjs +12 -10
  63. package/package.json +7 -12
  64. package/dist/chunk-5FLY3IPW.mjs.map +0 -1
  65. package/dist/chunk-7CVW7JE3.cjs.map +0 -1
  66. package/dist/chunk-CLBI7P3Z.cjs.map +0 -1
  67. package/dist/chunk-DRVPD5QI.mjs.map +0 -1
  68. package/dist/chunk-GH5EK5MB.mjs.map +0 -1
  69. package/dist/chunk-MIP7KJYH.cjs.map +0 -1
  70. package/dist/chunk-OPJBYTWX.cjs.map +0 -1
  71. package/dist/chunk-Q4V7BKAG.cjs.map +0 -1
  72. package/dist/chunk-TEH426Y4.mjs.map +0 -1
  73. package/dist/chunk-YYZWHBF2.mjs.map +0 -1
  74. /package/dist/{chunk-ZTGEG2ZA.mjs.map → chunk-WV2R7BXP.mjs.map} +0 -0
  75. /package/dist/{chunk-XUVEYTD2.mjs.map → chunk-YTELOQ4I.mjs.map} +0 -0
package/dist/index.cjs CHANGED
@@ -2,32 +2,33 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkCLBI7P3Zcjs = require('./chunk-CLBI7P3Z.cjs');
5
+ var _chunkQMRKCB7Tcjs = require('./chunk-QMRKCB7T.cjs');
6
6
 
7
7
 
8
8
 
9
- var _chunk7CVW7JE3cjs = require('./chunk-7CVW7JE3.cjs');
10
- require('./chunk-NGZLJAMA.cjs');
9
+ var _chunkXN36L4RXcjs = require('./chunk-XN36L4RX.cjs');
10
+ require('./chunk-UUOH2WAW.cjs');
11
11
 
12
12
 
13
13
 
14
14
 
15
15
 
16
+ var _chunkBYWRJGSKcjs = require('./chunk-BYWRJGSK.cjs');
16
17
 
17
18
 
18
- var _chunkOPJBYTWXcjs = require('./chunk-OPJBYTWX.cjs');
19
19
 
20
20
 
21
21
 
22
+ var _chunkSOFB2MXGcjs = require('./chunk-SOFB2MXG.cjs');
23
+ require('./chunk-23YXLKTX.cjs');
22
24
 
23
25
 
24
26
 
25
- var _chunkQ4V7BKAGcjs = require('./chunk-Q4V7BKAG.cjs');
26
- require('./chunk-HBAJRXQB.cjs');
27
+ var _chunkVLKX4BR6cjs = require('./chunk-VLKX4BR6.cjs');
28
+
27
29
 
28
30
 
29
31
 
30
- var _chunkVLKX4BR6cjs = require('./chunk-VLKX4BR6.cjs');
31
32
 
32
33
 
33
34
 
@@ -38,7 +39,7 @@ var _chunkVLKX4BR6cjs = require('./chunk-VLKX4BR6.cjs');
38
39
 
39
40
 
40
41
 
41
- var _chunkMIP7KJYHcjs = require('./chunk-MIP7KJYH.cjs');
42
+ var _chunkYDLLC6PPcjs = require('./chunk-YDLLC6PP.cjs');
42
43
 
43
44
  // src/toMetaMaskSmartAccount.ts
44
45
 
@@ -114,15 +115,15 @@ var resolveHybridSigner = (config) => {
114
115
  if (webAuthnAccount.type !== "webAuthn") {
115
116
  throw new Error("Account is not a webAuthn account");
116
117
  }
117
- const encodeSignature = ({ signature, webauthn }) => _chunkOPJBYTWXcjs.encodeDeleGatorSignature.call(void 0,
118
+ const encodeSignature = (result) => _chunkBYWRJGSKcjs.encodeDeleGatorSignature.call(void 0,
118
119
  keyId,
119
- signature,
120
- webauthn.clientDataJSON,
121
- webauthn.authenticatorData
120
+ result.signature,
121
+ result.webauthn.clientDataJSON,
122
+ result.webauthn.authenticatorData
122
123
  );
123
124
  const signMessage = async (args) => webAuthnAccount.signMessage(args).then(encodeSignature);
124
125
  const signTypedData = async (typedDataDefinition) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);
125
- const getStubSignature = async () => _chunkOPJBYTWXcjs.createDummyWebAuthnSignature.call(void 0, keyId);
126
+ const getStubSignature = async () => _chunkBYWRJGSKcjs.createDummyWebAuthnSignature.call(void 0, keyId);
126
127
  return {
127
128
  signMessage,
128
129
  signTypedData,
@@ -209,19 +210,20 @@ var resolveStateless7702Signer = (config) => {
209
210
  }
210
211
  throw new Error("Invalid signer config");
211
212
  };
212
- var resolveSigner = (config) => {
213
- const { implementation } = config;
213
+ function resolveSigner(config) {
214
+ const { implementation, signer } = config;
215
+ if (!signer) {
216
+ return null;
217
+ }
214
218
  if (implementation === "Hybrid" /* Hybrid */) {
215
- return resolveHybridSigner(config.signer);
219
+ return resolveHybridSigner(signer);
216
220
  } else if (implementation === "MultiSig" /* MultiSig */) {
217
- return resolveMultiSigSigner(config.signer);
221
+ return resolveMultiSigSigner(signer);
218
222
  } else if (implementation === "Stateless7702" /* Stateless7702 */) {
219
- return resolveStateless7702Signer(
220
- config.signer
221
- );
223
+ return resolveStateless7702Signer(signer);
222
224
  }
223
225
  throw new Error(`Implementation type '${implementation}' not supported`);
224
- };
226
+ }
225
227
 
226
228
  // src/toMetaMaskSmartAccount.ts
227
229
  var ENTRYPOINT_VERSION = "0.7";
@@ -238,7 +240,7 @@ async function toMetaMaskSmartAccount(params) {
238
240
  implementation,
239
241
  signer: params.signer
240
242
  });
241
- const environment = _nullishCoalesce(params.environment, () => ( _chunkQ4V7BKAGcjs.getSmartAccountsEnvironment.call(void 0, chain.id)));
243
+ const environment = _nullishCoalesce(params.environment, () => ( _chunkSOFB2MXGcjs.getSmartAccountsEnvironment.call(void 0, chain.id)));
242
244
  let address, factoryData;
243
245
  if (params.address) {
244
246
  factoryData = void 0;
@@ -247,7 +249,7 @@ async function toMetaMaskSmartAccount(params) {
247
249
  if (implementation === "Stateless7702" /* Stateless7702 */) {
248
250
  throw new Error("Stateless7702 does not support counterfactual accounts");
249
251
  }
250
- const accountData = await _chunkOPJBYTWXcjs.getCounterfactualAccountData.call(void 0, {
252
+ const accountData = await _chunkBYWRJGSKcjs.getCounterfactualAccountData.call(void 0, {
251
253
  factory: environment.SimpleFactory,
252
254
  implementations: environment.implementations,
253
255
  implementation,
@@ -288,25 +290,35 @@ async function toMetaMaskSmartAccount(params) {
288
290
  };
289
291
  };
290
292
  const signDelegation2 = async (delegationParams) => {
293
+ if (!signer) {
294
+ throw new Error(
295
+ "Cannot sign delegation: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
296
+ );
297
+ }
291
298
  const { delegation, chainId } = delegationParams;
292
- const delegationStruct = _chunkMIP7KJYHcjs.toDelegationStruct.call(void 0, {
299
+ const delegationStruct = _chunkYDLLC6PPcjs.toDelegationStruct.call(void 0, {
293
300
  ...delegation,
294
301
  signature: "0x"
295
302
  });
296
- const signature = signer.signTypedData({
303
+ const signature = await signer.signTypedData({
297
304
  domain: {
298
305
  chainId: _nullishCoalesce(chainId, () => ( chain.id)),
299
306
  name: "DelegationManager",
300
307
  version: "1",
301
308
  verifyingContract: environment.DelegationManager
302
309
  },
303
- types: _chunkMIP7KJYHcjs.SIGNABLE_DELEGATION_TYPED_DATA,
310
+ types: _chunkYDLLC6PPcjs.SIGNABLE_DELEGATION_TYPED_DATA,
304
311
  primaryType: "Delegation",
305
312
  message: delegationStruct
306
313
  });
307
314
  return signature;
308
315
  };
309
316
  const signUserOperation2 = async (userOpParams) => {
317
+ if (!signer) {
318
+ throw new Error(
319
+ "Cannot sign user operation: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
320
+ );
321
+ }
310
322
  const { chainId } = userOpParams;
311
323
  const packedUserOp = _accountabstraction.toPackedUserOperation.call(void 0, {
312
324
  sender: address,
@@ -320,20 +332,37 @@ async function toMetaMaskSmartAccount(params) {
320
332
  version: "1",
321
333
  verifyingContract: address
322
334
  },
323
- types: _chunkQ4V7BKAGcjs.SIGNABLE_USER_OP_TYPED_DATA,
335
+ types: _chunkSOFB2MXGcjs.SIGNABLE_USER_OP_TYPED_DATA,
324
336
  primaryType: "PackedUserOperation",
325
337
  message: { ...packedUserOp, entryPoint: entryPoint.address }
326
338
  });
327
339
  return signature;
328
340
  };
329
341
  const getAddress = async () => address;
330
- const getNonce = async () => _chunk7CVW7JE3cjs.read.call(void 0, {
342
+ const getNonce = async () => _chunkXN36L4RXcjs.read.call(void 0, {
331
343
  client,
332
344
  entryPoint: environment.EntryPoint,
333
345
  contractAddress: address,
334
346
  key: 0n
335
347
  });
336
- const encodeCalls = async (calls) => _chunkOPJBYTWXcjs.encodeCallsForCaller.call(void 0, address, calls);
348
+ const encodeCalls = async (calls) => _chunkBYWRJGSKcjs.encodeCallsForCaller.call(void 0, address, calls);
349
+ const signerMethods = _nullishCoalesce(signer, () => ( {
350
+ signMessage: async () => {
351
+ throw new Error(
352
+ "Cannot sign message: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
353
+ );
354
+ },
355
+ signTypedData: async () => {
356
+ throw new Error(
357
+ "Cannot sign typed data: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
358
+ );
359
+ },
360
+ getStubSignature: async () => {
361
+ throw new Error(
362
+ "Cannot get stub signature: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
363
+ );
364
+ }
365
+ }));
337
366
  const smartAccount = await _accountabstraction.toSmartAccount.call(void 0, {
338
367
  abi,
339
368
  client,
@@ -345,12 +374,12 @@ async function toMetaMaskSmartAccount(params) {
345
374
  getNonce,
346
375
  signUserOperation: signUserOperation2,
347
376
  signDelegation: signDelegation2,
348
- ...signer
377
+ ...signerMethods
349
378
  });
350
379
  if (implementation === "Stateless7702" /* Stateless7702 */) {
351
380
  return {
352
381
  ...smartAccount,
353
- isDeployed: async () => _chunkCLBI7P3Zcjs.isValid7702Implementation.call(void 0, {
382
+ isDeployed: async () => _chunkQMRKCB7Tcjs.isValid7702Implementation.call(void 0, {
354
383
  client,
355
384
  accountAddress: address,
356
385
  environment
@@ -365,7 +394,7 @@ function createCaveatEnforcerClient({
365
394
  client,
366
395
  environment
367
396
  }) {
368
- return client.extend(_chunkCLBI7P3Zcjs.caveatEnforcerActions.call(void 0, { environment }));
397
+ return client.extend(_chunkQMRKCB7Tcjs.caveatEnforcerActions.call(void 0, { environment }));
369
398
  }
370
399
 
371
400
  // src/actions/infuraBundlerClient.ts
@@ -420,5 +449,6 @@ function createInfuraBundlerClient(config) {
420
449
 
421
450
 
422
451
 
423
- exports.ANY_BENEFICIARY = _chunkMIP7KJYHcjs.ANY_BENEFICIARY; exports.BalanceChangeType = _chunkMIP7KJYHcjs.BalanceChangeType; exports.ExecutionMode = _chunkVLKX4BR6cjs.ExecutionMode; exports.Implementation = _chunkOPJBYTWXcjs.Implementation; exports.PREFERRED_VERSION = _chunkQ4V7BKAGcjs.PREFERRED_VERSION; exports.ROOT_AUTHORITY = _chunkMIP7KJYHcjs.ROOT_AUTHORITY; exports.TransferWindow = _chunkOPJBYTWXcjs.TransferWindow; exports.actions = _chunkCLBI7P3Zcjs.actions_exports; exports.aggregateSignature = aggregateSignature; exports.contracts = _chunk7CVW7JE3cjs.contracts_exports; exports.createCaveat = _chunkMIP7KJYHcjs.createCaveat; exports.createCaveatEnforcerClient = createCaveatEnforcerClient; exports.createDelegation = _chunkMIP7KJYHcjs.createDelegation; exports.createExecution = _chunkVLKX4BR6cjs.createExecution; exports.createInfuraBundlerClient = createInfuraBundlerClient; exports.createOpenDelegation = _chunkMIP7KJYHcjs.createOpenDelegation; exports.getSmartAccountsEnvironment = _chunkQ4V7BKAGcjs.getSmartAccountsEnvironment; exports.redeemDelegations = _chunkQ4V7BKAGcjs.redeemDelegations; exports.signDelegation = _chunkMIP7KJYHcjs.signDelegation; exports.signUserOperation = _chunkQ4V7BKAGcjs.signUserOperation; exports.toMetaMaskSmartAccount = toMetaMaskSmartAccount;
452
+
453
+ exports.ANY_BENEFICIARY = _chunkYDLLC6PPcjs.ANY_BENEFICIARY; exports.BalanceChangeType = _chunkYDLLC6PPcjs.BalanceChangeType; exports.CaveatType = _chunkYDLLC6PPcjs.CaveatType; exports.ExecutionMode = _chunkVLKX4BR6cjs.ExecutionMode; exports.Implementation = _chunkYDLLC6PPcjs.Implementation; exports.PREFERRED_VERSION = _chunkSOFB2MXGcjs.PREFERRED_VERSION; exports.ROOT_AUTHORITY = _chunkYDLLC6PPcjs.ROOT_AUTHORITY; exports.ScopeType = _chunkYDLLC6PPcjs.ScopeType; exports.TransferWindow = _chunkYDLLC6PPcjs.TransferWindow; exports.actions = _chunkQMRKCB7Tcjs.actions_exports; exports.aggregateSignature = aggregateSignature; exports.contracts = _chunkXN36L4RXcjs.contracts_exports; exports.createCaveat = _chunkYDLLC6PPcjs.createCaveat; exports.createCaveatEnforcerClient = createCaveatEnforcerClient; exports.createDelegation = _chunkYDLLC6PPcjs.createDelegation; exports.createExecution = _chunkVLKX4BR6cjs.createExecution; exports.createInfuraBundlerClient = createInfuraBundlerClient; exports.createOpenDelegation = _chunkYDLLC6PPcjs.createOpenDelegation; exports.getSmartAccountsEnvironment = _chunkSOFB2MXGcjs.getSmartAccountsEnvironment; exports.signDelegation = _chunkYDLLC6PPcjs.signDelegation; exports.signUserOperation = _chunkSOFB2MXGcjs.signUserOperation; exports.toMetaMaskSmartAccount = toMetaMaskSmartAccount;
424
454
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/index.cjs","../src/toMetaMaskSmartAccount.ts","../src/signer.ts","../src/signatures.ts","../src/actions/caveatEnforcerClient.ts","../src/actions/infuraBundlerClient.ts"],"names":["signTypedData","signMessage","getStubSignature","signUserOperation","signDelegation"],"mappings":"AAAA;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;AC1CA;AACE;AACA;AACA;AAAA,2DACK;AAEP;AACE;AACA;AACA;AAAA,8DACK;AD2CP;AACA;AEtDA,4BAAuB;AFwDvB;AACA;AGxDA;AAEA,IAAM,eAAA,EAAiB,CAAC,OAAO,CAAA;AAoBxB,IAAM,mBAAA,EAAqB,CAAC;AAAA,EACjC;AACF,CAAA,EAAA,GAEW;AACT,EAAA,GAAA,CAAI,UAAA,CAAW,OAAA,IAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAA,CAAA,MAAW,EAAE,KAAK,EAAA,GAAK,UAAA,EAAY;AACjC,IAAA,GAAA,CAAI,CAAC,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAA;AACjD,IAAA;AACF,EAAA;AAGyC,EAAA;AACR,IAAA;AACjC,EAAA;AAGgD,EAAA;AAClD;AH+BsD;AACA;AElDpD;AAImB;AACZ,EAAA;AAC4B,IAAA;AACG,IAAA;AAEO,MAAA;AAC3C,IAAA;AAC8B,IAAA;AAChC,EAAA;AACF;AAEwE;AAC/D,EAAA;AACuB,IAAA;AACE,IAAA;AACA,IAAA;AAChC,EAAA;AACF;AAE4E;AAC5C,EAAA;AACe,IAAA;AACb,EAAA;AACTA,IAAAA;AAEH,IAAA;AACA,MAAA;AAClB,IAAA;AACoB,IAAA;AACF,MAAA;AAClB,IAAA;AACO,IAAA;AACLC,MAAAA;AACAD,MAAAA;AACAE,MAAAA;AACF,IAAA;AACF,EAAA;AACmC,EAAA;AAEM,EAAA;AACvB,IAAA;AAClB,EAAA;AAE+C,EAAA;AAE3C,IAAA;AACA,IAAA;AACS,IAAA;AACA,IAAA;AACX,EAAA;AAGgB,EAAA;AAKhB,EAAA;AAGmC,EAAA;AAE9B,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAIqB;AAC4B,EAAA;AACzC,IAAA;AACA,IAAA;AACA,IAAA;AAC0B,IAAA;AACP,MAAA;AAEGD,MAAAA;AACED,MAAAA;AAEY,MAAA;AACjC,IAAA;AACgB,MAAA;AAEH,MAAA;AACA,QAAA;AAClB,MAAA;AACoB,MAAA;AACF,QAAA;AAClB,MAAA;AAEwBC,MAAAA;AACED,MAAAA;AAED,MAAA;AAC3B,IAAA;AACO,IAAA;AACL,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACD,EAAA;AAEiE,EAAA;AACnB,IAAA;AACI,MAAA;AACF,QAAA;AACnC,QAAA;AACF,QAAA;AACR,MAAA;AACF,IAAA;AAEqC,IAAA;AAEX,IAAA;AACxB,MAAA;AACD,IAAA;AACH,EAAA;AAME,EAAA;AAE6C,IAAA;AACD,MAAA;AACC,QAAA;AACjC,QAAA;AACF,QAAA;AACR,MAAA;AACF,IAAA;AAEqC,IAAA;AAEX,IAAA;AACxB,MAAA;AACD,IAAA;AACH,EAAA;AAGS,EAAA;AAEF,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAIqB;AACW,EAAA;AACe,IAAA;AACb,EAAA;AACM,IAAA;AAElB,IAAA;AACA,MAAA;AAClB,IAAA;AACoB,IAAA;AACF,MAAA;AAClB,IAAA;AAEO,IAAA;AACL,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAEuC,EAAA;AACzC;AAKsB;AACO,EAAA;AAEmB,EAAA;AACkB,IAAA;AACrD,EAAA;AACyD,IAAA;AACzD,EAAA;AACF,IAAA;AACE,MAAA;AACT,IAAA;AACF,EAAA;AACwC,EAAA;AAC1C;AFAsD;AACA;AChM3B;AAiBmC;AACtD,EAAA;AACJ,IAAA;AACgB,IAAA;AAChB,IAAA;AACE,EAAA;AAEQ,EAAA;AAC2B,IAAA;AACvC,EAAA;AAE6B,EAAA;AAC3B,IAAA;AACe,IAAA;AAChB,EAAA;AAGuB,EAAA;AAEF,EAAA;AAEF,EAAA;AACJ,IAAA;AACG,IAAA;AACZ,EAAA;AACD,IAAA;AACc,MAAA;AAClB,IAAA;AAE0B,IAAA;AACH,MAAA;AACQ,MAAA;AAC7B,MAAA;AACqB,MAAA;AACF,MAAA;AACpB,IAAA;AAEqB,IAAA;AACI,IAAA;AAC5B,EAAA;AAEmB,EAAA;AACZ,IAAA;AACgB,IAAA;AACZ,IAAA;AACX,EAAA;AAE8B,EAAA;AACH,IAAA;AACT,MAAA;AACT,MAAA;AACP,IAAA;AAC2B,IAAA;AACX,MAAA;AACT,MAAA;AACP,IAAA;AACgC,IAAA;AAChB,MAAA;AACT,MAAA;AACP,IAAA;AACc,EAAA;AAKmB,EAAA;AACF,IAAA;AACnB,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AACO,IAAA;AACL,MAAA;AACqB,MAAA;AACvB,IAAA;AACF,EAAA;AAEyE,EAAA;AACvC,IAAA;AAEY,IAAA;AACvC,MAAA;AACQ,MAAA;AACZ,IAAA;AAEsC,IAAA;AAC7B,MAAA;AACoB,QAAA;AACpB,QAAA;AACG,QAAA;AACsB,QAAA;AACjC,MAAA;AACO,MAAA;AACM,MAAA;AACJ,MAAA;AACV,IAAA;AAEM,IAAA;AACT,EAAA;AAE2E,EAAA;AACrD,IAAA;AAEuB,IAAA;AACjC,MAAA;AACL,MAAA;AACQ,MAAA;AACZ,IAAA;AAE4C,IAAA;AACnC,MAAA;AACoB,QAAA;AACpB,QAAA;AACG,QAAA;AACU,QAAA;AACrB,MAAA;AACO,MAAA;AACM,MAAA;AAC2B,MAAA;AACzC,IAAA;AAEM,IAAA;AACT,EAAA;AAE+B,EAAA;AAGnB,EAAA;AACR,IAAA;AACwB,IAAA;AACP,IAAA;AACZ,IAAA;AACN,EAAA;AAGD,EAAA;AAEwC,EAAA;AACxC,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACAG,IAAAA;AACAC,IAAAA;AACG,IAAA;AACJ,EAAA;AAGG,EAAA;AACK,IAAA;AACF,MAAA;AAED,MAAA;AACE,QAAA;AACgB,QAAA;AAChB,QAAA;AACD,MAAA;AACL,IAAA;AACF,EAAA;AAGO,EAAA;AACT;ADiJsD;AACA;AI1UpD;AACA,EAAA;AACA,EAAA;AAIqD;AACR,EAAA;AAC/C;AJyUsD;AACA;AKjXtD;AACE;AAIK;AAyCiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmB,EAAA;AACjD,IAAA;AAOa,IAAA;AACzB,MAAA;AACC,MAAA;AACV,IAAA;AACH,EAAA;AACF;AA0DqD;AAEC,EAAA;AAG3B,EAAA;AACF,IAAA;AACvB,EAAA;AACF;ALsQsD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/index.cjs","sourcesContent":[null,"import {\n EIP7702StatelessDeleGator,\n HybridDeleGator,\n MultiSigDeleGator,\n} from '@metamask/delegation-abis';\nimport { type Address, type Hex } from 'viem';\nimport {\n entryPoint07Abi,\n toPackedUserOperation,\n toSmartAccount,\n} from 'viem/account-abstraction';\n\nimport { isValid7702Implementation } from './actions/isValid7702Implementation';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\nimport { entryPointGetNonce as _getNonce } from './DelegationFramework/EntryPoint/read';\nimport { encodeCallsForCaller } from './encodeCalls';\nimport { resolveSigner } from './signer';\nimport { getSmartAccountsEnvironment } from './smartAccountsEnvironment';\nimport type {\n Call,\n ToMetaMaskSmartAccountParameters,\n ToMetaMaskSmartAccountReturnType,\n SignDelegationParams,\n SignUserOperationParams,\n AbiByImplementation,\n} from './types';\nimport { SIGNABLE_USER_OP_TYPED_DATA } from './userOp';\n\nconst ENTRYPOINT_VERSION = '0.7' as const;\n\n/**\n * Creates a MetaMask DeleGator smart account instance.\n *\n * @template TImplementation - The type of implementation, extending Implementation.\n * @param params - The parameters for creating the smart account.\n * @returns A promise that resolves to a MetaMaskSmartAccount instance.\n * @description\n * This function sets up a MetaMask DeleGator smart account with the specified implementation.\n * It handles both deployed accounts, and counterfactual accounts.\n * A caller may specify a SmartAccountsEnvironment, otherwise the environment will be inferred from the chain.\n */\nexport async function toMetaMaskSmartAccount<\n TImplementation extends Implementation,\n>(\n params: ToMetaMaskSmartAccountParameters<TImplementation>,\n): Promise<ToMetaMaskSmartAccountReturnType<TImplementation>> {\n const {\n client,\n client: { chain },\n implementation,\n } = params;\n\n if (!chain) {\n throw new Error('Chain not specified');\n }\n\n const signer = resolveSigner({\n implementation,\n signer: params.signer,\n });\n\n const environment =\n params.environment ?? getSmartAccountsEnvironment(chain.id);\n\n let address: Address, factoryData: Hex | undefined;\n\n if (params.address) {\n factoryData = undefined;\n address = params.address;\n } else {\n if (implementation === Implementation.Stateless7702) {\n throw new Error('Stateless7702 does not support counterfactual accounts');\n }\n\n const accountData = await getCounterfactualAccountData({\n factory: environment.SimpleFactory,\n implementations: environment.implementations,\n implementation,\n deployParams: params.deployParams,\n deploySalt: params.deploySalt,\n });\n\n address = accountData.address;\n factoryData = accountData.factoryData;\n }\n\n const entryPoint = {\n abi: entryPoint07Abi,\n address: environment.EntryPoint,\n version: ENTRYPOINT_VERSION,\n } as const;\n\n const { abi, contractName } = {\n [Implementation.Hybrid]: {\n contractName: 'HybridDeleGator',\n abi: HybridDeleGator,\n },\n [Implementation.MultiSig]: {\n contractName: 'MultiSigDeleGator',\n abi: MultiSigDeleGator,\n },\n [Implementation.Stateless7702]: {\n contractName: 'EIP7702StatelessDeleGator',\n abi: EIP7702StatelessDeleGator,\n },\n }[implementation] as {\n contractName: string;\n abi: AbiByImplementation[TImplementation];\n };\n\n const getFactoryArgs = async () => {\n if (factoryData === undefined) {\n throw new Error(\n 'Deploy params were not provided, so factory args cannot be inferred',\n );\n }\n return {\n factoryData,\n factory: environment.SimpleFactory,\n };\n };\n\n const signDelegation = async (delegationParams: SignDelegationParams) => {\n const { delegation, chainId } = delegationParams;\n\n const delegationStruct = toDelegationStruct({\n ...delegation,\n signature: '0x',\n });\n\n const signature = signer.signTypedData({\n domain: {\n chainId: chainId ?? chain.id,\n name: 'DelegationManager',\n version: '1',\n verifyingContract: environment.DelegationManager,\n },\n types: SIGNABLE_DELEGATION_TYPED_DATA,\n primaryType: 'Delegation',\n message: delegationStruct,\n });\n\n return signature;\n };\n\n const signUserOperation = async (userOpParams: SignUserOperationParams) => {\n const { chainId } = userOpParams;\n\n const packedUserOp = toPackedUserOperation({\n sender: address,\n ...userOpParams,\n signature: '0x',\n });\n\n const signature = await signer.signTypedData({\n domain: {\n chainId: chainId ?? chain.id,\n name: contractName,\n version: '1',\n verifyingContract: address,\n },\n types: SIGNABLE_USER_OP_TYPED_DATA,\n primaryType: 'PackedUserOperation',\n message: { ...packedUserOp, entryPoint: entryPoint.address },\n });\n\n return signature;\n };\n\n const getAddress = async () => address;\n\n const getNonce = async () =>\n _getNonce({\n client,\n entryPoint: environment.EntryPoint,\n contractAddress: address,\n key: 0n,\n });\n\n const encodeCalls = async (calls: readonly Call[]) =>\n encodeCallsForCaller(address, calls);\n\n const smartAccount = await toSmartAccount({\n abi,\n client,\n entryPoint,\n environment,\n getAddress,\n getFactoryArgs,\n encodeCalls,\n getNonce,\n signUserOperation,\n signDelegation,\n ...signer,\n });\n\n // Override isDeployed only for EIP-7702 implementation to check proper delegation code\n if (implementation === Implementation.Stateless7702) {\n return {\n ...smartAccount,\n isDeployed: async () =>\n isValid7702Implementation({\n client,\n accountAddress: address,\n environment,\n }),\n };\n }\n\n // For other implementations, use the default isDeployed behavior\n return smartAccount;\n}\n","import { concat } from 'viem';\nimport type {\n Address,\n SignableMessage,\n TypedData,\n TypedDataDefinition,\n} from 'viem';\nimport type { SignReturnType as WebAuthnSignReturnType } from 'webauthn-p256';\n\nimport { Implementation } from './constants';\nimport { aggregateSignature } from './signatures';\nimport type {\n AccountSignerConfig,\n HybridSignerConfig,\n InternalSigner,\n MultiSigSignerConfig,\n SignerConfigByImplementation,\n Stateless7702SignerConfig,\n WalletSignerConfig,\n} from './types';\nimport {\n createDummyWebAuthnSignature,\n encodeDeleGatorSignature,\n} from './webAuthn';\n\n// A valid ECDSA signature, this must be able to ecrecover an address, otherwise the contracts will revert in isValidSignature\nconst EOA_STUB_SIGNATURE =\n '0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b' as const;\n\nconst resolveSignerFromWalletConfig = (\n config: WalletSignerConfig,\n): InternalSigner => {\n return {\n signMessage: config.walletClient.signMessage,\n signTypedData: async (typedData) => {\n // todo: figure out this type so that we don't need the type assertion\n return config.walletClient.signTypedData(typedData as any);\n },\n getStubSignature: async () => EOA_STUB_SIGNATURE,\n };\n};\n\nconst resolveSignerFromAccountConfig = (config: AccountSignerConfig) => {\n return {\n signMessage: config.account.signMessage,\n signTypedData: config.account.signTypedData,\n getStubSignature: async () => EOA_STUB_SIGNATURE,\n };\n};\n\nconst resolveHybridSigner = (config: HybridSignerConfig): InternalSigner => {\n if ('walletClient' in config) {\n return resolveSignerFromWalletConfig(config);\n } else if ('account' in config) {\n const { signMessage, signTypedData, getStubSignature } =\n resolveSignerFromAccountConfig(config);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n }\n const { keyId, webAuthnAccount } = config;\n\n if (webAuthnAccount.type !== 'webAuthn') {\n throw new Error('Account is not a webAuthn account');\n }\n\n const encodeSignature = ({ signature, webauthn }: WebAuthnSignReturnType) =>\n encodeDeleGatorSignature(\n keyId,\n signature,\n webauthn.clientDataJSON,\n webauthn.authenticatorData,\n );\n\n const signMessage = async (args: { message: SignableMessage }) =>\n webAuthnAccount.signMessage(args).then(encodeSignature);\n const signTypedData = async <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(\n typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n ) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);\n\n const getStubSignature = async () => createDummyWebAuthnSignature(keyId);\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n};\n\nconst resolveMultiSigSigner = (\n config: MultiSigSignerConfig,\n): InternalSigner => {\n const resolvedSigners = config.map((signer) => {\n let individualSignMessage: InternalSigner['signMessage'];\n let individualSignTypedData: InternalSigner['signTypedData'];\n let address: Address;\n if ('walletClient' in signer) {\n const { signMessage, signTypedData } =\n resolveSignerFromWalletConfig(signer);\n individualSignMessage = signMessage;\n individualSignTypedData = signTypedData;\n\n address = signer.walletClient.account.address;\n } else {\n const { signMessage, signTypedData } =\n resolveSignerFromAccountConfig(signer);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n\n individualSignMessage = signMessage;\n individualSignTypedData = signTypedData;\n\n address = signer.account.address;\n }\n return {\n address,\n individualSignMessage,\n individualSignTypedData,\n };\n });\n\n const signMessage = async (args: { message: SignableMessage }) => {\n const addressAndSignatures = resolvedSigners.map(\n async ({ individualSignMessage, address }) => ({\n signature: await individualSignMessage(args),\n signer: address,\n type: 'ECDSA' as const,\n }),\n );\n\n const signatures = await Promise.all(addressAndSignatures);\n\n return aggregateSignature({\n signatures,\n });\n };\n\n const signTypedData = async <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(\n typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n ) => {\n const addressAndSignatures = resolvedSigners.map(\n async ({ individualSignTypedData, address }) => ({\n signature: await individualSignTypedData(typedDataDefinition),\n signer: address,\n type: 'ECDSA' as const,\n }),\n );\n\n const signatures = await Promise.all(addressAndSignatures);\n\n return aggregateSignature({\n signatures,\n });\n };\n\n const getStubSignature = async () =>\n concat(resolvedSigners.map(() => EOA_STUB_SIGNATURE));\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n};\n\nconst resolveStateless7702Signer = (\n config: Stateless7702SignerConfig,\n): InternalSigner => {\n if ('walletClient' in config) {\n return resolveSignerFromWalletConfig(config);\n } else if ('account' in config) {\n const { signMessage, signTypedData, getStubSignature } =\n resolveSignerFromAccountConfig(config);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n }\n\n throw new Error('Invalid signer config');\n};\n\nexport const resolveSigner = <TImplementation extends Implementation>(config: {\n implementation: TImplementation;\n signer: SignerConfigByImplementation<TImplementation>;\n}): InternalSigner => {\n const { implementation } = config;\n\n if (implementation === Implementation.Hybrid) {\n return resolveHybridSigner(config.signer as HybridSignerConfig);\n } else if (implementation === Implementation.MultiSig) {\n return resolveMultiSigSigner(config.signer as MultiSigSignerConfig);\n } else if (implementation === Implementation.Stateless7702) {\n return resolveStateless7702Signer(\n config.signer as Stateless7702SignerConfig,\n );\n }\n throw new Error(`Implementation type '${implementation}' not supported`);\n};\n","import type { Address, Hex } from 'viem';\nimport { concat } from 'viem';\n\nconst signatureTypes = ['ECDSA'] as const;\n\nexport type SignatureType = (typeof signatureTypes)[number];\n\n/**\n * Represents a partial signature that can be aggregated with others.\n */\nexport type PartialSignature = {\n signer: Address;\n signature: Hex;\n type: SignatureType;\n};\n\n/**\n * Aggregates signatures into a single signature as expected by the MultiSig implementation.\n *\n * @param params - The parameters for signature aggregation.\n * @param params.signatures - The array of partial signatures to aggregate.\n * @returns The aggregated signature.\n */\nexport const aggregateSignature = ({\n signatures,\n}: {\n signatures: PartialSignature[];\n}): Hex => {\n if (signatures.length === 0) {\n return '0x';\n }\n\n for (const { type } of signatures) {\n if (!signatureTypes.includes(type)) {\n throw new Error(`Invalid signature type: ${type}`);\n }\n }\n\n // Sort signatures by signer address as required by MultiSig implementation\n const sortedSignatures = [...signatures].sort((a, b) =>\n a.signer.localeCompare(b.signer),\n );\n\n // Concatenate all signatures\n return concat(sortedSignatures.map(({ signature }) => signature));\n};\n\n/**\n * Type definition for the aggregateSignature function parameters.\n */\nexport type AggregateSignatureParams = {\n signatures: PartialSignature[];\n};\n","import type { Client, Transport, Chain, Account } from 'viem';\n\nimport type { SmartAccountsEnvironment } from '../types';\nimport {\n caveatEnforcerActions,\n type CaveatEnforcerParams,\n type PeriodTransferResult,\n type StreamingResult,\n} from './getCaveatAvailableAmount';\n\n/**\n * Type for client extended with caveat enforcer actions.\n */\nexport type CaveatEnforcerClient<\n TTransport extends Transport = Transport,\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends Account | undefined = Account | undefined,\n> = Client<TTransport, TChain, TAccount> &\n ReturnType<ReturnType<typeof caveatEnforcerActions>>;\n\n/**\n * Create a viem client extended with caveat enforcer actions.\n *\n * @param params - The parameters object.\n * @param params.client - The viem client.\n * @param params.environment - The SmartAccountsEnvironment.\n * @returns The extended client with caveat enforcer actions.\n */\nexport function createCaveatEnforcerClient<\n TTransport extends Transport = Transport,\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends Account | undefined = Account | undefined,\n>({\n client,\n environment,\n}: {\n client: Client<TTransport, TChain, TAccount>;\n environment: SmartAccountsEnvironment;\n}): CaveatEnforcerClient<TTransport, TChain, TAccount> {\n return client.extend(caveatEnforcerActions({ environment }));\n}\n\n// Re-export types for convenience\nexport type { CaveatEnforcerParams, PeriodTransferResult, StreamingResult };\n","import type { Transport, Chain, Hex, Client, Account } from 'viem';\nimport {\n createBundlerClient,\n type BundlerClient,\n type BundlerClientConfig,\n type SmartAccount,\n} from 'viem/account-abstraction';\n\n/**\n * Gas price tiers returned by pimlico_getUserOperationGasPrice\n */\nexport type GasPriceTier = {\n /** Maximum fee per gas in hex format */\n maxFeePerGas: Hex;\n /** Maximum priority fee per gas in hex format */\n maxPriorityFeePerGas: Hex;\n};\n\n/**\n * Response from pimlico_getUserOperationGasPrice RPC method\n */\nexport type UserOperationGasPriceResponse = {\n /** Slow gas price tier */\n slow: GasPriceTier;\n /** Standard gas price tier */\n standard: GasPriceTier;\n /** Fast gas price tier */\n fast: GasPriceTier;\n};\n\n/**\n * Pimlico bundler schema for type-safe RPC method calls\n */\n/* eslint-disable @typescript-eslint/naming-convention */\ntype PimlicoBundlerSchema = [\n {\n Method: 'pimlico_getUserOperationGasPrice';\n Parameters: [];\n ReturnType: UserOperationGasPriceResponse;\n },\n];\n\n/**\n * Infura bundler actions for extending bundler clients.\n *\n * @returns A function that takes a client and returns the client extension with Infura bundler actions.\n */\nconst infuraBundlerActions = () => (client: Client) => ({\n /**\n * Get user operation gas prices from Infura bundler.\n * Calls the pimlico_getUserOperationGasPrice RPC method.\n *\n * @returns Promise resolving to gas price tiers (slow, standard, fast).\n * @example\n * ```typescript\n * const gasPrices = await bundlerClient.getUserOperationGasPrice();\n * console.log(gasPrices.standard.maxFeePerGas);\n * ```\n */\n async getUserOperationGasPrice(): Promise<UserOperationGasPriceResponse> {\n const pimlicoClient = client as Client<\n Transport,\n Chain | undefined,\n Account | undefined,\n PimlicoBundlerSchema\n >;\n\n return await pimlicoClient.request({\n method: 'pimlico_getUserOperationGasPrice',\n params: [],\n });\n },\n});\n\n/**\n * Type for bundler client extended with Infura bundler actions.\n */\nexport type InfuraBundlerClient<\n TTransport extends Transport = Transport,\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends SmartAccount | undefined = SmartAccount | undefined,\n> = BundlerClient<TTransport, TChain, TAccount> & {\n /**\n * Get user operation gas prices from Infura bundler.\n * Calls the pimlico_getUserOperationGasPrice RPC method.\n *\n * @returns Promise resolving to gas price tiers (slow, standard, fast).\n */\n getUserOperationGasPrice(): Promise<UserOperationGasPriceResponse>;\n};\n\n/**\n * Creates an Infura bundler client extended with Infura bundler actions.\n *\n * This is a wrapper around viem's createBundlerClient that extends it with\n * the getUserOperationGasPrice method for retrieving gas prices from Pimlico's\n * bundler infrastructure via Infura's proxy.\n *\n * @param config - Configuration for the bundler client.\n * @returns Extended bundler client with Infura bundler actions.\n * @example\n * ```typescript\n * import { createPublicClient, http } from 'viem';\n * import { sepolia } from 'viem/chains';\n * import { createInfuraBundlerClient } from '@metamask/smart-accounts-kit';\n *\n * const publicClient = createPublicClient({\n * chain: sepolia,\n * transport: http('https://sepolia.infura.io/v3/YOUR_API_KEY'),\n * });\n *\n * const bundlerClient = createInfuraBundlerClient({\n * client: publicClient,\n * transport: http('https://sepolia.infura.io/v3/YOUR_API_KEY'),\n * chain: sepolia,\n * });\n *\n * // Use standard bundler methods\n * const userOpHash = await bundlerClient.sendUserOperation({...});\n *\n * // Use Infura specific methods\n * const gasPrices = await bundlerClient.getUserOperationGasPrice();\n * ```\n */\nexport function createInfuraBundlerClient<\n TTransport extends Transport,\n TChain extends Chain | undefined = undefined,\n TAccount extends SmartAccount | undefined = undefined,\n>(\n config: BundlerClientConfig<TTransport, TChain, TAccount>,\n): InfuraBundlerClient<TTransport, TChain, TAccount> {\n // Create the base bundler client using viem's function\n const baseBundlerClient = createBundlerClient(config);\n\n // Extend the client with Infura bundler actions\n return baseBundlerClient.extend(\n infuraBundlerActions(),\n ) as unknown as InfuraBundlerClient<TTransport, TChain, TAccount>;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/index.cjs","../src/toMetaMaskSmartAccount.ts","../src/signer.ts","../src/signatures.ts","../src/actions/caveatEnforcerClient.ts","../src/actions/infuraBundlerClient.ts"],"names":["signTypedData","signMessage","getStubSignature","signUserOperation","signDelegation"],"mappings":"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","file":"/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/index.cjs","sourcesContent":[null,"import {\n EIP7702StatelessDeleGator,\n HybridDeleGator,\n MultiSigDeleGator,\n} from '@metamask/delegation-abis';\nimport { type Address, type Hex } from 'viem';\nimport {\n entryPoint07Abi,\n toPackedUserOperation,\n toSmartAccount,\n} from 'viem/account-abstraction';\n\nimport { isValid7702Implementation } from './actions/isValid7702Implementation';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\nimport { entryPointGetNonce as _getNonce } from './DelegationFramework/EntryPoint/read';\nimport { encodeCallsForCaller } from './encodeCalls';\nimport { resolveSigner } from './signer';\nimport { getSmartAccountsEnvironment } from './smartAccountsEnvironment';\nimport type {\n Call,\n ToMetaMaskSmartAccountParameters,\n ToMetaMaskSmartAccountReturnType,\n SignDelegationParams,\n SignUserOperationParams,\n AbiByImplementation,\n} from './types';\nimport { SIGNABLE_USER_OP_TYPED_DATA } from './userOp';\n\nconst ENTRYPOINT_VERSION = '0.7' as const;\n\n/**\n * Creates a MetaMask DeleGator smart account instance.\n *\n * @template TImplementation - The type of implementation, extending Implementation.\n * @param params - The parameters for creating the smart account.\n * @returns A promise that resolves to a MetaMaskSmartAccount instance.\n * @description\n * This function sets up a MetaMask DeleGator smart account with the specified implementation.\n * It handles both deployed accounts, and counterfactual accounts.\n * A caller may specify a SmartAccountsEnvironment, otherwise the environment will be inferred from the chain.\n */\nexport async function toMetaMaskSmartAccount<\n TImplementation extends Implementation,\n>(\n params: ToMetaMaskSmartAccountParameters<TImplementation>,\n): Promise<ToMetaMaskSmartAccountReturnType<TImplementation>> {\n const {\n client,\n client: { chain },\n implementation,\n } = params;\n\n if (!chain) {\n throw new Error('Chain not specified');\n }\n\n const signer = resolveSigner({\n implementation,\n signer: params.signer,\n });\n\n const environment =\n params.environment ?? getSmartAccountsEnvironment(chain.id);\n\n let address: Address, factoryData: Hex | undefined;\n\n if (params.address) {\n factoryData = undefined;\n address = params.address;\n } else {\n if (implementation === Implementation.Stateless7702) {\n throw new Error('Stateless7702 does not support counterfactual accounts');\n }\n\n const accountData = await getCounterfactualAccountData({\n factory: environment.SimpleFactory,\n implementations: environment.implementations,\n implementation,\n deployParams: params.deployParams,\n deploySalt: params.deploySalt,\n });\n\n address = accountData.address;\n factoryData = accountData.factoryData;\n }\n\n const entryPoint = {\n abi: entryPoint07Abi,\n address: environment.EntryPoint,\n version: ENTRYPOINT_VERSION,\n } as const;\n\n const { abi, contractName } = {\n [Implementation.Hybrid]: {\n contractName: 'HybridDeleGator',\n abi: HybridDeleGator,\n },\n [Implementation.MultiSig]: {\n contractName: 'MultiSigDeleGator',\n abi: MultiSigDeleGator,\n },\n [Implementation.Stateless7702]: {\n contractName: 'EIP7702StatelessDeleGator',\n abi: EIP7702StatelessDeleGator,\n },\n }[implementation] as {\n contractName: string;\n abi: AbiByImplementation[TImplementation];\n };\n\n const getFactoryArgs = async () => {\n if (factoryData === undefined) {\n throw new Error(\n 'Deploy params were not provided, so factory args cannot be inferred',\n );\n }\n return {\n factoryData,\n factory: environment.SimpleFactory,\n };\n };\n\n const signDelegation = async (delegationParams: SignDelegationParams) => {\n if (!signer) {\n throw new Error(\n 'Cannot sign delegation: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations.',\n );\n }\n\n const { delegation, chainId } = delegationParams;\n\n const delegationStruct = toDelegationStruct({\n ...delegation,\n signature: '0x',\n });\n\n const signature = await signer.signTypedData({\n domain: {\n chainId: chainId ?? chain.id,\n name: 'DelegationManager',\n version: '1',\n verifyingContract: environment.DelegationManager,\n },\n types: SIGNABLE_DELEGATION_TYPED_DATA,\n primaryType: 'Delegation',\n message: delegationStruct,\n });\n\n return signature;\n };\n\n const signUserOperation = async (userOpParams: SignUserOperationParams) => {\n if (!signer) {\n throw new Error(\n 'Cannot sign user operation: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations.',\n );\n }\n\n const { chainId } = userOpParams;\n\n const packedUserOp = toPackedUserOperation({\n sender: address,\n ...userOpParams,\n signature: '0x',\n });\n\n const signature = await signer.signTypedData({\n domain: {\n chainId: chainId ?? chain.id,\n name: contractName,\n version: '1',\n verifyingContract: address,\n },\n types: SIGNABLE_USER_OP_TYPED_DATA,\n primaryType: 'PackedUserOperation',\n message: { ...packedUserOp, entryPoint: entryPoint.address },\n });\n\n return signature;\n };\n\n const getAddress = async () => address;\n\n const getNonce = async () =>\n _getNonce({\n client,\n entryPoint: environment.EntryPoint,\n contractAddress: address,\n key: 0n,\n });\n\n const encodeCalls = async (calls: readonly Call[]) =>\n encodeCallsForCaller(address, calls);\n\n const signerMethods = signer ?? {\n signMessage: async () => {\n throw new Error(\n 'Cannot sign message: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations.',\n );\n },\n signTypedData: async () => {\n throw new Error(\n 'Cannot sign typed data: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations.',\n );\n },\n getStubSignature: async () => {\n throw new Error(\n 'Cannot get stub signature: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations.',\n );\n },\n };\n\n const smartAccount = await toSmartAccount({\n abi,\n client,\n entryPoint,\n environment,\n getAddress,\n getFactoryArgs,\n encodeCalls,\n getNonce,\n signUserOperation,\n signDelegation,\n ...signerMethods,\n });\n\n // Override isDeployed only for EIP-7702 implementation to check proper delegation code\n if (implementation === Implementation.Stateless7702) {\n return {\n ...smartAccount,\n isDeployed: async () =>\n isValid7702Implementation({\n client,\n accountAddress: address,\n environment,\n }),\n };\n }\n\n // For other implementations, use the default isDeployed behavior\n return smartAccount;\n}\n","import { concat } from 'viem';\nimport type {\n Address,\n SignableMessage,\n TypedData,\n TypedDataDefinition,\n} from 'viem';\nimport type { WebAuthnAccount } from 'viem/account-abstraction';\n\nimport { Implementation } from './constants';\nimport { aggregateSignature } from './signatures';\nimport type {\n AccountSignerConfig,\n HybridSignerConfig,\n InternalSigner,\n MultiSigSignerConfig,\n SignerConfigByImplementation,\n Stateless7702SignerConfig,\n WalletSignerConfig,\n} from './types';\nimport {\n createDummyWebAuthnSignature,\n encodeDeleGatorSignature,\n} from './webAuthn';\n\n// A valid ECDSA signature, this must be able to ecrecover an address, otherwise the contracts will revert in isValidSignature\nconst EOA_STUB_SIGNATURE =\n '0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b' as const;\n\nconst resolveSignerFromWalletConfig = (\n config: WalletSignerConfig,\n): InternalSigner => {\n return {\n signMessage: config.walletClient.signMessage,\n signTypedData: async (typedData) => {\n // todo: figure out this type so that we don't need the type assertion\n return config.walletClient.signTypedData(typedData as any);\n },\n getStubSignature: async () => EOA_STUB_SIGNATURE,\n };\n};\n\nconst resolveSignerFromAccountConfig = (config: AccountSignerConfig) => {\n return {\n signMessage: config.account.signMessage,\n signTypedData: config.account.signTypedData,\n getStubSignature: async () => EOA_STUB_SIGNATURE,\n };\n};\n\nconst resolveHybridSigner = (config: HybridSignerConfig): InternalSigner => {\n if ('walletClient' in config) {\n return resolveSignerFromWalletConfig(config);\n } else if ('account' in config) {\n const { signMessage, signTypedData, getStubSignature } =\n resolveSignerFromAccountConfig(config);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n }\n const { keyId, webAuthnAccount } = config;\n\n if (webAuthnAccount.type !== 'webAuthn') {\n throw new Error('Account is not a webAuthn account');\n }\n\n const encodeSignature = (\n result: Awaited<ReturnType<WebAuthnAccount['signMessage']>>,\n ) =>\n encodeDeleGatorSignature(\n keyId,\n result.signature,\n result.webauthn.clientDataJSON,\n result.webauthn.authenticatorData,\n );\n\n const signMessage = async (args: { message: SignableMessage }) =>\n webAuthnAccount.signMessage(args).then(encodeSignature);\n const signTypedData = async <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(\n typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n ) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);\n\n const getStubSignature = async () => createDummyWebAuthnSignature(keyId);\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n};\n\nconst resolveMultiSigSigner = (\n config: MultiSigSignerConfig,\n): InternalSigner => {\n const resolvedSigners = config.map((signer) => {\n let individualSignMessage: InternalSigner['signMessage'];\n let individualSignTypedData: InternalSigner['signTypedData'];\n let address: Address;\n if ('walletClient' in signer) {\n const { signMessage, signTypedData } =\n resolveSignerFromWalletConfig(signer);\n individualSignMessage = signMessage;\n individualSignTypedData = signTypedData;\n\n address = signer.walletClient.account.address;\n } else {\n const { signMessage, signTypedData } =\n resolveSignerFromAccountConfig(signer);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n\n individualSignMessage = signMessage;\n individualSignTypedData = signTypedData;\n\n address = signer.account.address;\n }\n return {\n address,\n individualSignMessage,\n individualSignTypedData,\n };\n });\n\n const signMessage = async (args: { message: SignableMessage }) => {\n const addressAndSignatures = resolvedSigners.map(\n async ({ individualSignMessage, address }) => ({\n signature: await individualSignMessage(args),\n signer: address,\n type: 'ECDSA' as const,\n }),\n );\n\n const signatures = await Promise.all(addressAndSignatures);\n\n return aggregateSignature({\n signatures,\n });\n };\n\n const signTypedData = async <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(\n typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n ) => {\n const addressAndSignatures = resolvedSigners.map(\n async ({ individualSignTypedData, address }) => ({\n signature: await individualSignTypedData(typedDataDefinition),\n signer: address,\n type: 'ECDSA' as const,\n }),\n );\n\n const signatures = await Promise.all(addressAndSignatures);\n\n return aggregateSignature({\n signatures,\n });\n };\n\n const getStubSignature = async () =>\n concat(resolvedSigners.map(() => EOA_STUB_SIGNATURE));\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n};\n\nconst resolveStateless7702Signer = (\n config: Stateless7702SignerConfig,\n): InternalSigner => {\n if ('walletClient' in config) {\n return resolveSignerFromWalletConfig(config);\n } else if ('account' in config) {\n const { signMessage, signTypedData, getStubSignature } =\n resolveSignerFromAccountConfig(config);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n }\n\n throw new Error('Invalid signer config');\n};\n\n/**\n * Resolve a signer from a configuration object.\n *\n * @param config - The configuration object.\n * @param config.implementation - The implementation type.\n * @param config.signer - The signer configuration object.\n * @returns The resolved signer.\n */\nexport function resolveSigner<TImplementation extends Implementation>(config: {\n implementation: TImplementation;\n signer: SignerConfigByImplementation<TImplementation>;\n}): InternalSigner;\n\n/**\n * Resolve a signer from a configuration object. If no signer is provided, return null.\n *\n * @param config - The configuration object.\n * @param config.implementation - The implementation type.\n * @param config.signer - The signer configuration object.\n * @returns The resolved signer or null if no signer is provided.\n */\nexport function resolveSigner<TImplementation extends Implementation>(config: {\n implementation: TImplementation;\n signer?: SignerConfigByImplementation<TImplementation>;\n}): InternalSigner | null;\n\n/**\n * Resolve a signer from a configuration object. If no signer is provided, return null.\n *\n * @param config - The configuration object.\n * @param config.implementation - The implementation type.\n * @param config.signer - The signer configuration object.\n * @returns The resolved signer or null if no signer is provided.\n */\nexport function resolveSigner<TImplementation extends Implementation>(config: {\n implementation: TImplementation;\n signer?: SignerConfigByImplementation<TImplementation>;\n}): InternalSigner | null {\n const { implementation, signer } = config;\n\n if (!signer) {\n return null;\n }\n\n if (implementation === Implementation.Hybrid) {\n return resolveHybridSigner(signer as HybridSignerConfig);\n } else if (implementation === Implementation.MultiSig) {\n return resolveMultiSigSigner(signer as MultiSigSignerConfig);\n } else if (implementation === Implementation.Stateless7702) {\n return resolveStateless7702Signer(signer as Stateless7702SignerConfig);\n }\n throw new Error(`Implementation type '${implementation}' not supported`);\n}\n","import type { Address, Hex } from 'viem';\nimport { concat } from 'viem';\n\nconst signatureTypes = ['ECDSA'] as const;\n\nexport type SignatureType = (typeof signatureTypes)[number];\n\n/**\n * Represents a partial signature that can be aggregated with others.\n */\nexport type PartialSignature = {\n signer: Address;\n signature: Hex;\n type: SignatureType;\n};\n\n/**\n * Aggregates signatures into a single signature as expected by the MultiSig implementation.\n *\n * @param params - The parameters for signature aggregation.\n * @param params.signatures - The array of partial signatures to aggregate.\n * @returns The aggregated signature.\n */\nexport const aggregateSignature = ({\n signatures,\n}: {\n signatures: PartialSignature[];\n}): Hex => {\n if (signatures.length === 0) {\n return '0x';\n }\n\n for (const { type } of signatures) {\n if (!signatureTypes.includes(type)) {\n throw new Error(`Invalid signature type: ${type}`);\n }\n }\n\n // Sort signatures by signer address as required by MultiSig implementation\n const sortedSignatures = [...signatures].sort((a, b) =>\n a.signer.localeCompare(b.signer),\n );\n\n // Concatenate all signatures\n return concat(sortedSignatures.map(({ signature }) => signature));\n};\n\n/**\n * Type definition for the aggregateSignature function parameters.\n */\nexport type AggregateSignatureParams = {\n signatures: PartialSignature[];\n};\n","import type { Client, Transport, Chain, Account } from 'viem';\n\nimport type { SmartAccountsEnvironment } from '../types';\nimport {\n caveatEnforcerActions,\n type CaveatEnforcerParams,\n type PeriodTransferResult,\n type StreamingResult,\n} from './getCaveatAvailableAmount';\n\n/**\n * Type for client extended with caveat enforcer actions.\n */\nexport type CaveatEnforcerClient<\n TTransport extends Transport = Transport,\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends Account | undefined = Account | undefined,\n> = Client<TTransport, TChain, TAccount> &\n ReturnType<ReturnType<typeof caveatEnforcerActions>>;\n\n/**\n * Create a viem client extended with caveat enforcer actions.\n *\n * @param params - The parameters object.\n * @param params.client - The viem client.\n * @param params.environment - The SmartAccountsEnvironment.\n * @returns The extended client with caveat enforcer actions.\n */\nexport function createCaveatEnforcerClient<\n TTransport extends Transport = Transport,\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends Account | undefined = Account | undefined,\n>({\n client,\n environment,\n}: {\n client: Client<TTransport, TChain, TAccount>;\n environment: SmartAccountsEnvironment;\n}): CaveatEnforcerClient<TTransport, TChain, TAccount> {\n return client.extend(caveatEnforcerActions({ environment }));\n}\n\n// Re-export types for convenience\nexport type { CaveatEnforcerParams, PeriodTransferResult, StreamingResult };\n","import type { Transport, Chain, Hex, Client, Account } from 'viem';\nimport {\n createBundlerClient,\n type BundlerClient,\n type BundlerClientConfig,\n type SmartAccount,\n} from 'viem/account-abstraction';\n\n/**\n * Gas price tiers returned by pimlico_getUserOperationGasPrice\n */\nexport type GasPriceTier = {\n /** Maximum fee per gas in hex format */\n maxFeePerGas: Hex;\n /** Maximum priority fee per gas in hex format */\n maxPriorityFeePerGas: Hex;\n};\n\n/**\n * Response from pimlico_getUserOperationGasPrice RPC method\n */\nexport type UserOperationGasPriceResponse = {\n /** Slow gas price tier */\n slow: GasPriceTier;\n /** Standard gas price tier */\n standard: GasPriceTier;\n /** Fast gas price tier */\n fast: GasPriceTier;\n};\n\n/**\n * Pimlico bundler schema for type-safe RPC method calls\n */\n/* eslint-disable @typescript-eslint/naming-convention */\ntype PimlicoBundlerSchema = [\n {\n Method: 'pimlico_getUserOperationGasPrice';\n Parameters: [];\n ReturnType: UserOperationGasPriceResponse;\n },\n];\n\n/**\n * Infura bundler actions for extending bundler clients.\n *\n * @returns A function that takes a client and returns the client extension with Infura bundler actions.\n */\nconst infuraBundlerActions = () => (client: Client) => ({\n /**\n * Get user operation gas prices from Infura bundler.\n * Calls the pimlico_getUserOperationGasPrice RPC method.\n *\n * @returns Promise resolving to gas price tiers (slow, standard, fast).\n * @example\n * ```typescript\n * const gasPrices = await bundlerClient.getUserOperationGasPrice();\n * console.log(gasPrices.standard.maxFeePerGas);\n * ```\n */\n async getUserOperationGasPrice(): Promise<UserOperationGasPriceResponse> {\n const pimlicoClient = client as Client<\n Transport,\n Chain | undefined,\n Account | undefined,\n PimlicoBundlerSchema\n >;\n\n return await pimlicoClient.request({\n method: 'pimlico_getUserOperationGasPrice',\n params: [],\n });\n },\n});\n\n/**\n * Type for bundler client extended with Infura bundler actions.\n */\nexport type InfuraBundlerClient<\n TTransport extends Transport = Transport,\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends SmartAccount | undefined = SmartAccount | undefined,\n> = BundlerClient<TTransport, TChain, TAccount> & {\n /**\n * Get user operation gas prices from Infura bundler.\n * Calls the pimlico_getUserOperationGasPrice RPC method.\n *\n * @returns Promise resolving to gas price tiers (slow, standard, fast).\n */\n getUserOperationGasPrice(): Promise<UserOperationGasPriceResponse>;\n};\n\n/**\n * Creates an Infura bundler client extended with Infura bundler actions.\n *\n * This is a wrapper around viem's createBundlerClient that extends it with\n * the getUserOperationGasPrice method for retrieving gas prices from Pimlico's\n * bundler infrastructure via Infura's proxy.\n *\n * @param config - Configuration for the bundler client.\n * @returns Extended bundler client with Infura bundler actions.\n * @example\n * ```typescript\n * import { createPublicClient, http } from 'viem';\n * import { sepolia } from 'viem/chains';\n * import { createInfuraBundlerClient } from '@metamask/smart-accounts-kit';\n *\n * const publicClient = createPublicClient({\n * chain: sepolia,\n * transport: http('https://sepolia.infura.io/v3/YOUR_API_KEY'),\n * });\n *\n * const bundlerClient = createInfuraBundlerClient({\n * client: publicClient,\n * transport: http('https://sepolia.infura.io/v3/YOUR_API_KEY'),\n * chain: sepolia,\n * });\n *\n * // Use standard bundler methods\n * const userOpHash = await bundlerClient.sendUserOperation({...});\n *\n * // Use Infura specific methods\n * const gasPrices = await bundlerClient.getUserOperationGasPrice();\n * ```\n */\nexport function createInfuraBundlerClient<\n TTransport extends Transport,\n TChain extends Chain | undefined = undefined,\n TAccount extends SmartAccount | undefined = undefined,\n>(\n config: BundlerClientConfig<TTransport, TChain, TAccount>,\n): InfuraBundlerClient<TTransport, TChain, TAccount> {\n // Create the base bundler client using viem's function\n const baseBundlerClient = createBundlerClient(config);\n\n // Extend the client with Infura bundler actions\n return baseBundlerClient.extend(\n infuraBundlerActions(),\n ) as unknown as InfuraBundlerClient<TTransport, TChain, TAccount>;\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,12 +1,12 @@
1
- import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, C as Caveat, R as Redemption, S as SmartAccountsEnvironment } from './types-B9GE5CfG.cjs';
2
- export { A as AccountSignerConfig, l as CreateExecutionArgs, D as Delegation, E as ExecutionMode, k as ExecutionStruct, H as HybridDeleGatorDeployParams, g as HybridSignerConfig, e as MetaMaskSmartAccount, d as MetaMaskSmartAccountImplementation, M as MultiSigDeleGatorDeployParams, h as MultiSigSignerConfig, c as SignDelegationParams, b as SignUserOperationParams, i as TransferWindow, W as WalletSignerConfig, f as WebAuthnSignerConfig, j as createExecution } from './types-B9GE5CfG.cjs';
3
- export { B as BalanceChangeType, d as Caveats, C as CreateDelegationOptions, b as CreateOpenDelegationOptions, c as createDelegation, a as createOpenDelegation, s as signDelegation } from './delegation-Bd2v5lF5.cjs';
4
- export { P as PREFERRED_VERSION, g as getSmartAccountsEnvironment } from './smartAccountsEnvironment-YDC3jB33.cjs';
5
- import { Hex, Address, WalletClient, PublicClient, Transport, Chain, Account, Client } from 'viem';
1
+ import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, C as Caveat, S as SmartAccountsEnvironment } from './types-qdEHxd5Q.cjs';
2
+ export { A as AccountSignerConfig, k as CaveatType, D as Delegation, H as HybridDeleGatorDeployParams, g as HybridSignerConfig, e as MetaMaskSmartAccount, d as MetaMaskSmartAccountImplementation, M as MultiSigDeleGatorDeployParams, h as MultiSigSignerConfig, P as PermissionContext, j as ScopeType, c as SignDelegationParams, b as SignUserOperationParams, i as TransferWindow, W as WalletSignerConfig, f as WebAuthnSignerConfig } from './types-qdEHxd5Q.cjs';
3
+ export { B as BalanceChangeType, g as Caveats, C as CreateDelegationOptions, f as CreateExecutionArgs, b as CreateOpenDelegationOptions, E as ExecutionMode, e as ExecutionStruct, c as createDelegation, d as createExecution, a as createOpenDelegation, s as signDelegation } from './delegation-DIriDFkq.cjs';
4
+ export { P as PREFERRED_VERSION, g as getSmartAccountsEnvironment } from './smartAccountsEnvironment-Czw9KUYZ.cjs';
5
+ import { Hex, Address, Transport, Chain, Account, Client } from 'viem';
6
6
  export { s as signUserOperation } from './userOp-DKgjzz7B.cjs';
7
- export { i as contracts } from './index-B9w3fRT-.cjs';
8
- import { c as caveatEnforcerActions } from './index-C8wAvC29.cjs';
9
- export { i as actions } from './index-C8wAvC29.cjs';
7
+ export { i as contracts } from './index-DC9baw8F.cjs';
8
+ import { c as caveatEnforcerActions } from './index-Dvc4ir4O.cjs';
9
+ export { i as actions } from './index-Dvc4ir4O.cjs';
10
10
  import { SmartAccount, BundlerClientConfig, BundlerClient } from 'viem/account-abstraction';
11
11
  export { ANY_BENEFICIARY, ROOT_AUTHORITY } from '@metamask/delegation-core';
12
12
  import '@metamask/delegation-abis';
@@ -31,8 +31,6 @@ type AggregateSignatureParams = {
31
31
  signatures: PartialSignature[];
32
32
  };
33
33
 
34
- declare const redeemDelegations: (walletClient: WalletClient, publicClient: PublicClient, delegationManagerAddress: Address, redemptions: Redemption[]) => Promise<`0x${string}`>;
35
-
36
34
  type CaveatEnforcerClient<TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined> = Client<TTransport, TChain, TAccount> & ReturnType<ReturnType<typeof caveatEnforcerActions>>;
37
35
  declare function createCaveatEnforcerClient<TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined>({ client, environment, }: {
38
36
  client: Client<TTransport, TChain, TAccount>;
@@ -53,4 +51,4 @@ type InfuraBundlerClient<TTransport extends Transport = Transport, TChain extend
53
51
  };
54
52
  declare function createInfuraBundlerClient<TTransport extends Transport, TChain extends Chain | undefined = undefined, TAccount extends SmartAccount | undefined = undefined>(config: BundlerClientConfig<TTransport, TChain, TAccount>): InfuraBundlerClient<TTransport, TChain, TAccount>;
55
53
 
56
- export { type AggregateSignatureParams, Caveat, type CaveatEnforcerClient, type GasPriceTier, Implementation, type InfuraBundlerClient, type PartialSignature, type SignatureType, SmartAccountsEnvironment, ToMetaMaskSmartAccountReturnType, type UserOperationGasPriceResponse, aggregateSignature, createCaveat, createCaveatEnforcerClient, createInfuraBundlerClient, redeemDelegations, toMetaMaskSmartAccount };
54
+ export { type AggregateSignatureParams, Caveat, type CaveatEnforcerClient, type GasPriceTier, Implementation, type InfuraBundlerClient, type PartialSignature, type SignatureType, SmartAccountsEnvironment, ToMetaMaskSmartAccountReturnType, type UserOperationGasPriceResponse, aggregateSignature, createCaveat, createCaveatEnforcerClient, createInfuraBundlerClient, toMetaMaskSmartAccount };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, C as Caveat, R as Redemption, S as SmartAccountsEnvironment } from './types-B9GE5CfG.js';
2
- export { A as AccountSignerConfig, l as CreateExecutionArgs, D as Delegation, E as ExecutionMode, k as ExecutionStruct, H as HybridDeleGatorDeployParams, g as HybridSignerConfig, e as MetaMaskSmartAccount, d as MetaMaskSmartAccountImplementation, M as MultiSigDeleGatorDeployParams, h as MultiSigSignerConfig, c as SignDelegationParams, b as SignUserOperationParams, i as TransferWindow, W as WalletSignerConfig, f as WebAuthnSignerConfig, j as createExecution } from './types-B9GE5CfG.js';
3
- export { B as BalanceChangeType, d as Caveats, C as CreateDelegationOptions, b as CreateOpenDelegationOptions, c as createDelegation, a as createOpenDelegation, s as signDelegation } from './delegation-sP7mnAkl.js';
4
- export { P as PREFERRED_VERSION, g as getSmartAccountsEnvironment } from './smartAccountsEnvironment-EW722Cnw.js';
5
- import { Hex, Address, WalletClient, PublicClient, Transport, Chain, Account, Client } from 'viem';
1
+ import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, C as Caveat, S as SmartAccountsEnvironment } from './types-qdEHxd5Q.js';
2
+ export { A as AccountSignerConfig, k as CaveatType, D as Delegation, H as HybridDeleGatorDeployParams, g as HybridSignerConfig, e as MetaMaskSmartAccount, d as MetaMaskSmartAccountImplementation, M as MultiSigDeleGatorDeployParams, h as MultiSigSignerConfig, P as PermissionContext, j as ScopeType, c as SignDelegationParams, b as SignUserOperationParams, i as TransferWindow, W as WalletSignerConfig, f as WebAuthnSignerConfig } from './types-qdEHxd5Q.js';
3
+ export { B as BalanceChangeType, g as Caveats, C as CreateDelegationOptions, f as CreateExecutionArgs, b as CreateOpenDelegationOptions, E as ExecutionMode, e as ExecutionStruct, c as createDelegation, d as createExecution, a as createOpenDelegation, s as signDelegation } from './delegation-CvVXs0PO.js';
4
+ export { P as PREFERRED_VERSION, g as getSmartAccountsEnvironment } from './smartAccountsEnvironment-u1CcFcGE.js';
5
+ import { Hex, Address, Transport, Chain, Account, Client } from 'viem';
6
6
  export { s as signUserOperation } from './userOp-DKgjzz7B.js';
7
- export { i as contracts } from './index-DpokPMZc.js';
8
- import { c as caveatEnforcerActions } from './index-Bfcoh3WQ.js';
9
- export { i as actions } from './index-Bfcoh3WQ.js';
7
+ export { i as contracts } from './index-ChTryO1-.js';
8
+ import { c as caveatEnforcerActions } from './index-5EdxVa_d.js';
9
+ export { i as actions } from './index-5EdxVa_d.js';
10
10
  import { SmartAccount, BundlerClientConfig, BundlerClient } from 'viem/account-abstraction';
11
11
  export { ANY_BENEFICIARY, ROOT_AUTHORITY } from '@metamask/delegation-core';
12
12
  import '@metamask/delegation-abis';
@@ -31,8 +31,6 @@ type AggregateSignatureParams = {
31
31
  signatures: PartialSignature[];
32
32
  };
33
33
 
34
- declare const redeemDelegations: (walletClient: WalletClient, publicClient: PublicClient, delegationManagerAddress: Address, redemptions: Redemption[]) => Promise<`0x${string}`>;
35
-
36
34
  type CaveatEnforcerClient<TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined> = Client<TTransport, TChain, TAccount> & ReturnType<ReturnType<typeof caveatEnforcerActions>>;
37
35
  declare function createCaveatEnforcerClient<TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined>({ client, environment, }: {
38
36
  client: Client<TTransport, TChain, TAccount>;
@@ -53,4 +51,4 @@ type InfuraBundlerClient<TTransport extends Transport = Transport, TChain extend
53
51
  };
54
52
  declare function createInfuraBundlerClient<TTransport extends Transport, TChain extends Chain | undefined = undefined, TAccount extends SmartAccount | undefined = undefined>(config: BundlerClientConfig<TTransport, TChain, TAccount>): InfuraBundlerClient<TTransport, TChain, TAccount>;
55
53
 
56
- export { type AggregateSignatureParams, Caveat, type CaveatEnforcerClient, type GasPriceTier, Implementation, type InfuraBundlerClient, type PartialSignature, type SignatureType, SmartAccountsEnvironment, ToMetaMaskSmartAccountReturnType, type UserOperationGasPriceResponse, aggregateSignature, createCaveat, createCaveatEnforcerClient, createInfuraBundlerClient, redeemDelegations, toMetaMaskSmartAccount };
54
+ export { type AggregateSignatureParams, Caveat, type CaveatEnforcerClient, type GasPriceTier, Implementation, type InfuraBundlerClient, type PartialSignature, type SignatureType, SmartAccountsEnvironment, ToMetaMaskSmartAccountReturnType, type UserOperationGasPriceResponse, aggregateSignature, createCaveat, createCaveatEnforcerClient, createInfuraBundlerClient, toMetaMaskSmartAccount };
package/dist/index.mjs CHANGED
@@ -2,28 +2,25 @@ import {
2
2
  actions_exports,
3
3
  caveatEnforcerActions,
4
4
  isValid7702Implementation
5
- } from "./chunk-YYZWHBF2.mjs";
5
+ } from "./chunk-NOCLGZGB.mjs";
6
6
  import {
7
7
  contracts_exports,
8
8
  read
9
- } from "./chunk-GH5EK5MB.mjs";
10
- import "./chunk-XUVEYTD2.mjs";
9
+ } from "./chunk-33AMUJBJ.mjs";
10
+ import "./chunk-YTELOQ4I.mjs";
11
11
  import {
12
- Implementation,
13
- TransferWindow,
14
12
  createDummyWebAuthnSignature,
15
13
  encodeCallsForCaller,
16
14
  encodeDeleGatorSignature,
17
15
  getCounterfactualAccountData
18
- } from "./chunk-DRVPD5QI.mjs";
16
+ } from "./chunk-45GHWVQA.mjs";
19
17
  import {
20
18
  PREFERRED_VERSION,
21
19
  SIGNABLE_USER_OP_TYPED_DATA,
22
20
  getSmartAccountsEnvironment,
23
- redeemDelegations,
24
21
  signUserOperation
25
- } from "./chunk-5FLY3IPW.mjs";
26
- import "./chunk-ZTGEG2ZA.mjs";
22
+ } from "./chunk-QCULIK3O.mjs";
23
+ import "./chunk-WV2R7BXP.mjs";
27
24
  import {
28
25
  ExecutionMode,
29
26
  createExecution
@@ -31,14 +28,18 @@ import {
31
28
  import {
32
29
  ANY_BENEFICIARY,
33
30
  BalanceChangeType,
31
+ CaveatType,
32
+ Implementation,
34
33
  ROOT_AUTHORITY,
35
34
  SIGNABLE_DELEGATION_TYPED_DATA,
35
+ ScopeType,
36
+ TransferWindow,
36
37
  createCaveat,
37
38
  createDelegation,
38
39
  createOpenDelegation,
39
40
  signDelegation,
40
41
  toDelegationStruct
41
- } from "./chunk-TEH426Y4.mjs";
42
+ } from "./chunk-C5ZEEH2Z.mjs";
42
43
 
43
44
  // src/toMetaMaskSmartAccount.ts
44
45
  import {
@@ -114,11 +115,11 @@ var resolveHybridSigner = (config) => {
114
115
  if (webAuthnAccount.type !== "webAuthn") {
115
116
  throw new Error("Account is not a webAuthn account");
116
117
  }
117
- const encodeSignature = ({ signature, webauthn }) => encodeDeleGatorSignature(
118
+ const encodeSignature = (result) => encodeDeleGatorSignature(
118
119
  keyId,
119
- signature,
120
- webauthn.clientDataJSON,
121
- webauthn.authenticatorData
120
+ result.signature,
121
+ result.webauthn.clientDataJSON,
122
+ result.webauthn.authenticatorData
122
123
  );
123
124
  const signMessage = async (args) => webAuthnAccount.signMessage(args).then(encodeSignature);
124
125
  const signTypedData = async (typedDataDefinition) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);
@@ -209,19 +210,20 @@ var resolveStateless7702Signer = (config) => {
209
210
  }
210
211
  throw new Error("Invalid signer config");
211
212
  };
212
- var resolveSigner = (config) => {
213
- const { implementation } = config;
213
+ function resolveSigner(config) {
214
+ const { implementation, signer } = config;
215
+ if (!signer) {
216
+ return null;
217
+ }
214
218
  if (implementation === "Hybrid" /* Hybrid */) {
215
- return resolveHybridSigner(config.signer);
219
+ return resolveHybridSigner(signer);
216
220
  } else if (implementation === "MultiSig" /* MultiSig */) {
217
- return resolveMultiSigSigner(config.signer);
221
+ return resolveMultiSigSigner(signer);
218
222
  } else if (implementation === "Stateless7702" /* Stateless7702 */) {
219
- return resolveStateless7702Signer(
220
- config.signer
221
- );
223
+ return resolveStateless7702Signer(signer);
222
224
  }
223
225
  throw new Error(`Implementation type '${implementation}' not supported`);
224
- };
226
+ }
225
227
 
226
228
  // src/toMetaMaskSmartAccount.ts
227
229
  var ENTRYPOINT_VERSION = "0.7";
@@ -288,12 +290,17 @@ async function toMetaMaskSmartAccount(params) {
288
290
  };
289
291
  };
290
292
  const signDelegation2 = async (delegationParams) => {
293
+ if (!signer) {
294
+ throw new Error(
295
+ "Cannot sign delegation: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
296
+ );
297
+ }
291
298
  const { delegation, chainId } = delegationParams;
292
299
  const delegationStruct = toDelegationStruct({
293
300
  ...delegation,
294
301
  signature: "0x"
295
302
  });
296
- const signature = signer.signTypedData({
303
+ const signature = await signer.signTypedData({
297
304
  domain: {
298
305
  chainId: chainId ?? chain.id,
299
306
  name: "DelegationManager",
@@ -307,6 +314,11 @@ async function toMetaMaskSmartAccount(params) {
307
314
  return signature;
308
315
  };
309
316
  const signUserOperation2 = async (userOpParams) => {
317
+ if (!signer) {
318
+ throw new Error(
319
+ "Cannot sign user operation: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
320
+ );
321
+ }
310
322
  const { chainId } = userOpParams;
311
323
  const packedUserOp = toPackedUserOperation({
312
324
  sender: address,
@@ -334,6 +346,23 @@ async function toMetaMaskSmartAccount(params) {
334
346
  key: 0n
335
347
  });
336
348
  const encodeCalls = async (calls) => encodeCallsForCaller(address, calls);
349
+ const signerMethods = signer ?? {
350
+ signMessage: async () => {
351
+ throw new Error(
352
+ "Cannot sign message: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
353
+ );
354
+ },
355
+ signTypedData: async () => {
356
+ throw new Error(
357
+ "Cannot sign typed data: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
358
+ );
359
+ },
360
+ getStubSignature: async () => {
361
+ throw new Error(
362
+ "Cannot get stub signature: signer not provided. Specify a signer in toMetaMaskSmartAccount() to perform signing operations."
363
+ );
364
+ }
365
+ };
337
366
  const smartAccount = await toSmartAccount({
338
367
  abi,
339
368
  client,
@@ -345,7 +374,7 @@ async function toMetaMaskSmartAccount(params) {
345
374
  getNonce,
346
375
  signUserOperation: signUserOperation2,
347
376
  signDelegation: signDelegation2,
348
- ...signer
377
+ ...signerMethods
349
378
  });
350
379
  if (implementation === "Stateless7702" /* Stateless7702 */) {
351
380
  return {
@@ -401,10 +430,12 @@ function createInfuraBundlerClient(config) {
401
430
  export {
402
431
  ANY_BENEFICIARY,
403
432
  BalanceChangeType,
433
+ CaveatType,
404
434
  ExecutionMode,
405
435
  Implementation,
406
436
  PREFERRED_VERSION,
407
437
  ROOT_AUTHORITY,
438
+ ScopeType,
408
439
  TransferWindow,
409
440
  actions_exports as actions,
410
441
  aggregateSignature,
@@ -416,7 +447,6 @@ export {
416
447
  createInfuraBundlerClient,
417
448
  createOpenDelegation,
418
449
  getSmartAccountsEnvironment,
419
- redeemDelegations,
420
450
  signDelegation,
421
451
  signUserOperation,
422
452
  toMetaMaskSmartAccount