@0xkoaj/sdk 0.0.1-beta.14 → 0.0.1-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+ import { QuoteParams, QuoteSourceMetadata, SourceQuoteResponse, SourceQuoteTransaction, BuildTxParams } from './types';
2
+ import { AlwaysValidConfigAndContextSource } from './base/always-valid-source';
3
+ import { type Address as ViemAddress } from 'viem';
4
+ type CowAMMSupport = {
5
+ buyOrders: true;
6
+ swapAndTransfer: true;
7
+ };
8
+ type CowAMMConfig = {
9
+ appData?: string;
10
+ };
11
+ type CowAMMData = {
12
+ orderUid: string;
13
+ order: CowOrder;
14
+ validTo: number;
15
+ };
16
+ interface CowOrder {
17
+ sellToken: ViemAddress;
18
+ buyToken: ViemAddress;
19
+ receiver: ViemAddress;
20
+ sellAmount: string;
21
+ buyAmount: string;
22
+ validTo: number;
23
+ appData: string;
24
+ feeAmount: string;
25
+ kind: 'sell' | 'buy';
26
+ partiallyFillable: boolean;
27
+ sellTokenBalance: 'erc20' | 'internal' | 'external';
28
+ buyTokenBalance: 'erc20' | 'internal';
29
+ }
30
+ export declare class CowAMMQuoteSource extends AlwaysValidConfigAndContextSource<CowAMMSupport, CowAMMConfig, CowAMMData> {
31
+ getMetadata(): QuoteSourceMetadata<CowAMMSupport>;
32
+ quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, config, }: QuoteParams<CowAMMSupport, CowAMMConfig>): Promise<SourceQuoteResponse<CowAMMData>>;
33
+ buildTx({ request: { customData } }: BuildTxParams<CowAMMConfig, CowAMMData>): Promise<SourceQuoteTransaction>;
34
+ }
35
+ export {};
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CowAMMQuoteSource = void 0;
4
+ const _chains_1 = require("../../../chains");
5
+ const constants_1 = require("../../../shared/constants");
6
+ const utils_1 = require("../../../shared/utils");
7
+ const utils_2 = require("./utils");
8
+ const always_valid_source_1 = require("./base/always-valid-source");
9
+ const viem_1 = require("viem");
10
+ // Same contracts as CoW Swap
11
+ const VAULT_RELAYER = '0xC92E8bdf79f0507f65a392b0ab4667716BFE0110';
12
+ const GPV2_SETTLEMENT = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';
13
+ const API_ENDPOINTS = {
14
+ [_chains_1.Chains.ETHEREUM.chainId]: 'https://api.cow.fi/mainnet/api/v1',
15
+ [_chains_1.Chains.GNOSIS.chainId]: 'https://api.cow.fi/xdai/api/v1',
16
+ [_chains_1.Chains.ARBITRUM.chainId]: 'https://api.cow.fi/arbitrum_one/api/v1',
17
+ [_chains_1.Chains.BASE.chainId]: 'https://api.cow.fi/base/api/v1',
18
+ };
19
+ const DEFAULT_APP_DATA = '0x0000000000000000000000000000000000000000000000000000000000000000';
20
+ const COW_AMM_METADATA = {
21
+ name: 'CoW AMM',
22
+ supports: {
23
+ chains: [
24
+ _chains_1.Chains.ETHEREUM.chainId,
25
+ _chains_1.Chains.GNOSIS.chainId,
26
+ _chains_1.Chains.ARBITRUM.chainId,
27
+ _chains_1.Chains.BASE.chainId,
28
+ ],
29
+ swapAndTransfer: true,
30
+ buyOrders: true,
31
+ },
32
+ logoURI: 'ipfs://bafkreih75uruzdjtculei5md434pvtbw66gkzwcjb53kjgj4gz7xicuw54',
33
+ };
34
+ // Uses priceQuality: 'verified' — triggers on-chain solver simulation,
35
+ // giving CoW AMM pools a chance to compete and surface better rates.
36
+ class CowAMMQuoteSource extends always_valid_source_1.AlwaysValidConfigAndContextSource {
37
+ getMetadata() {
38
+ return COW_AMM_METADATA;
39
+ }
40
+ async quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, config, }) {
41
+ const evmChainId = chainId;
42
+ const apiEndpoint = API_ENDPOINTS[evmChainId];
43
+ if (!apiEndpoint) {
44
+ (0, utils_2.failed)(COW_AMM_METADATA, chainId, sellToken, buyToken, `Unsupported chain: ${chainId}`);
45
+ }
46
+ const chain = (0, _chains_1.getChainByKey)(chainId);
47
+ if (!chain) {
48
+ (0, utils_2.failed)(COW_AMM_METADATA, chainId, sellToken, buyToken, `Unknown chain: ${chainId}`);
49
+ }
50
+ const sellTokenMapped = (0, utils_1.isSameAddress)(sellToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : sellToken;
51
+ const buyTokenMapped = (0, utils_1.isSameAddress)(buyToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : buyToken;
52
+ const recipientAddress = recipient ?? takeFrom;
53
+ const validTo = (0, utils_1.calculateDeadline)(txValidFor ?? '30m');
54
+ const appData = config?.appData ?? DEFAULT_APP_DATA;
55
+ const quoteRequest = {
56
+ sellToken: sellTokenMapped,
57
+ buyToken: buyTokenMapped,
58
+ receiver: recipientAddress,
59
+ appData,
60
+ from: takeFrom,
61
+ priceQuality: 'verified', // triggers on-chain simulation for CoW AMM pool competition
62
+ signingScheme: 'presign',
63
+ onchainOrder: false,
64
+ ...(order.type === 'sell'
65
+ ? { kind: 'sell', sellAmountBeforeFee: order.sellAmount.toString() }
66
+ : { kind: 'buy', buyAmountAfterFee: order.buyAmount.toString() }),
67
+ };
68
+ const response = await fetchService.fetch(`${apiEndpoint}/quote`, {
69
+ method: 'POST',
70
+ headers: { 'Content-Type': 'application/json' },
71
+ body: JSON.stringify(quoteRequest),
72
+ timeout,
73
+ });
74
+ if (!response.ok) {
75
+ const errorText = await response.text();
76
+ (0, utils_2.failed)(COW_AMM_METADATA, chainId, sellToken, buyToken, errorText || `Failed with status ${response.status}`);
77
+ }
78
+ const quoteResponse = await response.json();
79
+ const cowOrder = quoteResponse.quote;
80
+ const orderDigest = computeOrderDigest(cowOrder, evmChainId);
81
+ const orderUid = computeOrderUid(orderDigest, takeFrom, cowOrder.validTo);
82
+ const sellAmount = BigInt(cowOrder.sellAmount);
83
+ const buyAmount = BigInt(cowOrder.buyAmount);
84
+ const feeAmount = BigInt(cowOrder.feeAmount);
85
+ const totalSellAmount = sellAmount + feeAmount;
86
+ const quote = {
87
+ sellAmount: totalSellAmount,
88
+ buyAmount,
89
+ estimatedGas: 100000n,
90
+ allowanceTarget: (0, utils_2.calculateAllowanceTarget)(sellToken, VAULT_RELAYER),
91
+ customData: {
92
+ orderUid,
93
+ order: {
94
+ sellToken: cowOrder.sellToken,
95
+ buyToken: cowOrder.buyToken,
96
+ receiver: cowOrder.receiver,
97
+ sellAmount: cowOrder.sellAmount,
98
+ buyAmount: cowOrder.buyAmount,
99
+ validTo: cowOrder.validTo,
100
+ appData: cowOrder.appData,
101
+ feeAmount: cowOrder.feeAmount,
102
+ kind: cowOrder.kind,
103
+ partiallyFillable: cowOrder.partiallyFillable,
104
+ sellTokenBalance: cowOrder.sellTokenBalance,
105
+ buyTokenBalance: cowOrder.buyTokenBalance,
106
+ },
107
+ validTo: cowOrder.validTo,
108
+ },
109
+ };
110
+ return (0, utils_2.addQuoteSlippage)(quote, order.type, slippagePercentage);
111
+ }
112
+ async buildTx({ request: { customData } }) {
113
+ const { orderUid } = customData;
114
+ const calldata = (0, viem_1.encodeFunctionData)({
115
+ abi: GPV2_SETTLEMENT_ABI,
116
+ functionName: 'setPreSignature',
117
+ args: [orderUid, true],
118
+ });
119
+ return {
120
+ to: GPV2_SETTLEMENT,
121
+ calldata,
122
+ };
123
+ }
124
+ }
125
+ exports.CowAMMQuoteSource = CowAMMQuoteSource;
126
+ function computeOrderDigest(order, chainId) {
127
+ const ORDER_TYPE_HASH = (0, viem_1.keccak256)((0, viem_1.toHex)('Order(address sellToken,address buyToken,address receiver,uint256 sellAmount,uint256 buyAmount,uint32 validTo,bytes32 appData,uint256 feeAmount,string kind,bool partiallyFillable,string sellTokenBalance,string buyTokenBalance)'));
128
+ const DOMAIN_SEPARATOR = computeDomainSeparator(chainId);
129
+ const orderStructHash = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([
130
+ { type: 'bytes32' },
131
+ { type: 'address' },
132
+ { type: 'address' },
133
+ { type: 'address' },
134
+ { type: 'uint256' },
135
+ { type: 'uint256' },
136
+ { type: 'uint32' },
137
+ { type: 'bytes32' },
138
+ { type: 'uint256' },
139
+ { type: 'bytes32' },
140
+ { type: 'bool' },
141
+ { type: 'bytes32' },
142
+ { type: 'bytes32' },
143
+ ], [
144
+ ORDER_TYPE_HASH,
145
+ order.sellToken,
146
+ order.buyToken,
147
+ order.receiver,
148
+ BigInt(order.sellAmount),
149
+ BigInt(order.buyAmount),
150
+ order.validTo,
151
+ order.appData,
152
+ BigInt(order.feeAmount),
153
+ (0, viem_1.keccak256)((0, viem_1.toHex)(order.kind)),
154
+ order.partiallyFillable,
155
+ (0, viem_1.keccak256)((0, viem_1.toHex)(order.sellTokenBalance)),
156
+ (0, viem_1.keccak256)((0, viem_1.toHex)(order.buyTokenBalance)),
157
+ ]));
158
+ return (0, viem_1.keccak256)((0, viem_1.concat)(['0x1901', DOMAIN_SEPARATOR, orderStructHash]));
159
+ }
160
+ function computeDomainSeparator(chainId) {
161
+ const DOMAIN_TYPE_HASH = (0, viem_1.keccak256)((0, viem_1.toHex)('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'));
162
+ return (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([{ type: 'bytes32' }, { type: 'bytes32' }, { type: 'bytes32' }, { type: 'uint256' }, { type: 'address' }], [DOMAIN_TYPE_HASH, (0, viem_1.keccak256)((0, viem_1.toHex)('Gnosis Protocol')), (0, viem_1.keccak256)((0, viem_1.toHex)('v2')), BigInt(chainId), GPV2_SETTLEMENT]));
163
+ }
164
+ function computeOrderUid(orderDigest, owner, validTo) {
165
+ const validToHex = (0, viem_1.pad)((0, viem_1.toHex)(validTo), { size: 4 });
166
+ return (0, viem_1.concat)([orderDigest, owner, validToHex]);
167
+ }
168
+ const GPV2_SETTLEMENT_ABI = [
169
+ {
170
+ inputs: [
171
+ { name: 'orderUid', type: 'bytes' },
172
+ { name: 'signed', type: 'bool' },
173
+ ],
174
+ name: 'setPreSignature',
175
+ outputs: [],
176
+ stateMutability: 'nonpayable',
177
+ type: 'function',
178
+ },
179
+ ];
180
+ //# sourceMappingURL=cow-amm-quote-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cow-amm-quote-source.js","sourceRoot":"","sources":["../../../../src/services/quotes/quote-sources/cow-amm-quote-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { IQuoteSource, QuoteParams, QuoteSourceMetadata, SourceQuoteResponse, SourceQuoteTransaction, BuildTxParams } from './types';
2
+ type PendleConfig = {};
3
+ type PendleSupport = {
4
+ buyOrders: false;
5
+ swapAndTransfer: true;
6
+ };
7
+ type PendleData = {
8
+ tx: SourceQuoteTransaction;
9
+ };
10
+ export declare class PendleQuoteSource implements IQuoteSource<PendleSupport, PendleConfig, PendleData> {
11
+ getMetadata(): QuoteSourceMetadata<PendleSupport>;
12
+ quote({ components: { fetchService }, request }: QuoteParams<PendleSupport, PendleConfig>): Promise<SourceQuoteResponse<PendleData>>;
13
+ buildTx({ request }: BuildTxParams<PendleConfig, PendleData>): Promise<SourceQuoteTransaction>;
14
+ isConfigAndContextValidForQuoting(_config: Partial<PendleConfig> | undefined): _config is PendleConfig;
15
+ isConfigAndContextValidForTxBuilding(_config: Partial<PendleConfig> | undefined): _config is PendleConfig;
16
+ }
17
+ export {};
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PendleQuoteSource = void 0;
4
+ const _chains_1 = require("../../../chains");
5
+ const utils_1 = require("./utils");
6
+ const constants_1 = require("../../../shared/constants");
7
+ const utils_2 = require("../../../shared/utils");
8
+ const PENDLE_API_URL = 'https://api-v2.pendle.finance/core';
9
+ const PENDLE_METADATA = {
10
+ name: 'Pendle',
11
+ supports: {
12
+ chains: [
13
+ _chains_1.Chains.ETHEREUM.chainId,
14
+ _chains_1.Chains.ARBITRUM.chainId,
15
+ _chains_1.Chains.BNB_CHAIN.chainId,
16
+ _chains_1.Chains.OPTIMISM.chainId,
17
+ _chains_1.Chains.BASE.chainId,
18
+ _chains_1.Chains.MANTLE.chainId,
19
+ _chains_1.Chains.SONIC.chainId,
20
+ ],
21
+ swapAndTransfer: true,
22
+ buyOrders: false,
23
+ },
24
+ logoURI: 'ipfs://QmXhFJmjkBqBKb4YXpDHAGS2YKwW7uZiZtpATcWmjVnPV8',
25
+ };
26
+ class PendleQuoteSource {
27
+ getMetadata() {
28
+ return PENDLE_METADATA;
29
+ }
30
+ async quote({ components: { fetchService }, request }) {
31
+ const { chainId, sellToken, buyToken, order, accounts: { takeFrom, recipient }, config: { slippagePercentage, timeout }, } = request;
32
+ const chain = (0, _chains_1.getChainByKey)(chainId);
33
+ if (!chain) {
34
+ (0, utils_1.failed)(PENDLE_METADATA, chainId, sellToken, buyToken, `Unknown chain: ${chainId}`);
35
+ }
36
+ // Pendle doesn't handle raw native tokens — map to wrapped native
37
+ const tokenIn = (0, utils_2.isSameAddress)(sellToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : sellToken;
38
+ const tokenOut = (0, utils_2.isSameAddress)(buyToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : buyToken;
39
+ // Pendle slippage is 0-1 (e.g. 0.005 = 0.5%)
40
+ const slippage = slippagePercentage / 100;
41
+ const body = {
42
+ receiver: recipient ?? takeFrom,
43
+ slippage,
44
+ enableAggregator: true,
45
+ inputs: [{ token: tokenIn, amount: order.sellAmount.toString() }],
46
+ outputs: [tokenOut],
47
+ };
48
+ const response = await fetchService.fetch(`${PENDLE_API_URL}/v3/${chainId}/convert`, {
49
+ method: 'POST',
50
+ headers: { 'Content-Type': 'application/json' },
51
+ body: JSON.stringify(body),
52
+ timeout,
53
+ });
54
+ if (!response.ok) {
55
+ (0, utils_1.failed)(PENDLE_METADATA, chainId, sellToken, buyToken, await response.text());
56
+ }
57
+ const data = await response.json();
58
+ const route = data.routes?.[0];
59
+ if (!route?.tx || !route.outputs?.[0]) {
60
+ (0, utils_1.failed)(PENDLE_METADATA, chainId, sellToken, buyToken, 'No route found');
61
+ }
62
+ const buyAmount = BigInt(route.outputs[0].amount);
63
+ // Pendle enforces min amount on-chain based on slippage; mirror it here
64
+ const slippageBps = BigInt(Math.round(slippagePercentage * 100));
65
+ const minBuyAmount = (buyAmount * (10000n - slippageBps)) / 10000n;
66
+ return {
67
+ sellAmount: order.sellAmount,
68
+ maxSellAmount: order.sellAmount,
69
+ buyAmount,
70
+ minBuyAmount,
71
+ estimatedGas: 350000n,
72
+ allowanceTarget: (0, utils_1.calculateAllowanceTarget)(sellToken, route.tx.to),
73
+ type: 'sell',
74
+ customData: {
75
+ tx: {
76
+ to: route.tx.to,
77
+ calldata: route.tx.data,
78
+ value: BigInt(route.tx.value ?? '0'),
79
+ },
80
+ },
81
+ };
82
+ }
83
+ async buildTx({ request }) {
84
+ return request.customData.tx;
85
+ }
86
+ isConfigAndContextValidForQuoting(_config) {
87
+ return true;
88
+ }
89
+ isConfigAndContextValidForTxBuilding(_config) {
90
+ return true;
91
+ }
92
+ }
93
+ exports.PendleQuoteSource = PendleQuoteSource;
94
+ //# sourceMappingURL=pendle-quote-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendle-quote-source.js","sourceRoot":"","sources":["../../../../src/services/quotes/quote-sources/pendle-quote-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { QuoteParams, QuoteSourceMetadata, SourceQuoteResponse, SourceQuoteTransaction, BuildTxParams } from './types';
2
+ import { AlwaysValidConfigAndContextSource } from './base/always-valid-source';
3
+ type UniswapV4Support = {
4
+ buyOrders: true;
5
+ swapAndTransfer: true;
6
+ };
7
+ type UniswapV4Config = {};
8
+ type UniswapV4Data = {
9
+ tx: SourceQuoteTransaction;
10
+ };
11
+ export declare class UniswapV4QuoteSource extends AlwaysValidConfigAndContextSource<UniswapV4Support, UniswapV4Config, UniswapV4Data> {
12
+ getMetadata(): QuoteSourceMetadata<UniswapV4Support>;
13
+ quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, }: QuoteParams<UniswapV4Support>): Promise<SourceQuoteResponse<UniswapV4Data>>;
14
+ buildTx({ request }: BuildTxParams<UniswapV4Config, UniswapV4Data>): Promise<SourceQuoteTransaction>;
15
+ }
16
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UniswapV4QuoteSource = void 0;
4
+ const _chains_1 = require("../../../chains");
5
+ const constants_1 = require("../../../shared/constants");
6
+ const utils_1 = require("../../../shared/utils");
7
+ const utils_2 = require("./utils");
8
+ const always_valid_source_1 = require("./base/always-valid-source");
9
+ const _chains_2 = require("../../../chains");
10
+ const UNISWAP_V4_CHAINS = [
11
+ _chains_1.Chains.ETHEREUM.chainId,
12
+ _chains_1.Chains.OPTIMISM.chainId,
13
+ _chains_1.Chains.POLYGON.chainId,
14
+ _chains_1.Chains.ARBITRUM.chainId,
15
+ _chains_1.Chains.BASE.chainId,
16
+ _chains_1.Chains.BNB_CHAIN.chainId,
17
+ _chains_1.Chains.AVALANCHE.chainId,
18
+ _chains_1.Chains.UNICHAIN.chainId,
19
+ ];
20
+ const UNISWAP_V4_METADATA = {
21
+ name: 'Uniswap v4',
22
+ supports: {
23
+ chains: UNISWAP_V4_CHAINS,
24
+ swapAndTransfer: true,
25
+ buyOrders: true,
26
+ },
27
+ logoURI: 'ipfs://QmNa3YBYAYS5qSCLuXataV5XCbtxP9ZB4rHUfomRxrpRhJ',
28
+ };
29
+ class UniswapV4QuoteSource extends always_valid_source_1.AlwaysValidConfigAndContextSource {
30
+ getMetadata() {
31
+ return UNISWAP_V4_METADATA;
32
+ }
33
+ async quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, }) {
34
+ const isSellTokenNative = (0, utils_1.isSameAddress)(sellToken, constants_1.Addresses.NATIVE_TOKEN);
35
+ const isBuyTokenNative = (0, utils_1.isSameAddress)(buyToken, constants_1.Addresses.NATIVE_TOKEN);
36
+ const chain = (0, _chains_2.getChainByKey)(chainId);
37
+ const tokenIn = isSellTokenNative && chain ? chain.wToken : sellToken;
38
+ const tokenOut = isBuyTokenNative && chain ? chain.wToken : buyToken;
39
+ const amount = order.type === 'sell' ? order.sellAmount : order.buyAmount;
40
+ const deadline = Math.floor(Date.now() / 1000) + (0, utils_1.timeToSeconds)(txValidFor ?? '3h');
41
+ recipient = recipient ?? takeFrom;
42
+ const body = {
43
+ tokenInChainId: chainId,
44
+ tokenOutChainId: chainId,
45
+ tokenIn,
46
+ tokenOut,
47
+ amount: amount.toString(),
48
+ sendPortionEnabled: false,
49
+ type: order.type === 'sell' ? 'EXACT_INPUT' : 'EXACT_OUTPUT',
50
+ intent: 'quote',
51
+ configs: [
52
+ {
53
+ protocols: ['V4'],
54
+ routingType: 'CLASSIC',
55
+ recipient,
56
+ slippageTolerance: slippagePercentage.toString(),
57
+ deadline,
58
+ enableUniversalRouter: true,
59
+ },
60
+ ],
61
+ };
62
+ const headers = {
63
+ 'content-type': 'application/json',
64
+ origin: 'https://app.uniswap.org',
65
+ referer: 'https://app.uniswap.org/',
66
+ };
67
+ const response = await fetchService.fetch('https://api.uniswap.org/v2/quote', {
68
+ method: 'POST',
69
+ body: JSON.stringify(body),
70
+ headers,
71
+ timeout,
72
+ });
73
+ if (!response.ok) {
74
+ (0, utils_2.failed)(UNISWAP_V4_METADATA, chainId, sellToken, buyToken, await response.text());
75
+ }
76
+ const data = await response.json();
77
+ const quoteData = data.quote;
78
+ if (!quoteData?.methodParameters) {
79
+ (0, utils_2.failed)(UNISWAP_V4_METADATA, chainId, sellToken, buyToken, 'No v4 route found for this pair');
80
+ }
81
+ const { calldata, to: routerAddress, value: rawValue } = quoteData.methodParameters;
82
+ const quotedAmount = order.type === 'sell'
83
+ ? quoteData.output?.amount ?? quoteData.quoteDecimals
84
+ : quoteData.input?.amount ?? quoteData.quoteDecimals;
85
+ const sellAmount = order.type === 'sell' ? order.sellAmount : BigInt(quotedAmount);
86
+ const buyAmount = order.type === 'sell' ? BigInt(quotedAmount) : order.buyAmount;
87
+ const value = isSellTokenNative ? sellAmount : undefined;
88
+ const gasUseEstimate = BigInt(quoteData.gasUseEstimate ?? quoteData.gasEstimate ?? 200_000);
89
+ const quote = {
90
+ sellAmount,
91
+ buyAmount,
92
+ estimatedGas: gasUseEstimate,
93
+ allowanceTarget: (0, utils_2.calculateAllowanceTarget)(sellToken, routerAddress),
94
+ customData: {
95
+ tx: {
96
+ to: routerAddress,
97
+ calldata: calldata,
98
+ value,
99
+ },
100
+ },
101
+ };
102
+ return (0, utils_2.addQuoteSlippage)(quote, order.type, slippagePercentage);
103
+ }
104
+ async buildTx({ request }) {
105
+ return request.customData.tx;
106
+ }
107
+ }
108
+ exports.UniswapV4QuoteSource = UniswapV4QuoteSource;
109
+ //# sourceMappingURL=uniswap-v4-quote-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-v4-quote-source.js","sourceRoot":"","sources":["../../../../src/services/quotes/quote-sources/uniswap-v4-quote-source.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { ParaswapQuoteSource } from './quote-sources/paraswap-quote-source';
6
6
  import { ZRXQuoteSource } from './quote-sources/0x-quote-source';
