{"version":3,"sources":["../src/actions/index.ts","../src/actions/getCaveatAvailableAmount.ts","../src/actions/isValid7702Implementation.ts","../src/actions/signDelegation.ts","../src/actions/signUserOperation.ts"],"sourcesContent":["/* eslint-disable */\n// experimental actions will be moved here once they have stabilized\n\nexport {\n  // Individual action functions\n  getErc20PeriodTransferEnforcerAvailableAmount,\n  getErc20StreamingEnforcerAvailableAmount,\n  getMultiTokenPeriodEnforcerAvailableAmount,\n  getNativeTokenPeriodTransferEnforcerAvailableAmount,\n  getNativeTokenStreamingEnforcerAvailableAmount,\n  // Action builder\n  caveatEnforcerActions,\n  // Parameter types\n  type CaveatEnforcerParams,\n  // Result types\n  type PeriodTransferResult,\n  type StreamingResult,\n} from './getCaveatAvailableAmount';\n\nexport { isValid7702Implementation } from './isValid7702Implementation';\n\n// Signing actions\nexport {\n  signDelegation,\n  signDelegationActions,\n  type SignDelegationParameters,\n  type SignDelegationReturnType,\n} from './signDelegation';\n\nexport {\n  signUserOperation,\n  signUserOperationActions,\n  type SignUserOperationParameters,\n  type SignUserOperationReturnType,\n} from './signUserOperation';\n","import type { Address, Hex, Client } from 'viem';\n\nimport { getDelegationHashOffchain } from '../delegation';\nimport * as ERC20PeriodTransferEnforcer from '../DelegationFramework/ERC20PeriodTransferEnforcer';\nimport * as ERC20StreamingEnforcer from '../DelegationFramework/ERC20StreamingEnforcer';\nimport * as MultiTokenPeriodEnforcer from '../DelegationFramework/MultiTokenPeriodEnforcer';\nimport * as NativeTokenPeriodTransferEnforcer from '../DelegationFramework/NativeTokenPeriodTransferEnforcer';\nimport * as NativeTokenStreamingEnforcer from '../DelegationFramework/NativeTokenStreamingEnforcer';\nimport type { DeleGatorEnvironment, Delegation } from '../types';\n\n/**\n * Parameters for all caveat enforcer actions.\n */\nexport type CaveatEnforcerParams = {\n  delegation: Delegation;\n};\n\n/**\n * Return type for period-based transfer enforcers\n */\nexport type PeriodTransferResult = {\n  availableAmount: bigint;\n  isNewPeriod: boolean;\n  currentPeriod: bigint;\n};\n\n/**\n * Return type for streaming enforcers\n */\nexport type StreamingResult = {\n  availableAmount: bigint;\n};\n\n/**\n * Finds a caveat that matches the specified enforcer address.\n * @param config - The configuration object.\n * @param config.delegation - The delegation to search.\n * @param config.enforcerAddress - The enforcer address to match.\n * @param config.enforcerName - The name of the enforcer.\n * @returns The matching caveat.\n * @throws Error if no matching caveat is found.\n * @throws Error if multiple matching caveats are found.\n */\nfunction findMatchingCaveat({\n  delegation,\n  enforcerAddress,\n  enforcerName,\n}: {\n  delegation: Delegation;\n  enforcerAddress: Address;\n  enforcerName: keyof DeleGatorEnvironment['caveatEnforcers'];\n}): { terms: Hex; args: Hex } {\n  const matchingCaveats = delegation.caveats.filter(\n    (caveat) => caveat.enforcer.toLowerCase() === enforcerAddress.toLowerCase(),\n  );\n\n  if (matchingCaveats.length === 0) {\n    throw new Error(`No caveat found with enforcer matching ${enforcerName}`);\n  }\n\n  if (matchingCaveats.length > 1) {\n    throw new Error(\n      `Multiple caveats found with enforcer matching ${enforcerName}`,\n    );\n  }\n\n  const [{ terms, args }] = matchingCaveats as unknown as [\n    { terms: Hex; args: Hex },\n  ];\n\n  return {\n    terms,\n    args,\n  };\n}\n\n/**\n * Gets the delegation manager address from environment.\n *\n * @param environment - The delegator environment.\n * @returns The delegation manager address.\n */\nfunction getDelegationManager(environment: DeleGatorEnvironment): Address {\n  if (!environment.DelegationManager) {\n    throw new Error('Delegation manager address not found');\n  }\n\n  return environment.DelegationManager;\n}\n\n/**\n * Gets the enforcer address from environment.\n *\n * @param config - The configuration object.\n * @param config.enforcerName - The name of the enforcer.\n * @param config.environment - The delegator environment.\n * @returns The enforcer address.\n */\nfunction getEnforcerAddress({\n  enforcerName,\n  environment,\n}: {\n  enforcerName: keyof DeleGatorEnvironment['caveatEnforcers'];\n  environment: DeleGatorEnvironment;\n}): Address {\n  const enforcerAddress = environment.caveatEnforcers[enforcerName];\n  if (!enforcerAddress) {\n    throw new Error(`${enforcerName} not found in environment`);\n  }\n\n  return enforcerAddress;\n}\n\n/**\n * Get available amount for ERC20 period transfer enforcer.\n *\n * @param client - The viem client.\n * @param environment - The delegator environment.\n * @param params - The parameters for the ERC20 period transfer enforcer.\n * @returns Promise resolving to the period transfer result.\n */\nexport async function getErc20PeriodTransferEnforcerAvailableAmount(\n  client: Client,\n  environment: DeleGatorEnvironment,\n  params: CaveatEnforcerParams,\n): Promise<PeriodTransferResult> {\n  const enforcerName = 'ERC20PeriodTransferEnforcer';\n\n  const delegationManager = getDelegationManager(environment);\n  const enforcerAddress = getEnforcerAddress({\n    enforcerName,\n    environment,\n  });\n\n  const delegationHash = getDelegationHashOffchain(params.delegation);\n  const { terms } = findMatchingCaveat({\n    delegation: params.delegation,\n    enforcerAddress,\n    enforcerName,\n  });\n\n  return ERC20PeriodTransferEnforcer.read.getAvailableAmount({\n    client,\n    contractAddress: enforcerAddress,\n    delegationHash,\n    delegationManager,\n    terms,\n  });\n}\n\n/**\n * Get available amount for ERC20 streaming enforcer.\n *\n * @param client - The viem client.\n * @param environment - The delegator environment.\n * @param params - The parameters for the ERC20 streaming enforcer.\n * @returns Promise resolving to the streaming result.\n */\nexport async function getErc20StreamingEnforcerAvailableAmount(\n  client: Client,\n  environment: DeleGatorEnvironment,\n  params: CaveatEnforcerParams,\n): Promise<StreamingResult> {\n  const enforcerName = 'ERC20StreamingEnforcer';\n  const delegationManager = getDelegationManager(environment);\n  const enforcerAddress = getEnforcerAddress({\n    enforcerName,\n    environment,\n  });\n\n  const delegationHash = getDelegationHashOffchain(params.delegation);\n  const { terms } = findMatchingCaveat({\n    delegation: params.delegation,\n    enforcerAddress,\n    enforcerName,\n  });\n\n  return ERC20StreamingEnforcer.read.getAvailableAmount({\n    client,\n    contractAddress: enforcerAddress,\n    delegationManager,\n    delegationHash,\n    terms,\n  });\n}\n\n/**\n * Get available amount for multi-token period enforcer.\n *\n * @param client - The viem client.\n * @param environment - The delegator environment.\n * @param params - The parameters for the multi-token period enforcer.\n * @returns Promise resolving to the period transfer result.\n */\nexport async function getMultiTokenPeriodEnforcerAvailableAmount(\n  client: Client,\n  environment: DeleGatorEnvironment,\n  params: CaveatEnforcerParams,\n): Promise<PeriodTransferResult> {\n  const enforcerName = 'MultiTokenPeriodEnforcer';\n  const delegationManager = getDelegationManager(environment);\n  const enforcerAddress = getEnforcerAddress({\n    enforcerName,\n    environment,\n  });\n\n  const delegationHash = getDelegationHashOffchain(params.delegation);\n  const { terms, args } = findMatchingCaveat({\n    delegation: params.delegation,\n    enforcerAddress,\n    enforcerName,\n  });\n\n  return MultiTokenPeriodEnforcer.read.getAvailableAmount({\n    client,\n    contractAddress: enforcerAddress,\n    delegationHash,\n    delegationManager,\n    terms,\n    args,\n  });\n}\n\n/**\n * Get available amount for native token period transfer enforcer.\n *\n * @param client - The viem client.\n * @param environment - The delegator environment.\n * @param params - The parameters for the native token period transfer enforcer.\n * @returns Promise resolving to the period transfer result.\n */\nexport async function getNativeTokenPeriodTransferEnforcerAvailableAmount(\n  client: Client,\n  environment: DeleGatorEnvironment,\n  params: CaveatEnforcerParams,\n): Promise<PeriodTransferResult> {\n  const enforcerName = 'NativeTokenPeriodTransferEnforcer';\n  const delegationManager = getDelegationManager(environment);\n  const enforcerAddress = getEnforcerAddress({\n    enforcerName,\n    environment,\n  });\n\n  const delegationHash = getDelegationHashOffchain(params.delegation);\n  const { terms } = findMatchingCaveat({\n    delegation: params.delegation,\n    enforcerAddress,\n    enforcerName,\n  });\n\n  return NativeTokenPeriodTransferEnforcer.read.getAvailableAmount({\n    client,\n    contractAddress: enforcerAddress,\n    delegationHash,\n    delegationManager,\n    terms,\n  });\n}\n\n/**\n * Get available amount for native token streaming enforcer.\n *\n * @param client - The viem client.\n * @param environment - The delegator environment.\n * @param params - The parameters for the native token streaming enforcer.\n * @returns Promise resolving to the streaming result.\n */\nexport async function getNativeTokenStreamingEnforcerAvailableAmount(\n  client: Client,\n  environment: DeleGatorEnvironment,\n  params: CaveatEnforcerParams,\n): Promise<StreamingResult> {\n  const enforcerName = 'NativeTokenStreamingEnforcer';\n  const delegationManager = getDelegationManager(environment);\n  const enforcerAddress = getEnforcerAddress({\n    enforcerName,\n    environment,\n  });\n\n  const delegationHash = getDelegationHashOffchain(params.delegation);\n  const { terms } = findMatchingCaveat({\n    delegation: params.delegation,\n    enforcerAddress,\n    enforcerName,\n  });\n\n  return NativeTokenStreamingEnforcer.read.getAvailableAmount({\n    client,\n    contractAddress: enforcerAddress,\n    delegationManager,\n    delegationHash,\n    terms,\n  });\n}\n\n/**\n * Caveat enforcer actions for extending viem clients.\n *\n * @param params - The parameters object.\n * @param params.environment - The delegator environment.\n * @returns A function that takes a client and returns the client extension with caveat enforcer actions.\n */\nexport const caveatEnforcerActions =\n  ({ environment }: { environment: DeleGatorEnvironment }) =>\n  (client: Client) => ({\n    /**\n     * Get available amount for ERC20 period transfer enforcer.\n     *\n     * @param params - The parameters for the ERC20 period transfer enforcer.\n     * @returns Promise resolving to the period transfer result.\n     */\n    getErc20PeriodTransferEnforcerAvailableAmount: async (\n      params: CaveatEnforcerParams,\n    ): Promise<PeriodTransferResult> => {\n      return getErc20PeriodTransferEnforcerAvailableAmount(\n        client,\n        environment,\n        params,\n      );\n    },\n\n    /**\n     * Get available amount for ERC20 streaming enforcer.\n     *\n     * @param params - The parameters for the ERC20 streaming enforcer.\n     * @returns Promise resolving to the streaming result.\n     */\n    getErc20StreamingEnforcerAvailableAmount: async (\n      params: CaveatEnforcerParams,\n    ): Promise<StreamingResult> => {\n      return getErc20StreamingEnforcerAvailableAmount(\n        client,\n        environment,\n        params,\n      );\n    },\n\n    /**\n     * Get available amount for multi-token period enforcer.\n     *\n     * @param params - The parameters for the multi-token period enforcer.\n     * @returns Promise resolving to the period transfer result.\n     */\n    getMultiTokenPeriodEnforcerAvailableAmount: async (\n      params: CaveatEnforcerParams,\n    ): Promise<PeriodTransferResult> => {\n      return getMultiTokenPeriodEnforcerAvailableAmount(\n        client,\n        environment,\n        params,\n      );\n    },\n\n    /**\n     * Get available amount for native token period transfer enforcer.\n     *\n     * @param params - The parameters for the native token period transfer enforcer.\n     * @returns Promise resolving to the period transfer result.\n     */\n    getNativeTokenPeriodTransferEnforcerAvailableAmount: async (\n      params: CaveatEnforcerParams,\n    ): Promise<PeriodTransferResult> => {\n      return getNativeTokenPeriodTransferEnforcerAvailableAmount(\n        client,\n        environment,\n        params,\n      );\n    },\n\n    /**\n     * Get available amount for native token streaming enforcer.\n     *\n     * @param params - The parameters for the native token streaming enforcer.\n     * @returns Promise resolving to the streaming result.\n     */\n    getNativeTokenStreamingEnforcerAvailableAmount: async (\n      params: CaveatEnforcerParams,\n    ): Promise<StreamingResult> => {\n      return getNativeTokenStreamingEnforcerAvailableAmount(\n        client,\n        environment,\n        params,\n      );\n    },\n  });\n","import type { Client, Address, Hex } from 'viem';\nimport { isAddressEqual } from 'viem';\nimport { getCode } from 'viem/actions';\n\nimport type { DeleGatorEnvironment } from '../types';\n\n// EIP-7702 delegation prefix (0xef0100)\nconst DELEGATION_PREFIX = '0xef0100' as const;\n\n/**\n * Parameters for checking if an account is delegated to the EIP-7702 implementation.\n */\nexport type IsValid7702ImplementationParameters = {\n  /** The client to use for the query. */\n  client: Client;\n  /** The address to check for proper delegation. */\n  accountAddress: Address;\n  /** The DeleGator environment containing contract addresses. */\n  environment: DeleGatorEnvironment;\n};\n\n/**\n * Extracts the delegated contract address from EIP-7702 delegation code.\n *\n * @param code - The code returned from getCode for a delegated account.\n * @returns The delegated contract address or null if not a valid delegation.\n */\nfunction extractDelegatedAddress(code: Hex | undefined): Address | null {\n  if (code?.length !== 48) {\n    // 0x (2 chars) + ef0100 (6 chars) + address (40 chars) = 48 chars\n    return null;\n  }\n\n  if (!code.toLowerCase().startsWith(DELEGATION_PREFIX.toLowerCase())) {\n    return null;\n  }\n\n  // Extract the 20-byte address after the delegation prefix\n  const addressHex = code.slice(8); // Remove '0xef0100' prefix (8 chars)\n  return `0x${addressHex}`;\n}\n\n/**\n * Checks if an account is properly delegated to the EIP-7702 implementation.\n *\n * This function validates EIP-7702 delegations by checking if the EOA has a 7702\n * contract assigned to it and comparing the delegated address against the 7702\n * implementation found in the environment.\n *\n * @param params - The parameters for checking the delegation.\n * @param params.client - The client to use for the query.\n * @param params.accountAddress - The address to check for proper delegation.\n * @param params.environment - The DeleGator environment containing contract addresses.\n * @returns A promise that resolves to true if the account is properly delegated to the 7702 implementation, false otherwise.\n * @example\n * ```typescript\n * const isValid = await isValid7702Implementation({\n *   client: publicClient,\n *   accountAddress: '0x...',\n *   environment: delegatorEnvironment,\n * });\n *\n * if (isValid) {\n *   console.log('Account is properly delegated to EIP-7702 implementation');\n * } else {\n *   console.log('Account is not properly delegated');\n * }\n * ```\n */\nexport async function isValid7702Implementation({\n  client,\n  accountAddress,\n  environment,\n}: IsValid7702ImplementationParameters): Promise<boolean> {\n  try {\n    // Get the code at the account address\n    const code = await getCode(client, {\n      address: accountAddress,\n    });\n\n    // Extract the delegated contract address from the EIP-7702 delegation code\n    const delegatedAddress = extractDelegatedAddress(code);\n\n    // If no valid delegation found, return false\n    if (!delegatedAddress) {\n      return false;\n    }\n\n    // Compare the delegated address with the 7702 implementation in the environment\n    const expectedImplementation =\n      environment.implementations.EIP7702StatelessDeleGatorImpl;\n    if (!expectedImplementation) {\n      return false;\n    }\n\n    return isAddressEqual(delegatedAddress, expectedImplementation);\n  } catch (error) {\n    // If the call fails (e.g., no code at address, network error),\n    // then it's not properly delegated to our implementation\n    return false;\n  }\n}\n","import type {\n  Account,\n  Address,\n  Chain,\n  Client,\n  Hex,\n  Transport,\n  WalletClient,\n} from 'viem';\nimport { BaseError } from 'viem';\nimport { parseAccount } from 'viem/accounts';\n\nimport { prepareSignDelegationTypedData } from '../delegation';\nimport type { Delegation } from '../types';\n\nexport type SignDelegationParameters = {\n  /** Account to sign with */\n  account?: Account | Address;\n  /** The delegation to sign */\n  delegation: Omit<Delegation, 'signature'>;\n  /** The address of the delegation manager contract */\n  delegationManager: Address;\n  /** The chain ID for the signature */\n  chainId: number;\n  /** The name of the contract */\n  name?: string;\n  /** The version of the contract */\n  version?: string;\n  /** Whether to allow insecure unrestricted delegation */\n  allowInsecureUnrestrictedDelegation?: boolean;\n};\n\nexport type SignDelegationReturnType = Hex;\n\n/**\n * Signs a delegation using a wallet client.\n * @param client - The wallet client to use for signing.\n * @param parameters - The parameters for signing the delegation.\n * @returns The signature of the delegation.\n * @example\n * ```ts\n * const signature = await signDelegation(walletClient, {\n *   delegation: {\n *     delegate: '0x...',\n *     delegator: '0x...',\n *     authority: '0x...',\n *     caveats: [],\n *     salt: '0x'\n *   },\n *   delegationManager: '0x...',\n *   chainId: 1\n * });\n * ```\n */\nexport async function signDelegation<\n  TChain extends Chain | undefined,\n  TAccount extends Account | undefined,\n>(\n  client: Client<Transport, TChain, TAccount> & {\n    signTypedData: WalletClient['signTypedData'];\n  },\n  parameters: SignDelegationParameters,\n): Promise<SignDelegationReturnType> {\n  const {\n    account: accountParam = client.account,\n    delegation,\n    delegationManager,\n    chainId,\n    name = 'DelegationManager',\n    version = '1',\n    allowInsecureUnrestrictedDelegation = false,\n  } = parameters;\n\n  if (!accountParam) {\n    throw new BaseError('Account not found. Please provide an account.');\n  }\n\n  const account = parseAccount(accountParam);\n\n  const typedData = prepareSignDelegationTypedData({\n    delegation,\n    delegationManager,\n    chainId,\n    name,\n    version,\n    allowInsecureUnrestrictedDelegation,\n  });\n\n  return client.signTypedData({\n    account,\n    ...typedData,\n  });\n}\n\n/**\n * Creates a sign delegation action that can be used to extend a wallet client.\n * @returns A function that can be used with wallet client extend method.\n * @example\n * ```ts\n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http()\n * }).extend(signDelegationActions());\n * ```\n */\nexport function signDelegationActions() {\n  return <\n    TChain extends Chain | undefined,\n    TAccount extends Account | undefined,\n  >(\n    client: Client<Transport, TChain, TAccount> & {\n      signTypedData: WalletClient['signTypedData'];\n    },\n  ) => ({\n    signDelegation: async (\n      parameters: Omit<SignDelegationParameters, 'chainId'> & {\n        chainId?: number;\n      },\n    ) =>\n      signDelegation(client, {\n        chainId:\n          parameters.chainId ??\n          (() => {\n            if (!client.chain?.id) {\n              throw new BaseError(\n                'Chain ID is required. Either provide it in parameters or configure the client with a chain.',\n              );\n            }\n            return client.chain.id;\n          })(),\n        ...parameters,\n      }),\n  });\n}\n","import type {\n  Account,\n  Address,\n  Chain,\n  Client,\n  Hex,\n  Transport,\n  WalletClient,\n} from 'viem';\nimport { BaseError } from 'viem';\nimport { parseAccount } from 'viem/accounts';\n\nimport { prepareSignUserOperationTypedData } from '../userOp';\nimport type { UserOperationV07 } from '../userOp';\n\nexport type SignUserOperationParameters = {\n  /** Account to sign with */\n  account?: Account | Address;\n  /** The user operation to sign */\n  userOperation: Omit<UserOperationV07, 'signature'>;\n  /** The entry point contract address */\n  entryPoint: { address: Address };\n  /** The chain ID that the entry point is deployed on */\n  chainId: number;\n  /** The address of the smart account */\n  address: Address;\n  /** The name of the domain of the implementation contract */\n  name: 'HybridDeleGator' | 'MultiSigDeleGator';\n  /** The version of the domain of the implementation contract */\n  version?: string;\n};\n\nexport type SignUserOperationReturnType = Hex;\n\n/**\n * Signs a user operation using a wallet client.\n * @param client - The wallet client to use for signing.\n * @param parameters - The parameters for signing the user operation.\n * @returns The signature of the user operation.\n * @example\n * ```ts\n * const signature = await signUserOperation(walletClient, {\n *   userOperation: {\n *     sender: '0x...',\n *     nonce: 0n,\n *     callData: '0x',\n *     callGasLimit: 1000000n,\n *     verificationGasLimit: 1000000n,\n *     preVerificationGas: 21000n,\n *     maxFeePerGas: 1000000000n,\n *     maxPriorityFeePerGas: 1000000000n\n *   },\n *   entryPoint: { address: '0x...' },\n *   chainId: 1,\n *   address: '0x...',\n *   name: 'HybridDeleGator'\n * });\n * ```\n */\nexport async function signUserOperation<\n  TChain extends Chain | undefined,\n  TAccount extends Account | undefined,\n>(\n  client: Client<Transport, TChain, TAccount> & {\n    signTypedData: WalletClient['signTypedData'];\n  },\n  parameters: SignUserOperationParameters,\n): Promise<SignUserOperationReturnType> {\n  const {\n    account: accountParam = client.account,\n    userOperation,\n    entryPoint,\n    chainId,\n    name,\n    address,\n    version = '1',\n  } = parameters;\n\n  if (!accountParam) {\n    throw new BaseError('Account not found. Please provide an account.');\n  }\n\n  const account = parseAccount(accountParam);\n\n  const typedData = prepareSignUserOperationTypedData({\n    userOperation,\n    entryPoint,\n    chainId,\n    name,\n    address,\n    version,\n  });\n\n  return client.signTypedData({\n    account,\n    ...typedData,\n  });\n}\n\n/**\n * Creates a sign user operation action that can be used to extend a wallet client.\n * @returns A function that can be used with wallet client extend method.\n * @example\n * ```ts\n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http()\n * }).extend(signUserOperationActions());\n * ```\n */\nexport function signUserOperationActions() {\n  return <\n    TChain extends Chain | undefined,\n    TAccount extends Account | undefined,\n  >(\n    client: Client<Transport, TChain, TAccount> & {\n      signTypedData: WalletClient['signTypedData'];\n    },\n  ) => ({\n    signUserOperation: async (\n      parameters: Omit<SignUserOperationParameters, 'chainId'> & {\n        chainId?: number;\n      },\n    ) =>\n      signUserOperation(client, {\n        chainId:\n          parameters.chainId ??\n          (() => {\n            if (!client.chain?.id) {\n              throw new BaseError(\n                'Chain ID is required. Either provide it in parameters or configure the client with a chain.',\n              );\n            }\n            return client.chain.id;\n          })(),\n        ...parameters,\n      }),\n  });\n}\n"],"mappings":"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","names":["read_exports","BaseError","parseAccount","BaseError","parseAccount"]}