{"version":3,"sources":["../../../src/core/erc4337/utils.ts","../../../src/core/erc4337/userop.builder.ts"],"names":["ethers"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { PackedUserOperation } from \"../types\";\n\nexport class ERC4337Utils {\n  static packAccountGasLimits(\n    verificationGasLimit: bigint | string,\n    callGasLimit: bigint | string\n  ): string {\n    const vgl = BigInt(verificationGasLimit);\n    const cgl = BigInt(callGasLimit);\n    const packed = (vgl << 128n) | cgl;\n    return \"0x\" + packed.toString(16).padStart(64, \"0\");\n  }\n\n  static unpackAccountGasLimits(accountGasLimits: string): {\n    verificationGasLimit: bigint;\n    callGasLimit: bigint;\n  } {\n    const packed = BigInt(accountGasLimits);\n    return {\n      verificationGasLimit: packed >> 128n,\n      callGasLimit: packed & ((1n << 128n) - 1n),\n    };\n  }\n\n  static packGasFees(maxPriorityFeePerGas: bigint | string, maxFeePerGas: bigint | string): string {\n    const priority = BigInt(maxPriorityFeePerGas);\n    const max = BigInt(maxFeePerGas);\n    const packed = (priority << 128n) | max;\n    return \"0x\" + packed.toString(16).padStart(64, \"0\");\n  }\n\n  static unpackGasFees(gasFees: string): {\n    maxPriorityFeePerGas: bigint;\n    maxFeePerGas: bigint;\n  } {\n    const packed = BigInt(gasFees);\n    return {\n      maxPriorityFeePerGas: packed >> 128n,\n      maxFeePerGas: packed & ((1n << 128n) - 1n),\n    };\n  }\n\n  static packUserOperation(userOp: any): PackedUserOperation {\n    return {\n      sender: userOp.sender,\n      nonce: userOp.nonce,\n      initCode: userOp.initCode || \"0x\",\n      callData: userOp.callData,\n      accountGasLimits: ERC4337Utils.packAccountGasLimits(\n        userOp.verificationGasLimit,\n        userOp.callGasLimit\n      ),\n      preVerificationGas: userOp.preVerificationGas,\n      gasFees: ERC4337Utils.packGasFees(userOp.maxPriorityFeePerGas, userOp.maxFeePerGas),\n      paymasterAndData: userOp.paymasterAndData || \"0x\",\n      signature: userOp.signature || \"0x\",\n    };\n  }\n\n  static unpackUserOperation(packedOp: PackedUserOperation): any {\n    const gasLimits = ERC4337Utils.unpackAccountGasLimits(packedOp.accountGasLimits);\n    const gasFees = ERC4337Utils.unpackGasFees(packedOp.gasFees);\n\n    return {\n      sender: packedOp.sender,\n      nonce: packedOp.nonce,\n      initCode: packedOp.initCode,\n      callData: packedOp.callData,\n      callGasLimit: \"0x\" + gasLimits.callGasLimit.toString(16),\n      verificationGasLimit: \"0x\" + gasLimits.verificationGasLimit.toString(16),\n      preVerificationGas: packedOp.preVerificationGas,\n      maxFeePerGas: \"0x\" + gasFees.maxFeePerGas.toString(16),\n      maxPriorityFeePerGas: \"0x\" + gasFees.maxPriorityFeePerGas.toString(16),\n      paymasterAndData: packedOp.paymasterAndData,\n      signature: packedOp.signature,\n    };\n  }\n}\n","import { ethers } from \"ethers\";\nimport type { PackedUserOperation, UserOperation } from \"../types\";\n\nexport class UserOpBuilder {\n  // Basic defaults\n  private static DEFAULT_VERIFICATION_GAS_LIMIT = 100000n;\n  private static DEFAULT_PRE_VERIFICATION_GAS = 21000n;\n  private static DEFAULT_MAX_FEE_PER_GAS = 1000000000n; // 1 gwei\n  private static DEFAULT_MAX_PRIORITY_FEE_PER_GAS = 1000000000n; // 1 gwei\n\n  constructor() {}\n\n  /**\n   * Build specific parts of a UserOperation\n   * Note: Full construction often requires chain interaction (nonce, gas price),\n   * which typically happens in the application layer or via a Provider wrapper.\n   * This builder focuses on formatting and structure.\n   */\n  async buildUserOp(params: {\n    sender: string;\n    callData: string;\n    nonce?: bigint;\n    initCode?: string;\n    callGasLimit?: bigint;\n    verificationGasLimit?: bigint;\n    preVerificationGas?: bigint;\n    maxFeePerGas?: bigint;\n    maxPriorityFeePerGas?: bigint;\n    paymasterAndData?: string;\n    signature?: string;\n  }): Promise<UserOperation> {\n    return {\n      sender: params.sender,\n      nonce: params.nonce || 0n,\n      initCode: params.initCode || \"0x\",\n      callData: params.callData,\n      callGasLimit: params.callGasLimit || 0n, // Should be estimated\n      verificationGasLimit:\n        params.verificationGasLimit || UserOpBuilder.DEFAULT_VERIFICATION_GAS_LIMIT,\n      preVerificationGas: params.preVerificationGas || UserOpBuilder.DEFAULT_PRE_VERIFICATION_GAS,\n      maxFeePerGas: params.maxFeePerGas || UserOpBuilder.DEFAULT_MAX_FEE_PER_GAS,\n      maxPriorityFeePerGas:\n        params.maxPriorityFeePerGas || UserOpBuilder.DEFAULT_MAX_PRIORITY_FEE_PER_GAS,\n      paymasterAndData: params.paymasterAndData || \"0x\",\n      signature: params.signature || \"0x\",\n    };\n  }\n\n  /**\n   * Hash the UserOperation for signing (ERC-4337 v0.7)\n   */\n  getUserOpHash(userOp: PackedUserOperation, entryPoint: string, chainId: number): string {\n    const encoded = ethers.AbiCoder.defaultAbiCoder().encode(\n      [\"address\", \"uint256\", \"bytes32\", \"bytes32\", \"bytes32\", \"uint256\", \"bytes32\", \"bytes32\"],\n      [\n        userOp.sender,\n        userOp.nonce,\n        ethers.keccak256(userOp.initCode),\n        ethers.keccak256(userOp.callData),\n        userOp.accountGasLimits,\n        userOp.preVerificationGas,\n        userOp.gasFees,\n        ethers.keccak256(userOp.paymasterAndData),\n      ]\n    );\n\n    return ethers.keccak256(\n      ethers.AbiCoder.defaultAbiCoder().encode(\n        [\"bytes32\", \"address\", \"uint256\"],\n        [ethers.keccak256(encoded), entryPoint, chainId]\n      )\n    );\n  }\n\n  // Legacy v0.6 hashing support could be added here if needed\n}\n"]}