@1inch/fusion-sdk 2.4.7-rc.3 → 2.4.8-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 (56) hide show
  1. package/README.md +25 -174
  2. package/dist/cjs/api/quoter/quote/quote.js +20 -6
  3. package/dist/cjs/api/quoter/quoter.api.spec.js +103 -6
  4. package/dist/cjs/api/quoter/quoter.request.js +1 -4
  5. package/dist/cjs/api/quoter/quoter.request.spec.js +2 -8
  6. package/dist/cjs/constants.js +1 -19
  7. package/dist/cjs/fusion-order/fusion-extension.js +10 -3
  8. package/dist/cjs/fusion-order/fusion-order.js +5 -120
  9. package/dist/cjs/fusion-order/fusion-order.spec.js +124 -93
  10. package/dist/cjs/fusion-order/index.js +0 -1
  11. package/dist/cjs/index.js +3 -0
  12. package/dist/cjs/sdk/README.md +18 -14
  13. package/dist/esm/api/quoter/quote/quote.js +20 -6
  14. package/dist/esm/api/quoter/quote/types.js +15 -3
  15. package/dist/esm/api/quoter/quoter.api.spec.js +103 -6
  16. package/dist/esm/api/quoter/quoter.request.js +1 -4
  17. package/dist/esm/api/quoter/quoter.request.spec.js +2 -8
  18. package/dist/esm/constants.js +1 -16
  19. package/dist/esm/fusion-order/fusion-extension.js +10 -3
  20. package/dist/esm/fusion-order/fusion-order.js +6 -121
  21. package/dist/esm/fusion-order/fusion-order.spec.js +125 -94
  22. package/dist/esm/fusion-order/index.js +0 -1
  23. package/dist/esm/fusion-order/types.js +5 -0
  24. package/dist/esm/index.js +1 -1
  25. package/dist/esm/package.json +1 -1
  26. package/dist/esm/sdk/README.md +18 -14
  27. package/dist/types/src/api/quoter/quote/quote.d.ts +3 -2
  28. package/dist/types/src/api/quoter/quote/types.d.ts +6 -1
  29. package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
  30. package/dist/types/src/api/quoter/types.d.ts +2 -2
  31. package/dist/types/src/constants.d.ts +0 -1
  32. package/dist/types/src/fusion-order/fusion-extension.d.ts +2 -0
  33. package/dist/types/src/fusion-order/fusion-order.d.ts +0 -6
  34. package/dist/types/src/fusion-order/index.d.ts +0 -1
  35. package/dist/types/src/fusion-order/types.d.ts +1 -0
  36. package/dist/types/src/index.d.ts +2 -2
  37. package/dist/types/src/sdk/types.d.ts +3 -3
  38. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  39. package/package.json +4 -4
  40. package/dist/cjs/fusion-order/permit/constants.js +0 -98
  41. package/dist/cjs/fusion-order/permit/index.js +0 -34
  42. package/dist/cjs/fusion-order/permit/permit-transfer-from.js +0 -115
  43. package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +0 -232
  44. package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +0 -61
  45. package/dist/cjs/fusion-order/permit/utils.js +0 -35
  46. package/dist/esm/fusion-order/permit/constants.js +0 -71
  47. package/dist/esm/fusion-order/permit/index.js +0 -3
  48. package/dist/esm/fusion-order/permit/permit-transfer-from.js +0 -105
  49. package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +0 -228
  50. package/dist/esm/fusion-order/permit/transfer-from-suffix.js +0 -38
  51. package/dist/esm/fusion-order/permit/utils.js +0 -12
  52. package/dist/types/src/fusion-order/permit/constants.d.ts +0 -7
  53. package/dist/types/src/fusion-order/permit/index.d.ts +0 -3
  54. package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +0 -11
  55. package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +0 -10
  56. package/dist/types/src/fusion-order/permit/utils.d.ts +0 -3
@@ -16,6 +16,7 @@ var _whitelist = require("./whitelist/whitelist.js");
16
16
  var _surplusparams = require("./surplus-params.js");
17
17
  var _index1 = require("./fees/index.js");
18
18
  var _utils = require("../utils.js");
