@molecularlabs/nucleus-frontend
Version:
Nucleus BoringVault Frontend SDK
1 lines • 3.65 kB
Source Map (JSON)
{"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":[]}