@1inch/fusion-sdk 2.4.6-rc.0 → 2.4.7-rc.0

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 (47) hide show
  1. package/README.md +174 -25
  2. package/dist/cjs/api/quoter/quote/quote.js +6 -20
  3. package/dist/cjs/api/quoter/quoter.api.spec.js +6 -103
  4. package/dist/cjs/api/quoter/quoter.request.js +4 -1
  5. package/dist/cjs/api/quoter/quoter.request.spec.js +8 -2
  6. package/dist/cjs/constants.js +17 -3
  7. package/dist/cjs/fusion-order/fusion-order.js +94 -0
  8. package/dist/cjs/fusion-order/fusion-order.spec.js +87 -0
  9. package/dist/cjs/fusion-order/index.js +1 -0
  10. package/dist/cjs/fusion-order/permit/constants.js +98 -0
  11. package/dist/cjs/fusion-order/permit/index.js +34 -0
  12. package/dist/cjs/fusion-order/permit/permit-transfer-from.js +115 -0
  13. package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +232 -0
  14. package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +76 -0
  15. package/dist/cjs/fusion-order/permit/utils.js +35 -0
  16. package/dist/esm/api/quoter/quote/quote.js +6 -20
  17. package/dist/esm/api/quoter/quote/types.js +3 -15
  18. package/dist/esm/api/quoter/quoter.api.spec.js +6 -103
  19. package/dist/esm/api/quoter/quoter.request.js +4 -1
  20. package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
  21. package/dist/esm/constants.js +15 -1
  22. package/dist/esm/fusion-order/fusion-order.js +95 -1
  23. package/dist/esm/fusion-order/fusion-order.spec.js +87 -0
  24. package/dist/esm/fusion-order/index.js +1 -0
  25. package/dist/esm/fusion-order/permit/constants.js +71 -0
  26. package/dist/esm/fusion-order/permit/index.js +3 -0
  27. package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
  28. package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
  29. package/dist/esm/fusion-order/permit/transfer-from-suffix.js +53 -0
  30. package/dist/esm/fusion-order/permit/utils.js +12 -0
  31. package/dist/esm/package.json +1 -1
  32. package/dist/types/src/api/quoter/quote/quote.d.ts +2 -3
  33. package/dist/types/src/api/quoter/quote/types.d.ts +1 -6
  34. package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
  35. package/dist/types/src/api/quoter/types.d.ts +2 -2
  36. package/dist/types/src/constants.d.ts +1 -1
  37. package/dist/types/src/fusion-order/fusion-order.d.ts +5 -0
  38. package/dist/types/src/fusion-order/index.d.ts +1 -0
  39. package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
  40. package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
  41. package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
  42. package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
  43. package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
  44. package/dist/types/src/index.d.ts +1 -1
  45. package/dist/types/src/sdk/types.d.ts +3 -3
  46. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  47. package/package.json +2 -2
package/README.md CHANGED
@@ -16,16 +16,22 @@ yarn add @1inch/fusion-sdk@2
16
16
 
17
17
  ## Modules docs
18
18
 
19
- - [auction-details](src/fusion-order/auction-details/README.md)
20
- - [fusion-order](src/fusion-order/README.md)
21
- - [sdk](src/sdk/README.md)
22
- - [ws-api](src/ws-api/README.md)
19
+ - [auction-details](src/fusion-order/auction-details/README.md)
20
+ - [fusion-order](src/fusion-order/README.md)
21
+ - [sdk](src/sdk/README.md)
22
+ - [ws-api](src/ws-api/README.md)
23
23
 
24
24
  ## How to swap with Fusion Mode
25
25
 
