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

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.
@@ -27,58 +27,6 @@ function _async_to_generator(fn) {
27
27
  });
28
28
  };
29
29
  }
30
- function _define_property(obj, key, value) {
31
- if (key in obj) {
32
- Object.defineProperty(obj, key, {
33
- value: value,
34
- enumerable: true,
35
- configurable: true,
36
- writable: true
37
- });
38
- } else {
39
- obj[key] = value;
40
- }
41
- return obj;
42
- }
43
- function _object_spread(target) {
44
- for(var i = 1; i < arguments.length; i++){
45
- var source = arguments[i] != null ? arguments[i] : {};
46
- var ownKeys = Object.keys(source);
47
- if (typeof Object.getOwnPropertySymbols === "function") {
48
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
49
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
50
- }));
51
- }
52
- ownKeys.forEach(function(key) {
53
- _define_property(target, key, source[key]);
54
- });
55
- }
56
- return target;
57
- }
58
- function ownKeys(object, enumerableOnly) {
59
- var keys = Object.keys(object);
60
- if (Object.getOwnPropertySymbols) {
61
- var symbols = Object.getOwnPropertySymbols(object);
62
- if (enumerableOnly) {
63
- symbols = symbols.filter(function(sym) {
64
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
65
- });
66
- }
67
- keys.push.apply(keys, symbols);
68
- }
69
- return keys;
70
- }
71
- function _object_spread_props(target, source) {
72
- source = source != null ? source : {};
73
- if (Object.getOwnPropertyDescriptors) {
74
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
75
- } else {
76
- ownKeys(Object(source)).forEach(function(key) {
77
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
78
- });
79
- }
80
- return target;
81
- }
82
30
  function _ts_generator(thisArg, body) {
83
31
  var f, y, t, g, _ = {
84
32
  label: 0,
@@ -314,7 +262,7 @@ describe('Quoter API', function() {
314
262
  case 1:
315
263
  res = _state.sent();
316
264
  expect(res).toStrictEqual(QuoterResponseMock);
317
- expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&surplus=true');
265
+ 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');
318
266
  return [
319
267
  2
320
268
  ];
@@ -336,6 +284,7 @@ describe('Quoter API', function() {
336
284
  amount: '1000000000000000000000',
337
285
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
338
286
  integratorFee: {
287
+ share: Bps.fromPercent(50),
339
288
  receiver: Address.fromBigInt(10n),
340
289
  value: new Bps(1n)
341
290
  },
@@ -371,6 +320,7 @@ describe('Quoter API', function() {
371
320
  amount: '1000000000000000000000',
372
321
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
373
322
  integratorFee: {
323
+ share: Bps.fromPercent(50),
374
324
  receiver: Address.fromBigInt(10n),
375
325
  value: new Bps(1n)
376
326
  },
@@ -407,6 +357,7 @@ describe('Quoter API', function() {
407
357
  amount: '1000000000000000000000',
408
358
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
409
359
  integratorFee: {
360
+ share: Bps.fromPercent(50),
410
361
  receiver: Address.fromBigInt(10n),
411
362
  value: new Bps(1n)
412
363
  },
@@ -459,6 +410,7 @@ describe('Quoter API', function() {
459
410
  amount: '1000000000000000000000',
460
411
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
461
412
  integratorFee: {
413
+ share: Bps.fromPercent(50),
462
414
  receiver: Address.fromBigInt(10n),
463
415
  value: new Bps(1n)
464
416
  },
@@ -497,52 +449,4 @@ describe('Quoter API', function() {
497
449
  }
498
450
  });
499
451
  }));
500
- describe('parseIntegratorFee', function() {
501
- it('should use response receiver when provided', function() {
502
- var _quote_integratorFeeParams, _quote_integratorFeeParams1, _quote_integratorFeeParams2;
503
- var responseWithFee = _object_spread_props(_object_spread({}, ResponseMock), {
504
- integratorFee: 100,
505
- integratorFeeReceiver: '0x1234567890123456789012345678901234567890',
506
- integratorFeeShare: 50
507
- });
508
- var quote = new Quote(params, responseWithFee);
509
- expect(quote.integratorFeeParams).toBeDefined();
510
- expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0x1234567890123456789012345678901234567890');
511
- expect(Number((_quote_integratorFeeParams1 = quote.integratorFeeParams) === null || _quote_integratorFeeParams1 === void 0 ? void 0 : _quote_integratorFeeParams1.value.value)).toBe(100);
512
- expect(Number((_quote_integratorFeeParams2 = quote.integratorFeeParams) === null || _quote_integratorFeeParams2 === void 0 ? void 0 : _quote_integratorFeeParams2.share.value)).toBe(5000);
513
- });
514
- it('should fallback to request receiver when response receiver is missing', function() {
515
- var _quote_integratorFeeParams;
516
- var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
517
- integratorFee: 100,
518
- integratorFeeShare: 50
519
- });
520
- var paramsWithFee = QuoterRequest.new({
521
- fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
522
- toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
523
- amount: '1000000000000000000000',
524
- walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
525
- integratorFee: {
526
- receiver: new Address('0xabcdef0123456789abcdef0123456789abcdef01'),
527
- value: new Bps(100n)
528
- },
529
- source: 'test-source'
530
- });
531
- var quote = new Quote(paramsWithFee, responseWithFeeNoReceiver);
532
- expect(quote.integratorFeeParams).toBeDefined();
533
- expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0xabcdef0123456789abcdef0123456789abcdef01');
534
- });
535
- it('should return undefined when no receiver available', function() {
536
- var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
537
- integratorFee: 100,
538
- integratorFeeShare: 50
539
- });
540
- var quote = new Quote(params, responseWithFeeNoReceiver);
541
- expect(quote.integratorFeeParams).toBeUndefined();
542
- });
543
- it('should return undefined when no integratorFee in response', function() {
544
- var quote = new Quote(params, ResponseMock);
545
- expect(quote.integratorFeeParams).toBeUndefined();
546
- });
547
- });
548
452
  });
@@ -53,7 +53,7 @@ export var QuoterRequest = /*#__PURE__*/ function() {
53
53
  this.enableEstimate = params.enableEstimate || false;
54
54
  this.permit = params.permit;
55
55
  this.integratorFee = params.integratorFee;
56
- this.source = params.source;
56
+ this.source = params.source || 'sdk';
57
57
  var _params_isPermit2;
58
58
  this.isPermit2 = (_params_isPermit2 = params.isPermit2) !== null && _params_isPermit2 !== void 0 ? _params_isPermit2 : false;
59
59
  this.slippage = params.slippage;
@@ -66,6 +66,9 @@ export var QuoterRequest = /*#__PURE__*/ function() {
66
66
  if (!isValidAmount(this.amount)) {
67
67
  throw new Error("".concat(this.amount, " is invalid amount"));
68
68
  }
69
+ if (this.integratorFee && this.source === 'sdk') {
70
+ throw new Error('cannot use fee without source');
71
+ }
69
72
  }
70
73
  _create_class(QuoterRequest, [
71
74
  {
@@ -9,6 +9,7 @@ describe(__filename, function() {
9
9
  amount: '1000000000000000000000',
10
10
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
11
11
  integratorFee: {
12
+ share: Bps.fromPercent(50),
12
13
  receiver: Address.fromBigInt(10n),
13
14
  value: new Bps(1n)
14
15
  }
@@ -21,6 +22,7 @@ describe(__filename, function() {
21
22
  amount: '1000000000000000000000',
22
23
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
23
24
  integratorFee: {
25
+ share: Bps.fromPercent(50),
24
26
  receiver: Address.fromBigInt(10n),
25
27
  value: new Bps(1n)
26
28
  }
@@ -35,6 +37,7 @@ describe(__filename, function() {
35
37
  amount: '1000000000000000000000',
36
38
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
37
39
  integratorFee: {
40
+ share: Bps.fromPercent(50),
38
41
  receiver: Address.fromBigInt(10n),
39
42
  value: new Bps(1n)
40
43
  }
@@ -49,6 +52,7 @@ describe(__filename, function() {
49
52
  amount: '1000000000000000000000',
50
53
  walletAddress: '0x0000000019ab540356cbb839be05303d7705fa1',
51
54
  integratorFee: {
55
+ share: Bps.fromPercent(50),
52
56
  receiver: Address.fromBigInt(10n),
53
57
  value: new Bps(1n)
54
58
  }
@@ -63,13 +67,14 @@ describe(__filename, function() {
63
67
  amount: 'dasdad',
64
68
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
65
69
  integratorFee: {
70
+ share: Bps.fromPercent(50),
66
71
  receiver: Address.fromBigInt(10n),
67
72
  value: new Bps(1n)
68
73
  }
69
74
  });
70
75
  }).toThrow(/is invalid amount/);
71
76
  });
72
- it('allows fee without source', function() {
77
+ it('returns error if fee is provided and source not', function() {
73
78
  expect(function() {
74
79
  return QuoterRequest.new({
75
80
  fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
@@ -77,10 +82,11 @@ describe(__filename, function() {
77
82
  amount: '1000000',
78
83
  walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
79
84
  integratorFee: {
85
+ share: Bps.fromPercent(50),
80
86
  receiver: Address.fromBigInt(10n),
81
87
  value: new Bps(1n)
82
88
  }
83
89
  });
84
- }).not.toThrow();
90
+ }).toThrow(/cannot use fee without source/);
85
91
  });
86
92
  });
@@ -57,12 +57,15 @@ export var FusionExtension = /*#__PURE__*/ function() {
57
57
  {
58
58
  key: "build",
59
59
  value: function build() {
60
- var _this_extra;
60
+ var _this_extra, _this_extra1;
61
61
  var amountData = this.buildAmountGetterData(true);
62
62
  var builder = new ExtensionBuilder().withMakingAmountData(this.address, amountData).withTakingAmountData(this.address, amountData).withPostInteraction(new Interaction(this.address, this.buildInteractionData()));
63
63
  if ((_this_extra = this.extra) === null || _this_extra === void 0 ? void 0 : _this_extra.makerPermit) {
64
- var _this_extra1, _this_extra2;
65
- builder.withMakerPermit((_this_extra1 = this.extra) === null || _this_extra1 === void 0 ? void 0 : _this_extra1.makerPermit.target, (_this_extra2 = this.extra) === null || _this_extra2 === void 0 ? void 0 : _this_extra2.makerPermit.data);
64
+ var _this_extra2, _this_extra3;
65
+ builder.withMakerPermit((_this_extra2 = this.extra) === null || _this_extra2 === void 0 ? void 0 : _this_extra2.makerPermit.target, (_this_extra3 = this.extra) === null || _this_extra3 === void 0 ? void 0 : _this_extra3.makerPermit.data);
66
+ }
67
+ if ((_this_extra1 = this.extra) === null || _this_extra1 === void 0 ? void 0 : _this_extra1.preInteraction) {
68
+ builder.withPreInteraction(this.extra.preInteraction);
66
69
  }
67
70
  return builder.build();
68
71
  }
@@ -213,6 +216,7 @@ export var FusionExtension = /*#__PURE__*/ function() {
213
216
  }
214
217
  //endregion Parse amount data
215
218
  var makerPermit = extension.hasMakerPermit ? Interaction.decode(extension.makerPermit) : undefined;
219
+ var preInteraction = extension.hasPreInteraction ? Interaction.decode(extension.preInteraction) : undefined;
216
220
  assert(amountData.fees.integratorFee.value === interactionData.fees.integratorFee.value, "invalid extension: integrator fee must be same in interaction data and in amount data");
217
221
  assert(amountData.fees.resolverFee.value === interactionData.fees.resolverFee.value, "invalid extension: resolver fee must be same in interaction data and in amount data");
218
222
  assert(amountData.fees.whitelistDiscount.equal(interactionData.fees.whitelistDiscount), "invalid extension: whitelistDiscount must be same in interaction data and in amount data");
@@ -225,6 +229,7 @@ export var FusionExtension = /*#__PURE__*/ function() {
225
229
  if (!hasFees) {
226
230
  return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
227
231
  makerPermit: makerPermit,
232
+ preInteraction: preInteraction,
228
233
  customReceiver: customReceiver,
229
234
  fees: undefined
230
235
  });
@@ -232,6 +237,7 @@ export var FusionExtension = /*#__PURE__*/ function() {
232
237
  var fees = new Fees(new ResolverFee(protocolFeeRecipient, interactionData.fees.resolverFee, interactionData.fees.whitelistDiscount), interactionData.fees.integratorFee.isZero() ? IntegratorFee.ZERO : new IntegratorFee(integratorFeeRecipient, protocolFeeRecipient, interactionData.fees.integratorFee, interactionData.fees.integratorShare));
233
238
  return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
234
239
  makerPermit: makerPermit,
240
+ preInteraction: preInteraction,
235
241
  fees: fees,
236
242
  customReceiver: customReceiver
237
243
  });
@@ -87,6 +87,7 @@ export var FusionOrder = /*#__PURE__*/ function() {
87
87
  */ settlementExtensionContract, orderInfo, auctionDetails, whitelist) {
88
88
  var surplusParams = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : SurplusParams.NO_FEE, extra = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : FusionOrder.defaultExtra, extension = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : new FusionExtension(settlementExtensionContract, auctionDetails, whitelist, surplusParams, {
89
89
  makerPermit: extra.permit ? new Interaction(orderInfo.makerAsset, extra.permit) : undefined,
90
+ preInteraction: extra.preInteraction ? Interaction.decode(extra.preInteraction) : undefined,
90
91
  customReceiver: orderInfo.receiver,
91
92
  fees: extra === null || extra === void 0 ? void 0 : extra.fees
92
93
  });
@@ -116,6 +117,9 @@ export var FusionOrder = /*#__PURE__*/ function() {
116
117
  if (enablePermit2) {
117
118
  makerTraits.enablePermit2();
118
119
  }
120
+ if (extra.preInteraction) {
121
+ makerTraits.enablePreInteraction();
122
+ }
119
123
  if (extra.nonce !== undefined) {
120
124
  makerTraits.withNonce(extra.nonce);
121
125
  }
@@ -527,6 +531,7 @@ export var FusionOrder = /*#__PURE__*/ function() {
527
531
  enablePermit2: makerTraits.isPermit2(),
528
532
  nonce: makerTraits.nonceOrEpoch(),
529
533
  permit: extension.makerPermit === ZX ? undefined : Interaction.decode(extension.makerPermit).data,
534
+ preInteraction: extension.preInteraction === ZX ? undefined : extension.preInteraction,
530
535
  unwrapWETH: makerTraits.isNativeUnwrapEnabled(),
531
536
  orderExpirationDelay: orderExpirationDelay,
532
537
  fees: extra === null || extra === void 0 ? void 0 : extra.fees,
@@ -1,4 +1,4 @@
1
- import { Address, Bps, MakerTraits, Extension, ProxyFactory } from '@1inch/limit-order-sdk';
1
+ import { Address, Bps, MakerTraits, Extension, Interaction, ProxyFactory } from '@1inch/limit-order-sdk';
2
2
  import { parseEther, parseUnits } from 'ethers';
3
3
  import { FusionOrder } from './fusion-order.js';
4
4
  import { AuctionDetails } from './auction-details/index.js';
@@ -462,3 +462,134 @@ describe('FusionOrder Native', function() {
462
462
  expect(nativeOrder.build().receiver).toEqual(settlementExt.toString());
463
463
  });
464
464
  });
465
+ describe('FusionOrder preInteraction', function() {
466
+ it('should create order with preInteraction and set PRE_INTERACTION_CALL_FLAG in makerTraits', function() {
467
+ var extensionContract = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
468
+ var preInteraction = new Interaction(new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1'), '0xdeadbeef01020304');
469
+ var order = FusionOrder.new(extensionContract, {
470
+ makerAsset: new Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
471
+ takerAsset: new Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
472
+ makingAmount: 1983000000000000n,
473
+ takingAmount: 79052953622246027n,
474
+ maker: new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
475
+ }, {
476
+ auction: new AuctionDetails({
477
+ duration: 180n,
478
+ startTime: 1673548149n,
479
+ initialRateBump: 50000,
480
+ points: [
481
+ {
482
+ coefficient: 20000,
483
+ delay: 12
484
+ }
485
+ ]
486
+ }),
487
+ whitelist: Whitelist.new(1673548139n, [
488
+ {
489
+ address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
490
+ allowFrom: 0n
491
+ }
492
+ ]),
493
+ surplus: SurplusParams.NO_FEE
494
+ }, {
495
+ preInteraction: preInteraction.encode()
496
+ });
497
+ var makerTraits = new MakerTraits(BigInt(order.build().makerTraits));
498
+ expect(makerTraits.hasPreInteraction()).toBe(true);
499
+ });
500
+ it('should not set PRE_INTERACTION_CALL_FLAG when no preInteraction', function() {
501
+ var extensionContract = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
502
+ var order = FusionOrder.new(extensionContract, {
503
+ makerAsset: new Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
504
+ takerAsset: new Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
505
+ makingAmount: 1983000000000000n,
506
+ takingAmount: 79052953622246027n,
507
+ maker: new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
508
+ }, {
509
+ auction: new AuctionDetails({
510
+ duration: 180n,
511
+ startTime: 1673548149n,
512
+ initialRateBump: 50000,
513
+ points: [
514
+ {
515
+ coefficient: 20000,
516
+ delay: 12
517
+ }
518
+ ]
519
+ }),
520
+ whitelist: Whitelist.new(1673548139n, [
521
+ {
522
+ address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
523
+ allowFrom: 0n
524
+ }
525
+ ]),
526
+ surplus: SurplusParams.NO_FEE
527
+ });
528
+ var makerTraits = new MakerTraits(BigInt(order.build().makerTraits));
529
+ expect(makerTraits.hasPreInteraction()).toBe(false);
530
+ });
531
+ it('should round-trip order with preInteraction via fromDataAndExtension', function() {
532
+ var extensionContract = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
533
+ var preInteractionTarget = new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1');
534
+ var preInteractionCalldata = '0x0599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a491';
535
+ var preInteraction = new Interaction(preInteractionTarget, preInteractionCalldata);
536
+ var order = FusionOrder.new(extensionContract, {
537
+ makerAsset: new Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
538
+ takerAsset: new Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
539
+ makingAmount: 1983000000000000n,
540
+ takingAmount: 79052953622246027n,
541
+ maker: new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
542
+ }, {
543
+ auction: new AuctionDetails({
544
+ duration: 180n,
545
+ startTime: 1673548149n,
546
+ initialRateBump: 50000,
547
+ points: [
548
+ {
549
+ coefficient: 20000,
550
+ delay: 12
551
+ }
552
+ ]
553
+ }),
554
+ whitelist: Whitelist.new(1673548139n, [
555
+ {
556
+ address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
557
+ allowFrom: 0n
558
+ }
559
+ ]),
560
+ surplus: SurplusParams.NO_FEE
561
+ }, {
562
+ preInteraction: preInteraction.encode()
563
+ });
564
+ var built = order.build();
565
+ var extension = order.extension;
566
+ var restored = FusionOrder.fromDataAndExtension({
567
+ salt: built.salt,
568
+ maker: built.maker,
569
+ receiver: built.receiver,
570
+ makerAsset: built.makerAsset,
571
+ takerAsset: built.takerAsset,
572
+ makerTraits: built.makerTraits,
573
+ makingAmount: built.makingAmount,
574
+ takingAmount: built.takingAmount
575
+ }, extension);
576
+ expect(restored.build().salt).toEqual(built.salt);
577
+ expect(restored.extension.encode()).toEqual(extension.encode());
578
+ });
579
+ it('should validate OKX order with preInteraction (real customer data)', function() {
580
+ var extensionHex = '0x000002b800000207000000d2000000d2000000d20000006900000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d952ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d953a617c2fbaf8d7c58c793fbbd2d14eb4927876c10100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b872a96f0000000000000000000000000000000000000000000000000006715eae5b898683d0000000000000000000000000000000000000000000000000000000069c931e800000000000000000000000000000000000000000000000000000000000000410599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a4917028648ec3e33d048184f9877d4892fb829ddc5d75a19c1c2ef064d2a38c012b1b000000000000000000000000000000000000000000000000000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef500000000000000000000000000000000000000000090cbe4bdd538d6e9b379bff5fe72c3d67a521de500000000006469c930cb062324dfe7924cb4f3257d000c0000000000000000000000006ea9a11ae13b29f5c5550000d18bd45f0b94f54a968f0000aa848f727be12534f248000095770895ad27ad6b0d950000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00';
581
+ var extension = Extension.decode(extensionHex);
582
+ expect(function() {
583
+ FusionOrder.fromDataAndExtension({
584
+ maker: '0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1',
585
+ makerAsset: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
586
+ makerTraits: '69656178681823023809491920669288819567982727296017585526061607372909138935808',
587
+ makingAmount: '1983000000000000',
588
+ receiver: '0xb698362cc878094c406115efeeb13089b544e6c8',
589
+ salt: '1084071965642925953405739669729447852001208220133',
590
+ takerAsset: '0xda7ad9dea9397cffddae2f8a052b82f1484252b3',
591
+ takingAmount: '79052953622246027'
592
+ }, extension);
593
+ }).not.toThrow();
594
+ });
595
+ });
@@ -2,6 +2,11 @@
2
2
  * Required if `allowPartialFills` or `allowMultipleFills` is false
3
3
  * Max size is 40bit
4
4
  */ /**
5
+ * Encoded pre-interaction: target address (20 bytes) followed by calldata.
6
+ * Format matches `Interaction.encode()`: `0x{target}{calldata}`.
7
+ * When set, the PRE_INTERACTION_CALL_FLAG is enabled in makerTraits
8
+ * and the LOP contract calls IPreInteraction on the target before the swap.
9
+ */ /**
5
10
  * Default is true
6
11
  */ /**
7
12
  * Default is true
@@ -1 +1 @@
1
- {"name":"@1inch/fusion-sdk","version":"2.4.6-rc.0","type":"module"}
1
+ {"name":"@1inch/fusion-sdk","version":"2.4.6-rc.3","type":"module"}
@@ -1,5 +1,5 @@
1
1
  import { Address, ProxyFactory } from '@1inch/limit-order-sdk';
2
- import { FusionOrderParamsData, IntegratorFeeResponse, ResolverFeePreset } from './types.js';
2
+ import { FusionOrderParamsData, IntegratorFeeParams, ResolverFeePreset } from './types.js';
3
3
  import { Cost, PresetEnum, QuoterResponse } from '../types.js';
4
4
  import { Preset } from '../preset.js';
5
5
  import { FusionOrder } from '../../../fusion-order/index.js';
@@ -25,11 +25,10 @@ export declare class Quote {
25
25
  readonly slippage: number;
26
26
  readonly resolverFeePreset: ResolverFeePreset;
27
27
  readonly surplusFee?: number;
28
- readonly integratorFeeParams?: IntegratorFeeResponse;
28
+ readonly integratorFeeParams?: IntegratorFeeParams;
29
29
  constructor(params: QuoterRequest, response: QuoterResponse);
30
30
  createFusionOrder(paramsData: Omit<FusionOrderParamsData, 'permit' | 'isPermit2'>): FusionOrder;
31
31
  getPreset(type?: PresetEnum): Preset;
32
32
  private getWhitelist;
33
33
  private _createOrder;
34
- private parseIntegratorFee;
35
34
  }
@@ -13,16 +13,11 @@ export type FusionOrderParamsData = {
13
13
  delayAuctionStartTimeBy?: bigint;
14
14
  orderExpirationDelay?: bigint;
15
15
  };
16
- export type IntegratorFeeRequest = {
17
- receiver: Address;
18
- value: Bps;
19
- };
20
- export type IntegratorFeeResponse = {
16
+ export type IntegratorFeeParams = {
21
17
  receiver: Address;
22
18
  value: Bps;
23
19
  share: Bps;
24
20
  };
25
- export type IntegratorFeeParams = IntegratorFeeResponse;
26
21
  export type ResolverFeePreset = {
27
22
  receiver: Address;
28
23
  bps: Bps;
@@ -1,6 +1,6 @@
1
1
  import { Address } from '@1inch/limit-order-sdk';
2
2
  import { QuoterRequestParams, QuoterRequestParamsRaw } from './types.js';
3
- import { IntegratorFeeRequest } from './quote/index.js';
3
+ import { IntegratorFeeParams } from './quote/index.js';
4
4
  export declare class QuoterRequest {
5
5
  readonly fromTokenAddress: Address;
6
6
  readonly toTokenAddress: Address;
@@ -8,8 +8,8 @@ export declare class QuoterRequest {
8
8
  readonly walletAddress: Address;
9
9
  readonly enableEstimate: boolean;
10
10
  readonly permit: string | undefined;
11
- readonly integratorFee?: IntegratorFeeRequest;
12
- readonly source?: string;
11
+ readonly integratorFee?: IntegratorFeeParams;
12
+ readonly source: string;
13
13
  readonly isPermit2: boolean;
14
14
  readonly slippage?: number;
15
15
  constructor(params: QuoterRequestParams);
@@ -1,4 +1,4 @@
1
- import { IntegratorFeeRequest } from './quote/index.js';
1
+ import { IntegratorFeeParams } from './quote/index.js';
2
2
  import { NetworkEnum } from '../../constants.js';
3
3
  export type QuoterRequestParams = {
4
4
  fromTokenAddress: string;
@@ -7,7 +7,7 @@ export type QuoterRequestParams = {
7
7
  walletAddress: string;
8
8
  enableEstimate?: boolean;
9
9
  permit?: string;
10
- integratorFee?: IntegratorFeeRequest;
10
+ integratorFee?: IntegratorFeeParams;
11
11
  source?: string;
12
12
  isPermit2?: boolean;
13
13
  slippage?: number;
@@ -10,12 +10,14 @@ export declare class FusionExtension {
10
10
  readonly surplus: SurplusParams;
11
11
  readonly extra?: {
12
12
  makerPermit?: Interaction;
13
+ preInteraction?: Interaction;
13
14
  customReceiver?: Address;
14
15
  fees?: Fees;
15
16
  } | undefined;
16
17
  private static CUSTOM_RECEIVER_FLAG_BIT;
17
18
  constructor(address: Address, auctionDetails: AuctionDetails, whitelist: Whitelist, surplus: SurplusParams, extra?: {
18
19
  makerPermit?: Interaction;
20
+ preInteraction?: Interaction;
19
21
  customReceiver?: Address;
20
22
  fees?: Fees;
21
23
  } | undefined);
@@ -6,6 +6,7 @@ export type Extra = {
6
6
  unwrapWETH?: boolean;
7
7
  nonce?: bigint;
8
8
  permit?: string;
9
+ preInteraction?: string;
9
10
  allowPartialFills?: boolean;
10
11
  allowMultipleFills?: boolean;
11
12
  orderExpirationDelay?: bigint;
@@ -10,4 +10,4 @@ export * from './utils/time.js';
10
10
  export * from './validations.js';
11
11
  export * from './ws-api/index.js';
12
12
  export * from './errors.js';
13
- export { QuoterRequest, type QuoterResponse, RelayerRequest, QuoterCustomPresetRequest, PresetEnum, Preset, Quote, type OrderStatusResponse, OrderStatus, type IntegratorFeeRequest, type IntegratorFeeResponse } from './api/index.js';
13
+ export { QuoterRequest, type QuoterResponse, RelayerRequest, QuoterCustomPresetRequest, PresetEnum, Preset, Quote, type OrderStatusResponse, OrderStatus } from './api/index.js';
@@ -1,7 +1,7 @@
1
1
  import { Address, LimitOrderV4Struct } from '@1inch/limit-order-sdk';
2
2
  import { BlockchainProviderConnector, HttpProviderConnector } from '../connector/index.js';
3
3
  import { NetworkEnum } from '../constants.js';
4
- import { CustomPreset, IntegratorFeeRequest, PresetEnum } from '../api/index.js';
4
+ import { CustomPreset, IntegratorFeeParams, PresetEnum } from '../api/index.js';
5
5
  import { FusionOrder } from '../fusion-order/index.js';
6
6
  export type FusionSDKConfigParams = {
7
7
  url: string;
@@ -17,7 +17,7 @@ export type QuoteParams = {
17
17
  walletAddress?: string;
18
18
  enableEstimate?: boolean;
19
19
  permit?: string;
20
- integratorFee?: IntegratorFeeRequest;
20
+ integratorFee?: IntegratorFeeParams;
21
21
  source?: string;
22
22
  isPermit2?: boolean;
23
23
  slippage?: number;
@@ -40,7 +40,7 @@ export type OrderParams = {
40
40
  orderExpirationDelay?: bigint;
41
41
  allowPartialFills?: boolean;
42
42
  allowMultipleFills?: boolean;
43
- integratorFee?: IntegratorFeeRequest;
43
+ integratorFee?: IntegratorFeeParams;
44
44
  slippage?: number;
45
45
  };
46
46
  export type OrderInfo = {