{"version":3,"sources":["../../src/config/contracts.ts","../../src/services/SwapService.ts","../../src/services/WdkApiClient.ts","../../src/services/WdkService.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n  registry: string;\n  nft: string;\n  marketplace: string;\n  tips: string;\n  subscriptions: string;\n  payouts: string;\n  entryPoint: string;\n  paymaster: string;\n  accountFactory: string;\n  usdt: string;\n  weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n  testnet: {\n    // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n    registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n    nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n    marketplace: ZERO_ADDRESS, // Not yet deployed\n    tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n    subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n    payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n    entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n    paymaster: ZERO_ADDRESS, // Not yet deployed\n    accountFactory: ZERO_ADDRESS, // Not yet deployed\n    usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n    weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n  },\n  mainnet: {\n    // Ethereum Mainnet (1)\n    registry: ZERO_ADDRESS,\n    nft: ZERO_ADDRESS,\n    marketplace: ZERO_ADDRESS,\n    tips: ZERO_ADDRESS,\n    subscriptions: ZERO_ADDRESS,\n    payouts: ZERO_ADDRESS,\n    entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n    paymaster: ZERO_ADDRESS,\n    accountFactory: ZERO_ADDRESS,\n    usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n    weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n  },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n  // Platform fee in basis points (300 = 3%)\n  tipFeeBps: 300,\n  // Maximum royalty in basis points (1000 = 10%)\n  maxRoyaltyBps: 1000,\n  // Default slippage tolerance for swaps (50 = 0.5%)\n  defaultSlippageBps: 50,\n  // Voucher validity in seconds (30 days)\n  voucherValiditySecs: 30 * 24 * 60 * 60,\n  // Swap deadline in seconds (30 minutes)\n  swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n  name: 'ZubariNFT',\n  version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n  NFTVoucher: [\n    { name: 'tokenId', type: 'bytes32' },\n    { name: 'uri', type: 'string' },\n    { name: 'creator', type: 'address' },\n    { name: 'royaltyBps', type: 'uint256' },\n    { name: 'deadline', type: 'uint256' },\n  ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n  return ZUBARI_CONTRACTS[network];\n}\n","import type { SwapQuote, TxResult } from '../types';\nimport { PLATFORM_CONFIG, getContractAddresses } from '../config/contracts';\n\n/**\n * SwapService - DEX integration via Velora\n *\n * Handles token swaps with slippage protection,\n * quote fetching, and earnings conversion.\n */\nexport class SwapService {\n  private readonly _chainId: number;\n  private readonly isTestnet: boolean;\n\n  constructor(chainId: number, isTestnet: boolean = false) {\n    this._chainId = chainId;\n    this.isTestnet = isTestnet;\n  }\n\n  /**\n   * Get a swap quote\n   */\n  async getQuote(\n    tokenIn: string,\n    tokenOut: string,\n    amountIn: bigint\n  ): Promise<SwapQuote> {\n    if (amountIn <= 0n) {\n      throw new Error('Amount must be greater than 0');\n    }\n\n    // Placeholder - will use Velora DEX\n    return {\n      tokenIn,\n      tokenOut,\n      amountIn,\n      amountOut: BigInt(0),\n      priceImpact: 0,\n      route: [tokenIn, tokenOut],\n      estimatedGas: BigInt(0),\n    };\n  }\n\n  /**\n   * Execute a swap with slippage protection\n   */\n  async executeSwap(\n    quote: SwapQuote,\n    slippageToleranceBps: number = PLATFORM_CONFIG.defaultSlippageBps\n  ): Promise<TxResult> {\n    // Calculate minimum output with slippage\n    const _minAmountOut =\n      quote.amountOut - (quote.amountOut * BigInt(slippageToleranceBps)) / BigInt(10000);\n\n    // Calculate deadline\n    const _deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.swapDeadlineSecs;\n\n    // Warn if price impact is high\n    if (quote.priceImpact > 5) {\n      console.warn(`High price impact: ${quote.priceImpact}%`);\n    }\n\n    // Placeholder - will call swap contract\n    return {\n      hash: '',\n      network: 'ethereum',\n      status: 'pending',\n    };\n  }\n\n  /**\n   * Convert earnings to USDT, keeping some ETH for gas\n   */\n  async convertEarningsToStable(\n    ethBalance: bigint,\n    reserveForGas: bigint = BigInt('10000000000000000') // 0.01 ETH\n  ): Promise<TxResult> {\n    const amountToSwap = ethBalance - reserveForGas;\n\n    if (amountToSwap <= 0n) {\n      throw new Error('Insufficient balance after gas reserve');\n    }\n\n    // Get quote for ETH -> USDT\n    const contracts = getContractAddresses(this.isTestnet ? 'testnet' : 'mainnet');\n    const quote = await this.getQuote(\n      '0x0000000000000000000000000000000000000000', // ETH\n      contracts.usdt, // USDT on Ethereum\n      amountToSwap\n    );\n\n    return this.executeSwap(quote);\n  }\n\n  /**\n   * Check if a swap route exists\n   */\n  async hasRoute(tokenIn: string, tokenOut: string): Promise<boolean> {\n    try {\n      const quote = await this.getQuote(tokenIn, tokenOut, BigInt(1));\n      return quote.amountOut > 0n;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Get supported tokens for swapping\n   */\n  async getSupportedTokens(): Promise<string[]> {\n    // Placeholder - will query DEX\n    return [];\n  }\n}\n","/**\n * WDK API Client\n *\n * Client for calling the backend WDK endpoints to derive addresses\n * using Tether WDK (which runs server-side in Node.js).\n */\n\nimport type { NetworkType } from '../types';\n\nexport interface WdkApiConfig {\n  baseUrl: string;\n  timeout?: number;\n}\n\nexport interface DeriveAddressResponse {\n  success: boolean;\n  address?: string;\n  chain?: string;\n  path?: string;\n  network?: string;\n  error?: string;\n}\n\nexport interface DeriveAllAddressesResponse {\n  success: boolean;\n  addresses?: {\n    ethereum: string | null;\n    bitcoin: string | null;\n    ton: string | null;\n    tron: string | null;\n    solana: string | null;\n    spark: string | null;\n  };\n  network?: string;\n  error?: string;\n}\n\nexport interface ValidateSeedResponse {\n  success: boolean;\n  isValid?: boolean;\n  wordCount?: number;\n  error?: string;\n}\n\nexport interface GenerateSeedResponse {\n  success: boolean;\n  seed?: string;\n  wordCount?: number;\n  error?: string;\n}\n\n/**\n * WDK API Client for server-side Tether WDK integration\n */\nexport class WdkApiClient {\n  private config: Required<WdkApiConfig>;\n\n  constructor(config: WdkApiConfig) {\n    this.config = {\n      baseUrl: config.baseUrl,\n      timeout: config.timeout || 30000,\n    };\n  }\n\n  /**\n   * Generate a new BIP-39 seed phrase using Tether WDK\n   */\n  async generateSeed(): Promise<GenerateSeedResponse> {\n    try {\n      const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/generate-seed`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n      });\n\n      return await response.json();\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to generate seed',\n      };\n    }\n  }\n\n  /**\n   * Validate a BIP-39 seed phrase\n   */\n  async validateSeed(seed: string): Promise<ValidateSeedResponse> {\n    try {\n      const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/validate-seed`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({ seed }),\n      });\n\n      return await response.json();\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to validate seed',\n      };\n    }\n  }\n\n  /**\n   * Derive address for a specific chain using Tether WDK\n   */\n  async deriveAddress(\n    seed: string,\n    chain: NetworkType,\n    network: 'mainnet' | 'testnet' = 'testnet'\n  ): Promise<DeriveAddressResponse> {\n    try {\n      const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-address`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({ seed, chain, network }),\n      });\n\n      return await response.json();\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to derive address',\n      };\n    }\n  }\n\n  /**\n   * Derive addresses for all chains using Tether WDK\n   */\n  async deriveAllAddresses(\n    seed: string,\n    network: 'mainnet' | 'testnet' = 'testnet'\n  ): Promise<DeriveAllAddressesResponse> {\n    try {\n      const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-all`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({ seed, network }),\n      });\n\n      return await response.json();\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to derive addresses',\n      };\n    }\n  }\n}\n\n// Default API URL (can be overridden)\nconst DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';\n\n// Singleton instance\nlet wdkApiClient: WdkApiClient | null = null;\n\n/**\n * Get or create the WDK API client instance\n */\nexport function getWdkApiClient(baseUrl?: string): WdkApiClient {\n  if (!wdkApiClient || (baseUrl && wdkApiClient['config'].baseUrl !== baseUrl)) {\n    wdkApiClient = new WdkApiClient({\n      baseUrl: baseUrl || DEFAULT_API_URL,\n    });\n  }\n  return wdkApiClient;\n}\n","/**\n * WDK Service for SDK\n *\n * Native integration with Tether WDK for multi-chain address derivation.\n * Uses individual wallet modules for each chain to derive cryptographically\n * valid addresses from a BIP-39 seed phrase.\n *\n * Supported chains: Ethereum, Bitcoin, TON, TRON, Solana, Spark (Lightning)\n *\n * @see https://docs.wallet.tether.io/\n */\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n * TypeScript converts import() to require() in CommonJS, but WDK is ESM-only\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n  specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n  if (wdkLoaded) return;\n  if (wdkLoadError) throw wdkLoadError;\n\n  try {\n    const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n      dynamicImport('@tetherto/wdk'),\n      dynamicImport('@tetherto/wdk-wallet-btc'),\n      dynamicImport('@tetherto/wdk-wallet-evm'),\n      dynamicImport('@tetherto/wdk-wallet-solana'),\n      dynamicImport('@tetherto/wdk-wallet-ton'),\n      dynamicImport('@tetherto/wdk-wallet-tron'),\n      dynamicImport('@tetherto/wdk-wallet-spark'),\n    ]);\n\n    WdkManager = wdk.default;\n    WalletManagerBtc = btc.default;\n    WalletManagerEvm = evm.default;\n    WalletManagerSolana = solana.default;\n    WalletManagerTon = ton.default;\n    WalletManagerTron = tron.default;\n    WalletManagerSpark = spark.default;\n    wdkLoaded = true;\n  } catch (error) {\n    wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n    console.error('Failed to load WDK modules:', error);\n    throw wdkLoadError;\n  }\n}\n\nexport type SupportedChain = 'ethereum' | 'bitcoin' | 'ton' | 'tron' | 'solana' | 'spark';\n\nexport interface ChainAddress {\n  chain: SupportedChain;\n  address: string;\n  path: string;\n}\n\nexport interface MultiChainAddresses {\n  ethereum: string | null;\n  bitcoin: string | null;\n  ton: string | null;\n  tron: string | null;\n  solana: string | null;\n  spark: string | null;\n}\n\nexport interface WdkServiceConfig {\n  network: 'mainnet' | 'testnet';\n  rpcUrls?: {\n    ethereum?: string;\n    bitcoin?: string;\n    solana?: string;\n    ton?: string;\n    tron?: string;\n  };\n}\n\n// BIP-44 derivation paths\nconst DERIVATION_PATHS: Record<SupportedChain, string> = {\n  bitcoin: \"m/84'/0'/0'/0/0\", // BIP-84 for native SegWit\n  ethereum: \"m/44'/60'/0'/0/0\",\n  ton: \"m/44'/607'/0'\", // Updated for v1.0.0-beta.6+\n  tron: \"m/44'/195'/0'/0/0\",\n  solana: \"m/44'/501'/0'/0'\", // Updated for v1.0.0-beta.4+\n  spark: \"m/44'/998'/0'/0/0\",\n};\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n  mainnet: {\n    ethereum: 'https://eth.llamarpc.com',\n    solana: 'https://api.mainnet-beta.solana.com',\n    ton: 'https://toncenter.com/api/v2/jsonRPC',\n    tron: 'https://api.trongrid.io',\n  },\n  testnet: {\n    ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n    solana: 'https://api.devnet.solana.com',\n    ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n    tron: 'https://api.shasta.trongrid.io',\n  },\n};\n\n/**\n * WDK Service for native multi-chain address derivation\n * Uses Tether WDK wallet modules directly without needing a backend API\n */\nexport class WdkService {\n  private seed: string | null = null;\n  private config: WdkServiceConfig;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private wallets: Partial<Record<SupportedChain, any>> = {};\n\n  constructor(config: Partial<WdkServiceConfig> = {}) {\n    this.config = {\n      network: config.network || 'testnet',\n      rpcUrls: config.rpcUrls,\n    };\n  }\n\n  /**\n   * Check if WDK modules are loaded\n   */\n  static isLoaded(): boolean {\n    return wdkLoaded;\n  }\n\n  /**\n   * Ensure WDK modules are loaded\n   */\n  private async ensureLoaded(): Promise<void> {\n    await loadWdkModules();\n  }\n\n  /**\n   * Load WDK modules (call this before using sync methods)\n   */\n  async loadModules(): Promise<void> {\n    await loadWdkModules();\n  }\n\n  /**\n   * Generate a random BIP-39 seed phrase (12 words)\n   */\n  async generateSeedPhrase(): Promise<string> {\n    await this.ensureLoaded();\n    return WdkManager.getRandomSeedPhrase();\n  }\n\n  /**\n   * Validate a BIP-39 seed phrase\n   */\n  async isValidSeed(seed: string): Promise<boolean> {\n    await this.ensureLoaded();\n    return WdkManager.isValidSeed(seed);\n  }\n\n  /**\n   * Validate seed phrase (sync version - basic check)\n   */\n  isValidSeedSync(seed: string): boolean {\n    const words = seed.trim().split(/\\s+/);\n    return words.length === 12 || words.length === 24;\n  }\n\n  /**\n   * Initialize the service with a seed phrase\n   */\n  async initialize(seed: string): Promise<void> {\n    await this.ensureLoaded();\n\n    if (!WdkManager.isValidSeed(seed)) {\n      throw new Error('Invalid seed phrase');\n    }\n\n    this.seed = seed;\n    this.wallets = {};\n  }\n\n  /**\n   * Get RPC URL for a chain\n   */\n  private getRpcUrl(chain: SupportedChain): string {\n    const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n    if (this.config.rpcUrls?.[chain as keyof typeof this.config.rpcUrls]) {\n      return this.config.rpcUrls[chain as keyof typeof this.config.rpcUrls]!;\n    }\n\n    return networkUrls[chain as keyof typeof networkUrls] || '';\n  }\n\n  /**\n   * Get or create wallet instance for a specific chain\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private async getWallet(chain: SupportedChain): Promise<any> {\n    if (!this.seed) {\n      throw new Error('WDK service not initialized. Call initialize() first.');\n    }\n\n    // Return cached wallet if exists\n    if (this.wallets[chain]) {\n      return this.wallets[chain];\n    }\n\n    const isTestnet = this.config.network === 'testnet';\n\n    try {\n      switch (chain) {\n        case 'ethereum': {\n          const rpcUrl = this.getRpcUrl('ethereum');\n          const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n          this.wallets[chain] = wallet;\n          return wallet;\n        }\n\n        case 'bitcoin': {\n          const wallet = new WalletManagerBtc(this.seed, {\n            network: isTestnet ? 'testnet' : 'bitcoin',\n          });\n          this.wallets[chain] = wallet;\n          return wallet;\n        }\n\n        case 'solana': {\n          const rpcUrl = this.getRpcUrl('solana');\n          const wallet = new WalletManagerSolana(this.seed, {\n            rpcUrl,\n          });\n          this.wallets[chain] = wallet;\n          return wallet;\n        }\n\n        case 'ton': {\n          const url = this.getRpcUrl('ton');\n          const wallet = new WalletManagerTon(this.seed, {\n            tonClient: { url },\n          });\n          this.wallets[chain] = wallet;\n          return wallet;\n        }\n\n        case 'tron': {\n          const fullHost = this.getRpcUrl('tron');\n          const wallet = new WalletManagerTron(this.seed, {\n            provider: fullHost,\n          });\n          this.wallets[chain] = wallet;\n          return wallet;\n        }\n\n        case 'spark': {\n          const wallet = new WalletManagerSpark(this.seed, {\n            network: isTestnet ? 'TESTNET' : 'MAINNET',\n          });\n          this.wallets[chain] = wallet;\n          return wallet;\n        }\n\n        default:\n          throw new Error(`Unsupported chain: ${chain}`);\n      }\n    } catch (error) {\n      console.error(`Failed to initialize ${chain} wallet:`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Derive address for a specific chain\n   */\n  async deriveAddress(chain: SupportedChain): Promise<ChainAddress> {\n    const path = DERIVATION_PATHS[chain];\n\n    try {\n      const wallet = await this.getWallet(chain);\n      const account = await wallet.getAccount(0);\n      const address = await account.getAddress();\n\n      return {\n        chain,\n        address,\n        path,\n      };\n    } catch (error) {\n      console.error(`Error deriving ${chain} address:`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Derive addresses for all supported chains\n   */\n  async deriveAllAddresses(): Promise<MultiChainAddresses> {\n    const chains: SupportedChain[] = ['ethereum', 'bitcoin', 'ton', 'tron', 'solana', 'spark'];\n    const addresses: MultiChainAddresses = {\n      ethereum: null,\n      bitcoin: null,\n      ton: null,\n      tron: null,\n      solana: null,\n      spark: null,\n    };\n\n    // Derive all addresses in parallel for better performance\n    const results = await Promise.allSettled(\n      chains.map(async (chain) => {\n        const result = await this.deriveAddress(chain);\n        return { chain, address: result.address };\n      })\n    );\n\n    for (const result of results) {\n      if (result.status === 'fulfilled') {\n        addresses[result.value.chain] = result.value.address;\n      } else {\n        console.error('Failed to derive address:', result.reason);\n      }\n    }\n\n    return addresses;\n  }\n\n  /**\n   * Derive addresses for specific chains only\n   */\n  async deriveAddressesForChains(chains: SupportedChain[]): Promise<Partial<MultiChainAddresses>> {\n    const addresses: Partial<MultiChainAddresses> = {};\n\n    const results = await Promise.allSettled(\n      chains.map(async (chain) => {\n        const result = await this.deriveAddress(chain);\n        return { chain, address: result.address };\n      })\n    );\n\n    for (const result of results) {\n      if (result.status === 'fulfilled') {\n        addresses[result.value.chain] = result.value.address;\n      }\n    }\n\n    return addresses;\n  }\n\n  /**\n   * Get fee rates for a specific chain\n   */\n  async getFeeRates(\n    chain: SupportedChain\n  ): Promise<{ slow: string; medium: string; fast: string }> {\n    if (!this.seed) {\n      throw new Error('WDK service not initialized. Call initialize() first.');\n    }\n\n    try {\n      const wallet = await this.getWallet(chain);\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const feeRates: any = await wallet.getFeeRates();\n      return {\n        slow: (feeRates.slow || feeRates.low || '0').toString(),\n        medium: (feeRates.medium || feeRates.normal || feeRates.standard || '0').toString(),\n        fast: (feeRates.fast || feeRates.high || '0').toString(),\n      };\n    } catch (error) {\n      console.error(`Error fetching fee rates for ${chain}:`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Get the current network configuration\n   */\n  getNetwork(): 'mainnet' | 'testnet' {\n    return this.config.network;\n  }\n\n  /**\n   * Check if service is initialized\n   */\n  isInitialized(): boolean {\n    return this.seed !== null;\n  }\n\n  /**\n   * Clean up and dispose of wallet instances\n   */\n  dispose(): void {\n    for (const wallet of Object.values(this.wallets)) {\n      if (wallet && typeof wallet.dispose === 'function') {\n        try {\n          wallet.dispose();\n        } catch {\n          // Ignore dispose errors\n        }\n      }\n    }\n    this.wallets = {};\n    this.seed = null;\n  }\n}\n\n// Singleton instance\nlet wdkServiceInstance: WdkService | null = null;\n\n/**\n * Get or create the WDK service singleton\n */\nexport function getWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n  if (!wdkServiceInstance || (config && config.network !== wdkServiceInstance.getNetwork())) {\n    wdkServiceInstance = new WdkService(config);\n  }\n  return wdkServiceInstance;\n}\n\n/**\n * Create a new WDK service instance (non-singleton)\n */\nexport function createWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n  return new WdkService(config);\n}\n"]}