@lagoon-protocol/lagoon-mcp 0.4.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 (159) hide show
  1. package/dist/config.d.ts +1 -1
  2. package/dist/config.js +1 -1
  3. package/dist/core/cache-invalidation.d.ts +7 -1
  4. package/dist/core/cache-invalidation.d.ts.map +1 -1
  5. package/dist/core/cache-invalidation.js +17 -1
  6. package/dist/core/cache-invalidation.js.map +1 -1
  7. package/dist/core/container.js +1 -1
  8. package/dist/graphql/client.d.ts.map +1 -1
  9. package/dist/graphql/client.js +6 -0
  10. package/dist/graphql/client.js.map +1 -1
  11. package/dist/graphql/fragments/transaction-base.fragment.d.ts +1 -1
  12. package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -1
  13. package/dist/graphql/fragments/transaction-base.fragment.js +0 -1
  14. package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -1
  15. package/dist/graphql/fragments/vault.fragment.d.ts +2 -1
  16. package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -1
  17. package/dist/graphql/fragments/vault.fragment.js +1 -0
  18. package/dist/graphql/fragments/vault.fragment.js.map +1 -1
  19. package/dist/graphql/queries/export.queries.d.ts +5 -7
  20. package/dist/graphql/queries/export.queries.d.ts.map +1 -1
  21. package/dist/graphql/queries/export.queries.js +22 -28
  22. package/dist/graphql/queries/export.queries.js.map +1 -1
  23. package/dist/graphql/queries/index.d.ts +3 -3
  24. package/dist/graphql/queries/index.d.ts.map +1 -1
  25. package/dist/graphql/queries/index.js +3 -3
  26. package/dist/graphql/queries/index.js.map +1 -1
  27. package/dist/graphql/queries/performance.queries.d.ts +6 -4
  28. package/dist/graphql/queries/performance.queries.d.ts.map +1 -1
  29. package/dist/graphql/queries/performance.queries.js +5 -11
  30. package/dist/graphql/queries/performance.queries.js.map +1 -1
  31. package/dist/graphql/queries/portfolio.queries.d.ts +5 -11
  32. package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -1
  33. package/dist/graphql/queries/portfolio.queries.js +14 -87
  34. package/dist/graphql/queries/portfolio.queries.js.map +1 -1
  35. package/dist/graphql/queries/prediction.queries.d.ts +13 -15
  36. package/dist/graphql/queries/prediction.queries.d.ts.map +1 -1
  37. package/dist/graphql/queries/prediction.queries.js +12 -31
  38. package/dist/graphql/queries/prediction.queries.js.map +1 -1
  39. package/dist/graphql/queries/risk.queries.d.ts +3 -3
  40. package/dist/graphql/queries/risk.queries.d.ts.map +1 -1
  41. package/dist/graphql/queries/risk.queries.js +7 -22
  42. package/dist/graphql/queries/risk.queries.js.map +1 -1
  43. package/dist/graphql/queries/search.queries.d.ts.map +1 -1
  44. package/dist/graphql/queries/search.queries.js +6 -2
  45. package/dist/graphql/queries/search.queries.js.map +1 -1
  46. package/dist/graphql/queries/transaction.queries.d.ts +6 -26
  47. package/dist/graphql/queries/transaction.queries.d.ts.map +1 -1
  48. package/dist/graphql/queries/transaction.queries.js +227 -59
  49. package/dist/graphql/queries/transaction.queries.js.map +1 -1
  50. package/dist/graphql/queries/vault.queries.d.ts +21 -3
  51. package/dist/graphql/queries/vault.queries.d.ts.map +1 -1
  52. package/dist/graphql/queries/vault.queries.js +38 -0
  53. package/dist/graphql/queries/vault.queries.js.map +1 -1
  54. package/dist/index.js +7 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/prompts/competitor-comparison.d.ts.map +1 -1
  57. package/dist/prompts/competitor-comparison.js +3 -1
  58. package/dist/prompts/competitor-comparison.js.map +1 -1
  59. package/dist/prompts/curator-performance.d.ts.map +1 -1
  60. package/dist/prompts/curator-performance.js +3 -1
  61. package/dist/prompts/curator-performance.js.map +1 -1
  62. package/dist/prompts/financial-analysis.d.ts.map +1 -1
  63. package/dist/prompts/financial-analysis.js +7 -3
  64. package/dist/prompts/financial-analysis.js.map +1 -1
  65. package/dist/prompts/onboarding-first-vault.d.ts.map +1 -1
  66. package/dist/prompts/onboarding-first-vault.js +5 -1
  67. package/dist/prompts/onboarding-first-vault.js.map +1 -1
  68. package/dist/prompts/portfolio-optimization.d.ts.map +1 -1
  69. package/dist/prompts/portfolio-optimization.js +5 -1
  70. package/dist/prompts/portfolio-optimization.js.map +1 -1
  71. package/dist/prompts/protocol-overview.d.ts.map +1 -1
  72. package/dist/prompts/protocol-overview.js +3 -1
  73. package/dist/prompts/protocol-overview.js.map +1 -1
  74. package/dist/resources/schema.d.ts +8 -3
  75. package/dist/resources/schema.d.ts.map +1 -1
  76. package/dist/resources/schema.js +34 -30
  77. package/dist/resources/schema.js.map +1 -1
  78. package/dist/server.d.ts +4 -1
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +5 -2
  81. package/dist/server.js.map +1 -1
  82. package/dist/services/analytics/risk.service.d.ts +10 -12
  83. package/dist/services/analytics/risk.service.d.ts.map +1 -1
  84. package/dist/services/analytics/risk.service.js +41 -42
  85. package/dist/services/analytics/risk.service.js.map +1 -1
  86. package/dist/skills/loader.d.ts.map +1 -1
  87. package/dist/skills/loader.js +18 -8
  88. package/dist/skills/loader.js.map +1 -1
  89. package/dist/tools/compare-vaults.d.ts.map +1 -1
  90. package/dist/tools/compare-vaults.js +6 -3
  91. package/dist/tools/compare-vaults.js.map +1 -1
  92. package/dist/tools/discover-tools.d.ts +3 -3
  93. package/dist/tools/discover-tools.d.ts.map +1 -1
  94. package/dist/tools/discover-tools.js +16 -3
  95. package/dist/tools/discover-tools.js.map +1 -1
  96. package/dist/tools/export-data.d.ts.map +1 -1
  97. package/dist/tools/export-data.js +10 -16
  98. package/dist/tools/export-data.js.map +1 -1
  99. package/dist/tools/get-price-history.d.ts.map +1 -1
  100. package/dist/tools/get-price-history.js +55 -63
  101. package/dist/tools/get-price-history.js.map +1 -1
  102. package/dist/tools/get-transactions.d.ts.map +1 -1
  103. package/dist/tools/get-transactions.js +3 -1
  104. package/dist/tools/get-transactions.js.map +1 -1
  105. package/dist/tools/optimize-portfolio.d.ts.map +1 -1
  106. package/dist/tools/optimize-portfolio.js +6 -17
  107. package/dist/tools/optimize-portfolio.js.map +1 -1
  108. package/dist/tools/predict-yield.d.ts.map +1 -1
  109. package/dist/tools/predict-yield.js +61 -38
  110. package/dist/tools/predict-yield.js.map +1 -1
  111. package/dist/tools/query-graphql.d.ts.map +1 -1
  112. package/dist/tools/query-graphql.js +139 -0
  113. package/dist/tools/query-graphql.js.map +1 -1
  114. package/dist/tools/search-vaults.d.ts.map +1 -1
  115. package/dist/tools/search-vaults.js +9 -2
  116. package/dist/tools/search-vaults.js.map +1 -1
  117. package/dist/tools/vault-performance.d.ts.map +1 -1
  118. package/dist/tools/vault-performance.js +7 -19
  119. package/dist/tools/vault-performance.js.map +1 -1
  120. package/dist/types/generated.d.ts +811 -19
  121. package/dist/types/generated.d.ts.map +1 -1
  122. package/dist/utils/comparison-metrics.d.ts.map +1 -1
  123. package/dist/utils/comparison-metrics.js +6 -3
  124. package/dist/utils/comparison-metrics.js.map +1 -1
  125. package/dist/utils/csv-generator.d.ts +4 -1
  126. package/dist/utils/csv-generator.d.ts.map +1 -1
  127. package/dist/utils/csv-generator.js +8 -4
  128. package/dist/utils/csv-generator.js.map +1 -1
  129. package/dist/utils/drawdown.d.ts +62 -0
  130. package/dist/utils/drawdown.d.ts.map +1 -0
  131. package/dist/utils/drawdown.js +132 -0
  132. package/dist/utils/drawdown.js.map +1 -0
  133. package/dist/utils/portfolio-optimization.d.ts +3 -1
  134. package/dist/utils/portfolio-optimization.d.ts.map +1 -1
  135. package/dist/utils/portfolio-optimization.js +13 -9
  136. package/dist/utils/portfolio-optimization.js.map +1 -1
  137. package/dist/utils/risk-scoring.d.ts.map +1 -1
  138. package/dist/utils/risk-scoring.js +24 -7
  139. package/dist/utils/risk-scoring.js.map +1 -1
  140. package/dist/utils/tool-error-handler.d.ts.map +1 -1
  141. package/dist/utils/tool-error-handler.js +9 -2
  142. package/dist/utils/tool-error-handler.js.map +1 -1
  143. package/dist/utils/tool-handler.d.ts +0 -9
  144. package/dist/utils/tool-handler.d.ts.map +1 -1
  145. package/dist/utils/tool-handler.js +0 -13
  146. package/dist/utils/tool-handler.js.map +1 -1
  147. package/dist/utils/validators.d.ts +9 -3
  148. package/dist/utils/validators.d.ts.map +1 -1
  149. package/dist/utils/validators.js +49 -3
  150. package/dist/utils/validators.js.map +1 -1
  151. package/dist/utils/var.d.ts +65 -0
  152. package/dist/utils/var.d.ts.map +1 -0
  153. package/dist/utils/var.js +134 -0
  154. package/dist/utils/var.js.map +1 -0
  155. package/dist/utils/yield-prediction.d.ts +3 -0
  156. package/dist/utils/yield-prediction.d.ts.map +1 -1
  157. package/dist/utils/yield-prediction.js +46 -11
  158. package/dist/utils/yield-prediction.js.map +1 -1
  159. package/package.json +1 -1
