{"version":3,"sources":["../src/index.tsx","../src/debug.ts","../src/error.tsx","../src/utils/api.ts","../src/utils/ata.ts","../src/utils/useDebounce.ts"],"sourcesContent":["import {\n  InitOverrideFunction,\n  DefaultApi as JupiterApi,\n  PriorityFeeWithMaxLamports,\n  RequestOpts,\n  createJupiterApiClient,\n} from '@jup-ag/api';\nimport type { PlatformFeeAndAccounts } from '@jup-ag/common';\nimport {\n  ExchangeParams,\n  ExecuteParams,\n  JUPITER_FEE_OWNER,\n  JUPITER_V6_ERRORS,\n  LAMPORTS_PER_SIGNATURE,\n  MARKETS_URL,\n  Owner,\n  SwapMode,\n  SwapResult,\n  TOKEN_LIST_URL,\n  calculateTransactionDepositAndFeeV2,\n  executeTransaction,\n  getReferralTokenAccount,\n  getTransactionBlockhash,\n} from '@jup-ag/common';\nimport { TransactionError, checkTxSize } from '@mercurial-finance/optimist';\nimport { TOKEN_PROGRAM_ID, NATIVE_MINT as WRAPPED_SOL_MINT } from '@solana/spl-token';\nimport { Blockhash, Connection, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport JSBI from 'jsbi';\nimport promiseRetry from 'promise-retry';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { create } from 'superstruct';\nimport { getQuoteParamsOverrides } from './debug';\nimport { Errors } from './error';\nimport { QuoteResponse, QuoteResponseMeta, RoutePlanStep, RoutePlanWithMetadata, SwapInfo } from './utils/api';\nimport { getAssociatedTokenAddressSync } from './utils/ata';\nimport useDebounce from './utils/useDebounce';\n\nexport type JupiterError = (typeof Errors)[keyof typeof Errors];\n\ninterface UseJupiterResult {\n  /** The quote response deserialized and the original */\n  quoteResponseMeta?: QuoteResponseMeta;\n  /** exchange function to submit transaction */\n  exchange: (\n    params: ExchangeParams<QuoteResponseMeta> &\n      ExecuteParams & {\n        prioritizationFeeLamports:\n          | ExchangeParams<QuoteResponseMeta>['prioritizationFeeLamports']\n          | {\n              priorityLevelWithMaxLamports: PriorityFeeWithMaxLamports;\n            }\n          | undefined;\n      },\n  ) => Promise<SwapResult>;\n  fetchQuote: () => Promise<{\n    quoteResponse: QuoteResponse;\n    original: any;\n    timestamp: number;\n  } | null>;\n  /** fetchSwapTransaction function to fetch the transaction */\n  fetchSwapTransaction: (\n    params: Pick<\n      ExchangeParams<QuoteResponseMeta>,\n      'quoteResponseMeta' | 'userPublicKey' | 'wrapUnwrapSOL' | 'allowOptimizedWrappedSolTokenAccount'\n    > & {\n      enableSwapEndpointFee?: boolean;\n      prioritizationFeeLamports:\n        | ExchangeParams<QuoteResponseMeta>['prioritizationFeeLamports']\n        | {\n            priorityLevelWithMaxLamports: PriorityFeeWithMaxLamports;\n          }\n        | undefined;\n      dynamicSlippage?: {\n        minBps?: number;\n        maxBps?: number;\n      };\n    },\n  ) => Promise<\n    | {\n        dynamicSlippageReport?: {\n          slippageBps?: number; // 5\n          otherAmount?: number; // 999980000000000000\n          simulatedIncurredSlippageBps?: number; // 12\n          amplificationRatio?: string; // '1.999983256191180133562516026';\n        };\n        swapTransaction: VersionedTransaction | Transaction;\n        blockhash: Blockhash;\n        lastValidBlockHeight: number;\n      }\n    | { error: TransactionError }\n  >;\n  /** refresh function to refetch the prices */\n  refresh: () => void;\n  /** last refresh timestamp */\n  lastRefreshTimestamp: number;\n  /** loading state */\n  loading: boolean;\n  error: JupiterError | undefined;\n  programIdToLabelMap: Map<string, string>;\n  /* programId that is excluded */\n  programIdsExcluded: Set<string>;\n  setProgramIdsExcluded: React.Dispatch<React.SetStateAction<Set<string>>>;\n}\n\ninterface JupiterProps {\n  connection: Connection;\n  platformFeeAndAccounts?: PlatformFeeAndAccounts;\n  wrapUnwrapSOL?: boolean;\n  onlyDirectRoutes?: boolean;\n  asLegacyTransaction?: boolean;\n  useSharedAccounts?: boolean;\n  userPublicKey?: PublicKey;\n  routeCacheDuration?: number;\n  jupiterQuoteApiUrl?: string;\n  children?: React.ReactNode;\n  computeAutoSlippage?: boolean;\n  whitelistedFeeMints?: string[];\n}\n\nconst JupiterContext = createContext<\n  | (Omit<JupiterProps, 'jupiterQuoteApiUrl'> & {\n      connection: Connection;\n      jupiterApiClient: JupiterApi;\n      getPlatformFeeAccount: (platformFeeMint: string) => Promise<PublicKey | undefined>;\n      programIdToLabelMap: Map<string, string>;\n      error: JupiterError | undefined;\n      programIdsExcluded: Set<string>;\n      setError: (error?: JupiterError) => void;\n      setProgramIdsExcluded: React.Dispatch<React.SetStateAction<Set<string>>>;\n      whitelistedFeeMints?: string[];\n    })\n  | null\n>(null);\n\nexport const JupiterProvider: React.FC<JupiterProps> = ({\n  onlyDirectRoutes,\n  userPublicKey,\n  jupiterQuoteApiUrl,\n  children,\n  ...jupiterLoadProps\n}) => {\n  const [programIdToLabelMap, setProgramIdToLabelMap] = useState(new Map<string, string>());\n  const [error, setError] = useState<JupiterError>();\n  const [programIdsExcluded, setProgramIdsExcluded] = useState<Set<string>>(new Set());\n  const platformFeeAndAccountsRef = useRef<PlatformFeeAndAccounts>();\n\n  useEffect(() => {\n    platformFeeAndAccountsRef.current = jupiterLoadProps.platformFeeAndAccounts;\n  }, [jupiterLoadProps.platformFeeAndAccounts]);\n\n  const setPlatformFeeAccount = useCallback((mint: string, platformFeeAccount: PublicKey | null) => {\n    if (!platformFeeAndAccountsRef.current) return;\n    if (!platformFeeAndAccountsRef.current.feeAccounts) platformFeeAndAccountsRef.current.feeAccounts = new Map();\n    platformFeeAndAccountsRef.current.feeAccounts.set(mint, platformFeeAccount);\n  }, []);\n\n  const getPlatformFeeAccount = useCallback(async (platformFeeMint: string) => {\n    const platformFeeAndAccounts = platformFeeAndAccountsRef.current;\n    const platformFeeAccount = platformFeeAndAccounts?.feeAccounts?.get(platformFeeMint);\n    const platformFeeBps = platformFeeAndAccounts?.feeBps;\n    if (platformFeeAccount) return platformFeeAccount;\n    if (platformFeeAccount === null || !platformFeeBps) return;\n\n    if (platformFeeAndAccounts?.referralAccount) {\n      const referralTokenAccount = await getReferralTokenAccount({\n        connection: jupiterLoadProps.connection,\n        referralAccount: platformFeeAndAccounts.referralAccount,\n        mint: new PublicKey(platformFeeMint),\n      });\n      setPlatformFeeAccount(platformFeeMint, referralTokenAccount);\n      if (referralTokenAccount) return referralTokenAccount;\n    }\n    return;\n  }, []);\n\n  const jupiterApiClient = useMemo(() => {\n    if (jupiterQuoteApiUrl) {\n      return createJupiterApiClient({\n        basePath: jupiterQuoteApiUrl,\n      });\n    }\n    return createJupiterApiClient();\n  }, [jupiterQuoteApiUrl]);\n\n  useEffect(() => {\n    // reset when asLegacyTransaction toggled\n    setProgramIdsExcluded((set) => {\n      if (set.size) {\n        return new Set();\n      }\n      return set;\n    });\n  }, [jupiterLoadProps.asLegacyTransaction]);\n\n  useEffect(() => {\n    async function fetchProgramIdToLabelMap() {\n      const programIdToLabel = await jupiterApiClient.programIdToLabelGet();\n      const programIdToLabelMap = new Map(Object.entries(programIdToLabel));\n      setProgramIdToLabelMap(programIdToLabelMap);\n    }\n    fetchProgramIdToLabelMap();\n  }, [jupiterApiClient]);\n\n  return (\n    <JupiterContext.Provider\n      value={{\n        ...jupiterLoadProps,\n        getPlatformFeeAccount,\n        userPublicKey,\n        programIdToLabelMap,\n        jupiterApiClient,\n        error,\n        setError,\n        onlyDirectRoutes,\n        programIdsExcluded,\n        setProgramIdsExcluded,\n        whitelistedFeeMints: jupiterLoadProps.whitelistedFeeMints,\n      }}\n    >\n      {children}\n    </JupiterContext.Provider>\n  );\n};\n\nexport interface UseJupiterProps {\n  amount: JSBI;\n  inputMint: PublicKey | undefined;\n  outputMint: PublicKey | undefined;\n  autoSlippage?: boolean;\n  maxAutoSlippageBps?: number;\n  autoSlippageCollisionUsdValue?: number;\n  slippageBps?: number;\n  /* inputAmount is being debounced, debounceTime 0 to disable debounce */\n  debounceTime?: number;\n  swapMode?: SwapMode;\n  maxAccounts?: number;\n  disabledProgramIds?: string[];\n  computeAutoSlippage?: boolean;\n  minimizeSlippage?: boolean; // default to false\n  preferLiquidDexes?: boolean;\n}\n\nexport const useJupiterClient = () => {\n  const context = useContext(JupiterContext);\n  if (!context) {\n    throw new Error('JupiterProvider is required');\n  }\n  return context.jupiterApiClient;\n};\n\nexport const useJupiter = ({\n  amount,\n  inputMint,\n  outputMint,\n  autoSlippage,\n  maxAutoSlippageBps,\n  autoSlippageCollisionUsdValue,\n  slippageBps,\n  swapMode,\n  debounceTime = 250,\n  maxAccounts,\n  disabledProgramIds,\n  computeAutoSlippage,\n  minimizeSlippage,\n  preferLiquidDexes,\n}: UseJupiterProps): UseJupiterResult => {\n  const context = useContext(JupiterContext);\n  const [loading, setLoading] = useState(false);\n  const [quoteResponseMeta, setQuoteResponseMeta] = useState<QuoteResponseMeta>();\n  const [refreshCount, setRefreshCount] = useState<number>(0);\n  // lastRefreshCount indicate when the last refresh was triggered on which refreshCount\n  const lastRefreshCount = useRef<number>(refreshCount);\n\n  const [debouncedAmount, debouncedInputMint, debouncedOutputMint, debouncedSwapMode] = useDebounce(\n    React.useMemo(() => {\n      // called immediaetly instead of waiting debounce because we want to show the loading state\n      if (JSBI.greaterThan(amount, JSBI.BigInt(0))) {\n        setLoading(true);\n      }\n      return [amount, inputMint, outputMint, swapMode];\n    }, [amount.toString(), inputMint?.toBase58(), outputMint?.toBase58(), swapMode]),\n    debounceTime,\n  );\n\n  const lastRefreshTimestamp = useRef<number>(0);\n  const lastQueryTimestamp = useRef<number>(0);\n\n  if (!context) {\n    throw new Error('JupiterProvider is required');\n  }\n\n  const {\n    error,\n    setError,\n    routeCacheDuration = 0,\n    onlyDirectRoutes,\n    jupiterApiClient,\n    userPublicKey,\n    wrapUnwrapSOL = true,\n    asLegacyTransaction,\n    platformFeeAndAccounts,\n    programIdToLabelMap,\n    setProgramIdsExcluded,\n    programIdsExcluded,\n    whitelistedFeeMints,\n  } = context;\n\n  // lastRefreshCount to determine when the last refresh was triggered, reset this to -1 to trigger a re-fetch\n  useEffect(() => {\n    lastRefreshCount.current = -1;\n  }, [\n    [debouncedInputMint?.toString(), debouncedOutputMint?.toString()].sort().join('-'),\n    autoSlippage,\n    maxAutoSlippageBps,\n    autoSlippageCollisionUsdValue,\n    slippageBps,\n  ]);\n\n  useEffect(() => {\n    // if now - lastRefreshTimestamp > routeCacheDuration, then we need to refresh\n    if (lastRefreshTimestamp.current && new Date().getTime() - lastRefreshTimestamp.current >= routeCacheDuration) {\n      lastRefreshCount.current = -1;\n    }\n\n    // don't set loading if there is no input amount\n    if (JSBI.greaterThan(debouncedAmount, JSBI.BigInt(0))) {\n      setLoading(true);\n    } else {\n      setLoading(false);\n    }\n  }, [\n    refreshCount,\n    debouncedAmount,\n    slippageBps,\n    debouncedInputMint,\n    debouncedOutputMint,\n    onlyDirectRoutes,\n    asLegacyTransaction,\n  ]);\n\n  const fetchQuote = useCallback(async () => {\n    try {\n      if (JSBI.equal(debouncedAmount, JSBI.BigInt(0)) || error === Errors.INITIALIZE_ERROR) {\n        return null;\n      } else if (debouncedAmount) {\n        if (!debouncedInputMint || !debouncedOutputMint) return null;\n        if (slippageBps && autoSlippage) throw new Error('Cannot set both slippageBps and autoSlippage');\n        if (!autoSlippage && maxAutoSlippageBps) throw new Error('Cannot set maxAutoSlippageBps without autoSlippage');\n\n        const inputMint = debouncedInputMint.toBase58();\n        const outputMint = debouncedOutputMint.toBase58();\n\n        if (swapMode === SwapMode.ExactOut && maxAccounts) {\n          console.warn('maxAccounts is not supported for ExactOut swap mode');\n        }\n\n        let quoteResponse: QuoteResponse;\n        let original: any;\n\n        const excludeDexes = Array.from([...programIdsExcluded, ...(disabledProgramIds || [])])\n          .map((id) => programIdToLabelMap.get(id))\n          .filter((id): id is string => Boolean(id)) as string[];\n\n        const quoteParamsOverrides = getQuoteParamsOverrides();\n        const apiClient = new Proxy(jupiterApiClient, {\n          get: function (target, prop: keyof JupiterApi & 'request') {\n            if (prop === 'request') {\n              return (context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) => {\n                if (Object.keys(quoteParamsOverrides).length) {\n                  console.log('Quoting with overrides:', quoteParamsOverrides);\n                  Object.assign(context.query!, quoteParamsOverrides);\n                }\n\n                // @ts-expect-error\n                return target.request(context, initOverrides);\n              };\n            }\n            return Reflect.get(target, prop);\n          },\n        });\n\n        // For quoting, we just check if the inputMint/ouptutMint is whitelisted\n        // so we dont have to call gPA (getPlatformFeeAccount) for every quote\n        const supportedMint = (swapMode === SwapMode.ExactOut ? [inputMint] : [inputMint, outputMint]).filter(\n          (mint) => {\n            if (whitelistedFeeMints) {\n              return whitelistedFeeMints?.includes(mint);\n            }\n            // If user do not define whitelistedFeeMints, allow all\n            return true;\n          },\n        );\n        const platformFeeBps = supportedMint.length > 0 ? platformFeeAndAccounts?.feeBps : undefined;\n\n        const response = await promiseRetry(\n          (retry) =>\n            apiClient\n              .quoteGet({\n                inputMint,\n                outputMint,\n                amount: debouncedAmount.toString() as any, // making it number for u64.MAX would cause precision err\n                autoSlippage,\n                maxAutoSlippageBps,\n                autoSlippageCollisionUsdValue,\n                slippageBps,\n                swapMode,\n                excludeDexes: excludeDexes.length ? [excludeDexes.filter(Boolean).join(',')] : undefined,\n                onlyDirectRoutes,\n                asLegacyTransaction,\n                platformFeeBps,\n                maxAccounts,\n                computeAutoSlippage,\n                minimizeSlippage,\n                preferLiquidDexes,\n              })\n              .catch((e) => {\n                retry(e);\n              }),\n          {\n            retries: 1,\n            minTimeout: 100,\n          },\n        );\n\n        // deep copy as create is mutating\n        original = Object.assign({}, response);\n        quoteResponse = create(response, QuoteResponse);\n\n        return { quoteResponse, original, timestamp: new Date().getTime() };\n      }\n\n      return null;\n    } catch (error) {\n      throw error;\n    }\n  }, [\n    debouncedAmount,\n    debouncedInputMint,\n    debouncedOutputMint,\n    debouncedSwapMode,\n    slippageBps,\n    maxAutoSlippageBps,\n    swapMode,\n    maxAccounts,\n    userPublicKey,\n    wrapUnwrapSOL,\n    refreshCount,\n    onlyDirectRoutes,\n    asLegacyTransaction,\n    programIdsExcluded,\n    preferLiquidDexes,\n  ]);\n\n  useEffect(() => {\n    let requestAborted = false;\n\n    (async () => {\n      if (JSBI.equal(debouncedAmount, JSBI.BigInt(0)) || error === Errors.INITIALIZE_ERROR) {\n        setLoading(false);\n        setQuoteResponseMeta(undefined);\n      } else if (debouncedAmount) {\n        if (!debouncedInputMint || !debouncedOutputMint) return;\n        const lastUpdatedTime = new Date().getTime();\n        lastQueryTimestamp.current = lastUpdatedTime;\n\n        lastRefreshTimestamp.current = lastUpdatedTime;\n\n        try {\n          const fetchedQuote = await fetchQuote();\n          if (!fetchedQuote?.quoteResponse || !fetchedQuote?.original || !fetchedQuote?.timestamp || requestAborted)\n            return;\n\n          setQuoteResponseMeta({\n            quoteResponse: fetchedQuote.quoteResponse,\n            original: fetchedQuote.original,\n          });\n\n          setError(undefined);\n        } catch (e: any) {\n          console.error(e);\n          if (lastQueryTimestamp.current !== lastUpdatedTime) {\n            return;\n          }\n\n          const haveErrorCode = await (async () => {\n            try {\n              if ('response' in e && e.response instanceof Response) {\n                const errorObj = await e.response.json();\n                return errorObj.errorCode || null;\n              }\n            } catch (error) {\n              console.log('Error parsing error response', error);\n              return null;\n            }\n          })();\n\n          if (haveErrorCode) {\n            setError(haveErrorCode);\n          } else {\n            setError(Errors.FETCH_ROUTES_ERROR);\n          }\n\n          // Clear routes when erring to avoid bad pricing\n          setQuoteResponseMeta(undefined);\n        } finally {\n          if (lastQueryTimestamp.current !== lastUpdatedTime) {\n            return;\n          }\n          lastRefreshCount.current = refreshCount;\n          setLoading(false);\n        }\n      }\n    })();\n\n    return () => {\n      requestAborted = true;\n    };\n  }, [fetchQuote]);\n\n  const { exchange, fetchSwapTransaction } = useJupiterExchange(swapMode);\n\n  return {\n    exchange,\n    fetchQuote,\n    fetchSwapTransaction,\n    refresh: React.useCallback(() => {\n      if (!loading && lastRefreshTimestamp.current) {\n        setRefreshCount((refreshCount) => refreshCount + 1);\n      }\n    }, [loading]),\n    lastRefreshTimestamp: lastRefreshTimestamp.current,\n    loading,\n    quoteResponseMeta,\n    error,\n    programIdToLabelMap,\n    setProgramIdsExcluded,\n    programIdsExcluded,\n  };\n};\n\nexport const useJupiterExchange = (swapMode: SwapMode | undefined) => {\n  const context = useContext(JupiterContext);\n  if (!context) {\n    throw new Error('JupiterProvider is required');\n  }\n\n  const {\n    jupiterApiClient,\n    userPublicKey,\n    connection,\n    wrapUnwrapSOL = true,\n    asLegacyTransaction,\n    platformFeeAndAccounts,\n    useSharedAccounts,\n    getPlatformFeeAccount,\n    whitelistedFeeMints,\n  } = context;\n\n  const fetchSwapTransaction = useCallback(\n    async ({\n      quoteResponseMeta,\n      userPublicKey,\n      wrapUnwrapSOL: propsWrapUnwrapSOL,\n      prioritizationFeeLamports,\n      allowOptimizedWrappedSolTokenAccount,\n      dynamicSlippage,\n    }: Parameters<UseJupiterResult['fetchSwapTransaction']>[0]) => {\n      if (!userPublicKey) throw new Error('User public key is required');\n      const wrapAndUnwrapSol = Boolean(propsWrapUnwrapSOL ?? wrapUnwrapSOL ?? true);\n      const { inputMint, outputMint } = quoteResponseMeta.quoteResponse;\n\n      const supportedMints = (swapMode === SwapMode.ExactOut ? [inputMint] : [inputMint, outputMint]).filter((mint) => {\n        if (whitelistedFeeMints) {\n          return whitelistedFeeMints?.includes(mint.toString());\n        }\n        // If user do not define whitelistedFeeMints, allow all\n        return true;\n      });\n\n      const feeAccount =\n        supportedMints.length !== 0\n          ? await (async () => {\n              for (const mint of supportedMints) {\n                const account = await getPlatformFeeAccount(mint.toBase58());\n                // First `mint` is always the `inputMint`, we always prioritise `inputMint` as fees\n                if (account) {\n                  return account;\n                }\n              }\n              return undefined;\n            })()\n          : undefined;\n\n      const result = await promiseRetry(\n        (retry) =>\n          jupiterApiClient\n            .swapPost({\n              swapRequest: {\n                quoteResponse: quoteResponseMeta.original as any,\n                userPublicKey: userPublicKey.toBase58(),\n                wrapAndUnwrapSol,\n                feeAccount: feeAccount?.toBase58(),\n                asLegacyTransaction,\n                useSharedAccounts,\n                dynamicComputeUnitLimit: true,\n                allowOptimizedWrappedSolTokenAccount,\n                prioritizationFeeLamports,\n                dynamicSlippage,\n                correctLastValidBlockHeight: true,\n              },\n            })\n            .catch(async (res) => {\n              try {\n                // probably an error with the quote so we dont retry\n                const { error } = await res.json();\n                return { error: new TransactionError(error) };\n              } catch (e) {\n                // probably json is not parsable or the res is not an response object.\n                return retry({\n                  error: new TransactionError('Unknown error'),\n                });\n              }\n            }),\n        {\n          retries: 1,\n          minTimeout: 100,\n        },\n      );\n\n      if ('error' in result) {\n        return result;\n      }\n\n      const { swapTransaction: swapTransactionSerialized, lastValidBlockHeight } = result;\n\n      const swapTransactionBuffer = Buffer.from(swapTransactionSerialized, 'base64');\n\n      const swapTransaction = asLegacyTransaction\n        ? Transaction.from(swapTransactionBuffer)\n        : VersionedTransaction.deserialize(swapTransactionBuffer);\n\n      checkTxSize(swapTransaction);\n\n      return {\n        swapTransaction,\n        blockhash: getTransactionBlockhash(swapTransaction),\n        lastValidBlockHeight,\n        dynamicSlippageReport: result.dynamicSlippageReport,\n      };\n    },\n    [wrapUnwrapSOL, asLegacyTransaction, useSharedAccounts, getPlatformFeeAccount, jupiterApiClient],\n  );\n\n  const exchange: UseJupiterResult['exchange'] = useCallback(\n    async ({\n      wallet,\n      quoteResponseMeta,\n      onTransaction,\n      prioritizationFeeLamports,\n      ...restExchangeProps\n    }): Promise<SwapResult> => {\n      if (!userPublicKey) throw new Error('User public key is required');\n      if (!wallet) throw new Error('Wallet is required');\n\n      const { inputMint, outputMint } = quoteResponseMeta.quoteResponse;\n\n      const wrapAndUnwrapSol = Boolean(restExchangeProps.wrapUnwrapSOL ?? wrapUnwrapSOL ?? true);\n\n      const [result, accountInfos] = await Promise.all([\n        fetchSwapTransaction({\n          quoteResponseMeta,\n          userPublicKey,\n          wrapUnwrapSOL: wrapAndUnwrapSol,\n          prioritizationFeeLamports,\n          ...restExchangeProps,\n        }),\n        connection.getMultipleAccountsInfo([inputMint, outputMint]),\n      ]);\n\n      if ('error' in result) {\n        return result;\n      }\n\n      const { blockhash, lastValidBlockHeight, swapTransaction } = result;\n      const [sourceAddress, destinationAddress] = [inputMint, outputMint].map((mint, idx) =>\n        getAssociatedTokenAddressSync(mint, userPublicKey, accountInfos[idx]?.owner || TOKEN_PROGRAM_ID),\n      );\n\n      return executeTransaction({\n        connection,\n        wallet,\n        onTransaction,\n        inputMint,\n        outputMint,\n        sourceAddress,\n        destinationAddress,\n        swapTransaction,\n        blockhashWithBlockHeight: { lastValidBlockHeight, blockhash },\n        owner: new Owner(userPublicKey),\n        wrapUnwrapSOL: wrapAndUnwrapSol,\n      });\n    },\n    [userPublicKey, wrapUnwrapSOL, asLegacyTransaction, connection, platformFeeAndAccounts, jupiterApiClient, swapMode],\n  );\n\n  return { exchange, fetchSwapTransaction };\n};\n\nexport type { QuoteResponse, QuoteResponseMeta, RoutePlanStep, RoutePlanWithMetadata, SwapInfo };\n\nexport type {\n  ErrorDetails,\n  Fee,\n  IndexedRouteMap,\n  Instruction,\n  OnTransaction,\n  SwapResult,\n  TransactionFeeInfo,\n} from '@jup-ag/common';\n\nexport { JUPITER_PROGRAM_V4_ID, JUPITER_PROGRAM_V6_ID, OPENBOOK_PROGRAM_ID } from '@jup-ag/common';\n\nexport {\n  Errors,\n  JUPITER_FEE_OWNER,\n  JUPITER_V6_ERRORS,\n  LAMPORTS_PER_SIGNATURE,\n  MARKETS_URL,\n  Owner,\n  SwapMode,\n  TOKEN_LIST_URL,\n};\n\nexport const calculateFeeForSwap = (\n  quoteResponse: QuoteResponse | undefined,\n  mintToAtaMap: Map<string, string>,\n  openbookMarketToOpenOrderMap: Map<string, string>,\n  wrapUnwrapSOL: boolean,\n  useSharedAccounts: boolean,\n) => {\n  const atasToBeCreated = new Set<string>();\n  const openOrdersToBeCreated = new Set<string>();\n  const isInputMintSOL = Boolean(wrapUnwrapSOL && quoteResponse?.inputMint.equals(WRAPPED_SOL_MINT));\n\n  const walkRoutePlan = (routePlan: RoutePlanWithMetadata) => {\n    if (!useSharedAccounts) {\n      routePlan.forEach((routeStep) => {\n        if (!mintToAtaMap.has(routeStep.swapInfo.outputMint)) {\n          atasToBeCreated.add(routeStep.swapInfo.outputMint);\n        }\n\n        if (routeStep.swapInfo.label === 'Openbook') {\n          if (!openbookMarketToOpenOrderMap.has(routeStep.swapInfo.ammKey.toBase58())) {\n            openOrdersToBeCreated.add(routeStep.swapInfo.outputMint);\n          }\n        }\n      });\n    }\n  };\n\n  if (quoteResponse) {\n    if (useSharedAccounts) {\n      let numOfAtasToBeCreated = 0;\n      if (\n        quoteResponse.inputMint.equals(WRAPPED_SOL_MINT) ||\n        (quoteResponse.outputMint.equals(WRAPPED_SOL_MINT) &&\n          wrapUnwrapSOL &&\n          !mintToAtaMap.has(WRAPPED_SOL_MINT.toBase58()))\n      ) {\n        numOfAtasToBeCreated = 1;\n      }\n\n      return calculateTransactionDepositAndFeeV2({\n        numOfAtasToBeCreated,\n        numOfOpenOrdersToBeCreated: 0,\n        isInputMintSOL,\n      });\n    }\n\n    if (\n      quoteResponse.inputMint.equals(WRAPPED_SOL_MINT) &&\n      wrapUnwrapSOL &&\n      !mintToAtaMap.has(WRAPPED_SOL_MINT.toBase58())\n    ) {\n      atasToBeCreated.add(WRAPPED_SOL_MINT.toBase58());\n    }\n\n    walkRoutePlan(quoteResponse.routePlan);\n  }\n\n  return calculateTransactionDepositAndFeeV2({\n    numOfAtasToBeCreated: atasToBeCreated.size,\n    numOfOpenOrdersToBeCreated: openOrdersToBeCreated.size,\n    isInputMintSOL,\n  });\n};\n","export function getQuoteParamsOverrides(): Record<string, string> {\n  const overrides: Record<string, string> = {};\n  const quoteParamsJson = localStorage.getItem('quoteParams'); // Expected format is a json {[name: string]: value}\n  if (quoteParamsJson) {\n    const quoteArgs = JSON.parse(quoteParamsJson);\n    Object.assign(overrides, quoteArgs);\n  }\n  const quoteArgsJson = localStorage.getItem('quoteArgs'); // Expected format is a json {[name: string]: value}\n  if (quoteArgsJson) {\n    const quoteArgs = JSON.parse(quoteArgsJson) as { [name: string]: string };\n    for (const [name, value] of Object.entries(quoteArgs)) {\n      overrides[`quoteArg-${name}`] = value;\n    }\n  }\n\n  return overrides;\n}\n","export const Errors = {\n  INITIALIZE_ERROR: 'INITIALIZE_ERROR',\n  FETCH_ROUTES_ERROR: 'FETCH_ROUTES_ERROR',\n  NO_ROUTES_ERROR: 'NO_ROUTES_ERROR',\n  TOKEN_NOT_TRADABLE: 'TOKEN_NOT_TRADABLE',\n  COULD_NOT_FIND_ANY_ROUTE: 'COULD_NOT_FIND_ANY_ROUTE',\n  INVALID_REQUEST: 'INVALID_REQUEST',\n  ROUTE_PLAN_DOES_NOT_CONSUME_ALL_THE_AMOUNT: 'ROUTE_PLAN_DOES_NOT_CONSUME_ALL_THE_AMOUNT',\n} as const;\n","import { array, coerce, Infer, instance, integer, number, string, type, enums, optional } from 'superstruct';\nimport { PublicKey } from '@solana/web3.js';\nimport JSBI from 'jsbi';\n\nexport const PublicKeyFromString = coerce(instance(PublicKey), string(), (value) => new PublicKey(value));\n\n//@ts-ignore bug because JSBI ctor being private?!?\nexport const AmountFromString = coerce<JSBI, null, string>(instance(JSBI), string(), (value) => JSBI.BigInt(value));\n\nexport const NumberFromString = coerce<string, null, number>(string(), number(), (value) => new Number(value));\n\nexport type SwapInfo = Infer<typeof SwapInfo>;\nexport const SwapInfo = type({\n  ammKey: PublicKeyFromString,\n  label: string(),\n  inputMint: string(),\n  outputMint: string(),\n  inAmount: AmountFromString,\n  outAmount: AmountFromString,\n  feeAmount: AmountFromString,\n  feeMint: PublicKeyFromString,\n});\n\nexport type RoutePlanStep = Infer<typeof RoutePlanStep>;\nexport const RoutePlanStep = type({\n  swapInfo: SwapInfo,\n  percent: integer(),\n});\nexport type RoutePlanWithMetadata = Infer<typeof RoutePlanWithMetadata>;\nexport const RoutePlanWithMetadata = array(RoutePlanStep);\n\nexport type QuoteResponse = Infer<typeof QuoteResponse>;\nexport const QuoteResponse = type({\n  inputMint: PublicKeyFromString,\n  inAmount: AmountFromString,\n  outputMint: PublicKeyFromString,\n  outAmount: AmountFromString,\n  otherAmountThreshold: AmountFromString,\n  priceImpactPct: NumberFromString,\n  swapMode: enums(['ExactIn', 'ExactOut']),\n  routePlan: RoutePlanWithMetadata,\n  slippageBps: number(),\n  contextSlot: number(),\n  computedAutoSlippage: optional(number()),\n});\n\nexport type QuoteResponseMeta = {\n  quoteResponse: QuoteResponse;\n  original: any;\n};\n","import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token';\nimport { PublicKey } from '@solana/web3.js';\n\nexport function getAssociatedTokenAddressSync(mint: PublicKey, owner: PublicKey, tokenProgramId = TOKEN_PROGRAM_ID) {\n  const [ata] = PublicKey.findProgramAddressSync(\n    [owner.toBuffer(), tokenProgramId.toBuffer(), mint.toBuffer()],\n    ASSOCIATED_TOKEN_PROGRAM_ID,\n  );\n  return ata;\n}\n","import { useEffect, useState } from 'react';\n\nexport default function useDebounce<T>(value: T, delay: number): T {\n  const [debouncedValue, setDebouncedValue] = useState(value);\n  useEffect(\n    () => {\n      // Update debounced value after delay\n      const handler = setTimeout(() => {\n        setDebouncedValue(value);\n      }, delay);\n      // Cancel the timeout if value changes (also on delay change or unmount)\n      return () => {\n        clearTimeout(handler);\n      };\n    },\n    [value, delay], // Only re-call effect if value or delay changes\n  );\n  return debouncedValue;\n}\n"],"mappings":"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","names":["TOKEN_PROGRAM_ID","PublicKey","JSBI","useEffect","useState","PublicKey","useState","useEffect","PublicKey","programIdToLabelMap","JSBI","inputMint","outputMint","context","error","refreshCount","userPublicKey","TOKEN_PROGRAM_ID"]}