@waiaas/actions 2.8.0-rc.1 → 2.8.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aave-rpc.js","sourceRoot":"","sources":["../../../src/providers/aave-v3/aave-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface AaveV3Config {
2
+ enabled: boolean;
3
+ }
4
+ export interface AaveChainAddresses {
5
+ pool: string;
6
+ dataProvider: string;
7
+ oracle: string;
8
+ chainId: number;
9
+ }
10
+ export declare const AAVE_V3_ADDRESSES: Record<string, AaveChainAddresses>;
11
+ export declare const AAVE_CHAIN_ID_MAP: Record<string, number>;
12
+ export declare const AAVE_V3_DEFAULTS: AaveV3Config;
13
+ /**
14
+ * Get Aave V3 contract addresses for a given WAIaaS network name.
15
+ *
16
+ * @param network - WAIaaS network type (e.g., 'ethereum-mainnet', 'base-mainnet')
17
+ * @throws ChainError if network is not supported by Aave V3
18
+ */
19
+ export declare function getAaveAddresses(network: string): AaveChainAddresses;
20
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/providers/aave-v3/config.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CA+BhE,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,YAE9B,CAAC;AAMF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAQpE"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Aave V3 configuration type, defaults, and 5-chain contract address map.
3
+ *
4
+ * Supports: Ethereum, Arbitrum, Optimism, Polygon, Base mainnets.
5
+ * Addresses verified from bgd-labs/aave-address-book GitHub repository.
6
+ */
7
+ import { ChainError } from '@waiaas/core';
8
+ // ---------------------------------------------------------------------------
9
+ // 5-chain address map (verified from aave-address-book 2026-02-27)
10
+ // ---------------------------------------------------------------------------
11
+ export const AAVE_V3_ADDRESSES = {
12
+ 'ethereum-mainnet': {
13
+ pool: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
14
+ dataProvider: '0x0a16f2FCC0D44FaE41cc54e079281D84A363bECD',
15
+ oracle: '0x54586bE62E3c3580375aE3723C145253060Ca0C2',
16
+ chainId: 1,
17
+ },
18
+ 'arbitrum-mainnet': {
19
+ pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
20
+ dataProvider: '0x243Aa95cAC2a25651eda86e80bEe66114413c43b',
21
+ oracle: '0xb56c2F0B653B2e0b10C9b928C8580Ac5Df02C7C7',
22
+ chainId: 42161,
23
+ },
24
+ 'optimism-mainnet': {
25
+ pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
26
+ dataProvider: '0x243Aa95cAC2a25651eda86e80bEe66114413c43b',
27
+ oracle: '0xD81eb3728a631871a7eBBaD631b5f424909f0c77',
28
+ chainId: 10,
29
+ },
30
+ 'polygon-mainnet': {
31
+ pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
32
+ dataProvider: '0x243Aa95cAC2a25651eda86e80bEe66114413c43b',
33
+ oracle: '0xb023e699F5a33916Ea823A16485e259257cA8Bd1',
34
+ chainId: 137,
35
+ },
36
+ 'base-mainnet': {
37
+ pool: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
38
+ dataProvider: '0x0F43731EB8d45A581f4a36DD74F5f358bc90C73A',
39
+ oracle: '0x2Cc0Fc26eD4563A5ce5e8bdcfe1A2878676Ae156',
40
+ chainId: 8453,
41
+ },
42
+ };
43
+ // ---------------------------------------------------------------------------
44
+ // Network name -> Chain ID mapping (matches WAIaaS network type names)
45
+ // ---------------------------------------------------------------------------
46
+ export const AAVE_CHAIN_ID_MAP = {
47
+ 'ethereum-mainnet': 1,
48
+ 'polygon-mainnet': 137,
49
+ 'arbitrum-mainnet': 42161,
50
+ 'optimism-mainnet': 10,
51
+ 'base-mainnet': 8453,
52
+ };
53
+ // ---------------------------------------------------------------------------
54
+ // Defaults (disabled)
55
+ // ---------------------------------------------------------------------------
56
+ export const AAVE_V3_DEFAULTS = {
57
+ enabled: false,
58
+ };
59
+ // ---------------------------------------------------------------------------
60
+ // Helper to get addresses by network name
61
+ // ---------------------------------------------------------------------------
62
+ /**
63
+ * Get Aave V3 contract addresses for a given WAIaaS network name.
64
+ *
65
+ * @param network - WAIaaS network type (e.g., 'ethereum-mainnet', 'base-mainnet')
66
+ * @throws ChainError if network is not supported by Aave V3
67
+ */
68
+ export function getAaveAddresses(network) {
69
+ const addresses = AAVE_V3_ADDRESSES[network];
70
+ if (!addresses) {
71
+ throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
72
+ message: `Unsupported network for Aave V3: ${network}. Supported: ${Object.keys(AAVE_V3_ADDRESSES).join(', ')}`,
73
+ });
74
+ }
75
+ return addresses;
76
+ }
77
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/aave-v3/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqB1C,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAuC;IACnE,kBAAkB,EAAE;QAClB,IAAI,EAAE,4CAA4C;QAClD,YAAY,EAAE,4CAA4C;QAC1D,MAAM,EAAE,4CAA4C;QACpD,OAAO,EAAE,CAAC;KACX;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,4CAA4C;QAClD,YAAY,EAAE,4CAA4C;QAC1D,MAAM,EAAE,4CAA4C;QACpD,OAAO,EAAE,KAAK;KACf;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,4CAA4C;QAClD,YAAY,EAAE,4CAA4C;QAC1D,MAAM,EAAE,4CAA4C;QACpD,OAAO,EAAE,EAAE;KACZ;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,4CAA4C;QAClD,YAAY,EAAE,4CAA4C;QAC1D,MAAM,EAAE,4CAA4C;QACpD,OAAO,EAAE,GAAG;KACb;IACD,cAAc,EAAE;QACd,IAAI,EAAE,4CAA4C;QAClD,YAAY,EAAE,4CAA4C;QAC1D,MAAM,EAAE,4CAA4C;QACpD,OAAO,EAAE,IAAI;KACd;CACF,CAAC;AAEF,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,GAAG;IACtB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,EAAE;IACtB,cAAc,EAAE,IAAI;CACrB,CAAC;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,qBAAqB,EAAE,UAAU,EAAE;YACtD,OAAO,EAAE,oCAAoC,OAAO,gBAAgB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAChH,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { ILendingProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest, LendingPositionSummary, HealthFactor, MarketInfo } from '@waiaas/core';
2
+ import type { IPositionProvider, PositionUpdate, PositionCategory } from '@waiaas/core';
3
+ import type { AaveV3Config } from './config.js';
4
+ import { type IRpcCaller } from './aave-rpc.js';
5
+ export declare class AaveV3LendingProvider implements ILendingProvider, IPositionProvider {
6
+ readonly metadata: ActionProviderMetadata;
7
+ readonly actions: readonly ActionDefinition[];
8
+ private readonly rpcCaller?;
9
+ constructor(_config?: Partial<AaveV3Config>, rpcCaller?: IRpcCaller);
10
+ resolve(actionName: string, params: Record<string, unknown>, context: ActionContext): Promise<ContractCallRequest | ContractCallRequest[]>;
11
+ private resolveSupply;
12
+ private resolveBorrow;
13
+ private resolveRepay;
14
+ private resolveWithdraw;
15
+ private checkBorrowSafety;
16
+ private checkWithdrawSafety;
17
+ private fetchUserAccountData;
18
+ getPosition(_walletId: string, context: ActionContext): Promise<LendingPositionSummary[]>;
19
+ getHealthFactor(_walletId: string, context: ActionContext): Promise<HealthFactor>;
20
+ getMarkets(_chain: string, _network?: string): Promise<MarketInfo[]>;
21
+ getPositions(_walletId: string): Promise<PositionUpdate[]>;
22
+ getProviderName(): string;
23
+ getSupportedCategories(): PositionCategory[];
24
+ }
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/aave-v3/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,UAAU,EAEX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,OAAO,EACL,KAAK,UAAU,EAKhB,MAAM,eAAe,CAAC;AAuCvB,qBAAa,qBAAsB,YAAW,gBAAgB,EAAE,iBAAiB;IAC/E,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAa;gBAE5B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU;IAqD7D,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;IAqBvD,OAAO,CAAC,aAAa;YAgCP,aAAa;IA2B3B,OAAO,CAAC,YAAY;YAgCN,eAAe;YA2Bf,iBAAiB;YAmBjB,mBAAmB;YAiBnB,oBAAoB;IA0B5B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IA0CzF,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA6CjF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IASpE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKhE,eAAe,IAAI,MAAM;IAIzB,sBAAsB,IAAI,gBAAgB,EAAE;CAG7C"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Aave V3 Lending Action Provider.
3
+ *
4
+ * Implements ILendingProvider + IPositionProvider to resolve Aave V3
5
+ * lending requests into ContractCallRequest arrays for the sequential pipeline.
6
+ *
7
+ * Actions:
8
+ * - aave_supply: approve + supply (2-element array)
9
+ * - aave_borrow: single element (no approve needed)
10
+ * - aave_repay: approve + repay (2-element array, supports 'max')
11
+ * - aave_withdraw: single element (supports 'max')
12
+ *
13
+ * Risk levels: borrow/withdraw = high (APPROVAL), supply/repay = medium (DELAY).
14
+ */
15
+ import { ChainError } from '@waiaas/core';
16
+ import { getAaveAddresses } from './config.js';
17
+ import { encodeSupplyCalldata, encodeBorrowCalldata, encodeRepayCalldata, encodeWithdrawCalldata, encodeApproveCalldata, encodeGetUserAccountDataCalldata, MAX_UINT256, } from './aave-contracts.js';
18
+ import { decodeGetUserAccountData, simulateHealthFactor, hfToNumber, LIQUIDATION_THRESHOLD_HF, } from './aave-rpc.js';
19
+ import { AaveSupplyInputSchema, AaveBorrowInputSchema, AaveRepayInputSchema, AaveWithdrawInputSchema, } from './schemas.js';
20
+ // ---------------------------------------------------------------------------
21
+ // Amount parsing helper
22
+ // ---------------------------------------------------------------------------
23
+ /**
24
+ * Parse a human-readable token amount string to smallest unit (bigint).
25
+ * Handles decimal amounts like "100.5" with configurable decimals.
26
+ *
27
+ * @param amount - Human-readable amount string (e.g., "100.5")
28
+ * @param decimals - Token decimals (default 18 for most ERC-20 tokens)
29
+ * @throws ChainError if amount is zero or negative
30
+ */
31
+ function parseTokenAmount(amount, decimals = 18) {
32
+ const parts = amount.split('.');
33
+ const whole = BigInt(parts[0] || '0');
34
+ const fractional = (parts[1] || '').padEnd(decimals, '0').slice(0, decimals);
35
+ const result = whole * 10n ** BigInt(decimals) + BigInt(fractional);
36
+ if (result <= 0n) {
37
+ throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
38
+ message: 'Amount must be greater than 0',
39
+ });
40
+ }
41
+ return result;
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Provider implementation
45
+ // ---------------------------------------------------------------------------
46
+ export class AaveV3LendingProvider {
47
+ metadata;
48
+ actions;
49
+ rpcCaller;
50
+ constructor(_config, rpcCaller) {
51
+ this.rpcCaller = rpcCaller;
52
+ this.metadata = {
53
+ name: 'aave_v3',
54
+ description: 'Aave V3 DeFi lending protocol for EVM chains: supply, borrow, repay, withdraw',
55
+ version: '1.0.0',
56
+ chains: ['ethereum'],
57
+ mcpExpose: true,
58
+ requiresApiKey: false,
59
+ requiredApis: [],
60
+ };
61
+ this.actions = [
62
+ {
63
+ name: 'aave_supply',
64
+ description: 'Supply (deposit) an ERC-20 token as collateral to Aave V3 lending pool',
65
+ chain: 'ethereum',
66
+ inputSchema: AaveSupplyInputSchema,
67
+ riskLevel: 'medium',
68
+ defaultTier: 'DELAY',
69
+ },
70
+ {
71
+ name: 'aave_borrow',
72
+ description: 'Borrow an asset from Aave V3 lending pool against deposited collateral (variable rate)',
73
+ chain: 'ethereum',
74
+ inputSchema: AaveBorrowInputSchema,
75
+ riskLevel: 'high',
76
+ defaultTier: 'APPROVAL',
77
+ },
78
+ {
79
+ name: 'aave_repay',
80
+ description: 'Repay borrowed debt on Aave V3 lending pool. Use amount="max" for full repayment.',
81
+ chain: 'ethereum',
82
+ inputSchema: AaveRepayInputSchema,
83
+ riskLevel: 'medium',
84
+ defaultTier: 'DELAY',
85
+ },
86
+ {
87
+ name: 'aave_withdraw',
88
+ description: 'Withdraw supplied collateral from Aave V3 lending pool. Use amount="max" for full withdrawal.',
89
+ chain: 'ethereum',
90
+ inputSchema: AaveWithdrawInputSchema,
91
+ riskLevel: 'high',
92
+ defaultTier: 'APPROVAL',
93
+ },
94
+ ];
95
+ }
96
+ // -------------------------------------------------------------------------
97
+ // IActionProvider.resolve()
98
+ // -------------------------------------------------------------------------
99
+ async resolve(actionName, params, context) {
100
+ switch (actionName) {
101
+ case 'aave_supply':
102
+ return this.resolveSupply(params, context);
103
+ case 'aave_borrow':
104
+ return this.resolveBorrow(params, context);
105
+ case 'aave_repay':
106
+ return this.resolveRepay(params, context);
107
+ case 'aave_withdraw':
108
+ return this.resolveWithdraw(params, context);
109
+ default:
110
+ throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
111
+ message: `Unknown action: ${actionName}`,
112
+ });
113
+ }
114
+ }
115
+ // -------------------------------------------------------------------------
116
+ // Supply: approve + Pool.supply()
117
+ // -------------------------------------------------------------------------
118
+ resolveSupply(params, context) {
119
+ const input = AaveSupplyInputSchema.parse(params);
120
+ const network = (input.network || 'ethereum-mainnet');
121
+ const addresses = getAaveAddresses(network);
122
+ const amount = parseTokenAmount(input.amount);
123
+ const approveReq = {
124
+ type: 'CONTRACT_CALL',
125
+ to: input.asset,
126
+ calldata: encodeApproveCalldata(addresses.pool, amount),
127
+ value: '0',
128
+ network,
129
+ };
130
+ const supplyReq = {
131
+ type: 'CONTRACT_CALL',
132
+ to: addresses.pool,
133
+ calldata: encodeSupplyCalldata(input.asset, amount, context.walletAddress),
134
+ value: '0',
135
+ network,
136
+ };
137
+ return [approveReq, supplyReq];
138
+ }
139
+ // -------------------------------------------------------------------------
140
+ // Borrow: Pool.borrow() (no approve needed -- Pool releases tokens TO user)
141
+ // -------------------------------------------------------------------------
142
+ async resolveBorrow(params, context) {
143
+ const input = AaveBorrowInputSchema.parse(params);
144
+ const network = (input.network || 'ethereum-mainnet');
145
+ const addresses = getAaveAddresses(network);
146
+ const amount = parseTokenAmount(input.amount);
147
+ // AAVE-09: HF simulation check if rpcCaller available
148
+ if (this.rpcCaller) {
149
+ await this.checkBorrowSafety(context.walletAddress, amount, addresses.pool, addresses.chainId);
150
+ }
151
+ return {
152
+ type: 'CONTRACT_CALL',
153
+ to: addresses.pool,
154
+ calldata: encodeBorrowCalldata(input.asset, amount, context.walletAddress),
155
+ value: '0',
156
+ network,
157
+ };
158
+ }
159
+ // -------------------------------------------------------------------------
160
+ // Repay: approve + Pool.repay() (supports 'max' for full repayment)
161
+ // -------------------------------------------------------------------------
162
+ resolveRepay(params, context) {
163
+ const input = AaveRepayInputSchema.parse(params);
164
+ const network = (input.network || 'ethereum-mainnet');
165
+ const addresses = getAaveAddresses(network);
166
+ const amount = input.amount === 'max' ? MAX_UINT256 : parseTokenAmount(input.amount);
167
+ const approveReq = {
168
+ type: 'CONTRACT_CALL',
169
+ to: input.asset,
170
+ calldata: encodeApproveCalldata(addresses.pool, amount),
171
+ value: '0',
172
+ network,
173
+ };
174
+ const repayReq = {
175
+ type: 'CONTRACT_CALL',
176
+ to: addresses.pool,
177
+ calldata: encodeRepayCalldata(input.asset, amount, context.walletAddress),
178
+ value: '0',
179
+ network,
180
+ };
181
+ return [approveReq, repayReq];
182
+ }
183
+ // -------------------------------------------------------------------------
184
+ // Withdraw: Pool.withdraw() (supports 'max', no approve needed)
185
+ // -------------------------------------------------------------------------
186
+ async resolveWithdraw(params, context) {
187
+ const input = AaveWithdrawInputSchema.parse(params);
188
+ const network = (input.network || 'ethereum-mainnet');
189
+ const addresses = getAaveAddresses(network);
190
+ const amount = input.amount === 'max' ? MAX_UINT256 : parseTokenAmount(input.amount);
191
+ // AAVE-09: HF simulation for non-max withdrawals
192
+ if (this.rpcCaller && amount !== MAX_UINT256) {
193
+ await this.checkWithdrawSafety(context.walletAddress, amount, addresses.pool, addresses.chainId);
194
+ }
195
+ return {
196
+ type: 'CONTRACT_CALL',
197
+ to: addresses.pool,
198
+ calldata: encodeWithdrawCalldata(input.asset, amount, context.walletAddress),
199
+ value: '0',
200
+ network,
201
+ };
202
+ }
203
+ // -------------------------------------------------------------------------
204
+ // HF Safety checks (AAVE-09)
205
+ // -------------------------------------------------------------------------
206
+ async checkBorrowSafety(walletAddress, borrowAmount, poolAddress, chainId) {
207
+ const accountData = await this.fetchUserAccountData(walletAddress, poolAddress, chainId);
208
+ if (!accountData)
209
+ return;
210
+ // Approximate: treat borrow amount as base currency units for simulation
211
+ // This is a simplification -- proper conversion requires oracle price lookup
212
+ const simulated = simulateHealthFactor(accountData, 'borrow', borrowAmount);
213
+ if (simulated < LIQUIDATION_THRESHOLD_HF) {
214
+ throw new ChainError('CONTRACT_EXECUTION_FAILED', 'ethereum', {
215
+ message: `Borrow would cause health factor to drop below liquidation threshold (simulated HF: ${hfToNumber(simulated).toFixed(4)})`,
216
+ });
217
+ }
218
+ }
219
+ async checkWithdrawSafety(walletAddress, withdrawAmount, poolAddress, chainId) {
220
+ const accountData = await this.fetchUserAccountData(walletAddress, poolAddress, chainId);
221
+ if (!accountData)
222
+ return;
223
+ const simulated = simulateHealthFactor(accountData, 'withdraw', withdrawAmount);
224
+ if (simulated < LIQUIDATION_THRESHOLD_HF) {
225
+ throw new ChainError('CONTRACT_EXECUTION_FAILED', 'ethereum', {
226
+ message: `Withdrawal would cause health factor to drop below liquidation threshold (simulated HF: ${hfToNumber(simulated).toFixed(4)})`,
227
+ });
228
+ }
229
+ }
230
+ async fetchUserAccountData(walletAddress, poolAddress, chainId) {
231
+ if (!this.rpcCaller)
232
+ return null;
233
+ try {
234
+ const calldata = encodeGetUserAccountDataCalldata(walletAddress);
235
+ const response = await this.rpcCaller.call({ to: poolAddress, data: calldata, chainId });
236
+ const data = decodeGetUserAccountData(response);
237
+ return {
238
+ totalCollateralBase: data.totalCollateralBase,
239
+ totalDebtBase: data.totalDebtBase,
240
+ currentLiquidationThreshold: data.currentLiquidationThreshold,
241
+ };
242
+ }
243
+ catch {
244
+ // If RPC fails, skip simulation and let daemon-level policy handle it
245
+ return null;
246
+ }
247
+ }
248
+ // -------------------------------------------------------------------------
249
+ // ILendingProvider query methods
250
+ // -------------------------------------------------------------------------
251
+ async getPosition(_walletId, context) {
252
+ if (!this.rpcCaller)
253
+ return [];
254
+ try {
255
+ const network = 'ethereum-mainnet'; // default
256
+ const addresses = getAaveAddresses(network);
257
+ const calldata = encodeGetUserAccountDataCalldata(context.walletAddress);
258
+ const response = await this.rpcCaller.call({
259
+ to: addresses.pool,
260
+ data: calldata,
261
+ chainId: addresses.chainId,
262
+ });
263
+ const data = decodeGetUserAccountData(response);
264
+ const positions = [];
265
+ if (data.totalCollateralBase > 0n) {
266
+ positions.push({
267
+ asset: 'COLLATERAL',
268
+ positionType: 'SUPPLY',
269
+ amount: data.totalCollateralBase.toString(),
270
+ amountUsd: Number(data.totalCollateralBase) / 1e8,
271
+ apy: null,
272
+ });
273
+ }
274
+ if (data.totalDebtBase > 0n) {
275
+ positions.push({
276
+ asset: 'DEBT',
277
+ positionType: 'BORROW',
278
+ amount: data.totalDebtBase.toString(),
279
+ amountUsd: Number(data.totalDebtBase) / 1e8,
280
+ apy: null,
281
+ });
282
+ }
283
+ return positions;
284
+ }
285
+ catch {
286
+ return [];
287
+ }
288
+ }
289
+ async getHealthFactor(_walletId, context) {
290
+ if (!this.rpcCaller) {
291
+ return {
292
+ factor: Infinity,
293
+ totalCollateralUsd: 0,
294
+ totalDebtUsd: 0,
295
+ currentLtv: 0,
296
+ status: 'safe',
297
+ };
298
+ }
299
+ try {
300
+ const network = 'ethereum-mainnet';
301
+ const addresses = getAaveAddresses(network);
302
+ const calldata = encodeGetUserAccountDataCalldata(context.walletAddress);
303
+ const response = await this.rpcCaller.call({
304
+ to: addresses.pool,
305
+ data: calldata,
306
+ chainId: addresses.chainId,
307
+ });
308
+ const data = decodeGetUserAccountData(response);
309
+ const hf = hfToNumber(data.healthFactor);
310
+ const totalCollateralUsd = Number(data.totalCollateralBase) / 1e8;
311
+ const totalDebtUsd = Number(data.totalDebtBase) / 1e8;
312
+ const currentLtv = totalCollateralUsd > 0 ? totalDebtUsd / totalCollateralUsd : 0;
313
+ let status;
314
+ if (hf >= 2.0)
315
+ status = 'safe';
316
+ else if (hf >= 1.5)
317
+ status = 'warning';
318
+ else if (hf >= 1.2)
319
+ status = 'danger';
320
+ else
321
+ status = 'critical';
322
+ return { factor: hf, totalCollateralUsd, totalDebtUsd, currentLtv, status };
323
+ }
324
+ catch {
325
+ return {
326
+ factor: Infinity,
327
+ totalCollateralUsd: 0,
328
+ totalDebtUsd: 0,
329
+ currentLtv: 0,
330
+ status: 'safe',
331
+ };
332
+ }
333
+ }
334
+ async getMarkets(_chain, _network) {
335
+ // Deferred to Phase 277: requires getReservesList + per-reserve queries
336
+ return [];
337
+ }
338
+ // -------------------------------------------------------------------------
339
+ // IPositionProvider methods
340
+ // -------------------------------------------------------------------------
341
+ async getPositions(_walletId) {
342
+ // Deferred: PositionTracker will use ILendingProvider.getPosition via adapter in Phase 277
343
+ return [];
344
+ }
345
+ getProviderName() {
346
+ return 'aave_v3';
347
+ }
348
+ getSupportedCategories() {
349
+ return ['LENDING'];
350
+ }
351
+ }
352
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/aave-v3/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Zod SSoT input schemas for Aave V3 lending actions.
3
+ *
4
+ * Four schemas for the 4 lending actions: supply, borrow, repay, withdraw.
5
+ * Amount is always a human-readable string (e.g., "100.5").
6
+ * Repay and withdraw accept 'max' for full repayment/withdrawal.
7
+ */
8
+ import { z } from 'zod';
9
+ export declare const AaveSupplyInputSchema: z.ZodObject<{
10
+ /** ERC-20 token address to supply as collateral. */
11
+ asset: z.ZodString;
12
+ /** Amount to supply (human-readable, e.g., "100.5"). */
13
+ amount: z.ZodString;
14
+ /** Target network (defaults to ethereum-mainnet). */
15
+ network: z.ZodOptional<z.ZodString>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ amount: string;
18
+ asset: string;
19
+ network?: string | undefined;
20
+ }, {
21
+ amount: string;
22
+ asset: string;
23
+ network?: string | undefined;
24
+ }>;
25
+ export declare const AaveBorrowInputSchema: z.ZodObject<{
26
+ /** ERC-20 token address to borrow. */
27
+ asset: z.ZodString;
28
+ /** Amount to borrow (human-readable, e.g., "100.5"). */
29
+ amount: z.ZodString;
30
+ /** Target network (defaults to ethereum-mainnet). */
31
+ network: z.ZodOptional<z.ZodString>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ amount: string;
34
+ asset: string;
35
+ network?: string | undefined;
36
+ }, {
37
+ amount: string;
38
+ asset: string;
39
+ network?: string | undefined;
40
+ }>;
41
+ export declare const AaveRepayInputSchema: z.ZodObject<{
42
+ /** ERC-20 token address to repay. */
43
+ asset: z.ZodString;
44
+ /** Amount to repay (human-readable, e.g., "100.5") or 'max' for full repayment. */
45
+ amount: z.ZodUnion<[z.ZodString, z.ZodLiteral<"max">]>;
46
+ /** Target network (defaults to ethereum-mainnet). */
47
+ network: z.ZodOptional<z.ZodString>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ amount: string;
50
+ asset: string;
51
+ network?: string | undefined;
52
+ }, {
53
+ amount: string;
54
+ asset: string;
55
+ network?: string | undefined;
56
+ }>;
57
+ export declare const AaveWithdrawInputSchema: z.ZodObject<{
58
+ /** ERC-20 token address to withdraw. */
59
+ asset: z.ZodString;
60
+ /** Amount to withdraw (human-readable, e.g., "100.5") or 'max' for full withdrawal. */
61
+ amount: z.ZodUnion<[z.ZodString, z.ZodLiteral<"max">]>;
62
+ /** Target network (defaults to ethereum-mainnet). */
63
+ network: z.ZodOptional<z.ZodString>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ amount: string;
66
+ asset: string;
67
+ network?: string | undefined;
68
+ }, {
69
+ amount: string;
70
+ asset: string;
71
+ network?: string | undefined;
72
+ }>;
73
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/providers/aave-v3/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,qBAAqB;IAChC,oDAAoD;;IAEpD,wDAAwD;;IAExD,qDAAqD;;;;;;;;;;EAErD,CAAC;AAMH,eAAO,MAAM,qBAAqB;IAChC,sCAAsC;;IAEtC,wDAAwD;;IAExD,qDAAqD;;;;;;;;;;EAErD,CAAC;AAMH,eAAO,MAAM,oBAAoB;IAC/B,qCAAqC;;IAErC,mFAAmF;;IAEnF,qDAAqD;;;;;;;;;;EAErD,CAAC;AAMH,eAAO,MAAM,uBAAuB;IAClC,wCAAwC;;IAExC,uFAAuF;;IAEvF,qDAAqD;;;;;;;;;;EAErD,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Zod SSoT input schemas for Aave V3 lending actions.
3
+ *
4
+ * Four schemas for the 4 lending actions: supply, borrow, repay, withdraw.
5
+ * Amount is always a human-readable string (e.g., "100.5").
6
+ * Repay and withdraw accept 'max' for full repayment/withdrawal.
7
+ */
8
+ import { z } from 'zod';
9
+ // ---------------------------------------------------------------------------
10
+ // Supply input schema
11
+ // ---------------------------------------------------------------------------
12
+ export const AaveSupplyInputSchema = z.object({
13
+ /** ERC-20 token address to supply as collateral. */
14
+ asset: z.string().min(1, 'asset address is required'),
15
+ /** Amount to supply (human-readable, e.g., "100.5"). */
16
+ amount: z.string().min(1, 'amount is required (human-readable, e.g. "100.5")'),
17
+ /** Target network (defaults to ethereum-mainnet). */
18
+ network: z.string().optional(),
19
+ });
20
+ // ---------------------------------------------------------------------------
21
+ // Borrow input schema
22
+ // ---------------------------------------------------------------------------
23
+ export const AaveBorrowInputSchema = z.object({
24
+ /** ERC-20 token address to borrow. */
25
+ asset: z.string().min(1, 'asset address is required'),
26
+ /** Amount to borrow (human-readable, e.g., "100.5"). */
27
+ amount: z.string().min(1, 'amount is required (human-readable, e.g. "100.5")'),
28
+ /** Target network (defaults to ethereum-mainnet). */
29
+ network: z.string().optional(),
30
+ });
31
+ // ---------------------------------------------------------------------------
32
+ // Repay input schema (supports 'max' for full repayment)
33
+ // ---------------------------------------------------------------------------
34
+ export const AaveRepayInputSchema = z.object({
35
+ /** ERC-20 token address to repay. */
36
+ asset: z.string().min(1, 'asset address is required'),
37
+ /** Amount to repay (human-readable, e.g., "100.5") or 'max' for full repayment. */
38
+ amount: z.string().min(1, 'amount is required (human-readable, e.g. "100.5")').or(z.literal('max')),
39
+ /** Target network (defaults to ethereum-mainnet). */
40
+ network: z.string().optional(),
41
+ });
42
+ // ---------------------------------------------------------------------------
43
+ // Withdraw input schema (supports 'max' for full withdrawal)
44
+ // ---------------------------------------------------------------------------
45
+ export const AaveWithdrawInputSchema = z.object({
46
+ /** ERC-20 token address to withdraw. */
47
+ asset: z.string().min(1, 'asset address is required'),
48
+ /** Amount to withdraw (human-readable, e.g., "100.5") or 'max' for full withdrawal. */
49
+ amount: z.string().min(1, 'amount is required (human-readable, e.g. "100.5")').or(z.literal('max')),
50
+ /** Target network (defaults to ethereum-mainnet). */
51
+ network: z.string().optional(),
52
+ });
53
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/providers/aave-v3/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,oDAAoD;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;IACrD,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mDAAmD,CAAC;IAC9E,qDAAqD;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,sCAAsC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;IACrD,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mDAAmD,CAAC;IAC9E,qDAAqD;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,qCAAqC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;IACrD,mFAAmF;IACnF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnG,qDAAqD;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,wCAAwC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;IACrD,uFAAuF;IACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnG,qDAAqD;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC"}