@lumiapassport/core 1.4.1 → 1.4.2

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.
@@ -445,7 +445,7 @@ async function estimateUserOperationGas(userOp, retryWithoutFactory = true) {
445
445
  }
446
446
  }
447
447
  const isEmptyCallData = !userOp.callData || userOp.callData === "0x";
448
- const minimalCallGas = isEmptyCallData ? "0x0" : "0x493e0";
448
+ const minimalCallGas = isEmptyCallData ? "0x0" : "0x7a120";
449
449
  return { callGasLimit: minimalCallGas, verificationGasLimit: "0x989680", preVerificationGas: "0x30d40" };
450
450
  }
451
451
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundler/constants.ts","../../src/utils/helpers.ts","../../src/bundler/submission.ts","../../src/bundler/client-provider.ts","../../src/utils/env.ts","../../src/bundler/fee-calculation.ts","../../src/bundler/utils.ts","../../src/bundler/gas-estimation.ts","../../src/bundler/simulation.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ERC-4337 EntryPoint contract addresses\n */\nexport const ENTRYPOINT_V07 = '0x0000000071727De22E5E9d8BAf0edAc6f37da032' as const;\nexport const ENTRYPOINT_V06 = '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789' as const;\nexport const ENTRYPOINT = ENTRYPOINT_V07;\n","/**\n * Account Abstraction helper utilities\n * Adapted from lumia-passport-ui-kit/src/internal/akHelpers.ts\n */\n\n// Build-time injected URLs (tsup.define)\ndeclare const __LUMIA_BUNDLER_URL__: string;\n\n// Build-time default from .env (will be replaced by tsup define)\nconst BUILD_BUNDLER_URL = (typeof __LUMIA_BUNDLER_URL__ !== 'undefined' && __LUMIA_BUNDLER_URL__) || '';\n\n/**\n * Get bundler URL from runtime config or build-time default\n */\nfunction getBundlerUrl(): string {\n // Priority: window.__LUMIA_SERVICES__ > build-time default > hardcoded fallback\n\n // 1. Browser runtime config from LumiaPassportProvider (window.__LUMIA_SERVICES__)\n if (typeof globalThis !== 'undefined' && (globalThis as any).window) {\n const services = ((globalThis as any).window as any).__LUMIA_SERVICES__;\n if (services?.bundlerUrl) {\n return services.bundlerUrl;\n }\n }\n\n // 2. Build-time injected default (from .env during pnpm build)\n if (BUILD_BUNDLER_URL) {\n return BUILD_BUNDLER_URL;\n }\n\n // 3. Hardcoded fallback\n return 'http://localhost:4337';\n}\n\n/**\n * Precompile address for ecrecover\n * @internal\n */\n// const ECRECOVER_PRECOMPILE = '0x0000000000000000000000000000000000000001' as const;\n\n/**\n * ABI for ecrecover precompile\n * @internal\n */\n// const ECRECOVER_ABI = [\n// {\n// name: 'ecrecover',\n// type: 'function',\n// inputs: [\n// { name: 'hash', type: 'bytes32' },\n// { name: 'v', type: 'uint8' },\n// { name: 'r', type: 'bytes32' },\n// { name: 's', type: 'bytes32' }\n// ],\n// outputs: [{ name: 'addr', type: 'address' }]\n// },\n// ] as const;\n\n/**\n * Safely convert value to BigInt with fallback\n * @param val - Value to convert\n * @param fallback - Fallback value if conversion fails\n */\nexport const safeToBigInt = (val: any, fallback = '0x0'): bigint => {\n try {\n return BigInt(val || fallback);\n } catch {\n return BigInt(fallback);\n }\n};\n\n/**\n * Pack two 128-bit values into single 256-bit value\n * Used for packing gas limits in ERC-4337 v0.7\n * @param hi - High 128 bits\n * @param lo - Low 128 bits\n * @returns Packed 256-bit value as bigint\n */\nexport const pack2x128 = (hi: bigint, lo: bigint): bigint => {\n return (hi << 128n) | (lo & ((1n << 128n) - 1n));\n};\n\n/**\n * Verify signature against expected owner address\n * @param opHash - Operation hash that was signed\n * @param signature - Signature to verify\n * @param expectedOwner - Expected owner address\n */\nexport async function verifySignatureAgainstOwner(\n opHash: `0x${string}`,\n signature: `0x${string}`,\n expectedOwner?: `0x${string}`\n): Promise<void> {\n if (!signature || signature === '0x') return;\n\n try {\n // This will be implemented after we have publicClient from clients module\n // For now, this is a placeholder\n console.log('[AA][sign] Signature verification:', {\n opHash,\n signature,\n expectedOwner,\n });\n } catch (error) {\n console.error('[AA][sign][ERROR] Could not verify signature:', error);\n }\n}\n\n/**\n * Fetch nonce from EntryPoint contract\n * @param account - Account address\n * @param _entryPoint - EntryPoint contract address (unused in placeholder)\n */\nexport async function fetchEntryPointNonce(\n account: `0x${string}`,\n _entryPoint: `0x${string}`\n): Promise<`0x${string}`> {\n // This will be implemented after we have publicClient from clients module\n // For now, return 0x0 as placeholder\n console.log('[AA] fetchEntryPointNonce called for:', account);\n return '0x0';\n}\n\n/**\n * Sanitize UserOperation object by fixing common issues\n * @param userOp - UserOperation to sanitize\n */\nfunction sanitizeUserOperation(userOp: any): any {\n const sanitized = { ...userOp };\n\n // Fix sender field if it's an object (extract address and factory fields)\n if (typeof sanitized.sender === 'object' && sanitized.sender) {\n const senderObj = sanitized.sender;\n\n // Extract the actual sender address\n sanitized.sender = senderObj.sender || senderObj.address || senderObj.smartAccountAddress;\n\n // Extract factory fields if they exist\n if (senderObj.factory) {\n sanitized.factory = senderObj.factory;\n }\n if (senderObj.factoryData) {\n sanitized.factoryData = senderObj.factoryData;\n }\n }\n\n // Ensure all hex fields are valid and properly formatted\n const hexFields = [\n 'sender', 'nonce', 'callData', 'callGasLimit', 'verificationGasLimit',\n 'preVerificationGas', 'maxFeePerGas', 'maxPriorityFeePerGas', 'signature',\n 'factory', 'factoryData', 'paymaster', 'paymasterData',\n 'paymasterVerificationGasLimit', 'paymasterPostOpGasLimit'\n ];\n\n for (const field of hexFields) {\n const value = sanitized[field];\n if (value !== undefined && value !== null) {\n if (typeof value === 'string') {\n if (value === '0x' || value === '') {\n // Convert empty hex to 0x0 for numeric fields, 0x for data fields\n if (['callData', 'factoryData', 'paymasterData', 'signature'].includes(field)) {\n sanitized[field] = '0x';\n } else {\n sanitized[field] = '0x0';\n }\n } else if (field === 'sender' || field === 'factory' || field === 'paymaster') {\n // Address fields should have 0x prefix\n if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n } else if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n }\n }\n }\n\n // Remove undefined/null fields for v0.7\n Object.keys(sanitized).forEach(key => {\n if (sanitized[key] === undefined || sanitized[key] === null) {\n delete sanitized[key];\n }\n });\n\n // Ensure required fields exist with proper defaults\n if (!sanitized.callData) sanitized.callData = '0x';\n if (!sanitized.signature) sanitized.signature = '0x';\n\n return sanitized;\n}\n\n/**\n * Make RPC call to bundler\n * @param method - RPC method name\n * @param params - RPC method parameters\n * @param bundlerUrl - Bundler URL (will be fetched from config if not provided)\n */\nexport async function bundlerRpc(\n method: string,\n params: any[],\n bundlerUrl?: string\n): Promise<any> {\n // Sanitize UserOperation if this is eth_sendUserOperation\n let cleanParams = params;\n if (method === 'eth_sendUserOperation' && params[0]) {\n cleanParams = [sanitizeUserOperation(params[0]), params[1]];\n }\n\n const body = { jsonrpc: '2.0', id: 1, method, params: cleanParams };\n const bodyStr = JSON.stringify(body, (_k, v) => (typeof v === 'bigint' ? `0x${v.toString(16)}` : v));\n\n console.log('[AA][rpc] ->', method, bodyStr);\n\n // Get bundler URL: parameter > runtime config > build-time default > fallback\n const url = bundlerUrl || getBundlerUrl();\n\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: bodyStr\n });\n\n const json: any = await res.json();\n\n if (json.error) {\n console.log('[AA][rpc] <- ERROR:', JSON.stringify(json.error));\n const detail = json.error?.data ? ` | data: ${JSON.stringify(json.error.data)}` : '';\n throw new Error((json.error.message || JSON.stringify(json.error)) + detail);\n }\n\n console.log('[AA][rpc] <- SUCCESS:', JSON.stringify(json.result));\n return json.result;\n}\n","import { bundlerRpc, fetchEntryPointNonce } from '../utils/helpers';\nimport { ENTRYPOINT_V07, ENTRYPOINT_V06 } from './constants';\nimport type { UserOperationV07, UserOperationV06 } from './types';\n\nexport async function sendUserOperationRaw(userOp: UserOperationV07): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V07]);\n return hash;\n}\n\nexport async function sendUserOperationV06Raw(userOp: UserOperationV06): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V06]);\n return hash;\n}\n\nexport async function sendUserOperationWithRetry(\n userOp: UserOperationV07,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV07>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationRaw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.7 after ${maxRetries} attempts`);\n}\n\nexport async function sendUserOperationV06WithRetry(\n userOp: UserOperationV06,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV06>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationV06Raw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.6 after ${maxRetries} attempts`);\n}\n\nexport async function getUserOperationReceipt(userOpHash: `0x${string}`): Promise<any> {\n const receipt = await bundlerRpc('eth_getUserOperationReceipt', [userOpHash]);\n return receipt;\n}\n","/**\n * Provider for viem PublicClient\n * Allows fee-calculation and other modules to access the configured client\n */\n\n// Using 'any' type to avoid direct viem dependency in this file\n// Actual type should be PublicClient from viem\nlet globalPublicClient: any | null = null;\n\n/**\n * Set the global public client for blockchain interactions\n * Should be called during initialization with a viem PublicClient\n */\nexport function setPublicClient(client: any): void {\n globalPublicClient = client;\n}\n\n/**\n * Get the configured public client\n * Throws if not configured\n */\nexport function getPublicClient(): any {\n if (!globalPublicClient) {\n throw new Error(\n '[LumiaPassport] PublicClient not configured. Please provide a publicClient in config ' +\n 'or call setPublicClient() before using fee calculation functions.'\n );\n }\n return globalPublicClient;\n}\n\n/**\n * Check if public client is configured\n */\nexport function hasPublicClient(): boolean {\n return globalPublicClient !== null;\n}\n","/**\n * Universal environment variable access that works in both browser and Node.js\n */\n\ninterface EnvVars {\n [key: string]: string | undefined;\n}\n\n/**\n * Get environment variables from various sources\n * Priority: 1. window.__LUMIA_ENV__ (browser), 2. import.meta.env (Vite), 3. process.env (Node.js)\n */\nfunction getEnvironmentVars(): EnvVars {\n // Try browser environment first (injected by LumiaPassportProvider)\n // @ts-ignore - accessing global window object\n const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n if (win && win.__LUMIA_ENV__) {\n return win.__LUMIA_ENV__;\n }\n\n // Try import.meta.env (ESM/Vite)\n try {\n // @ts-ignore - import.meta may not be available in all environments\n if (import.meta?.env) {\n // @ts-ignore\n return import.meta.env as EnvVars;\n }\n } catch {\n // import.meta not available in this environment\n }\n\n // Try process.env (Node.js/CJS)\n if (typeof process !== 'undefined' && process.env) {\n return process.env;\n }\n\n // Fallback to empty object\n return {};\n}\n\n/**\n * Get a single environment variable\n * @param name - The environment variable name\n * @returns The environment variable value or undefined\n */\nexport function getEnvVar(name: string): string | undefined {\n const env = getEnvironmentVars();\n return env[name];\n}\n\n/**\n * Get an environment variable as boolean\n * @param name - The environment variable name\n * @returns true if value is 'true' or '1', false otherwise\n */\nexport function getEnvVarBool(name: string): boolean {\n const value = getEnvVar(name);\n return value === 'true' || value === '1';\n}\n\n/**\n * Get an environment variable as array\n * @param name - The environment variable name\n * @param separator - Separator character (default: ',')\n * @returns Array of trimmed non-empty strings\n */\nexport function getEnvVarArray(name: string, separator = ','): string[] {\n const value = getEnvVar(name);\n return value ? value.split(separator).map(s => s.trim()).filter(Boolean) : [];\n}\n\n/**\n * Get all environment variables\n * @returns Object containing all environment variables\n */\nexport function getAllEnvVars(): EnvVars {\n return getEnvironmentVars();\n}\n\n/**\n * Check if running in development mode\n * @returns true if NODE_ENV or MODE is 'development'\n */\nexport function isDevelopment(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'development' || env.MODE === 'development';\n}\n\n/**\n * Check if running in production mode\n * @returns true if NODE_ENV or MODE is 'production'\n */\nexport function isProduction(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'production' || env.MODE === 'production';\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { getPublicClient } from './client-provider';\nimport { getEnvVar, getEnvVarBool } from '../utils/env';\n\nexport interface FeeConfig {\n baseFeeBuffer: number;\n priorityFeeBuffer: number;\n fallbackMaxFeePerGas?: bigint;\n fallbackMaxPriorityFeePerGas?: bigint;\n}\n\nexport interface CalculatedFees {\n maxFeePerGas: `0x${string}`;\n maxPriorityFeePerGas: `0x${string}`;\n baseFee?: bigint;\n priorityFee?: bigint;\n bufferedBaseFee?: bigint;\n bufferedPriorityFee?: bigint;\n}\n\nexport const DEFAULT_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 0.5, priorityFeeBuffer: 0.05, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 1_000_000_000n };\nexport const CONSERVATIVE_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 1.0, priorityFeeBuffer: 0.25, fallbackMaxFeePerGas: 5_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n };\n\n/**\n * Check if the current chain requires legacy gas pricing to avoid BASEFEE opcode errors\n */\nfunction shouldUseLegacyGasForChain(): boolean {\n try {\n // Get environment variable for legacy chain IDs (comma-separated list)\n const legacyChainIds = getEnvVar('VITE_LEGACY_GAS_CHAIN_IDS') || getEnvVar('LEGACY_GAS_CHAIN_IDS') || '';\n\n console.log('[Fees] Environment check:', {\n LEGACY_GAS_CHAIN_IDS: legacyChainIds,\n });\n\n // Default to Lumia Beam testnet if no env var is set\n const defaultLegacyChains = '2030232745'; // Lumia Beam testnet\n const chainIdsString = legacyChainIds || defaultLegacyChains;\n\n // Parse chain IDs\n const legacyChains = chainIdsString.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id));\n\n // Get current chain ID from public client\n const publicClient = getPublicClient();\n const currentChainId = publicClient?.chain?.id;\n\n if (!currentChainId) return false;\n\n const shouldUseLegacy = legacyChains.includes(currentChainId);\n\n if (shouldUseLegacy) {\n console.log('[Fees] Chain requires legacy gas pricing:', {\n chainId: currentChainId,\n legacyChains,\n configuredVia: legacyChainIds ? 'LEGACY_GAS_CHAIN_IDS env var' : 'default'\n });\n }\n\n return shouldUseLegacy;\n } catch (error) {\n console.warn('[Fees] Error checking legacy gas chain configuration:', error);\n return false;\n }\n}\n\nexport async function getCurrentBaseFee(): Promise<bigint> {\n const publicClient = getPublicClient();\n const block = await publicClient.getBlock({ blockTag: 'latest' });\n if (block.baseFeePerGas) return block.baseFeePerGas;\n const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex);\n const estimatedBaseFee = (gasPrice * 9n) / 10n; return estimatedBaseFee;\n}\n\nexport async function getCurrentPriorityFee(): Promise<bigint> {\n try { const priorityFeeHex = await bundlerRpc('rundler_maxPriorityFeePerGas', []); const priorityFee = BigInt(priorityFeeHex); if (priorityFee === 0n) return await getFallbackPriorityFee(); return priorityFee; } catch { return await getFallbackPriorityFee(); }\n}\n\nasync function getFallbackPriorityFee(): Promise<bigint> {\n try { const publicClient = getPublicClient(); const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex); return gasPrice / 10n; } catch { return 100_000_000n; }\n}\n\nexport async function calculateLegacyFees(gasPrice?: bigint): Promise<CalculatedFees> {\n try {\n let legacyGasPrice: bigint;\n\n if (gasPrice) {\n legacyGasPrice = gasPrice;\n } else {\n // Get current gas price from network\n const publicClient = getPublicClient();\n const gasPriceHex = await publicClient.getGasPrice();\n legacyGasPrice = BigInt(gasPriceHex);\n }\n\n // For legacy chains, set both maxFeePerGas and maxPriorityFeePerGas to the same value\n // This prevents BASEFEE opcode usage\n const result: CalculatedFees = {\n maxFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n };\n\n console.log('[Fees] Using legacy gas pricing (avoid BASEFEE opcode):', {\n gasPrice: legacyGasPrice.toString(),\n maxFeePerGas: result.maxFeePerGas,\n maxPriorityFeePerGas: result.maxPriorityFeePerGas,\n });\n\n return result;\n } catch (error) {\n console.warn('[Fees] Legacy fee calculation failed, using 1 gwei fallback:', error);\n const fallbackGasPrice = 1_000_000_000n; // 1 gwei\n return {\n maxFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n };\n }\n}\n\nexport async function calculateDynamicFees(config: FeeConfig = DEFAULT_FEE_CONFIG): Promise<CalculatedFees> {\n try {\n // Check environment variable for forced legacy mode\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n\n // Check if current chain should use legacy gas pricing\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) {\n console.log('[Fees] Using legacy gas pricing', forceLegacy ? '(forced by FORCE_LEGACY_GAS env var)' : '(chain requires legacy gas)');\n return await calculateLegacyFees();\n }\n const baseFee = await getCurrentBaseFee(); const bufferedBaseFee = baseFee + (baseFee * BigInt(Math.floor(config.baseFeeBuffer * 1000))) / 1000n;\n const priorityFee = await getCurrentPriorityFee(); const bufferedPriorityFee = priorityFee + (priorityFee * BigInt(Math.floor(config.priorityFeeBuffer * 1000))) / 1000n;\n const maxFeePerGas = bufferedBaseFee + bufferedPriorityFee; const maxPriorityFeePerGas = bufferedPriorityFee;\n return { maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, maxPriorityFeePerGas: `0x${maxPriorityFeePerGas.toString(16)}`, baseFee, priorityFee, bufferedBaseFee, bufferedPriorityFee };\n } catch { return await calculateLegacyFees(); }\n}\n\nexport async function calculateFastFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(3_000_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.75, priorityFeeBuffer: 0.5, fallbackMaxFeePerGas: 3_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n });\n}\n\nexport async function calculateEconomyFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(500_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.27, priorityFeeBuffer: 0.01, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 500_000_000n });\n}\n\nexport async function getFeeEstimates(): Promise<{ economy: CalculatedFees; standard: CalculatedFees; fast: CalculatedFees; }> {\n const [economy, standard, fast] = await Promise.all([ calculateEconomyFees(), calculateDynamicFees(), calculateFastFees() ]);\n return { economy, standard, fast };\n}\n","import { pack2x128, safeToBigInt } from '../utils/helpers';\nimport { calculateDynamicFees, calculateEconomyFees, calculateFastFees } from './fee-calculation';\nimport type { UserOperationV07, UserOperationV06, PackedUserOperationV07 } from './types';\n\nexport const DUMMY_SIGNATURE = `0x${'00'.repeat(65)}` as `0x${string}`;\n\nexport function packUserOperationV07(\n userOp: UserOperationV07,\n includeFactory: boolean,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`\n): PackedUserOperationV07 {\n const initCode = includeFactory && factoryAddress && factoryData ? (((factoryAddress as string) + (factoryData as string).slice(2)) as `0x${string}`) : ('0x' as `0x${string}`);\n const accountGasLimits = pack2x128(safeToBigInt(userOp.verificationGasLimit, '0x1e8480'), safeToBigInt(userOp.callGasLimit, '0x0f4240'));\n const gasFees = pack2x128(safeToBigInt(userOp.maxPriorityFeePerGas, '0x3b9aca00'), safeToBigInt(userOp.maxFeePerGas, '0x3b9aca00'));\n\n // Create paymasterAndData from paymaster and paymasterData fields (V07 format)\n let paymasterAndData: `0x${string}` = '0x';\n if (userOp.paymaster && userOp.paymaster !== '0x') {\n const paymasterAddr = userOp.paymaster.startsWith('0x') ? userOp.paymaster.slice(2) : userOp.paymaster;\n const paymasterData = userOp.paymasterData ? (userOp.paymasterData.startsWith('0x') ? userOp.paymasterData.slice(2) : userOp.paymasterData) : '';\n paymasterAndData = `0x${paymasterAddr}${paymasterData}` as `0x${string}`;\n }\n\n return { sender: userOp.sender, nonce: BigInt(userOp.nonce), initCode, callData: userOp.callData, accountGasLimits, preVerificationGas: safeToBigInt(userOp.preVerificationGas, '0x1d4c0'), gasFees, paymasterAndData, signature: userOp.signature };\n}\n\nexport function createDummyUserOperation(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV07 {\n const userOp: UserOperationV07 = {\n sender,\n nonce,\n callData,\n callGasLimit: '0x493e0', // 300,000\n verificationGasLimit: '0x989680', // 10,000,000 (same as original minVerificationGas)\n preVerificationGas: '0x30d40', // 200,000\n maxFeePerGas: customMaxFeePerGas || '0x3b9aca00',\n maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00',\n signature: DUMMY_SIGNATURE,\n };\n if (includeFactory && factoryAddress && factoryData) { userOp.factory = factoryAddress; userOp.factoryData = factoryData; }\n return userOp;\n}\n\nexport function createDummyUserOperationV06(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV06 {\n let initCode: `0x${string}` = '0x';\n if (includeFactory && factoryAddress && factoryData) {\n const factoryAddrClean = factoryAddress.startsWith('0x') ? factoryAddress.slice(2) : factoryAddress;\n const factoryDataClean = factoryData.startsWith('0x') ? factoryData.slice(2) : factoryData;\n initCode = `0x${factoryAddrClean}${factoryDataClean}` as `0x${string}`;\n }\n return { sender, nonce, initCode, callData, callGasLimit: '0x493e0', verificationGasLimit: '0x989680', preVerificationGas: '0x30d40', maxFeePerGas: customMaxFeePerGas || '0x3b9aca00', maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00', paymasterAndData: '0x', signature: DUMMY_SIGNATURE };\n}\n\nexport async function createUserOperationWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV07> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperation(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n\nexport async function createUserOperationV06WithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV06> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperationV06(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, GasEstimationResult } from './types';\nimport { DUMMY_SIGNATURE, createUserOperationWithDynamicFees } from './utils';\n\nexport async function estimateUserOperationGas(userOp: UserOperationV07, retryWithoutFactory: boolean = true): Promise<GasEstimationResult> {\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [userOp, ENTRYPOINT_V07]); return gas; }\n catch (error) {\n try { await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]); } catch {}\n if (retryWithoutFactory && (userOp.factory || userOp.factoryData)) {\n const errorMsg = String(error);\n if (/AA10 sender already constructed/i.test(errorMsg) || /sender.*is an existing contract.*but initCode is nonempty/i.test(errorMsg)) {\n const userOpWithoutFactory: UserOperationV07 = { ...userOp }; delete userOpWithoutFactory.factory; delete userOpWithoutFactory.factoryData;\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [ userOpWithoutFactory, ENTRYPOINT_V07 ]); return gas; } catch {}\n }\n }\n const isEmptyCallData = !userOp.callData || userOp.callData === '0x';\n const minimalCallGas = isEmptyCallData ? '0x0' : '0x493e0'; // 300,000 for non-empty calls\n return { callGasLimit: minimalCallGas, verificationGasLimit: '0x989680', preVerificationGas: '0x30d40' };\n }\n}\n\nexport async function estimateUserOperationGasWithSignature(\n userOp: UserOperationV07,\n _getSignature: (opHash: `0x${string}`) => Promise<`0x${string}` | null>,\n _getUserOpHash: (packedOp: any) => Promise<`0x${string}`>,\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult> { const userOpForEstimation: UserOperationV07 = { ...userOp, signature: DUMMY_SIGNATURE }; return estimateUserOperationGas(userOpForEstimation, retryWithoutFactory); }\n\nexport async function estimateUserOperationGasWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard',\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult & { calculatedFees?: any }> {\n const userOp = await createUserOperationWithDynamicFees(sender, nonce, callData, includeFactory, factoryAddress, factoryData, feeType);\n const gasResult = await estimateUserOperationGas(userOp, retryWithoutFactory);\n return { ...gasResult, calculatedFees: { maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, feeType } };\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, SimulationResult } from './types';\n\nexport async function simulateUserOperation(userOp: UserOperationV07): Promise<SimulationResult> {\n const result = await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]);\n return result;\n}\n\nexport async function validateUserOperation(userOp: UserOperationV07): Promise<{ valid: boolean; error?: string }> {\n try { await simulateUserOperation(userOp); return { valid: true }; } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); return { valid: false, error: errorMsg }; }\n}\n"]}
1
+ {"version":3,"sources":["../../src/bundler/constants.ts","../../src/utils/helpers.ts","../../src/bundler/submission.ts","../../src/bundler/client-provider.ts","../../src/utils/env.ts","../../src/bundler/fee-calculation.ts","../../src/bundler/utils.ts","../../src/bundler/gas-estimation.ts","../../src/bundler/simulation.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ERC-4337 EntryPoint contract addresses\n */\nexport const ENTRYPOINT_V07 = '0x0000000071727De22E5E9d8BAf0edAc6f37da032' as const;\nexport const ENTRYPOINT_V06 = '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789' as const;\nexport const ENTRYPOINT = ENTRYPOINT_V07;\n","/**\n * Account Abstraction helper utilities\n * Adapted from lumia-passport-ui-kit/src/internal/akHelpers.ts\n */\n\n// Build-time injected URLs (tsup.define)\ndeclare const __LUMIA_BUNDLER_URL__: string;\n\n// Build-time default from .env (will be replaced by tsup define)\nconst BUILD_BUNDLER_URL = (typeof __LUMIA_BUNDLER_URL__ !== 'undefined' && __LUMIA_BUNDLER_URL__) || '';\n\n/**\n * Get bundler URL from runtime config or build-time default\n */\nfunction getBundlerUrl(): string {\n // Priority: window.__LUMIA_SERVICES__ > build-time default > hardcoded fallback\n\n // 1. Browser runtime config from LumiaPassportProvider (window.__LUMIA_SERVICES__)\n if (typeof globalThis !== 'undefined' && (globalThis as any).window) {\n const services = ((globalThis as any).window as any).__LUMIA_SERVICES__;\n if (services?.bundlerUrl) {\n return services.bundlerUrl;\n }\n }\n\n // 2. Build-time injected default (from .env during pnpm build)\n if (BUILD_BUNDLER_URL) {\n return BUILD_BUNDLER_URL;\n }\n\n // 3. Hardcoded fallback\n return 'http://localhost:4337';\n}\n\n/**\n * Precompile address for ecrecover\n * @internal\n */\n// const ECRECOVER_PRECOMPILE = '0x0000000000000000000000000000000000000001' as const;\n\n/**\n * ABI for ecrecover precompile\n * @internal\n */\n// const ECRECOVER_ABI = [\n// {\n// name: 'ecrecover',\n// type: 'function',\n// inputs: [\n// { name: 'hash', type: 'bytes32' },\n// { name: 'v', type: 'uint8' },\n// { name: 'r', type: 'bytes32' },\n// { name: 's', type: 'bytes32' }\n// ],\n// outputs: [{ name: 'addr', type: 'address' }]\n// },\n// ] as const;\n\n/**\n * Safely convert value to BigInt with fallback\n * @param val - Value to convert\n * @param fallback - Fallback value if conversion fails\n */\nexport const safeToBigInt = (val: any, fallback = '0x0'): bigint => {\n try {\n return BigInt(val || fallback);\n } catch {\n return BigInt(fallback);\n }\n};\n\n/**\n * Pack two 128-bit values into single 256-bit value\n * Used for packing gas limits in ERC-4337 v0.7\n * @param hi - High 128 bits\n * @param lo - Low 128 bits\n * @returns Packed 256-bit value as bigint\n */\nexport const pack2x128 = (hi: bigint, lo: bigint): bigint => {\n return (hi << 128n) | (lo & ((1n << 128n) - 1n));\n};\n\n/**\n * Verify signature against expected owner address\n * @param opHash - Operation hash that was signed\n * @param signature - Signature to verify\n * @param expectedOwner - Expected owner address\n */\nexport async function verifySignatureAgainstOwner(\n opHash: `0x${string}`,\n signature: `0x${string}`,\n expectedOwner?: `0x${string}`\n): Promise<void> {\n if (!signature || signature === '0x') return;\n\n try {\n // This will be implemented after we have publicClient from clients module\n // For now, this is a placeholder\n console.log('[AA][sign] Signature verification:', {\n opHash,\n signature,\n expectedOwner,\n });\n } catch (error) {\n console.error('[AA][sign][ERROR] Could not verify signature:', error);\n }\n}\n\n/**\n * Fetch nonce from EntryPoint contract\n * @param account - Account address\n * @param _entryPoint - EntryPoint contract address (unused in placeholder)\n */\nexport async function fetchEntryPointNonce(\n account: `0x${string}`,\n _entryPoint: `0x${string}`\n): Promise<`0x${string}`> {\n // This will be implemented after we have publicClient from clients module\n // For now, return 0x0 as placeholder\n console.log('[AA] fetchEntryPointNonce called for:', account);\n return '0x0';\n}\n\n/**\n * Sanitize UserOperation object by fixing common issues\n * @param userOp - UserOperation to sanitize\n */\nfunction sanitizeUserOperation(userOp: any): any {\n const sanitized = { ...userOp };\n\n // Fix sender field if it's an object (extract address and factory fields)\n if (typeof sanitized.sender === 'object' && sanitized.sender) {\n const senderObj = sanitized.sender;\n\n // Extract the actual sender address\n sanitized.sender = senderObj.sender || senderObj.address || senderObj.smartAccountAddress;\n\n // Extract factory fields if they exist\n if (senderObj.factory) {\n sanitized.factory = senderObj.factory;\n }\n if (senderObj.factoryData) {\n sanitized.factoryData = senderObj.factoryData;\n }\n }\n\n // Ensure all hex fields are valid and properly formatted\n const hexFields = [\n 'sender', 'nonce', 'callData', 'callGasLimit', 'verificationGasLimit',\n 'preVerificationGas', 'maxFeePerGas', 'maxPriorityFeePerGas', 'signature',\n 'factory', 'factoryData', 'paymaster', 'paymasterData',\n 'paymasterVerificationGasLimit', 'paymasterPostOpGasLimit'\n ];\n\n for (const field of hexFields) {\n const value = sanitized[field];\n if (value !== undefined && value !== null) {\n if (typeof value === 'string') {\n if (value === '0x' || value === '') {\n // Convert empty hex to 0x0 for numeric fields, 0x for data fields\n if (['callData', 'factoryData', 'paymasterData', 'signature'].includes(field)) {\n sanitized[field] = '0x';\n } else {\n sanitized[field] = '0x0';\n }\n } else if (field === 'sender' || field === 'factory' || field === 'paymaster') {\n // Address fields should have 0x prefix\n if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n } else if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n }\n }\n }\n\n // Remove undefined/null fields for v0.7\n Object.keys(sanitized).forEach(key => {\n if (sanitized[key] === undefined || sanitized[key] === null) {\n delete sanitized[key];\n }\n });\n\n // Ensure required fields exist with proper defaults\n if (!sanitized.callData) sanitized.callData = '0x';\n if (!sanitized.signature) sanitized.signature = '0x';\n\n return sanitized;\n}\n\n/**\n * Make RPC call to bundler\n * @param method - RPC method name\n * @param params - RPC method parameters\n * @param bundlerUrl - Bundler URL (will be fetched from config if not provided)\n */\nexport async function bundlerRpc(\n method: string,\n params: any[],\n bundlerUrl?: string\n): Promise<any> {\n // Sanitize UserOperation if this is eth_sendUserOperation\n let cleanParams = params;\n if (method === 'eth_sendUserOperation' && params[0]) {\n cleanParams = [sanitizeUserOperation(params[0]), params[1]];\n }\n\n const body = { jsonrpc: '2.0', id: 1, method, params: cleanParams };\n const bodyStr = JSON.stringify(body, (_k, v) => (typeof v === 'bigint' ? `0x${v.toString(16)}` : v));\n\n console.log('[AA][rpc] ->', method, bodyStr);\n\n // Get bundler URL: parameter > runtime config > build-time default > fallback\n const url = bundlerUrl || getBundlerUrl();\n\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: bodyStr\n });\n\n const json: any = await res.json();\n\n if (json.error) {\n console.log('[AA][rpc] <- ERROR:', JSON.stringify(json.error));\n const detail = json.error?.data ? ` | data: ${JSON.stringify(json.error.data)}` : '';\n throw new Error((json.error.message || JSON.stringify(json.error)) + detail);\n }\n\n console.log('[AA][rpc] <- SUCCESS:', JSON.stringify(json.result));\n return json.result;\n}\n","import { bundlerRpc, fetchEntryPointNonce } from '../utils/helpers';\nimport { ENTRYPOINT_V07, ENTRYPOINT_V06 } from './constants';\nimport type { UserOperationV07, UserOperationV06 } from './types';\n\nexport async function sendUserOperationRaw(userOp: UserOperationV07): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V07]);\n return hash;\n}\n\nexport async function sendUserOperationV06Raw(userOp: UserOperationV06): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V06]);\n return hash;\n}\n\nexport async function sendUserOperationWithRetry(\n userOp: UserOperationV07,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV07>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationRaw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.7 after ${maxRetries} attempts`);\n}\n\nexport async function sendUserOperationV06WithRetry(\n userOp: UserOperationV06,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV06>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationV06Raw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.6 after ${maxRetries} attempts`);\n}\n\nexport async function getUserOperationReceipt(userOpHash: `0x${string}`): Promise<any> {\n const receipt = await bundlerRpc('eth_getUserOperationReceipt', [userOpHash]);\n return receipt;\n}\n","/**\n * Provider for viem PublicClient\n * Allows fee-calculation and other modules to access the configured client\n */\n\n// Using 'any' type to avoid direct viem dependency in this file\n// Actual type should be PublicClient from viem\nlet globalPublicClient: any | null = null;\n\n/**\n * Set the global public client for blockchain interactions\n * Should be called during initialization with a viem PublicClient\n */\nexport function setPublicClient(client: any): void {\n globalPublicClient = client;\n}\n\n/**\n * Get the configured public client\n * Throws if not configured\n */\nexport function getPublicClient(): any {\n if (!globalPublicClient) {\n throw new Error(\n '[LumiaPassport] PublicClient not configured. Please provide a publicClient in config ' +\n 'or call setPublicClient() before using fee calculation functions.'\n );\n }\n return globalPublicClient;\n}\n\n/**\n * Check if public client is configured\n */\nexport function hasPublicClient(): boolean {\n return globalPublicClient !== null;\n}\n","/**\n * Universal environment variable access that works in both browser and Node.js\n */\n\ninterface EnvVars {\n [key: string]: string | undefined;\n}\n\n/**\n * Get environment variables from various sources\n * Priority: 1. window.__LUMIA_ENV__ (browser), 2. import.meta.env (Vite), 3. process.env (Node.js)\n */\nfunction getEnvironmentVars(): EnvVars {\n // Try browser environment first (injected by LumiaPassportProvider)\n // @ts-ignore - accessing global window object\n const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n if (win && win.__LUMIA_ENV__) {\n return win.__LUMIA_ENV__;\n }\n\n // Try import.meta.env (ESM/Vite)\n try {\n // @ts-ignore - import.meta may not be available in all environments\n if (import.meta?.env) {\n // @ts-ignore\n return import.meta.env as EnvVars;\n }\n } catch {\n // import.meta not available in this environment\n }\n\n // Try process.env (Node.js/CJS)\n if (typeof process !== 'undefined' && process.env) {\n return process.env;\n }\n\n // Fallback to empty object\n return {};\n}\n\n/**\n * Get a single environment variable\n * @param name - The environment variable name\n * @returns The environment variable value or undefined\n */\nexport function getEnvVar(name: string): string | undefined {\n const env = getEnvironmentVars();\n return env[name];\n}\n\n/**\n * Get an environment variable as boolean\n * @param name - The environment variable name\n * @returns true if value is 'true' or '1', false otherwise\n */\nexport function getEnvVarBool(name: string): boolean {\n const value = getEnvVar(name);\n return value === 'true' || value === '1';\n}\n\n/**\n * Get an environment variable as array\n * @param name - The environment variable name\n * @param separator - Separator character (default: ',')\n * @returns Array of trimmed non-empty strings\n */\nexport function getEnvVarArray(name: string, separator = ','): string[] {\n const value = getEnvVar(name);\n return value ? value.split(separator).map(s => s.trim()).filter(Boolean) : [];\n}\n\n/**\n * Get all environment variables\n * @returns Object containing all environment variables\n */\nexport function getAllEnvVars(): EnvVars {\n return getEnvironmentVars();\n}\n\n/**\n * Check if running in development mode\n * @returns true if NODE_ENV or MODE is 'development'\n */\nexport function isDevelopment(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'development' || env.MODE === 'development';\n}\n\n/**\n * Check if running in production mode\n * @returns true if NODE_ENV or MODE is 'production'\n */\nexport function isProduction(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'production' || env.MODE === 'production';\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { getPublicClient } from './client-provider';\nimport { getEnvVar, getEnvVarBool } from '../utils/env';\n\nexport interface FeeConfig {\n baseFeeBuffer: number;\n priorityFeeBuffer: number;\n fallbackMaxFeePerGas?: bigint;\n fallbackMaxPriorityFeePerGas?: bigint;\n}\n\nexport interface CalculatedFees {\n maxFeePerGas: `0x${string}`;\n maxPriorityFeePerGas: `0x${string}`;\n baseFee?: bigint;\n priorityFee?: bigint;\n bufferedBaseFee?: bigint;\n bufferedPriorityFee?: bigint;\n}\n\nexport const DEFAULT_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 0.5, priorityFeeBuffer: 0.05, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 1_000_000_000n };\nexport const CONSERVATIVE_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 1.0, priorityFeeBuffer: 0.25, fallbackMaxFeePerGas: 5_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n };\n\n/**\n * Check if the current chain requires legacy gas pricing to avoid BASEFEE opcode errors\n */\nfunction shouldUseLegacyGasForChain(): boolean {\n try {\n // Get environment variable for legacy chain IDs (comma-separated list)\n const legacyChainIds = getEnvVar('VITE_LEGACY_GAS_CHAIN_IDS') || getEnvVar('LEGACY_GAS_CHAIN_IDS') || '';\n\n console.log('[Fees] Environment check:', {\n LEGACY_GAS_CHAIN_IDS: legacyChainIds,\n });\n\n // Default to Lumia Beam testnet if no env var is set\n const defaultLegacyChains = '2030232745'; // Lumia Beam testnet\n const chainIdsString = legacyChainIds || defaultLegacyChains;\n\n // Parse chain IDs\n const legacyChains = chainIdsString.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id));\n\n // Get current chain ID from public client\n const publicClient = getPublicClient();\n const currentChainId = publicClient?.chain?.id;\n\n if (!currentChainId) return false;\n\n const shouldUseLegacy = legacyChains.includes(currentChainId);\n\n if (shouldUseLegacy) {\n console.log('[Fees] Chain requires legacy gas pricing:', {\n chainId: currentChainId,\n legacyChains,\n configuredVia: legacyChainIds ? 'LEGACY_GAS_CHAIN_IDS env var' : 'default'\n });\n }\n\n return shouldUseLegacy;\n } catch (error) {\n console.warn('[Fees] Error checking legacy gas chain configuration:', error);\n return false;\n }\n}\n\nexport async function getCurrentBaseFee(): Promise<bigint> {\n const publicClient = getPublicClient();\n const block = await publicClient.getBlock({ blockTag: 'latest' });\n if (block.baseFeePerGas) return block.baseFeePerGas;\n const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex);\n const estimatedBaseFee = (gasPrice * 9n) / 10n; return estimatedBaseFee;\n}\n\nexport async function getCurrentPriorityFee(): Promise<bigint> {\n try { const priorityFeeHex = await bundlerRpc('rundler_maxPriorityFeePerGas', []); const priorityFee = BigInt(priorityFeeHex); if (priorityFee === 0n) return await getFallbackPriorityFee(); return priorityFee; } catch { return await getFallbackPriorityFee(); }\n}\n\nasync function getFallbackPriorityFee(): Promise<bigint> {\n try { const publicClient = getPublicClient(); const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex); return gasPrice / 10n; } catch { return 100_000_000n; }\n}\n\nexport async function calculateLegacyFees(gasPrice?: bigint): Promise<CalculatedFees> {\n try {\n let legacyGasPrice: bigint;\n\n if (gasPrice) {\n legacyGasPrice = gasPrice;\n } else {\n // Get current gas price from network\n const publicClient = getPublicClient();\n const gasPriceHex = await publicClient.getGasPrice();\n legacyGasPrice = BigInt(gasPriceHex);\n }\n\n // For legacy chains, set both maxFeePerGas and maxPriorityFeePerGas to the same value\n // This prevents BASEFEE opcode usage\n const result: CalculatedFees = {\n maxFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n };\n\n console.log('[Fees] Using legacy gas pricing (avoid BASEFEE opcode):', {\n gasPrice: legacyGasPrice.toString(),\n maxFeePerGas: result.maxFeePerGas,\n maxPriorityFeePerGas: result.maxPriorityFeePerGas,\n });\n\n return result;\n } catch (error) {\n console.warn('[Fees] Legacy fee calculation failed, using 1 gwei fallback:', error);\n const fallbackGasPrice = 1_000_000_000n; // 1 gwei\n return {\n maxFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n };\n }\n}\n\nexport async function calculateDynamicFees(config: FeeConfig = DEFAULT_FEE_CONFIG): Promise<CalculatedFees> {\n try {\n // Check environment variable for forced legacy mode\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n\n // Check if current chain should use legacy gas pricing\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) {\n console.log('[Fees] Using legacy gas pricing', forceLegacy ? '(forced by FORCE_LEGACY_GAS env var)' : '(chain requires legacy gas)');\n return await calculateLegacyFees();\n }\n const baseFee = await getCurrentBaseFee(); const bufferedBaseFee = baseFee + (baseFee * BigInt(Math.floor(config.baseFeeBuffer * 1000))) / 1000n;\n const priorityFee = await getCurrentPriorityFee(); const bufferedPriorityFee = priorityFee + (priorityFee * BigInt(Math.floor(config.priorityFeeBuffer * 1000))) / 1000n;\n const maxFeePerGas = bufferedBaseFee + bufferedPriorityFee; const maxPriorityFeePerGas = bufferedPriorityFee;\n return { maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, maxPriorityFeePerGas: `0x${maxPriorityFeePerGas.toString(16)}`, baseFee, priorityFee, bufferedBaseFee, bufferedPriorityFee };\n } catch { return await calculateLegacyFees(); }\n}\n\nexport async function calculateFastFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(3_000_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.75, priorityFeeBuffer: 0.5, fallbackMaxFeePerGas: 3_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n });\n}\n\nexport async function calculateEconomyFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(500_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.27, priorityFeeBuffer: 0.01, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 500_000_000n });\n}\n\nexport async function getFeeEstimates(): Promise<{ economy: CalculatedFees; standard: CalculatedFees; fast: CalculatedFees; }> {\n const [economy, standard, fast] = await Promise.all([ calculateEconomyFees(), calculateDynamicFees(), calculateFastFees() ]);\n return { economy, standard, fast };\n}\n","import { pack2x128, safeToBigInt } from '../utils/helpers';\nimport { calculateDynamicFees, calculateEconomyFees, calculateFastFees } from './fee-calculation';\nimport type { UserOperationV07, UserOperationV06, PackedUserOperationV07 } from './types';\n\nexport const DUMMY_SIGNATURE = `0x${'00'.repeat(65)}` as `0x${string}`;\n\nexport function packUserOperationV07(\n userOp: UserOperationV07,\n includeFactory: boolean,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`\n): PackedUserOperationV07 {\n const initCode = includeFactory && factoryAddress && factoryData ? (((factoryAddress as string) + (factoryData as string).slice(2)) as `0x${string}`) : ('0x' as `0x${string}`);\n const accountGasLimits = pack2x128(safeToBigInt(userOp.verificationGasLimit, '0x1e8480'), safeToBigInt(userOp.callGasLimit, '0x0f4240'));\n const gasFees = pack2x128(safeToBigInt(userOp.maxPriorityFeePerGas, '0x3b9aca00'), safeToBigInt(userOp.maxFeePerGas, '0x3b9aca00'));\n\n // Create paymasterAndData from paymaster and paymasterData fields (V07 format)\n let paymasterAndData: `0x${string}` = '0x';\n if (userOp.paymaster && userOp.paymaster !== '0x') {\n const paymasterAddr = userOp.paymaster.startsWith('0x') ? userOp.paymaster.slice(2) : userOp.paymaster;\n const paymasterData = userOp.paymasterData ? (userOp.paymasterData.startsWith('0x') ? userOp.paymasterData.slice(2) : userOp.paymasterData) : '';\n paymasterAndData = `0x${paymasterAddr}${paymasterData}` as `0x${string}`;\n }\n\n return { sender: userOp.sender, nonce: BigInt(userOp.nonce), initCode, callData: userOp.callData, accountGasLimits, preVerificationGas: safeToBigInt(userOp.preVerificationGas, '0x1d4c0'), gasFees, paymasterAndData, signature: userOp.signature };\n}\n\nexport function createDummyUserOperation(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV07 {\n const userOp: UserOperationV07 = {\n sender,\n nonce,\n callData,\n callGasLimit: '0x493e0', // 300,000\n verificationGasLimit: '0x989680', // 10,000,000 (same as original minVerificationGas)\n preVerificationGas: '0x30d40', // 200,000\n maxFeePerGas: customMaxFeePerGas || '0x3b9aca00',\n maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00',\n signature: DUMMY_SIGNATURE,\n };\n if (includeFactory && factoryAddress && factoryData) { userOp.factory = factoryAddress; userOp.factoryData = factoryData; }\n return userOp;\n}\n\nexport function createDummyUserOperationV06(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV06 {\n let initCode: `0x${string}` = '0x';\n if (includeFactory && factoryAddress && factoryData) {\n const factoryAddrClean = factoryAddress.startsWith('0x') ? factoryAddress.slice(2) : factoryAddress;\n const factoryDataClean = factoryData.startsWith('0x') ? factoryData.slice(2) : factoryData;\n initCode = `0x${factoryAddrClean}${factoryDataClean}` as `0x${string}`;\n }\n return { sender, nonce, initCode, callData, callGasLimit: '0x493e0', verificationGasLimit: '0x989680', preVerificationGas: '0x30d40', maxFeePerGas: customMaxFeePerGas || '0x3b9aca00', maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00', paymasterAndData: '0x', signature: DUMMY_SIGNATURE };\n}\n\nexport async function createUserOperationWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV07> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperation(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n\nexport async function createUserOperationV06WithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV06> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperationV06(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, GasEstimationResult } from './types';\nimport { DUMMY_SIGNATURE, createUserOperationWithDynamicFees } from './utils';\n\nexport async function estimateUserOperationGas(userOp: UserOperationV07, retryWithoutFactory: boolean = true): Promise<GasEstimationResult> {\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [userOp, ENTRYPOINT_V07]); return gas; }\n catch (error) {\n try { await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]); } catch {}\n if (retryWithoutFactory && (userOp.factory || userOp.factoryData)) {\n const errorMsg = String(error);\n if (/AA10 sender already constructed/i.test(errorMsg) || /sender.*is an existing contract.*but initCode is nonempty/i.test(errorMsg)) {\n const userOpWithoutFactory: UserOperationV07 = { ...userOp }; delete userOpWithoutFactory.factory; delete userOpWithoutFactory.factoryData;\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [ userOpWithoutFactory, ENTRYPOINT_V07 ]); return gas; } catch {}\n }\n }\n const isEmptyCallData = !userOp.callData || userOp.callData === '0x';\n // Increased from 300k to 500k to handle deep call chains (5+ levels)\n // With 63/64 rule, 500k provides ~463k gas at depth 5\n const minimalCallGas = isEmptyCallData ? '0x0' : '0x7a120'; // 500,000 for non-empty calls (was 300,000)\n return { callGasLimit: minimalCallGas, verificationGasLimit: '0x989680', preVerificationGas: '0x30d40' };\n }\n}\n\nexport async function estimateUserOperationGasWithSignature(\n userOp: UserOperationV07,\n _getSignature: (opHash: `0x${string}`) => Promise<`0x${string}` | null>,\n _getUserOpHash: (packedOp: any) => Promise<`0x${string}`>,\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult> { const userOpForEstimation: UserOperationV07 = { ...userOp, signature: DUMMY_SIGNATURE }; return estimateUserOperationGas(userOpForEstimation, retryWithoutFactory); }\n\nexport async function estimateUserOperationGasWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard',\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult & { calculatedFees?: any }> {\n const userOp = await createUserOperationWithDynamicFees(sender, nonce, callData, includeFactory, factoryAddress, factoryData, feeType);\n const gasResult = await estimateUserOperationGas(userOp, retryWithoutFactory);\n return { ...gasResult, calculatedFees: { maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, feeType } };\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, SimulationResult } from './types';\n\nexport async function simulateUserOperation(userOp: UserOperationV07): Promise<SimulationResult> {\n const result = await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]);\n return result;\n}\n\nexport async function validateUserOperation(userOp: UserOperationV07): Promise<{ valid: boolean; error?: string }> {\n try { await simulateUserOperation(userOp); return { valid: true }; } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); return { valid: false, error: errorMsg }; }\n}\n"]}
@@ -443,7 +443,7 @@ async function estimateUserOperationGas(userOp, retryWithoutFactory = true) {
443
443
  }