26
26
  ```typescript
27
- import {FusionSDK, NetworkEnum, OrderStatus, PrivateKeyProviderConnector, Web3Like,} from "@1inch/fusion-sdk";
28
- import {computeAddress, formatUnits, JsonRpcProvider} from "ethers";
27
+ import {
28
+ FusionSDK,
29
+ NetworkEnum,
30
+ OrderStatus,
31
+ PrivateKeyProviderConnector,
32
+ Web3Like
33
+ } from '@1inch/fusion-sdk'
34
+ import {computeAddress, formatUnits, JsonRpcProvider} from 'ethers'
29
35
 
30
36
  const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
31
37
  const NODE_URL = 'YOUR_WEB3_NODE_URL'
@@ -48,7 +54,7 @@ const connector = new PrivateKeyProviderConnector(
48
54
  )
49
55
 
50
56
  const sdk = new FusionSDK({
51
- url: 'https://api.1inch.dev/fusion',
57
+ url: 'https://api.1inch.com/fusion',
52
58
  network: NetworkEnum.BINANCE,
53
59
  blockchainProvider: connector,
54
60
  authKey: DEV_PORTAL_API_TOKEN
@@ -57,7 +63,7 @@ const sdk = new FusionSDK({
57
63
  async function main() {
58
64
  const params = {
59
65
  fromTokenAddress: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', // USDC
60
- toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // BNB
66
+ toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // BNB
61
67
  amount: '10000000000000000000', // 10 USDC
62
68
  walletAddress: computeAddress(PRIVATE_KEY),
63
69
  source: 'sdk-test'
@@ -66,12 +72,25 @@ async function main() {
66
72
  const quote = await sdk.getQuote(params)
67
73
 
68
74
  const dstTokenDecimals = 18
69
- console.log('Auction start amount', formatUnits(quote.presets[quote.recommendedPreset].auctionStartAmount, dstTokenDecimals))
70
- console.log('Auction end amount', formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount), dstTokenDecimals)
75
+ console.log(
76
+ 'Auction start amount',
77
+ formatUnits(
78
+ quote.presets[quote.recommendedPreset].auctionStartAmount,
79
+ dstTokenDecimals
80
+ )
81
+ )
82
+ console.log(
83
+ 'Auction end amount',
84
+ formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount),
85
+ dstTokenDecimals
86
+ )
71
87
 
72
88
  const preparedOrder = await sdk.createOrder(params)
73
89
 
74
- const info = await sdk.submitOrder(preparedOrder.order, preparedOrder.quoteId)
90
+ const info = await sdk.submitOrder(
91
+ preparedOrder.order,
92
+ preparedOrder.quoteId
93
+ )
75
94
 
76
95
  console.log('OrderHash', info.orderHash)
77
96
 
@@ -90,7 +109,7 @@ async function main() {
90
109
  console.log('Order Expired')
91
110
  break
92
111
  }
93
-
112
+
94
113
  if (data.status === OrderStatus.Cancelled) {
95
114
  console.log('Order Cancelled')
96
115
  break
@@ -98,7 +117,6 @@ async function main() {
98
117
  } catch (e) {
99
118
  console.log(e)
100
119
  }
101
-
102
120
  }
103
121
 
104
122
  console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
@@ -108,9 +126,18 @@ main()
108
126
  ```
109
127
 
110
128
  ## How to swap with Fusion mode from Native asset
