Changelog

8.0.0

Major Changes

  • ebeb2c6: chore: remove two unused symbols from the published type surface β€” the @deprecated StellarNetwork alias (use IStellarNetwork instead; the alias existed for back-compat and has 0 internal consumers across our repos) and the octavfi?: string field on the SDK constructor's keys config (the field was never read; the octavfi service uses a hardcoded API key, not this config). No runtime behavior changes. Consumers that referenced StellarNetwork should switch to IStellarNetwork; consumers that passed keys.octavfi can drop it β€” it was a no-op.

Patch Changes

  • 66b18f2: fix: fetchTokenPricesFromCoinGecko now returns the latest price on the success path. The previous if (data && data.length) guard checked the length property on an object response ({ prices, market_caps, total_volumes }) and silently collapsed every successful response to null β€” only the hardcoded musd short-circuit was returning a real value. Fixes defect #1 from todo/32-coingecko-fetcher-defects.md; defects #2 (typed errors on non-2xx) and #3 (up-front symbol validation) remain pending.

  • 175da88: fix: fetchVaultsBatch no longer mis-routes successful fetches that resolve to a falsy value (0, '', 0n, null, false) into the failed pile. The success/failure branch now keys on result.success only, respecting the function's documented contract that data is the source of truth when success === true.

  • 10b3b85: fix: break circular dependency core/index.ts β†’ core/auth β†’ core/fetcher.ts β†’ services/coingecko/fetcher.ts β†’ core/index.ts by importing Logger from the core/logger leaf module in services/coingecko/fetcher.ts instead of the core barrel. Restores the zero-cycle invariant enforced by the Circular Dependency Check CI job.

  • 66b18f2: chore: route all console.* calls under packages/sdk/src.ts/services/ (coingecko, debank, octavfi, subgraph) through Logger.log.{info,error}. Each call is now tagged with the originating function name and carries structured context (status, statusText, pool, address, etc.) instead of the previous raw, unsanitized strings. Errors now flow through sanitizeError before reaching Sentry, and dashboards can group by function tag rather than by error-message text. A new tests/services/services-logger-hygiene.test.ts regression-tests the floor: no console.* in services/.

7.0.1

Patch Changes

  • ddbfa62: fix: restore explorerLink return type to string (regression in 7.0.0)

    The circular-dependency cleanup unintentionally tightened explorerLink's return type to string | undefined by surfacing a branch that was previously masked by strictNullChecks: false. Consumers had always compiled against string via the emitted .d.ts. Restore the historical public shape by returning '' when chain is falsy or unknown.

7.0.0

Major Changes

  • 7ede403: fix(audit): correctness, validation, and observability hardening across deposit / withdraw / redeem flows

    Breaking β€” write helpers now throw AugustValidationError on bad input and AugustSDKError on downstream failures (previously returned undefined or threw a plain Error). Callers that depended on the silent no-op or were matching on Error message strings need to wrap calls in try/catch and narrow on AugustValidationError / AugustSDKError.

    Breaking β€” handleSolanaDeposit and handleSolanaRedeem (the Solana adapter's vaultDeposit / vaultRedeem) now throw on failure instead of returning null. Callers checking for a null return must convert to try/catch.

    EVM write.actions

    • vaultDeposit: amount is now encoded against the deposit token's decimals (not the vault's share decimals). Fixes a silent mis-scaling on EVM-2 multi-asset vaults and any native-token deposit into a vault whose share decimals β‰  18. Native deposits always use 18 decimals.

    • vaultApprove: now mirrors vaultDeposit's routing β€” picks the wrapper as spender for adapter deposits and the vault for multi-asset / standard deposits. Compares the existing on-chain allowance against the required amount (was: only re-approved when allowance was exactly 0).

    • vaultRequestRedeem: receipt-token approval now goes through safeSendTx so Monad-style RPCs that return malformed pending-tx fields don't throw during parsing.

    • vaultRedeem (dated-claim flow) and rwaRedeemAsset: both now use safeSendTx + tryRecoverTxHash for nonce-fallback parity with vaultDeposit / vaultRequestRedeem.

    • rwaRedeemAsset: doc fix β€” the vault share must be approved to the subaccount, not the redeemable (output) asset. Caller responsibility unchanged; the comment was wrong.

    • All write helpers (vaultApprove, vaultDeposit, vaultRequestRedeem, vaultRedeem, depositNative, rwaRedeemAsset) now throw AugustValidationError on invalid wallet/target/wrapper addresses or missing required inputs, and reject JS number amounts that exceed Number.MAX_SAFE_INTEGER.

    • vaultDeposit and vaultRequestRedeem now require amount (previously silently encoded as 0 via toNormalizedBn(undefined)).

    • vaultDeposit throws AugustValidationError when depositAsset differs from the vault's underlying but no adapter is configured for the vault (previously fell through to a cryptic on-chain revert).

    • vaultDeposit and vaultRequestRedeem always wait for the ERC-20 approval receipt before sending the deposit/redeem tx, regardless of the caller's wait flag β€” closes a race window where a follow-up tx could be re-ordered ahead of the approval on some RPCs.

    • Downstream tx failures (e.g. on-chain reverts) are now wrapped in AugustSDKError with the original error preserved on cause and a structured context payload, instead of a plain Error("Deposit failed: …").

    • safeBigInt allowance read inside vaultDeposit now passes a 'vaultDeposit:allowance' context so flaky-RPC warnings are discriminable from approve-path warnings.

    • safeBigInt: emits a Logger.warn on malformed RPC responses (e.g. bare "0x") so flaky RPCs don't cause silent gas waste from spurious approvals.

    EVM cross-chain (crossChainVault)

    • crossChainVaultDeposit: now rejects unsupported user chains up front with a clear error (was: cryptic config-lookup or gas-estimation revert).

    • approveCrossChain: throws when the approval receipt reports reverted (was: returned the hash unconditionally).

    • Monkey-patch lock: timing out now throws instead of silently proceeding with conflicting concurrent patches.

    • Fee patch: warns via Logger.warn when the LayerZero SDK returns an unexpected contractFunctionName, so the in-place LZ-fee buffer being silently no-op'd is visible in telemetry.

    • TSDoc on crossChainVaultDeposit, crossChainVaultRedeem, buildCrossChainVaultTx, and needsCrossChainApproval now states the default slippage / fee / gas buffers and documents the "approval needed on RPC failure" defensive behavior.

    Solana

    • handleSolanaRedeem: replaced parseInt with the new uiAmountToRawBn BN-based helper. Fixes precision loss for any 18-decimal mint above a few thousandths or any 9-decimal mint above ~9M tokens.

    • handleSolanaDeposit: now uses the same helper for consistency.

    • Both handlers now throw AugustValidationError / AugustSDKError on failure instead of returning null, matching the EVM helpers' error contract.

    Stellar

    • submitStellarTransaction: polling now backs off geometrically (1.5x, capped at 8s) instead of fixed 2s β€” same worst-case ceiling on attempts, lower RPC pressure on long waits.

    • handleStellarRedeem TSDoc now documents the exact Soroban contract interface it assumes (redeem(shares: i128, receiver, owner, operator)).

    Telemetry

    • rwaRedeemAsset is now classified under write.redeem in METHOD_CATEGORIES (previously fell back to 'unknown').

    New exports

    • uiAmountToRawBn (from adapters/solana/utils).

    • resolveDepositTokenDecimals, resolveSpender, validateAmountPrecision, safeBigInt, safeSendTx, safeWaitForTx, tryRecoverTxHash, isNonceParsing from modules/vaults/write.actions (marked @internal β€” exported for unit testing).

    • New polling constants: POLL_INTERVAL_MAX_MS, POLL_INTERVAL_BACKOFF.