444
444
  }
445
445
  const isEmptyCallData = !userOp.callData || userOp.callData === "0x";
446
- const minimalCallGas = isEmptyCallData ? "0x0" : "0x493e0";
446
+ const minimalCallGas = isEmptyCallData ? "0x0" : "0x7a120";
447
447
  return { callGasLimit: minimalCallGas, verificationGasLimit: "0x989680", preVerificationGas: "0x30d40" };
448
448
  }
449
449
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundler/constants.ts","../../src/utils/helpers.ts","../../src/bundler/submission.ts","../../src/bundler/client-provider.ts","../../src/utils/env.ts","../../src/bundler/fee-calculation.ts","../../src/bundler/utils.ts","../../src/bundler/gas-estimation.ts","../../src/bundler/simulation.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ERC-4337 EntryPoint contract addresses\n */\nexport const ENTRYPOINT_V07 = '0x0000000071727De22E5E9d8BAf0edAc6f37da032' as const;\nexport const ENTRYPOINT_V06 = '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789' as const;\nexport const ENTRYPOINT = ENTRYPOINT_V07;\n","/**\n * Account Abstraction helper utilities\n * Adapted from lumia-passport-ui-kit/src/internal/akHelpers.ts\n */\n\n// Build-time injected URLs (tsup.define)\ndeclare const __LUMIA_BUNDLER_URL__: string;\n\n// Build-time default from .env (will be replaced by tsup define)\nconst BUILD_BUNDLER_URL = (typeof __LUMIA_BUNDLER_URL__ !== 'undefined' && __LUMIA_BUNDLER_URL__) || '';\n\n/**\n * Get bundler URL from runtime config or build-time default\n */\nfunction getBundlerUrl(): string {\n // Priority: window.__LUMIA_SERVICES__ > build-time default > hardcoded fallback\n\n // 1. Browser runtime config from LumiaPassportProvider (window.__LUMIA_SERVICES__)\n if (typeof globalThis !== 'undefined' && (globalThis as any).window) {\n const services = ((globalThis as any).window as any).__LUMIA_SERVICES__;\n if (services?.bundlerUrl) {\n return services.bundlerUrl;\n }\n }\n\n // 2. Build-time injected default (from .env during pnpm build)\n if (BUILD_BUNDLER_URL) {\n return BUILD_BUNDLER_URL;\n }\n\n // 3. Hardcoded fallback\n return 'http://localhost:4337';\n}\n\n/**\n * Precompile address for ecrecover\n * @internal\n */\n// const ECRECOVER_PRECOMPILE = '0x0000000000000000000000000000000000000001' as const;\n\n/**\n * ABI for ecrecover precompile\n * @internal\n */\n// const ECRECOVER_ABI = [\n// {\n// name: 'ecrecover',\n// type: 'function',\n// inputs: [\n// { name: 'hash', type: 'bytes32' },\n// { name: 'v', type: 'uint8' },\n// { name: 'r', type: 'bytes32' },\n// { name: 's', type: 'bytes32' }\n// ],\n// outputs: [{ name: 'addr', type: 'address' }]\n// },\n// ] as const;\n\n/**\n * Safely convert value to BigInt with fallback\n * @param val - Value to convert\n * @param fallback - Fallback value if conversion fails\n */\nexport const safeToBigInt = (val: any, fallback = '0x0'): bigint => {\n try {\n return BigInt(val || fallback);\n } catch {\n return BigInt(fallback);\n }\n};\n\n/**\n * Pack two 128-bit values into single 256-bit value\n * Used for packing gas limits in ERC-4337 v0.7\n * @param hi - High 128 bits\n * @param lo - Low 128 bits\n * @returns Packed 256-bit value as bigint\n */\nexport const pack2x128 = (hi: bigint, lo: bigint): bigint => {\n return (hi << 128n) | (lo & ((1n << 128n) - 1n));\n};\n\n/**\n * Verify signature against expected owner address\n * @param opHash - Operation hash that was signed\n * @param signature - Signature to verify\n * @param expectedOwner - Expected owner address\n */\nexport async function verifySignatureAgainstOwner(\n opHash: `0x${string}`,\n signature: `0x${string}`,\n expectedOwner?: `0x${string}`\n): Promise<void> {\n if (!signature || signature === '0x') return;\n\n try {\n // This will be implemented after we have publicClient from clients module\n // For now, this is a placeholder\n console.log('[AA][sign] Signature verification:', {\n opHash,\n signature,\n expectedOwner,\n });\n } catch (error) {\n console.error('[AA][sign][ERROR] Could not verify signature:', error);\n }\n}\n\n/**\n * Fetch nonce from EntryPoint contract\n * @param account - Account address\n * @param _entryPoint - EntryPoint contract address (unused in placeholder)\n */\nexport async function fetchEntryPointNonce(\n account: `0x${string}`,\n _entryPoint: `0x${string}`\n): Promise<`0x${string}`> {\n // This will be implemented after we have publicClient from clients module\n // For now, return 0x0 as placeholder\n console.log('[AA] fetchEntryPointNonce called for:', account);\n return '0x0';\n}\n\n/**\n * Sanitize UserOperation object by fixing common issues\n * @param userOp - UserOperation to sanitize\n */\nfunction sanitizeUserOperation(userOp: any): any {\n const sanitized = { ...userOp };\n\n // Fix sender field if it's an object (extract address and factory fields)\n if (typeof sanitized.sender === 'object' && sanitized.sender) {\n const senderObj = sanitized.sender;\n\n // Extract the actual sender address\n sanitized.sender = senderObj.sender || senderObj.address || senderObj.smartAccountAddress;\n\n // Extract factory fields if they exist\n if (senderObj.factory) {\n sanitized.factory = senderObj.factory;\n }\n if (senderObj.factoryData) {\n sanitized.factoryData = senderObj.factoryData;\n }\n }\n\n // Ensure all hex fields are valid and properly formatted\n const hexFields = [\n 'sender', 'nonce', 'callData', 'callGasLimit', 'verificationGasLimit',\n 'preVerificationGas', 'maxFeePerGas', 'maxPriorityFeePerGas', 'signature',\n 'factory', 'factoryData', 'paymaster', 'paymasterData',\n 'paymasterVerificationGasLimit', 'paymasterPostOpGasLimit'\n ];\n\n for (const field of hexFields) {\n const value = sanitized[field];\n if (value !== undefined && value !== null) {\n if (typeof value === 'string') {\n if (value === '0x' || value === '') {\n // Convert empty hex to 0x0 for numeric fields, 0x for data fields\n if (['callData', 'factoryData', 'paymasterData', 'signature'].includes(field)) {\n sanitized[field] = '0x';\n } else {\n sanitized[field] = '0x0';\n }\n } else if (field === 'sender' || field === 'factory' || field === 'paymaster') {\n // Address fields should have 0x prefix\n if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n } else if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n }\n }\n }\n\n // Remove undefined/null fields for v0.7\n Object.keys(sanitized).forEach(key => {\n if (sanitized[key] === undefined || sanitized[key] === null) {\n delete sanitized[key];\n }\n });\n\n // Ensure required fields exist with proper defaults\n if (!sanitized.callData) sanitized.callData = '0x';\n if (!sanitized.signature) sanitized.signature = '0x';\n\n return sanitized;\n}\n\n/**\n * Make RPC call to bundler\n * @param method - RPC method name\n * @param params - RPC method parameters\n * @param bundlerUrl - Bundler URL (will be fetched from config if not provided)\n */\nexport async function bundlerRpc(\n method: string,\n params: any[],\n bundlerUrl?: string\n): Promise<any> {\n // Sanitize UserOperation if this is eth_sendUserOperation\n let cleanParams = params;\n if (method === 'eth_sendUserOperation' && params[0]) {\n cleanParams = [sanitizeUserOperation(params[0]), params[1]];\n }\n\n const body = { jsonrpc: '2.0', id: 1, method, params: cleanParams };\n const bodyStr = JSON.stringify(body, (_k, v) => (typeof v === 'bigint' ? `0x${v.toString(16)}` : v));\n\n console.log('[AA][rpc] ->', method, bodyStr);\n\n // Get bundler URL: parameter > runtime config > build-time default > fallback\n const url = bundlerUrl || getBundlerUrl();\n\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: bodyStr\n });\n\n const json: any = await res.json();\n\n if (json.error) {\n console.log('[AA][rpc] <- ERROR:', JSON.stringify(json.error));\n const detail = json.error?.data ? ` | data: ${JSON.stringify(json.error.data)}` : '';\n throw new Error((json.error.message || JSON.stringify(json.error)) + detail);\n }\n\n console.log('[AA][rpc] <- SUCCESS:', JSON.stringify(json.result));\n return json.result;\n}\n","import { bundlerRpc, fetchEntryPointNonce } from '../utils/helpers';\nimport { ENTRYPOINT_V07, ENTRYPOINT_V06 } from './constants';\nimport type { UserOperationV07, UserOperationV06 } from './types';\n\nexport async function sendUserOperationRaw(userOp: UserOperationV07): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V07]);\n return hash;\n}\n\nexport async function sendUserOperationV06Raw(userOp: UserOperationV06): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V06]);\n return hash;\n}\n\nexport async function sendUserOperationWithRetry(\n userOp: UserOperationV07,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV07>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationRaw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.7 after ${maxRetries} attempts`);\n}\n\nexport async function sendUserOperationV06WithRetry(\n userOp: UserOperationV06,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV06>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationV06Raw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.6 after ${maxRetries} attempts`);\n}\n\nexport async function getUserOperationReceipt(userOpHash: `0x${string}`): Promise<any> {\n const receipt = await bundlerRpc('eth_getUserOperationReceipt', [userOpHash]);\n return receipt;\n}\n","/**\n * Provider for viem PublicClient\n * Allows fee-calculation and other modules to access the configured client\n */\n\n// Using 'any' type to avoid direct viem dependency in this file\n// Actual type should be PublicClient from viem\nlet globalPublicClient: any | null = null;\n\n/**\n * Set the global public client for blockchain interactions\n * Should be called during initialization with a viem PublicClient\n */\nexport function setPublicClient(client: any): void {\n globalPublicClient = client;\n}\n\n/**\n * Get the configured public client\n * Throws if not configured\n */\nexport function getPublicClient(): any {\n if (!globalPublicClient) {\n throw new Error(\n '[LumiaPassport] PublicClient not configured. Please provide a publicClient in config ' +\n 'or call setPublicClient() before using fee calculation functions.'\n );\n }\n return globalPublicClient;\n}\n\n/**\n * Check if public client is configured\n */\nexport function hasPublicClient(): boolean {\n return globalPublicClient !== null;\n}\n","/**\n * Universal environment variable access that works in both browser and Node.js\n */\n\ninterface EnvVars {\n [key: string]: string | undefined;\n}\n\n/**\n * Get environment variables from various sources\n * Priority: 1. window.__LUMIA_ENV__ (browser), 2. import.meta.env (Vite), 3. process.env (Node.js)\n */\nfunction getEnvironmentVars(): EnvVars {\n // Try browser environment first (injected by LumiaPassportProvider)\n // @ts-ignore - accessing global window object\n const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n if (win && win.__LUMIA_ENV__) {\n return win.__LUMIA_ENV__;\n }\n\n // Try import.meta.env (ESM/Vite)\n try {\n // @ts-ignore - import.meta may not be available in all environments\n if (import.meta?.env) {\n // @ts-ignore\n return import.meta.env as EnvVars;\n }\n } catch {\n // import.meta not available in this environment\n }\n\n // Try process.env (Node.js/CJS)\n if (typeof process !== 'undefined' && process.env) {\n return process.env;\n }\n\n // Fallback to empty object\n return {};\n}\n\n/**\n * Get a single environment variable\n * @param name - The environment variable name\n * @returns The environment variable value or undefined\n */\nexport function getEnvVar(name: string): string | undefined {\n const env = getEnvironmentVars();\n return env[name];\n}\n\n/**\n * Get an environment variable as boolean\n * @param name - The environment variable name\n * @returns true if value is 'true' or '1', false otherwise\n */\nexport function getEnvVarBool(name: string): boolean {\n const value = getEnvVar(name);\n return value === 'true' || value === '1';\n}\n\n/**\n * Get an environment variable as array\n * @param name - The environment variable name\n * @param separator - Separator character (default: ',')\n * @returns Array of trimmed non-empty strings\n */\nexport function getEnvVarArray(name: string, separator = ','): string[] {\n const value = getEnvVar(name);\n return value ? value.split(separator).map(s => s.trim()).filter(Boolean) : [];\n}\n\n/**\n * Get all environment variables\n * @returns Object containing all environment variables\n */\nexport function getAllEnvVars(): EnvVars {\n return getEnvironmentVars();\n}\n\n/**\n * Check if running in development mode\n * @returns true if NODE_ENV or MODE is 'development'\n */\nexport function isDevelopment(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'development' || env.MODE === 'development';\n}\n\n/**\n * Check if running in production mode\n * @returns true if NODE_ENV or MODE is 'production'\n */\nexport function isProduction(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'production' || env.MODE === 'production';\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { getPublicClient } from './client-provider';\nimport { getEnvVar, getEnvVarBool } from '../utils/env';\n\nexport interface FeeConfig {\n baseFeeBuffer: number;\n priorityFeeBuffer: number;\n fallbackMaxFeePerGas?: bigint;\n fallbackMaxPriorityFeePerGas?: bigint;\n}\n\nexport interface CalculatedFees {\n maxFeePerGas: `0x${string}`;\n maxPriorityFeePerGas: `0x${string}`;\n baseFee?: bigint;\n priorityFee?: bigint;\n bufferedBaseFee?: bigint;\n bufferedPriorityFee?: bigint;\n}\n\nexport const DEFAULT_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 0.5, priorityFeeBuffer: 0.05, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 1_000_000_000n };\nexport const CONSERVATIVE_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 1.0, priorityFeeBuffer: 0.25, fallbackMaxFeePerGas: 5_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n };\n\n/**\n * Check if the current chain requires legacy gas pricing to avoid BASEFEE opcode errors\n */\nfunction shouldUseLegacyGasForChain(): boolean {\n try {\n // Get environment variable for legacy chain IDs (comma-separated list)\n const legacyChainIds = getEnvVar('VITE_LEGACY_GAS_CHAIN_IDS') || getEnvVar('LEGACY_GAS_CHAIN_IDS') || '';\n\n console.log('[Fees] Environment check:', {\n LEGACY_GAS_CHAIN_IDS: legacyChainIds,\n });\n\n // Default to Lumia Beam testnet if no env var is set\n const defaultLegacyChains = '2030232745'; // Lumia Beam testnet\n const chainIdsString = legacyChainIds || defaultLegacyChains;\n\n // Parse chain IDs\n const legacyChains = chainIdsString.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id));\n\n // Get current chain ID from public client\n const publicClient = getPublicClient();\n const currentChainId = publicClient?.chain?.id;\n\n if (!currentChainId) return false;\n\n const shouldUseLegacy = legacyChains.includes(currentChainId);\n\n if (shouldUseLegacy) {\n console.log('[Fees] Chain requires legacy gas pricing:', {\n chainId: currentChainId,\n legacyChains,\n configuredVia: legacyChainIds ? 'LEGACY_GAS_CHAIN_IDS env var' : 'default'\n });\n }\n\n return shouldUseLegacy;\n } catch (error) {\n console.warn('[Fees] Error checking legacy gas chain configuration:', error);\n return false;\n }\n}\n\nexport async function getCurrentBaseFee(): Promise<bigint> {\n const publicClient = getPublicClient();\n const block = await publicClient.getBlock({ blockTag: 'latest' });\n if (block.baseFeePerGas) return block.baseFeePerGas;\n const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex);\n const estimatedBaseFee = (gasPrice * 9n) / 10n; return estimatedBaseFee;\n}\n\nexport async function getCurrentPriorityFee(): Promise<bigint> {\n try { const priorityFeeHex = await bundlerRpc('rundler_maxPriorityFeePerGas', []); const priorityFee = BigInt(priorityFeeHex); if (priorityFee === 0n) return await getFallbackPriorityFee(); return priorityFee; } catch { return await getFallbackPriorityFee(); }\n}\n\nasync function getFallbackPriorityFee(): Promise<bigint> {\n try { const publicClient = getPublicClient(); const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex); return gasPrice / 10n; } catch { return 100_000_000n; }\n}\n\nexport async function calculateLegacyFees(gasPrice?: bigint): Promise<CalculatedFees> {\n try {\n let legacyGasPrice: bigint;\n\n if (gasPrice) {\n legacyGasPrice = gasPrice;\n } else {\n // Get current gas price from network\n const publicClient = getPublicClient();\n const gasPriceHex = await publicClient.getGasPrice();\n legacyGasPrice = BigInt(gasPriceHex);\n }\n\n // For legacy chains, set both maxFeePerGas and maxPriorityFeePerGas to the same value\n // This prevents BASEFEE opcode usage\n const result: CalculatedFees = {\n maxFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n };\n\n console.log('[Fees] Using legacy gas pricing (avoid BASEFEE opcode):', {\n gasPrice: legacyGasPrice.toString(),\n maxFeePerGas: result.maxFeePerGas,\n maxPriorityFeePerGas: result.maxPriorityFeePerGas,\n });\n\n return result;\n } catch (error) {\n console.warn('[Fees] Legacy fee calculation failed, using 1 gwei fallback:', error);\n const fallbackGasPrice = 1_000_000_000n; // 1 gwei\n return {\n maxFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n };\n }\n}\n\nexport async function calculateDynamicFees(config: FeeConfig = DEFAULT_FEE_CONFIG): Promise<CalculatedFees> {\n try {\n // Check environment variable for forced legacy mode\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n\n // Check if current chain should use legacy gas pricing\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) {\n console.log('[Fees] Using legacy gas pricing', forceLegacy ? '(forced by FORCE_LEGACY_GAS env var)' : '(chain requires legacy gas)');\n return await calculateLegacyFees();\n }\n const baseFee = await getCurrentBaseFee(); const bufferedBaseFee = baseFee + (baseFee * BigInt(Math.floor(config.baseFeeBuffer * 1000))) / 1000n;\n const priorityFee = await getCurrentPriorityFee(); const bufferedPriorityFee = priorityFee + (priorityFee * BigInt(Math.floor(config.priorityFeeBuffer * 1000))) / 1000n;\n const maxFeePerGas = bufferedBaseFee + bufferedPriorityFee; const maxPriorityFeePerGas = bufferedPriorityFee;\n return { maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, maxPriorityFeePerGas: `0x${maxPriorityFeePerGas.toString(16)}`, baseFee, priorityFee, bufferedBaseFee, bufferedPriorityFee };\n } catch { return await calculateLegacyFees(); }\n}\n\nexport async function calculateFastFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(3_000_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.75, priorityFeeBuffer: 0.5, fallbackMaxFeePerGas: 3_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n });\n}\n\nexport async function calculateEconomyFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(500_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.27, priorityFeeBuffer: 0.01, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 500_000_000n });\n}\n\nexport async function getFeeEstimates(): Promise<{ economy: CalculatedFees; standard: CalculatedFees; fast: CalculatedFees; }> {\n const [economy, standard, fast] = await Promise.all([ calculateEconomyFees(), calculateDynamicFees(), calculateFastFees() ]);\n return { economy, standard, fast };\n}\n","import { pack2x128, safeToBigInt } from '../utils/helpers';\nimport { calculateDynamicFees, calculateEconomyFees, calculateFastFees } from './fee-calculation';\nimport type { UserOperationV07, UserOperationV06, PackedUserOperationV07 } from './types';\n\nexport const DUMMY_SIGNATURE = `0x${'00'.repeat(65)}` as `0x${string}`;\n\nexport function packUserOperationV07(\n userOp: UserOperationV07,\n includeFactory: boolean,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`\n): PackedUserOperationV07 {\n const initCode = includeFactory && factoryAddress && factoryData ? (((factoryAddress as string) + (factoryData as string).slice(2)) as `0x${string}`) : ('0x' as `0x${string}`);\n const accountGasLimits = pack2x128(safeToBigInt(userOp.verificationGasLimit, '0x1e8480'), safeToBigInt(userOp.callGasLimit, '0x0f4240'));\n const gasFees = pack2x128(safeToBigInt(userOp.maxPriorityFeePerGas, '0x3b9aca00'), safeToBigInt(userOp.maxFeePerGas, '0x3b9aca00'));\n\n // Create paymasterAndData from paymaster and paymasterData fields (V07 format)\n let paymasterAndData: `0x${string}` = '0x';\n if (userOp.paymaster && userOp.paymaster !== '0x') {\n const paymasterAddr = userOp.paymaster.startsWith('0x') ? userOp.paymaster.slice(2) : userOp.paymaster;\n const paymasterData = userOp.paymasterData ? (userOp.paymasterData.startsWith('0x') ? userOp.paymasterData.slice(2) : userOp.paymasterData) : '';\n paymasterAndData = `0x${paymasterAddr}${paymasterData}` as `0x${string}`;\n }\n\n return { sender: userOp.sender, nonce: BigInt(userOp.nonce), initCode, callData: userOp.callData, accountGasLimits, preVerificationGas: safeToBigInt(userOp.preVerificationGas, '0x1d4c0'), gasFees, paymasterAndData, signature: userOp.signature };\n}\n\nexport function createDummyUserOperation(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV07 {\n const userOp: UserOperationV07 = {\n sender,\n nonce,\n callData,\n callGasLimit: '0x493e0', // 300,000\n verificationGasLimit: '0x989680', // 10,000,000 (same as original minVerificationGas)\n preVerificationGas: '0x30d40', // 200,000\n maxFeePerGas: customMaxFeePerGas || '0x3b9aca00',\n maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00',\n signature: DUMMY_SIGNATURE,\n };\n if (includeFactory && factoryAddress && factoryData) { userOp.factory = factoryAddress; userOp.factoryData = factoryData; }\n return userOp;\n}\n\nexport function createDummyUserOperationV06(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV06 {\n let initCode: `0x${string}` = '0x';\n if (includeFactory && factoryAddress && factoryData) {\n const factoryAddrClean = factoryAddress.startsWith('0x') ? factoryAddress.slice(2) : factoryAddress;\n const factoryDataClean = factoryData.startsWith('0x') ? factoryData.slice(2) : factoryData;\n initCode = `0x${factoryAddrClean}${factoryDataClean}` as `0x${string}`;\n }\n return { sender, nonce, initCode, callData, callGasLimit: '0x493e0', verificationGasLimit: '0x989680', preVerificationGas: '0x30d40', maxFeePerGas: customMaxFeePerGas || '0x3b9aca00', maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00', paymasterAndData: '0x', signature: DUMMY_SIGNATURE };\n}\n\nexport async function createUserOperationWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV07> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperation(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n\nexport async function createUserOperationV06WithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV06> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperationV06(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, GasEstimationResult } from './types';\nimport { DUMMY_SIGNATURE, createUserOperationWithDynamicFees } from './utils';\n\nexport async function estimateUserOperationGas(userOp: UserOperationV07, retryWithoutFactory: boolean = true): Promise<GasEstimationResult> {\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [userOp, ENTRYPOINT_V07]); return gas; }\n catch (error) {\n try { await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]); } catch {}\n if (retryWithoutFactory && (userOp.factory || userOp.factoryData)) {\n const errorMsg = String(error);\n if (/AA10 sender already constructed/i.test(errorMsg) || /sender.*is an existing contract.*but initCode is nonempty/i.test(errorMsg)) {\n const userOpWithoutFactory: UserOperationV07 = { ...userOp }; delete userOpWithoutFactory.factory; delete userOpWithoutFactory.factoryData;\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [ userOpWithoutFactory, ENTRYPOINT_V07 ]); return gas; } catch {}\n }\n }\n const isEmptyCallData = !userOp.callData || userOp.callData === '0x';\n const minimalCallGas = isEmptyCallData ? '0x0' : '0x493e0'; // 300,000 for non-empty calls\n return { callGasLimit: minimalCallGas, verificationGasLimit: '0x989680', preVerificationGas: '0x30d40' };\n }\n}\n\nexport async function estimateUserOperationGasWithSignature(\n userOp: UserOperationV07,\n _getSignature: (opHash: `0x${string}`) => Promise<`0x${string}` | null>,\n _getUserOpHash: (packedOp: any) => Promise<`0x${string}`>,\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult> { const userOpForEstimation: UserOperationV07 = { ...userOp, signature: DUMMY_SIGNATURE }; return estimateUserOperationGas(userOpForEstimation, retryWithoutFactory); }\n\nexport async function estimateUserOperationGasWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard',\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult & { calculatedFees?: any }> {\n const userOp = await createUserOperationWithDynamicFees(sender, nonce, callData, includeFactory, factoryAddress, factoryData, feeType);\n const gasResult = await estimateUserOperationGas(userOp, retryWithoutFactory);\n return { ...gasResult, calculatedFees: { maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, feeType } };\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, SimulationResult } from './types';\n\nexport async function simulateUserOperation(userOp: UserOperationV07): Promise<SimulationResult> {\n const result = await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]);\n return result;\n}\n\nexport async function validateUserOperation(userOp: UserOperationV07): Promise<{ valid: boolean; error?: string }> {\n try { await simulateUserOperation(userOp); return { valid: true }; } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); return { valid: false, error: errorMsg }; }\n}\n"]}
1
+ {"version":3,"sources":["../../src/bundler/constants.ts","../../src/utils/helpers.ts","../../src/bundler/submission.ts","../../src/bundler/client-provider.ts","../../src/utils/env.ts","../../src/bundler/fee-calculation.ts","../../src/bundler/utils.ts","../../src/bundler/gas-estimation.ts","../../src/bundler/simulation.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ERC-4337 EntryPoint contract addresses\n */\nexport const ENTRYPOINT_V07 = '0x0000000071727De22E5E9d8BAf0edAc6f37da032' as const;\nexport const ENTRYPOINT_V06 = '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789' as const;\nexport const ENTRYPOINT = ENTRYPOINT_V07;\n","/**\n * Account Abstraction helper utilities\n * Adapted from lumia-passport-ui-kit/src/internal/akHelpers.ts\n */\n\n// Build-time injected URLs (tsup.define)\ndeclare const __LUMIA_BUNDLER_URL__: string;\n\n// Build-time default from .env (will be replaced by tsup define)\nconst BUILD_BUNDLER_URL = (typeof __LUMIA_BUNDLER_URL__ !== 'undefined' && __LUMIA_BUNDLER_URL__) || '';\n\n/**\n * Get bundler URL from runtime config or build-time default\n */\nfunction getBundlerUrl(): string {\n // Priority: window.__LUMIA_SERVICES__ > build-time default > hardcoded fallback\n\n // 1. Browser runtime config from LumiaPassportProvider (window.__LUMIA_SERVICES__)\n if (typeof globalThis !== 'undefined' && (globalThis as any).window) {\n const services = ((globalThis as any).window as any).__LUMIA_SERVICES__;\n if (services?.bundlerUrl) {\n return services.bundlerUrl;\n }\n }\n\n // 2. Build-time injected default (from .env during pnpm build)\n if (BUILD_BUNDLER_URL) {\n return BUILD_BUNDLER_URL;\n }\n\n // 3. Hardcoded fallback\n return 'http://localhost:4337';\n}\n\n/**\n * Precompile address for ecrecover\n * @internal\n */\n// const ECRECOVER_PRECOMPILE = '0x0000000000000000000000000000000000000001' as const;\n\n/**\n * ABI for ecrecover precompile\n * @internal\n */\n// const ECRECOVER_ABI = [\n// {\n// name: 'ecrecover',\n// type: 'function',\n// inputs: [\n// { name: 'hash', type: 'bytes32' },\n// { name: 'v', type: 'uint8' },\n// { name: 'r', type: 'bytes32' },\n// { name: 's', type: 'bytes32' }\n// ],\n// outputs: [{ name: 'addr', type: 'address' }]\n// },\n// ] as const;\n\n/**\n * Safely convert value to BigInt with fallback\n * @param val - Value to convert\n * @param fallback - Fallback value if conversion fails\n */\nexport const safeToBigInt = (val: any, fallback = '0x0'): bigint => {\n try {\n return BigInt(val || fallback);\n } catch {\n return BigInt(fallback);\n }\n};\n\n/**\n * Pack two 128-bit values into single 256-bit value\n * Used for packing gas limits in ERC-4337 v0.7\n * @param hi - High 128 bits\n * @param lo - Low 128 bits\n * @returns Packed 256-bit value as bigint\n */\nexport const pack2x128 = (hi: bigint, lo: bigint): bigint => {\n return (hi << 128n) | (lo & ((1n << 128n) - 1n));\n};\n\n/**\n * Verify signature against expected owner address\n * @param opHash - Operation hash that was signed\n * @param signature - Signature to verify\n * @param expectedOwner - Expected owner address\n */\nexport async function verifySignatureAgainstOwner(\n opHash: `0x${string}`,\n signature: `0x${string}`,\n expectedOwner?: `0x${string}`\n): Promise<void> {\n if (!signature || signature === '0x') return;\n\n try {\n // This will be implemented after we have publicClient from clients module\n // For now, this is a placeholder\n console.log('[AA][sign] Signature verification:', {\n opHash,\n signature,\n expectedOwner,\n });\n } catch (error) {\n console.error('[AA][sign][ERROR] Could not verify signature:', error);\n }\n}\n\n/**\n * Fetch nonce from EntryPoint contract\n * @param account - Account address\n * @param _entryPoint - EntryPoint contract address (unused in placeholder)\n */\nexport async function fetchEntryPointNonce(\n account: `0x${string}`,\n _entryPoint: `0x${string}`\n): Promise<`0x${string}`> {\n // This will be implemented after we have publicClient from clients module\n // For now, return 0x0 as placeholder\n console.log('[AA] fetchEntryPointNonce called for:', account);\n return '0x0';\n}\n\n/**\n * Sanitize UserOperation object by fixing common issues\n * @param userOp - UserOperation to sanitize\n */\nfunction sanitizeUserOperation(userOp: any): any {\n const sanitized = { ...userOp };\n\n // Fix sender field if it's an object (extract address and factory fields)\n if (typeof sanitized.sender === 'object' && sanitized.sender) {\n const senderObj = sanitized.sender;\n\n // Extract the actual sender address\n sanitized.sender = senderObj.sender || senderObj.address || senderObj.smartAccountAddress;\n\n // Extract factory fields if they exist\n if (senderObj.factory) {\n sanitized.factory = senderObj.factory;\n }\n if (senderObj.factoryData) {\n sanitized.factoryData = senderObj.factoryData;\n }\n }\n\n // Ensure all hex fields are valid and properly formatted\n const hexFields = [\n 'sender', 'nonce', 'callData', 'callGasLimit', 'verificationGasLimit',\n 'preVerificationGas', 'maxFeePerGas', 'maxPriorityFeePerGas', 'signature',\n 'factory', 'factoryData', 'paymaster', 'paymasterData',\n 'paymasterVerificationGasLimit', 'paymasterPostOpGasLimit'\n ];\n\n for (const field of hexFields) {\n const value = sanitized[field];\n if (value !== undefined && value !== null) {\n if (typeof value === 'string') {\n if (value === '0x' || value === '') {\n // Convert empty hex to 0x0 for numeric fields, 0x for data fields\n if (['callData', 'factoryData', 'paymasterData', 'signature'].includes(field)) {\n sanitized[field] = '0x';\n } else {\n sanitized[field] = '0x0';\n }\n } else if (field === 'sender' || field === 'factory' || field === 'paymaster') {\n // Address fields should have 0x prefix\n if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n } else if (!value.startsWith('0x')) {\n sanitized[field] = `0x${value}`;\n }\n }\n }\n }\n\n // Remove undefined/null fields for v0.7\n Object.keys(sanitized).forEach(key => {\n if (sanitized[key] === undefined || sanitized[key] === null) {\n delete sanitized[key];\n }\n });\n\n // Ensure required fields exist with proper defaults\n if (!sanitized.callData) sanitized.callData = '0x';\n if (!sanitized.signature) sanitized.signature = '0x';\n\n return sanitized;\n}\n\n/**\n * Make RPC call to bundler\n * @param method - RPC method name\n * @param params - RPC method parameters\n * @param bundlerUrl - Bundler URL (will be fetched from config if not provided)\n */\nexport async function bundlerRpc(\n method: string,\n params: any[],\n bundlerUrl?: string\n): Promise<any> {\n // Sanitize UserOperation if this is eth_sendUserOperation\n let cleanParams = params;\n if (method === 'eth_sendUserOperation' && params[0]) {\n cleanParams = [sanitizeUserOperation(params[0]), params[1]];\n }\n\n const body = { jsonrpc: '2.0', id: 1, method, params: cleanParams };\n const bodyStr = JSON.stringify(body, (_k, v) => (typeof v === 'bigint' ? `0x${v.toString(16)}` : v));\n\n console.log('[AA][rpc] ->', method, bodyStr);\n\n // Get bundler URL: parameter > runtime config > build-time default > fallback\n const url = bundlerUrl || getBundlerUrl();\n\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: bodyStr\n });\n\n const json: any = await res.json();\n\n if (json.error) {\n console.log('[AA][rpc] <- ERROR:', JSON.stringify(json.error));\n const detail = json.error?.data ? ` | data: ${JSON.stringify(json.error.data)}` : '';\n throw new Error((json.error.message || JSON.stringify(json.error)) + detail);\n }\n\n console.log('[AA][rpc] <- SUCCESS:', JSON.stringify(json.result));\n return json.result;\n}\n","import { bundlerRpc, fetchEntryPointNonce } from '../utils/helpers';\nimport { ENTRYPOINT_V07, ENTRYPOINT_V06 } from './constants';\nimport type { UserOperationV07, UserOperationV06 } from './types';\n\nexport async function sendUserOperationRaw(userOp: UserOperationV07): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V07]);\n return hash;\n}\n\nexport async function sendUserOperationV06Raw(userOp: UserOperationV06): Promise<`0x${string}`> {\n const hash = await bundlerRpc('eth_sendUserOperation', [userOp, ENTRYPOINT_V06]);\n return hash;\n}\n\nexport async function sendUserOperationWithRetry(\n userOp: UserOperationV07,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV07>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationRaw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V07); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.7 after ${maxRetries} attempts`);\n}\n\nexport async function sendUserOperationV06WithRetry(\n userOp: UserOperationV06,\n resigner: (nonce: `0x${string}`) => Promise<UserOperationV06>,\n maxRetries: number = 1\n): Promise<`0x${string}`> {\n let attempts = 0; let currentUserOp = userOp;\n while (attempts < maxRetries) {\n try { return await sendUserOperationV06Raw(currentUserOp); }\n catch (error: any) { attempts++; const errorMsg = String(error?.message || error); if (attempts >= maxRetries) throw error; if (/nonce too low|nonce.*invalid/i.test(errorMsg)) { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } else if (/replacement.*underpriced/i.test(errorMsg)) { const increasedMaxFeePerGas = `0x${((BigInt(currentUserOp.maxFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; const increasedMaxPriorityFeePerGas = `0x${((BigInt(currentUserOp.maxPriorityFeePerGas) * 110n) / 100n).toString(16)}` as `0x${string}`; currentUserOp = { ...currentUserOp, maxFeePerGas: increasedMaxFeePerGas, maxPriorityFeePerGas: increasedMaxPriorityFeePerGas }; currentUserOp = await resigner(currentUserOp.nonce); } else { const newNonce = await fetchEntryPointNonce(userOp.sender, ENTRYPOINT_V06); currentUserOp = await resigner(newNonce); } await new Promise(r => setTimeout(r, 1000 * attempts)); }\n }\n throw new Error(`Failed to send UserOperation v0.6 after ${maxRetries} attempts`);\n}\n\nexport async function getUserOperationReceipt(userOpHash: `0x${string}`): Promise<any> {\n const receipt = await bundlerRpc('eth_getUserOperationReceipt', [userOpHash]);\n return receipt;\n}\n","/**\n * Provider for viem PublicClient\n * Allows fee-calculation and other modules to access the configured client\n */\n\n// Using 'any' type to avoid direct viem dependency in this file\n// Actual type should be PublicClient from viem\nlet globalPublicClient: any | null = null;\n\n/**\n * Set the global public client for blockchain interactions\n * Should be called during initialization with a viem PublicClient\n */\nexport function setPublicClient(client: any): void {\n globalPublicClient = client;\n}\n\n/**\n * Get the configured public client\n * Throws if not configured\n */\nexport function getPublicClient(): any {\n if (!globalPublicClient) {\n throw new Error(\n '[LumiaPassport] PublicClient not configured. Please provide a publicClient in config ' +\n 'or call setPublicClient() before using fee calculation functions.'\n );\n }\n return globalPublicClient;\n}\n\n/**\n * Check if public client is configured\n */\nexport function hasPublicClient(): boolean {\n return globalPublicClient !== null;\n}\n","/**\n * Universal environment variable access that works in both browser and Node.js\n */\n\ninterface EnvVars {\n [key: string]: string | undefined;\n}\n\n/**\n * Get environment variables from various sources\n * Priority: 1. window.__LUMIA_ENV__ (browser), 2. import.meta.env (Vite), 3. process.env (Node.js)\n */\nfunction getEnvironmentVars(): EnvVars {\n // Try browser environment first (injected by LumiaPassportProvider)\n // @ts-ignore - accessing global window object\n const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n if (win && win.__LUMIA_ENV__) {\n return win.__LUMIA_ENV__;\n }\n\n // Try import.meta.env (ESM/Vite)\n try {\n // @ts-ignore - import.meta may not be available in all environments\n if (import.meta?.env) {\n // @ts-ignore\n return import.meta.env as EnvVars;\n }\n } catch {\n // import.meta not available in this environment\n }\n\n // Try process.env (Node.js/CJS)\n if (typeof process !== 'undefined' && process.env) {\n return process.env;\n }\n\n // Fallback to empty object\n return {};\n}\n\n/**\n * Get a single environment variable\n * @param name - The environment variable name\n * @returns The environment variable value or undefined\n */\nexport function getEnvVar(name: string): string | undefined {\n const env = getEnvironmentVars();\n return env[name];\n}\n\n/**\n * Get an environment variable as boolean\n * @param name - The environment variable name\n * @returns true if value is 'true' or '1', false otherwise\n */\nexport function getEnvVarBool(name: string): boolean {\n const value = getEnvVar(name);\n return value === 'true' || value === '1';\n}\n\n/**\n * Get an environment variable as array\n * @param name - The environment variable name\n * @param separator - Separator character (default: ',')\n * @returns Array of trimmed non-empty strings\n */\nexport function getEnvVarArray(name: string, separator = ','): string[] {\n const value = getEnvVar(name);\n return value ? value.split(separator).map(s => s.trim()).filter(Boolean) : [];\n}\n\n/**\n * Get all environment variables\n * @returns Object containing all environment variables\n */\nexport function getAllEnvVars(): EnvVars {\n return getEnvironmentVars();\n}\n\n/**\n * Check if running in development mode\n * @returns true if NODE_ENV or MODE is 'development'\n */\nexport function isDevelopment(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'development' || env.MODE === 'development';\n}\n\n/**\n * Check if running in production mode\n * @returns true if NODE_ENV or MODE is 'production'\n */\nexport function isProduction(): boolean {\n const env = getEnvironmentVars();\n return env.NODE_ENV === 'production' || env.MODE === 'production';\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { getPublicClient } from './client-provider';\nimport { getEnvVar, getEnvVarBool } from '../utils/env';\n\nexport interface FeeConfig {\n baseFeeBuffer: number;\n priorityFeeBuffer: number;\n fallbackMaxFeePerGas?: bigint;\n fallbackMaxPriorityFeePerGas?: bigint;\n}\n\nexport interface CalculatedFees {\n maxFeePerGas: `0x${string}`;\n maxPriorityFeePerGas: `0x${string}`;\n baseFee?: bigint;\n priorityFee?: bigint;\n bufferedBaseFee?: bigint;\n bufferedPriorityFee?: bigint;\n}\n\nexport const DEFAULT_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 0.5, priorityFeeBuffer: 0.05, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 1_000_000_000n };\nexport const CONSERVATIVE_FEE_CONFIG: FeeConfig = { baseFeeBuffer: 1.0, priorityFeeBuffer: 0.25, fallbackMaxFeePerGas: 5_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n };\n\n/**\n * Check if the current chain requires legacy gas pricing to avoid BASEFEE opcode errors\n */\nfunction shouldUseLegacyGasForChain(): boolean {\n try {\n // Get environment variable for legacy chain IDs (comma-separated list)\n const legacyChainIds = getEnvVar('VITE_LEGACY_GAS_CHAIN_IDS') || getEnvVar('LEGACY_GAS_CHAIN_IDS') || '';\n\n console.log('[Fees] Environment check:', {\n LEGACY_GAS_CHAIN_IDS: legacyChainIds,\n });\n\n // Default to Lumia Beam testnet if no env var is set\n const defaultLegacyChains = '2030232745'; // Lumia Beam testnet\n const chainIdsString = legacyChainIds || defaultLegacyChains;\n\n // Parse chain IDs\n const legacyChains = chainIdsString.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id));\n\n // Get current chain ID from public client\n const publicClient = getPublicClient();\n const currentChainId = publicClient?.chain?.id;\n\n if (!currentChainId) return false;\n\n const shouldUseLegacy = legacyChains.includes(currentChainId);\n\n if (shouldUseLegacy) {\n console.log('[Fees] Chain requires legacy gas pricing:', {\n chainId: currentChainId,\n legacyChains,\n configuredVia: legacyChainIds ? 'LEGACY_GAS_CHAIN_IDS env var' : 'default'\n });\n }\n\n return shouldUseLegacy;\n } catch (error) {\n console.warn('[Fees] Error checking legacy gas chain configuration:', error);\n return false;\n }\n}\n\nexport async function getCurrentBaseFee(): Promise<bigint> {\n const publicClient = getPublicClient();\n const block = await publicClient.getBlock({ blockTag: 'latest' });\n if (block.baseFeePerGas) return block.baseFeePerGas;\n const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex);\n const estimatedBaseFee = (gasPrice * 9n) / 10n; return estimatedBaseFee;\n}\n\nexport async function getCurrentPriorityFee(): Promise<bigint> {\n try { const priorityFeeHex = await bundlerRpc('rundler_maxPriorityFeePerGas', []); const priorityFee = BigInt(priorityFeeHex); if (priorityFee === 0n) return await getFallbackPriorityFee(); return priorityFee; } catch { return await getFallbackPriorityFee(); }\n}\n\nasync function getFallbackPriorityFee(): Promise<bigint> {\n try { const publicClient = getPublicClient(); const gasPriceHex = await publicClient.getGasPrice(); const gasPrice = BigInt(gasPriceHex); return gasPrice / 10n; } catch { return 100_000_000n; }\n}\n\nexport async function calculateLegacyFees(gasPrice?: bigint): Promise<CalculatedFees> {\n try {\n let legacyGasPrice: bigint;\n\n if (gasPrice) {\n legacyGasPrice = gasPrice;\n } else {\n // Get current gas price from network\n const publicClient = getPublicClient();\n const gasPriceHex = await publicClient.getGasPrice();\n legacyGasPrice = BigInt(gasPriceHex);\n }\n\n // For legacy chains, set both maxFeePerGas and maxPriorityFeePerGas to the same value\n // This prevents BASEFEE opcode usage\n const result: CalculatedFees = {\n maxFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${legacyGasPrice.toString(16)}`,\n };\n\n console.log('[Fees] Using legacy gas pricing (avoid BASEFEE opcode):', {\n gasPrice: legacyGasPrice.toString(),\n maxFeePerGas: result.maxFeePerGas,\n maxPriorityFeePerGas: result.maxPriorityFeePerGas,\n });\n\n return result;\n } catch (error) {\n console.warn('[Fees] Legacy fee calculation failed, using 1 gwei fallback:', error);\n const fallbackGasPrice = 1_000_000_000n; // 1 gwei\n return {\n maxFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n maxPriorityFeePerGas: `0x${fallbackGasPrice.toString(16)}`,\n };\n }\n}\n\nexport async function calculateDynamicFees(config: FeeConfig = DEFAULT_FEE_CONFIG): Promise<CalculatedFees> {\n try {\n // Check environment variable for forced legacy mode\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n\n // Check if current chain should use legacy gas pricing\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) {\n console.log('[Fees] Using legacy gas pricing', forceLegacy ? '(forced by FORCE_LEGACY_GAS env var)' : '(chain requires legacy gas)');\n return await calculateLegacyFees();\n }\n const baseFee = await getCurrentBaseFee(); const bufferedBaseFee = baseFee + (baseFee * BigInt(Math.floor(config.baseFeeBuffer * 1000))) / 1000n;\n const priorityFee = await getCurrentPriorityFee(); const bufferedPriorityFee = priorityFee + (priorityFee * BigInt(Math.floor(config.priorityFeeBuffer * 1000))) / 1000n;\n const maxFeePerGas = bufferedBaseFee + bufferedPriorityFee; const maxPriorityFeePerGas = bufferedPriorityFee;\n return { maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, maxPriorityFeePerGas: `0x${maxPriorityFeePerGas.toString(16)}`, baseFee, priorityFee, bufferedBaseFee, bufferedPriorityFee };\n } catch { return await calculateLegacyFees(); }\n}\n\nexport async function calculateFastFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(3_000_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.75, priorityFeeBuffer: 0.5, fallbackMaxFeePerGas: 3_000_000_000n, fallbackMaxPriorityFeePerGas: 2_000_000_000n });\n}\n\nexport async function calculateEconomyFees(): Promise<CalculatedFees> {\n const forceLegacy = getEnvVarBool('VITE_FORCE_LEGACY_GAS') || getEnvVarBool('FORCE_LEGACY_GAS');\n const shouldUseLegacy = forceLegacy || shouldUseLegacyGasForChain();\n\n if (shouldUseLegacy) return await calculateLegacyFees(500_000_000n);\n return calculateDynamicFees({ baseFeeBuffer: 0.27, priorityFeeBuffer: 0.01, fallbackMaxFeePerGas: 1_000_000_000n, fallbackMaxPriorityFeePerGas: 500_000_000n });\n}\n\nexport async function getFeeEstimates(): Promise<{ economy: CalculatedFees; standard: CalculatedFees; fast: CalculatedFees; }> {\n const [economy, standard, fast] = await Promise.all([ calculateEconomyFees(), calculateDynamicFees(), calculateFastFees() ]);\n return { economy, standard, fast };\n}\n","import { pack2x128, safeToBigInt } from '../utils/helpers';\nimport { calculateDynamicFees, calculateEconomyFees, calculateFastFees } from './fee-calculation';\nimport type { UserOperationV07, UserOperationV06, PackedUserOperationV07 } from './types';\n\nexport const DUMMY_SIGNATURE = `0x${'00'.repeat(65)}` as `0x${string}`;\n\nexport function packUserOperationV07(\n userOp: UserOperationV07,\n includeFactory: boolean,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`\n): PackedUserOperationV07 {\n const initCode = includeFactory && factoryAddress && factoryData ? (((factoryAddress as string) + (factoryData as string).slice(2)) as `0x${string}`) : ('0x' as `0x${string}`);\n const accountGasLimits = pack2x128(safeToBigInt(userOp.verificationGasLimit, '0x1e8480'), safeToBigInt(userOp.callGasLimit, '0x0f4240'));\n const gasFees = pack2x128(safeToBigInt(userOp.maxPriorityFeePerGas, '0x3b9aca00'), safeToBigInt(userOp.maxFeePerGas, '0x3b9aca00'));\n\n // Create paymasterAndData from paymaster and paymasterData fields (V07 format)\n let paymasterAndData: `0x${string}` = '0x';\n if (userOp.paymaster && userOp.paymaster !== '0x') {\n const paymasterAddr = userOp.paymaster.startsWith('0x') ? userOp.paymaster.slice(2) : userOp.paymaster;\n const paymasterData = userOp.paymasterData ? (userOp.paymasterData.startsWith('0x') ? userOp.paymasterData.slice(2) : userOp.paymasterData) : '';\n paymasterAndData = `0x${paymasterAddr}${paymasterData}` as `0x${string}`;\n }\n\n return { sender: userOp.sender, nonce: BigInt(userOp.nonce), initCode, callData: userOp.callData, accountGasLimits, preVerificationGas: safeToBigInt(userOp.preVerificationGas, '0x1d4c0'), gasFees, paymasterAndData, signature: userOp.signature };\n}\n\nexport function createDummyUserOperation(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV07 {\n const userOp: UserOperationV07 = {\n sender,\n nonce,\n callData,\n callGasLimit: '0x493e0', // 300,000\n verificationGasLimit: '0x989680', // 10,000,000 (same as original minVerificationGas)\n preVerificationGas: '0x30d40', // 200,000\n maxFeePerGas: customMaxFeePerGas || '0x3b9aca00',\n maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00',\n signature: DUMMY_SIGNATURE,\n };\n if (includeFactory && factoryAddress && factoryData) { userOp.factory = factoryAddress; userOp.factoryData = factoryData; }\n return userOp;\n}\n\nexport function createDummyUserOperationV06(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n customMaxFeePerGas?: `0x${string}`,\n customMaxPriorityFeePerGas?: `0x${string}`\n): UserOperationV06 {\n let initCode: `0x${string}` = '0x';\n if (includeFactory && factoryAddress && factoryData) {\n const factoryAddrClean = factoryAddress.startsWith('0x') ? factoryAddress.slice(2) : factoryAddress;\n const factoryDataClean = factoryData.startsWith('0x') ? factoryData.slice(2) : factoryData;\n initCode = `0x${factoryAddrClean}${factoryDataClean}` as `0x${string}`;\n }\n return { sender, nonce, initCode, callData, callGasLimit: '0x493e0', verificationGasLimit: '0x989680', preVerificationGas: '0x30d40', maxFeePerGas: customMaxFeePerGas || '0x3b9aca00', maxPriorityFeePerGas: customMaxPriorityFeePerGas || '0x3b9aca00', paymasterAndData: '0x', signature: DUMMY_SIGNATURE };\n}\n\nexport async function createUserOperationWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV07> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperation(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n\nexport async function createUserOperationV06WithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard'\n): Promise<UserOperationV06> {\n let fees;\n switch (feeType) {\n case 'economy': fees = await calculateEconomyFees(); break;\n case 'fast': fees = await calculateFastFees(); break;\n default: fees = await calculateDynamicFees();\n }\n return createDummyUserOperationV06(sender, nonce, callData, includeFactory, factoryAddress, factoryData, fees.maxFeePerGas, fees.maxPriorityFeePerGas);\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, GasEstimationResult } from './types';\nimport { DUMMY_SIGNATURE, createUserOperationWithDynamicFees } from './utils';\n\nexport async function estimateUserOperationGas(userOp: UserOperationV07, retryWithoutFactory: boolean = true): Promise<GasEstimationResult> {\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [userOp, ENTRYPOINT_V07]); return gas; }\n catch (error) {\n try { await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]); } catch {}\n if (retryWithoutFactory && (userOp.factory || userOp.factoryData)) {\n const errorMsg = String(error);\n if (/AA10 sender already constructed/i.test(errorMsg) || /sender.*is an existing contract.*but initCode is nonempty/i.test(errorMsg)) {\n const userOpWithoutFactory: UserOperationV07 = { ...userOp }; delete userOpWithoutFactory.factory; delete userOpWithoutFactory.factoryData;\n try { const gas = await bundlerRpc('eth_estimateUserOperationGas', [ userOpWithoutFactory, ENTRYPOINT_V07 ]); return gas; } catch {}\n }\n }\n const isEmptyCallData = !userOp.callData || userOp.callData === '0x';\n // Increased from 300k to 500k to handle deep call chains (5+ levels)\n // With 63/64 rule, 500k provides ~463k gas at depth 5\n const minimalCallGas = isEmptyCallData ? '0x0' : '0x7a120'; // 500,000 for non-empty calls (was 300,000)\n return { callGasLimit: minimalCallGas, verificationGasLimit: '0x989680', preVerificationGas: '0x30d40' };\n }\n}\n\nexport async function estimateUserOperationGasWithSignature(\n userOp: UserOperationV07,\n _getSignature: (opHash: `0x${string}`) => Promise<`0x${string}` | null>,\n _getUserOpHash: (packedOp: any) => Promise<`0x${string}`>,\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult> { const userOpForEstimation: UserOperationV07 = { ...userOp, signature: DUMMY_SIGNATURE }; return estimateUserOperationGas(userOpForEstimation, retryWithoutFactory); }\n\nexport async function estimateUserOperationGasWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard',\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult & { calculatedFees?: any }> {\n const userOp = await createUserOperationWithDynamicFees(sender, nonce, callData, includeFactory, factoryAddress, factoryData, feeType);\n const gasResult = await estimateUserOperationGas(userOp, retryWithoutFactory);\n return { ...gasResult, calculatedFees: { maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, feeType } };\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, SimulationResult } from './types';\n\nexport async function simulateUserOperation(userOp: UserOperationV07): Promise<SimulationResult> {\n const result = await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]);\n return result;\n}\n\nexport async function validateUserOperation(userOp: UserOperationV07): Promise<{ valid: boolean; error?: string }> {\n try { await simulateUserOperation(userOp); return { valid: true }; } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); return { valid: false, error: errorMsg }; }\n}\n"]}
@@ -496,7 +496,7 @@ async function estimateUserOperationGas(userOp, retryWithoutFactory = true) {
496
496
  }
497
497
  }
498
498
  const isEmptyCallData = !userOp.callData || userOp.callData === "0x";
499
- const minimalCallGas = isEmptyCallData ? "0x0" : "0x493e0";
499
+ const minimalCallGas = isEmptyCallData ? "0x0" : "0x7a120";
500
500
  return { callGasLimit: minimalCallGas, verificationGasLimit: "0x989680", preVerificationGas: "0x30d40" };
501
501
  }
502
502
  }