@continuumdao/ctm-mpc-defi 0.2.35 → 0.2.36
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/agent/catalog.cjs +850 -1
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1650 -1
- package/dist/agent/catalog.js +825 -2
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/pendle/SKILL.md +63 -0
- package/dist/agent/skills/yield-compare/SKILL.md +7 -4
- package/dist/core/index.cjs +2 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +129 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +129 -2
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/pendle/index.cjs +1530 -0
- package/dist/protocols/evm/pendle/index.cjs.map +1 -0
- package/dist/protocols/evm/pendle/index.d.ts +463 -0
- package/dist/protocols/evm/pendle/index.js +1463 -0
- package/dist/protocols/evm/pendle/index.js.map +1 -0
- package/package.json +6 -1
package/dist/index.d.ts
CHANGED
|
@@ -12,5 +12,6 @@ export { NEAR_CHAIN_CATEGORY, nearChainCategoryModule } from './chains/near/inde
|
|
|
12
12
|
export { uniswapV4, uniswapV4ProtocolModule } from './protocols/evm/uniswap-v4/index.js';
|
|
13
13
|
export { curveDao, curveDaoProtocolModule } from './protocols/evm/curve-dao/index.js';
|
|
14
14
|
export { aerodromeProtocolModule } from './protocols/evm/aerodrome/index.js';
|
|
15
|
+
export { pendleProtocolModule } from './protocols/evm/pendle/index.js';
|
|
15
16
|
import 'viem';
|
|
16
17
|
import 'abitype';
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,8 @@ var init_expiry = __esm({
|
|
|
27
27
|
"hyperliquid",
|
|
28
28
|
"arcus",
|
|
29
29
|
"curve-dao",
|
|
30
|
-
"aerodrome"
|
|
30
|
+
"aerodrome",
|
|
31
|
+
"pendle"
|
|
31
32
|
]);
|
|
32
33
|
}
|
|
33
34
|
});
|
|
@@ -3656,11 +3657,137 @@ var aerodromeProtocolModule = {
|
|
|
3656
3657
|
};
|
|
3657
3658
|
registerProtocolModule(aerodromeProtocolModule);
|
|
3658
3659
|
|
|
3660
|
+
// src/protocols/evm/pendle/support.ts
|
|
3661
|
+
var PENDLE_PROTOCOL_ID = "pendle";
|
|
3662
|
+
var PENDLE_CORE_API_BASE = "https://api-v2.pendle.finance/core";
|
|
3663
|
+
var PENDLE_CHAIN_CACHE_MS = 30 * 60 * 1e3;
|
|
3664
|
+
|
|
3665
|
+
// src/protocols/evm/pendle/api.ts
|
|
3666
|
+
var FETCH_TIMEOUT_MS = 12e4;
|
|
3667
|
+
var PendleApiError = class extends Error {
|
|
3668
|
+
status;
|
|
3669
|
+
path;
|
|
3670
|
+
constructor(message, status, path) {
|
|
3671
|
+
super(message);
|
|
3672
|
+
this.name = "PendleApiError";
|
|
3673
|
+
this.status = status;
|
|
3674
|
+
this.path = path;
|
|
3675
|
+
}
|
|
3676
|
+
};
|
|
3677
|
+
function sleep(ms) {
|
|
3678
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
3679
|
+
}
|
|
3680
|
+
function queryString(params) {
|
|
3681
|
+
const q = new URLSearchParams();
|
|
3682
|
+
for (const [k, v] of Object.entries(params)) {
|
|
3683
|
+
if (v === void 0 || v === "") continue;
|
|
3684
|
+
q.set(k, String(v));
|
|
3685
|
+
}
|
|
3686
|
+
const s = q.toString();
|
|
3687
|
+
return s ? `?${s}` : "";
|
|
3688
|
+
}
|
|
3689
|
+
async function pendleCoreFetch(args) {
|
|
3690
|
+
const path = args.path.startsWith("/") ? args.path : `/${args.path}`;
|
|
3691
|
+
const url = `${PENDLE_CORE_API_BASE}${path}${queryString(args.query ?? {})}`;
|
|
3692
|
+
const headers = { Accept: "application/json" };
|
|
3693
|
+
if (args.apiKey?.trim()) headers.Authorization = `Bearer ${args.apiKey.trim()}`;
|
|
3694
|
+
if (args.body !== void 0) headers["Content-Type"] = "application/json";
|
|
3695
|
+
let lastError;
|
|
3696
|
+
for (let attempt = 0; attempt < 4; attempt++) {
|
|
3697
|
+
const ac = new AbortController();
|
|
3698
|
+
const timer = setTimeout(() => ac.abort(), FETCH_TIMEOUT_MS);
|
|
3699
|
+
try {
|
|
3700
|
+
const res = await fetch(url, {
|
|
3701
|
+
method: args.method ?? "GET",
|
|
3702
|
+
headers,
|
|
3703
|
+
body: args.body === void 0 ? void 0 : JSON.stringify(args.body),
|
|
3704
|
+
signal: ac.signal
|
|
3705
|
+
});
|
|
3706
|
+
if (res.status === 429) {
|
|
3707
|
+
const wait = Math.min(8e3, 500 * 2 ** attempt);
|
|
3708
|
+
await sleep(wait);
|
|
3709
|
+
lastError = new PendleApiError(`Pendle API rate limited (429) on ${path}`, 429, path);
|
|
3710
|
+
continue;
|
|
3711
|
+
}
|
|
3712
|
+
const text = await res.text();
|
|
3713
|
+
if (!res.ok) {
|
|
3714
|
+
throw new PendleApiError(
|
|
3715
|
+
`Pendle API ${res.status} ${path}: ${text.slice(0, 400)}`,
|
|
3716
|
+
res.status,
|
|
3717
|
+
path
|
|
3718
|
+
);
|
|
3719
|
+
}
|
|
3720
|
+
if (!text.trim()) return {};
|
|
3721
|
+
return JSON.parse(text);
|
|
3722
|
+
} catch (err) {
|
|
3723
|
+
lastError = err;
|
|
3724
|
+
if (err instanceof PendleApiError && err.status !== 429) throw err;
|
|
3725
|
+
if (attempt < 3 && (err instanceof PendleApiError || err?.name === "AbortError")) {
|
|
3726
|
+
await sleep(Math.min(8e3, 400 * 2 ** attempt));
|
|
3727
|
+
continue;
|
|
3728
|
+
}
|
|
3729
|
+
throw err;
|
|
3730
|
+
} finally {
|
|
3731
|
+
clearTimeout(timer);
|
|
3732
|
+
}
|
|
3733
|
+
}
|
|
3734
|
+
throw lastError instanceof Error ? lastError : new Error(String(lastError));
|
|
3735
|
+
}
|
|
3736
|
+
|
|
3737
|
+
// src/protocols/evm/pendle/discover.ts
|
|
3738
|
+
var chainIdsCache = null;
|
|
3739
|
+
async function pendleFetchSupportedChainIds() {
|
|
3740
|
+
const now = Date.now();
|
|
3741
|
+
if (chainIdsCache && now - chainIdsCache.at < PENDLE_CHAIN_CACHE_MS) return chainIdsCache.chainIds;
|
|
3742
|
+
const json = await pendleCoreFetch({ path: "/v1/chains" });
|
|
3743
|
+
const ids = Array.isArray(json.chainIds) ? json.chainIds.map((n) => Number(n)).filter((n) => Number.isFinite(n) && n > 0) : [];
|
|
3744
|
+
chainIdsCache = { at: now, chainIds: ids };
|
|
3745
|
+
return ids;
|
|
3746
|
+
}
|
|
3747
|
+
async function isPendleChainSupported(chainId) {
|
|
3748
|
+
try {
|
|
3749
|
+
const ids = await pendleFetchSupportedChainIds();
|
|
3750
|
+
if (ids.length === 0) return true;
|
|
3751
|
+
return ids.includes(chainId);
|
|
3752
|
+
} catch {
|
|
3753
|
+
return true;
|
|
3754
|
+
}
|
|
3755
|
+
}
|
|
3756
|
+
|
|
3757
|
+
// src/protocols/evm/pendle/index.ts
|
|
3758
|
+
var pendleProtocolModule = {
|
|
3759
|
+
id: PENDLE_PROTOCOL_ID,
|
|
3760
|
+
chainCategory: "evm",
|
|
3761
|
+
isChainSupported(ctx) {
|
|
3762
|
+
if (ctx.chainCategory !== "evm") return false;
|
|
3763
|
+
const n = typeof ctx.chainId === "number" ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10);
|
|
3764
|
+
if (!Number.isFinite(n)) return false;
|
|
3765
|
+
return isPendleChainSupported(n);
|
|
3766
|
+
},
|
|
3767
|
+
isTokenSupported(token) {
|
|
3768
|
+
if (token.category !== "evm") return false;
|
|
3769
|
+
return token.kind === "native" || token.kind === "erc20";
|
|
3770
|
+
},
|
|
3771
|
+
actions: [
|
|
3772
|
+
{ id: "pendle.fetch-markets", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "List live Pendle markets (TVL-ranked, cap 100, matured omitted)", commonParams: [], params: {} },
|
|
3773
|
+
{ id: "pendle.search-assets", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Search live PT/YT/SY/underlying (matured only if address-pinned)", commonParams: [], params: {} },
|
|
3774
|
+
{ id: "pendle.swap", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Swap token \u2194 PT/YT via Hosted SDK convert", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3775
|
+
{ id: "pendle.mint-py", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Mint PT + YT", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3776
|
+
{ id: "pendle.redeem-py", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Redeem PT + YT (PT only after expiry)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3777
|
+
{ id: "pendle.add-liquidity", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Add Pendle AMM liquidity", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3778
|
+
{ id: "pendle.fetch-positions", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "List this wallet\u2019s Pendle LP (including matured)", commonParams: [], params: {} },
|
|
3779
|
+
{ id: "pendle.remove-liquidity", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Remove Pendle AMM liquidity", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3780
|
+
{ id: "pendle.redeem-rewards", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Redeem on-chain SY/YT/LP interest and incentives (not merkle airdrops)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} }
|
|
3781
|
+
]
|
|
3782
|
+
};
|
|
3783
|
+
registerProtocolModule(pendleProtocolModule);
|
|
3784
|
+
|
|
3659
3785
|
// src/index.ts
|
|
3660
3786
|
registerProtocolModule(uniswapV4ProtocolModule);
|
|
3661
3787
|
registerProtocolModule(curveDaoProtocolModule);
|
|
3662
3788
|
registerProtocolModule(aerodromeProtocolModule);
|
|
3789
|
+
registerProtocolModule(pendleProtocolModule);
|
|
3663
3790
|
|
|
3664
|
-
export { COINGECKO_PLATFORM_BY_CHAIN_ID, DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS, DEFI_PROTOCOLS_WITH_30MIN_EXPIRY, EIP712_SIGN_REQUEST_KIND, NEAR_CHAIN_CATEGORY, PAYLOAD_SIGN_ED25519_REQUEST_KIND, SOLANA_CHAIN_CATEGORY, aerodromeProtocolModule, approveStepsToEvmTxSteps, buildConditionalErc20ApproveSteps, buildEip712Multisign, buildEvmMultisignBatch, buildPayloadSignEd25519MultisignBody, coingeckoPlatformForChainId, coreChainCategoryModule, curveDao, curveDaoProtocolModule, defiMultisignExpiryUnixSeconds, evmChainCategoryModule, finalizeMultisign, getAaveGraphqlProxyUrl, getActionsByChainCategory, getCoingeckoProxyUrl, getEulerGraphqlProxyUrl, getEulerV3ApiProxyBase, getJsonViaOptionalProxy, getMapleGraphqlProxyUrl, getMorphoGraphqlProxyUrl, getMorphoMidnightRestProxyUrl, getProtocolModule, getProtocolModules, isEvmNativeToken, matchEvmTokenKind, mergePurposeText, nearChainCategoryModule, normalizeCurveRouterAmountString, normalizeHumanDecimalAmount, parseEvmChainIdToNumber, postJsonViaOptionalProxy, publicClientForRpc, registerProtocolModule, resolveErc20Decimals, routerSwapGasLimitFromEstimate, setAaveGraphqlProxyUrl, setCoingeckoProxyUrl, setEulerGraphqlProxyUrl, setEulerV3ApiProxyBase, setMapleGraphqlProxyUrl, setMorphoGraphqlProxyUrl, setMorphoMidnightRestProxyUrl, solanaChainCategoryModule, uniswapV4, uniswapV4ProtocolModule };
|
|
3791
|
+
export { COINGECKO_PLATFORM_BY_CHAIN_ID, DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS, DEFI_PROTOCOLS_WITH_30MIN_EXPIRY, EIP712_SIGN_REQUEST_KIND, NEAR_CHAIN_CATEGORY, PAYLOAD_SIGN_ED25519_REQUEST_KIND, SOLANA_CHAIN_CATEGORY, aerodromeProtocolModule, approveStepsToEvmTxSteps, buildConditionalErc20ApproveSteps, buildEip712Multisign, buildEvmMultisignBatch, buildPayloadSignEd25519MultisignBody, coingeckoPlatformForChainId, coreChainCategoryModule, curveDao, curveDaoProtocolModule, defiMultisignExpiryUnixSeconds, evmChainCategoryModule, finalizeMultisign, getAaveGraphqlProxyUrl, getActionsByChainCategory, getCoingeckoProxyUrl, getEulerGraphqlProxyUrl, getEulerV3ApiProxyBase, getJsonViaOptionalProxy, getMapleGraphqlProxyUrl, getMorphoGraphqlProxyUrl, getMorphoMidnightRestProxyUrl, getProtocolModule, getProtocolModules, isEvmNativeToken, matchEvmTokenKind, mergePurposeText, nearChainCategoryModule, normalizeCurveRouterAmountString, normalizeHumanDecimalAmount, parseEvmChainIdToNumber, pendleProtocolModule, postJsonViaOptionalProxy, publicClientForRpc, registerProtocolModule, resolveErc20Decimals, routerSwapGasLimitFromEstimate, setAaveGraphqlProxyUrl, setCoingeckoProxyUrl, setEulerGraphqlProxyUrl, setEulerV3ApiProxyBase, setMapleGraphqlProxyUrl, setMorphoGraphqlProxyUrl, setMorphoMidnightRestProxyUrl, solanaChainCategoryModule, uniswapV4, uniswapV4ProtocolModule };
|
|
3665
3792
|
//# sourceMappingURL=index.js.map
|
|
3666
3793
|
//# sourceMappingURL=index.js.map
|