@1inch/fusion-sdk 2.4.7-rc.1 → 2.4.7-rc.2

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 (51) 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 +120 -0
  8. package/dist/cjs/fusion-order/fusion-order.spec.js +100 -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/cjs/index.js +0 -3
  17. package/dist/cjs/sdk/README.md +14 -18
  18. package/dist/esm/api/quoter/quote/quote.js +6 -20
  19. package/dist/esm/api/quoter/quote/types.js +3 -15
  20. package/dist/esm/api/quoter/quoter.api.spec.js +6 -103
  21. package/dist/esm/api/quoter/quoter.request.js +4 -1
  22. package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
  23. package/dist/esm/constants.js +15 -1
  24. package/dist/esm/fusion-order/fusion-order.js +121 -1
  25. package/dist/esm/fusion-order/fusion-order.spec.js +100 -0
  26. package/dist/esm/fusion-order/index.js +1 -0
  27. package/dist/esm/fusion-order/permit/constants.js +71 -0
  28. package/dist/esm/fusion-order/permit/index.js +3 -0
  29. package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
  30. package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
  31. package/dist/esm/fusion-order/permit/transfer-from-suffix.js +53 -0
  32. package/dist/esm/fusion-order/permit/utils.js +12 -0
  33. package/dist/esm/index.js +1 -1
  34. package/dist/esm/package.json +1 -1
  35. package/dist/esm/sdk/README.md +14 -18
  36. package/dist/types/src/api/quoter/quote/quote.d.ts +2 -3
  37. package/dist/types/src/api/quoter/quote/types.d.ts +1 -6
  38. package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
  39. package/dist/types/src/api/quoter/types.d.ts +2 -2
  40. package/dist/types/src/constants.d.ts +1 -1
  41. package/dist/types/src/fusion-order/fusion-order.d.ts +6 -0
  42. package/dist/types/src/fusion-order/index.d.ts +1 -0
  43. package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
  44. package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
  45. package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
  46. package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
  47. package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
  48. package/dist/types/src/index.d.ts +2 -2
  49. package/dist/types/src/sdk/types.d.ts +3 -3
  50. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  51. package/package.json +3 -3
@@ -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
  });
@@ -1,3 +1,16 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
1
14
  export var ZX = '0x';
2
15
  export var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
3
16
  NetworkEnum[NetworkEnum["ETHEREUM"] = 1] = "ETHEREUM";
@@ -15,7 +28,8 @@ export var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
15
28
  NetworkEnum[NetworkEnum["UNICHAIN"] = 130] = "UNICHAIN";
16
29
  return NetworkEnum;
17
30
  }({});
18
- export var ONE_INCH_LIMIT_ORDER_V4 = '0x111111125421ca6dc452d289314280a0f8842a65';
31
+ var _obj;
32
+ export 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);
19
33
  export var UINT_160_MAX = (1n << 160n) - 1n;
20
34
  export var UINT_16_MAX = (1n << 16n) - 1n;
21
35
  export var UINT_80_MAX = (1n << 80n) - 1n;
@@ -30,6 +30,13 @@ function _define_property(obj, key, value) {
30
30
  }
31
31
  return obj;
32
32
  }
