@lumiapassport/core 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -152,20 +152,12 @@ var init_storage = __esm({
152
152
  }
153
153
  }
154
154
  getItem(key) {
155
- console.log("[Storage] getItem called for key:", key);
156
155
  if (this.fallback) {
157
- console.log("[Storage] Using fallback memory storage");
158
156
  return this.fallback.getItem(key);
159
157
  }
160
158
  try {
161
159
  const win = typeof globalThis !== "undefined" && globalThis.window;
162
160
  const value = win?.localStorage?.getItem(key) || null;
163
- console.log("[Storage] Read from localStorage:", {
164
- key,
165
- hasValue: !!value,
166
- valueLength: value?.length,
167
- allKeys: win?.localStorage ? Object.keys(win.localStorage) : []
168
- });
169
161
  return value;
170
162
  } catch (error) {
171
163
  console.error("[Storage] Error reading from localStorage:", error);
@@ -173,24 +165,13 @@ var init_storage = __esm({
173
165
  }
174
166
  }
175
167
  setItem(key, value) {
176
- console.log("[Storage] setItem called:", { key, valueLength: value.length });
177
168
  if (this.fallback) {
178
- console.log("[Storage] Using fallback memory storage for write");
179
169
  this.fallback.setItem(key, value);
180
170
  return;
181
171
  }
182
172
  try {
183
173
  const win = typeof globalThis !== "undefined" && globalThis.window;
184
174
  win?.localStorage?.setItem(key, value);
185
- console.log("[Storage] Successfully wrote to localStorage");
186
- const verification = win?.localStorage?.getItem(key);
187
- if (!verification) {
188
- console.error("[Storage] \u26A0\uFE0F VERIFICATION FAILED: Value not found after write!");
189
- } else if (verification !== value) {
190
- console.error("[Storage] \u26A0\uFE0F VERIFICATION FAILED: Value mismatch after write!");
191
- } else {
192
- console.log("[Storage] \u2705 Write verified successfully");
193
- }
194
175
  } catch (error) {
195
176
  console.error("[Storage] Error writing to localStorage:", error);
196
177
  if (!this.fallback) {
@@ -564,20 +545,12 @@ var init_jwt = __esm({
564
545
  }
565
546
  isTokenExpired() {
566
547
  if (!this.tokens) {
567
- console.log("[JWT] No tokens available, considering expired");
568
548
  return true;
569
549
  }
570
550
  const buffer = 30 * 1e3;
571
551
  const now = Date.now();
572
552
  const expiresAt = this.tokens.expiresAt;
573
553
  const isExpired = now > expiresAt - buffer;
574
- console.log("[JWT] Token expiry check:", {
575
- currentTime: now,
576
- expiresAt,
577
- buffer,
578
- timeToExpiry: (expiresAt - now) / 1e3,
579
- isExpired
580
- });
581
554
  return isExpired;
582
555
  }
583
556
  isAuthenticated() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/project-id.ts","../src/bundler/client-provider.ts","../src/auth/storage.ts","../src/auth/jwt.ts","../src/config/index.ts","../src/auth/base64url.ts","../src/auth/index.ts","../src/utils/index.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/index.ts","../src/mpc/index.ts","../src/index.ts"],"names":["MemoryStorage","LocalStorageAdapter","JwtTokenManager","jwtTokenManager","setProjectId","setPublicClient","configureJwtModule"],"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 console.log('[Storage] getItem called for key:', key);\n if (this.fallback) {\n console.log('[Storage] Using fallback memory storage');\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 console.log('[Storage] Read from localStorage:', {\n key,\n hasValue: !!value,\n valueLength: value?.length,\n allKeys: win?.localStorage ? Object.keys(win.localStorage) : []\n });\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 console.log('[Storage] setItem called:', { key, valueLength: value.length });\n if (this.fallback) {\n console.log('[Storage] Using fallback memory storage for write');\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 console.log('[Storage] Successfully wrote to localStorage');\n\n // Verify write\n const verification = win?.localStorage?.getItem(key);\n if (!verification) {\n console.error('[Storage] ⚠️ VERIFICATION FAILED: Value not found after write!');\n } else if (verification !== value) {\n console.error('[Storage] ⚠️ VERIFICATION FAILED: Value mismatch after write!');\n } else {\n console.log('[Storage] ✅ Write verified successfully');\n }\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 console.log('[JWT] No tokens available, considering expired');\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 console.log('[JWT] Token expiry check:', {\n currentTime: now,\n expiresAt: expiresAt,\n buffer: buffer,\n timeToExpiry: (expiresAt - now) / 1000,\n isExpired: isExpired\n });\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 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 });\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 });\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\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 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 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 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 * 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 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 * 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 const minimalCallGas = isEmptyCallData ? '0x0' : '0x493e0'; // 300,000 for non-empty calls\n return { callGasLimit: minimalCallGas, verificationGasLimit: '0x989680', preVerificationGas: '0x30d40' };\n }\n}\n\nexport async function estimateUserOperationGasWithSignature(\n userOp: UserOperationV07,\n _getSignature: (opHash: `0x${string}`) => Promise<`0x${string}` | null>,\n _getUserOpHash: (packedOp: any) => Promise<`0x${string}`>,\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult> { const userOpForEstimation: UserOperationV07 = { ...userOp, signature: DUMMY_SIGNATURE }; return estimateUserOperationGas(userOpForEstimation, retryWithoutFactory); }\n\nexport async function estimateUserOperationGasWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard',\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult & { calculatedFees?: any }> {\n const userOp = await createUserOperationWithDynamicFees(sender, nonce, callData, includeFactory, factoryAddress, factoryData, feeType);\n const gasResult = await estimateUserOperationGas(userOp, retryWithoutFactory);\n return { ...gasResult, calculatedFees: { maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, feeType } };\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, SimulationResult } from './types';\n\nexport async function simulateUserOperation(userOp: UserOperationV07): Promise<SimulationResult> {\n const result = await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]);\n return result;\n}\n\nexport async function validateUserOperation(userOp: UserOperationV07): Promise<{ valid: boolean; error?: string }> {\n try { await simulateUserOperation(userOp); return { valid: true }; } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); return { valid: false, error: errorMsg }; }\n}\n","/**\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 * HTTP clients and account management\n * Will be migrated from lumia-passport-ui-kit/src/internal/clients/\n */\n\n// Placeholder - will be implemented in next phase\nexport const clientsPlaceholder = 'Clients module coming soon';\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","/**\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"]}
1
+ {"version":3,"sources":["../src/utils/project-id.ts","../src/bundler/client-provider.ts","../src/auth/storage.ts","../src/auth/jwt.ts","../src/config/index.ts","../src/auth/base64url.ts","../src/auth/index.ts","../src/utils/index.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/index.ts","../src/mpc/index.ts","../src/index.ts"],"names":["MemoryStorage","LocalStorageAdapter","JwtTokenManager","jwtTokenManager","setProjectId","setPublicClient","configureJwtModule"],"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 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 });\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 });\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\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 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 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 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 * 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 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 * 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 const minimalCallGas = isEmptyCallData ? '0x0' : '0x493e0'; // 300,000 for non-empty calls\n return { callGasLimit: minimalCallGas, verificationGasLimit: '0x989680', preVerificationGas: '0x30d40' };\n }\n}\n\nexport async function estimateUserOperationGasWithSignature(\n userOp: UserOperationV07,\n _getSignature: (opHash: `0x${string}`) => Promise<`0x${string}` | null>,\n _getUserOpHash: (packedOp: any) => Promise<`0x${string}`>,\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult> { const userOpForEstimation: UserOperationV07 = { ...userOp, signature: DUMMY_SIGNATURE }; return estimateUserOperationGas(userOpForEstimation, retryWithoutFactory); }\n\nexport async function estimateUserOperationGasWithDynamicFees(\n sender: `0x${string}`,\n nonce: `0x${string}`,\n callData: `0x${string}`,\n includeFactory: boolean = false,\n factoryAddress?: `0x${string}`,\n factoryData?: `0x${string}`,\n feeType: 'economy' | 'standard' | 'fast' = 'standard',\n retryWithoutFactory: boolean = true\n): Promise<GasEstimationResult & { calculatedFees?: any }> {\n const userOp = await createUserOperationWithDynamicFees(sender, nonce, callData, includeFactory, factoryAddress, factoryData, feeType);\n const gasResult = await estimateUserOperationGas(userOp, retryWithoutFactory);\n return { ...gasResult, calculatedFees: { maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, feeType } };\n}\n","import { bundlerRpc } from '../utils/helpers';\nimport { ENTRYPOINT_V07 } from './constants';\nimport type { UserOperationV07, SimulationResult } from './types';\n\nexport async function simulateUserOperation(userOp: UserOperationV07): Promise<SimulationResult> {\n const result = await bundlerRpc('eth_simulateUserOperation', [userOp, ENTRYPOINT_V07]);\n return result;\n}\n\nexport async function validateUserOperation(userOp: UserOperationV07): Promise<{ valid: boolean; error?: string }> {\n try { await simulateUserOperation(userOp); return { valid: true }; } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); return { valid: false, error: errorMsg }; }\n}\n","/**\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 * HTTP clients and account management\n * Will be migrated from lumia-passport-ui-kit/src/internal/clients/\n */\n\n// Placeholder - will be implemented in next phase\nexport const clientsPlaceholder = 'Clients module coming soon';\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","/**\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"]}