import type { IUntangledVaultExposure } from './types'; /** * Fetch a vault's full capital exposure from the Untangled portfolio API. * * Untangled reconciles Stellar vaults end to end — the vault's idle buffer, * capital deployed into Stellar protocols, custody wallet balances, and value * bridged to other chains. DeBank and Octav.fi cover none of that, which is why * Stellar vaults previously rendered an empty exposure breakdown. * * The endpoint is keyed by **vault** address and already aggregates every * borrower, so it must be called once per vault — never once per borrower, which * would multiply the same totals. * * Requests are plain `GET`s with no custom headers. That is deliberate: it keeps * them preflight-free in the browser, where the API's `access-control-allow-origin: *` * covers the simple request but a bare `OPTIONS` is rejected. * * Never throws. Every failure — unknown vault, upstream error, transport * failure, malformed body — resolves to `null` so callers can degrade to an * empty exposure section instead of losing the rest of their response. * * Worst case: exactly **1 HTTP call**. No retry, no caching (the API is edge * cached at `s-maxage=60`, well inside its 60 req/min budget for one call per * vault page load). * * @param vault - Vault address, e.g. a Stellar contract address (`C…`). * @returns The resolved exposure report, or `null` when Untangled does not * reconcile this vault or the request failed. * * @example * ```typescript * const exposure = await fetchUntangledVaultExposure( * 'CCL3WITWFFXIHV2I52ECV5DPIEOFSTU3PBPR53ILPLF2IP5KHECXRUTY', * ); * // exposure?.tvlUsd → 24845637.05 * // exposure?.byProtocol → [{ protocolId: 'stellar-wallet', … }, { protocolId: 'blend', … }, …] * const normalized = transformUntangledToDebank(exposure); * ``` */ export declare function fetchUntangledVaultExposure(vault: string): Promise;