Minor Changes

  • ae03a7b: feat(sdk): new approve method returns a discriminated ApproveResult

    Adds augustSdk.evm.approve(...) (and the underlying approve export from modules/vaults/write.actions) that returns one of:

    type ApproveResult =
      | { kind: 'sent'; hash: string }
      | { kind: 'sufficient'; existing: bigint }
      | { kind: 'native' };

    Lets callers tell apart "we sent a tx", "existing allowance already covers the amount", and "the resolved deposit asset is native (msg.value, no allowance applies)" without re-reading on-chain state.

    vaultApprove is unchanged β€” same Promise<string | undefined> shape, same spender routing, same allowance / native short-circuits. Both functions share the routing implementation via an internal helper so behavior stays identical.

    Method-taxonomy entry approve β†’ write.approve added so Sentry rolls the new method up next to vaultApprove.

  • dee70e0: feat(AUG-6139): partner-usage telemetry β€” isomorphic Sentry bootstrap, method taxonomy, dimension tags, and arg-shape capture

    • Node + browser Sentry resolved at runtime (@sentry/node added alongside @sentry/browser); CLI now emits telemetry from its top-level error handler.

    • Every method span carries sdk.category, sdk.chain, and sdk.argShape so dashboards can slice partner usage by intent, chain, and call shape without leaking values.

    • Fallback partner.id = 'unverified:<appName>' and partner.tier = 'unverified' tags ship until the verified-partner endpoint exists.

    • setMeasurement('sdk.method.invocation' | 'sdk.method.error', …) adds counter-style aggregates for sum-based dashboards.

    • New public exports: getSentrySDK, getSentryRuntime, getMethodCategory, METHOD_CATEGORIES, chainIdToTagValue, computeArgShape, captureSdkException.

  • ae03a7b: feat(sdk): preview / allowance / balance / maxDeposit read helpers on the EVM adapter

    Adds five additive read methods to augustSdk.evm so consumers can stop reaching into raw ABIs for the most common vault reads:

    • previewDeposit({ vault, amount, asset? }) β€” shares returned by a deposit. Routes EVM-1 vaults to IERC4626.previewDeposit(uint256) and EVM-2 multi- asset vaults to previewDeposit(address, uint256) (returns the share slot of the tuple).

    • previewRedeem({ vault, shares }) β€” assets returned by a redeem. Routes EVM-1 vaults to IERC4626.previewRedeem(uint256) and EVM-2 to previewRedemption(uint256, false) (gross slot).

    • allowance({ vault, owner, asset? }) β€” raw ERC-20 allowance the owner has granted the vault. When asset is omitted the SDK resolves the vault's underlying via IERC4626.asset().

    • balanceOf({ asset, owner }) β€” raw ERC-20 balance.

    • maxDeposit({ vault, receiver? }) β€” vault deposit cap. EVM-2 multi-asset vaults resolve via maxDepositAmount(); EVM-1 vaults use maxDeposit(receiver) with a zero-address default.

    All helpers return a raw bigint so BigInt math stays precise. Existing helpers (vaultAllowance, previewRedemption) are unchanged.

    Notes:

    • These methods require a signer because they live on EVMAdapter, matching the existing read pattern (vaultAllowance, sendersWhitelistAddress, etc.). A read-only JsonRpcProvider wrapped via Wallet.createRandom().connect(provider) works for query-only use.

    • Method-taxonomy entries (previewDeposit, previewRedeem, allowance, balanceOf, maxDeposit) added so Sentry rolls them up correctly.

    • Benchmarks for these helpers are deferred β€” they need a signer plumbed into packages/sdk/benchmarks/suites/sdk-methods.js; unit tests with mocked contracts cover the routing and validation paths.

  • ae03a7b: feat(sdk): constructor option timeoutMs overrides the request timeout default

    Adds an additive timeoutMs option to the AugustSDK constructor (via the shared IAugustBase config) that overrides the default request timeout used by every August fetcher helper. The compiled-in default (90 s) is preserved when the option is omitted; per-call IFetchAugustOptions.timeoutMs still wins over the SDK-level default.

    const sdk = new AugustSDK({
      appName: 'acme-trader',
      providers: { 1: '...' },
      keys: { august: process.env.AUGUST_KEY },
      timeoutMs: 20_000, // shorten the default deadline to 20s for this instance
    });

    Also exports two helpers for advanced use:

    • setSdkRequestTimeout(ms | null) β€” apply / clear the override directly.

    • getSdkRequestTimeout() β€” read the active default (override or compiled-in).

    Notes:

    • This is process-global state. If you instantiate multiple AugustSDK objects in the same process with different timeouts, the last constructor call wins.

    • Lowering the default for the entire package was deliberately skipped β€” that change is behaviorally observable for current integrators and belongs on a major bump.

  • e3d589e: feat(audit-followup): tx-flow audit fixes β€” Solana bigint amounts, cross-chain destination validation, quote staleness, Stellar account error

    Additive correctness improvements identified during the deposit / withdraw / redeem audit. No new exported types are renamed or removed.

    Solana (adapters/solana)

    • handleSolanaDeposit / handleSolanaRedeem now accept bigint for depositAmount / redeemShares, in addition to the existing number form. When bigint is passed it is treated as the raw on-chain unit and used directly β€” no uiAmountToRawBn round-trip through a JS float. Recommended for money flows so the value the wallet signs cannot drift from the value the UI displayed. The number form is still supported for back-compat.

    • The SDK wrapper methods augustSdk.solana.vaultDeposit and vaultRedeem widen their depositAmount / redeemShares parameter to number | bigint accordingly.

    • Both handlers reject 0n (and 0) via AugustValidationError.

    Cross-chain (evm/methods/crossChainVault)

    • buildCrossChainVaultTx now rejects requests where destinationChainId or userChainId (on DEPOSIT) is neither the configured hubChainId nor present in config.layerZeroEids.spokes. Previously the unknown chain ID silently fell back to the hub EID, routing user funds to a chain they did not pick. Behavior unchanged when the chain ID is omitted / equals the hub / is a configured spoke.

    • quoteCrossChainDeposit / quoteCrossChainRedeem now populate quotedAt and expiresAt on the returned IQuoteCrossChainResult. The UI should call isQuoteStale(quote) before submit and re-quote when it returns true β€” LayerZero fees drift between quote and submit.

    • New exports from evm/types/crossChain:

      • CROSS_CHAIN_QUOTE_TTL_MS (30 000 ms default validity window).

      • isQuoteStale(quote, now?) helper.

    Stellar (adapters/stellar/soroban)

    • buildSorobanTx now wraps server.getAccount failures: when the account does not exist or is unfunded, the SDK throws an AugustValidationError with copy that names the actual fix ("send at least 1 XLM to activate"). Detected via both instanceof NotFoundError (forward-compat) and the current "Account not found: <addr>" message the rpc server actually throws. Other RPC errors propagate unchanged.

    Known limitations (deferred)

    • The Solana deposit instruction's IDL does not yet accept a min_shares_out argument, so client-side slippage protection cannot be enforced on-chain for Solana vaults. A TODO(slippage) comment marks the call site in vault.actions.ts; on-chain enforcement requires a program update.