33
+ function _instanceof(left, right) {
34
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
35
+ return !!right[Symbol.hasInstance](left);
36
+ } else {
37
+ return left instanceof right;
38
+ }
39
+ }
33
40
  function _object_spread(target) {
34
41
  for(var i = 1; i < arguments.length; i++){
35
42
  var source = arguments[i] != null ? arguments[i] : {};
@@ -69,11 +76,15 @@ function _object_spread_props(target, source) {
69
76
  }
70
77
  return target;
71
78
  }
72
- import { Address, Interaction, LimitOrder, MakerTraits } from '@1inch/limit-order-sdk';
79
+ import { Address, Extension, Interaction, LimitOrder, MakerTraits, randBigInt } from '@1inch/limit-order-sdk';
80
+ import { UINT_256_MAX } from '@1inch/byte-utils';
73
81
  import assert from 'assert';
74
82
  import { FusionExtension } from './fusion-extension.js';
75
83
  import { injectTrackCode } from './source-track.js';
76
84
  import { SurplusParams } from './surplus-params.js';
85
+ import { PermitTransferFrom } from './permit/permit-transfer-from.js';
86
+ import { getPermit2ProxyAddress } from './permit/utils.js';
87
+ import { decodeTransferFromSuffix } from './permit/transfer-from-suffix.js';
77
88
  import { AuctionCalculator } from '../amount-calculator/auction-calculator/index.js';
78
89
  import { ZX } from '../constants.js';
79
90
  import { calcTakingAmount } from '../utils/amounts.js';
@@ -162,6 +173,9 @@ export var FusionOrder = /*#__PURE__*/ function() {
162
173
  {
163
174
  key: "makerAsset",
164
175
  get: function get() {
176
+ if (this.isTransferPermit()) {
177
+ return this.decodeTransferPermitSuffix().token;
178
+ }
165
179
  return this.inner.makerAsset;
166
180
  }
167
181
  },
@@ -258,6 +272,48 @@ export var FusionOrder = /*#__PURE__*/ function() {
258
272
  return this.inner.salt;
259
273
  }
260
274
  },
275
+ {
276
+ key: "isTransferPermit",
277
+ value: /**
278
+ * Returns true if the order uses a Permit2 transfer permit via Permit2Proxy.
279
+ * Decodes `makerAssetSuffix` and validates the Permit2 ABI structure.
280
+ *
281
+ * @see FusionOrder.withTransferPermit
282
+ * @see FusionOrder.createTransferPermit
283
+ */ function isTransferPermit() {
284
+ try {
285
+ this.decodeTransferPermitSuffix();
286
+ return true;
287
+ } catch (e) {
288
+ return false;
289
+ }
290
+ }
291
+ },
292
+ {
293
+ key: "withTransferPermit",
294
+ value: function withTransferPermit(permit, signature) {
295
+ var suffix = permit.getTransferFromSuffix(signature);
296
+ var currentExtension = this.inner.extension;
297
+ var newExtension = new Extension(_object_spread_props(_object_spread({}, currentExtension), {
298
+ makerAssetSuffix: suffix
299
+ }));
300
+ this.inner.makerTraits.disablePermit2();
301
+ var baseSalt = this.inner.salt >> 160n;
302
+ var newSalt = LimitOrder.buildSalt(newExtension, baseSalt);
303
+ this.inner = new LimitOrder({
304
+ maker: this.inner.maker,
305
+ makerAsset: permit.spender,
306
+ takerAsset: this.inner.takerAsset,
307
+ makingAmount: this.inner.makingAmount,
308
+ takingAmount: this.inner.takingAmount,
309
+ receiver: this.inner.receiver,
310
+ salt: newSalt
311
+ }, this.inner.makerTraits, newExtension, {
312
+ optimizeReceiverAddress: false
313
+ });
314
+ return this;
315
+ }
316
+ },
261
317
  {
262
318
  key: "build",
263
319
  value: function build() {
@@ -453,6 +509,67 @@ export var FusionOrder = /*#__PURE__*/ function() {
453
509
  */ function nativeSignature(maker) {
454
510
  return this.inner.nativeSignature(maker);
455
511
  }
512
+ },
513
+ {
514
+ key: "createTransferPermit",
515
+ value: /**
516
+ * Creates a Permit2 `PermitTransferFrom` object for the order's maker asset.
517
+ *
518
+ * Can only be used for orders where `multipleFillsAllowed` is `false`.
519
+ *
520
+ * The returned permit authorizes the `permit2Proxy` address (as spender)
521
+ * to transfer up to `makingAmount` of the `makerAsset` token,
522
+ * with a random 256-bit nonce and the order's deadline.
523
+ *
524
+ * The resulting permit can be signed and then attached to the order
525
+ * via {@link FusionOrder.withTransferPermit}.
526
+ *
527
+ * @param chainId - The chain ID used to resolve the default Permit2Proxy address
528
+ * @param permit2Proxy - Optional address of the Permit2Proxy contract that will act as spender.
529
+ * Defaults to the built-in address for the given `chainId`.
530
+ * @returns A {@link PermitTransferFrom} instance that can be signed and attached to the order
531
+ *
532
+ * @throws If `multipleFillsAllowed` is `true`
533
+ *
534
+ * @see FusionOrder.withTransferPermit
535
+ */ function createTransferPermit(chainIdOrPermit2Proxy, permit2Proxy) {
536
+ assert(!this.multipleFillsAllowed, 'transfer permit can be used only for orders where multipleFillsAllowed=false');
537
+ var spender = _instanceof(chainIdOrPermit2Proxy, Address) ? chainIdOrPermit2Proxy : permit2Proxy !== null && permit2Proxy !== void 0 ? permit2Proxy : getPermit2ProxyAddress(chainIdOrPermit2Proxy);
538
+ return new PermitTransferFrom(this.makerAsset, this.makingAmount, spender, randBigInt(UINT_256_MAX), this.deadline);
539
+ }
540
+ },
541
+ {
542
+ key: "restoreMakerAssetSuffix",
543
+ value: /**
544
+ * Restores the original `makerAssetSuffix` that `FusionExtension.build()` does not preserve.
545
+ * Recomputes the salt to match the patched extension hash.
546
+ */ function restoreMakerAssetSuffix(makerAssetSuffix) {
547
+ var patchedExtension = new Extension(_object_spread_props(_object_spread({}, this.inner.extension), {
548
+ makerAssetSuffix: makerAssetSuffix
549
+ }));
550
+ var baseSalt = this.inner.salt >> 160n;
551
+ this.inner = new LimitOrder({
552
+ maker: this.inner.maker,
553
+ makerAsset: this.inner.makerAsset,
554
+ takerAsset: this.inner.takerAsset,
555
+ makingAmount: this.inner.makingAmount,
556
+ takingAmount: this.inner.takingAmount,
557
+ receiver: this.inner.receiver,
558
+ salt: LimitOrder.buildSalt(patchedExtension, baseSalt)
559
+ }, this.inner.makerTraits, patchedExtension, {
560
+ optimizeReceiverAddress: false
561
+ });
562
+ }
563
+ },
564
+ {
565
+ key: "decodeTransferPermitSuffix",
566
+ value: function decodeTransferPermitSuffix() {
567
+ var suffix = this.inner.extension.makerAssetSuffix;
568
+ if (suffix === ZX) {
569
+ throw new Error('no makerAssetSuffix');
570
+ }
571
+ return decodeTransferFromSuffix(suffix);
572
+ }
456
573
  }
457
574
  ], [
458
575
  {
@@ -532,6 +649,9 @@ export var FusionOrder = /*#__PURE__*/ function() {
532
649
  fees: extra === null || extra === void 0 ? void 0 : extra.fees,
533
650
  optimizeReceiverAddress: true
534
651
  });
652
+ if (extension.makerAssetSuffix !== ZX) {
653
+ fusionOrder.restoreMakerAssetSuffix(extension.makerAssetSuffix);
654
+ }
535
655
  assert(providedSalt === fusionOrder.salt, 'invalid salt for passed extension');
536
656
  return fusionOrder;
537
657
  }
@@ -461,4 +461,104 @@ describe('FusionOrder Native', function() {
461
461
  });
462
462
  expect(nativeOrder.build().receiver).toEqual(settlementExt.toString());
463
463
  });
