@augustdigital/sdk 8.8.0 → 8.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,6 +24,18 @@ exports.METHOD_CATEGORIES = {
24
24
  getVaultPnl: 'read.vault',
25
25
  getVaultUnrealizedPnlHistory: 'read.vault',
26
26
  getLatestUnrealizedPnl: 'read.vault',
27
+ getDashboardLoans: 'read.vault',
28
+ getDiscountFactors: 'read.vault',
29
+ getCollateralExcessOrDeficit: 'read.vault',
30
+ simulateCollateral: 'read.vault',
31
+ getRevertReason: 'read.vault',
32
+ getOtcPositions: 'read.vault',
33
+ getOtcMarginRequirements: 'read.vault',
34
+ getCuratorVaultSubaccounts: 'read.vault',
35
+ getCuratorVaultWhitelist: 'read.vault',
36
+ getTimelockRequests: 'read.vault',
37
+ getVaultPerformanceFees: 'read.vault',
38
+ getVaultOracleClassification: 'read.vault',
27
39
  getVaultBorrowerHealthFactor: 'read.vault',
28
40
  getYieldLastRealizedOn: 'read.vault',
29
41
  getVaultActivity: 'read.vault',
@@ -42,11 +54,15 @@ exports.METHOD_CATEGORIES = {
42
54
  getPrice: 'read.price',
43
55
  getUserPoints: 'read.points',
44
56
  fetchPointsLeaderboard: 'read.points',
57
+ getAllSubaccounts: 'read.subaccount',
45
58
  getSubaccountHealthFactor: 'read.subaccount',
46
59
  getSubaccountLoans: 'read.subaccount',
47
60
  getSubaccountCefiPositions: 'read.subaccount',
48
61
  getSubaccountOtcPositions: 'read.subaccount',
49
62
  getSubaccountSummary: 'read.subaccount',
63
+ getSubaccountTransactions: 'read.subaccount',
64
+ getSubaccountLoanByAddress: 'read.subaccount',
65
+ getSubaccountDebank: 'read.subaccount',
50
66
  getStakingPositions: 'read.staking',
51
67
  getVaultStakingPositions: 'read.staking',
52
68
  getLayerZeroDeposits: 'read.layerzero',
@@ -3,4 +3,4 @@
3
3
  * Generated during publish from package.json version
4
4
  * This file is gitignored and created at publish time
5
5
  */
6
- export declare const SDK_VERSION = "8.8.0";
6
+ export declare const SDK_VERSION = "8.10.0";
@@ -6,5 +6,5 @@ exports.SDK_VERSION = void 0;
6
6
  * Generated during publish from package.json version
7
7
  * This file is gitignored and created at publish time
8
8
  */
9
- exports.SDK_VERSION = '8.8.0';
9
+ exports.SDK_VERSION = '8.10.0';
10
10
  //# sourceMappingURL=version.js.map
@@ -30,6 +30,7 @@ export declare const WEBSERVER_ENDPOINTS: {
30
30
  refresh: string;
31
31
  };
32
32
  subaccount: {
33
+ list: (offset?: number, limit?: number) => string;
33
34
  rewards: (subaccount: IAddress) => string;
34
35
  tokens: (subaccount: IAddress) => string;
35
36
  twap: {
@@ -44,14 +45,43 @@ export declare const WEBSERVER_ENDPOINTS: {
44
45
  loans: (subaccount: IAddress, side?: "BORROWER" | "LENDER" | "BOTH", active?: boolean) => string;
45
46
  cefi: (subaccount: IAddress) => string;
46
47
  otc_positions: (subaccount: IAddress) => string;
48
+ loanByAddress: (loanAddress: string, chainId: number) => string;
47
49
  _: (subaccount: IAddress) => string;
48
50
  };
51
+ transactions: {
52
+ v2: (subaccount: string, startTime?: string, endTime?: string) => string;
53
+ };
54
+ otc: {
55
+ positions: string;
56
+ marginRequirements: (otcCounterpartyId?: string, payer?: string) => string;
57
+ };
58
+ curator: {
59
+ vaultSubaccounts: (vaultAddress: string) => string;
60
+ vaultWhitelist: (vaultAddress: string) => string;
61
+ };
62
+ timelockRequests: (vaultAddress: string, chainId: number, status?: string) => string;
49
63
  users: {
50
64
  get: string;
51
65
  };
66
+ dashboard: {
67
+ loans: string;
68
+ };
69
+ risk: {
70
+ discountFactors: string;
71
+ collateralExcessOrDeficit: (subaccount: string, tokenAddress: string, tokenChain: number, targetHealthFactor?: number) => string;
72
+ collateralSimulation: string;
73
+ };
52
74
  prices: (symbol: string) => string;
53
75
  metrics: {
54
76
  pnl: (subaccount: IAddress, startTime?: string, endTime?: string) => string;
77
+ vaultPerformanceFees: (params: {
78
+ vaultAddress: string;
79
+ annualizedFeesPct: number;
80
+ nativeDenominated: boolean;
81
+ calculationPeriod: string;
82
+ startDate?: string;
83
+ endDate?: string;
84
+ }) => string;
55
85
  };
56
86
  public: {
57
87
  integrations: {
@@ -85,6 +115,8 @@ export declare const WEBSERVER_ENDPOINTS: {
85
115
  unrealizedHistory: (vaultAddress: VaultAddress, limit?: number) => string;
86
116
  unrealizedLatest: string;
87
117
  };
118
+ revertReason: (txHash: string, chain: number) => string;
119
+ oracleClassification: (vaultAddress: string, chainId: number) => string;
88
120
  };
89
121
  upshift: {
90
122
  vaults: {
@@ -33,6 +33,7 @@ exports.WEBSERVER_ENDPOINTS = {
33
33
  refresh: '/auth/refresh',
34
34
  },
35
35
  subaccount: {
36
+ list: (offset = 0, limit = 100) => `/subaccount?offset=${offset}&limit=${limit}`,
36
37
  rewards: (subaccount) => `/subaccount/${(0, ethers_1.getAddress)(subaccount)}/rewards`,
37
38
  tokens: (subaccount) => `/subaccount/${(0, ethers_1.getAddress)(subaccount)}/tokens`,
38
39
  twap: {
@@ -47,14 +48,80 @@ exports.WEBSERVER_ENDPOINTS = {
47
48
  loans: (subaccount, side = 'BOTH', active = true) => `/subaccount/${(0, ethers_1.getAddress)(subaccount)}/loans?side=${side}&active=${active}`,
48
49
  cefi: (subaccount) => `/subaccount/${(0, ethers_1.getAddress)(subaccount)}/cefi_position`,
49
50
  otc_positions: (subaccount) => `/subaccount/${(0, ethers_1.getAddress)(subaccount)}/otc_positions`,
51
+ loanByAddress: (loanAddress, chainId) => `/subaccount/loans/${encodeURIComponent(loanAddress)}?chain_id=${chainId}`,
50
52
  _: (subaccount) => `/subaccount/${(0, ethers_1.getAddress)(subaccount)}`,
51
53
  },
54
+ transactions: {
55
+ v2: (subaccount, startTime, endTime) => {
56
+ const params = new URLSearchParams({ address: subaccount });
57
+ if (startTime !== undefined)
58
+ params.set('start_time', startTime);
59
+ if (endTime !== undefined)
60
+ params.set('end_time', endTime);
61
+ return `/transactions/v2?${params.toString()}`;
62
+ },
63
+ },
64
+ otc: {
65
+ positions: '/otc/position',
66
+ marginRequirements: (otcCounterpartyId, payer) => {
67
+ const params = new URLSearchParams();
68
+ if (otcCounterpartyId !== undefined)
69
+ params.set('otc_counter_party_id', otcCounterpartyId);
70
+ if (payer !== undefined)
71
+ params.set('payer', payer);
72
+ const query = params.toString();
73
+ return `/otc/margin_requirement${query ? `?${query}` : ''}`;
74
+ },
75
+ },
76
+ curator: {
77
+ vaultSubaccounts: (vaultAddress) => `/curator/vaults/${encodeURIComponent(vaultAddress)}/subaccounts`,
78
+ vaultWhitelist: (vaultAddress) => `/curator/vaults/${encodeURIComponent(vaultAddress)}/whitelist`,
79
+ },
80
+ timelockRequests: (vaultAddress, chainId, status) => {
81
+ const params = new URLSearchParams({
82
+ vaultAddress,
83
+ chainId: String(chainId),
84
+ });
85
+ if (status !== undefined)
86
+ params.set('status', status);
87
+ return `/timelock-requests?${params.toString()}`;
88
+ },
52
89
  users: {
53
90
  get: '/users',
54
91
  },
92
+ dashboard: {
93
+ loans: '/dashboard/loans',
94
+ },
95
+ risk: {
96
+ discountFactors: '/risk/discount_factors',
97
+ collateralExcessOrDeficit: (subaccount, tokenAddress, tokenChain, targetHealthFactor) => {
98
+ const params = new URLSearchParams({
99
+ address: subaccount,
100
+ token_address: tokenAddress,
101
+ token_chain: String(tokenChain),
102
+ });
103
+ if (targetHealthFactor !== undefined)
104
+ params.set('target_health_factor', String(targetHealthFactor));
105
+ return `/risk/collateral_excess_or_deficit?${params.toString()}`;
106
+ },
107
+ collateralSimulation: '/risk/collateral_simulation',
108
+ },
55
109
  prices: (symbol) => `/prices/${symbol}`,
56
110
  metrics: {
57
111
  pnl: (subaccount, startTime, endTime) => `/metrics/pnl?subaccount_address=${(0, ethers_1.getAddress)(subaccount)}${startTime && endTime ? `&start=${startTime}&end=${endTime}` : ''}`,
112
+ vaultPerformanceFees: (params) => {
113
+ const q = new URLSearchParams({
114
+ vault_address: params.vaultAddress,
115
+ annualized_fees_pct: String(params.annualizedFeesPct),
116
+ native_denominated: String(params.nativeDenominated),
117
+ calculation_period: params.calculationPeriod,
118
+ });
119
+ if (params.startDate !== undefined)
120
+ q.set('start_date', params.startDate);
121
+ if (params.endDate !== undefined)
122
+ q.set('end_date', params.endDate);
123
+ return `/metrics/vault_performance_fees?${q.toString()}`;
124
+ },
58
125
  },
59
126
  public: {
60
127
  integrations: {
@@ -92,6 +159,11 @@ exports.WEBSERVER_ENDPOINTS = {
92
159
  unrealizedHistory: (vaultAddress, limit) => `/upshift/unrealized_pnl?vault_address=${vaultAddress}${limit !== undefined ? `&limit=${limit}` : ''}`,
93
160
  unrealizedLatest: '/upshift/unrealized_pnl/latest',
94
161
  },
162
+ revertReason: (txHash, chain) => `/revert_reason?${new URLSearchParams({
163
+ tx_hash: txHash,
164
+ chain: String(chain),
165
+ }).toString()}`,
166
+ oracleClassification: (vaultAddress, chainId) => `/upshift/oracle_classification/${encodeURIComponent(vaultAddress)}?chain_id=${chainId}`,
95
167
  },
96
168
  upshift: {
97
169
  vaults: {
@@ -20,6 +20,11 @@ export declare const VAULT_ALLOCATION_SUBACCOUNTS: {
20
20
  subaccount: IAddress;
21
21
  useDebank: boolean;
22
22
  };
23
+ MonarqXRP: {
24
+ address: IAddress;
25
+ subaccount: IAddress;
26
+ useDebank: boolean;
27
+ };
23
28
  };
24
29
  /**
25
30
  * @deprecated use the backend responses /tokenized_vault internal_type field to determine if the vault is an old lending pool
@@ -26,6 +26,13 @@ exports.VAULT_ALLOCATION_SUBACCOUNTS = {
26
26
  subaccount: (0, ethers_1.getAddress)('0xC8c0Ffb8Ff3BDA26321224e800B3B38AEaB48799'),
27
27
  useDebank: true,
28
28
  },
29
+ // For the Monarq XRP Yield Vault (Flare), surface the borrower subaccount and
30
+ // keep vault-level Debank exposure (mirrors earnAUSD).
31
+ MonarqXRP: {
32
+ address: (0, ethers_1.getAddress)('0x2439D4bb753A0f3777d4C9011AFacc475ba6B951'),
33
+ subaccount: (0, ethers_1.getAddress)('0xF755B2244C1C1f20cA03C3Bb472175C9a4E250f2'),
34
+ useDebank: true,
35
+ },
29
36
  };
30
37
  /**
31
38
  * @deprecated use the backend responses /tokenized_vault internal_type field to determine if the vault is an old lending pool
@@ -45,6 +45,7 @@ export declare function isUserRejectionError(error: unknown): boolean;
45
45
  * ```
46
46
  */
47
47
  export declare function isExpectedRevertError(error: unknown): boolean;
48
+ export declare function isInsufficientFundsError(error: unknown): boolean;
48
49
  /**
49
50
  * Log a caught chain error at the severity its category warrants, without
50
51
  * swallowing it. When `isBenign` is `true` the failure is recorded as a `warn`
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isUserRejectionError = isUserRejectionError;
4
4
  exports.isExpectedRevertError = isExpectedRevertError;
5
+ exports.isInsufficientFundsError = isInsufficientFundsError;
5
6
  exports.logChainError = logChainError;
6
7
  const logger_1 = require("../logger");
7
8
  /**
@@ -21,6 +22,9 @@ const logger_1 = require("../logger");
21
22
  * 2. **Expected on-chain read reverts** — reading a function a vault doesn't
22
23
  * implement, or an address with no/incompatible bytecode, reverts. This is a
23
24
  * routine outcome of probing heterogeneous vaults, not a defect.
25
+ * 3. **Underfunded sender accounts** — the node rejects the transaction because
26
+ * the sender can't cover gas (or, on rollups such as Citrea, the extra L1
27
+ * data-availability fee). This is a "top up your wallet" prompt, not a bug.
24
28
  *
25
29
  * These predicates let call sites demote exactly those cases to `warn` while
26
30
  * leaving genuine failures at `error`. They are intentionally dependency-free
@@ -77,6 +81,39 @@ function errorCodes(error) {
77
81
  }
78
82
  return codes;
79
83
  }
84
+ /**
85
+ * Collect every human-readable message string an error-like value carries,
86
+ * across the nested locations providers stash them in.
87
+ *
88
+ * Why this is separate from {@link errorText}: ethers v6 flattens a rejected
89
+ * `eth_estimateGas`/`eth_call` to a generic *top-level* `message` (e.g.
90
+ * `"missing revert data"`) while preserving the node's original JSON-RPC error
91
+ * one level down at `info.error.message`. The real reason (an insufficient-funds
92
+ * report, say) is therefore invisible to a top-level `.message` read. We scan
93
+ * the top-level message plus `error.message`, `info.error.message`,
94
+ * `cause.message`, and `cause.info.error.message` so a caller catches the reason
95
+ * whether it holds the raw provider error or an SDK error that wrapped it as
96
+ * `cause`.
97
+ *
98
+ * @param error - The caught value, of unknown type.
99
+ * @returns Every non-empty message string found (possibly empty array).
100
+ */
101
+ function nestedMessages(error) {
102
+ const out = [];
103
+ const push = (value) => {
104
+ if (typeof value === 'string' && value.length > 0)
105
+ out.push(value);
106
+ };
107
+ push(errorText(error));
108
+ if (error && typeof error === 'object') {
109
+ const e = error;
110
+ push(e.error?.message);
111
+ push(e.info?.error?.message);
112
+ push(e.cause?.message);
113
+ push(e.cause?.info?.error?.message);
114
+ }
115
+ return out;
116
+ }
80
117
  /**
81
118
  * Is this error a wallet/user rejection of a transaction or signature request?
82
119
  *
@@ -143,6 +180,65 @@ function isExpectedRevertError(error) {
143
180
  msg.includes('call revert exception') ||
144
181
  msg.includes('reverted'));
145
182
  }
183
+ /**
184
+ * Is this error the chain node reporting that the sender can't afford the
185
+ * transaction's gas/fee — i.e. the account needs topping up, not a defect?
186
+ *
187
+ * This is distinct from a contract revert, and easy to misclassify. When the
188
+ * node rejects `eth_estimateGas` for an underfunded account, ethers v6 discards
189
+ * the node's reason and surfaces a generic `CALL_EXCEPTION` / `"missing revert
190
+ * data"` at the top level — which {@link isExpectedRevertError} matches. The
191
+ * real reason survives only in the nested JSON-RPC error, so this predicate
192
+ * scans there (via `nestedMessages`). On a write path, check this **before**
193
+ * {@link isExpectedRevertError}, or a genuine funds shortfall reads as a benign
194
+ * revert.
195
+ *
196
+ * Matching is anchored to the node's pre-execution funds-check phrasings (see
197
+ * `INSUFFICIENT_FUNDS_PHRASES`), each of which carries a `for <purpose>`
198
+ * qualifier — `insufficient funds for gas`, `insufficient funds for transfer`,
199
+ * `not enough funds for L1 fee` (Citrea's data-availability fee), etc. This is
200
+ * deliberately narrower than a bare `"insufficient funds"` substring: a
201
+ * *contract revert reason* that merely contains the word "funds" (e.g.
202
+ * `execution reverted: insufficient funds in pool`) must stay a genuine failure,
203
+ * not be demoted to an ACCOUNT_NOT_FUNDED "top up gas" prompt.
204
+ *
205
+ * @param error - The caught value, of unknown type.
206
+ * @returns `true` when the failure is an unfunded/underfunded sender account.
207
+ *
208
+ * @example
209
+ * ```ts
210
+ * try { await vault.requestRedeem(...); }
211
+ * catch (e) {
212
+ * if (isInsufficientFundsError(e))
213
+ * throw new AugustValidationError(
214
+ * 'ACCOUNT_NOT_FUNDED',
215
+ * 'Add gas to continue',
216
+ * { cause: e },
217
+ * );
218
+ * throw e;
219
+ * }
220
+ * ```
221
+ */
222
+ /**
223
+ * The node pre-execution funds-check phrasings {@link isInsufficientFundsError}
224
+ * recognises, lower-cased. Each keeps the `for <purpose>` qualifier so the match
225
+ * is anchored to a funding rejection and can't be tripped by a contract revert
226
+ * reason that merely mentions "funds". `insufficient funds for gas` covers the
227
+ * geth/reth `"... for gas * price + value"` message; `not enough funds for l1
228
+ * fee` is the rollup (Citrea) data-availability-fee shortfall.
229
+ */
230
+ const INSUFFICIENT_FUNDS_PHRASES = [
231
+ 'insufficient funds for gas',
232
+ 'insufficient funds for transfer',
233
+ 'insufficient funds for intrinsic transaction cost',
234
+ 'not enough funds for l1 fee',
235
+ ];
236
+ function isInsufficientFundsError(error) {
237
+ return nestedMessages(error).some((raw) => {
238
+ const msg = raw.toLowerCase();
239
+ return INSUFFICIENT_FUNDS_PHRASES.some((phrase) => msg.includes(phrase));
240
+ });
241
+ }
146
242
  /**
147
243
  * Log a caught chain error at the severity its category warrants, without
148
244
  * swallowing it. When `isBenign` is `true` the failure is recorded as a `warn`
package/lib/main.js CHANGED
@@ -111,7 +111,7 @@ class AugustSDK extends core_1.AugustBase {
111
111
  this.stellar = new stellar_1.default();
112
112
  this.vaults = new vaults_1.AugustVaults(baseConfig, this.solana, this.sui);
113
113
  this.subaccounts = new sub_accounts_1.AugustSubAccounts(baseConfig);
114
- this.api = new api_1.AugustApi();
114
+ this.api = new api_1.AugustApi(baseConfig);
115
115
  // Instrument all SDK methods for analytics tracking
116
116
  (0, analytics_1.instrumentClass)(this, () => this.activeNetwork?.chainId);
117
117
  (0, analytics_1.instrumentClass)(this.evm, () => this.activeNetwork?.chainId);
@@ -0,0 +1,82 @@
1
+ import { type IFetchAugustOptions } from '../../core';
2
+ import type { ICollateralExcessOrDeficit, ICollateralSimulationInput, ICollateralSimulationResults, ICuratorWhitelistStatus, IDiscountFactorLadder, ILoanBookInfo, IOracleClassification, IOtcMarginRequirement, IOtcPositionRead, IRevertReason, ITimelockRequest, IVaultPerformanceFees, IWSSubaccountListItem } from '../../types';
3
+ /**
4
+ * Fetch the global loan-book aggregate (admin-only `GET /dashboard/loans`).
5
+ */
6
+ export declare const fetchDashboardLoans: (augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<ILoanBookInfo[]>;
7
+ /**
8
+ * Fetch every token discount-factor ladder (`GET /risk/discount_factors`).
9
+ */
10
+ export declare const fetchDiscountFactors: (augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<IDiscountFactorLadder[]>;
11
+ /**
12
+ * Fetch a subaccount's collateral excess/deficit for one token
13
+ * (`GET /risk/collateral_excess_or_deficit`).
14
+ */
15
+ export declare const fetchCollateralExcessOrDeficit: (params: {
16
+ subaccount: string;
17
+ tokenAddress: string;
18
+ tokenChain: number;
19
+ targetHealthFactor?: number;
20
+ }, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<ICollateralExcessOrDeficit>;
21
+ /**
22
+ * Run a collateral simulation (`POST /risk/collateral_simulation`). This is a
23
+ * pure, read-only simulation — the backend computes required collateral for a
24
+ * hypothetical loan and changes no state.
25
+ */
26
+ export declare const fetchCollateralSimulation: (body: ICollateralSimulationInput, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<ICollateralSimulationResults>;
27
+ /**
28
+ * Fetch the decoded revert reason(s) for a transaction from the public
29
+ * `GET /revert_reason` endpoint. No API key required.
30
+ */
31
+ export declare const fetchRevertReason: (txHash: string, chain: number, headers?: IFetchAugustOptions["headers"]) => Promise<IRevertReason>;
32
+ /**
33
+ * Fetch all OTC positions (admin-only `GET /otc/position`).
34
+ */
35
+ export declare const fetchOtcPositions: (augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<IOtcPositionRead[]>;
36
+ /**
37
+ * Fetch OTC margin requirements (admin-only `GET /otc/margin_requirement`),
38
+ * optionally filtered by counterparty id and/or payer.
39
+ */
40
+ export declare const fetchOtcMarginRequirements: (filters: {
41
+ otcCounterpartyId?: string;
42
+ payer?: string;
43
+ }, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<IOtcMarginRequirement[]>;
44
+ /**
45
+ * Fetch the subaccounts linked to a vault (curator-or-admin
46
+ * `GET /curator/vaults/{vault_address}/subaccounts`).
47
+ */
48
+ export declare const fetchCuratorVaultSubaccounts: (vaultAddress: string, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<IWSSubaccountListItem[]>;
49
+ /**
50
+ * Fetch on-chain whitelist status for a vault's subaccounts (curator-or-admin
51
+ * `GET /curator/vaults/{vault_address}/whitelist`). EVM vaults only — the
52
+ * backend 400s for non-EVM vaults.
53
+ */
54
+ export declare const fetchCuratorVaultWhitelist: (vaultAddress: string, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<ICuratorWhitelistStatus[]>;
55
+ /**
56
+ * Fetch timelock requests for a vault on a chain (`GET /timelock-requests`),
57
+ * optionally filtered by status.
58
+ */
59
+ export declare const fetchTimelockRequests: (params: {
60
+ vaultAddress: string;
61
+ chainId: number;
62
+ status?: string;
63
+ }, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<ITimelockRequest[]>;
64
+ /**
65
+ * Fetch a vault's performance-fee computation
66
+ * (`GET /metrics/vault_performance_fees`). Slow first call (pandas over full
67
+ * snapshot history); 20-minute server-side cache.
68
+ */
69
+ export declare const fetchVaultPerformanceFees: (params: {
70
+ vaultAddress: string;
71
+ annualizedFeesPct: number;
72
+ nativeDenominated: boolean;
73
+ calculationPeriod: string;
74
+ startDate?: string;
75
+ endDate?: string;
76
+ }, augustKey: string, headers?: IFetchAugustOptions["headers"]) => Promise<IVaultPerformanceFees>;
77
+ /**
78
+ * Fetch a vault's NAV-oracle classification table from the public
79
+ * `GET /upshift/oracle_classification/{vault_address}` endpoint. No API key
80
+ * required.
81
+ */
82
+ export declare const fetchVaultOracleClassification: (vaultAddress: string, chainId: number, headers?: IFetchAugustOptions["headers"]) => Promise<IOracleClassification>;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchVaultOracleClassification = exports.fetchVaultPerformanceFees = exports.fetchTimelockRequests = exports.fetchCuratorVaultWhitelist = exports.fetchCuratorVaultSubaccounts = exports.fetchOtcMarginRequirements = exports.fetchOtcPositions = exports.fetchRevertReason = exports.fetchCollateralSimulation = exports.fetchCollateralExcessOrDeficit = exports.fetchDiscountFactors = exports.fetchDashboardLoans = void 0;
4
+ const core_1 = require("../../core");
5
+ /**
6
+ * Fetch the global loan-book aggregate (admin-only `GET /dashboard/loans`).
7
+ */
8
+ const fetchDashboardLoans = async (augustKey, headers) => {
9
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.dashboard.loans, { headers });
10
+ if (!response.ok || typeof response.json !== 'function') {
11
+ throw new Error(`Failed to fetch dashboard loans: ${response.statusText || 'Unknown error'}`);
12
+ }
13
+ return response.json();
14
+ };
15
+ exports.fetchDashboardLoans = fetchDashboardLoans;
16
+ /**
17
+ * Fetch every token discount-factor ladder (`GET /risk/discount_factors`).
18
+ */
19
+ const fetchDiscountFactors = async (augustKey, headers) => {
20
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.risk.discountFactors, { headers });
21
+ if (!response.ok || typeof response.json !== 'function') {
22
+ throw new Error(`Failed to fetch discount factors: ${response.statusText || 'Unknown error'}`);
23
+ }
24
+ return response.json();
25
+ };
26
+ exports.fetchDiscountFactors = fetchDiscountFactors;
27
+ /**
28
+ * Fetch a subaccount's collateral excess/deficit for one token
29
+ * (`GET /risk/collateral_excess_or_deficit`).
30
+ */
31
+ const fetchCollateralExcessOrDeficit = async (params, augustKey, headers) => {
32
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.risk.collateralExcessOrDeficit(params.subaccount, params.tokenAddress, params.tokenChain, params.targetHealthFactor), { headers });
33
+ if (!response.ok || typeof response.json !== 'function') {
34
+ throw new Error(`Failed to fetch collateral excess or deficit: ${response.statusText || 'Unknown error'}`);
35
+ }
36
+ return response.json();
37
+ };
38
+ exports.fetchCollateralExcessOrDeficit = fetchCollateralExcessOrDeficit;
39
+ /**
40
+ * Run a collateral simulation (`POST /risk/collateral_simulation`). This is a
41
+ * pure, read-only simulation — the backend computes required collateral for a
42
+ * hypothetical loan and changes no state.
43
+ */
44
+ const fetchCollateralSimulation = async (body, augustKey, headers) => {
45
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.risk.collateralSimulation, { method: 'post', data: body, headers });
46
+ if (!response.ok || typeof response.json !== 'function') {
47
+ throw new Error(`Failed to run collateral simulation: ${response.statusText || 'Unknown error'}`);
48
+ }
49
+ return response.json();
50
+ };
51
+ exports.fetchCollateralSimulation = fetchCollateralSimulation;
52
+ /**
53
+ * Fetch the decoded revert reason(s) for a transaction from the public
54
+ * `GET /revert_reason` endpoint. No API key required.
55
+ */
56
+ const fetchRevertReason = async (txHash, chain, headers) => {
57
+ const response = await (0, core_1.fetchAugustPublic)(core_1.WEBSERVER_ENDPOINTS.public.revertReason(txHash, chain), { headers });
58
+ if (!response.ok || typeof response.json !== 'function') {
59
+ throw new Error(`Failed to fetch revert reason: ${response.statusText || 'Unknown error'}`);
60
+ }
61
+ return response.json();
62
+ };
63
+ exports.fetchRevertReason = fetchRevertReason;
64
+ /**
65
+ * Fetch all OTC positions (admin-only `GET /otc/position`).
66
+ */
67
+ const fetchOtcPositions = async (augustKey, headers) => {
68
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.otc.positions, { headers });
69
+ if (!response.ok || typeof response.json !== 'function') {
70
+ throw new Error(`Failed to fetch OTC positions: ${response.statusText || 'Unknown error'}`);
71
+ }
72
+ return response.json();
73
+ };
74
+ exports.fetchOtcPositions = fetchOtcPositions;
75
+ /**
76
+ * Fetch OTC margin requirements (admin-only `GET /otc/margin_requirement`),
77
+ * optionally filtered by counterparty id and/or payer.
78
+ */
79
+ const fetchOtcMarginRequirements = async (filters, augustKey, headers) => {
80
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.otc.marginRequirements(filters.otcCounterpartyId, filters.payer), { headers });
81
+ if (!response.ok || typeof response.json !== 'function') {
82
+ throw new Error(`Failed to fetch OTC margin requirements: ${response.statusText || 'Unknown error'}`);
83
+ }
84
+ return response.json();
85
+ };
86
+ exports.fetchOtcMarginRequirements = fetchOtcMarginRequirements;
87
+ /**
88
+ * Fetch the subaccounts linked to a vault (curator-or-admin
89
+ * `GET /curator/vaults/{vault_address}/subaccounts`).
90
+ */
91
+ const fetchCuratorVaultSubaccounts = async (vaultAddress, augustKey, headers) => {
92
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.curator.vaultSubaccounts(vaultAddress), { headers });
93
+ if (!response.ok || typeof response.json !== 'function') {
94
+ throw new Error(`Failed to fetch curator vault subaccounts: ${response.statusText || 'Unknown error'}`);
95
+ }
96
+ return response.json();
97
+ };
98
+ exports.fetchCuratorVaultSubaccounts = fetchCuratorVaultSubaccounts;
99
+ /**
100
+ * Fetch on-chain whitelist status for a vault's subaccounts (curator-or-admin
101
+ * `GET /curator/vaults/{vault_address}/whitelist`). EVM vaults only — the
102
+ * backend 400s for non-EVM vaults.
103
+ */
104
+ const fetchCuratorVaultWhitelist = async (vaultAddress, augustKey, headers) => {
105
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.curator.vaultWhitelist(vaultAddress), { headers });
106
+ if (!response.ok || typeof response.json !== 'function') {
107
+ throw new Error(`Failed to fetch curator vault whitelist: ${response.statusText || 'Unknown error'}`);
108
+ }
109
+ return response.json();
110
+ };
111
+ exports.fetchCuratorVaultWhitelist = fetchCuratorVaultWhitelist;
112
+ /**
113
+ * Fetch timelock requests for a vault on a chain (`GET /timelock-requests`),
114
+ * optionally filtered by status.
115
+ */
116
+ const fetchTimelockRequests = async (params, augustKey, headers) => {
117
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.timelockRequests(params.vaultAddress, params.chainId, params.status), { headers });
118
+ if (!response.ok || typeof response.json !== 'function') {
119
+ throw new Error(`Failed to fetch timelock requests: ${response.statusText || 'Unknown error'}`);
120
+ }
121
+ return response.json();
122
+ };
123
+ exports.fetchTimelockRequests = fetchTimelockRequests;
124
+ /**
125
+ * Fetch a vault's performance-fee computation
126
+ * (`GET /metrics/vault_performance_fees`). Slow first call (pandas over full
127
+ * snapshot history); 20-minute server-side cache.
128
+ */
129
+ const fetchVaultPerformanceFees = async (params, augustKey, headers) => {
130
+ const response = await (0, core_1.fetchAugustWithKey)(augustKey, core_1.WEBSERVER_ENDPOINTS.metrics.vaultPerformanceFees(params), { headers });
131
+ if (!response.ok || typeof response.json !== 'function') {
132
+ throw new Error(`Failed to fetch vault performance fees: ${response.statusText || 'Unknown error'}`);
133
+ }
134
+ return response.json();
135
+ };
136
+ exports.fetchVaultPerformanceFees = fetchVaultPerformanceFees;
137
+ /**
138
+ * Fetch a vault's NAV-oracle classification table from the public
139
+ * `GET /upshift/oracle_classification/{vault_address}` endpoint. No API key
140
+ * required.
141
+ */
142
+ const fetchVaultOracleClassification = async (vaultAddress, chainId, headers) => {
143
+ const response = await (0, core_1.fetchAugustPublic)(core_1.WEBSERVER_ENDPOINTS.public.oracleClassification(vaultAddress, chainId), { headers });
144
+ if (!response.ok || typeof response.json !== 'function') {
145
+ throw new Error(`Failed to fetch vault oracle classification: ${response.statusText || 'Unknown error'}`);
146
+ }
147
+ return response.json();
148
+ };
149
+ exports.fetchVaultOracleClassification = fetchVaultOracleClassification;
150
+ //# sourceMappingURL=fetcher.js.map