@cowprotocol/sdk-bridging 1.2.0 → 1.4.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 (3) hide show
  1. package/dist/index.js +75 -66
  2. package/dist/index.mjs +26 -17
  3. package/package.json +13 -13
package/dist/index.js CHANGED
@@ -237,7 +237,7 @@ async function getCrossChainOrder(params) {
237
237
  var import_sdk_trading2 = require("@cowprotocol/sdk-trading");
238
238
  var import_sdk_order_book3 = require("@cowprotocol/sdk-order-book");
239
239
  var import_sdk_config3 = require("@cowprotocol/sdk-config");
240
- var import_sdk_common5 = require("@cowprotocol/sdk-common");
240
+ var import_sdk_common6 = require("@cowprotocol/sdk-common");
241
241
 
242
242
  // src/BridgingSdk/helpers.ts
243
243
  var getCacheKey = ({
@@ -269,7 +269,7 @@ function getQuoteWithoutBridge(params) {
269
269
 
270
270
  // src/BridgingSdk/getQuoteWithBridge.ts
271
271
  var import_sdk_trading = require("@cowprotocol/sdk-trading");
272
- var import_sdk_common4 = require("@cowprotocol/sdk-common");
272
+ var import_sdk_common5 = require("@cowprotocol/sdk-common");
273
273
  var import_sdk_order_book = require("@cowprotocol/sdk-order-book");
274
274
 
275
275
  // src/BridgingSdk/getBridgeSignedHook.ts
@@ -309,6 +309,9 @@ function getHookMockForCostEstimation(gasLimit) {
309
309
  }
310
310
 
311
311
  // src/BridgingSdk/getIntermediateSwapResult.ts
312
+ var import_sdk_common4 = require("@cowprotocol/sdk-common");
313
+
314
+ // src/BridgingSdk/determineIntermediateToken.ts
312
315
  var import_sdk_common3 = require("@cowprotocol/sdk-common");
313
316
 
314
317
  // src/BridgingSdk/tokenPriority.ts
@@ -378,12 +381,9 @@ function isStablecoinPriorityToken(chainId, tokenAddress) {
378
381
  function isCorrelatedToken(tokenAddress, correlatedTokens) {
379
382
  return correlatedTokens.has(tokenAddress.toLowerCase());
380
383
  }
381
- function isNativeToken(tokenAddress) {
382
- return tokenAddress.toLowerCase() === import_sdk_config2.NATIVE_CURRENCY_ADDRESS.toLowerCase();
383
- }
384
384
 
385
385
  // src/BridgingSdk/determineIntermediateToken.ts
386
- async function determineIntermediateToken(sourceChainId, intermediateTokens, getCorrelatedTokens) {
386
+ async function determineIntermediateToken(sourceChainId, sourceTokenAddress, intermediateTokens, getCorrelatedTokens) {
387
387
  const firstToken = intermediateTokens[0];
388
388
  if (intermediateTokens.length === 0 || !firstToken) {
389
389
  throw new BridgeProviderQuoteError("NO_INTERMEDIATE_TOKENS" /* NO_INTERMEDIATE_TOKENS */, { intermediateTokens });
@@ -392,17 +392,25 @@ async function determineIntermediateToken(sourceChainId, intermediateTokens, get
392
392
  return firstToken;
393
393
  }
394
394
  const correlatedTokens = await resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens);
395
+ const sellTokenLike = { chainId: sourceChainId, address: sourceTokenAddress };
396
+ const isSellNativeOrWrapped = (0, import_sdk_common3.isNativeToken)(sellTokenLike) || (0, import_sdk_common3.isWrappedNativeToken)(sellTokenLike);
395
397
  const tokensWithPriority = intermediateTokens.map((token) => {
398
+ const isNativeOrWrapped = (0, import_sdk_common3.isNativeToken)(token) || (0, import_sdk_common3.isWrappedNativeToken)(token);
399
+ if ((0, import_sdk_common3.areAddressesEqual)(token.address, sourceTokenAddress)) {
400
+ if (!(isSellNativeOrWrapped && isNativeOrWrapped)) {
401
+ return { token, priority: 5 /* HIGHEST */ };
402
+ }
403
+ }
396
404
  if (isStablecoinPriorityToken(token.chainId, token.address)) {
397
- return { token, priority: 4 /* HIGHEST */ };
405
+ return { token, priority: 4 /* HIGH */ };
398
406
  }
399
407
  if (isCorrelatedToken(token.address, correlatedTokens)) {
400
- return { token, priority: 3 /* HIGH */ };
408
+ return { token, priority: 3 /* MEDIUM */ };
401
409
  }
402
- if (isNativeToken(token.address)) {
403
- return { token, priority: 2 /* MEDIUM */ };
410
+ if ((0, import_sdk_common3.isNativeToken)(token) && !isSellNativeOrWrapped) {
411
+ return { token, priority: 2 /* LOW */ };
404
412
  }
405
- return { token, priority: 1 /* LOW */ };
413
+ return { token, priority: 1 /* LOWEST */ };
406
414
  });
407
415
  tokensWithPriority.sort((a, b) => {
408
416
  if (a.priority !== b.priority) {
@@ -447,9 +455,9 @@ async function getIntermediateSwapResult({
447
455
  amount,
448
456
  signer: signerLike
449
457
  } = swapAndBridgeRequest;
450
- const adapter = (0, import_sdk_common3.getGlobalAdapter)();
458
+ const adapter = (0, import_sdk_common4.getGlobalAdapter)();
451
459
  const signer = signerLike ? adapter.createSigner(signerLike) : adapter.signer;
452
- (0, import_sdk_common3.log)(
460
+ (0, import_sdk_common4.log)(
453
461
  `Cross-chain ${kind} ${amount} ${sellTokenAddress} (source chain ${sellTokenChainId}) for ${buyTokenAddress} (target chain ${buyTokenChainId})`
454
462
  );
455
463
  const intermediateTokens = await getIntermediateTokens({
@@ -459,10 +467,11 @@ async function getIntermediateSwapResult({
459
467
  });
460
468
  const intermediateToken = await determineIntermediateToken(
461
469
  sellTokenChainId,
470
+ sellTokenAddress,
462
471
  intermediateTokens,
463
472
  params.advancedSettings?.getCorrelatedTokens
464
473
  );
465
- (0, import_sdk_common3.log)(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
474
+ (0, import_sdk_common4.log)(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
466
475
  const bridgeRequestWithoutAmount = {
467
476
  ...swapAndBridgeRequest,
468
477
  sellTokenAddress: intermediateToken.address,
@@ -497,7 +506,7 @@ async function getIntermediateSwapResult({
497
506
  signer
498
507
  });
499
508
  const intermediateTokenAmount = swapResult.amountsAndCosts.afterSlippage.buyAmount;
500
- (0, import_sdk_common3.log)(
509
+ (0, import_sdk_common4.log)(
501
510
  `Expected to receive ${intermediateTokenAmount} of the intermediate token (${(intermediateTokenAmount / 10n ** BigInt(intermediaryTokenDecimals)).toString()} formatted)`
502
511
  );
503
512
  return {
@@ -559,10 +568,10 @@ async function getSwapQuote(params) {
559
568
  signer
560
569
  };
561
570
  const { signer: _, ...swapParamsToLog } = swapParams;
562
- (0, import_sdk_common3.log)(
571
+ (0, import_sdk_common4.log)(
563
572
  `Getting a quote for the swap (sell token to buy intermediate token). Delegate to trading SDK with params: ${JSON.stringify(
564
573
  swapParamsToLog,
565
- import_sdk_common3.jsonWithBigintReplacer
574
+ import_sdk_common4.jsonWithBigintReplacer
566
575
  )}`
567
576
  );
568
577
  const { result: swapResult, orderBookApi } = await tradingSdk.getQuoteResults(swapParams, advancedSettings);
@@ -648,7 +657,7 @@ async function getQuoteWithReceiverAccountBridge(provider, params) {
648
657
  bridgeRequestWithoutAmount,
649
658
  intermediateTokenAmount
650
659
  });
651
- (0, import_sdk_common4.log)(`Bridge receiver override: ${bridgeReceiverOverride}`);
660
+ (0, import_sdk_common5.log)(`Bridge receiver override: ${bridgeReceiverOverride}`);
652
661
  swapResult.tradeParameters.receiver = bridgeReceiverOverride;
653
662
  swapResult.appDataInfo = await (0, import_sdk_trading.mergeAppDataDoc)(swapResult.appDataInfo.doc, {
654
663
  metadata: {
@@ -695,7 +704,7 @@ async function getQuoteWithHookBridge(provider, params) {
695
704
  getBridgeHook: async (bridgeRequestWithoutAmount2) => {
696
705
  const hookEstimatedGasLimit2 = await provider.getGasLimitEstimationForHook(bridgeRequestWithoutAmount2);
697
706
  const mockedHook = getHookMockForCostEstimation(hookEstimatedGasLimit2);
698
- (0, import_sdk_common4.log)(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
707
+ (0, import_sdk_common5.log)(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
699
708
  return mockedHook;
700
709
  }
701
710
  });
@@ -721,9 +730,9 @@ async function getQuoteWithHookBridge(provider, params) {
721
730
  validToOverride,
722
731
  hookGasLimit
723
732
  });
724
- (0, import_sdk_common4.log)(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
733
+ (0, import_sdk_common5.log)(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
725
734
  swapResult.tradeParameters.receiver = bridgeHook.recipient;
726
- (0, import_sdk_common4.log)(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
735
+ (0, import_sdk_common5.log)(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
727
736
  swapResult.appDataInfo = {
728
737
  fullAppData,
729
738
  appDataKeccak256,
@@ -740,10 +749,10 @@ async function getQuoteWithHookBridge(provider, params) {
740
749
  }
741
750
  };
742
751
  }
743
- (0, import_sdk_common4.log)(`Using gas limit: ${hookEstimatedGasLimit}`);
752
+ (0, import_sdk_common5.log)(`Using gas limit: ${hookEstimatedGasLimit}`);
744
753
  const result = await getBridgeProviderQuote(
745
754
  // Sign the hooks with quoteSigner if provided
746
- quoteSigner ? (0, import_sdk_common4.getGlobalAdapter)().createSigner(quoteSigner) : signer,
755
+ quoteSigner ? (0, import_sdk_common5.getGlobalAdapter)().createSigner(quoteSigner) : signer,
747
756
  // Use estimated hook gas limit if quoteSigner is provided, so we don't have to estimate the hook gas limit twice
748
757
  // Moreover, since quoteSigner is not the real signer, the estimation will fail
749
758
  hookEstimatedGasLimit
@@ -1183,14 +1192,14 @@ var BridgingSdk = class {
1183
1192
  constructor(options, adapter) {
1184
1193
  this.options = options;
1185
1194
  if (adapter) {
1186
- (0, import_sdk_common5.setGlobalAdapter)(adapter);
1195
+ (0, import_sdk_common6.setGlobalAdapter)(adapter);
1187
1196
  }
1188
1197
  const { providers, cacheConfig, ...restOptions } = options;
1189
1198
  if (!providers || providers.length === 0) {
1190
1199
  throw new Error("At least one bridge provider is required");
1191
1200
  }
1192
1201
  if (options.enableLogging !== void 0) {
1193
- (0, import_sdk_common5.enableLogging)(options.enableLogging);
1202
+ (0, import_sdk_common6.enableLogging)(options.enableLogging);
1194
1203
  }
1195
1204
  const tradingSdk = options.tradingSdk ?? new import_sdk_trading2.TradingSdk();
1196
1205
  const orderBookApi = tradingSdk?.options.orderBookApi ?? new import_sdk_order_book3.OrderBookApi();
@@ -1201,12 +1210,12 @@ var BridgingSdk = class {
1201
1210
  orderBookApi
1202
1211
  };
1203
1212
  this.cacheConfig = { ...DEFAULT_CACHE_CONFIG, ...cacheConfig };
1204
- this.intermediateTokensCache = new import_sdk_common5.TTLCache(
1213
+ this.intermediateTokensCache = new import_sdk_common6.TTLCache(
1205
1214
  "bridging-intermediate-tokens",
1206
1215
  this.cacheConfig.enabled,
1207
1216
  this.cacheConfig.intermediateTokensTtl
1208
1217
  );
1209
- this.buyTokensCache = new import_sdk_common5.TTLCache(
1218
+ this.buyTokensCache = new import_sdk_common6.TTLCache(
1210
1219
  "bridging-buy-tokens",
1211
1220
  this.cacheConfig.enabled,
1212
1221
  this.cacheConfig.buyTokensTtl
@@ -1419,7 +1428,7 @@ var BridgingSdk = class {
1419
1428
  };
1420
1429
 
1421
1430
  // src/providers/across/AcrossApi.ts
1422
- var import_sdk_common6 = require("@cowprotocol/sdk-common");
1431
+ var import_sdk_common7 = require("@cowprotocol/sdk-common");
1423
1432
  var ACROSS_API_URL = "https://app.across.to/api";
1424
1433
  var AcrossApi = class {
1425
1434
  constructor(options = {}) {
@@ -1485,7 +1494,7 @@ var AcrossApi = class {
1485
1494
  async fetchApi(path, params, isValidResponse) {
1486
1495
  const baseUrl = this.options.apiBaseUrl || ACROSS_API_URL;
1487
1496
  const url = `${baseUrl}${path}?${new URLSearchParams(params).toString()}`;
1488
- (0, import_sdk_common6.log)(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
1497
+ (0, import_sdk_common7.log)(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
1489
1498
  const response = await fetch(url, {
1490
1499
  method: "GET"
1491
1500
  });
@@ -1524,14 +1533,14 @@ function isValidRoute(item) {
1524
1533
  }
1525
1534
 
1526
1535
  // src/providers/across/const/interfaces.ts
1527
- var import_sdk_common7 = require("@cowprotocol/sdk-common");
1536
+ var import_sdk_common8 = require("@cowprotocol/sdk-common");
1528
1537
  var ACROSS_DEPOSIT_EVENT_INTERFACE = () => {
1529
- return (0, import_sdk_common7.getGlobalAdapter)().utils.createInterface([
1538
+ return (0, import_sdk_common8.getGlobalAdapter)().utils.createInterface([
1530
1539
  "event FundsDeposited(bytes32 inputToken, bytes32 outputToken, uint256 inputAmount, uint256 outputAmount, uint256 indexed destinationChainId, uint256 indexed depositId, uint32 quoteTimestamp, uint32 fillDeadline, uint32 exclusivityDeadline, bytes32 indexed depositor, bytes32 recipient, bytes32 exclusiveRelayer, bytes message)"
1531
1540
  ]);
1532
1541
  };
1533
1542
  var COW_TRADE_EVENT_INTERFACE = () => {
1534
- return (0, import_sdk_common7.getGlobalAdapter)().utils.createInterface([
1543
+ return (0, import_sdk_common8.getGlobalAdapter)().utils.createInterface([
1535
1544
  "event Trade(address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)"
1536
1545
  ]);
1537
1546
  };
@@ -1587,7 +1596,7 @@ var ACROSS_MATH_CONTRACT_ADDRESSES = {
1587
1596
  // src/providers/across/util.ts
1588
1597
  var import_sdk_config5 = require("@cowprotocol/sdk-config");
1589
1598
  var import_sdk_order_book4 = require("@cowprotocol/sdk-order-book");
1590
- var import_sdk_common8 = require("@cowprotocol/sdk-common");
1599
+ var import_sdk_common9 = require("@cowprotocol/sdk-common");
1591
1600
  var import_json_stable_stringify = __toESM(require("json-stable-stringify"));
1592
1601
  var PCT_100_PERCENT = 10n ** 18n;
1593
1602
  function toBridgeQuoteResult(request, slippageBps, suggestedFees) {
@@ -1646,7 +1655,7 @@ function toAmountsAndCosts(request, slippageBps, suggestedFees) {
1646
1655
  };
1647
1656
  }
1648
1657
  function bytes32ToAddress(address) {
1649
- return (0, import_sdk_common8.getGlobalAdapter)().utils.decodeAbi(["address"], address).toString();
1658
+ return (0, import_sdk_common9.getGlobalAdapter)().utils.decodeAbi(["address"], address).toString();
1650
1659
  }
1651
1660
  function assertValidPct(pct) {
1652
1661
  if (pct > PCT_100_PERCENT || pct < 0n) {
@@ -3524,11 +3533,11 @@ var ACROSS_SPOKE_POOL_ABI = [
3524
3533
  ];
3525
3534
 
3526
3535
  // src/providers/across/createAcrossDepositCall.ts
3527
- var import_sdk_common9 = require("@cowprotocol/sdk-common");
3536
+ var import_sdk_common10 = require("@cowprotocol/sdk-common");
3528
3537
  var ERC20_BALANCE_OF_ABI = ["function balanceOf(address account) external view returns (uint256)"];
3529
3538
  var ERC20_APPROVE_OF_ABI = ["function approve(address spender, uint256 amount) external returns (bool)"];
3530
3539
  function getSpookPoolContract(sellTokenChainId) {
3531
- const adapter = (0, import_sdk_common9.getGlobalAdapter)();
3540
+ const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3532
3541
  const spokePoolAddress = ACROSS_SPOOK_CONTRACT_ADDRESSES[sellTokenChainId];
3533
3542
  if (!spokePoolAddress) {
3534
3543
  throw new Error("Spoke pool address not found for chain: " + sellTokenChainId);
@@ -3539,7 +3548,7 @@ function getSpookPoolContract(sellTokenChainId) {
3539
3548
  );
3540
3549
  }
3541
3550
  function getMathContract(sellTokenChainId) {
3542
- const adapter = (0, import_sdk_common9.getGlobalAdapter)();
3551
+ const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3543
3552
  const mathContractAddress = ACROSS_MATH_CONTRACT_ADDRESSES[sellTokenChainId];
3544
3553
  if (!mathContractAddress) {
3545
3554
  throw new Error("Math contract address not found for chain: " + sellTokenChainId);
@@ -3550,14 +3559,14 @@ function getMathContract(sellTokenChainId) {
3550
3559
  );
3551
3560
  }
3552
3561
  function getBalanceOfSellTokenContract(sellTokenAddress) {
3553
- const adapter = (0, import_sdk_common9.getGlobalAdapter)();
3562
+ const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3554
3563
  return (0, import_sdk_weiroll.createWeirollContract)(
3555
3564
  adapter.getContract(sellTokenAddress, ERC20_BALANCE_OF_ABI),
3556
3565
  import_sdk_weiroll.WeirollCommandFlags.STATICCALL
3557
3566
  );
3558
3567
  }
3559
3568
  function getApproveSellTokenContract(sellTokenAddress) {
3560
- const adapter = (0, import_sdk_common9.getGlobalAdapter)();
3569
+ const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3561
3570
  return (0, import_sdk_weiroll.createWeirollContract)(adapter.getContract(sellTokenAddress, ERC20_APPROVE_OF_ABI), import_sdk_weiroll.WeirollCommandFlags.CALL);
3562
3571
  }
3563
3572
  function createAcrossDepositCall(params) {
@@ -3602,7 +3611,7 @@ function createAcrossDepositCall(params) {
3602
3611
  }
3603
3612
 
3604
3613
  // src/providers/across/getDepositParams.ts
3605
- var import_sdk_common10 = require("@cowprotocol/sdk-common");
3614
+ var import_sdk_common11 = require("@cowprotocol/sdk-common");
3606
3615
  async function getDepositParams(chainId, orderId, txReceipt) {
3607
3616
  const depositEvents = getAcrossDepositEvents(chainId, txReceipt.logs);
3608
3617
  if (depositEvents.length === 0) {
@@ -3614,7 +3623,7 @@ async function getDepositParams(chainId, orderId, txReceipt) {
3614
3623
  return null;
3615
3624
  const depositEvent = depositEvents[orderTradeIndex];
3616
3625
  if (!depositEvent) {
3617
- (0, import_sdk_common10.log)(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
3626
+ (0, import_sdk_common11.log)(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
3618
3627
  return null;
3619
3628
  }
3620
3629
  return {
@@ -3633,14 +3642,14 @@ async function getDepositParams(chainId, orderId, txReceipt) {
3633
3642
  }
3634
3643
 
3635
3644
  // src/providers/utils/getGasLimitEstimationForHook.ts
3636
- var import_sdk_common11 = require("@cowprotocol/sdk-common");
3645
+ var import_sdk_common12 = require("@cowprotocol/sdk-common");
3637
3646
  async function getGasLimitEstimationForHook({
3638
3647
  cowShedSdk,
3639
3648
  request,
3640
3649
  extraGas,
3641
3650
  extraGasProxyCreation
3642
3651
  }) {
3643
- const adapter = (0, import_sdk_common11.getGlobalAdapter)();
3652
+ const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3644
3653
  const proxyAddress = cowShedSdk.getCowShedAccount(request.sellTokenChainId, request.owner || request.account);
3645
3654
  const proxyCode = await adapter.getCode(proxyAddress);
3646
3655
  if (!proxyCode || proxyCode === "0x") {
@@ -3651,7 +3660,7 @@ async function getGasLimitEstimationForHook({
3651
3660
  }
3652
3661
 
3653
3662
  // src/providers/across/AcrossBridgeProvider.ts
3654
- var import_sdk_common12 = require("@cowprotocol/sdk-common");
3663
+ var import_sdk_common13 = require("@cowprotocol/sdk-common");
3655
3664
  var import_sdk_config6 = require("@cowprotocol/sdk-config");
3656
3665
  var import_sdk_cow_shed = require("@cowprotocol/sdk-cow-shed");
3657
3666
  var import_sdk_order_book5 = require("@cowprotocol/sdk-order-book");
@@ -3667,7 +3676,7 @@ var AcrossBridgeProvider = class {
3667
3676
  constructor(options = {}, _adapter) {
3668
3677
  const adapter = _adapter || options.cowShedOptions?.adapter;
3669
3678
  if (adapter) {
3670
- (0, import_sdk_common12.setGlobalAdapter)(adapter);
3679
+ (0, import_sdk_common13.setGlobalAdapter)(adapter);
3671
3680
  }
3672
3681
  this.api = new AcrossApi(options.apiOptions);
3673
3682
  this.cowShedSdk = new import_sdk_cow_shed.CowShedSdk(adapter, options.cowShedOptions?.factoryOptions);
@@ -3764,7 +3773,7 @@ var AcrossBridgeProvider = class {
3764
3773
  }
3765
3774
  async getBridgingParams(chainId, order, txHash) {
3766
3775
  const orderUid = order.uid;
3767
- const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3776
+ const adapter = (0, import_sdk_common13.getGlobalAdapter)();
3768
3777
  const txReceipt = await adapter.getTransactionReceipt(txHash);
3769
3778
  if (!txReceipt)
3770
3779
  return null;
@@ -4277,7 +4286,7 @@ var BUNGEE_APPROVE_AND_BRIDGE_V1_ABI = [
4277
4286
  ];
4278
4287
 
4279
4288
  // src/providers/bungee/BungeeApi.ts
4280
- var import_sdk_common13 = require("@cowprotocol/sdk-common");
4289
+ var import_sdk_common14 = require("@cowprotocol/sdk-common");
4281
4290
 
4282
4291
  // src/providers/bungee/consts.ts
4283
4292
  var BUNGEE_API_PATH = "/api/v1/bungee";
@@ -4551,7 +4560,7 @@ var BungeeApi = class {
4551
4560
  * @returns True if the bungee tx data is valid, false otherwise
4552
4561
  */
4553
4562
  async verifyBungeeBuildTxData(originChainId, txData, routeId, expectedSocketRequest) {
4554
- const adapter = (0, import_sdk_common13.getGlobalAdapter)();
4563
+ const adapter = (0, import_sdk_common14.getGlobalAdapter)();
4555
4564
  const socketVerifierAddress = SocketVerifierAddresses[originChainId];
4556
4565
  if (!socketVerifierAddress) {
4557
4566
  throw new BridgeProviderQuoteError("TX_BUILD_ERROR" /* TX_BUILD_ERROR */, {
@@ -4672,13 +4681,13 @@ var BungeeApi = class {
4672
4681
  if (this.shouldAddAffiliate(apiType, baseUrl) && this.options.affiliate) {
4673
4682
  headers["affiliate"] = this.options.affiliate;
4674
4683
  }
4675
- (0, import_sdk_common13.log)(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
4684
+ (0, import_sdk_common14.log)(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
4676
4685
  try {
4677
4686
  const response = await fetch(url, { method: "GET", headers });
4678
4687
  if (!response.ok) {
4679
4688
  if (isInfrastructureError(response.status) && !useFallback) {
4680
4689
  this.enableFallback(apiType);
4681
- (0, import_sdk_common13.log)(
4690
+ (0, import_sdk_common14.log)(
4682
4691
  `Infrastructure error (${response.status}) detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`
4683
4692
  );
4684
4693
  return this.makeApiCall(apiType, path, params, isValidResponse);
@@ -4694,7 +4703,7 @@ var BungeeApi = class {
4694
4703
  } catch (error) {
4695
4704
  if (!useFallback && isClientFetchError(error)) {
4696
4705
  this.enableFallback(apiType);
4697
- (0, import_sdk_common13.log)(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
4706
+ (0, import_sdk_common14.log)(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
4698
4707
  return this.makeApiCall(apiType, path, params, isValidResponse);
4699
4708
  }
4700
4709
  throw error;
@@ -4704,9 +4713,9 @@ var BungeeApi = class {
4704
4713
 
4705
4714
  // src/providers/bungee/createBungeeDepositCall.ts
4706
4715
  var import_sdk_config8 = require("@cowprotocol/sdk-config");
4707
- var import_sdk_common14 = require("@cowprotocol/sdk-common");
4716
+ var import_sdk_common15 = require("@cowprotocol/sdk-common");
4708
4717
  async function createBungeeDepositCall(params) {
4709
- const adapter = (0, import_sdk_common14.getGlobalAdapter)();
4718
+ const adapter = (0, import_sdk_common15.getGlobalAdapter)();
4710
4719
  const { request, quote } = params;
4711
4720
  const { bungeeQuote, buildTx } = quote;
4712
4721
  const bridge = bungeeQuote.routeBridge;
@@ -4795,7 +4804,7 @@ async function getBridgingStatusFromEvents(events, getAcrossStatus) {
4795
4804
  // src/providers/bungee/BungeeBridgeProvider.ts
4796
4805
  var import_sdk_config9 = require("@cowprotocol/sdk-config");
4797
4806
  var import_sdk_cow_shed2 = require("@cowprotocol/sdk-cow-shed");
4798
- var import_sdk_common15 = require("@cowprotocol/sdk-common");
4807
+ var import_sdk_common16 = require("@cowprotocol/sdk-common");
4799
4808
  var BUNGEE_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX2}/bungee`;
4800
4809
  var BUNGEE_SUPPORTED_NETWORKS = [import_sdk_config9.mainnet, import_sdk_config9.polygon, import_sdk_config9.arbitrumOne, import_sdk_config9.base, import_sdk_config9.optimism, import_sdk_config9.avalanche, import_sdk_config9.gnosisChain];
4801
4810
  var SLIPPAGE_TOLERANCE_BPS2 = 0;
@@ -4805,7 +4814,7 @@ var BungeeBridgeProvider = class {
4805
4814
  this.options = options;
4806
4815
  const adapter = _adapter || options.cowShedOptions?.adapter;
4807
4816
  if (adapter) {
4808
- (0, import_sdk_common15.setGlobalAdapter)(adapter);
4817
+ (0, import_sdk_common16.setGlobalAdapter)(adapter);
4809
4818
  }
4810
4819
  this.api = new BungeeApi(options.apiOptions);
4811
4820
  this.cowShedSdk = new import_sdk_cow_shed2.CowShedSdk(adapter, options.cowShedOptions?.factoryOptions);
@@ -4957,7 +4966,7 @@ var BungeeBridgeProvider = class {
4957
4966
  };
4958
4967
 
4959
4968
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
4960
- var import_sdk_common17 = require("@cowprotocol/sdk-common");
4969
+ var import_sdk_common18 = require("@cowprotocol/sdk-common");
4961
4970
  var import_sdk_config12 = require("@cowprotocol/sdk-config");
4962
4971
  var import_sdk_cow_shed3 = require("@cowprotocol/sdk-cow-shed");
4963
4972
  var import_sdk_order_book8 = require("@cowprotocol/sdk-order-book");
@@ -5021,7 +5030,8 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5021
5030
  import_sdk_config10.gnosisChain,
5022
5031
  import_sdk_config10.mainnet,
5023
5032
  import_sdk_config10.optimism,
5024
- import_sdk_config10.polygon
5033
+ import_sdk_config10.polygon,
5034
+ import_sdk_config10.plasma
5025
5035
  ];
5026
5036
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5027
5037
  arb: import_sdk_config10.arbitrumOne.id,
@@ -5031,7 +5041,8 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5031
5041
  eth: import_sdk_config10.mainnet.id,
5032
5042
  gnosis: import_sdk_config10.gnosisChain.id,
5033
5043
  op: import_sdk_config10.optimism.id,
5034
- pol: import_sdk_config10.polygon.id
5044
+ pol: import_sdk_config10.polygon.id,
5045
+ plasma: import_sdk_config10.plasma.id
5035
5046
  };
5036
5047
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5037
5048
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5048,7 +5059,7 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
5048
5059
 
5049
5060
  // src/providers/near-intents/util.ts
5050
5061
  var import_json_stable_stringify3 = __toESM(require("json-stable-stringify"));
5051
- var import_sdk_common16 = require("@cowprotocol/sdk-common");
5062
+ var import_sdk_common17 = require("@cowprotocol/sdk-common");
5052
5063
  var import_sdk_config11 = require("@cowprotocol/sdk-config");
5053
5064
  var calculateDeadline = (seconds) => {
5054
5065
  const secs = Number(seconds);
@@ -5098,7 +5109,7 @@ var hashQuote = ({
5098
5109
  quoteRequest,
5099
5110
  timestamp
5100
5111
  }) => {
5101
- const adapter = (0, import_sdk_common16.getGlobalAdapter)();
5112
+ const adapter = (0, import_sdk_common17.getGlobalAdapter)();
5102
5113
  const stringifiedQuote = (0, import_json_stable_stringify3.default)({
5103
5114
  dry: false,
5104
5115
  swapType: quoteRequest.swapType,
@@ -5155,7 +5166,7 @@ var NearIntentsBridgeProvider = class {
5155
5166
  constructor(options, _adapter) {
5156
5167
  const adapter = _adapter || options?.cowShedOptions?.adapter;
5157
5168
  if (adapter) {
5158
- (0, import_sdk_common17.setGlobalAdapter)(adapter);
5169
+ (0, import_sdk_common18.setGlobalAdapter)(adapter);
5159
5170
  }
5160
5171
  this.api = new NearIntentsApi();
5161
5172
  this.cowShedSdk = new import_sdk_cow_shed3.CowShedSdk(adapter, options?.cowShedOptions?.factoryOptions);
@@ -5175,7 +5186,7 @@ var NearIntentsBridgeProvider = class {
5175
5186
  if (request.kind !== import_sdk_order_book8.OrderKind.SELL) {
5176
5187
  throw new BridgeProviderQuoteError("ONLY_SELL_ORDER_SUPPORTED" /* ONLY_SELL_ORDER_SUPPORTED */, { kind: request.kind });
5177
5188
  }
5178
- const { sellTokenChainId, buyTokenChainId, buyTokenAddress, sellTokenAddress } = request;
5189
+ const { sellTokenChainId, buyTokenChainId, buyTokenAddress } = request;
5179
5190
  const tokens = adaptTokens(await this.api.getTokens());
5180
5191
  const { sourceTokens, targetTokens } = tokens.reduce(
5181
5192
  (acc, token) => {
@@ -5195,9 +5206,7 @@ var NearIntentsBridgeProvider = class {
5195
5206
  const targetToken = targetTokens.get(buyTokenAddress.toLowerCase());
5196
5207
  if (!targetToken)
5197
5208
  return [];
5198
- return Array.from(sourceTokens.values()).filter((token) => {
5199
- return token.address?.toLowerCase() !== sellTokenAddress.toLowerCase();
5200
- });
5209
+ return Array.from(sourceTokens.values());
5201
5210
  }
5202
5211
  async getQuote(request) {
5203
5212
  const {
@@ -5365,7 +5374,7 @@ var NearIntentsBridgeProvider = class {
5365
5374
  try {
5366
5375
  if (!quote?.depositAddress)
5367
5376
  return null;
5368
- const utils = (0, import_sdk_common17.getGlobalAdapter)().utils;
5377
+ const utils = (0, import_sdk_common18.getGlobalAdapter)().utils;
5369
5378
  const { hash: quoteHash, stringifiedQuote } = hashQuote({ quote, quoteRequest, timestamp });
5370
5379
  const depositAddr = utils.getChecksumAddress(quote.depositAddress);
5371
5380
  const { signature } = await this.api.getAttestation({
package/dist/index.mjs CHANGED
@@ -254,8 +254,11 @@ function getHookMockForCostEstimation(gasLimit) {
254
254
  // src/BridgingSdk/getIntermediateSwapResult.ts
255
255
  import { getGlobalAdapter as getGlobalAdapter2, jsonWithBigintReplacer as jsonWithBigintReplacer2, log as log2 } from "@cowprotocol/sdk-common";
256
256
 
257
+ // src/BridgingSdk/determineIntermediateToken.ts
258
+ import { areAddressesEqual, isNativeToken, isWrappedNativeToken } from "@cowprotocol/sdk-common";
259
+
257
260
  // src/BridgingSdk/tokenPriority.ts
258
- import { NATIVE_CURRENCY_ADDRESS, SupportedChainId } from "@cowprotocol/sdk-config";
261
+ import { SupportedChainId } from "@cowprotocol/sdk-config";
259
262
  var PRIORITY_STABLECOIN_TOKENS = {
260
263
  [SupportedChainId.MAINNET]: /* @__PURE__ */ new Set([
261
264
  "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
@@ -321,12 +324,9 @@ function isStablecoinPriorityToken(chainId, tokenAddress) {
321
324
  function isCorrelatedToken(tokenAddress, correlatedTokens) {
322
325
  return correlatedTokens.has(tokenAddress.toLowerCase());
323
326
  }
324
- function isNativeToken(tokenAddress) {
325
- return tokenAddress.toLowerCase() === NATIVE_CURRENCY_ADDRESS.toLowerCase();
326
- }
327
327
 
328
328
  // src/BridgingSdk/determineIntermediateToken.ts
329
- async function determineIntermediateToken(sourceChainId, intermediateTokens, getCorrelatedTokens) {
329
+ async function determineIntermediateToken(sourceChainId, sourceTokenAddress, intermediateTokens, getCorrelatedTokens) {
330
330
  const firstToken = intermediateTokens[0];
331
331
  if (intermediateTokens.length === 0 || !firstToken) {
332
332
  throw new BridgeProviderQuoteError("NO_INTERMEDIATE_TOKENS" /* NO_INTERMEDIATE_TOKENS */, { intermediateTokens });
@@ -335,17 +335,25 @@ async function determineIntermediateToken(sourceChainId, intermediateTokens, get
335
335
  return firstToken;
336
336
  }
337
337
  const correlatedTokens = await resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens);
338
+ const sellTokenLike = { chainId: sourceChainId, address: sourceTokenAddress };
339
+ const isSellNativeOrWrapped = isNativeToken(sellTokenLike) || isWrappedNativeToken(sellTokenLike);
338
340
  const tokensWithPriority = intermediateTokens.map((token) => {
341
+ const isNativeOrWrapped = isNativeToken(token) || isWrappedNativeToken(token);
342
+ if (areAddressesEqual(token.address, sourceTokenAddress)) {
343
+ if (!(isSellNativeOrWrapped && isNativeOrWrapped)) {
344
+ return { token, priority: 5 /* HIGHEST */ };
345
+ }
346
+ }
339
347
  if (isStablecoinPriorityToken(token.chainId, token.address)) {
340
- return { token, priority: 4 /* HIGHEST */ };
348
+ return { token, priority: 4 /* HIGH */ };
341
349
  }
342
350
  if (isCorrelatedToken(token.address, correlatedTokens)) {
343
- return { token, priority: 3 /* HIGH */ };
351
+ return { token, priority: 3 /* MEDIUM */ };
344
352
  }
345
- if (isNativeToken(token.address)) {
346
- return { token, priority: 2 /* MEDIUM */ };
353
+ if (isNativeToken(token) && !isSellNativeOrWrapped) {
354
+ return { token, priority: 2 /* LOW */ };
347
355
  }
348
- return { token, priority: 1 /* LOW */ };
356
+ return { token, priority: 1 /* LOWEST */ };
349
357
  });
350
358
  tokensWithPriority.sort((a, b) => {
351
359
  if (a.priority !== b.priority) {
@@ -402,6 +410,7 @@ async function getIntermediateSwapResult({
402
410
  });
403
411
  const intermediateToken = await determineIntermediateToken(
404
412
  sellTokenChainId,
413
+ sellTokenAddress,
405
414
  intermediateTokens,
406
415
  params.advancedSettings?.getCorrelatedTokens
407
416
  );
@@ -4969,7 +4978,7 @@ var NearIntentsApi = class {
4969
4978
  };
4970
4979
 
4971
4980
  // src/providers/near-intents/const/index.ts
4972
- import { arbitrumOne as arbitrumOne3, avalanche as avalanche2, base as base3, bnb, gnosisChain as gnosisChain2, mainnet as mainnet3, optimism as optimism3, polygon as polygon3 } from "@cowprotocol/sdk-config";
4981
+ import { arbitrumOne as arbitrumOne3, avalanche as avalanche2, base as base3, bnb, gnosisChain as gnosisChain2, mainnet as mainnet3, optimism as optimism3, polygon as polygon3, plasma } from "@cowprotocol/sdk-config";
4973
4982
  var NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
4974
4983
  var NEAR_INTENTS_SUPPORTED_NETWORKS = [
4975
4984
  arbitrumOne3,
@@ -4979,7 +4988,8 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
4979
4988
  gnosisChain2,
4980
4989
  mainnet3,
4981
4990
  optimism3,
4982
- polygon3
4991
+ polygon3,
4992
+ plasma
4983
4993
  ];
4984
4994
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
4985
4995
  arb: arbitrumOne3.id,
@@ -4989,7 +4999,8 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
4989
4999
  eth: mainnet3.id,
4990
5000
  gnosis: gnosisChain2.id,
4991
5001
  op: optimism3.id,
4992
- pol: polygon3.id
5002
+ pol: polygon3.id,
5003
+ plasma: plasma.id
4993
5004
  };
4994
5005
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
4995
5006
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5133,7 +5144,7 @@ var NearIntentsBridgeProvider = class {
5133
5144
  if (request.kind !== OrderKind6.SELL) {
5134
5145
  throw new BridgeProviderQuoteError("ONLY_SELL_ORDER_SUPPORTED" /* ONLY_SELL_ORDER_SUPPORTED */, { kind: request.kind });
5135
5146
  }
5136
- const { sellTokenChainId, buyTokenChainId, buyTokenAddress, sellTokenAddress } = request;
5147
+ const { sellTokenChainId, buyTokenChainId, buyTokenAddress } = request;
5137
5148
  const tokens = adaptTokens(await this.api.getTokens());
5138
5149
  const { sourceTokens, targetTokens } = tokens.reduce(
5139
5150
  (acc, token) => {
@@ -5153,9 +5164,7 @@ var NearIntentsBridgeProvider = class {
5153
5164
  const targetToken = targetTokens.get(buyTokenAddress.toLowerCase());
5154
5165
  if (!targetToken)
5155
5166
  return [];
5156
- return Array.from(sourceTokens.values()).filter((token) => {
5157
- return token.address?.toLowerCase() !== sellTokenAddress.toLowerCase();
5158
- });
5167
+ return Array.from(sourceTokens.values());
5159
5168
  }
5160
5169
  async getQuote(request) {
5161
5170
  const {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/sdk-bridging",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Bridging for CoW Protocol",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -16,14 +16,14 @@
16
16
  "dependencies": {
17
17
  "@defuse-protocol/one-click-sdk-typescript": "0.1.1-0.2",
18
18
  "json-stable-stringify": "^1.3.0",
19
- "@cowprotocol/sdk-app-data": "4.5.0",
20
- "@cowprotocol/sdk-common": "0.4.0",
21
- "@cowprotocol/sdk-contracts-ts": "1.0.0",
22
- "@cowprotocol/sdk-config": "0.6.2",
23
- "@cowprotocol/sdk-cow-shed": "0.2.9",
24
- "@cowprotocol/sdk-trading": "0.8.0",
25
- "@cowprotocol/sdk-weiroll": "0.1.11",
26
- "@cowprotocol/sdk-order-book": "0.5.0"
19
+ "@cowprotocol/sdk-app-data": "4.5.1",
20
+ "@cowprotocol/sdk-common": "0.5.0",
21
+ "@cowprotocol/sdk-config": "0.6.3",
22
+ "@cowprotocol/sdk-contracts-ts": "1.1.0",
23
+ "@cowprotocol/sdk-order-book": "0.5.1",
24
+ "@cowprotocol/sdk-cow-shed": "0.2.10",
25
+ "@cowprotocol/sdk-weiroll": "0.1.12",
26
+ "@cowprotocol/sdk-trading": "0.8.1"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/jest": "^29.4.0",
@@ -39,10 +39,10 @@
39
39
  "typescript": "^5.2.2",
40
40
  "viem": "^2.28.4",
41
41
  "@cow-sdk/typescript-config": "0.0.0-beta.0",
42
- "@cowprotocol/sdk-ethers-v6-adapter": "0.3.0",
43
- "@cowprotocol/sdk-ethers-v5-adapter": "0.3.0",
44
- "@cowprotocol/sdk-order-signing": "0.1.23",
45
- "@cowprotocol/sdk-viem-adapter": "0.3.0"
42
+ "@cowprotocol/sdk-ethers-v5-adapter": "0.3.1",
43
+ "@cowprotocol/sdk-order-signing": "0.1.24",
44
+ "@cowprotocol/sdk-viem-adapter": "0.3.1",
45
+ "@cowprotocol/sdk-ethers-v6-adapter": "0.3.1"
46
46
  },
47
47
  "scripts": {
48
48
  "build": "tsup src/index.ts --format esm,cjs --dts",