@metamask/smart-accounts-kit 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/dist/actions/index.cjs +5 -5
  3. package/dist/actions/index.mjs +4 -4
  4. package/dist/{chunk-K5C42JZ2.mjs → chunk-2HNEALPY.mjs} +4 -4
  5. package/dist/{chunk-PSERHFRY.mjs → chunk-3JBYBEYP.mjs} +2 -2
  6. package/dist/{chunk-PZM5E7L3.cjs → chunk-4QBJFYZ7.cjs} +12 -12
  7. package/dist/{chunk-PZM5E7L3.cjs.map → chunk-4QBJFYZ7.cjs.map} +1 -1
  8. package/dist/{chunk-AAYEHQXN.cjs → chunk-5ZBCTLQS.cjs} +8 -8
  9. package/dist/{chunk-AAYEHQXN.cjs.map → chunk-5ZBCTLQS.cjs.map} +1 -1
  10. package/dist/{chunk-DR5QAW34.mjs → chunk-72UQFUL5.mjs} +2 -2
  11. package/dist/{chunk-Q6ZTEHYY.mjs → chunk-BJGZGTRU.mjs} +3 -2
  12. package/dist/{chunk-Q6ZTEHYY.mjs.map → chunk-BJGZGTRU.mjs.map} +1 -1
  13. package/dist/{chunk-CE3ZQE3P.cjs → chunk-BWR5ZK6Z.cjs} +3 -3
  14. package/dist/{chunk-CE3ZQE3P.cjs.map → chunk-BWR5ZK6Z.cjs.map} +1 -1
  15. package/dist/{chunk-4WKZQUP4.cjs → chunk-DLR4BZKP.cjs} +102 -102
  16. package/dist/{chunk-4WKZQUP4.cjs.map → chunk-DLR4BZKP.cjs.map} +1 -1
  17. package/dist/{chunk-LCNP5VYR.mjs → chunk-F5U55BIP.mjs} +2 -2
  18. package/dist/{chunk-MAPUND7S.cjs → chunk-HJETDDBN.cjs} +3 -2
  19. package/dist/chunk-HJETDDBN.cjs.map +1 -0
  20. package/dist/{chunk-3OQKCVQC.mjs → chunk-KTAXE6PZ.mjs} +4 -4
  21. package/dist/{chunk-XU72WGZA.cjs → chunk-QHDMZSGQ.cjs} +11 -11
  22. package/dist/{chunk-XU72WGZA.cjs.map → chunk-QHDMZSGQ.cjs.map} +1 -1
  23. package/dist/{chunk-PTIEXLLP.cjs → chunk-QPCM4XRT.cjs} +18 -18
  24. package/dist/{chunk-PTIEXLLP.cjs.map → chunk-QPCM4XRT.cjs.map} +1 -1
  25. package/dist/{chunk-XHKSMZ7G.mjs → chunk-Y5MOTV4T.mjs} +2 -2
  26. package/dist/contracts/index.cjs +5 -5
  27. package/dist/contracts/index.d.cts +2 -2
  28. package/dist/contracts/index.d.ts +2 -2
  29. package/dist/contracts/index.mjs +4 -4
  30. package/dist/{delegation-d52Owevd.d.cts → delegation-C7M1fy5Q.d.cts} +2 -2
  31. package/dist/{delegation-7PtFix8Y.d.ts → delegation-CCMAKs7W.d.ts} +2 -2
  32. package/dist/experimental/index.cjs +3 -3
  33. package/dist/experimental/index.mjs +1 -1
  34. package/dist/{index-0-B0YlEP.d.cts → index-BGXTbonF.d.cts} +1 -1
  35. package/dist/{index-D1WbhKCc.d.ts → index-DeHcI5-n.d.ts} +1 -1
  36. package/dist/index.cjs +19 -19
  37. package/dist/index.d.cts +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.mjs +7 -7
  40. package/dist/utils/index.cjs +5 -5
  41. package/dist/utils/index.d.cts +1 -1
  42. package/dist/utils/index.d.ts +1 -1
  43. package/dist/utils/index.mjs +4 -4
  44. package/package.json +17 -1
  45. package/dist/chunk-MAPUND7S.cjs.map +0 -1
  46. /package/dist/{chunk-K5C42JZ2.mjs.map → chunk-2HNEALPY.mjs.map} +0 -0
  47. /package/dist/{chunk-PSERHFRY.mjs.map → chunk-3JBYBEYP.mjs.map} +0 -0
  48. /package/dist/{chunk-DR5QAW34.mjs.map → chunk-72UQFUL5.mjs.map} +0 -0
  49. /package/dist/{chunk-LCNP5VYR.mjs.map → chunk-F5U55BIP.mjs.map} +0 -0
  50. /package/dist/{chunk-3OQKCVQC.mjs.map → chunk-KTAXE6PZ.mjs.map} +0 -0
  51. /package/dist/{chunk-XHKSMZ7G.mjs.map → chunk-Y5MOTV4T.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/chunk-HJETDDBN.cjs","../src/caveatBuilder/caveatBuilder.ts","../src/caveatBuilder/types.ts","../src/caveatBuilder/allowedCalldataBuilder.ts","../src/caveatBuilder/allowedMethodsBuilder.ts","../src/caveatBuilder/allowedTargetsBuilder.ts","../src/caveatBuilder/argsEqualityCheckBuilder.ts","../src/caveatBuilder/blockNumberBuilder.ts","../src/caveatBuilder/deployedBuilder.ts","../src/caveatBuilder/erc1155BalanceChangeBuilder.ts","../src/caveatBuilder/erc20BalanceChangeBuilder.ts","../src/caveatBuilder/erc20PeriodTransferBuilder.ts","../src/caveatBuilder/erc20StreamingBuilder.ts","../src/caveatBuilder/erc20TransferAmountBuilder.ts","../src/caveatBuilder/erc721BalanceChangeBuilder.ts","../src/caveatBuilder/erc721TransferBuilder.ts","../src/caveatBuilder/exactCalldataBatchBuilder.ts","../src/caveatBuilder/exactCalldataBuilder.ts","../src/caveatBuilder/exactExecutionBatchBuilder.ts","../src/caveatBuilder/exactExecutionBuilder.ts","../src/caveatBuilder/idBuilder.ts","../src/caveatBuilder/limitedCallsBuilder.ts","../src/caveatBuilder/multiTokenPeriodBuilder.ts","../src/caveatBuilder/nativeBalanceChangeBuilder.ts","../src/caveatBuilder/nativeTokenPaymentBuilder.ts","../src/caveatBuilder/nativeTokenPeriodTransferBuilder.ts","../src/caveatBuilder/nativeTokenStreamingBuilder.ts","../src/caveatBuilder/nativeTokenTransferAmountBuilder.ts","../src/caveatBuilder/nonceBuilder.ts","../src/caveatBuilder/ownershipTransferBuilder.ts","../src/caveatBuilder/redeemerBuilder.ts","../src/caveatBuilder/specificActionERC20TransferBatchBuilder.ts","../src/caveatBuilder/timestampBuilder.ts","../src/caveatBuilder/valueLteBuilder.ts","../src/caveatBuilder/coreCaveatBuilder.ts","../src/caveatBuilder/scope/erc20PeriodicScope.ts","../src/caveatBuilder/scope/erc20StreamingScope.ts","../src/caveatBuilder/scope/erc20TransferScope.ts","../src/utils.ts","../src/caveatBuilder/scope/erc721Scope.ts","../src/caveatBuilder/scope/functionCallScope.ts","../src/caveatBuilder/scope/nativeTokenPeriodicScope.ts","../src/caveatBuilder/scope/nativeTokenStreamingScope.ts","../src/caveatBuilder/scope/nativeTokenTransferScope.ts","../src/caveatBuilder/scope/ownershipScope.ts","../src/caveatBuilder/scope/index.ts","../src/caveatBuilder/resolveCaveats.ts","../src/caveats.ts","../src/delegation.ts"],"names":["BalanceChangeType","concat","isHex","isAddress","encodePacked","toHex","encodeAbiParameters","pad","allowedCalldata","exactCalldata","CAVEAT_TYPEHASH"],"mappings":"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","file":"/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/chunk-HJETDDBN.cjs","sourcesContent":[null,"import type { Caveat, SmartAccountsEnvironment } from '../types';\n\ntype CaveatWithOptionalArgs = Omit<Caveat, 'args'> & {\n args?: Caveat['args'];\n};\n\nconst INSECURE_UNRESTRICTED_DELEGATION_ERROR_MESSAGE =\n 'No caveats found. If you definitely want to create an empty caveat collection, set `allowInsecureUnrestrictedDelegation` to `true`.';\n\ntype CaveatBuilderMap = {\n [key: string]: (\n environment: SmartAccountsEnvironment,\n ...args: [...any]\n ) => Caveat;\n};\n\nexport type CaveatBuilderConfig = {\n allowInsecureUnrestrictedDelegation?: boolean;\n};\n\n/**\n * A builder class for creating and managing caveats.\n * @template TCaveatBuilderMap - The type map of available caveat builder functions.\n */\nexport class CaveatBuilder<\n TCaveatBuilderMap extends CaveatBuilderMap = Record<string, never>,\n> {\n #results: Caveat[] = [];\n\n #hasBeenBuilt = false;\n\n #environment: SmartAccountsEnvironment;\n\n #config: CaveatBuilderConfig;\n\n #enforcerBuilders: TCaveatBuilderMap;\n\n constructor(\n environment: SmartAccountsEnvironment,\n config: CaveatBuilderConfig = {},\n enforcerBuilders: TCaveatBuilderMap = {} as TCaveatBuilderMap,\n builtCaveats: Caveat[] = [],\n ) {\n this.#environment = environment;\n this.#config = config;\n this.#enforcerBuilders = enforcerBuilders;\n this.#results = builtCaveats;\n }\n\n /**\n * Extends the CaveatBuilder with a new enforcer function.\n * @template TEnforcerName - The name of the enforcer.\n * @template TFunction - The type of the enforcer function.\n * @param name - The name of the enforcer.\n * @param fn - The enforcer function.\n * @returns The extended CaveatBuilder instance.\n */\n extend<\n TEnforcerName extends string,\n TFunction extends (\n environment: SmartAccountsEnvironment,\n config: any,\n ) => Caveat,\n >(\n name: TEnforcerName,\n fn: TFunction,\n ): CaveatBuilder<TCaveatBuilderMap & Record<TEnforcerName, TFunction>> {\n return new CaveatBuilder<\n TCaveatBuilderMap & Record<TEnforcerName, TFunction>\n >(\n this.#environment,\n this.#config,\n { ...this.#enforcerBuilders, [name]: fn },\n this.#results,\n );\n }\n\n /**\n * Adds a caveat directly using a Caveat object.\n * @param caveat - The caveat to add.\n * @returns The CaveatBuilder instance for chaining.\n */\n addCaveat(caveat: CaveatWithOptionalArgs): CaveatBuilder<TCaveatBuilderMap>;\n\n /**\n * Adds a caveat using a named enforcer function.\n * @param name - The name of the enforcer function to use.\n * @param config - The configuration to pass to the enforcer function.\n * @returns The CaveatBuilder instance for chaining.\n */\n addCaveat<TEnforcerName extends keyof TCaveatBuilderMap>(\n name: TEnforcerName,\n config: Parameters<TCaveatBuilderMap[TEnforcerName]>[1],\n ): CaveatBuilder<TCaveatBuilderMap>;\n\n addCaveat<TEnforcerName extends keyof TCaveatBuilderMap>(\n nameOrCaveat: TEnforcerName | CaveatWithOptionalArgs,\n config?: Parameters<TCaveatBuilderMap[TEnforcerName]>[1],\n ): CaveatBuilder<TCaveatBuilderMap> {\n if (typeof nameOrCaveat === 'object') {\n const caveat = {\n args: '0x' as const,\n ...nameOrCaveat,\n };\n\n this.#results = [...this.#results, caveat];\n\n return this;\n }\n const name = nameOrCaveat;\n\n const func = this.#enforcerBuilders[name];\n if (typeof func === 'function') {\n const result = func(this.#environment, config);\n\n this.#results = [...this.#results, result];\n\n return this;\n }\n throw new Error(`Function \"${String(name)}\" does not exist.`);\n }\n\n /**\n * Returns the caveats that have been built using this CaveatBuilder.\n * @returns The array of built caveats.\n * @throws Error if the builder has already been built or if no caveats are found and empty caveats are not allowed.\n */\n build(): Caveat[] {\n if (this.#hasBeenBuilt) {\n throw new Error('This CaveatBuilder has already been built.');\n }\n\n if (\n this.#results.length === 0 &&\n !this.#config.allowInsecureUnrestrictedDelegation\n ) {\n throw new Error(INSECURE_UNRESTRICTED_DELEGATION_ERROR_MESSAGE);\n }\n\n this.#hasBeenBuilt = true;\n\n return this.#results;\n }\n}\n","import type { SmartAccountsEnvironment } from '../types';\n\nexport enum BalanceChangeType {\n Increase = 0x0,\n Decrease = 0x1,\n}\n\nexport type UnitOfAuthorityBaseConfig = {\n environment: SmartAccountsEnvironment;\n};\n","import { createAllowedCalldataTerms } from '@metamask/delegation-core';\nimport { type Hex } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const allowedCalldata = 'allowedCalldata';\n\nexport type AllowedCalldataBuilderConfig = {\n /**\n * The index in the calldata byte array (including the 4-byte method selector)\n * where the expected calldata starts.\n */\n startIndex: number;\n /**\n * The expected calldata as a hex string that must match at the specified index.\n */\n value: Hex;\n};\n\n/**\n * Builds a caveat struct for AllowedCalldataEnforcer that restricts calldata to a specific value at a given index.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing startIndex and value.\n * @returns The Caveat.\n * @throws Error if the value is not a valid hex string, if startIndex is negative, or if startIndex is not a whole number.\n */\nexport const allowedCalldataBuilder = (\n environment: SmartAccountsEnvironment,\n config: AllowedCalldataBuilderConfig,\n): Caveat => {\n const { startIndex, value } = config;\n\n const terms = createAllowedCalldataTerms({ startIndex, value });\n\n const {\n caveatEnforcers: { AllowedCalldataEnforcer },\n } = environment;\n\n if (!AllowedCalldataEnforcer) {\n throw new Error('AllowedCalldataEnforcer not found in environment');\n }\n\n return {\n enforcer: AllowedCalldataEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { isHex, concat, toFunctionSelector } from 'viem';\nimport type { AbiFunction, Hex } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const allowedMethods = 'allowedMethods';\n\nexport type MethodSelector = Hex | string | AbiFunction;\n\n// length of function selector in chars, _including_ 0x prefix\nconst FUNCTION_SELECTOR_STRING_LENGTH = 10;\n\nexport type AllowedMethodsBuilderConfig = {\n /**\n * An array of method selectors that the delegate is allowed to call.\n * Can be 4-byte hex strings, ABI function signatures, or ABIFunction objects.\n */\n selectors: MethodSelector[];\n};\n\n/**\n * Builds a caveat struct for the AllowedMethodsEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the allowed function selectors.\n * @returns The Caveat.\n * @throws Error if no selectors are provided or if any selector is invalid.\n */\nexport const allowedMethodsBuilder = (\n environment: SmartAccountsEnvironment,\n config: AllowedMethodsBuilderConfig,\n): Caveat => {\n const { selectors } = config;\n\n if (selectors.length === 0) {\n throw new Error('Invalid selectors: must provide at least one selector');\n }\n\n const parsedSelectors = selectors.map(parseSelector);\n\n const terms = concat(parsedSelectors);\n\n const {\n caveatEnforcers: { AllowedMethodsEnforcer },\n } = environment;\n\n if (!AllowedMethodsEnforcer) {\n throw new Error('AllowedMethodsEnforcer not found in environment');\n }\n\n return {\n enforcer: AllowedMethodsEnforcer,\n terms,\n args: '0x',\n };\n};\n\n/**\n * Parses a method selector into a hex string.\n * @param selector - The method selector to parse.\n * @returns The parsed selector as a hex string.\n */\nfunction parseSelector(selector: MethodSelector) {\n if (isHex(selector)) {\n if (selector.length === FUNCTION_SELECTOR_STRING_LENGTH) {\n return selector;\n }\n throw new Error(\n 'Invalid selector: must be a 4 byte hex string, abi function signature, or AbiFunction',\n );\n }\n\n try {\n return toFunctionSelector(selector);\n } catch (rootError: any) {\n throw new Error(\n 'Invalid selector: must be a 4 byte hex string, abi function signature, or AbiFunction',\n { cause: rootError },\n );\n }\n}\n","import { concat, isAddress, type Address } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const allowedTargets = 'allowedTargets';\n\nexport type AllowedTargetsBuilderConfig = {\n /**\n * An array of addresses that the delegate is allowed to call.\n * Each address must be a valid hex string.\n */\n targets: Address[];\n};\n\n/**\n * Builds a caveat struct for AllowedTargetsEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the targets.\n * @returns The Caveat.\n * @throws Error if no targets are provided or if any of the addresses are invalid.\n */\nexport const allowedTargetsBuilder = (\n environment: SmartAccountsEnvironment,\n config: AllowedTargetsBuilderConfig,\n): Caveat => {\n const { targets } = config;\n\n if (targets.length === 0) {\n throw new Error(\n 'Invalid targets: must provide at least one target address',\n );\n }\n\n // we check that the address is valid, but doesn't need to be checksummed\n const invalidAddresses = targets.filter(\n (target) => !isAddress(target, { strict: false }),\n );\n\n if (invalidAddresses.length > 0) {\n throw new Error('Invalid targets: must be valid addresses');\n }\n\n const terms = concat(targets);\n\n const {\n caveatEnforcers: { AllowedTargetsEnforcer },\n } = environment;\n\n if (!AllowedTargetsEnforcer) {\n throw new Error('AllowedTargetsEnforcer not found in environment');\n }\n\n return {\n enforcer: AllowedTargetsEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Hex, isHex } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const argsEqualityCheck = 'argsEqualityCheck';\n\nexport type ArgsEqualityCheckBuilderConfig = {\n /**\n * The expected args as a hex string that must match exactly when redeeming the delegation.\n */\n args: Hex;\n};\n\n/**\n * Builds a caveat struct for the ArgsEqualityCheckEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the builder.\n * @returns The Caveat.\n * @throws Error if the config is invalid.\n */\nexport const argsEqualityCheckBuilder = (\n environment: SmartAccountsEnvironment,\n config: ArgsEqualityCheckBuilderConfig,\n): Caveat => {\n const { args } = config;\n if (!isHex(args)) {\n throw new Error('Invalid config: args must be a valid hex string');\n }\n\n const {\n caveatEnforcers: { ArgsEqualityCheckEnforcer },\n } = environment;\n\n if (!ArgsEqualityCheckEnforcer) {\n throw new Error('ArgsEqualityCheckEnforcer not found in environment');\n }\n\n return {\n enforcer: ArgsEqualityCheckEnforcer,\n terms: args,\n args: '0x',\n };\n};\n","import { concat, toHex } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const blockNumber = 'blockNumber';\n\nexport type BlockNumberBuilderConfig = {\n /**\n * The block number after which the delegation is valid.\n * Set to 0n to disable this threshold.\n */\n afterThreshold: bigint;\n /**\n * The block number before which the delegation is valid.\n * Set to 0n to disable this threshold.\n */\n beforeThreshold: bigint;\n};\n\n/**\n * Builds a caveat struct for the BlockNumberEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the BlockNumberEnforcer.\n * @returns The Caveat.\n * @throws Error if both thresholds are zero, if blockAfterThreshold is greater than or equal to blockBeforeThreshold, or if BlockNumberEnforcer is not available in the environment.\n */\nexport const blockNumberBuilder = (\n environment: SmartAccountsEnvironment,\n config: BlockNumberBuilderConfig,\n): Caveat => {\n const { afterThreshold, beforeThreshold } = config;\n\n if (afterThreshold === 0n && beforeThreshold === 0n) {\n throw new Error(\n 'Invalid thresholds: At least one of afterThreshold or beforeThreshold must be specified',\n );\n }\n\n if (beforeThreshold !== 0n && afterThreshold >= beforeThreshold) {\n throw new Error(\n 'Invalid thresholds: afterThreshold must be less than beforeThreshold if both are specified',\n );\n }\n\n const terms = concat([\n toHex(afterThreshold, {\n size: 16,\n }),\n toHex(beforeThreshold, {\n size: 16,\n }),\n ]);\n\n const {\n caveatEnforcers: { BlockNumberEnforcer },\n } = environment;\n\n if (!BlockNumberEnforcer) {\n throw new Error('BlockNumberEnforcer not found in environment');\n }\n\n return {\n enforcer: BlockNumberEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { concat, isAddress, isHex, pad, type Address, type Hex } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const deployed = 'deployed';\n\nexport type DeployedBuilderConfig = {\n /**\n * The contract address as a hex string.\n */\n contractAddress: Address;\n /**\n * The salt to use with the deployment, as a hex string.\n */\n salt: Hex;\n /**\n * The bytecode of the contract as a hex string.\n */\n bytecode: Hex;\n};\n\n/**\n * Builds a caveat struct for a DeployedEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the deployed builder.\n * @returns The Caveat.\n * @throws Error if the contract address, factory address, or bytecode is invalid.\n */\nexport const deployedBuilder = (\n environment: SmartAccountsEnvironment,\n config: DeployedBuilderConfig,\n): Caveat => {\n const { contractAddress, salt, bytecode } = config;\n\n // we check that the addresses are valid, but don't need to be checksummed\n if (!isAddress(contractAddress, { strict: false })) {\n throw new Error(\n `Invalid contractAddress: must be a valid Ethereum address`,\n );\n }\n\n if (!isHex(salt)) {\n throw new Error('Invalid salt: must be a valid hexadecimal string');\n }\n\n if (!isHex(bytecode)) {\n throw new Error('Invalid bytecode: must be a valid hexadecimal string');\n }\n\n const terms = concat([contractAddress, pad(salt, { size: 32 }), bytecode]);\n\n const {\n caveatEnforcers: { DeployedEnforcer },\n } = environment;\n\n if (!DeployedEnforcer) {\n throw new Error('DeployedEnforcer not found in environment');\n }\n\n return {\n enforcer: DeployedEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, isAddress, encodePacked } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\nimport { BalanceChangeType } from './types';\n\nexport const erc1155BalanceChange = 'erc1155BalanceChange';\n\nexport type Erc1155BalanceChangeBuilderConfig = {\n /**\n * The ERC-1155 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The recipient's address as a hex string.\n */\n recipient: Address;\n /**\n * The ID of the ERC-1155 token as a bigint.\n */\n tokenId: bigint;\n /**\n * The amount by which the balance must have changed as a bigint.\n */\n balance: bigint;\n /**\n * The balance change type for the ERC-1155 token.\n * Specifies whether the balance should have increased or decreased.\n * Valid parameters are BalanceChangeType.Increase and BalanceChangeType.Decrease.\n */\n changeType: BalanceChangeType;\n};\n\n/**\n * Builds a caveat struct for the ERC1155BalanceChangeEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the ERC1155 balance change.\n * @returns The Caveat.\n * @throws Error if the token address is invalid, the recipient address is invalid, or the amount is not a positive number.\n */\nexport const erc1155BalanceChangeBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc1155BalanceChangeBuilderConfig,\n): Caveat => {\n const { tokenAddress, recipient, tokenId, balance, changeType } = config;\n\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error('Invalid tokenAddress: must be a valid address');\n }\n\n if (!isAddress(recipient, { strict: false })) {\n throw new Error('Invalid recipient: must be a valid address');\n }\n\n if (balance <= 0n) {\n throw new Error('Invalid balance: must be a positive number');\n }\n\n if (tokenId < 0n) {\n throw new Error('Invalid tokenId: must be a non-negative number');\n }\n\n if (\n changeType !== BalanceChangeType.Increase &&\n changeType !== BalanceChangeType.Decrease\n ) {\n throw new Error('Invalid changeType: must be either Increase or Decrease');\n }\n\n const terms = encodePacked(\n ['uint8', 'address', 'address', 'uint256', 'uint256'],\n [changeType, tokenAddress, recipient, tokenId, balance],\n );\n\n const {\n caveatEnforcers: { ERC1155BalanceChangeEnforcer },\n } = environment;\n\n if (!ERC1155BalanceChangeEnforcer) {\n throw new Error('ERC1155BalanceChangeEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC1155BalanceChangeEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, isAddress, encodePacked } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\nimport { BalanceChangeType } from './types';\n\nexport const erc20BalanceChange = 'erc20BalanceChange';\n\nexport type Erc20BalanceChangeBuilderConfig = {\n /**\n * The ERC-20 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The recipient's address as a hex string.\n */\n recipient: Address;\n /**\n * The amount by which the balance must have changed as a bigint.\n */\n balance: bigint;\n /**\n * The balance change type for the ERC-20 token.\n * Specifies whether the balance should have increased or decreased.\n * Valid parameters are BalanceChangeType.Increase and BalanceChangeType.Decrease.\n */\n changeType: BalanceChangeType;\n};\n\n/**\n * Builds a caveat struct for the ERC20BalanceChangeEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the ERC20 balance change.\n * @returns The Caveat.\n * @throws Error if the token address is invalid, the amount is not a positive number, or the change type is invalid.\n */\nexport const erc20BalanceChangeBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc20BalanceChangeBuilderConfig,\n): Caveat => {\n const { tokenAddress, recipient, balance, changeType } = config;\n\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error('Invalid tokenAddress: must be a valid address');\n }\n\n if (balance <= 0n) {\n throw new Error('Invalid balance: must be a positive number');\n }\n\n if (\n changeType !== BalanceChangeType.Increase &&\n changeType !== BalanceChangeType.Decrease\n ) {\n throw new Error('Invalid changeType: must be either Increase or Decrease');\n }\n\n const terms = encodePacked(\n ['uint8', 'address', 'address', 'uint256'],\n [changeType, tokenAddress, recipient, balance],\n );\n\n const {\n caveatEnforcers: { ERC20BalanceChangeEnforcer },\n } = environment;\n\n if (!ERC20BalanceChangeEnforcer) {\n throw new Error('ERC20BalanceChangeEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC20BalanceChangeEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createERC20TokenPeriodTransferTerms } from '@metamask/delegation-core';\nimport type { Address } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const erc20PeriodTransfer = 'erc20PeriodTransfer';\n\nexport type Erc20PeriodTransferBuilderConfig = {\n /**\n * The ERC-20 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The maximum amount of tokens that can be transferred per period.\n */\n periodAmount: bigint;\n /**\n * The duration of each period in seconds.\n */\n periodDuration: number;\n /**\n * The timestamp when the first period begins in seconds.\n */\n startDate: number;\n};\n\n/**\n * Builds a caveat struct for ERC20PeriodTransferEnforcer.\n * This enforcer validates that ERC20 token transfers do not exceed a specified amount\n * within a given time period. The transferable amount resets at the beginning of each period,\n * and any unused tokens are forfeited once the period ends.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the ERC20 period transfer builder.\n * @returns The Caveat.\n * @throws Error if the token address is invalid or if any of the numeric parameters are invalid.\n */\nexport const erc20PeriodTransferBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc20PeriodTransferBuilderConfig,\n): Caveat => {\n const { tokenAddress, periodAmount, periodDuration, startDate } = config;\n\n const terms = createERC20TokenPeriodTransferTerms({\n tokenAddress,\n periodAmount,\n periodDuration,\n startDate,\n });\n\n const {\n caveatEnforcers: { ERC20PeriodTransferEnforcer },\n } = environment;\n\n if (!ERC20PeriodTransferEnforcer) {\n throw new Error('ERC20PeriodTransferEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC20PeriodTransferEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createERC20StreamingTerms } from '@metamask/delegation-core';\nimport { type Address } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const erc20Streaming = 'erc20Streaming';\n\nexport type Erc20StreamingBuilderConfig = {\n /**\n * The ERC-20 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The initial amount available at start time as a bigint.\n */\n initialAmount: bigint;\n /**\n * Maximum total amount that can be unlocked as a bigint.\n */\n maxAmount: bigint;\n /**\n * Rate at which tokens accrue per second as a bigint.\n */\n amountPerSecond: bigint;\n /**\n * The start timestamp in seconds.\n */\n startTime: number;\n};\n\n/**\n * Builds a caveat for ERC20 token streaming with configurable parameters.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the ERC20 streaming builder.\n * @returns The Caveat.\n * @throws Error if the token address is invalid.\n * @throws Error if the initial amount is a negative number.\n * @throws Error if the max amount is not greater than 0.\n * @throws Error if the max amount is less than the initial amount.\n * @throws Error if the amount per second is not a positive number.\n * @throws Error if the start time is not a positive number.\n */\nexport const erc20StreamingBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc20StreamingBuilderConfig,\n): Caveat => {\n const { tokenAddress, initialAmount, maxAmount, amountPerSecond, startTime } =\n config;\n\n const terms = createERC20StreamingTerms({\n tokenAddress,\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n });\n\n const {\n caveatEnforcers: { ERC20StreamingEnforcer },\n } = environment;\n\n if (!ERC20StreamingEnforcer) {\n throw new Error('ERC20StreamingEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC20StreamingEnforcer,\n terms,\n args: '0x',\n };\n};\n","import type { Address } from 'viem';\nimport { concat, isAddress, toHex } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const erc20TransferAmount = 'erc20TransferAmount';\n\nexport type Erc20TransferAmountBuilderConfig = {\n /**\n * The ERC-20 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The maximum amount of tokens that can be transferred as a bigint.\n */\n maxAmount: bigint;\n};\n\n/**\n * Builds a caveat struct for ERC20TransferAmountEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the ERC20 transfer amount builder.\n * @returns The Caveat.\n * @throws Error if the token address is invalid or if the max amount is not a positive number.\n */\nexport const erc20TransferAmountBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc20TransferAmountBuilderConfig,\n): Caveat => {\n const { tokenAddress, maxAmount } = config;\n\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error('Invalid tokenAddress: must be a valid address');\n }\n\n if (maxAmount <= 0n) {\n throw new Error('Invalid maxAmount: must be a positive number');\n }\n\n const terms = concat([tokenAddress, toHex(maxAmount, { size: 32 })]);\n\n const {\n caveatEnforcers: { ERC20TransferAmountEnforcer },\n } = environment;\n\n if (!ERC20TransferAmountEnforcer) {\n throw new Error('ERC20TransferAmountEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC20TransferAmountEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, isAddress, encodePacked } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\nimport { BalanceChangeType } from './types';\n\nexport const erc721BalanceChange = 'erc721BalanceChange';\n\nexport type Erc721BalanceChangeBuilderConfig = {\n /**\n * The ERC-721 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The recipient's address as a hex string.\n */\n recipient: Address;\n /**\n * The amount by which the balance must have changed as a bigint.\n */\n amount: bigint;\n /**\n * The balance change type for the ERC-721 token.\n * Specifies whether the balance should have increased or decreased.\n * Valid parameters are BalanceChangeType.Increase and BalanceChangeType.Decrease.\n */\n changeType: BalanceChangeType;\n};\n\n/**\n * Builds a caveat struct for the ERC721BalanceChangeEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the ERC721 balance change.\n * @returns The Caveat.\n * @throws Error if the token address is invalid, the recipient address is invalid, or the amount is not a positive number.\n */\nexport const erc721BalanceChangeBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc721BalanceChangeBuilderConfig,\n): Caveat => {\n const { tokenAddress, recipient, amount, changeType } = config;\n\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error('Invalid tokenAddress: must be a valid address');\n }\n\n if (!isAddress(recipient, { strict: false })) {\n throw new Error('Invalid recipient: must be a valid address');\n }\n\n if (amount <= 0n) {\n throw new Error('Invalid balance: must be a positive number');\n }\n\n if (\n changeType !== BalanceChangeType.Increase &&\n changeType !== BalanceChangeType.Decrease\n ) {\n throw new Error('Invalid changeType: must be either Increase or Decrease');\n }\n\n const terms = encodePacked(\n ['uint8', 'address', 'address', 'uint256'],\n [changeType, tokenAddress, recipient, amount],\n );\n\n const {\n caveatEnforcers: { ERC721BalanceChangeEnforcer },\n } = environment;\n\n if (!ERC721BalanceChangeEnforcer) {\n throw new Error('ERC721BalanceChangeEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC721BalanceChangeEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, isAddress, toHex, concat } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const erc721Transfer = 'erc721Transfer';\n\nexport type Erc721TransferBuilderConfig = {\n /**\n * The ERC-721 contract address as a hex string.\n */\n tokenAddress: Address;\n /**\n * The token ID as a bigint.\n */\n tokenId: bigint;\n};\n\n/**\n * Builds a caveat struct for the ERC721TransferEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the ERC721 transfer builder.\n * @returns The Caveat representing the caveat for ERC721 transfer.\n * @throws Error if the permitted contract address is invalid.\n */\nexport const erc721TransferBuilder = (\n environment: SmartAccountsEnvironment,\n config: Erc721TransferBuilderConfig,\n): Caveat => {\n const { tokenAddress, tokenId } = config;\n\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error('Invalid tokenAddress: must be a valid address');\n }\n\n if (tokenId < 0n) {\n throw new Error('Invalid tokenId: must be a non-negative number');\n }\n\n const terms = concat([tokenAddress, toHex(tokenId, { size: 32 })]);\n\n const {\n caveatEnforcers: { ERC721TransferEnforcer },\n } = environment;\n\n if (!ERC721TransferEnforcer) {\n throw new Error('ERC721TransferEnforcer not found in environment');\n }\n\n return {\n enforcer: ERC721TransferEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { encodeAbiParameters, isAddress } from 'viem';\n\nimport type { ExecutionStruct } from '../executions';\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const exactCalldataBatch = 'exactCalldataBatch';\n\nexport type ExactCalldataBatchBuilderConfig = {\n /**\n * An array of executions that must be matched exactly in the batch.\n * Each execution specifies a target address, value, and calldata.\n */\n executions: ExecutionStruct[];\n};\n\n/**\n * Builds a caveat struct for ExactCalldataBatchEnforcer.\n * This enforcer ensures that the provided batch execution calldata matches exactly\n * the expected calldata for each execution.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing executions.\n * @returns The Caveat.\n * @throws Error if any of the executions have invalid parameters.\n */\nexport const exactCalldataBatchBuilder = (\n environment: SmartAccountsEnvironment,\n config: ExactCalldataBatchBuilderConfig,\n): Caveat => {\n const { executions } = config;\n\n if (executions.length === 0) {\n throw new Error('Invalid executions: array cannot be empty');\n }\n\n // Validate each execution\n for (const execution of executions) {\n if (!isAddress(execution.target, { strict: false })) {\n throw new Error('Invalid target: must be a valid address');\n }\n\n if (execution.value < 0n) {\n throw new Error('Invalid value: must be a non-negative number');\n }\n\n if (!execution.callData.startsWith('0x')) {\n throw new Error(\n 'Invalid calldata: must be a hex string starting with 0x',\n );\n }\n }\n\n // Encode the executions using the approach implemented in ExecutionLib.sol encodeBatch()\n const terms = encodeAbiParameters(\n [\n {\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'target' },\n { type: 'uint256', name: 'value' },\n { type: 'bytes', name: 'callData' },\n ],\n },\n ],\n [executions],\n );\n\n const {\n caveatEnforcers: { ExactCalldataBatchEnforcer },\n } = environment;\n\n if (!ExactCalldataBatchEnforcer) {\n throw new Error('ExactCalldataBatchEnforcer not found in environment');\n }\n\n return {\n enforcer: ExactCalldataBatchEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createExactCalldataTerms } from '@metamask/delegation-core';\nimport type { Hex } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const exactCalldata = 'exactCalldata';\n\nexport type ExactCalldataBuilderConfig = {\n /**\n * The exact calldata that must be matched as a hex string.\n */\n calldata: Hex;\n};\n\n/**\n * Builds a caveat struct for ExactCalldataEnforcer.\n * This enforcer ensures that the provided execution calldata matches exactly\n * the expected calldata.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the ExactCalldataBuilder.\n * @returns The Caveat.\n * @throws Error if any of the parameters are invalid.\n */\nexport const exactCalldataBuilder = (\n environment: SmartAccountsEnvironment,\n config: ExactCalldataBuilderConfig,\n): Caveat => {\n const { calldata } = config;\n\n const terms = createExactCalldataTerms({ calldata });\n\n const {\n caveatEnforcers: { ExactCalldataEnforcer },\n } = environment;\n\n if (!ExactCalldataEnforcer) {\n throw new Error('ExactCalldataEnforcer not found in environment');\n }\n\n return {\n enforcer: ExactCalldataEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { encodeAbiParameters, isAddress } from 'viem';\n\nimport type { ExecutionStruct } from '../executions';\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const exactExecutionBatch = 'exactExecutionBatch';\n\nexport type ExactExecutionBatchBuilderConfig = {\n /**\n * An array of executions that must be matched exactly in the batch.\n * Each execution specifies a target address, value, and calldata.\n */\n executions: ExecutionStruct[];\n};\n\n/**\n * Builds a caveat struct for ExactExecutionBatchEnforcer.\n * This enforcer ensures that each execution in the batch matches exactly\n * with the expected execution (target, value, and calldata).\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing executions.\n * @returns The Caveat.\n * @throws Error if any of the execution parameters are invalid.\n */\nexport const exactExecutionBatchBuilder = (\n environment: SmartAccountsEnvironment,\n config: ExactExecutionBatchBuilderConfig,\n): Caveat => {\n const { executions } = config;\n\n if (executions.length === 0) {\n throw new Error('Invalid executions: array cannot be empty');\n }\n\n // Validate each execution\n for (const execution of executions) {\n if (!isAddress(execution.target, { strict: false })) {\n throw new Error('Invalid target: must be a valid address');\n }\n\n if (execution.value < 0n) {\n throw new Error('Invalid value: must be a non-negative number');\n }\n\n if (!execution.callData.startsWith('0x')) {\n throw new Error(\n 'Invalid calldata: must be a hex string starting with 0x',\n );\n }\n }\n\n // Encode the executions using the approach implemented in ExecutionLib.sol encodeBatch()\n const terms = encodeAbiParameters(\n [\n {\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'target' },\n { type: 'uint256', name: 'value' },\n { type: 'bytes', name: 'callData' },\n ],\n },\n ],\n [executions],\n );\n\n const {\n caveatEnforcers: { ExactExecutionBatchEnforcer },\n } = environment;\n\n if (!ExactExecutionBatchEnforcer) {\n throw new Error('ExactExecutionBatchEnforcer not found in environment');\n }\n\n return {\n enforcer: ExactExecutionBatchEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { isAddress, concat, toHex } from 'viem';\n\nimport type { ExecutionStruct } from '../executions';\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const exactExecution = 'exactExecution';\n\nexport type ExactExecutionBuilderConfig = {\n /**\n * The execution that must be matched exactly.\n * Specifies the target address, value, and calldata.\n */\n execution: ExecutionStruct;\n};\n\n/**\n * Builds a caveat struct for ExactExecutionEnforcer.\n * This enforcer ensures that the provided execution matches exactly\n * with the expected execution (target, value, and calldata).\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the execution.\n * @returns The Caveat.\n * @throws Error if any of the execution parameters are invalid.\n */\nexport const exactExecutionBuilder = (\n environment: SmartAccountsEnvironment,\n config: ExactExecutionBuilderConfig,\n): Caveat => {\n const { execution } = config;\n\n if (!isAddress(execution.target, { strict: false })) {\n throw new Error('Invalid target: must be a valid address');\n }\n\n if (execution.value < 0n) {\n throw new Error('Invalid value: must be a non-negative number');\n }\n\n if (!execution.callData.startsWith('0x')) {\n throw new Error('Invalid calldata: must be a hex string starting with 0x');\n }\n\n const terms = concat([\n execution.target,\n toHex(execution.value, { size: 32 }),\n execution.callData,\n ]);\n\n const {\n caveatEnforcers: { ExactExecutionEnforcer },\n } = environment;\n\n if (!ExactExecutionEnforcer) {\n throw new Error('ExactExecutionEnforcer not found in environment');\n }\n\n return {\n enforcer: ExactExecutionEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { maxUint256, toHex } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport type IdBuilderConfig = {\n /**\n * An id for the delegation. Only one delegation may be redeemed with any given id.\n */\n id: bigint | number;\n};\n\nexport const id = 'id';\n\n/**\n * Builds a caveat struct for the IdEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the id to use in the caveat.\n * @returns The Caveat.\n * @throws Error if the provided id is not a number, not an integer, or is not 32 bytes or fewer in length.\n */\nexport const idBuilder = (\n environment: SmartAccountsEnvironment,\n config: IdBuilderConfig,\n): Caveat => {\n const { id: idValue } = config;\n\n let idBigInt: bigint;\n\n if (typeof idValue === 'number') {\n if (!Number.isInteger(idValue)) {\n throw new Error('Invalid id: must be an integer');\n }\n\n idBigInt = BigInt(idValue);\n } else if (typeof idValue === 'bigint') {\n idBigInt = idValue;\n } else {\n throw new Error('Invalid id: must be a bigint or number');\n }\n\n if (idBigInt < 0n) {\n throw new Error('Invalid id: must be a non-negative number');\n }\n\n if (idBigInt > maxUint256) {\n throw new Error('Invalid id: must be less than 2^256');\n }\n\n const terms = toHex(idBigInt, { size: 32 });\n\n const {\n caveatEnforcers: { IdEnforcer },\n } = environment;\n\n if (!IdEnforcer) {\n throw new Error('IdEnforcer not found in environment');\n }\n\n return {\n enforcer: IdEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Hex, toHex, pad } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const limitedCalls = 'limitedCalls';\n\nexport type LimitedCallsBuilderConfig = {\n /**\n * The maximum number of times this delegation may be redeemed.\n */\n limit: number;\n};\n\n/**\n * Builds a caveat struct for the LimitedCallsEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the limit.\n * @returns The Caveat.\n * @throws Error if the limit is not a positive integer.\n */\nexport const limitedCallsBuilder = (\n environment: SmartAccountsEnvironment,\n config: LimitedCallsBuilderConfig,\n): Caveat => {\n const { limit } = config;\n\n if (!Number.isInteger(limit)) {\n throw new Error('Invalid limit: must be an integer');\n }\n\n if (limit <= 0) {\n throw new Error('Invalid limit: must be a positive integer');\n }\n\n const terms: Hex = pad(toHex(limit), { size: 32 });\n\n const {\n caveatEnforcers: { LimitedCallsEnforcer },\n } = environment;\n\n if (!LimitedCallsEnforcer) {\n throw new Error('LimitedCallsEnforcer not found in environment');\n }\n\n return {\n enforcer: LimitedCallsEnforcer,\n terms,\n args: '0x',\n };\n};\n","import type { Hex } from 'viem';\nimport { concat, isAddress, pad, toHex } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport type TokenPeriodConfig = {\n /**\n * The token contract address as a hex string.\n */\n token: Hex;\n /**\n * The maximum amount of tokens that can be transferred per period.\n */\n periodAmount: bigint;\n /**\n * The duration of each period in seconds.\n */\n periodDuration: number;\n /**\n * The timestamp when the first period begins in seconds.\n */\n startDate: number;\n};\n\nexport type MultiTokenPeriodBuilderConfig = {\n tokenConfigs: TokenPeriodConfig[];\n};\n\nexport const multiTokenPeriod = 'multiTokenPeriod';\n\n/**\n * Creates a caveat for the MultiTokenPeriodEnforcer.\n * This enforcer allows setting periodic transfer limits for multiple tokens.\n * Each token can have its own period amount, duration, and start date.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the MultiTokenPeriodBuilder.\n * @param config.tokenConfigs - The token configurations for the MultiTokenPeriodBuilder.\n * @returns The caveat object for the MultiTokenPeriodEnforcer.\n */\nexport const multiTokenPeriodBuilder = (\n environment: SmartAccountsEnvironment,\n config: MultiTokenPeriodBuilderConfig,\n): Caveat => {\n if (!config?.tokenConfigs || config.tokenConfigs.length === 0) {\n throw new Error(\n 'MultiTokenPeriodBuilder: tokenConfigs array cannot be empty',\n );\n }\n\n config.tokenConfigs.forEach((tokenConfig) => {\n if (!isAddress(tokenConfig.token)) {\n throw new Error(`Invalid token address: ${String(tokenConfig.token)}`);\n }\n\n if (tokenConfig.periodAmount <= 0) {\n throw new Error('Invalid period amount: must be greater than 0');\n }\n\n if (tokenConfig.periodDuration <= 0) {\n throw new Error('Invalid period duration: must be greater than 0');\n }\n });\n\n // Each config requires 116 bytes:\n // - 20 bytes for token address\n // - 32 bytes for periodAmount\n // - 32 bytes for periodDuration\n // - 32 bytes for startDate\n const termsArray = config.tokenConfigs.reduce<Hex[]>(\n (acc, { token, periodAmount, periodDuration, startDate }) => [\n ...acc,\n pad(token, { size: 20 }),\n toHex(periodAmount, { size: 32 }),\n toHex(periodDuration, { size: 32 }),\n toHex(startDate, { size: 32 }),\n ],\n [],\n );\n\n const terms = concat(termsArray);\n\n const {\n caveatEnforcers: { MultiTokenPeriodEnforcer },\n } = environment;\n\n if (!MultiTokenPeriodEnforcer) {\n throw new Error('MultiTokenPeriodEnforcer not found in environment');\n }\n\n return {\n enforcer: MultiTokenPeriodEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, isAddress, encodePacked } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\nimport { BalanceChangeType } from './types';\n\nexport const nativeBalanceChange = 'nativeBalanceChange';\n\nexport type NativeBalanceChangeBuilderConfig = {\n /**\n * The recipient's address as a hex string.\n */\n recipient: Address;\n /**\n * The amount by which the balance must have changed as a bigint.\n */\n balance: bigint;\n /**\n * The balance change type for the native currency.\n * Specifies whether the balance should have increased or decreased.\n * Valid parameters are BalanceChangeType.Increase and BalanceChangeType.Decrease.\n */\n changeType: BalanceChangeType;\n};\n\n/**\n * Builds a caveat struct for the NativeBalanceChangeEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the NativeBalanceChangeEnforcer.\n * @returns The Caveat.\n * @throws Error if the recipient address is invalid or the amount is not a positive number.\n */\nexport const nativeBalanceChangeBuilder = (\n environment: SmartAccountsEnvironment,\n config: NativeBalanceChangeBuilderConfig,\n): Caveat => {\n const { recipient, balance, changeType } = config;\n\n if (!isAddress(recipient)) {\n throw new Error('Invalid recipient: must be a valid Address');\n }\n\n if (balance <= 0n) {\n throw new Error('Invalid balance: must be a positive number');\n }\n\n if (\n changeType !== BalanceChangeType.Increase &&\n changeType !== BalanceChangeType.Decrease\n ) {\n throw new Error('Invalid changeType: must be either Increase or Decrease');\n }\n\n const terms = encodePacked(\n ['uint8', 'address', 'uint256'],\n [changeType, recipient, balance],\n );\n\n const {\n caveatEnforcers: { NativeBalanceChangeEnforcer },\n } = environment;\n\n if (!NativeBalanceChangeEnforcer) {\n throw new Error('NativeBalanceChangeEnforcer not found in environment');\n }\n\n return {\n enforcer: NativeBalanceChangeEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, encodePacked, isAddress } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const nativeTokenPayment = 'nativeTokenPayment';\n\nexport type NativeTokenPaymentBuilderConfig = {\n /**\n * The recipient's address as a hex string.\n */\n recipient: Address;\n /**\n * The amount that must be paid as a bigint.\n */\n amount: bigint;\n};\n\n/**\n * Builds a caveat struct for the NativeTokenPaymentEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the NativeTokenPaymentEnforcer.\n * @returns The Caveat.\n * @throws Error if the amount is invalid or the recipient address is invalid.\n */\nexport const nativeTokenPaymentBuilder = (\n environment: SmartAccountsEnvironment,\n config: NativeTokenPaymentBuilderConfig,\n): Caveat => {\n const { recipient, amount } = config;\n\n if (amount <= 0n) {\n throw new Error('Invalid amount: must be positive');\n }\n\n if (!isAddress(recipient)) {\n throw new Error('Invalid recipient: must be a valid address');\n }\n\n const terms = encodePacked(['address', 'uint256'], [recipient, amount]);\n\n const {\n caveatEnforcers: { NativeTokenPaymentEnforcer },\n } = environment;\n\n if (!NativeTokenPaymentEnforcer) {\n throw new Error('NativeTokenPaymentEnforcer not found in environment');\n }\n\n return {\n enforcer: NativeTokenPaymentEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createNativeTokenPeriodTransferTerms } from '@metamask/delegation-core';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const nativeTokenPeriodTransfer = 'nativeTokenPeriodTransfer';\n\nexport type NativeTokenPeriodTransferBuilderConfig = {\n /**\n * The maximum amount of tokens that can be transferred per period.\n */\n periodAmount: bigint;\n /**\n * The duration of each period in seconds.\n */\n periodDuration: number;\n /**\n * The timestamp when the first period begins in seconds.\n */\n startDate: number;\n};\n\n/**\n * Builds a caveat struct for NativeTokenPeriodTransferEnforcer.\n * This enforcer validates that native token (ETH) transfers do not exceed a specified amount\n * within a given time period. The transferable amount resets at the beginning of each period,\n * and any unused ETH is forfeited once the period ends.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing periodAmount, periodDuration, and startDate.\n * @returns The Caveat.\n * @throws Error if any of the parameters are invalid.\n */\nexport const nativeTokenPeriodTransferBuilder = (\n environment: SmartAccountsEnvironment,\n config: NativeTokenPeriodTransferBuilderConfig,\n): Caveat => {\n const { periodAmount, periodDuration, startDate } = config;\n\n const terms = createNativeTokenPeriodTransferTerms({\n periodAmount,\n periodDuration,\n startDate,\n });\n\n const {\n caveatEnforcers: { NativeTokenPeriodTransferEnforcer },\n } = environment;\n\n if (!NativeTokenPeriodTransferEnforcer) {\n throw new Error(\n 'NativeTokenPeriodTransferEnforcer not found in environment',\n );\n }\n\n return {\n enforcer: NativeTokenPeriodTransferEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createNativeTokenStreamingTerms } from '@metamask/delegation-core';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const nativeTokenStreaming = 'nativeTokenStreaming';\n\nexport type NativeTokenStreamingBuilderConfig = {\n /**\n * The initial amount available at start time as a bigint.\n */\n initialAmount: bigint;\n /**\n * Maximum total amount that can be unlocked as a bigint.\n */\n maxAmount: bigint;\n /**\n * Rate at which tokens accrue per second as a bigint.\n */\n amountPerSecond: bigint;\n /**\n * Start timestamp as a number in seconds.\n */\n startTime: number;\n};\n\n/**\n * Builds a caveat struct for the NativeTokenStreamingEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the NativeTokenStreamingEnforcer.\n * @returns The Caveat.\n * @throws Error if any of the parameters are invalid.\n */\nexport const nativeTokenStreamingBuilder = (\n environment: SmartAccountsEnvironment,\n config: NativeTokenStreamingBuilderConfig,\n): Caveat => {\n const { initialAmount, maxAmount, amountPerSecond, startTime } = config;\n\n const terms = createNativeTokenStreamingTerms({\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n });\n\n const {\n caveatEnforcers: { NativeTokenStreamingEnforcer },\n } = environment;\n\n if (!NativeTokenStreamingEnforcer) {\n throw new Error('NativeTokenStreamingEnforcer not found in environment');\n }\n\n return {\n enforcer: NativeTokenStreamingEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { encodePacked } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const nativeTokenTransferAmount = 'nativeTokenTransferAmount';\n\nexport type NativeTokenTransferAmountBuilderConfig = {\n /**\n * The maximum amount of native tokens that can be transferred.\n */\n maxAmount: bigint;\n};\n\n/**\n * Builds a caveat struct for the NativeTokenTransferAmountEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the maxAmount.\n * @returns The Caveat.\n * @throws Error if the maxAmount is negative.\n */\nexport const nativeTokenTransferAmountBuilder = (\n environment: SmartAccountsEnvironment,\n config: NativeTokenTransferAmountBuilderConfig,\n): Caveat => {\n const { maxAmount } = config;\n\n if (maxAmount < 0n) {\n throw new Error('Invalid maxAmount: must be zero or positive');\n }\n\n const terms = encodePacked(['uint256'], [maxAmount]);\n\n const {\n caveatEnforcers: { NativeTokenTransferAmountEnforcer },\n } = environment;\n\n if (!NativeTokenTransferAmountEnforcer) {\n throw new Error(\n 'NativeTokenTransferAmountEnforcer not found in environment',\n );\n }\n\n return {\n enforcer: NativeTokenTransferAmountEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createNonceTerms } from '@metamask/delegation-core';\nimport { type Hex } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const nonce = 'nonce';\n\nexport type NonceBuilderConfig = {\n /**\n * A nonce as a hex string to allow bulk revocation of delegations.\n */\n nonce: Hex;\n};\n\n/**\n * Builds a caveat struct for the NonceEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the nonce value.\n * @returns The Caveat.\n * @throws Error if the nonce is invalid.\n */\nexport const nonceBuilder = (\n environment: SmartAccountsEnvironment,\n config: NonceBuilderConfig,\n): Caveat => {\n const { nonce: nonceValue } = config;\n\n const terms = createNonceTerms({ nonce: nonceValue });\n\n const {\n caveatEnforcers: { NonceEnforcer },\n } = environment;\n\n if (!NonceEnforcer) {\n throw new Error('NonceEnforcer not found in environment');\n }\n\n return {\n enforcer: NonceEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, isAddress } from 'viem';\n\nimport type { SmartAccountsEnvironment, Caveat } from '../types';\n\nexport const ownershipTransfer = 'ownershipTransfer';\n\nexport type OwnershipTransferBuilderConfig = {\n /**\n * The target contract address as a hex string for which ownership transfers are allowed.\n */\n contractAddress: Address;\n};\n\n/**\n * Builds a caveat struct for the OwnershipTransferEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the ownership transfer builder.\n * @returns The Caveat representing the caveat for ownership transfer.\n * @throws Error if the target contract address is invalid.\n */\nexport const ownershipTransferBuilder = (\n environment: SmartAccountsEnvironment,\n config: OwnershipTransferBuilderConfig,\n): Caveat => {\n const { contractAddress } = config;\n\n if (!isAddress(contractAddress, { strict: false })) {\n throw new Error('Invalid contractAddress: must be a valid address');\n }\n\n const terms = contractAddress;\n\n const {\n caveatEnforcers: { OwnershipTransferEnforcer },\n } = environment;\n\n if (!OwnershipTransferEnforcer) {\n throw new Error('OwnershipTransferEnforcer not found in environment');\n }\n\n return {\n enforcer: OwnershipTransferEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { type Address, concat, isAddress } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const redeemer = 'redeemer';\n\nexport type RedeemerBuilderConfig = {\n /**\n * An array of addresses that are allowed to redeem the delegation.\n * Each address must be a valid hex string.\n */\n redeemers: Address[];\n};\n\n/**\n * Builds a caveat struct for the RedeemerEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing redeemers.\n * @returns The Caveat.\n * @throws Error if the redeemer address is invalid or the array is empty.\n */\nexport const redeemerBuilder = (\n environment: SmartAccountsEnvironment,\n config: RedeemerBuilderConfig,\n): Caveat => {\n const { redeemers } = config;\n\n if (redeemers.length === 0) {\n throw new Error(\n 'Invalid redeemers: must specify at least one redeemer address',\n );\n }\n\n for (const redeemerAddress of redeemers) {\n if (!isAddress(redeemerAddress)) {\n throw new Error('Invalid redeemers: must be a valid address');\n }\n }\n\n const terms = concat(redeemers);\n\n const {\n caveatEnforcers: { RedeemerEnforcer },\n } = environment;\n\n if (!RedeemerEnforcer) {\n throw new Error('RedeemerEnforcer not found in environment');\n }\n\n return {\n enforcer: RedeemerEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { concat, isAddress, toHex, type Address, type Hex } from 'viem';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const specificActionERC20TransferBatch =\n 'specificActionERC20TransferBatch';\n\nexport type SpecificActionErc20TransferBatchBuilderConfig = {\n /**\n * The address of the ERC-20 token contract.\n */\n tokenAddress: Address;\n /**\n * The address that will receive the tokens.\n */\n recipient: Address;\n /**\n * The amount of tokens to transfer.\n */\n amount: bigint;\n /**\n * The target address for the first transaction.\n */\n target: Address;\n /**\n * The calldata for the first transaction.\n */\n calldata: Hex;\n};\n\n/**\n * Builds a caveat struct for SpecificActionERC20TransferBatchEnforcer.\n * Enforces a batch of exactly 2 transactions: a specific action followed by an ERC20 transfer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration for the specific action ERC20 transfer batch builder.\n * @returns The Caveat.\n * @throws Error if any of the addresses are invalid or if the amount is not a positive number.\n */\nexport const specificActionERC20TransferBatchBuilder = (\n environment: SmartAccountsEnvironment,\n config: SpecificActionErc20TransferBatchBuilderConfig,\n): Caveat => {\n const { tokenAddress, recipient, amount, target, calldata } = config;\n\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error('Invalid tokenAddress: must be a valid address');\n }\n\n if (!isAddress(recipient, { strict: false })) {\n throw new Error('Invalid recipient: must be a valid address');\n }\n\n if (!isAddress(target, { strict: false })) {\n throw new Error('Invalid target: must be a valid address');\n }\n\n if (amount <= 0n) {\n throw new Error('Invalid amount: must be a positive number');\n }\n\n const terms = concat([\n tokenAddress,\n recipient,\n toHex(amount, { size: 32 }),\n target,\n calldata,\n ]);\n\n const {\n caveatEnforcers: { SpecificActionERC20TransferBatchEnforcer },\n } = environment;\n\n if (!SpecificActionERC20TransferBatchEnforcer) {\n throw new Error(\n 'SpecificActionERC20TransferBatchEnforcer not found in environment',\n );\n }\n\n return {\n enforcer: SpecificActionERC20TransferBatchEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createTimestampTerms } from '@metamask/delegation-core';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const timestamp = 'timestamp';\n\nexport type TimestampBuilderConfig = {\n /**\n * The timestamp after which the delegation is valid in seconds.\n * Set to 0 to disable this threshold.\n */\n afterThreshold: number;\n /**\n * The timestamp before which the delegation is valid.\n * Set to 0 to disable this threshold.\n */\n beforeThreshold: number;\n};\n\n/**\n * Builds a caveat struct for the TimestampEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object for the TimestampEnforcer.\n * @returns The Caveat.\n * @throws Error if any of the parameters are invalid.\n */\nexport const timestampBuilder = (\n environment: SmartAccountsEnvironment,\n config: TimestampBuilderConfig,\n): Caveat => {\n const { afterThreshold, beforeThreshold } = config;\n\n const terms = createTimestampTerms({\n timestampAfterThreshold: afterThreshold,\n timestampBeforeThreshold: beforeThreshold,\n });\n\n const {\n caveatEnforcers: { TimestampEnforcer },\n } = environment;\n\n if (!TimestampEnforcer) {\n throw new Error('TimestampEnforcer not found in environment');\n }\n\n return {\n enforcer: TimestampEnforcer,\n terms,\n args: '0x',\n };\n};\n","import { createValueLteTerms } from '@metamask/delegation-core';\n\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport const valueLte = 'valueLte';\n\nexport type ValueLteBuilderConfig = {\n /**\n * The maximum value that may be specified when redeeming this delegation.\n */\n maxValue: bigint;\n};\n\n/**\n * Builds a caveat struct for ValueLteEnforcer.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - The configuration object containing the maximum value allowed for the transaction.\n * @returns The Caveat.\n * @throws Error if any of the parameters are invalid.\n */\nexport const valueLteBuilder = (\n environment: SmartAccountsEnvironment,\n config: ValueLteBuilderConfig,\n): Caveat => {\n const { maxValue } = config;\n\n const terms = createValueLteTerms({ maxValue });\n\n const {\n caveatEnforcers: { ValueLteEnforcer },\n } = environment;\n\n if (!ValueLteEnforcer) {\n throw new Error('ValueLteEnforcer not found in environment');\n }\n\n return {\n enforcer: ValueLteEnforcer,\n terms,\n args: '0x',\n };\n};\n","import type { SmartAccountsEnvironment } from '../types';\nimport {\n allowedCalldata,\n allowedCalldataBuilder,\n} from './allowedCalldataBuilder';\nimport { allowedMethods, allowedMethodsBuilder } from './allowedMethodsBuilder';\nimport { allowedTargets, allowedTargetsBuilder } from './allowedTargetsBuilder';\nimport {\n argsEqualityCheck,\n argsEqualityCheckBuilder,\n} from './argsEqualityCheckBuilder';\nimport { blockNumber, blockNumberBuilder } from './blockNumberBuilder';\nimport type { CaveatBuilderConfig } from './caveatBuilder';\nimport { CaveatBuilder } from './caveatBuilder';\nimport { deployed, deployedBuilder } from './deployedBuilder';\nimport {\n erc1155BalanceChange,\n erc1155BalanceChangeBuilder,\n} from './erc1155BalanceChangeBuilder';\nimport {\n erc20BalanceChange,\n erc20BalanceChangeBuilder,\n} from './erc20BalanceChangeBuilder';\nimport {\n erc20PeriodTransfer,\n erc20PeriodTransferBuilder,\n} from './erc20PeriodTransferBuilder';\nimport { erc20Streaming, erc20StreamingBuilder } from './erc20StreamingBuilder';\nimport {\n erc20TransferAmount,\n erc20TransferAmountBuilder,\n} from './erc20TransferAmountBuilder';\nimport {\n erc721BalanceChange,\n erc721BalanceChangeBuilder,\n} from './erc721BalanceChangeBuilder';\nimport { erc721Transfer, erc721TransferBuilder } from './erc721TransferBuilder';\nimport {\n exactCalldataBatch,\n exactCalldataBatchBuilder,\n} from './exactCalldataBatchBuilder';\nimport { exactCalldata, exactCalldataBuilder } from './exactCalldataBuilder';\nimport {\n exactExecutionBatch,\n exactExecutionBatchBuilder,\n} from './exactExecutionBatchBuilder';\nimport { exactExecution, exactExecutionBuilder } from './exactExecutionBuilder';\nimport { id, idBuilder } from './idBuilder';\nimport { limitedCalls, limitedCallsBuilder } from './limitedCallsBuilder';\nimport {\n multiTokenPeriod,\n multiTokenPeriodBuilder,\n} from './multiTokenPeriodBuilder';\nimport {\n nativeBalanceChange,\n nativeBalanceChangeBuilder,\n} from './nativeBalanceChangeBuilder';\nimport {\n nativeTokenPayment,\n nativeTokenPaymentBuilder,\n} from './nativeTokenPaymentBuilder';\nimport {\n nativeTokenPeriodTransfer,\n nativeTokenPeriodTransferBuilder,\n} from './nativeTokenPeriodTransferBuilder';\nimport {\n nativeTokenStreaming,\n nativeTokenStreamingBuilder,\n} from './nativeTokenStreamingBuilder';\nimport {\n nativeTokenTransferAmount,\n nativeTokenTransferAmountBuilder,\n} from './nativeTokenTransferAmountBuilder';\nimport { nonce, nonceBuilder } from './nonceBuilder';\nimport {\n ownershipTransfer,\n ownershipTransferBuilder,\n} from './ownershipTransferBuilder';\nimport { redeemer, redeemerBuilder } from './redeemerBuilder';\nimport {\n specificActionERC20TransferBatch,\n specificActionERC20TransferBatchBuilder,\n} from './specificActionERC20TransferBatchBuilder';\nimport { timestamp, timestampBuilder } from './timestampBuilder';\nimport { valueLte, valueLteBuilder } from './valueLteBuilder';\n\n// While we could derive CoreCaveatMap from the createCaveatBuilder function,\n// doing so would significantly complicate type resolution. By explicitly\n// declaring the return type of createCaveatBuilder, we ensure the caveat\n// map remains synchronized with the actual implementation.\ntype CoreCaveatMap = {\n allowedMethods: typeof allowedMethodsBuilder;\n allowedTargets: typeof allowedTargetsBuilder;\n deployed: typeof deployedBuilder;\n allowedCalldata: typeof allowedCalldataBuilder;\n erc20BalanceChange: typeof erc20BalanceChangeBuilder;\n erc721BalanceChange: typeof erc721BalanceChangeBuilder;\n erc1155BalanceChange: typeof erc1155BalanceChangeBuilder;\n valueLte: typeof valueLteBuilder;\n limitedCalls: typeof limitedCallsBuilder;\n id: typeof idBuilder;\n nonce: typeof nonceBuilder;\n timestamp: typeof timestampBuilder;\n blockNumber: typeof blockNumberBuilder;\n erc20TransferAmount: typeof erc20TransferAmountBuilder;\n erc20Streaming: typeof erc20StreamingBuilder;\n nativeTokenStreaming: typeof nativeTokenStreamingBuilder;\n erc721Transfer: typeof erc721TransferBuilder;\n nativeTokenTransferAmount: typeof nativeTokenTransferAmountBuilder;\n nativeBalanceChange: typeof nativeBalanceChangeBuilder;\n redeemer: typeof redeemerBuilder;\n nativeTokenPayment: typeof nativeTokenPaymentBuilder;\n argsEqualityCheck: typeof argsEqualityCheckBuilder;\n specificActionERC20TransferBatch: typeof specificActionERC20TransferBatchBuilder;\n erc20PeriodTransfer: typeof erc20PeriodTransferBuilder;\n nativeTokenPeriodTransfer: typeof nativeTokenPeriodTransferBuilder;\n exactCalldataBatch: typeof exactCalldataBatchBuilder;\n exactCalldata: typeof exactCalldataBuilder;\n exactExecution: typeof exactExecutionBuilder;\n exactExecutionBatch: typeof exactExecutionBatchBuilder;\n multiTokenPeriod: typeof multiTokenPeriodBuilder;\n ownershipTransfer: typeof ownershipTransferBuilder;\n};\n\n/**\n * A caveat builder type that includes all core caveat types pre-configured.\n * This type represents a fully configured caveat builder with all the standard\n * caveat builders available for use.\n */\nexport type CoreCaveatBuilder = CaveatBuilder<CoreCaveatMap>;\n\ntype ExtractCaveatMapType<TCaveatBuilder extends CaveatBuilder<any>> =\n TCaveatBuilder extends CaveatBuilder<infer TCaveatMap> ? TCaveatMap : never;\ntype ExtractedCoreMap = ExtractCaveatMapType<CoreCaveatBuilder>;\n\nexport type CaveatConfigurations = {\n [TType in keyof ExtractedCoreMap]: {\n type: TType;\n } & Parameters<ExtractedCoreMap[TType]>[1];\n}[keyof ExtractedCoreMap];\n\nexport type CaveatConfiguration<\n TCaveatBuilder extends CaveatBuilder<any>,\n CaveatMap = ExtractCaveatMapType<TCaveatBuilder>,\n> =\n CaveatMap extends Record<string, (...args: any[]) => any>\n ? {\n [TType in keyof CaveatMap]: {\n type: TType;\n } & Parameters<CaveatMap[TType]>[1];\n }[keyof CaveatMap]\n : never;\n\nexport type CoreCaveatConfiguration = CaveatConfiguration<CoreCaveatBuilder>;\n\n/**\n * Creates a caveat builder with all core caveat types pre-configured.\n *\n * @param environment - The DeleGator environment configuration.\n * @param config - Optional configuration for the caveat builder.\n * @returns A fully configured CoreCaveatBuilder instance with all core caveat types.\n */\nexport const createCaveatBuilder = (\n environment: SmartAccountsEnvironment,\n config?: CaveatBuilderConfig,\n): CoreCaveatBuilder => {\n const caveatBuilder = new CaveatBuilder(environment, config)\n .extend(allowedMethods, allowedMethodsBuilder)\n .extend(allowedTargets, allowedTargetsBuilder)\n .extend(deployed, deployedBuilder)\n .extend(allowedCalldata, allowedCalldataBuilder)\n .extend(erc20BalanceChange, erc20BalanceChangeBuilder)\n .extend(erc721BalanceChange, erc721BalanceChangeBuilder)\n .extend(erc1155BalanceChange, erc1155BalanceChangeBuilder)\n .extend(valueLte, valueLteBuilder)\n .extend(limitedCalls, limitedCallsBuilder)\n .extend(id, idBuilder)\n .extend(nonce, nonceBuilder)\n .extend(timestamp, timestampBuilder)\n .extend(blockNumber, blockNumberBuilder)\n .extend(erc20TransferAmount, erc20TransferAmountBuilder)\n .extend(erc20Streaming, erc20StreamingBuilder)\n .extend(nativeTokenStreaming, nativeTokenStreamingBuilder)\n .extend(erc721Transfer, erc721TransferBuilder)\n .extend(nativeTokenTransferAmount, nativeTokenTransferAmountBuilder)\n .extend(nativeBalanceChange, nativeBalanceChangeBuilder)\n .extend(redeemer, redeemerBuilder)\n .extend(nativeTokenPayment, nativeTokenPaymentBuilder)\n .extend(argsEqualityCheck, argsEqualityCheckBuilder)\n .extend(\n specificActionERC20TransferBatch,\n specificActionERC20TransferBatchBuilder,\n )\n .extend(erc20PeriodTransfer, erc20PeriodTransferBuilder)\n .extend(nativeTokenPeriodTransfer, nativeTokenPeriodTransferBuilder)\n .extend(exactCalldataBatch, exactCalldataBatchBuilder)\n .extend(exactCalldata, exactCalldataBuilder)\n .extend(exactExecution, exactExecutionBuilder)\n .extend(exactExecutionBatch, exactExecutionBatchBuilder)\n .extend(multiTokenPeriod, multiTokenPeriodBuilder)\n .extend(ownershipTransfer, ownershipTransferBuilder);\n\n return caveatBuilder;\n};\n","import type { SmartAccountsEnvironment } from '../../types';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type {\n erc20PeriodTransfer,\n Erc20PeriodTransferBuilderConfig,\n} from '../erc20PeriodTransferBuilder';\n\nexport type Erc20PeriodicScopeConfig = {\n type: typeof erc20PeriodTransfer;\n} & Erc20PeriodTransferBuilderConfig;\n\n/**\n * Creates a caveat builder configured for ERC20 token periodic transfers with recurring limits.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing ERC20 periodic transfer parameters.\n * @returns A configured caveat builder with ERC20 period transfer and value limit caveats.\n * @throws Error if any of the ERC20 periodic transfer parameters are invalid.\n * @throws Error if the environment is not properly configured.\n */\nexport function createErc20PeriodicCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: Erc20PeriodicScopeConfig,\n): CoreCaveatBuilder {\n return createCaveatBuilder(environment)\n .addCaveat('valueLte', {\n maxValue: 0n,\n })\n .addCaveat('erc20PeriodTransfer', {\n tokenAddress: config.tokenAddress,\n periodAmount: config.periodAmount,\n periodDuration: config.periodDuration,\n startDate: config.startDate,\n });\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type {\n erc20Streaming,\n Erc20StreamingBuilderConfig,\n} from '../erc20StreamingBuilder';\n\nexport type Erc20StreamingScopeConfig = {\n type: typeof erc20Streaming;\n} & Erc20StreamingBuilderConfig;\n\n/**\n * Creates a caveat builder configured for ERC20 token streaming with time-based limits.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing ERC20 streaming parameters.\n * @returns A configured caveat builder with ERC20 streaming and value limit caveats.\n * @throws Error if any of the ERC20 streaming parameters are invalid.\n * @throws Error if the environment is not properly configured.\n */\nexport function createErc20StreamingCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: Erc20StreamingScopeConfig,\n): CoreCaveatBuilder {\n return createCaveatBuilder(environment)\n .addCaveat('valueLte', {\n maxValue: 0n,\n })\n .addCaveat('erc20Streaming', {\n tokenAddress: config.tokenAddress,\n initialAmount: config.initialAmount,\n maxAmount: config.maxAmount,\n amountPerSecond: config.amountPerSecond,\n startTime: config.startTime,\n });\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type {\n erc20TransferAmount,\n Erc20TransferAmountBuilderConfig,\n} from '../erc20TransferAmountBuilder';\n\nexport type Erc20TransferScopeConfig = {\n type: typeof erc20TransferAmount;\n} & Erc20TransferAmountBuilderConfig;\n\n/**\n * Creates a caveat builder configured for ERC20 token transfers with amount limits.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing ERC20 transfer parameters.\n * @returns A configured caveat builder with ERC20 transfer amount and value limit caveats.\n * @throws Error if any of the ERC20 transfer parameters are invalid.\n * @throws Error if the environment is not properly configured.\n */\nexport function createErc20TransferCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: Erc20TransferScopeConfig,\n): CoreCaveatBuilder {\n return createCaveatBuilder(environment)\n .addCaveat('valueLte', {\n maxValue: 0n,\n })\n .addCaveat('erc20TransferAmount', {\n tokenAddress: config.tokenAddress,\n maxAmount: config.maxAmount,\n });\n}\n","import { type Hex, isHex, toHex } from 'viem';\n\n/**\n * Checks if two hexadecimal strings are equal, ignoring case sensitivity.\n * @param a - The first hexadecimal string.\n * @param b - The second hexadecimal string.\n * @returns True if the hexadecimal strings are equal, false otherwise.\n */\nexport function isEqualHex(a: Hex, b: Hex): boolean {\n return isHex(a) && a.toLowerCase() === b.toLowerCase();\n}\n\n/**\n * Recursively converts all members of an object to hexadecimal format.\n * Handles various data types including functions, null, strings, booleans,\n * bigints, arrays, and objects.\n *\n * @param obj - The object to convert to hexadecimal format.\n * @returns The object with all values converted to hexadecimal format.\n */\nexport function deepHexlify(obj: any): any {\n if (typeof obj === 'function') {\n return undefined;\n }\n\n if (\n obj === null ||\n obj === undefined ||\n typeof obj === 'string' ||\n typeof obj === 'boolean'\n ) {\n return obj;\n }\n\n if (typeof obj === 'bigint') {\n return toHex(obj);\n }\n\n if (obj._isBigNumber !== null || typeof obj !== 'object') {\n return toHex(obj).replace(/^0x0/u, '0x');\n }\n\n if (Array.isArray(obj)) {\n return obj.map((member) => deepHexlify(member));\n }\n\n return Object.keys(obj).reduce(\n (set, key) =>\n Object.assign(Object.assign({}, set), {\n [key]: deepHexlify(obj[key]),\n }),\n {},\n );\n}\n\n/**\n * Utility function to check if an object has all specified properties defined and not undefined.\n *\n * @template TObject - The type of the object to check.\n * @template TKey - The keys of the properties to check for.\n * @param object - The object to check for the required properties.\n * @param properties - An array of property names to verify on the object.\n * @returns True if all specified properties exist on the object and are not undefined, otherwise false.\n */\nexport const hasProperties = <\n TObject extends Record<string, any>,\n TKey extends keyof TObject,\n>(\n object: TObject,\n properties: readonly TKey[],\n): object is TObject & Record<TKey, NonNullable<TObject[TKey]>> => {\n return properties.every(\n (prop) => prop in object && object[prop] !== undefined,\n );\n};\n","import type { SmartAccountsEnvironment } from '../../types';\nimport { hasProperties } from '../../utils';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type {\n erc721Transfer,\n Erc721TransferBuilderConfig,\n} from '../erc721TransferBuilder';\n\nexport type Erc721ScopeBaseConfig = {\n type: typeof erc721Transfer;\n};\n\nexport type Erc721ScopeConfig = Erc721ScopeBaseConfig &\n Erc721TransferBuilderConfig;\n\nconst isErc721TransferConfig = (\n config: Erc721ScopeBaseConfig,\n): config is Erc721TransferBuilderConfig & Erc721ScopeBaseConfig => {\n return hasProperties(\n config as Erc721TransferBuilderConfig & Erc721ScopeBaseConfig,\n ['tokenAddress', 'tokenId'],\n );\n};\n\n/**\n * Creates a caveat builder configured for ERC721 unit of authority.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing permitted contract and token ID.\n * @returns A configured caveat builder with the specified caveats.\n * @throws Error if any of the required parameters are invalid.\n */\nexport function createErc721CaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: Erc721ScopeConfig,\n): CoreCaveatBuilder {\n if (!isErc721TransferConfig(config)) {\n throw new Error('Invalid ERC721 configuration');\n }\n\n const caveatBuilder = createCaveatBuilder(environment).addCaveat(\n 'erc721Transfer',\n config,\n );\n\n return caveatBuilder;\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport { hasProperties } from '../../utils';\nimport type { AllowedCalldataBuilderConfig } from '../allowedCalldataBuilder';\nimport type { AllowedMethodsBuilderConfig } from '../allowedMethodsBuilder';\nimport type { AllowedTargetsBuilderConfig } from '../allowedTargetsBuilder';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type { ExactCalldataBuilderConfig } from '../exactCalldataBuilder';\nimport type { ValueLteBuilderConfig } from '../valueLteBuilder';\n\ntype FunctionCallScopeBaseConfig = {\n type: 'functionCall';\n allowedCalldata?: AllowedCalldataBuilderConfig[];\n exactCalldata?: ExactCalldataBuilderConfig;\n valueLte?: ValueLteBuilderConfig;\n};\n\nexport type FunctionCallScopeConfig = FunctionCallScopeBaseConfig &\n AllowedTargetsBuilderConfig &\n AllowedMethodsBuilderConfig;\n\nconst isFunctionCallConfig = (\n config: FunctionCallScopeConfig,\n): config is FunctionCallScopeConfig => {\n return hasProperties(config, ['targets', 'selectors']);\n};\n\n/**\n * Creates a caveat builder configured for function call unit of authority.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing allowed targets, methods, and optionally calldata.\n * @returns A configured caveat builder with the specified caveats.\n * @throws Error if any of the required parameters are invalid.\n * @throws Error if both allowedCalldata and exactCalldata are provided simultaneously.\n */\nexport function createFunctionCallCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: FunctionCallScopeConfig,\n): CoreCaveatBuilder {\n const { targets, selectors, allowedCalldata, exactCalldata } = config;\n\n if (!isFunctionCallConfig(config)) {\n throw new Error('Invalid Function Call configuration');\n }\n\n if (allowedCalldata && allowedCalldata.length > 0 && exactCalldata) {\n throw new Error(\n 'Cannot specify both allowedCalldata and exactCalldata. Please use only one calldata restriction type.',\n );\n }\n\n const valueLteConfig = config.valueLte ?? { maxValue: 0n };\n\n const caveatBuilder = createCaveatBuilder(environment)\n .addCaveat('allowedTargets', { targets })\n .addCaveat('allowedMethods', { selectors })\n .addCaveat('valueLte', valueLteConfig);\n\n if (allowedCalldata && allowedCalldata.length > 0) {\n allowedCalldata.forEach((calldataConfig) => {\n caveatBuilder.addCaveat('allowedCalldata', calldataConfig);\n });\n } else if (exactCalldata) {\n caveatBuilder.addCaveat('exactCalldata', exactCalldata);\n }\n\n return caveatBuilder;\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport type { AllowedCalldataBuilderConfig } from '../allowedCalldataBuilder';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type { ExactCalldataBuilderConfig } from '../exactCalldataBuilder';\nimport type {\n nativeTokenPeriodTransfer,\n NativeTokenPeriodTransferBuilderConfig,\n} from '../nativeTokenPeriodTransferBuilder';\n\nexport type NativeTokenPeriodicScopeConfig = {\n type: typeof nativeTokenPeriodTransfer;\n allowedCalldata?: AllowedCalldataBuilderConfig[];\n exactCalldata?: ExactCalldataBuilderConfig;\n} & NativeTokenPeriodTransferBuilderConfig;\n\n/**\n * Creates a caveat builder configured for native token periodic transfers with recurring limits.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing native token periodic transfer parameters.\n * @returns A configured caveat builder with native token period transfer and exact calldata caveats.\n * @throws Error if any of the native token periodic transfer parameters are invalid.\n * @throws Error if both allowedCalldata and exactCalldata are provided simultaneously.\n * @throws Error if the environment is not properly configured.\n */\nexport function createNativeTokenPeriodicCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: NativeTokenPeriodicScopeConfig,\n): CoreCaveatBuilder {\n const {\n periodAmount,\n periodDuration,\n startDate,\n allowedCalldata,\n exactCalldata,\n } = config;\n\n if (allowedCalldata && allowedCalldata.length > 0 && exactCalldata) {\n throw new Error(\n 'Cannot specify both allowedCalldata and exactCalldata. Please use only one calldata restriction type.',\n );\n }\n\n const caveatBuilder = createCaveatBuilder(environment);\n\n // Add calldata restrictions\n if (allowedCalldata && allowedCalldata.length > 0) {\n allowedCalldata.forEach((calldataConfig) => {\n caveatBuilder.addCaveat('allowedCalldata', calldataConfig);\n });\n } else if (exactCalldata) {\n caveatBuilder.addCaveat('exactCalldata', exactCalldata);\n } else {\n // Default behavior: only allow empty calldata\n caveatBuilder.addCaveat('exactCalldata', {\n calldata: '0x',\n });\n }\n\n // Add native token period transfer restriction\n caveatBuilder.addCaveat('nativeTokenPeriodTransfer', {\n periodAmount,\n periodDuration,\n startDate,\n });\n\n return caveatBuilder;\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport type { AllowedCalldataBuilderConfig } from '../allowedCalldataBuilder';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type { ExactCalldataBuilderConfig } from '../exactCalldataBuilder';\nimport type {\n nativeTokenStreaming,\n NativeTokenStreamingBuilderConfig,\n} from '../nativeTokenStreamingBuilder';\n\nexport type NativeTokenStreamingScopeConfig = {\n type: typeof nativeTokenStreaming;\n allowedCalldata?: AllowedCalldataBuilderConfig[];\n exactCalldata?: ExactCalldataBuilderConfig;\n} & NativeTokenStreamingBuilderConfig;\n\n/**\n * Creates a caveat builder configured for native token streaming with time-based limits.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing native token streaming parameters.\n * @returns A configured caveat builder with native token streaming and exact calldata caveats.\n * @throws Error if any of the native token streaming parameters are invalid.\n * @throws Error if both allowedCalldata and exactCalldata are provided simultaneously.\n * @throws Error if the environment is not properly configured.\n */\nexport function createNativeTokenStreamingCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: NativeTokenStreamingScopeConfig,\n): CoreCaveatBuilder {\n const {\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n allowedCalldata,\n exactCalldata,\n } = config;\n\n if (allowedCalldata && allowedCalldata.length > 0 && exactCalldata) {\n throw new Error(\n 'Cannot specify both allowedCalldata and exactCalldata. Please use only one calldata restriction type.',\n );\n }\n\n const caveatBuilder = createCaveatBuilder(environment);\n\n // Add calldata restrictions\n if (allowedCalldata && allowedCalldata.length > 0) {\n allowedCalldata.forEach((calldataConfig) => {\n caveatBuilder.addCaveat('allowedCalldata', calldataConfig);\n });\n } else if (exactCalldata) {\n caveatBuilder.addCaveat('exactCalldata', exactCalldata);\n } else {\n // Default behavior: only allow empty calldata\n caveatBuilder.addCaveat('exactCalldata', {\n calldata: '0x',\n });\n }\n\n // Add native token streaming restriction\n caveatBuilder.addCaveat('nativeTokenStreaming', {\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n });\n\n return caveatBuilder;\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport type { AllowedCalldataBuilderConfig } from '../allowedCalldataBuilder';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type { ExactCalldataBuilderConfig } from '../exactCalldataBuilder';\nimport type {\n nativeTokenTransferAmount,\n NativeTokenTransferAmountBuilderConfig,\n} from '../nativeTokenTransferAmountBuilder';\n\nexport type NativeTokenTransferScopeConfig = {\n type: typeof nativeTokenTransferAmount;\n allowedCalldata?: AllowedCalldataBuilderConfig[];\n exactCalldata?: ExactCalldataBuilderConfig;\n} & NativeTokenTransferAmountBuilderConfig;\n\n/**\n * Creates a caveat builder configured for native token transfers with amount limits.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing native token transfer parameters.\n * @returns A configured caveat builder with native token transfer amount and exact calldata caveats.\n * @throws Error if any of the native token transfer parameters are invalid.\n * @throws Error if both allowedCalldata and exactCalldata are provided simultaneously.\n * @throws Error if the environment is not properly configured.\n */\nexport function createNativeTokenTransferCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: NativeTokenTransferScopeConfig,\n): CoreCaveatBuilder {\n const { maxAmount, allowedCalldata, exactCalldata } = config;\n\n if (allowedCalldata && allowedCalldata.length > 0 && exactCalldata) {\n throw new Error(\n 'Cannot specify both allowedCalldata and exactCalldata. Please use only one calldata restriction type.',\n );\n }\n\n const caveatBuilder = createCaveatBuilder(environment);\n\n // Add calldata restrictions\n if (allowedCalldata && allowedCalldata.length > 0) {\n allowedCalldata.forEach((calldataConfig) => {\n caveatBuilder.addCaveat('allowedCalldata', calldataConfig);\n });\n } else if (exactCalldata) {\n caveatBuilder.addCaveat('exactCalldata', exactCalldata);\n } else {\n // Default behavior: only allow empty calldata\n caveatBuilder.addCaveat('exactCalldata', {\n calldata: '0x',\n });\n }\n\n // Add native token transfer amount restriction\n caveatBuilder.addCaveat('nativeTokenTransferAmount', {\n maxAmount,\n });\n\n return caveatBuilder;\n}\n","import type { SmartAccountsEnvironment } from '../../types';\nimport { hasProperties } from '../../utils';\nimport { createCaveatBuilder } from '../coreCaveatBuilder';\nimport type { CoreCaveatBuilder } from '../coreCaveatBuilder';\nimport type {\n ownershipTransfer,\n OwnershipTransferBuilderConfig,\n} from '../ownershipTransferBuilder';\n\ntype OwnershipScopeBaseConfig = {\n type: typeof ownershipTransfer;\n};\n\nexport type OwnershipScopeConfig = OwnershipScopeBaseConfig &\n OwnershipTransferBuilderConfig;\n\nconst isOwnershipTransferConfig = (\n config: OwnershipScopeConfig,\n): config is OwnershipTransferBuilderConfig & OwnershipScopeBaseConfig => {\n return hasProperties(\n config as OwnershipTransferBuilderConfig & OwnershipScopeBaseConfig,\n ['contractAddress'],\n );\n};\n\n/**\n * Creates a caveat builder configured for ownership transfer unit of authority.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @param config - Configuration object containing the target contract.\n * @returns A configured caveat builder with the specified caveats.\n * @throws Error if any of the required parameters are invalid.\n */\nexport function createOwnershipCaveatBuilder(\n environment: SmartAccountsEnvironment,\n config: OwnershipScopeConfig,\n): CoreCaveatBuilder {\n if (!isOwnershipTransferConfig(config)) {\n throw new Error('Invalid ownership transfer configuration');\n }\n\n const caveatBuilder = createCaveatBuilder(environment).addCaveat(\n 'ownershipTransfer',\n config,\n );\n\n return caveatBuilder;\n}\n","import {\n type Erc20PeriodicScopeConfig,\n createErc20PeriodicCaveatBuilder,\n} from './erc20PeriodicScope';\nimport {\n type Erc20StreamingScopeConfig,\n createErc20StreamingCaveatBuilder,\n} from './erc20StreamingScope';\nimport {\n type Erc20TransferScopeConfig,\n createErc20TransferCaveatBuilder,\n} from './erc20TransferScope';\nimport {\n type Erc721ScopeConfig,\n createErc721CaveatBuilder,\n} from './erc721Scope';\nimport {\n createFunctionCallCaveatBuilder,\n type FunctionCallScopeConfig,\n} from './functionCallScope';\nimport {\n type NativeTokenPeriodicScopeConfig,\n createNativeTokenPeriodicCaveatBuilder,\n} from './nativeTokenPeriodicScope';\nimport {\n type NativeTokenStreamingScopeConfig,\n createNativeTokenStreamingCaveatBuilder,\n} from './nativeTokenStreamingScope';\nimport {\n type NativeTokenTransferScopeConfig,\n createNativeTokenTransferCaveatBuilder,\n} from './nativeTokenTransferScope';\nimport {\n createOwnershipCaveatBuilder,\n type OwnershipScopeConfig,\n} from './ownershipScope';\nimport type { SmartAccountsEnvironment } from '../../types';\n// Import caveat builder name constants\nimport { erc20PeriodTransfer } from '../erc20PeriodTransferBuilder';\nimport { erc20Streaming } from '../erc20StreamingBuilder';\nimport { erc20TransferAmount } from '../erc20TransferAmountBuilder';\nimport { erc721Transfer } from '../erc721TransferBuilder';\nimport { nativeTokenPeriodTransfer } from '../nativeTokenPeriodTransferBuilder';\nimport { nativeTokenStreaming } from '../nativeTokenStreamingBuilder';\nimport { nativeTokenTransferAmount } from '../nativeTokenTransferAmountBuilder';\nimport { ownershipTransfer } from '../ownershipTransferBuilder';\n\nexport type ScopeConfig =\n | Erc20TransferScopeConfig\n | Erc20StreamingScopeConfig\n | Erc20PeriodicScopeConfig\n | NativeTokenTransferScopeConfig\n | NativeTokenStreamingScopeConfig\n | NativeTokenPeriodicScopeConfig\n | Erc721ScopeConfig\n | OwnershipScopeConfig\n | FunctionCallScopeConfig;\n\nexport const createCaveatBuilderFromScope = (\n environment: SmartAccountsEnvironment,\n scopeConfig: ScopeConfig,\n) => {\n switch (scopeConfig.type) {\n case erc20TransferAmount:\n return createErc20TransferCaveatBuilder(environment, scopeConfig);\n case erc20Streaming:\n return createErc20StreamingCaveatBuilder(environment, scopeConfig);\n case erc20PeriodTransfer:\n return createErc20PeriodicCaveatBuilder(environment, scopeConfig);\n case nativeTokenTransferAmount:\n return createNativeTokenTransferCaveatBuilder(environment, scopeConfig);\n case nativeTokenStreaming:\n return createNativeTokenStreamingCaveatBuilder(environment, scopeConfig);\n case nativeTokenPeriodTransfer:\n return createNativeTokenPeriodicCaveatBuilder(environment, scopeConfig);\n case erc721Transfer:\n return createErc721CaveatBuilder(environment, scopeConfig);\n case ownershipTransfer:\n return createOwnershipCaveatBuilder(environment, scopeConfig);\n case 'functionCall':\n return createFunctionCallCaveatBuilder(environment, scopeConfig);\n default:\n // eslint-disable-next-line no-case-declarations\n const exhaustivenessCheck: never = scopeConfig;\n throw new Error(\n `Invalid scope type: ${(exhaustivenessCheck as { type: string }).type}`,\n );\n }\n};\n","import type { CaveatBuilder } from './caveatBuilder';\nimport type { CoreCaveatConfiguration } from './coreCaveatBuilder';\nimport { createCaveatBuilderFromScope, type ScopeConfig } from './scope';\nimport type { Caveat, SmartAccountsEnvironment } from '../types';\n\nexport type Caveats = CaveatBuilder | (Caveat | CoreCaveatConfiguration)[];\n\n/**\n * Resolves the array of Caveat from a Caveats argument.\n * @param config - The configuration for the caveat builder.\n * @param config.environment - The environment to be used for the caveat builder.\n * @param config.scope - The scope to be used for the caveat builder.\n * @param config.caveats - The caveats to be resolved, which can be either a CaveatBuilder or an array of Caveat or CaveatConfiguration. Optional - if not provided, only scope caveats will be used.\n * @returns The resolved array of caveats.\n */\nexport const resolveCaveats = ({\n environment,\n scope,\n caveats,\n}: {\n environment: SmartAccountsEnvironment;\n scope: ScopeConfig;\n caveats?: Caveats;\n}) => {\n const scopeCaveatBuilder = createCaveatBuilderFromScope(environment, scope);\n\n if (caveats) {\n if ('build' in caveats && typeof caveats.build === 'function') {\n (caveats as CaveatBuilder).build().forEach((caveat) => {\n scopeCaveatBuilder.addCaveat(caveat);\n });\n } else if (Array.isArray(caveats)) {\n caveats.forEach((caveat) => {\n try {\n if ('type' in caveat) {\n const { type, ...config } = caveat;\n scopeCaveatBuilder.addCaveat(type, config);\n } else {\n scopeCaveatBuilder.addCaveat(caveat);\n }\n } catch (error) {\n throw new Error(`Invalid caveat: ${(error as Error).message}`);\n }\n });\n }\n }\n\n return scopeCaveatBuilder.build();\n};\n","import {\n type Hex,\n encodePacked,\n encodeAbiParameters,\n parseAbiParameters,\n keccak256,\n toHex,\n} from 'viem';\n\nimport type { Caveat } from './types';\n\nexport const CAVEAT_ABI_TYPE_COMPONENTS = [\n { type: 'address', name: 'enforcer' },\n { type: 'bytes', name: 'terms' },\n { type: 'bytes', name: 'args' },\n];\n\nexport const CAVEAT_TYPEHASH: Hex = keccak256(\n toHex('Caveat(address enforcer,bytes terms)'),\n);\n\n/**\n * Calculates the hash of a single Caveat.\n * @param input - The Caveat data.\n * @returns The keccak256 hash of the encoded Caveat packet.\n */\nexport const getCaveatPacketHash = (input: Caveat): Hex => {\n const encoded = encodeAbiParameters(\n parseAbiParameters('bytes32, address, bytes32'),\n [CAVEAT_TYPEHASH, input.enforcer, keccak256(input.terms)],\n );\n return keccak256(encoded);\n};\n\n/**\n * Calculates the hash of an array of Caveats.\n * @param input - The array of Caveats.\n * @returns The keccak256 hash of the encoded Caveat array packet.\n */\nexport const getCaveatArrayPacketHash = (input: Caveat[]): Hex => {\n let encoded: Hex = '0x';\n\n for (const caveat of input) {\n const caveatPacketHash = getCaveatPacketHash(caveat);\n encoded = encodePacked(['bytes', 'bytes32'], [encoded, caveatPacketHash]);\n }\n return keccak256(encoded);\n};\n\n/**\n * Creates a caveat.\n * @param enforcer - The contract that guarantees the caveat is upheld.\n * @param terms - The data that the enforcer will use to verify the caveat (unique per enforcer).\n * @param args - Additional arguments for the caveat (optional).\n * @returns A Caveat.\n */\nexport const createCaveat = (\n enforcer: Hex,\n terms: Hex,\n args: Hex = '0x',\n): Caveat => ({\n enforcer,\n terms,\n args,\n});\n","import {\n encodeDelegations as encodeDelegationsCore,\n decodeDelegations as decodeDelegationsCore,\n hashDelegation,\n ANY_BENEFICIARY,\n DELEGATION_TYPEHASH,\n CAVEAT_TYPEHASH,\n ROOT_AUTHORITY,\n} from '@metamask/delegation-core';\nimport { hashMessage, toBytes, toHex, getAddress } from 'viem';\nimport type { TypedData, AbiParameter, Address, Hex } from 'viem';\nimport { signTypedData } from 'viem/accounts';\n\nimport { type Caveats, resolveCaveats } from './caveatBuilder';\nimport type { ScopeConfig } from './caveatBuilder/scope';\nimport { CAVEAT_ABI_TYPE_COMPONENTS } from './caveats';\nimport type { Delegation, SmartAccountsEnvironment } from './types';\n\nexport {\n ANY_BENEFICIARY,\n DELEGATION_TYPEHASH,\n CAVEAT_TYPEHASH,\n ROOT_AUTHORITY,\n};\n\n/**\n * The ABI type components of a Delegation.\n */\nexport const DELEGATION_ABI_TYPE_COMPONENTS = [\n { type: 'address', name: 'delegate' },\n { type: 'address', name: 'delegator' },\n { type: 'bytes32', name: 'authority' },\n { type: 'tuple[]', name: 'caveats', components: CAVEAT_ABI_TYPE_COMPONENTS },\n { type: 'uint256', name: 'salt' },\n { type: 'bytes', name: 'signature' },\n];\n\n/**\n * Converts a delegation to a delegation struct.\n * @param delegation - The delegation to convert.\n * @returns The delegation struct.\n */\nexport const toDelegationStruct = (\n delegation: Delegation,\n): DelegationStruct => {\n const caveats = delegation.caveats.map((caveat) => ({\n enforcer: getAddress(caveat.enforcer),\n terms: caveat.terms,\n args: caveat.args,\n }));\n\n const salt = delegation.salt === '0x' ? 0n : BigInt(delegation.salt);\n\n return {\n delegate: getAddress(delegation.delegate),\n delegator: getAddress(delegation.delegator),\n authority:\n delegation.authority === undefined\n ? ROOT_AUTHORITY\n : delegation.authority,\n caveats,\n salt,\n signature: delegation.signature,\n };\n};\n\n/**\n * Converts a DelegationStruct to a Delegation.\n * The Delegation type is used for off-chain operations and has a hex string salt.\n * @param delegationStruct - The delegation struct to convert\n * @returns The converted delegation with a hex string salt\n */\n\nexport const toDelegation = (\n delegationStruct: DelegationStruct,\n): Delegation => {\n return {\n ...delegationStruct,\n salt: toHex(delegationStruct.salt),\n };\n};\n\n/**\n * Represents a DelegationStruct as defined in the Delegation Framework.\n * This is distinguished from the Delegation type by requiring the salt to be a bigint\n * instead of a Hex string, which is useful for on-chain operations and EIP-712 signing.\n */\nexport type DelegationStruct = Omit<Delegation, 'salt'> & {\n salt: bigint;\n};\n\n/**\n * ABI Encodes an array of delegations.\n * @param delegations - The delegations to encode.\n * @returns The encoded delegations.\n */\nexport const encodeDelegations = (delegations: Delegation[]): Hex => {\n const delegationStructs = delegations.map(toDelegationStruct);\n\n return encodeDelegationsCore(delegationStructs);\n};\n\n/**\n * Abi encodes permission contexts.\n * @param delegations - The delegation chains to encode.\n * @returns The encoded permission contexts.\n */\nexport const encodePermissionContexts = (delegations: Delegation[][]) => {\n const encodedDelegations = delegations.map((delegationChain) =>\n encodeDelegations(delegationChain),\n );\n\n return encodedDelegations;\n};\n\n/**\n * Decodes an array of delegations from its ABI-encoded representation.\n * @param encoded - The hex-encoded delegation array to decode.\n * @returns An array of decoded delegations.\n */\nexport const decodeDelegations = (encoded: Hex): Delegation[] => {\n // decodeDelegationsCore returns DelegationStruct, so we need to map it back to Delegation\n return decodeDelegationsCore(encoded).map(toDelegation);\n};\n\n/**\n * Decodes an array of encoded permission contexts into an array of delegation chains.\n * @param encoded - The hex-encoded permission context to decode.\n * @returns An array of decoded delegations.\n */\nexport const decodePermissionContexts = (encoded: Hex[]): Delegation[][] => {\n const delegationChains = encoded.map(decodeDelegations);\n\n return delegationChains;\n};\n\n/**\n * TypedData to be used when signing a Delegation. Delegation value for `signature` and Caveat values for `args` are omitted as they cannot be known at signing time.\n */\nexport const SIGNABLE_DELEGATION_TYPED_DATA: TypedData = {\n Caveat: [\n { name: 'enforcer', type: 'address' },\n { name: 'terms', type: 'bytes' },\n ],\n Delegation: [\n { name: 'delegate', type: 'address' },\n { name: 'delegator', type: 'address' },\n { name: 'authority', type: 'bytes32' },\n { name: 'caveats', type: 'Caveat[]' },\n { name: 'salt', type: 'uint256' },\n ],\n} as const;\n\n/**\n * The ABI type for a full delegation.\n */\nexport const DELEGATION_ARRAY_ABI_TYPE: AbiParameter = {\n type: 'tuple[]',\n components: DELEGATION_ABI_TYPE_COMPONENTS,\n} as const;\n\n/**\n * Prepares a delegation hash for passkey signing.\n * @param delegationHash - The delegation hash to prepare.\n * @returns The prepared hash for passkey signing.\n */\nexport const prepDelegationHashForPasskeySign = (delegationHash: Hex) => {\n return hashMessage({\n raw: toBytes(delegationHash),\n });\n};\n\n/**\n * Gets a delegation hash offchain.\n * @param input - The delegation to get the hash for.\n * @returns The hash of the delegation parameters.\n */\nexport const getDelegationHashOffchain = (input: Delegation): Hex => {\n const delegationStruct = toDelegationStruct(input);\n\n return hashDelegation(delegationStruct);\n};\n\ntype BaseCreateDelegationOptions = {\n environment: SmartAccountsEnvironment;\n scope: ScopeConfig;\n from: Hex;\n caveats?: Caveats;\n parentDelegation?: Delegation | Hex;\n salt?: Hex;\n};\n\n/**\n * Options for creating a specific delegation\n */\nexport type CreateDelegationOptions = BaseCreateDelegationOptions & {\n to: Hex;\n};\n\n/**\n * Options for creating an open delegation\n */\nexport type CreateOpenDelegationOptions = BaseCreateDelegationOptions;\n\n/**\n * Resolves the authority for a delegation based on the parent delegation.\n * @param parentDelegation - The parent delegation or its hash.\n * @returns The resolved authority hash.\n */\nexport const resolveAuthority = (parentDelegation?: Delegation | Hex): Hex => {\n if (!parentDelegation) {\n return ROOT_AUTHORITY;\n }\n\n if (typeof parentDelegation === 'string') {\n return parentDelegation;\n }\n\n return getDelegationHashOffchain(parentDelegation);\n};\n\n/**\n * Creates a delegation with specific delegate.\n * @param options - The options for creating the delegation.\n * @returns The created delegation data structure.\n */\nexport const createDelegation = (\n options: CreateDelegationOptions,\n): Delegation => {\n return {\n delegate: options.to,\n delegator: options.from,\n authority: resolveAuthority(options.parentDelegation),\n caveats: resolveCaveats(options),\n salt: options.salt ?? '0x',\n signature: '0x',\n };\n};\n\n/**\n * Creates an open delegation that can be redeemed by any delegate.\n * @param options - The options for creating the open delegation.\n * @returns The created delegation data structure.\n */\nexport const createOpenDelegation = (\n options: CreateOpenDelegationOptions,\n): Delegation => {\n return {\n delegate: ANY_BENEFICIARY,\n delegator: options.from,\n authority: resolveAuthority(options.parentDelegation),\n caveats: resolveCaveats(options),\n salt: options.salt ?? '0x',\n signature: '0x',\n };\n};\n\n/**\n * Prepares typed data for delegation signing (internal helper function).\n * @param params - The parameters for preparing the typed data.\n * @param params.delegation - The delegation to prepare for signing.\n * @param params.delegationManager - The address of the delegation manager contract.\n * @param params.chainId - The chain ID for the signature.\n * @param params.name - The name of the contract.\n * @param params.version - The version of the contract.\n * @param params.allowInsecureUnrestrictedDelegation - Whether to allow insecure unrestricted delegation.\n * @returns The typed data parameters ready for signing.\n * @internal\n */\nexport const prepareSignDelegationTypedData = ({\n delegation,\n delegationManager,\n chainId,\n name = 'DelegationManager',\n version = '1',\n allowInsecureUnrestrictedDelegation = false,\n}: {\n delegation: Omit<Delegation, 'signature'>;\n delegationManager: Address;\n chainId: number;\n name?: string;\n version?: string;\n allowInsecureUnrestrictedDelegation?: boolean;\n}) => {\n const delegationStruct = toDelegationStruct({\n ...delegation,\n signature: '0x',\n });\n\n if (\n delegationStruct.caveats.length === 0 &&\n !allowInsecureUnrestrictedDelegation\n ) {\n throw new Error(\n 'No caveats found. If you definitely want to sign a delegation without caveats, set `allowInsecureUnrestrictedDelegation` to `true`.',\n );\n }\n\n return {\n domain: {\n chainId,\n name,\n version,\n verifyingContract: delegationManager,\n },\n types: SIGNABLE_DELEGATION_TYPED_DATA,\n primaryType: 'Delegation' as const,\n message: delegationStruct,\n };\n};\n\n/**\n * Signs a delegation using a private key.\n * @param params - The parameters for signing the delegation.\n * @param params.privateKey - The private key to use for signing.\n * @param params.delegation - The delegation to sign.\n * @param params.delegationManager - The address of the delegation manager contract.\n * @param params.chainId - The chain ID for the signature.\n * @param params.name - The name of the contract.\n * @param params.version - The version of the contract.\n * @param params.allowInsecureUnrestrictedDelegation - Whether to allow insecure unrestricted delegation.\n * @returns The signed delegation.\n */\nexport const signDelegation = async ({\n privateKey,\n delegation,\n delegationManager,\n chainId,\n name = 'DelegationManager',\n version = '1',\n allowInsecureUnrestrictedDelegation = false,\n}: {\n privateKey: Hex;\n delegation: Omit<Delegation, 'signature'>;\n delegationManager: Address;\n chainId: number;\n name?: string;\n version?: string;\n allowInsecureUnrestrictedDelegation?: boolean;\n}) => {\n const typedData = prepareSignDelegationTypedData({\n delegation,\n delegationManager,\n chainId,\n name,\n version,\n allowInsecureUnrestrictedDelegation,\n });\n\n return signTypedData({\n privateKey,\n ...typedData,\n });\n};\n"]}
@@ -4,7 +4,7 @@ import {
4
4
  MultiTokenPeriodEnforcer_exports,
5
5
  NativeTokenPeriodTransferEnforcer_exports,
6
6
  NativeTokenStreamingEnforcer_exports
7
- } from "./chunk-LCNP5VYR.mjs";
7
+ } from "./chunk-F5U55BIP.mjs";
8
8
  import {
9
9
  encodeProxyCreationCode,
10
10
  encode_exports,
@@ -38,7 +38,7 @@ import {
38
38
  simulate7,
39
39
  simulate8,
40
40
  simulate9
41
- } from "./chunk-DR5QAW34.mjs";
41
+ } from "./chunk-72UQFUL5.mjs";
42
42
  import {
43
43
  encodeExecutionCalldatas
44
44
  } from "./chunk-CPLIK3VF.mjs";
@@ -48,7 +48,7 @@ import {
48
48
  __export,
49
49
  encodePermissionContexts,
50
50
  toDelegationStruct
51
- } from "./chunk-Q6ZTEHYY.mjs";
51
+ } from "./chunk-BJGZGTRU.mjs";
52
52
 