7
7
  import { OneInchQuoteSource } from './quote-sources/1inch-quote-source';
8
8
  import { UniswapQuoteSource } from './quote-sources/uniswap-quote-source';
9
+ import { UniswapV4QuoteSource } from './quote-sources/uniswap-v4-quote-source';
9
10
  import { OpenOceanQuoteSource } from './quote-sources/open-ocean-quote-source';
10
11
  import { LiFiQuoteSource } from './quote-sources/li-fi-quote-source';
11
12
  import { KyberswapQuoteSource } from './quote-sources/kyberswap-quote-source';
@@ -28,7 +29,9 @@ import { NordsternQuoteSource } from './quote-sources/nordstern-quote-source';
28
29
  import { RelayQuoteSource } from './quote-sources/relay-quote-source';
29
30
  import { AerodromeQuoteSource } from './quote-sources/aerodrome-quote-source';
30
31
  import { CowSwapQuoteSource } from './quote-sources/cow-swap-quote-source';
32
+ import { CowAMMQuoteSource } from './quote-sources/cow-amm-quote-source';
31
33
  import { AcrossQuoteSource } from './quote-sources/across-quote-source';
34
+ import { PendleQuoteSource } from './quote-sources/pendle-quote-source';
32
35
  import { JupiterQuoteSource } from './quote-sources/jupiter-quote-source';
