{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/services/wallet.service.ts","../src/services/swap.service.ts","../src/types/CustomFeePair.ts","../node_modules/jsbi/lib/jsbi.ts","../src/controllers/swap-sdk.controller.ts","../src/config/networks.ts"],"sourcesContent":["// Export types\nexport * from './types';\n\n// Export services\nexport { WalletService } from './services/wallet.service';\nexport { SwapService } from './services/swap.service';\n\n// Export headless controller only\nimport { SwapSdkController } from './controllers/swap-sdk.controller';\nexport { SwapSdkController } from './controllers/swap-sdk.controller';\n\n// Main factory function for easy initialization (headless)\nimport { SwapSdkOptions } from './types';\nimport { NETWORKS } from './config/networks';\nexport { NETWORKS} from './config/networks';\n\nexport { DEFAULT_SETTINGS as DEFAULT_SWAP_SETTINGS } from './controllers/swap-sdk.controller';\n\n/**\n * Create a new headless swap controller\n * @param options Configuration options for the controller\n * @returns SwapSdkController instance\n */\nexport function createKaspaComSwapController(options: SwapSdkOptions): SwapSdkController {\n  let resolvedOptions: SwapSdkOptions;\n  if ('networkConfig' in options && typeof options.networkConfig === 'string') {\n    const networkConfig = NETWORKS[options.networkConfig];\n    if (!networkConfig) throw new Error(`Unknown network key: ${options.networkConfig}`);\n    resolvedOptions = { ...options, networkConfig };\n  } else {\n    resolvedOptions = options as SwapSdkOptions;\n  }\n  \n  return new SwapSdkController(resolvedOptions);\n} ","import { Trade } from \"@uniswap/v2-sdk\";\nimport { Currency, Token, TradeType } from \"@uniswap/sdk-core\";\nimport { Eip1193Provider } from \"ethers\";\n\nexport interface Erc20Token {\n  address: string;\n  symbol: string;\n  name: string;\n  decimals: number;\n  balance?: number;\n  rawBalance?: string;\n  logoURI?: string;\n}\n\nexport interface SwapSettings {\n  maxSlippage: string;\n  swapDeadline: number;\n}\n\nexport interface SwapState {\n  needsApproval: boolean;\n  isApproved: boolean;\n  isApproving: boolean;\n  isSwapping: boolean;\n  error: string | null;\n  success: boolean;\n  transactionHash: string | null;\n  status: string | null;\n  expectedAmountOut: string | null;\n  isCalculating: boolean;\n}\n\nexport interface SwapSectionData {\n  title: string;\n  amount: string;\n  usdValue: string;\n}\n\nexport interface SwapSdkOptions {\n  networkConfig: SwapSdkNetworkConfig | string;\n  walletProvider?: Eip1193Provider; // Custom wallet provider (e.g., MetaMask, WalletConnect, etc.)\n  partnerKey?: string;\n  onChange?: (state: SwapControllerOutput, patch: Partial<SwapControllerOutput>) => Promise<void>;\n  refreshPairsInterval?: number;\n  updateQuoteAfterRefreshPairs?: boolean;\n  getPairsData?: () => Promise<KaspaComSdkPair[]>;\n  swapServiceClass?: any;\n  maxHops?: number;\n}\n\n\n\nexport interface SwapControllerInput {\n  fromToken?: Erc20Token | null;\n  toToken?: Erc20Token | null;\n  amount?: number;\n  isOutputAmount?: boolean;\n  settings?: Partial<SwapSettings>;\n}\n\nexport enum LoaderStatuses {\n  CALCULATING_QUOTE = 1,\n  APPROVING = 2,\n  SWAPPING = 3,\n}\n\nexport interface ComputedAmounts {\n  maxAmountIn?: string,\n  minAmountOut?: string,\n  amountIn: string,\n  amountOut: string,\n  amountInRaw: string,\n  amountOutRaw: string,\n  maxAmountInRaw?: string,\n  minAmountOutRaw?: string,\n}\n\nexport interface SwapControllerOutput {\n  error?: string;\n  txHash?: string;\n  approveTxHash?: string;\n  /**\n   * @deprecated Use `computed` instead, The tradeInfo can contain incorrect information\n   */\n  tradeInfo?: Trade<Currency, Currency, TradeType.EXACT_INPUT> | Trade<Currency, Currency, TradeType.EXACT_OUTPUT>;\n  path?: Token[],\n  computed?: ComputedAmounts;\n  loader: LoaderStatuses | null;\n}\n\nexport interface SwapSdkNetworkConfig {\n  name: string;\n  chainId: number;\n  rpcUrl: string;\n  routerAddress: string;\n  factoryAddress: string;\n  proxyAddress?: string;\n  graphEndpoint: string;\n  blockExplorerUrl?: string;\n  additionalJsonRpcApiProviderOptionsOptions?: any;\n  nativeToken: Erc20Token;\n  wrappedToken: Erc20Token;\n  isTestnet?: boolean;\n}\n\nexport interface KaspaComSdkPair {\n  id: string;\n  token0: {\n    id: string;\n    symbol: string;\n    name: string;\n    decimals: string | number;\n  };\n  token1: {\n    id: string;\n    symbol: string;\n    name: string;\n    decimals: string | number;\n  };\n  reserve0: string;\n  reserve1: string;\n  positionValueUsd?: number;\n  totalTokens?: number;\n}","import { BrowserProvider, JsonRpcProvider, Signer, Eip1193Provider } from 'ethers';\nimport { SwapSdkNetworkConfig } from '../types';\n\nexport class WalletService {\n  private networkProvider: JsonRpcProvider;\n  private signer: Signer | null = null;\n  private address: string | null = null;\n  private config: SwapSdkNetworkConfig;\n  private injectedProvider?: Eip1193Provider;\n  private walletProvider?: BrowserProvider; // injected provider (window.ethereum or similar)\n\n  constructor(\n    config: SwapSdkNetworkConfig,\n    injectedProvider?: Eip1193Provider,\n  ) {\n    this.config = config;\n    this.networkProvider = new JsonRpcProvider(config.rpcUrl, {\n      name: config.name,\n      chainId: config.chainId,\n    }, config.additionalJsonRpcApiProviderOptionsOptions);\n    if (injectedProvider) {\n      this.connect(this.injectedProvider);\n\n    }\n  }\n\n  async connect(injectedProvider?: Eip1193Provider): Promise<string> {\n    if (injectedProvider) {\n      this.injectedProvider = injectedProvider;\n      this.walletProvider = new BrowserProvider(this.injectedProvider);\n    }\n\n    if (!this.injectedProvider || !this.walletProvider) {\n      throw new Error('Please connect wallet.');\n    }\n\n    try {\n      // Request account access\n      const accounts = await this.injectedProvider.request({\n        method: 'eth_requestAccounts'\n      });\n\n      if (accounts.length === 0) {\n        throw new Error('No accounts found');\n      }\n\n      this.address = accounts[0];\n\n      // Check if we're on the correct network\n      const chainId = await this.injectedProvider.request({\n        method: 'eth_chainId'\n      });\n      const currentChainId = parseInt(chainId, 16);\n      if (currentChainId !== this.config.chainId) {\n        // Try to switch to the correct network\n        try {\n          await this.injectedProvider.request({\n            method: 'wallet_switchEthereumChain',\n            params: [{ chainId: `0x${this.config.chainId.toString(16)}` }]\n          });\n        } catch (switchError: any) {\n          // If the network doesn't exist, try to add it\n          if (switchError.code === 4902) {\n            await this.injectedProvider.request({\n              method: 'wallet_addEthereumChain',\n              params: [{\n                chainId: `0x${this.config.chainId.toString(16)}`,\n                chainName: this.config.name,\n                nativeCurrency: {\n                  name: 'ETH',\n                  symbol: 'ETH',\n                  decimals: 18\n                },\n                rpcUrls: [this.config.rpcUrl],\n                blockExplorerUrls: this.config.blockExplorerUrl ? [this.config.blockExplorerUrl] : []\n              }]\n            });\n\n            await this.injectedProvider.request({\n              method: 'wallet_switchEthereumChain',\n              params: [{ chainId: `0x${this.config.chainId.toString(16)}` }]\n            });\n          } else {\n            throw new Error(`Please switch to ${this.config.name} network`);\n          }\n        }\n      }\n      // Update injectedProvider and signer\n      this.signer = await this.walletProvider.getSigner();\n\n      return this.address!;\n    } catch (error: any) {\n      if (error.code === 4001) {\n        throw new Error('User rejected wallet connection');\n      }\n      throw new Error(`Failed to connect wallet: ${error.message}`);\n    }\n  }\n\n  disconnect(): void {\n    this.address = null;\n    this.signer = null;\n  }\n\n  isConnected(): boolean {\n    return !!this.address && !!this.signer;\n  }\n\n  getAddress(): string | null {\n    return this.address;\n  }\n\n  getProvider(): BrowserProvider | JsonRpcProvider | null {\n    return this.walletProvider || this.networkProvider;\n  }\n\n  destroy() {\n    if (this.walletProvider) {\n      this.networkProvider.destroy();\n      this.disconnect();\n    }\n  }\n\n  getSigner(): Signer | null {\n    return this.signer;\n  }\n\n  // Helper method to get current chain ID\n  async getCurrentChainId(): Promise<number> {\n    if (!this.injectedProvider) {\n      throw new Error('No Ethereum wallet detected');\n    }\n    const chainId = await this.injectedProvider.request({\n      method: 'eth_chainId'\n    });\n    return parseInt(chainId, 16);\n  }\n\n  // Connect wallet and emit event with address\n  async connectWallet(): Promise<string> {\n    if (this.injectedProvider) {\n      try {\n        const accounts = await this.injectedProvider.request({\n          method: 'eth_requestAccounts'\n        });\n        if (accounts.length > 0 && typeof accounts[0] === 'string') {\n          const address: string = accounts[0];\n          this.address = address;\n          return address;\n        } else {\n          throw new Error('No accounts found');\n        }\n      } catch (error) {\n        console.error('Failed to connect wallet:', error);\n        throw error;\n      }\n    } else {\n      throw new Error('No Ethereum wallet detected. Please connect a wallet provider.');\n    }\n  }\n} ","import { BigNumberish, Contract, Signer, BrowserProvider, JsonRpcProvider, parseUnits, formatUnits, ZeroAddress, ethers, hexlify, ContractTransactionResponse, TransactionResponse } from 'ethers';\nimport { Currency, CurrencyAmount, Percent, Token, TradeType } from '@uniswap/sdk-core';\nimport { Trade, Pair, Route } from '@uniswap/v2-sdk';\nimport { ComputedAmounts, Erc20Token, KaspaComSdkPair, SwapSdkNetworkConfig, SwapSdkOptions } from '../types';\nimport { CustomFeePair } from '../types/CustomFeePair';\n\nexport const PARTNER_FEE_BPS_DIVISOR = 10_000n;\n\nexport class SwapService {\n  private provider: BrowserProvider | JsonRpcProvider;\n  private signer: Signer | null = null;\n  protected routerContract: Contract;\n  protected factoryContract: Contract;\n  protected proxyContract?: Contract;\n  protected chainId: number;\n  protected pairs: Pair[] = [];\n  protected pairsLoadedPromise: Promise<void>;\n  protected resolvePairsLoaded: (() => void) | null = null;\n  protected rejectPairsLoaded: ((error: any) => void) | null = null;\n  protected partnerFeeLoadedPromise: Promise<void>;\n  protected resolvePartnerFeeLoaded: (() => void) | null = null;\n  protected rejectPartnerFeeLoaded: ((error: any) => void) | null = null;\n  protected partnerFee: bigint = 0n;\n\n  constructor(\n    provider: BrowserProvider | JsonRpcProvider,\n    private config: SwapSdkNetworkConfig,\n    private swapOptions: SwapSdkOptions,\n  ) {\n    this.provider = provider;\n    this.chainId = config.chainId;\n    this.routerContract = new Contract(config.routerAddress, this.routerAbi, provider);\n    this.factoryContract = new Contract(config.factoryAddress, this.factoryAbi, provider);\n\n    if (config.proxyAddress) {\n      this.proxyContract = new Contract(config.proxyAddress, this.proxyAbi, provider);\n    }\n\n    this.pairsLoadedPromise = new Promise((resolve, reject) => {\n      this.resolvePairsLoaded = resolve;\n      this.rejectPairsLoaded = reject;\n    });\n\n    this.partnerFeeLoadedPromise = new Promise((resolve, reject) => {\n      this.resolvePartnerFeeLoaded = resolve;\n      this.rejectPartnerFeeLoaded = reject;\n    });\n    this.loadAllPairs();\n    this.loadPartnerFee();\n  }\n\n  protected get routerContractFunctionNames(): {\n    swapExactTokensForTokens: string;\n    swapTokensForExactTokens: string;\n    swapExactETHForTokens: string;\n    swapETHForExactTokens: string;\n    swapExactTokensForETH: string;\n    swapTokensForExactETH: string;\n  } {\n    return {\n      swapExactTokensForTokens: 'swapExactTokensForTokens',\n      swapTokensForExactTokens: 'swapTokensForExactTokens',\n      swapExactETHForTokens: 'swapExactETHForTokens',\n      swapETHForExactTokens: 'swapETHForExactTokens',\n      swapExactTokensForETH: 'swapExactTokensForETH',\n      swapTokensForExactETH: 'swapTokensForExactETH',\n      \n    }\n  }\n\n  protected get routerAbi() {\n    return [\n      // Swaps (ERC20 <-> ERC20)\n      `function ${this.routerContractFunctionNames.swapExactTokensForTokens}(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)`,\n      `function ${this.routerContractFunctionNames.swapTokensForExactTokens}(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)`,\n\n      // Swaps (ETH <-> ERC20)\n      `function ${this.routerContractFunctionNames.swapExactETHForTokens}(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)`,\n      `function ${this.routerContractFunctionNames.swapETHForExactTokens}(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)`,\n      `function ${this.routerContractFunctionNames.swapExactTokensForETH}(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)`,\n      `function ${this.routerContractFunctionNames.swapTokensForExactETH}(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)`,\n\n      // Get Amounts\n      `function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts)`,\n      `function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut)`,\n      `function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn)`,\n      `function getAmountsIn(uint amountOut, address[] memory path) internal view returns (uint[] memory amounts)`,\n\n      // Get WETH\n      `function WETH() external pure returns (address)`\n    ];\n  }\n\n  protected get factoryAbi() {\n    return [\n      'function getPair(address tokenA, address tokenB) external view returns (address pair)',\n      'function allPairs(uint) external view returns (address pair)',\n      'function allPairsLength() external view returns (uint)'\n    ];\n  }\n\n  protected get proxyAbi() {\n    return [\n      ...this.routerAbi,\n      \"function partners(bytes32) external view returns (address feeRecipient, uint16 feeBps)\"\n    ]\n  }\n\n  // parnter fee is BPS_DIVISOR = 10_000n;\n  async loadPartnerFee(): Promise<bigint> {\n    if (!this.resolvePairsLoaded) {\n      return this.partnerFee;\n    }\n    try {\n      if (this.swapOptions.partnerKey && this.proxyContract) {\n        const [, fee] = await this.proxyContract?.partners(this.swapOptions.partnerKey);\n        this.partnerFee = fee;\n      }\n\n\n      if (this.resolvePartnerFeeLoaded) {\n        this.resolvePartnerFeeLoaded();\n        this.resolvePartnerFeeLoaded = null;\n      }\n\n      return this.partnerFee;\n    } catch (error) {\n      if (this.rejectPartnerFeeLoaded) {\n        this.rejectPartnerFeeLoaded(error);\n        this.partnerFeeLoadedPromise = new Promise((resolve, reject) => {\n          this.resolvePartnerFeeLoaded = resolve;\n          this.rejectPartnerFeeLoaded = reject;\n        })\n      }\n      throw error;\n    }\n\n  }\n\n  setSigner(signer: Signer): void {\n    this.signer = signer;\n    // Connect the signer to the router contract for transaction execution\n    this.routerContract = this.routerContract.connect(signer) as Contract;\n\n    if (this.proxyContract) {\n      this.proxyContract = this.proxyContract.connect(signer) as Contract;\n    }\n  }\n\n  /**\n   * Rounds a number string to the specified number of decimal places\n   * to avoid parseUnits errors with too many decimals\n   */\n  private roundToDecimals(value: string, decimals: number): string {\n    const num = parseFloat(value);\n    if (isNaN(num)) {\n      return '0';\n    }\n    return num.toFixed(decimals);\n  }\n\n  async refreshPairsFromGraph(): Promise<KaspaComSdkPair[]> {\n    // Query for pairs with token info and reserves\n    const query = `{\n      pairs(first: 1000) {\n        id\n        reserve0\n        reserve1\n        token0 { id symbol name decimals }\n        token1 { id symbol name decimals }\n      }\n    }`;\n\n    const response = await fetch(this.config.graphEndpoint, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ query })\n    });\n    if (!response.ok) throw new Error(`Network error: ${response.status}`);\n    const { data } = await response.json();\n    if (!data || !data.pairs) throw new Error(`No pairs found: ${data}`);\n\n    return data.pairs;\n\n  }\n\n  async refreshPairs(): Promise<void> {\n    const pairsResult = this.swapOptions.getPairsData ? await this.swapOptions.getPairsData() : await this.refreshPairsFromGraph();\n\n    const pairs: Pair[] = [];\n    for (const pair of pairsResult) {\n      pairs.push(\n        this.createSDKPair(pair)\n      );\n    }\n    this.pairs = pairs;\n  }\n\n  /**\n   * Loads all pairs from The Graph and caches them as Uniswap SDK Pair instances.\n   * @param graphEndpoint The GraphQL endpoint URL\n   */\n  protected async loadAllPairs(): Promise<void> {\n    try {\n      await this.refreshPairs();\n\n      if (this.resolvePairsLoaded) {\n        this.resolvePairsLoaded();\n        this.resolvePairsLoaded = null;\n      }\n    } catch (error) {\n      console.error('Error loading pairs from graph:', error);\n      if (this.rejectPairsLoaded) {\n        this.rejectPairsLoaded(error as any); // resolve anyway to avoid deadlock\n      }\n\n      this.pairsLoadedPromise = new Promise((resolve, reject) => {\n        this.resolvePairsLoaded = resolve;\n        this.rejectPairsLoaded = reject;\n      });\n\n      setTimeout(this.loadAllPairs.bind(this), 1000);\n    }\n  }\n\n  public async waitForPairsLoaded(): Promise<void> {\n    return await this.pairsLoadedPromise;\n  }\n\n  public async waitForPartnerFeeLoaded(): Promise<void> {\n    return await this.partnerFeeLoadedPromise;\n  }\n\n  createSDKPair(pair: KaspaComSdkPair): Pair {\n    const { token0, token1, reserve0, reserve1 } = pair;\n\n    const sdkToken0 = new Token(\n      this.chainId,\n      token0.id,\n      Number(token0.decimals),\n      token0.symbol,\n      token0.name,\n    );\n\n    const sdkToken1 = new Token(\n      this.chainId,\n      token1.id,\n      Number(token1.decimals),\n      token1.symbol,\n      token1.name,\n    );\n\n    let reserve0BN: BigNumberish;\n    let reserve1BN: BigNumberish;\n\n    if (reserve0 && reserve1) {\n      reserve0BN = parseUnits(reserve0, Number(token0.decimals));\n      reserve1BN = parseUnits(reserve1, Number(token1.decimals));\n    } else {\n      throw new Error('No reserves data')\n    }\n\n    const amount0 = CurrencyAmount.fromRawAmount(\n      sdkToken0,\n      reserve0BN.toString(),\n    );\n\n    const amount1 = CurrencyAmount.fromRawAmount(\n      sdkToken1,\n      reserve1BN.toString(),\n    );\n\n    const sdkPair = new CustomFeePair(amount0, amount1);\n    return sdkPair;\n  }\n\n  /**\n   * Returns the cached pairs for use in routing.\n   */\n  public getPairs(): Pair[] {\n    return this.pairs;\n  }\n\n  /**\n   * Finds the best trade path using Uniswap SDK for a given input amount.\n   * Returns the best path as an array of addresses, or null if no trade found.\n   */\n  private async getBestTrade(\n    fromToken: Erc20Token,\n    toToken: Erc20Token,\n    amountInWei: string,\n    isOutputAmount?: boolean,\n  ): Promise<Trade<Currency, Currency, TradeType.EXACT_INPUT> | Trade<Currency, Currency, TradeType.EXACT_OUTPUT> | null> {\n\n    // Create Uniswap SDK Token instances\n    const sdkFromToken = new Token(\n      this.chainId,\n      fromToken.address,\n      fromToken.decimals,\n      fromToken.symbol,\n      fromToken.name,\n    );\n\n    const sdkToToken = new Token(\n      this.chainId,\n      toToken.address,\n      toToken.decimals,\n      toToken.symbol,\n      toToken.name,\n    );\n\n    // Create currency amount\n    const currencyAmount = CurrencyAmount.fromRawAmount(\n      isOutputAmount ? sdkToToken : sdkFromToken,\n      amountInWei,\n    );\n\n    const pairs = this.getPairs();\n    if (!pairs || pairs.length === 0) {\n      throw new Error('Pairs not loaded yet. Please wait for initialization.');\n    }\n\n    const tradeConfig = {\n      maxHops: this.swapOptions.maxHops || 3,\n      maxNumResults: 1,\n    };\n\n    const trades = isOutputAmount ?\n      Trade.bestTradeExactOut(pairs, sdkFromToken, currencyAmount, tradeConfig)\n      : Trade.bestTradeExactIn(\n        pairs,\n        currencyAmount,\n        sdkToToken,\n        tradeConfig,\n      );\n\n    if (trades.length > 0) {\n      return trades[0];\n    } else {\n      return null;\n    }\n  }\n\n  private trimTrailingZeros(value: string): string {\n    if (!value.includes('.')) return value; // no decimals\n\n    // Remove trailing zeros after decimal\n    value = value.replace(/\\.?0+$/, '');\n\n    return value;\n  }\n\n  protected async getAmountsIn(sellAmountWei: bigint, pathAddresses: string[]): Promise<bigint> {\n    const [aIn] = await this.routerContract.getAmountsIn(sellAmountWei, pathAddresses);\n    return aIn;\n  }\n\n  protected async getAmountsOut(buyAmountWei: bigint, pathAddresses: string[]): Promise<bigint> {\n    const results = await this.routerContract.getAmountsOut(buyAmountWei, pathAddresses);\n    return results[results.length - 1];\n  }\n\n  /**\n   * \n   * @param sellToken \n   * @param buyToken \n   * @param targetAmount \n   * @param isOutputAmount true if user input output (How much tokens to receive) and not input (how much tokens to sell)\n   * @param slippage \n   * @returns \n   */\n  async calculateTrade(\n    sellToken: Erc20Token,\n    buyToken: Erc20Token,\n    targetAmount: string,\n    isOutputAmount: boolean,\n    slippage: string,\n  ): Promise<{\n    trade: Trade<Currency, Currency, TradeType.EXACT_INPUT> | Trade<Currency, Currency, TradeType.EXACT_OUTPUT>,\n    computed: ComputedAmounts,\n  }> {\n    try {\n      await this.waitForPairsLoaded();\n      await this.waitForPartnerFeeLoaded();\n\n      // Round the input amount to avoid parseUnits errors\n      const roundedAmountIn = this.roundToDecimals(targetAmount, isOutputAmount ? buyToken.decimals : sellToken.decimals);\n\n      let sellAmountWei = parseUnits(\n        roundedAmountIn,\n        isOutputAmount ? buyToken.decimals : sellToken.decimals,\n      );\n\n      if (isOutputAmount && this.partnerFee && this.partnerFee > 0n) {\n        // For Exact receice - Add partner fee to the final result\n        const numerator = sellAmountWei * PARTNER_FEE_BPS_DIVISOR;\n        const denominator = PARTNER_FEE_BPS_DIVISOR - this.partnerFee;\n\n        // Use ceiling division to avoid rounding down\n        sellAmountWei = (numerator + denominator - 1n) / denominator;\n      }\n\n      const sellTokenForContracts = sellToken.address == ethers.ZeroAddress ? this.config.wrappedToken : sellToken;\n      const buyTokenForContracts = buyToken.address == ethers.ZeroAddress ? this.config.wrappedToken : buyToken;\n\n      // Get the best path\n      const trade = await this.getBestTrade(\n        sellTokenForContracts,\n        buyTokenForContracts,\n        sellAmountWei.toString(),\n        isOutputAmount,\n      );\n\n\n      if (!trade) {\n        throw new Error('No trade path found for the given tokens and amount.');\n      }\n\n      const pathAddresses = trade.route.path.map(token => token.address);\n\n      let amountIn: string = '0';\n      let amountOut: string = '0';\n\n      if (isOutputAmount) {\n        amountIn = String(await this.getAmountsIn(sellAmountWei, pathAddresses));\n        amountOut = String(parseUnits(targetAmount, buyToken.decimals));\n      } else {\n        amountOut = String(await this.getAmountsOut(sellAmountWei, pathAddresses));\n        amountIn = String(parseUnits(targetAmount, sellToken.decimals));\n      }\n\n      let amounts: ComputedAmounts = {\n        amountIn: formatUnits(amountIn, sellToken.decimals),\n        amountOut: isOutputAmount ? this.trimTrailingZeros(roundedAmountIn) : formatUnits(amountOut, buyToken.decimals),\n        amountInRaw: amountIn,\n        amountOutRaw: amountOut,\n      };\n\n      const slippagePercent = new Percent(Math.round(parseFloat(slippage) * 100), 10000);\n\n      let maxAmountIn, minAmountOut;\n\n      if (isOutputAmount) {\n        const slippageAmount = BigInt(amountIn) * BigInt(slippagePercent.numerator.toString()) / BigInt(slippagePercent.denominator.toString());\n        const maxAmountInBigInt = BigInt(amountIn) + slippageAmount;\n        maxAmountIn = maxAmountInBigInt.toString();\n        amounts.maxAmountInRaw = maxAmountIn;\n        amounts.maxAmountIn = formatUnits(maxAmountIn, sellToken.decimals);\n      } else {\n        const amountOutBigInt = BigInt(amountOut);\n        const slippageAmount = amountOutBigInt * BigInt(slippagePercent.numerator.toString()) / BigInt(slippagePercent.denominator.toString());\n        const minAmountOutBigInt = amountOutBigInt - slippageAmount;\n        minAmountOut = minAmountOutBigInt.toString();\n        amounts.minAmountOutRaw = minAmountOut;\n        amounts.minAmountOut = formatUnits(minAmountOut, buyToken.decimals);\n      }\n\n      if (this.partnerFee && this.partnerFee > 0n) {\n        if (!isOutputAmount) {\n          // ---- Exact input: remove partner fee from amountOut ----\n          const amountOutBigInt = BigInt(amountOut);\n          const amountOutMinusFee = (amountOutBigInt * (PARTNER_FEE_BPS_DIVISOR - this.partnerFee)) / PARTNER_FEE_BPS_DIVISOR;\n\n          amounts.amountOutRaw = amountOutMinusFee.toString();\n          amounts.amountOut = formatUnits(amountOutMinusFee, buyToken.decimals);\n\n          if (minAmountOut) {\n            const minOut = BigInt(minAmountOut.toString());\n            const minOutMinusFee = (minOut * (PARTNER_FEE_BPS_DIVISOR - this.partnerFee)) / PARTNER_FEE_BPS_DIVISOR;\n\n            amounts.minAmountOutRaw = minOutMinusFee.toString();\n            amounts.minAmountOut = formatUnits(minOutMinusFee, buyToken.decimals);\n          }\n        }\n      }\n\n      return {\n        trade,\n        computed: amounts,\n      }\n    } catch (error) {\n      console.error('Error calculating expected output:', error);\n      throw error;\n    }\n  }\n\n  async checkApproval(\n    tokenAddress: string,\n    amount: string,\n    spenderAddress: string\n  ): Promise<boolean> {\n    try {\n      const tokenContract = new Contract(\n        tokenAddress,\n        ['function allowance(address,address) view returns (uint256)'],\n        this.provider\n      );\n\n      const signerAddress = await this.signer?.getAddress();\n      if (!signerAddress) {\n        throw new Error('Please connect wallet first');\n      }\n\n      const allowance = await tokenContract.allowance(signerAddress, spenderAddress);\n      const amountWei = parseUnits(amount, 18); // Assuming 18 decimals for approval check\n      return allowance >= amountWei;\n    } catch (error) {\n      console.error('Error checking approval:', error);\n      return false;\n    }\n  }\n\n  async isApprovalNeeded(\n    fromToken: Erc20Token,\n    amountInWei: bigint,\n  ): Promise<{\n    isApprovalNeeded: boolean,\n    tokenContract?: Contract,\n    signerAddress?: string,\n    allowanceTo?: string\n  }> {\n    if (!this.signer) {\n      throw new Error('Please connect wallet first');\n    }\n\n    // If fromToken is not native, check allowance and approve if needed\n    if (fromToken.address !== ethers.ZeroAddress) {\n      const tokenContract = new Contract(\n        fromToken.address,\n        ['function allowance(address,address) view returns (uint256)', 'function approve(address,uint256) returns (bool)'],\n        this.signer\n      );\n\n      const signerAddress = await this.signer.getAddress();\n\n      const allowanceTo = this.config.proxyAddress || this.config.routerAddress;\n      const allowance: bigint = await tokenContract.allowance(signerAddress, allowanceTo);\n      if (allowance < amountInWei) {\n        return {\n          isApprovalNeeded: true,\n          tokenContract,\n          signerAddress,\n          allowanceTo,\n        };\n      }\n    }\n\n    return {\n      isApprovalNeeded: false\n    };\n\n  }\n\n  async approveIfNeedApproval(\n    fromToken: Erc20Token,\n    amountInWei: bigint,\n  ): Promise<ContractTransactionResponse | null> {\n\n    const isApprovalNeededInfo = await this.isApprovalNeeded(fromToken, amountInWei);\n\n    if (!isApprovalNeededInfo.isApprovalNeeded) {\n      return null;\n    }\n\n\n    return await isApprovalNeededInfo.tokenContract!.approve(isApprovalNeededInfo.allowanceTo, ethers.MaxUint256);\n  }\n\n  async swapTokens(\n    fromToken: Erc20Token,\n    toToken: Erc20Token,\n    amountInWei: string,\n    amountOutWei: string,\n    path: string[],\n    isOutputAmount: boolean,\n    deadline: number,\n  ): Promise<TransactionResponse> {\n    if (!this.signer) {\n      throw new Error('Please connect wallet first');\n    }\n\n    try {\n      // Round the amounts to the appropriate decimal precision to avoid parseUnits errors\n      const deadlineTimestamp = Math.floor(Date.now() / 1000) + (deadline * 60);\n\n      let tx;\n      const signerAddress = await this.signer.getAddress();\n      const iface = this.proxyContract ? this.proxyContract.interface : this.routerContract.interface;\n\n      let swapData: string;\n\n\n      const to = this.config.proxyAddress ? this.config.proxyAddress : signerAddress;\n\n      if (isOutputAmount) {\n        // Buy mode: user specifies output amount (isOutputAmount === true)\n        if (fromToken.address === ethers.ZeroAddress) {\n          // ETH -> token (swapETHForExactTokens)\n          swapData = iface.encodeFunctionData(this.routerContractFunctionNames.swapETHForExactTokens, [\n            amountOutWei,\n            path,\n            to,\n            deadlineTimestamp\n          ]);\n        } else if (toToken.address === ethers.ZeroAddress) {\n          // token -> ETH (swapTokensForExactETH)\n          swapData = iface.encodeFunctionData(this.routerContractFunctionNames.swapTokensForExactETH, [\n            amountOutWei,\n            amountInWei,\n            path,\n            to,\n            deadlineTimestamp\n          ]);\n        } else {\n          // token -> token (swapTokensForExactTokens)\n          swapData = iface.encodeFunctionData(this.routerContractFunctionNames.swapTokensForExactTokens, [\n            amountOutWei,\n            amountInWei,\n            path,\n            to,\n            deadlineTimestamp\n          ]);\n        }\n      } else {\n        if (fromToken.address === ethers.ZeroAddress) {\n          // ETH -> token\n          swapData = iface.encodeFunctionData(this.routerContractFunctionNames.swapExactETHForTokens, [\n            amountOutWei,\n            path,\n            to,\n            deadlineTimestamp\n          ]);\n        } else if (toToken.address === ethers.ZeroAddress) {\n          // token -> ETH\n          swapData = iface.encodeFunctionData(this.routerContractFunctionNames.swapExactTokensForETH, [\n            amountInWei,\n            amountOutWei,\n            path,\n            to,\n            deadlineTimestamp\n          ]);\n        } else {\n          // token -> token\n          swapData = iface.encodeFunctionData(this.routerContractFunctionNames.swapExactTokensForTokens, [\n            amountInWei,\n            amountOutWei,\n            path,\n            to,\n            deadlineTimestamp\n          ]);\n        }\n      }\n\n      if (this.proxyContract) {\n        swapData = hexlify(this.concatSelectorAndParams(ethers.getBytes(swapData), [], \"PERMIT\", this.swapOptions.partnerKey));\n      }\n\n      tx = await this.signer.sendTransaction({\n        to: this.config.proxyAddress || this.config.routerAddress,\n        from: signerAddress,\n        data: swapData,\n        value: fromToken.address === ethers.ZeroAddress ? amountInWei : 0n\n      });\n\n\n      return tx;\n    } catch (error) {\n      console.error('Error swapping tokens:', error);\n      throw error;\n    }\n  }\n\n  async getPairAddress(tokenA: string, tokenB: string): Promise<string> {\n    try {\n      return await this.factoryContract.getPair(tokenA, tokenB);\n    } catch (error) {\n      console.error('Error getting pair address:', error);\n      throw error;\n    }\n  }\n\n  async checkLiquidityExists(tokenA: string, tokenB: string): Promise<boolean> {\n    try {\n      const pairAddress = await this.getPairAddress(tokenA, tokenB);\n      return pairAddress !== ZeroAddress;\n    } catch (error) {\n      console.error('Error checking liquidity:', error);\n      return false;\n    }\n  }\n\n  // Uniswap SDK methods for advanced trading\n  async createTrade(\n    fromToken: Erc20Token,\n    toToken: Erc20Token,\n    amountIn: string,\n    slippageTolerance: number = 0.5\n  ): Promise<Trade<Token, Token, TradeType>> {\n    try {\n      // Create Token instances for Uniswap SDK\n      const fromTokenInstance = new Token(\n        this.chainId,\n        fromToken.address,\n        fromToken.decimals,\n        fromToken.symbol,\n        fromToken.name\n      );\n\n      const toTokenInstance = new Token(\n        this.chainId,\n        toToken.address,\n        toToken.decimals,\n        toToken.symbol,\n        toToken.name\n      );\n\n      // Create currency amount\n      const currencyAmount = CurrencyAmount.fromRawAmount(\n        fromTokenInstance,\n        parseUnits(amountIn, fromToken.decimals).toString()\n      );\n\n      // Get pair data\n      const pairAddress = await this.getPairAddress(fromToken.address, toToken.address);\n      if (pairAddress === ZeroAddress) {\n        throw new Error('No liquidity pair found');\n      }\n\n      // Create pair instance\n      const pair = new CustomFeePair(\n        CurrencyAmount.fromRawAmount(fromTokenInstance, '0'),\n        CurrencyAmount.fromRawAmount(toTokenInstance, '0')\n      );\n\n      // Create route\n      const route = new Route([pair], fromTokenInstance, toTokenInstance);\n\n      // Create trade\n      const trade = new Trade(\n        route,\n        currencyAmount,\n        TradeType.EXACT_INPUT\n      );\n\n      return trade;\n    } catch (error) {\n      console.error('Error creating trade:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Fetch tokens from the graph endpoint (subgraph)\n   * @param graphEndpoint The GraphQL endpoint URL\n   * @param search Optional search string for symbol or name\n   */\n  async getTokensFromGraph(limit: number = 100, search?: string): Promise<Erc20Token[]> {\n    const finalLimit = Math.min(limit, 1000);\n    const query = `{\n      tokens(first: ${finalLimit}, where: {\n        ${search ? `or: [\n          { symbol_contains_nocase: \\\"${search}\\\" }\n          { name_contains_nocase: \\\"${search}\\\" }\n        ]` : ''}\n      }) {\n        id\n        symbol\n        name\n        decimals\n      }\n    }`;\n    try {\n      const response = await fetch(this.config.graphEndpoint, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ query })\n      });\n      if (!response.ok) throw new Error(`Network error: ${response.status}`);\n      const { data } = await response.json();\n      if (!data || !data.tokens) return [];\n      return data.tokens.map((token: any) => ({\n        address: token.id,\n        symbol: token.symbol,\n        name: token.name,\n        decimals: Number(token.decimals),\n      }));\n    } catch (error) {\n      console.error('Error fetching tokens from graph:', error);\n      return [];\n    }\n  }\n\n\n\n  /**\n   * Concatenates bytes: selector, array of bytes (each element is Uint8Array), array length (uint8, 1 byte), marker (bytes16(keccak256(markerString)))\n   * @param selectorBytes Uint8Array — function selector (usually 4 bytes)\n   * @param arrayOfBytes Uint8Array[] — array of bytes (each element is Uint8Array)\n   * @param markerString string — string from which bytes16(keccak256(...)) will be derived\n   * @returns Uint8Array — concatenated result\n   */\n  private concatSelectorAndParams(\n    selectorBytes: Uint8Array,\n    arrayOfBytes: Uint8Array[],\n    markerString: string,\n    partnerKey?: string\n  ): Uint8Array {\n    // Flatten permits/params into single bytes\n    const paramsBytes =\n      arrayOfBytes.length === 0\n        ? new Uint8Array(0)\n        : arrayOfBytes.reduce((acc, arr) => {\n          const res = new Uint8Array(acc.length + arr.length);\n          res.set(acc, 0);\n          res.set(arr, acc.length);\n          return res;\n        });\n\n    const arrayLengthByte = new Uint8Array([arrayOfBytes.length & 0xff]);\n\n    const markerHash = ethers.keccak256(ethers.toUtf8Bytes(markerString));\n    const markerBytes = ethers.getBytes(markerHash).slice(0, 16);\n\n    const parts: Uint8Array[] = [\n      selectorBytes,\n      paramsBytes,\n      arrayLengthByte,\n      markerBytes,\n    ];\n\n    if (partnerKey) {\n      const partnerKeyBytes = ethers.getBytes(partnerKey); // 32 bytes\n      const partnerFlagHash = ethers.keccak256(ethers.toUtf8Bytes(\"PARTNER\"));\n      const partnerFlagBytes = ethers.getBytes(partnerFlagHash).slice(0, 16); // 16 bytes\n      parts.push(partnerKeyBytes, partnerFlagBytes);\n    }\n\n    const totalLen = parts.reduce((sum, p) => sum + p.length, 0);\n    const out = new Uint8Array(totalLen);\n    let offset = 0;\n    for (const p of parts) {\n      out.set(p, offset);\n      offset += p.length;\n    }\n    return out;\n  }\n} ","import { CurrencyAmount, Token } from '@uniswap/sdk-core';\nimport { Pair as UniPair } from '@uniswap/v2-sdk';\nimport JSBI from 'jsbi';\n\n\nexport class CustomFeePair extends UniPair {\n  // Override getOutputAmount for 1% fee\n  getOutputAmount(inputAmount: CurrencyAmount<Token>): [CurrencyAmount<Token>, CustomFeePair] {\n    const inputReserve = this.reserveOf(inputAmount.currency);\n    const outputCurrency = this.token0.equals(inputAmount.currency) ? this.token1 : this.token0;\n    const outputReserve = this.reserveOf(outputCurrency);\n\n    const feeNumerator = JSBI.BigInt(99); // 1% fee\n    const feeDenominator = JSBI.BigInt(100);\n\n    const inputAmountWithFee = JSBI.divide(JSBI.multiply(inputAmount.quotient, feeNumerator), feeDenominator);\n    const numerator = JSBI.multiply(inputAmountWithFee, outputReserve.quotient);\n    const denominator = JSBI.add(inputReserve.quotient, inputAmountWithFee);\n\n    const outputAmount = JSBI.divide(numerator, denominator);\n\n    return [\n      CurrencyAmount.fromRawAmount(outputCurrency, outputAmount),\n      this,\n    ];\n  }\n\n  // Override getInputAmount for 1% fee\n  getInputAmount(outputAmount: CurrencyAmount<Token>): [CurrencyAmount<Token>, CustomFeePair] {\n\n    const outputReserve = this.reserveOf(outputAmount.currency);\n    const inputCurrency = this.token0.equals(outputAmount.currency) ? this.token1 : this.token0;\n    const inputReserve = this.reserveOf(inputCurrency);\n\n\n    const feeNumerator = JSBI.BigInt(100);\n    const feeDenominator = JSBI.BigInt(99); // invert to account for 1% fee\n\n    const numerator = JSBI.multiply(JSBI.multiply(inputReserve.quotient, outputAmount.quotient), feeNumerator);\n    const denominator = JSBI.multiply(JSBI.subtract(outputReserve.quotient, outputAmount.quotient), feeDenominator);\n\n    if (JSBI.lessThanOrEqual(denominator, JSBI.BigInt(0))) {\n      throw new Error('Insufficient liquidity for this trade');\n    }\n    \n    const inputAmount = JSBI.add(JSBI.divide(numerator, denominator), JSBI.BigInt(1));\n\n    return [\n      CurrencyAmount.fromRawAmount(inputCurrency, inputAmount),\n      this,\n    ];\n  }\n}\n\n",null,"import { WalletService } from '../services/wallet.service';\nimport { SwapService } from '../services/swap.service';\nimport {\n  SwapSdkOptions,\n  SwapSettings,\n  SwapControllerOutput,\n  SwapControllerInput,\n  LoaderStatuses,\n  SwapSdkNetworkConfig,\n} from '../types';\nimport { Eip1193Provider } from 'ethers';\n\nexport const DEFAULT_SETTINGS: SwapSettings = {\n  maxSlippage: '0.5',\n  swapDeadline: 20,\n}\n\nexport class SwapSdkController {\n  private walletService: WalletService | undefined;\n  private swapService: SwapService | undefined;\n  private refreshPairsTimeout: NodeJS.Timeout | null = null;\n\n  private state: SwapControllerOutput = {\n    loader: null,\n  };\n\n  private input: SwapControllerInput = {\n    fromToken: null,\n    toToken: null,\n    amount: undefined,\n    isOutputAmount: false,\n    settings: DEFAULT_SETTINGS,\n  };\n\n  private options: SwapSdkOptions;\n\n  constructor(options: SwapSdkOptions) {\n    this.options = options;\n\n\n    this.initServices();\n  }\n\n  private initServices(): void {\n    this.walletService = new WalletService(\n      (this.options.networkConfig as SwapSdkNetworkConfig),\n      this.options.walletProvider\n    );\n    \n    this.swapService = new (this.options.swapServiceClass || SwapService)(\n      this.walletService.getProvider()!,\n      (this.options.networkConfig as SwapSdkNetworkConfig),\n      this.options,\n    ) as SwapService;\n\n    if (this.options.refreshPairsInterval) {\n      this.swapService.waitForPairsLoaded().finally(() => {\n        this.refreshPairsTimeout = setTimeout(this.refreshTokensAndUpdateQuoteAndSetTimeout.bind(this), this.options.refreshPairsInterval);\n      })\n    }\n\n  }\n\n  private async setChange(patch: Partial<SwapControllerOutput>): Promise<void> {\n    const next: SwapControllerOutput = {\n      ...this.state,\n      ...patch,\n    };\n    this.state = next;\n    if (typeof this.options.onChange === 'function') {\n      await this.options.onChange(next, patch);\n    }\n  }\n\n  async connectWallet(injectedProvider?: Eip1193Provider): Promise<string> {\n    const address = await this.walletService!.connect(injectedProvider);\n    const signer = this.walletService!.getSigner();\n    if (signer) this.swapService!.setSigner(signer);\n    return address;\n  }\n\n  disconnectWallet(): void {\n    this.walletService!.disconnect();\n    this.swapService!.setSigner(null as any);\n  }\n\n  getState(): SwapControllerOutput {\n    return this.state;\n  }\n\n  private get settings(): SwapSettings {\n    return {\n      ...DEFAULT_SETTINGS,\n      ...(this.input.settings || {}),\n    };\n  }\n\n\n  async calculateQuoteIfNeeded(): Promise<void> {\n    const { fromToken, toToken, amount, isOutputAmount } = this.input;\n    if (!fromToken || !toToken || !amount || amount <= 0) {\n      return;\n    }\n\n    // Set loader to calculating\n    await this.setChange({ loader: LoaderStatuses.CALCULATING_QUOTE, error: undefined });\n\n    try {\n      // Use the calculateTrade method which returns both trade and computed amounts\n      const tradeResult = await this.swapService!.calculateTrade(\n        fromToken,\n        toToken,\n        String(amount),\n        isOutputAmount == true, // isOutputAmount: true for input amount, false for output amount\n        this.settings.maxSlippage\n      );\n\n      await this.setChange({\n        computed: tradeResult.computed,\n        tradeInfo: tradeResult.trade,\n        path: tradeResult.trade.route.path,\n        loader: null,\n      });\n    } catch (error: any) {\n      await this.setChange({ error: error?.message || String(error), loader: null });\n    }\n  }\n\n  async setData(input: Partial<SwapControllerInput>): Promise<SwapControllerOutput> {\n    // Merge input and settings\n    this.input = {\n      ...this.input,\n      ...input,\n    };\n\n    await this.calculateQuoteIfNeeded();\n\n    return this.getState();\n  }\n\n  async isNeedApproval(): Promise<boolean> {\n    if (!this.input || !this.walletService!.isConnected() || !this.swapService) throw new Error('Wallet not connected or input missing');\n    const { fromToken, amount } = this.input;\n    if (!fromToken || amount === undefined || !this.state.computed?.amountInRaw) throw new Error('fromToken or amount missing');\n    return (await this.swapService!.isApprovalNeeded(fromToken, BigInt(this.state.computed.amountInRaw))).isApprovalNeeded;\n  }\n\n  async approveIfNeeded(): Promise<string | undefined> {\n    if (!this.input || !this.walletService!.isConnected()) throw new Error('Wallet not connected or input missing');\n    const { fromToken, amount } = this.input;\n    if (!fromToken || amount === undefined || !this.state.computed?.amountInRaw) throw new Error('fromToken or amount missing');\n\n    await this.setChange({ loader: LoaderStatuses.APPROVING });\n\n    try {\n      const tx = await this.swapService?.approveIfNeedApproval(\n        fromToken,\n        BigInt(this.state.computed.amountInRaw),\n      )\n\n      let receipt;\n\n      if (tx) {\n        await this.setChange({ approveTxHash: tx.hash });\n        receipt = await tx.wait();\n\n        if (!receipt) {\n          throw new Error(\"Receipt not found, Please try again\")\n        }\n\n        if (receipt.status != 1) {\n          throw new Error(\"Transaction Rejected\");\n        }\n      }\n\n      return receipt?.hash;\n    } catch (error: any) {\n      await this.setChange({ error: error?.message || String(error), loader: null });\n      throw error;\n    }\n  }\n\n  async swap(): Promise<string> {\n    try {\n      await this.setChange({\n        txHash: undefined,\n        approveTxHash: undefined,\n      })\n      const { fromToken, toToken, amount } = this.input;\n      if (!fromToken || !toToken || amount === undefined) throw new Error('Tokens or amount not set');\n\n      await this.approveIfNeeded();\n\n      await this.setChange({ loader: LoaderStatuses.SWAPPING });\n\n      if (!this.state.path) throw new Error('Trade info missing - calculate quote first');\n\n      // Extract path from the trade route\n      const path = this.state.path.map(token => token.address);\n      if (path.length === 0) throw new Error('Trade path missing');\n\n      // Use the computed amounts for the swap\n      const computed = this.state.computed;\n      if (!computed) throw new Error('Computed amounts missing');\n\n      const transaction = await this.swapService!.swapTokens(\n        fromToken,\n        toToken,\n        computed.maxAmountInRaw || computed.amountInRaw,\n        computed.minAmountOutRaw || computed.amountOutRaw,\n        path,\n        this.input.isOutputAmount == true,\n        this.settings.swapDeadline\n      );\n\n\n      await this.setChange({ txHash: transaction.hash });\n\n      const receipt = await transaction.wait();\n\n      if (!receipt) {\n        throw new Error(\"Receipt not found, Please try again\")\n      }\n\n      if (receipt.status != 1) {\n        throw new Error(\"Transaction Rejected\");\n      }\n\n      await this.setChange({\n        loader: null,\n      });\n\n      return receipt.hash;\n    } catch (error: any) {\n      await this.setChange({ error: error?.message || String(error), loader: null });\n      throw error;\n    }\n  }\n\n  async getPartnerFee(): Promise<number> {\n    return Number(await this.swapService!.loadPartnerFee()) / 100;\n  }\n\n\n  async getTokensFromGraph(limit: number = 100, search?: string) {\n    if (!this.swapService) {\n      throw new Error('Swap Service not exists');\n    }\n\n    return await this.swapService.getTokensFromGraph(limit, search);\n  }\n\n  get currentNetworkConfig(): SwapSdkNetworkConfig {\n    return this.options.networkConfig as SwapSdkNetworkConfig;\n  }\n\n\n  async destroy() {\n    if (this.walletService) {\n      this.walletService.destroy();\n    }\n\n    if (this.refreshPairsTimeout) {\n      clearTimeout(this.refreshPairsTimeout);\n      this.refreshPairsTimeout = null;\n    }\n  }\n\n  async refreshTokensAndUpdateQuote(forceQuoteUpdate = false) {\n    await this.swapService?.refreshPairsFromGraph();\n    if ((this.options.updateQuoteAfterRefreshPairs || forceQuoteUpdate) && !this.state.loader) {\n      await this.calculateQuoteIfNeeded();\n    }\n  }\n\n  private async refreshTokensAndUpdateQuoteAndSetTimeout() {\n    try {\n      await this.refreshTokensAndUpdateQuote();\n    } catch (error) {\n      console.error(error);\n    }\n\n    this.refreshPairsTimeout = setTimeout(this.refreshTokensAndUpdateQuoteAndSetTimeout.bind(this), this.options.refreshPairsInterval);\n  }\n} ","import { ethers } from \"ethers\";\nimport { SwapSdkNetworkConfig } from \"../types\";\n\nexport const NETWORKS: Record<string, SwapSdkNetworkConfig> = {\n  'kasplex-testnet': {\n    name: 'Kasplex Test',\n    chainId: 167012,\n    rpcUrl: 'https://rpc.kspr.bot/kasplex/testnet',\n    routerAddress: '0x81Cc4e7DbC652ec9168Bc2F4435C02d7F315148e',\n    factoryAddress: '0x89d5842017ceA7dd18D10EE6c679cE199d2aD99E',\n    proxyAddress: '0x5B7e7830851816f8ad968B0e0c336bd50b4860Ad',\n    graphEndpoint: 'https://dev-graph-kasplex.kaspa.com/subgraphs/name/kasplex-testnet-kas-new-v2-core',\n    blockExplorerUrl: 'https://explorer.testnet.kasplextest.xyz',\n    additionalJsonRpcApiProviderOptionsOptions: {\n      batchMaxCount: 1,\n      batchMaxSize: 1,\n      batchStallTime: 0,\n    },\n    wrappedToken: {\n      address: '0xf40178040278E16c8813dB20a84119A605812FB3',\n      decimals: 18,\n      name: 'Wrapped Kasplex Kaspa',\n      symbol: 'WKAS',\n    },\n    nativeToken: {\n      address: ethers.ZeroAddress,\n      decimals: 18,\n      name: 'Kasplex Kaspa',\n      symbol: 'KAS',\n    },\n    isTestnet: true,\n  },\n  'kasplex': {\n    name: 'Kasplex',\n    chainId: 202555,\n    rpcUrl: 'https://evmrpc.kasplex.org',\n    routerAddress: '0x3a1f0bD164fe9D8fa18Da5abAB352dC634CA5F10',\n    factoryAddress: '0xa9CBa43A407c9Eb30933EA21f7b9D74A128D613c',\n    proxyAddress: '0x4c5BEaAE83577E3a117ce2F477fC42a1EA39A8a3',\n    graphEndpoint: 'https://graph-kasplex.kaspa.com/subgraphs/name/kasplex-kas-v2-core',\n    blockExplorerUrl: 'https://explorer.kasplex.org',\n    additionalJsonRpcApiProviderOptionsOptions: {\n      batchMaxCount: 1,\n      batchMaxSize: 1,\n      batchStallTime: 0,\n    },\n    wrappedToken: {\n      address: '0x2c2Ae87Ba178F48637acAe54B87c3924F544a83e',\n      decimals: 18,\n      name: 'Wrapped KAS',\n      symbol: 'WKAS',\n    },\n    nativeToken: {\n      address: ethers.ZeroAddress,\n      decimals: 18,\n      name: 'Kasplex Kaspa',\n      symbol: 'KAS',\n    }\n  }\n  // Add more networks as needed\n}; "],"mappings":"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","names":["LoaderStatuses","import_ethers","import_sdk_core","import_v2_sdk","JSBI","Array","constructor","length","sign","__kMaxLength","RangeError","BigInt","arg","Math","floor","Number","isFinite","__zero","__isOneDigitInt","__oneDigit","__fromDouble","result","__fromString","SyntaxError","primitive","__toPrimitive","TypeError","toDebugString","digit","push","toString","join","radix","__toStringBasePowerOfTwo","__toStringGeneric","toNumber","x","xLength","value","__unsignedDigit","xMsd","__digit","msdLeadingZeros","__clz30","xBitLength","exponent","currentDigit","digitIndex","shift","mantissaHigh","mantissaHighBitsUnset","mantissaLow","mantissaLowBitsUnset","rounding","__decideRounding","signBit","__kBitConversionInts","__kBitConversionDouble","unaryMinus","__copy","bitwiseNot","__absoluteSubOne","__trim","__absoluteAddOne","exponentiate","y","expValue","__kMaxLengthBits","neededDigits","__initializeDigits","msd","__setDigit","runningSquare","multiply","resultLength","__clzmsd","i","__multiplyAccumulate","divide","__absoluteCompare","resultSign","divisor","quotient","__absoluteDivSmall","__absoluteDivLarge","remainder","remainderDigit","__absoluteModSmall","add","__absoluteAdd","__absoluteSub","subtract","leftShift","__rightShiftByAbsolute","__leftShiftByAbsolute","signedRightShift","unsignedRightShift","lessThan","__compareToBigInt","lessThanOrEqual","greaterThan","greaterThanOrEqual","equal","notEqual","bitwiseAnd","max","__absoluteAnd","y1","__absoluteOr","__absoluteAndNot","bitwiseXor","__absoluteXor","bitwiseOr","asIntN","n","neededLength","topDigit","compareDigit","__truncateToNBits","__truncateAndSubFromPowerOfTwo","asUintN","bitsInTopDigit","ADD","__toNumeric","__isBigInt","LT","__compare","LE","GT","GE","EQ","__equalToNumber","NE","newLength","last","pop","mantissaBitsUnset","topUnconsumedBit","mask","rawExponent","digits","kMantissaHighTopBit","msdTopBit","remainingMantissaBits","__isWhitespace","c","string","cursor","current","charCodeAt","chars","bitsPerChar","__kMaxBitsPerChar","roundup","__kBitsPerCharTableMultiplier","bitsMin","__kBitsPerCharTableShift","limDigit","limAlpha","parts","partsBits","done","part","bits","d","__fillFromParts","charsSoFar","multiplier","m","digitsSoFar","__inplaceMultiplyAdd","bitsInDigit","partBits","Error","charMask","charsRequired","pos","availableBits","newDigit","__kConversionChars","consumedBits","isRecursiveCall","bitLength","maxBitsPerChar","minBitsPerChar","secondHalfChars","conqueror","secondHalf","input","__halfDigit","__setHalfDigit","divisionResult","firstHalf","__unequalSign","leftNegative","__absoluteGreater","bothNegative","__absoluteLess","xSign","__compareToNumber","ySign","yAbs","abs","xDigit","__compareToDouble","yBitLength","compareMantissa","__comparisonResultToBool","op","carry","r","borrow","inputLength","__setDigitGrow","yLength","numPairs","tmp","tmpLength","diff","multiplicand","accumulator","accumulatorIndex","m2Low","m2High","high","acc","m1","m1Low","m1High","rLow","__imul","rMid1","rMid2","rHigh","__internalMultiplyAdd","source","factor","summand","rx","ry","mLow","mHigh","dLow","dHigh","pLow","pMid1","pMid2","pHigh","upperHalf","lowerHalf","dividend","wantQuotient","wantRemainder","__halfDigitLength","n2","q","qhatv","__clz15","__specialLeftShift","u","vn1","halfDigitBuffer","qhat","j","ujn","rhat","vn2","ujn2","__inplaceSub","__inplaceAdd","__inplaceRightShift","startIndex","halfDigits","sum","subtrahend","r0","sub","r15","addDigit","__toShiftAmount","digitShift","bitsShift","grow","__rightShiftByMaximum","mustRoundDown","obj","hint","Symbol","toPrimitive","exoticToPrim","valueOf","call","drop","min","limit","msdBitsConsumed","resultMsd","minuendMsd","len","previous","updated","__digitPow","base","ArrayBuffer","Float64Array","__kBitConversionBuffer","Int32Array","clz32","log","LN2","imul","a","b","UniPair","import_ethers"]}