@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,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Validation Schemas
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for runtime type validation of tool inputs
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Reusable validation schemas
|
|
9
|
+
*/
|
|
10
|
+
// Ethereum address (0x + 40 hex characters)
|
|
11
|
+
export const ethereumAddressSchema = z
|
|
12
|
+
.string()
|
|
13
|
+
.regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address format (must be 0x followed by 40 hex characters)');
|
|
14
|
+
// Chain ID (positive integer)
|
|
15
|
+
export const chainIdSchema = z.number().int().positive('Chain ID must be a positive integer');
|
|
16
|
+
// Pagination first parameter
|
|
17
|
+
export const paginationFirstSchema = z
|
|
18
|
+
.number()
|
|
19
|
+
.int()
|
|
20
|
+
.positive()
|
|
21
|
+
.max(1000, 'Maximum page size is 1000')
|
|
22
|
+
.default(100);
|
|
23
|
+
// Pagination skip parameter
|
|
24
|
+
export const paginationSkipSchema = z
|
|
25
|
+
.number()
|
|
26
|
+
.int()
|
|
27
|
+
.nonnegative('Skip must be non-negative')
|
|
28
|
+
.default(0);
|
|
29
|
+
/**
|
|
30
|
+
* Tool-specific validation schemas
|
|
31
|
+
*/
|
|
32
|
+
// query_graphql input
|
|
33
|
+
export const queryGraphQLInputSchema = z.object({
|
|
34
|
+
query: z.string().min(1, 'Query cannot be empty'),
|
|
35
|
+
variables: z.record(z.unknown()).optional(),
|
|
36
|
+
});
|
|
37
|
+
// get_vault_data input
|
|
38
|
+
export const getVaultDataInputSchema = z.object({
|
|
39
|
+
vaultAddress: ethereumAddressSchema,
|
|
40
|
+
chainId: chainIdSchema,
|
|
41
|
+
});
|
|
42
|
+
// get_user_portfolio input
|
|
43
|
+
export const getUserPortfolioInputSchema = z.object({
|
|
44
|
+
userAddress: ethereumAddressSchema,
|
|
45
|
+
responseFormat: z
|
|
46
|
+
.enum(['list', 'summary', 'full'])
|
|
47
|
+
.default('summary')
|
|
48
|
+
.describe('Response detail level: list (~60 tokens/vault), summary (~170 tokens/vault), full (~600 tokens/vault). Default: summary'),
|
|
49
|
+
});
|
|
50
|
+
// search_vaults input
|
|
51
|
+
export const searchVaultsInputSchema = z.object({
|
|
52
|
+
filters: z
|
|
53
|
+
.object({
|
|
54
|
+
// Asset filters
|
|
55
|
+
assetSymbol_eq: z.string().optional(),
|
|
56
|
+
assetSymbol_in: z.array(z.string()).optional(),
|
|
57
|
+
assetId_eq: z.string().optional(),
|
|
58
|
+
assetId_in: z.array(z.string()).optional(),
|
|
59
|
+
// Chain filters
|
|
60
|
+
chainId_eq: chainIdSchema.optional(),
|
|
61
|
+
chainId_in: z.array(chainIdSchema).optional(),
|
|
62
|
+
// TVL filters (nested state filters)
|
|
63
|
+
state_totalAssetsUsd_gte: z.number().positive().optional(),
|
|
64
|
+
state_totalAssetsUsd_lte: z.number().positive().optional(),
|
|
65
|
+
// Curator filters
|
|
66
|
+
curatorIds_contains: z.array(z.string()).optional(),
|
|
67
|
+
curatorIds_contains_any: z.array(z.string()).optional(),
|
|
68
|
+
// Visibility
|
|
69
|
+
isVisible_eq: z.boolean().optional(),
|
|
70
|
+
// Additional filters
|
|
71
|
+
address_eq: ethereumAddressSchema.optional(),
|
|
72
|
+
address_in: z.array(ethereumAddressSchema).optional(),
|
|
73
|
+
symbol_eq: z.string().optional(),
|
|
74
|
+
symbol_in: z.array(z.string()).optional(),
|
|
75
|
+
integratorId_eq: z.string().optional(),
|
|
76
|
+
integratorId_in: z.array(z.string()).optional(),
|
|
77
|
+
})
|
|
78
|
+
.optional(),
|
|
79
|
+
pagination: z
|
|
80
|
+
.object({
|
|
81
|
+
first: paginationFirstSchema,
|
|
82
|
+
skip: paginationSkipSchema,
|
|
83
|
+
})
|
|
84
|
+
.optional(),
|
|
85
|
+
orderBy: z.string().default('totalAssetsUsd'),
|
|
86
|
+
orderDirection: z.enum(['asc', 'desc']).default('desc'),
|
|
87
|
+
// NEW: Response format for token optimization
|
|
88
|
+
responseFormat: z
|
|
89
|
+
.enum(['list', 'summary', 'full'])
|
|
90
|
+
.default('list')
|
|
91
|
+
.describe('Response detail level: list (~60 tokens/vault), summary (~170 tokens/vault), full (~600 tokens/vault)'),
|
|
92
|
+
// NEW: Maximum results for token budget control
|
|
93
|
+
maxResults: z
|
|
94
|
+
.number()
|
|
95
|
+
.int()
|
|
96
|
+
.positive()
|
|
97
|
+
.min(1)
|
|
98
|
+
.max(50)
|
|
99
|
+
.default(20)
|
|
100
|
+
.describe('Maximum number of results to return (default: 20, max: 50)'),
|
|
101
|
+
});
|
|
102
|
+
// get_vault_performance input
|
|
103
|
+
export const getVaultPerformanceInputSchema = z.object({
|
|
104
|
+
vaultAddress: ethereumAddressSchema,
|
|
105
|
+
chainId: chainIdSchema,
|
|
106
|
+
timeRange: z.enum(['7d', '30d', '90d', '1y'], {
|
|
107
|
+
errorMap: () => ({ message: 'Time range must be one of: 7d, 30d, 90d, 1y' }),
|
|
108
|
+
}),
|
|
109
|
+
includeSDKCalculations: z.boolean().optional().default(true),
|
|
110
|
+
responseFormat: z
|
|
111
|
+
.enum(['summary', 'detailed'])
|
|
112
|
+
.default('summary')
|
|
113
|
+
.describe('Response detail level: summary (key metrics only), detailed (full metrics table). Default: summary'),
|
|
114
|
+
});
|
|
115
|
+
// get_transactions input
|
|
116
|
+
export const getTransactionsInputSchema = z.object({
|
|
117
|
+
vaultAddress: ethereumAddressSchema,
|
|
118
|
+
chainId: chainIdSchema,
|
|
119
|
+
transactionTypes: z
|
|
120
|
+
.array(z.enum([
|
|
121
|
+
'SettleDeposit',
|
|
122
|
+
'SettleRedeem',
|
|
123
|
+
'DepositRequest',
|
|
124
|
+
'RedeemRequest',
|
|
125
|
+
'NewTotalAssetsUpdated',
|
|
126
|
+
'TotalAssetsUpdated',
|
|
127
|
+
'PeriodSummary',
|
|
128
|
+
'DepositSync',
|
|
129
|
+
'DepositRequestCanceled',
|
|
130
|
+
'RatesUpdated',
|
|
131
|
+
'StateUpdated',
|
|
132
|
+
]))
|
|
133
|
+
.optional(),
|
|
134
|
+
pagination: z
|
|
135
|
+
.object({
|
|
136
|
+
first: paginationFirstSchema,
|
|
137
|
+
skip: paginationSkipSchema,
|
|
138
|
+
})
|
|
139
|
+
.optional(),
|
|
140
|
+
orderBy: z.enum(['blockNumber', 'timestamp', 'id', 'chainId']).default('blockNumber'),
|
|
141
|
+
orderDirection: z.enum(['asc', 'desc']).default('desc'),
|
|
142
|
+
responseFormat: z
|
|
143
|
+
.enum(['summary', 'list', 'detailed'])
|
|
144
|
+
.default('list')
|
|
145
|
+
.describe('Response detail level: summary (aggregates only ~50 tokens), list (transaction IDs and types ~100-200 tokens), detailed (full transaction data ~300-800 tokens). Default: list'),
|
|
146
|
+
});
|
|
147
|
+
// compare_vaults input
|
|
148
|
+
export const compareVaultsInputSchema = z.object({
|
|
149
|
+
vaultAddresses: z
|
|
150
|
+
.array(ethereumAddressSchema)
|
|
151
|
+
.min(2, 'At least 2 vault addresses are required for comparison')
|
|
152
|
+
.max(10, 'Maximum 10 vaults can be compared at once'),
|
|
153
|
+
chainId: chainIdSchema,
|
|
154
|
+
responseFormat: z
|
|
155
|
+
.enum(['summary', 'full'])
|
|
156
|
+
.default('summary')
|
|
157
|
+
.describe('Response detail level: summary (~170 tokens/vault), full (~600 tokens/vault). Default: summary'),
|
|
158
|
+
});
|
|
159
|
+
// get_price_history input
|
|
160
|
+
export const priceHistoryInputSchema = z.object({
|
|
161
|
+
vaultAddress: ethereumAddressSchema,
|
|
162
|
+
chainId: chainIdSchema,
|
|
163
|
+
timeRange: z.enum(['7d', '30d', '90d', '1y', 'all'], {
|
|
164
|
+
errorMap: () => ({ message: 'Time range must be one of: 7d, 30d, 90d, 1y, all' }),
|
|
165
|
+
}),
|
|
166
|
+
responseFormat: z
|
|
167
|
+
.enum(['summary', 'detailed'])
|
|
168
|
+
.default('summary')
|
|
169
|
+
.describe('Response detail level: summary (key metrics only), detailed (full OHLCV table). Default: summary'),
|
|
170
|
+
});
|
|
171
|
+
// export_data input
|
|
172
|
+
export const exportDataInputSchema = z.object({
|
|
173
|
+
vaultAddresses: z.array(ethereumAddressSchema).min(1, 'At least 1 vault address is required'),
|
|
174
|
+
chainId: chainIdSchema,
|
|
175
|
+
dataType: z.enum(['vaults', 'transactions', 'price_history', 'performance'], {
|
|
176
|
+
errorMap: () => ({
|
|
177
|
+
message: 'Data type must be one of: vaults, transactions, price_history, performance',
|
|
178
|
+
}),
|
|
179
|
+
}),
|
|
180
|
+
format: z.enum(['csv', 'json'], {
|
|
181
|
+
errorMap: () => ({ message: 'Format must be either csv or json' }),
|
|
182
|
+
}),
|
|
183
|
+
});
|
|
184
|
+
// analyze_risk input
|
|
185
|
+
export const analyzeRiskInputSchema = z.object({
|
|
186
|
+
vaultAddress: ethereumAddressSchema,
|
|
187
|
+
chainId: chainIdSchema,
|
|
188
|
+
responseFormat: z
|
|
189
|
+
.enum(['score', 'summary', 'detailed'])
|
|
190
|
+
.default('summary')
|
|
191
|
+
.describe('Response detail level: score (risk score only ~30 tokens), summary (risk score with key metrics ~200 tokens), detailed (comprehensive risk analysis ~400-600 tokens). Default: summary'),
|
|
192
|
+
});
|
|
193
|
+
// predict_yield input
|
|
194
|
+
export const predictYieldInputSchema = z.object({
|
|
195
|
+
vaultAddress: ethereumAddressSchema,
|
|
196
|
+
chainId: chainIdSchema,
|
|
197
|
+
timeRange: z.enum(['7d', '30d', '90d'], {
|
|
198
|
+
errorMap: () => ({ message: 'Time range must be one of: 7d, 30d, 90d' }),
|
|
199
|
+
}),
|
|
200
|
+
responseFormat: z
|
|
201
|
+
.enum(['quick', 'detailed'])
|
|
202
|
+
.default('quick')
|
|
203
|
+
.describe('Response detail level: quick (prediction only), detailed (with confidence intervals and analysis). Default: quick'),
|
|
204
|
+
});
|
|
205
|
+
// optimize_portfolio input
|
|
206
|
+
export const optimizePortfolioInputSchema = z.object({
|
|
207
|
+
vaultAddresses: z
|
|
208
|
+
.array(ethereumAddressSchema)
|
|
209
|
+
.min(2, 'At least 2 vault addresses are required for portfolio optimization')
|
|
210
|
+
.max(20, 'Maximum 20 vaults can be included in portfolio'),
|
|
211
|
+
chainId: chainIdSchema,
|
|
212
|
+
currentPositions: z.array(z.object({
|
|
213
|
+
vaultAddress: ethereumAddressSchema,
|
|
214
|
+
valueUsd: z.number().positive('Position value must be positive'),
|
|
215
|
+
})),
|
|
216
|
+
strategy: z
|
|
217
|
+
.enum(['equal_weight', 'risk_parity', 'max_sharpe', 'min_variance'], {
|
|
218
|
+
errorMap: () => ({
|
|
219
|
+
message: 'Strategy must be one of: equal_weight, risk_parity, max_sharpe, min_variance',
|
|
220
|
+
}),
|
|
221
|
+
})
|
|
222
|
+
.default('max_sharpe'),
|
|
223
|
+
rebalanceThreshold: z
|
|
224
|
+
.number()
|
|
225
|
+
.positive('Rebalance threshold must be positive')
|
|
226
|
+
.max(50, 'Rebalance threshold cannot exceed 50%')
|
|
227
|
+
.default(5.0),
|
|
228
|
+
responseFormat: z
|
|
229
|
+
.enum(['quick', 'balanced', 'detailed'])
|
|
230
|
+
.default('balanced')
|
|
231
|
+
.describe('Response detail level: quick (rebalance status and top actions ~300-400 tokens), balanced (standard output ~800 tokens), detailed (extended insights ~1200 tokens). Default: balanced'),
|
|
232
|
+
});
|
|
233
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AAEH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,EAAE;KACR,KAAK,CACJ,qBAAqB,EACrB,4EAA4E,CAC7E,CAAC;AAEJ,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC;AAE9F,6BAA6B;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,EAAE;KACR,GAAG,EAAE;KACL,QAAQ,EAAE;KACV,GAAG,CAAC,IAAI,EAAE,2BAA2B,CAAC;KACtC,OAAO,CAAC,GAAG,CAAC,CAAC;AAEhB,4BAA4B;AAC5B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,EAAE;KACR,GAAG,EAAE;KACL,WAAW,CAAC,2BAA2B,CAAC;KACxC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEd;;GAEG;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,WAAW,EAAE,qBAAqB;IAClC,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SACjC,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CACP,yHAAyH,CAC1H;CACJ,CAAC,CAAC;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,gBAAgB;QAChB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC9C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAE1C,gBAAgB;QAChB,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE;QACpC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE;QAE7C,qCAAqC;QACrC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC1D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAE1D,kBAAkB;QAClB,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACnD,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAEvD,aAAa;QACb,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAEpC,qBAAqB;QACrB,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE;QAC5C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE;QACrD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACzC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACtC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAChD,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,oBAAoB;KAC3B,CAAC;SACD,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC7C,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvD,8CAA8C;IAC9C,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SACjC,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CACP,uGAAuG,CACxG;IACH,gDAAgD;IAChD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;QAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC;KAC7E,CAAC;IACF,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5D,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;SAC7B,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CACP,oGAAoG,CACrG;CACJ,CAAC,CAAC;AAEH,yBAAyB;AACzB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,gBAAgB,EAAE,CAAC;SAChB,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC;QACL,eAAe;QACf,cAAc;QACd,gBAAgB;QAChB,eAAe;QACf,uBAAuB;QACvB,oBAAoB;QACpB,eAAe;QACf,aAAa;QACb,wBAAwB;QACxB,cAAc;QACd,cAAc;KACf,CAAC,CACH;SACA,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,oBAAoB;KAC3B,CAAC;SACD,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACrF,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvD,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;SACrC,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CACP,gLAAgL,CACjL;CACJ,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,qBAAqB,CAAC;SAC5B,GAAG,CAAC,CAAC,EAAE,wDAAwD,CAAC;SAChE,GAAG,CAAC,EAAE,EAAE,2CAA2C,CAAC;IACvD,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SACzB,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CACP,gGAAgG,CACjG;CACJ,CAAC,CAAC;AAEH,0BAA0B;AAC1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;QACnD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;KAClF,CAAC;IACF,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;SAC7B,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CACP,kGAAkG,CACnG;CACJ,CAAC,CAAC;AAEH,oBAAoB;AACpB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;IAC7F,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE;QAC3E,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YACf,OAAO,EAAE,4EAA4E;SACtF,CAAC;KACH,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;QAC9B,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;KACnE,CAAC;CACH,CAAC,CAAC;AAEH,qBAAqB;AACrB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SACtC,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CACP,wLAAwL,CACzL;CACJ,CAAC,CAAC;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;QACtC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;KACzE,CAAC;IACF,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SAC3B,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CACP,mHAAmH,CACpH;CACJ,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,qBAAqB,CAAC;SAC5B,GAAG,CAAC,CAAC,EAAE,oEAAoE,CAAC;SAC5E,GAAG,CAAC,EAAE,EAAE,gDAAgD,CAAC;IAC5D,OAAO,EAAE,aAAa;IACtB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CACvB,CAAC,CAAC,MAAM,CAAC;QACP,YAAY,EAAE,qBAAqB;QACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACjE,CAAC,CACH;IACD,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE;QACnE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YACf,OAAO,EAAE,8EAA8E;SACxF,CAAC;KACH,CAAC;SACD,OAAO,CAAC,YAAY,CAAC;IACxB,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,QAAQ,CAAC,sCAAsC,CAAC;SAChD,GAAG,CAAC,EAAE,EAAE,uCAAuC,CAAC;SAChD,OAAO,CAAC,GAAG,CAAC;IACf,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACvC,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CACP,uLAAuL,CACxL;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Prediction Utility
|
|
3
|
+
*
|
|
4
|
+
* Trend analysis and forecasting algorithms for vault yield prediction.
|
|
5
|
+
* Provides APR projections based on historical performance data.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Yield prediction result
|
|
9
|
+
*/
|
|
10
|
+
export interface YieldPrediction {
|
|
11
|
+
currentAPR: number;
|
|
12
|
+
predictedAPR: number;
|
|
13
|
+
feeAdjustedAPR?: number;
|
|
14
|
+
confidence: number;
|
|
15
|
+
trend: 'increasing' | 'decreasing' | 'stable';
|
|
16
|
+
projectedReturns: {
|
|
17
|
+
timeframe: '7d' | '30d' | '90d' | '1y';
|
|
18
|
+
expectedReturn: number;
|
|
19
|
+
minReturn: number;
|
|
20
|
+
maxReturn: number;
|
|
21
|
+
}[];
|
|
22
|
+
feeAdjustedReturns?: {
|
|
23
|
+
timeframe: '7d' | '30d' | '90d' | '1y';
|
|
24
|
+
expectedReturn: number;
|
|
25
|
+
minReturn: number;
|
|
26
|
+
maxReturn: number;
|
|
27
|
+
}[];
|
|
28
|
+
feeImpact?: {
|
|
29
|
+
managementFee: number;
|
|
30
|
+
performanceFee: number;
|
|
31
|
+
totalAnnualFeeDrag: number;
|
|
32
|
+
performanceFeeActive: boolean;
|
|
33
|
+
};
|
|
34
|
+
insights: string[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Historical data point for yield analysis
|
|
38
|
+
*/
|
|
39
|
+
export interface YieldDataPoint {
|
|
40
|
+
timestamp: number;
|
|
41
|
+
apr: number;
|
|
42
|
+
tvl: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Predict future yield based on historical data
|
|
46
|
+
*
|
|
47
|
+
* Uses multiple forecasting techniques:
|
|
48
|
+
* 1. Linear regression for trend analysis
|
|
49
|
+
* 2. Exponential moving average for short-term prediction
|
|
50
|
+
* 3. Volatility analysis for confidence intervals
|
|
51
|
+
* 4. Fee-adjusted predictions (optional) - net returns after management and performance fees
|
|
52
|
+
*
|
|
53
|
+
* @param historicalData - Historical APR and TVL data points
|
|
54
|
+
* @param feeParams - Optional fee parameters for calculating net returns
|
|
55
|
+
* @returns Yield prediction with confidence intervals and insights
|
|
56
|
+
*/
|
|
57
|
+
export declare function predictYield(historicalData: YieldDataPoint[], feeParams?: {
|
|
58
|
+
managementFee: number;
|
|
59
|
+
performanceFee: number;
|
|
60
|
+
performanceFeeActive: boolean;
|
|
61
|
+
}): YieldPrediction;
|
|
62
|
+
/**
|
|
63
|
+
* Calculate compound APR from multiple yield sources
|
|
64
|
+
*
|
|
65
|
+
* @param yields - Array of APR values from different sources
|
|
66
|
+
* @returns Compound APR
|
|
67
|
+
*/
|
|
68
|
+
export declare function calculateCompoundAPR(yields: number[]): number;
|
|
69
|
+
//# sourceMappingURL=yield-prediction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yield-prediction.d.ts","sourceRoot":"","sources":["../../src/utils/yield-prediction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC9C,gBAAgB,EAAE;QAChB,SAAS,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;QACvC,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,kBAAkB,CAAC,EAAE;QACnB,SAAS,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;QACvC,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,SAAS,CAAC,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,oBAAoB,EAAE,OAAO,CAAC;KAC/B,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAoGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,CAAC,EAAE;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CAC/B,GACA,eAAe,CAoJjB;AAuGD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAW7D"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Prediction Utility
|
|
3
|
+
*
|
|
4
|
+
* Trend analysis and forecasting algorithms for vault yield prediction.
|
|
5
|
+
* Provides APR projections based on historical performance data.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Calculate simple moving average
|
|
9
|
+
*/
|
|
10
|
+
function calculateSMA(values, period) {
|
|
11
|
+
if (values.length < period) {
|
|
12
|
+
return values.reduce((sum, v) => sum + v, 0) / values.length;
|
|
13
|
+
}
|
|
14
|
+
const recentValues = values.slice(-period);
|
|
15
|
+
return recentValues.reduce((sum, v) => sum + v, 0) / period;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Calculate exponential moving average
|
|
19
|
+
*/
|
|
20
|
+
function calculateEMA(values, period) {
|
|
21
|
+
if (values.length === 0) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
if (values.length < period) {
|
|
25
|
+
return calculateSMA(values, values.length);
|
|
26
|
+
}
|
|
27
|
+
const multiplier = 2 / (period + 1);
|
|
28
|
+
let ema = calculateSMA(values.slice(0, period), period);
|
|
29
|
+
for (let i = period; i < values.length; i++) {
|
|
30
|
+
ema = (values[i] - ema) * multiplier + ema;
|
|
31
|
+
}
|
|
32
|
+
return ema;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Calculate linear regression for trend analysis
|
|
36
|
+
*/
|
|
37
|
+
function calculateLinearRegression(data) {
|
|
38
|
+
const n = data.length;
|
|
39
|
+
if (n < 2) {
|
|
40
|
+
return { slope: 0, intercept: data[0]?.apr || 0, r2: 0 };
|
|
41
|
+
}
|
|
42
|
+
// Normalize timestamps to prevent overflow
|
|
43
|
+
const minTimestamp = Math.min(...data.map((d) => d.timestamp));
|
|
44
|
+
const x = data.map((d) => (d.timestamp - minTimestamp) / (24 * 60 * 60)); // Convert to days
|
|
45
|
+
const y = data.map((d) => d.apr);
|
|
46
|
+
// Calculate means
|
|
47
|
+
const xMean = x.reduce((sum, val) => sum + val, 0) / n;
|
|
48
|
+
const yMean = y.reduce((sum, val) => sum + val, 0) / n;
|
|
49
|
+
// Calculate slope and intercept
|
|
50
|
+
let numerator = 0;
|
|
51
|
+
let denominator = 0;
|
|
52
|
+
for (let i = 0; i < n; i++) {
|
|
53
|
+
numerator += (x[i] - xMean) * (y[i] - yMean);
|
|
54
|
+
denominator += Math.pow(x[i] - xMean, 2);
|
|
55
|
+
}
|
|
56
|
+
const slope = denominator === 0 ? 0 : numerator / denominator;
|
|
57
|
+
const intercept = yMean - slope * xMean;
|
|
58
|
+
// Calculate R² (coefficient of determination)
|
|
59
|
+
let ssRes = 0;
|
|
60
|
+
let ssTot = 0;
|
|
61
|
+
for (let i = 0; i < n; i++) {
|
|
62
|
+
const predicted = slope * x[i] + intercept;
|
|
63
|
+
ssRes += Math.pow(y[i] - predicted, 2);
|
|
64
|
+
ssTot += Math.pow(y[i] - yMean, 2);
|
|
65
|
+
}
|
|
66
|
+
const r2 = ssTot === 0 ? 0 : 1 - ssRes / ssTot;
|
|
67
|
+
return { slope, intercept, r2: Math.max(0, Math.min(1, r2)) };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Calculate volatility (standard deviation)
|
|
71
|
+
*/
|
|
72
|
+
function calculateVolatility(values) {
|
|
73
|
+
if (values.length < 2) {
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
const mean = values.reduce((sum, v) => sum + v, 0) / values.length;
|
|
77
|
+
const variance = values.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / values.length;
|
|
78
|
+
return Math.sqrt(variance);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Predict future yield based on historical data
|
|
82
|
+
*
|
|
83
|
+
* Uses multiple forecasting techniques:
|
|
84
|
+
* 1. Linear regression for trend analysis
|
|
85
|
+
* 2. Exponential moving average for short-term prediction
|
|
86
|
+
* 3. Volatility analysis for confidence intervals
|
|
87
|
+
* 4. Fee-adjusted predictions (optional) - net returns after management and performance fees
|
|
88
|
+
*
|
|
89
|
+
* @param historicalData - Historical APR and TVL data points
|
|
90
|
+
* @param feeParams - Optional fee parameters for calculating net returns
|
|
91
|
+
* @returns Yield prediction with confidence intervals and insights
|
|
92
|
+
*/
|
|
93
|
+
export function predictYield(historicalData, feeParams) {
|
|
94
|
+
if (historicalData.length === 0) {
|
|
95
|
+
return {
|
|
96
|
+
currentAPR: 0,
|
|
97
|
+
predictedAPR: 0,
|
|
98
|
+
confidence: 0,
|
|
99
|
+
trend: 'stable',
|
|
100
|
+
projectedReturns: [],
|
|
101
|
+
insights: ['Insufficient historical data for prediction'],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Sort by timestamp
|
|
105
|
+
const sortedData = [...historicalData].sort((a, b) => a.timestamp - b.timestamp);
|
|
106
|
+
const aprValues = sortedData.map((d) => d.apr);
|
|
107
|
+
const currentAPR = aprValues[aprValues.length - 1];
|
|
108
|
+
// Calculate trend using linear regression
|
|
109
|
+
const regression = calculateLinearRegression(sortedData);
|
|
110
|
+
const trend = Math.abs(regression.slope) < 0.01
|
|
111
|
+
? 'stable'
|
|
112
|
+
: regression.slope > 0
|
|
113
|
+
? 'increasing'
|
|
114
|
+
: 'decreasing';
|
|
115
|
+
// Calculate EMA for short-term prediction
|
|
116
|
+
const emaShort = calculateEMA(aprValues, Math.min(7, aprValues.length)); // 7-day EMA
|
|
117
|
+
const emaLong = calculateEMA(aprValues, Math.min(30, aprValues.length)); // 30-day EMA
|
|
118
|
+
// Weighted prediction: 40% regression, 40% short EMA, 20% long EMA
|
|
119
|
+
const regressionPrediction = regression.slope * sortedData.length + regression.intercept;
|
|
120
|
+
const predictedAPR = regressionPrediction * 0.4 + emaShort * 0.4 + emaLong * 0.2;
|
|
121
|
+
// Calculate confidence based on R² and data quantity
|
|
122
|
+
const dataQualityScore = Math.min(1, sortedData.length / 30); // More data = higher confidence
|
|
123
|
+
const trendStrengthScore = regression.r2; // Strong trend = higher confidence
|
|
124
|
+
const confidence = (dataQualityScore * 0.4 + trendStrengthScore * 0.6) * 0.9; // Max 90%
|
|
125
|
+
// Calculate volatility for confidence intervals
|
|
126
|
+
const volatility = calculateVolatility(aprValues);
|
|
127
|
+
// Project returns for different timeframes
|
|
128
|
+
const projectedReturns = [
|
|
129
|
+
{ timeframe: '7d', days: 7 },
|
|
130
|
+
{ timeframe: '30d', days: 30 },
|
|
131
|
+
{ timeframe: '90d', days: 90 },
|
|
132
|
+
{ timeframe: '1y', days: 365 },
|
|
133
|
+
].map(({ timeframe, days }) => {
|
|
134
|
+
// Annualized to period conversion
|
|
135
|
+
const expectedReturn = (predictedAPR / 100) * (days / 365) * 100;
|
|
136
|
+
// Confidence intervals (±1 standard deviation scaled by time)
|
|
137
|
+
const timeScaledVolatility = volatility * Math.sqrt(days / 365);
|
|
138
|
+
const minReturn = expectedReturn - timeScaledVolatility;
|
|
139
|
+
const maxReturn = expectedReturn + timeScaledVolatility;
|
|
140
|
+
return {
|
|
141
|
+
timeframe,
|
|
142
|
+
expectedReturn: Math.max(0, expectedReturn),
|
|
143
|
+
minReturn: Math.max(0, minReturn),
|
|
144
|
+
maxReturn: Math.max(0, maxReturn),
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
// Calculate fee-adjusted predictions if fee parameters provided
|
|
148
|
+
let feeAdjustedAPR;
|
|
149
|
+
let feeAdjustedReturns;
|
|
150
|
+
let feeImpact;
|
|
151
|
+
if (feeParams) {
|
|
152
|
+
// Calculate total annual fee drag
|
|
153
|
+
const performanceFeeDrag = feeParams.performanceFeeActive
|
|
154
|
+
? feeParams.performanceFee * 0.1 // Assume 10% average profit for performance fee impact
|
|
155
|
+
: 0;
|
|
156
|
+
const totalAnnualFeeDrag = feeParams.managementFee + performanceFeeDrag;
|
|
157
|
+
// Calculate fee-adjusted APR (gross APR - fees)
|
|
158
|
+
feeAdjustedAPR = Math.max(0, predictedAPR - totalAnnualFeeDrag);
|
|
159
|
+
// Calculate fee-adjusted projected returns
|
|
160
|
+
feeAdjustedReturns = projectedReturns.map((p) => {
|
|
161
|
+
const feeAdjustment = (((totalAnnualFeeDrag / 100) *
|
|
162
|
+
(p.timeframe === '7d'
|
|
163
|
+
? 7
|
|
164
|
+
: p.timeframe === '30d'
|
|
165
|
+
? 30
|
|
166
|
+
: p.timeframe === '90d'
|
|
167
|
+
? 90
|
|
168
|
+
: 365)) /
|
|
169
|
+
365) *
|
|
170
|
+
100;
|
|
171
|
+
return {
|
|
172
|
+
timeframe: p.timeframe,
|
|
173
|
+
expectedReturn: Math.max(0, p.expectedReturn - feeAdjustment),
|
|
174
|
+
minReturn: Math.max(0, p.minReturn - feeAdjustment),
|
|
175
|
+
maxReturn: Math.max(0, p.maxReturn - feeAdjustment),
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
feeImpact = {
|
|
179
|
+
managementFee: feeParams.managementFee,
|
|
180
|
+
performanceFee: feeParams.performanceFee,
|
|
181
|
+
totalAnnualFeeDrag,
|
|
182
|
+
performanceFeeActive: feeParams.performanceFeeActive,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// Generate insights
|
|
186
|
+
const insights = generateInsights({
|
|
187
|
+
currentAPR,
|
|
188
|
+
predictedAPR,
|
|
189
|
+
trend,
|
|
190
|
+
confidence,
|
|
191
|
+
volatility,
|
|
192
|
+
dataPoints: sortedData.length,
|
|
193
|
+
regression,
|
|
194
|
+
feeAdjustedAPR,
|
|
195
|
+
feeImpact,
|
|
196
|
+
});
|
|
197
|
+
return {
|
|
198
|
+
currentAPR,
|
|
199
|
+
predictedAPR: Math.max(0, predictedAPR),
|
|
200
|
+
feeAdjustedAPR,
|
|
201
|
+
confidence,
|
|
202
|
+
trend,
|
|
203
|
+
projectedReturns,
|
|
204
|
+
feeAdjustedReturns,
|
|
205
|
+
feeImpact,
|
|
206
|
+
insights,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Generate human-readable insights from prediction data
|
|
211
|
+
*/
|
|
212
|
+
function generateInsights(params) {
|
|
213
|
+
const insights = [];
|
|
214
|
+
// Data quality insight
|
|
215
|
+
if (params.dataPoints < 7) {
|
|
216
|
+
insights.push(`Limited data (${params.dataPoints} points) - predictions have higher uncertainty`);
|
|
217
|
+
}
|
|
218
|
+
else if (params.dataPoints >= 30) {
|
|
219
|
+
insights.push(`Strong data foundation (${params.dataPoints} points) supports prediction`);
|
|
220
|
+
}
|
|
221
|
+
// Trend insight
|
|
222
|
+
const aprChange = params.predictedAPR - params.currentAPR;
|
|
223
|
+
const changePercent = ((aprChange / params.currentAPR) * 100).toFixed(1);
|
|
224
|
+
if (params.trend === 'increasing') {
|
|
225
|
+
insights.push(`Upward trend detected: APR expected to increase by ${changePercent}% (${aprChange.toFixed(2)}%)`);
|
|
226
|
+
}
|
|
227
|
+
else if (params.trend === 'decreasing') {
|
|
228
|
+
insights.push(`Downward trend detected: APR expected to decrease by ${Math.abs(parseFloat(changePercent))}% (${Math.abs(aprChange).toFixed(2)}%)`);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
insights.push('Stable performance: APR expected to remain relatively constant');
|
|
232
|
+
}
|
|
233
|
+
// Volatility insight
|
|
234
|
+
if (params.volatility > 5) {
|
|
235
|
+
insights.push('High volatility: Returns may vary significantly from predictions');
|
|
236
|
+
}
|
|
237
|
+
else if (params.volatility < 1) {
|
|
238
|
+
insights.push('Low volatility: Consistent returns with narrow confidence intervals');
|
|
239
|
+
}
|
|
240
|
+
// Confidence insight
|
|
241
|
+
if (params.confidence > 0.7) {
|
|
242
|
+
insights.push(`High confidence (${(params.confidence * 100).toFixed(0)}%) in prediction accuracy`);
|
|
243
|
+
}
|
|
244
|
+
else if (params.confidence < 0.4) {
|
|
245
|
+
insights.push(`Low confidence (${(params.confidence * 100).toFixed(0)}%) - consider as rough estimate only`);
|
|
246
|
+
}
|
|
247
|
+
// Trend strength insight
|
|
248
|
+
if (params.regression.r2 > 0.7) {
|
|
249
|
+
insights.push('Strong historical trend pattern detected');
|
|
250
|
+
}
|
|
251
|
+
else if (params.regression.r2 < 0.3) {
|
|
252
|
+
insights.push('Weak trend pattern - returns may be influenced by external factors');
|
|
253
|
+
}
|
|
254
|
+
// Fee impact insights
|
|
255
|
+
if (params.feeAdjustedAPR !== undefined && params.feeImpact) {
|
|
256
|
+
const grossAPR = params.predictedAPR;
|
|
257
|
+
const netAPR = params.feeAdjustedAPR;
|
|
258
|
+
const feeDrag = params.feeImpact.totalAnnualFeeDrag;
|
|
259
|
+
if (feeDrag > 3) {
|
|
260
|
+
insights.push(`High fees (${feeDrag.toFixed(2)}%) significantly reduce net returns from ${grossAPR.toFixed(2)}% to ${netAPR.toFixed(2)}%`);
|
|
261
|
+
}
|
|
262
|
+
else if (feeDrag > 1.5) {
|
|
263
|
+
insights.push(`Moderate fees (${feeDrag.toFixed(2)}%) impact net returns: ${grossAPR.toFixed(2)}% gross → ${netAPR.toFixed(2)}% net`);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
insights.push(`Low fees (${feeDrag.toFixed(2)}%) - minimal impact on net returns (${netAPR.toFixed(2)}%)`);
|
|
267
|
+
}
|
|
268
|
+
if (params.feeImpact.performanceFeeActive) {
|
|
269
|
+
insights.push(`Performance fee active (${params.feeImpact.performanceFee.toFixed(2)}%) - vault above high water mark`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return insights;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Calculate compound APR from multiple yield sources
|
|
276
|
+
*
|
|
277
|
+
* @param yields - Array of APR values from different sources
|
|
278
|
+
* @returns Compound APR
|
|
279
|
+
*/
|
|
280
|
+
export function calculateCompoundAPR(yields) {
|
|
281
|
+
if (yields.length === 0) {
|
|
282
|
+
return 0;
|
|
283
|
+
}
|
|
284
|
+
// Convert APR to multipliers, compound them, convert back to APR
|
|
285
|
+
const compoundMultiplier = yields.reduce((product, apr) => {
|
|
286
|
+
return product * (1 + apr / 100);
|
|
287
|
+
}, 1);
|
|
288
|
+
return (compoundMultiplier - 1) * 100;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=yield-prediction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yield-prediction.js","sourceRoot":"","sources":["../../src/utils/yield-prediction.ts"],"names":[],"mappings":"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"}
|