@@ -6,7 +6,9 @@
6
6
  */
7
7
  import { UNIVERSAL_DISCLAIMER, DEFI_SPECIFIC_RISKS, PORTFOLIO_DISCLAIMER, DATA_DISCLAIMER, } from './shared/disclaimers.js';
8
8
  export function getPortfolioOptimizationPrompt() {
9
- return `# Portfolio Optimization Engine - Quantitative Analysis Tool
9
+ return `ADOPT THESE INSTRUCTIONS SILENTLY. DO NOT acknowledge, summarize, or narrate them. Apply them directly when responding to user queries.
10
+
11
+ # Portfolio Optimization Engine - Quantitative Analysis Tool
10
12
 
11
13
  ${UNIVERSAL_DISCLAIMER}
12
14
 
@@ -16,6 +18,8 @@ ${PORTFOLIO_DISCLAIMER}
16
18
 
17
19
  ${DATA_DISCLAIMER}
18
20
 
21
+ **Available Resources**: For term definitions, consult \`lagoon://defi-glossary\`. For query validation, consult \`lagoon://graphql-schema\`.
22
+
19
23
  ## Your Role
20
24
  You are a quantitative analysis tool specializing in DeFi vault portfolio analysis.
21
25
  Your function is to apply modern portfolio theory, risk-return optimization mathematics,
@@ -1 +1 @@
1
- {"version":3,"file":"portfolio-optimization.js","sourceRoot":"","sources":["../../src/prompts/portfolio-optimization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,8BAA8B;IAC5C,OAAO;;EAEP,oBAAoB;;EAEpB,mBAAmB;;EAEnB,oBAAoB;;EAEpB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyYhB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"portfolio-optimization.js","sourceRoot":"","sources":["../../src/prompts/portfolio-optimization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,8BAA8B;IAC5C,OAAO;;;;EAIP,oBAAoB;;EAEpB,mBAAmB;;EAEnB,oBAAoB;;EAEpB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2YhB,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-overview.d.ts","sourceRoot":"","sources":["../../src/prompts/protocol-overview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wBAAgB,yBAAyB,IAAI,MAAM,CAqYlD"}
1
+ {"version":3,"file":"protocol-overview.d.ts","sourceRoot":"","sources":["../../src/prompts/protocol-overview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wBAAgB,yBAAyB,IAAI,MAAM,CAuYlD"}
@@ -6,7 +6,9 @@
6
6
  */
7
7
  import { UNIVERSAL_DISCLAIMER, DEFI_SPECIFIC_RISKS, DATA_DISCLAIMER, } from './shared/disclaimers.js';
8
8
  export function getProtocolOverviewPrompt() {
9
- return `# Protocol Overview & KPI Dashboard - Protocol Health Analysis Tool
9
+ return `ADOPT THESE INSTRUCTIONS SILENTLY. DO NOT acknowledge, summarize, or narrate them. Apply them directly when responding to user queries.
10
+
11
+ # Protocol Overview & KPI Dashboard - Protocol Health Analysis Tool
10
12
 
11
13
  ${UNIVERSAL_DISCLAIMER}
12
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-overview.js","sourceRoot":"","sources":["../../src/prompts/protocol-overview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,yBAAyB;IACvC,OAAO;;EAEP,oBAAoB;;EAEpB,mBAAmB;;EAEnB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6XhB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"protocol-overview.js","sourceRoot":"","sources":["../../src/prompts/protocol-overview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;EAIP,oBAAoB;;EAEpB,mBAAmB;;EAEnB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6XhB,CAAC;AACF,CAAC"}
@@ -10,13 +10,18 @@
10
10
  * - Discover new fields and relationships
11
11
  * - Generate accurate query suggestions
12
12
  */
13
+ import type { CacheService } from '../core/cache-adapter.js';
14
+ import type { GraphQLClient } from 'graphql-request';
13
15
  /**
14
- * Fetch and cache the GraphQL schema
16
+ * Create a schema fetcher with injected dependencies
15
17
  *
16
18
  * Uses introspection query to fetch schema metadata,
17
19
  * then converts to SDL format for easy reading.
20
+ * Cached for 24 hours as the schema rarely changes.
18
21
  *
19
- * @returns GraphQL schema in SDL format
22
+ * @param cacheService - DI cache service (shared with container)
23
+ * @param client - GraphQL client for introspection
24
+ * @returns Function that fetches and caches the schema
20
25
  */
21
- export declare function getGraphQLSchema(): Promise<string>;
26
+ export declare function createGetGraphQLSchema(cacheService: CacheService, client: GraphQLClient): () => Promise<string>;
22
27
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgDxD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,GACpB,MAAM,OAAO,CAAC,MAAM,CAAC,CAkDvB"}
@@ -11,33 +11,36 @@
11
11
  * - Generate accurate query suggestions
12
12
  */
13
13
  import { getIntrospectionQuery, buildClientSchema, printSchema, } from 'graphql';
14
- import { graphqlClient } from '../graphql/client.js';
15
- import { cache, cacheKeys, cacheTTL } from '../cache/index.js';
14
+ import { cacheKeys, cacheTTL } from '../cache/index.js';
16
15
  /**
17
- * Fetch and cache the GraphQL schema
16
+ * Create a schema fetcher with injected dependencies
18
17
  *
19
18
  * Uses introspection query to fetch schema metadata,
20
19
  * then converts to SDL format for easy reading.
20
+ * Cached for 24 hours as the schema rarely changes.
21
21
  *
22
- * @returns GraphQL schema in SDL format
22
+ * @param cacheService - DI cache service (shared with container)
23
+ * @param client - GraphQL client for introspection
24
+ * @returns Function that fetches and caches the schema
23
25
  */
24
- export async function getGraphQLSchema() {
25
- // Check cache first
26
- const cacheKey = cacheKeys.schema();
27
- const cached = cache.get(cacheKey);
28
- if (cached) {
29
- return cached;
30
- }
31
- try {
32
- // Execute introspection query
33
- const introspectionQuery = getIntrospectionQuery();
34
- const result = await graphqlClient.request(introspectionQuery);
35
- // Build client schema from introspection result
36
- const schema = buildClientSchema(result);
37
- // Convert to SDL format (human-readable)
38
- const sdl = printSchema(schema);
39
- // Add helpful header
40
- const schemaWithHeader = `# Lagoon DeFi Protocol - GraphQL Schema
26
+ export function createGetGraphQLSchema(cacheService, client) {
27
+ return async () => {
28
+ // Check cache first
29
+ const cacheKey = cacheKeys.schema();
30
+ const cached = cacheService.get(cacheKey);
31
+ if (cached) {
32
+ return cached;
33
+ }
34
+ try {
35
+ // Execute introspection query
36
+ const introspectionQuery = getIntrospectionQuery();
37
+ const result = await client.request(introspectionQuery);
38
+ // Build client schema from introspection result
39
+ const schema = buildClientSchema(result);
40
+ // Convert to SDL format (human-readable)
41
+ const sdl = printSchema(schema);
42
+ // Add helpful header
43
+ const schemaWithHeader = `# Lagoon DeFi Protocol - GraphQL Schema
41
44
  # Generated: ${new Date().toISOString()}
42
45
  #
43
46
  # This schema defines all available types, queries, and mutations
@@ -51,17 +54,18 @@ export async function getGraphQLSchema() {
51
54
  #
52
55
 
53
56
  ${sdl}`;
54
- // Cache with 24-hour TTL
55
- cache.set(cacheKey, schemaWithHeader, cacheTTL.schema);
56
- return schemaWithHeader;
57
- }
58
- catch (error) {
59
- // If introspection fails, return error message
60
- const errorMessage = `# Error fetching GraphQL schema
57
+ // Cache with 24-hour TTL
58
+ cacheService.set(cacheKey, schemaWithHeader, cacheTTL.schema);
59
+ return schemaWithHeader;
60
+ }
61
+ catch (error) {
62
+ // If introspection fails, return error message
63
+ const errorMessage = `# Error fetching GraphQL schema
61
64
  # ${error instanceof Error ? error.message : String(error)}
62
65
  #
63
66
  # The schema is temporarily unavailable. Please try again later.`;
64
- return errorMessage;
65
- }
67
+ return errorMessage;
68
+ }
69
+ };
66
70
  }
