@lagoon-protocol/lagoon-mcp 0.5.0 → 0.6.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.
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/core/container.js +1 -1
- package/dist/graphql/fragments/transaction-base.fragment.d.ts +1 -1
- package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -1
- package/dist/graphql/fragments/transaction-base.fragment.js +0 -1
- package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -1
- package/dist/graphql/fragments/vault.fragment.d.ts +2 -1
- package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -1
- package/dist/graphql/fragments/vault.fragment.js +1 -0
- package/dist/graphql/fragments/vault.fragment.js.map +1 -1
- package/dist/graphql/queries/export.queries.d.ts +5 -7
- package/dist/graphql/queries/export.queries.d.ts.map +1 -1
- package/dist/graphql/queries/export.queries.js +22 -28
- package/dist/graphql/queries/export.queries.js.map +1 -1
- package/dist/graphql/queries/index.d.ts +3 -3
- package/dist/graphql/queries/index.d.ts.map +1 -1
- package/dist/graphql/queries/index.js +3 -3
- package/dist/graphql/queries/index.js.map +1 -1
- package/dist/graphql/queries/performance.queries.d.ts +6 -4
- package/dist/graphql/queries/performance.queries.d.ts.map +1 -1
- package/dist/graphql/queries/performance.queries.js +5 -11
- package/dist/graphql/queries/performance.queries.js.map +1 -1
- package/dist/graphql/queries/portfolio.queries.d.ts +5 -11
- package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -1
- package/dist/graphql/queries/portfolio.queries.js +14 -87
- package/dist/graphql/queries/portfolio.queries.js.map +1 -1
- package/dist/graphql/queries/prediction.queries.d.ts +13 -15
- package/dist/graphql/queries/prediction.queries.d.ts.map +1 -1
- package/dist/graphql/queries/prediction.queries.js +12 -31
- package/dist/graphql/queries/prediction.queries.js.map +1 -1
- package/dist/graphql/queries/risk.queries.d.ts +3 -3
- package/dist/graphql/queries/risk.queries.d.ts.map +1 -1
- package/dist/graphql/queries/risk.queries.js +7 -22
- package/dist/graphql/queries/risk.queries.js.map +1 -1
- package/dist/graphql/queries/search.queries.d.ts.map +1 -1
- package/dist/graphql/queries/search.queries.js +6 -2
- package/dist/graphql/queries/search.queries.js.map +1 -1
- package/dist/graphql/queries/transaction.queries.d.ts +6 -26
- package/dist/graphql/queries/transaction.queries.d.ts.map +1 -1
- package/dist/graphql/queries/transaction.queries.js +227 -59
- package/dist/graphql/queries/transaction.queries.js.map +1 -1
- package/dist/graphql/queries/vault.queries.d.ts +21 -3
- package/dist/graphql/queries/vault.queries.d.ts.map +1 -1
- package/dist/graphql/queries/vault.queries.js +38 -0
- package/dist/graphql/queries/vault.queries.js.map +1 -1
- package/dist/services/analytics/risk.service.d.ts +9 -12
- package/dist/services/analytics/risk.service.d.ts.map +1 -1
- package/dist/services/analytics/risk.service.js +28 -30
- package/dist/services/analytics/risk.service.js.map +1 -1
- package/dist/tools/compare-vaults.d.ts.map +1 -1
- package/dist/tools/compare-vaults.js +6 -3
- package/dist/tools/compare-vaults.js.map +1 -1
- package/dist/tools/export-data.d.ts.map +1 -1
- package/dist/tools/export-data.js +10 -16
- package/dist/tools/export-data.js.map +1 -1
- package/dist/tools/get-price-history.d.ts.map +1 -1
- package/dist/tools/get-price-history.js +55 -63
- package/dist/tools/get-price-history.js.map +1 -1
- package/dist/tools/get-transactions.d.ts.map +1 -1
- package/dist/tools/get-transactions.js +3 -1
- package/dist/tools/get-transactions.js.map +1 -1
- package/dist/tools/optimize-portfolio.d.ts.map +1 -1
- package/dist/tools/optimize-portfolio.js +6 -17
- package/dist/tools/optimize-portfolio.js.map +1 -1
- package/dist/tools/predict-yield.d.ts.map +1 -1
- package/dist/tools/predict-yield.js +36 -9
- package/dist/tools/predict-yield.js.map +1 -1
- package/dist/tools/search-vaults.d.ts.map +1 -1
- package/dist/tools/search-vaults.js +9 -2
- package/dist/tools/search-vaults.js.map +1 -1
- package/dist/tools/vault-performance.d.ts.map +1 -1
- package/dist/tools/vault-performance.js +7 -19
- package/dist/tools/vault-performance.js.map +1 -1
- package/dist/types/generated.d.ts +811 -19
- package/dist/types/generated.d.ts.map +1 -1
- package/dist/utils/csv-generator.d.ts +4 -1
- package/dist/utils/csv-generator.d.ts.map +1 -1
- package/dist/utils/csv-generator.js +8 -4
- package/dist/utils/csv-generator.js.map +1 -1
- package/dist/utils/tool-error-handler.d.ts.map +1 -1
- package/dist/utils/tool-error-handler.js +8 -6
- package/dist/utils/tool-error-handler.js.map +1 -1
- package/dist/utils/validators.d.ts +9 -3
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +49 -3
- package/dist/utils/validators.js.map +1 -1
- package/dist/utils/yield-prediction.d.ts +3 -0
- package/dist/utils/yield-prediction.d.ts.map +1 -1
- package/dist/utils/yield-prediction.js +13 -1
- package/dist/utils/yield-prediction.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* GraphQL queries for transaction data operations.
|
|
5
5
|
* Includes transaction history and price history queries.
|
|
6
6
|
*/
|
|
7
|
-
import { TRANSACTION_BASE_FRAGMENT, PAGEINFO_FULL_FRAGMENT
|
|
7
|
+
import { TRANSACTION_BASE_FRAGMENT, PAGEINFO_FULL_FRAGMENT } from '../fragments/index.js';
|
|
8
8
|
/**
|
|
9
9
|
* GraphQL query for fetching vault transactions with all union type variants
|
|
10
10
|
*
|
|
@@ -18,6 +18,11 @@ import { TRANSACTION_BASE_FRAGMENT, PAGEINFO_FULL_FRAGMENT, PAGEINFO_MINIMAL_FRA
|
|
|
18
18
|
*
|
|
19
19
|
* Used by: get_transactions tool
|
|
20
20
|
*
|
|
21
|
+
* Aliases: AccessModeUpdated.newMode and SyncModeUpdated.newMode return
|
|
22
|
+
* different enum types (AccessMode! vs SyncMode!) — they're aliased to
|
|
23
|
+
* `newAccessMode` and `newSyncMode`/`oldSyncMode` so both can appear in the
|
|
24
|
+
* same selection set without a GraphQL field-conflict error.
|
|
25
|
+
*
|
|
21
26
|
* Usage:
|
|
22
27
|
* ```typescript
|
|
23
28
|
* const response = await graphqlClient.request<TransactionsResponse>(
|
|
@@ -109,7 +114,6 @@ export const TRANSACTIONS_QUERY = `
|
|
|
109
114
|
... on NewTotalAssetsUpdated {
|
|
110
115
|
totalAssets
|
|
111
116
|
totalAssetsUsd
|
|
112
|
-
totalSupply
|
|
113
117
|
vault {
|
|
114
118
|
id
|
|
115
119
|
address
|
|
@@ -119,7 +123,6 @@ export const TRANSACTIONS_QUERY = `
|
|
|
119
123
|
... on TotalAssetsUpdated {
|
|
120
124
|
totalAssets
|
|
121
125
|
totalAssetsUsd
|
|
122
|
-
totalSupply
|
|
123
126
|
vault {
|
|
124
127
|
id
|
|
125
128
|
address
|
|
@@ -164,6 +167,9 @@ export const TRANSACTIONS_QUERY = `
|
|
|
164
167
|
newRates {
|
|
165
168
|
performanceRate
|
|
166
169
|
managementRate
|
|
170
|
+
entryRate
|
|
171
|
+
exitRate
|
|
172
|
+
haircutRate
|
|
167
173
|
}
|
|
168
174
|
vault {
|
|
169
175
|
id
|
|
@@ -179,60 +185,222 @@ export const TRANSACTIONS_QUERY = `
|
|
|
179
185
|
symbol
|
|
180
186
|
}
|
|
181
187
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
188
|
+
... on Deposit {
|
|
189
|
+
owner
|
|
190
|
+
sender
|
|
191
|
+
assets
|
|
192
|
+
shares
|
|
193
|
+
vault {
|
|
194
|
+
id
|
|
195
|
+
address
|
|
196
|
+
symbol
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
... on Withdraw {
|
|
200
|
+
owner
|
|
201
|
+
sender
|
|
202
|
+
receiver
|
|
203
|
+
assets
|
|
204
|
+
shares
|
|
205
|
+
vault {
|
|
206
|
+
id
|
|
207
|
+
address
|
|
208
|
+
symbol
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
... on WithdrawSync {
|
|
212
|
+
owner
|
|
213
|
+
sender
|
|
214
|
+
receiver
|
|
215
|
+
assets
|
|
216
|
+
shares
|
|
217
|
+
vault {
|
|
218
|
+
id
|
|
219
|
+
address
|
|
220
|
+
symbol
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
... on RedeemRequestCanceled {
|
|
224
|
+
controller
|
|
225
|
+
requestId
|
|
226
|
+
requestedAmount
|
|
227
|
+
vault {
|
|
228
|
+
id
|
|
229
|
+
address
|
|
230
|
+
symbol
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
... on FeeTaken {
|
|
234
|
+
feeType
|
|
235
|
+
shares
|
|
236
|
+
managerShares
|
|
237
|
+
protocolShares
|
|
238
|
+
rate
|
|
239
|
+
contextId
|
|
240
|
+
vault {
|
|
241
|
+
id
|
|
242
|
+
address
|
|
243
|
+
symbol
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
... on HaircutTaken {
|
|
247
|
+
owner
|
|
248
|
+
shares
|
|
249
|
+
rate
|
|
250
|
+
vault {
|
|
251
|
+
id
|
|
252
|
+
address
|
|
253
|
+
symbol
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
... on PreMint {
|
|
257
|
+
sender
|
|
258
|
+
receiver
|
|
259
|
+
assets
|
|
260
|
+
shares
|
|
261
|
+
vault {
|
|
262
|
+
id
|
|
263
|
+
address
|
|
264
|
+
symbol
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
... on AccessModeUpdated {
|
|
268
|
+
newAccessMode: newMode
|
|
269
|
+
vault {
|
|
270
|
+
id
|
|
271
|
+
address
|
|
272
|
+
symbol
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
... on AsyncOnlyActivated {
|
|
276
|
+
vault {
|
|
277
|
+
id
|
|
278
|
+
address
|
|
279
|
+
symbol
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
... on NameUpdated {
|
|
283
|
+
previousName
|
|
284
|
+
newName
|
|
285
|
+
vault {
|
|
286
|
+
id
|
|
287
|
+
address
|
|
288
|
+
symbol
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
... on SymbolUpdated {
|
|
292
|
+
previousSymbol
|
|
293
|
+
newSymbol
|
|
294
|
+
vault {
|
|
295
|
+
id
|
|
296
|
+
address
|
|
297
|
+
symbol
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
... on MaxCapUpdated {
|
|
301
|
+
previousMaxCap
|
|
302
|
+
maxCap
|
|
303
|
+
vault {
|
|
304
|
+
id
|
|
305
|
+
address
|
|
306
|
+
symbol
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
... on SyncModeUpdated {
|
|
310
|
+
oldSyncMode: oldMode
|
|
311
|
+
newSyncMode: newMode
|
|
312
|
+
vault {
|
|
313
|
+
id
|
|
314
|
+
address
|
|
315
|
+
symbol
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
... on SafeUpdated {
|
|
319
|
+
oldSafe
|
|
320
|
+
newSafe
|
|
321
|
+
vault {
|
|
322
|
+
id
|
|
323
|
+
address
|
|
324
|
+
symbol
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
... on SecurityCouncilUpdated {
|
|
328
|
+
oldSecurityCouncil
|
|
329
|
+
newSecurityCouncil
|
|
330
|
+
vault {
|
|
331
|
+
id
|
|
332
|
+
address
|
|
333
|
+
symbol
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
... on SuperOperatorUpdated {
|
|
337
|
+
oldSuperOperator
|
|
338
|
+
newSuperOperator
|
|
339
|
+
vault {
|
|
340
|
+
id
|
|
341
|
+
address
|
|
342
|
+
symbol
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
... on TotalAssetsExpirationUpdated {
|
|
346
|
+
oldExpiration
|
|
347
|
+
newExpiration
|
|
348
|
+
vault {
|
|
349
|
+
id
|
|
350
|
+
address
|
|
351
|
+
symbol
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
... on ProxyDeployed {
|
|
355
|
+
deployer
|
|
356
|
+
factoryAddress
|
|
357
|
+
proxy
|
|
358
|
+
vault {
|
|
359
|
+
id
|
|
360
|
+
address
|
|
361
|
+
symbol
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
... on BlacklistUpdated {
|
|
365
|
+
account
|
|
366
|
+
blacklisted
|
|
367
|
+
vault {
|
|
368
|
+
id
|
|
369
|
+
address
|
|
370
|
+
symbol
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
... on WhitelistUpdated {
|
|
374
|
+
account
|
|
375
|
+
authorized
|
|
376
|
+
vault {
|
|
377
|
+
id
|
|
378
|
+
address
|
|
379
|
+
symbol
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
... on ExternalSanctionsListUpdated {
|
|
383
|
+
oldExternalSanctionList
|
|
384
|
+
newExternalSanctionList
|
|
385
|
+
vault {
|
|
386
|
+
id
|
|
387
|
+
address
|
|
388
|
+
symbol
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
... on GuardrailsUpdated {
|
|
392
|
+
oldLowerRate
|
|
393
|
+
newLowerRate
|
|
394
|
+
oldUpperRate
|
|
395
|
+
newUpperRate
|
|
396
|
+
vault {
|
|
397
|
+
id
|
|
398
|
+
address
|
|
399
|
+
symbol
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
... on GuardrailsStatusUpdated {
|
|
403
|
+
activated
|
|
236
404
|
vault {
|
|
237
405
|
id
|
|
238
406
|
address
|
|
@@ -242,11 +410,11 @@ export const PRICE_HISTORY_QUERY = `
|
|
|
242
410
|
}
|
|
243
411
|
}
|
|
244
412
|
pageInfo {
|
|
245
|
-
...
|
|
413
|
+
...PageInfoFullFragment
|
|
246
414
|
}
|
|
247
415
|
}
|
|
248
416
|
}
|
|
249
417
|
${TRANSACTION_BASE_FRAGMENT}
|
|
250
|
-
${
|
|
418
|
+
${PAGEINFO_FULL_FRAGMENT}
|
|
251
419
|
`;
|
|
252
420
|
//# sourceMappingURL=transaction.queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/transaction.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"transaction.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/transaction.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyX9B,yBAAyB;IACzB,sBAAsB;CACzB,CAAC"}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* );
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
|
-
export declare const GET_VAULT_DATA_QUERY = "\n query GetVaultData($address: Address!, $chainId: Int!) {\n vaultByAddress(address: $address, chainId: $chainId) {\n ...VaultFragment\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n bundles {\n octav\n debank\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
|
|
23
|
+
export declare const GET_VAULT_DATA_QUERY = "\n query GetVaultData($address: Address!, $chainId: Int!) {\n vaultByAddress(address: $address, chainId: $chainId) {\n ...VaultFragment\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n creationDate\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n bundles {\n octav\n debank\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
|
|
24
24
|
/**
|
|
25
25
|
* Query to fetch vault data for APR calculation
|
|
26
26
|
*
|
|
@@ -35,7 +35,7 @@ export declare const GET_VAULT_DATA_QUERY = "\n query GetVaultData($address: Ad
|
|
|
35
35
|
* );
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
|
-
export declare const GET_VAULT_FOR_APR_QUERY = "\n query GetVaultForAPR($address: Address!, $chainId: Int!) {\n vaultByAddress(address: $address, chainId: $chainId) {\n ...VaultFragment\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n bundles {\n octav\n debank\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
|
|
38
|
+
export declare const GET_VAULT_FOR_APR_QUERY = "\n query GetVaultForAPR($address: Address!, $chainId: Int!) {\n vaultByAddress(address: $address, chainId: $chainId) {\n ...VaultFragment\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n creationDate\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n bundles {\n octav\n debank\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
|
|
39
39
|
/**
|
|
40
40
|
* GraphQL query for batch vault comparison
|
|
41
41
|
*
|
|
@@ -51,7 +51,7 @@ export declare const GET_VAULT_FOR_APR_QUERY = "\n query GetVaultForAPR($addres
|
|
|
51
51
|
* );
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
export declare const COMPARE_VAULTS_QUERY = "\n query CompareVaults($addresses: [String!]!, $chainIds: [Int!]!) {\n vaults(where: { address_in: $addresses, chainId_in: $chainIds }) {\n items {\n ...VaultFragment\n }\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n bundles {\n octav\n debank\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
|
|
54
|
+
export declare const COMPARE_VAULTS_QUERY = "\n query CompareVaults($addresses: [String!]!, $chainIds: [Int!]!) {\n vaults(where: { address_in: $addresses, chainId_in: $chainIds }) {\n items {\n ...VaultFragment\n }\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n creationDate\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n bundles {\n octav\n debank\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
|
|
55
55
|
/**
|
|
56
56
|
* GraphQL query for vault creation timestamp
|
|
57
57
|
*
|
|
@@ -108,4 +108,22 @@ export interface BatchVaultFirstTransactionsResponse {
|
|
|
108
108
|
}>;
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Historical price-per-share series for a single vault.
|
|
113
|
+
*
|
|
114
|
+
* Used by: get_price_history tool. The `options` variable accepts a
|
|
115
|
+
* `TimeRangeOptions` window (`startTimestamp`/`endTimestamp`); pass `null` for
|
|
116
|
+
* full history since vault creation. Each series caps at 1000 most recent
|
|
117
|
+
* points per backend rate-limiting policy — there is no pagination cursor, so
|
|
118
|
+
* consumers narrow the window via `options` rather than paging.
|
|
119
|
+
*
|
|
120
|
+
* Usage:
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const data = await graphqlClient.request<PriceHistoryResponse>(
|
|
123
|
+
* PRICE_HISTORY_QUERY,
|
|
124
|
+
* { vaultAddress: '0x...', chainId: 1, options: { startTimestamp: 1700000000 } }
|
|
125
|
+
* );
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export declare const PRICE_HISTORY_QUERY = "\n query GetPriceHistory(\n $vaultAddress: Address!,\n $chainId: Int!,\n $options: TimeRangeOptions\n ) {\n vault: vaultByAddress(address: $vaultAddress, chainId: $chainId) {\n address\n stateHistory {\n pricePerShareUsd(options: $options) {\n x\n y\n }\n totalAssetsUsd(options: $options) {\n x\n y\n }\n }\n }\n }\n";
|
|
111
129
|
//# sourceMappingURL=vault.queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/vault.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"vault.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/vault.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,i7FAOhC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,m7FAOnC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,oBAAoB,g+FAShC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,6BAA6B,wQAazC,CAAC;AAyBF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,oCAAoC,i/BAiBhD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC;YACX,IAAI,EAAE;gBACJ,KAAK,CAAC,EAAE;oBACN,OAAO,EAAE,MAAM,CAAC;iBACjB,CAAC;aACH,CAAC;YACF,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,mBAAmB,maAoB/B,CAAC"}
|
|
@@ -169,4 +169,42 @@ export const BATCH_VAULT_FIRST_TRANSACTIONS_QUERY = `
|
|
|
169
169
|
}
|
|
170
170
|
${TRANSACTION_VAULT_FRAGMENT}
|
|
171
171
|
`;
|
|
172
|
+
/**
|
|
173
|
+
* Historical price-per-share series for a single vault.
|
|
174
|
+
*
|
|
175
|
+
* Used by: get_price_history tool. The `options` variable accepts a
|
|
176
|
+
* `TimeRangeOptions` window (`startTimestamp`/`endTimestamp`); pass `null` for
|
|
177
|
+
* full history since vault creation. Each series caps at 1000 most recent
|
|
178
|
+
* points per backend rate-limiting policy — there is no pagination cursor, so
|
|
179
|
+
* consumers narrow the window via `options` rather than paging.
|
|
180
|
+
*
|
|
181
|
+
* Usage:
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const data = await graphqlClient.request<PriceHistoryResponse>(
|
|
184
|
+
* PRICE_HISTORY_QUERY,
|
|
185
|
+
* { vaultAddress: '0x...', chainId: 1, options: { startTimestamp: 1700000000 } }
|
|
186
|
+
* );
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export const PRICE_HISTORY_QUERY = `
|
|
190
|
+
query GetPriceHistory(
|
|
191
|
+
$vaultAddress: Address!,
|
|
192
|
+
$chainId: Int!,
|
|
193
|
+
$options: TimeRangeOptions
|
|
194
|
+
) {
|
|
195
|
+
vault: vaultByAddress(address: $vaultAddress, chainId: $chainId) {
|
|
196
|
+
address
|
|
197
|
+
stateHistory {
|
|
198
|
+
pricePerShareUsd(options: $options) {
|
|
199
|
+
x
|
|
200
|
+
y
|
|
201
|
+
}
|
|
202
|
+
totalAssetsUsd(options: $options) {
|
|
203
|
+
x
|
|
204
|
+
y
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
`;
|
|
172
210
|
//# sourceMappingURL=vault.queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/vault.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;IAMhC,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;IAMnC,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;IAQhC,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;CAa5C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;CAelC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG;;;;;;;;;;;;;;;;IAgBhD,0BAA0B;CAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"vault.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/vault.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;IAMhC,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;IAMnC,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;IAQhC,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;CAa5C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;CAelC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG;;;;;;;;;;;;;;;;IAgBhD,0BAA0B;CAC7B,CAAC;AAkBF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;CAoBlC,CAAC"}
|
|
@@ -8,8 +8,11 @@ import { BaseService } from '../base.service.js';
|
|
|
8
8
|
import { VaultData, VaultCompositionFullResponse } from '../../graphql/fragments/index.js';
|
|
9
9
|
import { RiskScoreBreakdown } from '../../utils/risk-scoring.js';
|
|
10
10
|
/**
|
|
11
|
-
* Risk analysis input data extracted from GraphQL
|
|
12
|
-
*
|
|
11
|
+
* Risk analysis input data extracted from GraphQL.
|
|
12
|
+
* `priceHistory` is pre-projected to {timestamp, pricePerShareUsd} pairs and
|
|
13
|
+
* already filtered for null/non-positive values; downstream code can iterate
|
|
14
|
+
* without re-checking. Uses assetByProtocols from Octav API for protocol-based
|
|
15
|
+
* diversification analysis.
|
|
13
16
|
*/
|
|
14
17
|
export interface RiskAnalysisData {
|
|
15
18
|
vault: VaultData;
|
|
@@ -28,16 +31,10 @@ export interface RiskAnalysisData {
|
|
|
28
31
|
};
|
|
29
32
|
}>;
|
|
30
33
|
};
|
|
31
|
-
priceHistory: {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
totalAssets: string;
|
|
36
|
-
totalAssetsUsd: number;
|
|
37
|
-
totalSupply: string;
|
|
38
|
-
};
|
|
39
|
-
}>;
|
|
40
|
-
};
|
|
34
|
+
priceHistory: Array<{
|
|
35
|
+
timestamp: number;
|
|
36
|
+
pricePerShareUsd: number;
|
|
37
|
+
}>;
|
|
41
38
|
composition: VaultCompositionFullResponse | null;
|
|
42
39
|
}
|
|
43
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"risk.service.d.ts","sourceRoot":"","sources":["../../../src/services/analytics/risk.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,SAAS,EACT,4BAA4B,EAE7B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,EAAe,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAE9E
|
|
1
|
+
{"version":3,"file":"risk.service.d.ts","sourceRoot":"","sources":["../../../src/services/analytics/risk.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,19 +17,23 @@ export class RiskService extends BaseService {
|
|
|
17
17
|
*/
|
|
18
18
|
async fetchRiskData(vaultAddress, chainId) {
|
|
19
19
|
// Fetch main risk data (without composition - it's fetched separately)
|
|
20
|
-
const
|
|
20
|
+
const raw = await this.client.request(RISK_ANALYSIS_QUERY, {
|
|
21
21
|
vaultAddress,
|
|
22
22
|
chainId,
|
|
23
23
|
curatorId: '', // Will be extracted from vault.curators after fetch
|
|
24
|
-
where: {
|
|
25
|
-
vault_in: [vaultAddress],
|
|
26
|
-
type_in: ['TotalAssetsUpdated'],
|
|
27
|
-
},
|
|
28
|
-
orderBy: 'timestamp',
|
|
29
|
-
orderDirection: 'asc',
|
|
30
24
|
});
|
|
31
|
-
if (!
|
|
25
|
+
if (!raw.vault)
|
|
32
26
|
return null;
|
|
27
|
+
const { stateHistory, ...vault } = raw.vault;
|
|
28
|
+
const priceHistory = stateHistory.pricePerShareUsd
|
|
29
|
+
.filter((p) => p.y !== null && p.y > 0)
|
|
30
|
+
.map((p) => ({ timestamp: p.x, pricePerShareUsd: p.y }));
|
|
31
|
+
const data = {
|
|
32
|
+
vault,
|
|
33
|
+
allVaults: raw.allVaults,
|
|
34
|
+
curatorVaults: raw.curatorVaults,
|
|
35
|
+
priceHistory,
|
|
36
|
+
};
|
|
33
37
|
// Fetch composition separately using correct addresses from bundles.octav
|
|
34
38
|
// This uses graceful degradation - if composition fails, we continue without it
|
|
35
39
|
const composition = await this.fetchCompositionForVault(data.vault);
|
|
@@ -43,25 +47,18 @@ export class RiskService extends BaseService {
|
|
|
43
47
|
const vaultTVL = data.vault.state?.totalAssetsUsd || 0;
|
|
44
48
|
// Calculate total protocol TVL
|
|
45
49
|
const totalProtocolTVL = data.allVaults.items.reduce((sum, v) => sum + (v.state?.totalAssetsUsd || 0), 0);
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// Filter out items with missing or zero totalSupply
|
|
51
|
-
const totalSupply = item.data?.totalSupply;
|
|
52
|
-
return totalSupply && parseFloat(totalSupply) > 0 && item.data?.totalAssetsUsd > 0;
|
|
53
|
-
})
|
|
54
|
-
.map((item) => {
|
|
55
|
-
// Calculate price per share from totalAssetsUsd / totalSupply
|
|
56
|
-
const totalSupply = parseFloat(item.data.totalSupply) / 1e18; // Convert from wei
|
|
57
|
-
return item.data.totalAssetsUsd / totalSupply;
|
|
58
|
-
});
|
|
59
|
-
// Calculate vault age in days from first transaction
|
|
50
|
+
const priceHistory = data.priceHistory.map((p) => p.pricePerShareUsd);
|
|
51
|
+
// Falls back to first state-history point, then a 1-year default. The
|
|
52
|
+
// fallbacks exist so fixtures without `creationDate` and brand-new vaults
|
|
53
|
+
// (no history yet) still produce a usable age signal for the risk model.
|
|
60
54
|
const now = Math.floor(Date.now() / 1000);
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
55
|
+
const creationDate = data.vault.creationDate;
|
|
56
|
+
const firstPoint = data.priceHistory[0];
|
|
57
|
+
const createdAtTimestamp = typeof creationDate === 'number' && creationDate > 0
|
|
58
|
+
? creationDate
|
|
59
|
+
: firstPoint
|
|
60
|
+
? firstPoint.timestamp
|
|
61
|
+
: now - 365 * 24 * 60 * 60;
|
|
65
62
|
const ageInDays = Math.floor((now - createdAtTimestamp) / (24 * 60 * 60));
|
|
66
63
|
// Get curator vault count
|
|
67
64
|
const curatorVaultCount = data.curatorVaults.items.length;
|
|
@@ -76,9 +73,10 @@ export class RiskService extends BaseService {
|
|
|
76
73
|
multipleCurators: curators.length > 1,
|
|
77
74
|
curatorCount: curators.length,
|
|
78
75
|
};
|
|
79
|
-
// Extract fee data
|
|
80
|
-
|
|
81
|
-
const
|
|
76
|
+
// Extract fee data. GraphQL returns fees as uint16 basis points
|
|
77
|
+
// (10000 = 100%); convert to percent for calculateFeeRisk's bucket thresholds.
|
|
78
|
+
const managementFee = (data.vault.state?.managementFee || 0) / 100;
|
|
79
|
+
const performanceFee = (data.vault.state?.performanceFee || 0) / 100;
|
|
82
80
|
const pricePerShare = BigInt(data.vault.state?.pricePerShare || '0');
|
|
83
81
|
const highWaterMark = BigInt(data.vault.state?.highWaterMark || '0');
|
|
84
82
|
const performanceFeeActive = pricePerShare > highWaterMark;
|
|
@@ -730,7 +728,7 @@ ${detailedDataQualitySection}`;
|
|
|
730
728
|
vault,
|
|
731
729
|
allVaults: allVaultsContext,
|
|
732
730
|
curatorVaults: { items: [] }, // Skip curator vaults for batch efficiency
|
|
733
|
-
priceHistory:
|
|
731
|
+
priceHistory: [], // Skip price history for batch efficiency
|
|
734
732
|
composition, // Include composition for protocol diversification risk
|
|
735
733
|
};
|
|
736
734
|
// Calculate risk breakdown
|