{"version":3,"file":"7.Bu3cejFO.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/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\n\nimport { walletValidator } from \"$lib/services/wallet/walletValidator\";\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 } from \"$lib/services/auth\";\nimport { formatTokenAmount } from \"$lib/utils/numberFormatUtils\";\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\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 const actor = await auth.getActor();\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();\n console.log(\n \"Sending swap_async params:\",\n JSON.stringify(params, (_, v) =>\n typeof v === \"bigint\" ? v.toString() : v,\n ),\n );\n const result = await actor.swap_async(params);\n return result;\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();\n return await actor.requests(requestIds);\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 walletValidator.requireWalletConnection(),\n tokenStore.loadBalances(auth?.pnp?.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 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 let attempts = 0;\n const toastId = toastStore.info(\"Processing swap...\");\n\n const checkStatus = async () => {\n try {\n const response = await this.requests([requestId]);\n if (!response.Ok) {\n throw new Error(\"Failed to get swap status\");\n }\n\n const swapReply = response.Ok[0].reply as any;\n if (!('Swap' in swapReply)) {\n throw new Error(\"Invalid swap response\");\n }\n\n const swapStatus = swapReply.Swap;\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 swaped ${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 } 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 };\n\n this.pollingInterval = setInterval(async () => {\n await checkStatus();\n attempts++;\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 }, 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\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 // Assuming you have a method to get the price\n const store = get(tokenStore);\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\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 window.history.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 You Pay\n
\n \n {payAmount}\n {payToken.symbol}\n
\n
\n \n
\n You Receive\n
\n \n {receiveAmount}\n {receiveToken.symbol}\n
\n
\n
\n\n\n","\n\n
\n

Route

\n
\n {#each routingPath.slice(0, -1) as token, i}\n
\n
\n
\n
\n \n
\n {token}\n
\n
\n \n
\n
\n
\n
\n \n
\n {routingPath[i + 1]}\n
\n
\n
\n Gas: {gasFees[i]} {routingPath[i + 1]}\n LP: {lpFees[i]} {routingPath[i + 1]}\n
\n \n {#if i === currentRouteIndex}\n
\n {currentStep}\n
\n
\n
\n
\n {/if}\n
\n {/each}\n
\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 (swapMode = \"normal\")}\n width=\"50%\"\n >\n Normal\n \n {}}\n width=\"50%\"\n >\n Pro (Soon)\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 swapState.setShowConfirmation(false);\n swapState.update((state) => ({\n ...state,\n showConfirmation: false,\n isProcessing: false,\n error: null,\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 {#if $tokenStore.tokens}\n
\n \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","error","params","quote","tokens","get","tokenStore","t","receiveAmount","lpFee","gasFee","tokenFee","tx","actor","v","requestIds","wallet","walletValidator","toastId","toastStore","txId","approvalId","requiredAllowance","IcrcService","swapParams","requestId","attempts","checkStatus","response","swapReply","swapStatus","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","SwapLogicService","event","updatedSuccessDetails","type","getKongBackendPrincipal","canisterId","prodIds","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","text_1","routingPath","gasFees","lpFees","currentRouteIndex","progress","currentStep","$.each","div_1","i","$.if","node_2","$.set_attribute","div_11","div_2","$.set_class","div_4","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","$.derived_safe_equal","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","KONG_BACKEND_PRINCIPAL","panels","swapMode","swapSuccessHandler","handleSwapClick","handleSwap","handleAmountChange","handleTokenSelect","s","handleTokenSelected","handleReverseTokens","updateTokenInURL","debouncedGetQuote","tempPayToken","tempPayAmount","param","tokenId","PixelArrow","ModernArrow","isSwapButtonDisabled","buttonText","state_1","panel","$themeStore","svg","path","svg_1","variant","node_6","node_7","node_8","node_9","button","fromToken","toToken","unsubscribe","page","$page","claimTokens","text","$t"],"mappings":"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","x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,25,26,27]}