129
+
111
130
  ```typescript
112
- import {FusionSDK, NetworkEnum, OrderStatus, PrivateKeyProviderConnector, Web3Like, Address, NativeOrdersFactory} from "@1inch/fusion-sdk";
113
- import {computeAddress, formatUnits, JsonRpcProvider, Wallet} from "ethers";
131
+ import {
132
+ FusionSDK,
133
+ NetworkEnum,
134
+ OrderStatus,
135
+ PrivateKeyProviderConnector,
136
+ Web3Like,
137
+ Address,
138
+ NativeOrdersFactory
139
+ } from '@1inch/fusion-sdk'
140
+ import {computeAddress, formatUnits, JsonRpcProvider, Wallet} from 'ethers'
114
141
 
115
142
  const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
116
143
  const NODE_URL = 'YOUR_WEB3_NODE_URL'
@@ -133,7 +160,7 @@ const connector = new PrivateKeyProviderConnector(
133
160
  )
134
161
 
135
162
  const sdk = new FusionSDK({
136
- url: 'https://api.1inch.dev/fusion',
163
+ url: 'https://api.1inch.com/fusion',
137
164
  network: NetworkEnum.BINANCE,
138
165
  blockchainProvider: connector,
139
166
  authKey: DEV_PORTAL_API_TOKEN
@@ -144,26 +171,43 @@ const wallet = new Wallet(PRIVATE_KEY, ethersRpcProvider)
144
171
  async function main() {
145
172
  const params = {
146
173
  fromTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
147
- toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
174
+ toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
148
175
  amount: '2000000000000000', // 0.002 ETH
149
176
  walletAddress: computeAddress(PRIVATE_KEY),
150
177
  source: 'sdk-test'
151
178
  }
152
-
179
+
153
180
  const quote = await sdk.getQuote(params)
154
181
 
155
182
  const dstTokenDecimals = 6
156
- console.log('Auction start amount', formatUnits(quote.presets[quote.recommendedPreset].auctionStartAmount, dstTokenDecimals))
157
- console.log('Auction end amount', formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount), dstTokenDecimals)
183
+ console.log(
184
+ 'Auction start amount',
185
+ formatUnits(
186
+ quote.presets[quote.recommendedPreset].auctionStartAmount,
187
+ dstTokenDecimals
188
+ )
189
+ )
190
+ console.log(
191
+ 'Auction end amount',
192
+ formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount),
193
+ dstTokenDecimals
194
+ )
158
195
 
159
196
  const preparedOrder = await sdk.createOrder(params)
160
197
 
161
- const info = await sdk.submitNativeOrder(preparedOrder.order, new Address(params.walletAddress), preparedOrder.quoteId)
198
+ const info = await sdk.submitNativeOrder(
199
+ preparedOrder.order,
200
+ new Address(params.walletAddress),
201
+ preparedOrder.quoteId
202
+ )
162
203
 
163
204
  console.log('OrderHash', info.orderHash)
164
205
 
165
206
  const factory = NativeOrdersFactory.default(NetworkEnum.BINANCE)
166
- const call = factory.create(new Address(wallet.address), preparedOrder.order.build())
207
+ const call = factory.create(
208
+ new Address(wallet.address),
209
+ preparedOrder.order.build()
210
+ )
167
211
 
168
212
  const txRes = await wallet.sendTransaction({
169
213
  to: call.to.toString(),
@@ -175,7 +219,6 @@ async function main() {
175
219
 
176
220
  await wallet.provider.waitForTransaction(txRes.hash)
177
221
 
178
-
179
222
  const start = Date.now()
180
223
 
181
224
  while (true) {
@@ -191,7 +234,7 @@ async function main() {
191
234
  console.log('Order Expired')
192
235
  break
193
236
  }
194
-
237
+
195
238
  if (data.status === OrderStatus.Cancelled) {
196
239
  console.log('Order Cancelled')
197
240
  break
@@ -199,7 +242,6 @@ async function main() {
199
242
  } catch (e) {
200
243
  console.log(e)
201
244
  }
202
-
203
245
  }
204
246
 
205
247
  console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
@@ -208,6 +250,113 @@ async function main() {
208
250
  main()
209
251
  ```
210
252
 
