{"version":3,"sources":["../../src/api/withdraw-assets.ts"],"sourcesContent":["import type { Address } from \"viem\";\nimport { NUCLEUS_BASE_URL } from \"../constants\";\nimport type { ChainId } from \"./vault-config\";\n\nexport interface WithdrawAssetsResponse {\n  [chainId: string]: {\n    [vaultAddress: string]: {\n      [tokenAddress: string]: number;\n    };\n  };\n}\n\nlet assetsCache: WithdrawAssetsResponse | null = null;\n\n/**\n * Interface for optional parameters when fetching withdraw assets\n */\ninterface FetchWithdrawAssetsParams {\n  chainId?: ChainId;\n  vaultAddress?: Address;\n}\n\n/**\n * Constructs the URL with optional query parameters\n */\nfunction constructUrl(params?: FetchWithdrawAssetsParams): string {\n  const withdrawAssetsUrl = `${NUCLEUS_BASE_URL}/withdraw-assets`;\n  if (!params) return withdrawAssetsUrl;\n\n  const queryParams = new URLSearchParams();\n  if (params.chainId) queryParams.append(\"chainId\", params.chainId.toString());\n  if (params.vaultAddress)\n    queryParams.append(\"vaultAddress\", params.vaultAddress.toLowerCase());\n\n  return `${withdrawAssetsUrl}?${queryParams.toString()}`;\n}\n\n/**\n * Fetches withdraw assets configuration from the API\n * @param params Optional parameters for chainId and vaultAddress\n * @returns Promise<WithdrawAssetsResponse>\n */\nasync function fetchWithdrawAssets(\n  params?: FetchWithdrawAssetsParams\n): Promise<WithdrawAssetsResponse> {\n  // If no specific params are provided and we have cached data, return it\n  if (!params && assetsCache) {\n    return assetsCache;\n  }\n\n  try {\n    const url = constructUrl(params);\n    const response = await fetch(url);\n\n    if (!response.ok) {\n      throw new Error(`HTTP error! status: ${response.status}`);\n    }\n\n    const data: WithdrawAssetsResponse = await response.json();\n\n    // Only cache the full response (when no params are provided)\n    if (!params) {\n      assetsCache = data;\n    }\n\n    return data;\n  } catch (error: unknown) {\n    throw new Error(\n      `An unknown error occurred while fetching withdraw assets: ${\n        error instanceof Error ? error.message : String(error)\n      }`\n    );\n  }\n}\n\n/**\n * Fetches withdraw assets for a specific chain\n * @param chainId The chain ID to fetch assets for\n * @returns Promise<WithdrawAssetsResponse[string]>\n */\nasync function fetchChainWithdrawAssets(\n  chainId: ChainId\n): Promise<WithdrawAssetsResponse[string]> {\n  const assets = await fetchWithdrawAssets({ chainId });\n  return assets[chainId.toString()];\n}\n\n/**\n * Fetches withdraw assets for a specific vault on a chain\n * @param chainId The chain ID\n * @param vaultAddress The vault address\n * @returns Promise<WithdrawAssetsResponse[string][string]>\n */\nasync function fetchVaultWithdrawAssets(\n  chainId: ChainId,\n  vaultAddress: Address\n): Promise<WithdrawAssetsResponse[string][string]> {\n  const assets = await fetchWithdrawAssets({ chainId, vaultAddress });\n  return assets[chainId.toString()]?.[vaultAddress.toLowerCase()];\n}\n\n/**\n * Clears the assets cache\n */\nfunction clearAssetsCache(): void {\n  assetsCache = null;\n}\n\nexport {\n  clearAssetsCache,\n  fetchChainWithdrawAssets,\n  fetchVaultWithdrawAssets,\n  fetchWithdrawAssets,\n  type FetchWithdrawAssetsParams,\n};\n"],"mappings":"AACA,SAAS,wBAAwB;AAWjC,IAAI,cAA6C;AAajD,SAAS,aAAa,QAA4C;AAChE,QAAM,oBAAoB,GAAG,gBAAgB;AAC7C,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,cAAc,IAAI,gBAAgB;AACxC,MAAI,OAAO,QAAS,aAAY,OAAO,WAAW,OAAO,QAAQ,SAAS,CAAC;AAC3E,MAAI,OAAO;AACT,gBAAY,OAAO,gBAAgB,OAAO,aAAa,YAAY,CAAC;AAEtE,SAAO,GAAG,iBAAiB,IAAI,YAAY,SAAS,CAAC;AACvD;AAOA,eAAe,oBACb,QACiC;AAEjC,MAAI,CAAC,UAAU,aAAa;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,MAAM,aAAa,MAAM;AAC/B,UAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAAA,IAC1D;AAEA,UAAM,OAA+B,MAAM,SAAS,KAAK;AAGzD,QAAI,CAAC,QAAQ;AACX,oBAAc;AAAA,IAChB;AAEA,WAAO;AAAA,EACT,SAAS,OAAgB;AACvB,UAAM,IAAI;AAAA,MACR,6DACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,IACF;AAAA,EACF;AACF;AAOA,eAAe,yBACb,SACyC;AACzC,QAAM,SAAS,MAAM,oBAAoB,EAAE,QAAQ,CAAC;AACpD,SAAO,OAAO,QAAQ,SAAS,CAAC;AAClC;AAQA,eAAe,yBACb,SACA,cACiD;AACjD,QAAM,SAAS,MAAM,oBAAoB,EAAE,SAAS,aAAa,CAAC;AAClE,SAAO,OAAO,QAAQ,SAAS,CAAC,IAAI,aAAa,YAAY,CAAC;AAChE;AAKA,SAAS,mBAAyB;AAChC,gBAAc;AAChB;","names":[]}