@metamask/smart-accounts-kit 1.6.0 → 2.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 (69) hide show
  1. package/CHANGELOG.md +88 -64
  2. package/dist/actions/index.cjs +4 -4
  3. package/dist/actions/index.d.cts +3 -3
  4. package/dist/actions/index.d.ts +3 -3
  5. package/dist/actions/index.mjs +3 -3
  6. package/dist/{caveats-gqMBZKkI.d.cts → caveats-BEKgygS8.d.cts} +1 -1
  7. package/dist/{caveats-B2OssjV4.d.ts → caveats-DPuxVdYU.d.ts} +1 -1
  8. package/dist/{chunk-W6HPAK4M.cjs → chunk-4PCXDGUF.cjs} +2 -7
  9. package/dist/chunk-4PCXDGUF.cjs.map +1 -0
  10. package/dist/{chunk-K7GTZGKJ.mjs → chunk-56QPXKWD.mjs} +2 -2
  11. package/dist/{chunk-YVU66KSH.mjs → chunk-5ENRJKXL.mjs} +2 -2
  12. package/dist/{chunk-EPU4O7FY.cjs → chunk-7GIUS6HD.cjs} +106 -106
  13. package/dist/chunk-7GIUS6HD.cjs.map +1 -0
  14. package/dist/{chunk-2ZOWIAP3.cjs → chunk-CKKCGKTA.cjs} +62 -62
  15. package/dist/chunk-CKKCGKTA.cjs.map +1 -0
  16. package/dist/{chunk-UJQ3JN3U.mjs → chunk-D55SIIVM.mjs} +3 -3
  17. package/dist/chunk-D55SIIVM.mjs.map +1 -0
  18. package/dist/{chunk-PQPAEHJZ.cjs → chunk-F7R7HDEY.cjs} +12 -12
  19. package/dist/{chunk-PQPAEHJZ.cjs.map → chunk-F7R7HDEY.cjs.map} +1 -1
  20. package/dist/{chunk-DCI2AN4N.cjs → chunk-FC3W7R6D.cjs} +15 -15
  21. package/dist/{chunk-DCI2AN4N.cjs.map → chunk-FC3W7R6D.cjs.map} +1 -1
  22. package/dist/{chunk-L3EZCIY6.mjs → chunk-RDTAD64U.mjs} +4 -4
  23. package/dist/chunk-RDTAD64U.mjs.map +1 -0
  24. package/dist/{chunk-JKVSTPEC.cjs → chunk-TESSVINE.cjs} +13 -13
  25. package/dist/{chunk-JKVSTPEC.cjs.map → chunk-TESSVINE.cjs.map} +1 -1
  26. package/dist/{chunk-TNGQTVSY.mjs → chunk-XBHL6PDR.mjs} +4 -9
  27. package/dist/chunk-XBHL6PDR.mjs.map +1 -0
  28. package/dist/{chunk-AZYTTGON.mjs → chunk-Z4MVJILE.mjs} +3 -3
  29. package/dist/chunk-Z4MVJILE.mjs.map +1 -0
  30. package/dist/contracts/index.cjs +5 -5
  31. package/dist/contracts/index.d.cts +4 -4
  32. package/dist/contracts/index.d.ts +4 -4
  33. package/dist/contracts/index.mjs +4 -4
  34. package/dist/{decodeRevertReason-CmmCpmZ_.d.cts → decodeRevertReason-CSOClzsa.d.cts} +3 -3
  35. package/dist/{decodeRevertReason-dOTpJx2h.d.ts → decodeRevertReason-WjHVQ_Sz.d.ts} +3 -3
  36. package/dist/experimental/index.cjs +66 -38
  37. package/dist/experimental/index.cjs.map +1 -1
  38. package/dist/experimental/index.d.cts +4 -2
  39. package/dist/experimental/index.d.ts +4 -2
  40. package/dist/experimental/index.mjs +50 -22
  41. package/dist/experimental/index.mjs.map +1 -1
  42. package/dist/{index-B1Cmezvh.d.cts → index-BHm75OFP.d.cts} +1 -1
  43. package/dist/{index-BkgdU4LI.d.ts → index-BNHYZ9iU.d.ts} +2 -2
  44. package/dist/{index-DUJmm8Wz.d.ts → index-CgGKjHSr.d.ts} +2 -2
  45. package/dist/{index-Dv4jPzhe.d.cts → index-CsjbdUp_.d.cts} +2 -2
  46. package/dist/{index-LqiEgBjV.d.ts → index-DWvEgBtg.d.ts} +1 -1
  47. package/dist/{index-X7Qn3JTg.d.cts → index-DYJjOeTn.d.cts} +2 -2
  48. package/dist/index.cjs +19 -21
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.cts +8 -8
  51. package/dist/index.d.ts +8 -8
  52. package/dist/index.mjs +7 -9
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/{resolveCaveats-A9xC29l8.d.ts → resolveCaveats-aQPEogPk.d.cts} +2 -2
  55. package/dist/{resolveCaveats-A9xC29l8.d.cts → resolveCaveats-aQPEogPk.d.ts} +2 -2
  56. package/dist/utils/index.cjs +4 -4
  57. package/dist/utils/index.d.cts +5 -5
  58. package/dist/utils/index.d.ts +5 -5
  59. package/dist/utils/index.mjs +3 -3
  60. package/package.json +14 -14
  61. package/dist/chunk-2ZOWIAP3.cjs.map +0 -1
  62. package/dist/chunk-AZYTTGON.mjs.map +0 -1
  63. package/dist/chunk-EPU4O7FY.cjs.map +0 -1
  64. package/dist/chunk-L3EZCIY6.mjs.map +0 -1
  65. package/dist/chunk-TNGQTVSY.mjs.map +0 -1
  66. package/dist/chunk-UJQ3JN3U.mjs.map +0 -1
  67. package/dist/chunk-W6HPAK4M.cjs.map +0 -1
  68. /package/dist/{chunk-K7GTZGKJ.mjs.map → chunk-56QPXKWD.mjs.map} +0 -0
  69. /package/dist/{chunk-YVU66KSH.mjs.map → chunk-5ENRJKXL.mjs.map} +0 -0
package/dist/index.cjs CHANGED
@@ -2,24 +2,24 @@
2
2
 
3
3
 
4
4
 
5
- var _chunk2ZOWIAP3cjs = require('./chunk-2ZOWIAP3.cjs');
5
+ var _chunkCKKCGKTAcjs = require('./chunk-CKKCGKTA.cjs');
6
6
 