253
+ ## How to swap with Fusion Mode using TransferPermit
254
+
255
+ Instead of granting a token approval to the 1inch Limit Order Protocol, you can use a `TransferPermit` for signature-based transfers via a Permit2Proxy contract.
256
+
257
+ The maker only needs to approve tokens to the Permit2 contract once. Each order then carries a single-use `PermitTransferFrom` signature instead of an on-chain allowance to the protocol.
258
+
259
+ ```typescript
260
+ import {
261
+ FusionSDK,
262
+ NetworkEnum,
263
+ OrderStatus,
264
+ PrivateKeyProviderConnector,
265
+ Web3Like,
266
+ getPermit2Address
267
+ } from '@1inch/fusion-sdk'
268
+ import {computeAddress, JsonRpcProvider, Wallet} from 'ethers'
269
+
270
+ const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
271
+ const NODE_URL = 'YOUR_WEB3_NODE_URL'
272
+ const DEV_PORTAL_API_TOKEN = 'YOUR_DEV_PORTAL_API_TOKEN'
273
+
274
+ const ethersRpcProvider = new JsonRpcProvider(NODE_URL)
275
+
276
+ const ethersProviderConnector: Web3Like = {
277
+ eth: {
278
+ call(transactionConfig): Promise<string> {
279
+ return ethersRpcProvider.call(transactionConfig)
280
+ }
281
+ },
282
+ extend(): void {}
283
+ }
284
+
285
+ const connector = new PrivateKeyProviderConnector(
286
+ PRIVATE_KEY,
287
+ ethersProviderConnector
288
+ )
289
+
290
+ const sdk = new FusionSDK({
291
+ url: 'https://api.1inch.com/fusion',
292
+ network: NetworkEnum.ETHEREUM,
293
+ blockchainProvider: connector,
294
+ authKey: DEV_PORTAL_API_TOKEN
295
+ })
296
+
297
+ const wallet = new Wallet(PRIVATE_KEY, ethersRpcProvider)
298
+
299
+ async function main() {
300
+ // Step 1: Approve token to the Permit2 contract (one-time, can be unlimited)
301
+ // This replaces the usual approval to the 1inch Limit Order Protocol
302
+ const permit2Address = getPermit2Address(NetworkEnum.ETHEREUM)
303
+ // await approveToken(fromTokenAddress, permit2Address, MAX_UINT256)
304
+
305
+ // Step 2: Get quote and create order
306
+ const params = {
307
+ fromTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH
308
+ toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
309
+ amount: '50000000000000000', // 0.05 WETH
310
+ walletAddress: computeAddress(PRIVATE_KEY)
311
+ }
312
+
313
+ const {order, quoteId} = await sdk.createOrder(params)
314
+
315
+ // Step 3: Create a transfer permit for the order
316
+ const permit = order.createTransferPermit(NetworkEnum.ETHEREUM)
317
+
318
+ // Step 4: Sign the transfer permit
319
+ const permitTypedData = permit.getTypedData(NetworkEnum.ETHEREUM)
320
+ const permitSignature = await connector.signTypedData(
321
+ params.walletAddress,
322
+ permitTypedData
323
+ )
324
+
325
+ // Step 5: Attach the signed permit to the order
326
+ const orderWithPermit = order.withTransferPermit(permit, permitSignature)
327
+
328
+ // Step 6: Submit the order (the SDK signs the order and sends it to the relayer)
329
+ const info = await sdk.submitOrder(orderWithPermit, quoteId)
330
+
331
+ console.log('OrderHash', info.orderHash)
332
+
333
+ while (true) {
334
+ const data = await sdk.getOrderStatus(info.orderHash)
335
+
336
+ if (data.status === OrderStatus.Filled) {
337
+ console.log('fills', data.fills)
338
+ break
339
+ }
340
+
341
+ if (
342
+ data.status === OrderStatus.Expired ||
343
+ data.status === OrderStatus.Cancelled
344
+ ) {
345
+ console.log('Order', data.status)
346
+ break
347
+ }
348
+ }
349
+ }
350
+
351
+ main()
352
+ ```
353
+
354
+ **Key differences from a standard swap:**
355
+
356
+ - Token approval goes to `Permit2` instead of the 1inch protocol
357
+ - Create and sign a `PermitTransferFrom` using the Permit2Proxy address as spender
358
+ - Call `withTransferPermit` before submitting — this modifies the order to route through the Permit2Proxy
359
+
211
360
  ## Resolvers
212
361
 
