{"version":3,"sources":["../../src/api/vault-config.ts"],"sourcesContent":["import type { Chain } from \"viem/chains\";\nimport type { Vault, VaultKey } from \"../vaults/config\";\n\n// Type for chain IDs supported by the vault configuration\nexport type ChainId = number | `${number}`;\n\n// Type for the vault configuration response\nexport interface VaultConfigResponse {\n  chains: { [key: string]: Chain };\n  vaults: { [key: string]: Vault };\n}\n\nlet configCache: VaultConfigResponse | null = null;\n\n/**\n * Validates if a chain ID is supported by checking the vault configuration\n */\nexport async function isChainSupported(chainId: ChainId): Promise<boolean> {\n  const config = await fetchVaultConfigs();\n  return chainId.toString() in config.chains;\n}\n\n/**\n * Gets the numeric chain ID from any valid chain ID input\n */\nexport function toChainId(value: ChainId): number {\n  return typeof value === \"number\" ? value : Number(value);\n}\n\n/**\n * Fetches vault configurations from the API\n * @returns Promise<VaultConfigResponse>\n */\nasync function fetchVaultConfigs(): Promise<VaultConfigResponse> {\n  if (configCache) {\n    return configCache;\n  }\n\n  try {\n    const response = await fetch(\n      \"https://api.nucleusearn.io/prod/vault-config\"\n    );\n    if (!response.ok) {\n      throw new Error(`API request failed with status ${response.status}`);\n    }\n    const data: VaultConfigResponse = await response.json();\n    configCache = data;\n    return configCache;\n  } catch (error) {\n    console.error(\"Error in fetchVaultConfigs:\", error);\n    throw error;\n  }\n}\n\n/**\n * Fetches configuration for a specific vault\n * @param vaultKey The vault key to fetch configuration for (can be a known VaultKey or a new vault key from the API)\n * @returns Promise<Vault>\n */\nasync function fetchVaultConfig(vaultKey: VaultKey | string): Promise<Vault> {\n  const configs = await fetchVaultConfigs();\n  const vault = configs.vaults[vaultKey];\n  if (!vault) {\n    throw new Error(`Vault config not found for key: ${vaultKey}`);\n  }\n  return vault;\n}\n\n/**\n * Gets a specific chain configuration\n * @param chainId The chain ID to fetch configuration for\n * @returns Promise<Chain>\n */\nasync function getChainConfig(chainId: ChainId): Promise<Chain> {\n  const configs = await fetchVaultConfigs();\n  const key = chainId.toString();\n  const chain = configs.chains[key];\n  if (!chain) {\n    throw new Error(`Chain config not found for ID: ${chainId}`);\n  }\n  return chain;\n}\n\n/**\n * Clears the configuration cache\n */\nfunction clearConfigCache(): void {\n  configCache = null;\n}\n\nexport {\n  clearConfigCache,\n  fetchVaultConfig,\n  fetchVaultConfigs,\n  getChainConfig,\n};\n"],"mappings":"AAYA,IAAI,cAA0C;AAK9C,eAAsB,iBAAiB,SAAoC;AACzE,QAAM,SAAS,MAAM,kBAAkB;AACvC,SAAO,QAAQ,SAAS,KAAK,OAAO;AACtC;AAKO,SAAS,UAAU,OAAwB;AAChD,SAAO,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AACzD;AAMA,eAAe,oBAAkD;AAC/D,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,kCAAkC,SAAS,MAAM,EAAE;AAAA,IACrE;AACA,UAAM,OAA4B,MAAM,SAAS,KAAK;AACtD,kBAAc;AACd,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,+BAA+B,KAAK;AAClD,UAAM;AAAA,EACR;AACF;AAOA,eAAe,iBAAiB,UAA6C;AAC3E,QAAM,UAAU,MAAM,kBAAkB;AACxC,QAAM,QAAQ,QAAQ,OAAO,QAAQ;AACrC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,mCAAmC,QAAQ,EAAE;AAAA,EAC/D;AACA,SAAO;AACT;AAOA,eAAe,eAAe,SAAkC;AAC9D,QAAM,UAAU,MAAM,kBAAkB;AACxC,QAAM,MAAM,QAAQ,SAAS;AAC7B,QAAM,QAAQ,QAAQ,OAAO,GAAG;AAChC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,kCAAkC,OAAO,EAAE;AAAA,EAC7D;AACA,SAAO;AACT;AAKA,SAAS,mBAAyB;AAChC,gBAAc;AAChB;","names":[]}