464
+ describe('isTransferPermit', function() {
465
+ var extensionContract = new Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c');
466
+ var permit2Proxy = new Address('0x1234567890abcdef1234567890abcdef12345678');
467
+ var baseOrder = function() {
468
+ return FusionOrder.new(extensionContract, {
469
+ makerAsset: new Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
470
+ takerAsset: new Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
471
+ makingAmount: parseEther('1'),
472
+ takingAmount: parseUnits('1000', 6),
473
+ maker: new Address('0x00000000219ab540356cbb839cbe05303d7705fa')
474
+ }, {
475
+ auction: new AuctionDetails({
476
+ duration: 180n,
477
+ startTime: 1673548149n,
478
+ initialRateBump: 0,
479
+ points: []
480
+ }),
481
+ whitelist: Whitelist.new(1673548139n, [
482
+ {
483
+ address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
484
+ allowFrom: 0n
485
+ }
486
+ ]),
487
+ surplus: SurplusParams.NO_FEE
488
+ }, {
489
+ allowPartialFills: false,
490
+ allowMultipleFills: false,
491
+ nonce: 1n
492
+ });
493
+ };
494
+ it('should return false for regular order', function() {
495
+ var order = FusionOrder.new(extensionContract, {
496
+ makerAsset: new Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
497
+ takerAsset: new Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
498
+ makingAmount: parseEther('1'),
499
+ takingAmount: parseUnits('1000', 6),
500
+ maker: new Address('0x00000000219ab540356cbb839cbe05303d7705fa')
501
+ }, {
502
+ auction: new AuctionDetails({
503
+ duration: 180n,
504
+ startTime: 1673548149n,
505
+ initialRateBump: 0,
506
+ points: []
507
+ }),
508
+ whitelist: Whitelist.new(1673548139n, [
509
+ {
510
+ address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
511
+ allowFrom: 0n
512
+ }
513
+ ]),
514
+ surplus: SurplusParams.NO_FEE
515
+ });
516
+ expect(order.isTransferPermit()).toBe(false);
517
+ });
518
+ it('should return true after withTransferPermit', function() {
519
+ var order = baseOrder();
520
+ var permit = order.createTransferPermit(permit2Proxy);
521
+ var fakeSignature = '0x' + 'ab'.repeat(65);
522
+ var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
523
+ expect(orderWithPermit.isTransferPermit()).toBe(true);
524
+ });
525
+ it('should return real token as makerAsset after withTransferPermit', function() {
526
+ var weth = new Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2');
527
+ var order = baseOrder();
528
+ var permit = order.createTransferPermit(permit2Proxy);
529
+ var fakeSignature = '0x' + 'ab'.repeat(65);
530
+ var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
531
+ expect(orderWithPermit.makerAsset).toEqual(weth);
532
+ });
533
+ it('should round-trip Permit2 order through fromDataAndExtension', function() {
534
+ var order = baseOrder();
535
+ var permit = order.createTransferPermit(permit2Proxy);
536
+ var fakeSignature = '0x' + 'ab'.repeat(65);
537
+ var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
538
+ var built = orderWithPermit.build();
539
+ var rebuilt = FusionOrder.fromDataAndExtension(built, orderWithPermit.extension);
540
+ expect(rebuilt.isTransferPermit()).toBe(true);
541
+ expect(rebuilt.makerAsset).toEqual(orderWithPermit.makerAsset);
542
+ expect(rebuilt.salt).toEqual(orderWithPermit.salt);
543
+ expect(rebuilt.build()).toEqual(built);
544
+ });
545
+ it('should reject tampered makerAssetSuffix via salt check', function() {
546
+ var order = baseOrder();
547
+ var ext = order.extension;
548
+ var tampered = new Extension({
549
+ makerAssetSuffix: '0xdeadbeef',
550
+ takerAssetSuffix: ext.takerAssetSuffix,
551
+ makingAmountData: ext.makingAmountData,
552
+ takingAmountData: ext.takingAmountData,
553
+ predicate: ext.predicate,
554
+ makerPermit: ext.makerPermit,
555
+ preInteraction: ext.preInteraction,
556
+ postInteraction: ext.postInteraction,
557
+ customData: ext.customData
558
+ });
559
+ expect(function() {
560
+ return FusionOrder.fromDataAndExtension(order.build(), tampered);
561
+ }).toThrow('invalid salt for passed extension');
562
+ });
563
+ });
464
564
  });