Patch Changes

  • a18ea6d: chore(benchmarks): per-iteration RPC/API request counting

    Adds benchmarks/request-counter.js, a globalThis.fetch wrapper that buckets requests as rpc (Alchemy, Helius, QuickNode, etc.) vs api (everything else, with a per-host breakdown). The harness now resets the counter before each measured iteration and surfaces meanRpc, meanApi, meanRequests, and a hostBreakdown on every result.

    Console + markdown reporters render the new columns when counts are present and append a "Total requests across all measured iterations" section so AUGUST-5835-style perf claims (in-flight dedup, whitelist cache, parallelLimit fix) can be measured directly instead of estimated from the diff.

    Counting is on by default. Set BENCHMARK_ALCHEMY_REQUEST_COUNT=0 to skip the global fetch patch (e.g. in environments where another tool already wraps fetch). No behavior change to the SDK itself β€” this is a benchmark-tooling-only change.

  • 0f92c9c: refactor(vaults/date-utils): lift duplicate TIMESTAMP_MANIPULATION_WINDOW = 300 to module scope

    computeClaimableDate and isClaimableNow each re-declared the same const TIMESTAMP_MANIPULATION_WINDOW = 300 inside their function bodies. Lifted to a single module-level constant mirroring TimelockedVault.sol's 5-minute window. Pure refactor β€” identical observable behavior.

    Coverage was thin (no existing tests for date-utils.ts); adds tests/vaults/date-utils.test.ts covering computeClaimableDate, isClaimableNow, formatDateKey, isValidClaimableDate, and getDaysInMonth (8 tests, including UTC-day rollover and leap-February).

  • 0f92c9c: perf(adapters/evm): parallelize receipt-token + whitelisted-assets fetch in getEvmVaultV2

    After the initial vault-contract Promise.all resolves, getEvmVaultV2 previously fetched the receipt-token metadata batch (5 RPCs) and the whitelisted-assets list (1 RPC) sequentially, even though both depend only on vaultContractCalls and have no data dependency on each other. They now run inside a shared outer Promise.all, so the wall time per V2 vault read is bounded by the slower of the two batches instead of their sum.

    No change to the merged combinedCalls / combinedFunctions shape, so downstream buildFormattedVault sees identical inputs. Static regression test (tests/adapters/evm-vault-v2-parallel-fetch.test.ts) guards the wrapping pattern.

  • 0f92c9c: docs(adapters/evm): TSDoc for vaultAllowance, vaultDeposit, vaultRequestRedeem, depositNative, and vaultRedeem

    The EVM adapter's public write methods shipped without TSDoc blocks, which CLAUDE.md section 1 requires for every exported symbol on the published surface. Integrators saw "(no description)" in their IDE and had to read modules/vaults/write.actions.ts to learn the parameter shape and return semantics. Each method now has a one-sentence summary, @param / @returns / @throws notes, and an @example. A static presence test (tests/adapters/evm-write-tsdoc.test.ts) guards against regression.

    No behavior change.

  • 0f92c9c: refactor(vaults/utils): extract local IEvmAssetMetadata type

    buildFormattedVault declared the same { address: IAddress; symbol: string; decimals: number } shape twice as inline types (once for depositAssets[], once for receipt). Lifted to a single file-local @internal type IEvmAssetMetadata. Not exported β€” kept internal so the public surface doesn't grow. Pure refactor.

  • 0f92c9c: perf(core/web3): in-flight request dedup for getDecimals and getSymbol

    getDecimals and getSymbol already cache results in the shared lru-cache, but concurrent identical calls (e.g. a fresh page-load with multiple components asking for the same token's decimals before any cache write lands) each fired their own RPC. The price-fetcher path already used an in-flight Map<key, Promise> to coalesce these β€” PRICE_REQUESTS in core/fetcher.ts:250 β€” and this change applies the same pattern to getDecimals (DECIMALS_REQUESTS) and getSymbol (SYMBOL_REQUESTS).

    Behavior on a cold cache: the first caller initiates the RPC; subsequent callers within the same tick share that promise instead of starting their own. On error, the in-flight entry is cleared in a finally so the next caller can retry. Cache-hit and Solana-address fast paths are unchanged, so no observable difference for callers that aren't concurrent.

    Adds tests/utils/getdecimals-getsymbol-dedup.test.ts with three cases (coalescing, no-false-coalescing across addresses, getSymbol parity).

  • 0f92c9c: perf(core/web3): in-flight request dedup for getReceiptTokenAddress

    getReceiptTokenAddress already caches results in the shared lru-cache, but concurrent identical reads (multiple components or vault paths resolving the same vault's receipt-token address before the first cache write lands) each fired their own lpTokenAddress() RPC. This change adds a RECEIPT_TOKEN_REQUESTS in-flight Map<string, Promise> so simultaneous identical reads share a single promise β€” same pattern as the existing DECIMALS_REQUESTS, SYMBOL_REQUESTS, and WHITELISTED_ASSETS_REQUESTS maps. The in-flight entry is cleared in a finally so the next caller can retry after a failure.

    Cache-hit and missing-arg fast paths are unchanged.

    Adds tests/utils/getreceipttokenaddress-dedup.test.ts (coalescing + no false-coalescing across addresses).

  • 0f92c9c: perf(vaults/getters): lift duplicate getReceiptTokenAddress call in the V2 position-read path

    Inside the version === 'evm-2' branch of the position loop in modules/vaults/getters.ts, getReceiptTokenAddress(provider, vault) was awaited twice for the same vault in back-to-back lines β€” once to derive decimals, once again to construct the receipt contract for the balance read. The second call was a cache hit (so cheap in RPC terms) but still incurred a function call, a cache lookup, and a Promise hop per iteration. Both call sites now reuse a single receiptAddress local.

    Pure lift with no behavior change β€” same value returned in both spots either way, and the wallet-balance branch only runs when the first await would also have run.

  • ae03a7b: fix(adapters): Solana / Stellar adapters now throw typed errors for input validation

    Replaces every throw new Error(...) in the Solana and Stellar adapter paths that represents an input-validation failure with AugustValidationError, and the Stellar submit / Soroban downstream failures with AugustSDKError / AugustTimeoutError. Consumers can now narrow:

    catch (err) {
      if (err instanceof AugustValidationError) { ... }
    }

    …on non-EVM paths, just like EVM. Error messages are unchanged, so existing substring assertions and Sentry message-based grouping continue to work; the class-based bucket gains signal.

    Affected files:

    • adapters/stellar/actions.ts β€” validateContractAddress, validateAccountAddress

    • adapters/stellar/soroban.ts β€” toBigIntAmount, simulation / assembly failures (now AugustSDKError)

    • adapters/stellar/submit.ts β€” submission failures (AugustSDKError), poll-timeout (AugustTimeoutError)

    • adapters/stellar/getters.ts β€” getStellarUserPosition / convertToShares address validators

    • adapters/stellar/utils.ts β€” assertNotStellar (now INVALID_CHAIN)

    • adapters/solana/vault.actions.ts β€” input-validation failures inside handleSolanaDeposit / handleSolanaRedeem

    • adapters/solana/utils.ts β€” wallet / program-id / vault-version validation and uiAmountToRawBn precision checks

  • bb0873f: fix(perf-pr-review): address review findings on the perf-optimizations PR

    Bundle of small fixes responding to the code review of AUGUST-5835-perf-optimizations. No public-API change.

    • CACHE.has vs CACHE.get truthy check β€” flipped 4 sites in core/helpers/web3.ts (getDecimals, getSymbol, getReceiptTokenAddress, getWhitelistedAssets) from if (CACHE.get(key)) to if (CACHE.has(key)). Tokens with decimals === 0, empty-string symbols, or empty whitelist arrays were silently re-fetching on every sequential call because the cached value was falsy. Resolves and supersedes todo/29.

    • getWhitelistedAssets typed error β€” replaced throw new Error(...) with AugustValidationError('INVALID_INPUT', ...). The function stays @internal; the change keeps Sentry's error-grouping intact (raw Error collapsed to the generic bucket).

    • generatePermitSignature Logger β€” the console.error('Could not fetch DOMAIN_SEPARATOR…') that the Solana sweep had skipped is now Logger.log.error('generatePermitSignature', error, { message: … }), with the original throw preserved.

    • Dead name write β€” moved let name into the cache-miss discovery block (const name = …). The assignment on the cache-hit path was never read; signTypedData uses matchingDomain directly.

    • runWithConcurrency correctness note β€” one-line comment explaining why nextIndex++ is safe across workers (JS single-threaded; increment finishes before any await).

    • Parallel-fetch test upgrade β€” tests/adapters/evm-vault-v2-parallel-fetch.test.ts is rewritten from a regex-on-source assertion to a behavior test that mocks Contract / getDecimals / getSymbol / getWhitelistedAssets with controlled delays and asserts wall time falls in the parallel range (1.5×–2.5Γ— RPC_DELAY), not the serial range (3Γ— RPC_DELAY).

    • New regression test β€” tests/utils/cache-falsy-value-hit.test.ts proves getDecimals returning 0 is cached and the second call doesn't re-fetch.

  • 0f92c9c: perf(vaults/utils): cache matched permit domain per (chainId, token)

    generatePermitSignature previously, on every invocation, fetched the token's name() (RPC), built 4 candidate EIP-2612 domain configurations, hashed each with TypedDataEncoder.hashDomain, and β€” only if all 4 failed β€” fell back to fetching version() (another RPC). For integrators generating multiple permits against the same token in a session, every signature reran the full discovery.

    The matched TypedDataDomain is now cached in the SDK's shared lru-cache keyed permit-domain-<chainId>-<token> for 1 hour. The live DOMAIN_SEPARATOR() is still fetched on every call and compared against the cached domain's hash; on mismatch (e.g. an upgraded token contract) the cache entry is invalidated and the original discovery loop runs. On a cache hit the name() RPC, the 4-iteration hashing loop, and the rare version() fallback are all skipped.

    The function also pairs nonces() with DOMAIN_SEPARATOR() in a single Promise.all (they were previously sequential), shaving a round trip on the cache-miss path.

    Adds tests/vaults/permit-domain-cache.test.ts covering the discovery path and the cached fast-path.

  • 0f92c9c: refactor(adapters/solana): route console.* through Logger

    Replaces all 50 raw console.log / console.warn / console.error calls in adapters/solana/{vault.actions,utils}.ts with the equivalent Logger.log.{info,warn,error} calls. Output is now sanitized via the analytics pipeline and gated by Logger.setDevMode() / Logger.setStructuredLogger() rather than being printed unconditionally to stdout. Level mapping is preserved (console.log β†’ info, console.warn β†’ warn, console.error β†’ error). No behavior change for callers that have not configured a logger; consumers that have already enabled dev mode or plugged in a structured logger will now receive Solana adapter events on the same channel as the rest of the SDK. A static test (tests/adapters/solana-logger-hygiene.test.ts) guards against regression.

  • a18ea6d: fix(adapters/solana): propagate the underlying error from getVaultMints instead of swallowing it

    SolanaUtils.getVaultMints previously caught any failure inside program.account.vaultState.fetch(vaultStatePda) β€” Anchor discriminator mismatch, account-not-found, RPC error β€” logged it, and returned { depositMint: '', shareMint: '', vaultVersion: undefined }. Downstream handleSolanaDeposit / handleSolanaRedeem checked the empty mints and threw the generic "Failed to read vault mints from on-chain state", which carried zero diagnostic signal. Operators triaging a failed deposit on a specific vault (e.g. Sentora xBTC on the Upshift portfolio page) had nothing actionable in the user-visible error.

    getVaultMints now throws an AugustSDKError (code: 'UNKNOWN') whose message includes the underlying cause and whose context carries vaultProgramId and vaultAddress. The original error is set as .cause. Successful reads still cache as before; the existing read-side getVaultStateReadOnly path is unchanged.

    The outer catch in handleSolanaDeposit already re-wraps SDK errors with cause, so the user-visible message becomes "Solana deposit failed: Failed to read vault mints from on-chain state: <real cause>" β€” pointing at whether the IDL is wrong, the PDA doesn't exist, or the RPC failed.

    Adds tests/vaults/solana-vault-mints-error-propagation.test.ts covering account-not-found and discriminator-mismatch causes, asserting the typed-error shape and that the cause string flows through.

  • 0f92c9c: fix(vaults/fetcher): honor parallelLimit in batch + comprehensive vault fetchers

    fetchVaultsBatch and fetchVaultsComprehensive previously accepted a parallelLimit option but renamed it to _parallelLimit and ran every task in a batch concurrently via Promise.all β€” the option was a no-op. The default getVaults call site (modules/vaults/main.ts) passes parallelLimit: 8 expecting it to take effect, so RPC fan-out for a typical batch of 15 vaults was running 15-wide instead of the intended 8-wide.

    Both fetchers now route their per-batch work through an internal runWithConcurrency helper that pulls tasks from a queue with a hard in-flight cap. The default parallelLimit is batchSize, so any caller that did not specify parallelLimit sees identical pre-fix concurrency (no regression). Callers that did specify it β€” including the SDK's own getVaults β€” now get the cap they asked for.

    Adds tests/vaults/fetcher-parallel-limit.test.ts covering: the cap, the default-preserves-prior-behavior path, and that every task still completes when parallelLimit < batchSize.

  • 0f92c9c: perf(core/vaults): pre-compute lowercase VAULT_SYMBOLS lookup map

    getVaultSymbol's hardcoded-fallback path used Object.entries(VAULT_SYMBOLS).find(([k]) => k.toLowerCase() === address.toLowerCase()) β€” an O(n) scan over the table on every cache-miss / non-canonical-case lookup. The canonical-case fast path (VAULT_SYMBOLS[address]) is preserved; the case-insensitive fallback now reads from a module-level VAULT_SYMBOLS_LOWERCASE map built once via Object.fromEntries, making it O(1).

    The lookup precedence (backend metadata β†’ hardcoded fallback β†’ on-chain getSymbol) is unchanged. The hardcoded list is @deprecated per its existing TSDoc β€” backend remains canonical.

    Adds tests/utils/get-vault-symbol-lowercase.test.ts covering canonical-case, lowercase, and unknown-address paths.

  • 0f92c9c: perf(core/web3): cache getWhitelistedAssets list per (chain, whitelist contract)

    V2 vault reads (getEvmVaultV2) call getWhitelistedAssets on the vault's whitelist contract on every invocation, and the returned list immediately fans out into per-asset getDecimals + getSymbol reads inside buildFormattedVault. The list itself rarely changes, so a new internal helper getWhitelistedAssets (in core/helpers/web3.ts) wraps the contract call with an lru-cache entry keyed whitelisted-assets-<providerScope>-<whitelistAddress> and a 5-minute TTL. Concurrent identical reads share an in-flight promise β€” same pattern as getDecimals / getSymbol.

    getEvmVaultV2 now delegates to that helper instead of building the contract inline; the merge step that flattens contractCalls.getWhitelistedAssets into the formatted vault is unchanged, so callers see the same shape.

    Adds tests/utils/get-whitelisted-assets-cache.test.ts (in-flight coalescing, sequential cache-hit, no false-coalescing across addresses).

6.0.1

Patch Changes

  • c7c508b: fix Flare chain explorer URL from flare-explorer.flare.network to flarescan.com

6.0.0

Major Changes

  • 00c6ba9: registerUserForPoints now authenticates via a wallet signature instead of an admin API key. The function gains four required parameters β€” chainId, signature, nonce, expiry β€” and no longer reads options.augustKey. Callers must obtain a personal_sign (EIP-191) signature over a canonical message containing the lowercased user address, lowercased referrer (or "none"), chain id, nonce, and expiry; the backend reconstructs the same message and verifies the signature against the claimed wallet (EOA recovery first, then EIP-1271 for smart-contract wallets such as Safe). chainId must be one of the chains Upshift supports (see backend SUPPORTED_REGISTRATION_CHAINS); unsupported chains return 422. The class method AugustVaults#registerUserForPoints and the top-level Sdk#registerUserForPoints add chainId, signature, nonce, expiry as required positional arguments after referrerAddress. See the TSDoc on registerUserForPoints for the exact message template and a worked example.

Patch Changes

  • 0422e61: patch an issue with version ts. This patches a broken import in v 5.1.0 and 5.1.1

5.1.1

Patch Changes

  • Re-publish of 5.1.0 with a clean build. The 5.1.0 tarball on npm was shipped from a stale lib/ directory and was missing the Solana share-price + position fixes described in the 5.1.0 changelog below β€” lib/adapters/solana/getters.js still read only deployedAum for totalAssets. Anyone on @augustdigital/sdk@5.1.0 should bump to 5.1.1.

  • Added a prepublishOnly script (pnpm clean && pnpm build) so subsequent publishes refuse to ship a stale lib/ and force a fresh transpile. The 5.1.0 mishap was caused by a manual pnpm publish run without a preceding pnpm build; the new hook makes that impossible by construction.

5.1.0

Minor Changes

  • 9dbc693: fix(solana): use local_aum + deployed_aum for vault total assets; add BigInt-safe share-balance helper; stop dropping Solana from getVaults / getVaultPositions

    Bump rationale (minor, not patch): this release is bug-fix-driven but adds two purely additive public-surface elements β€” SolanaAdapter.fetchUserShareBalanceRaw() and the dedicated IAugustBase.solana = { rpcUrl, network } config entry point. Per the additive-public-API rule a minor bump is required even though no existing API breaks.

    Root causes

    • getSolanaVault read only vaultState.deployedAum for totalAssets, but the on-chain VaultState::total_assets() is local_aum + deployed_aum. The displayed share price dropped below 1.0 the instant the operator deployed any portion of the vault, even with zero PnL (jitoSOL showed 0.7370 against a 1:1 share supply).

    • getVaultPositions Solana branch passed uiAmount (a JS number) into toNormalizedBn with no decimals argument. It defaulted to 18 and produced a walletBalance.raw off by 10**(18 βˆ’ mintDecimals), breaking redemption sizing and max-action math even though the displayed normalized looked plausible.

    • The provider-availability filter (vaultsPerAvailableProviders) had an explicit Stellar pass-through but no Solana one β€” Solana vaults were silently dropped from both the vault list and position list on any SDK instance whose providers map didn't register chainId -1.

    • The IDL (vault-idl.ts / .json) and ISolanaVaultState were missing local_aum, aum_increase_limit, aum_decrease_limit, and vault_version β€” fields that exist in the Rust VaultState struct (see programs/august-vault/src/state/vault.rs). Because the missing fields sat after deployed_aum, the earlier fields still deserialized correctly but every field after the drift (pda_bump, paused, padding) read from the wrong bytes. paused happening to read 0x00 is why this didn't blow up in production sooner.

    Changes

    • adapters/solana/getters.ts: sum localAum + deployedAum for totalAssets. Falls back to backend TVL when on-chain is unavailable.

    • adapters/solana/utils.ts: new fetchUserShareBalanceRaw({ publicKey, shareMint }) returning { amount: string; decimals: number | null } from a single getParsedTokenAccountsByOwner.

    • adapters/solana/index.ts: expose the helper on SolanaAdapter with TSDoc and a worst-case RPC note.

    • adapters/solana/types.ts: extend ISolanaVaultState with localAum, aumIncreaseLimit, aumDecreaseLimit, and the (re-positioned) vaultVersion.

    • adapters/solana/idl/vault-idl.{ts,json}: re-sync VaultState field order with the Rust source.

    • main.ts: construct SolanaAdapter from either providers[-1] or the dedicated solana: { rpcUrl, network } config, so partner SDK instances can opt into Solana without polluting their EVM providers map.

    • modules/vaults/main.ts: pass chain_type === 'solana' through the provider filter when this.solanaService is available β€” mirrors the existing Stellar clause.

    • modules/vaults/getters.ts: Solana branch now reads via the raw helper, uses the mint's true decimals, drops the as any on vaultState, and returns vault: v.address instead of the outer parameter (mirrors the Stellar branch).

    • modules/vaults/types.ts: ISolanaService.fetchUserShareBalanceRaw is required (only impl is the in-package SolanaAdapter, which now always provides it).

    No behaviour change for EVM or Stellar paths.

    Verification

    • Borsh layout sanity-checked against programs/august-vault/src/state/vault.rs:36-50 and against the live jitoSOL vault state at 2tmMcVv2Ene7wFGebPivhwYhAZyjaJoibMz1GYVaXsB1: 455-byte account decodes cleanly with the new field order β€” local_aum=564_529_610, deployed_aum=1_582_093_475, aum_increase_limit=20, aum_decrease_limit=20, pda_bump=[254], vault_version=[0], paused=false, padding all-zero. local_aum + deployed_aum equals the share-mint supply at parity. Every byte accounted for.

    • Benchmark entry added at benchmarks/suites/sdk-methods.js: fetchUserShareBalanceRaw() [cold, no account]. Gated on BENCHMARK_SOLANA_RPC_URL so the existing EVM-only CI run isn't affected; set the env var to opt in. Uses the jitoSOL share mint with the system-program key as wallet β€” deterministic "no account" path that measures getParsedTokenAccountsByOwner round-trip plus the short-circuit return, which is the hot path on the vault grid for users without a position.

5.0.0

Major Changes

  • 8881c9b: Integrator experience: require appName, add a runtime version-nudge.

    Breaking β€” required appName. appName is now a required field on the AugustSDK constructor (and IAugustBase). Pass a stable kebab-case slug identifying your application β€” e.g. new AugustSDK({ appName: 'acme-trader', ... }). Despite the friendly name the value is identifier-shaped: 3–64 chars, [a-zA-Z0-9._-] only (it's used as a Sentry tag and HTTP header). Use a slug like 'acme-trader', not a display name like 'Acme Trader'. The SDK throws synchronously from the constructor when the value is missing, empty, or out of the allowed shape.

    Why: the SDK now tags outbound analytics events with app.name, so the August Digital team can attribute error spikes to the right consuming application and reach out about breaking changes / critical bugs. See the "App Name" section in packages/sdk/README.md.

    Migration: add appName: '<your-slug>' to your existing new AugustSDK({ ... }) call. No other changes required.

    Additive β€” version-nudge on construction. On non-production builds the SDK now performs one best-effort npm-registry check per session and prints a console.warn banner when a newer @augustdigital/sdk is available. The check never runs in NODE_ENV=production, can be silenced with AUGUST_SDK_DISABLE_VERSION_CHECK=1, or programmatically with new AugustSDK({ versionCheck: { enabled: false }, ... }). Never blocks construction; failures are silent. New exports: runVersionCheck, IVersionCheckConfig, compareSemver.

Minor Changes

  • c24003b: feat: production-grade hardening

    Security & errors

    • New typed error hierarchy: AugustSDKError, AugustAuthError, AugustNetworkError, AugustTimeoutError, AugustValidationError, AugustRateLimitError, AugustServerError, plus isAugustSDKError type guard. All extend Error so existing instanceof Error consumers are unaffected.

    • Secret sanitization in error messages, logger, and Slack adapter via sanitizeString / sanitizeError / sanitizeForLogging.

    • URL injection hardening: buildAugustUrl rejects unknown server keys, absolute URLs, and protocol-relative paths; origin check enforces same-origin.

    • fetchAugustWithKey(undefined, …) now throws AugustAuthError(AUTH_MISSING_KEY) instead of returning a synthetic {status: 500} response β€” callers using if (res.status === 200) previously misclassified missing-auth as a 500 server error; they now receive a proper typed error. verifyAugustKey short-circuits empty keys so init() behavior is unchanged.

    • override flag on IFetchAugustOptions is @deprecated with a one-time runtime warning; will be removed in the next major.

    • HTTP errors are now typed by status: 401 β†’ AugustAuthError, 429 β†’ AugustRateLimitError, else AugustServerError.

    • Response.headers.get('x-correlation-id') (was bracket-accessed; always undefined).

    Transport

    • Per-request signal: AbortSignal and timeoutMs: number on IFetchAugustOptions. Combined with the default timeout via AbortSignal.any (Node 22+) with a manual relay + cleanup fallback. Distinguishes caller-cancel from timeout via an internal timedOut flag.

    Observability

    • New ILogger interface and Logger.setStructuredLogger() alongside the existing Sentry-compatible SDKLogger. Pino-friendly: pass a context object as the first arg.

    Performance

    • Parallelized getVault loans + allocations (Promise.allSettled, preserves original control flow).

    • Removed redundant fetchTokenizedVault calls in getVaultLoans / getVaultSubaccountLoans.

    • createProvider(rpcUrl, chainId?) enables ethers' staticNetwork (skips the eth_chainId round-trip).

    • getInfuraProvider routes through createProvider (was rebuilding per call).

    • decimals / symbol / receipt-token caches are chain-scoped via providerScope.

    Bundle

    • Buffer polyfill extracted to polyfills.ts; guarded against clobbering a consumer-set Buffer.

    • sideEffects: ["./lib/polyfills.js"] lets bundlers tree-shake the rest of the SDK.

    • Source maps excluded from the npm tarball.

    Bug fixes

    • fetchAugustWithBearer no longer crashes when options is undefined (options?. everywhere).

    • AbortSignal fallback path now removes its abort listener on completion (no more leak across long-lived caller signals).

    • Slack adapter's webhook fetch has a 5s timeout.

    • sanitizeError preserves typed-error subclasses by cloning via prototype + own properties instead of calling the constructor (which would have misaligned positional args like AugustAuthError(code, message, opts)).

    • AugustSDKError and subclasses ship a toJSON() so JSON.stringify(err) no longer returns "{}". code, correlationId, status, timeoutMs, retryAfterMs, and cause are all included.

    No public API breaks. All additions are opt-in. The only behavior change is fetchAugustWithKey(undefined, …) throwing instead of returning a fake 500 β€” the thrown value is still an Error instance.

  • 8881c9b: feat(sdk): expose getVaultRedemptionHistory on the AugustVaults module and the top-level AugustSDK class. Wraps the existing module-level getter with the standard option-plumbing (RPC resolution from chainId, augustKey/subgraphKey/headers from the SDK instance), validates the vault input, and returns the same historical redemption records the underlying getter produces. Stellar vaults continue to return [] until on-chain indexing lands for that adapter.

Patch Changes

  • 7027223: fix: vault read paths no longer hang or surface ethers' network is not available yet when the configured RPC is unreachable or rate-limited

    Three related changes that together resolve august vault tvl <addr> --chain <id> failures (cryptic NETWORK_ERROR on a healthy RPC, infinite "JsonRpcProvider failed to detect network" retry loop on a 403/401 RPC):

    • providerScope (cache-key builder used by getDecimals, getReceiptTokenAddress, …) now tolerates ethers v6's lazy-network state. Reading provider._network is a getter that throws network is not available yet until the first successful request resolves the chain id; the throw was bubbling out of every cached vault read on freshly constructed providers.

    • AugustVaults.getVaultTvl now threads chainId into the getter options, and the EVM branch of getVaultTvl (packages/sdk/src.ts/modules/vaults/getters.ts) forwards it to createProvider. This sets ethers' staticNetwork, skipping the eth_chainId round-trip and, more importantly, preventing the indefinite network-detection retry loop when the RPC returns 4xx errors.

    • createProvider now throws a clear, remediable error when called with a missing or empty rpcUrl, instead of silently constructing a JsonRpcProvider pointed at http://localhost:8545.

  • f0741e2: fix: HyperEVM RPC compatibility for getWithdrawalRequestsWithStatus

  • c14c10b: chore: remove unused name field from AugustSDK. The field was declared but never assigned and never read β€” appName (on AugustBase) is the single source of truth for the app identifier.

  • 0cb921a: fix: cap fetchTokenizedVaults cache at 10 minutes and avoid stale-get eviction

    fetchTokenizedVaults (bulk list) was calling CACHE.set(key, value) with no TTL override, falling back to the 24-hour global default β€” so vault config changes made on the backend (fee rates, fee waivers, etc.) could take up to 24h to surface to bulk-list consumers. The cache lookup also called CACHE.get(key) twice in a row; because the global CACHE is configured with allowStale: true, the first .get() on a stale entry returns it and evicts it, leaving the second .get() undefined. Switched to getSafeCache (which uses .has() and so never triggers stale-get eviction) and set an explicit 10-minute TTL to match fetchTokenizedVault (single).

4.27.3

Patch Changes

  • 651d08f: feat: add a TVL exclusion list for vaults so blacklisted addresses no longer count toward totalDeposited.

  • b07fd3f: chore: update Goldsky subgraph routes for improved query performance.

4.27.2

Patch Changes

  • 7fc6a6b: fix: correct the lookback block window in getWithdrawalRequestsWithStatus so older withdrawal requests are no longer missed.

4.27.1

Patch Changes

  • 178dbfc: feat: add support for the Fluent network, including default RPC URL and block explorer.

4.27.0

Minor Changes

  • 78231b6: feat: add RWA instant redemption β€” new AugustVaults.rwaRedeemAsset() and previewRwaRedemption() methods, plus an instant_redeem_config field on IVault returned from getVault/getVaults. The SDK automatically routes redemption calls to the correct RwaRedeemSubaccount for each vault.

Patch Changes

  • 5766173: fix: getWithdrawalRequestsWithStatus now requires a chainId argument so cross-chain queries return correct results.

  • 8872391: feat: add helpers for OFT (LayerZero Omnichain Fungible Token) flows.

4.25.2

Patch Changes

  • f002124: fix: include non-EVM Debank positions in the response from getVaultAllocations.

4.25.1

Patch Changes

  • 3102191: fix: prevent ethers v6 tx.wait() from crashing on Monad RPC when pending transactions return a malformed nonce.

4.25.0

Minor Changes

  • a267145: feat: add a Stellar SDK adapter β€” Soroban RPC support, transaction building and submission, and end-to-end localnet test coverage.

  • 455b625: feat: add getWithdrawalRequestsWithStatus for tracking the status of withdrawal requests.

  • ad5ea73: chore: remove SUI points from vault responses.

  • 7e5aa22: feat: add Stellar vault support (backend-only) including a Stellar adapter, routing, and a shared vault builder.

Patch Changes

  • 8f1bcee: chore: refactor Solana vault adapter getters into a shared buildBackendVault utility (no public API change).

  • c721801: fix: include PnL data in LayerZero (LZ) vault responses.

  • e12e957: fix: prevent silent data loss in getWithdrawalRequestsWithStatus when responses span multiple pages.

  • d6e7f96: feat: add fetchTokenizedVaultSubaccountLoans for retrieving subaccount loan data on tokenized vaults.

  • bba0483: feat: add show_cap_filled to the tokenized vault response so callers can render cap-filled UI states.

  • fd90233: feat: add a getVaultPendingRedemptions method on AugustVaults.

4.24.10

Patch Changes

  • ac2bb72: fix: include CeFi positions that were previously missing from the allocations response.

4.24.9

Patch Changes

  • ff68463: feat: add withdraw support for the earnAUSD vault.

4.24.8

Patch Changes

  • 78b4b2a: fix: use the parsed uiAmount when reading Solana share balances so they reflect the correct decimals.

4.24.7

Patch Changes

  • 40e6410: feat: support vault version in Solana PDA derivation; remove unused vault token-balance fetching.

  • bad15e1: feat: add additional fields to vault responses.

4.24.6

Patch Changes

  • bf55850: feat: add earnAUSD support over LayerZero.

  • 301e84e: fix: resolve a circular dependency in the Solana adapter imports that caused AugustBase to be undefined in CommonJS builds.

  • e0a1135: fix: forward vaultAddress to getVaultState from getVaultPositions so PDA derivation no longer returns the wrong address.

  • 40d8d3f: fix: read the share mint from on-chain vault state (instead of PDA derivation) so multi-vault Solana programs are supported correctly.

  • ebefff4: fix: ensure the tokenized vault API call always issues its query.

4.24.5

Patch Changes

  • 6ab5765: feat: expose default_apy_horizon on vault responses.

4.24.4

Patch Changes

  • a3bf6eb: feat: add a staging API URL for use in non-production environments.

  • 4365252: feat: support deposits made through LayerZero relayers.

4.24.3

Patch Changes

  • 4cd81a9: feat: add Citrea chain support to explorer link helpers.

4.24.2

Patch Changes

  • c53ae5e: feat: add getSubaccountSummary for fetching summarized subaccount data.

4.24.1

Patch Changes

  • 6213fb9: fix: getVaultUserLifetimePnl now excludes invalid transactions when computing PnL.

  • 52cc399: fix: getVaultUserLifetimePnl correctly handles vaults that accept multi-asset deposits.

4.24.0

Minor Changes

  • 654d3f2: feat: support sender-whitelist allocations on the vault contract; fix: include the withdrawal_only field on vault responses.

4.23.2

Patch Changes

  • cec539b: perf: improve loading speed of getVaultPositions.

  • a498e6e: feat: expose cachedAt on cached responses so callers can reason about staleness.

4.23.1

Patch Changes

  • 2d5af1c: feat: expose the Debank service so consumers can access raw Debank data directly.

4.23.0

Minor Changes

  • 9bbcc06: chore: internal version bump β€” no customer-facing changes.

4.22.0

Patch Changes

  • 1700a0c: fix: fetch earnAUSD exposures from the Debank API.

  • e1c36f3: fix: downgrade the uuid dependency to a version that ships CommonJS, restoring CJS consumer compatibility.

4.20.1

Patch Changes

  • e6d592f: fix: improve type safety of the contract wrapper.

4.20.0

Minor Changes

  • 9c456e8: feat: integrate Sentry for SDK observability and error reporting (opt-in).

Patch Changes

  • 0252a45: feat: introduce a strongly typed ABI-driven contract class for safer reads and writes.

4.18.1

Patch Changes

  • 444f2d9: fix: add a hardcoded subaccount address for earnAUSD where on-chain discovery is not available.

4.18.0

Minor Changes

  • a765147: feat: add a write function for depositing native assets into multi-asset vaults.

4.17.0

Minor Changes

  • dd2bc24: feat: expose the SUI limited vault.

4.16.0

Minor Changes

  • d7b8729: feat: remove hardcoded subgraph URLs and vault symbols β€” these are now fetched from the backend at runtime, so new vaults can appear without an SDK release.

4.15.4

Patch Changes

  • 3f45029: fix: correct the function used to fetch the instant redemption fee.

4.15.3

Patch Changes

  • 1e34016: chore: generalize the Goldsky URL for better scaling; feat: add EVM2 instant withdrawal logic.

4.15.2

Patch Changes

  • 769b4c7: fix: toNormalizeBN now correctly handles values represented in exponential notation.

4.15.1

Patch Changes

  • e79ced7: feat: add sentUSD to the subgraph configuration.

  • fff8076: feat: add previewRedemption(); perf: cache the tokenized vault API response in fetchTokenizedVault; fix: add the missing campaignApy field to IVault.

4.15.0

Minor Changes

  • c7422f7: feat: expose getTotalDeposit(), depositCap, maxDepositAmount, enabled_historical_price_horizons, and latest_reported_tvl on vault responses.

4.14.1

Patch Changes

  • 1d6fae6: chore: upgrade the supported Node.js version to 22.

  • 04c9281: feat: include campaign APY in the tokenized vault response.

  • cfc7f40: feat: add support for the earnXRP and Tydro vaults.

4.14.0

Patch Changes

  • 1d6fae6: chore: upgrade the supported Node.js version to 22.

  • 04c9281: feat: include campaign APY in the tokenized vault response.

  • cfc7f40: feat: add support for the earnXRP and Tydro vaults.

4.14.0

Minor Changes

  • 0364b53: feat: add new vault API methods.

    New Methods:

    • getVaultAnnualizedApy β€” fetch annualized APY metrics for vaults (cUSDO, tETH, wstETH, rsETH).

    • getVaultSummary β€” fetch a summary of a vault (name, type, chain, recent returns).

    • getVaultWithdrawals β€” fetch a withdrawal summary and the pending withdrawal queue.

    New Types:

    • IVaultAnnualizedApy

    • IVaultSummary

    • IVaultWithdrawals

    Deprecation Notice:

    • IVaultAnnualizedApy.hgETH30dLiquidAPY β€” use liquidAPY30Day instead (removal: 2026-01-01).

    • IVaultAnnualizedApy.hgETH7dLiquidAPY β€” use liquidAPY7Day instead (removal: 2026-01-01).

    Documentation:

    • Vault method documentation added to docs/02-vaults.md.

4.13.2

Patch Changes

  • c6d5ad5: fix: update the type of historical APY values; deprecate getVaultApy β€” use getVaultHistoricalTimeseries instead.

4.13.1

Patch Changes

  • e67bb0c: fix: make subaccount and snapshot loading optional in fetchVaultsComprehensive to reduce unneeded RPC volume.

4.13.0

Minor Changes

  • 01f6203: feat: add support for the Katana chain.

Patch Changes

  • e58170f: fix: improve observability when Goldsky subgraph requests fail.

  • d417f0b: feat: add subgraph configuration for the superMON, earnMON, and k3EUROP vaults.

  • fe74f64: fix: update the query parameters used by the tokenized vault endpoints; deprecate historical_snapshots on the vault response β€” use getVaultHistoricalTimeseries instead.

4.12.1

Patch Changes

  • 01cb0b6: feat: expose the getVaultTimeSeries endpoint on the AugustSDK class.

4.12.0

Minor Changes

  • 8ef93e5: feat: add a vault time-series endpoint; fix: add an optional loadSubaccounts parameter to the get tokenized vault endpoint.

4.11.6

Patch Changes

  • b842e02: feat: add getVaultPnl for fetching vault-level PnL.

4.11.5

Patch Changes

  • f4eb84c: fix: getVaultUserLifetimePnl now derives the user's current position from the share price for a more accurate PnL.

4.11.4

Patch Changes

  • 3f210b1: fix: update the Monad block explorer URL.

4.11.3

Patch Changes

  • 623f3ec: fix: correct the calculation logic in getVaultUserLifetimePnl.

4.11.2

Patch Changes

  • 73636bd: fix: correct the lagDuration calculation.

4.11.1

Patch Changes

  • 38dbaa8: fix: additional fixes for the Hyena vaults.

4.11.0

Minor Changes

  • 74af6be: feat: add an external points interface for vaults that integrate third-party point programs.

4.10.0

Minor Changes

  • a23bce0: perf: optimize getVaultUserLifetimePnl for faster execution.

4.9.0

Minor Changes

  • 83ee1e1: feat: add getVaultUserLifetimePnl for retrieving a user's lifetime PnL on a vault.

Patch Changes

  • f2582b9: feat: support EVM2 for subgraph history queries.

4.7.3

Patch Changes

  • f2e0046: chore: update Monad Goldsky subgraph endpoints.

4.7.2

Patch Changes

  • 545dd1b: refactor: rename the getVault family of functions to fetchTokenizedVault.

4.7.2

Patch Changes

  • acd34a8: feat: include additional fields on vault responses.

4.7.1

Patch Changes

  • 4ffaeeb: fix: revert a recent change to the tokenized vault fetch logic that introduced regressions.

4.7.0

Minor Changes

  • 88e5d79: feat: add support for the Ink and Flare chains.

4.6.1

Patch Changes

  • 79c3917: feat: add historical_apy to the tokenized vault response.

  • b01879f: feat: add a deposit-with-permit function so callers can deposit using EIP-2612 signatures.

  • 5506682: perf: reduce RPC calls during vault fetching.

  • c7b052e: perf: remove the deposit cap query from the initial vault fetch β€” it's loaded on demand instead.

4.6.1

Patch Changes

  • 87c24b2: chore: source the integration and apy fields from the backend instead of computing them client-side.

4.6.0

Minor Changes

  • 4cbe3b4: fix: getAvailableRedemptions now uses the correct normalization function.

4.5.2

Patch Changes

  • 50d47da: fix: improve the available and pending withdrawal logic for accuracy.

4.5.1

Patch Changes

  • 4d1c505: feat: expose the depositCap contract call when the vault implements it.

4.5.0

Minor Changes

  • 7e03e06: chore: update the SDK to consume the latest subgraph schema.

4.4.7

Patch Changes

  • 3a43ccc: fix: improve bigint handling for safer arithmetic on large amounts.

4.4.6

Patch Changes

  • 715c56f: feat: expose a vault reader function for direct on-chain reads.

4.4.5

Patch Changes

  • 394a38e: feat: update the vaultRequestRedeem function signature.

4.4.4

Patch Changes

  • 9a77fbe: feat: add a walletToSigner helper for converting a wallet to an ethers signer.

4.4.3

Patch Changes

  • e704bc7: feat: update the vaultDeposit function signature.

4.4.2

Patch Changes

  • e76546f: feat: add support for the Monad chain.

4.4.1

Patch Changes

  • cc0e6cf: chore: internal version bump β€” no customer-facing changes.

4.4.0

Minor Changes

  • d4bad1a: feat: bump the getVault API version.

4.3.5

Patch Changes

  • 19ffdd2: feat: add support for the farmBOLD vault.

4.3.4

Patch Changes

  • f761bfb: chore: update EOA-operator types.

4.3.3

Patch Changes

  • 92a0cef: feat: add a user rank to the points response.

4.3.2

Patch Changes

  • b79ab00: chore: update the Goldsky URL.

  • 051fece: feat: support EOA operators on vaults.

4.3.1

Patch Changes

  • cf57cc7: feat: update the parameters accepted by getVault.

4.3.0

Minor Changes

  • ebccf02: fix: correct the URL used to fetch historical APY data.

4.2.3

Patch Changes

  • fa53783: feat: add support for the Sentora WBTC and Sentora USCC vaults.

4.2.1

Patch Changes

  • d5a62f1: feat: add Goldsky subgraph configuration for new vaults.

4.2.0

Minor Changes

  • bc9a666: feat: getVaultTVL now takes a chainId for cross-chain accuracy.

4.1.0

Minor Changes

  • d3cec8b: chore: update the strategists fallback list.

Patch Changes

  • 8ab6dab: chore: add hardcoded fallback values for some vault metadata.

3.16.1

Patch Changes

  • 0b615f9: expose raw tokens response from debank

  • Updated dependencies [0b615f9]

    • @augustdigital/services@3.16.1

    • @augustdigital/vaults@3.16.1

    • @augustdigital/pools@3.16.1

    • @augustdigital/types@3.16.1

    • @augustdigital/utils@3.16.1

    • @augustdigital/abis@3.16.1

3.16.0

Minor Changes

  • 2edc611: adding an optional logger for sentry

Patch Changes

  • Updated dependencies [2edc611]

    • @augustdigital/services@3.16.0

    • @augustdigital/vaults@3.16.0

    • @augustdigital/pools@3.16.0

    • @augustdigital/types@3.16.0

    • @augustdigital/utils@3.16.0

    • @augustdigital/abis@3.16.0

3.15.2

Patch Changes

  • 23fcd01: add xhype subgraph

  • Updated dependencies [23fcd01]

    • @augustdigital/services@3.15.2

    • @augustdigital/vaults@3.15.2

    • @augustdigital/pools@3.15.2

    • @augustdigital/types@3.15.2

    • @augustdigital/utils@3.15.2

    • @augustdigital/abis@3.15.2

3.15.1

Patch Changes

  • 1ef7bfb: adding coingecko key to staking

  • 04c7782: add error response to debank res

  • Updated dependencies [1ef7bfb]

  • Updated dependencies [04c7782]

    • @augustdigital/services@3.15.1

    • @augustdigital/vaults@3.15.1

    • @augustdigital/pools@3.15.1

    • @augustdigital/types@3.15.1

    • @augustdigital/utils@3.15.1

    • @augustdigital/abis@3.15.1

3.15.0

Minor Changes

  • 3bf450e: update API fallback fetch

Patch Changes

  • Updated dependencies [3bf450e]

    • @augustdigital/services@3.15.0

    • @augustdigital/vaults@3.15.0

    • @augustdigital/pools@3.15.0

    • @augustdigital/types@3.15.0

    • @augustdigital/utils@3.15.0

    • @augustdigital/abis@3.15.0

3.13.10

Patch Changes

  • d2e7f94: adding withdraw event to getWithdraws

  • Updated dependencies [d2e7f94]

    • @augustdigital/services@3.13.10

    • @augustdigital/vaults@3.13.10

    • @augustdigital/pools@3.13.10

    • @augustdigital/types@3.13.10

    • @augustdigital/utils@3.13.10

    • @augustdigital/abis@3.13.10

3.13.6

Patch Changes

  • a2ca1dd: update lendiingpoolv3

  • Updated dependencies [a2ca1dd]

    • @augustdigital/services@3.13.6

    • @augustdigital/vaults@3.13.6

    • @augustdigital/pools@3.13.6

    • @augustdigital/types@3.13.6

    • @augustdigital/utils@3.13.6

    • @augustdigital/abis@3.13.6

3.13.4

Patch Changes

  • 383cf57: add upGAMMAusdc subgraph

  • Updated dependencies [383cf57]

    • @augustdigital/services@3.13.4

    • @augustdigital/vaults@3.13.4

    • @augustdigital/pools@3.13.4

    • @augustdigital/types@3.13.4

    • @augustdigital/utils@3.13.4

    • @augustdigital/abis@3.13.4

3.13.3

Patch Changes

  • Updated dependencies [82d0738]

    • @augustdigital/utils@3.13.3

    • @augustdigital/pools@3.13.3

    • @augustdigital/services@3.13.2

    • @augustdigital/vaults@3.13.3

3.13.0

Minor Changes

  • 3c1913d: updating token exposure return value

Patch Changes

  • Updated dependencies [3c1913d]

    • @augustdigital/vaults@3.13.0

    • @augustdigital/pools@3.13.0

    • @augustdigital/types@3.13.0

    • @augustdigital/utils@3.13.0

    • @augustdigital/abis@3.13.0

3.12.2

Patch Changes

  • Updated dependencies [cbf643f]

    • @augustdigital/utils@3.12.2

    • @augustdigital/pools@3.12.2

    • @augustdigital/vaults@3.12.2

3.12.1

Patch Changes

  • 4ce6f73: add earnAUSD subgraph

  • Updated dependencies [4ce6f73]

    • @augustdigital/vaults@3.12.1

    • @augustdigital/pools@3.12.1

    • @augustdigital/types@3.12.1

    • @augustdigital/utils@3.12.1

    • @augustdigital/abis@3.12.1

3.12.0

Minor Changes

  • 1aa9169: fix mezo explorer

Patch Changes

  • Updated dependencies [1aa9169]

    • @augustdigital/vaults@3.12.0

    • @augustdigital/pools@3.12.0

    • @augustdigital/types@3.12.0

    • @augustdigital/utils@3.12.0

    • @augustdigital/abis@3.12.0

3.11.0

Minor Changes

  • 2ab0157: adding mezo-mUSD support

Patch Changes

  • b441f0b: add unichain explorer

  • Updated dependencies [b441f0b]

  • Updated dependencies [2ab0157]

    • @augustdigital/vaults@3.11.0

    • @augustdigital/pools@3.11.0

    • @augustdigital/types@3.11.0

    • @augustdigital/utils@3.11.0

    • @augustdigital/abis@3.11.0

3.9.1

Patch Changes

  • e1ee449: patch bump

  • Updated dependencies [e1ee449]

    • @augustdigital/vaults@3.9.1

    • @augustdigital/pools@3.9.1

    • @augustdigital/types@3.9.1

    • @augustdigital/utils@3.9.1

    • @augustdigital/abis@3.9.1

3.6.0

Minor Changes

  • 1eba6a4: handled errors in vault & services

Patch Changes

  • Updated dependencies [1eba6a4]

    • @augustdigital/vaults@3.6.0

    • @augustdigital/utils@3.8.0

    • @augustdigital/abis@3.6.0

    • @augustdigital/pools@3.6.0

    • @augustdigital/types@3.6.0

3.5.1

Patch Changes

  • Updated dependencies [b56895f]

    • @augustdigital/utils@3.7.0

    • @augustdigital/pools@3.5.1

    • @augustdigital/vaults@3.5.1

3.5.0

Minor Changes

  • f9edb34: add hyper evm history for user

Patch Changes

  • Updated dependencies [f9edb34]

    • @augustdigital/abis@3.5.0

    • @augustdigital/pools@3.5.0

    • @augustdigital/types@3.5.0

    • @augustdigital/utils@3.6.0

    • @augustdigital/vaults@3.5.0

3.4.1

Patch Changes

  • Updated dependencies [e945c91]

    • @augustdigital/utils@3.5.0

    • @augustdigital/pools@3.4.1

    • @augustdigital/vaults@3.4.1

3.4.0

Minor Changes

  • f98bdf4: update vault with risk

Patch Changes

  • Updated dependencies [f98bdf4]

    • @augustdigital/vaults@3.4.0

    • @augustdigital/pools@3.4.0

    • @augustdigital/types@3.4.0

    • @augustdigital/utils@3.4.0

    • @augustdigital/abis@3.4.0

3.3.1

Patch Changes

  • b364c2b: update fetching isVisible vault logic

  • Updated dependencies [b364c2b]

    • @augustdigital/vaults@3.3.1

    • @augustdigital/pools@3.3.1

    • @augustdigital/types@3.3.1

    • @augustdigital/utils@3.3.1

    • @augustdigital/abis@3.3.1

3.3.0

Minor Changes

  • a86b316: update

  • c5c2570: update hash in events

  • c9b3c1a: update

  • 705637a: update fetch user history

  • b6e3aba: update version

Patch Changes

  • Updated dependencies [a86b316]

  • Updated dependencies [c5c2570]

  • Updated dependencies [c9b3c1a]

  • Updated dependencies [705637a]

  • Updated dependencies [b6e3aba]

    • @augustdigital/pools@3.3.0

    • @augustdigital/types@3.3.0

    • @augustdigital/utils@3.3.0

    • @augustdigital/abis@3.3.0

    • @augustdigital/vaults@3.3.0

3.1.0

Minor Changes

  • 81ab166: add isFeeWaived to pools

  • 25bc103: update user history

  • 2c4618a: remove console

Patch Changes

  • Updated dependencies [81ab166]

  • Updated dependencies [25bc103]

  • Updated dependencies [2c4618a]

    • @augustdigital/pools@3.1.0

    • @augustdigital/types@3.1.0

    • @augustdigital/utils@3.1.0

    • @augustdigital/abis@3.1.0

    • @augustdigital/sdk@3.1.0

2.18.11

Patch Changes

  • Updated dependencies [311a622]

    • @augustdigital/utils@2.18.11

    • @augustdigital/pools@2.18.11

2.18.5

Patch Changes

  • 7ebbe39: Update Injective Description

  • Updated dependencies [7ebbe39]

    • @augustdigital/pools@2.18.5

    • @augustdigital/types@2.18.5

    • @augustdigital/utils@2.18.5

    • @augustdigital/abis@2.18.5

2.18.4

Patch Changes

  • b6b86a0: Added Injective Vault USDT

  • Updated dependencies [b6b86a0]

    • @augustdigital/pools@2.18.4

    • @augustdigital/types@2.18.4

    • @augustdigital/utils@2.18.4

    • @augustdigital/abis@2.18.4

2.16.8

Patch Changes

  • 70f3fa8: Mezo Vault Change

  • Updated dependencies [70f3fa8]

  • Updated dependencies [a3ad743]

    • @augustdigital/pools@2.16.8

    • @augustdigital/types@2.16.8

    • @augustdigital/utils@2.16.8

    • @augustdigital/abis@2.16.8

2.16.2

Patch Changes

  • Updated dependencies [ba9846d]

    • @augustdigital/utils@2.16.2

    • @augustdigital/pools@2.16.2

2.16.0

Minor Changes

  • 9cf59d6: expose vault whitelist address

Patch Changes

  • Updated dependencies [9cf59d6]

    • @augustdigital/pools@2.16.0

    • @augustdigital/types@2.16.0

    • @augustdigital/utils@2.16.0

    • @augustdigital/abis@2.16.0

2.15.0

Minor Changes

  • e32fce4: add otc positions

Patch Changes

  • Updated dependencies [e32fce4]

    • @augustdigital/pools@2.15.0

    • @augustdigital/types@2.15.0

    • @augustdigital/utils@2.15.0

    • @augustdigital/abis@2.15.0

2.13.1

Patch Changes

  • Updated dependencies [f57d7e3]

    • @augustdigital/pools@2.14.0

    • @augustdigital/utils@2.14.0

2.13.0

Minor Changes

  • 83dc214: add debank response

Patch Changes

  • Updated dependencies [83dc214]

    • @augustdigital/pools@2.13.0

    • @augustdigital/types@2.13.0

    • @augustdigital/utils@2.13.0

    • @augustdigital/abis@2.13.0

2.12.0

Minor Changes

  • dd2cb76: update protocol exposure data

Patch Changes

  • Updated dependencies [dd2cb76]

    • @augustdigital/pools@2.12.0

    • @augustdigital/types@2.12.0

    • @augustdigital/utils@2.12.0

    • @augustdigital/abis@2.12.0

2.10.2

Patch Changes

  • Updated dependencies [dcc926f]

    • @augustdigital/abis@2.10.2

    • @augustdigital/pools@2.10.2

    • @augustdigital/utils@2.10.2

2.10.1

Patch Changes

  • Updated dependencies [f8f709d]

    • @augustdigital/abis@2.10.1

    • @augustdigital/pools@2.10.1

    • @augustdigital/utils@2.10.1

2.10.0

Minor Changes

  • 034db45: spelling error

Patch Changes

  • Updated dependencies [034db45]

    • @augustdigital/pools@2.10.0

    • @augustdigital/types@2.10.0

    • @augustdigital/utils@2.10.0

    • @augustdigital/abis@2.10.0

2.9.0

Minor Changes

  • 31ae26a: add idle capital

Patch Changes

  • Updated dependencies [31ae26a]

    • @augustdigital/pools@2.9.0

    • @augustdigital/types@2.9.0

    • @augustdigital/utils@2.9.0

    • @augustdigital/abis@2.9.0

2.6.5

Patch Changes

  • Updated dependencies [62619e1]

    • @augustdigital/pools@2.6.5

2.6.2

Patch Changes

  • Updated dependencies [61d51d4]

    • @augustdigital/pools@2.6.2

2.6.1

Patch Changes

  • Updated dependencies [8d45228]

    • @augustdigital/pools@2.6.1

    • @augustdigital/utils@2.5.1

2.6.0

Minor Changes

  • update upshift rewards typography

  • d56eb68: update AVAX rewards

Patch Changes

  • Updated dependencies

  • Updated dependencies [d56eb68]

    • @augustdigital/pools@2.6.0

    • @augustdigital/types@2.6.0

    • @augustdigital/utils@2.5.0

    • @augustdigital/abis@2.5.0

2.5.0

Minor Changes

  • ca9514d: update rewards for AVAX

Patch Changes

  • Updated dependencies [ca9514d]

    • @augustdigital/pools@2.5.0

    • @augustdigital/types@2.5.0

    • @augustdigital/utils@2.4.1

2.4.1

Patch Changes

  • Updated dependencies [44876f7]

    • @augustdigital/pools@2.4.1

2.4.0

Minor Changes

  • ab136b2: update upshift points multiplier

Patch Changes

  • Updated dependencies [ab136b2]

    • @augustdigital/pools@2.4.0

    • @augustdigital/types@2.4.0

    • @augustdigital/utils@2.4.0

    • @augustdigital/abis@2.4.0

2.3.1

Patch Changes

  • Updated dependencies [4c562dd]

    • @augustdigital/pools@2.3.1

2.3.0

Minor Changes

  • 5515b33: override managementFee

Patch Changes

  • Updated dependencies [5515b33]

    • @augustdigital/pools@2.3.0

    • @augustdigital/types@2.3.0

    • @augustdigital/utils@2.3.0

    • @augustdigital/abis@2.3.0

2.2.0

Minor Changes

  • f47df7b: updated management fee call

Patch Changes

  • Updated dependencies [f47df7b]

    • @augustdigital/pools@2.2.0

    • @augustdigital/types@2.2.0

    • @augustdigital/utils@2.2.0

    • @augustdigital/abis@2.2.0

2.1.2

Patch Changes

  • Updated dependencies [cf49466]

    • @augustdigital/pools@2.1.1

2.1.1

Patch Changes

  • Updated dependencies [fe65b9d]

    • @augustdigital/pools@2.1.0

    • @augustdigital/types@2.1.0

    • @augustdigital/utils@2.1.3

2.1.0

Minor Changes

  • 8c457fa: update static keys

2.0.4

Patch Changes

  • Updated dependencies [e96e036]

    • @augustdigital/pools@2.0.4

2.0.3

Patch Changes

  • Updated dependencies [0ade132]

    • @augustdigital/utils@2.1.2

    • @augustdigital/abis@2.1.2

    • @augustdigital/pools@2.0.3

2.0.2

Patch Changes

  • Updated dependencies [ac83b7d]

  • Updated dependencies [5c34d73]

    • @augustdigital/utils@2.1.1

    • @augustdigital/abis@2.1.1

    • @augustdigital/pools@2.0.2

2.0.1

Patch Changes

  • Updated dependencies [4c16fd6]

    • @augustdigital/utils@2.1.0

    • @augustdigital/abis@2.1.0

    • @augustdigital/pools@2.0.1

2.0.0

Major Changes

  • 4267b9a: update ethena apy val

Patch Changes

  • Updated dependencies [4267b9a]

    • @augustdigital/pools@2.0.0

    • @augustdigital/types@2.0.0

    • @augustdigital/utils@2.0.0

    • @augustdigital/abis@2.0.0

1.3.0

Minor Changes

  • c9505a1: added ava labs ausd pool to pool package

Patch Changes

  • Updated dependencies [c9505a1]

    • @augustdigital/pools@1.3.0

    • @augustdigital/types@1.3.0

    • @augustdigital/utils@1.3.0

    • @augustdigital/abis@1.3.0

1.2.0

Minor Changes

  • 3bfe99b: Added build to workflow

Patch Changes

  • Updated dependencies [3bfe99b]

    • @augustdigital/pools@1.2.0

    • @augustdigital/types@1.2.0

    • @augustdigital/utils@1.2.0

    • @augustdigital/abis@1.2.0

1.1.0

Minor Changes

  • 4504eda: Testing new github workflow"

Patch Changes

  • Updated dependencies [4504eda]

    • @augustdigital/pools@1.1.0

    • @augustdigital/types@1.1.0

    • @augustdigital/utils@1.1.0

    • @augustdigital/abis@1.1.0

0.1.0

Minor Changes

  • f9df78f: added parameters to pool fetchers in sdk"

Patch Changes

  • Updated dependencies [f9df78f]

    • @augustdigital/pools@0.1.0

    • @augustdigital/types@0.1.0

    • @augustdigital/utils@0.1.0

    • @augustdigital/abis@0.1.0

0.0.3

Patch Changes

  • d72f854: (v0.0.3) testing github workflows

  • 2f95c56: v0.0.3 edited readme and testing automated npm publish github workflow

  • c388be5: (v0.0.2) changeset working appropriately

  • Updated dependencies [d72f854]

  • Updated dependencies [2f95c56]

  • Updated dependencies [c388be5]

    • @augustdigital/pools@0.0.3

    • @augustdigital/types@0.0.3

    • @augustdigital/utils@0.0.3

    • @augustdigital/abis@0.0.3

0.0.2

Patch Changes

  • (0.0.1) testing changeset

  • Updated dependencies

    • @augustdigital/pools@0.0.2

    • @augustdigital/types@0.0.2

    • @augustdigital/utils@0.0.2

    • @augustdigital/abis@0.0.2

Last updated