213
362
  `settleOrders` function usage and Resolver contract examples you can find [here](https://github.com/1inch/fusion-resolver-example)
@@ -102,7 +102,11 @@ var Quote = /*#__PURE__*/ function() {
102
102
  bps: new _limitordersdk.Bps(BigInt(response.fee.bps))
103
103
  };
104
104
  this.surplusFee = response.surplusFee;
105
- this.integratorFeeParams = this.parseIntegratorFee(response);
105
+ this.integratorFeeParams = response.integratorFee && response.integratorFeeReceiver ? {
106
+ receiver: new _limitordersdk.Address(response.integratorFeeReceiver),
107
+ value: new _limitordersdk.Bps(BigInt(response.integratorFee)),
108
+ share: _limitordersdk.Bps.fromPercent(response.integratorFeeShare || 0)
109
+ } : undefined;
106
110
  }
107
111
  _create_class(Quote, [
108
112
  {
@@ -149,7 +153,7 @@ var Quote = /*#__PURE__*/ function() {
149
153
  orderExpirationDelay: paramsData === null || paramsData === void 0 ? void 0 : paramsData.orderExpirationDelay,
150
154
  source: this.params.source,
151
155
  enablePermit2: params.isPermit2,
152
- fees: buildFees(this.resolverFeePreset, this.integratorFeeParams, this.surplusFee)
156
+ fees: buildFees(this.resolverFeePreset, this.params.integratorFee || this.integratorFeeParams, this.surplusFee)
153
157
  };
154
158
  return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
155
159
  }
@@ -190,24 +194,6 @@ var Quote = /*#__PURE__*/ function() {
190
194
  }
191
195
  return _index.FusionOrder.new(settlementExtension, orderInfo, details, extra);
192
196
  }
193
- },
194
- {
195
- key: "parseIntegratorFee",
196
- value: function parseIntegratorFee(response) {
197
- var _this_params_integratorFee_receiver, _this_params_integratorFee;
198
- if (!response.integratorFee) {
199
- return undefined;
200
- }
201
- var receiver = response.integratorFeeReceiver || ((_this_params_integratorFee = this.params.integratorFee) === null || _this_params_integratorFee === void 0 ? void 0 : (_this_params_integratorFee_receiver = _this_params_integratorFee.receiver) === null || _this_params_integratorFee_receiver === void 0 ? void 0 : _this_params_integratorFee_receiver.toString());
202
- if (!receiver) {
203
- return undefined;
204
- }
205
- return {
206
- receiver: new _limitordersdk.Address(receiver),
207
- value: new _limitordersdk.Bps(BigInt(response.integratorFee)),
208
- share: _limitordersdk.Bps.fromPercent(response.integratorFeeShare || 0)
209
- };
210
- }
211
197
  }
212
198
  ]);
213
199
  return Quote;
@@ -8,7 +8,6 @@ var _quoterrequest = require("./quoter.request.js");
8
8
  var _index = require("./quote/index.js");
9
9
  var _types = require("./types.js");
10
10
  var _quotercustompresetrequest = require("./quoter-custom-preset.request.js");
11
- var _constants = require("../../constants.js");
12
11
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13
12
  try {
14
13
  var info = gen[key](arg);
@@ -38,58 +37,6 @@ function _async_to_generator(fn) {
38
37
  });
39
38
  };
40
39
  }
