@lagoon-protocol/lagoon-mcp 0.1.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 (335) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +618 -0
  3. package/dist/cache/index.d.ts +97 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cache/index.js +106 -0
  6. package/dist/cache/index.js.map +1 -0
  7. package/dist/config.d.ts +34 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +40 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/core/cache-adapter.d.ts +73 -0
  12. package/dist/core/cache-adapter.d.ts.map +1 -0
  13. package/dist/core/cache-adapter.js +47 -0
  14. package/dist/core/cache-adapter.js.map +1 -0
  15. package/dist/core/cache-invalidation.d.ts +72 -0
  16. package/dist/core/cache-invalidation.d.ts.map +1 -0
  17. package/dist/core/cache-invalidation.js +114 -0
  18. package/dist/core/cache-invalidation.js.map +1 -0
  19. package/dist/core/container.d.ts +34 -0
  20. package/dist/core/container.d.ts.map +1 -0
  21. package/dist/core/container.js +75 -0
  22. package/dist/core/container.js.map +1 -0
  23. package/dist/graphql/client.d.ts +32 -0
  24. package/dist/graphql/client.d.ts.map +1 -0
  25. package/dist/graphql/client.js +49 -0
  26. package/dist/graphql/client.js.map +1 -0
  27. package/dist/graphql/fragments/apr-breakdown.fragment.d.ts +64 -0
  28. package/dist/graphql/fragments/apr-breakdown.fragment.d.ts.map +1 -0
  29. package/dist/graphql/fragments/apr-breakdown.fragment.js +62 -0
  30. package/dist/graphql/fragments/apr-breakdown.fragment.js.map +1 -0
  31. package/dist/graphql/fragments/asset-info.fragment.d.ts +18 -0
  32. package/dist/graphql/fragments/asset-info.fragment.d.ts.map +1 -0
  33. package/dist/graphql/fragments/asset-info.fragment.js +36 -0
  34. package/dist/graphql/fragments/asset-info.fragment.js.map +1 -0
  35. package/dist/graphql/fragments/chain-info.fragment.d.ts +18 -0
  36. package/dist/graphql/fragments/chain-info.fragment.d.ts.map +1 -0
  37. package/dist/graphql/fragments/chain-info.fragment.js +32 -0
  38. package/dist/graphql/fragments/chain-info.fragment.js.map +1 -0
  39. package/dist/graphql/fragments/index.d.ts +15 -0
  40. package/dist/graphql/fragments/index.d.ts.map +1 -0
  41. package/dist/graphql/fragments/index.js +21 -0
  42. package/dist/graphql/fragments/index.js.map +1 -0
  43. package/dist/graphql/fragments/pageinfo.fragment.d.ts +33 -0
  44. package/dist/graphql/fragments/pageinfo.fragment.d.ts.map +1 -0
  45. package/dist/graphql/fragments/pageinfo.fragment.js +47 -0
  46. package/dist/graphql/fragments/pageinfo.fragment.js.map +1 -0
  47. package/dist/graphql/fragments/transaction-base.fragment.d.ts +19 -0
  48. package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -0
  49. package/dist/graphql/fragments/transaction-base.fragment.js +32 -0
  50. package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -0
  51. package/dist/graphql/fragments/vault-list.fragment.d.ts +53 -0
  52. package/dist/graphql/fragments/vault-list.fragment.d.ts.map +1 -0
  53. package/dist/graphql/fragments/vault-list.fragment.js +51 -0
  54. package/dist/graphql/fragments/vault-list.fragment.js.map +1 -0
  55. package/dist/graphql/fragments/vault-summary.fragment.d.ts +68 -0
  56. package/dist/graphql/fragments/vault-summary.fragment.d.ts.map +1 -0
  57. package/dist/graphql/fragments/vault-summary.fragment.js +66 -0
  58. package/dist/graphql/fragments/vault-summary.fragment.js.map +1 -0
  59. package/dist/graphql/fragments/vault.fragment.d.ts +133 -0
  60. package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -0
  61. package/dist/graphql/fragments/vault.fragment.js +119 -0
  62. package/dist/graphql/fragments/vault.fragment.js.map +1 -0
  63. package/dist/graphql/fragments.d.ts +183 -0
  64. package/dist/graphql/fragments.d.ts.map +1 -0
  65. package/dist/graphql/fragments.js +297 -0
  66. package/dist/graphql/fragments.js.map +1 -0
  67. package/dist/graphql/queries/export.queries.d.ts +72 -0
  68. package/dist/graphql/queries/export.queries.d.ts.map +1 -0
  69. package/dist/graphql/queries/export.queries.js +202 -0
  70. package/dist/graphql/queries/export.queries.js.map +1 -0
  71. package/dist/graphql/queries/index.d.ts +15 -0
  72. package/dist/graphql/queries/index.d.ts.map +1 -0
  73. package/dist/graphql/queries/index.js +23 -0
  74. package/dist/graphql/queries/index.js.map +1 -0
  75. package/dist/graphql/queries/performance.queries.d.ts +63 -0
  76. package/dist/graphql/queries/performance.queries.d.ts.map +1 -0
  77. package/dist/graphql/queries/performance.queries.js +133 -0
  78. package/dist/graphql/queries/performance.queries.js.map +1 -0
  79. package/dist/graphql/queries/period-summaries.d.ts +15 -0
  80. package/dist/graphql/queries/period-summaries.d.ts.map +1 -0
  81. package/dist/graphql/queries/period-summaries.js +24 -0
  82. package/dist/graphql/queries/period-summaries.js.map +1 -0
  83. package/dist/graphql/queries/portfolio.queries.d.ts +78 -0
  84. package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -0
  85. package/dist/graphql/queries/portfolio.queries.js +198 -0
  86. package/dist/graphql/queries/portfolio.queries.js.map +1 -0
  87. package/dist/graphql/queries/prediction.queries.d.ts +38 -0
  88. package/dist/graphql/queries/prediction.queries.d.ts.map +1 -0
  89. package/dist/graphql/queries/prediction.queries.js +100 -0
  90. package/dist/graphql/queries/prediction.queries.js.map +1 -0
  91. package/dist/graphql/queries/risk.queries.d.ts +37 -0
  92. package/dist/graphql/queries/risk.queries.d.ts.map +1 -0
  93. package/dist/graphql/queries/risk.queries.js +90 -0
  94. package/dist/graphql/queries/risk.queries.js.map +1 -0
  95. package/dist/graphql/queries/search.queries.d.ts +61 -0
  96. package/dist/graphql/queries/search.queries.d.ts.map +1 -0
  97. package/dist/graphql/queries/search.queries.js +103 -0
  98. package/dist/graphql/queries/search.queries.js.map +1 -0
  99. package/dist/graphql/queries/transaction.queries.d.ts +60 -0
  100. package/dist/graphql/queries/transaction.queries.d.ts.map +1 -0
  101. package/dist/graphql/queries/transaction.queries.js +252 -0
  102. package/dist/graphql/queries/transaction.queries.js.map +1 -0
  103. package/dist/graphql/queries/vault.queries.d.ts +54 -0
  104. package/dist/graphql/queries/vault.queries.d.ts.map +1 -0
  105. package/dist/graphql/queries/vault.queries.js +78 -0
  106. package/dist/graphql/queries/vault.queries.js.map +1 -0
  107. package/dist/index.d.ts +12 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +32 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/prompts/competitor-comparison.d.ts +8 -0
  112. package/dist/prompts/competitor-comparison.d.ts.map +1 -0
  113. package/dist/prompts/competitor-comparison.js +432 -0
  114. package/dist/prompts/competitor-comparison.js.map +1 -0
  115. package/dist/prompts/curator-performance.d.ts +8 -0
  116. package/dist/prompts/curator-performance.d.ts.map +1 -0
  117. package/dist/prompts/curator-performance.js +383 -0
  118. package/dist/prompts/curator-performance.js.map +1 -0
  119. package/dist/prompts/financial-analysis.d.ts +8 -0
  120. package/dist/prompts/financial-analysis.d.ts.map +1 -0
  121. package/dist/prompts/financial-analysis.js +480 -0
  122. package/dist/prompts/financial-analysis.js.map +1 -0
  123. package/dist/prompts/index.d.ts +21 -0
  124. package/dist/prompts/index.d.ts.map +1 -0
  125. package/dist/prompts/index.js +50 -0
  126. package/dist/prompts/index.js.map +1 -0
  127. package/dist/prompts/onboarding-first-vault.d.ts +8 -0
  128. package/dist/prompts/onboarding-first-vault.d.ts.map +1 -0
  129. package/dist/prompts/onboarding-first-vault.js +317 -0
  130. package/dist/prompts/onboarding-first-vault.js.map +1 -0
  131. package/dist/prompts/portfolio-optimization.d.ts +8 -0
  132. package/dist/prompts/portfolio-optimization.d.ts.map +1 -0
  133. package/dist/prompts/portfolio-optimization.js +412 -0
  134. package/dist/prompts/portfolio-optimization.js.map +1 -0
  135. package/dist/prompts/protocol-overview.d.ts +8 -0
  136. package/dist/prompts/protocol-overview.d.ts.map +1 -0
  137. package/dist/prompts/protocol-overview.js +398 -0
  138. package/dist/prompts/protocol-overview.js.map +1 -0
  139. package/dist/prompts/shared/disclaimers.d.ts +54 -0
  140. package/dist/prompts/shared/disclaimers.d.ts.map +1 -0
  141. package/dist/prompts/shared/disclaimers.js +400 -0
  142. package/dist/prompts/shared/disclaimers.js.map +1 -0
  143. package/dist/resources/glossary.d.ts +8 -0
  144. package/dist/resources/glossary.d.ts.map +1 -0
  145. package/dist/resources/glossary.js +407 -0
  146. package/dist/resources/glossary.js.map +1 -0
  147. package/dist/resources/index.d.ts +18 -0
  148. package/dist/resources/index.d.ts.map +1 -0
  149. package/dist/resources/index.js +29 -0
  150. package/dist/resources/index.js.map +1 -0
  151. package/dist/resources/schema.d.ts +22 -0
  152. package/dist/resources/schema.d.ts.map +1 -0
  153. package/dist/resources/schema.js +67 -0
  154. package/dist/resources/schema.js.map +1 -0
  155. package/dist/schemas/config.schema.d.ts +46 -0
  156. package/dist/schemas/config.schema.d.ts.map +1 -0
  157. package/dist/schemas/config.schema.js +48 -0
  158. package/dist/schemas/config.schema.js.map +1 -0
  159. package/dist/sdk/__tests__/apr-service.test.d.ts +7 -0
  160. package/dist/sdk/__tests__/apr-service.test.d.ts.map +1 -0
  161. package/dist/sdk/__tests__/apr-service.test.js +385 -0
  162. package/dist/sdk/__tests__/apr-service.test.js.map +1 -0
  163. package/dist/sdk/__tests__/math-utils.test.d.ts +7 -0
  164. package/dist/sdk/__tests__/math-utils.test.d.ts.map +1 -0
  165. package/dist/sdk/__tests__/math-utils.test.js +185 -0
  166. package/dist/sdk/__tests__/math-utils.test.js.map +1 -0
  167. package/dist/sdk/__tests__/simulation-service.test.d.ts +5 -0
  168. package/dist/sdk/__tests__/simulation-service.test.d.ts.map +1 -0
  169. package/dist/sdk/__tests__/simulation-service.test.js +397 -0
  170. package/dist/sdk/__tests__/simulation-service.test.js.map +1 -0
  171. package/dist/sdk/__tests__/vault-utils.test.d.ts +7 -0
  172. package/dist/sdk/__tests__/vault-utils.test.d.ts.map +1 -0
  173. package/dist/sdk/__tests__/vault-utils.test.js +189 -0
  174. package/dist/sdk/__tests__/vault-utils.test.js.map +1 -0
  175. package/dist/sdk/apr-service.d.ts +101 -0
  176. package/dist/sdk/apr-service.d.ts.map +1 -0
  177. package/dist/sdk/apr-service.js +175 -0
  178. package/dist/sdk/apr-service.js.map +1 -0
  179. package/dist/sdk/math-utils.d.ts +138 -0
  180. package/dist/sdk/math-utils.d.ts.map +1 -0
  181. package/dist/sdk/math-utils.js +218 -0
  182. package/dist/sdk/math-utils.js.map +1 -0
  183. package/dist/sdk/simulation-service.d.ts +106 -0
  184. package/dist/sdk/simulation-service.d.ts.map +1 -0
  185. package/dist/sdk/simulation-service.js +143 -0
  186. package/dist/sdk/simulation-service.js.map +1 -0
  187. package/dist/sdk/vault-utils.d.ts +125 -0
  188. package/dist/sdk/vault-utils.d.ts.map +1 -0
  189. package/dist/sdk/vault-utils.js +165 -0
  190. package/dist/sdk/vault-utils.js.map +1 -0
  191. package/dist/server.d.ts +21 -0
  192. package/dist/server.d.ts.map +1 -0
  193. package/dist/server.js +225 -0
  194. package/dist/server.js.map +1 -0
  195. package/dist/services/analytics/protocol-overview.service.d.ts +61 -0
  196. package/dist/services/analytics/protocol-overview.service.d.ts.map +1 -0
  197. package/dist/services/analytics/protocol-overview.service.js +182 -0
  198. package/dist/services/analytics/protocol-overview.service.js.map +1 -0
  199. package/dist/services/analytics/risk.service.d.ts +92 -0
  200. package/dist/services/analytics/risk.service.d.ts.map +1 -0
  201. package/dist/services/analytics/risk.service.js +423 -0
  202. package/dist/services/analytics/risk.service.js.map +1 -0
  203. package/dist/services/base.service.d.ts +39 -0
  204. package/dist/services/base.service.d.ts.map +1 -0
  205. package/dist/services/base.service.js +37 -0
  206. package/dist/services/base.service.js.map +1 -0
  207. package/dist/services/index.d.ts +30 -0
  208. package/dist/services/index.d.ts.map +1 -0
  209. package/dist/services/index.js +101 -0
  210. package/dist/services/index.js.map +1 -0
  211. package/dist/tools/__tests__/simulate-vault.test.d.ts +5 -0
  212. package/dist/tools/__tests__/simulate-vault.test.d.ts.map +1 -0
  213. package/dist/tools/__tests__/simulate-vault.test.js +363 -0
  214. package/dist/tools/__tests__/simulate-vault.test.js.map +1 -0
  215. package/dist/tools/analyze-risk.d.ts +34 -0
  216. package/dist/tools/analyze-risk.d.ts.map +1 -0
  217. package/dist/tools/analyze-risk.js +100 -0
  218. package/dist/tools/analyze-risk.js.map +1 -0
  219. package/dist/tools/compare-vaults.d.ts +29 -0
  220. package/dist/tools/compare-vaults.d.ts.map +1 -0
  221. package/dist/tools/compare-vaults.js +285 -0
  222. package/dist/tools/compare-vaults.js.map +1 -0
  223. package/dist/tools/export-data.d.ts +34 -0
  224. package/dist/tools/export-data.d.ts.map +1 -0
  225. package/dist/tools/export-data.js +309 -0
  226. package/dist/tools/export-data.js.map +1 -0
  227. package/dist/tools/get-price-history.d.ts +29 -0
  228. package/dist/tools/get-price-history.d.ts.map +1 -0
  229. package/dist/tools/get-price-history.js +236 -0
  230. package/dist/tools/get-price-history.js.map +1 -0
  231. package/dist/tools/get-transactions.d.ts +29 -0
  232. package/dist/tools/get-transactions.d.ts.map +1 -0
  233. package/dist/tools/get-transactions.js +181 -0
  234. package/dist/tools/get-transactions.js.map +1 -0
  235. package/dist/tools/index.d.ts +26 -0
  236. package/dist/tools/index.d.ts.map +1 -0
  237. package/dist/tools/index.js +32 -0
  238. package/dist/tools/index.js.map +1 -0
  239. package/dist/tools/optimize-portfolio.d.ts +37 -0
  240. package/dist/tools/optimize-portfolio.d.ts.map +1 -0
  241. package/dist/tools/optimize-portfolio.js +459 -0
  242. package/dist/tools/optimize-portfolio.js.map +1 -0
  243. package/dist/tools/predict-yield.d.ts +30 -0
  244. package/dist/tools/predict-yield.d.ts.map +1 -0
  245. package/dist/tools/predict-yield.js +248 -0
  246. package/dist/tools/predict-yield.js.map +1 -0
  247. package/dist/tools/query-graphql.d.ts +35 -0
  248. package/dist/tools/query-graphql.d.ts.map +1 -0
  249. package/dist/tools/query-graphql.js +54 -0
  250. package/dist/tools/query-graphql.js.map +1 -0
  251. package/dist/tools/registry.d.ts +42 -0
  252. package/dist/tools/registry.d.ts.map +1 -0
  253. package/dist/tools/registry.js +231 -0
  254. package/dist/tools/registry.js.map +1 -0
  255. package/dist/tools/search-vaults.d.ts +40 -0
  256. package/dist/tools/search-vaults.d.ts.map +1 -0
  257. package/dist/tools/search-vaults.js +184 -0
  258. package/dist/tools/search-vaults.js.map +1 -0
  259. package/dist/tools/simulate-vault.d.ts +80 -0
  260. package/dist/tools/simulate-vault.d.ts.map +1 -0
  261. package/dist/tools/simulate-vault.js +281 -0
  262. package/dist/tools/simulate-vault.js.map +1 -0
  263. package/dist/tools/user-portfolio.d.ts +30 -0
  264. package/dist/tools/user-portfolio.d.ts.map +1 -0
  265. package/dist/tools/user-portfolio.js +142 -0
  266. package/dist/tools/user-portfolio.js.map +1 -0
  267. package/dist/tools/vault-data.d.ts +23 -0
  268. package/dist/tools/vault-data.d.ts.map +1 -0
  269. package/dist/tools/vault-data.js +68 -0
  270. package/dist/tools/vault-data.js.map +1 -0
  271. package/dist/tools/vault-performance.d.ts +30 -0
  272. package/dist/tools/vault-performance.d.ts.map +1 -0
  273. package/dist/tools/vault-performance.js +275 -0
  274. package/dist/tools/vault-performance.js.map +1 -0
  275. package/dist/types/generated.d.ts +1109 -0
  276. package/dist/types/generated.d.ts.map +1 -0
  277. package/dist/types/generated.js +2 -0
  278. package/dist/types/generated.js.map +1 -0
  279. package/dist/types/index.d.ts +46 -0
  280. package/dist/types/index.d.ts.map +1 -0
  281. package/dist/types/index.js +8 -0
  282. package/dist/types/index.js.map +1 -0
  283. package/dist/utils/comparison-metrics.d.ts +120 -0
  284. package/dist/utils/comparison-metrics.d.ts.map +1 -0
  285. package/dist/utils/comparison-metrics.js +215 -0
  286. package/dist/utils/comparison-metrics.js.map +1 -0
  287. package/dist/utils/config-loader.d.ts +17 -0
  288. package/dist/utils/config-loader.d.ts.map +1 -0
  289. package/dist/utils/config-loader.js +45 -0
  290. package/dist/utils/config-loader.js.map +1 -0
  291. package/dist/utils/csv-generator.d.ts +89 -0
  292. package/dist/utils/csv-generator.d.ts.map +1 -0
  293. package/dist/utils/csv-generator.js +97 -0
  294. package/dist/utils/csv-generator.js.map +1 -0
  295. package/dist/utils/disclaimers.d.ts +70 -0
  296. package/dist/utils/disclaimers.d.ts.map +1 -0
  297. package/dist/utils/disclaimers.js +161 -0
  298. package/dist/utils/disclaimers.js.map +1 -0
  299. package/dist/utils/errors.d.ts +66 -0
  300. package/dist/utils/errors.d.ts.map +1 -0
  301. package/dist/utils/errors.js +86 -0
  302. package/dist/utils/errors.js.map +1 -0
  303. package/dist/utils/execute-tool-with-cache.d.ts +97 -0
  304. package/dist/utils/execute-tool-with-cache.d.ts.map +1 -0
  305. package/dist/utils/execute-tool-with-cache.js +105 -0
  306. package/dist/utils/execute-tool-with-cache.js.map +1 -0
  307. package/dist/utils/portfolio-optimization.d.ts +100 -0
  308. package/dist/utils/portfolio-optimization.d.ts.map +1 -0
  309. package/dist/utils/portfolio-optimization.js +283 -0
  310. package/dist/utils/portfolio-optimization.js.map +1 -0
  311. package/dist/utils/risk-scoring.d.ts +226 -0
  312. package/dist/utils/risk-scoring.d.ts.map +1 -0
  313. package/dist/utils/risk-scoring.js +523 -0
  314. package/dist/utils/risk-scoring.js.map +1 -0
  315. package/dist/utils/tool-error-handler.d.ts +16 -0
  316. package/dist/utils/tool-error-handler.d.ts.map +1 -0
  317. package/dist/utils/tool-error-handler.js +43 -0
  318. package/dist/utils/tool-error-handler.js.map +1 -0
  319. package/dist/utils/tool-handler.d.ts +33 -0
  320. package/dist/utils/tool-handler.d.ts.map +1 -0
  321. package/dist/utils/tool-handler.js +59 -0
  322. package/dist/utils/tool-handler.js.map +1 -0
  323. package/dist/utils/tool-response.d.ts +16 -0
  324. package/dist/utils/tool-response.d.ts.map +1 -0
  325. package/dist/utils/tool-response.js +25 -0
  326. package/dist/utils/tool-response.js.map +1 -0
  327. package/dist/utils/validators.d.ts +359 -0
  328. package/dist/utils/validators.d.ts.map +1 -0
  329. package/dist/utils/validators.js +233 -0
  330. package/dist/utils/validators.js.map +1 -0
  331. package/dist/utils/yield-prediction.d.ts +69 -0
  332. package/dist/utils/yield-prediction.d.ts.map +1 -0
  333. package/dist/utils/yield-prediction.js +290 -0
  334. package/dist/utils/yield-prediction.js.map +1 -0
  335. package/package.json +83 -0
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Risk Analysis Service
3
+ *
4
+ * Encapsulates risk analysis business logic with dependency injection.
5
+ * Demonstrates service layer pattern for complex multi-step operations.
6
+ */
7
+ import { BaseService } from '../base.service.js';
8
+ import { RISK_ANALYSIS_QUERY } from '../../graphql/queries/index.js';
9
+ import { analyzeRisk } from '../../utils/risk-scoring.js';
10
+ /**
11
+ * Risk analysis service for vault risk assessment
12
+ */
13
+ export class RiskService extends BaseService {
14
+ /**
15
+ * Fetch risk analysis data from GraphQL
16
+ */
17
+ async fetchRiskData(vaultAddress, chainId) {
18
+ const data = await this.client.request(RISK_ANALYSIS_QUERY, {
19
+ vaultAddress,
20
+ chainId,
21
+ curatorId: '', // Will be extracted from vault.curators after fetch
22
+ where: {
23
+ vault_in: [vaultAddress],
24
+ type_in: ['TotalAssetsUpdated'],
25
+ },
26
+ orderBy: 'timestamp',
27
+ orderDirection: 'asc',
28
+ });
29
+ return data.vault ? data : null;
30
+ }
31
+ /**
32
+ * Calculate risk breakdown from fetched data
33
+ */
34
+ calculateRisk(data) {
35
+ // Calculate TVL
36
+ const vaultTVL = data.vault.state?.totalAssetsUsd || 0;
37
+ // Calculate total protocol TVL
38
+ const totalProtocolTVL = data.allVaults.items.reduce((sum, v) => sum + (v.state?.totalAssetsUsd || 0), 0);
39
+ // Extract price history and calculate price per share
40
+ const priceHistory = data.priceHistory.items.map((item) => {
41
+ // Calculate price per share from totalAssetsUsd / totalSupply
42
+ const totalSupply = parseFloat(item.data.totalSupply) / 1e18; // Convert from wei
43
+ return totalSupply > 0 ? item.data.totalAssetsUsd / totalSupply : 0;
44
+ });
45
+ // Calculate vault age in days from first transaction
46
+ const now = Math.floor(Date.now() / 1000);
47
+ const firstTransaction = data.priceHistory.items[0];
48
+ const createdAtTimestamp = firstTransaction
49
+ ? parseInt(firstTransaction.timestamp, 10)
50
+ : now - 365 * 24 * 60 * 60;
51
+ const ageInDays = Math.floor((now - createdAtTimestamp) / (24 * 60 * 60));
52
+ // Get curator vault count
53
+ const curatorVaultCount = data.curatorVaults.items.length;
54
+ // Calculate curator success rate (vaults with TVL > $10K)
55
+ const successfulVaults = data.curatorVaults.items.filter((v) => (v.state?.totalAssetsUsd || 0) > 10_000).length;
56
+ const curatorSuccessRate = curatorVaultCount > 0 ? successfulVaults / curatorVaultCount : 0.5;
57
+ // Extract curator professional signals
58
+ const curators = data.vault.curators || [];
59
+ const professionalSignals = {
60
+ hasWebsite: curators.some((c) => c.url && c.url.trim() !== ''),
61
+ hasDescription: curators.some((c) => c.aboutDescription && c.aboutDescription.trim() !== ''),
62
+ multipleCurators: curators.length > 1,
63
+ curatorCount: curators.length,
64
+ };
65
+ // Extract fee data
66
+ const managementFee = data.vault.state?.managementFee || 0;
67
+ const performanceFee = data.vault.state?.performanceFee || 0;
68
+ const pricePerShare = BigInt(data.vault.state?.pricePerShare || '0');
69
+ const highWaterMark = BigInt(data.vault.state?.highWaterMark || '0');
70
+ const performanceFeeActive = pricePerShare > highWaterMark;
71
+ // Extract liquidity data
72
+ const safeAssets = data.vault.state?.safeAssetBalanceUsd || 0;
73
+ const pendingRedemptions = data.vault.state?.pendingSettlement?.assetsUsd || 0;
74
+ // Extract APR data for consistency analysis
75
+ const aprData = {
76
+ weeklyApr: data.vault.state?.weeklyApr?.linearNetApr,
77
+ monthlyApr: data.vault.state?.monthlyApr?.linearNetApr,
78
+ yearlyApr: data.vault.state?.yearlyApr?.linearNetApr,
79
+ inceptionApr: data.vault.state?.inceptionApr?.linearNetApr,
80
+ };
81
+ // Extract yield composition data
82
+ const weeklyApr = data.vault.state?.weeklyApr;
83
+ const yieldComposition = weeklyApr
84
+ ? {
85
+ totalApr: weeklyApr.linearNetApr || 0,
86
+ nativeYieldsApr: weeklyApr.nativeYields?.reduce((sum, ny) => sum + (ny.apr || 0), 0) || 0,
87
+ airdropsApr: weeklyApr.airdrops?.reduce((sum, ad) => sum + (ad.apr || 0), 0) || 0,
88
+ incentivesApr: weeklyApr.incentives?.reduce((sum, inc) => sum + (inc.apr || 0), 0) || 0,
89
+ }
90
+ : undefined;
91
+ // Extract settlement data
92
+ const averageSettlement = data.vault.averageSettlement || 0;
93
+ const pendingOperationsRatio = safeAssets > 0 ? pendingRedemptions / safeAssets : 0;
94
+ const settlementData = {
95
+ averageSettlementDays: averageSettlement,
96
+ pendingOperationsRatio,
97
+ };
98
+ // Extract integration complexity data
99
+ const integrationCount = data.vault.defiIntegrations?.length || 0;
100
+ // Extract capacity utilization data
101
+ const totalAssets = parseFloat(data.vault.state?.totalAssets || '0');
102
+ const maxCapacity = data.vault.maxCapacity ? parseFloat(data.vault.maxCapacity) : null;
103
+ const capacityData = {
104
+ totalAssets,
105
+ maxCapacity,
106
+ };
107
+ // Perform risk analysis using utility function
108
+ return analyzeRisk({
109
+ tvl: vaultTVL,
110
+ totalProtocolTVL,
111
+ priceHistory,
112
+ ageInDays,
113
+ curatorVaultCount,
114
+ curatorSuccessRate,
115
+ curatorProfessionalSignals: professionalSignals,
116
+ managementFee,
117
+ performanceFee,
118
+ performanceFeeActive,
119
+ safeAssets,
120
+ pendingRedemptions,
121
+ aprData,
122
+ yieldComposition,
123
+ settlementData,
124
+ integrationCount,
125
+ capacityData,
126
+ });
127
+ }
128
+ /**
129
+ * Calculate comparative risk context by benchmarking against all vaults
130
+ *
131
+ * @param vaultRisk - Risk score for the target vault
132
+ * @param allVaultsData - Data for all vaults on the chain
133
+ * @returns Comparative risk context with percentile rankings
134
+ */
135
+ calculateComparativeContext(vaultRisk, allVaultsData) {
136
+ // Calculate risk scores for all vaults (simplified - using TVL as proxy)
137
+ // In production, this would calculate full risk scores, but that's expensive
138
+ // So we'll use a simplified approach based on TVL tiers as a proxy
139
+ const vaultRisks = allVaultsData.items
140
+ .map((v) => {
141
+ const tvl = v.state?.totalAssetsUsd || 0;
142
+ // Simplified risk estimation based on TVL (inverse relationship)
143
+ if (tvl >= 10_000_000)
144
+ return 0.15;
145
+ if (tvl >= 1_000_000)
146
+ return 0.25;
147
+ if (tvl >= 100_000)
148
+ return 0.45;
149
+ if (tvl >= 10_000)
150
+ return 0.65;
151
+ return 0.85;
152
+ })
153
+ .sort((a, b) => a - b); // Sort ascending (lower risk first)
154
+ if (vaultRisks.length === 0) {
155
+ return {
156
+ percentile: 50,
157
+ betterThanPercent: 50,
158
+ medianRisk: vaultRisk,
159
+ averageRisk: vaultRisk,
160
+ isOutlier: false,
161
+ riskRanking: 'No comparative data available',
162
+ };
163
+ }
164
+ // Calculate percentile (what % of vaults have lower risk)
165
+ const lowerRiskCount = vaultRisks.filter((r) => r < vaultRisk).length;
166
+ const percentile = (lowerRiskCount / vaultRisks.length) * 100;
167
+ const betterThanPercent = 100 - percentile;
168
+ // Calculate median
169
+ const midIndex = Math.floor(vaultRisks.length / 2);
170
+ const medianRisk = vaultRisks.length % 2 === 0
171
+ ? (vaultRisks[midIndex - 1] + vaultRisks[midIndex]) / 2
172
+ : vaultRisks[midIndex];
173
+ // Calculate average
174
+ const averageRisk = vaultRisks.reduce((sum, r) => sum + r, 0) / vaultRisks.length;
175
+ // Check if outlier (top/bottom 5%)
176
+ const isOutlier = percentile < 5 || percentile > 95;
177
+ // Generate ranking description
178
+ let riskRanking;
179
+ if (percentile >= 95) {
180
+ riskRanking = `Exceptionally safe - Top 5% lowest risk`;
181
+ }
182
+ else if (percentile >= 75) {
183
+ riskRanking = `Safer than ${Math.round(betterThanPercent)}% of vaults`;
184
+ }
185
+ else if (percentile >= 50) {
186
+ riskRanking = `Above average safety - Safer than ${Math.round(betterThanPercent)}% of vaults`;
187
+ }
188
+ else if (percentile >= 25) {
189
+ riskRanking = `Below average safety - Riskier than ${Math.round(percentile)}% of vaults`;
190
+ }
191
+ else if (percentile >= 5) {
192
+ riskRanking = `Riskier than ${Math.round(percentile)}% of vaults`;
193
+ }
194
+ else {
195
+ riskRanking = `High risk - Bottom 5% (riskier than ${Math.round(percentile)}% of vaults)`;
196
+ }
197
+ return {
198
+ percentile,
199
+ betterThanPercent,
200
+ medianRisk,
201
+ averageRisk,
202
+ isOutlier,
203
+ riskRanking,
204
+ };
205
+ }
206
+ /**
207
+ * Perform complete risk analysis for a vault
208
+ *
209
+ * @param vaultAddress - Vault address to analyze
210
+ * @param chainId - Chain ID of the vault
211
+ * @param includeComparative - Whether to include comparative benchmarking
212
+ * @returns Risk score breakdown or null if vault not found
213
+ */
214
+ async analyze(vaultAddress, chainId, includeComparative = true) {
215
+ // Fetch data
216
+ const data = await this.fetchRiskData(vaultAddress, chainId);
217
+ if (!data) {
218
+ return null;
219
+ }
220
+ // Calculate risk breakdown
221
+ const riskBreakdown = this.calculateRisk(data);
222
+ // Add comparative context if requested
223
+ if (includeComparative && data.allVaults.items.length > 0) {
224
+ const comparative = this.calculateComparativeContext(riskBreakdown.overallRisk, data.allVaults);
225
+ return {
226
+ ...riskBreakdown,
227
+ comparative,
228
+ };
229
+ }
230
+ return riskBreakdown;
231
+ }
232
+ /**
233
+ * Format risk breakdown as markdown table
234
+ */
235
+ formatRiskBreakdown(breakdown, responseFormat = 'summary') {
236
+ const scoreToEmoji = (score) => {
237
+ if (score < 0.3)
238
+ return '🟢';
239
+ if (score < 0.6)
240
+ return '🟡';
241
+ if (score < 0.8)
242
+ return '🟠';
243
+ return '🔴';
244
+ };
245
+ const scoreToPercentage = (score) => {
246
+ return `${(score * 100).toFixed(1)}%`;
247
+ };
248
+ const riskLevelToEmoji = (level) => {
249
+ switch (level) {
250
+ case 'Low':
251
+ return '🟢 Low';
252
+ case 'Medium':
253
+ return '🟡 Medium';
254
+ case 'High':
255
+ return '🟠 High';
256
+ case 'Critical':
257
+ return '🔴 Critical';
258
+ default:
259
+ return level;
260
+ }
261
+ };
262
+ // Score format: Just the overall risk score (~30 tokens)
263
+ if (responseFormat === 'score') {
264
+ return `# Risk Score: ${scoreToPercentage(breakdown.overallRisk)} | ${riskLevelToEmoji(breakdown.riskLevel)}`;
265
+ }
266
+ // Summary format: Risk score with key metrics (~200 tokens)
267
+ if (responseFormat === 'summary') {
268
+ // Identify top 3 risk factors
269
+ const riskFactors = [
270
+ { name: 'APR Consistency', score: breakdown.aprConsistencyRisk },
271
+ { name: 'Volatility', score: breakdown.volatilityRisk },
272
+ { name: 'TVL', score: breakdown.tvlRisk },
273
+ { name: 'Concentration', score: breakdown.concentrationRisk },
274
+ { name: 'Yield Sustainability', score: breakdown.yieldSustainabilityRisk },
275
+ { name: 'Age', score: breakdown.ageRisk },
276
+ { name: 'Curator', score: breakdown.curatorRisk },
277
+ { name: 'Fee', score: breakdown.feeRisk },
278
+ { name: 'Liquidity', score: breakdown.liquidityRisk },
279
+ { name: 'Settlement', score: breakdown.settlementRisk },
280
+ { name: 'Integration Complexity', score: breakdown.integrationComplexityRisk },
281
+ { name: 'Capacity Utilization', score: breakdown.capacityUtilizationRisk },
282
+ ];
283
+ const topRisks = riskFactors.sort((a, b) => b.score - a.score).slice(0, 3);
284
+ let comparativeSection = '';
285
+ if (breakdown.comparative) {
286
+ const { percentile, riskRanking, isOutlier } = breakdown.comparative;
287
+ const outlierIndicator = isOutlier ? ' 🌟' : '';
288
+ comparativeSection = `
289
+ ### 📊 Comparative Context${outlierIndicator}
290
+
291
+ **${riskRanking}** (Percentile: ${percentile.toFixed(1)}%)
292
+ `;
293
+ }
294
+ return `
295
+ ## Risk Analysis Dashboard
296
+
297
+ **Overall Risk**: ${scoreToPercentage(breakdown.overallRisk)} ${scoreToEmoji(breakdown.overallRisk)} | **Level**: ${riskLevelToEmoji(breakdown.riskLevel)}
298
+ ${comparativeSection}
299
+ ### 🎯 Top Risk Concerns
300
+
301
+ | Factor | Score | Status |
302
+ |--------|-------|--------|
303
+ | ${topRisks[0].name} | ${scoreToPercentage(topRisks[0].score)} | ${scoreToEmoji(topRisks[0].score)} |
304
+ | ${topRisks[1].name} | ${scoreToPercentage(topRisks[1].score)} | ${scoreToEmoji(topRisks[1].score)} |
305
+ | ${topRisks[2].name} | ${scoreToPercentage(topRisks[2].score)} | ${scoreToEmoji(topRisks[2].score)} |
306
+
307
+ ### All Risk Factors
308
+
309
+ | Factor | Score | Status |
310
+ |--------|-------|--------|
311
+ | APR Consistency | ${scoreToPercentage(breakdown.aprConsistencyRisk)} | ${scoreToEmoji(breakdown.aprConsistencyRisk)} |
312
+ | Volatility | ${scoreToPercentage(breakdown.volatilityRisk)} | ${scoreToEmoji(breakdown.volatilityRisk)} |
313
+ | Yield Sustainability | ${scoreToPercentage(breakdown.yieldSustainabilityRisk)} | ${scoreToEmoji(breakdown.yieldSustainabilityRisk)} |
314
+ | TVL | ${scoreToPercentage(breakdown.tvlRisk)} | ${scoreToEmoji(breakdown.tvlRisk)} |
315
+ | Concentration | ${scoreToPercentage(breakdown.concentrationRisk)} | ${scoreToEmoji(breakdown.concentrationRisk)} |
316
+ | Liquidity | ${scoreToPercentage(breakdown.liquidityRisk)} | ${scoreToEmoji(breakdown.liquidityRisk)} |
317
+ | Settlement Time | ${scoreToPercentage(breakdown.settlementRisk)} | ${scoreToEmoji(breakdown.settlementRisk)} |
318
+ | Age | ${scoreToPercentage(breakdown.ageRisk)} | ${scoreToEmoji(breakdown.ageRisk)} |
319
+ | Curator | ${scoreToPercentage(breakdown.curatorRisk)} | ${scoreToEmoji(breakdown.curatorRisk)} |
320
+ | Fees | ${scoreToPercentage(breakdown.feeRisk)} | ${scoreToEmoji(breakdown.feeRisk)} |
321
+ | Integration Complexity | ${scoreToPercentage(breakdown.integrationComplexityRisk)} | ${scoreToEmoji(breakdown.integrationComplexityRisk)} |
322
+ | Capacity Utilization | ${scoreToPercentage(breakdown.capacityUtilizationRisk)} | ${scoreToEmoji(breakdown.capacityUtilizationRisk)} |
323
+ `;
324
+ }
325
+ // Detailed format: Full breakdown with explanations
326
+ let comparativeDetailedSection = '';
327
+ if (breakdown.comparative) {
328
+ const { percentile, betterThanPercent, medianRisk, averageRisk, riskRanking, isOutlier } = breakdown.comparative;
329
+ const outlierNote = isOutlier
330
+ ? `
331
+ **Note**: This vault is a statistical outlier (top/bottom 5%)`
332
+ : '';
333
+ comparativeDetailedSection = `
334
+ ## 📊 Comparative Risk Benchmarking
335
+
336
+ **Vault Position**: ${riskRanking}
337
+
338
+ | Metric | Value |
339
+ |--------|-------|
340
+ | **Percentile Rank** | ${percentile.toFixed(1)}% ${percentile >= 75 ? '🟢' : percentile >= 50 ? '🟡' : percentile >= 25 ? '🟠' : '🔴'} |
341
+ | **Better Than** | ${betterThanPercent.toFixed(1)}% of vaults |
342
+ | **Chain Median Risk** | ${scoreToPercentage(medianRisk)} |
343
+ | **Chain Average Risk** | ${scoreToPercentage(averageRisk)} |
344
+ | **This Vault Risk** | ${scoreToPercentage(breakdown.overallRisk)} |
345
+ ${outlierNote}
346
+
347
+ ---
348
+
349
+ `;
350
+ }
351
+ return `
352
+ ${comparativeDetailedSection}## Risk Analysis Breakdown
353
+
354
+ ### Performance & Returns Risk
355
+ | Risk Factor | Score | Level |
356
+ |-------------|-------|-------|
357
+ | **APR Consistency** | ${scoreToPercentage(breakdown.aprConsistencyRisk)} | ${scoreToEmoji(breakdown.aprConsistencyRisk)} |
358
+ | **Volatility** | ${scoreToPercentage(breakdown.volatilityRisk)} | ${scoreToEmoji(breakdown.volatilityRisk)} |
359
+ | **Yield Sustainability** | ${scoreToPercentage(breakdown.yieldSustainabilityRisk)} | ${scoreToEmoji(breakdown.yieldSustainabilityRisk)} |
360
+
361
+ ### Market & Liquidity Risk
362
+ | Risk Factor | Score | Level |
363
+ |-------------|-------|-------|
364
+ | **TVL** | ${scoreToPercentage(breakdown.tvlRisk)} | ${scoreToEmoji(breakdown.tvlRisk)} |
365
+ | **Concentration** | ${scoreToPercentage(breakdown.concentrationRisk)} | ${scoreToEmoji(breakdown.concentrationRisk)} |
366
+ | **Liquidity** | ${scoreToPercentage(breakdown.liquidityRisk)} | ${scoreToEmoji(breakdown.liquidityRisk)} |
367
+
368
+ ### Operational Risk
369
+ | Risk Factor | Score | Level |
370
+ |-------------|-------|-------|
371
+ | **Settlement Time** | ${scoreToPercentage(breakdown.settlementRisk)} | ${scoreToEmoji(breakdown.settlementRisk)} |
372
+ | **Integration Complexity** | ${scoreToPercentage(breakdown.integrationComplexityRisk)} | ${scoreToEmoji(breakdown.integrationComplexityRisk)} |
373
+ | **Capacity Utilization** | ${scoreToPercentage(breakdown.capacityUtilizationRisk)} | ${scoreToEmoji(breakdown.capacityUtilizationRisk)} |
374
+
375
+ ### Qualitative Risk
376
+ | Risk Factor | Score | Level |
377
+ |-------------|-------|-------|
378
+ | **Age** | ${scoreToPercentage(breakdown.ageRisk)} | ${scoreToEmoji(breakdown.ageRisk)} |
379
+ | **Curator** | ${scoreToPercentage(breakdown.curatorRisk)} | ${scoreToEmoji(breakdown.curatorRisk)} |
380
+ | **Fees** | ${scoreToPercentage(breakdown.feeRisk)} | ${scoreToEmoji(breakdown.feeRisk)} |
381
+
382
+ ---
383
+
384
+ ## Overall Risk Assessment
385
+
386
+ **Risk Score**: ${scoreToPercentage(breakdown.overallRisk)}
387
+ **Risk Level**: ${riskLevelToEmoji(breakdown.riskLevel)}
388
+
389
+ ---
390
+
391
+ ### Risk Factor Explanations
392
+
393
+ #### Performance & Returns
394
+ **APR Consistency**: Measures return stability across time periods. High variation indicates unreliable strategy performance.
395
+
396
+ **Volatility**: Price stability over time. Based on standard deviation of daily returns. High volatility increases uncertainty.
397
+
398
+ **Yield Sustainability**: Composition of APR sources. Native yields are sustainable; temporary airdrops/incentives are not.
399
+
400
+ #### Market & Liquidity
401
+ **TVL**: Measures liquidity risk based on total value locked. Higher TVL indicates more market validation and liquidity.
402
+
403
+ **Concentration**: Vault's share of total protocol TVL. High concentration means protocol-wide risk if vault fails.
404
+
405
+ **Liquidity**: Ability to meet redemption requests. Based on safe asset coverage of pending redemptions.
406
+
407
+ #### Operational
408
+ **Settlement Time**: Average time to process redemptions plus pending operations burden. Longer delays increase exit risk.
409
+
410
+ **Integration Complexity**: Number of DeFi protocol integrations. More integrations = larger attack surface and failure cascades.
411
+
412
+ **Capacity Utilization**: Deposit headroom vs max capacity. Near-capacity vaults may reject deposits; under-utilized signals low demand.
413
+
414
+ #### Qualitative
415
+ **Age**: Vault maturity and battle-testing. Newer vaults lack operational track record and stress-test history.
416
+
417
+ **Curator**: Curator reputation based on experience (vault count), track record, and professional presence.
418
+
419
+ **Fees**: Impact of management and performance fees on returns. Higher fees reduce net investor returns.
420
+ `;
421
+ }
422
+ }
423
+ //# sourceMappingURL=risk.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.service.js","sourceRoot":"","sources":["../../../src/services/analytics/risk.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAsB,MAAM,6BAA6B,CAAC;AAwC9E;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB,EAAE,OAAe;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAmB,mBAAmB,EAAE;YAC5E,YAAY;YACZ,OAAO;YACP,SAAS,EAAE,EAAE,EAAE,oDAAoD;YACnE,KAAK,EAAE;gBACL,QAAQ,EAAE,CAAC,YAAY,CAAC;gBACxB,OAAO,EAAE,CAAC,oBAAoB,CAAC;aAChC;YACD,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAsB;QAClC,gBAAgB;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,CAAC;QAEvD,+BAA+B;QAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAClD,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,CAAC,EAChD,CAAC,CACF,CAAC;QAEF,sDAAsD;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxD,8DAA8D;YAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,mBAAmB;YACjF,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,kBAAkB,GAAG,gBAAgB;YACzC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1C,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE1E,0BAA0B;QAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;QAE1D,0DAA0D;QAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,CAAC,GAAG,MAAM,CAC/C,CAAC,MAAM,CAAC;QACT,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9F,uCAAuC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC3C,MAAM,mBAAmB,GAAG;YAC1B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC9D,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC5F,gBAAgB,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrC,YAAY,EAAE,QAAQ,CAAC,MAAM;SAC9B,CAAC;QAEF,mBAAmB;QACnB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;QACrE,MAAM,oBAAoB,GAAG,aAAa,GAAG,aAAa,CAAC;QAE3D,yBAAyB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,IAAI,CAAC,CAAC;QAE/E,4CAA4C;QAC5C,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY;YACpD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY;YACtD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY;YACpD,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY;SAC3D,CAAC;QAEF,iCAAiC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;QAC9C,MAAM,gBAAgB,GAAG,SAAS;YAChC,CAAC,CAAC;gBACE,QAAQ,EAAE,SAAS,CAAC,YAAY,IAAI,CAAC;gBACrC,eAAe,EAAE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;gBACzF,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;gBACjF,aAAa,EAAE,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;aACxF;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,0BAA0B;QAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC5D,MAAM,sBAAsB,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG;YACrB,qBAAqB,EAAE,iBAAiB;YACxC,sBAAsB;SACvB,CAAC;QAEF,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC;QAElE,oCAAoC;QACpC,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,MAAM,YAAY,GAAG;YACnB,WAAW;YACX,WAAW;SACZ,CAAC;QAEF,+CAA+C;QAC/C,OAAO,WAAW,CAAC;YACjB,GAAG,EAAE,QAAQ;YACb,gBAAgB;YAChB,YAAY;YACZ,SAAS;YACT,iBAAiB;YACjB,kBAAkB;YAClB,0BAA0B,EAAE,mBAAmB;YAC/C,aAAa;YACb,cAAc;YACd,oBAAoB;YACpB,UAAU;YACV,kBAAkB;YAClB,OAAO;YACP,gBAAgB;YAChB,cAAc;YACd,gBAAgB;YAChB,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,2BAA2B,CACzB,SAAiB,EACjB,aAA4C;QAE5C,yEAAyE;QACzE,6EAA6E;QAC7E,mEAAmE;QACnE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,CAAC;YACzC,iEAAiE;YACjE,IAAI,GAAG,IAAI,UAAU;gBAAE,OAAO,IAAI,CAAC;YACnC,IAAI,GAAG,IAAI,SAAS;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,GAAG,IAAI,OAAO;gBAAE,OAAO,IAAI,CAAC;YAChC,IAAI,GAAG,IAAI,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAE9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,UAAU,EAAE,EAAE;gBACd,iBAAiB,EAAE,EAAE;gBACrB,UAAU,EAAE,SAAS;gBACrB,WAAW,EAAE,SAAS;gBACtB,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,+BAA+B;aAC7C,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC;QACtE,MAAM,UAAU,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QAC9D,MAAM,iBAAiB,GAAG,GAAG,GAAG,UAAU,CAAC;QAE3C,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,GACd,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;YACzB,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;YACvD,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE3B,oBAAoB;QACpB,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAElF,mCAAmC;QACnC,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpD,+BAA+B;QAC/B,IAAI,WAAmB,CAAC;QACxB,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YACrB,WAAW,GAAG,yCAAyC,CAAC;QAC1D,CAAC;aAAM,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YAC5B,WAAW,GAAG,cAAc,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC;QACzE,CAAC;aAAM,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YAC5B,WAAW,GAAG,qCAAqC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAChG,CAAC;aAAM,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YAC5B,WAAW,GAAG,uCAAuC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QAC3F,CAAC;aAAM,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YAC3B,WAAW,GAAG,gBAAgB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,uCAAuC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5F,CAAC;QAED,OAAO;YACL,UAAU;YACV,iBAAiB;YACjB,UAAU;YACV,WAAW;YACX,SAAS;YACT,WAAW;SACZ,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,OAAe,EACf,qBAA8B,IAAI;QAElC,aAAa;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/C,uCAAuC;QACvC,IAAI,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAClD,aAAa,CAAC,WAAW,EACzB,IAAI,CAAC,SAAS,CACf,CAAC;YACF,OAAO;gBACL,GAAG,aAAa;gBAChB,WAAW;aACZ,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,mBAAmB,CACjB,SAAqC,EACrC,iBAAmD,SAAS;QAE5D,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE;YAC7C,IAAI,KAAK,GAAG,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC7B,IAAI,KAAK,GAAG,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC7B,IAAI,KAAK,GAAG,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAU,EAAE;YAClD,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACxC,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE;YACjD,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,KAAK;oBACR,OAAO,QAAQ,CAAC;gBAClB,KAAK,QAAQ;oBACX,OAAO,WAAW,CAAC;gBACrB,KAAK,MAAM;oBACT,OAAO,SAAS,CAAC;gBACnB,KAAK,UAAU;oBACb,OAAO,aAAa,CAAC;gBACvB;oBACE,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,yDAAyD;QACzD,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,iBAAiB,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAChH,CAAC;QAED,4DAA4D;QAC5D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,8BAA8B;YAC9B,MAAM,WAAW,GAAG;gBAClB,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,CAAC,kBAAkB,EAAE;gBAChE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,cAAc,EAAE;gBACvD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE;gBACzC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,EAAE;gBAC7D,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,CAAC,uBAAuB,EAAE;gBAC1E,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE;gBACzC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE;gBACjD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE;gBACzC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,aAAa,EAAE;gBACrD,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,cAAc,EAAE;gBACvD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,CAAC,yBAAyB,EAAE;gBAC9E,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,CAAC,uBAAuB,EAAE;aAC3E,CAAC;YAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3E,IAAI,kBAAkB,GAAG,EAAE,CAAC;YAC5B,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC1B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC;gBACrE,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,kBAAkB,GAAG;4BACD,gBAAgB;;IAExC,WAAW,mBAAmB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CACtD,CAAC;YACI,CAAC;YAED,OAAO;;;oBAGO,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,iBAAiB,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC;EACvJ,kBAAkB;;;;;IAKhB,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/F,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/F,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;;;;;sBAM7E,iBAAiB,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,kBAAkB,CAAC;iBACpG,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC;2BAC7E,iBAAiB,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC;UAC1H,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;oBAC/D,iBAAiB,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,iBAAiB,CAAC;gBACjG,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC;sBAC/E,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC;UACnG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;cACrE,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC;WACpF,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;6BACvD,iBAAiB,CAAC,SAAS,CAAC,yBAAyB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,yBAAyB,CAAC;2BAC/G,iBAAiB,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC;CACnI,CAAC;QACE,CAAC;QAED,oDAAoD;QACpD,IAAI,0BAA0B,GAAG,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,GACtF,SAAS,CAAC,WAAW,CAAC;YACxB,MAAM,WAAW,GAAG,SAAS;gBAC3B,CAAC,CAAC;8DACoD;gBACtD,CAAC,CAAC,EAAE,CAAC;YACP,0BAA0B,GAAG;;;sBAGb,WAAW;;;;0BAIP,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;sBAChH,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;4BACtB,iBAAiB,CAAC,UAAU,CAAC;6BAC5B,iBAAiB,CAAC,WAAW,CAAC;0BACjC,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC;EAChE,WAAW;;;;CAIZ,CAAC;QACE,CAAC;QAED,OAAO;EACT,0BAA0B;;;;;0BAKF,iBAAiB,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,kBAAkB,CAAC;qBACpG,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC;+BAC7E,iBAAiB,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC;;;;;cAK1H,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;wBAC/D,iBAAiB,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,iBAAiB,CAAC;oBACjG,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC;;;;;0BAK/E,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC;iCAChF,iBAAiB,CAAC,SAAS,CAAC,yBAAyB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,yBAAyB,CAAC;+BAC/G,iBAAiB,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC;;;;;cAK1H,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;kBACrE,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC;eACpF,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;kBAMtE,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC;kBACxC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCtD,CAAC;IACA,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Base Service Class
3
+ *
4
+ * Provides common functionality for all domain services.
5
+ * Services encapsulate business logic and interact with the container.
6
+ */
7
+ import { ServiceContainer } from '../core/container.js';
8
+ import { CacheService } from '../core/cache-adapter.js';
9
+ import { GraphQLClient } from 'graphql-request';
10
+ import { Config } from '../config.js';
11
+ /**
12
+ * Base service interface
13
+ */
14
+ export interface Service {
15
+ readonly name: string;
16
+ readonly container: ServiceContainer;
17
+ }
18
+ /**
19
+ * Abstract base service class
20
+ * All domain services should extend this class
21
+ */
22
+ export declare abstract class BaseService implements Service {
23
+ readonly name: string;
24
+ readonly container: ServiceContainer;
25
+ constructor(name: string, container: ServiceContainer);
26
+ /**
27
+ * Access cache service
28
+ */
29
+ protected get cache(): CacheService;
30
+ /**
31
+ * Access GraphQL client
32
+ */
33
+ protected get client(): GraphQLClient;
34
+ /**
35
+ * Access configuration
36
+ */
37
+ protected get config(): Config;
38
+ }
39
+ //# sourceMappingURL=base.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.service.d.ts","sourceRoot":"","sources":["../../src/services/base.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;AAED;;;GAGG;AACH,8BAAsB,WAAY,YAAW,OAAO;aAEhC,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,gBAAgB;gBAD3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,gBAAgB;IAG7C;;OAEG;IACH,SAAS,KAAK,KAAK,IAAI,YAAY,CAElC;IAED;;OAEG;IACH,SAAS,KAAK,MAAM,IAAI,aAAa,CAEpC;IAED;;OAEG;IACH,SAAS,KAAK,MAAM,IAAI,MAAM,CAE7B;CACF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Base Service Class
3
+ *
4
+ * Provides common functionality for all domain services.
5
+ * Services encapsulate business logic and interact with the container.
6
+ */
7
+ /**
8
+ * Abstract base service class
9
+ * All domain services should extend this class
10
+ */
11
+ export class BaseService {
12
+ name;
13
+ container;
14
+ constructor(name, container) {
15
+ this.name = name;
16
+ this.container = container;
17
+ }
18
+ /**
19
+ * Access cache service
20
+ */
21
+ get cache() {
22
+ return this.container.cache;
23
+ }
24
+ /**
25
+ * Access GraphQL client
26
+ */
27
+ get client() {
28
+ return this.container.graphqlClient;
29
+ }
30
+ /**
31
+ * Access configuration
32
+ */
33
+ get config() {
34
+ return this.container.config;
35
+ }
36
+ }
37
+ //# sourceMappingURL=base.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../src/services/base.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH;;;GAGG;AACH,MAAM,OAAgB,WAAW;IAEb;IACA;IAFlB,YACkB,IAAY,EACZ,SAA2B;QAD3B,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAkB;IAC1C,CAAC;IAEJ;;OAEG;IACH,IAAc,KAAK;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAc,MAAM;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAc,MAAM;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Service Registry
3
+ *
4
+ * Central registry for all domain services.
5
+ * Services are organized by domain and use dependency injection.
6
+ */
7
+ /**
8
+ * Service collection interface
9
+ */
10
+ /**
11
+ * Create all services with dependency injection
12
+ *
13
+ * Factory function that instantiates all domain services with the provided container.
14
+ * Services are organized by domain for clarity.
15
+ *
16
+ * @param container - Service container with dependencies
17
+ * @returns Complete service collection
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const container = createContainer(graphqlClient, cache, config);
22
+ * const services = createServices(container);
23
+ *
24
+ * // Use services
25
+ * const riskAnalysis = services.analytics.risk.analyze(vault, globalTVL);
26
+ * const simulation = services.vault.simulation.simulate(vault, newAssets);
27
+ * ```
28
+ */
29
+ export { BaseService } from './base.service.js';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH;;GAEG;AA0BH;;;;;;;;;;;;;;;;;;GAkBG;AAiCH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Service Registry
3
+ *
4
+ * Central registry for all domain services.
5
+ * Services are organized by domain and use dependency injection.
6
+ */
7
+ // NOTE: Service wrappers temporarily commented out
8
+ // These will be completed during the tool integration phase when we refactor tools
9
+ // to use the DI container pattern. The service layer infrastructure (BaseService,
10
+ // ServiceContainer) is ready, but individual service implementations need to match
11
+ // actual utility function signatures.
12
+ // import { ServiceContainer } from '../core/container.js';
13
+ // Vault services
14
+ // import { SimulationService } from './vault/simulation.service.js';
15
+ // import { APRService } from './vault/apr.service.js';
16
+ // Analytics services
17
+ // import { RiskService } from './analytics/risk.service.js';
18
+ // import { PredictionService } from './analytics/prediction.service.js';
19
+ // import { ComparisonService } from './analytics/comparison.service.js';
20
+ // Portfolio services
21
+ // import { OptimizationService } from './portfolio/optimization.service.js';
22
+ // Export services
23
+ // import { CSVService } from './export/csv.service.js';
24
+ /**
25
+ * Service collection interface
26
+ */
27
+ // export interface Services {
28
+ // // Vault domain
29
+ // vault: {
30
+ // simulation: SimulationService;
31
+ // apr: APRService;
32
+ // };
33
+ //
34
+ // // Analytics domain
35
+ // analytics: {
36
+ // risk: RiskService;
37
+ // prediction: PredictionService;
38
+ // comparison: ComparisonService;
39
+ // };
40
+ //
41
+ // // Portfolio domain
42
+ // portfolio: {
43
+ // optimization: OptimizationService;
44
+ // };
45
+ //
46
+ // // Export domain
47
+ // export: {
48
+ // csv: CSVService;
49
+ // };
50
+ // }
51
+ /**
52
+ * Create all services with dependency injection
53
+ *
54
+ * Factory function that instantiates all domain services with the provided container.
55
+ * Services are organized by domain for clarity.
56
+ *
57
+ * @param container - Service container with dependencies
58
+ * @returns Complete service collection
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const container = createContainer(graphqlClient, cache, config);
63
+ * const services = createServices(container);
64
+ *
65
+ * // Use services
66
+ * const riskAnalysis = services.analytics.risk.analyze(vault, globalTVL);
67
+ * const simulation = services.vault.simulation.simulate(vault, newAssets);
68
+ * ```
69
+ */
70
+ // export function createServices(container: ServiceContainer): Services {
71
+ // return {
72
+ // vault: {
73
+ // simulation: new SimulationService(container),
74
+ // apr: new APRService(container),
75
+ // },
76
+ // analytics: {
77
+ // risk: new RiskService(container),
78
+ // prediction: new PredictionService(container),
79
+ // comparison: new ComparisonService(container),
80
+ // },
81
+ // portfolio: {
82
+ // optimization: new OptimizationService(container),
83
+ // },
84
+ // export: {
85
+ // csv: new CSVService(container),
86
+ // },
87
+ // };
88
+ // }
89
+ // Re-export service classes for direct instantiation
90
+ // export {
91
+ // SimulationService,
92
+ // APRService,
93
+ // RiskService,
94
+ // PredictionService,
95
+ // ComparisonService,
96
+ // OptimizationService,
97
+ // CSVService,
98
+ // };
99
+ // Re-export base service
100
+ export { BaseService } from './base.service.js';
101
+ //# sourceMappingURL=index.js.map