67
71
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,GAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,oBAAoB;IACpB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAS,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAqB,kBAAkB,CAAC,CAAC;QAEnF,gDAAgD;QAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEzC,yCAAyC;QACzC,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAEhC,qBAAqB;QACrB,MAAM,gBAAgB,GAAG;eACd,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;;;;;;;EAYrC,GAAG,EAAE,CAAC;QAEJ,yBAAyB;QACzB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;QAC/C,MAAM,YAAY,GAAG;IACrB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;iEAEO,CAAC;QAE9D,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,GAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,YAA0B,EAC1B,MAAqB;IAErB,OAAO,KAAK,IAAqB,EAAE;QACjC,oBAAoB;QACpB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAS,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAqB,kBAAkB,CAAC,CAAC;YAE5E,gDAAgD;YAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAEzC,yCAAyC;YACzC,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAEhC,qBAAqB;YACrB,MAAM,gBAAgB,GAAG;eAChB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;;;;;;;EAYrC,GAAG,EAAE,CAAC;YAEF,yBAAyB;YACzB,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE9D,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,MAAM,YAAY,GAAG;IACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;iEAEO,CAAC;YAE5D,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
package/dist/server.d.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  * - Future-proof architecture
8
8
  */
9
9
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
10
11
  /**
11
12
  * Create and configure the MCP server instance
12
13
  *
@@ -17,5 +18,7 @@ export declare function createServer(): McpServer;
17
18
  /**
18
19
  * Run the MCP server
19
20
  */
