@waiaas/actions 2.11.0-rc.2 → 2.11.0-rc.20
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/dist/common/migrate-amount.d.ts +12 -0
- package/dist/common/migrate-amount.d.ts.map +1 -0
- package/dist/common/migrate-amount.js +29 -0
- package/dist/common/migrate-amount.js.map +1 -0
- package/dist/common/migrate-amount.test.d.ts +2 -0
- package/dist/common/migrate-amount.test.d.ts.map +1 -0
- package/dist/common/migrate-amount.test.js +54 -0
- package/dist/common/migrate-amount.test.js.map +1 -0
- package/dist/common/resolve-human-amount.d.ts +14 -0
- package/dist/common/resolve-human-amount.d.ts.map +1 -0
- package/dist/common/resolve-human-amount.js +39 -0
- package/dist/common/resolve-human-amount.js.map +1 -0
- package/dist/providers/aave-v3/aave-v3.test.d.ts +2 -0
- package/dist/providers/aave-v3/aave-v3.test.d.ts.map +1 -0
- package/dist/providers/aave-v3/aave-v3.test.js +77 -0
- package/dist/providers/aave-v3/aave-v3.test.js.map +1 -0
- package/dist/providers/aave-v3/index.d.ts +10 -2
- package/dist/providers/aave-v3/index.d.ts.map +1 -1
- package/dist/providers/aave-v3/index.js +152 -135
- package/dist/providers/aave-v3/index.js.map +1 -1
- package/dist/providers/aave-v3/schemas.d.ts +52 -25
- package/dist/providers/aave-v3/schemas.d.ts.map +1 -1
- package/dist/providers/aave-v3/schemas.js +23 -9
- package/dist/providers/aave-v3/schemas.js.map +1 -1
- package/dist/providers/across/index.d.ts.map +1 -1
- package/dist/providers/across/index.js +22 -4
- package/dist/providers/across/index.js.map +1 -1
- package/dist/providers/dcent-swap/dex-swap.js +3 -3
- package/dist/providers/dcent-swap/dex-swap.js.map +1 -1
- package/dist/providers/dcent-swap/index.d.ts.map +1 -1
- package/dist/providers/dcent-swap/index.js +24 -12
- package/dist/providers/dcent-swap/index.js.map +1 -1
- package/dist/providers/drift/drift-sdk-wrapper.d.ts +12 -9
- package/dist/providers/drift/drift-sdk-wrapper.d.ts.map +1 -1
- package/dist/providers/drift/drift-sdk-wrapper.js +219 -20
- package/dist/providers/drift/drift-sdk-wrapper.js.map +1 -1
- package/dist/providers/drift/index.d.ts +2 -2
- package/dist/providers/drift/index.d.ts.map +1 -1
- package/dist/providers/drift/index.js +7 -2
- package/dist/providers/drift/index.js.map +1 -1
- package/dist/providers/drift/schemas.js +6 -6
- package/dist/providers/drift/schemas.js.map +1 -1
- package/dist/providers/erc8004/index.d.ts.map +1 -1
- package/dist/providers/erc8004/index.js +1 -0
- package/dist/providers/erc8004/index.js.map +1 -1
- package/dist/providers/hyperliquid/__tests__/perp-provider.test.js +13 -6
- package/dist/providers/hyperliquid/__tests__/perp-provider.test.js.map +1 -1
- package/dist/providers/hyperliquid/__tests__/spot-provider.test.js +11 -4
- package/dist/providers/hyperliquid/__tests__/spot-provider.test.js.map +1 -1
- package/dist/providers/hyperliquid/perp-provider.d.ts +2 -2
- package/dist/providers/hyperliquid/perp-provider.d.ts.map +1 -1
- package/dist/providers/hyperliquid/perp-provider.js +5 -1
- package/dist/providers/hyperliquid/perp-provider.js.map +1 -1
- package/dist/providers/hyperliquid/schemas.d.ts +14 -14
- package/dist/providers/hyperliquid/schemas.js +12 -12
- package/dist/providers/hyperliquid/schemas.js.map +1 -1
- package/dist/providers/hyperliquid/spot-provider.d.ts +2 -2
- package/dist/providers/hyperliquid/spot-provider.d.ts.map +1 -1
- package/dist/providers/hyperliquid/spot-provider.js +5 -1
- package/dist/providers/hyperliquid/spot-provider.js.map +1 -1
- package/dist/providers/hyperliquid/sub-account-provider.d.ts.map +1 -1
- package/dist/providers/hyperliquid/sub-account-provider.js +1 -0
- package/dist/providers/hyperliquid/sub-account-provider.js.map +1 -1
- package/dist/providers/jito-staking/config.d.ts +1 -1
- package/dist/providers/jito-staking/config.js +1 -1
- package/dist/providers/jito-staking/index.d.ts +2 -2
- package/dist/providers/jito-staking/index.d.ts.map +1 -1
- package/dist/providers/jito-staking/index.js +40 -11
- package/dist/providers/jito-staking/index.js.map +1 -1
- package/dist/providers/jito-staking/jito-migration.test.d.ts +2 -0
- package/dist/providers/jito-staking/jito-migration.test.d.ts.map +1 -0
- package/dist/providers/jito-staking/jito-migration.test.js +55 -0
- package/dist/providers/jito-staking/jito-migration.test.js.map +1 -0
- package/dist/providers/jupiter-swap/index.d.ts.map +1 -1
- package/dist/providers/jupiter-swap/index.js +14 -2
- package/dist/providers/jupiter-swap/index.js.map +1 -1
- package/dist/providers/jupiter-swap/schemas.d.ts +30 -30
- package/dist/providers/jupiter-swap/schemas.js +2 -2
- package/dist/providers/jupiter-swap/schemas.js.map +1 -1
- package/dist/providers/kamino/index.d.ts +2 -2
- package/dist/providers/kamino/index.d.ts.map +1 -1
- package/dist/providers/kamino/index.js +38 -12
- package/dist/providers/kamino/index.js.map +1 -1
- package/dist/providers/kamino/kamino-migration.test.d.ts +2 -0
- package/dist/providers/kamino/kamino-migration.test.d.ts.map +1 -0
- package/dist/providers/kamino/kamino-migration.test.js +105 -0
- package/dist/providers/kamino/kamino-migration.test.js.map +1 -0
- package/dist/providers/kamino/kamino-sdk-wrapper.d.ts +12 -10
- package/dist/providers/kamino/kamino-sdk-wrapper.d.ts.map +1 -1
- package/dist/providers/kamino/kamino-sdk-wrapper.js +134 -20
- package/dist/providers/kamino/kamino-sdk-wrapper.js.map +1 -1
- package/dist/providers/kamino/schemas.d.ts +52 -25
- package/dist/providers/kamino/schemas.d.ts.map +1 -1
- package/dist/providers/kamino/schemas.js +23 -9
- package/dist/providers/kamino/schemas.js.map +1 -1
- package/dist/providers/lido-staking/index.d.ts +10 -7
- package/dist/providers/lido-staking/index.d.ts.map +1 -1
- package/dist/providers/lido-staking/index.js +95 -54
- package/dist/providers/lido-staking/index.js.map +1 -1
- package/dist/providers/lido-staking/lido-contract.d.ts +14 -0
- package/dist/providers/lido-staking/lido-contract.d.ts.map +1 -1
- package/dist/providers/lido-staking/lido-contract.js +41 -0
- package/dist/providers/lido-staking/lido-contract.js.map +1 -1
- package/dist/providers/lido-staking/lido-migration.test.d.ts +2 -0
- package/dist/providers/lido-staking/lido-migration.test.d.ts.map +1 -0
- package/dist/providers/lido-staking/lido-migration.test.js +55 -0
- package/dist/providers/lido-staking/lido-migration.test.js.map +1 -0
- package/dist/providers/lifi/index.d.ts.map +1 -1
- package/dist/providers/lifi/index.js +14 -2
- package/dist/providers/lifi/index.js.map +1 -1
- package/dist/providers/pendle/__tests__/pendle-provider.test.js +27 -8
- package/dist/providers/pendle/__tests__/pendle-provider.test.js.map +1 -1
- package/dist/providers/pendle/config.d.ts +2 -0
- package/dist/providers/pendle/config.d.ts.map +1 -1
- package/dist/providers/pendle/config.js +2 -0
- package/dist/providers/pendle/config.js.map +1 -1
- package/dist/providers/pendle/index.d.ts +8 -4
- package/dist/providers/pendle/index.d.ts.map +1 -1
- package/dist/providers/pendle/index.js +108 -74
- package/dist/providers/pendle/index.js.map +1 -1
- package/dist/providers/pendle/input-schemas.d.ts +52 -20
- package/dist/providers/pendle/input-schemas.d.ts.map +1 -1
- package/dist/providers/pendle/input-schemas.js +26 -5
- package/dist/providers/pendle/input-schemas.js.map +1 -1
- package/dist/providers/pendle/pendle-api-client.d.ts +2 -2
- package/dist/providers/pendle/pendle-api-client.d.ts.map +1 -1
- package/dist/providers/pendle/pendle-api-client.js +2 -1
- package/dist/providers/pendle/pendle-api-client.js.map +1 -1
- package/dist/providers/pendle/schemas.d.ts +320 -3
- package/dist/providers/pendle/schemas.d.ts.map +1 -1
- package/dist/providers/pendle/schemas.js +11 -2
- package/dist/providers/pendle/schemas.js.map +1 -1
- package/dist/providers/polymarket/__tests__/infrastructure.test.d.ts +2 -0
- package/dist/providers/polymarket/__tests__/infrastructure.test.d.ts.map +1 -0
- package/dist/providers/polymarket/__tests__/infrastructure.test.js +117 -0
- package/dist/providers/polymarket/__tests__/infrastructure.test.js.map +1 -0
- package/dist/providers/polymarket/ctf-provider.d.ts.map +1 -1
- package/dist/providers/polymarket/ctf-provider.js +1 -0
- package/dist/providers/polymarket/ctf-provider.js.map +1 -1
- package/dist/providers/polymarket/market-schemas.d.ts +2 -2
- package/dist/providers/polymarket/order-provider.d.ts.map +1 -1
- package/dist/providers/polymarket/order-provider.js +1 -0
- package/dist/providers/polymarket/order-provider.js.map +1 -1
- package/dist/providers/polymarket/schemas.d.ts +20 -20
- package/dist/providers/polymarket/schemas.js +4 -4
- package/dist/providers/polymarket/schemas.js.map +1 -1
- package/dist/providers/zerox-swap/index.d.ts.map +1 -1
- package/dist/providers/zerox-swap/index.js +14 -2
- package/dist/providers/zerox-swap/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate an amount string to BigInt, with backward compatibility for decimal inputs.
|
|
3
|
+
*
|
|
4
|
+
* - If `value` contains a decimal point: converts via parseTokenAmount() + deprecation warning
|
|
5
|
+
* - If `value` is a pure integer string: converts directly to BigInt (smallest-unit passthrough)
|
|
6
|
+
*
|
|
7
|
+
* @param value - Amount string (smallest-unit integer or legacy decimal)
|
|
8
|
+
* @param decimals - Token decimals (e.g., 18 for ETH, 6 for USDC, 9 for SOL)
|
|
9
|
+
* @returns Amount in smallest unit as bigint
|
|
10
|
+
*/
|
|
11
|
+
export declare function migrateAmount(value: string, decimals: number): bigint;
|
|
12
|
+
//# sourceMappingURL=migrate-amount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-amount.d.ts","sourceRoot":"","sources":["../../src/common/migrate-amount.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASrE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward-compatible amount migration helper.
|
|
3
|
+
*
|
|
4
|
+
* During the transition from human-readable to smallest-unit inputs,
|
|
5
|
+
* this helper detects legacy decimal inputs and auto-converts them
|
|
6
|
+
* while emitting a deprecation warning. Pure integer strings (smallest-unit)
|
|
7
|
+
* are passed through as BigInt without conversion.
|
|
8
|
+
*
|
|
9
|
+
* Used by providers migrating from parseTokenAmount() to direct BigInt input.
|
|
10
|
+
*/
|
|
11
|
+
import { parseTokenAmount } from './amount-parser.js';
|
|
12
|
+
/**
|
|
13
|
+
* Migrate an amount string to BigInt, with backward compatibility for decimal inputs.
|
|
14
|
+
*
|
|
15
|
+
* - If `value` contains a decimal point: converts via parseTokenAmount() + deprecation warning
|
|
16
|
+
* - If `value` is a pure integer string: converts directly to BigInt (smallest-unit passthrough)
|
|
17
|
+
*
|
|
18
|
+
* @param value - Amount string (smallest-unit integer or legacy decimal)
|
|
19
|
+
* @param decimals - Token decimals (e.g., 18 for ETH, 6 for USDC, 9 for SOL)
|
|
20
|
+
* @returns Amount in smallest unit as bigint
|
|
21
|
+
*/
|
|
22
|
+
export function migrateAmount(value, decimals) {
|
|
23
|
+
if (value.includes('.')) {
|
|
24
|
+
console.warn(`[WAIaaS DEPRECATION] Amount "${value}" contains decimal point. This will be rejected in a future version. Please provide amounts in smallest units (e.g., wei/lamports).`);
|
|
25
|
+
return parseTokenAmount(value, decimals);
|
|
26
|
+
}
|
|
27
|
+
return BigInt(value);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=migrate-amount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-amount.js","sourceRoot":"","sources":["../../src/common/migrate-amount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,QAAgB;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CACV,gCAAgC,KAAK,qIAAqI,CAC3K,CAAC;QACF,OAAO,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-amount.test.d.ts","sourceRoot":"","sources":["../../src/common/migrate-amount.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the migrateAmount() shared helper.
|
|
3
|
+
*
|
|
4
|
+
* migrateAmount() provides backward compatibility for providers migrating
|
|
5
|
+
* from human-readable to smallest-unit inputs. It detects decimal points
|
|
6
|
+
* to auto-convert legacy inputs while passing through smallest-unit integers.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
9
|
+
import { migrateAmount } from './migrate-amount.js';
|
|
10
|
+
describe('migrateAmount', () => {
|
|
11
|
+
let warnSpy;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
warnSpy.mockRestore();
|
|
17
|
+
});
|
|
18
|
+
it('passes through pure integer string as BigInt (smallest-unit)', () => {
|
|
19
|
+
const result = migrateAmount('1000000000000000000', 18);
|
|
20
|
+
expect(result).toBe(1000000000000000000n);
|
|
21
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
22
|
+
});
|
|
23
|
+
it('converts decimal input via parseTokenAmount and warns', () => {
|
|
24
|
+
const result = migrateAmount('100.5', 18);
|
|
25
|
+
expect(result).toBe(100500000000000000000n);
|
|
26
|
+
expect(warnSpy).toHaveBeenCalledOnce();
|
|
27
|
+
expect(warnSpy.mock.calls[0][0]).toContain('DEPRECATION');
|
|
28
|
+
expect(warnSpy.mock.calls[0][0]).toContain('100.5');
|
|
29
|
+
});
|
|
30
|
+
it('converts SOL decimal input with 9 decimals', () => {
|
|
31
|
+
const result = migrateAmount('1.5', 9);
|
|
32
|
+
expect(result).toBe(1500000000n);
|
|
33
|
+
expect(warnSpy).toHaveBeenCalledOnce();
|
|
34
|
+
});
|
|
35
|
+
it('passes through zero value as 0n', () => {
|
|
36
|
+
const result = migrateAmount('0', 18);
|
|
37
|
+
expect(result).toBe(0n);
|
|
38
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
39
|
+
});
|
|
40
|
+
it('does not warn for integer input', () => {
|
|
41
|
+
migrateAmount('1000000', 6);
|
|
42
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
43
|
+
});
|
|
44
|
+
it('passes through integer string as BigInt for 6 decimals', () => {
|
|
45
|
+
const result = migrateAmount('1000000', 6);
|
|
46
|
+
expect(result).toBe(1000000n);
|
|
47
|
+
});
|
|
48
|
+
it('converts fractional-only input (.5)', () => {
|
|
49
|
+
const result = migrateAmount('.5', 18);
|
|
50
|
+
expect(result).toBe(500000000000000000n);
|
|
51
|
+
expect(warnSpy).toHaveBeenCalledOnce();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=migrate-amount.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-amount.test.js","sourceRoot":"","sources":["../../src/common/migrate-amount.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a humanAmount variant in provider input params.
|
|
3
|
+
*
|
|
4
|
+
* If `humanAmountField` is present in params, converts its value to smallest-unit
|
|
5
|
+
* using `decimals` and sets the result on `amountField`. Removes the humanAmount
|
|
6
|
+
* and decimals fields from params. Mutates params in place.
|
|
7
|
+
*
|
|
8
|
+
* @param params - Provider input params (will be mutated)
|
|
9
|
+
* @param amountField - Original amount field name (e.g., 'amount', 'sellAmount', 'fromAmount')
|
|
10
|
+
* @param humanAmountField - Human amount field name (e.g., 'humanAmount', 'humanSellAmount')
|
|
11
|
+
* @param decimalsField - Field name for decimals (default: 'decimals')
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveProviderHumanAmount(params: Record<string, unknown>, amountField: string, humanAmountField: string, decimalsField?: string): void;
|
|
14
|
+
//# sourceMappingURL=resolve-human-amount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-human-amount.d.ts","sourceRoot":"","sources":["../../src/common/resolve-human-amount.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,aAAa,GAAE,MAAmB,GACjC,IAAI,CAmBN"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve humanAmount variants in provider params.
|
|
3
|
+
*
|
|
4
|
+
* Phase 405: Provides a shared helper for converting human-readable amount
|
|
5
|
+
* inputs (e.g., "1.5" ETH) to smallest-unit strings (e.g., "1500000000000000000" wei)
|
|
6
|
+
* in Action Provider resolve() methods.
|
|
7
|
+
*
|
|
8
|
+
* Each provider defines its own humanAmount field name (e.g., humanAmount,
|
|
9
|
+
* humanSellAmount, humanAmountIn) matching its original amount field name.
|
|
10
|
+
*/
|
|
11
|
+
import { parseAmount } from '@waiaas/core';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a humanAmount variant in provider input params.
|
|
14
|
+
*
|
|
15
|
+
* If `humanAmountField` is present in params, converts its value to smallest-unit
|
|
16
|
+
* using `decimals` and sets the result on `amountField`. Removes the humanAmount
|
|
17
|
+
* and decimals fields from params. Mutates params in place.
|
|
18
|
+
*
|
|
19
|
+
* @param params - Provider input params (will be mutated)
|
|
20
|
+
* @param amountField - Original amount field name (e.g., 'amount', 'sellAmount', 'fromAmount')
|
|
21
|
+
* @param humanAmountField - Human amount field name (e.g., 'humanAmount', 'humanSellAmount')
|
|
22
|
+
* @param decimalsField - Field name for decimals (default: 'decimals')
|
|
23
|
+
*/
|
|
24
|
+
export function resolveProviderHumanAmount(params, amountField, humanAmountField, decimalsField = 'decimals') {
|
|
25
|
+
const humanValue = params[humanAmountField];
|
|
26
|
+
if (typeof humanValue !== 'string' || humanValue.length === 0) {
|
|
27
|
+
return; // No humanAmount provided, use existing amount
|
|
28
|
+
}
|
|
29
|
+
const decimals = params[decimalsField];
|
|
30
|
+
if (typeof decimals !== 'number' || !Number.isInteger(decimals) || decimals < 0) {
|
|
31
|
+
throw new Error(`${decimalsField} is required (integer >= 0) when using ${humanAmountField}`);
|
|
32
|
+
}
|
|
33
|
+
// Convert human-readable to smallest-unit
|
|
34
|
+
params[amountField] = parseAmount(humanValue, decimals).toString();
|
|
35
|
+
// Remove humanAmount and decimals fields (not part of original schema)
|
|
36
|
+
delete params[humanAmountField];
|
|
37
|
+
delete params[decimalsField];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=resolve-human-amount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-human-amount.js","sourceRoot":"","sources":["../../src/common/resolve-human-amount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAA+B,EAC/B,WAAmB,EACnB,gBAAwB,EACxB,gBAAwB,UAAU;IAElC,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,+CAA+C;IACzD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CACb,GAAG,aAAa,0CAA0C,gBAAgB,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEnE,uEAAuE;IACvE,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aave-v3.test.d.ts","sourceRoot":"","sources":["../../../src/providers/aave-v3/aave-v3.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Aave V3 provider smallest-unit migration.
|
|
3
|
+
*
|
|
4
|
+
* Verifies that:
|
|
5
|
+
* - Smallest-unit integer inputs are used directly (no parseTokenAmount)
|
|
6
|
+
* - Legacy decimal inputs trigger migrateAmount auto-conversion + deprecation warning
|
|
7
|
+
* - 'max' keyword works independently for repay/withdraw
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
10
|
+
import { AaveV3LendingProvider } from './index.js';
|
|
11
|
+
const TEST_ASSET = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; // DAI
|
|
12
|
+
const TEST_WALLET = '0x1234567890abcdef1234567890abcdef12345678';
|
|
13
|
+
const TEST_CONTEXT = {
|
|
14
|
+
walletAddress: TEST_WALLET,
|
|
15
|
+
walletId: 'test-wallet',
|
|
16
|
+
chain: 'ethereum',
|
|
17
|
+
};
|
|
18
|
+
describe('Aave V3 smallest-unit migration', () => {
|
|
19
|
+
let provider;
|
|
20
|
+
let warnSpy;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
provider = new AaveV3LendingProvider();
|
|
23
|
+
warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
24
|
+
});
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
warnSpy.mockRestore();
|
|
27
|
+
});
|
|
28
|
+
describe('aave_supply', () => {
|
|
29
|
+
it('uses smallest-unit integer directly', async () => {
|
|
30
|
+
const result = (await provider.resolve('aave_supply', { asset: TEST_ASSET, amount: '1000000000000000000' }, TEST_CONTEXT));
|
|
31
|
+
// Should produce approve + supply (2 elements)
|
|
32
|
+
expect(result).toHaveLength(2);
|
|
33
|
+
// No deprecation warning for integer input
|
|
34
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
35
|
+
});
|
|
36
|
+
it('auto-converts legacy decimal input with deprecation warning', async () => {
|
|
37
|
+
const result = (await provider.resolve('aave_supply', { asset: TEST_ASSET, amount: '1.0' }, TEST_CONTEXT));
|
|
38
|
+
expect(result).toHaveLength(2);
|
|
39
|
+
expect(warnSpy).toHaveBeenCalledOnce();
|
|
40
|
+
expect(warnSpy.mock.calls[0][0]).toContain('DEPRECATION');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('aave_borrow', () => {
|
|
44
|
+
it('uses smallest-unit integer directly (500000000000000000 = 0.5 ETH)', async () => {
|
|
45
|
+
const result = (await provider.resolve('aave_borrow', { asset: TEST_ASSET, amount: '500000000000000000' }, TEST_CONTEXT));
|
|
46
|
+
expect(result.type).toBe('CONTRACT_CALL');
|
|
47
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('aave_repay', () => {
|
|
51
|
+
it('uses MAX_UINT256 for max keyword', async () => {
|
|
52
|
+
const result = (await provider.resolve('aave_repay', { asset: TEST_ASSET, amount: 'max' }, TEST_CONTEXT));
|
|
53
|
+
expect(result).toHaveLength(2);
|
|
54
|
+
// Verify calldata contains MAX_UINT256 (approve + repay)
|
|
55
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
56
|
+
});
|
|
57
|
+
it('uses smallest-unit integer directly for non-max', async () => {
|
|
58
|
+
const result = (await provider.resolve('aave_repay', { asset: TEST_ASSET, amount: '1000000000000000000' }, TEST_CONTEXT));
|
|
59
|
+
expect(result).toHaveLength(2);
|
|
60
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('aave_withdraw', () => {
|
|
64
|
+
it('uses MAX_UINT256 for max keyword', async () => {
|
|
65
|
+
const result = (await provider.resolve('aave_withdraw', { asset: TEST_ASSET, amount: 'max' }, TEST_CONTEXT));
|
|
66
|
+
expect(result.type).toBe('CONTRACT_CALL');
|
|
67
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
68
|
+
});
|
|
69
|
+
it('auto-converts legacy decimal input', async () => {
|
|
70
|
+
const result = (await provider.resolve('aave_withdraw', { asset: TEST_ASSET, amount: '0.5' }, TEST_CONTEXT));
|
|
71
|
+
expect(result.type).toBe('CONTRACT_CALL');
|
|
72
|
+
expect(warnSpy).toHaveBeenCalledOnce();
|
|
73
|
+
expect(warnSpy.mock.calls[0][0]).toContain('DEPRECATION');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=aave-v3.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aave-v3.test.js","sourceRoot":"","sources":["../../../src/providers/aave-v3/aave-v3.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ILendingProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest, LendingPositionSummary, HealthFactor, MarketInfo } from '@waiaas/core';
|
|
2
|
-
import type { IPositionProvider, PositionUpdate, PositionCategory } from '@waiaas/core';
|
|
2
|
+
import type { IPositionProvider, PositionUpdate, PositionCategory, PositionQueryContext } from '@waiaas/core';
|
|
3
3
|
import type { AaveV3Config } from './config.js';
|
|
4
4
|
import { type IRpcCaller } from './aave-rpc.js';
|
|
5
5
|
export declare class AaveV3LendingProvider implements ILendingProvider, IPositionProvider {
|
|
@@ -18,7 +18,15 @@ export declare class AaveV3LendingProvider implements ILendingProvider, IPositio
|
|
|
18
18
|
getPosition(_walletId: string, context: ActionContext): Promise<LendingPositionSummary[]>;
|
|
19
19
|
getHealthFactor(_walletId: string, context: ActionContext): Promise<HealthFactor>;
|
|
20
20
|
getMarkets(_chain: string, _network?: string): Promise<MarketInfo[]>;
|
|
21
|
-
getPositions(
|
|
21
|
+
getPositions(ctx: PositionQueryContext): Promise<PositionUpdate[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Query Aave V3 supply/borrow positions on a single network using raw fetch RPC.
|
|
24
|
+
*/
|
|
25
|
+
private queryNetworkAavePositions;
|
|
26
|
+
/**
|
|
27
|
+
* Raw JSON-RPC eth_call via fetch (used for multichain position queries).
|
|
28
|
+
*/
|
|
29
|
+
private rpcCall;
|
|
22
30
|
getProviderName(): string;
|
|
23
31
|
getSupportedCategories(): PositionCategory[];
|
|
24
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/aave-v3/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/aave-v3/index.ts"],"names":[],"mappings":"AAiBA,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,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBhD,OAAO,EACL,KAAK,UAAU,EAUhB,MAAM,eAAe,CAAC;AAavB,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;IAuD7D,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;YAoCP,aAAa;IA+B3B,OAAO,CAAC,YAAY;YAmCN,eAAe;YA8Bf,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,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAqBxE;;OAEG;YACW,yBAAyB;IAyGvC;;OAEG;YACW,OAAO;IAerB,eAAe,IAAI,MAAM;IAIzB,sBAAsB,IAAI,gBAAgB,EAAE;CAG7C"}
|