19
+ var _constants = require("../constants.js");
19
20
  function _class_call_check(instance, Constructor) {
20
21
  if (!(instance instanceof Constructor)) {
21
22
  throw new TypeError("Cannot call a class as a function");
@@ -72,12 +73,15 @@ var FusionExtension = /*#__PURE__*/ function() {
72
73
  {
73
74
  key: "build",
74
75
  value: function build() {
75
- var _this_extra;
76
+ var _this_extra, _this_extra1;
76
77
  var amountData = this.buildAmountGetterData(true);
77
78
  var builder = new _limitordersdk.ExtensionBuilder().withMakingAmountData(this.address, amountData).withTakingAmountData(this.address, amountData).withPostInteraction(new _limitordersdk.Interaction(this.address, this.buildInteractionData()));
78
79
  if ((_this_extra = this.extra) === null || _this_extra === void 0 ? void 0 : _this_extra.makerPermit) {
79
- var _this_extra1, _this_extra2;
80
- 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);
80
+ var _this_extra2, _this_extra3;
81
+ 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);
82
+ }
83
+ if ((_this_extra1 = this.extra) === null || _this_extra1 === void 0 ? void 0 : _this_extra1.preInteraction) {
84
+ builder.withPreInteraction(this.extra.preInteraction);
81
85
  }
82
86
  return builder.build();
83
87
  }
@@ -228,6 +232,7 @@ var FusionExtension = /*#__PURE__*/ function() {
228
232
  }
229
233
  //endregion Parse amount data
230
234
  var makerPermit = extension.hasMakerPermit ? _limitordersdk.Interaction.decode(extension.makerPermit) : undefined;
235
+ var preInteraction = extension.preInteraction !== _constants.ZX ? _limitordersdk.Interaction.decode(extension.preInteraction) : undefined;
231
236
  (0, _assert.default)(amountData.fees.integratorFee.value === interactionData.fees.integratorFee.value, "invalid extension: integrator fee must be same in interaction data and in amount data");
232
237
  (0, _assert.default)(amountData.fees.resolverFee.value === interactionData.fees.resolverFee.value, "invalid extension: resolver fee must be same in interaction data and in amount data");
233
238
  (0, _assert.default)(amountData.fees.whitelistDiscount.equal(interactionData.fees.whitelistDiscount), "invalid extension: whitelistDiscount must be same in interaction data and in amount data");
@@ -240,6 +245,7 @@ var FusionExtension = /*#__PURE__*/ function() {
240
245
  if (!hasFees) {
241
246
  return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
242
247
  makerPermit: makerPermit,
248
+ preInteraction: preInteraction,
243
249
  customReceiver: customReceiver,
244
250
  fees: undefined
245
251
  });
@@ -247,6 +253,7 @@ var FusionExtension = /*#__PURE__*/ function() {
247
253
  var fees = new _index1.Fees(new _index1.ResolverFee(protocolFeeRecipient, interactionData.fees.resolverFee, interactionData.fees.whitelistDiscount), interactionData.fees.integratorFee.isZero() ? _index1.IntegratorFee.ZERO : new _index1.IntegratorFee(integratorFeeRecipient, protocolFeeRecipient, interactionData.fees.integratorFee, interactionData.fees.integratorShare));
248
254
  return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
249
255
  makerPermit: makerPermit,
256
+ preInteraction: preInteraction,
250
257
  fees: fees,
251
258
  customReceiver: customReceiver
252
259
  });
@@ -9,14 +9,10 @@ Object.defineProperty(exports, "FusionOrder", {
9
9
  }
10
10
  });
11
11
  var _limitordersdk = require("@1inch/limit-order-sdk");
12
- var _byteutils = require("@1inch/byte-utils");
13
12
  var _assert = /*#__PURE__*/ _interop_require_default(require("assert"));
14
13
  var _fusionextension = require("./fusion-extension.js");
15
14
  var _sourcetrack = require("./source-track.js");
16
15
  var _surplusparams = require("./surplus-params.js");
17
- var _permittransferfrom = require("./permit/permit-transfer-from.js");
18
- var _utils = require("./permit/utils.js");
19
- var _transferfromsuffix = require("./permit/transfer-from-suffix.js");
20
16
  var _index = require("../amount-calculator/auction-calculator/index.js");
21
17
  var _constants = require("../constants.js");
22
18
  var _amounts = require("../utils/amounts.js");
@@ -54,13 +50,6 @@ function _define_property(obj, key, value) {
54
50
  }
55
51
  return obj;
56
52
  }