20
- export declare function runServer(): Promise<void>;
21
+ export declare function runServer(): Promise<{
22
+ transport: StdioServerTransport;
23
+ }>;
21
24
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBpE;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA2NxC;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B/C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAwBjF;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA8NxC;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC;IAAE,SAAS,EAAE,oBAAoB,CAAA;CAAE,CAAC,CAgC9E"}
package/dist/server.js CHANGED
@@ -16,7 +16,7 @@ import { createNodeCacheAdapter } from './core/cache-adapter.js';
16
16
  // Tool registry
17
17
  import { registerTools } from './tools/registry.js';
18
18
  // Resource imports
19
- import { getGraphQLSchema } from './resources/schema.js';
19
+ import { createGetGraphQLSchema } from './resources/schema.js';
20
20
  import { getDefiGlossary } from './resources/glossary.js';
21
21
  // Prompt imports
22
22
  import { getFinancialAnalysisPrompt } from './prompts/financial-analysis.js';
@@ -34,7 +34,7 @@ import { getPortfolioOptimizationPrompt } from './prompts/portfolio-optimization
34
34
  export function createServer() {
35
35
  const server = new McpServer({
36
36
  name: 'lagoon-mcp',
37
- version: '0.3.1',
37
+ version: config.server.version,
38
38
  });
39
39
  // ==========================================
40
40
  // Dependency Injection Container
@@ -50,6 +50,8 @@ export function createServer() {
50
50
  // ==========================================
51
51
  // Register all tools from unified registry with DI container
52
52
  registerTools(server, container);
53
+ // Create schema fetcher using DI container (eliminates legacy cache singleton)
54
+ const getGraphQLSchema = createGetGraphQLSchema(container.cache, container.graphqlClient);
53
55
  // ==========================================
54
56
  // Resource Registration
55
57
  // ==========================================
@@ -221,5 +223,6 @@ export async function runServer() {
221
223
  console.error('✓ Lagoon MCP Server is running');
222
224
  console.error(' Server: McpServer (modern API)');
223
225
  console.error(' Capabilities: Auto-managed');
226
+ return { transport };
224
227
  }
225
228
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,mBAAmB;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;KAC/B,CAAC,CAAC;IAEH,6CAA6C;IAC7C,iCAAiC;IACjC,6CAA6C;IAE7C,iDAAiD;IACjD,MAAM,SAAS,GAAG,eAAe,CAC/B,aAAa,EACb,sBAAsB,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;QAC3B,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;QACrC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;KAC9B,CAAC,EACF,MAAM,CACP,CAAC;IAEF,6CAA6C;IAC7C,oBAAoB;IACpB,6CAA6C;IAE7C,6DAA6D;IAC7D,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjC,+EAA+E;IAC/E,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAE1F,6CAA6C;IAC7C,wBAAwB;IACxB,6CAA6C;IAE7C,MAAM,CAAC,gBAAgB,CACrB,gBAAgB,EAChB,yBAAyB,EACzB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,yCAAyC;YACzC,iEAAiE;YACjE,sBAAsB;QACxB,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACd,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,MAAM,gBAAgB,EAAE;aAC/B;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,eAAe,EACf,wBAAwB,EACxB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,4DAA4D;YAC5D,mFAAmF;YACnF,gEAAgE;QAClE,QAAQ,EAAE,eAAe;KAC1B,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACR,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,eAAe;gBACzB,IAAI,EAAE,eAAe,EAAE;aACxB;SACF;KACF,CAAC,CACH,CAAC;IAEF,6CAA6C;IAC7C,sBAAsB;IACtB,6CAA6C;IAE7C,MAAM,CAAC,cAAc,CACnB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,4EAA4E;YAC5E,2FAA2F;YAC3F,wFAAwF;QAC1F,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,0BAA0B,EAAE;iBACnC;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,qBAAqB,EACrB;QACE,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,6GAA6G;YAC7G,iGAAiG;YACjG,gFAAgF;QAClF,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2BAA2B,EAAE;iBACpC;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,uBAAuB,EACvB;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,gGAAgG;YAChG,qGAAqG;YACrG,gEAAgE;QAClE,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6BAA6B,EAAE;iBACtC;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,wBAAwB,EACxB;QACE,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,mGAAmG;YACnG,8GAA8G;YAC9G,oEAAoE;QACtE,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6BAA6B,EAAE;iBACtC;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,mBAAmB,EACnB;QACE,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,2EAA2E;YAC3E,0GAA0G;YAC1G,gEAAgE;QAClE,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAAyB,EAAE;iBAClC;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,wBAAwB,EACxB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,mFAAmF;YACnF,wHAAwH;YACxH,wEAAwE;QAC1E,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,8BAA8B,EAAE;iBACvC;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,yBAAyB;IACzB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC,CAAC;IAEvE,uBAAuB;IACvB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClD,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE9C,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,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
  /**
@@ -47,6 +44,7 @@ export interface ComparativeRiskContext {
47
44
  percentile: number;
48
45
  betterThanPercent: number;
49
46
  medianRisk: number;
47
+ isApproximate: boolean;
50
48
  averageRisk: number;
51
49
  isOutlier: boolean;
52
50
  riskRanking: string;
@@ -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":"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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 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;
@@ -280,13 +278,11 @@ export class RiskService extends BaseService {
280
278
  * @returns Comparative risk context with percentile rankings
281
279
  */
282
280
  calculateComparativeContext(vaultRisk, allVaultsData) {
283
- // Calculate risk scores for all vaults (simplified - using TVL as proxy)
284
- // In production, this would calculate full risk scores, but that's expensive
285
- // So we'll use a simplified approach based on TVL tiers as a proxy
281
+ // TVL-based proxy ranking (full multi-factor scoring for all vaults is too expensive)
282
+ // This provides approximate positioning, not precise risk comparison
286
283
  const vaultRisks = allVaultsData.items
287
284
  .map((v) => {
288
285
  const tvl = v.state?.totalAssetsUsd || 0;
289
- // Simplified risk estimation based on TVL (inverse relationship)
290
286
  if (tvl >= 10_000_000)
291
287
  return 0.15;
292
288
  if (tvl >= 1_000_000)
@@ -297,7 +293,7 @@ export class RiskService extends BaseService {
297
293
  return 0.65;
298
294
  return 0.85;
299
295
  })
300
- .sort((a, b) => a - b); // Sort ascending (lower risk first)
296
+ .sort((a, b) => a - b);
301
297
  if (vaultRisks.length === 0) {
302
298
  return {
303
299
  percentile: 50,
@@ -305,6 +301,7 @@ export class RiskService extends BaseService {
305
301
  medianRisk: vaultRisk,
306
302
  averageRisk: vaultRisk,
307
303
  isOutlier: false,
304
+ isApproximate: true,
308
305
  riskRanking: 'No comparative data available',
309
306
  };
310
307
  }
@@ -321,25 +318,26 @@ export class RiskService extends BaseService {
321
318
  const averageRisk = vaultRisks.reduce((sum, r) => sum + r, 0) / vaultRisks.length;
322
319
  // Check if outlier (top/bottom 5%)
323
320
  const isOutlier = percentile < 5 || percentile > 95;
324
- // Generate ranking description
321
+ // Generate ranking description (note: TVL-based approximation)
322
+ const approxNote = ' (TVL-based approximate ranking)';
325
323
  let riskRanking;
326
324
  if (percentile >= 95) {
327
- riskRanking = `Exceptionally safe - Top 5% lowest risk`;
325
+ riskRanking = `Exceptionally safe - Top 5% lowest risk${approxNote}`;
328
326
  }
329
327
  else if (percentile >= 75) {
330
- riskRanking = `Safer than ${Math.round(betterThanPercent)}% of vaults`;
328
+ riskRanking = `Safer than ${Math.round(betterThanPercent)}% of vaults${approxNote}`;
331
329
  }
332
330
  else if (percentile >= 50) {
333
- riskRanking = `Above average safety - Safer than ${Math.round(betterThanPercent)}% of vaults`;
331
+ riskRanking = `Above average safety - Safer than ${Math.round(betterThanPercent)}% of vaults${approxNote}`;
334
332
  }
335
333
  else if (percentile >= 25) {
336
- riskRanking = `Below average safety - Riskier than ${Math.round(percentile)}% of vaults`;
334
+ riskRanking = `Below average safety - Riskier than ${Math.round(percentile)}% of vaults${approxNote}`;
337
335
  }
338
336
  else if (percentile >= 5) {
339
- riskRanking = `Riskier than ${Math.round(percentile)}% of vaults`;
337
+ riskRanking = `Riskier than ${Math.round(percentile)}% of vaults${approxNote}`;
340
338
  }
341
339
  else {
342
- riskRanking = `High risk - Bottom 5% (riskier than ${Math.round(percentile)}% of vaults)`;
340
+ riskRanking = `High risk - Bottom 5% (riskier than ${Math.round(percentile)}% of vaults)${approxNote}`;
343
341
  }
344
342
  return {
345
343
  percentile,
@@ -347,6 +345,7 @@ export class RiskService extends BaseService {
347
345
  medianRisk,
348
346
  averageRisk,
349
347
  isOutlier,
348
+ isApproximate: true,
350
349
  riskRanking,
351
350
  };
352
351
  }
@@ -729,7 +728,7 @@ ${detailedDataQualitySection}`;
729
728
  vault,
730
729
  allVaults: allVaultsContext,
731
730
  curatorVaults: { items: [] }, // Skip curator vaults for batch efficiency
732
- priceHistory: { items: [] }, // Skip price history for batch efficiency
731
+ priceHistory: [], // Skip price history for batch efficiency
733
732
  composition, // Include composition for protocol diversification risk
734
733
  };
735
734
  // Calculate risk breakdown