{"version":3,"sources":["../src/utils/project-id.ts","../src/bundler/client-provider.ts","../src/auth/storage.ts","../src/auth/jwt.ts","../src/utils/env.ts","../src/utils/helpers.ts","../src/bundler/constants.ts","../src/bundler/submission.ts","../src/bundler/fee-calculation.ts","../src/bundler/utils.ts","../src/bundler/gas-estimation.ts","../src/bundler/simulation.ts","../src/bundler/index.ts","../src/clients/server-wallet-send-userop.ts","../src/config/index.ts","../src/auth/base64url.ts","../src/auth/index.ts","../src/utils/index.ts","../src/index.ts","../src/clients/server-wallet-client.ts","../src/clients/server-wallet-manager.ts","../src/mpc/index.ts"],"names":["MemoryStorage","LocalStorageAdapter","JwtTokenManager","jwtTokenManager","safeToBigInt","pack2x128","ENTRYPOINT_V07","ENTRYPOINT_V06","ENTRYPOINT","DEFAULT_FEE_CONFIG","CONSERVATIVE_FEE_CONFIG","DUMMY_SIGNATURE","createUserOperationWithDynamicFees","estimateUserOperationGas","sendUserOperationWithRetry","fetchEntryPointNonce","nonce","setProjectId","setPublicClient","configureJwtModule","factoryAbi","sendUserOperationForServerWallet"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Project ID management for Lumia Passport Core\n * Adapted to work in both browser and Node.js environments\n */\n\nlet globalProjectId: string | undefined;\n\n/**\n * Set the global project ID\n * @param projectId - The project ID to set\n */\nexport function setProjectId(projectId: string): void {\n  globalProjectId = projectId;\n}\n\n/**\n * Get the current project ID\n * Priority: 1. Explicitly set via setProjectId(), 2. window.__LUMIA_PROJECT_ID__ (browser only)\n */\nexport function getProjectId(): string | undefined {\n  // First check explicitly set projectId\n  if (globalProjectId) {\n    return globalProjectId;\n  }\n\n  // Fallback to window global (browser only)\n  if (typeof globalThis !== 'undefined' && (globalThis as any).window) {\n    return ((globalThis as any).window as any).__LUMIA_PROJECT_ID__;\n  }\n\n  return undefined;\n}\n\n/**\n * Add projectId to URL query parameters\n * @param url - The URL to add projectId to\n * @param projectId - Optional explicit projectId (uses getProjectId() if not provided)\n */\nexport function addProjectIdToUrl(url: string, projectId?: string): string {\n  try {\n    const pid = projectId || getProjectId();\n    if (pid) {\n      const separator = url.includes('?') ? '&' : '?';\n      return `${url}${separator}projectId=${encodeURIComponent(pid)}`;\n    }\n  } catch (error) {\n    // Silently fail and return original URL\n  }\n  return url;\n}\n\n/**\n * Clear the globally set project ID\n */\nexport function clearProjectId(): void {\n  globalProjectId = undefined;\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 * Storage abstraction layer for tokens and keyshares\n * Allows the core package to work in both browser and Node.js environments\n */\n\n/**\n * Storage interface for storing key-value pairs\n * Can be implemented for different storage backends (localStorage, Redis, memory, etc.)\n */\nexport interface TokenStorage {\n  /**\n   * Get item from storage\n   * @param key - Storage key\n   * @returns Value or null if not found\n   */\n  getItem(key: string): Promise<string | null> | string | null;\n\n  /**\n   * Set item in storage\n   * @param key - Storage key\n   * @param value - Value to store\n   */\n  setItem(key: string, value: string): Promise<void> | void;\n\n  /**\n   * Remove item from storage\n   * @param key - Storage key\n   */\n  removeItem(key: string): Promise<void> | void;\n}\n\n/**\n * In-memory storage adapter\n * Useful for server-side usage where persistence is not required\n */\nexport class MemoryStorage implements TokenStorage {\n  private storage = new Map<string, string>();\n\n  getItem(key: string): string | null {\n    return this.storage.get(key) || null;\n  }\n\n  setItem(key: string, value: string): void {\n    this.storage.set(key, value);\n  }\n\n  removeItem(key: string): void {\n    this.storage.delete(key);\n  }\n\n  /**\n   * Clear all items from memory storage\n   */\n  clear(): void {\n    this.storage.clear();\n  }\n\n  /**\n   * Get all keys in storage\n   */\n  keys(): string[] {\n    return Array.from(this.storage.keys());\n  }\n\n  /**\n   * Get number of items in storage\n   */\n  get size(): number {\n    return this.storage.size;\n  }\n}\n\n/**\n * LocalStorage adapter for browser environments\n * Falls back to memory storage if localStorage is not available\n */\nexport class LocalStorageAdapter implements TokenStorage {\n  private fallback: MemoryStorage | null = null;\n\n  constructor() {\n    // Check if localStorage is available\n    if (!this.isLocalStorageAvailable()) {\n      console.warn('[Storage] localStorage not available, falling back to memory storage');\n      this.fallback = new MemoryStorage();\n    }\n  }\n\n  private isLocalStorageAvailable(): boolean {\n    try {\n      // @ts-ignore - accessing global window object\n      const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n      const storage = win ? win.localStorage : undefined;\n      if (!storage) {\n        return false;\n      }\n      // Test if we can actually use localStorage (some browsers block it in private mode)\n      const testKey = '__lumia_storage_test__';\n      storage.setItem(testKey, 'test');\n      storage.removeItem(testKey);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  getItem(key: string): string | null {\n    if (this.fallback) {\n      return this.fallback.getItem(key);\n    }\n    try {\n      // @ts-ignore - accessing global window object\n      const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n      const value = win?.localStorage?.getItem(key) || null;\n      return value;\n    } catch (error) {\n      console.error('[Storage] Error reading from localStorage:', error);\n      return null;\n    }\n  }\n\n  setItem(key: string, value: string): void {\n    if (this.fallback) {\n      this.fallback.setItem(key, value);\n      return;\n    }\n    try {\n      // @ts-ignore - accessing global window object\n      const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n      win?.localStorage?.setItem(key, value);\n    } catch (error) {\n      console.error('[Storage] Error writing to localStorage:', error);\n      // Initialize fallback if localStorage fails\n      if (!this.fallback) {\n        this.fallback = new MemoryStorage();\n        this.fallback.setItem(key, value);\n      }\n    }\n  }\n\n  removeItem(key: string): void {\n    if (this.fallback) {\n      this.fallback.removeItem(key);\n      return;\n    }\n    try {\n      // @ts-ignore - accessing global window object\n      const win = typeof globalThis !== 'undefined' && (globalThis as any).window;\n      win?.localStorage?.removeItem(key);\n    } catch (error) {\n      console.error('[Storage] Error removing from localStorage:', error);\n    }\n  }\n}\n\n/**\n * Keyshare storage interface (same as TokenStorage but with a different name for clarity)\n */\nexport interface KeyshareStorage extends TokenStorage {}\n\n/**\n * Helper to normalize storage operations to always be async\n * This allows mixing sync and async storage implementations\n */\nexport async function storageGet(\n  storage: TokenStorage,\n  key: string\n): Promise<string | null> {\n  const result = storage.getItem(key);\n  return result instanceof Promise ? await result : result;\n}\n\n/**\n * Helper to normalize storage operations to always be async\n */\nexport async function storageSet(\n  storage: TokenStorage,\n  key: string,\n  value: string\n): Promise<void> {\n  const result = storage.setItem(key, value);\n  if (result instanceof Promise) {\n    await result;\n  }\n}\n\n/**\n * Helper to normalize storage operations to always be async\n */\nexport async function storageRemove(\n  storage: TokenStorage,\n  key: string\n): Promise<void> {\n  const result = storage.removeItem(key);\n  if (result instanceof Promise) {\n    await result;\n  }\n}\n","/**\n * JWT Token Management\n * Adapted from lumia-passport-ui-kit/src/internal/auth/jwt.ts\n * Browser-specific features (passkey auth) remain in UI kit\n */\n\nimport type { TokenStorage } from './storage';\nimport { LocalStorageAdapter } from './storage';\nimport { addProjectIdToUrl } from '../utils/project-id';\n\n// Token storage keys\nconst TOKEN_STORAGE_KEY = 'lumia-passport-jwt-tokens';\nconst USER_ID_KEY = 'lumia-passport-current-user-id';\n\n// Build-time injected URLs (tsup.define)\ndeclare const __LUMIA_TSS_URL__: string;\ndeclare const __LUMIA_BUNDLER_URL__: string;\ndeclare const __LUMIA_SHARE_VAULT_URL__: string;\n\n// Service URL provider - will be set by config\nlet tssUrlProvider: (() => string) | undefined;\n\n/**\n * Configure JWT module with service URLs\n * Call this from createLumiaPassportCore (backend usage)\n */\nexport function configureJwtModule(config: {\n  tssUrl?: string;\n  projectId?: string;\n}) {\n  if (config.tssUrl) {\n    tssUrlProvider = () => config.tssUrl!;\n  }\n  // Note: projectId is now handled via addProjectIdToUrl from utils/project-id\n  // which reads from window.__LUMIA_PROJECT_ID__ or can be set via setProjectId()\n}\n\n// Build-time default from .env (will be replaced by tsup define)\nconst BUILD_TSS_URL = (typeof __LUMIA_TSS_URL__ !== 'undefined' && __LUMIA_TSS_URL__) || '';\n\nfunction getTssUrl(): string {\n  // Priority: runtime config > window.__LUMIA_SERVICES__ > build-time default > hardcoded fallback\n\n  // 1. Runtime config (backend usage via configureJwtModule)\n  if (tssUrlProvider) {\n    return tssUrlProvider();\n  }\n\n  // 2. 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?.tssUrl) {\n      return services.tssUrl;\n    }\n  }\n\n  // 3. Build-time injected default (from .env during pnpm build)\n  if (BUILD_TSS_URL) {\n    return BUILD_TSS_URL;\n  }\n\n  // 4. Hardcoded fallback\n  return 'http://localhost:9256';\n}\n\n// addProjectIdToUrl is imported from '../utils/project-id'\n// It automatically reads from window.__LUMIA_PROJECT_ID__ or global setProjectId()\n\n// Types\nexport interface JwtTokens {\n  accessToken: string;\n  refreshToken: string;\n  userId: string;\n  expiresIn: number;\n  expiresAt: number;\n  hasKeyshare?: boolean;\n  isNewUser?: boolean;\n  avatar?: string | null;\n  displayName?: string | null;\n  providers?: string[]; // List of connected auth providers (email, passkey, wallet, etc.)\n}\n\nexport interface LoginResponse {\n  accessToken: string;\n  refreshToken: string;\n  userId: string;\n  expiresIn: number;\n  hasKeyshare: boolean;\n  isNewUser?: boolean;\n  avatar?: string | null;\n  displayName?: string | null;\n  providers?: string[]; // List of connected auth providers (email, passkey, wallet, etc.)\n}\n\nexport interface RefreshResponse {\n  accessToken: string;\n  refreshToken: string;\n  expiresIn: number;\n}\n\nexport interface VerifyResponse {\n  valid: boolean;\n  userId?: string;\n  sessionId?: string;\n  exp?: number;\n  hasKeyshare?: boolean;\n  displayName?: string | null;\n  avatar?: string | null;\n}\n\n/**\n * JWT Token Manager\n * Handles token storage, refresh, and validation\n */\nexport class JwtTokenManager {\n  private tokens: JwtTokens | null = null;\n  private storage: TokenStorage;\n  private refreshPromise: Promise<boolean> | null = null; // Mutex for refresh operations\n\n  constructor(storage?: TokenStorage) {\n    this.storage = storage || new LocalStorageAdapter();\n    console.log('[JWT] JwtTokenManager initializing...');\n    this.loadTokensFromStorage();\n  }\n\n  private async loadTokensFromStorage(): Promise<void> {\n    try {\n      const stored = await this.storage.getItem(TOKEN_STORAGE_KEY);\n      console.log('[JWT] Loading tokens from storage:', !!stored);\n\n      if (stored) {\n        this.tokens = JSON.parse(stored);\n        console.log('[JWT] Parsed tokens:', {\n          hasAccessToken: !!this.tokens?.accessToken,\n          hasRefreshToken: !!this.tokens?.refreshToken,\n          userId: this.tokens?.userId,\n          expiresAt: this.tokens?.expiresAt,\n          currentTime: Date.now(),\n          timeToExpiry: this.tokens?.expiresAt ? (this.tokens.expiresAt - Date.now()) / 1000 : 'N/A'\n        });\n\n        if (this.tokens && this.isTokenExpired()) {\n          console.log('[JWT] Access token is expired');\n\n          // Check if we have a refresh token to attempt renewal\n          if (this.tokens.refreshToken) {\n            console.log('[JWT] Refresh token available, will attempt renewal when needed');\n            // Keep tokens - they will be refreshed on the first API call via ensureValidToken()\n          } else {\n            console.log('[JWT] No refresh token available, clearing tokens');\n            await this.clearTokens();\n          }\n        } else {\n          console.log('[JWT] Access token is valid, keeping tokens');\n        }\n      } else {\n        console.log('[JWT] No tokens found in storage');\n      }\n    } catch (error) {\n      console.error('[JWT] Error loading tokens from storage:', error);\n      await this.clearTokens();\n    }\n  }\n\n  private async saveTokensToStorage(): Promise<void> {\n    try {\n      if (this.tokens) {\n        const tokenString = JSON.stringify(this.tokens);\n        await this.storage.setItem(TOKEN_STORAGE_KEY, tokenString);\n        await this.storage.setItem(USER_ID_KEY, this.tokens.userId);\n      }\n    } catch (error) {\n      console.error('[JWT] Failed to save tokens to storage:', error);\n    }\n  }\n\n  async setTokens(response: LoginResponse): Promise<void> {\n    const expiresAt = Date.now() + response.expiresIn * 1000;\n    this.tokens = {\n      accessToken: response.accessToken,\n      refreshToken: response.refreshToken,\n      userId: response.userId,\n      expiresIn: response.expiresIn,\n      expiresAt,\n      hasKeyshare: response.hasKeyshare,\n      isNewUser: response.isNewUser,\n      avatar: response.avatar ?? null,\n      displayName: response.displayName ?? null,\n      providers: response.providers ?? []\n    };\n\n    await this.saveTokensToStorage();\n  }\n\n  getAccessToken(): string | null {\n    if (!this.tokens) return null;\n    // Return access token even if expired - ensureValidToken() will handle refresh\n    return this.tokens.accessToken;\n  }\n\n  getRefreshToken(): string | null {\n    return this.tokens?.refreshToken || null;\n  }\n\n  getUserId(): string | null {\n    return this.tokens?.userId || null;\n  }\n\n  getHasKeyshare(): boolean | null {\n    return this.tokens?.hasKeyshare ?? null;\n  }\n\n  getAvatar(): string | null {\n    return this.tokens?.avatar || null;\n  }\n\n  getDisplayName(): string | null {\n    return this.tokens?.displayName || null;\n  }\n\n  getProviders(): string[] {\n    return this.tokens?.providers ?? [];\n  }\n\n  getTokens(): JwtTokens | null {\n    return this.tokens;\n  }\n\n  async updateKeyshareStatus(hasKeyshare: boolean): Promise<void> {\n    if (this.tokens) {\n      this.tokens.hasKeyshare = hasKeyshare;\n      await this.saveTokensToStorage();\n    }\n  }\n\n  async updateDisplayName(displayName: string | null): Promise<void> {\n    if (this.tokens) {\n      this.tokens.displayName = displayName;\n      await this.saveTokensToStorage();\n    }\n  }\n\n  isTokenExpired(): boolean {\n    if (!this.tokens) {\n      return true;\n    }\n\n    const buffer = 30 * 1000; // 30 seconds buffer\n    const now = Date.now();\n    const expiresAt = this.tokens.expiresAt;\n    const isExpired = now > (expiresAt - buffer);\n\n    return isExpired;\n  }\n\n  isAuthenticated(): boolean {\n    // Consider authenticated if we have either valid access token OR refresh token\n    if (!this.tokens) return false;\n\n    if (!this.isTokenExpired()) {\n      return !!this.tokens.accessToken;\n    }\n\n    // If access token is expired but we have refresh token, we're still authenticated\n    return !!this.tokens.refreshToken;\n  }\n\n  async clearTokens(): Promise<void> {\n    this.tokens = null;\n    await this.storage.removeItem(TOKEN_STORAGE_KEY);\n    await this.storage.removeItem(USER_ID_KEY);\n  }\n\n  async refreshAccessToken(): Promise<boolean> {\n    // If refresh is already in progress, wait for it to complete\n    if (this.refreshPromise) {\n      console.log('[JWT] Refresh already in progress, waiting for existing operation...');\n      return this.refreshPromise;\n    }\n\n    const refreshToken = this.getRefreshToken();\n    if (!refreshToken) {\n      console.warn('[JWT] No refresh token available for refresh');\n      return false;\n    }\n\n    console.log('[JWT] Starting new token refresh operation...');\n\n    // Create and store the refresh promise (mutex pattern)\n    this.refreshPromise = (async () => {\n      try {\n        const response = await fetch(addProjectIdToUrl(`${getTssUrl()}/api/auth/refresh`), {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          credentials: 'include',\n          body: JSON.stringify({ refreshToken })\n        });\n\n        if (!response.ok) {\n          console.log('[JWT] Token refresh failed with status:', response.status);\n\n          if (response.status === 401) {\n            try {\n              const errorData: any = await response.json();\n              console.log('[JWT] Refresh 401 Error details:', errorData);\n\n              // Handle backend error codes\n              switch (errorData.error_code) {\n                case 'SESSION_NOT_FOUND':\n                  console.log('[JWT] Refresh token session not found, clearing tokens');\n                  await this.clearTokens();\n                  return false;\n\n                case 'INVALID_TOKEN':\n                default:\n                  console.log('[JWT] Invalid refresh token, clearing tokens');\n                  await this.clearTokens();\n                  return false;\n              }\n            } catch (parseError) {\n              console.warn('[JWT] Could not parse refresh 401 error response:', parseError);\n              await this.clearTokens();\n              return false;\n            }\n          } else {\n            console.log('[JWT] Non-401 error during refresh, keeping tokens (might be network error)');\n            return false;\n          }\n        }\n\n        const refreshResponse = await response.json() as RefreshResponse;\n        console.log('[JWT] Token refresh successful, new expiry in:', refreshResponse.expiresIn, 'seconds');\n\n        if (this.tokens) {\n          // Update both access and refresh tokens (token rotation)\n          this.tokens.accessToken = refreshResponse.accessToken;\n          this.tokens.refreshToken = refreshResponse.refreshToken;\n          this.tokens.expiresIn = refreshResponse.expiresIn;\n          this.tokens.expiresAt = Date.now() + refreshResponse.expiresIn * 1000;\n          await this.saveTokensToStorage();\n          console.log('[JWT] Refreshed tokens saved to storage');\n          return true;\n        }\n\n        console.error('[JWT] No existing tokens to update');\n        return false;\n      } catch (error) {\n        console.error('[JWT] Token refresh network error:', error);\n        // Don't clear tokens on network errors - might be temporary\n        return false;\n      } finally {\n        // Clear the mutex when operation completes (success or failure)\n        this.refreshPromise = null;\n        console.log('[JWT] Refresh operation completed, mutex cleared');\n      }\n    })();\n\n    return this.refreshPromise;\n  }\n\n  getAuthHeader(): string | null {\n    const token = this.getAccessToken();\n    return token ? `Bearer ${token}` : null;\n  }\n}\n\n// Default instance with LocalStorage\nexport const jwtTokenManager = new JwtTokenManager();\n\n/**\n * Create a custom JWT token manager with specific storage\n */\nexport function createJwtTokenManager(storage: TokenStorage): JwtTokenManager {\n  return new JwtTokenManager(storage);\n}\n\n// Authentication functions\n\nexport async function logout(manager: JwtTokenManager = jwtTokenManager): Promise<void> {\n  try {\n    const authHeader = manager.getAuthHeader();\n    if (authHeader) {\n      await fetch(addProjectIdToUrl(`${getTssUrl()}/api/auth/logout`), {\n        method: 'POST',\n        headers: {\n          Authorization: authHeader,\n          'Content-Type': 'application/json'\n        },\n        credentials: 'include'\n      });\n    }\n  } catch (error) {\n    console.error('[JWT] Logout error:', error);\n  } finally {\n    await manager.clearTokens();\n  }\n}\n\nexport async function verifyToken(manager: JwtTokenManager = jwtTokenManager): Promise<VerifyResponse | null> {\n  const authHeader = manager.getAuthHeader();\n  if (!authHeader) {\n    console.log('[JWT] No auth header available for verification');\n    return { valid: false };\n  }\n\n  try {\n    const response = await fetch(addProjectIdToUrl(`${getTssUrl()}/api/auth/verify`), {\n      method: 'GET',\n      headers: { Authorization: authHeader },\n      credentials: 'include'\n    });\n\n    if (!response.ok) {\n      console.log('[JWT] Token verification failed:', response.status);\n\n      if (response.status === 401) {\n        try {\n          const errorData: any = await response.json();\n          console.log('[JWT] 401 Error details:', errorData);\n\n          // Handle backend error codes\n          switch (errorData.error_code) {\n            case 'TOKEN_EXPIRED':\n              console.log('[JWT] Access token expired, attempting refresh...');\n              const refreshSuccess = await manager.refreshAccessToken();\n              if (refreshSuccess) {\n                console.log('[JWT] Token refreshed successfully, retrying verification');\n                return await verifyToken(manager);\n              } else {\n                console.log('[JWT] Token refresh failed, clearing tokens');\n                await manager.clearTokens();\n                return { valid: false };\n              }\n\n            case 'SESSION_NOT_FOUND':\n              console.log('[JWT] Session not found or revoked, clearing tokens');\n              await manager.clearTokens();\n              return { valid: false };\n\n            case 'INVALID_TOKEN':\n            default:\n              console.log('[JWT] Invalid token, clearing tokens');\n              await manager.clearTokens();\n              return { valid: false };\n          }\n        } catch (parseError) {\n          console.warn('[JWT] Could not parse 401 error response:', parseError);\n          await manager.clearTokens();\n          return { valid: false };\n        }\n      } else {\n        console.log('[JWT] Non-401 error during verification, keeping tokens');\n        return { valid: false };\n      }\n    }\n\n    const verifyResponse = await response.json() as VerifyResponse;\n    console.log('[JWT] Token verification successful:', verifyResponse);\n\n    if (verifyResponse.valid) {\n      if (typeof verifyResponse.hasKeyshare === 'boolean') {\n        await manager.updateKeyshareStatus(verifyResponse.hasKeyshare);\n      }\n      // Update displayName and avatar if present\n      if (manager.getTokens()) {\n        if (verifyResponse.displayName !== undefined) {\n          await manager.updateDisplayName(verifyResponse.displayName);\n        }\n        // Avatar update would need similar method\n      }\n    }\n\n    return verifyResponse;\n  } catch (error) {\n    console.error('[JWT] Token verification network error:', error);\n    return { valid: false };\n  }\n}\n\nexport async function ensureValidToken(manager: JwtTokenManager = jwtTokenManager): Promise<boolean> {\n  // Check if current access token is valid (not expired)\n  if (manager.isAuthenticated() && !manager.isTokenExpired()) {\n    return true;\n  }\n\n  console.log('[JWT] Access token expired or missing, attempting refresh...');\n\n  // Try to refresh using refresh token\n  const refreshToken = manager.getRefreshToken();\n  if (refreshToken) {\n    console.log('[JWT] Refresh token available, attempting to refresh access token');\n    const refreshSuccess = await manager.refreshAccessToken();\n    console.log('[JWT] Refresh attempt result:', refreshSuccess);\n    return refreshSuccess;\n  }\n\n  console.log('[JWT] No refresh token available, user needs to re-authenticate');\n  return false;\n}\n\n/**\n * Get current tokens, automatically refreshing them if expired\n * Recommended for integrators who need fresh tokens for backend validation via JWK\n *\n * @returns Current tokens if valid or successfully refreshed, null if refresh failed\n * @example\n * ```ts\n * // Get fresh tokens for backend validation\n * const tokens = await getValidTokens();\n * if (tokens) {\n *   // Send accessToken to your backend for JWK signature verification\n *   console.log('Access Token:', tokens.accessToken);\n *   console.log('User ID:', tokens.userId);\n * } else {\n *   // Token refresh failed, user needs to re-authenticate\n *   console.log('Please login again');\n * }\n * ```\n */\nexport async function getValidTokens(manager: JwtTokenManager = jwtTokenManager): Promise<JwtTokens | null> {\n  const hasValidToken = await ensureValidToken(manager);\n  if (!hasValidToken) {\n    return null;\n  }\n  return manager.getTokens();\n}\n\nexport async function authenticatedFetch(\n  url: string,\n  options: RequestInit = {},\n  manager: JwtTokenManager = jwtTokenManager\n): Promise<Response> {\n  const hasValidToken = await ensureValidToken(manager);\n  if (!hasValidToken) {\n    throw new Error('No valid authentication token available');\n  }\n\n  const authHeader = manager.getAuthHeader();\n  if (!authHeader) {\n    throw new Error('Failed to get authentication header');\n  }\n\n  const urlWithProjectId = addProjectIdToUrl(url);\n  const requestOptions: RequestInit = {\n    ...options,\n    headers: {\n      ...options.headers,\n      Authorization: authHeader,\n      'Content-Type': 'application/json'\n    }\n  };\n\n  const response = await fetch(urlWithProjectId, requestOptions);\n\n  // Handle 401 by attempting token refresh\n  if (response.status === 401) {\n    const refreshSuccess = await manager.refreshAccessToken();\n    if (refreshSuccess) {\n      const newAuthHeader = manager.getAuthHeader();\n      if (newAuthHeader) {\n        requestOptions.headers = {\n          ...requestOptions.headers,\n          Authorization: newAuthHeader\n        };\n        return fetch(urlWithProjectId, requestOptions);\n      }\n    }\n  }\n\n  return response;\n}\n\n// Login functions (non-passkey)\n\nexport async function loginWithUserId(userId: string, options?: { skipTokenSave?: boolean }): Promise<LoginResponse> {\n  const response = await fetch(addProjectIdToUrl(`${getTssUrl()}/api/auth/login`), {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    credentials: 'include',\n    body: JSON.stringify({ userId })\n  });\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => 'Login failed');\n    throw new Error(`Login failed: ${response.status} ${errorText}`);\n  }\n\n  const loginResponse = await response.json() as LoginResponse;\n  if (!options?.skipTokenSave) {\n    await jwtTokenManager.setTokens(loginResponse);\n  }\n  return loginResponse;\n}\n\nexport async function loginWithEmail(email: string, code: string, options?: { skipTokenSave?: boolean }): Promise<LoginResponse> {\n  const response = await fetch(addProjectIdToUrl(`${getTssUrl()}/api/auth/email/verify-code`), {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    credentials: 'include',\n    body: JSON.stringify({ email, code })\n  });\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => 'Email verification failed');\n    throw new Error(`Email verification failed: ${response.status} ${errorText}`);\n  }\n\n  const loginResponse = await response.json() as LoginResponse;\n  if (!options?.skipTokenSave) {\n    await jwtTokenManager.setTokens(loginResponse);\n  }\n  return loginResponse;\n}\n\nexport async function loginWithTelegram(telegramData: {\n  id: number;\n  first_name: string;\n  last_name?: string;\n  username?: string;\n  photo_url?: string;\n  auth_date: number;\n  hash: string;\n}, options?: { skipTokenSave?: boolean }): Promise<LoginResponse> {\n  const response = await fetch(addProjectIdToUrl(`${getTssUrl()}/api/auth/telegram/login`), {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    credentials: 'include',\n    body: JSON.stringify(telegramData)\n  });\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => 'Telegram login failed');\n    throw new Error(`Telegram login failed: ${response.status} ${errorText}`);\n  }\n\n  const loginResponse = await response.json() as LoginResponse;\n  if (!options?.skipTokenSave) {\n    await jwtTokenManager.setTokens(loginResponse);\n  }\n  return loginResponse;\n}\n\nexport async function syncKeyshareStatus(manager: JwtTokenManager = jwtTokenManager): Promise<boolean> {\n  try {\n    const verification = await verifyToken(manager);\n    if (verification?.valid && typeof verification.hasKeyshare === 'boolean') {\n      return verification.hasKeyshare;\n    }\n    return false;\n  } catch {\n    return false;\n  }\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","/**\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","/**\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","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","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","/**\n * Bundler API modules\n * Migrated from lumia-passport-ui-kit/src/internal/bundler-api/\n */\n\n// Re-export all bundler types\nexport type {\n  UserOperationV07,\n  UserOperationV06,\n  PackedUserOperationV07,\n  GasEstimationResult,\n  SimulationResult,\n  BundlerRpcError,\n} from './types';\n\n// Re-export constants\nexport { ENTRYPOINT_V07, ENTRYPOINT_V06, ENTRYPOINT } from './constants';\n\n// Re-export submission functions\nexport {\n  sendUserOperationRaw,\n  sendUserOperationV06Raw,\n  sendUserOperationWithRetry,\n  sendUserOperationV06WithRetry,\n  getUserOperationReceipt,\n} from './submission';\n\n// Re-export gas estimation functions\nexport {\n  estimateUserOperationGas,\n  estimateUserOperationGasWithSignature,\n  estimateUserOperationGasWithDynamicFees,\n} from './gas-estimation';\n\n// Re-export simulation functions\nexport { simulateUserOperation, validateUserOperation } from './simulation';\n\n// Re-export fee calculation functions and types\nexport type { FeeConfig, CalculatedFees } from './fee-calculation';\nexport {\n  DEFAULT_FEE_CONFIG,\n  CONSERVATIVE_FEE_CONFIG,\n  getCurrentBaseFee,\n  getCurrentPriorityFee,\n  calculateLegacyFees,\n  calculateDynamicFees,\n  calculateFastFees,\n  calculateEconomyFees,\n  getFeeEstimates,\n} from './fee-calculation';\n\n// Re-export utility functions\nexport {\n  DUMMY_SIGNATURE,\n  packUserOperationV07,\n  createDummyUserOperation,\n  createDummyUserOperationV06,\n  createUserOperationWithDynamicFees,\n  createUserOperationV06WithDynamicFees,\n} from './utils';\n\n// Re-export client provider functions\nexport { setPublicClient, getPublicClient, hasPublicClient } from './client-provider';\n","/**\n * Send UserOperation implementation for Server Wallet Manager\n *\n * This file contains the full UserOperation flow for server wallets,\n * ported from ui-kit/src/internal/clients/account.ts\n */\n\nimport type { ServerWallet } from './server-wallet-manager';\nimport type { EcdsaSignature } from './types';\n\n// Will be imported dynamically\nlet viemModule: any = null;\nlet bundlerModule: any = null;\n\nasync function loadViem() {\n  if (!viemModule) {\n    viemModule = await import('viem');\n  }\n  return viemModule;\n}\n\nasync function loadBundler() {\n  if (!bundlerModule) {\n    bundlerModule = await import('../bundler');\n  }\n  return bundlerModule;\n}\n\nconst executeAbi = [\n  {\n    type: 'function',\n    name: 'execute',\n    stateMutability: 'payable',\n    inputs: [\n      { name: 'target', type: 'address' },\n      { name: 'value', type: 'uint256' },\n      { name: 'data', type: 'bytes' },\n    ],\n    outputs: [],\n  },\n] as const;\n\nconst factoryAbi = [\n  {\n    type: 'function',\n    name: 'createAccount',\n    stateMutability: 'payable',\n    inputs: [\n      { name: 'owner', type: 'address' },\n      { name: 'salt', type: 'bytes32' },\n    ],\n    outputs: [{ name: '', type: 'address' }],\n  },\n] as const;\n\nexport interface SendUserOperationParams {\n  wallet: ServerWallet;\n  to: `0x${string}`;\n  value: string;\n  data: `0x${string}`;\n  feeType: 'economy' | 'standard' | 'fast';\n  signDigestFn: (digest: string) => Promise<EcdsaSignature>;\n  publicClient: any;\n  factoryAddress: `0x${string}`;\n  entryPointAddress: `0x${string}`;\n  paymasterAddress?: `0x${string}`;\n  debug?: boolean;\n}\n\n/**\n * Send a UserOperation using server wallet\n * Full implementation matching ui-kit/account.ts logic\n */\nexport async function sendUserOperationForServerWallet(\n  params: SendUserOperationParams\n): Promise<`0x${string}`> {\n  const {\n    wallet,\n    to,\n    value,\n    data,\n    feeType,\n    signDigestFn,\n    publicClient,\n    factoryAddress,\n    entryPointAddress,\n    paymasterAddress,\n    debug = false,\n  } = params;\n\n  // Load dependencies\n  const viem = await loadViem();\n  const bundler = await loadBundler();\n\n  const { encodeFunctionData, hashTypedData } = viem;\n  const {\n    createUserOperationWithDynamicFees,\n    estimateUserOperationGas,\n    sendUserOperationWithRetry,\n  } = bundler;\n\n  const amountWeiBigInt = BigInt(value);\n  const isMinimalTest =\n    to === '0x0000000000000000000000000000000000000000' && value === '0' && data === '0x';\n\n  // Encode callData\n  let callData: `0x${string}`;\n  if (isMinimalTest) {\n    callData = '0x';\n  } else {\n    callData = encodeFunctionData({\n      abi: executeAbi,\n      functionName: 'execute',\n      args: [to, amountWeiBigInt, data],\n    });\n  }\n\n  // Check if account is deployed\n  let isDeployed = false;\n  try {\n    const code = await publicClient.getCode({\n      address: wallet.smartAccountAddress,\n    });\n    if (code && code !== '0x' && code.length > 2) {\n      isDeployed = true;\n    }\n  } catch (error) {\n    if (debug) {\n      console.log('[ServerWallet] Failed to check deployment:', error);\n    }\n  }\n\n  // Fetch nonce from EntryPoint\n  const fetchEntryPointNonce = async (\n    account: string,\n    entryPoint: string\n  ): Promise<string> => {\n    const entryPointAbi = [\n      {\n        type: 'function',\n        name: 'getNonce',\n        stateMutability: 'view',\n        inputs: [\n          { name: 'sender', type: 'address' },\n          { name: 'key', type: 'uint192' },\n        ],\n        outputs: [{ name: '', type: 'uint256' }],\n      },\n    ] as const;\n\n    try {\n      const nonce = await publicClient.readContract({\n        address: entryPoint,\n        abi: entryPointAbi,\n        functionName: 'getNonce',\n        args: [account, 0n],\n      });\n      return `0x${nonce.toString(16)}` as `0x${string}`;\n    } catch (error) {\n      if (debug) {\n        console.log('[ServerWallet] Failed to fetch nonce, using 0x0:', error);\n      }\n      return '0x0';\n    }\n  };\n\n  const nonce = await fetchEntryPointNonce(wallet.smartAccountAddress, entryPointAddress);\n  const nonceValue = BigInt(nonce);\n\n  if (!isDeployed && nonceValue !== 0n) {\n    throw new Error(\n      `Undeployed account has non-zero nonce: ${nonce}. This will cause CodeHashChanged error.`\n    );\n  }\n\n  const shouldIncludeFactory = !isDeployed;\n\n  if (debug) {\n    console.log('[ServerWallet] Account deployed:', isDeployed);\n    console.log('[ServerWallet] Nonce:', nonce);\n    console.log('[ServerWallet] Include factory:', shouldIncludeFactory);\n  }\n\n  // Create UserOperation\n  let userOp: any;\n  if (shouldIncludeFactory) {\n    const saltZero =\n      '0x0000000000000000000000000000000000000000000000000000000000000000' as const;\n    const factoryData = encodeFunctionData({\n      abi: factoryAbi,\n      functionName: 'createAccount',\n      args: [wallet.ownerAddress, saltZero],\n    });\n\n    userOp = await createUserOperationWithDynamicFees(\n      wallet.smartAccountAddress,\n      nonce,\n      callData,\n      true, // includeFactory\n      factoryAddress,\n      factoryData,\n      feeType\n    );\n  } else {\n    userOp = await createUserOperationWithDynamicFees(\n      wallet.smartAccountAddress,\n      nonce,\n      callData,\n      false, // includeFactory\n      undefined,\n      undefined,\n      feeType\n    );\n  }\n\n  // Add paymaster if configured\n  if (paymasterAddress && paymasterAddress !== '0x0000000000000000000000000000000000000000') {\n    userOp.paymaster = paymasterAddress;\n    userOp.paymasterVerificationGasLimit = '0x249f0';\n    userOp.paymasterPostOpGasLimit = '0x186a0';\n  }\n\n  // Ensure generous gas defaults\n  const ensureGenerousDefaults = () => {\n    const toHex = (v: bigint) => `0x${v.toString(16)}`;\n    const minCallGas = 0x493e0n; // 300,000\n    const minVerificationGas = 0x989680n; // 10,000,000\n    const minPreVerificationGas = 0x30d40n; // 200,000\n\n    if (BigInt(userOp.callGasLimit || '0x0') < minCallGas) {\n      userOp.callGasLimit = toHex(minCallGas) as `0x${string}`;\n    }\n    if (BigInt(userOp.verificationGasLimit || '0x0') < minVerificationGas) {\n      userOp.verificationGasLimit = toHex(minVerificationGas) as `0x${string}`;\n    }\n    if (BigInt(userOp.preVerificationGas || '0x0') < minPreVerificationGas) {\n      userOp.preVerificationGas = toHex(minPreVerificationGas) as `0x${string}`;\n    }\n  };\n\n  // Estimate gas\n  try {\n    const gasEst = await estimateUserOperationGas({\n      ...userOp,\n      signature: `0x${'00'.repeat(65)}`,\n    });\n\n    userOp.callGasLimit = gasEst.callGasLimit;\n    userOp.verificationGasLimit = gasEst.verificationGasLimit;\n    userOp.preVerificationGas = gasEst.preVerificationGas;\n\n    ensureGenerousDefaults();\n\n    if (debug) {\n      console.log('[ServerWallet] Gas estimated successfully');\n    }\n  } catch (error) {\n    if (debug) {\n      console.warn('[ServerWallet] Gas estimation failed, using defaults:', error);\n    }\n    ensureGenerousDefaults();\n  }\n\n  // Hash UserOperation for signing\n  const userOpHash = hashTypedData({\n    domain: {\n      name: 'Account',\n      version: '1',\n      chainId: BigInt(wallet.smartAccountAddress), // Using account address as chainId in domain\n      verifyingContract: entryPointAddress,\n    },\n    types: {\n      UserOperation: [\n        { name: 'sender', type: 'address' },\n        { name: 'nonce', type: 'uint256' },\n        { name: 'initCode', type: 'bytes' },\n        { name: 'callData', type: 'bytes' },\n        { name: 'accountGasLimits', type: 'bytes32' },\n        { name: 'preVerificationGas', type: 'uint256' },\n        { name: 'gasFees', type: 'bytes32' },\n        { name: 'paymasterAndData', type: 'bytes' },\n      ],\n    },\n    primaryType: 'UserOperation',\n    message: {\n      sender: userOp.sender,\n      nonce: BigInt(userOp.nonce),\n      initCode:\n        userOp.factory && userOp.factoryData\n          ? (`0x${userOp.factory.slice(2)}${userOp.factoryData.slice(2)}` as `0x${string}`)\n          : '0x',\n      callData: userOp.callData,\n      accountGasLimits: pack2x128(\n        BigInt(userOp.verificationGasLimit),\n        BigInt(userOp.callGasLimit)\n      ),\n      preVerificationGas: BigInt(userOp.preVerificationGas),\n      gasFees: pack2x128(BigInt(userOp.maxPriorityFeePerGas), BigInt(userOp.maxFeePerGas)),\n      paymasterAndData:\n        userOp.paymaster && userOp.paymaster !== '0x0000000000000000000000000000000000000000'\n          ? buildPaymasterAndData(userOp)\n          : '0x',\n    },\n  });\n\n  if (debug) {\n    console.log('[ServerWallet] UserOp hash to sign:', userOpHash);\n  }\n\n  // Sign with TSS\n  const signature = await signDigestFn(userOpHash);\n\n  // Assemble signature\n  const assembledSignature = `0x${signature.r.slice(2)}${signature.s.slice(2)}${signature.v.toString(16).padStart(2, '0')}` as `0x${string}`;\n\n  // Normalize signature\n  userOp.signature = normalizeSignature(assembledSignature);\n\n  if (debug) {\n    console.log('[ServerWallet] Signature created and normalized');\n    console.log('[ServerWallet] Submitting UserOperation to bundler...');\n  }\n\n  // Submit to bundler\n  const userOpHashResult = await sendUserOperationWithRetry(userOp);\n\n  if (debug) {\n    console.log('[ServerWallet] UserOperation submitted:', userOpHashResult);\n  }\n\n  return userOpHashResult;\n}\n\n// Helper functions\n\nfunction pack2x128(high: bigint, low: bigint): `0x${string}` {\n  return `0x${high.toString(16).padStart(32, '0')}${low.toString(16).padStart(32, '0')}` as `0x${string}`;\n}\n\nfunction buildPaymasterAndData(userOp: any): `0x${string}` {\n  const parts = [\n    userOp.paymaster.slice(2),\n    userOp.paymasterVerificationGasLimit?.slice(2).padStart(32, '0') || ''.padStart(32, '0'),\n    userOp.paymasterPostOpGasLimit?.slice(2).padStart(32, '0') || ''.padStart(32, '0'),\n    userOp.paymasterData?.slice(2) || '',\n  ];\n  return `0x${parts.join('')}` as `0x${string}`;\n}\n\nfunction normalizeSignature(signature: `0x${string}`): `0x${string}` {\n  const sig = signature.slice(2);\n  const r = sig.slice(0, 64);\n  const s = sig.slice(64, 128);\n  const v = sig.slice(128, 130);\n\n  const sBigInt = BigInt(`0x${s}`);\n  const secp256k1n = BigInt(\n    '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'\n  );\n  const secp256k1nHalf = secp256k1n >> 1n;\n\n  let canonicalS = sBigInt;\n  let canonicalV = parseInt(v, 16);\n\n  if (sBigInt > secp256k1nHalf) {\n    canonicalS = secp256k1n - sBigInt;\n    canonicalV = canonicalV === 27 ? 28 : canonicalV === 28 ? 27 : canonicalV === 0 ? 1 : 0;\n  }\n\n  const canonicalSHex = canonicalS.toString(16).padStart(64, '0');\n  const canonicalVHex = canonicalV.toString(16).padStart(2, '0');\n\n  return `0x${r}${canonicalSHex}${canonicalVHex}` as `0x${string}`;\n}\n","/**\n * Configuration types and factory functions\n */\n\nimport type { TokenStorage, KeyshareStorage } from '../auth/storage';\n\n/**\n * Configuration for Lumia Passport Core\n */\nexport interface LumiaPassportCoreConfig {\n  /** TSS service URL */\n  tssUrl?: string;\n\n  /** Bundler RPC URL */\n  bundlerUrl?: string;\n\n  /** Share Vault service URL */\n  shareVaultUrl?: string;\n\n  /** Blockchain explorer URL */\n  explorerUrl?: string;\n\n  /** Chain ID */\n  chainId?: number;\n\n  /** RPC URL for blockchain */\n  rpcUrl?: string;\n\n  /** WASM requirement flag */\n  requireWasm?: boolean;\n\n  /** WASM debug flag */\n  debugWasm?: boolean;\n\n  /** Token storage adapter */\n  tokenStorage?: TokenStorage;\n\n  /** Keyshare storage adapter */\n  keyshareStorage?: KeyshareStorage;\n\n  /** Project ID */\n  projectId?: string;\n\n  /**\n   * Viem PublicClient for blockchain interactions\n   * Required for fee calculation and gas estimation\n   * Type: PublicClient from viem\n   */\n  publicClient?: any;\n}\n\n/**\n * Factory function to create Lumia Passport Core instance\n * This will be fully implemented when all modules are migrated\n */\nexport function createLumiaPassportCore(config: LumiaPassportCoreConfig) {\n  // Set global projectId if provided\n  if (config.projectId) {\n    import('../utils/project-id').then(({ setProjectId }) => {\n      setProjectId(config.projectId!);\n    }).catch(() => {\n      // Silently ignore if module not available\n    });\n  }\n\n  // Set global publicClient if provided\n  if (config.publicClient) {\n    import('../bundler/client-provider').then(({ setPublicClient }) => {\n      setPublicClient(config.publicClient);\n    }).catch(() => {\n      // Silently ignore if module not available\n    });\n  }\n\n  // Configure JWT module with service URLs\n  if (config.tssUrl || config.projectId) {\n    import('../auth/jwt').then(({ configureJwtModule }) => {\n      configureJwtModule({\n        tssUrl: config.tssUrl,\n        projectId: config.projectId,\n      });\n    }).catch(() => {\n      // Silently ignore if module not available\n    });\n  }\n\n  // Placeholder - will return actual clients when implemented\n  return {\n    config,\n    // bundler: createBundlerClient(config),\n    // auth: createAuthClient(config),\n    // mpc: createMpcClient(config),\n    // clients: createClients(config),\n  };\n}\n","/**\n * Base64URL encoding/decoding utilities\n * Used for WebAuthn and JWT operations\n */\n\n/**\n * Convert ArrayBuffer to Base64URL string\n * @param buffer - ArrayBuffer to convert\n * @returns Base64URL encoded string\n */\nexport function arrayBufferToBase64url(buffer: ArrayBuffer): string {\n  const bytes = new Uint8Array(buffer);\n  let binary = '';\n  for (let i = 0; i < bytes.byteLength; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n}\n\n/**\n * Convert Base64URL string to Uint8Array\n * @param base64url - Base64URL string to convert\n * @returns Uint8Array\n */\nexport function base64urlToUint8Array(base64url: string): Uint8Array {\n  const base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');\n  const pad = base64.length % 4 ? 4 - (base64.length % 4) : 0;\n  const padded = base64 + '='.repeat(pad);\n  const binary = atob(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return bytes;\n}\n\n/**\n * Convert ArrayBuffer to standard Base64 string (not URL-safe)\n * @param buffer - ArrayBuffer to convert\n * @returns Base64 encoded string\n */\nexport function arrayBufferToBase64(buffer: ArrayBuffer): string {\n  const bytes = new Uint8Array(buffer);\n  let binary = '';\n  for (let i = 0; i < bytes.byteLength; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return btoa(binary);\n}\n","/**\n * Authentication and JWT token management\n */\n\n// Base64URL encoding/decoding utilities\nexport * from './base64url';\n\n// Storage abstractions\nexport * from './storage';\n\n// JWT token management\nexport {\n  type JwtTokens,\n  type LoginResponse,\n  type RefreshResponse,\n  type VerifyResponse,\n  JwtTokenManager,\n  createJwtTokenManager,\n  jwtTokenManager,\n  configureJwtModule,\n  logout,\n  verifyToken,\n  ensureValidToken,\n  getValidTokens,\n  authenticatedFetch,\n  loginWithUserId,\n  loginWithEmail,\n  loginWithTelegram,\n  syncKeyshareStatus,\n} from './jwt';\n","/**\n * Utility functions for Lumia Passport Core\n */\n\nexport * from './project-id';\nexport * from './env';\nexport * from './helpers';\n","/**\n * @lumiapassport/core\n * Framework-agnostic SDK for Lumia Passport smart accounts\n */\n\n// Export configuration\nexport * from './config';\n\n// Export auth modules\nexport * from './auth';\n\n// Export utils\nexport * from './utils';\n\n// Export bundler (placeholder for now)\nexport * from './bundler';\n\n// Export clients (placeholder for now)\nexport * from './clients';\n\n// Export MPC (placeholder for now)\nexport * from './mpc';\n\n// Package version\nexport const VERSION = '0.1.0';\n","/**\n * Server Wallet Client\n *\n * Client for managing server-side TSS wallets using API keys.\n * Server wallets are generated on the backend using the DKLS23 TSS protocol.\n *\n * @see https://github.com/lumia-org/passport-sdk/docs/SERVER_WALLETS.md\n */\n\nimport type {\n  ServerWalletInfo,\n  ServerWalletsListResponse,\n  ServerDkgStartRequest,\n  ServerDkgStartResponse,\n  ServerDkgRoundResponse,\n  ServerSignStartRequest,\n  ServerSignStartResponse,\n  ServerSignRoundResponse,\n} from './types';\n\nexport interface ServerWalletClientConfig {\n  /**\n   * Project API key from Lumia Passport Dashboard\n   * Format: lp_00ab351d95c0eaf3ee499006a6a32402c31177bef4c7c1f26fed8cb947e15966\n   */\n  apiKey: string;\n\n  /**\n   * TSS API base URL\n   * @default 'https://api.lumiapassport.com/tss'\n   */\n  tssUrl?: string;\n\n  /**\n   * Enable debug logging\n   * @default false\n   */\n  debug?: boolean;\n}\n\nexport class ServerWalletClient {\n  private apiKey: string;\n  private tssUrl: string;\n  private debug: boolean;\n\n  constructor(config: ServerWalletClientConfig) {\n    this.apiKey = config.apiKey;\n    this.tssUrl = config.tssUrl || 'https://api.lumiapassport.com/tss';\n    this.debug = config.debug || false;\n\n    if (!this.apiKey || !this.apiKey.startsWith('lp_')) {\n      throw new Error('Invalid API key format. Expected format: lp_...');\n    }\n  }\n\n  /**\n   * Make authenticated request to TSS API\n   */\n  private async request<T>(\n    endpoint: string,\n    options: RequestInit = {}\n  ): Promise<T> {\n    const url = `${this.tssUrl}${endpoint}`;\n\n    const headers = {\n      'Content-Type': 'application/json',\n      'X-Project-API-Key': this.apiKey,\n      ...options.headers,\n    };\n\n    if (this.debug) {\n      console.log('[ServerWalletClient]', options.method || 'GET', url);\n      if (options.body) {\n        console.log('[ServerWalletClient] Body:', options.body);\n      }\n    }\n\n    const response = await fetch(url, {\n      ...options,\n      headers,\n    });\n\n    if (!response.ok) {\n      const errorData = await response.json().catch(() => ({})) as any;\n      const errorMessage = errorData.error || errorData.message || `HTTP ${response.status}`;\n\n      if (this.debug) {\n        console.error('[ServerWalletClient] Error:', errorMessage, errorData);\n      }\n\n      throw new Error(`TSS API error: ${errorMessage}`);\n    }\n\n    const data = await response.json();\n\n    if (this.debug) {\n      console.log('[ServerWalletClient] Response:', data);\n    }\n\n    return data as T;\n  }\n\n  // ==================== Wallet Management ====================\n\n  /**\n   * List all server-side wallets for this project\n   *\n   * @returns List of wallets with their info\n   *\n   * @example\n   * ```ts\n   * const { wallets, count } = await client.listWallets();\n   * console.log(`Found ${count} wallets:`, wallets);\n   * ```\n   */\n  async listWallets(): Promise<ServerWalletsListResponse> {\n    return this.request<ServerWalletsListResponse>('/api/tss/server/wallets', {\n      method: 'GET',\n    });\n  }\n\n  /**\n   * Get information about a specific server-side wallet\n   *\n   * @param userId - Wallet identifier\n   * @returns Wallet information if exists\n   * @throws Error if wallet not found\n   *\n   * @example\n   * ```ts\n   * const wallet = await client.getWalletInfo('treasury_main');\n   * console.log('Wallet address:', publicKeyToAddress(wallet.pubkey));\n   * ```\n   */\n  async getWalletInfo(userId: string): Promise<ServerWalletInfo> {\n    return this.request<ServerWalletInfo>(`/api/tss/server/${userId}/info`, {\n      method: 'GET',\n    });\n  }\n\n  /**\n   * Check if a wallet exists\n   *\n   * @param userId - Wallet identifier\n   * @returns true if wallet exists, false otherwise\n   *\n   * @example\n   * ```ts\n   * if (await client.walletExists('treasury_main')) {\n   *   console.log('Wallet already exists');\n   * } else {\n   *   // Create new wallet\n   * }\n   * ```\n   */\n  async walletExists(userId: string): Promise<boolean> {\n    try {\n      await this.getWalletInfo(userId);\n      return true;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  // ==================== DKG (Key Generation) ====================\n\n  /**\n   * Start DKG protocol for creating a new server-side wallet\n   *\n   * @param userId - Unique identifier for this wallet\n   * @param params - DKG parameters\n   * @returns Session ID and first server message\n   *\n   * @example\n   * ```ts\n   * const { sessionId, msg1 } = await client.dkgStart('treasury_main', {\n   *   threshold: 2,\n   *   parties: 2,\n   *   domainLabel: 'myapp:wallets'\n   * });\n   * ```\n   */\n  async dkgStart(\n    userId: string,\n    params: ServerDkgStartRequest\n  ): Promise<ServerDkgStartResponse> {\n    return this.request<ServerDkgStartResponse>(\n      `/api/tss/server/${userId}/dkg/start`,\n      {\n        method: 'POST',\n        body: JSON.stringify(params),\n      }\n    );\n  }\n\n  /**\n   * Process DKG round - exchange messages with server\n   *\n   * @param userId - Wallet identifier\n   * @param sessionId - Session ID from dkgStart\n   * @param clientMsg - Message from client-side WASM\n   * @returns Next server message or final public key\n   *\n   * @example\n   * ```ts\n   * // Continue rounds until done\n   * let result = await client.dkgRound(userId, sessionId, clientState.outgoing_message);\n   * while (result.msg) {\n   *   clientState = dkg_handle(clientState, result.msg);\n   *   result = await client.dkgRound(userId, sessionId, clientState.outgoing_message);\n   * }\n   * // result.pubkey contains wallet public key\n   * ```\n   */\n  async dkgRound(\n    userId: string,\n    sessionId: string,\n    clientMsg: Record<string, unknown>\n  ): Promise<ServerDkgRoundResponse> {\n    return this.request<ServerDkgRoundResponse>(\n      `/api/tss/server/${userId}/dkg/round`,\n      {\n        method: 'POST',\n        body: JSON.stringify({ sessionId, clientMsg }),\n      }\n    );\n  }\n\n  // ==================== Signing ====================\n\n  /**\n   * Start signing protocol for transaction/message\n   *\n   * @param userId - Wallet identifier\n   * @param params - Signing parameters\n   * @returns First server message\n   *\n   * @example\n   * ```ts\n   * const txHash = keccak256(serializedTransaction);\n   * const { msg1 } = await client.signStart('treasury_main', {\n   *   sessionId,\n   *   digest32: txHash,\n   *   chainPath: \"m/44'/60'/0'/0/0\"\n   * });\n   * ```\n   */\n  async signStart(\n    userId: string,\n    params: ServerSignStartRequest\n  ): Promise<ServerSignStartResponse> {\n    return this.request<ServerSignStartResponse>(\n      `/api/tss/server/${userId}/sign/start`,\n      {\n        method: 'POST',\n        body: JSON.stringify(params),\n      }\n    );\n  }\n\n  /**\n   * Process signing round - exchange messages with server\n   *\n   * @param userId - Wallet identifier\n   * @param sessionId - Session ID\n   * @param clientMsg - Message from client-side WASM\n   * @returns Next server message or final signature\n   *\n   * @example\n   * ```ts\n   * // Continue rounds until done\n   * let result = await client.signRound(userId, sessionId, clientState.outgoing_message);\n   * while (result.msg) {\n   *   clientState = sign_handle(clientState, result.msg);\n   *   result = await client.signRound(userId, sessionId, clientState.outgoing_message);\n   * }\n   * // result.signature contains { r, s, v }\n   * ```\n   */\n  async signRound(\n    userId: string,\n    sessionId: string,\n    clientMsg: Record<string, unknown>\n  ): Promise<ServerSignRoundResponse> {\n    return this.request<ServerSignRoundResponse>(\n      `/api/tss/server/${userId}/sign/round`,\n      {\n        method: 'POST',\n        body: JSON.stringify({ sessionId, clientMsg }),\n      }\n    );\n  }\n}\n\n/**\n * Create a server wallet client instance\n *\n * @param config - Client configuration\n * @returns Configured client instance\n *\n * @example\n * ```ts\n * const client = createServerWalletClient({\n *   apiKey: process.env.LUMIA_PASSPORT_API_KEY!,\n *   debug: true\n * });\n *\n * // List existing wallets\n * const { wallets } = await client.listWallets();\n * ```\n */\nexport function createServerWalletClient(\n  config: ServerWalletClientConfig\n): ServerWalletClient {\n  return new ServerWalletClient(config);\n}\n","/**\n * Server Wallet Manager\n *\n * High-level API for managing server-side TSS wallets.\n * Abstracts away TSS protocol complexity (DKG rounds, signing rounds, etc.)\n *\n * Usage:\n * ```ts\n * const manager = new ServerWalletManager({\n *   apiKey: process.env.LUMIA_PASSPORT_API_KEY!,\n *   storage: new MemoryKeyshareStorage() // or your secure storage\n * });\n *\n * // Create wallet\n * const wallet = await manager.createWallet('treasury_main');\n *\n * // Sign transaction\n * const signature = await manager.signDigest('treasury_main', txHash);\n *\n * // List all wallets\n * const wallets = await manager.listWallets();\n * ```\n */\n\nimport { ServerWalletClient } from './server-wallet-client';\nimport type { EcdsaSignature } from './types';\n\n// Dynamic import for dkls23-wasm (only when needed)\nlet dklsWasm: any = null;\n\nasync function loadDklsWasm() {\n  if (!dklsWasm) {\n    try {\n      dklsWasm = await import('dkls23-wasm');\n    } catch (error) {\n      throw new Error(\n        'dkls23-wasm is required for server wallet operations. Install it with: npm install dkls23-wasm'\n      );\n    }\n  }\n  return dklsWasm;\n}\n\n/**\n * Keyshare storage interface\n * Implement this to store keyshares securely (AWS KMS, Vault, encrypted DB, etc.)\n */\nexport interface KeyshareStorage {\n  /**\n   * Store keyshare for a wallet\n   */\n  set(userId: string, keyshare: string): Promise<void> | void;\n\n  /**\n   * Retrieve keyshare for a wallet\n   */\n  get(userId: string): Promise<string | null> | string | null;\n\n  /**\n   * Check if keyshare exists\n   */\n  has(userId: string): Promise<boolean> | boolean;\n\n  /**\n   * List all wallet IDs with keyshares\n   */\n  list(): Promise<string[]> | string[];\n}\n\n/**\n * Simple in-memory keyshare storage (for development/testing only!)\n * DO NOT use in production - keyshares will be lost on restart\n */\nexport class MemoryKeyshareStorage implements KeyshareStorage {\n  private keyshares = new Map<string, string>();\n\n  async set(userId: string, keyshare: string): Promise<void> {\n    this.keyshares.set(userId, keyshare);\n  }\n\n  async get(userId: string): Promise<string | null> {\n    return this.keyshares.get(userId) || null;\n  }\n\n  async has(userId: string): Promise<boolean> {\n    return this.keyshares.has(userId);\n  }\n\n  async list(): Promise<string[]> {\n    return Array.from(this.keyshares.keys());\n  }\n}\n\nexport interface ServerWalletManagerConfig {\n  /**\n   * Project API key from Lumia Passport Dashboard\n   */\n  apiKey: string;\n\n  /**\n   * Keyshare storage implementation\n   * IMPORTANT: Use secure storage in production (AWS KMS, Vault, etc.)\n   */\n  storage: KeyshareStorage;\n\n  /**\n   * TSS API base URL\n   * @default 'https://api.lumiapassport.com/tss'\n   */\n  tssUrl?: string;\n\n  /**\n   * Bundler RPC URL\n   * @default 'https://api.lumiapassport.com/rundler'\n   */\n  bundlerUrl?: string;\n\n  /**\n   * Blockchain RPC URL\n   * @default 'https://beam-rpc.lumia.org'\n   */\n  rpcUrl?: string;\n\n  /**\n   * Chain ID\n   * @default 2030232745 (Lumia Beam Testnet)\n   */\n  chainId?: number;\n\n  /**\n   * Account Abstraction factory address\n   * @default '0x37053B3C6fb47B92355B95E7bEfa6dDf04Cc9981'\n   */\n  factoryAddress?: `0x${string}`;\n\n  /**\n   * EntryPoint v0.7 address\n   * @default '0x0000000071727De22E5E9d8BAf0edAc6f37da032'\n   */\n  entryPointAddress?: `0x${string}`;\n\n  /**\n   * Paymaster address (optional, for sponsored transactions)\n   */\n  paymasterAddress?: `0x${string}`;\n\n  /**\n   * Domain separation label for DKG\n   * @default 'lumia:server-wallets'\n   */\n  domainLabel?: string;\n\n  /**\n   * Enable debug logging\n   * @default false\n   */\n  debug?: boolean;\n}\n\n/**\n * Server Wallet instance\n * Represents a single server-side TSS wallet with methods to interact with it\n */\nexport class ServerWallet {\n  constructor(\n    public readonly userId: string,\n    public readonly pubkey: string,\n    public readonly ownerAddress: `0x${string}`,\n    public readonly smartAccountAddress: `0x${string}`,\n    public readonly createdAt: string,\n    public readonly sessionId: string,\n    private readonly manager: ServerWalletManager\n  ) {}\n\n  /**\n   * Send a UserOperation (transaction) using this wallet\n   *\n   * @param to - Recipient address\n   * @param value - Amount in wei (as string)\n   * @param data - Transaction data (optional)\n   * @param feeType - Fee type: 'economy', 'standard', or 'fast'\n   * @returns UserOperation hash\n   *\n   * @example\n   * ```ts\n   * const wallet = await manager.getWallet('treasury_main');\n   * const userOpHash = await wallet.sendUserOperation(\n   *   '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',\n   *   '1000000000000000000', // 1 ETH\n   *   '0x',\n   *   'standard'\n   * );\n   * ```\n   */\n  async sendUserOperation(\n    to: `0x${string}`,\n    value: string,\n    data: `0x${string}` = '0x',\n    feeType: 'economy' | 'standard' | 'fast' = 'standard'\n  ): Promise<`0x${string}`> {\n    return this.manager.sendUserOperation(this, to, value, data, feeType);\n  }\n\n  /**\n   * Sign a 32-byte digest\n   *\n   * @param digest32 - 32-byte hash to sign\n   * @param chainPath - BIP-44 derivation path (optional)\n   * @returns ECDSA signature\n   *\n   * @example\n   * ```ts\n   * const signature = await wallet.signDigest(txHash);\n   * ```\n   */\n  async signDigest(\n    digest32: string,\n    chainPath: string = \"m/44'/60'/0'/0/0\"\n  ): Promise<EcdsaSignature> {\n    return this.manager.signDigest(this.userId, digest32, chainPath);\n  }\n\n  /**\n   * Check if we have the keyshare for this wallet locally\n   */\n  async hasKeyshare(): Promise<boolean> {\n    return this.manager.hasKeyshare(this.userId);\n  }\n\n  /**\n   * Convert to plain object\n   */\n  toJSON() {\n    return {\n      userId: this.userId,\n      pubkey: this.pubkey,\n      ownerAddress: this.ownerAddress,\n      smartAccountAddress: this.smartAccountAddress,\n      createdAt: this.createdAt,\n      sessionId: this.sessionId,\n    };\n  }\n}\n\n/**\n * High-level server wallet manager\n * Handles all TSS protocol complexity internally\n */\nexport class ServerWalletManager {\n  private client: ServerWalletClient;\n  private storage: KeyshareStorage;\n  private domainLabel: string;\n  private debug: boolean;\n\n  // AA configuration\n  // private _bundlerUrl: string; // TODO: Use for bundler client\n  private rpcUrl: string;\n  // private _chainId: number; // TODO: Use for chain-specific logic\n  private factoryAddress: `0x${string}`;\n  private entryPointAddress: `0x${string}`;\n  private paymasterAddress?: `0x${string}`;\n\n  // Lazy-loaded viem client\n  private publicClient: any = null;\n\n  constructor(config: ServerWalletManagerConfig) {\n    this.client = new ServerWalletClient({\n      apiKey: config.apiKey,\n      tssUrl: config.tssUrl,\n      debug: config.debug,\n    });\n\n    this.storage = config.storage;\n    this.domainLabel = config.domainLabel || 'lumia:server-wallets';\n    this.debug = config.debug || false;\n\n    // AA configuration with defaults\n    // this._bundlerUrl = config.bundlerUrl || 'https://api.lumiapassport.com/rundler';\n    this.rpcUrl = config.rpcUrl || 'https://beam-rpc.lumia.org';\n    // this._chainId = config.chainId || 2030232745;\n    this.factoryAddress = config.factoryAddress || '0x37053B3C6fb47B92355B95E7bEfa6dDf04Cc9981';\n    this.entryPointAddress = config.entryPointAddress || '0x0000000071727De22E5E9d8BAf0edAc6f37da032';\n    this.paymasterAddress = config.paymasterAddress;\n  }\n\n  /**\n   * Get viem public client (lazy initialization)\n   */\n  private async getPublicClient() {\n    if (!this.publicClient) {\n      const { createPublicClient, http } = await import('viem');\n      this.publicClient = createPublicClient({\n        transport: http(this.rpcUrl),\n      });\n    }\n    return this.publicClient;\n  }\n\n  /**\n   * Predict Smart Account address for a given owner\n   */\n  private async predictSmartAccountAddress(ownerAddress: `0x${string}`): Promise<`0x${string}`> {\n    const publicClient = await this.getPublicClient();\n\n    // Call factory.getAddress(owner, salt)\n    const factoryAbi = [\n      {\n        type: 'function',\n        name: 'getAddress',\n        stateMutability: 'view',\n        inputs: [\n          { name: 'owner', type: 'address' },\n          { name: 'salt', type: 'bytes32' },\n        ],\n        outputs: [{ name: '', type: 'address' }],\n      },\n    ] as const;\n\n    const saltZero = '0x0000000000000000000000000000000000000000000000000000000000000000' as const;\n\n    try {\n      const predicted = await publicClient.readContract({\n        address: this.factoryAddress,\n        abi: factoryAbi,\n        functionName: 'getAddress',\n        args: [ownerAddress, saltZero],\n      });\n\n      return predicted as `0x${string}`;\n    } catch (error) {\n      throw new Error(`Failed to predict smart account address: ${error}`);\n    }\n  }\n\n  /**\n   * Compute EOA address from TSS public key\n   */\n  private async computeOwnerAddress(pubkey: string): Promise<`0x${string}`> {\n    const { keccak256 } = await import('viem');\n\n    // Remove 0x04 prefix (uncompressed key indicator)\n    const pubkeyHex = pubkey.startsWith('0x') ? pubkey.slice(2) : pubkey;\n    const pubkeyBytes = pubkeyHex.slice(2); // Remove 04 prefix\n\n    // Hash and take last 20 bytes\n    const hash = keccak256(`0x${pubkeyBytes}` as `0x${string}`);\n    return `0x${hash.slice(-40)}`;\n  }\n\n  /**\n   * List all server-side wallets from TSS service\n   */\n  async listWallets(): Promise<ServerWallet[]> {\n    const { wallets } = await this.client.listWallets();\n\n    const result: ServerWallet[] = [];\n    for (const w of wallets) {\n      const ownerAddress = await this.computeOwnerAddress(w.pubkey);\n      const smartAccountAddress = await this.predictSmartAccountAddress(ownerAddress);\n\n      result.push(\n        new ServerWallet(\n          w.userId,\n          w.pubkey,\n          ownerAddress,\n          smartAccountAddress,\n          w.createdAt,\n          w.sessionId,\n          this\n        )\n      );\n    }\n\n    return result;\n  }\n\n  /**\n   * Get wallet information\n   * @throws Error if wallet doesn't exist\n   */\n  async getWallet(userId: string): Promise<ServerWallet> {\n    const wallet = await this.client.getWalletInfo(userId);\n    const ownerAddress = await this.computeOwnerAddress(wallet.pubkey);\n    const smartAccountAddress = await this.predictSmartAccountAddress(ownerAddress);\n\n    return new ServerWallet(\n      wallet.userId,\n      wallet.pubkey,\n      ownerAddress,\n      smartAccountAddress,\n      wallet.createdAt,\n      wallet.sessionId,\n      this\n    );\n  }\n\n  /**\n   * Check if wallet exists on TSS service\n   */\n  async walletExists(userId: string): Promise<boolean> {\n    return this.client.walletExists(userId);\n  }\n\n  /**\n   * Check if we have keyshare for this wallet locally\n   */\n  async hasKeyshare(userId: string): Promise<boolean> {\n    return this.storage.has(userId);\n  }\n\n  /**\n   * Create a new server-side wallet\n   * Runs DKG protocol and stores keyshare securely\n   *\n   * @param userId - Unique identifier for this wallet\n   * @returns Created wallet info\n   * @throws Error if wallet already exists or DKG fails\n   */\n  async createWallet(userId: string): Promise<ServerWallet> {\n    // Check if wallet already exists\n    const exists = await this.client.walletExists(userId);\n    if (exists) {\n      throw new Error(`Wallet ${userId} already exists`);\n    }\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Creating wallet: ${userId}`);\n    }\n\n    // Load WASM\n    const wasm = await loadDklsWasm();\n\n    // Start DKG on server\n    const { sessionId, msg1 } = await this.client.dkgStart(userId, {\n      threshold: 2,\n      parties: 2,\n      domainLabel: this.domainLabel,\n    });\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] DKG started, sessionId: ${sessionId}`);\n    }\n\n    // Initialize client-side DKG (partyId=1, server uses partyId=2)\n    let clientState = wasm.dkg_start(1, 2, 2, this.domainLabel);\n    clientState = wasm.dkg_handle(clientState, msg1);\n\n    // Exchange messages until DKG completes\n    let roundNumber = 1;\n    let result = await this.client.dkgRound(userId, sessionId, clientState.outgoing_message);\n\n    while (result.msg) {\n      if (this.debug) {\n        console.log(`[ServerWalletManager] DKG round ${roundNumber}`);\n      }\n\n      clientState = wasm.dkg_handle(clientState, result.msg);\n      result = await this.client.dkgRound(userId, sessionId, clientState.outgoing_message);\n      roundNumber++;\n    }\n\n    if (!result.pubkey) {\n      throw new Error('DKG failed: no public key returned');\n    }\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] DKG complete after ${roundNumber} rounds`);\n      console.log(`[ServerWalletManager] Public key: ${result.pubkey}`);\n    }\n\n    // Store keyshare securely\n    await this.storage.set(userId, clientState.keyshare);\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Keyshare stored securely`);\n    }\n\n    // Compute addresses\n    const ownerAddress = await this.computeOwnerAddress(result.pubkey);\n    const smartAccountAddress = await this.predictSmartAccountAddress(ownerAddress);\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Owner Address (EOA): ${ownerAddress}`);\n      console.log(`[ServerWalletManager] Smart Account Address: ${smartAccountAddress}`);\n    }\n\n    // Return wallet instance\n    return new ServerWallet(\n      userId,\n      result.pubkey,\n      ownerAddress,\n      smartAccountAddress,\n      new Date().toISOString(),\n      sessionId,\n      this\n    );\n  }\n\n  /**\n   * Send a UserOperation (transaction) using a server wallet\n   * Internal method called by ServerWallet.sendUserOperation()\n   *\n   * @param wallet - ServerWallet instance\n   * @param to - Recipient address\n   * @param value - Amount in wei (as string)\n   * @param data - Transaction data (optional)\n   * @param feeType - Fee type: 'economy', 'standard', or 'fast'\n   * @returns UserOperation hash\n   * @throws Error if operation fails\n   *\n   * @internal Use wallet.sendUserOperation() instead\n   */\n  async sendUserOperation(\n    wallet: ServerWallet,\n    to: `0x${string}`,\n    value: string,\n    data: `0x${string}` = '0x',\n    feeType: 'economy' | 'standard' | 'fast' = 'standard'\n  ): Promise<`0x${string}`> {\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Sending UserOperation from ${wallet.userId}`);\n      console.log(`[ServerWalletManager]   Smart Account: ${wallet.smartAccountAddress}`);\n      console.log(`[ServerWalletManager]   To: ${to}`);\n      console.log(`[ServerWalletManager]   Value: ${value} wei`);\n    }\n\n    // Get public client\n    const publicClient = await this.getPublicClient();\n\n    // Load the send UserOp implementation\n    const { sendUserOperationForServerWallet } = await import('./server-wallet-send-userop');\n\n    // Sign function using TSS\n    const signDigestFn = async (digest: string) => {\n      return this.signDigest(wallet.userId, digest);\n    };\n\n    // Send UserOperation\n    const userOpHash = await sendUserOperationForServerWallet({\n      wallet,\n      to,\n      value,\n      data,\n      feeType,\n      signDigestFn,\n      publicClient,\n      factoryAddress: this.factoryAddress,\n      entryPointAddress: this.entryPointAddress,\n      paymasterAddress: this.paymasterAddress,\n      debug: this.debug,\n    });\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] UserOperation submitted: ${userOpHash}`);\n    }\n\n    return userOpHash;\n  }\n\n  /**\n   * Sign a 32-byte digest using TSS\n   * Internal method called by ServerWallet.signDigest()\n   *\n   * @param userId - Wallet identifier\n   * @param digest32 - 32-byte hash to sign (0x-prefixed hex string)\n   * @param chainPath - BIP-44 derivation path (optional)\n   * @returns ECDSA signature\n   * @throws Error if signing fails\n   *\n   * @internal Use wallet.signDigest() instead\n   */\n  async signDigest(\n    userId: string,\n    digest32: string,\n    chainPath: string = \"m/44'/60'/0'/0/0\"\n  ): Promise<EcdsaSignature> {\n    // Validate digest format\n    if (!/^0x[0-9a-fA-F]{64}$/.test(digest32)) {\n      throw new Error('digest32 must be a 32-byte hex string (0x + 64 hex chars)');\n    }\n\n    // Load keyshare\n    const keyshare = await this.storage.get(userId);\n    if (!keyshare) {\n      throw new Error(`No keyshare found for wallet ${userId}. Cannot sign.`);\n    }\n\n    // Get wallet info for sessionId\n    const wallet = await this.client.getWalletInfo(userId);\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Signing with wallet: ${userId}`);\n      console.log(`[ServerWalletManager] Digest: ${digest32}`);\n    }\n\n    // Load WASM\n    const wasm = await loadDklsWasm();\n\n    // Start signing on server\n    const { msg1 } = await this.client.signStart(userId, {\n      sessionId: wallet.sessionId,\n      digest32,\n      chainPath,\n    });\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Signing started`);\n    }\n\n    // Initialize client-side signing\n    let clientState = wasm.sign_start(keyshare, digest32, chainPath);\n    clientState = wasm.sign_handle(clientState, msg1);\n\n    // Exchange messages until signing completes\n    let roundNumber = 1;\n    let result = await this.client.signRound(userId, wallet.sessionId, clientState.outgoing_message);\n\n    while (result.msg) {\n      if (this.debug) {\n        console.log(`[ServerWalletManager] Signing round ${roundNumber}`);\n      }\n\n      clientState = wasm.sign_handle(clientState, result.msg);\n      result = await this.client.signRound(userId, wallet.sessionId, clientState.outgoing_message);\n      roundNumber++;\n    }\n\n    if (!result.signature) {\n      throw new Error('Signing failed: no signature returned');\n    }\n\n    if (this.debug) {\n      console.log(`[ServerWalletManager] Signing complete after ${roundNumber} rounds`);\n      console.log(`[ServerWalletManager] Signature: r=${result.signature.r.slice(0, 20)}..., s=${result.signature.s.slice(0, 20)}..., v=${result.signature.v}`);\n    }\n\n    return result.signature;\n  }\n\n  // Removed unused _publicKeyToAddress method\n  // If needed in future, implement proper keccak256 from viem\n}\n\n/**\n * Create a server wallet manager instance\n *\n * @example\n * ```ts\n * import { createServerWalletManager, MemoryKeyshareStorage } from '@lumiapassport/core';\n *\n * const manager = createServerWalletManager({\n *   apiKey: process.env.LUMIA_PASSPORT_API_KEY!,\n *   storage: new MemoryKeyshareStorage(), // Use secure storage in production!\n * });\n *\n * // Create wallet\n * const wallet = await manager.createWallet('my_wallet');\n * console.log('Wallet address:', wallet.address);\n *\n * // Sign transaction\n * const signature = await manager.signDigest('my_wallet', txHash);\n * ```\n */\nexport function createServerWalletManager(\n  config: ServerWalletManagerConfig\n): ServerWalletManager {\n  return new ServerWalletManager(config);\n}\n","/**\n * MPC/TSS client\n * Will be migrated from lumia-passport-ui-kit/src/internal/mpcClient.ts\n */\n\n// Placeholder - will be implemented in next phase\nexport const mpcPlaceholder = 'MPC module coming soon';\n"]}