{"version":3,"file":"7.ZVv5PgCA.js","sources":["../../../../../../src/lib/services/swap/swapStore.ts","../../../../../../src/lib/services/swap/SwapService.ts","../../../../../../src/lib/services/swap/SwapStateService.ts","../../../../../../src/lib/components/swap/utils.ts","../../../../../../src/lib/services/swap/SwapLogicService.ts","../../../../../../src/lib/utils/canisterIds.ts","../../../../../../src/lib/components/swap/swap_ui/SwapPanel.svelte","../../../../../../src/lib/components/swap/swap_ui/confirmation/PayReceiveSection.svelte","../../../../../../src/lib/components/swap/swap_ui/confirmation/RouteSection.svelte","../../../../../../src/lib/components/swap/swap_ui/confirmation/FeesSection.svelte","../../../../../../src/lib/components/swap/swap_ui/SwapConfirmation.svelte","../../../../../../src/lib/components/common/BananaRain.svelte","../../../../../../src/lib/assets/sounds/coin_received.mp3","../../../../../../src/lib/components/swap/swap_ui/SwapSuccessModal.svelte","../../../../../../../../node_modules/lodash/isObject.js","../../../../../../../../node_modules/lodash/_freeGlobal.js","../../../../../../../../node_modules/lodash/_root.js","../../../../../../../../node_modules/lodash/now.js","../../../../../../../../node_modules/lodash/_trimmedEndIndex.js","../../../../../../../../node_modules/lodash/_baseTrim.js","../../../../../../../../node_modules/lodash/_Symbol.js","../../../../../../../../node_modules/lodash/_getRawTag.js","../../../../../../../../node_modules/lodash/_objectToString.js","../../../../../../../../node_modules/lodash/_baseGetTag.js","../../../../../../../../node_modules/lodash/isObjectLike.js","../../../../../../../../node_modules/lodash/isSymbol.js","../../../../../../../../node_modules/lodash/toNumber.js","../../../../../../../../node_modules/lodash/debounce.js","../../../../../../src/lib/components/swap/Swap.svelte","../../../../../../src/lib/components/swap/SwapPro.svelte","../../../../../../src/routes/swap/+page.svelte"],"sourcesContent":["import { writable } from 'svelte/store';\nimport { v4 as uuidv4 } from 'uuid';\nimport BigNumber from 'bignumber.js';\n\n// Configure BigNumber\nBigNumber.config({\n DECIMAL_PLACES: 36,\n ROUNDING_MODE: BigNumber.ROUND_DOWN,\n EXPONENTIAL_AT: [-50, 50]\n});\n\ninterface SwapStatus {\n swapId: string;\n status: string;\n isProcessing: boolean;\n error: string | null;\n lastPayAmount?: BigNumber;\n expectedReceiveAmount?: BigNumber;\n minReceiveAmount?: BigNumber;\n payToken?: FE.Token;\n receiveToken?: FE.Token;\n payDecimals?: number;\n receiveDecimals?: number;\n lastQuote?: any;\n shouldRefreshQuote?: boolean;\n priceImpact?: BigNumber;\n timestamp: number;\n route?: string[];\n fees?: {\n gas: BigNumber;\n lp: BigNumber;\n token?: string;\n };\n pay_symbol?: string;\n receive_symbol?: string;\n pay_amount?: bigint;\n receive_amount?: bigint;\n}\n\nfunction createSwapStatusStore() {\n const { subscribe, set, update } = writable>({});\n\n return {\n subscribe,\n addSwap: (swapDetails: {\n lastPayAmount?: string | number | BigNumber;\n expectedReceiveAmount?: string | number | BigNumber;\n minReceiveAmount?: string | number | BigNumber;\n payToken?: FE.Token;\n receiveToken?: FE.Token;\n payDecimals?: number;\n receiveDecimals?: number;\n priceImpact?: string | number | BigNumber;\n route?: string[];\n fees?: {\n gas: string | number | BigNumber;\n lp: string | number | BigNumber;\n token?: string;\n };\n }) => {\n const swapId = uuidv4();\n update(swaps => ({\n ...swaps,\n [swapId]: {\n swapId,\n status: '',\n isProcessing: false,\n error: null,\n shouldRefreshQuote: false,\n timestamp: Date.now(),\n lastPayAmount: swapDetails.lastPayAmount ? new BigNumber(swapDetails.lastPayAmount) : undefined,\n expectedReceiveAmount: swapDetails.expectedReceiveAmount ? new BigNumber(swapDetails.expectedReceiveAmount) : undefined,\n minReceiveAmount: swapDetails.minReceiveAmount ? new BigNumber(swapDetails.minReceiveAmount) : undefined,\n payToken: swapDetails.payToken,\n receiveToken: swapDetails.receiveToken,\n payDecimals: swapDetails.payDecimals,\n receiveDecimals: swapDetails.receiveDecimals,\n priceImpact: swapDetails.priceImpact ? new BigNumber(swapDetails.priceImpact) : undefined,\n route: swapDetails.route,\n fees: swapDetails.fees ? {\n gas: new BigNumber(swapDetails.fees.gas),\n lp: new BigNumber(swapDetails.fees.lp),\n token: swapDetails.fees.token\n } : undefined\n }\n }));\n return swapId;\n },\n\n updateSwap: (swapId: string, updates: Partial<{\n status: string;\n isProcessing: boolean;\n error: string | null;\n payToken: FE.Token;\n receiveToken: FE.Token;\n payDecimals: number;\n payAmount: string | number | BigNumber;\n receiveAmount: string | number | BigNumber;\n receiveDecimals: number;\n lastPayAmount: string | number | BigNumber;\n expectedReceiveAmount: string | number | BigNumber;\n minReceiveAmount: string | number | BigNumber;\n shouldRefreshQuote: boolean;\n lastQuote: any;\n priceImpact: string | number | BigNumber;\n fees: {\n gas: string | number | BigNumber;\n lp: string | number | BigNumber;\n token?: string;\n };\n }>) => {\n update(swaps => {\n const currentSwap = swaps[swapId];\n if (!currentSwap) return swaps;\n\n const updatedSwap = { ...currentSwap };\n\n // Convert numeric values to BigNumber\n if (updates.lastPayAmount !== undefined) {\n updatedSwap.lastPayAmount = new BigNumber(updates.lastPayAmount);\n }\n if (updates.expectedReceiveAmount !== undefined) {\n updatedSwap.expectedReceiveAmount = new BigNumber(updates.expectedReceiveAmount);\n }\n if (updates.minReceiveAmount !== undefined) {\n updatedSwap.minReceiveAmount = new BigNumber(updates.minReceiveAmount);\n }\n if (updates.priceImpact !== undefined) {\n updatedSwap.priceImpact = new BigNumber(updates.priceImpact);\n }\n if (updates.fees) {\n updatedSwap.fees = {\n gas: new BigNumber(updates.fees.gas),\n lp: new BigNumber(updates.fees.lp),\n token: updates.fees.token\n };\n }\n\n // Update non-numeric values\n if (updates.status !== undefined) updatedSwap.status = updates.status;\n if (updates.isProcessing !== undefined) updatedSwap.isProcessing = updates.isProcessing;\n if (updates.error !== undefined) updatedSwap.error = updates.error;\n if (updates.shouldRefreshQuote !== undefined) updatedSwap.shouldRefreshQuote = updates.shouldRefreshQuote;\n if (updates.lastQuote !== undefined) updatedSwap.lastQuote = updates.lastQuote;\n if (updates.payToken !== undefined) updatedSwap.payToken = updates.payToken;\n if (updates.receiveToken !== undefined) updatedSwap.receiveToken = updates.receiveToken;\n if (updates.payDecimals !== undefined) updatedSwap.payDecimals = updates.payDecimals;\n if (updates.receiveDecimals !== undefined) updatedSwap.receiveDecimals = updates.receiveDecimals;\n if (updates.payAmount !== undefined) updatedSwap.lastPayAmount = new BigNumber(updates.payAmount);\n if (updates.receiveAmount !== undefined) updatedSwap.expectedReceiveAmount = new BigNumber(updates.receiveAmount);\n\n return {\n ...swaps,\n [swapId]: updatedSwap\n };\n });\n },\n\n removeSwap: (swapId: string) => {\n update(swaps => {\n const { [swapId]: _, ...rest } = swaps;\n return rest;\n });\n },\n\n clearOldSwaps: (maxAgeMs: number = 1000 * 60 * 60) => {\n const now = Date.now();\n update(swaps => {\n return Object.fromEntries(\n Object.entries(swaps).filter(([_, swap]) => \n now - swap.timestamp < maxAgeMs\n )\n );\n });\n },\n\n getSwap: (swapId: string) => {\n let currentSwap: SwapStatus | null = null;\n update(swaps => {\n currentSwap = swaps[swapId] || null;\n return swaps;\n });\n return currentSwap;\n },\n\n // Helper method to get formatted amounts\n getFormattedAmounts: (swapId: string) => {\n const swap = this.getSwap(swapId);\n if (!swap) return null;\n\n return {\n payAmount: swap.lastPayAmount?.toFormat(swap.payDecimals || 8),\n receiveAmount: swap.expectedReceiveAmount?.toFormat(swap.receiveDecimals || 8),\n minReceiveAmount: swap.minReceiveAmount?.toFormat(swap.receiveDecimals || 8),\n priceImpact: swap.priceImpact?.toFormat(2),\n fees: swap.fees ? {\n gas: swap.fees.gas.toFormat(swap.receiveDecimals || 8),\n lp: swap.fees.lp.toFormat(swap.receiveDecimals || 8),\n token: swap.fees.token\n } : undefined\n };\n }\n };\n}\n\nexport const swapStatusStore = createSwapStatusStore(); \n","// src/lib/services/swap/SwapService.ts\nimport {\n tokenStore,\n getTokenDecimals,\n} from \"$lib/services/tokens/tokenStore\";\nimport { toastStore } from \"$lib/stores/toastStore\";\nimport { get } from \"svelte/store\";\nimport { Principal } from \"@dfinity/principal\";\nimport BigNumber from \"bignumber.js\";\nimport { IcrcService } from \"$lib/services/icrc/IcrcService\";\nimport { swapStatusStore } from \"./swapStore\";\nimport { auth, canisterIDLs } from \"$lib/services/auth\";\nimport { formatTokenAmount } from \"$lib/utils/numberFormatUtils\";\nimport { canisterId as kongBackendCanisterId } from \"../../../../../declarations/kong_backend\";\nimport { requireWalletConnection } from \"$lib/services/auth\";\n\ninterface SwapExecuteParams {\n swapId: string;\n payToken: FE.Token;\n payAmount: string;\n receiveToken: FE.Token;\n receiveAmount: string;\n userMaxSlippage: number;\n backendPrincipal: Principal;\n lpFees: any[];\n}\n\ninterface SwapStatus {\n status: string;\n pay_amount: bigint;\n pay_symbol: string;\n receive_amount: bigint;\n receive_symbol: string;\n}\n\ninterface SwapResponse {\n Swap: SwapStatus;\n}\n\ninterface RequestStatus {\n reply: SwapResponse;\n statuses: string[];\n}\n\ninterface RequestResponse {\n Ok: RequestStatus[];\n}\n\n// Base BigNumber configuration for internal calculations\n// Set this high enough to handle intermediate calculations without loss of precision\nBigNumber.config({\n DECIMAL_PLACES: 36, // High enough for internal calculations\n ROUNDING_MODE: BigNumber.ROUND_DOWN,\n EXPONENTIAL_AT: [-50, 50],\n});\n\nexport class SwapService {\n private static pollingInterval: ReturnType | null = null;\n private static readonly POLLING_INTERVAL = 500; // 1 second\n private static readonly MAX_ATTEMPTS = 30; // 1 minute maximum\n\n public static toBigInt(amount: string, decimals: number): bigint {\n if (!amount || isNaN(Number(amount))) return BigInt(0);\n return BigInt(\n new BigNumber(amount).times(new BigNumber(10).pow(decimals)).toString(),\n );\n }\n\n public static fromBigInt(amount: bigint, decimals: number): string {\n try {\n const result = new BigNumber(amount.toString())\n .div(new BigNumber(10).pow(decimals))\n .toString();\n return isNaN(Number(result)) ? \"0\" : result;\n } catch {\n return \"0\";\n }\n }\n\n /**\n * Gets swap quote from backend\n */\n public static async swap_amounts(\n payToken: FE.Token,\n payAmount: bigint,\n receiveToken: FE.Token,\n ): Promise {\n try {\n if (!payToken?.symbol || !receiveToken?.symbol) {\n throw new Error('Invalid tokens provided for swap quote');\n }\n const actor = await auth.getActor(kongBackendCanisterId, canisterIDLs.kong_backend, {anon: true});\n return await actor.swap_amounts(\n payToken.symbol,\n payAmount,\n receiveToken.symbol,\n );\n } catch (error) {\n console.error(\"Error getting swap amounts:\", error);\n throw error;\n }\n }\n\n /**\n * Gets quote details including price, fees, etc.\n */\n public static async getQuoteDetails(params: {\n payToken: FE.Token;\n payAmount: bigint;\n receiveToken: FE.Token;\n }): Promise<{\n receiveAmount: string;\n price: string;\n usdValue: string;\n lpFee: String;\n gasFee: String;\n tokenFee?: String;\n slippage: number;\n }> {\n const quote = await SwapService.swap_amounts(\n params.payToken,\n params.payAmount,\n params.receiveToken,\n );\n\n if (!(\"Ok\" in quote)) {\n throw new Error(quote.Err);\n }\n\n const tokens = get(tokenStore).tokens;\n const receiveToken = tokens.find(\n (t) => t.canister_id === params.receiveToken.canister_id,\n );\n const payToken = tokens.find(\n (t) => t.canister_id === params.payToken.canister_id,\n );\n if (!receiveToken) throw new Error(\"Receive token not found\");\n\n const receiveAmount = SwapService.fromBigInt(\n quote.Ok.receive_amount,\n receiveToken.decimals,\n );\n\n let lpFee = \"0\";\n let gasFee = \"0\";\n let tokenFee = \"0\";\n\n if (quote.Ok.txs.length > 0) {\n const tx = quote.Ok.txs[0];\n lpFee = SwapService.fromBigInt(tx.lp_fee, receiveToken.decimals);\n gasFee = SwapService.fromBigInt(tx.gas_fee, receiveToken.decimals);\n tokenFee = payToken.fee.toString();\n }\n\n return {\n receiveAmount,\n price: quote.Ok.price.toString(),\n usdValue: new BigNumber(receiveAmount).times(quote.Ok.price).toFormat(2),\n lpFee,\n gasFee,\n tokenFee,\n slippage: quote.Ok.slippage,\n };\n }\n\n /**\n * Executes swap asynchronously\n */\n public static async swap_async(params: {\n pay_token: string;\n pay_amount: bigint;\n receive_token: string;\n receive_amount: bigint[];\n max_slippage: number[];\n receive_address?: string[];\n referred_by?: string[];\n pay_tx_id?: { BlockIndex: number }[];\n }): Promise {\n try {\n const actor = await auth.getActor(kongBackendCanisterId, canisterIDLs.kong_backend, {anon: false});\n return await actor.swap_async(params);\n } catch (error) {\n console.error(\"Error in swap_async:\", error);\n throw error;\n }\n }\n\n /**\n * Gets request status\n */\n public static async requests(\n requestIds: bigint[],\n ): Promise {\n try {\n const actor = await auth.getActor(kongBackendCanisterId, canisterIDLs.kong_backend, {anon: false});\n const result = await actor.requests(requestIds);\n console.log(\"Request status result:\", result);\n console.log(\"Request status:\", result);\n return result;\n } catch (error) {\n console.error(\"Error getting request status:\", error);\n throw error;\n }\n }\n\n /**\n * Executes complete swap flow\n */\n public static async executeSwap(\n params: SwapExecuteParams,\n ): Promise {\n const swapId = params.swapId;\n try {\n const wallet = get(auth);\n await Promise.allSettled([\n requireWalletConnection(),\n tokenStore.loadBalances(wallet?.account?.owner),\n ]);\n const tokens = get(tokenStore).tokens;\n const payToken = tokens.find(\n (t) => t.canister_id === params.payToken.canister_id,\n );\n if (!payToken) throw new Error(\"Pay token not found\");\n\n const payAmount = SwapService.toBigInt(\n params.payAmount,\n payToken.decimals,\n );\n const receiveToken = tokens.find(\n (t) => t.canister_id === params.receiveToken.canister_id,\n );\n if (!receiveToken) throw new Error(\"Receive token not found\");\n\n const receiveAmount = SwapService.toBigInt(\n params.receiveAmount,\n receiveToken.decimals,\n );\n\n console.log(\n \"Processing transfer/approval for amount:\",\n payAmount.toString(),\n );\n const toastId = toastStore.info(\n `Swapping ${params.payAmount} ${params.payToken.symbol} to ${params.receiveAmount} ${params.receiveToken.symbol}...`,\n 0,\n );\n\n let txId: bigint | false;\n let approvalId: bigint | false;\n\n if (payToken.icrc2) {\n const requiredAllowance = payAmount;\n approvalId = await IcrcService.checkAndRequestIcrc2Allowances(\n payToken,\n requiredAllowance,\n );\n } else if (payToken.icrc1) {\n const result = await IcrcService.icrc1Transfer(\n payToken,\n params.backendPrincipal,\n payAmount,\n { fee: BigInt(payToken.fee) },\n );\n\n if (result?.Ok) {\n txId = result.Ok;\n } else {\n txId = false;\n }\n } else {\n throw new Error(\n `Token ${payToken.symbol} does not support ICRC1 or ICRC2`,\n );\n }\n\n if (txId === false || approvalId === false) {\n swapStatusStore.updateSwap(swapId, {\n status: \"Failed\",\n isProcessing: false,\n error: \"Transaction failed during transfer/approval\",\n });\n toastStore.error(\"Transaction failed during transfer/approval\");\n toastStore.dismiss(toastId);\n return false;\n }\n\n const swapParams = {\n pay_token: params.payToken.symbol,\n pay_amount: payAmount,\n receive_token: params.receiveToken.symbol,\n receive_amount: [receiveAmount],\n max_slippage: [params.userMaxSlippage],\n receive_address: [],\n referred_by: [],\n pay_tx_id: txId ? [{ BlockIndex: Number(txId) }] : [],\n };\n const result = await SwapService.swap_async(swapParams);\n\n console.log(\"Swap result:\", result);\n this.monitorTransaction(result?.Ok, swapId);\n toastStore.dismiss(toastId);\n await Promise.allSettled([\n tokenStore.loadBalance(\n tokens.find((t) => t.canister_id === params.receiveToken.canister_id),\n wallet.account.owner.toString(),\n true,\n ),\n tokenStore.loadBalance(\n tokens.find((t) => t.canister_id === params.payToken.canister_id),\n wallet.account.owner.toString(),\n true,\n ),\n ]);\n return result.Ok;\n } catch (error) {\n swapStatusStore.updateSwap(swapId, {\n status: \"Failed\",\n isProcessing: false,\n error: error instanceof Error ? error.message : \"Swap failed\",\n });\n console.error(\"Swap execution failed:\", error);\n toastStore.error(error instanceof Error ? error.message : \"Swap failed\");\n return false;\n }\n }\n\n public static async monitorTransaction(requestId: bigint, swapId: string) {\n this.stopPolling();\n\n console.log(\"REQUEST ID:\", requestId);\n let attempts = 0;\n let swapStatus = swapStatusStore.getSwap(swapId);\n const toastId = toastStore.info(\n `Confirming swap of ${swapStatus?.payToken.symbol} to ${swapStatus?.receiveToken.symbol}...`,\n 10000, // 10 seconds for swap confirmation messages\n );\n\n this.pollingInterval = setInterval(async () => {\n try {\n const status: RequestResponse = await this.requests([requestId]);\n\n if (status.Ok?.[0]?.reply) {\n const res: RequestStatus = status.Ok[0];\n\n if (res.statuses.find((s) => s.includes(\"Failed\"))) {\n this.stopPolling();\n swapStatusStore.updateSwap(swapId, {\n status: \"Error\",\n isProcessing: false,\n error: res.statuses.find((s) => s.includes(\"Failed\")),\n });\n toastStore.error(res.statuses.find((s) => s.includes(\"Failed\")), 8000); // 8 seconds for error messages\n toastStore.dismiss(toastId);\n }\n\n if (\"Swap\" in res.reply) {\n const swapStatus: SwapStatus = res.reply.Swap;\n swapStatusStore.updateSwap(swapId, {\n status: swapStatus.status,\n isProcessing: true,\n error: null,\n });\n\n if (swapStatus.status === \"Success\") {\n swapStatusStore.updateSwap(swapId, {\n status: \"Success\",\n isProcessing: false,\n shouldRefreshQuote: true,\n lastQuote: null,\n });\n this.stopPolling();\n\n const formattedPayAmount = SwapService.fromBigInt(\n swapStatus.pay_amount,\n getTokenDecimals(swapStatus.pay_symbol),\n );\n const formattedReceiveAmount = SwapService.fromBigInt(\n swapStatus.receive_amount,\n getTokenDecimals(swapStatus.receive_symbol),\n );\n const token0 = get(tokenStore).tokens.find((t) => t.symbol === swapStatus.pay_symbol);\n const token1 = get(tokenStore).tokens.find((t) => t.symbol === swapStatus.receive_symbol);\n toastStore.success(\n `Successfully swapped ${formatTokenAmount(formattedPayAmount, token0?.decimals)} ${token0?.symbol} to ${formatTokenAmount(formattedReceiveAmount, token1?.decimals)} ${token1?.symbol}!`,\n );\n // Dispatch custom event with swap details\n window.dispatchEvent(\n new CustomEvent(\"swapSuccess\", {\n detail: {\n payAmount: formattedPayAmount,\n payToken: swapStatus.pay_symbol,\n receiveAmount: formattedReceiveAmount,\n receiveToken: swapStatus.receive_symbol,\n },\n }),\n );\n\n toastStore.dismiss(toastId);\n } else if (swapStatus.status === \"Failed\") {\n this.stopPolling();\n swapStatusStore.updateSwap(swapId, {\n status: \"Failed\",\n isProcessing: false,\n error: \"Swap failed\",\n });\n toastStore.error(\"Swap failed\");\n toastStore.dismiss(toastId);\n }\n }\n }\n\n if (attempts >= this.MAX_ATTEMPTS) {\n this.stopPolling();\n swapStatusStore.updateSwap(swapId, {\n status: \"Timeout\",\n isProcessing: false,\n error: \"Swap timed out\",\n });\n toastStore.error(\"Swap timed out\");\n toastStore.dismiss(toastId);\n }\n\n attempts++;\n } catch (error) {\n console.error(\"Error monitoring swap:\", error);\n this.stopPolling();\n swapStatusStore.updateSwap(swapId, {\n status: \"Error\",\n isProcessing: false,\n error: \"Failed to monitor swap status\",\n });\n toastStore.error(\"Failed to monitor swap status\");\n toastStore.dismiss(toastId);\n }\n }, this.POLLING_INTERVAL);\n }\n\n private static stopPolling() {\n if (this.pollingInterval) {\n clearInterval(this.pollingInterval as any);\n this.pollingInterval = null;\n }\n }\n\n // Clean up method to be called when component unmounts\n public static cleanup() {\n this.stopPolling();\n }\n\n /**\n * Fetches the swap quote based on the provided amount and tokens.\n */\n public static async getSwapQuote(\n payToken: FE.Token,\n receiveToken: FE.Token,\n amount: string,\n ): Promise<{\n receiveAmount: string;\n slippage: number;\n usdValue: string;\n }> {\n if (!amount || Number(amount) <= 0 || isNaN(Number(amount))) {\n return {\n receiveAmount: \"0\",\n slippage: 0,\n usdValue: \"0\",\n };\n }\n\n try {\n const payDecimals = getTokenDecimals(payToken.canister_id);\n const payAmountBigInt = this.toBigInt(amount, payDecimals);\n const quote = await this.swap_amounts(\n payToken,\n payAmountBigInt,\n receiveToken,\n );\n\n if (\"Ok\" in quote) {\n const receiveDecimals = getTokenDecimals(receiveToken.canister_id);\n const receivedAmount = this.fromBigInt(\n quote.Ok.receive_amount,\n receiveDecimals,\n );\n\n \n const store = get(tokenStore);\n console.log(\"store.tokens:\", store.tokens);\n const price = await tokenStore.refetchPrice(\n store.tokens.find((t) => t.canister_id === receiveToken.canister_id),\n );\n const usdValueNumber =\n parseFloat(receivedAmount) * parseFloat(price.toString());\n\n return {\n receiveAmount: receivedAmount,\n slippage: quote.Ok.slippage,\n usdValue: usdValueNumber.toString(),\n };\n } else if (\"Err\" in quote) {\n throw new Error(quote.Err);\n }\n } catch (err) {\n console.error(\"Error fetching swap quote:\", err);\n throw err;\n }\n }\n\n /**\n * Calculates the maximum transferable amount of a token, considering fees.\n *\n * @param tokenInfo - Information about the token, including fees and canister ID.\n * @param formattedBalance - The user's available balance of the token as a string.\n * @param decimals - Number of decimal places the token supports.\n * @param isIcrc1 - Boolean indicating if the token follows the ICRC1 standard.\n * @returns A BigNumber representing the maximum transferable amount.\n */\n public static calculateMaxAmount(\n tokenInfo: {\n canister_id: string;\n fee?: bigint;\n icrc1?: boolean;\n icrc2?: boolean;\n // Add other relevant properties if needed\n },\n formattedBalance: string,\n decimals: number = 8,\n isIcrc1: boolean = false,\n ): BigNumber {\n const SCALE_FACTOR = new BigNumber(10).pow(decimals);\n const balance = new BigNumber(formattedBalance);\n\n // Calculate base fee. If fee is undefined, default to 0.\n const baseFee = tokenInfo.fee\n ? new BigNumber(tokenInfo.fee.toString()).dividedBy(SCALE_FACTOR)\n : new BigNumber(0);\n\n // Calculate gas fee based on token standard\n const gasFee = isIcrc1 ? baseFee : baseFee.multipliedBy(2);\n\n // Ensure that the max amount is not negative\n const maxAmount = balance.minus(gasFee);\n return BigNumber.maximum(maxAmount, new BigNumber(0));\n }\n}\n","import { writable, derived, type Readable } from 'svelte/store';\nimport type { Writable } from 'svelte/store';\nimport { fromTokenDecimals } from '$lib/services/tokens/tokenStore';\nimport { tokenStore } from '$lib/services/tokens/tokenStore';\nimport { getTokenDecimals } from \"$lib/services/tokens/tokenStore\";\nimport { SwapService } from './SwapService';\nimport { get } from 'svelte/store';\n\nexport interface SwapState {\n payToken: FE.Token | null;\n receiveToken: FE.Token | null;\n payAmount: string;\n receiveAmount: string;\n isCalculating: boolean;\n isProcessing: boolean;\n error: string | null;\n showPayTokenSelector: boolean;\n showReceiveTokenSelector: boolean;\n showConfirmation: boolean;\n showSuccessModal: boolean;\n showBananaRain: boolean;\n gasFees: string[];\n lpFees: string[];\n swapSlippage: number;\n routingPath: string[];\n manuallySelectedTokens: {\n pay: boolean;\n receive: boolean;\n };\n successDetails: {\n payAmount: string;\n payToken: FE.Token | null;\n receiveAmount: string;\n receiveToken: FE.Token | null;\n };\n}\n\nexport interface SwapStore extends Writable {\n isInputExceedingBalance: Readable;\n initializeTokens(initialFromToken: FE.Token | null, initialToToken: FE.Token | null): void;\n setPayAmount(amount: string): void;\n setReceiveAmount(amount: string): void;\n setPayToken(token: FE.Token | null): void;\n setReceiveToken(token: FE.Token | null): void;\n setIsProcessing(isProcessing: boolean): void;\n setShowConfirmation(show: boolean): void;\n setShowSuccessModal(show: boolean): void;\n setError(error: string | null): void;\n updateSuccessDetails(details: SwapState['successDetails']): void;\n reset(): void;\n}\n\nfunction createSwapStore(): SwapStore {\n const initialState: SwapState = {\n payToken: null,\n receiveToken: null,\n payAmount: '',\n receiveAmount: '',\n isCalculating: false,\n isProcessing: false,\n error: null,\n showPayTokenSelector: false,\n showReceiveTokenSelector: false,\n showConfirmation: false,\n showSuccessModal: false,\n showBananaRain: false,\n gasFees: [],\n lpFees: [],\n swapSlippage: 0,\n routingPath: [],\n manuallySelectedTokens: {\n pay: false,\n receive: false\n },\n successDetails: {\n payAmount: '',\n payToken: null,\n receiveAmount: '',\n receiveToken: null\n }\n };\n\n const { subscribe, set, update } = writable(initialState);\n\n const isInputExceedingBalance = derived(\n [tokenStore, { subscribe }],\n ([$tokenStore, $swapState]) => {\n if (!$swapState.payToken || !$swapState.payAmount) return false;\n \n const balance = $tokenStore.balances[$swapState.payToken.canister_id]?.in_tokens || BigInt(0);\n return fromTokenDecimals($swapState.payAmount, $swapState.payToken.decimals).toNumber() > Number(balance);\n }\n );\n\n const store: SwapStore = {\n subscribe,\n set,\n update,\n isInputExceedingBalance,\n\n initializeTokens(initialFromToken: FE.Token | null, initialToToken: FE.Token | null) {\n const $tokenStore = get(tokenStore);\n update(state => ({\n ...state,\n payToken: initialFromToken || $tokenStore.tokens.find(t => t.symbol === 'ICP') || null,\n receiveToken: initialToToken || $tokenStore.tokens.find(t => t.symbol === 'ckBTC') || null\n }));\n },\n\n async setPayAmount(amount: string) {\n update(state => ({ \n ...state, \n payAmount: amount,\n isCalculating: true,\n error: null\n }));\n\n const currentState = get({ subscribe });\n if (!currentState.payToken || !currentState.receiveToken || !amount || isNaN(Number(amount))) {\n update(state => ({\n ...state,\n receiveAmount: '',\n isCalculating: false,\n error: null\n }));\n return;\n }\n\n try {\n const quote = await SwapService.getSwapQuote(\n currentState.payToken,\n currentState.receiveToken,\n amount\n );\n\n update(state => ({\n ...state,\n receiveAmount: quote.receiveAmount,\n swapSlippage: quote.slippage,\n isCalculating: false,\n error: null\n }));\n } catch (error) {\n update(state => ({\n ...state,\n receiveAmount: '',\n error: error instanceof Error ? error.message : 'Failed to calculate swap',\n isCalculating: false\n }));\n }\n },\n\n setReceiveAmount(amount: string) {\n // No-op since receive panel input is disabled\n return;\n },\n\n setPayToken(token: FE.Token | null) {\n update(state => ({ ...state, payToken: token }));\n },\n\n setReceiveToken(token: FE.Token | null) {\n update(state => ({ ...state, receiveToken: token }));\n },\n\n setIsProcessing(isProcessing: boolean) {\n update(state => ({ ...state, isProcessing }));\n },\n\n setShowConfirmation(show: boolean) {\n update(state => ({ ...state, showConfirmation: show }));\n },\n\n setShowSuccessModal(show: boolean) {\n update(state => ({ ...state, showSuccessModal: show }));\n },\n\n setError(error: string | null) {\n update(state => ({ ...state, error }));\n },\n\n updateSuccessDetails(details: SwapState['successDetails']) {\n update(state => ({\n ...state,\n successDetails: details\n }));\n },\n\n reset() {\n set(initialState);\n }\n };\n\n return store;\n}\n\nexport const swapState = createSwapStore();\n","// Utility functions for swap operations\n\nimport { replaceState } from \"$app/navigation\";\n\nexport function getButtonText(params: {\n isCalculating: boolean;\n isValidInput: boolean;\n isProcessing: boolean;\n error: string | null;\n swapSlippage: number;\n userMaxSlippage: number;\n isConnected: boolean;\n payTokenSymbol: string;\n receiveTokenSymbol: string;\n}): string {\n const {\n isCalculating,\n isValidInput,\n isProcessing,\n error,\n swapSlippage,\n userMaxSlippage,\n isConnected,\n payTokenSymbol,\n receiveTokenSymbol,\n } = params;\n\n if (!isConnected) return \"Connect Wallet\";\n if (isProcessing) return \"Processing...\";\n if (isCalculating) return \"Calculating...\";\n if (error) return error;\n if (!payTokenSymbol || !receiveTokenSymbol) return \"Select Tokens\";\n if (!isValidInput) return \"Enter Amount\";\n if (swapSlippage > userMaxSlippage) return \"Swap Anyway\";\n return \"Swap\";\n}\n\nexport function updateURL(params: { from: string; to: string }) {\n const url = new URL(window.location.href);\n url.searchParams.set(\"from\", params.from);\n url.searchParams.set(\"to\", params.to);\n replaceState(url.toString(), {});\n}\n","import { get } from 'svelte/store';\nimport { swapState } from './SwapStateService';\nimport { tokenStore } from '$lib/services/tokens/tokenStore';\nimport { toastStore } from '$lib/stores/toastStore';\nimport { updateURL } from '$lib/components/swap/utils';\nimport type { Principal } from '@dfinity/principal';\nimport { SwapService } from './SwapService';\nimport { swapStatusStore } from './swapStore';\n\nexport class SwapLogicService {\n static async handleSwapSuccess(event: CustomEvent) {\n const $tokenStore = get(tokenStore);\n \n if (!$tokenStore?.tokens?.length) {\n console.error('TokenStore not initialized or empty');\n return;\n }\n\n const payToken = $tokenStore.tokens.find((t: any) => t.symbol === event.detail.payToken);\n const receiveToken = $tokenStore.tokens.find((t: any) => t.symbol === event.detail.receiveToken);\n\n if (!payToken || !receiveToken) {\n console.error('Could not find pay or receive token', {\n paySymbol: event.detail.payToken,\n receiveSymbol: event.detail.receiveToken,\n availableTokens: $tokenStore.tokens.map(t => t.symbol)\n });\n return;\n }\n\n const updatedSuccessDetails = {\n payAmount: event.detail.payAmount,\n payToken,\n receiveAmount: event.detail.receiveAmount,\n receiveToken\n };\n\n swapState.updateSuccessDetails(updatedSuccessDetails);\n swapState.setPayAmount('');\n swapState.setShowSuccessModal(true);\n }\n\n static handleSelectToken(type: \"pay\" | \"receive\", token: FE.Token) {\n const state = get(swapState);\n \n if (\n (type === \"pay\" && token?.canister_id === state.receiveToken?.canister_id) ||\n (type === \"receive\" && token?.canister_id === state.payToken?.canister_id)\n ) {\n toastStore.error(\"Cannot select the same token for both sides\");\n return;\n }\n\n const updates: Partial = {\n manuallySelectedTokens: {\n ...state.manuallySelectedTokens,\n [type]: true\n }\n };\n\n if (type === \"pay\") {\n updates.payToken = token;\n updates.showPayTokenSelector = false;\n if (state.receiveToken) {\n updateURL({ from: token.canister_id, to: state.receiveToken.canister_id });\n }\n } else {\n updates.receiveToken = token;\n updates.showReceiveTokenSelector = false;\n if (state.payToken) {\n updateURL({ from: state.payToken.canister_id, to: token.canister_id });\n }\n }\n\n swapState.update(state => ({ ...state, ...updates }));\n }\n\n static async executeSwap(params: {\n payToken: FE.Token;\n payAmount: string;\n receiveToken: FE.Token;\n receiveAmount: string;\n userMaxSlippage: number;\n backendPrincipal: Principal;\n lpFees: string[];\n }): Promise {\n swapState.setIsProcessing(true);\n\n try {\n // Create the swap in the store first\n const swapId = swapStatusStore.addSwap({\n payToken: params.payToken,\n receiveToken: params.receiveToken,\n lastPayAmount: params.payAmount,\n expectedReceiveAmount: params.receiveAmount,\n fees: {\n gas: \"0\",\n lp: params.lpFees[0] || \"0\"\n }\n });\n\n const result = await SwapService.executeSwap({\n ...params,\n swapId\n });\n \n if (result !== false) {\n swapStatusStore.updateSwap(swapId, {\n status: 'pending',\n isProcessing: true,\n error: null\n });\n SwapService.monitorTransaction(result, swapId);\n return true;\n } else {\n toastStore.error('Swap failed');\n swapState.setIsProcessing(false);\n return false;\n }\n } catch (error) {\n console.error('Swap execution error:', error);\n toastStore.error('Failed to execute swap');\n swapState.setIsProcessing(false);\n return false;\n }\n }\n}\n","import { Principal } from '@dfinity/principal';\n\n// Import canister IDs\nimport stagingIds from '../../../../../canister_ids.json';\nimport prodIds from '../../../../../canister_ids_prod.json';\n\nexport function getKongBackendPrincipal(): Principal {\n const network = process.env.DFX_NETWORK || 'local';\n \n // Use staging IDs for local/staging, prod IDs for production\n const canisterIds = network === 'ic' ? prodIds : stagingIds;\n \n const canisterId = canisterIds.kong_backend.ic;\n \n if (!canisterId) {\n throw new Error(`Kong backend canister ID not found for network: ${network}`);\n }\n\n return Principal.fromText(canisterId);\n}\n","\n\n\n \n
\n
\n \n {title}\n \n
\n {#if showPrice && $animatedSlippage > 0}\n \n \n Impact\n \n = HIGH_IMPACT_THRESHOLD}\n >\n {$animatedSlippage.toFixed(2)}%\n \n
\n {/if}\n
\n \n
\n\n
\n
\n
\n (inputFocused = true)}\n on:blur={() => (inputFocused = false)}\n {disabled}\n readonly={panelType === \"receive\"}\n />\n
\n
\n \n
\n
\n
\n\n
\n
\n
\n \n Available:\n \n \n {formatTokenAmount(\n $tokenStore.balances[\n tokenInfo?.canister_id\n ]?.in_tokens?.toString() || \"0\",\n decimals,\n )}\n {token?.symbol}\n \n
\n
\n Est Value\n \n ${formatToNonZeroDecimal(tradeUsdValue)}\n \n
\n
\n
\n \n\n\n\n","\n\n
\n
\n
\n \n
\n You Pay\n {payAmount} {payToken?.symbol}\n
\n
\n
\n \n
\n
\n \n
\n You Receive\n {receiveAmount} {receiveToken?.symbol}\n
\n
\n
\n
\n\n\n","\n\n
\n

Route

\n
\n {#each tokens as token, i}\n
\n \n {token.symbol}\n
\n {#if i < tokens.length - 1}\n \n {/if}\n {/each}\n
\n\n {#if formattedGasFees.length > 0}\n
\n

Network Fees

\n {#each formattedGasFees as fee}\n
\n \n \n {formatGasFee(fee.amount, fee.token.decimals)} {fee.token.symbol}\n \n
\n {/each}\n
\n {/if}\n\n {#if formattedLpFees.length > 0}\n
\n

LP Fees

\n {#each formattedLpFees as fee}\n
\n \n \n {formatBalance(fee.amount, fee.token.decimals)} {fee.token.symbol}\n \n
\n {/each}\n
\n {/if}\n
\n\n\n","\n\n
\n
\n Gas Fee\n
\n {totalGasFee.toFixed(6)}\n {receiveToken.symbol}\n
\n
\n
\n LP Fee\n
\n {totalLPFee.toFixed(6)}\n {receiveToken.symbol}\n
\n
\n
\n Max Slippage\n
\n {userMaxSlippage}\n %\n
\n
\n
\n\n\n","\n\n\n {#if isInitializing}\n
\n Getting latest price...\n
\n {:else if error}\n
\n

{error}

\n
\n {:else if payToken && receiveToken}\n
\n
\n \n \n \n
\n\n
\n \n
\n
\n {/if}\n\n","\n\n ","export default \"__VITE_ASSET__CIuDAa5M__\"","\n\n{#if show}\n \n \n \n \n\n
\n
\n \"Success\"\n
\n

Swap Complete!

\n\n
\n
\n
You paid
\n
{formatTokenAmount(payAmount, payToken.decimals).toString()} {payToken.symbol}
\n
\n\n
\n
⬇️
\n
\n\n
\n
You received
\n
{formatTokenAmount(receiveAmount, receiveToken.decimals).toString()} {receiveToken.symbol}
\n
\n
\n\n \n
\n \n \n \n{/if}\n\n\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","\n\n
\n
\n
\n dispatch('modeChange', { mode: 'normal' })}\n width=\"50%\"\n >\n Normal\n \n dispatch('modeChange', { mode: 'pro' })}\n width=\"50%\"\n >\n Pro\n \n
\n\n
\n {#each panels as panel (panel.id)}\n
\n handleTokenSelect(panel.type)}\n showPrice={panel.type === 'receive'}\n slippage={$swapState.swapSlippage}\n disabled={false}\n panelType={panel.type}\n />\n
\n {/each}\n\n \n {#if $themeStore === 'pixel'}\n \n \n \n {:else}\n \n \n \n \n \n \n \n {/if}\n \n\n
\n userMaxSlippage ? \"blue\" : \"yellow\"}\n disabled={isSwapButtonDisabled}\n onClick={handleSwapClick}\n width=\"100%\"\n >\n {buttonText}\n \n
\n
\n
\n
\n\n{#if $swapState.showPayTokenSelector}\n handleTokenSelected(token, \"pay\")}\n onClose={() =>\n swapState.update((s) => ({ ...s, showPayTokenSelector: false }))}\n currentToken={$swapState.receiveToken}\n />\n{/if}\n\n{#if $swapState.showReceiveTokenSelector}\n handleTokenSelected(token, \"receive\")}\n onClose={() =>\n swapState.update((s) => ({ ...s, showReceiveTokenSelector: false }))}\n currentToken={$swapState.payToken}\n />\n{/if}\n\n{#if $swapState.showConfirmation}\n\n {\n swapState.setShowConfirmation(false);\n swapState.update((state) => ({\n ...state,\n showConfirmation: false,\n isProcessing: false,\n error: null,\n }));\n }}\n />\n\n{/if}\n\n{#if $swapState.showBananaRain}\n \n{/if}\n\n swapState.setShowSuccessModal(false)}\n/>\n\n\n","\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n\n \n
\n
\n \n
\n\n \n \n
\n
\n activeHistoryTab = 'my'}\n >\n
\n My Swaps\n {#if activeHistoryTab === 'my'}\n \"\"\n {/if}\n
\n \n activeHistoryTab = 'pair'}\n >\n
\n Market Swaps\n {#if activeHistoryTab === 'pair'}\n \"\"\n {/if}\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n\n\n","\n\n
\n {#if $tokenStore.tokens}\n
\n {#if currentMode === 'normal'}\n \n {:else}\n \n {/if}\n
\n {:else}\n

{$t('common.loadingTokens')}

\n {/if}\n
\n\n\n"],"names":["BigNumber","createSwapStatusStore","subscribe","set","update","writable","swapDetails","swapId","uuidv4","swaps","updates","currentSwap","updatedSwap","_","rest","maxAgeMs","now","swap","_a","_b","_c","_d","swapStatusStore","_SwapService","amount","decimals","result","payToken","payAmount","receiveToken","auth","kongBackendCanisterId","canisterIDLs","error","params","quote","tokens","get","tokenStore","t","receiveAmount","lpFee","gasFee","tokenFee","tx","requestIds","wallet","requireWalletConnection","toastId","toastStore","txId","approvalId","requiredAllowance","IcrcService","swapParams","requestId","attempts","swapStatus","status","res","s","formattedPayAmount","getTokenDecimals","formattedReceiveAmount","token0","token1","formatTokenAmount","payDecimals","payAmountBigInt","receiveDecimals","receivedAmount","store","price","usdValueNumber","err","tokenInfo","formattedBalance","isIcrc1","SCALE_FACTOR","balance","baseFee","maxAmount","__publicField","SwapService","createSwapStore","initialState","isInputExceedingBalance","derived","$tokenStore","$swapState","fromTokenDecimals","initialFromToken","initialToToken","state","currentState","token","isProcessing","show","details","swapState","getButtonText","isCalculating","isValidInput","swapSlippage","userMaxSlippage","isConnected","payTokenSymbol","receiveTokenSymbol","updateURL","url","replaceState","SwapLogicService","event","updatedSuccessDetails","type","getKongBackendPrincipal","canisterId","stagingIds","Principal","title","$.prop","$$props","onTokenSelect","onAmountChange","disabled","showPrice","slippage","panelType","DEFAULT_DECIMALS","ANIMATION_BASE_DURATION","ANIMATION_MAX_DURATION","ANIMATION_VALUE_MULTIPLIER","HIGH_IMPACT_THRESHOLD","inputElement","inputFocused","formattedUsdValue","calculatedUsdValue","pendingAnimation","animatedUsdValue","tweened","cubicOut","animatedAmount","animatedSlippage","calculateFormattedBalance","$auth","$.get","feesInTokens","updateAnimatedValues","duration","handleInput","value","handleMaxClick","totalFees","maxInDecimals","formattedMax","$.mutate","$.set","currentValue","$animatedUsdValue","valueDiff","displayAmount","parsedAmount","tradeUsdValue","$animatedSlippage","$$anchor","$.template_effect","$.toggle_class","span","$.bind_this","input","$$value","$.set_text","text_2","text_3","formatToNonZeroDecimal","$.event","routingPath","gasFees","lpFees","symbol","formattedGasFees","i","fee","formattedLpFees","$.each","div_1","$.if","node_1","text","node_3","tokens_2","$.derived_safe_equal","text_1","formatGasFee","node_6","tokens_3","formatBalance","totalGasFee","totalLPFee","onClose","onConfirm","isLoading","isCountingDown","isInitializing","countdown","countdownInterval","initialQuoteLoaded","initialQuoteData","$.mutable_state","onMount","cleanComponent","handleConfirm","onDestroy","calculateTotalFee","fees","acc","feeValue","stepFee","scaleDecimalToBigInt","decimal","scaleFactor","scaledValue","payUsdValue","formatTokenValue","receiveUsdValue","createBanana","banana","coinReceivedSound","isCountdownActive","resetAndStartCountdown","startCountdown","$settingsStore","audio1","audio2","audio3","handleClick","$.transition","div_3","scale","backOut","div","fade","isObject","isObject_1","freeGlobal","global","_freeGlobal","require$$0","freeSelf","root","_root","now_1","reWhitespace","trimmedEndIndex","string","index","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","debounce_1","currentSwapId","KONG_BACKEND_PRINCIPAL","currentMode","panels","dispatch","createEventDispatcher","swapSuccessHandler","handleSwapClick","handleSwap","handleAmountChange","handleTokenSelect","handleTokenSelected","handleReverseTokens","updateTokenInURL","debouncedGetQuote","tempPayToken","tempPayAmount","param","tokenId","PixelArrow","ModernArrow","isSwapButtonDisabled","buttonText","state_1","state_2","node_2","panel","$themeStore","$.set_attribute","svg","path","svg_1","variant","node_7","node_8","node_9","div_2","button","NAV_HEIGHT","fromToken","toToken","chart","activeHistoryTab","isChartMinimized","isFullscreen","isMobile","chartContainer","initChart","mediaQuery","handleResize","e","script","div_5","button_1","node_5","button_2","button_3","unsubscribe","page","$page","handleModeChange","$t"],"mappings":"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","x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,25,26,27]}