{"version":3,"sources":["../src/toMetaMaskSmartAccount.ts","../src/signatory.ts","../src/signatures.ts","../src/actions/caveatEnforcerClient.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 { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n  SIGNABLE_DELEGATION_TYPED_DATA,\n  toDelegationStruct,\n} from './delegation';\nimport { entryPointGetNonce as _getNonce } from './DelegationFramework/EntryPoint/read';\nimport { getDeleGatorEnvironment } from './delegatorEnvironment';\nimport { encodeCallsForCaller } from './encodeCalls';\nimport { resolveSignatory } from './signatory';\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 MetaMask DeleGator smart account 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 DeleGator environment, otherwise the environment will be inferred from the chain.\n */\nexport async function toMetaMaskSmartAccount<\n  TImplementation extends Implementation,\n>(\n  params: ToMetaMaskSmartAccountParameters<TImplementation>,\n): Promise<ToMetaMaskSmartAccountReturnType<TImplementation>> {\n  const {\n    client,\n    client: { chain },\n    implementation,\n  } = params;\n\n  if (!chain) {\n    throw new Error('Chain not specified');\n  }\n\n  const signatory = resolveSignatory({\n    implementation,\n    signatory: params.signatory,\n  });\n\n  const environment = params.environment ?? getDeleGatorEnvironment(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.abi,\n    },\n    [Implementation.MultiSig]: {\n      contractName: 'MultiSigDeleGator',\n      abi: MultiSigDeleGator.abi,\n    },\n    [Implementation.Stateless7702]: {\n      contractName: 'EIP7702StatelessDeleGator',\n      abi: EIP7702StatelessDeleGator.abi,\n    },\n  }[implementation] as {\n    contractName: string;\n    abi: AbiByImplementation[TImplementation];\n  };\n\n  const getFactoryArgs = async () => {\n    if (factoryData === undefined) {\n      throw new Error(\n        'Deploy params were not provided, so factory args cannot be inferred',\n      );\n    }\n    return {\n      factoryData,\n      factory: environment.SimpleFactory,\n    };\n  };\n\n  const signDelegation = async (delegationParams: SignDelegationParams) => {\n    const { delegation, chainId } = delegationParams;\n\n    const delegationStruct = toDelegationStruct({\n      ...delegation,\n      signature: '0x',\n    });\n\n    const signature = signatory.signTypedData({\n      domain: {\n        chainId: chainId ?? chain.id,\n        name: 'DelegationManager',\n        version: '1',\n        verifyingContract: environment.DelegationManager,\n      },\n      types: SIGNABLE_DELEGATION_TYPED_DATA,\n      primaryType: 'Delegation',\n      message: delegationStruct,\n    });\n\n    return signature;\n  };\n\n  const signUserOperation = async (userOpParams: SignUserOperationParams) => {\n    const { chainId } = userOpParams;\n\n    const packedUserOp = toPackedUserOperation({\n      sender: address,\n      ...userOpParams,\n      signature: '0x',\n    });\n\n    const signature = await signatory.signTypedData({\n      domain: {\n        chainId: chainId ?? chain.id,\n        name: contractName,\n        version: '1',\n        verifyingContract: address,\n      },\n      types: SIGNABLE_USER_OP_TYPED_DATA,\n      primaryType: 'PackedUserOperation',\n      message: { ...packedUserOp, entryPoint: entryPoint.address },\n    });\n\n    return signature;\n  };\n\n  const getAddress = async () => address;\n\n  const getNonce = async () =>\n    _getNonce({\n      client,\n      entryPoint: environment.EntryPoint,\n      contractAddress: address,\n      key: 0n,\n    });\n\n  const encodeCalls = async (calls: readonly Call[]) =>\n    encodeCallsForCaller(address, calls);\n\n  const smartAccount = await toSmartAccount({\n    abi,\n    client,\n    entryPoint,\n    environment,\n    getAddress,\n    getFactoryArgs,\n    encodeCalls,\n    getNonce,\n    signUserOperation,\n    signDelegation,\n    ...signatory,\n  });\n\n  // Override isDeployed only for EIP-7702 implementation to check proper delegation code\n  if (implementation === Implementation.Stateless7702) {\n    return {\n      ...smartAccount,\n      isDeployed: async () =>\n        isValid7702Implementation({\n          client,\n          accountAddress: address,\n          environment,\n        }),\n    };\n  }\n\n  // For other implementations, use the default isDeployed behavior\n  return smartAccount;\n}\n","import { concat } from 'viem';\nimport type {\n  Address,\n  SignableMessage,\n  TypedData,\n  TypedDataDefinition,\n} from 'viem';\nimport type { SignReturnType as WebAuthnSignReturnType } from 'webauthn-p256';\n\nimport { Implementation } from './constants';\nimport { aggregateSignature } from './signatures';\nimport type {\n  AccountSignatoryConfig,\n  HybridSignatoryConfig,\n  InternalSignatory,\n  MultiSigSignatoryConfig,\n  SignatoryConfigByImplementation,\n  Stateless7702SignatoryConfig,\n  WalletSignatoryConfig,\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 resolveSignatoryFromWalletConfig = (\n  config: WalletSignatoryConfig,\n): InternalSignatory => {\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 resolveSignatoryFromAccountConfig = (config: AccountSignatoryConfig) => {\n  return {\n    signMessage: config.account.signMessage,\n    signTypedData: config.account.signTypedData,\n    getStubSignature: async () => EOA_STUB_SIGNATURE,\n  };\n};\n\nconst resolveHybridSignatory = (\n  config: HybridSignatoryConfig,\n): InternalSignatory => {\n  if ('walletClient' in config) {\n    return resolveSignatoryFromWalletConfig(config);\n  } else if ('account' in config) {\n    const { signMessage, signTypedData, getStubSignature } =\n      resolveSignatoryFromAccountConfig(config);\n    if (!signMessage) {\n      throw new Error('Account does not support signMessage');\n    }\n    if (!signTypedData) {\n      throw new Error('Account does not support signTypedData');\n    }\n    return {\n      signMessage,\n      signTypedData,\n      getStubSignature,\n    };\n  }\n  const { keyId, webAuthnAccount } = config;\n\n  if (webAuthnAccount.type !== 'webAuthn') {\n    throw new Error('Account is not a webAuthn account');\n  }\n\n  const encodeSignature = ({ signature, webauthn }: WebAuthnSignReturnType) =>\n    encodeDeleGatorSignature(\n      keyId,\n      signature,\n      webauthn.clientDataJSON,\n      webauthn.authenticatorData,\n    );\n\n  const signMessage = async (args: { message: SignableMessage }) =>\n    webAuthnAccount.signMessage(args).then(encodeSignature);\n  const signTypedData = async <\n    const TTypedData extends TypedData | Record<string, unknown>,\n    TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n  >(\n    typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n  ) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);\n\n  const getStubSignature = async () => createDummyWebAuthnSignature(keyId);\n\n  return {\n    signMessage,\n    signTypedData,\n    getStubSignature,\n  };\n};\n\nconst resolveMultiSigSignatory = (\n  config: MultiSigSignatoryConfig,\n): InternalSignatory => {\n  const resolvedSignatories = config.map((signatory) => {\n    let individualSignMessage: InternalSignatory['signMessage'];\n    let individualSignTypedData: InternalSignatory['signTypedData'];\n    let address: Address;\n    if ('walletClient' in signatory) {\n      const { signMessage, signTypedData } =\n        resolveSignatoryFromWalletConfig(signatory);\n      individualSignMessage = signMessage;\n      individualSignTypedData = signTypedData;\n\n      address = signatory.walletClient.account.address;\n    } else {\n      const { signMessage, signTypedData } =\n        resolveSignatoryFromAccountConfig(signatory);\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 = signatory.account.address;\n    }\n    return {\n      address,\n      individualSignMessage,\n      individualSignTypedData,\n    };\n  });\n\n  const signMessage = async (args: { message: SignableMessage }) => {\n    const addressAndSignatures = resolvedSignatories.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 = resolvedSignatories.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(resolvedSignatories.map(() => EOA_STUB_SIGNATURE));\n\n  return {\n    signMessage,\n    signTypedData,\n    getStubSignature,\n  };\n};\n\nconst resolveStateless7702Signatory = (\n  config: Stateless7702SignatoryConfig,\n): InternalSignatory => {\n  if ('walletClient' in config) {\n    return resolveSignatoryFromWalletConfig(config);\n  } else if ('account' in config) {\n    const { signMessage, signTypedData, getStubSignature } =\n      resolveSignatoryFromAccountConfig(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 signatory config');\n};\n\nexport const resolveSignatory = <\n  TImplementation extends Implementation,\n>(config: {\n  implementation: TImplementation;\n  signatory: SignatoryConfigByImplementation<TImplementation>;\n}): InternalSignatory => {\n  const { implementation } = config;\n\n  if (implementation === Implementation.Hybrid) {\n    return resolveHybridSignatory(config.signatory as HybridSignatoryConfig);\n  } else if (implementation === Implementation.MultiSig) {\n    return resolveMultiSigSignatory(\n      config.signatory as MultiSigSignatoryConfig,\n    );\n  } else if (implementation === Implementation.Stateless7702) {\n    return resolveStateless7702Signatory(\n      config.signatory as Stateless7702SignatoryConfig,\n    );\n  }\n  throw new Error(`Implementation type '${implementation}' not supported`);\n};\n","import type { Address, Hex } from 'viem';\nimport { concat } from 'viem';\n\nconst signatureTypes = ['ECDSA'] as const;\n\nexport type SignatureType = (typeof signatureTypes)[number];\n\n/**\n * Represents a partial signature that can be aggregated with others.\n */\nexport type PartialSignature = {\n  signer: Address;\n  signature: Hex;\n  type: SignatureType;\n};\n\n/**\n * Aggregates signatures into a single signature as expected by the MultiSig implementation.\n * @param params - The parameters for signature aggregation.\n * @param params.signatures - The array of partial signatures to aggregate.\n * @returns The aggregated signature.\n */\nexport const aggregateSignature = ({\n  signatures,\n}: {\n  signatures: PartialSignature[];\n}): Hex => {\n  if (signatures.length === 0) {\n    return '0x';\n  }\n\n  for (const { type } of signatures) {\n    if (!signatureTypes.includes(type)) {\n      throw new Error(`Invalid signature type: ${type}`);\n    }\n  }\n\n  // Sort signatures by signer address as required by MultiSig implementation\n  const sortedSignatures = [...signatures].sort((a, b) =>\n    a.signer.localeCompare(b.signer),\n  );\n\n  // Concatenate all signatures\n  return concat(sortedSignatures.map(({ signature }) => signature));\n};\n\n/**\n * Type definition for the aggregateSignature function parameters.\n */\nexport type AggregateSignatureParams = {\n  signatures: PartialSignature[];\n};\n","import type { PublicClient } from 'viem';\n\nimport type { DeleGatorEnvironment } 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 = PublicClient &\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 public client.\n * @param params.environment - The delegator environment.\n * @returns The extended client with caveat enforcer actions.\n */\nexport function createCaveatEnforcerClient({\n  client,\n  environment,\n}: {\n  client: PublicClient;\n  environment: DeleGatorEnvironment;\n}): CaveatEnforcerClient {\n  return client.extend(caveatEnforcerActions({ environment }));\n}\n\n// Re-export types for convenience\nexport type { CaveatEnforcerParams, PeriodTransferResult, StreamingResult };\n"],"mappings":"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","names":["concat","signMessage","signTypedData","getStubSignature","concat","signDelegation","signUserOperation"]}