7
7
 
8
- var _chunkEPU4O7FYcjs = require('./chunk-EPU4O7FY.cjs');
9
- require('./chunk-PQPAEHJZ.cjs');
8
+ var _chunk7GIUS6HDcjs = require('./chunk-7GIUS6HD.cjs');
9
+ require('./chunk-F7R7HDEY.cjs');
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
- var _chunkDCI2AN4Ncjs = require('./chunk-DCI2AN4N.cjs');
15
+ var _chunkFC3W7R6Dcjs = require('./chunk-FC3W7R6D.cjs');
16
16
 
17
17
 
18
18
 
19
19
 
20
20
 
21
21
  var _chunk2OS36DVVcjs = require('./chunk-2OS36DVV.cjs');
22
- require('./chunk-JKVSTPEC.cjs');
22
+ require('./chunk-TESSVINE.cjs');
23
23
 
24
24
 
25
25
 
@@ -36,7 +36,7 @@ require('./chunk-JKVSTPEC.cjs');
36
36
 
37
37
 
38
38
 
39
- var _chunkW6HPAK4Mcjs = require('./chunk-W6HPAK4M.cjs');
39
+ var _chunk4PCXDGUFcjs = require('./chunk-4PCXDGUF.cjs');
40
40
 
41
41
  // src/toMetaMaskSmartAccount.ts
42
42
 