33
36
  export declare const QUOTE_SOURCES: {
34
37
  bebop: BebopQuoteSource;
@@ -58,10 +61,13 @@ export declare const QUOTE_SOURCES: {
58
61
  relay: RelayQuoteSource;
59
62
  aerodrome: AerodromeQuoteSource;
60
63
  'cow-swap': CowSwapQuoteSource;
64
+ 'cow-amm': CowAMMQuoteSource;
61
65
  across: AcrossQuoteSource;
66
+ pendle: PendleQuoteSource;
67
+ 'uniswap-v4': UniswapV4QuoteSource;
62
68
  jupiter: JupiterQuoteSource;
63
69
  };
64
- export declare const SOURCES_METADATA: Record<"0x" | "open-ocean" | "paraswap" | "1inch" | "fly-trade" | "bebop" | "xy-finance" | "uniswap" | "li-fi" | "kyberswap" | "odos" | "braindex" | "barter" | "rango" | "changelly" | "squid" | "portals-fi" | "enso" | "okx-dex" | "conveyor" | "dodo" | "swing" | "sushiswap" | "nordstern" | "relay" | "aerodrome" | "cow-swap" | "across" | "jupiter", SourceMetadata>;
70
+ export declare const SOURCES_METADATA: Record<"0x" | "open-ocean" | "paraswap" | "1inch" | "fly-trade" | "bebop" | "xy-finance" | "uniswap" | "li-fi" | "kyberswap" | "odos" | "braindex" | "barter" | "rango" | "changelly" | "squid" | "portals-fi" | "enso" | "okx-dex" | "conveyor" | "dodo" | "swing" | "sushiswap" | "nordstern" | "relay" | "aerodrome" | "cow-swap" | "cow-amm" | "across" | "pendle" | "uniswap-v4" | "jupiter", SourceMetadata>;
65
71
  export type SourceWithConfigId = keyof LocalSourcesConfig;
66
72
  export type SourceConfig = {
67
73
  global?: GlobalQuoteSourceConfig;
@@ -6,6 +6,7 @@ const paraswap_quote_source_1 = require("./quote-sources/paraswap-quote-source")
6
6
  const _0x_quote_source_1 = require("./quote-sources/0x-quote-source");
7
7
  const _1inch_quote_source_1 = require("./quote-sources/1inch-quote-source");
8
8
  const uniswap_quote_source_1 = require("./quote-sources/uniswap-quote-source");
9
+ const uniswap_v4_quote_source_1 = require("./quote-sources/uniswap-v4-quote-source");
9
10
  const open_ocean_quote_source_1 = require("./quote-sources/open-ocean-quote-source");
10
11
  const li_fi_quote_source_1 = require("./quote-sources/li-fi-quote-source");
11
12
  const kyberswap_quote_source_1 = require("./quote-sources/kyberswap-quote-source");
@@ -28,7 +29,9 @@ const nordstern_quote_source_1 = require("./quote-sources/nordstern-quote-source
28
29
  const relay_quote_source_1 = require("./quote-sources/relay-quote-source");
29
30
  const aerodrome_quote_source_1 = require("./quote-sources/aerodrome-quote-source");
30
31
  const cow_swap_quote_source_1 = require("./quote-sources/cow-swap-quote-source");
32
+ const cow_amm_quote_source_1 = require("./quote-sources/cow-amm-quote-source");
31
33
  const across_quote_source_1 = require("./quote-sources/across-quote-source");
34
+ const pendle_quote_source_1 = require("./quote-sources/pendle-quote-source");
32
35
  // Solana sources
33
36
  const jupiter_quote_source_1 = require("./quote-sources/jupiter-quote-source");
34
37
  exports.QUOTE_SOURCES = {
@@ -59,7 +62,10 @@ exports.QUOTE_SOURCES = {
59
62
  relay: new relay_quote_source_1.RelayQuoteSource(),
60
63
  aerodrome: new aerodrome_quote_source_1.AerodromeQuoteSource(),
61
64
  'cow-swap': new cow_swap_quote_source_1.CowSwapQuoteSource(),
65
+ 'cow-amm': new cow_amm_quote_source_1.CowAMMQuoteSource(),
62
66
  across: new across_quote_source_1.AcrossQuoteSource(),
67
+ pendle: new pendle_quote_source_1.PendleQuoteSource(),
68
+ 'uniswap-v4': new uniswap_v4_quote_source_1.UniswapV4QuoteSource(),
63
69
  // Solana sources
64
70
  jupiter: new jupiter_quote_source_1.JupiterQuoteSource(),
65
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/services/quotes/source-registry.ts"],"names":[],"mappings":";;;AAGA,yEAAoE;AACpE,iFAA4E;AAC5E,sEAAiE;AACjE,4EAAwE;AACxE,+EAA0E;AAC1E,qFAA+E;AAC/E,2EAAqE;AACrE,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,qFAA+E;AAC/E,+EAAyE;AACzE,2EAAsE;AACtE,qFAA+E;AAC/E,mFAA6E;AAC7E,2EAAsE;AACtE,iFAA4E;AAC5E,yEAAoE;AACpE,iFAA4E;AAC5E,6EAAwE;AACxE,yEAAuE;AACvE,2EAAsE;AACtE,mFAA8E;AAC9E,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,iFAA2E;AAC3E,6EAAwE;AACxE,iBAAiB;AACjB,+EAA0E;AAE7D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,iCAAc,EAAE;IAC1B,OAAO,EAAE,IAAI,wCAAkB,EAAE;IACjC,OAAO,EAAE,IAAI,yCAAkB,EAAE;IACjC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,OAAO,EAAE,IAAI,oCAAe,EAAE;IAC9B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,CAAC,WAAW,CAAC,EAAE,IAAI,4CAAmB,EAAE;IACxC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,SAAS,EAAE,IAAI,wCAAiB,EAAE;IAClC,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,IAAI,EAAE,IAAI,sCAAkB,EAAE;IAC9B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,UAAU,EAAE,IAAI,0CAAkB,EAAE;IACpC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,iBAAiB;IACjB,OAAO,EAAE,IAAI,yCAAkB,EAAE;CACgC,CAAC;AAEvD,QAAA,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAChD,MAAM,CAAC,OAAO,CAAC,qBAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CACtC,CAAC"}
1
+ {"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/services/quotes/source-registry.ts"],"names":[],"mappings":";;;AAGA,yEAAoE;AACpE,iFAA4E;AAC5E,sEAAiE;AACjE,4EAAwE;AACxE,+EAA0E;AAC1E,qFAA+E;AAC/E,qFAA+E;AAC/E,2EAAqE;AACrE,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,qFAA+E;AAC/E,+EAAyE;AACzE,2EAAsE;AACtE,qFAA+E;AAC/E,mFAA6E;AAC7E,2EAAsE;AACtE,iFAA4E;AAC5E,yEAAoE;AACpE,iFAA4E;AAC5E,6EAAwE;AACxE,yEAAuE;AACvE,2EAAsE;AACtE,mFAA8E;AAC9E,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,iFAA2E;AAC3E,+EAAyE;AACzE,6EAAwE;AACxE,6EAAwE;AACxE,iBAAiB;AACjB,+EAA0E;AAE7D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,iCAAc,EAAE;IAC1B,OAAO,EAAE,IAAI,wCAAkB,EAAE;IACjC,OAAO,EAAE,IAAI,yCAAkB,EAAE;IACjC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,OAAO,EAAE,IAAI,oCAAe,EAAE;IAC9B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,CAAC,WAAW,CAAC,EAAE,IAAI,4CAAmB,EAAE;IACxC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,SAAS,EAAE,IAAI,wCAAiB,EAAE;IAClC,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,IAAI,EAAE,IAAI,sCAAkB,EAAE;IAC9B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,UAAU,EAAE,IAAI,0CAAkB,EAAE;IACpC,SAAS,EAAE,IAAI,wCAAiB,EAAE;IAClC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,iBAAiB;IACjB,OAAO,EAAE,IAAI,yCAAkB,EAAE;CACgC,CAAC;AAEvD,QAAA,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAChD,MAAM,CAAC,OAAO,CAAC,qBAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CACtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xkoaj/sdk",
3
- "version": "0.0.1-beta.14",
3
+ "version": "0.0.1-beta.16",
4
4
  "contributors": [],
5
5
  "main": "./dist/index.js",
6
6
  "files": [
@@ -58,4 +58,4 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  }
61
- }
61
+ }