53
53
  // src/contracts/index.ts
54
54
  var contracts_exports = {};
@@ -1322,4 +1322,4 @@ export {
1322
1322
  SpecificActionERC20TransferBatchEnforcer_exports,
1323
1323
  contracts_exports
1324
1324
  };
1325
- //# sourceMappingURL=chunk-3OQKCVQC.mjs.map
1325
+ //# sourceMappingURL=chunk-KTAXE6PZ.mjs.map
@@ -4,7 +4,7 @@ var _chunkT6PSFUOZcjs = require('./chunk-T6PSFUOZ.cjs');
4
4
 
5
5
 
6
6
 
7
- var _chunkMAPUND7Scjs = require('./chunk-MAPUND7S.cjs');
7
+ var _chunkHJETDDBNcjs = require('./chunk-HJETDDBN.cjs');
8
8
 
9
9
  // src/DelegationFramework/utils.ts
10
10
  var _delegationabis = require('@metamask/delegation-abis');
@@ -13,7 +13,7 @@ var _actions = require('viem/actions');
13
13
 
14
14
  // src/DelegationFramework/DeleGatorCore/read.ts
15
15
  var read_exports = {};
16
- _chunkMAPUND7Scjs.__export.call(void 0, read_exports, {
16
+ _chunkHJETDDBNcjs.__export.call(void 0, read_exports, {
17
17
  getDelegationManager: () => read,
18
18
  getDeposit: () => read2,
19
19
  getEntryPoint: () => read3,
@@ -196,7 +196,7 @@ var encode2 = ({
196
196
 
197
197
  // src/DelegationFramework/HybridDeleGator/encode.ts
198
198
  var encode_exports = {};
199
- _chunkMAPUND7Scjs.__export.call(void 0, encode_exports, {
199
+ _chunkHJETDDBNcjs.__export.call(void 0, encode_exports, {
200
200
  addKey: () => encode3,
201
201
  initializeHybridDeleGator: () => encode2,
202
202
  reinitializeHybridDeleGator: () => encode4,
@@ -363,7 +363,7 @@ var encode7 = ({ owners, threshold }) => {
363
363
 
364
364
  // src/DelegationFramework/MultiSigDeleGator/encode.ts
365
365
  var encode_exports2 = {};
366
- _chunkMAPUND7Scjs.__export.call(void 0, encode_exports2, {
366
+ _chunkHJETDDBNcjs.__export.call(void 0, encode_exports2, {
367
367
  addSigner: () => encode8,
368
368
  initializeMultiSigDeleGator: () => encode7,
369
369
  reinitializeMultiSigDeleGator: () => encode9,
@@ -576,7 +576,7 @@ var execute = async ({
576
576
 
577
577
  // src/DelegationFramework/SimpleFactory/encode.ts
578
578
  var encode_exports3 = {};
579
- _chunkMAPUND7Scjs.__export.call(void 0, encode_exports3, {
579
+ _chunkHJETDDBNcjs.__export.call(void 0, encode_exports3, {
580
580
  create2Deploy: () => encode14
581
581
  });
582
582
 
@@ -660,7 +660,7 @@ var encode16 = ({
660
660
 
661
661
  // src/DelegationFramework/DeleGatorCore/encode.ts
662
662
  var encode_exports4 = {};
663
- _chunkMAPUND7Scjs.__export.call(void 0, encode_exports4, {
663
+ _chunkHJETDDBNcjs.__export.call(void 0, encode_exports4, {
664
664
  disableDelegation: () => encode17,
665
665
  enableDelegation: () => encode18,
666
666
  execute: () => encode15,
@@ -679,7 +679,7 @@ var simulate16 = async ({
679
679
  delegation
680
680
  }) => {
681
681
  const abi = _delegationabis.DeleGatorCore.abi;
682
- const delegationStruct = _chunkMAPUND7Scjs.toDelegationStruct.call(void 0, delegation);
682
+ const delegationStruct = _chunkHJETDDBNcjs.toDelegationStruct.call(void 0, delegation);
683
683
  return _actions.simulateContract.call(void 0, client, {
684
684
  address: delegationManagerAddress,
685
685
  abi,
@@ -700,7 +700,7 @@ var execute4 = async ({
700
700
  return _actions.writeContract.call(void 0, client, request);
701
701
  };
702
702
  var encode17 = ({ delegation }) => {
703
- const delegationStruct = _chunkMAPUND7Scjs.toDelegationStruct.call(void 0, delegation);
703
+ const delegationStruct = _chunkHJETDDBNcjs.toDelegationStruct.call(void 0, delegation);
704
704
  return _viem.encodeFunctionData.call(void 0, {
705
705
  abi: _delegationabis.DeleGatorCore.abi,
706
706
  functionName: "disableDelegation",
@@ -718,7 +718,7 @@ var simulate17 = async ({
718
718
  delegation
719
719
  }) => {
720
720
  const abi = _delegationabis.DeleGatorCore.abi;
721
- const delegationStruct = _chunkMAPUND7Scjs.toDelegationStruct.call(void 0, delegation);
721
+ const delegationStruct = _chunkHJETDDBNcjs.toDelegationStruct.call(void 0, delegation);
722
722
  return _actions.simulateContract.call(void 0, client, {
723
723
  address: delegationManagerAddress,
724
724
  abi,
@@ -739,7 +739,7 @@ var execute5 = async ({
739
739
  return _actions.writeContract.call(void 0, client, request);
740
740
  };
741
741
  var encode18 = ({ delegation }) => {
742
- const delegationStruct = _chunkMAPUND7Scjs.toDelegationStruct.call(void 0, delegation);
742
+ const delegationStruct = _chunkHJETDDBNcjs.toDelegationStruct.call(void 0, delegation);
743
743
  return _viem.encodeFunctionData.call(void 0, {
744
744
  abi: _delegationabis.DeleGatorCore.abi,
745
745
  functionName: "enableDelegation",
@@ -828,4 +828,4 @@ var encode19 = ({
828
828
 
829
829
 
830
830
  exports.simulate = simulate2; exports.simulate2 = simulate; exports.encode = encode2; exports.simulate3 = simulate3; exports.simulate4 = simulate4; exports.simulate5 = simulate5; exports.encode_exports = encode_exports; exports.simulate6 = simulate7; exports.simulate7 = simulate6; exports.encode2 = encode7; exports.simulate8 = simulate8; exports.simulate9 = simulate9; exports.simulate10 = simulate10; exports.simulate11 = simulate11; exports.simulate12 = simulate12; exports.encode_exports2 = encode_exports2; exports.simulate13 = simulate13; exports.encode3 = encode14; exports.execute = execute; exports.encode_exports3 = encode_exports3; exports.read_exports = read_exports; exports.isContractDeployed = isContractDeployed; exports.isImplementationExpected = isImplementationExpected; exports.encodeProxyCreationCode = encodeProxyCreationCode; exports.simulate14 = simulate16; exports.execute2 = execute4; exports.simulate15 = simulate17; exports.execute3 = execute5; exports.simulate16 = simulate14; exports.execute4 = execute2; exports.encode4 = encode15; exports.simulate17 = simulate15; exports.execute5 = execute3; exports.encode5 = encode16; exports.simulate18 = simulate18; exports.execute6 = execute6; exports.encode_exports4 = encode_exports4;
831
- //# sourceMappingURL=chunk-XU72WGZA.cjs.map
831
+ //# sourceMappingURL=chunk-QHDMZSGQ.cjs.map