Skip to content

Commit a3484de

Browse files
authored
Merge pull request #28 from aave/feat/vault-preview-methods
feat: support new vault preview queries
2 parents 972fd5b + 5528582 commit a3484de

File tree

3 files changed

+393
-0
lines changed

3 files changed

+393
-0
lines changed

packages/client/src/actions/vaults.ts

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
import {
22
type PaginatedVaultsResult,
3+
type TokenAmount,
34
UserVaultsQuery,
45
type UserVaultsRequest,
56
type Vault,
7+
VaultPreviewDepositQuery,
8+
type VaultPreviewDepositRequest,
9+
VaultPreviewMintQuery,
10+
type VaultPreviewMintRequest,
11+
VaultPreviewRedeemQuery,
12+
type VaultPreviewRedeemRequest,
13+
VaultPreviewWithdrawQuery,
14+
type VaultPreviewWithdrawRequest,
615
VaultQuery,
716
type VaultRequest,
817
VaultsQuery,
@@ -102,3 +111,119 @@ export function userVaults(
102111
request,
103112
});
104113
}
114+
115+
/**
116+
* Determines the amount of shares that would be received for a deposit.
117+
*
118+
* ```ts
119+
* const result = await vaultPreviewDeposit(client, {
120+
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
121+
* chainId: chainId(1),
122+
* amount: bigDecimal('1000'),
123+
* });
124+
*
125+
* if (result.isOk()) {
126+
* console.log('Shares to receive:', result.value.amount.value);
127+
* console.log('USD value:', result.value.usd);
128+
* }
129+
* ```
130+
*
131+
* @param client - Aave client.
132+
* @param request - The vault preview deposit request parameters.
133+
* @returns The simulated shares amount that would be received.
134+
*/
135+
export function vaultPreviewDeposit(
136+
client: AaveClient,
137+
request: VaultPreviewDepositRequest,
138+
): ResultAsync<TokenAmount, UnexpectedError> {
139+
return client.query(VaultPreviewDepositQuery, {
140+
request,
141+
});
142+
}
143+
144+
/**
145+
* Determines the amount of assets that would be required to mint a specific amount of vault shares.
146+
*
147+
* ```ts
148+
* const result = await vaultPreviewMint(client, {
149+
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
150+
* chainId: chainId(1),
151+
* amount: bigDecimal('500'),
152+
* });
153+
*
154+
* if (result.isOk()) {
155+
* console.log('Assets required:', result.value.amount.value);
156+
* console.log('USD value:', result.value.usd);
157+
* }
158+
* ```
159+
*
160+
* @param client - Aave client.
161+
* @param request - The vault preview mint request parameters.
162+
* @returns The simulated assets amount that would be required.
163+
*/
164+
export function vaultPreviewMint(
165+
client: AaveClient,
166+
request: VaultPreviewMintRequest,
167+
): ResultAsync<TokenAmount, UnexpectedError> {
168+
return client.query(VaultPreviewMintQuery, {
169+
request,
170+
});
171+
}
172+
173+
/**
174+
* Determines the amount of shares that would be burned for a withdrawal.
175+
*
176+
* ```ts
177+
* const result = await vaultPreviewWithdraw(client, {
178+
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
179+
* chainId: chainId(1),
180+
* amount: bigDecimal('750'),
181+
* });
182+
*
183+
* if (result.isOk()) {
184+
* console.log('Shares to burn:', result.value.amount.value);
185+
* console.log('USD value:', result.value.usd);
186+
* }
187+
* ```
188+
*
189+
* @param client - Aave client.
190+
* @param request - The vault preview withdraw request parameters.
191+
* @returns The simulated shares amount that would be burned.
192+
*/
193+
export function vaultPreviewWithdraw(
194+
client: AaveClient,
195+
request: VaultPreviewWithdrawRequest,
196+
): ResultAsync<TokenAmount, UnexpectedError> {
197+
return client.query(VaultPreviewWithdrawQuery, {
198+
request,
199+
});
200+
}
201+
202+
/**
203+
* Determines the amount of assets that would be received for redeeming a specific amount of vault shares.
204+
*
205+
* ```ts
206+
* const result = await vaultPreviewRedeem(client, {
207+
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
208+
* chainId: chainId(1),
209+
* amount: bigDecimal('200'),
210+
* });
211+
*
212+
* if (result.isOk()) {
213+
* console.log('Assets to receive:', result.value.amount.value);
214+
* console.log('USD value:', result.value.usd);
215+
* }
216+
* ```
217+
*
218+
* @param client - Aave client.
219+
* @param request - The vault preview redeem request parameters.
220+
* @returns The simulated assets amount that would be received.
221+
*/
222+
export function vaultPreviewRedeem(
223+
client: AaveClient,
224+
request: VaultPreviewRedeemRequest,
225+
): ResultAsync<TokenAmount, UnexpectedError> {
226+
return client.query(VaultPreviewRedeemQuery, {
227+
request,
228+
});
229+
}

packages/graphql/src/vaults.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { TokenAmountFragment } from './fragments/common';
12
import {
23
PaginatedVaultsResultFragment,
34
VaultFragment,
@@ -42,3 +43,61 @@ export const UserVaultsQuery = graphql(
4243
[PaginatedVaultsResultFragment],
4344
);
4445
export type UserVaultsRequest = RequestOf<typeof UserVaultsQuery>;
46+
47+
/**
48+
* @internal
49+
*/
50+
export const VaultPreviewDepositQuery = graphql(
51+
`query VaultPreviewDeposit($request: VaultOperationPreviewRequest!) {
52+
value: vaultPreviewDeposit(request: $request) {
53+
...TokenAmount
54+
}
55+
}`,
56+
[TokenAmountFragment],
57+
);
58+
export type VaultPreviewDepositRequest = RequestOf<
59+
typeof VaultPreviewDepositQuery
60+
>;
61+
62+
/**
63+
* @internal
64+
*/
65+
export const VaultPreviewMintQuery = graphql(
66+
`query VaultPreviewMint($request: VaultOperationPreviewRequest!) {
67+
value: vaultPreviewMint(request: $request) {
68+
...TokenAmount
69+
}
70+
}`,
71+
[TokenAmountFragment],
72+
);
73+
export type VaultPreviewMintRequest = RequestOf<typeof VaultPreviewMintQuery>;
74+
75+
/**
76+
* @internal
77+
*/
78+
export const VaultPreviewWithdrawQuery = graphql(
79+
`query VaultPreviewWithdraw($request: VaultOperationPreviewRequest!) {
80+
value: vaultPreviewWithdraw(request: $request) {
81+
...TokenAmount
82+
}
83+
}`,
84+
[TokenAmountFragment],
85+
);
86+
export type VaultPreviewWithdrawRequest = RequestOf<
87+
typeof VaultPreviewWithdrawQuery
88+
>;
89+
90+
/**
91+
* @internal
92+
*/
93+
export const VaultPreviewRedeemQuery = graphql(
94+
`query VaultPreviewRedeem($request: VaultOperationPreviewRequest!) {
95+
value: vaultPreviewRedeem(request: $request) {
96+
...TokenAmount
97+
}
98+
}`,
99+
[TokenAmountFragment],
100+
);
101+
export type VaultPreviewRedeemRequest = RequestOf<
102+
typeof VaultPreviewRedeemQuery
103+
>;

0 commit comments

Comments
 (0)