@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.
- package/LICENSE +201 -0
- package/README.md +618 -0
- package/dist/cache/index.d.ts +97 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +106 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +40 -0
- package/dist/config.js.map +1 -0
- package/dist/core/cache-adapter.d.ts +73 -0
- package/dist/core/cache-adapter.d.ts.map +1 -0
- package/dist/core/cache-adapter.js +47 -0
- package/dist/core/cache-adapter.js.map +1 -0
- package/dist/core/cache-invalidation.d.ts +72 -0
- package/dist/core/cache-invalidation.d.ts.map +1 -0
- package/dist/core/cache-invalidation.js +114 -0
- package/dist/core/cache-invalidation.js.map +1 -0
- package/dist/core/container.d.ts +34 -0
- package/dist/core/container.d.ts.map +1 -0
- package/dist/core/container.js +75 -0
- package/dist/core/container.js.map +1 -0
- package/dist/graphql/client.d.ts +32 -0
- package/dist/graphql/client.d.ts.map +1 -0
- package/dist/graphql/client.js +49 -0
- package/dist/graphql/client.js.map +1 -0
- package/dist/graphql/fragments/apr-breakdown.fragment.d.ts +64 -0
- package/dist/graphql/fragments/apr-breakdown.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/apr-breakdown.fragment.js +62 -0
- package/dist/graphql/fragments/apr-breakdown.fragment.js.map +1 -0
- package/dist/graphql/fragments/asset-info.fragment.d.ts +18 -0
- package/dist/graphql/fragments/asset-info.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/asset-info.fragment.js +36 -0
- package/dist/graphql/fragments/asset-info.fragment.js.map +1 -0
- package/dist/graphql/fragments/chain-info.fragment.d.ts +18 -0
- package/dist/graphql/fragments/chain-info.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/chain-info.fragment.js +32 -0
- package/dist/graphql/fragments/chain-info.fragment.js.map +1 -0
- package/dist/graphql/fragments/index.d.ts +15 -0
- package/dist/graphql/fragments/index.d.ts.map +1 -0
- package/dist/graphql/fragments/index.js +21 -0
- package/dist/graphql/fragments/index.js.map +1 -0
- package/dist/graphql/fragments/pageinfo.fragment.d.ts +33 -0
- package/dist/graphql/fragments/pageinfo.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/pageinfo.fragment.js +47 -0
- package/dist/graphql/fragments/pageinfo.fragment.js.map +1 -0
- package/dist/graphql/fragments/transaction-base.fragment.d.ts +19 -0
- package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/transaction-base.fragment.js +32 -0
- package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -0
- package/dist/graphql/fragments/vault-list.fragment.d.ts +53 -0
- package/dist/graphql/fragments/vault-list.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/vault-list.fragment.js +51 -0
- package/dist/graphql/fragments/vault-list.fragment.js.map +1 -0
- package/dist/graphql/fragments/vault-summary.fragment.d.ts +68 -0
- package/dist/graphql/fragments/vault-summary.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/vault-summary.fragment.js +66 -0
- package/dist/graphql/fragments/vault-summary.fragment.js.map +1 -0
- package/dist/graphql/fragments/vault.fragment.d.ts +133 -0
- package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -0
- package/dist/graphql/fragments/vault.fragment.js +119 -0
- package/dist/graphql/fragments/vault.fragment.js.map +1 -0
- package/dist/graphql/fragments.d.ts +183 -0
- package/dist/graphql/fragments.d.ts.map +1 -0
- package/dist/graphql/fragments.js +297 -0
- package/dist/graphql/fragments.js.map +1 -0
- package/dist/graphql/queries/export.queries.d.ts +72 -0
- package/dist/graphql/queries/export.queries.d.ts.map +1 -0
- package/dist/graphql/queries/export.queries.js +202 -0
- package/dist/graphql/queries/export.queries.js.map +1 -0
- package/dist/graphql/queries/index.d.ts +15 -0
- package/dist/graphql/queries/index.d.ts.map +1 -0
- package/dist/graphql/queries/index.js +23 -0
- package/dist/graphql/queries/index.js.map +1 -0
- package/dist/graphql/queries/performance.queries.d.ts +63 -0
- package/dist/graphql/queries/performance.queries.d.ts.map +1 -0
- package/dist/graphql/queries/performance.queries.js +133 -0
- package/dist/graphql/queries/performance.queries.js.map +1 -0
- package/dist/graphql/queries/period-summaries.d.ts +15 -0
- package/dist/graphql/queries/period-summaries.d.ts.map +1 -0
- package/dist/graphql/queries/period-summaries.js +24 -0
- package/dist/graphql/queries/period-summaries.js.map +1 -0
- package/dist/graphql/queries/portfolio.queries.d.ts +78 -0
- package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -0
- package/dist/graphql/queries/portfolio.queries.js +198 -0
- package/dist/graphql/queries/portfolio.queries.js.map +1 -0
- package/dist/graphql/queries/prediction.queries.d.ts +38 -0
- package/dist/graphql/queries/prediction.queries.d.ts.map +1 -0
- package/dist/graphql/queries/prediction.queries.js +100 -0
- package/dist/graphql/queries/prediction.queries.js.map +1 -0
- package/dist/graphql/queries/risk.queries.d.ts +37 -0
- package/dist/graphql/queries/risk.queries.d.ts.map +1 -0
- package/dist/graphql/queries/risk.queries.js +90 -0
- package/dist/graphql/queries/risk.queries.js.map +1 -0
- package/dist/graphql/queries/search.queries.d.ts +61 -0
- package/dist/graphql/queries/search.queries.d.ts.map +1 -0
- package/dist/graphql/queries/search.queries.js +103 -0
- package/dist/graphql/queries/search.queries.js.map +1 -0
- package/dist/graphql/queries/transaction.queries.d.ts +60 -0
- package/dist/graphql/queries/transaction.queries.d.ts.map +1 -0
- package/dist/graphql/queries/transaction.queries.js +252 -0
- package/dist/graphql/queries/transaction.queries.js.map +1 -0
- package/dist/graphql/queries/vault.queries.d.ts +54 -0
- package/dist/graphql/queries/vault.queries.d.ts.map +1 -0
- package/dist/graphql/queries/vault.queries.js +78 -0
- package/dist/graphql/queries/vault.queries.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/competitor-comparison.d.ts +8 -0
- package/dist/prompts/competitor-comparison.d.ts.map +1 -0
- package/dist/prompts/competitor-comparison.js +432 -0
- package/dist/prompts/competitor-comparison.js.map +1 -0
- package/dist/prompts/curator-performance.d.ts +8 -0
- package/dist/prompts/curator-performance.d.ts.map +1 -0
- package/dist/prompts/curator-performance.js +383 -0
- package/dist/prompts/curator-performance.js.map +1 -0
- package/dist/prompts/financial-analysis.d.ts +8 -0
- package/dist/prompts/financial-analysis.d.ts.map +1 -0
- package/dist/prompts/financial-analysis.js +480 -0
- package/dist/prompts/financial-analysis.js.map +1 -0
- package/dist/prompts/index.d.ts +21 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +50 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/onboarding-first-vault.d.ts +8 -0
- package/dist/prompts/onboarding-first-vault.d.ts.map +1 -0
- package/dist/prompts/onboarding-first-vault.js +317 -0
- package/dist/prompts/onboarding-first-vault.js.map +1 -0
- package/dist/prompts/portfolio-optimization.d.ts +8 -0
- package/dist/prompts/portfolio-optimization.d.ts.map +1 -0
- package/dist/prompts/portfolio-optimization.js +412 -0
- package/dist/prompts/portfolio-optimization.js.map +1 -0
- package/dist/prompts/protocol-overview.d.ts +8 -0
- package/dist/prompts/protocol-overview.d.ts.map +1 -0
- package/dist/prompts/protocol-overview.js +398 -0
- package/dist/prompts/protocol-overview.js.map +1 -0
- package/dist/prompts/shared/disclaimers.d.ts +54 -0
- package/dist/prompts/shared/disclaimers.d.ts.map +1 -0
- package/dist/prompts/shared/disclaimers.js +400 -0
- package/dist/prompts/shared/disclaimers.js.map +1 -0
- package/dist/resources/glossary.d.ts +8 -0
- package/dist/resources/glossary.d.ts.map +1 -0
- package/dist/resources/glossary.js +407 -0
- package/dist/resources/glossary.js.map +1 -0
- package/dist/resources/index.d.ts +18 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +29 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/schema.d.ts +22 -0
- package/dist/resources/schema.d.ts.map +1 -0
- package/dist/resources/schema.js +67 -0
- package/dist/resources/schema.js.map +1 -0
- package/dist/schemas/config.schema.d.ts +46 -0
- package/dist/schemas/config.schema.d.ts.map +1 -0
- package/dist/schemas/config.schema.js +48 -0
- package/dist/schemas/config.schema.js.map +1 -0
- package/dist/sdk/__tests__/apr-service.test.d.ts +7 -0
- package/dist/sdk/__tests__/apr-service.test.d.ts.map +1 -0
- package/dist/sdk/__tests__/apr-service.test.js +385 -0
- package/dist/sdk/__tests__/apr-service.test.js.map +1 -0
- package/dist/sdk/__tests__/math-utils.test.d.ts +7 -0
- package/dist/sdk/__tests__/math-utils.test.d.ts.map +1 -0
- package/dist/sdk/__tests__/math-utils.test.js +185 -0
- package/dist/sdk/__tests__/math-utils.test.js.map +1 -0
- package/dist/sdk/__tests__/simulation-service.test.d.ts +5 -0
- package/dist/sdk/__tests__/simulation-service.test.d.ts.map +1 -0
- package/dist/sdk/__tests__/simulation-service.test.js +397 -0
- package/dist/sdk/__tests__/simulation-service.test.js.map +1 -0
- package/dist/sdk/__tests__/vault-utils.test.d.ts +7 -0
- package/dist/sdk/__tests__/vault-utils.test.d.ts.map +1 -0
- package/dist/sdk/__tests__/vault-utils.test.js +189 -0
- package/dist/sdk/__tests__/vault-utils.test.js.map +1 -0
- package/dist/sdk/apr-service.d.ts +101 -0
- package/dist/sdk/apr-service.d.ts.map +1 -0
- package/dist/sdk/apr-service.js +175 -0
- package/dist/sdk/apr-service.js.map +1 -0
- package/dist/sdk/math-utils.d.ts +138 -0
- package/dist/sdk/math-utils.d.ts.map +1 -0
- package/dist/sdk/math-utils.js +218 -0
- package/dist/sdk/math-utils.js.map +1 -0
- package/dist/sdk/simulation-service.d.ts +106 -0
- package/dist/sdk/simulation-service.d.ts.map +1 -0
- package/dist/sdk/simulation-service.js +143 -0
- package/dist/sdk/simulation-service.js.map +1 -0
- package/dist/sdk/vault-utils.d.ts +125 -0
- package/dist/sdk/vault-utils.d.ts.map +1 -0
- package/dist/sdk/vault-utils.js +165 -0
- package/dist/sdk/vault-utils.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +225 -0
- package/dist/server.js.map +1 -0
- package/dist/services/analytics/protocol-overview.service.d.ts +61 -0
- package/dist/services/analytics/protocol-overview.service.d.ts.map +1 -0
- package/dist/services/analytics/protocol-overview.service.js +182 -0
- package/dist/services/analytics/protocol-overview.service.js.map +1 -0
- package/dist/services/analytics/risk.service.d.ts +92 -0
- package/dist/services/analytics/risk.service.d.ts.map +1 -0
- package/dist/services/analytics/risk.service.js +423 -0
- package/dist/services/analytics/risk.service.js.map +1 -0
- package/dist/services/base.service.d.ts +39 -0
- package/dist/services/base.service.d.ts.map +1 -0
- package/dist/services/base.service.js +37 -0
- package/dist/services/base.service.js.map +1 -0
- package/dist/services/index.d.ts +30 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +101 -0
- package/dist/services/index.js.map +1 -0
- package/dist/tools/__tests__/simulate-vault.test.d.ts +5 -0
- package/dist/tools/__tests__/simulate-vault.test.d.ts.map +1 -0
- package/dist/tools/__tests__/simulate-vault.test.js +363 -0
- package/dist/tools/__tests__/simulate-vault.test.js.map +1 -0
- package/dist/tools/analyze-risk.d.ts +34 -0
- package/dist/tools/analyze-risk.d.ts.map +1 -0
- package/dist/tools/analyze-risk.js +100 -0
- package/dist/tools/analyze-risk.js.map +1 -0
- package/dist/tools/compare-vaults.d.ts +29 -0
- package/dist/tools/compare-vaults.d.ts.map +1 -0
- package/dist/tools/compare-vaults.js +285 -0
- package/dist/tools/compare-vaults.js.map +1 -0
- package/dist/tools/export-data.d.ts +34 -0
- package/dist/tools/export-data.d.ts.map +1 -0
- package/dist/tools/export-data.js +309 -0
- package/dist/tools/export-data.js.map +1 -0
- package/dist/tools/get-price-history.d.ts +29 -0
- package/dist/tools/get-price-history.d.ts.map +1 -0
- package/dist/tools/get-price-history.js +236 -0
- package/dist/tools/get-price-history.js.map +1 -0
- package/dist/tools/get-transactions.d.ts +29 -0
- package/dist/tools/get-transactions.d.ts.map +1 -0
- package/dist/tools/get-transactions.js +181 -0
- package/dist/tools/get-transactions.js.map +1 -0
- package/dist/tools/index.d.ts +26 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +32 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/optimize-portfolio.d.ts +37 -0
- package/dist/tools/optimize-portfolio.d.ts.map +1 -0
- package/dist/tools/optimize-portfolio.js +459 -0
- package/dist/tools/optimize-portfolio.js.map +1 -0
- package/dist/tools/predict-yield.d.ts +30 -0
- package/dist/tools/predict-yield.d.ts.map +1 -0
- package/dist/tools/predict-yield.js +248 -0
- package/dist/tools/predict-yield.js.map +1 -0
- package/dist/tools/query-graphql.d.ts +35 -0
- package/dist/tools/query-graphql.d.ts.map +1 -0
- package/dist/tools/query-graphql.js +54 -0
- package/dist/tools/query-graphql.js.map +1 -0
- package/dist/tools/registry.d.ts +42 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +231 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search-vaults.d.ts +40 -0
- package/dist/tools/search-vaults.d.ts.map +1 -0
- package/dist/tools/search-vaults.js +184 -0
- package/dist/tools/search-vaults.js.map +1 -0
- package/dist/tools/simulate-vault.d.ts +80 -0
- package/dist/tools/simulate-vault.d.ts.map +1 -0
- package/dist/tools/simulate-vault.js +281 -0
- package/dist/tools/simulate-vault.js.map +1 -0
- package/dist/tools/user-portfolio.d.ts +30 -0
- package/dist/tools/user-portfolio.d.ts.map +1 -0
- package/dist/tools/user-portfolio.js +142 -0
- package/dist/tools/user-portfolio.js.map +1 -0
- package/dist/tools/vault-data.d.ts +23 -0
- package/dist/tools/vault-data.d.ts.map +1 -0
- package/dist/tools/vault-data.js +68 -0
- package/dist/tools/vault-data.js.map +1 -0
- package/dist/tools/vault-performance.d.ts +30 -0
- package/dist/tools/vault-performance.d.ts.map +1 -0
- package/dist/tools/vault-performance.js +275 -0
- package/dist/tools/vault-performance.js.map +1 -0
- package/dist/types/generated.d.ts +1109 -0
- package/dist/types/generated.d.ts.map +1 -0
- package/dist/types/generated.js +2 -0
- package/dist/types/generated.js.map +1 -0
- package/dist/types/index.d.ts +46 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/comparison-metrics.d.ts +120 -0
- package/dist/utils/comparison-metrics.d.ts.map +1 -0
- package/dist/utils/comparison-metrics.js +215 -0
- package/dist/utils/comparison-metrics.js.map +1 -0
- package/dist/utils/config-loader.d.ts +17 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +45 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/csv-generator.d.ts +89 -0
- package/dist/utils/csv-generator.d.ts.map +1 -0
- package/dist/utils/csv-generator.js +97 -0
- package/dist/utils/csv-generator.js.map +1 -0
- package/dist/utils/disclaimers.d.ts +70 -0
- package/dist/utils/disclaimers.d.ts.map +1 -0
- package/dist/utils/disclaimers.js +161 -0
- package/dist/utils/disclaimers.js.map +1 -0
- package/dist/utils/errors.d.ts +66 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +86 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/execute-tool-with-cache.d.ts +97 -0
- package/dist/utils/execute-tool-with-cache.d.ts.map +1 -0
- package/dist/utils/execute-tool-with-cache.js +105 -0
- package/dist/utils/execute-tool-with-cache.js.map +1 -0
- package/dist/utils/portfolio-optimization.d.ts +100 -0
- package/dist/utils/portfolio-optimization.d.ts.map +1 -0
- package/dist/utils/portfolio-optimization.js +283 -0
- package/dist/utils/portfolio-optimization.js.map +1 -0
- package/dist/utils/risk-scoring.d.ts +226 -0
- package/dist/utils/risk-scoring.d.ts.map +1 -0
- package/dist/utils/risk-scoring.js +523 -0
- package/dist/utils/risk-scoring.js.map +1 -0
- package/dist/utils/tool-error-handler.d.ts +16 -0
- package/dist/utils/tool-error-handler.d.ts.map +1 -0
- package/dist/utils/tool-error-handler.js +43 -0
- package/dist/utils/tool-error-handler.js.map +1 -0
- package/dist/utils/tool-handler.d.ts +33 -0
- package/dist/utils/tool-handler.d.ts.map +1 -0
- package/dist/utils/tool-handler.js +59 -0
- package/dist/utils/tool-handler.js.map +1 -0
- package/dist/utils/tool-response.d.ts +16 -0
- package/dist/utils/tool-response.d.ts.map +1 -0
- package/dist/utils/tool-response.js +25 -0
- package/dist/utils/tool-response.js.map +1 -0
- package/dist/utils/validators.d.ts +359 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +233 -0
- package/dist/utils/validators.js.map +1 -0
- package/dist/utils/yield-prediction.d.ts +69 -0
- package/dist/utils/yield-prediction.d.ts.map +1 -0
- package/dist/utils/yield-prediction.js +290 -0
- package/dist/utils/yield-prediction.js.map +1 -0
- 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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|