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.
Files changed (189) hide show
  1. package/README.md +757 -0
  2. package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
  3. package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
  4. package/dist/__mocks__/@sodax/sdk.js +24 -0
  5. package/dist/__mocks__/@sodax/sdk.js.map +1 -0
  6. package/dist/__tests__/setup.d.ts +4 -0
  7. package/dist/__tests__/setup.d.ts.map +1 -0
  8. package/dist/__tests__/setup.js +32 -0
  9. package/dist/__tests__/setup.js.map +1 -0
  10. package/dist/index.d.ts +66 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +281 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/policy/policyEngine.d.ts +119 -0
  15. package/dist/policy/policyEngine.d.ts.map +1 -0
  16. package/dist/policy/policyEngine.js +322 -0
  17. package/dist/policy/policyEngine.js.map +1 -0
  18. package/dist/providers/spokeProviderFactory.d.ts +38 -0
  19. package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
  20. package/dist/providers/spokeProviderFactory.js +212 -0
  21. package/dist/providers/spokeProviderFactory.js.map +1 -0
  22. package/dist/sodax/client.d.ts +34 -0
  23. package/dist/sodax/client.d.ts.map +1 -0
  24. package/dist/sodax/client.js +99 -0
  25. package/dist/sodax/client.js.map +1 -0
  26. package/dist/tools/bridge.d.ts +105 -0
  27. package/dist/tools/bridge.d.ts.map +1 -0
  28. package/dist/tools/bridge.js +334 -0
  29. package/dist/tools/bridge.js.map +1 -0
  30. package/dist/tools/discovery.d.ts +141 -0
  31. package/dist/tools/discovery.d.ts.map +1 -0
  32. package/dist/tools/discovery.js +777 -0
  33. package/dist/tools/discovery.js.map +1 -0
  34. package/dist/tools/moneyMarket.d.ts +227 -0
  35. package/dist/tools/moneyMarket.d.ts.map +1 -0
  36. package/dist/tools/moneyMarket.js +867 -0
  37. package/dist/tools/moneyMarket.js.map +1 -0
  38. package/dist/tools/portfolio.d.ts +43 -0
  39. package/dist/tools/portfolio.d.ts.map +1 -0
  40. package/dist/tools/portfolio.js +538 -0
  41. package/dist/tools/portfolio.js.map +1 -0
  42. package/dist/tools/swap.d.ts +71 -0
  43. package/dist/tools/swap.d.ts.map +1 -0
  44. package/dist/tools/swap.js +762 -0
  45. package/dist/tools/swap.js.map +1 -0
  46. package/dist/tools/walletManagement.d.ts +80 -0
  47. package/dist/tools/walletManagement.d.ts.map +1 -0
  48. package/dist/tools/walletManagement.js +289 -0
  49. package/dist/tools/walletManagement.js.map +1 -0
  50. package/dist/types.d.ts +205 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +5 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/utils/errorUtils.d.ts +2 -0
  55. package/dist/utils/errorUtils.d.ts.map +1 -0
  56. package/dist/utils/errorUtils.js +19 -0
  57. package/dist/utils/errorUtils.js.map +1 -0
  58. package/dist/utils/errors.d.ts +144 -0
  59. package/dist/utils/errors.d.ts.map +1 -0
  60. package/dist/utils/errors.js +310 -0
  61. package/dist/utils/errors.js.map +1 -0
  62. package/dist/utils/positionAggregator.d.ts +122 -0
  63. package/dist/utils/positionAggregator.d.ts.map +1 -0
  64. package/dist/utils/positionAggregator.js +377 -0
  65. package/dist/utils/positionAggregator.js.map +1 -0
  66. package/dist/utils/priceService.d.ts +45 -0
  67. package/dist/utils/priceService.d.ts.map +1 -0
  68. package/dist/utils/priceService.js +108 -0
  69. package/dist/utils/priceService.js.map +1 -0
  70. package/dist/utils/sodaxApi.d.ts +92 -0
  71. package/dist/utils/sodaxApi.d.ts.map +1 -0
  72. package/dist/utils/sodaxApi.js +143 -0
  73. package/dist/utils/sodaxApi.js.map +1 -0
  74. package/dist/utils/tokenResolver.d.ts +54 -0
  75. package/dist/utils/tokenResolver.d.ts.map +1 -0
  76. package/dist/utils/tokenResolver.js +252 -0
  77. package/dist/utils/tokenResolver.js.map +1 -0
  78. package/dist/wallet/backendConfig.d.ts +37 -0
  79. package/dist/wallet/backendConfig.d.ts.map +1 -0
  80. package/dist/wallet/backendConfig.js +125 -0
  81. package/dist/wallet/backendConfig.js.map +1 -0
  82. package/dist/wallet/backends/BankrBackend.d.ts +73 -0
  83. package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
  84. package/dist/wallet/backends/BankrBackend.js +315 -0
  85. package/dist/wallet/backends/BankrBackend.js.map +1 -0
  86. package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
  87. package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
  88. package/dist/wallet/backends/BankrWalletProvider.js +243 -0
  89. package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
  90. package/dist/wallet/backends/EnvBackend.d.ts +50 -0
  91. package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
  92. package/dist/wallet/backends/EnvBackend.js +114 -0
  93. package/dist/wallet/backends/EnvBackend.js.map +1 -0
  94. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
  95. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
  96. package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
  97. package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
  98. package/dist/wallet/backends/index.d.ts +10 -0
  99. package/dist/wallet/backends/index.d.ts.map +1 -0
  100. package/dist/wallet/backends/index.js +10 -0
  101. package/dist/wallet/backends/index.js.map +1 -0
  102. package/dist/wallet/index.d.ts +9 -0
  103. package/dist/wallet/index.d.ts.map +1 -0
  104. package/dist/wallet/index.js +12 -0
  105. package/dist/wallet/index.js.map +1 -0
  106. package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
  107. package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
  108. package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
  109. package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
  110. package/dist/wallet/providers/BankrBackend.d.ts +105 -0
  111. package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
  112. package/dist/wallet/providers/BankrBackend.js +327 -0
  113. package/dist/wallet/providers/BankrBackend.js.map +1 -0
  114. package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
  115. package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
  116. package/dist/wallet/providers/LocalKeyBackend.js +152 -0
  117. package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
  118. package/dist/wallet/providers/chainConfig.d.ts +209 -0
  119. package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
  120. package/dist/wallet/providers/chainConfig.js +175 -0
  121. package/dist/wallet/providers/chainConfig.js.map +1 -0
  122. package/dist/wallet/providers/index.d.ts +30 -0
  123. package/dist/wallet/providers/index.d.ts.map +1 -0
  124. package/dist/wallet/providers/index.js +32 -0
  125. package/dist/wallet/providers/index.js.map +1 -0
  126. package/dist/wallet/providers/types.d.ts +156 -0
  127. package/dist/wallet/providers/types.d.ts.map +1 -0
  128. package/dist/wallet/providers/types.js +11 -0
  129. package/dist/wallet/providers/types.js.map +1 -0
  130. package/dist/wallet/skillWalletAdapter.d.ts +96 -0
  131. package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
  132. package/dist/wallet/skillWalletAdapter.js +280 -0
  133. package/dist/wallet/skillWalletAdapter.js.map +1 -0
  134. package/dist/wallet/types.d.ts +134 -0
  135. package/dist/wallet/types.d.ts.map +1 -0
  136. package/dist/wallet/types.js +138 -0
  137. package/dist/wallet/types.js.map +1 -0
  138. package/dist/wallet/walletManager.d.ts +111 -0
  139. package/dist/wallet/walletManager.d.ts.map +1 -0
  140. package/dist/wallet/walletManager.js +476 -0
  141. package/dist/wallet/walletManager.js.map +1 -0
  142. package/dist/wallet/walletRegistry.d.ts +95 -0
  143. package/dist/wallet/walletRegistry.d.ts.map +1 -0
  144. package/dist/wallet/walletRegistry.js +184 -0
  145. package/dist/wallet/walletRegistry.js.map +1 -0
  146. package/index.js +2 -0
  147. package/openclaw.plugin.json +37 -0
  148. package/package.json +69 -0
  149. package/src/__mocks__/@sodax/sdk.ts +28 -0
  150. package/src/__tests__/errors.test.ts +238 -0
  151. package/src/__tests__/policyEngine.test.ts +354 -0
  152. package/src/__tests__/positionAggregator.test.ts +271 -0
  153. package/src/__tests__/setup.ts +35 -0
  154. package/src/__tests__/sodaxApi.test.ts +203 -0
  155. package/src/__tests__/walletRegistry.test.ts +155 -0
  156. package/src/index.ts +376 -0
  157. package/src/policy/policyEngine.ts +389 -0
  158. package/src/providers/spokeProviderFactory.ts +283 -0
  159. package/src/sodax/client.ts +113 -0
  160. package/src/tools/bridge.ts +425 -0
  161. package/src/tools/discovery.ts +989 -0
  162. package/src/tools/moneyMarket.ts +1265 -0
  163. package/src/tools/portfolio.ts +697 -0
  164. package/src/tools/swap.ts +926 -0
  165. package/src/tools/walletManagement.ts +359 -0
  166. package/src/types.ts +228 -0
  167. package/src/utils/errorUtils.ts +16 -0
  168. package/src/utils/errors.ts +396 -0
  169. package/src/utils/positionAggregator.ts +559 -0
  170. package/src/utils/priceService.ts +153 -0
  171. package/src/utils/sodaxApi.ts +261 -0
  172. package/src/utils/tokenResolver.ts +286 -0
  173. package/src/wallet/backendConfig.ts +151 -0
  174. package/src/wallet/backends/BankrBackend.ts +399 -0
  175. package/src/wallet/backends/BankrWalletProvider.ts +329 -0
  176. package/src/wallet/backends/EnvBackend.ts +149 -0
  177. package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
  178. package/src/wallet/backends/index.ts +10 -0
  179. package/src/wallet/index.ts +14 -0
  180. package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
  181. package/src/wallet/providers/BankrBackend.ts +407 -0
  182. package/src/wallet/providers/LocalKeyBackend.ts +184 -0
  183. package/src/wallet/providers/chainConfig.ts +194 -0
  184. package/src/wallet/providers/index.ts +62 -0
  185. package/src/wallet/providers/types.ts +186 -0
  186. package/src/wallet/skillWalletAdapter.ts +335 -0
  187. package/src/wallet/types.ts +248 -0
  188. package/src/wallet/walletManager.ts +561 -0
  189. package/src/wallet/walletRegistry.ts +216 -0
@@ -0,0 +1,2 @@
1
+ export declare function serializeError(error: unknown): string;
2
+ //# sourceMappingURL=errorUtils.d.ts.map
@@ -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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"}