41
- function _define_property(obj, key, value) {
42
- if (key in obj) {
43
- Object.defineProperty(obj, key, {
44
- value: value,
45
- enumerable: true,
46
- configurable: true,
47
- writable: true
48
- });
49
- } else {
50
- obj[key] = value;
51
- }
52
- return obj;
53
- }
54
- function _object_spread(target) {
55
- for(var i = 1; i < arguments.length; i++){
56
- var source = arguments[i] != null ? arguments[i] : {};
57
- var ownKeys = Object.keys(source);
58
- if (typeof Object.getOwnPropertySymbols === "function") {
59
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
60
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
61
- }));
62
- }
63
- ownKeys.forEach(function(key) {
64
- _define_property(target, key, source[key]);
65
- });
66
- }
67
- return target;
68
- }
69
- function ownKeys(object, enumerableOnly) {
70
- var keys = Object.keys(object);
71
- if (Object.getOwnPropertySymbols) {
72
- var symbols = Object.getOwnPropertySymbols(object);
73
- if (enumerableOnly) {
74
- symbols = symbols.filter(function(sym) {
75
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
76
- });
77
- }
78
- keys.push.apply(keys, symbols);
79
- }
80
- return keys;
81
- }
82
- function _object_spread_props(target, source) {
83
- source = source != null ? source : {};
84
- if (Object.getOwnPropertyDescriptors) {
85
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
86
- } else {
87
- ownKeys(Object(source)).forEach(function(key) {
88
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
89
- });
90
- }
91
- return target;
92
- }
93
40
  function _ts_generator(thisArg, body) {
94
41
  var f, y, t, g, _ = {
95
42
  label: 0,
@@ -296,7 +243,7 @@ describe('Quoter API', function() {
296
243
  ],
297
244
  fee: {
298
245
  whitelistDiscountPercent: 1,
299
- receiver: _constants.ONE_INCH_LIMIT_ORDER_V4,
246
+ receiver: '0x02f92800F57BCD74066F5709F1Daa1A4302Df875',
300
247
  bps: 10
301
248
  },
302
249
  marketAmount: '626772029219852913'
@@ -318,7 +265,7 @@ describe('Quoter API', function() {
318
265
  case 1:
319
266
  res = _state.sent();
320
267
  expect(res).toStrictEqual(QuoterResponseMock);
321
- expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&surplus=true');
268
+ expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&source=sdk&surplus=true');
322
269
  return [
323
270
  2
324
271
  ];
@@ -340,6 +287,7 @@ describe('Quoter API', function() {
340
287
  amount: '1000000000000000000000',
341
288
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
342
289
  integratorFee: {
290
+ share: _limitordersdk.Bps.fromPercent(50),
343
291
  receiver: _limitordersdk.Address.fromBigInt(10n),
344
292
  value: new _limitordersdk.Bps(1n)
345
293
  },
@@ -375,6 +323,7 @@ describe('Quoter API', function() {
375
323
  amount: '1000000000000000000000',
376
324
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
377
325
  integratorFee: {
326
+ share: _limitordersdk.Bps.fromPercent(50),
378
327
  receiver: _limitordersdk.Address.fromBigInt(10n),
379
328
  value: new _limitordersdk.Bps(1n)
380
329
  },
@@ -411,6 +360,7 @@ describe('Quoter API', function() {
411
360
  amount: '1000000000000000000000',
412
361
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
413
362
  integratorFee: {
363
+ share: _limitordersdk.Bps.fromPercent(50),
414
364
  receiver: _limitordersdk.Address.fromBigInt(10n),
415
365
  value: new _limitordersdk.Bps(1n)
416
366
  },
@@ -463,6 +413,7 @@ describe('Quoter API', function() {
463
413
  amount: '1000000000000000000000',
464
414
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
465
415
  integratorFee: {
416
+ share: _limitordersdk.Bps.fromPercent(50),
466
417
  receiver: _limitordersdk.Address.fromBigInt(10n),
467
418
  value: new _limitordersdk.Bps(1n)
468
419
  },
@@ -501,52 +452,4 @@ describe('Quoter API', function() {
501
452
  }
502
453
  });
503
454
  }));
504
- describe('parseIntegratorFee', function() {
505
- it('should use response receiver when provided', function() {
506
- var _quote_integratorFeeParams, _quote_integratorFeeParams1, _quote_integratorFeeParams2;
507
- var responseWithFee = _object_spread_props(_object_spread({}, ResponseMock), {
508
- integratorFee: 100,
509
- integratorFeeReceiver: '0x1234567890123456789012345678901234567890',
510
- integratorFeeShare: 50
511
- });
512
- var quote = new _index.Quote(params, responseWithFee);
513
- expect(quote.integratorFeeParams).toBeDefined();
514
- expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0x1234567890123456789012345678901234567890');
515
- expect(Number((_quote_integratorFeeParams1 = quote.integratorFeeParams) === null || _quote_integratorFeeParams1 === void 0 ? void 0 : _quote_integratorFeeParams1.value.value)).toBe(100);
516
- expect(Number((_quote_integratorFeeParams2 = quote.integratorFeeParams) === null || _quote_integratorFeeParams2 === void 0 ? void 0 : _quote_integratorFeeParams2.share.value)).toBe(5000);
517
- });
518
- it('should fallback to request receiver when response receiver is missing', function() {
519
- var _quote_integratorFeeParams;
520
- var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
521
- integratorFee: 100,
522
- integratorFeeShare: 50
523
- });
524
- var paramsWithFee = _quoterrequest.QuoterRequest.new({
525
- fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
526
- toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
527
- amount: '1000000000000000000000',
528
- walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
529
- integratorFee: {
530
- receiver: new _limitordersdk.Address('0xabcdef0123456789abcdef0123456789abcdef01'),
531
- value: new _limitordersdk.Bps(100n)
532
- },
533
- source: 'test-source'
534
- });
535
- var quote = new _index.Quote(paramsWithFee, responseWithFeeNoReceiver);
536
- expect(quote.integratorFeeParams).toBeDefined();
537
- expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0xabcdef0123456789abcdef0123456789abcdef01');
538
- });
539
- it('should return undefined when no receiver available', function() {
540
- var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
541
- integratorFee: 100,
542
- integratorFeeShare: 50
543
- });
544
- var quote = new _index.Quote(params, responseWithFeeNoReceiver);
545
- expect(quote.integratorFeeParams).toBeUndefined();
546
- });
547
- it('should return undefined when no integratorFee in response', function() {
548
- var quote = new _index.Quote(params, ResponseMock);
549
- expect(quote.integratorFeeParams).toBeUndefined();
550
- });
551
- });
552
455
  });
@@ -63,7 +63,7 @@ var QuoterRequest = /*#__PURE__*/ function() {
63
63
  this.enableEstimate = params.enableEstimate || false;
64
64
  this.permit = params.permit;
65
65
  this.integratorFee = params.integratorFee;
66
- this.source = params.source;
66
+ this.source = params.source || 'sdk';
67
67
  var _params_isPermit2;
68
68
  this.isPermit2 = (_params_isPermit2 = params.isPermit2) !== null && _params_isPermit2 !== void 0 ? _params_isPermit2 : false;
69
69
  this.slippage = params.slippage;
@@ -76,6 +76,9 @@ var QuoterRequest = /*#__PURE__*/ function() {
76
76
  if (!(0, _validations.isValidAmount)(this.amount)) {
77
77
  throw new Error("".concat(this.amount, " is invalid amount"));
78
78
  }
79
+ if (this.integratorFee && this.source === 'sdk') {
80
+ throw new Error('cannot use fee without source');
81
+ }
79
82
  }
80
83
  _create_class(QuoterRequest, [
81
84
  {
@@ -13,6 +13,7 @@ describe(__filename, function() {
13
13
  amount: '1000000000000000000000',
14
14
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
15
15
  integratorFee: {
16
+ share: _limitordersdk.Bps.fromPercent(50),
16
17
  receiver: _limitordersdk.Address.fromBigInt(10n),
17
18
  value: new _limitordersdk.Bps(1n)
18
19
  }
@@ -25,6 +26,7 @@ describe(__filename, function() {
25
26
  amount: '1000000000000000000000',
26
27
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
27
28
  integratorFee: {
29
+ share: _limitordersdk.Bps.fromPercent(50),
28
30
  receiver: _limitordersdk.Address.fromBigInt(10n),
29
31
  value: new _limitordersdk.Bps(1n)
30
32
  }
@@ -39,6 +41,7 @@ describe(__filename, function() {
39
41
  amount: '1000000000000000000000',
40
42
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
41
43
  integratorFee: {
44
+ share: _limitordersdk.Bps.fromPercent(50),
42
45
  receiver: _limitordersdk.Address.fromBigInt(10n),
43
46
  value: new _limitordersdk.Bps(1n)
44
47
  }
@@ -53,6 +56,7 @@ describe(__filename, function() {
53
56
  amount: '1000000000000000000000',
54
57
  walletAddress: '0x0000000019ab540356cbb839be05303d7705fa1',
55
58
  integratorFee: {
59
+ share: _limitordersdk.Bps.fromPercent(50),
56
60
  receiver: _limitordersdk.Address.fromBigInt(10n),
57
61
  value: new _limitordersdk.Bps(1n)
58
62
  }
@@ -67,13 +71,14 @@ describe(__filename, function() {
67
71
  amount: 'dasdad',
68
72
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
69
73
  integratorFee: {
74
+ share: _limitordersdk.Bps.fromPercent(50),
70
75
  receiver: _limitordersdk.Address.fromBigInt(10n),
71
76
  value: new _limitordersdk.Bps(1n)
72
77
  }
73
78
  });
74
79
  }).toThrow(/is invalid amount/);
75
80
  });
76
- it('allows fee without source', function() {
81
+ it('returns error if fee is provided and source not', function() {
77
82
  expect(function() {
78
83
  return _quoterrequest.QuoterRequest.new({
79
84
  fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
@@ -81,10 +86,11 @@ describe(__filename, function() {
81
86
  amount: '1000000',
82
87
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
83
88
  integratorFee: {
89
+ share: _limitordersdk.Bps.fromPercent(50),
84
90
  receiver: _limitordersdk.Address.fromBigInt(10n),
85
91
  value: new _limitordersdk.Bps(1n)
86
92
  }
87
93
  });
88
- }).not.toThrow();
94
+ }).toThrow(/cannot use fee without source/);
89
95
  });
90
96
  });
@@ -12,8 +12,8 @@ _export(exports, {
12
12
  NetworkEnum: function() {
13
13
  return NetworkEnum;
14
14
  },
15
- ONE_INCH_LIMIT_ORDER_V4: function() {
16
- return ONE_INCH_LIMIT_ORDER_V4;
15
+ ONE_INCH_LIMIT_ORDER_V4_ADDRESSES: function() {
16
+ return ONE_INCH_LIMIT_ORDER_V4_ADDRESSES;
17
17
  },
18
18
  UINT_160_MAX: function() {
19
19
  return UINT_160_MAX;
@@ -40,6 +40,19 @@ _export(exports, {
40
40
  return ZX;
41
41
  }
42
42
  });
43
+ function _define_property(obj, key, value) {
44
+ if (key in obj) {
45
+ Object.defineProperty(obj, key, {
46
+ value: value,
47
+ enumerable: true,
48
+ configurable: true,
49
+ writable: true
50
+ });
51
+ } else {
52
+ obj[key] = value;
53
+ }
54
+ return obj;
55
+ }
43
56
  var ZX = '0x';
44
57
  var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
45
58
  NetworkEnum[NetworkEnum["ETHEREUM"] = 1] = "ETHEREUM";
@@ -57,7 +70,8 @@ var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
57
70
  NetworkEnum[NetworkEnum["UNICHAIN"] = 130] = "UNICHAIN";
58
71
  return NetworkEnum;
59
72
  }({});
60
- var ONE_INCH_LIMIT_ORDER_V4 = '0x111111125421ca6dc452d289314280a0f8842a65';
73
+ var _obj;
74
+ var ONE_INCH_LIMIT_ORDER_V4_ADDRESSES = (_obj = {}, _define_property(_obj, 324, '0x6fd4383cb451173d5f9304f041c7bcbf27d561ff'), _define_property(_obj, 1, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 137, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 56, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 42161, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 43114, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 10, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 250, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 100, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 8453, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 59144, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 146, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 130, '0x111111125421ca6dc452d289314280a0f8842a65'), _obj);
61
75
  var UINT_160_MAX = (1n << 160n) - 1n;
62
76
  var UINT_16_MAX = (1n << 16n) - 1n;
63
77
  var UINT_80_MAX = (1n << 80n) - 1n;