@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.
Files changed (92) hide show
  1. package/dist/config.d.ts +1 -1
  2. package/dist/config.js +1 -1
  3. package/dist/core/container.js +1 -1
  4. package/dist/graphql/fragments/transaction-base.fragment.d.ts +1 -1
  5. package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -1
  6. package/dist/graphql/fragments/transaction-base.fragment.js +0 -1
  7. package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -1
  8. package/dist/graphql/fragments/vault.fragment.d.ts +2 -1
  9. package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -1
  10. package/dist/graphql/fragments/vault.fragment.js +1 -0
  11. package/dist/graphql/fragments/vault.fragment.js.map +1 -1
  12. package/dist/graphql/queries/export.queries.d.ts +5 -7
  13. package/dist/graphql/queries/export.queries.d.ts.map +1 -1
  14. package/dist/graphql/queries/export.queries.js +22 -28
  15. package/dist/graphql/queries/export.queries.js.map +1 -1
  16. package/dist/graphql/queries/index.d.ts +3 -3
  17. package/dist/graphql/queries/index.d.ts.map +1 -1
  18. package/dist/graphql/queries/index.js +3 -3
  19. package/dist/graphql/queries/index.js.map +1 -1
  20. package/dist/graphql/queries/performance.queries.d.ts +6 -4
  21. package/dist/graphql/queries/performance.queries.d.ts.map +1 -1
  22. package/dist/graphql/queries/performance.queries.js +5 -11
  23. package/dist/graphql/queries/performance.queries.js.map +1 -1
  24. package/dist/graphql/queries/portfolio.queries.d.ts +5 -11
  25. package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -1
  26. package/dist/graphql/queries/portfolio.queries.js +14 -87
  27. package/dist/graphql/queries/portfolio.queries.js.map +1 -1
  28. package/dist/graphql/queries/prediction.queries.d.ts +13 -15
  29. package/dist/graphql/queries/prediction.queries.d.ts.map +1 -1
  30. package/dist/graphql/queries/prediction.queries.js +12 -31
  31. package/dist/graphql/queries/prediction.queries.js.map +1 -1
  32. package/dist/graphql/queries/risk.queries.d.ts +3 -3
  33. package/dist/graphql/queries/risk.queries.d.ts.map +1 -1
  34. package/dist/graphql/queries/risk.queries.js +7 -22
  35. package/dist/graphql/queries/risk.queries.js.map +1 -1
  36. package/dist/graphql/queries/search.queries.d.ts.map +1 -1
  37. package/dist/graphql/queries/search.queries.js +6 -2
  38. package/dist/graphql/queries/search.queries.js.map +1 -1
  39. package/dist/graphql/queries/transaction.queries.d.ts +6 -26
  40. package/dist/graphql/queries/transaction.queries.d.ts.map +1 -1
  41. package/dist/graphql/queries/transaction.queries.js +227 -59
  42. package/dist/graphql/queries/transaction.queries.js.map +1 -1
  43. package/dist/graphql/queries/vault.queries.d.ts +21 -3
  44. package/dist/graphql/queries/vault.queries.d.ts.map +1 -1
  45. package/dist/graphql/queries/vault.queries.js +38 -0
  46. package/dist/graphql/queries/vault.queries.js.map +1 -1
  47. package/dist/services/analytics/risk.service.d.ts +9 -12
  48. package/dist/services/analytics/risk.service.d.ts.map +1 -1
  49. package/dist/services/analytics/risk.service.js +28 -30
  50. package/dist/services/analytics/risk.service.js.map +1 -1
  51. package/dist/tools/compare-vaults.d.ts.map +1 -1
  52. package/dist/tools/compare-vaults.js +6 -3
  53. package/dist/tools/compare-vaults.js.map +1 -1
  54. package/dist/tools/export-data.d.ts.map +1 -1
  55. package/dist/tools/export-data.js +10 -16
  56. package/dist/tools/export-data.js.map +1 -1
  57. package/dist/tools/get-price-history.d.ts.map +1 -1
  58. package/dist/tools/get-price-history.js +55 -63
  59. package/dist/tools/get-price-history.js.map +1 -1
  60. package/dist/tools/get-transactions.d.ts.map +1 -1
  61. package/dist/tools/get-transactions.js +3 -1
  62. package/dist/tools/get-transactions.js.map +1 -1
  63. package/dist/tools/optimize-portfolio.d.ts.map +1 -1
  64. package/dist/tools/optimize-portfolio.js +6 -17
  65. package/dist/tools/optimize-portfolio.js.map +1 -1
  66. package/dist/tools/predict-yield.d.ts.map +1 -1
  67. package/dist/tools/predict-yield.js +36 -9
  68. package/dist/tools/predict-yield.js.map +1 -1
  69. package/dist/tools/search-vaults.d.ts.map +1 -1
  70. package/dist/tools/search-vaults.js +9 -2
  71. package/dist/tools/search-vaults.js.map +1 -1
  72. package/dist/tools/vault-performance.d.ts.map +1 -1
  73. package/dist/tools/vault-performance.js +7 -19
  74. package/dist/tools/vault-performance.js.map +1 -1
  75. package/dist/types/generated.d.ts +811 -19
  76. package/dist/types/generated.d.ts.map +1 -1
  77. package/dist/utils/csv-generator.d.ts +4 -1
  78. package/dist/utils/csv-generator.d.ts.map +1 -1
  79. package/dist/utils/csv-generator.js +8 -4
  80. package/dist/utils/csv-generator.js.map +1 -1
  81. package/dist/utils/tool-error-handler.d.ts.map +1 -1
  82. package/dist/utils/tool-error-handler.js +8 -6
  83. package/dist/utils/tool-error-handler.js.map +1 -1
  84. package/dist/utils/validators.d.ts +9 -3
  85. package/dist/utils/validators.d.ts.map +1 -1
  86. package/dist/utils/validators.js +49 -3
  87. package/dist/utils/validators.js.map +1 -1
  88. package/dist/utils/yield-prediction.d.ts +3 -0
  89. package/dist/utils/yield-prediction.d.ts.map +1 -1
  90. package/dist/utils/yield-prediction.js +13 -1
  91. package/dist/utils/yield-prediction.js.map +1 -1
  92. 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, PAGEINFO_MINIMAL_FRAGMENT, } from '../fragments/index.js';
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
- pageInfo {
185
- ...PageInfoFullFragment
186
- }
187
- }
188
- }
189
- ${TRANSACTION_BASE_FRAGMENT}
190
- ${PAGEINFO_FULL_FRAGMENT}
191
- `;
192
- /**
193
- * GraphQL query for historical price data
194
- *
195
- * Fetches TotalAssetsUpdated transactions to build price history time-series.
196
- * Provides OHLCV (Open, High, Low, Close, Volume) data for price analysis.
197
- *
198
- * Used by: get_price_history tool
199
- *
200
- * Usage:
201
- * ```typescript
202
- * const data = await graphqlClient.request<PriceHistoryResponse>(
203
- * PRICE_HISTORY_QUERY,
204
- * {
205
- * where: {
206
- * vault_in: ['0x...'],
207
- * type_in: ['TotalAssetsUpdated']
208
- * },
209
- * orderBy: 'timestamp',
210
- * orderDirection: 'asc',
211
- * first: 2000
212
- * }
213
- * );
214
- * ```
215
- */
216
- export const PRICE_HISTORY_QUERY = `
217
- query GetPriceHistory(
218
- $where: TransactionFilterInput!,
219
- $orderBy: TransactionOrderBy!,
220
- $orderDirection: OrderDirection!,
221
- $first: Int!
222
- ) {
223
- transactions(
224
- where: $where,
225
- orderBy: $orderBy,
226
- orderDirection: $orderDirection,
227
- first: $first
228
- ) {
229
- items {
230
- ...TransactionBaseFragment
231
- data {
232
- ... on TotalAssetsUpdated {
233
- totalAssets
234
- totalAssetsUsd
235
- totalSupply
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
- ...PageInfoMinimalFragment
413
+ ...PageInfoFullFragment
246
414
  }
247
415
  }
248
416
  }
249
417
  ${TRANSACTION_BASE_FRAGMENT}
250
- ${PAGEINFO_MINIMAL_FRAGMENT}
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,EACL,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0J9B,yBAAyB;IACzB,sBAAsB;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiC/B,yBAAyB;IACzB,yBAAyB;CAC5B,CAAC"}
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,+5FAOhC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,i6FAOnC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,oBAAoB,88FAShC,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"}
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
- * Uses assetByProtocols from Octav API for protocol-based diversification analysis
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
- items: Array<{
33
- timestamp: string;
34
- data: {
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":"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"}
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;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE;gBAAE,cAAc,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACnE,aAAa,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE;gBAAE,cAAc,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACxF,YAAY,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAErE,WAAW,EAAE,4BAA4B,GAAG,IAAI,CAAC;CAClD;AAYD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE;gBAAE,cAAc,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,SAAS,EAAE,0BAA0B,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,OAAO,EAAE;QACP,UAAU,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QACtD,WAAW,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QACvD,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;KAC/C,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;KAC/C,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAChB,MAAM,EACN;QACE,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;KAC/C,CACF,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,UAAU,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QAC9E,WAAW,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KAChF,CAAC;IACF,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,WAAW;IAC1C;;;OAGG;IACG,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA6B5F;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB;IAyKzD;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAcpC;;OAEG;YACW,sBAAsB;IAepC;;;;;OAKG;YACW,wBAAwB;IAkCtC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;;;OAMG;IACH,2BAA2B,CACzB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,GAC3C,sBAAsB;IAwEzB;;;;;;;OAOG;IACG,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,kBAAkB,GAAE,OAAc,GACjC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IA0B7C;;OAEG;IACH,mBAAmB,CACjB,SAAS,EAAE,0BAA0B,EACrC,cAAc,GAAE,OAAO,GAAG,SAAS,GAAG,UAAsB,GAC3D,MAAM;IA8OT;;;;;;;;;;OAUG;IACG,YAAY,CAChB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,uBAAuB,CAAC;IAmInC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA6D5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,wBAAwB,CACtB,MAAM,EAAE,uBAAuB,EAC/B,cAAc,GAAE,OAAO,GAAG,SAAS,GAAG,UAAsB,GAC3D,MAAM;IAmGT;;;;;;;OAOG;IACH,oBAAoB,CAClB,SAAS,EAAE,0BAA0B,EACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,kBAAkB;IAuErB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;;;OAIG;IACH,yBAAyB,CAAC,MAAM,EAAE,uBAAuB,GAAG,uBAAuB;CA4BpF"}
@@ -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 data = await this.client.request(RISK_ANALYSIS_QUERY, {
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 (!data.vault)
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
- // Extract price history and calculate price per share
47
- // Filter out items with missing or zero totalSupply to avoid artificial volatility
48
- const priceHistory = data.priceHistory.items
49
- .filter((item) => {
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 firstTransaction = data.priceHistory.items[0];
62
- const createdAtTimestamp = firstTransaction
63
- ? parseInt(firstTransaction.timestamp, 10)
64
- : now - 365 * 24 * 60 * 60;
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
- const managementFee = data.vault.state?.managementFee || 0;
81
- const performanceFee = data.vault.state?.performanceFee || 0;
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: { items: [] }, // Skip price history for batch efficiency
731
+ priceHistory: [], // Skip price history for batch efficiency
734
732
  composition, // Include composition for protocol diversification risk
735
733
  };
736
734
  // Calculate risk breakdown