@@ -59,7 +59,7 @@ var signatureTypes = ["ECDSA"];
59
59
  var aggregateSignature = ({
60
60
  signatures
61
61
  }) => {
62
- _chunkW6HPAK4Mcjs.trackSmartAccountsKitFunctionCall.call(void 0, "aggregateSignature", {
62
+ _chunk4PCXDGUFcjs.trackSmartAccountsKitFunctionCall.call(void 0, "aggregateSignature", {
63
63
  signatureCount: signatures.length
64
64
  });
65
65
  if (signatures.length === 0) {
@@ -115,7 +115,7 @@ var resolveHybridSigner = (config) => {
115
115
  if (webAuthnAccount.type !== "webAuthn") {
116
116
  throw new Error("Account is not a webAuthn account");
117
117
  }
118
- const encodeSignature = (result) => _chunkDCI2AN4Ncjs.encodeDeleGatorSignature.call(void 0,
118
+ const encodeSignature = (result) => _chunkFC3W7R6Dcjs.encodeDeleGatorSignature.call(void 0,
119
119
  keyId,
120
120
  result.signature,
121
121
  result.webauthn.clientDataJSON,
@@ -123,7 +123,7 @@ var resolveHybridSigner = (config) => {
123
123
  );
124
124
  const signMessage = async (args) => webAuthnAccount.signMessage(args).then(encodeSignature);
125
125
  const signTypedData = async (typedDataDefinition) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);
126
- const getStubSignature = async () => _chunkDCI2AN4Ncjs.createDummyWebAuthnSignature.call(void 0, keyId);
126
+ const getStubSignature = async () => _chunkFC3W7R6Dcjs.createDummyWebAuthnSignature.call(void 0, keyId);
127
127
  return {
128
128
  signMessage,
129
129
  signTypedData,
@@ -234,7 +234,7 @@ async function toMetaMaskSmartAccount(params) {
234
234
  implementation,
235
235
  nonceKeyManager
236
236
  } = params;
237
- _chunkW6HPAK4Mcjs.trackSmartAccountsKitFunctionCall.call(void 0, "toMetaMaskSmartAccount", {
237
+ _chunk4PCXDGUFcjs.trackSmartAccountsKitFunctionCall.call(void 0, "toMetaMaskSmartAccount", {
238
238
  implementation,
239
239
  hasAddress: params.address !== void 0,
240
240
  hasEnvironment: params.environment !== void 0,
@@ -256,7 +256,7 @@ async function toMetaMaskSmartAccount(params) {
256
256
  if (implementation === "Stateless7702" /* Stateless7702 */) {
257
257
  throw new Error("Stateless7702 does not support counterfactual accounts");
258
258
  }
259
- const accountData = await _chunkDCI2AN4Ncjs.getCounterfactualAccountData.call(void 0, {
259
+ const accountData = await _chunkFC3W7R6Dcjs.getCounterfactualAccountData.call(void 0, {
260
260
  factory: environment.SimpleFactory,
261
261
  implementations: environment.implementations,
262
262
  implementation,
@@ -303,7 +303,7 @@ async function toMetaMaskSmartAccount(params) {
303
303
  );
304
304
  }
305
305
  const { delegation, chainId } = delegationParams;
306
- const delegationStruct = _chunkW6HPAK4Mcjs.toDelegationStruct.call(void 0, {
306
+ const delegationStruct = _chunk4PCXDGUFcjs.toDelegationStruct.call(void 0, {
307
307
  ...delegation,
308
308
  signature: "0x"
309
309
  });
@@ -314,7 +314,7 @@ async function toMetaMaskSmartAccount(params) {
314
314
  version: "1",
315
315
  verifyingContract: environment.DelegationManager
316
316
  },
317
- types: _chunkW6HPAK4Mcjs.SIGNABLE_DELEGATION_TYPED_DATA,
317
+ types: _chunk4PCXDGUFcjs.SIGNABLE_DELEGATION_TYPED_DATA,
318
318
  primaryType: "Delegation",
319
319
  message: delegationStruct
320
320
  });
@@ -346,7 +346,7 @@ async function toMetaMaskSmartAccount(params) {
346
346
  return signature;
347
347
  };
348
348
  const getAddress = async () => address;
349
- const encodeCalls = async (calls) => _chunkDCI2AN4Ncjs.encodeCallsForCaller.call(void 0, address, calls);
349
+ const encodeCalls = async (calls) => _chunkFC3W7R6Dcjs.encodeCallsForCaller.call(void 0, address, calls);
350
350
  const signerMethods = _nullishCoalesce(signer, () => ( {
351
351
  signMessage: async () => {
352
352
  throw new Error(
@@ -380,7 +380,7 @@ async function toMetaMaskSmartAccount(params) {
380
380
  if (implementation === "Stateless7702" /* Stateless7702 */) {
381
381
  return {
382
382
  ...smartAccount,
383
- isDeployed: async () => _chunk2ZOWIAP3cjs.isValid7702Implementation.call(void 0, {
383
+ isDeployed: async () => _chunkCKKCGKTAcjs.isValid7702Implementation.call(void 0, {
384
384
  client,
385
385
  accountAddress: address,
386
386
  environment
@@ -398,16 +398,14 @@ function createCaveatEnforcerClient({
398
398
  client,
399
399
  environment
400
400
  }) {
401
- _chunkW6HPAK4Mcjs.trackSmartAccountsKitFunctionCall.call(void 0, "createCaveatEnforcerClient", {
401
+ _chunk4PCXDGUFcjs.trackSmartAccountsKitFunctionCall.call(void 0, "createCaveatEnforcerClient", {
402
402
  chainId: _nullishCoalesce(_optionalChain([client, 'access', _2 => _2.chain, 'optionalAccess', _3 => _3.id]), () => ( null))
403
403
  });
404
- return client.extend(_chunk2ZOWIAP3cjs.caveatEnforcerActions.call(void 0, { environment }));
404
+ return client.extend(_chunkCKKCGKTAcjs.caveatEnforcerActions.call(void 0, { environment }));
405
405
  }
406
406
 
407
407
  // src/actions/infuraBundlerClient.ts
408
408
 
409
-
410
-
411
409
  var infuraBundlerActions = () => (client) => ({
412
410
  /**
413
411
  * Get user operation gas prices from Infura bundler.
@@ -429,7 +427,7 @@ var infuraBundlerActions = () => (client) => ({
429
427
  }
430
428
  });
431
429
  function createInfuraBundlerClient(config) {
432
- _chunkW6HPAK4Mcjs.trackSmartAccountsKitFunctionCall.call(void 0, "createInfuraBundlerClient", {
430
+ _chunk4PCXDGUFcjs.trackSmartAccountsKitFunctionCall.call(void 0, "createInfuraBundlerClient", {
433
431
  chainId: _nullishCoalesce(_optionalChain([config, 'access', _4 => _4.chain, 'optionalAccess', _5 => _5.id]), () => ( null))
434
432
  });
435
433
  const baseBundlerClient = _accountabstraction.createBundlerClient.call(void 0, config);
@@ -460,5 +458,5 @@ function createInfuraBundlerClient(config) {
460
458
 
461
459
 
462
460
 
463
- exports.ANY_BENEFICIARY = _chunkW6HPAK4Mcjs.ANY_BENEFICIARY; exports.BalanceChangeType = _delegationcore.BalanceChangeType; exports.CaveatType = _chunkW6HPAK4Mcjs.CaveatType; exports.ExecutionMode = _chunkW6HPAK4Mcjs.ExecutionMode; exports.Implementation = _chunkW6HPAK4Mcjs.Implementation; exports.PREFERRED_VERSION = _chunk2OS36DVVcjs.PREFERRED_VERSION; exports.ROOT_AUTHORITY = _chunkW6HPAK4Mcjs.ROOT_AUTHORITY; exports.ScopeType = _chunkW6HPAK4Mcjs.ScopeType; exports.TransferWindow = _chunkW6HPAK4Mcjs.TransferWindow; exports.actions = _chunk2ZOWIAP3cjs.actions_exports; exports.aggregateSignature = aggregateSignature; exports.contracts = _chunkEPU4O7FYcjs.contracts_exports; exports.createCaveat = _chunkW6HPAK4Mcjs.createCaveat; exports.createCaveatEnforcerClient = createCaveatEnforcerClient; exports.createDelegation = _chunkW6HPAK4Mcjs.createDelegation; exports.createExecution = _chunkW6HPAK4Mcjs.createExecution; exports.createInfuraBundlerClient = createInfuraBundlerClient; exports.createOpenDelegation = _chunkW6HPAK4Mcjs.createOpenDelegation; exports.getSmartAccountsEnvironment = _chunk2OS36DVVcjs.getSmartAccountsEnvironment; exports.signDelegation = _chunkW6HPAK4Mcjs.signDelegation; exports.signUserOperation = _chunk2OS36DVVcjs.signUserOperation; exports.toMetaMaskSmartAccount = toMetaMaskSmartAccount;
461
+ exports.ANY_BENEFICIARY = _chunk4PCXDGUFcjs.ANY_BENEFICIARY; exports.BalanceChangeType = _delegationcore.BalanceChangeType; exports.CaveatType = _chunk4PCXDGUFcjs.CaveatType; exports.ExecutionMode = _chunk4PCXDGUFcjs.ExecutionMode; exports.Implementation = _chunk4PCXDGUFcjs.Implementation; exports.PREFERRED_VERSION = _chunk2OS36DVVcjs.PREFERRED_VERSION; exports.ROOT_AUTHORITY = _chunk4PCXDGUFcjs.ROOT_AUTHORITY; exports.ScopeType = _chunk4PCXDGUFcjs.ScopeType; exports.TransferWindow = _chunk4PCXDGUFcjs.TransferWindow; exports.actions = _chunkCKKCGKTAcjs.actions_exports; exports.aggregateSignature = aggregateSignature; exports.contracts = _chunk7GIUS6HDcjs.contracts_exports; exports.createCaveat = _chunk4PCXDGUFcjs.createCaveat; exports.createCaveatEnforcerClient = createCaveatEnforcerClient; exports.createDelegation = _chunk4PCXDGUFcjs.createDelegation; exports.createExecution = _chunk4PCXDGUFcjs.createExecution; exports.createInfuraBundlerClient = createInfuraBundlerClient; exports.createOpenDelegation = _chunk4PCXDGUFcjs.createOpenDelegation; exports.getSmartAccountsEnvironment = _chunk2OS36DVVcjs.getSmartAccountsEnvironment; exports.signDelegation = _chunk4PCXDGUFcjs.signDelegation; exports.signUserOperation = _chunk2OS36DVVcjs.signUserOperation; exports.toMetaMaskSmartAccount = toMetaMaskSmartAccount;
464
462
  //# 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/index.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 { trackSmartAccountsKitFunctionCall } from './analytics';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\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 nonceKeyManager,\n } = params;\n\n trackSmartAccountsKitFunctionCall('toMetaMaskSmartAccount', {\n implementation,\n hasAddress: params.address !== undefined,\n hasEnvironment: params.environment !== undefined,\n chainId: chain?.id ?? null,\n });\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 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 signUserOperation,\n signDelegation,\n nonceKeyManager,\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\nimport { trackSmartAccountsKitFunctionCall } from './analytics';\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 trackSmartAccountsKitFunctionCall('aggregateSignature', {\n signatureCount: signatures.length,\n });\n\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","export { toMetaMaskSmartAccount } from './toMetaMaskSmartAccount';\n\nexport {\n createDelegation,\n createOpenDelegation,\n signDelegation,\n ROOT_AUTHORITY,\n ANY_BENEFICIARY,\n} from './delegation';\n\nexport type {\n CreateDelegationOptions,\n CreateOpenDelegationOptions,\n} from './delegation';\n\nexport type {\n SmartAccountsEnvironment,\n MultiSigDeleGatorDeployParams,\n HybridDeleGatorDeployParams,\n SignUserOperationParams,\n SignDelegationParams,\n MetaMaskSmartAccountImplementation,\n ToMetaMaskSmartAccountReturnType,\n MetaMaskSmartAccount,\n WalletSignerConfig,\n AccountSignerConfig,\n WebAuthnSignerConfig,\n HybridSignerConfig,\n MultiSigSignerConfig,\n Delegation,\n Caveat,\n PermissionContext,\n} from './types';\n\nexport {\n PREFERRED_VERSION,\n getSmartAccountsEnvironment,\n} from './smartAccountsEnvironment';\n\nexport {\n Implementation,\n TransferWindow,\n ScopeType,\n CaveatType,\n} from './constants';\n\nexport { createExecution, ExecutionMode } from './executions';\n\nexport type { ExecutionStruct, CreateExecutionArgs } from './executions';\n\nexport type { Caveats } from './caveatBuilder';\n\nexport { createCaveat } from './caveats';\n\nexport { BalanceChangeType } from '@metamask/delegation-core';\n\nexport { aggregateSignature } from './signatures';\n\nexport { type SignatureType, type PartialSignature } from './signatures';\n\nexport type { AggregateSignatureParams } from './signatures';\n\nexport { signUserOperation } from './userOp';\n\nexport * as contracts from './contracts';\n\nexport * as actions from './actions';\n\nexport {\n createCaveatEnforcerClient,\n type CaveatEnforcerClient,\n} from './actions/caveatEnforcerClient';\n\nexport {\n createInfuraBundlerClient,\n type InfuraBundlerClient,\n type GasPriceTier,\n type UserOperationGasPriceResponse,\n} from './actions/infuraBundlerClient';\n","import type { Client, Transport, Chain, Account } from 'viem';\n\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\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 trackSmartAccountsKitFunctionCall('createCaveatEnforcerClient', {\n chainId: client.chain?.id ?? null,\n });\n\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\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\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 trackSmartAccountsKitFunctionCall('createInfuraBundlerClient', {\n chainId: config.chain?.id ?? null,\n });\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/index.ts","../src/actions/caveatEnforcerClient.ts","../src/actions/infuraBundlerClient.ts"],"names":["signTypedData","signMessage","getStubSignature","signUserOperation","signDelegation"],"mappings":"AAAA;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACxCA;AACE;AACA;AACA;AAAA,2DACK;AAEP;AACE;AACA;AACA;AAAA,8DACK;ADyCP;AACA;AEpDA,4BAAuB;AFsDvB;AACA;AGtDA;AAIA,IAAM,eAAA,EAAiB,CAAC,OAAO,CAAA;AAoBxB,IAAM,mBAAA,EAAqB,CAAC;AAAA,EACjC;AACF,CAAA,EAAA,GAEW;AACT,EAAA,iEAAA,oBAAkC,EAAsB;AAAA,IACtD,cAAA,EAAgB,UAAA,CAAW;AAAA,EAC7B,CAAC,CAAA;AAED,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;AH0BsD;AACA;AEnDpD;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;AAKE,EAAA;AACE,IAAA;AACO,IAAA;AACS,IAAA;AACA,IAAA;AAClB,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;AAuC0B;AACW,EAAA;AAEtB,EAAA;AACJ,IAAA;AACT,EAAA;AAE8C,EAAA;AACW,IAAA;AAC9C,EAAA;AACkD,IAAA;AAClD,EAAA;AAC4D,IAAA;AACvE,EAAA;AACwC,EAAA;AAC1C;AFpCsD;AACA;AClM3B;AAiBmC;AACtD,EAAA;AACJ,IAAA;AACgB,IAAA;AAChB,IAAA;AACA,IAAA;AACE,EAAA;AAE8B,EAAA;AAChC,IAAA;AAC+B,IAAA;AACQ,IAAA;AACjB,IAAA;AACvB,EAAA;AAEW,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;AAC1D,IAAA;AACD,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AAEgC,IAAA;AAEY,IAAA;AACvC,MAAA;AACQ,MAAA;AACZ,IAAA;AAE4C,IAAA;AACnC,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;AAC5D,IAAA;AACD,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AAEoB,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;AAG7B,EAAA;AAE8B,EAAA;AACL,IAAA;AACb,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AAC2B,IAAA;AACf,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AAC8B,IAAA;AAClB,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAE0C,EAAA;AACxC,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACAG,IAAAA;AACAC,IAAAA;AACA,IAAA;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;AIlVpB;AJoVoB;AACA;AK1WpD;AACA,EAAA;AACA,EAAA;AAIqD;AACnB,EAAA;AACH,IAAA;AAC9B,EAAA;AAE4C,EAAA;AAC/C;ALwWsD;AACA;AMrZlB;AAgDoB;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;AACjB,EAAA;AACH,IAAA;AAC9B,EAAA;AAEmD,EAAA;AAG3B,EAAA;AACF,IAAA;AACvB,EAAA;AACF;ANsSsD;AACA;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, Hex } from 'viem';\nimport {\n entryPoint07Abi,\n toPackedUserOperation,\n toSmartAccount,\n} from 'viem/account-abstraction';\n\nimport { isValid7702Implementation } from './actions/isValid7702Implementation';\nimport { trackSmartAccountsKitFunctionCall } from './analytics';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\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 nonceKeyManager,\n } = params;\n\n trackSmartAccountsKitFunctionCall('toMetaMaskSmartAccount', {\n implementation,\n hasAddress: params.address !== undefined,\n hasEnvironment: params.environment !== undefined,\n chainId: chain?.id ?? null,\n });\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 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 signUserOperation,\n signDelegation,\n nonceKeyManager,\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\nimport { trackSmartAccountsKitFunctionCall } from './analytics';\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 trackSmartAccountsKitFunctionCall('aggregateSignature', {\n signatureCount: signatures.length,\n });\n\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","export { toMetaMaskSmartAccount } from './toMetaMaskSmartAccount';\n\nexport {\n createDelegation,\n createOpenDelegation,\n signDelegation,\n ROOT_AUTHORITY,\n ANY_BENEFICIARY,\n} from './delegation';\n\nexport type {\n CreateDelegationOptions,\n CreateOpenDelegationOptions,\n} from './delegation';\n\nexport type {\n SmartAccountsEnvironment,\n MultiSigDeleGatorDeployParams,\n HybridDeleGatorDeployParams,\n SignUserOperationParams,\n SignDelegationParams,\n MetaMaskSmartAccountImplementation,\n ToMetaMaskSmartAccountReturnType,\n MetaMaskSmartAccount,\n WalletSignerConfig,\n AccountSignerConfig,\n WebAuthnSignerConfig,\n HybridSignerConfig,\n MultiSigSignerConfig,\n Delegation,\n Caveat,\n PermissionContext,\n} from './types';\n\nexport {\n PREFERRED_VERSION,\n getSmartAccountsEnvironment,\n} from './smartAccountsEnvironment';\n\nexport {\n Implementation,\n TransferWindow,\n ScopeType,\n CaveatType,\n} from './constants';\n\nexport { createExecution, ExecutionMode } from './executions';\n\nexport type { ExecutionStruct, CreateExecutionArgs } from './executions';\n\nexport type { Caveats } from './caveatBuilder';\n\nexport { createCaveat } from './caveats';\n\nexport { BalanceChangeType } from '@metamask/delegation-core';\n\nexport { aggregateSignature } from './signatures';\n\nexport { type SignatureType, type PartialSignature } from './signatures';\n\nexport type { AggregateSignatureParams } from './signatures';\n\nexport { signUserOperation } from './userOp';\n\nexport * as contracts from './contracts';\n\nexport * as actions from './actions';\n\nexport {\n createCaveatEnforcerClient,\n type CaveatEnforcerClient,\n} from './actions/caveatEnforcerClient';\n\nexport {\n createInfuraBundlerClient,\n type InfuraBundlerClient,\n type GasPriceTier,\n type UserOperationGasPriceResponse,\n} from './actions/infuraBundlerClient';\n","import type { Client, Transport, Chain, Account } from 'viem';\n\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\nimport type { SmartAccountsEnvironment } from '../types';\nimport { caveatEnforcerActions } from './getCaveatAvailableAmount';\nimport type {\n CaveatEnforcerParams,\n PeriodTransferResult,\n 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 trackSmartAccountsKitFunctionCall('createCaveatEnforcerClient', {\n chainId: client.chain?.id ?? null,\n });\n\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 { createBundlerClient } from 'viem/account-abstraction';\nimport type {\n BundlerClient,\n BundlerClientConfig,\n SmartAccount,\n} from 'viem/account-abstraction';\n\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\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 trackSmartAccountsKitFunctionCall('createInfuraBundlerClient', {\n chainId: config.chain?.id ?? null,\n });\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,17 +1,17 @@
1
- import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, S as SmartAccountsEnvironment } from './resolveCaveats-A9xC29l8.cjs';
2
- export { A as AccountSignerConfig, C as Caveat, b as CaveatType, c as Caveats, d as CreateExecutionArgs, D as Delegation, E as ExecutionMode, e as ExecutionStruct, H as HybridDeleGatorDeployParams, f as HybridSignerConfig, M as MetaMaskSmartAccount, g as MetaMaskSmartAccountImplementation, h as MultiSigDeleGatorDeployParams, i as MultiSigSignerConfig, P as PermissionContext, j as ScopeType, k as SignDelegationParams, l as SignUserOperationParams, m as TransferWindow, W as WalletSignerConfig, n as WebAuthnSignerConfig, o as createExecution } from './resolveCaveats-A9xC29l8.cjs';
3
- export { C as CreateDelegationOptions, a as CreateOpenDelegationOptions, c as createDelegation, b as createOpenDelegation, s as signDelegation } from './decodeRevertReason-CmmCpmZ_.cjs';
4
- export { P as PREFERRED_VERSION, c as createCaveat, g as getSmartAccountsEnvironment } from './caveats-gqMBZKkI.cjs';
1
+ import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, S as SmartAccountsEnvironment } from './resolveCaveats-aQPEogPk.cjs';
2
+ export { A as AccountSignerConfig, b as Caveat, c as CaveatType, C as Caveats, d as CreateExecutionArgs, D as Delegation, E as ExecutionMode, e as ExecutionStruct, H as HybridDeleGatorDeployParams, f as HybridSignerConfig, M as MetaMaskSmartAccount, g as MetaMaskSmartAccountImplementation, h as MultiSigDeleGatorDeployParams, i as MultiSigSignerConfig, P as PermissionContext, j as ScopeType, k as SignDelegationParams, l as SignUserOperationParams, m as TransferWindow, W as WalletSignerConfig, n as WebAuthnSignerConfig, o as createExecution } from './resolveCaveats-aQPEogPk.cjs';
3
+ export { C as CreateDelegationOptions, a as CreateOpenDelegationOptions, c as createDelegation, b as createOpenDelegation, s as signDelegation } from './decodeRevertReason-CSOClzsa.cjs';
4
+ export { P as PREFERRED_VERSION, c as createCaveat, g as getSmartAccountsEnvironment } from './caveats-BEKgygS8.cjs';
5
5
  export { ANY_BENEFICIARY, BalanceChangeType, ROOT_AUTHORITY } from '@metamask/delegation-core';
6
6
  import { Address, Hex, Transport, Chain, Account, Client } from 'viem';
7
7
  export { s as signUserOperation } from './userOp-DKgjzz7B.cjs';
8
- export { i as contracts } from './index-Dv4jPzhe.cjs';
9
- import { c as caveatEnforcerActions } from './index-X7Qn3JTg.cjs';
10
- export { i as actions } from './index-X7Qn3JTg.cjs';
8
+ export { i as contracts } from './index-CsjbdUp_.cjs';
9
+ import { c as caveatEnforcerActions } from './index-DYJjOeTn.cjs';
10
+ export { i as actions } from './index-DYJjOeTn.cjs';
11
11
  import { SmartAccount, BundlerClient, BundlerClientConfig } from 'viem/account-abstraction';
12
12
  import '@metamask/delegation-abis';
13
13
  import 'viem/chains';
14
- import './index-B1Cmezvh.cjs';
14
+ import './index-BHm75OFP.cjs';
15
15
  import '@metamask/7715-permission-types';
16
16
 
17
17
  declare function toMetaMaskSmartAccount<TImplementation extends Implementation>(params: ToMetaMaskSmartAccountParameters<TImplementation>): Promise<ToMetaMaskSmartAccountReturnType<TImplementation>>;
package/dist/index.d.ts CHANGED
@@ -1,17 +1,17 @@
1
- import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, S as SmartAccountsEnvironment } from './resolveCaveats-A9xC29l8.js';
2
- export { A as AccountSignerConfig, C as Caveat, b as CaveatType, c as Caveats, d as CreateExecutionArgs, D as Delegation, E as ExecutionMode, e as ExecutionStruct, H as HybridDeleGatorDeployParams, f as HybridSignerConfig, M as MetaMaskSmartAccount, g as MetaMaskSmartAccountImplementation, h as MultiSigDeleGatorDeployParams, i as MultiSigSignerConfig, P as PermissionContext, j as ScopeType, k as SignDelegationParams, l as SignUserOperationParams, m as TransferWindow, W as WalletSignerConfig, n as WebAuthnSignerConfig, o as createExecution } from './resolveCaveats-A9xC29l8.js';
3
- export { C as CreateDelegationOptions, a as CreateOpenDelegationOptions, c as createDelegation, b as createOpenDelegation, s as signDelegation } from './decodeRevertReason-dOTpJx2h.js';
4
- export { P as PREFERRED_VERSION, c as createCaveat, g as getSmartAccountsEnvironment } from './caveats-B2OssjV4.js';
1
+ import { I as Implementation, T as ToMetaMaskSmartAccountParameters, a as ToMetaMaskSmartAccountReturnType, S as SmartAccountsEnvironment } from './resolveCaveats-aQPEogPk.js';
2
+ export { A as AccountSignerConfig, b as Caveat, c as CaveatType, C as Caveats, d as CreateExecutionArgs, D as Delegation, E as ExecutionMode, e as ExecutionStruct, H as HybridDeleGatorDeployParams, f as HybridSignerConfig, M as MetaMaskSmartAccount, g as MetaMaskSmartAccountImplementation, h as MultiSigDeleGatorDeployParams, i as MultiSigSignerConfig, P as PermissionContext, j as ScopeType, k as SignDelegationParams, l as SignUserOperationParams, m as TransferWindow, W as WalletSignerConfig, n as WebAuthnSignerConfig, o as createExecution } from './resolveCaveats-aQPEogPk.js';
3
+ export { C as CreateDelegationOptions, a as CreateOpenDelegationOptions, c as createDelegation, b as createOpenDelegation, s as signDelegation } from './decodeRevertReason-WjHVQ_Sz.js';
4
+ export { P as PREFERRED_VERSION, c as createCaveat, g as getSmartAccountsEnvironment } from './caveats-DPuxVdYU.js';
5
5
  export { ANY_BENEFICIARY, BalanceChangeType, ROOT_AUTHORITY } from '@metamask/delegation-core';
6
6
  import { Address, Hex, Transport, Chain, Account, Client } from 'viem';
7
7
  export { s as signUserOperation } from './userOp-DKgjzz7B.js';
8
- export { i as contracts } from './index-BkgdU4LI.js';
9
- import { c as caveatEnforcerActions } from './index-DUJmm8Wz.js';
10
- export { i as actions } from './index-DUJmm8Wz.js';
8
+ export { i as contracts } from './index-BNHYZ9iU.js';
9
+ import { c as caveatEnforcerActions } from './index-CgGKjHSr.js';
10
+ export { i as actions } from './index-CgGKjHSr.js';
11
11
  import { SmartAccount, BundlerClient, BundlerClientConfig } from 'viem/account-abstraction';
12
12
  import '@metamask/delegation-abis';
13
13
  import 'viem/chains';
14
- import './index-LqiEgBjV.js';
14
+ import './index-DWvEgBtg.js';
15
15
  import '@metamask/7715-permission-types';
16
16
 
17
17
  declare function toMetaMaskSmartAccount<TImplementation extends Implementation>(params: ToMetaMaskSmartAccountParameters<TImplementation>): Promise<ToMetaMaskSmartAccountReturnType<TImplementation>>;
package/dist/index.mjs CHANGED
@@ -2,24 +2,24 @@ import {
2
2
  actions_exports,
3
3
  caveatEnforcerActions,
4
4
  isValid7702Implementation
5
- } from "./chunk-AZYTTGON.mjs";
5
+ } from "./chunk-Z4MVJILE.mjs";
6
6
  import {
7
7
  contracts_exports
8
- } from "./chunk-L3EZCIY6.mjs";
9
- import "./chunk-K7GTZGKJ.mjs";
8
+ } from "./chunk-RDTAD64U.mjs";
9
+ import "./chunk-56QPXKWD.mjs";
10
10
  import {
11
11
  createDummyWebAuthnSignature,
12
12
  encodeCallsForCaller,
13
13
  encodeDeleGatorSignature,
14
14
  getCounterfactualAccountData
15
- } from "./chunk-UJQ3JN3U.mjs";
15
+ } from "./chunk-D55SIIVM.mjs";
16
16
  import {
17
17
  PREFERRED_VERSION,
18
18
  SIGNABLE_USER_OP_TYPED_DATA,
19
19
  getSmartAccountsEnvironment,
20
20
  signUserOperation
21
21
  } from "./chunk-GMGJRC3D.mjs";
22
- import "./chunk-YVU66KSH.mjs";
22
+ import "./chunk-5ENRJKXL.mjs";
23
23
  import {
24
24
  ANY_BENEFICIARY,
25
25
  CaveatType,
@@ -36,7 +36,7 @@ import {
36
36
  signDelegation,
37
37
  toDelegationStruct,
38
38
  trackSmartAccountsKitFunctionCall
39
- } from "./chunk-TNGQTVSY.mjs";
39
+ } from "./chunk-XBHL6PDR.mjs";
40
40
 
41
41
  // src/toMetaMaskSmartAccount.ts
42
42
  import {
@@ -405,9 +405,7 @@ function createCaveatEnforcerClient({
405
405
  }
406
406
 
407
407
  // src/actions/infuraBundlerClient.ts
408
- import {
409
- createBundlerClient
410
- } from "viem/account-abstraction";
408
+ import { createBundlerClient } from "viem/account-abstraction";
411
409
  var infuraBundlerActions = () => (client) => ({
412
410
  /**
413
411
  * Get user operation gas prices from Infura bundler.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/toMetaMaskSmartAccount.ts","../src/signer.ts","../src/signatures.ts","../src/index.ts","../src/actions/caveatEnforcerClient.ts","../src/actions/infuraBundlerClient.ts"],"sourcesContent":["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 { trackSmartAccountsKitFunctionCall } from './analytics';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\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 nonceKeyManager,\n } = params;\n\n trackSmartAccountsKitFunctionCall('toMetaMaskSmartAccount', {\n implementation,\n hasAddress: params.address !== undefined,\n hasEnvironment: params.environment !== undefined,\n chainId: chain?.id ?? null,\n });\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 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 signUserOperation,\n signDelegation,\n nonceKeyManager,\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\nimport { trackSmartAccountsKitFunctionCall } from './analytics';\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 trackSmartAccountsKitFunctionCall('aggregateSignature', {\n signatureCount: signatures.length,\n });\n\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","export { toMetaMaskSmartAccount } from './toMetaMaskSmartAccount';\n\nexport {\n createDelegation,\n createOpenDelegation,\n signDelegation,\n ROOT_AUTHORITY,\n ANY_BENEFICIARY,\n} from './delegation';\n\nexport type {\n CreateDelegationOptions,\n CreateOpenDelegationOptions,\n} from './delegation';\n\nexport type {\n SmartAccountsEnvironment,\n MultiSigDeleGatorDeployParams,\n HybridDeleGatorDeployParams,\n SignUserOperationParams,\n SignDelegationParams,\n MetaMaskSmartAccountImplementation,\n ToMetaMaskSmartAccountReturnType,\n MetaMaskSmartAccount,\n WalletSignerConfig,\n AccountSignerConfig,\n WebAuthnSignerConfig,\n HybridSignerConfig,\n MultiSigSignerConfig,\n Delegation,\n Caveat,\n PermissionContext,\n} from './types';\n\nexport {\n PREFERRED_VERSION,\n getSmartAccountsEnvironment,\n} from './smartAccountsEnvironment';\n\nexport {\n Implementation,\n TransferWindow,\n ScopeType,\n CaveatType,\n} from './constants';\n\nexport { createExecution, ExecutionMode } from './executions';\n\nexport type { ExecutionStruct, CreateExecutionArgs } from './executions';\n\nexport type { Caveats } from './caveatBuilder';\n\nexport { createCaveat } from './caveats';\n\nexport { BalanceChangeType } from '@metamask/delegation-core';\n\nexport { aggregateSignature } from './signatures';\n\nexport { type SignatureType, type PartialSignature } from './signatures';\n\nexport type { AggregateSignatureParams } from './signatures';\n\nexport { signUserOperation } from './userOp';\n\nexport * as contracts from './contracts';\n\nexport * as actions from './actions';\n\nexport {\n createCaveatEnforcerClient,\n type CaveatEnforcerClient,\n} from './actions/caveatEnforcerClient';\n\nexport {\n createInfuraBundlerClient,\n type InfuraBundlerClient,\n type GasPriceTier,\n type UserOperationGasPriceResponse,\n} from './actions/infuraBundlerClient';\n","import type { Client, Transport, Chain, Account } from 'viem';\n\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\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 trackSmartAccountsKitFunctionCall('createCaveatEnforcerClient', {\n chainId: client.chain?.id ?? null,\n });\n\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\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\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 trackSmartAccountsKitFunctionCall('createInfuraBundlerClient', {\n chainId: config.chain?.id ?? null,\n });\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"],"mappings":"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","names":["concat","signMessage","signTypedData","getStubSignature","concat","signDelegation","signUserOperation"]}
1
+ {"version":3,"sources":["../src/toMetaMaskSmartAccount.ts","../src/signer.ts","../src/signatures.ts","../src/index.ts","../src/actions/caveatEnforcerClient.ts","../src/actions/infuraBundlerClient.ts"],"sourcesContent":["import {\n EIP7702StatelessDeleGator,\n HybridDeleGator,\n MultiSigDeleGator,\n} from '@metamask/delegation-abis';\nimport type { Address, Hex } from 'viem';\nimport {\n entryPoint07Abi,\n toPackedUserOperation,\n toSmartAccount,\n} from 'viem/account-abstraction';\n\nimport { isValid7702Implementation } from './actions/isValid7702Implementation';\nimport { trackSmartAccountsKitFunctionCall } from './analytics';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\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 nonceKeyManager,\n } = params;\n\n trackSmartAccountsKitFunctionCall('toMetaMaskSmartAccount', {\n implementation,\n hasAddress: params.address !== undefined,\n hasEnvironment: params.environment !== undefined,\n chainId: chain?.id ?? null,\n });\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 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 signUserOperation,\n signDelegation,\n nonceKeyManager,\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\nimport { trackSmartAccountsKitFunctionCall } from './analytics';\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 trackSmartAccountsKitFunctionCall('aggregateSignature', {\n signatureCount: signatures.length,\n });\n\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","export { toMetaMaskSmartAccount } from './toMetaMaskSmartAccount';\n\nexport {\n createDelegation,\n createOpenDelegation,\n signDelegation,\n ROOT_AUTHORITY,\n ANY_BENEFICIARY,\n} from './delegation';\n\nexport type {\n CreateDelegationOptions,\n CreateOpenDelegationOptions,\n} from './delegation';\n\nexport type {\n SmartAccountsEnvironment,\n MultiSigDeleGatorDeployParams,\n HybridDeleGatorDeployParams,\n SignUserOperationParams,\n SignDelegationParams,\n MetaMaskSmartAccountImplementation,\n ToMetaMaskSmartAccountReturnType,\n MetaMaskSmartAccount,\n WalletSignerConfig,\n AccountSignerConfig,\n WebAuthnSignerConfig,\n HybridSignerConfig,\n MultiSigSignerConfig,\n Delegation,\n Caveat,\n PermissionContext,\n} from './types';\n\nexport {\n PREFERRED_VERSION,\n getSmartAccountsEnvironment,\n} from './smartAccountsEnvironment';\n\nexport {\n Implementation,\n TransferWindow,\n ScopeType,\n CaveatType,\n} from './constants';\n\nexport { createExecution, ExecutionMode } from './executions';\n\nexport type { ExecutionStruct, CreateExecutionArgs } from './executions';\n\nexport type { Caveats } from './caveatBuilder';\n\nexport { createCaveat } from './caveats';\n\nexport { BalanceChangeType } from '@metamask/delegation-core';\n\nexport { aggregateSignature } from './signatures';\n\nexport { type SignatureType, type PartialSignature } from './signatures';\n\nexport type { AggregateSignatureParams } from './signatures';\n\nexport { signUserOperation } from './userOp';\n\nexport * as contracts from './contracts';\n\nexport * as actions from './actions';\n\nexport {\n createCaveatEnforcerClient,\n type CaveatEnforcerClient,\n} from './actions/caveatEnforcerClient';\n\nexport {\n createInfuraBundlerClient,\n type InfuraBundlerClient,\n type GasPriceTier,\n type UserOperationGasPriceResponse,\n} from './actions/infuraBundlerClient';\n","import type { Client, Transport, Chain, Account } from 'viem';\n\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\nimport type { SmartAccountsEnvironment } from '../types';\nimport { caveatEnforcerActions } from './getCaveatAvailableAmount';\nimport type {\n CaveatEnforcerParams,\n PeriodTransferResult,\n 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 trackSmartAccountsKitFunctionCall('createCaveatEnforcerClient', {\n chainId: client.chain?.id ?? null,\n });\n\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 { createBundlerClient } from 'viem/account-abstraction';\nimport type {\n BundlerClient,\n BundlerClientConfig,\n SmartAccount,\n} from 'viem/account-abstraction';\n\nimport { trackSmartAccountsKitFunctionCall } from '../analytics';\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 trackSmartAccountsKitFunctionCall('createInfuraBundlerClient', {\n chainId: config.chain?.id ?? null,\n });\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"],"mappings":"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","names":["concat","signMessage","signTypedData","getStubSignature","concat","signDelegation","signUserOperation"]}
@@ -1,5 +1,5 @@
1
1
  import { HybridDeleGator, MultiSigDeleGator, EIP7702StatelessDeleGator } from '@metamask/delegation-abis';
2
- import { Account, Hex, WalletClient, Transport, Chain, PublicClient, NonceManager, OneOf, Address, AbiFunction } from 'viem';
2
+ import { Hex, Account, WalletClient, Transport, Chain, PublicClient, NonceManager, OneOf, Address, AbiFunction } from 'viem';
3
3
  import { WebAuthnAccount, SmartAccount, SmartAccountImplementation, entryPoint07Abi } from 'viem/account-abstraction';
4
4
  import { Prettify } from 'viem/chains';
5
5
  import { ApprovalRevocationTerms, BalanceChangeType } from '@metamask/delegation-core';
@@ -444,4 +444,4 @@ declare const createCaveatBuilder: (environment: SmartAccountsEnvironment, confi
444
444
 
445
445
  type Caveats = CaveatBuilder | (Caveat | CoreCaveatConfiguration)[];
446
446
 
447
- export { type AccountSignerConfig as A, type Erc20PeriodTransferBuilderConfig as B, type Caveat as C, type Delegation as D, ExecutionMode as E, type Erc20StreamingBuilderConfig as F, type Erc20TransferAmountBuilderConfig as G, type HybridDeleGatorDeployParams as H, Implementation as I, type Erc721TransferBuilderConfig as J, type AllowedCalldataBuilderConfig as K, type ExactCalldataBuilderConfig as L, type MetaMaskSmartAccount as M, type AllowedTargetsBuilderConfig as N, type AllowedMethodsBuilderConfig as O, type PermissionContext as P, type NativeTokenPeriodTransferBuilderConfig as Q, type NativeTokenStreamingBuilderConfig as R, type SmartAccountsEnvironment as S, type ToMetaMaskSmartAccountParameters as T, type NativeTokenTransferAmountBuilderConfig as U, type ValueLteBuilderConfig as V, type WalletSignerConfig as W, type OwnershipTransferBuilderConfig as X, type ToMetaMaskSmartAccountReturnType as a, CaveatType as b, type Caveats as c, type CreateExecutionArgs as d, type ExecutionStruct as e, type HybridSignerConfig as f, type MetaMaskSmartAccountImplementation as g, type MultiSigDeleGatorDeployParams as h, type MultiSigSignerConfig as i, ScopeType as j, type SignDelegationParams as k, type SignUserOperationParams as l, TransferWindow as m, type WebAuthnSignerConfig as n, createExecution as o, type Call as p, type DeployParams as q, CaveatBuilder as r, type CaveatBuilderConfig as s, type CoreCaveatBuilder as t, createCaveatBuilder as u, encodeBatchExecution as v, encodeExecutionCalldata as w, encodeExecutionCalldatas as x, encodeSingleExecution as y, type CoreCaveatConfiguration as z };
447
+ export { type AccountSignerConfig as A, type Erc20PeriodTransferBuilderConfig as B, type Caveats as C, type Delegation as D, ExecutionMode as E, type Erc20StreamingBuilderConfig as F, type Erc20TransferAmountBuilderConfig as G, type HybridDeleGatorDeployParams as H, Implementation as I, type Erc721TransferBuilderConfig as J, type AllowedCalldataBuilderConfig as K, type ExactCalldataBuilderConfig as L, type MetaMaskSmartAccount as M, type AllowedTargetsBuilderConfig as N, type AllowedMethodsBuilderConfig as O, type PermissionContext as P, type NativeTokenPeriodTransferBuilderConfig as Q, type NativeTokenStreamingBuilderConfig as R, type SmartAccountsEnvironment as S, type ToMetaMaskSmartAccountParameters as T, type NativeTokenTransferAmountBuilderConfig as U, type ValueLteBuilderConfig as V, type WalletSignerConfig as W, type OwnershipTransferBuilderConfig as X, type ToMetaMaskSmartAccountReturnType as a, type Caveat as b, CaveatType as c, type CreateExecutionArgs as d, type ExecutionStruct as e, type HybridSignerConfig as f, type MetaMaskSmartAccountImplementation as g, type MultiSigDeleGatorDeployParams as h, type MultiSigSignerConfig as i, ScopeType as j, type SignDelegationParams as k, type SignUserOperationParams as l, TransferWindow as m, type WebAuthnSignerConfig as n, createExecution as o, type Call as p, type DeployParams as q, CaveatBuilder as r, type CaveatBuilderConfig as s, type CoreCaveatBuilder as t, createCaveatBuilder as u, encodeBatchExecution as v, encodeExecutionCalldata as w, encodeExecutionCalldatas as x, encodeSingleExecution as y, type CoreCaveatConfiguration as z };