amped-defi 1.0.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/README.md +757 -0
- package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
- package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
- package/dist/__mocks__/@sodax/sdk.js +24 -0
- package/dist/__mocks__/@sodax/sdk.js.map +1 -0
- package/dist/__tests__/setup.d.ts +4 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +32 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +281 -0
- package/dist/index.js.map +1 -0
- package/dist/policy/policyEngine.d.ts +119 -0
- package/dist/policy/policyEngine.d.ts.map +1 -0
- package/dist/policy/policyEngine.js +322 -0
- package/dist/policy/policyEngine.js.map +1 -0
- package/dist/providers/spokeProviderFactory.d.ts +38 -0
- package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
- package/dist/providers/spokeProviderFactory.js +212 -0
- package/dist/providers/spokeProviderFactory.js.map +1 -0
- package/dist/sodax/client.d.ts +34 -0
- package/dist/sodax/client.d.ts.map +1 -0
- package/dist/sodax/client.js +99 -0
- package/dist/sodax/client.js.map +1 -0
- package/dist/tools/bridge.d.ts +105 -0
- package/dist/tools/bridge.d.ts.map +1 -0
- package/dist/tools/bridge.js +334 -0
- package/dist/tools/bridge.js.map +1 -0
- package/dist/tools/discovery.d.ts +141 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +777 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/moneyMarket.d.ts +227 -0
- package/dist/tools/moneyMarket.d.ts.map +1 -0
- package/dist/tools/moneyMarket.js +867 -0
- package/dist/tools/moneyMarket.js.map +1 -0
- package/dist/tools/portfolio.d.ts +43 -0
- package/dist/tools/portfolio.d.ts.map +1 -0
- package/dist/tools/portfolio.js +538 -0
- package/dist/tools/portfolio.js.map +1 -0
- package/dist/tools/swap.d.ts +71 -0
- package/dist/tools/swap.d.ts.map +1 -0
- package/dist/tools/swap.js +762 -0
- package/dist/tools/swap.js.map +1 -0
- package/dist/tools/walletManagement.d.ts +80 -0
- package/dist/tools/walletManagement.d.ts.map +1 -0
- package/dist/tools/walletManagement.js +289 -0
- package/dist/tools/walletManagement.js.map +1 -0
- package/dist/types.d.ts +205 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errorUtils.d.ts +2 -0
- package/dist/utils/errorUtils.d.ts.map +1 -0
- package/dist/utils/errorUtils.js +19 -0
- package/dist/utils/errorUtils.js.map +1 -0
- package/dist/utils/errors.d.ts +144 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +310 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/positionAggregator.d.ts +122 -0
- package/dist/utils/positionAggregator.d.ts.map +1 -0
- package/dist/utils/positionAggregator.js +377 -0
- package/dist/utils/positionAggregator.js.map +1 -0
- package/dist/utils/priceService.d.ts +45 -0
- package/dist/utils/priceService.d.ts.map +1 -0
- package/dist/utils/priceService.js +108 -0
- package/dist/utils/priceService.js.map +1 -0
- package/dist/utils/sodaxApi.d.ts +92 -0
- package/dist/utils/sodaxApi.d.ts.map +1 -0
- package/dist/utils/sodaxApi.js +143 -0
- package/dist/utils/sodaxApi.js.map +1 -0
- package/dist/utils/tokenResolver.d.ts +54 -0
- package/dist/utils/tokenResolver.d.ts.map +1 -0
- package/dist/utils/tokenResolver.js +252 -0
- package/dist/utils/tokenResolver.js.map +1 -0
- package/dist/wallet/backendConfig.d.ts +37 -0
- package/dist/wallet/backendConfig.d.ts.map +1 -0
- package/dist/wallet/backendConfig.js +125 -0
- package/dist/wallet/backendConfig.js.map +1 -0
- package/dist/wallet/backends/BankrBackend.d.ts +73 -0
- package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
- package/dist/wallet/backends/BankrBackend.js +315 -0
- package/dist/wallet/backends/BankrBackend.js.map +1 -0
- package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
- package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
- package/dist/wallet/backends/BankrWalletProvider.js +243 -0
- package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
- package/dist/wallet/backends/EnvBackend.d.ts +50 -0
- package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
- package/dist/wallet/backends/EnvBackend.js +114 -0
- package/dist/wallet/backends/EnvBackend.js.map +1 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
- package/dist/wallet/backends/index.d.ts +10 -0
- package/dist/wallet/backends/index.d.ts.map +1 -0
- package/dist/wallet/backends/index.js +10 -0
- package/dist/wallet/backends/index.js.map +1 -0
- package/dist/wallet/index.d.ts +9 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +12 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
- package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
- package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
- package/dist/wallet/providers/BankrBackend.d.ts +105 -0
- package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
- package/dist/wallet/providers/BankrBackend.js +327 -0
- package/dist/wallet/providers/BankrBackend.js.map +1 -0
- package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
- package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
- package/dist/wallet/providers/LocalKeyBackend.js +152 -0
- package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
- package/dist/wallet/providers/chainConfig.d.ts +209 -0
- package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
- package/dist/wallet/providers/chainConfig.js +175 -0
- package/dist/wallet/providers/chainConfig.js.map +1 -0
- package/dist/wallet/providers/index.d.ts +30 -0
- package/dist/wallet/providers/index.d.ts.map +1 -0
- package/dist/wallet/providers/index.js +32 -0
- package/dist/wallet/providers/index.js.map +1 -0
- package/dist/wallet/providers/types.d.ts +156 -0
- package/dist/wallet/providers/types.d.ts.map +1 -0
- package/dist/wallet/providers/types.js +11 -0
- package/dist/wallet/providers/types.js.map +1 -0
- package/dist/wallet/skillWalletAdapter.d.ts +96 -0
- package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
- package/dist/wallet/skillWalletAdapter.js +280 -0
- package/dist/wallet/skillWalletAdapter.js.map +1 -0
- package/dist/wallet/types.d.ts +134 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/dist/wallet/types.js +138 -0
- package/dist/wallet/types.js.map +1 -0
- package/dist/wallet/walletManager.d.ts +111 -0
- package/dist/wallet/walletManager.d.ts.map +1 -0
- package/dist/wallet/walletManager.js +476 -0
- package/dist/wallet/walletManager.js.map +1 -0
- package/dist/wallet/walletRegistry.d.ts +95 -0
- package/dist/wallet/walletRegistry.d.ts.map +1 -0
- package/dist/wallet/walletRegistry.js +184 -0
- package/dist/wallet/walletRegistry.js.map +1 -0
- package/index.js +2 -0
- package/openclaw.plugin.json +37 -0
- package/package.json +69 -0
- package/src/__mocks__/@sodax/sdk.ts +28 -0
- package/src/__tests__/errors.test.ts +238 -0
- package/src/__tests__/policyEngine.test.ts +354 -0
- package/src/__tests__/positionAggregator.test.ts +271 -0
- package/src/__tests__/setup.ts +35 -0
- package/src/__tests__/sodaxApi.test.ts +203 -0
- package/src/__tests__/walletRegistry.test.ts +155 -0
- package/src/index.ts +376 -0
- package/src/policy/policyEngine.ts +389 -0
- package/src/providers/spokeProviderFactory.ts +283 -0
- package/src/sodax/client.ts +113 -0
- package/src/tools/bridge.ts +425 -0
- package/src/tools/discovery.ts +989 -0
- package/src/tools/moneyMarket.ts +1265 -0
- package/src/tools/portfolio.ts +697 -0
- package/src/tools/swap.ts +926 -0
- package/src/tools/walletManagement.ts +359 -0
- package/src/types.ts +228 -0
- package/src/utils/errorUtils.ts +16 -0
- package/src/utils/errors.ts +396 -0
- package/src/utils/positionAggregator.ts +559 -0
- package/src/utils/priceService.ts +153 -0
- package/src/utils/sodaxApi.ts +261 -0
- package/src/utils/tokenResolver.ts +286 -0
- package/src/wallet/backendConfig.ts +151 -0
- package/src/wallet/backends/BankrBackend.ts +399 -0
- package/src/wallet/backends/BankrWalletProvider.ts +329 -0
- package/src/wallet/backends/EnvBackend.ts +149 -0
- package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
- package/src/wallet/backends/index.ts +10 -0
- package/src/wallet/index.ts +14 -0
- package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
- package/src/wallet/providers/BankrBackend.ts +407 -0
- package/src/wallet/providers/LocalKeyBackend.ts +184 -0
- package/src/wallet/providers/chainConfig.ts +194 -0
- package/src/wallet/providers/index.ts +62 -0
- package/src/wallet/providers/types.ts +186 -0
- package/src/wallet/skillWalletAdapter.ts +335 -0
- package/src/wallet/types.ts +248 -0
- package/src/wallet/walletManager.ts +561 -0
- package/src/wallet/walletRegistry.ts +216 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorUtils.d.ts","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQrD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize SDK error objects for readable error messages
|
|
3
|
+
*/
|
|
4
|
+
function bigintReplacer(key, value) {
|
|
5
|
+
return typeof value === 'bigint' ? value.toString() : value;
|
|
6
|
+
}
|
|
7
|
+
export function serializeError(error) {
|
|
8
|
+
if (error instanceof Error)
|
|
9
|
+
return error.message;
|
|
10
|
+
if (typeof error === 'string')
|
|
11
|
+
return error;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify(error, bigintReplacer, 2);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return String(error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=errorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,KAAU;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Handling Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides standardized error handling, error codes, and user-friendly error messages
|
|
5
|
+
* for all Amped DeFi operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Standard error codes for Amped DeFi operations
|
|
9
|
+
*/
|
|
10
|
+
export declare enum ErrorCode {
|
|
11
|
+
POLICY_SLIPPAGE_EXCEEDED = "POLICY_SLIPPAGE_EXCEEDED",
|
|
12
|
+
POLICY_SPEND_LIMIT_EXCEEDED = "POLICY_SPEND_LIMIT_EXCEEDED",
|
|
13
|
+
POLICY_CHAIN_NOT_ALLOWED = "POLICY_CHAIN_NOT_ALLOWED",
|
|
14
|
+
POLICY_TOKEN_NOT_ALLOWED = "POLICY_TOKEN_NOT_ALLOWED",
|
|
15
|
+
POLICY_RECIPIENT_BLOCKED = "POLICY_RECIPIENT_BLOCKED",
|
|
16
|
+
WALLET_NOT_FOUND = "WALLET_NOT_FOUND",
|
|
17
|
+
WALLET_INVALID_ADDRESS = "WALLET_INVALID_ADDRESS",
|
|
18
|
+
WALLET_MISSING_PRIVATE_KEY = "WALLET_MISSING_PRIVATE_KEY",
|
|
19
|
+
WALLET_RESOLUTION_FAILED = "WALLET_RESOLUTION_FAILED",
|
|
20
|
+
CHAIN_NOT_SUPPORTED = "CHAIN_NOT_SUPPORTED",
|
|
21
|
+
RPC_URL_NOT_CONFIGURED = "RPC_URL_NOT_CONFIGURED",
|
|
22
|
+
PROVIDER_CREATION_FAILED = "PROVIDER_CREATION_FAILED",
|
|
23
|
+
SONIC_PROVIDER_REQUIRED = "SONIC_PROVIDER_REQUIRED",
|
|
24
|
+
INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE",
|
|
25
|
+
INSUFFICIENT_ALLOWANCE = "INSUFFICIENT_ALLOWANCE",
|
|
26
|
+
TOKEN_NOT_SUPPORTED = "TOKEN_NOT_SUPPORTED",
|
|
27
|
+
TOKEN_DECIMALS_NOT_FOUND = "TOKEN_DECIMALS_NOT_FOUND",
|
|
28
|
+
QUOTE_EXPIRED = "QUOTE_EXPIRED",
|
|
29
|
+
QUOTE_NOT_FOUND = "QUOTE_NOT_FOUND",
|
|
30
|
+
BRIDGE_NOT_AVAILABLE = "BRIDGE_NOT_AVAILABLE",
|
|
31
|
+
SWAP_EXECUTION_FAILED = "SWAP_EXECUTION_FAILED",
|
|
32
|
+
BRIDGE_EXECUTION_FAILED = "BRIDGE_EXECUTION_FAILED",
|
|
33
|
+
MM_HEALTH_FACTOR_LOW = "MM_HEALTH_FACTOR_LOW",
|
|
34
|
+
MM_CROSS_CHAIN_NOT_SUPPORTED = "MM_CROSS_CHAIN_NOT_SUPPORTED",
|
|
35
|
+
MM_INSUFFICIENT_COLLATERAL = "MM_INSUFFICIENT_COLLATERAL",
|
|
36
|
+
MM_POSITION_NOT_FOUND = "MM_POSITION_NOT_FOUND",
|
|
37
|
+
TRANSACTION_FAILED = "TRANSACTION_FAILED",
|
|
38
|
+
TRANSACTION_TIMEOUT = "TRANSACTION_TIMEOUT",
|
|
39
|
+
TRANSACTION_REJECTED = "TRANSACTION_REJECTED",
|
|
40
|
+
TRANSACTION_SIMULATION_FAILED = "TRANSACTION_SIMULATION_FAILED",
|
|
41
|
+
SDK_NOT_INITIALIZED = "SDK_NOT_INITIALIZED",
|
|
42
|
+
SDK_INITIALIZATION_FAILED = "SDK_INITIALIZATION_FAILED",
|
|
43
|
+
INVALID_CONFIGURATION = "INVALID_CONFIGURATION",
|
|
44
|
+
CONFIG_PARSE_ERROR = "CONFIG_PARSE_ERROR",
|
|
45
|
+
UNKNOWN_ERROR = "UNKNOWN_ERROR",
|
|
46
|
+
OPERATION_CANCELLED = "OPERATION_CANCELLED"
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Error severity levels
|
|
50
|
+
*/
|
|
51
|
+
export declare enum ErrorSeverity {
|
|
52
|
+
INFO = "info",
|
|
53
|
+
WARNING = "warning",
|
|
54
|
+
ERROR = "error",
|
|
55
|
+
CRITICAL = "critical"
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Structured error information
|
|
59
|
+
*/
|
|
60
|
+
export interface AmpedError {
|
|
61
|
+
code: ErrorCode;
|
|
62
|
+
message: string;
|
|
63
|
+
severity: ErrorSeverity;
|
|
64
|
+
remediation?: string;
|
|
65
|
+
details?: Record<string, unknown>;
|
|
66
|
+
cause?: Error;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Error context for logging
|
|
70
|
+
*/
|
|
71
|
+
export interface ErrorContext {
|
|
72
|
+
operation?: string;
|
|
73
|
+
walletId?: string;
|
|
74
|
+
chainId?: string;
|
|
75
|
+
chainIds?: string[];
|
|
76
|
+
token?: string;
|
|
77
|
+
tokens?: string[];
|
|
78
|
+
amount?: string;
|
|
79
|
+
requestId?: string;
|
|
80
|
+
txHash?: string;
|
|
81
|
+
[key: string]: unknown;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Amped DeFi Error class
|
|
85
|
+
*/
|
|
86
|
+
export declare class AmpedDefiError extends Error {
|
|
87
|
+
readonly code: ErrorCode;
|
|
88
|
+
readonly severity: ErrorSeverity;
|
|
89
|
+
readonly remediation?: string;
|
|
90
|
+
readonly details?: Record<string, unknown>;
|
|
91
|
+
readonly context?: ErrorContext;
|
|
92
|
+
constructor(code: ErrorCode, message: string, options?: {
|
|
93
|
+
severity?: ErrorSeverity;
|
|
94
|
+
remediation?: string;
|
|
95
|
+
details?: Record<string, unknown>;
|
|
96
|
+
context?: ErrorContext;
|
|
97
|
+
cause?: Error;
|
|
98
|
+
});
|
|
99
|
+
/**
|
|
100
|
+
* Convert to JSON-serializable object
|
|
101
|
+
*/
|
|
102
|
+
toJSON(): AmpedError;
|
|
103
|
+
/**
|
|
104
|
+
* Get user-friendly error message
|
|
105
|
+
*/
|
|
106
|
+
toUserMessage(): string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create a policy error
|
|
110
|
+
*/
|
|
111
|
+
export declare function createPolicyError(code: ErrorCode, message: string, details?: {
|
|
112
|
+
current?: unknown;
|
|
113
|
+
limit?: unknown;
|
|
114
|
+
[key: string]: unknown;
|
|
115
|
+
}, context?: ErrorContext): AmpedDefiError;
|
|
116
|
+
/**
|
|
117
|
+
* Create a wallet error
|
|
118
|
+
*/
|
|
119
|
+
export declare function createWalletError(code: ErrorCode, walletId: string, cause?: Error, context?: ErrorContext): AmpedDefiError;
|
|
120
|
+
/**
|
|
121
|
+
* Create a transaction error
|
|
122
|
+
*/
|
|
123
|
+
export declare function createTransactionError(code: ErrorCode, message: string, txHash?: string, cause?: Error, context?: ErrorContext): AmpedDefiError;
|
|
124
|
+
/**
|
|
125
|
+
* Create an SDK error
|
|
126
|
+
*/
|
|
127
|
+
export declare function createSDKError(code: ErrorCode, message: string, cause?: Error, context?: ErrorContext): AmpedDefiError;
|
|
128
|
+
/**
|
|
129
|
+
* Wrap an unknown error into an AmpedDefiError
|
|
130
|
+
*/
|
|
131
|
+
export declare function wrapError(error: unknown, fallbackCode?: ErrorCode, context?: ErrorContext): AmpedDefiError;
|
|
132
|
+
/**
|
|
133
|
+
* Log an error with structured context
|
|
134
|
+
*/
|
|
135
|
+
export declare function logError(error: AmpedDefiError | Error, context?: ErrorContext): void;
|
|
136
|
+
/**
|
|
137
|
+
* Check if an error is retryable
|
|
138
|
+
*/
|
|
139
|
+
export declare function isRetryableError(error: AmpedDefiError | Error): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Get retry delay in milliseconds with exponential backoff
|
|
142
|
+
*/
|
|
143
|
+
export declare function getRetryDelay(attempt: number, baseDelay?: number): number;
|
|
144
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Handling Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides standardized error handling, error codes, and user-friendly error messages
|
|
5
|
+
* for all Amped DeFi operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Standard error codes for Amped DeFi operations
|
|
9
|
+
*/
|
|
10
|
+
export var ErrorCode;
|
|
11
|
+
(function (ErrorCode) {
|
|
12
|
+
// Policy errors
|
|
13
|
+
ErrorCode["POLICY_SLIPPAGE_EXCEEDED"] = "POLICY_SLIPPAGE_EXCEEDED";
|
|
14
|
+
ErrorCode["POLICY_SPEND_LIMIT_EXCEEDED"] = "POLICY_SPEND_LIMIT_EXCEEDED";
|
|
15
|
+
ErrorCode["POLICY_CHAIN_NOT_ALLOWED"] = "POLICY_CHAIN_NOT_ALLOWED";
|
|
16
|
+
ErrorCode["POLICY_TOKEN_NOT_ALLOWED"] = "POLICY_TOKEN_NOT_ALLOWED";
|
|
17
|
+
ErrorCode["POLICY_RECIPIENT_BLOCKED"] = "POLICY_RECIPIENT_BLOCKED";
|
|
18
|
+
// Wallet errors
|
|
19
|
+
ErrorCode["WALLET_NOT_FOUND"] = "WALLET_NOT_FOUND";
|
|
20
|
+
ErrorCode["WALLET_INVALID_ADDRESS"] = "WALLET_INVALID_ADDRESS";
|
|
21
|
+
ErrorCode["WALLET_MISSING_PRIVATE_KEY"] = "WALLET_MISSING_PRIVATE_KEY";
|
|
22
|
+
ErrorCode["WALLET_RESOLUTION_FAILED"] = "WALLET_RESOLUTION_FAILED";
|
|
23
|
+
// Chain/Provider errors
|
|
24
|
+
ErrorCode["CHAIN_NOT_SUPPORTED"] = "CHAIN_NOT_SUPPORTED";
|
|
25
|
+
ErrorCode["RPC_URL_NOT_CONFIGURED"] = "RPC_URL_NOT_CONFIGURED";
|
|
26
|
+
ErrorCode["PROVIDER_CREATION_FAILED"] = "PROVIDER_CREATION_FAILED";
|
|
27
|
+
ErrorCode["SONIC_PROVIDER_REQUIRED"] = "SONIC_PROVIDER_REQUIRED";
|
|
28
|
+
// Token errors
|
|
29
|
+
ErrorCode["INSUFFICIENT_BALANCE"] = "INSUFFICIENT_BALANCE";
|
|
30
|
+
ErrorCode["INSUFFICIENT_ALLOWANCE"] = "INSUFFICIENT_ALLOWANCE";
|
|
31
|
+
ErrorCode["TOKEN_NOT_SUPPORTED"] = "TOKEN_NOT_SUPPORTED";
|
|
32
|
+
ErrorCode["TOKEN_DECIMALS_NOT_FOUND"] = "TOKEN_DECIMALS_NOT_FOUND";
|
|
33
|
+
// Operation errors
|
|
34
|
+
ErrorCode["QUOTE_EXPIRED"] = "QUOTE_EXPIRED";
|
|
35
|
+
ErrorCode["QUOTE_NOT_FOUND"] = "QUOTE_NOT_FOUND";
|
|
36
|
+
ErrorCode["BRIDGE_NOT_AVAILABLE"] = "BRIDGE_NOT_AVAILABLE";
|
|
37
|
+
ErrorCode["SWAP_EXECUTION_FAILED"] = "SWAP_EXECUTION_FAILED";
|
|
38
|
+
ErrorCode["BRIDGE_EXECUTION_FAILED"] = "BRIDGE_EXECUTION_FAILED";
|
|
39
|
+
ErrorCode["MM_HEALTH_FACTOR_LOW"] = "MM_HEALTH_FACTOR_LOW";
|
|
40
|
+
ErrorCode["MM_CROSS_CHAIN_NOT_SUPPORTED"] = "MM_CROSS_CHAIN_NOT_SUPPORTED";
|
|
41
|
+
ErrorCode["MM_INSUFFICIENT_COLLATERAL"] = "MM_INSUFFICIENT_COLLATERAL";
|
|
42
|
+
ErrorCode["MM_POSITION_NOT_FOUND"] = "MM_POSITION_NOT_FOUND";
|
|
43
|
+
// Transaction errors
|
|
44
|
+
ErrorCode["TRANSACTION_FAILED"] = "TRANSACTION_FAILED";
|
|
45
|
+
ErrorCode["TRANSACTION_TIMEOUT"] = "TRANSACTION_TIMEOUT";
|
|
46
|
+
ErrorCode["TRANSACTION_REJECTED"] = "TRANSACTION_REJECTED";
|
|
47
|
+
ErrorCode["TRANSACTION_SIMULATION_FAILED"] = "TRANSACTION_SIMULATION_FAILED";
|
|
48
|
+
// SDK/Configuration errors
|
|
49
|
+
ErrorCode["SDK_NOT_INITIALIZED"] = "SDK_NOT_INITIALIZED";
|
|
50
|
+
ErrorCode["SDK_INITIALIZATION_FAILED"] = "SDK_INITIALIZATION_FAILED";
|
|
51
|
+
ErrorCode["INVALID_CONFIGURATION"] = "INVALID_CONFIGURATION";
|
|
52
|
+
ErrorCode["CONFIG_PARSE_ERROR"] = "CONFIG_PARSE_ERROR";
|
|
53
|
+
// Unknown/Generic
|
|
54
|
+
ErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
55
|
+
ErrorCode["OPERATION_CANCELLED"] = "OPERATION_CANCELLED";
|
|
56
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
57
|
+
/**
|
|
58
|
+
* Error severity levels
|
|
59
|
+
*/
|
|
60
|
+
export var ErrorSeverity;
|
|
61
|
+
(function (ErrorSeverity) {
|
|
62
|
+
ErrorSeverity["INFO"] = "info";
|
|
63
|
+
ErrorSeverity["WARNING"] = "warning";
|
|
64
|
+
ErrorSeverity["ERROR"] = "error";
|
|
65
|
+
ErrorSeverity["CRITICAL"] = "critical";
|
|
66
|
+
})(ErrorSeverity || (ErrorSeverity = {}));
|
|
67
|
+
/**
|
|
68
|
+
* Amped DeFi Error class
|
|
69
|
+
*/
|
|
70
|
+
export class AmpedDefiError extends Error {
|
|
71
|
+
code;
|
|
72
|
+
severity;
|
|
73
|
+
remediation;
|
|
74
|
+
details;
|
|
75
|
+
context;
|
|
76
|
+
constructor(code, message, options) {
|
|
77
|
+
super(message, { cause: options?.cause });
|
|
78
|
+
this.name = 'AmpedDefiError';
|
|
79
|
+
this.code = code;
|
|
80
|
+
this.severity = options?.severity || ErrorSeverity.ERROR;
|
|
81
|
+
this.remediation = options?.remediation;
|
|
82
|
+
this.details = options?.details;
|
|
83
|
+
this.context = options?.context;
|
|
84
|
+
// Maintains proper stack trace for where our error was thrown (only available on V8)
|
|
85
|
+
if (Error.captureStackTrace) {
|
|
86
|
+
Error.captureStackTrace(this, AmpedDefiError);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Convert to JSON-serializable object
|
|
91
|
+
*/
|
|
92
|
+
toJSON() {
|
|
93
|
+
return {
|
|
94
|
+
code: this.code,
|
|
95
|
+
message: this.message,
|
|
96
|
+
severity: this.severity,
|
|
97
|
+
remediation: this.remediation,
|
|
98
|
+
details: this.details,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get user-friendly error message
|
|
103
|
+
*/
|
|
104
|
+
toUserMessage() {
|
|
105
|
+
let msg = `[${this.code}] ${this.message}`;
|
|
106
|
+
if (this.remediation) {
|
|
107
|
+
msg += `\n\nSuggestion: ${this.remediation}`;
|
|
108
|
+
}
|
|
109
|
+
return msg;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// Error Factory Functions
|
|
114
|
+
// ============================================================================
|
|
115
|
+
/**
|
|
116
|
+
* Create a policy error
|
|
117
|
+
*/
|
|
118
|
+
export function createPolicyError(code, message, details, context) {
|
|
119
|
+
const remediation = getPolicyRemediation(code, details);
|
|
120
|
+
return new AmpedDefiError(code, message, {
|
|
121
|
+
severity: ErrorSeverity.WARNING,
|
|
122
|
+
remediation,
|
|
123
|
+
details,
|
|
124
|
+
context,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create a wallet error
|
|
129
|
+
*/
|
|
130
|
+
export function createWalletError(code, walletId, cause, context) {
|
|
131
|
+
const message = getWalletErrorMessage(code, walletId);
|
|
132
|
+
return new AmpedDefiError(code, message, {
|
|
133
|
+
severity: ErrorSeverity.ERROR,
|
|
134
|
+
remediation: getWalletRemediation(code),
|
|
135
|
+
context: { ...context, walletId },
|
|
136
|
+
cause,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create a transaction error
|
|
141
|
+
*/
|
|
142
|
+
export function createTransactionError(code, message, txHash, cause, context) {
|
|
143
|
+
return new AmpedDefiError(code, message, {
|
|
144
|
+
severity: ErrorSeverity.ERROR,
|
|
145
|
+
remediation: getTransactionRemediation(code),
|
|
146
|
+
details: txHash ? { txHash } : undefined,
|
|
147
|
+
context: txHash ? { ...context, txHash } : context,
|
|
148
|
+
cause,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Create an SDK error
|
|
153
|
+
*/
|
|
154
|
+
export function createSDKError(code, message, cause, context) {
|
|
155
|
+
return new AmpedDefiError(code, message, {
|
|
156
|
+
severity: ErrorSeverity.CRITICAL,
|
|
157
|
+
remediation: 'Please check your configuration and try again. If the issue persists, contact support.',
|
|
158
|
+
context,
|
|
159
|
+
cause,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Wrap an unknown error into an AmpedDefiError
|
|
164
|
+
*/
|
|
165
|
+
export function wrapError(error, fallbackCode = ErrorCode.UNKNOWN_ERROR, context) {
|
|
166
|
+
if (error instanceof AmpedDefiError) {
|
|
167
|
+
return error;
|
|
168
|
+
}
|
|
169
|
+
if (error instanceof Error) {
|
|
170
|
+
// Try to infer error code from message
|
|
171
|
+
const code = inferErrorCode(error.message) || fallbackCode;
|
|
172
|
+
return new AmpedDefiError(code, error.message, {
|
|
173
|
+
severity: ErrorSeverity.ERROR,
|
|
174
|
+
context,
|
|
175
|
+
cause: error,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return new AmpedDefiError(fallbackCode, String(error), {
|
|
179
|
+
severity: ErrorSeverity.ERROR,
|
|
180
|
+
context,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// Remediation Helpers
|
|
185
|
+
// ============================================================================
|
|
186
|
+
function getPolicyRemediation(code, details) {
|
|
187
|
+
switch (code) {
|
|
188
|
+
case ErrorCode.POLICY_SLIPPAGE_EXCEEDED:
|
|
189
|
+
return `Slippage ${details?.current} bps exceeds limit of ${details?.limit} bps. Increase maxSlippageBps in your policy configuration or wait for better market conditions.`;
|
|
190
|
+
case ErrorCode.POLICY_SPEND_LIMIT_EXCEEDED:
|
|
191
|
+
return `Reduce the operation amount or request a policy limit increase. Current limit: ${details?.limit}`;
|
|
192
|
+
case ErrorCode.POLICY_CHAIN_NOT_ALLOWED:
|
|
193
|
+
return `Add the chain to your allowedChains policy configuration or use a different chain.`;
|
|
194
|
+
case ErrorCode.POLICY_TOKEN_NOT_ALLOWED:
|
|
195
|
+
return `Add the token to your allowedTokensByChain policy configuration or use a different token.`;
|
|
196
|
+
case ErrorCode.POLICY_RECIPIENT_BLOCKED:
|
|
197
|
+
return `Use a different recipient address. This address has been blocked by policy.`;
|
|
198
|
+
default:
|
|
199
|
+
return 'Review your policy configuration or contact your administrator.';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function getWalletRemediation(code) {
|
|
203
|
+
switch (code) {
|
|
204
|
+
case ErrorCode.WALLET_NOT_FOUND:
|
|
205
|
+
return 'Check your AMPED_OC_WALLETS_JSON configuration and ensure the walletId is correct.';
|
|
206
|
+
case ErrorCode.WALLET_INVALID_ADDRESS:
|
|
207
|
+
return 'Verify the wallet address format (should be 0x-prefixed Ethereum address).';
|
|
208
|
+
case ErrorCode.WALLET_MISSING_PRIVATE_KEY:
|
|
209
|
+
return 'Add the private key to your wallet configuration for execute mode, or switch to prepare mode.';
|
|
210
|
+
default:
|
|
211
|
+
return 'Check your wallet configuration and try again.';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function getTransactionRemediation(code) {
|
|
215
|
+
switch (code) {
|
|
216
|
+
case ErrorCode.TRANSACTION_FAILED:
|
|
217
|
+
return 'Check the transaction on a block explorer for revert reasons. You may need to adjust parameters or try again later.';
|
|
218
|
+
case ErrorCode.TRANSACTION_TIMEOUT:
|
|
219
|
+
return 'The operation timed out. You can check the status later using the transaction hash.';
|
|
220
|
+
case ErrorCode.TRANSACTION_REJECTED:
|
|
221
|
+
return 'The transaction was rejected. This may be due to network congestion or insufficient gas.';
|
|
222
|
+
case ErrorCode.TRANSACTION_SIMULATION_FAILED:
|
|
223
|
+
return 'The transaction would fail if executed. Check your balances, allowances, and parameters.';
|
|
224
|
+
default:
|
|
225
|
+
return 'Try again or contact support if the issue persists.';
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function getWalletErrorMessage(code, walletId) {
|
|
229
|
+
switch (code) {
|
|
230
|
+
case ErrorCode.WALLET_NOT_FOUND:
|
|
231
|
+
return `Wallet not found: ${walletId}`;
|
|
232
|
+
case ErrorCode.WALLET_INVALID_ADDRESS:
|
|
233
|
+
return `Wallet ${walletId} has an invalid address`;
|
|
234
|
+
case ErrorCode.WALLET_MISSING_PRIVATE_KEY:
|
|
235
|
+
return `Wallet ${walletId} is missing private key (required in execute mode)`;
|
|
236
|
+
default:
|
|
237
|
+
return `Wallet error for ${walletId}`;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function inferErrorCode(message) {
|
|
241
|
+
const lowerMsg = message.toLowerCase();
|
|
242
|
+
if (lowerMsg.includes('insufficient balance'))
|
|
243
|
+
return ErrorCode.INSUFFICIENT_BALANCE;
|
|
244
|
+
if (lowerMsg.includes('allowance'))
|
|
245
|
+
return ErrorCode.INSUFFICIENT_ALLOWANCE;
|
|
246
|
+
if (lowerMsg.includes('slippage'))
|
|
247
|
+
return ErrorCode.POLICY_SLIPPAGE_EXCEEDED;
|
|
248
|
+
if (lowerMsg.includes('health factor'))
|
|
249
|
+
return ErrorCode.MM_HEALTH_FACTOR_LOW;
|
|
250
|
+
if (lowerMsg.includes('timeout'))
|
|
251
|
+
return ErrorCode.TRANSACTION_TIMEOUT;
|
|
252
|
+
if (lowerMsg.includes('rejected'))
|
|
253
|
+
return ErrorCode.TRANSACTION_REJECTED;
|
|
254
|
+
if (lowerMsg.includes('simulation'))
|
|
255
|
+
return ErrorCode.TRANSACTION_SIMULATION_FAILED;
|
|
256
|
+
if (lowerMsg.includes('not initialized'))
|
|
257
|
+
return ErrorCode.SDK_NOT_INITIALIZED;
|
|
258
|
+
if (lowerMsg.includes('bridge') && lowerMsg.includes('not'))
|
|
259
|
+
return ErrorCode.BRIDGE_NOT_AVAILABLE;
|
|
260
|
+
if (lowerMsg.includes('quote') && lowerMsg.includes('expir'))
|
|
261
|
+
return ErrorCode.QUOTE_EXPIRED;
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
// ============================================================================
|
|
265
|
+
// Logging and Observability
|
|
266
|
+
// ============================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Log an error with structured context
|
|
269
|
+
*/
|
|
270
|
+
export function logError(error, context) {
|
|
271
|
+
const structuredLog = {
|
|
272
|
+
timestamp: new Date().toISOString(),
|
|
273
|
+
component: 'amped-defi',
|
|
274
|
+
level: error instanceof AmpedDefiError ? error.severity : 'error',
|
|
275
|
+
code: error instanceof AmpedDefiError ? error.code : ErrorCode.UNKNOWN_ERROR,
|
|
276
|
+
message: error.message,
|
|
277
|
+
context,
|
|
278
|
+
stack: error.stack,
|
|
279
|
+
cause: error.cause,
|
|
280
|
+
};
|
|
281
|
+
// Log as JSON for structured logging systems
|
|
282
|
+
console.error(JSON.stringify(structuredLog, (k, v) => typeof v === 'bigint' ? v.toString() : v));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Check if an error is retryable
|
|
286
|
+
*/
|
|
287
|
+
export function isRetryableError(error) {
|
|
288
|
+
if (error instanceof AmpedDefiError) {
|
|
289
|
+
const retryableCodes = [
|
|
290
|
+
ErrorCode.TRANSACTION_TIMEOUT,
|
|
291
|
+
ErrorCode.RPC_URL_NOT_CONFIGURED,
|
|
292
|
+
ErrorCode.SDK_NOT_INITIALIZED,
|
|
293
|
+
ErrorCode.UNKNOWN_ERROR,
|
|
294
|
+
];
|
|
295
|
+
return retryableCodes.includes(error.code);
|
|
296
|
+
}
|
|
297
|
+
// For generic errors, check message patterns
|
|
298
|
+
const lowerMsg = error.message.toLowerCase();
|
|
299
|
+
return lowerMsg.includes('timeout') ||
|
|
300
|
+
lowerMsg.includes('network') ||
|
|
301
|
+
lowerMsg.includes('connection') ||
|
|
302
|
+
lowerMsg.includes('rate limit');
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get retry delay in milliseconds with exponential backoff
|
|
306
|
+
*/
|
|
307
|
+
export function getRetryDelay(attempt, baseDelay = 1000) {
|
|
308
|
+
return Math.min(baseDelay * Math.pow(2, attempt), 30000); // Cap at 30 seconds
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Chain Money Market Position Aggregator
|
|
3
|
+
*
|
|
4
|
+
* Aggregates user positions across all supported chains to provide a unified view
|
|
5
|
+
* of their money market portfolio, including:
|
|
6
|
+
* - Total supplied/borrowed across all chains
|
|
7
|
+
* - Health factor and liquidation risk
|
|
8
|
+
* - Available borrowing power
|
|
9
|
+
* - Net position (supply - borrow)
|
|
10
|
+
* - Cross-chain collateral utilization
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Position data for a single token on a single chain
|
|
14
|
+
*/
|
|
15
|
+
export interface TokenPosition {
|
|
16
|
+
chainId: string;
|
|
17
|
+
token: {
|
|
18
|
+
address: string;
|
|
19
|
+
symbol: string;
|
|
20
|
+
name: string;
|
|
21
|
+
decimals: number;
|
|
22
|
+
logoURI?: string;
|
|
23
|
+
};
|
|
24
|
+
supply: {
|
|
25
|
+
balance: string;
|
|
26
|
+
balanceUsd: string;
|
|
27
|
+
balanceRaw: string;
|
|
28
|
+
apy: number;
|
|
29
|
+
isCollateral: boolean;
|
|
30
|
+
};
|
|
31
|
+
borrow: {
|
|
32
|
+
balance: string;
|
|
33
|
+
balanceUsd: string;
|
|
34
|
+
balanceRaw: string;
|
|
35
|
+
apy: number;
|
|
36
|
+
};
|
|
37
|
+
loanToValue: number;
|
|
38
|
+
liquidationThreshold: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Aggregated position summary across all chains
|
|
42
|
+
*/
|
|
43
|
+
export interface AggregatedPositionSummary {
|
|
44
|
+
totalSupplyUsd: number;
|
|
45
|
+
totalBorrowUsd: number;
|
|
46
|
+
netWorthUsd: number;
|
|
47
|
+
availableBorrowUsd: number;
|
|
48
|
+
healthFactor: number | null;
|
|
49
|
+
liquidationRisk: 'none' | 'low' | 'medium' | 'high';
|
|
50
|
+
weightedSupplyApy: number;
|
|
51
|
+
weightedBorrowApy: number;
|
|
52
|
+
netApy: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Chain-specific position summary
|
|
56
|
+
*/
|
|
57
|
+
export interface ChainPositionSummary {
|
|
58
|
+
chainId: string;
|
|
59
|
+
supplyUsd: number;
|
|
60
|
+
borrowUsd: number;
|
|
61
|
+
netWorthUsd: number;
|
|
62
|
+
healthFactor: number | null;
|
|
63
|
+
positionCount: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Complete cross-chain position view
|
|
67
|
+
*/
|
|
68
|
+
export interface CrossChainPositionView {
|
|
69
|
+
walletId: string;
|
|
70
|
+
address: string;
|
|
71
|
+
timestamp: string;
|
|
72
|
+
summary: AggregatedPositionSummary;
|
|
73
|
+
chainSummaries: ChainPositionSummary[];
|
|
74
|
+
positions: TokenPosition[];
|
|
75
|
+
collateralUtilization: {
|
|
76
|
+
totalCollateralUsd: number;
|
|
77
|
+
usedCollateralUsd: number;
|
|
78
|
+
availableCollateralUsd: number;
|
|
79
|
+
utilizationRate: number;
|
|
80
|
+
};
|
|
81
|
+
riskMetrics: {
|
|
82
|
+
maxLtv: number;
|
|
83
|
+
currentLtv: number;
|
|
84
|
+
bufferUntilLiquidation: number;
|
|
85
|
+
safeMaxBorrowUsd: number;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Options for position aggregation
|
|
90
|
+
*/
|
|
91
|
+
export interface AggregationOptions {
|
|
92
|
+
/** Specific chains to query (defaults to all supported chains) */
|
|
93
|
+
chainIds?: string[];
|
|
94
|
+
/** Include zero-balance positions */
|
|
95
|
+
includeZeroBalances?: boolean;
|
|
96
|
+
/** Minimum USD value to include (positions below this are filtered out unless includeZeroBalances is true) */
|
|
97
|
+
minUsdValue?: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Aggregate money market positions across all supported chains
|
|
101
|
+
*
|
|
102
|
+
* @param walletId - The wallet identifier
|
|
103
|
+
* @param options - Aggregation options
|
|
104
|
+
* @returns Complete cross-chain position view
|
|
105
|
+
*/
|
|
106
|
+
export declare function aggregateCrossChainPositions(walletId: string, options?: AggregationOptions): Promise<CrossChainPositionView>;
|
|
107
|
+
/**
|
|
108
|
+
* Format health factor for display
|
|
109
|
+
*/
|
|
110
|
+
export declare function formatHealthFactor(hf: number | null): string;
|
|
111
|
+
/**
|
|
112
|
+
* Get health factor color/styling indicator
|
|
113
|
+
*/
|
|
114
|
+
export declare function getHealthFactorStatus(hf: number | null): {
|
|
115
|
+
status: 'healthy' | 'caution' | 'danger' | 'critical';
|
|
116
|
+
color: 'green' | 'yellow' | 'orange' | 'red';
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Get recommendation based on position health
|
|
120
|
+
*/
|
|
121
|
+
export declare function getPositionRecommendation(view: CrossChainPositionView): string[];
|
|
122
|
+
//# sourceMappingURL=positionAggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positionAggregator.d.ts","sourceRoot":"","sources":["../../src/utils/positionAggregator.ts"],"names":[],"mappings":"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"}
|