@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,97 @@
1
+ /**
2
+ * Caching Layer
3
+ *
4
+ * In-memory caching with TTL using node-cache
5
+ */
6
+ import NodeCache from 'node-cache';
7
+ /**
8
+ * Shared cache instance
9
+ */
10
+ export declare const cache: NodeCache;
11
+ /**
12
+ * Cache TTL configuration by data type (in seconds)
13
+ *
14
+ * TTL Selection Criteria:
15
+ *
16
+ * 1. **Data Volatility**: How frequently the underlying data changes
17
+ * - High volatility (user actions, market prices) = shorter TTL
18
+ * - Low volatility (configuration, historical data) = longer TTL
19
+ *
20
+ * 2. **User Expectations**: How "fresh" users expect data to be
21
+ * - Real-time needs (portfolio values) = shorter TTL
22
+ * - Historical analysis (past performance) = longer TTL
23
+ *
24
+ * 3. **API Load Impact**: Balance between freshness and server load
25
+ * - Frequently accessed endpoints = moderate TTL for load reduction
26
+ * - Expensive queries (aggregations) = longer TTL for performance
27
+ *
28
+ * 4. **Data Type Characteristics**:
29
+ * - Static reference data (schema, glossary) = 24h+
30
+ * - Analytical results (predictions, risk) = 15-60min
31
+ * - User-specific data (portfolio) = 5min
32
+ * - Search/filter results = 10min
33
+ * - Historical data (performance, prices) = 30min
34
+ */
35
+ export declare const cacheTTL: {
36
+ readonly vaultData: 900;
37
+ readonly userPortfolio: 300;
38
+ readonly searchResults: 600;
39
+ readonly performance: 1800;
40
+ readonly transactions: 300;
41
+ readonly schema: 86400;
42
+ readonly comparison: 900;
43
+ readonly priceHistory: 1800;
44
+ readonly riskAnalysis: 900;
45
+ readonly yieldPrediction: 3600;
46
+ readonly portfolioOptimization: 300;
47
+ };
48
+ /**
49
+ * Search filters type for cache key generation
50
+ */
51
+ type SearchFilters = {
52
+ filterHash: string;
53
+ };
54
+ /**
55
+ * Cache key generators
56
+ *
57
+ * Provides consistent cache key formatting for different data types
58
+ */
59
+ export declare const cacheKeys: {
60
+ vaultData: (address: string, chainId: number) => string;
61
+ userPortfolio: (address: string) => string;
62
+ searchVaults: (filters: SearchFilters) => string;
63
+ vaultPerformance: (address: string, chainId: number, range: string) => string;
64
+ transactions: ({ vaultAddress, chainId, filterHash, first, skip, orderBy, orderDirection, }: {
65
+ vaultAddress: string;
66
+ chainId: number;
67
+ filterHash: string;
68
+ first: number;
69
+ skip: number;
70
+ orderBy: string;
71
+ orderDirection: string;
72
+ }) => string;
73
+ schema: () => string;
74
+ compareVaults: (addresses: string[], chainId: number) => string;
75
+ priceHistory: (address: string, chainId: number, range: string) => string;
76
+ };
77
+ /**
78
+ * Generate cache key based on cache tag and parameters
79
+ *
80
+ * NEW: Generic cache key generator for fragment-level caching
81
+ * Used to create consistent cache keys across different tools
82
+ *
83
+ * @param tag - Cache tag identifying the data type
84
+ * @param params - Parameters for cache key generation
85
+ * @returns Generated cache key string
86
+ */
87
+ export declare function generateCacheKey(tag: string, params: Record<string, string | number>): string;
88
+ /**
89
+ * Cache statistics
90
+ */
91
+ export declare function getCacheStats(): NodeCache.Stats;
92
+ /**
93
+ * Clear all cache entries
94
+ */
95
+ export declare function clearCache(): void;
96
+ export {};
97
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC;;GAEG;AACH,eAAO,MAAM,KAAK,WAKhB,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;CAYX,CAAC;AAEX;;GAEG;AACH,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;yBACC,MAAM,WAAW,MAAM,KAAG,MAAM;6BAE5B,MAAM,KAAG,MAAM;4BAEhB,aAAa,KAAG,MAAM;gCAElB,MAAM,WAAW,MAAM,SAAS,MAAM,KAAG,MAAM;iGAWxE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,KAAG,MAAM;kBAGE,MAAM;+BAES,MAAM,EAAE,WAAW,MAAM,KAAG,MAAM;4BAKrC,MAAM,WAAW,MAAM,SAAS,MAAM,KAAG,MAAM;CAExE,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAa7F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,KAAK,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Caching Layer
3
+ *
4
+ * In-memory caching with TTL using node-cache
5
+ */
6
+ import NodeCache from 'node-cache';
7
+ import { config } from '../config.js';
8
+ /**
9
+ * Shared cache instance
10
+ */
11
+ export const cache = new NodeCache({
12
+ stdTTL: config.cache.stdTTL,
13
+ checkperiod: config.cache.checkperiod,
14
+ useClones: false, // Performance optimization
15
+ maxKeys: config.cache.maxKeys,
16
+ });
17
+ /**
18
+ * Cache TTL configuration by data type (in seconds)
19
+ *
20
+ * TTL Selection Criteria:
21
+ *
22
+ * 1. **Data Volatility**: How frequently the underlying data changes
23
+ * - High volatility (user actions, market prices) = shorter TTL
24
+ * - Low volatility (configuration, historical data) = longer TTL
25
+ *
26
+ * 2. **User Expectations**: How "fresh" users expect data to be
27
+ * - Real-time needs (portfolio values) = shorter TTL
28
+ * - Historical analysis (past performance) = longer TTL
29
+ *
30
+ * 3. **API Load Impact**: Balance between freshness and server load
31
+ * - Frequently accessed endpoints = moderate TTL for load reduction
32
+ * - Expensive queries (aggregations) = longer TTL for performance
33
+ *
34
+ * 4. **Data Type Characteristics**:
35
+ * - Static reference data (schema, glossary) = 24h+
36
+ * - Analytical results (predictions, risk) = 15-60min
37
+ * - User-specific data (portfolio) = 5min
38
+ * - Search/filter results = 10min
39
+ * - Historical data (performance, prices) = 30min
40
+ */
41
+ export const cacheTTL = {
42
+ vaultData: 900, // 15 minutes - vault fundamentals change infrequently
43
+ userPortfolio: 300, // 5 minutes - positions change with user actions
44
+ searchResults: 600, // 10 minutes - discovery queries, balanced freshness
45
+ performance: 1800, // 30 minutes - historical metrics, computation-heavy
46
+ transactions: 300, // 5 minutes - transaction history updates
47
+ schema: 86400, // 24 hours - schema changes require deployment
48
+ comparison: 900, // 15 minutes - derived metrics from vault data
49
+ priceHistory: 1800, // 30 minutes - historical OHLCV data, expensive query
50
+ riskAnalysis: 900, // 15 minutes - multi-factor calculation, moderate cost
51
+ yieldPrediction: 3600, // 60 minutes - ML-based forecast, expensive computation
52
+ portfolioOptimization: 300, // 5 minutes - user-specific, interactive use case
53
+ };
54
+ /**
55
+ * Cache key generators
56
+ *
57
+ * Provides consistent cache key formatting for different data types
58
+ */
59
+ export const cacheKeys = {
60
+ vaultData: (address, chainId) => `vault:${address}:${chainId}`,
61
+ userPortfolio: (address) => `portfolio:${address}`,
62
+ searchVaults: (filters) => `search:${filters.filterHash}`,
63
+ vaultPerformance: (address, chainId, range) => `perf:${address}:${chainId}:${range}`,
64
+ transactions: ({ vaultAddress, chainId, filterHash, first, skip, orderBy, orderDirection, }) => `transactions:${vaultAddress}:${chainId}:${filterHash}:${first}:${skip}:${orderBy}:${orderDirection}`,
65
+ schema: () => 'schema:latest',
66
+ compareVaults: (addresses, chainId) => {
67
+ const sortedAddresses = [...addresses].sort().join(',');
68
+ return `compare:${sortedAddresses}:${chainId}`;
69
+ },
70
+ priceHistory: (address, chainId, range) => `price_history:${address}:${chainId}:${range}`,
71
+ };
72
+ /**
73
+ * Generate cache key based on cache tag and parameters
74
+ *
75
+ * NEW: Generic cache key generator for fragment-level caching
76
+ * Used to create consistent cache keys across different tools
77
+ *
78
+ * @param tag - Cache tag identifying the data type
79
+ * @param params - Parameters for cache key generation
80
+ * @returns Generated cache key string
81
+ */
82
+ export function generateCacheKey(tag, params) {
83
+ // For vault data, use the standard vault cache key format
84
+ if (tag === 'VAULT' && 'address' in params && 'chainId' in params) {
85
+ return cacheKeys.vaultData(String(params.address), Number(params.chainId));
86
+ }
87
+ // Generic fallback for other cache keys
88
+ const sortedParams = Object.entries(params)
89
+ .sort(([a], [b]) => a.localeCompare(b))
90
+ .map(([key, value]) => `${key}:${value}`)
91
+ .join(':');
92
+ return `${tag.toLowerCase()}:${sortedParams}`;
93
+ }
94
+ /**
95
+ * Cache statistics
96
+ */
97
+ export function getCacheStats() {
98
+ return cache.getStats();
99
+ }
100
+ /**
101
+ * Clear all cache entries
102
+ */
103
+ export function clearCache() {
104
+ cache.flushAll();
105
+ }
106
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Configuration management for Lagoon MCP
3
+ *
4
+ * Centralized configuration with validated environment variables.
5
+ * All environment variables are validated at startup using Zod schema.
6
+ * The application will exit with clear error messages if misconfigured.
7
+ */
8
+ /**
9
+ * Application configuration
10
+ *
11
+ * This configuration is validated at startup to ensure all required
12
+ * environment variables are properly set. The application will not
13
+ * start if configuration is invalid.
14
+ */
15
+ export declare const config: {
16
+ readonly graphql: {
17
+ readonly endpoint: string;
18
+ readonly timeout: 30000;
19
+ };
20
+ readonly cache: {
21
+ readonly stdTTL: number;
22
+ readonly checkperiod: 120;
23
+ readonly maxKeys: number;
24
+ };
25
+ readonly server: {
26
+ readonly name: "lagoon-mcp";
27
+ readonly version: "0.1.0";
28
+ };
29
+ readonly isDevelopment: boolean;
30
+ readonly isProduction: boolean;
31
+ readonly isTest: boolean;
32
+ };
33
+ export type Config = typeof config;
34
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;CAwBT,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Configuration management for Lagoon MCP
3
+ *
4
+ * Centralized configuration with validated environment variables.
5
+ * All environment variables are validated at startup using Zod schema.
6
+ * The application will exit with clear error messages if misconfigured.
7
+ */
8
+ import { loadAndValidateEnv } from './utils/config-loader.js';
9
+ // Validate environment variables at startup (fails fast if misconfigured)
10
+ const env = loadAndValidateEnv();
11
+ /**
12
+ * Application configuration
13
+ *
14
+ * This configuration is validated at startup to ensure all required
15
+ * environment variables are properly set. The application will not
16
+ * start if configuration is invalid.
17
+ */
18
+ export const config = {
19
+ // GraphQL Backend
20
+ graphql: {
21
+ endpoint: env.LAGOON_GRAPHQL_URL,
22
+ timeout: 30000, // 30 seconds
23
+ },
24
+ // Caching
25
+ cache: {
26
+ stdTTL: env.CACHE_TTL ?? 600, // Default 10 minutes
27
+ checkperiod: 120, // Check expired keys every 2 minutes
28
+ maxKeys: env.CACHE_MAX_KEYS ?? 1000, // Maximum cache entries
29
+ },
30
+ // Server
31
+ server: {
32
+ name: 'lagoon-mcp',
33
+ version: '0.1.0',
34
+ },
35
+ // Environment flags
36
+ isDevelopment: env.NODE_ENV === 'development',
37
+ isProduction: env.NODE_ENV === 'production',
38
+ isTest: env.NODE_ENV === 'test',
39
+ };
40
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,0EAA0E;AAC1E,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,kBAAkB;IAClB,OAAO,EAAE;QACP,QAAQ,EAAE,GAAG,CAAC,kBAAkB;QAChC,OAAO,EAAE,KAAK,EAAE,aAAa;KAC9B;IAED,UAAU;IACV,KAAK,EAAE;QACL,MAAM,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,EAAE,qBAAqB;QACnD,WAAW,EAAE,GAAG,EAAE,qCAAqC;QACvD,OAAO,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,wBAAwB;KAC9D;IAED,SAAS;IACT,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACjB;IAED,oBAAoB;IACpB,aAAa,EAAE,GAAG,CAAC,QAAQ,KAAK,aAAa;IAC7C,YAAY,EAAE,GAAG,CAAC,QAAQ,KAAK,YAAY;IAC3C,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,MAAM;CACvB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Cache Service Abstraction
3
+ *
4
+ * Provides interface for caching implementations.
5
+ * Allows swapping cache backends without changing tool code.
6
+ */
7
+ import NodeCache from 'node-cache';
8
+ /**
9
+ * Cache statistics interface
10
+ */
11
+ export interface CacheStats {
12
+ hits: number;
13
+ misses: number;
14
+ keys: number;
15
+ ksize: number;
16
+ vsize: number;
17
+ }
18
+ /**
19
+ * Cache service interface
20
+ * Abstracts away concrete caching implementation
21
+ */
22
+ export interface CacheService {
23
+ /**
24
+ * Get cached value
25
+ * @returns Cached value or undefined if not found or expired
26
+ */
27
+ get<T>(key: string): T | undefined;
28
+ /**
29
+ * Set cache value with TTL
30
+ * @param key Cache key
31
+ * @param value Value to cache
32
+ * @param ttl Time-to-live in seconds
33
+ */
34
+ set<T>(key: string, value: T, ttl: number): void;
35
+ /**
36
+ * Check if key exists in cache
37
+ */
38
+ has(key: string): boolean;
39
+ /**
40
+ * Delete cache entry
41
+ */
42
+ del(key: string): void;
43
+ /**
44
+ * Clear all cache entries
45
+ */
46
+ flush(): void;
47
+ /**
48
+ * Get cache statistics
49
+ */
50
+ getStats(): CacheStats;
51
+ }
52
+ /**
53
+ * NodeCache adapter implementing CacheService interface
54
+ */
55
+ export declare class NodeCacheAdapter implements CacheService {
56
+ private cache;
57
+ constructor(cache: NodeCache);
58
+ get<T>(key: string): T | undefined;
59
+ set<T>(key: string, value: T, ttl: number): void;
60
+ has(key: string): boolean;
61
+ del(key: string): void;
62
+ flush(): void;
63
+ getStats(): CacheStats;
64
+ }
65
+ /**
66
+ * Create NodeCache adapter with configuration
67
+ */
68
+ export declare function createNodeCacheAdapter(options: {
69
+ stdTTL: number;
70
+ checkperiod: number;
71
+ maxKeys: number;
72
+ }): CacheService;
73
+ //# sourceMappingURL=cache-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-adapter.d.ts","sourceRoot":"","sources":["../../src/core/cache-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAEnC;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACvC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAEpC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAItB,KAAK,IAAI,IAAI;IAIb,QAAQ,IAAI,UAAU;CAGvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,YAAY,CASf"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Cache Service Abstraction
3
+ *
4
+ * Provides interface for caching implementations.
5
+ * Allows swapping cache backends without changing tool code.
6
+ */
7
+ import NodeCache from 'node-cache';
8
+ /**
9
+ * NodeCache adapter implementing CacheService interface
10
+ */
11
+ export class NodeCacheAdapter {
12
+ cache;
13
+ constructor(cache) {
14
+ this.cache = cache;
15
+ }
16
+ get(key) {
17
+ return this.cache.get(key);
18
+ }
19
+ set(key, value, ttl) {
20
+ this.cache.set(key, value, ttl);
21
+ }
22
+ has(key) {
23
+ return this.cache.has(key);
24
+ }
25
+ del(key) {
26
+ this.cache.del(key);
27
+ }
28
+ flush() {
29
+ this.cache.flushAll();
30
+ }
31
+ getStats() {
32
+ return this.cache.getStats();
33
+ }
34
+ }
35
+ /**
36
+ * Create NodeCache adapter with configuration
37
+ */
38
+ export function createNodeCacheAdapter(options) {
39
+ const cache = new NodeCache({
40
+ stdTTL: options.stdTTL,
41
+ checkperiod: options.checkperiod,
42
+ useClones: false, // Performance optimization
43
+ maxKeys: options.maxKeys,
44
+ });
45
+ return new NodeCacheAdapter(cache);
46
+ }
47
+ //# sourceMappingURL=cache-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-adapter.js","sourceRoot":"","sources":["../../src/core/cache-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAqDnC;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;IAAG,CAAC;IAExC,GAAG,CAAI,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,GAAW;QACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAItC;IACC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,KAAK,EAAE,2BAA2B;QAC7C,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Cache Invalidation System
3
+ *
4
+ * Tag-based cache invalidation for maintaining consistency.
5
+ * When data changes, invalidate all related cache entries by tag.
6
+ */
7
+ import type { CacheService } from './cache-adapter.js';
8
+ /**
9
+ * Cache tags for organizing related entries
10
+ */
11
+ export declare enum CacheTag {
12
+ VAULT = "vault",
13
+ PORTFOLIO = "portfolio",
14
+ TRANSACTION = "transaction",
15
+ ANALYTICS = "analytics",
16
+ APR = "apr",
17
+ RISK = "risk",
18
+ ALL = "all"
19
+ }
20
+ /**
21
+ * Cache invalidation coordinator
22
+ */
23
+ export declare class CacheInvalidator {
24
+ private cache;
25
+ private tagMap;
26
+ constructor(cache: CacheService);
27
+ /**
28
+ * Register a cache key with its associated tags
29
+ */
30
+ register(key: string, tags: CacheTag[]): void;
31
+ /**
32
+ * Invalidate all cache entries with the given tag
33
+ */
34
+ invalidateByTag(tag: CacheTag): number;
35
+ /**
36
+ * Invalidate multiple tags at once
37
+ */
38
+ invalidateByTags(tags: CacheTag[]): number;
39
+ /**
40
+ * Invalidate a specific cache key
41
+ */
42
+ invalidateKey(key: string): boolean;
43
+ /**
44
+ * Clear all cache entries
45
+ */
46
+ invalidateAll(): void;
47
+ /**
48
+ * Get all keys associated with a tag
49
+ */
50
+ getKeysByTag(tag: CacheTag): string[];
51
+ /**
52
+ * Get cache statistics with tag information
53
+ */
54
+ getStats(): {
55
+ totalKeys: number;
56
+ tagCount: number;
57
+ keysByTag: Record<string, number>;
58
+ };
59
+ }
60
+ /**
61
+ * Example usage relationships
62
+ *
63
+ * When vault data changes:
64
+ * - Invalidate CacheTag.VAULT → clears vault data, apr, risk analysis
65
+ *
66
+ * When portfolio is rebalanced:
67
+ * - Invalidate CacheTag.PORTFOLIO → clears portfolio optimization
68
+ *
69
+ * When transaction occurs:
70
+ * - Invalidate [CacheTag.VAULT, CacheTag.ANALYTICS] → clears affected data
71
+ */
72
+ //# sourceMappingURL=cache-invalidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-invalidation.d.ts","sourceRoot":"","sources":["../../src/core/cache-invalidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAOD;;GAEG;AACH,qBAAa,gBAAgB;IAGf,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,MAAM,CAA0B;gBAEpB,KAAK,EAAE,YAAY;IAEvC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI;IAM7C;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM;IActC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM;IAU1C;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKnC;;OAEG;IACH,aAAa,IAAI,IAAI;IAKrB;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,EAAE;IAYrC;;OAEG;IACH,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC;CAaF;AAED;;;;;;;;;;;GAWG"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Cache Invalidation System
3
+ *
4
+ * Tag-based cache invalidation for maintaining consistency.
5
+ * When data changes, invalidate all related cache entries by tag.
6
+ */
7
+ /**
8
+ * Cache tags for organizing related entries
9
+ */
10
+ export var CacheTag;
11
+ (function (CacheTag) {
12
+ CacheTag["VAULT"] = "vault";
13
+ CacheTag["PORTFOLIO"] = "portfolio";
14
+ CacheTag["TRANSACTION"] = "transaction";
15
+ CacheTag["ANALYTICS"] = "analytics";
16
+ CacheTag["APR"] = "apr";
17
+ CacheTag["RISK"] = "risk";
18
+ CacheTag["ALL"] = "all";
19
+ })(CacheTag || (CacheTag = {}));
20
+ /**
21
+ * Cache invalidation coordinator
22
+ */
23
+ export class CacheInvalidator {
24
+ cache;
25
+ tagMap = new Map();
26
+ constructor(cache) {
27
+ this.cache = cache;
28
+ }
29
+ /**
30
+ * Register a cache key with its associated tags
31
+ */
32
+ register(key, tags) {
33
+ const tagSet = this.tagMap.get(key) || new Set();
34
+ tags.forEach((tag) => tagSet.add(tag));
35
+ this.tagMap.set(key, tagSet);
36
+ }
37
+ /**
38
+ * Invalidate all cache entries with the given tag
39
+ */
40
+ invalidateByTag(tag) {
41
+ let invalidated = 0;
42
+ for (const [key, tags] of this.tagMap.entries()) {
43
+ if (tags.has(tag) || tag === CacheTag.ALL) {
44
+ this.cache.del(key);
45
+ this.tagMap.delete(key);
46
+ invalidated++;
47
+ }
48
+ }
49
+ return invalidated;
50
+ }
51
+ /**
52
+ * Invalidate multiple tags at once
53
+ */
54
+ invalidateByTags(tags) {
55
+ let invalidated = 0;
56
+ for (const tag of tags) {
57
+ invalidated += this.invalidateByTag(tag);
58
+ }
59
+ return invalidated;
60
+ }
61
+ /**
62
+ * Invalidate a specific cache key
63
+ */
64
+ invalidateKey(key) {
65
+ this.cache.del(key);
66
+ return this.tagMap.delete(key);
67
+ }
68
+ /**
69
+ * Clear all cache entries
70
+ */
71
+ invalidateAll() {
72
+ this.cache.flush();
73
+ this.tagMap.clear();
74
+ }
75
+ /**
76
+ * Get all keys associated with a tag
77
+ */
78
+ getKeysByTag(tag) {
79
+ const keys = [];
80
+ for (const [key, tags] of this.tagMap.entries()) {
81
+ if (tags.has(tag)) {
82
+ keys.push(key);
83
+ }
84
+ }
85
+ return keys;
86
+ }
87
+ /**
88
+ * Get cache statistics with tag information
89
+ */
90
+ getStats() {
91
+ const keysByTag = {};
92
+ for (const tag of Object.values(CacheTag)) {
93
+ keysByTag[tag] = this.getKeysByTag(tag).length;
94
+ }
95
+ return {
96
+ totalKeys: this.tagMap.size,
97
+ tagCount: Object.keys(CacheTag).length,
98
+ keysByTag,
99
+ };
100
+ }
101
+ }
102
+ /**
103
+ * Example usage relationships
104
+ *
105
+ * When vault data changes:
106
+ * - Invalidate CacheTag.VAULT → clears vault data, apr, risk analysis
107
+ *
108
+ * When portfolio is rebalanced:
109
+ * - Invalidate CacheTag.PORTFOLIO → clears portfolio optimization
110
+ *
111
+ * When transaction occurs:
112
+ * - Invalidate [CacheTag.VAULT, CacheTag.ANALYTICS] → clears affected data
113
+ */
114
+ //# sourceMappingURL=cache-invalidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-invalidation.js","sourceRoot":"","sources":["../../src/core/cache-invalidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Dependency Injection Container
3
+ *
4
+ * Provides centralized dependency management for testability and flexibility.
5
+ * Eliminates global singletons and enables easy mocking for tests.
6
+ */
7
+ import { GraphQLClient } from 'graphql-request';
8
+ import { Config } from '../config.js';
9
+ import { CacheService } from './cache-adapter.js';
10
+ import { CacheInvalidator } from './cache-invalidation.js';
11
+ /**
12
+ * Service container interface
13
+ * All application dependencies are accessed through this container
14
+ */
15
+ export interface ServiceContainer {
16
+ /** GraphQL client for backend communication */
17
+ graphqlClient: GraphQLClient;
18
+ /** Cache service for data caching */
19
+ cache: CacheService;
20
+ /** Cache invalidation coordinator */
21
+ cacheInvalidator: CacheInvalidator;
22
+ /** Application configuration */
23
+ config: Config;
24
+ }
25
+ /**
26
+ * Create production container with real implementations
27
+ */
28
+ export declare function createContainer(graphqlClient: GraphQLClient, cache: CacheService, config: Config): ServiceContainer;
29
+ /**
30
+ * Create test container with mock implementations
31
+ * Useful for unit testing without real dependencies
32
+ */
33
+ export declare function createTestContainer(overrides?: Partial<ServiceContainer>): ServiceContainer;
34
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,aAAa,EAAE,aAAa,CAAC;IAE7B,qCAAqC;IACrC,KAAK,EAAE,YAAY,CAAC;IAEpB,qCAAqC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,GACb,gBAAgB,CASlB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAsD3F"}