57
- function _instanceof(left, right) {
58
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
59
- return !!right[Symbol.hasInstance](left);
60
- } else {
61
- return left instanceof right;
62
- }
63
- }
64
53
  function _interop_require_default(obj) {
65
54
  return obj && obj.__esModule ? obj : {
66
55
  default: obj
@@ -113,6 +102,7 @@ var FusionOrder = /*#__PURE__*/ function() {
113
102
  */ settlementExtensionContract, orderInfo, auctionDetails, whitelist) {
114
103
  var surplusParams = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _surplusparams.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.FusionExtension(settlementExtensionContract, auctionDetails, whitelist, surplusParams, {
115
104
  makerPermit: extra.permit ? new _limitordersdk.Interaction(orderInfo.makerAsset, extra.permit) : undefined,
105
+ preInteraction: extra.preInteraction ? _limitordersdk.Interaction.decode(extra.preInteraction) : undefined,
116
106
  customReceiver: orderInfo.receiver,
117
107
  fees: extra === null || extra === void 0 ? void 0 : extra.fees
118
108
  });
@@ -142,6 +132,9 @@ var FusionOrder = /*#__PURE__*/ function() {
142
132
  if (enablePermit2) {
143
133
  makerTraits.enablePermit2();
144
134
  }
135
+ if (extra.preInteraction) {
136
+ makerTraits.enablePreInteraction();
137
+ }
145
138
  if (extra.nonce !== undefined) {
146
139
  makerTraits.withNonce(extra.nonce);
147
140
  }
@@ -188,9 +181,6 @@ var FusionOrder = /*#__PURE__*/ function() {
188
181
  {
189
182
  key: "makerAsset",
190
183
  get: function get() {
191
- if (this.isTransferPermit()) {
192
- return this.decodeTransferPermitSuffix().token;
193
- }
194
184
  return this.inner.makerAsset;
195
185
  }
196
186
  },
@@ -287,48 +277,6 @@ var FusionOrder = /*#__PURE__*/ function() {
287
277
  return this.inner.salt;
288
278
  }
289
279
  },
290
- {
291
- key: "isTransferPermit",
292
- value: /**
293
- * Returns true if the order uses a Permit2 transfer permit via Permit2Proxy.
294
- * Decodes `makerAssetSuffix` and validates the Permit2 ABI structure.
295
- *
296
- * @see FusionOrder.withTransferPermit
297
- * @see FusionOrder.createTransferPermit
298
- */ function isTransferPermit() {
299
- try {
300
- this.decodeTransferPermitSuffix();
301
- return true;
302
- } catch (e) {
303
- return false;
304
- }
305
- }
306
- },
307
- {
308
- key: "withTransferPermit",
309
- value: function withTransferPermit(permit, signature) {
310
- var suffix = permit.getTransferFromSuffix(signature);
311
- var currentExtension = this.inner.extension;
312
- var newExtension = new _limitordersdk.Extension(_object_spread_props(_object_spread({}, currentExtension), {
313
- makerAssetSuffix: suffix
314
- }));
315
- this.inner.makerTraits.disablePermit2();
316
- var baseSalt = this.inner.salt >> 160n;
317
- var newSalt = _limitordersdk.LimitOrder.buildSalt(newExtension, baseSalt);
318
- this.inner = new _limitordersdk.LimitOrder({
319
- maker: this.inner.maker,
320
- makerAsset: permit.spender,
321
- takerAsset: this.inner.takerAsset,
322
- makingAmount: this.inner.makingAmount,
323
- takingAmount: this.inner.takingAmount,
324
- receiver: this.inner.receiver,
325
- salt: newSalt
326
- }, this.inner.makerTraits, newExtension, {
327
- optimizeReceiverAddress: false
328
- });
329
- return this;
330
- }
331
- },
332
280
  {
333
281
  key: "build",
334
282
  value: function build() {
@@ -524,67 +472,6 @@ var FusionOrder = /*#__PURE__*/ function() {
524
472
  */ function nativeSignature(maker) {
525
473
  return this.inner.nativeSignature(maker);
526
474
  }
527
- },
528
- {
529
- key: "createTransferPermit",
530
- value: /**
531
- * Creates a Permit2 `PermitTransferFrom` object for the order's maker asset.
532
- *
533
- * Can only be used for orders where `multipleFillsAllowed` is `false`.
534
- *
535
- * The returned permit authorizes the `permit2Proxy` address (as spender)
536
- * to transfer up to `makingAmount` of the `makerAsset` token,
537
- * with a random 256-bit nonce and the order's deadline.
538
- *
539
- * The resulting permit can be signed and then attached to the order
540
- * via {@link FusionOrder.withTransferPermit}.
541
- *
542
- * @param chainId - The chain ID used to resolve the default Permit2Proxy address
543
- * @param permit2Proxy - Optional address of the Permit2Proxy contract that will act as spender.
544
- * Defaults to the built-in address for the given `chainId`.
545
- * @returns A {@link PermitTransferFrom} instance that can be signed and attached to the order
546
- *
547
- * @throws If `multipleFillsAllowed` is `true`
548
- *
549
- * @see FusionOrder.withTransferPermit
550
- */ function createTransferPermit(chainIdOrPermit2Proxy, permit2Proxy) {
551
- (0, _assert.default)(!this.multipleFillsAllowed, 'transfer permit can be used only for orders where multipleFillsAllowed=false');
552
- var spender = _instanceof(chainIdOrPermit2Proxy, _limitordersdk.Address) ? chainIdOrPermit2Proxy : permit2Proxy !== null && permit2Proxy !== void 0 ? permit2Proxy : (0, _utils.getPermit2ProxyAddress)(chainIdOrPermit2Proxy);
553
- return new _permittransferfrom.PermitTransferFrom(this.makerAsset, this.makingAmount, spender, (0, _limitordersdk.randBigInt)(_byteutils.UINT_256_MAX), this.deadline);
554
- }
555
- },
556
- {
557
- key: "restoreMakerAssetSuffix",
558
- value: /**
559
- * Restores the original `makerAssetSuffix` that `FusionExtension.build()` does not preserve.
560
- * Recomputes the salt to match the patched extension hash.
561
- */ function restoreMakerAssetSuffix(makerAssetSuffix) {
562
- var patchedExtension = new _limitordersdk.Extension(_object_spread_props(_object_spread({}, this.inner.extension), {
563
- makerAssetSuffix: makerAssetSuffix
564
- }));
565
- var baseSalt = this.inner.salt >> 160n;
566
- this.inner = new _limitordersdk.LimitOrder({
567
- maker: this.inner.maker,
568
- makerAsset: this.inner.makerAsset,
569
- takerAsset: this.inner.takerAsset,
570
- makingAmount: this.inner.makingAmount,
571
- takingAmount: this.inner.takingAmount,
572
- receiver: this.inner.receiver,
573
- salt: _limitordersdk.LimitOrder.buildSalt(patchedExtension, baseSalt)
574
- }, this.inner.makerTraits, patchedExtension, {
575
- optimizeReceiverAddress: false
576
- });
577
- }
578
- },
579
- {
580
- key: "decodeTransferPermitSuffix",
581
- value: function decodeTransferPermitSuffix() {
582
- var suffix = this.inner.extension.makerAssetSuffix;
583
- if (suffix === _constants.ZX) {
584
- throw new Error('no makerAssetSuffix');
585
- }
586
- return (0, _transferfromsuffix.decodeTransferFromSuffix)(suffix);
587
- }
588
475
  }
589
476
  ], [
590
477
  {
@@ -659,14 +546,12 @@ var FusionOrder = /*#__PURE__*/ function() {
659
546
  enablePermit2: makerTraits.isPermit2(),
660
547
  nonce: makerTraits.nonceOrEpoch(),
661
548
  permit: extension.makerPermit === _constants.ZX ? undefined : _limitordersdk.Interaction.decode(extension.makerPermit).data,
549
+ preInteraction: extension.preInteraction === _constants.ZX ? undefined : extension.preInteraction,
662
550
  unwrapWETH: makerTraits.isNativeUnwrapEnabled(),
663
551
  orderExpirationDelay: orderExpirationDelay,
664
552
  fees: extra === null || extra === void 0 ? void 0 : extra.fees,
665
553
  optimizeReceiverAddress: true
666
554
  });
667
- if (extension.makerAssetSuffix !== _constants.ZX) {
668
- fusionOrder.restoreMakerAssetSuffix(extension.makerAssetSuffix);
669
- }
670
555
  (0, _assert.default)(providedSalt === fusionOrder.salt, 'invalid salt for passed extension');
671
556
  return fusionOrder;
672
557
  }
@@ -465,104 +465,135 @@ describe('FusionOrder Native', function() {
465
465
  });
466
466
  expect(nativeOrder.build().receiver).toEqual(settlementExt.toString());
467
467
  });
468
- describe('isTransferPermit', function() {
469
- var extensionContract = new _limitordersdk.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c');
470
- var permit2Proxy = new _limitordersdk.Address('0x1234567890abcdef1234567890abcdef12345678');
471
- var baseOrder = function() {
472
- return _fusionorder.FusionOrder.new(extensionContract, {
473
- makerAsset: new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
474
- takerAsset: new _limitordersdk.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
475
- makingAmount: (0, _ethers.parseEther)('1'),
476
- takingAmount: (0, _ethers.parseUnits)('1000', 6),
477
- maker: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa')
478
- }, {
479
- auction: new _index.AuctionDetails({
480
- duration: 180n,
481
- startTime: 1673548149n,
482
- initialRateBump: 0,
483
- points: []
484
- }),
485
- whitelist: _index1.Whitelist.new(1673548139n, [
468
+ });
469
+ describe('FusionOrder preInteraction', function() {
470
+ it('should create order with preInteraction and set PRE_INTERACTION_CALL_FLAG in makerTraits', function() {
471
+ var extensionContract = new _limitordersdk.Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
472
+ var preInteraction = new _limitordersdk.Interaction(new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1'), '0xdeadbeef01020304');
473
+ var order = _fusionorder.FusionOrder.new(extensionContract, {
474
+ makerAsset: new _limitordersdk.Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
475
+ takerAsset: new _limitordersdk.Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
476
+ makingAmount: 1983000000000000n,
477
+ takingAmount: 79052953622246027n,
478
+ maker: new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
479
+ }, {
480
+ auction: new _index.AuctionDetails({
481
+ duration: 180n,
482
+ startTime: 1673548149n,
483
+ initialRateBump: 50000,
484
+ points: [
486
485
  {
487
- address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
488
- allowFrom: 0n
486
+ coefficient: 20000,
487
+ delay: 12
489
488
  }
490
- ]),
491
- surplus: _surplusparams.SurplusParams.NO_FEE
492
- }, {
493
- allowPartialFills: false,
494
- allowMultipleFills: false,
495
- nonce: 1n
496
- });
497
- };
498
- it('should return false for regular order', function() {
499
- var order = _fusionorder.FusionOrder.new(extensionContract, {
500
- makerAsset: new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
501
- takerAsset: new _limitordersdk.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
502
- makingAmount: (0, _ethers.parseEther)('1'),
503
- takingAmount: (0, _ethers.parseUnits)('1000', 6),
504
- maker: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa')
505
- }, {
506
- auction: new _index.AuctionDetails({
507
- duration: 180n,
508
- startTime: 1673548149n,
509
- initialRateBump: 0,
510
- points: []
511
- }),
512
- whitelist: _index1.Whitelist.new(1673548139n, [
489
+ ]
490
+ }),
491
+ whitelist: _index1.Whitelist.new(1673548139n, [
492
+ {
493
+ address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
494
+ allowFrom: 0n
495
+ }
496
+ ]),
497
+ surplus: _surplusparams.SurplusParams.NO_FEE
498
+ }, {
499
+ preInteraction: preInteraction.encode()
500
+ });
501
+ var makerTraits = new _limitordersdk.MakerTraits(BigInt(order.build().makerTraits));
502
+ expect(makerTraits.hasPreInteraction()).toBe(true);
503
+ });
504
+ it('should not set PRE_INTERACTION_CALL_FLAG when no preInteraction', function() {
505
+ var extensionContract = new _limitordersdk.Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
506
+ var order = _fusionorder.FusionOrder.new(extensionContract, {
507
+ makerAsset: new _limitordersdk.Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
508
+ takerAsset: new _limitordersdk.Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
509
+ makingAmount: 1983000000000000n,
510
+ takingAmount: 79052953622246027n,
511
+ maker: new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
512
+ }, {
513
+ auction: new _index.AuctionDetails({
514
+ duration: 180n,
515
+ startTime: 1673548149n,
516
+ initialRateBump: 50000,
517
+ points: [
513
518
  {
514
- address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
515
- allowFrom: 0n
519
+ coefficient: 20000,
520
+ delay: 12
516
521
  }
517
- ]),
518
- surplus: _surplusparams.SurplusParams.NO_FEE
519
- });
520
- expect(order.isTransferPermit()).toBe(false);
521
- });
522
- it('should return true after withTransferPermit', function() {
523
- var order = baseOrder();
524
- var permit = order.createTransferPermit(permit2Proxy);
525
- var fakeSignature = '0x' + 'ab'.repeat(65);
526
- var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
527
- expect(orderWithPermit.isTransferPermit()).toBe(true);
528
- });
529
- it('should return real token as makerAsset after withTransferPermit', function() {
530
- var weth = new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2');
531
- var order = baseOrder();
532
- var permit = order.createTransferPermit(permit2Proxy);
533
- var fakeSignature = '0x' + 'ab'.repeat(65);
534
- var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
535
- expect(orderWithPermit.makerAsset).toEqual(weth);
536
- });
537
- it('should round-trip Permit2 order through fromDataAndExtension', function() {
538
- var order = baseOrder();
539
- var permit = order.createTransferPermit(permit2Proxy);
540
- var fakeSignature = '0x' + 'ab'.repeat(65);
541
- var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
542
- var built = orderWithPermit.build();
543
- var rebuilt = _fusionorder.FusionOrder.fromDataAndExtension(built, orderWithPermit.extension);
544
- expect(rebuilt.isTransferPermit()).toBe(true);
545
- expect(rebuilt.makerAsset).toEqual(orderWithPermit.makerAsset);
546
- expect(rebuilt.salt).toEqual(orderWithPermit.salt);
547
- expect(rebuilt.build()).toEqual(built);
522
+ ]
523
+ }),
524
+ whitelist: _index1.Whitelist.new(1673548139n, [
525
+ {
526
+ address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
527
+ allowFrom: 0n
528
+ }
529
+ ]),
530
+ surplus: _surplusparams.SurplusParams.NO_FEE
548
531
  });
549
- it('should reject tampered makerAssetSuffix via salt check', function() {
550
- var order = baseOrder();
551
- var ext = order.extension;
552
- var tampered = new _limitordersdk.Extension({
553
- makerAssetSuffix: '0xdeadbeef',
554
- takerAssetSuffix: ext.takerAssetSuffix,
555
- makingAmountData: ext.makingAmountData,
556
- takingAmountData: ext.takingAmountData,
557
- predicate: ext.predicate,
558
- makerPermit: ext.makerPermit,
559
- preInteraction: ext.preInteraction,
560
- postInteraction: ext.postInteraction,
561
- customData: ext.customData
562
- });
563
- expect(function() {
564
- return _fusionorder.FusionOrder.fromDataAndExtension(order.build(), tampered);
565
- }).toThrow('invalid salt for passed extension');
532
+ var makerTraits = new _limitordersdk.MakerTraits(BigInt(order.build().makerTraits));
533
+ expect(makerTraits.hasPreInteraction()).toBe(false);
534
+ });
535
+ it('should round-trip order with preInteraction via fromDataAndExtension', function() {
536
+ var extensionContract = new _limitordersdk.Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
537
+ var preInteractionTarget = new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1');
538
+ var preInteractionCalldata = '0x0599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a491';
539
+ var preInteraction = new _limitordersdk.Interaction(preInteractionTarget, preInteractionCalldata);
540
+ var order = _fusionorder.FusionOrder.new(extensionContract, {
541
+ makerAsset: new _limitordersdk.Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
542
+ takerAsset: new _limitordersdk.Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
543
+ makingAmount: 1983000000000000n,
544
+ takingAmount: 79052953622246027n,
545
+ maker: new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
546
+ }, {
547
+ auction: new _index.AuctionDetails({
548
+ duration: 180n,
549
+ startTime: 1673548149n,
550
+ initialRateBump: 50000,
551
+ points: [
552
+ {
553
+ coefficient: 20000,
554
+ delay: 12
555
+ }
556
+ ]
557
+ }),
558
+ whitelist: _index1.Whitelist.new(1673548139n, [
559
+ {
560
+ address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
561
+ allowFrom: 0n
562
+ }
563
+ ]),
564
+ surplus: _surplusparams.SurplusParams.NO_FEE
565
+ }, {
566
+ preInteraction: preInteraction.encode()
566
567
  });
568
+ var built = order.build();
569
+ var extension = order.extension;
570
+ var restored = _fusionorder.FusionOrder.fromDataAndExtension({
571
+ salt: built.salt,
572
+ maker: built.maker,
573
+ receiver: built.receiver,
574
+ makerAsset: built.makerAsset,
575
+ takerAsset: built.takerAsset,
576
+ makerTraits: built.makerTraits,
577
+ makingAmount: built.makingAmount,
578
+ takingAmount: built.takingAmount
579
+ }, extension);
580
+ expect(restored.build().salt).toEqual(built.salt);
581
+ expect(restored.extension.encode()).toEqual(extension.encode());
582
+ });
583
+ it('should validate OKX order with preInteraction (real customer data)', function() {
584
+ var extensionHex = '0x000002b800000207000000d2000000d2000000d20000006900000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d952ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d953a617c2fbaf8d7c58c793fbbd2d14eb4927876c10100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b872a96f0000000000000000000000000000000000000000000000000006715eae5b898683d0000000000000000000000000000000000000000000000000000000069c931e800000000000000000000000000000000000000000000000000000000000000410599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a4917028648ec3e33d048184f9877d4892fb829ddc5d75a19c1c2ef064d2a38c012b1b000000000000000000000000000000000000000000000000000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef500000000000000000000000000000000000000000090cbe4bdd538d6e9b379bff5fe72c3d67a521de500000000006469c930cb062324dfe7924cb4f3257d000c0000000000000000000000006ea9a11ae13b29f5c5550000d18bd45f0b94f54a968f0000aa848f727be12534f248000095770895ad27ad6b0d950000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00';
585
+ var extension = _limitordersdk.Extension.decode(extensionHex);
586
+ expect(function() {
587
+ _fusionorder.FusionOrder.fromDataAndExtension({
588
+ maker: '0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1',
589
+ makerAsset: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
590
+ makerTraits: '69656178681823023809491920669288819567982727296017585526061607372909138935808',
591
+ makingAmount: '1983000000000000',
592
+ receiver: '0xb698362cc878094c406115efeeb13089b544e6c8',
593
+ salt: '1084071965642925953405739669729447852001208220133',
594
+ takerAsset: '0xda7ad9dea9397cffddae2f8a052b82f1484252b3',
595
+ takingAmount: '79052953622246027'
596
+ }, extension);
597
+ }).not.toThrow();
567
598
  });
568
599
  });
@@ -16,7 +16,6 @@ _export_star(require("./fees/index.js"), exports);
16
16
  var _constants = require("./constants.js");
17
17
  _export_star(require("./surplus-params.js"), exports);
18
18
  _export_star(require("./cancellation-auction.js"), exports);
19
- _export_star(require("./permit/index.js"), exports);
20
19
  function _export_star(from, to) {
21
20
  Object.keys(from).forEach(function(k) {
22
21
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
package/dist/cjs/index.js CHANGED
@@ -15,6 +15,9 @@ _export(exports, {
15
15
  AmountMode: function() {
16
16
  return _limitordersdk.AmountMode;
17
17
  },
18
+ Bps: function() {
19
+ return _limitordersdk.Bps;
20
+ },
18
21
  Extension: function() {
19
22
  return _limitordersdk.Extension;
20
23
  },
@@ -204,12 +204,11 @@ sdk.placeOrder({
204
204
  toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
205
205
  amount: '50000000000000000', // 0.05 ETH
206
206
  walletAddress: makerAddress,
207
- // fee is an optional field
208
- fee: {
209
- takingFeeBps: 100, // 1% as we use bps format, 1% is equal to 100bps
210
- takingFeeReceiver: '0x0000000000000000000000000000000000000000' // fee receiver address
211
- },
212
- source: 'platform-name'
207
+ // integratorFee is an optional field
208
+ integratorFee: {
209
+ receiver: new Address('0x0000000000000000000000000000000000000000'), // fee receiver address
210
+ value: new Bps(100n) // 1% as we use bps format, 1% is equal to 100bps
211
+ }
213
212
  }).then(console.log)
214
213
  ```
215
214
 
@@ -224,6 +223,15 @@ type PaginationParams = {
224
223
  }
225
224
  ```
226
225
 
226
+ ### IntegratorFeeRequest
227
+
228
+ ```typescript
229
+ type IntegratorFeeRequest = {
230
+ receiver: Address // fee receiver address
231
+ value: Bps // 100 == 1%
232
+ }
233
+ ```
234
+
227
235
  ### QuoteParams
228
236
 
229
237
  ```typescript
@@ -231,8 +239,9 @@ type QuoteParams = {
231
239
  fromTokenAddress: string
232
240
  toTokenAddress: string
233
241
  amount: string
242
+ walletAddress?: string
234
243
  permit?: string // a permit (EIP-2612) call data, user approval sign
235
- takingFeeBps?: number // 100 == 1%
244
+ integratorFee?: IntegratorFeeRequest
236
245
  }
237
246
  ```
238
247
 
@@ -253,12 +262,7 @@ type OrderParams = {
253
262
  permit?: string // a permit (EIP-2612) call data, user approval sign
254
263
  receiver?: string // address
255
264
  preset?: PresetEnum
256
- nonce?: OrderNonce | string | number // allows to batch cancel orders. by default: not used
257
- fee?: TakingFeeInfo
258
- }
259
-
260
- export type TakingFeeInfo = {
261
- takingFeeBps: number // 100 == 1%
262
- takingFeeReceiver: string
265
+ nonce?: bigint // allows to batch cancel orders
266
+ integratorFee?: IntegratorFeeRequest
263
267
  }
264
268
  ```
@@ -87,11 +87,7 @@ export var Quote = /*#__PURE__*/ function() {
87
87
  bps: new Bps(BigInt(response.fee.bps))
88
88
  };
89
89
  this.surplusFee = response.surplusFee;
90
- this.integratorFeeParams = response.integratorFee && response.integratorFeeReceiver ? {
91
- receiver: new Address(response.integratorFeeReceiver),
92
- value: new Bps(BigInt(response.integratorFee)),
93
- share: Bps.fromPercent(response.integratorFeeShare || 0)
94
- } : undefined;
90
+ this.integratorFeeParams = this.parseIntegratorFee(response);
95
91
  }
96
92
  _create_class(Quote, [
97
93
  {
@@ -138,7 +134,7 @@ export var Quote = /*#__PURE__*/ function() {
138
134
  orderExpirationDelay: paramsData === null || paramsData === void 0 ? void 0 : paramsData.orderExpirationDelay,
139
135
  source: this.params.source,
140
136
  enablePermit2: params.isPermit2,
141
- fees: buildFees(this.resolverFeePreset, this.params.integratorFee || this.integratorFeeParams, this.surplusFee)
137
+ fees: buildFees(this.resolverFeePreset, this.integratorFeeParams, this.surplusFee)
142
138
  };
143
139
  return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
144
140
  }
@@ -179,6 +175,24 @@ export var Quote = /*#__PURE__*/ function() {
179
175
  }
180
176
  return FusionOrder.new(settlementExtension, orderInfo, details, extra);
181
177
  }
178
+ },
179
+ {
180
+ key: "parseIntegratorFee",
181
+ value: function parseIntegratorFee(response) {
182
+ var _this_params_integratorFee_receiver, _this_params_integratorFee;
183
+ if (!response.integratorFee) {
184
+ return undefined;
185
+ }
186
+ 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());
187
+ if (!receiver) {
188
+ return undefined;
189
+ }
190
+ return {
191
+ receiver: new Address(receiver),
192
+ value: new Bps(BigInt(response.integratorFee)),
193
+ share: Bps.fromPercent(response.integratorFeeShare || 0)
194
+ };
195
+ }
182
196
  }
183
197
  ]);
184
198
  return Quote;
@@ -2,11 +2,23 @@
2
2
  * Order will expire in `orderExpirationDelay` after auction ends
3
3
  * Default 12s
4
4
  */ /**
5
+ * Integrator fee parameters for SDK requests.
6
+ * Used when calling getQuote() or createOrder().
7
+ */ /**
8
+ * Address which will receive integrator's portion of the fee.
9
+ */ /**
10
+ * How much to charge in basis points (1% = 100 bps)
11
+ */ /**
12
+ * Integrator fee parameters from API response.
13
+ * Contains authoritative values calculated by backend.
14
+ */ /**
5
15
  * Address which will receive `share` of `value` fee, other part will be sent to protocol
6
16
  */ /**
7
- * How much to charge
17
+ * How much to charge in basis points
18
+ */ /**
19
+ * Integrator will receive only `share` part from charged fee (rest goes to protocol)
8
20
  */ /**
9
- * Integrator will receive only `share` part from charged fee
10
- */ export { }; /**
21
+ * @deprecated Use IntegratorFeeRequest for requests or IntegratorFeeResponse for responses
22
+ */ export { }; /**
11
23
  * protocol address
12
24
  */