@continuumdao/ctm-mpc-defi 0.2.48 → 0.2.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/agent/catalog.cjs +1083 -4
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +1191 -7
  4. package/dist/agent/catalog.js +1047 -5
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/derive/SKILL.md +112 -0
  7. package/dist/agent/skills/hyperliquid/SKILL.md +22 -2
  8. package/dist/chains/evm/index.d.ts +118 -6
  9. package/dist/chains/near/index.d.ts +7 -1
  10. package/dist/chains/solana/index.d.ts +7 -1
  11. package/dist/core/index.cjs +2 -1
  12. package/dist/core/index.cjs.map +1 -1
  13. package/dist/core/index.d.ts +138 -7
  14. package/dist/core/index.js +2 -1
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/index.cjs +2 -1
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +848 -16
  19. package/dist/index.js +2 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/protocols/evm/aave-v4/index.d.ts +600 -6
  22. package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
  23. package/dist/protocols/evm/aerodrome/index.d.ts +125 -5
  24. package/dist/protocols/evm/aerodrome/index.js.map +1 -1
  25. package/dist/protocols/evm/arcus/index.d.ts +66 -2
  26. package/dist/protocols/evm/circle-cctp/index.d.ts +71 -2
  27. package/dist/protocols/evm/compound-v3/index.d.ts +52 -1
  28. package/dist/protocols/evm/continuum-dao/index.d.ts +56 -1
  29. package/dist/protocols/evm/curve-dao/index.d.ts +66 -2
  30. package/dist/protocols/evm/derive/index.cjs +2655 -0
  31. package/dist/protocols/evm/derive/index.cjs.map +1 -0
  32. package/dist/protocols/evm/derive/index.d.ts +859 -0
  33. package/dist/protocols/evm/derive/index.js +2536 -0
  34. package/dist/protocols/evm/derive/index.js.map +1 -0
  35. package/dist/protocols/evm/ethena/index.d.ts +52 -1
  36. package/dist/protocols/evm/euler-v2/index.d.ts +115 -16
  37. package/dist/protocols/evm/gmx/index.d.ts +66 -2
  38. package/dist/protocols/evm/hyperliquid/index.cjs +545 -267
  39. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  40. package/dist/protocols/evm/hyperliquid/index.d.ts +152 -7
  41. package/dist/protocols/evm/hyperliquid/index.js +535 -269
  42. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  43. package/dist/protocols/evm/lido/index.d.ts +52 -1
  44. package/dist/protocols/evm/maple/index.d.ts +52 -1
  45. package/dist/protocols/evm/morpho/index.d.ts +115 -4
  46. package/dist/protocols/evm/pendle/index.cjs +2 -1
  47. package/dist/protocols/evm/pendle/index.cjs.map +1 -1
  48. package/dist/protocols/evm/pendle/index.d.ts +125 -5
  49. package/dist/protocols/evm/pendle/index.js +2 -1
  50. package/dist/protocols/evm/pendle/index.js.map +1 -1
  51. package/dist/protocols/evm/permit2/index.d.ts +14 -1
  52. package/dist/protocols/evm/sky/index.d.ts +52 -1
  53. package/dist/protocols/evm/uniswap-v4/index.d.ts +78 -4
  54. package/dist/protocols/evm/venice/index.d.ts +52 -1
  55. package/package.json +7 -2
  56. package/dist/buildBatch-tsEUVn_a.d.ts +0 -45
  57. package/dist/eip712Multisign-6oNIlObj.d.ts +0 -39
  58. package/dist/envelope-Cm-llShH.d.ts +0 -37
  59. package/dist/merklDistributor-CdqtZC9N.d.ts +0 -65
  60. package/dist/multisign-Dr0j9fHm.d.ts +0 -489
  61. package/dist/registry-BvsXh0-r.d.ts +0 -8
  62. package/dist/types-RJpoU4Pc.d.ts +0 -34
  63. package/dist/types-lIfv59N1.d.ts +0 -63
package/dist/index.d.ts CHANGED
@@ -1,17 +1,849 @@
1
- export { C as ChainCategory, a as ChainSupportContext, E as EvmTokenKind, K as KeyGenSubset, b as KeyGenSubsetForPermit, M as MultisignBuildResult, c as MultisignCommonArgs, N as NearTokenKind, P as ParamDoc, d as ProtocolActionDescriptor, e as ProtocolModule, S as SolanaTokenKind, T as TokenRef } from './types-lIfv59N1.js';
1
+ import { NodeReadAuth } from '@continuumdao/continuum-node-sdk';
2
2
  export { getClientIdFromKeyGenResult as firstClientIdFromKeyGen } from '@continuumdao/continuum-node-sdk';