@@ -6,3 +6,4 @@ export * from './fees/index.js';
6
6
  export { CHAIN_TO_WRAPPER } from './constants.js';
7
7
  export * from './surplus-params.js';
8
8
  export * from './cancellation-auction.js';
9
+ export * from './permit/index.js';
@@ -0,0 +1,71 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _object_spread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _define_property(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ import { NetworkEnum } from '../../constants.js';
30
+ var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
31
+ var PERMIT2_ADDRESS_ZK = '0x0000000000225e31d15943971f47ad3022f714fa';
32
+ var _obj;
33
+ export var PERMIT2_ADDRESSES = (_obj = {}, _define_property(_obj, NetworkEnum.ZKSYNC, PERMIT2_ADDRESS_ZK), _define_property(_obj, NetworkEnum.ARBITRUM, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.ETHEREUM, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.POLYGON, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.BINANCE, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.AVALANCHE, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.OPTIMISM, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.FANTOM, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.GNOSIS, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.COINBASE, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.LINEA, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.SONIC, PERMIT2_ADDRESS), _define_property(_obj, NetworkEnum.UNICHAIN, PERMIT2_ADDRESS), _obj);
34
+ // todo: update
35
+ var PERMIT2_PROXY_ADDRESS = '0xcf56da25062c954b252515244dfefb739c254c23';
36
+ var PERMIT2_PROXY_ADDRESS_ZK = '0x0000000000000000000000000000000000000000';
37
+ var _obj1;
38
+ export var PERMIT2_PROXY_ADDRESSES = (_obj1 = {}, _define_property(_obj1, NetworkEnum.ZKSYNC, PERMIT2_PROXY_ADDRESS_ZK), _define_property(_obj1, NetworkEnum.ARBITRUM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.ETHEREUM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.POLYGON, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.BINANCE, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.AVALANCHE, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.OPTIMISM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.FANTOM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.GNOSIS, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.COINBASE, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.LINEA, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.SONIC, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, NetworkEnum.UNICHAIN, PERMIT2_PROXY_ADDRESS), _obj1);
39
+ export var PERMIT2_DOMAIN_NAME = 'Permit2';
40
+ export var TOKEN_PERMISSIONS = {
41
+ TokenPermissions: [
42
+ {
43
+ name: 'token',
44
+ type: 'address'
45
+ },
46
+ {
47
+ name: 'amount',
48
+ type: 'uint256'
49
+ }
50
+ ]
51
+ };
52
+ export var PERMIT_TRANSFER_FROM_TYPES = _object_spread({
53
+ PermitTransferFrom: [
54
+ {
55
+ name: 'permitted',
56
+ type: 'TokenPermissions'
57
+ },
58
+ {
59
+ name: 'spender',
60
+ type: 'address'
61
+ },
62
+ {
63
+ name: 'nonce',
64
+ type: 'uint256'
65
+ },
66
+ {
67
+ name: 'deadline',
68
+ type: 'uint256'
69
+ }
70
+ ]
71
+ }, TOKEN_PERMISSIONS);
@@ -0,0 +1,3 @@
1
+ export * from './permit-transfer-from.js';
2
+ export * from './transfer-from-suffix.js';
3
+ export { getPermit2Address, getPermit2ProxyAddress } from './utils.js';
@@ -0,0 +1,105 @@
1
+ function _class_call_check(instance, Constructor) {
2
+ if (!(instance instanceof Constructor)) {
3
+ throw new TypeError("Cannot call a class as a function");
4
+ }
5
+ }
6
+ function _defineProperties(target, props) {
7
+ for(var i = 0; i < props.length; i++){
8
+ var descriptor = props[i];
9
+ descriptor.enumerable = descriptor.enumerable || false;
10
+ descriptor.configurable = true;
11
+ if ("value" in descriptor) descriptor.writable = true;
12
+ Object.defineProperty(target, descriptor.key, descriptor);
13
+ }
14
+ }
15
+ function _create_class(Constructor, protoProps, staticProps) {
16
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
17
+ if (staticProps) _defineProperties(Constructor, staticProps);
18
+ return Constructor;
19
+ }
20
+ function _define_property(obj, key, value) {
21
+ if (key in obj) {
22
+ Object.defineProperty(obj, key, {
23
+ value: value,
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true
27
+ });
28
+ } else {
29
+ obj[key] = value;
30
+ }
31
+ return obj;
32
+ }
33
+ function _object_spread(target) {
34
+ for(var i = 1; i < arguments.length; i++){
35
+ var source = arguments[i] != null ? arguments[i] : {};
36
+ var ownKeys = Object.keys(source);
37
+ if (typeof Object.getOwnPropertySymbols === "function") {
38
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
39
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
40
+ }));
41
+ }
42
+ ownKeys.forEach(function(key) {
43
+ _define_property(target, key, source[key]);
44
+ });
45
+ }
46
+ return target;
47
+ }
48
+ import { PERMIT2_DOMAIN_NAME, PERMIT_TRANSFER_FROM_TYPES } from './constants.js';
49
+ import { getPermit2Address } from './utils.js';
50
+ import { encodeTransferFromSuffix } from './transfer-from-suffix.js';
51
+ export var PermitTransferFrom = /*#__PURE__*/ function() {
52
+ "use strict";
53
+ function PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline) {
54
+ _class_call_check(this, PermitTransferFrom);
55
+ _define_property(this, "token", void 0);
56
+ _define_property(this, "maxSpendAmount", void 0);
57
+ _define_property(this, "spender", void 0);
58
+ _define_property(this, "nonce", void 0);
59
+ _define_property(this, "deadline", void 0);
60
+ this.token = token;
61
+ this.maxSpendAmount = maxSpendAmount;
62
+ this.spender = spender;
63
+ this.nonce = nonce;
64
+ this.deadline = deadline;
65
+ }
66
+ _create_class(PermitTransferFrom, [
67
+ {
68
+ key: "getTypedData",
69
+ value: function getTypedData(chainId) {
70
+ var permit2Address = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : getPermit2Address(chainId);
71
+ return {
72
+ primaryType: 'PermitTransferFrom',
73
+ types: _object_spread({}, PERMIT_TRANSFER_FROM_TYPES),
74
+ domain: {
75
+ name: PERMIT2_DOMAIN_NAME,
76
+ chainId: chainId,
77
+ verifyingContract: permit2Address
78
+ },
79
+ message: {
80
+ permitted: {
81
+ token: this.token.toString(),
82
+ amount: this.maxSpendAmount
83
+ },
84
+ spender: this.spender.toString(),
85
+ nonce: this.nonce,
86
+ deadline: this.deadline
87
+ }
88
+ };
89
+ }
90
+ },
91
+ {
92
+ key: "getTransferFromSuffix",
93
+ value: /**
94
+ * ABI-encodes the Permit2 suffix appended to `transferFrom(from,to,amount)` calldata.
95
+ *
96
+ * The limit order protocol calls `_callTransferFromWithSuffix` on the Permit2Proxy,
97
+ * which has `func_nZHTch(address,address,uint256,((address,uint256),uint256,uint256),bytes)`
98
+ * with selector 0x23b872dd (same as transferFrom). The suffix is everything after (from,to,amount).
99
+ */ function getTransferFromSuffix(signature) {
100
+ return encodeTransferFromSuffix(this.token, this.maxSpendAmount, this.nonce, this.deadline, signature);
101
+ }
102
+ }
103
+ ]);
104
+ return PermitTransferFrom;
105
+ }();