@waiaas/actions 2.9.0-rc.3 → 2.9.0-rc.4
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/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/providers/pendle/__tests__/pendle-api-client.test.d.ts +2 -0
- package/dist/providers/pendle/__tests__/pendle-api-client.test.d.ts.map +1 -0
- package/dist/providers/pendle/__tests__/pendle-api-client.test.js +252 -0
- package/dist/providers/pendle/__tests__/pendle-api-client.test.js.map +1 -0
- package/dist/providers/pendle/__tests__/pendle-provider.test.d.ts +2 -0
- package/dist/providers/pendle/__tests__/pendle-provider.test.d.ts.map +1 -0
- package/dist/providers/pendle/__tests__/pendle-provider.test.js +229 -0
- package/dist/providers/pendle/__tests__/pendle-provider.test.js.map +1 -0
- package/dist/providers/pendle/__tests__/pendle-redeem-lp.test.d.ts +2 -0
- package/dist/providers/pendle/__tests__/pendle-redeem-lp.test.d.ts.map +1 -0
- package/dist/providers/pendle/__tests__/pendle-redeem-lp.test.js +200 -0
- package/dist/providers/pendle/__tests__/pendle-redeem-lp.test.js.map +1 -0
- package/dist/providers/pendle/config.d.ts +25 -0
- package/dist/providers/pendle/config.d.ts.map +1 -0
- package/dist/providers/pendle/config.js +37 -0
- package/dist/providers/pendle/config.js.map +1 -0
- package/dist/providers/pendle/index.d.ts +39 -0
- package/dist/providers/pendle/index.d.ts.map +1 -0
- package/dist/providers/pendle/index.js +261 -0
- package/dist/providers/pendle/index.js.map +1 -0
- package/dist/providers/pendle/input-schemas.d.ts +79 -0
- package/dist/providers/pendle/input-schemas.d.ts.map +1 -0
- package/dist/providers/pendle/input-schemas.js +33 -0
- package/dist/providers/pendle/input-schemas.js.map +1 -0
- package/dist/providers/pendle/pendle-api-client.d.ts +41 -0
- package/dist/providers/pendle/pendle-api-client.d.ts.map +1 -0
- package/dist/providers/pendle/pendle-api-client.js +55 -0
- package/dist/providers/pendle/pendle-api-client.js.map +1 -0
- package/dist/providers/pendle/schemas.d.ts +278 -0
- package/dist/providers/pendle/schemas.d.ts.map +1 -0
- package/dist/providers/pendle/schemas.js +57 -0
- package/dist/providers/pendle/schemas.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -36,6 +36,10 @@ export type { KaminoConfig } from './providers/kamino/config.js';
|
|
|
36
36
|
export type { IKaminoSdkWrapper, KaminoInstruction, KaminoObligation, KaminoReserve } from './providers/kamino/kamino-sdk-wrapper.js';
|
|
37
37
|
export { MockKaminoSdkWrapper } from './providers/kamino/kamino-sdk-wrapper.js';
|
|
38
38
|
export { calculateHealthFactor, simulateKaminoHealthFactor, hfToStatus, KAMINO_LIQUIDATION_THRESHOLD, KAMINO_DEFAULT_HF_THRESHOLD } from './providers/kamino/hf-simulation.js';
|
|
39
|
+
export { PendleYieldProvider } from './providers/pendle/index.js';
|
|
40
|
+
export { PENDLE_DEFAULTS, PENDLE_CHAIN_ID_MAP, getPendleChainId } from './providers/pendle/config.js';
|
|
41
|
+
export type { PendleConfig } from './providers/pendle/config.js';
|
|
42
|
+
export { PendleApiClient } from './providers/pendle/pendle-api-client.js';
|
|
39
43
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
40
44
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
41
45
|
export type { SlippageBps, SlippagePct } from './common/slippage.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,cAAc,CAAC;AAWjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { getJitoAddresses } from './providers/jito-staking/config.js';
|
|
|
9
9
|
import { AaveV3LendingProvider } from './providers/aave-v3/index.js';
|
|
10
10
|
import {} from './providers/aave-v3/config.js';
|
|
11
11
|
import { KaminoLendingProvider } from './providers/kamino/index.js';
|
|
12
|
+
import { PendleYieldProvider } from './providers/pendle/index.js';
|
|
12
13
|
// Re-export provider classes
|
|
13
14
|
export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
14
15
|
export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
|
|
@@ -31,6 +32,9 @@ export { KaminoLendingProvider } from './providers/kamino/index.js';
|
|
|
31
32
|
export { KAMINO_DEFAULTS, KAMINO_PROGRAM_ID, KAMINO_MAIN_MARKET, resolveMarketAddress } from './providers/kamino/config.js';
|
|
32
33
|
export { MockKaminoSdkWrapper } from './providers/kamino/kamino-sdk-wrapper.js';
|
|
33
34
|
export { calculateHealthFactor, simulateKaminoHealthFactor, hfToStatus, KAMINO_LIQUIDATION_THRESHOLD, KAMINO_DEFAULT_HF_THRESHOLD } from './providers/kamino/hf-simulation.js';
|
|
35
|
+
export { PendleYieldProvider } from './providers/pendle/index.js';
|
|
36
|
+
export { PENDLE_DEFAULTS, PENDLE_CHAIN_ID_MAP, getPendleChainId } from './providers/pendle/config.js';
|
|
37
|
+
export { PendleApiClient } from './providers/pendle/pendle-api-client.js';
|
|
34
38
|
// Re-export common utilities
|
|
35
39
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
36
40
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
@@ -96,8 +100,8 @@ export function registerBuiltInProviders(registry, settingsReader, options) {
|
|
|
96
100
|
key: 'lido_staking',
|
|
97
101
|
enabledKey: 'actions.lido_staking_enabled',
|
|
98
102
|
factory: () => {
|
|
99
|
-
//
|
|
100
|
-
const evmNetwork =
|
|
103
|
+
// Lido is Ethereum-only; default to mainnet
|
|
104
|
+
const evmNetwork = 'ethereum-mainnet';
|
|
101
105
|
const isTestnet = deriveEnvironment(evmNetwork) === 'testnet';
|
|
102
106
|
const addresses = getLidoAddresses(isTestnet ? 'testnet' : 'mainnet');
|
|
103
107
|
// Admin Settings overrides individual addresses; empty string falls back to environment default
|
|
@@ -149,6 +153,21 @@ export function registerBuiltInProviders(registry, settingsReader, options) {
|
|
|
149
153
|
return new KaminoLendingProvider(config);
|
|
150
154
|
},
|
|
151
155
|
},
|
|
156
|
+
{
|
|
157
|
+
key: 'pendle_yield',
|
|
158
|
+
enabledKey: 'actions.pendle_yield_enabled',
|
|
159
|
+
factory: () => {
|
|
160
|
+
const config = {
|
|
161
|
+
enabled: true,
|
|
162
|
+
apiBaseUrl: settingsReader.get('actions.pendle_yield_api_base_url') || 'https://api-v2.pendle.finance',
|
|
163
|
+
apiKey: settingsReader.get('actions.pendle_yield_api_key') || '',
|
|
164
|
+
defaultSlippageBps: Number(settingsReader.get('actions.pendle_yield_default_slippage_bps')) || 100,
|
|
165
|
+
maxSlippageBps: Number(settingsReader.get('actions.pendle_yield_max_slippage_bps')) || 500,
|
|
166
|
+
requestTimeoutMs: Number(settingsReader.get('actions.pendle_yield_request_timeout_ms')) || 10_000,
|
|
167
|
+
};
|
|
168
|
+
return new PendleYieldProvider(config);
|
|
169
|
+
},
|
|
170
|
+
},
|
|
152
171
|
];
|
|
153
172
|
for (const { key, enabledKey, factory } of providers) {
|
|
154
173
|
if (settingsReader.get(enabledKey) === 'true') {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAA0B,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAA0B,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAqB,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendle-api-client.test.d.ts","sourceRoot":"","sources":["../../../../src/providers/pendle/__tests__/pendle-api-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendleApiClient unit tests.
|
|
3
|
+
* Uses msw to intercept Pendle REST API v2 calls.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
|
|
6
|
+
import { http, HttpResponse, delay } from 'msw';
|
|
7
|
+
import { setupServer } from 'msw/node';
|
|
8
|
+
import { PendleApiClient } from '../pendle-api-client.js';
|
|
9
|
+
import { PENDLE_DEFAULTS, PENDLE_CHAIN_ID_MAP, getPendleChainId } from '../config.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Canned responses
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const MOCK_MARKET = {
|
|
14
|
+
address: '0xMarketAddress123',
|
|
15
|
+
name: 'PT-stETH-26DEC2025',
|
|
16
|
+
expiry: '2025-12-26T00:00:00Z',
|
|
17
|
+
pt: '0xPTAddress123',
|
|
18
|
+
yt: '0xYTAddress123',
|
|
19
|
+
sy: '0xSYAddress123',
|
|
20
|
+
underlyingAsset: {
|
|
21
|
+
address: '0xUnderlyingAddress',
|
|
22
|
+
symbol: 'stETH',
|
|
23
|
+
decimals: 18,
|
|
24
|
+
},
|
|
25
|
+
chainId: 1,
|
|
26
|
+
details: {
|
|
27
|
+
impliedApy: 0.045,
|
|
28
|
+
underlyingApy: 0.032,
|
|
29
|
+
liquidity: 150000000,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const MARKETS_RESPONSE = [MOCK_MARKET];
|
|
33
|
+
const CONVERT_RESPONSE = {
|
|
34
|
+
tx: {
|
|
35
|
+
to: '0xPendleRouter',
|
|
36
|
+
data: '0xabcdef1234567890',
|
|
37
|
+
value: '0',
|
|
38
|
+
},
|
|
39
|
+
amountOut: '1000000000000000000',
|
|
40
|
+
};
|
|
41
|
+
const SWAPPING_PRICES_RESPONSE = {
|
|
42
|
+
ptPrice: 0.95,
|
|
43
|
+
ytPrice: 0.05,
|
|
44
|
+
};
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// MSW server setup
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
const BASE_URL = 'https://api-v2.pendle.finance';
|
|
49
|
+
const server = setupServer(http.get(`${BASE_URL}/v1/markets/all`, () => {
|
|
50
|
+
return HttpResponse.json(MARKETS_RESPONSE);
|
|
51
|
+
}), http.get(`${BASE_URL}/v2/sdk/1/convert`, () => {
|
|
52
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
53
|
+
}), http.get(`${BASE_URL}/v1/sdk/1/markets/:market/swapping-prices`, () => {
|
|
54
|
+
return HttpResponse.json(SWAPPING_PRICES_RESPONSE);
|
|
55
|
+
}));
|
|
56
|
+
beforeAll(() => server.listen({ onUnhandledRequest: 'bypass' }));
|
|
57
|
+
afterEach(() => server.resetHandlers());
|
|
58
|
+
afterAll(() => server.close());
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Helpers
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
function makeConfig(overrides = {}) {
|
|
63
|
+
return {
|
|
64
|
+
...PENDLE_DEFAULTS,
|
|
65
|
+
enabled: true,
|
|
66
|
+
...overrides,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Tests
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
describe('PendleApiClient', () => {
|
|
73
|
+
describe('getMarkets', () => {
|
|
74
|
+
it('sends chainId as query parameter', async () => {
|
|
75
|
+
let capturedUrl = '';
|
|
76
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, ({ request }) => {
|
|
77
|
+
capturedUrl = request.url;
|
|
78
|
+
return HttpResponse.json(MARKETS_RESPONSE);
|
|
79
|
+
}));
|
|
80
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
81
|
+
await client.getMarkets();
|
|
82
|
+
const url = new URL(capturedUrl);
|
|
83
|
+
expect(url.searchParams.get('chainId')).toBe('1');
|
|
84
|
+
});
|
|
85
|
+
it('returns validated markets array on success', async () => {
|
|
86
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
87
|
+
const result = await client.getMarkets();
|
|
88
|
+
expect(result).toHaveLength(1);
|
|
89
|
+
const market = result[0];
|
|
90
|
+
expect(market.address).toBe('0xMarketAddress123');
|
|
91
|
+
expect(market.pt).toBe('0xPTAddress123');
|
|
92
|
+
expect(market.yt).toBe('0xYTAddress123');
|
|
93
|
+
expect(market.underlyingAsset.symbol).toBe('stETH');
|
|
94
|
+
expect(market.details?.impliedApy).toBe(0.045);
|
|
95
|
+
});
|
|
96
|
+
it('validates response schema (rejects invalid data)', async () => {
|
|
97
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, () => {
|
|
98
|
+
return HttpResponse.json([{ invalid: true }]);
|
|
99
|
+
}));
|
|
100
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
101
|
+
await expect(client.getMarkets()).rejects.toThrow();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('convert', () => {
|
|
105
|
+
it('sends all parameters as query params', async () => {
|
|
106
|
+
let capturedUrl = '';
|
|
107
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, ({ request }) => {
|
|
108
|
+
capturedUrl = request.url;
|
|
109
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
110
|
+
}));
|
|
111
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
112
|
+
await client.convert({
|
|
113
|
+
tokensIn: '0xTokenIn',
|
|
114
|
+
amountsIn: '1000000',
|
|
115
|
+
tokensOut: '0xPT',
|
|
116
|
+
slippage: '0.01',
|
|
117
|
+
receiver: '0xWallet',
|
|
118
|
+
});
|
|
119
|
+
const url = new URL(capturedUrl);
|
|
120
|
+
expect(url.searchParams.get('tokensIn')).toBe('0xTokenIn');
|
|
121
|
+
expect(url.searchParams.get('amountsIn')).toBe('1000000');
|
|
122
|
+
expect(url.searchParams.get('tokensOut')).toBe('0xPT');
|
|
123
|
+
expect(url.searchParams.get('slippage')).toBe('0.01');
|
|
124
|
+
expect(url.searchParams.get('receiver')).toBe('0xWallet');
|
|
125
|
+
});
|
|
126
|
+
it('uses correct chainId in URL path', async () => {
|
|
127
|
+
let capturedUrl = '';
|
|
128
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/42161/convert`, ({ request }) => {
|
|
129
|
+
capturedUrl = request.url;
|
|
130
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
131
|
+
}));
|
|
132
|
+
const client = new PendleApiClient(makeConfig(), 42161);
|
|
133
|
+
await client.convert({
|
|
134
|
+
tokensIn: '0xA',
|
|
135
|
+
amountsIn: '100',
|
|
136
|
+
tokensOut: '0xB',
|
|
137
|
+
slippage: '0.01',
|
|
138
|
+
receiver: '0xC',
|
|
139
|
+
});
|
|
140
|
+
expect(capturedUrl).toContain('/v2/sdk/42161/convert');
|
|
141
|
+
});
|
|
142
|
+
it('returns validated convert response', async () => {
|
|
143
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
144
|
+
const result = await client.convert({
|
|
145
|
+
tokensIn: '0xA',
|
|
146
|
+
amountsIn: '100',
|
|
147
|
+
tokensOut: '0xB',
|
|
148
|
+
slippage: '0.01',
|
|
149
|
+
receiver: '0xC',
|
|
150
|
+
});
|
|
151
|
+
expect(result.tx.to).toBe('0xPendleRouter');
|
|
152
|
+
expect(result.tx.data).toBe('0xabcdef1234567890');
|
|
153
|
+
expect(result.tx.value).toBe('0');
|
|
154
|
+
expect(result.amountOut).toBe('1000000000000000000');
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('getSwappingPrices', () => {
|
|
158
|
+
it('returns validated swapping prices', async () => {
|
|
159
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
160
|
+
const result = await client.getSwappingPrices('0xMarketAddress123');
|
|
161
|
+
expect(result.ptPrice).toBe(0.95);
|
|
162
|
+
expect(result.ytPrice).toBe(0.05);
|
|
163
|
+
});
|
|
164
|
+
it('includes market address in URL path', async () => {
|
|
165
|
+
let capturedUrl = '';
|
|
166
|
+
server.use(http.get(`${BASE_URL}/v1/sdk/1/markets/:market/swapping-prices`, ({ request }) => {
|
|
167
|
+
capturedUrl = request.url;
|
|
168
|
+
return HttpResponse.json(SWAPPING_PRICES_RESPONSE);
|
|
169
|
+
}));
|
|
170
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
171
|
+
await client.getSwappingPrices('0xMyMarket');
|
|
172
|
+
expect(capturedUrl).toContain('0xMyMarket');
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('Authorization header', () => {
|
|
176
|
+
it('sends Authorization Bearer when apiKey is configured', async () => {
|
|
177
|
+
let capturedHeaders = {};
|
|
178
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, ({ request }) => {
|
|
179
|
+
capturedHeaders = Object.fromEntries(request.headers.entries());
|
|
180
|
+
return HttpResponse.json(MARKETS_RESPONSE);
|
|
181
|
+
}));
|
|
182
|
+
const client = new PendleApiClient(makeConfig({ apiKey: 'my-api-key' }), 1);
|
|
183
|
+
await client.getMarkets();
|
|
184
|
+
expect(capturedHeaders['authorization']).toBe('Bearer my-api-key');
|
|
185
|
+
});
|
|
186
|
+
it('does NOT send Authorization when apiKey is empty', async () => {
|
|
187
|
+
let capturedHeaders = {};
|
|
188
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, ({ request }) => {
|
|
189
|
+
capturedHeaders = Object.fromEntries(request.headers.entries());
|
|
190
|
+
return HttpResponse.json(MARKETS_RESPONSE);
|
|
191
|
+
}));
|
|
192
|
+
const client = new PendleApiClient(makeConfig({ apiKey: '' }), 1);
|
|
193
|
+
await client.getMarkets();
|
|
194
|
+
expect(capturedHeaders['authorization']).toBeUndefined();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe('Error handling', () => {
|
|
198
|
+
it('throws ACTION_API_ERROR on 400 response', async () => {
|
|
199
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, () => {
|
|
200
|
+
return HttpResponse.json({ reason: 'INVALID_CHAIN' }, { status: 400 });
|
|
201
|
+
}));
|
|
202
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
203
|
+
await expect(client.getMarkets()).rejects.toThrow('API error 400');
|
|
204
|
+
});
|
|
205
|
+
it('throws ACTION_API_ERROR on 500 response', async () => {
|
|
206
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, () => {
|
|
207
|
+
return HttpResponse.text('Internal Server Error', { status: 500 });
|
|
208
|
+
}));
|
|
209
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
210
|
+
await expect(client.convert({
|
|
211
|
+
tokensIn: '0xA',
|
|
212
|
+
amountsIn: '100',
|
|
213
|
+
tokensOut: '0xB',
|
|
214
|
+
slippage: '0.01',
|
|
215
|
+
receiver: '0xC',
|
|
216
|
+
})).rejects.toThrow('API error 500');
|
|
217
|
+
});
|
|
218
|
+
it('throws ACTION_RATE_LIMITED on 429 response', async () => {
|
|
219
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, () => {
|
|
220
|
+
return HttpResponse.text('Too Many Requests', { status: 429 });
|
|
221
|
+
}));
|
|
222
|
+
const client = new PendleApiClient(makeConfig(), 1);
|
|
223
|
+
await expect(client.getMarkets()).rejects.toThrow('Rate limited');
|
|
224
|
+
});
|
|
225
|
+
it('throws ACTION_API_TIMEOUT on timeout', async () => {
|
|
226
|
+
server.use(http.get(`${BASE_URL}/v1/markets/all`, async () => {
|
|
227
|
+
await delay(500);
|
|
228
|
+
return HttpResponse.json(MARKETS_RESPONSE);
|
|
229
|
+
}));
|
|
230
|
+
const client = new PendleApiClient(makeConfig({ requestTimeoutMs: 50 }), 1);
|
|
231
|
+
await expect(client.getMarkets()).rejects.toThrow('timeout');
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
describe('Config: PENDLE_CHAIN_ID_MAP', () => {
|
|
235
|
+
it('maps ethereum-mainnet to 1', () => {
|
|
236
|
+
expect(PENDLE_CHAIN_ID_MAP['ethereum-mainnet']).toBe(1);
|
|
237
|
+
});
|
|
238
|
+
it('maps arbitrum-mainnet to 42161', () => {
|
|
239
|
+
expect(PENDLE_CHAIN_ID_MAP['arbitrum-mainnet']).toBe(42161);
|
|
240
|
+
});
|
|
241
|
+
it('maps base-mainnet to 8453', () => {
|
|
242
|
+
expect(PENDLE_CHAIN_ID_MAP['base-mainnet']).toBe(8453);
|
|
243
|
+
});
|
|
244
|
+
it('getPendleChainId throws for unsupported network', () => {
|
|
245
|
+
expect(() => getPendleChainId('solana-mainnet')).toThrow('Unsupported network');
|
|
246
|
+
});
|
|
247
|
+
it('getPendleChainId returns correct chain ID', () => {
|
|
248
|
+
expect(getPendleChainId('ethereum-mainnet')).toBe(1);
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
//# sourceMappingURL=pendle-api-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendle-api-client.test.js","sourceRoot":"","sources":["../../../../src/providers/pendle/__tests__/pendle-api-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendle-provider.test.d.ts","sourceRoot":"","sources":["../../../../src/providers/pendle/__tests__/pendle-provider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendleYieldProvider unit tests.
|
|
3
|
+
* Tests buyPT, buyYT action resolution via mock PendleApiClient.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
|
|
6
|
+
import { http, HttpResponse } from 'msw';
|
|
7
|
+
import { setupServer } from 'msw/node';
|
|
8
|
+
import { PendleYieldProvider } from '../index.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Mock data
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const MOCK_MARKET = {
|
|
13
|
+
address: '0xMarketAddr',
|
|
14
|
+
name: 'PT-stETH-26DEC2025',
|
|
15
|
+
expiry: '2025-12-26T00:00:00Z',
|
|
16
|
+
pt: '0xPTAddr',
|
|
17
|
+
yt: '0xYTAddr',
|
|
18
|
+
sy: '0xSYAddr',
|
|
19
|
+
underlyingAsset: {
|
|
20
|
+
address: '0xUnderlying',
|
|
21
|
+
symbol: 'stETH',
|
|
22
|
+
decimals: 18,
|
|
23
|
+
},
|
|
24
|
+
chainId: 1,
|
|
25
|
+
details: {
|
|
26
|
+
impliedApy: 0.045,
|
|
27
|
+
underlyingApy: 0.032,
|
|
28
|
+
liquidity: 150000000,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const CONVERT_RESPONSE = {
|
|
32
|
+
tx: {
|
|
33
|
+
to: '0xPendleRouter',
|
|
34
|
+
data: '0xcalldata123',
|
|
35
|
+
value: '0',
|
|
36
|
+
},
|
|
37
|
+
amountOut: '950000000000000000',
|
|
38
|
+
};
|
|
39
|
+
const CONTEXT = {
|
|
40
|
+
walletAddress: '0x1234567890abcdef1234567890abcdef12345678',
|
|
41
|
+
chain: 'ethereum',
|
|
42
|
+
walletId: '00000000-0000-0000-0000-000000000001',
|
|
43
|
+
};
|
|
44
|
+
const BASE_URL = 'https://api-v2.pendle.finance';
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// MSW server
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
const server = setupServer(http.get(`${BASE_URL}/v1/markets/all`, () => {
|
|
49
|
+
return HttpResponse.json([MOCK_MARKET]);
|
|
50
|
+
}), http.get(`${BASE_URL}/v2/sdk/1/convert`, () => {
|
|
51
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
52
|
+
}));
|
|
53
|
+
beforeAll(() => server.listen({ onUnhandledRequest: 'bypass' }));
|
|
54
|
+
afterEach(() => server.resetHandlers());
|
|
55
|
+
afterAll(() => server.close());
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Tests
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
describe('PendleYieldProvider', () => {
|
|
60
|
+
describe('metadata', () => {
|
|
61
|
+
it('has correct provider name', () => {
|
|
62
|
+
const provider = new PendleYieldProvider();
|
|
63
|
+
expect(provider.metadata.name).toBe('pendle_yield');
|
|
64
|
+
});
|
|
65
|
+
it('has 5 actions', () => {
|
|
66
|
+
const provider = new PendleYieldProvider();
|
|
67
|
+
expect(provider.actions).toHaveLength(5);
|
|
68
|
+
});
|
|
69
|
+
it('exposes expected action names', () => {
|
|
70
|
+
const provider = new PendleYieldProvider();
|
|
71
|
+
const names = provider.actions.map((a) => a.name);
|
|
72
|
+
expect(names).toEqual(['buy_pt', 'buy_yt', 'redeem_pt', 'add_liquidity', 'remove_liquidity']);
|
|
73
|
+
});
|
|
74
|
+
it('mcpExpose is true', () => {
|
|
75
|
+
const provider = new PendleYieldProvider();
|
|
76
|
+
expect(provider.metadata.mcpExpose).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it('chains includes ethereum', () => {
|
|
79
|
+
const provider = new PendleYieldProvider();
|
|
80
|
+
expect(provider.metadata.chains).toContain('ethereum');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('buy_pt', () => {
|
|
84
|
+
it('returns ContractCallRequest with correct fields', async () => {
|
|
85
|
+
const provider = new PendleYieldProvider();
|
|
86
|
+
const result = await provider.resolve('buy_pt', {
|
|
87
|
+
market: '0xMarketAddr',
|
|
88
|
+
tokenIn: '0xUnderlying',
|
|
89
|
+
amountIn: '1000000000000000000',
|
|
90
|
+
}, CONTEXT);
|
|
91
|
+
expect(Array.isArray(result)).toBe(true);
|
|
92
|
+
const calls = result;
|
|
93
|
+
expect(calls).toHaveLength(1);
|
|
94
|
+
const call = calls[0];
|
|
95
|
+
expect(call.type).toBe('CONTRACT_CALL');
|
|
96
|
+
expect(call.to).toBe('0xPendleRouter');
|
|
97
|
+
expect(call.calldata).toBe('0xcalldata123');
|
|
98
|
+
});
|
|
99
|
+
it('sends PT address as tokensOut to Convert API', async () => {
|
|
100
|
+
let capturedUrl = '';
|
|
101
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, ({ request }) => {
|
|
102
|
+
capturedUrl = request.url;
|
|
103
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
104
|
+
}));
|
|
105
|
+
const provider = new PendleYieldProvider();
|
|
106
|
+
await provider.resolve('buy_pt', {
|
|
107
|
+
market: '0xMarketAddr',
|
|
108
|
+
tokenIn: '0xUnderlying',
|
|
109
|
+
amountIn: '1000000',
|
|
110
|
+
}, CONTEXT);
|
|
111
|
+
const url = new URL(capturedUrl);
|
|
112
|
+
expect(url.searchParams.get('tokensOut')).toBe('0xPTAddr');
|
|
113
|
+
expect(url.searchParams.get('tokensIn')).toBe('0xUnderlying');
|
|
114
|
+
});
|
|
115
|
+
it('sends receiver as wallet address', async () => {
|
|
116
|
+
let capturedUrl = '';
|
|
117
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, ({ request }) => {
|
|
118
|
+
capturedUrl = request.url;
|
|
119
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
120
|
+
}));
|
|
121
|
+
const provider = new PendleYieldProvider();
|
|
122
|
+
await provider.resolve('buy_pt', {
|
|
123
|
+
market: '0xMarketAddr',
|
|
124
|
+
tokenIn: '0xUnderlying',
|
|
125
|
+
amountIn: '1000000',
|
|
126
|
+
}, CONTEXT);
|
|
127
|
+
const url = new URL(capturedUrl);
|
|
128
|
+
expect(url.searchParams.get('receiver')).toBe(CONTEXT.walletAddress);
|
|
129
|
+
});
|
|
130
|
+
it('throws on unknown market', async () => {
|
|
131
|
+
const provider = new PendleYieldProvider();
|
|
132
|
+
await expect(provider.resolve('buy_pt', {
|
|
133
|
+
market: '0xNonExistent',
|
|
134
|
+
tokenIn: '0xUnderlying',
|
|
135
|
+
amountIn: '1000000',
|
|
136
|
+
}, CONTEXT)).rejects.toThrow('market not found');
|
|
137
|
+
});
|
|
138
|
+
it('applies default slippage when not specified', async () => {
|
|
139
|
+
let capturedUrl = '';
|
|
140
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, ({ request }) => {
|
|
141
|
+
capturedUrl = request.url;
|
|
142
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
143
|
+
}));
|
|
144
|
+
const provider = new PendleYieldProvider();
|
|
145
|
+
await provider.resolve('buy_pt', {
|
|
146
|
+
market: '0xMarketAddr',
|
|
147
|
+
tokenIn: '0xUnderlying',
|
|
148
|
+
amountIn: '1000000',
|
|
149
|
+
}, CONTEXT);
|
|
150
|
+
const url = new URL(capturedUrl);
|
|
151
|
+
expect(url.searchParams.get('slippage')).toBe('0.01'); // 100bps = 1%
|
|
152
|
+
});
|
|
153
|
+
it('clamps user slippage to max', async () => {
|
|
154
|
+
let capturedUrl = '';
|
|
155
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, ({ request }) => {
|
|
156
|
+
capturedUrl = request.url;
|
|
157
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
158
|
+
}));
|
|
159
|
+
const provider = new PendleYieldProvider();
|
|
160
|
+
await provider.resolve('buy_pt', {
|
|
161
|
+
market: '0xMarketAddr',
|
|
162
|
+
tokenIn: '0xUnderlying',
|
|
163
|
+
amountIn: '1000000',
|
|
164
|
+
slippageBps: 1000, // 10% — should be clamped to max 5%
|
|
165
|
+
}, CONTEXT);
|
|
166
|
+
const url = new URL(capturedUrl);
|
|
167
|
+
expect(url.searchParams.get('slippage')).toBe('0.05'); // 500bps = 5%
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('buy_yt', () => {
|
|
171
|
+
it('returns ContractCallRequest for YT purchase', async () => {
|
|
172
|
+
const provider = new PendleYieldProvider();
|
|
173
|
+
const result = await provider.resolve('buy_yt', {
|
|
174
|
+
market: '0xMarketAddr',
|
|
175
|
+
tokenIn: '0xUnderlying',
|
|
176
|
+
amountIn: '1000000000000000000',
|
|
177
|
+
}, CONTEXT);
|
|
178
|
+
const calls = result;
|
|
179
|
+
expect(calls).toHaveLength(1);
|
|
180
|
+
expect(calls[0].type).toBe('CONTRACT_CALL');
|
|
181
|
+
});
|
|
182
|
+
it('sends YT address as tokensOut', async () => {
|
|
183
|
+
let capturedUrl = '';
|
|
184
|
+
server.use(http.get(`${BASE_URL}/v2/sdk/1/convert`, ({ request }) => {
|
|
185
|
+
capturedUrl = request.url;
|
|
186
|
+
return HttpResponse.json(CONVERT_RESPONSE);
|
|
187
|
+
}));
|
|
188
|
+
const provider = new PendleYieldProvider();
|
|
189
|
+
await provider.resolve('buy_yt', {
|
|
190
|
+
market: '0xMarketAddr',
|
|
191
|
+
tokenIn: '0xUnderlying',
|
|
192
|
+
amountIn: '1000000',
|
|
193
|
+
}, CONTEXT);
|
|
194
|
+
const url = new URL(capturedUrl);
|
|
195
|
+
expect(url.searchParams.get('tokensOut')).toBe('0xYTAddr');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('unknown action', () => {
|
|
199
|
+
it('throws on unknown action name', async () => {
|
|
200
|
+
const provider = new PendleYieldProvider();
|
|
201
|
+
await expect(provider.resolve('unknown_action', {}, CONTEXT)).rejects.toThrow('Unknown Pendle action');
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe('input validation', () => {
|
|
205
|
+
it('rejects buy_pt with missing market', async () => {
|
|
206
|
+
const provider = new PendleYieldProvider();
|
|
207
|
+
await expect(provider.resolve('buy_pt', { tokenIn: '0xA', amountIn: '100' }, CONTEXT)).rejects.toThrow();
|
|
208
|
+
});
|
|
209
|
+
it('rejects buy_pt with missing amountIn', async () => {
|
|
210
|
+
const provider = new PendleYieldProvider();
|
|
211
|
+
await expect(provider.resolve('buy_pt', { market: '0xM', tokenIn: '0xA' }, CONTEXT)).rejects.toThrow();
|
|
212
|
+
});
|
|
213
|
+
it('rejects buy_yt with missing tokenIn', async () => {
|
|
214
|
+
const provider = new PendleYieldProvider();
|
|
215
|
+
await expect(provider.resolve('buy_yt', { market: '0xM', amountIn: '100' }, CONTEXT)).rejects.toThrow();
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe('IPositionProvider', () => {
|
|
219
|
+
it('getProviderName returns pendle', () => {
|
|
220
|
+
const provider = new PendleYieldProvider();
|
|
221
|
+
expect(provider.getProviderName()).toBe('pendle');
|
|
222
|
+
});
|
|
223
|
+
it('getSupportedCategories returns YIELD', () => {
|
|
224
|
+
const provider = new PendleYieldProvider();
|
|
225
|
+
expect(provider.getSupportedCategories()).toEqual(['YIELD']);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=pendle-provider.test.js.map
|