3
- export { BuildPayloadSignEd25519MultisignBodyArgs, DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS, DEFI_PROTOCOLS_WITH_30MIN_EXPIRY, PAYLOAD_SIGN_ED25519_REQUEST_KIND, PayloadSignEd25519Delivery, buildPayloadSignEd25519MultisignBody, defiEvmTransport, defiMultisignExpiryUnixSeconds, getAaveGraphqlProxyUrl, getCoingeckoProxyUrl, getDefiEvmRpcTransportFactory, getEulerGraphqlProxyUrl, getEulerV3ApiProxyBase, getJsonViaOptionalProxy, getMapleGraphqlProxyUrl, getMorphoGraphqlProxyUrl, getMorphoMidnightRestProxyUrl, mergePurposeText, postJsonViaOptionalProxy, setAaveGraphqlProxyUrl, setCoingeckoProxyUrl, setDefiEvmRpcTransportFactory, setEulerGraphqlProxyUrl, setEulerV3ApiProxyBase, setMapleGraphqlProxyUrl, setMorphoGraphqlProxyUrl, setMorphoMidnightRestProxyUrl } from './core/index.js';
4
- export { C as ChainCategoryBuildInput, a as ChainCategoryModule, M as MultisignLeg, c as coreChainCategoryModule, f as finalizeMultisign } from './envelope-Cm-llShH.js';
5
- export { g as getActionsByChainCategory, a as getProtocolModule, b as getProtocolModules, r as registerProtocolModule } from './registry-BvsXh0-r.js';
6
- export { B as BuildEip712MultisignArgs, a as BuildEip712MultisignLeg, E as EIP712_SIGN_REQUEST_KIND, b as Eip712MultisignDelivery, c as Eip712TypedDataField, d as Eip712TypedDataPayload, e as buildEip712Multisign } from './eip712Multisign-6oNIlObj.js';
7
- export { E as EvmChainDetail, a as EvmProtocolContext, b as EvmTxStep, i as isEvmNativeToken, m as matchEvmTokenKind } from './types-RJpoU4Pc.js';
8
- export { E as EvmBatchMetaBuilder, a as EvmBuildBatchArgs, b as buildEvmMultisignBatch, e as evmChainCategoryModule } from './buildBatch-tsEUVn_a.js';
9
- export { COINGECKO_PLATFORM_BY_CHAIN_ID, ConditionalApproveStep, approveStepsToEvmTxSteps, buildConditionalErc20ApproveSteps, coingeckoPlatformForChainId, normalizeCurveRouterAmountString, normalizeHumanDecimalAmount, parseEvmChainIdToNumber, publicClientForRpc, resolveErc20Decimals, routerSwapGasLimitFromEstimate } from './chains/evm/index.js';
10
- export { SOLANA_CHAIN_CATEGORY, solanaChainCategoryModule } from './chains/solana/index.js';
11
- export { NEAR_CHAIN_CATEGORY, nearChainCategoryModule } from './chains/near/index.js';
12
- export { uniswapV4, uniswapV4ProtocolModule } from './protocols/evm/uniswap-v4/index.js';
13
- export { curveDao, curveDaoProtocolModule } from './protocols/evm/curve-dao/index.js';
14
- export { aerodromeProtocolModule } from './protocols/evm/aerodrome/index.js';
15
- export { pendleProtocolModule } from './protocols/evm/pendle/index.js';
16
- import 'viem';
17
- import 'abitype';
3
+ import { http, Transport, TypedDataDomain, Address, PublicClient } from 'viem';
4
+
5
+ /** Aligns with app NonEvmChainType + 'evm'. Extend as mpc-auth adds chains. */
6
+ type ChainCategory = 'evm' | 'solana' | 'near' | 'sui' | 'ton' | 'stellar';
7
+ type MultisignBuildResult = {
8
+ bodyForSign: Record<string, unknown>;
9
+ messageToSign: string;
10
+ };
11
+ type EvmTokenKind = 'native' | 'erc20' | 'erc721' | 'ctmerc20' | 'ctmrwa1';
12
+ type SolanaTokenKind = 'native' | 'spl' | 'spl2022';
13
+ type NearTokenKind = 'native' | 'nep141';
14
+ type TokenRef = {
15
+ category: 'evm';
16
+ kind: EvmTokenKind;
17
+ address: `0x${string}`;
18
+ } | {
19
+ category: 'solana';
20
+ kind: SolanaTokenKind;
21
+ mint: string;
22
+ } | {
23
+ category: 'near';
24
+ kind: NearTokenKind;
25
+ contractId: string;
26
+ };
27
+ type ParamDoc = {
28
+ type: string;
29
+ required: boolean;
30
+ description: string;
31
+ };
32
+ type ProtocolActionDescriptor = {
33
+ id: string;
34
+ protocolId: string;
35
+ chainCategory: ChainCategory;
36
+ description: string;
37
+ commonParams: Array<'keyGen' | 'purposeText' | 'useCustomGas' | 'useCustomFees'>;
38
+ params: Record<string, ParamDoc>;
39
+ };
40
+ type ChainSupportContext = {
41
+ chainCategory: ChainCategory;
42
+ chainId: string | number;
43
+ };
44
+ interface ProtocolModule {
45
+ id: string;
46
+ chainCategory: ChainCategory;
47
+ isChainSupported(ctx: ChainSupportContext): boolean | Promise<boolean>;
48
+ isTokenSupported(token: TokenRef): boolean | Promise<boolean>;
49
+ actions: ProtocolActionDescriptor[];
50
+ }
51
+ interface MultisignCommonArgs {
52
+ keyGen: KeyGenSubset;
53
+ purposeText: string;
54
+ /** Optional Unix seconds (UTC) for POST /multiSignRequest expiryDate. */
55
+ expiryDate?: number;
56
+ }
57
+ type KeyGenSubset = {
58
+ pubkeyhex?: string;
59
+ keylist?: string[];
60
+ ClientKeys?: Record<string, string>;
61
+ groupId?: string;
62
+ GroupId?: string;
63
+ };
64
+ /** App-compatible alias used by multisign builders and Permit2 helpers. */
65
+ type KeyGenSubsetForPermit = KeyGenSubset;
66
+
67
+ /** Merge user purpose text with an optional batch / protocol suffix. */
68
+ declare function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string;
69
+
70
+ interface MultisignLeg {
71
+ msgHash: string;
72
+ msgRaw: string;
73
+ destinationAddress: string;
74
+ signatureText: string;
75
+ audit: Record<string, unknown>;
76
+ feeSnapshot: Record<string, unknown>;
77
+ proposalTxParams?: Record<string, unknown>;
78
+ /** Payable value wei string for first leg only when relevant */
79
+ valueWei?: bigint;
80
+ }
81
+ interface ChainCategoryBuildInput {
82
+ keyGen: KeyGenSubset;
83
+ purposeText: string;
84
+ purposeSuffix?: string;
85
+ destinationChainID: string;
86
+ legs: MultisignLeg[];
87
+ extraJSON?: Record<string, unknown>;
88
+ /** Top-level destination address (first leg destination if omitted) */
89
+ destinationAddress?: string;
90
+ /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */
91
+ expiryDate?: number;
92
+ }
93
+ interface ChainCategoryModule {
94
+ category: ChainCategory;
95
+ finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult;
96
+ }
97
+ /**
98
+ * Assemble mpc-auth `bodyForSign` from category-built legs.
99
+ * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).
100
+ */
101
+ declare function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult;
102
+ declare const coreChainCategoryModule: ChainCategoryModule;
103
+
104
+ declare function registerProtocolModule(mod: ProtocolModule): void;
105
+ declare function getProtocolModules(): readonly ProtocolModule[];
106
+ declare function getProtocolModule(id: string): ProtocolModule | undefined;
107
+ declare function getActionsByChainCategory(category: string): ProtocolModule['actions'];
108
+
109
+ /**
110
+ * Optional browser → Next.js API proxy paths for DeFi upstream calls.
111
+ * Set once from continuumdao-node-app client bootstrap.
112
+ */
113
+ declare function setAaveGraphqlProxyUrl(url: string | undefined): void;
114
+ declare function getAaveGraphqlProxyUrl(): string | undefined;
115
+ declare function setEulerGraphqlProxyUrl(url: string | undefined): void;
116
+ declare function getEulerGraphqlProxyUrl(): string | undefined;
117
+ declare function setEulerV3ApiProxyBase(url: string | undefined): void;
118
+ declare function getEulerV3ApiProxyBase(): string | undefined;
119
+ declare function setMapleGraphqlProxyUrl(url: string | undefined): void;
120
+ declare function getMapleGraphqlProxyUrl(): string | undefined;
121
+ declare function setMorphoGraphqlProxyUrl(url: string | undefined): void;
122
+ declare function getMorphoGraphqlProxyUrl(): string | undefined;
123
+ declare function setMorphoMidnightRestProxyUrl(url: string | undefined): void;
124
+ declare function getMorphoMidnightRestProxyUrl(): string | undefined;
125
+ declare function setCoingeckoProxyUrl(url: string | undefined): void;
126
+ declare function getCoingeckoProxyUrl(): string | undefined;
127
+ declare function postJsonViaOptionalProxy<T>(args: {
128
+ directUrl: string;
129
+ body: unknown;
130
+ proxyUrl?: string;
131
+ proxyEnvelope?: unknown;
132
+ }): Promise<T>;
133
+ declare function getJsonViaOptionalProxy<T>(args: {
134
+ directUrl: string;
135
+ /** When set, GET this URL instead of directUrl (same path semantics as caller built). */
136
+ proxyUrl?: string;
137
+ }): Promise<T>;
138
+
139
+ declare function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void;
140
+ declare function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined;
141
+ /** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */
142
+ declare function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport;
143
+
144
+ declare const EIP712_SIGN_REQUEST_KIND: "eip712";
145
+ type Eip712TypedDataField = {
146
+ name: string;
147
+ type: string;
148
+ };
149
+ type Eip712TypedDataPayload = {
150
+ domain: TypedDataDomain;
151
+ types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>;
152
+ primaryType: string;
153
+ message: Record<string, unknown>;
154
+ };
155
+ type Eip712MultisignDelivery = Record<string, unknown> & {
156
+ kind: string;
157
+ };
158
+ type BuildEip712MultisignLeg = {
159
+ typedData: Eip712TypedDataPayload;
160
+ delivery: Eip712MultisignDelivery;
161
+ audit?: Record<string, unknown>;
162
+ };
163
+ type BuildEip712MultisignArgs = {
164
+ keyGen: KeyGenSubset;
165
+ purposeText: string;
166
+ purposeSuffix?: string;
167
+ /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */
168
+ destinationChainID: string;
169
+ destinationAddress: string;
170
+ legs: readonly BuildEip712MultisignLeg[];
171
+ expiryDate?: number;
172
+ };
173
+ /**
174
+ * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).
175
+ * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.
176
+ */
177
+ declare function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult;
178
+
179
+ declare const PAYLOAD_SIGN_ED25519_REQUEST_KIND: "payload_sign_ed25519";
180
+ type PayloadSignEd25519Delivery = Record<string, unknown> & {
181
+ kind: string;
182
+ };
183
+ type BuildPayloadSignEd25519MultisignBodyArgs = {
184
+ keyGen: KeyGenSubset;
185
+ purposeText: string;
186
+ purposeSuffix?: string;
187
+ destinationChainID: string;
188
+ destinationAddress: string;
189
+ /** UTF-8 bytes to sign (Arcus canonical JSON). */
190
+ messageUtf8: string;
191
+ /** secp256k1 pub key hex for billing when signing with paired ed25519 KeyGen. */
192
+ billingKeyGenPubKey?: string;
193
+ delivery: PayloadSignEd25519Delivery;
194
+ audit?: Record<string, unknown>;
195
+ expiryDate?: number;
196
+ signatureText?: string;
197
+ };
198
+ /**
199
+ * Build mpc-auth multiSignRequest for Ed25519 FROST signing over variable-length UTF-8 (Arcus Scheme 1).
200
+ * `msgHash` is hex of the raw message bytes (not SHA-256); mpc-auth givre worker signs these bytes directly.
201
+ */
202
+ declare function buildPayloadSignEd25519MultisignBody(args: BuildPayloadSignEd25519MultisignBodyArgs): MultisignBuildResult;
203
+
204
+ /** Default MPC sign-request agreement window for fast-moving DeFi protocols (30 minutes). */
205
+ declare const DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS: number;
206
+ /** Protocol ids that default to 30-minute expiry when `expiryDate` is omitted on multisign MCP tools. */
207
+ declare const DEFI_PROTOCOLS_WITH_30MIN_EXPIRY: Set<string>;
208
+ declare function defiMultisignExpiryUnixSeconds(protocolId: string | undefined, explicitExpiryDate?: number | null): number | undefined;
209
+
210
+ type EvmChainDetail = {
211
+ legacy?: boolean;
212
+ gasLimit?: number;
213
+ gasMultiplier?: number;
214
+ gasPrice?: number;
215
+ baseFee?: number;
216
+ priorityFee?: number;
217
+ baseFeeMultiplier?: number;
218
+ };
219
+ interface EvmProtocolContext extends MultisignCommonArgs {
220
+ chainCategory: 'evm';
221
+ chainId: number;
222
+ rpcUrl: string;
223
+ executorAddress: Address;
224
+ chainDetail: EvmChainDetail;
225
+ useCustomGas: boolean;
226
+ customGasChainDetails?: Record<string, unknown> | null;
227
+ }
228
+ type EvmTxStep = {
229
+ to: Address;
230
+ data: `0x${string}`;
231
+ value: bigint;
232
+ /** Fallback when estimateGas reverts */
233
+ fallbackGas?: bigint;
234
+ /** When set, use routerSwapGasLimitFromEstimate instead of plain estimate */
235
+ routerSwap?: boolean;
236
+ };
237
+ declare function isEvmNativeToken(address: string): boolean;
238
+ declare function matchEvmTokenKind(kind: EvmTokenKind, address: string): boolean;
239
+
240
+ type EvmBatchMetaBuilder = (args: {
241
+ step: EvmTxStep;
242
+ index: number;
243
+ gasLimit: bigint;
244
+ }) => Record<string, unknown>;
245
+ type EvmBuildBatchArgs = {
246
+ context: EvmProtocolContext;
247
+ steps: EvmTxStep[];
248
+ purposeSuffix?: string;
249
+ buildBatchMeta: EvmBatchMetaBuilder;
250
+ /** First leg msgRaw without 0x prefix; defaults to first step calldata */
251
+ firstMsgRawNo0x?: string;
252
+ destinationAddress?: Address;
253
+ /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */
254
+ payableValueWei?: bigint;
255
+ resolveGasLimit?: (args: {
256
+ step: EvmTxStep;
257
+ index: number;
258
+ estimatedGas: bigint;
259
+ publicClient: PublicClient;
260
+ }) => Promise<bigint> | bigint;
261
+ /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */
262
+ estimateGasForStep?: (args: {
263
+ step: EvmTxStep;
264
+ index: number;
265
+ publicClient: PublicClient;
266
+ executor: Address;
267
+ }) => Promise<bigint> | bigint;
268
+ };
269
+ /**
270
+ * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.
271
+ */
272
+ declare function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult>;
273
+ declare const evmChainCategoryModule: {
274
+ category: "evm";
275
+ finalizeMultisign: typeof finalizeMultisign;
276
+ buildEvmMultisignBatch: typeof buildEvmMultisignBatch;
277
+ };
278
+
279
+ /** Parse chain id for comparisons (decimal, 0x hex, CAIP-2 eip155:N, bigint). */
280
+ declare function parseEvmChainIdToNumber(chainId: string | number | bigint | null | undefined): number;
281
+
282
+ /**
283
+ * Canonical human decimal string for a token amount (truncate to token decimals via wei round-trip).
284
+ * Used by Curve router and multisign dialogs across protocols.
285
+ */
286
+ declare function normalizeHumanDecimalAmount(raw: string, tokenDecimals: number): string;
287
+ /** @deprecated Prefer normalizeHumanDecimalAmount; kept for Curve router parity. */
288
+ declare const normalizeCurveRouterAmountString: typeof normalizeHumanDecimalAmount;
289
+
290
+ declare function publicClientForRpc(chainId: number, rpcUrl: string): PublicClient;
291
+ /**
292
+ * Resolve ERC-20 decimals: on-chain `decimals()` is authoritative; optional registry/API hints
293
+ * are validated and logged when they disagree (common when registry is stale).
294
+ */
295
+ declare function resolveErc20Decimals(args: {
296
+ publicClient: PublicClient;
297
+ token: Address;
298
+ registryDecimals?: number;
299
+ apiDecimals?: number;
300
+ }): Promise<number>;
301
+ type ConditionalApproveStep = {
302
+ to: Address;
303
+ data: `0x${string}`;
304
+ value: bigint;
305
+ fallbackGas?: bigint;
306
+ };
307
+ /**
308
+ * Standard deposit-path approve batch: skip when allowance sufficient; reset-to-zero when needed.
309
+ */
310
+ declare function buildConditionalErc20ApproveSteps(args: {
311
+ publicClient: PublicClient;
312
+ token: Address;
313
+ spender: Address;
314
+ owner: Address;
315
+ amountWei: bigint;
316
+ fallbackGas?: bigint;
317
+ }): Promise<ConditionalApproveStep[]>;
318
+ declare function approveStepsToEvmTxSteps(steps: ConditionalApproveStep[]): EvmTxStep[];
319
+
320
+ /**
321
+ * CoinGecko asset platform id by mainnet chainId (contract + token_price endpoints).
322
+ * IDs from CoinGecko GET /asset_platforms (chain_identifier → id).
323
+ * Keep in sync with continuumdao-node-app `COINGECKO_PLATFORM_BY_CHAIN_ID`.
324
+ */
325
+ declare const COINGECKO_PLATFORM_BY_CHAIN_ID: Record<string, string>;
326
+ declare function coingeckoPlatformForChainId(chainId: string | number): string | undefined;
327
+
328
+ /** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */
329
+ declare function routerSwapGasLimitFromEstimate(estimatedGas: bigint, chainGasLimit?: number | null): bigint;
330
+
331
+ declare const solanaChainCategoryModule: {
332
+ category: "solana";
333
+ };
334
+
335
+ declare const SOLANA_CHAIN_CATEGORY: "solana";
336
+
337
+ declare const nearChainCategoryModule: {
338
+ category: "near";
339
+ };
340
+
341
+ declare const NEAR_CHAIN_CATEGORY: "near";
342
+
343
+ declare function isUniswapV4ChainSupported(chainId: string | number | bigint | null | undefined): boolean;
344
+ type UniswapV4PositionManagerKind = 'standard' | 'permissioned';
345
+
346
+ /** POST /v1/quote `type` (same as `uniswap_trade_quote.py` `--type`). */
347
+ type UniswapQuoteTradeType = 'EXACT_INPUT' | 'EXACT_OUTPUT';
348
+ interface UniswapTradeQuoteParams {
349
+ amount: string;
350
+ tokenIn: string;
351
+ tokenOut: string;
352
+ uniswapApiKey: string;
353
+ /**
354
+ * KeyGen id — used to resolve `swapper` from GET /getKeyGenResultById unless `swapper` is set.
355
+ * Required unless `swapper` is set.
356
+ */
357
+ keyGen?: string;
358
+ type: UniswapQuoteTradeType;
359
+ /**
360
+ * Slippage as percent, e.g. `0.5` for 0.5%. If omitted, the body uses
361
+ * `autoSlippage: "DEFAULT"` (same as the Python script when `--slippage` is not set).
362
+ */
363
+ slippage?: number | string;
364
+ /**
365
+ * Chain id for the input side (`tokenInChainId` in the HTTP body; Python `--chain-id`).
366
+ * You may set **`chainId` or `tokenInChainId`** (same meaning); if both are set, `chainId` wins.
367
+ * Same-chain quote: set one chain here and omit `tokenOutChainId` (or set both to the same id).
368
+ */
369
+ chainId?: string | number;
370
+ /**
371
+ * Same as `chainId` (input chain). If `chainId` is omitted, this must be set.
372
+ */
373
+ tokenInChainId?: string | number;
374
+ /**
375
+ * Output chain id; defaults to the input chain when omitted (Python: empty `--token-out-chain-id`).
376
+ */
377
+ tokenOutChainId?: string | number;
378
+ /**
379
+ * When `true`, sends `x-permit2-disabled: true` (Uniswap’s header for classic ERC-20 allowance; no permitData in the response).
380
+ * Omit or set `false` for the default Trade API routing (default).
381
+ */
382
+ permit2Disabled?: boolean;
383
+ /**
384
+ * MPC wallet (swapper) address. If omitted, `managementNodeUrl` is used with `keyGen`
385
+ * to call GET /getKeyGenResultById.
386
+ */
387
+ swapper?: `0x${string}` | string;
388
+ /**
389
+ * Management node base URL (MPC), required when `swapper` is not provided.
390
+ */
391
+ managementNodeUrl?: string;
392
+ /** For Browser HTTPS: Bearer on GET to /getKeyGenResultById. */
393
+ nodeReadAuth?: NodeReadAuth;
394
+ /** Trade API base without `/quote` (default: Uniswap gateway v1). */
395
+ baseUrl?: string;
396
+ /** `x-universal-router-version` (default `2.0`, aligned with Python / v4). */
397
+ universalRouterVersion?: string;
398
+ /**
399
+ * When true (default), call Trade API `/v1/permissions` before quoting.
400
+ * Permissioned tokens force UR 2.2.0. Quotes are still allowed when not allowlisted
401
+ * (Uniswap UX guidance); swap submit must assert allowlist.
402
+ */
403
+ checkPermissions?: boolean;
404
+ /** Skip the permissions preflight. */
405
+ skipPermissionCheck?: boolean;
406
+ /** Force UR 2.2.0 without calling permissions (tests / known permissioned tokens). */
407
+ forcePermissionedRouter?: boolean;
408
+ signal?: AbortSignal;
409
+ /** Override for tests. */
410
+ fetchImpl?: typeof fetch;
411
+ }
412
+ /**
413
+ * `POST` Uniswap Trade API `/v1/quote` — TypeScript version of
414
+ * `mpc-config/recipes/uniswapV4/uniswap_trade_quote.py` (core HTTP call + KeyGen → swapper).
415
+ *
416
+ * CORS: calling the Trade API from a browser may be blocked. Prefer a server / route
417
+ * handler, or use this in Node. KeyGen resolution uses a GET to your management node
418
+ * and follows the same read-auth pattern as the app.
419
+ */
420
+ declare function uniswapTradeQuote(args: UniswapTradeQuoteParams): Promise<Record<string, unknown>>;
421
+
422
+ type TransactionRequest = {
423
+ to: string;
424
+ from?: string;
425
+ data: string;
426
+ value: string;
427
+ /** Trade API or eth-style field name */
428
+ gasLimit?: string;
429
+ gas?: string;
430
+ chainId?: number;
431
+ };
432
+ type CreateSwapResponse = {
433
+ requestId?: string;
434
+ swap: TransactionRequest;
435
+ gasFee?: string;
436
+ };
437
+ /**
438
+ * `POST /v1/swap` — builds swap calldata (Universal Router) from a quote fetched with classic-allowance header `x-permit2-disabled: true`.
439
+ * @see https://api-docs.uniswap.org/api-reference/swapping/swap
440
+ */
441
+ declare function uniswapCreateSwap(args: {
442
+ uniswapApiKey: string;
443
+ baseUrl?: string;
444
+ /** Full `POST /quote` JSON (must include classic `quote`). */
445
+ fullQuoteFromPermit: Record<string, unknown>;
446
+ universalRouterVersion?: string;
447
+ fetchImpl?: typeof fetch;
448
+ /**
449
+ * In the browser, direct `POST` to `trade-api.gateway.uniswap.org` is blocked by CORS.
450
+ * When true (default in browser), the request goes to same-origin `POST /api/uniswap/swap` which proxies server-side. Set `false` to force a direct call (e.g. tests, Node scripts).
451
+ */
452
+ useServerProxy?: boolean;
453
+ /**
454
+ * Universal Router swap deadline (unix seconds). Defaults to now + {@link UNISWAP_SWAP_DEFAULT_DEADLINE_SEC_OFFSET}.
455
+ * Omitting this caused short API defaults and `TransactionDeadlinePassed` after MPC delay.
456
+ */
457
+ swapTransactionDeadlineUnix?: number;
458
+ }): Promise<CreateSwapResponse>;
459
+ type ChainRow$1 = {
460
+ legacy?: boolean;
461
+ gasLimit?: number;
462
+ gasMultiplier?: number;
463
+ gasPrice?: number;
464
+ baseFee?: number;
465
+ priorityFee?: number;
466
+ baseFeeMultiplier?: number;
467
+ };
468
+ type UniswapV4SkipPermit2BatchArg = {
469
+ keyGen: KeyGenSubsetForPermit;
470
+ chainId: number;
471
+ rpcUrl: string;
472
+ chainDetail: ChainRow$1;
473
+ useCustomGas: boolean;
474
+ customGasChainDetails?: Record<string, unknown> | null;
475
+ /** `0x0` = native (ETH) in; otherwise ERC-20. */
476
+ tokenIn: Address;
477
+ executorAddress: Address;
478
+ swap: TransactionRequest;
479
+ createSwapResponse: {
480
+ requestId?: string;
481
+ gasFee?: string;
482
+ swap: TransactionRequest;
483
+ };
484
+ fullQuoteSnapshot: Record<string, unknown>;
485
+ purposeText: string;
486
+ swapDeadlineUnix: number;
487
+ slippagePercent?: number;
488
+ /** When set, re-check Trade API permissions before building the sign request. */
489
+ uniswapApiKey?: string;
490
+ tokenOut?: string;
491
+ /** Skip allowlist assert (tests only). */
492
+ skipPermissionCheck?: boolean;
493
+ };
494
+ /**
495
+ * **Classic ERC-20 allowance** batch (on-chain approvals only), two shapes:
496
+ *
497
+ * - **`swap.to` == inner `router` (calldata arg)** — Universal Router is the tx target; tokens move via the **allowance hub**:
498
+ * `ERC20→hub`, hub `approve(router)`, swap (3 txs).
499
+ *
500
+ * - **`swap.to` ≠ inner `router`** — Trade uses a **dispatcher** that calls `ERC20.transferFrom` with **`msg.sender` = `swap.to`**.
501
+ * Approving only the hub is insufficient (`cast run` shows `transfer amount exceeds allowance`). Path:
502
+ * `ERC20.approve(swap.to)`, swap (2 txs).
503
+ *
504
+ * Approved amount: `max(quote.input, calldata amount)`; with **EXACT_OUTPUT** trades, multiply by `(1 + slippage%)` from the quote modal (input can grow vs the quoted figure).
505
+ */
506
+ declare function buildEvmMultisignBodyUniswapV4SkipPermit2Batch(args: UniswapV4SkipPermit2BatchArg): Promise<{
507
+ bodyForSign: Record<string, unknown>;
508
+ messageToSign: string;
509
+ }>;
510
+
511
+ type UniswapLpExistingPool = {
512
+ token0Address: string;
513
+ token1Address: string;
514
+ /** V4 pool id (bytes32 hex); V3 pool contract address. */
515
+ poolReference: string;
516
+ };
517
+ type UniswapLpNewPool = {
518
+ token0Address: string;
519
+ token1Address: string;
520
+ fee: number;
521
+ tickSpacing: number;
522
+ hooks?: string;
523
+ initialPrice: string;
524
+ };
525
+ type UniswapLpIndependentToken = {
526
+ tokenAddress: string;
527
+ amount: string;
528
+ };
529
+ type UniswapLpPriceBounds = {
530
+ minPrice: string;
531
+ maxPrice: string;
532
+ };
533
+ type UniswapLpTickBounds = {
534
+ tickLower: number;
535
+ tickUpper: number;
536
+ };
537
+ declare function uniswapLpCreatePosition(args: {
538
+ uniswapApiKey: string;
539
+ walletAddress: string;
540
+ chainId: number;
541
+ existingPool?: UniswapLpExistingPool;
542
+ newPool?: UniswapLpNewPool;
543
+ independentToken: UniswapLpIndependentToken;
544
+ priceBounds?: UniswapLpPriceBounds;
545
+ tickBounds?: UniswapLpTickBounds;
546
+ slippageTolerance?: number;
547
+ deadline?: number;
548
+ simulateTransaction?: boolean;
549
+ batchPermitData?: Record<string, unknown>;
550
+ signature?: string;
551
+ baseUrl?: string;
552
+ fetchImpl?: typeof fetch;
553
+ useServerProxy?: boolean;
554
+ }): Promise<Record<string, unknown>>;
555
+ declare function uniswapLpIncreasePosition(args: {
556
+ uniswapApiKey: string;
557
+ walletAddress: string;
558
+ chainId: number;
559
+ token0Address: string;
560
+ token1Address: string;
561
+ nftTokenId: string | number;
562
+ independentToken: UniswapLpIndependentToken;
563
+ slippageTolerance?: number;
564
+ deadline?: number;
565
+ simulateTransaction?: boolean;
566
+ v4BatchPermitData?: Record<string, unknown>;
567
+ signature?: string;
568
+ baseUrl?: string;
569
+ fetchImpl?: typeof fetch;
570
+ useServerProxy?: boolean;
571
+ }): Promise<Record<string, unknown>>;
572
+ declare function uniswapLpDecreasePosition(args: {
573
+ uniswapApiKey: string;
574
+ walletAddress: string;
575
+ chainId: number;
576
+ token0Address: string;
577
+ token1Address: string;
578
+ nftTokenId: string | number;
579
+ liquidityPercentageToDecrease: number;
580
+ slippageTolerance?: number;
581
+ deadline?: number;
582
+ simulateTransaction?: boolean;
583
+ baseUrl?: string;
584
+ fetchImpl?: typeof fetch;
585
+ useServerProxy?: boolean;
586
+ }): Promise<Record<string, unknown>>;
587
+ declare function uniswapLpClaimFees(args: {
588
+ uniswapApiKey: string;
589
+ walletAddress: string;
590
+ chainId: number;
591
+ tokenId: string | number;
592
+ simulateTransaction?: boolean;
593
+ baseUrl?: string;
594
+ fetchImpl?: typeof fetch;
595
+ useServerProxy?: boolean;
596
+ }): Promise<Record<string, unknown>>;
597
+
598
+ type UniswapLpAction = 'mint' | 'increase' | 'decrease' | 'collect';
599
+
600
+ type ChainRow = {
601
+ legacy?: boolean;
602
+ gasLimit?: number;
603
+ gasMultiplier?: number;
604
+ gasPrice?: number;
605
+ baseFee?: number;
606
+ priorityFee?: number;
607
+ baseFeeMultiplier?: number;
608
+ };
609
+ type LiquidityMultisignCommon = {
610
+ keyGen: KeyGenSubsetForPermit;
611
+ chainId: number;
612
+ rpcUrl: string;
613
+ chainDetail: ChainRow;
614
+ useCustomGas: boolean;
615
+ customGasChainDetails?: Record<string, unknown> | null;
616
+ executorAddress: Address;
617
+ purposeText: string;
618
+ lpResponse: Record<string, unknown>;
619
+ action: UniswapLpAction;
620
+ /** Wrapped native token when pool uses native ETH as currency0/1. */
621
+ nativeWrapped?: Address;
622
+ nftTokenId?: string | number;
623
+ poolReference?: string;
624
+ /**
625
+ * `permissioned` → approve Permit2 then Permit2.approve(PermPosM) (Uniswap docs).
626
+ * Default `standard` keeps classic ERC-20 approve to Position Manager.
627
+ */
628
+ positionManagerKind?: UniswapV4PositionManagerKind;
629
+ /** Override Permit2 path; defaults true when positionManagerKind is permissioned. */
630
+ usePermit2Approvals?: boolean;
631
+ };
632
+ declare function buildEvmMultisignBodyUniswapV4MintLiquidityBatch(args: Omit<LiquidityMultisignCommon, 'action' | 'nftTokenId'> & {
633
+ poolReference?: string;
634
+ }): Promise<{
635
+ bodyForSign: Record<string, unknown>;
636
+ messageToSign: string;
637
+ }>;
638
+ declare function buildEvmMultisignBodyUniswapV4IncreaseLiquidityBatch(args: Omit<LiquidityMultisignCommon, 'action'> & {
639
+ nftTokenId: string | number;
640
+ }): Promise<{
641
+ bodyForSign: Record<string, unknown>;
642
+ messageToSign: string;
643
+ }>;
644
+ declare function buildEvmMultisignBodyUniswapV4DecreaseLiquidityBatch(args: Omit<LiquidityMultisignCommon, 'action'> & {
645
+ nftTokenId: string | number;
646
+ }): Promise<{
647
+ bodyForSign: Record<string, unknown>;
648
+ messageToSign: string;
649
+ }>;
650
+ declare function buildEvmMultisignBodyUniswapV4CollectFeesBatch(args: Omit<LiquidityMultisignCommon, 'action'> & {
651
+ nftTokenId: string | number;
652
+ }): Promise<{
653
+ bodyForSign: Record<string, unknown>;
654
+ messageToSign: string;
655
+ }>;
656
+
657
+ type UniswapV4PositionRow = {
658
+ tokenId: string;
659
+ positionManager: Address;
660
+ owner: Address;
661
+ name?: string;
662
+ symbol?: string;
663
+ };
664
+ type UniswapV4PositionScanProgress = {
665
+ latestBlock: string;
666
+ scanFromBlock: string;
667
+ scanningFromBlock: string;
668
+ scanningToBlock: string;
669
+ foundCount: number;
670
+ targetCount: number;
671
+ };
672
+ /**
673
+ * List v4 position NFT tokenIds owned by `walletAddress` via Position Manager Transfer logs.
674
+ * Uses small `eth_getLogs` chunks (default 200 blocks) and scans backward so wallets with
675
+ * few positions finish without walking full chain history.
676
+ */
677
+ declare function listUniswapV4PositionsForWallet(args: {
678
+ chainId: number;
679
+ rpcUrl: string;
680
+ walletAddress: Address | string;
681
+ positionManagerAddress?: Address | string;
682
+ fromBlock?: bigint;
683
+ maxBlocksToScan?: bigint;
684
+ chunkSize?: bigint;
685
+ onProgress?: (progress: UniswapV4PositionScanProgress) => void;
686
+ signal?: AbortSignal;
687
+ }): Promise<UniswapV4PositionRow[]>;
688
+
689
+ type SwapExactInputArgs = {
690
+ keyGen: KeyGenSubsetForPermit;
691
+ purposeText: string;
692
+ chainId: number;
693
+ rpcUrl: string;
694
+ executorAddress: Address;
695
+ chainDetail: EvmChainDetail;
696
+ useCustomGas: boolean;
697
+ customGasChainDetails?: Record<string, unknown> | null;
698
+ tokenIn: Address;
699
+ uniswapApiKey: string;
700
+ fullQuote: Record<string, unknown>;
701
+ slippagePercent?: number;
702
+ swapTransactionDeadlineUnix?: number;
703
+ baseUrl?: string;
704
+ };
705
+ /** Quote then build swap multisign body for EXACT_INPUT (caller must have fetched quote first for EXACT_OUTPUT). */
706
+ declare function swapFromQuote(args: SwapExactInputArgs & {
707
+ swap: Awaited<ReturnType<typeof uniswapCreateSwap>>;
708
+ }): Promise<{
709
+ bodyForSign: Record<string, unknown>;
710
+ messageToSign: string;
711
+ }>;
712
+ declare function quoteSwap(args: Parameters<typeof uniswapTradeQuote>[0]): Promise<Record<string, unknown>>;
713
+ declare function createSwap(args: Parameters<typeof uniswapCreateSwap>[0]): Promise<Awaited<ReturnType<typeof uniswapCreateSwap>>>;
714
+ declare function swapExactInput(args: SwapExactInputArgs & {
715
+ tradeType?: UniswapQuoteTradeType;
716
+ }): Promise<{
717
+ bodyForSign: Record<string, unknown>;
718
+ messageToSign: string;
719
+ }>;
720
+
721
+ interface UniswapLimitOrderQuoteParams {
722
+ amount: string;
723
+ tokenIn: string;
724
+ tokenOut: string;
725
+ limitPrice: string;
726
+ uniswapApiKey: string;
727
+ type: UniswapQuoteTradeType;
728
+ orderDeadline: number;
729
+ keyGen?: string;
730
+ swapper?: string;
731
+ managementNodeUrl?: string;
732
+ nodeReadAuth?: NodeReadAuth;
733
+ chainId?: string | number;
734
+ tokenInChainId?: string | number;
735
+ tokenOutChainId?: string | number;
736
+ baseUrl?: string;
737
+ signal?: AbortSignal;
738
+ fetchImpl?: typeof fetch;
739
+ }
740
+ /**
741
+ * POST /v1/limit_order_quote — UniswapX limit order quote (mainnet only).
742
+ */
743
+ declare function uniswapLimitOrderQuote(args: UniswapLimitOrderQuoteParams): Promise<Record<string, unknown>>;
744
+ declare function fetchUniswapXLimitOrders(args: {
745
+ swapper: string;
746
+ chainId?: number;
747
+ uniswapApiKey?: string;
748
+ baseUrl?: string;
749
+ limit?: number;
750
+ fetchImpl?: typeof fetch;
751
+ }): Promise<Record<string, unknown>>;
752
+ declare function uniswapFetchLimitOrdersMcp(args: {
753
+ chainId?: number;
754
+ swapper?: string;
755
+ keyGen?: string;
756
+ managementNodeUrl?: string;
757
+ uniswapApiKey?: string;
758
+ limit?: number;
759
+ baseUrl?: string;
760
+ nodeReadAuth?: NodeReadAuth;
761
+ fetchImpl?: typeof fetch;
762
+ }): Promise<Record<string, unknown>>;
763
+
764
+ type UniswapLimitOrderMultisignMcpArgs = {
765
+ keyGen: KeyGenSubsetForPermit;
766
+ chainId: number;
767
+ purposeText: string;
768
+ fullLimitQuote: Record<string, unknown>;
769
+ executorAddress: Address;
770
+ uniswapApiKey: string;
771
+ tradeApiBaseUrl?: string;
772
+ expiryDate?: number;
773
+ };
774
+ /** MCP handler: enrichMultisignContext supplies executorAddress + keyGen. */
775
+ declare function buildEvmMultisignBodyUniswapV4LimitOrderBatchFromMcp(args: UniswapLimitOrderMultisignMcpArgs): Promise<MultisignBuildResult>;
776
+
777
+ declare const uniswapV4ProtocolModule: ProtocolModule;
778
+
779
+ declare const uniswapV4: {
780
+ quoteSwap: typeof quoteSwap;
781
+ createSwap: typeof createSwap;
782
+ swapExactInput: typeof swapExactInput;
783
+ swapFromQuote: typeof swapFromQuote;
784
+ buildSwapMultisignBody: typeof buildEvmMultisignBodyUniswapV4SkipPermit2Batch;
785
+ limitOrderQuote: typeof uniswapLimitOrderQuote;
786
+ buildLimitOrderMultisignBody: typeof buildEvmMultisignBodyUniswapV4LimitOrderBatchFromMcp;
787
+ fetchLimitOrders: typeof fetchUniswapXLimitOrders;
788
+ fetchLimitOrdersMcp: typeof uniswapFetchLimitOrdersMcp;
789
+ quote: typeof uniswapTradeQuote;
790
+ createLiquidityPosition: typeof uniswapLpCreatePosition;
791
+ increaseLiquidityPosition: typeof uniswapLpIncreasePosition;
792
+ decreaseLiquidityPosition: typeof uniswapLpDecreasePosition;
793
+ claimLiquidityFees: typeof uniswapLpClaimFees;
794
+ buildMintLiquidityMultisignBody: typeof buildEvmMultisignBodyUniswapV4MintLiquidityBatch;
795
+ buildIncreaseLiquidityMultisignBody: typeof buildEvmMultisignBodyUniswapV4IncreaseLiquidityBatch;
796
+ buildDecreaseLiquidityMultisignBody: typeof buildEvmMultisignBodyUniswapV4DecreaseLiquidityBatch;
797
+ buildCollectFeesMultisignBody: typeof buildEvmMultisignBodyUniswapV4CollectFeesBatch;
798
+ listPositions: typeof listUniswapV4PositionsForWallet;
799
+ isChainSupported: typeof isUniswapV4ChainSupported;
800
+ };
801
+
802
+ declare function isCurveApiChainSupported(chainId: string | number | bigint | null | undefined): boolean;
803
+
804
+ /** Live `@curvefi/api` instance with pools already fetched, plus the routing graph. */
805
+ type CurveFullSession = {
806
+ /** Same reference used for getCoinsData / router; pools already loaded. */
807
+ curve: any;
808
+ adj: Map<string, Set<string>>;
809
+ swappableNodeKeys: ReadonlySet<string>;
810
+ wrappedNative: string | undefined;
811
+ };
812
+ /**
813
+ * One init + `fetchAllCurvePools` + graph build. Reuse this session for the asset list and the
814
+ * Curve dialog to avoid duplicating the Curve API work.
815
+ */
816
+ declare function loadFullCurveSessionForRpc(rpcUrl: string): Promise<CurveFullSession>;
817
+
818
+ /**
819
+ * Build `POST /multiSignRequest` body: optional ERC-20 approve(s) to the Curve router, then
820
+ * `CurveRouterNG.exchange` via `@curvefi/api` `router.populateSwap`.
821
+ */
822
+ declare function buildEvmMultisignBodyCurveDaoBatch(args: {
823
+ keyGen: KeyGenSubsetForPermit;
824
+ chainId: number;
825
+ rpcUrl: string;
826
+ chainDetail: EvmChainDetail;
827
+ useCustomGas: boolean;
828
+ customGasChainDetails?: Record<string, unknown> | null;
829
+ tokenIn: Address;
830
+ tokenOut: string;
831
+ amountHuman: string;
832
+ slippagePercent: number;
833
+ executorAddress: Address;
834
+ purposeText: string;
835
+ }): Promise<MultisignBuildResult>;
836
+
837
+ declare const curveDaoProtocolModule: ProtocolModule;
838
+
839
+ declare const curveDao: {
840
+ buildSwapMultisignBody: typeof buildEvmMultisignBodyCurveDaoBatch;
841
+ isChainSupported: typeof isCurveApiChainSupported;
842
+ loadSession: typeof loadFullCurveSessionForRpc;
843
+ };
844
+
845
+ declare const aerodromeProtocolModule: ProtocolModule;
846
+
847
+ declare const pendleProtocolModule: ProtocolModule;
848
+
849
+ export { type BuildEip712MultisignArgs, type BuildEip712MultisignLeg, type BuildPayloadSignEd25519MultisignBodyArgs, COINGECKO_PLATFORM_BY_CHAIN_ID, type ChainCategory, type ChainCategoryBuildInput, type ChainCategoryModule, type ChainSupportContext, type ConditionalApproveStep, DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS, DEFI_PROTOCOLS_WITH_30MIN_EXPIRY, EIP712_SIGN_REQUEST_KIND, type Eip712MultisignDelivery, type Eip712TypedDataField, type Eip712TypedDataPayload, type EvmBatchMetaBuilder, type EvmBuildBatchArgs, type EvmChainDetail, type EvmProtocolContext, type EvmTokenKind, type EvmTxStep, type KeyGenSubset, type KeyGenSubsetForPermit, type MultisignBuildResult, type MultisignCommonArgs, type MultisignLeg, NEAR_CHAIN_CATEGORY, type NearTokenKind, PAYLOAD_SIGN_ED25519_REQUEST_KIND, type ParamDoc, type PayloadSignEd25519Delivery, type ProtocolActionDescriptor, type ProtocolModule, SOLANA_CHAIN_CATEGORY, type SolanaTokenKind, type TokenRef, aerodromeProtocolModule, approveStepsToEvmTxSteps, buildConditionalErc20ApproveSteps, buildEip712Multisign, buildEvmMultisignBatch, buildPayloadSignEd25519MultisignBody, coingeckoPlatformForChainId, coreChainCategoryModule, curveDao, curveDaoProtocolModule, defiEvmTransport, defiMultisignExpiryUnixSeconds, evmChainCategoryModule, finalizeMultisign, getAaveGraphqlProxyUrl, getActionsByChainCategory, getCoingeckoProxyUrl, getDefiEvmRpcTransportFactory, getEulerGraphqlProxyUrl, getEulerV3ApiProxyBase, getJsonViaOptionalProxy, getMapleGraphqlProxyUrl, getMorphoGraphqlProxyUrl, getMorphoMidnightRestProxyUrl, getProtocolModule, getProtocolModules, isEvmNativeToken, matchEvmTokenKind, mergePurposeText, nearChainCategoryModule, normalizeCurveRouterAmountString, normalizeHumanDecimalAmount, parseEvmChainIdToNumber, pendleProtocolModule, postJsonViaOptionalProxy, publicClientForRpc, registerProtocolModule, resolveErc20Decimals, routerSwapGasLimitFromEstimate, setAaveGraphqlProxyUrl, setCoingeckoProxyUrl, setDefiEvmRpcTransportFactory, setEulerGraphqlProxyUrl, setEulerV3ApiProxyBase, setMapleGraphqlProxyUrl, setMorphoGraphqlProxyUrl, setMorphoMidnightRestProxyUrl, solanaChainCategoryModule, uniswapV4, uniswapV4ProtocolModule };