@cowprotocol/sdk-bridging 3.1.2 → 3.3.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.
package/dist/index.d.mts CHANGED
@@ -38,6 +38,9 @@ type QuoteBridgeRequest = {
38
38
  kind: OrderKind;
39
39
  amount: bigint;
40
40
  owner?: AccountAddress;
41
+ /** Final recipient on destination chain. Can be non-EVM (Solana/BTC).
42
+ * Used by bridge providers. Falls back to `receiver` then `account`. */
43
+ bridgeRecipient?: string;
41
44
  } & WithSellToken & WithBuyToken & WithQuoter & WithTrader & Omit<TradeOptionalParameters, 'slippageBps'> & WithSwapAndBrideSlippage;
42
45
  type QuoteBridgeRequestWithoutAmount = Omit<QuoteBridgeRequest, 'amount'>;
43
46
  interface BridgeQuoteResult {
package/dist/index.d.ts CHANGED
@@ -38,6 +38,9 @@ type QuoteBridgeRequest = {
38
38
  kind: OrderKind;
39
39
  amount: bigint;
40
40
  owner?: AccountAddress;
41
+ /** Final recipient on destination chain. Can be non-EVM (Solana/BTC).
42
+ * Used by bridge providers. Falls back to `receiver` then `account`. */
43
+ bridgeRecipient?: string;
41
44
  } & WithSellToken & WithBuyToken & WithQuoter & WithTrader & Omit<TradeOptionalParameters, 'slippageBps'> & WithSwapAndBrideSlippage;
42
45
  type QuoteBridgeRequestWithoutAmount = Omit<QuoteBridgeRequest, 'amount'>;
43
46
  interface BridgeQuoteResult {
package/dist/index.js CHANGED
@@ -237,20 +237,21 @@ 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_common6 = require("@cowprotocol/sdk-common");
240
+ var import_sdk_common8 = require("@cowprotocol/sdk-common");
241
241
 
242
242
  // src/BridgingSdk/helpers.ts
243
+ var import_sdk_common = require("@cowprotocol/sdk-common");
243
244
  var getCacheKey = ({
244
245
  id,
245
246
  buyChainId,
246
247
  sellChainId = "noSellChainID",
247
248
  tokenAddress = "noTokenAddress"
248
249
  }) => {
249
- return `${id}-${buyChainId}-${sellChainId}-${tokenAddress.toLowerCase()}`;
250
+ return `${id}-${buyChainId}-${sellChainId}-${(0, import_sdk_common.getAddressKey)(tokenAddress)}`;
250
251
  };
251
252
 
252
253
  // src/BridgingSdk/getQuoteWithoutBridge.ts
253
- var import_sdk_common = require("@cowprotocol/sdk-common");
254
+ var import_sdk_common2 = require("@cowprotocol/sdk-common");
254
255
  function getQuoteWithoutBridge(params) {
255
256
  const { quoteBridgeRequest, advancedSettings, tradingSdk } = params;
256
257
  const { sellTokenAddress, buyTokenAddress, amount, swapSlippageBps, ...rest } = quoteBridgeRequest;
@@ -263,19 +264,19 @@ function getQuoteWithoutBridge(params) {
263
264
  amount: amount.toString()
264
265
  };
265
266
  const { signer: _, ...paramsToLog } = swapParams;
266
- (0, import_sdk_common.log)(`Single-chain swap: Delegate to trading SDK with params ${JSON.stringify(paramsToLog, import_sdk_common.jsonWithBigintReplacer)}`);
267
+ (0, import_sdk_common2.log)(`Single-chain swap: Delegate to trading SDK with params ${JSON.stringify(paramsToLog, import_sdk_common2.jsonWithBigintReplacer)}`);
267
268
  return tradingSdk.getQuote(swapParams, advancedSettings);
268
269
  }
269
270
 
270
271
  // src/BridgingSdk/getQuoteWithBridge.ts
271
272
  var import_sdk_trading = require("@cowprotocol/sdk-trading");
272
- var import_sdk_common5 = require("@cowprotocol/sdk-common");
273
+ var import_sdk_common7 = require("@cowprotocol/sdk-common");
273
274
  var import_sdk_order_book = require("@cowprotocol/sdk-order-book");
274
275
 
275
276
  // src/BridgingSdk/getBridgeSignedHook.ts
276
- var import_sdk_common2 = require("@cowprotocol/sdk-common");
277
+ var import_sdk_common3 = require("@cowprotocol/sdk-common");
277
278
  async function getBridgeSignedHook(provider, bridgeRequest, { signer, hookGasLimit, swapResult, validToOverride }) {
278
- const adapter = (0, import_sdk_common2.getGlobalAdapter)();
279
+ const adapter = (0, import_sdk_common3.getGlobalAdapter)();
279
280
  const bridgingQuote = await provider.getQuote(bridgeRequest);
280
281
  const unsignedBridgeCall = await provider.getUnsignedBridgeCall(bridgeRequest, bridgingQuote);
281
282
  const deadline = BigInt(validToOverride ?? swapResult.orderToSign.validTo);
@@ -309,13 +310,14 @@ function getHookMockForCostEstimation(gasLimit) {
309
310
  }
310
311
 
311
312
  // src/BridgingSdk/getIntermediateSwapResult.ts
312
- var import_sdk_common4 = require("@cowprotocol/sdk-common");
313
+ var import_sdk_common6 = require("@cowprotocol/sdk-common");
313
314
 
314
315
  // src/BridgingSdk/determineIntermediateToken.ts
315
- var import_sdk_common3 = require("@cowprotocol/sdk-common");
316
+ var import_sdk_common5 = require("@cowprotocol/sdk-common");
316
317
 
317
318
  // src/BridgingSdk/tokenPriority.ts
318
319
  var import_sdk_config2 = require("@cowprotocol/sdk-config");
320
+ var import_sdk_common4 = require("@cowprotocol/sdk-common");
319
321
  var PRIORITY_STABLECOIN_TOKENS = {
320
322
  [import_sdk_config2.SupportedChainId.MAINNET]: /* @__PURE__ */ new Set([
321
323
  "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
@@ -364,7 +366,7 @@ var PRIORITY_STABLECOIN_TOKENS = {
364
366
  [import_sdk_config2.SupportedChainId.LINEA]: /* @__PURE__ */ new Set([
365
367
  "0x176211869ca2b568f2a7d4ee941e073a821ee1ff",
366
368
  // USDC
367
- "0xA219439258ca9da29E9Cc4cE5596924745e12B93"
369
+ "0xa219439258ca9da29e9cc4ce5596924745e12b93"
368
370
  // USDT
369
371
  ]),
370
372
  [import_sdk_config2.SupportedChainId.SEPOLIA]: /* @__PURE__ */ new Set([
@@ -376,10 +378,10 @@ function isStablecoinPriorityToken(chainId, tokenAddress) {
376
378
  const chainTokens = PRIORITY_STABLECOIN_TOKENS[chainId];
377
379
  if (!chainTokens)
378
380
  return false;
379
- return chainTokens.has(tokenAddress.toLowerCase());
381
+ return chainTokens.has((0, import_sdk_common4.getAddressKey)(tokenAddress));
380
382
  }
381
383
  function isCorrelatedToken(tokenAddress, correlatedTokens) {
382
- return correlatedTokens.has(tokenAddress.toLowerCase());
384
+ return correlatedTokens.has((0, import_sdk_common4.getAddressKey)(tokenAddress));
383
385
  }
384
386
 
385
387
  // src/BridgingSdk/determineIntermediateToken.ts
@@ -393,11 +395,11 @@ async function determineIntermediateToken(sourceChainId, sourceTokenAddress, int
393
395
  }
394
396
  const correlatedTokens = await resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens);
395
397
  const sellTokenLike = { chainId: sourceChainId, address: sourceTokenAddress };
396
- const isSellNativeOrWrapped = (0, import_sdk_common3.isNativeToken)(sellTokenLike) || (0, import_sdk_common3.isWrappedNativeToken)(sellTokenLike);
397
- const filteredTokens = allowIntermediateEqSellToken ? intermediateTokens : intermediateTokens.filter((token) => !(0, import_sdk_common3.areAddressesEqual)(token.address, sourceTokenAddress));
398
+ const isSellNativeOrWrapped = (0, import_sdk_common5.isNativeToken)(sellTokenLike) || (0, import_sdk_common5.isWrappedNativeToken)(sellTokenLike);
399
+ const filteredTokens = allowIntermediateEqSellToken ? intermediateTokens : intermediateTokens.filter((token) => !(0, import_sdk_common5.areAddressesEqual)(token.address, sourceTokenAddress));
398
400
  const tokensWithPriority = filteredTokens.map((token) => {
399
- const isNativeOrWrapped = (0, import_sdk_common3.isNativeToken)(token) || (0, import_sdk_common3.isWrappedNativeToken)(token);
400
- if ((0, import_sdk_common3.areAddressesEqual)(token.address, sourceTokenAddress)) {
401
+ const isNativeOrWrapped = (0, import_sdk_common5.isNativeToken)(token) || (0, import_sdk_common5.isWrappedNativeToken)(token);
402
+ if ((0, import_sdk_common5.areAddressesEqual)(token.address, sourceTokenAddress)) {
401
403
  if (!(isSellNativeOrWrapped && isNativeOrWrapped)) {
402
404
  return { token, priority: 5 /* HIGHEST */ };
403
405
  }
@@ -408,7 +410,7 @@ async function determineIntermediateToken(sourceChainId, sourceTokenAddress, int
408
410
  if (isCorrelatedToken(token.address, correlatedTokens)) {
409
411
  return { token, priority: 3 /* MEDIUM */ };
410
412
  }
411
- if ((0, import_sdk_common3.isNativeToken)(token) && !isSellNativeOrWrapped) {
413
+ if ((0, import_sdk_common5.isNativeToken)(token) && !isSellNativeOrWrapped) {
412
414
  return { token, priority: 2 /* LOW */ };
413
415
  }
414
416
  return { token, priority: 1 /* LOWEST */ };
@@ -429,7 +431,7 @@ async function resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens) {
429
431
  if (getCorrelatedTokens) {
430
432
  try {
431
433
  const tokens = await getCorrelatedTokens(sourceChainId);
432
- return new Set(tokens.map((t) => t.toLowerCase()));
434
+ return new Set(tokens.map((t) => (0, import_sdk_common5.getAddressKey)(t)));
433
435
  } catch (error) {
434
436
  console.warn(
435
437
  "[determineIntermediateToken] Failed to fetch correlated tokens, falling back to basic priority",
@@ -456,9 +458,9 @@ async function getIntermediateSwapResult({
456
458
  amount,
457
459
  signer: signerLike
458
460
  } = swapAndBridgeRequest;
459
- const adapter = (0, import_sdk_common4.getGlobalAdapter)();
461
+ const adapter = (0, import_sdk_common6.getGlobalAdapter)();
460
462
  const signer = signerLike ? adapter.createSigner(signerLike) : adapter.signer;
461
- (0, import_sdk_common4.log)(
463
+ (0, import_sdk_common6.log)(
462
464
  `Cross-chain ${kind} ${amount} ${sellTokenAddress} (source chain ${sellTokenChainId}) for ${buyTokenAddress} (target chain ${buyTokenChainId})`
463
465
  );
464
466
  const intermediateTokens = await getIntermediateTokens({
@@ -473,7 +475,7 @@ async function getIntermediateSwapResult({
473
475
  params.advancedSettings?.getCorrelatedTokens,
474
476
  allowIntermediateEqSellToken
475
477
  );
476
- (0, import_sdk_common4.log)(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
478
+ (0, import_sdk_common6.log)(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
477
479
  const bridgeRequestWithoutAmount = {
478
480
  ...swapAndBridgeRequest,
479
481
  sellTokenAddress: intermediateToken.address,
@@ -508,7 +510,7 @@ async function getIntermediateSwapResult({
508
510
  signer
509
511
  });
510
512
  const intermediateTokenAmount = swapResult.amountsAndCosts.afterSlippage.buyAmount;
511
- (0, import_sdk_common4.log)(
513
+ (0, import_sdk_common6.log)(
512
514
  `Expected to receive ${intermediateTokenAmount} of the intermediate token (${(intermediateTokenAmount / 10n ** BigInt(intermediaryTokenDecimals)).toString()} formatted)`
513
515
  );
514
516
  return {
@@ -555,6 +557,10 @@ async function getSwapQuote(params) {
555
557
  bridgeSlippageBps: _bridgeSlippageBps,
556
558
  amount,
557
559
  swapSlippageBps,
560
+ receiver: _receiver,
561
+ // Strip receiver from CoW API params — bridge providers override it after the quote
562
+ bridgeRecipient: _bridgeRecipient,
563
+ // Not relevant for CoW API
558
564
  ...rest
559
565
  } = swapAndBridgeRequest;
560
566
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
@@ -570,10 +576,10 @@ async function getSwapQuote(params) {
570
576
  signer
571
577
  };
572
578
  const { signer: _, ...swapParamsToLog } = swapParams;
573
- (0, import_sdk_common4.log)(
579
+ (0, import_sdk_common6.log)(
574
580
  `Getting a quote for the swap (sell token to buy intermediate token). Delegate to trading SDK with params: ${JSON.stringify(
575
581
  swapParamsToLog,
576
- import_sdk_common4.jsonWithBigintReplacer
582
+ import_sdk_common6.jsonWithBigintReplacer
577
583
  )}`
578
584
  );
579
585
  const { result: swapResult, orderBookApi } = await tradingSdk.getQuoteResults(swapParams, advancedSettings);
@@ -659,7 +665,7 @@ async function getQuoteWithReceiverAccountBridge(provider, params) {
659
665
  bridgeRequestWithoutAmount,
660
666
  intermediateTokenAmount
661
667
  });
662
- (0, import_sdk_common5.log)(`Bridge receiver override: ${bridgeReceiverOverride}`);
668
+ (0, import_sdk_common7.log)(`Bridge receiver override: ${bridgeReceiverOverride}`);
663
669
  swapResult.tradeParameters.receiver = bridgeReceiverOverride;
664
670
  swapResult.appDataInfo = await (0, import_sdk_trading.mergeAppDataDoc)(swapResult.appDataInfo.doc, {
665
671
  metadata: {
@@ -706,7 +712,7 @@ async function getQuoteWithHookBridge(provider, params) {
706
712
  getBridgeHook: async (bridgeRequestWithoutAmount2) => {
707
713
  const hookEstimatedGasLimit2 = await provider.getGasLimitEstimationForHook(bridgeRequestWithoutAmount2);
708
714
  const mockedHook = getHookMockForCostEstimation(hookEstimatedGasLimit2);
709
- (0, import_sdk_common5.log)(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
715
+ (0, import_sdk_common7.log)(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
710
716
  return mockedHook;
711
717
  }
712
718
  });
@@ -732,9 +738,9 @@ async function getQuoteWithHookBridge(provider, params) {
732
738
  validToOverride,
733
739
  hookGasLimit
734
740
  });
735
- (0, import_sdk_common5.log)(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
741
+ (0, import_sdk_common7.log)(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
736
742
  swapResult.tradeParameters.receiver = bridgeHook.recipient;
737
- (0, import_sdk_common5.log)(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
743
+ (0, import_sdk_common7.log)(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
738
744
  swapResult.appDataInfo = {
739
745
  fullAppData,
740
746
  appDataKeccak256,
@@ -751,10 +757,10 @@ async function getQuoteWithHookBridge(provider, params) {
751
757
  }
752
758
  };
753
759
  }
754
- (0, import_sdk_common5.log)(`Using gas limit: ${hookEstimatedGasLimit}`);
760
+ (0, import_sdk_common7.log)(`Using gas limit: ${hookEstimatedGasLimit}`);
755
761
  const result = await getBridgeProviderQuote(
756
762
  // Sign the hooks with quoteSigner if provided
757
- quoteSigner ? (0, import_sdk_common5.getGlobalAdapter)().createSigner(quoteSigner) : signer,
763
+ quoteSigner ? (0, import_sdk_common7.getGlobalAdapter)().createSigner(quoteSigner) : signer,
758
764
  // Use estimated hook gas limit if quoteSigner is provided, so we don't have to estimate the hook gas limit twice
759
765
  // Moreover, since quoteSigner is not the real signer, the estimation will fail
760
766
  hookEstimatedGasLimit
@@ -1196,14 +1202,14 @@ var BridgingSdk = class {
1196
1202
  constructor(options, adapter) {
1197
1203
  this.options = options;
1198
1204
  if (adapter) {
1199
- (0, import_sdk_common6.setGlobalAdapter)(adapter);
1205
+ (0, import_sdk_common8.setGlobalAdapter)(adapter);
1200
1206
  }
1201
1207
  const { providers, cacheConfig, ...restOptions } = options;
1202
1208
  if (!providers || providers.length === 0) {
1203
1209
  throw new Error("At least one bridge provider is required");
1204
1210
  }
1205
1211
  if (options.enableLogging !== void 0) {
1206
- (0, import_sdk_common6.enableLogging)(options.enableLogging);
1212
+ (0, import_sdk_common8.enableLogging)(options.enableLogging);
1207
1213
  }
1208
1214
  const tradingSdk = options.tradingSdk ?? new import_sdk_trading2.TradingSdk({}, { enableLogging: options.enableLogging });
1209
1215
  const orderBookApi = tradingSdk?.options.orderBookApi ?? new import_sdk_order_book3.OrderBookApi();
@@ -1214,12 +1220,12 @@ var BridgingSdk = class {
1214
1220
  orderBookApi
1215
1221
  };
1216
1222
  this.cacheConfig = { ...DEFAULT_CACHE_CONFIG, ...cacheConfig };
1217
- this.intermediateTokensCache = new import_sdk_common6.TTLCache(
1223
+ this.intermediateTokensCache = new import_sdk_common8.TTLCache(
1218
1224
  "bridging-intermediate-tokens",
1219
1225
  this.cacheConfig.enabled,
1220
1226
  this.cacheConfig.intermediateTokensTtl
1221
1227
  );
1222
- this.buyTokensCache = new import_sdk_common6.TTLCache(
1228
+ this.buyTokensCache = new import_sdk_common8.TTLCache(
1223
1229
  "bridging-buy-tokens",
1224
1230
  this.cacheConfig.enabled,
1225
1231
  this.cacheConfig.buyTokensTtl
@@ -1300,9 +1306,9 @@ var BridgingSdk = class {
1300
1306
  const tokens = results.reduce((tokens2, result) => {
1301
1307
  if (result.status === "fulfilled" && result.value.tokens) {
1302
1308
  result.value.tokens.forEach((token) => {
1303
- const addressLower = token.address.toLowerCase();
1304
- if (!tokens2.get(addressLower)) {
1305
- tokens2.set(addressLower, token);
1309
+ const addressKey = (0, import_sdk_common8.getAddressKey)(token.address);
1310
+ if (!tokens2.get(addressKey)) {
1311
+ tokens2.set(addressKey, token);
1306
1312
  }
1307
1313
  });
1308
1314
  }
@@ -1433,7 +1439,7 @@ var BridgingSdk = class {
1433
1439
  };
1434
1440
 
1435
1441
  // src/providers/across/AcrossApi.ts
1436
- var import_sdk_common7 = require("@cowprotocol/sdk-common");
1442
+ var import_sdk_common9 = require("@cowprotocol/sdk-common");
1437
1443
  var ACROSS_API_URL = "https://app.across.to/api";
1438
1444
  var AcrossApi = class {
1439
1445
  constructor(options = {}) {
@@ -1499,7 +1505,7 @@ var AcrossApi = class {
1499
1505
  async fetchApi(path, params, isValidResponse) {
1500
1506
  const baseUrl = this.options.apiBaseUrl || ACROSS_API_URL;
1501
1507
  const url = `${baseUrl}${path}?${new URLSearchParams(params).toString()}`;
1502
- (0, import_sdk_common7.log)(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
1508
+ (0, import_sdk_common9.log)(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
1503
1509
  const response = await fetch(url, {
1504
1510
  method: "GET"
1505
1511
  });
@@ -1538,14 +1544,14 @@ function isValidRoute(item) {
1538
1544
  }
1539
1545
 
1540
1546
  // src/providers/across/const/interfaces.ts
1541
- var import_sdk_common8 = require("@cowprotocol/sdk-common");
1547
+ var import_sdk_common10 = require("@cowprotocol/sdk-common");
1542
1548
  var ACROSS_DEPOSIT_EVENT_INTERFACE = () => {
1543
- return (0, import_sdk_common8.getGlobalAdapter)().utils.createInterface([
1549
+ return (0, import_sdk_common10.getGlobalAdapter)().utils.createInterface([
1544
1550
  "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)"
1545
1551
  ]);
1546
1552
  };
1547
1553
  var COW_TRADE_EVENT_INTERFACE = () => {
1548
- return (0, import_sdk_common8.getGlobalAdapter)().utils.createInterface([
1554
+ return (0, import_sdk_common10.getGlobalAdapter)().utils.createInterface([
1549
1555
  "event Trade(address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)"
1550
1556
  ]);
1551
1557
  };
@@ -1605,7 +1611,7 @@ var ACROSS_MATH_CONTRACT_ADDRESSES = {
1605
1611
 
1606
1612
  // src/providers/across/util.ts
1607
1613
  var import_sdk_order_book4 = require("@cowprotocol/sdk-order-book");
1608
- var import_sdk_common9 = require("@cowprotocol/sdk-common");
1614
+ var import_sdk_common11 = require("@cowprotocol/sdk-common");
1609
1615
  var import_json_stable_stringify = __toESM(require("json-stable-stringify"));
1610
1616
  var PCT_100_PERCENT = 10n ** 18n;
1611
1617
  function toBridgeQuoteResult(request, slippageBps, suggestedFees) {
@@ -1663,7 +1669,7 @@ function toAmountsAndCosts(request, slippageBps, suggestedFees) {
1663
1669
  };
1664
1670
  }
1665
1671
  function bytes32ToAddress(address) {
1666
- return (0, import_sdk_common9.getGlobalAdapter)().utils.decodeAbi(["address"], address).toString();
1672
+ return (0, import_sdk_common11.getGlobalAdapter)().utils.decodeAbi(["address"], address).toString();
1667
1673
  }
1668
1674
  function assertValidPct(pct) {
1669
1675
  if (pct > PCT_100_PERCENT || pct < 0n) {
@@ -1692,14 +1698,15 @@ function mapAcrossStatusToBridgeStatus(status) {
1692
1698
  return AcrossStatusToBridgeStatus[status];
1693
1699
  }
1694
1700
  function getAcrossDepositEvents(chainId, logs) {
1695
- const spookContractAddress = ACROSS_SPOOK_CONTRACT_ADDRESSES[chainId]?.toLowerCase();
1701
+ const addr = ACROSS_SPOOK_CONTRACT_ADDRESSES[chainId];
1702
+ const spookContractAddress = addr ? (0, import_sdk_common11.getAddressKey)(addr) : void 0;
1696
1703
  if (!spookContractAddress) {
1697
1704
  return [];
1698
1705
  }
1699
1706
  const acrossDepositInterface = ACROSS_DEPOSIT_EVENT_INTERFACE();
1700
1707
  const ACROSS_DEPOSIT_EVENT_TOPIC = acrossDepositInterface.getEventTopic("FundsDeposited");
1701
1708
  const depositEvents = logs.filter((log7) => {
1702
- return log7.address.toLocaleLowerCase() === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
1709
+ return (0, import_sdk_common11.getAddressKey)(log7.address) === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
1703
1710
  });
1704
1711
  return depositEvents.map((event) => {
1705
1712
  const parsedLog = acrossDepositInterface.parseLog(event);
@@ -1741,7 +1748,7 @@ function getAcrossDepositEvents(chainId, logs) {
1741
1748
  function getCowTradeEvents(chainId, logs, settlementContractOverride) {
1742
1749
  const COW_TRADE_EVENT_TOPIC = COW_TRADE_EVENT_INTERFACE().getEventTopic("Trade");
1743
1750
  const cowTradeEvents = logs.filter((log7) => {
1744
- return ((0, import_sdk_common9.isCoWSettlementContract)(log7.address, chainId) || (0, import_sdk_common9.areAddressesEqual)(settlementContractOverride?.[chainId], log7.address)) && log7.topics[0] === COW_TRADE_EVENT_TOPIC;
1751
+ return ((0, import_sdk_common11.isCoWSettlementContract)(log7.address, chainId) || (0, import_sdk_common11.areAddressesEqual)(settlementContractOverride?.[chainId], log7.address)) && log7.topics[0] === COW_TRADE_EVENT_TOPIC;
1745
1752
  });
1746
1753
  return cowTradeEvents.map((event) => {
1747
1754
  const parsedLog = COW_TRADE_EVENT_INTERFACE().parseLog(event);
@@ -3541,11 +3548,11 @@ var ACROSS_SPOKE_POOL_ABI = [
3541
3548
  ];
3542
3549
 
3543
3550
  // src/providers/across/createAcrossDepositCall.ts
3544
- var import_sdk_common10 = require("@cowprotocol/sdk-common");
3551
+ var import_sdk_common12 = require("@cowprotocol/sdk-common");
3545
3552
  var ERC20_BALANCE_OF_ABI = ["function balanceOf(address account) external view returns (uint256)"];
3546
3553
  var ERC20_APPROVE_OF_ABI = ["function approve(address spender, uint256 amount) external returns (bool)"];
3547
3554
  function getSpookPoolContract(sellTokenChainId) {
3548
- const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3555
+ const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3549
3556
  const spokePoolAddress = ACROSS_SPOOK_CONTRACT_ADDRESSES[sellTokenChainId];
3550
3557
  if (!spokePoolAddress) {
3551
3558
  throw new Error("Spoke pool address not found for chain: " + sellTokenChainId);
@@ -3556,7 +3563,7 @@ function getSpookPoolContract(sellTokenChainId) {
3556
3563
  );
3557
3564
  }
3558
3565
  function getMathContract(sellTokenChainId) {
3559
- const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3566
+ const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3560
3567
  const mathContractAddress = ACROSS_MATH_CONTRACT_ADDRESSES[sellTokenChainId];
3561
3568
  if (!mathContractAddress) {
3562
3569
  throw new Error("Math contract address not found for chain: " + sellTokenChainId);
@@ -3567,14 +3574,14 @@ function getMathContract(sellTokenChainId) {
3567
3574
  );
3568
3575
  }
3569
3576
  function getBalanceOfSellTokenContract(sellTokenAddress) {
3570
- const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3577
+ const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3571
3578
  return (0, import_sdk_weiroll.createWeirollContract)(
3572
3579
  adapter.getContract(sellTokenAddress, ERC20_BALANCE_OF_ABI),
3573
3580
  import_sdk_weiroll.WeirollCommandFlags.STATICCALL
3574
3581
  );
3575
3582
  }
3576
3583
  function getApproveSellTokenContract(sellTokenAddress) {
3577
- const adapter = (0, import_sdk_common10.getGlobalAdapter)();
3584
+ const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3578
3585
  return (0, import_sdk_weiroll.createWeirollContract)(adapter.getContract(sellTokenAddress, ERC20_APPROVE_OF_ABI), import_sdk_weiroll.WeirollCommandFlags.CALL);
3579
3586
  }
3580
3587
  function createAcrossDepositCall(params) {
@@ -3619,7 +3626,7 @@ function createAcrossDepositCall(params) {
3619
3626
  }
3620
3627
 
3621
3628
  // src/providers/across/getDepositParams.ts
3622
- var import_sdk_common11 = require("@cowprotocol/sdk-common");
3629
+ var import_sdk_common13 = require("@cowprotocol/sdk-common");
3623
3630
  async function getDepositParams(chainId, orderId, txReceipt, settlementContractOverride) {
3624
3631
  const depositEvents = getAcrossDepositEvents(chainId, txReceipt.logs);
3625
3632
  if (depositEvents.length === 0) {
@@ -3631,7 +3638,7 @@ async function getDepositParams(chainId, orderId, txReceipt, settlementContractO
3631
3638
  return null;
3632
3639
  const depositEvent = depositEvents[orderTradeIndex];
3633
3640
  if (!depositEvent) {
3634
- (0, import_sdk_common11.log)(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
3641
+ (0, import_sdk_common13.log)(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
3635
3642
  return null;
3636
3643
  }
3637
3644
  return {
@@ -3650,14 +3657,14 @@ async function getDepositParams(chainId, orderId, txReceipt, settlementContractO
3650
3657
  }
3651
3658
 
3652
3659
  // src/providers/utils/getGasLimitEstimationForHook.ts
3653
- var import_sdk_common12 = require("@cowprotocol/sdk-common");
3660
+ var import_sdk_common14 = require("@cowprotocol/sdk-common");
3654
3661
  async function getGasLimitEstimationForHook({
3655
3662
  cowShedSdk,
3656
3663
  request,
3657
3664
  extraGas,
3658
3665
  extraGasProxyCreation
3659
3666
  }) {
3660
- const adapter = (0, import_sdk_common12.getGlobalAdapter)();
3667
+ const adapter = (0, import_sdk_common14.getGlobalAdapter)();
3661
3668
  const proxyAddress = cowShedSdk.getCowShedAccount(request.sellTokenChainId, request.owner || request.account);
3662
3669
  const proxyCode = await adapter.getCode(proxyAddress);
3663
3670
  if (!proxyCode || proxyCode === "0x") {
@@ -3668,7 +3675,7 @@ async function getGasLimitEstimationForHook({
3668
3675
  }
3669
3676
 
3670
3677
  // src/providers/across/AcrossBridgeProvider.ts
3671
- var import_sdk_common13 = require("@cowprotocol/sdk-common");
3678
+ var import_sdk_common15 = require("@cowprotocol/sdk-common");
3672
3679
  var import_sdk_config5 = require("@cowprotocol/sdk-config");
3673
3680
  var import_sdk_cow_shed = require("@cowprotocol/sdk-cow-shed");
3674
3681
  var import_sdk_order_book5 = require("@cowprotocol/sdk-order-book");
@@ -3684,7 +3691,7 @@ var AcrossBridgeProvider = class {
3684
3691
  constructor(options = {}, _adapter) {
3685
3692
  const adapter = _adapter || options.cowShedOptions?.adapter;
3686
3693
  if (adapter) {
3687
- (0, import_sdk_common13.setGlobalAdapter)(adapter);
3694
+ (0, import_sdk_common15.setGlobalAdapter)(adapter);
3688
3695
  }
3689
3696
  this.api = new AcrossApi(options.apiOptions);
3690
3697
  this.cowShedSdk = new import_sdk_cow_shed.CowShedSdk(adapter, options.cowShedOptions?.factoryOptions);
@@ -3713,7 +3720,7 @@ var AcrossBridgeProvider = class {
3713
3720
  }
3714
3721
  const { sellTokenChainId, buyTokenChainId, buyTokenAddress } = request;
3715
3722
  const supportedTokensState = await this.getSupportedTokensState();
3716
- const buyTokenAddressLower = buyTokenAddress.toLowerCase();
3723
+ const buyTokenAddressLower = (0, import_sdk_common15.getAddressKey)(buyTokenAddress);
3717
3724
  const sourceTokens = supportedTokensState[sellTokenChainId];
3718
3725
  const targetTokens = supportedTokensState[buyTokenChainId];
3719
3726
  const targetTokenSymbol = targetTokens && targetTokens[buyTokenAddressLower]?.symbol?.toLowerCase();
@@ -3784,7 +3791,7 @@ var AcrossBridgeProvider = class {
3784
3791
  return null;
3785
3792
  }
3786
3793
  const orderUid = order.uid;
3787
- const adapter = (0, import_sdk_common13.getGlobalAdapter)();
3794
+ const adapter = (0, import_sdk_common15.getGlobalAdapter)();
3788
3795
  const txReceipt = await adapter.getTransactionReceipt(txHash);
3789
3796
  if (!txReceipt)
3790
3797
  return null;
@@ -3820,7 +3827,7 @@ var AcrossBridgeProvider = class {
3820
3827
  if (!this.supportedTokens) {
3821
3828
  const supportedTokens = (await this.api.getSupportedTokens()).reduce((acc, val) => {
3822
3829
  const data = acc[val.chainId] || {};
3823
- data[val.address.toLowerCase()] = val;
3830
+ data[(0, import_sdk_common15.getAddressKey)(val.address)] = val;
3824
3831
  acc[val.chainId] = data;
3825
3832
  return acc;
3826
3833
  }, {});
@@ -4302,7 +4309,7 @@ var BUNGEE_APPROVE_AND_BRIDGE_V1_ABI = [
4302
4309
  ];
4303
4310
 
4304
4311
  // src/providers/bungee/BungeeApi.ts
4305
- var import_sdk_common14 = require("@cowprotocol/sdk-common");
4312
+ var import_sdk_common16 = require("@cowprotocol/sdk-common");
4306
4313
 
4307
4314
  // src/providers/bungee/consts.ts
4308
4315
  var BUNGEE_API_PATH = "/api/v1/bungee";
@@ -4576,7 +4583,7 @@ var BungeeApi = class {
4576
4583
  * @returns True if the bungee tx data is valid, false otherwise
4577
4584
  */
4578
4585
  async verifyBungeeBuildTxData(originChainId, txData, routeId, expectedSocketRequest) {
4579
- const adapter = (0, import_sdk_common14.getGlobalAdapter)();
4586
+ const adapter = (0, import_sdk_common16.getGlobalAdapter)();
4580
4587
  const socketVerifierAddress = SocketVerifierAddresses[originChainId];
4581
4588
  if (!socketVerifierAddress) {
4582
4589
  throw new BridgeProviderQuoteError("TX_BUILD_ERROR" /* TX_BUILD_ERROR */, {
@@ -4697,13 +4704,13 @@ var BungeeApi = class {
4697
4704
  if (this.shouldAddAffiliate(apiType, baseUrl) && this.options.affiliate) {
4698
4705
  headers["affiliate"] = this.options.affiliate;
4699
4706
  }
4700
- (0, import_sdk_common14.log)(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
4707
+ (0, import_sdk_common16.log)(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
4701
4708
  try {
4702
4709
  const response = await fetch(url, { method: "GET", headers });
4703
4710
  if (!response.ok) {
4704
4711
  if (isInfrastructureError(response.status) && !useFallback) {
4705
4712
  this.enableFallback(apiType);
4706
- (0, import_sdk_common14.log)(
4713
+ (0, import_sdk_common16.log)(
4707
4714
  `Infrastructure error (${response.status}) detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`
4708
4715
  );
4709
4716
  return this.makeApiCall(apiType, path, params, isValidResponse);
@@ -4719,7 +4726,7 @@ var BungeeApi = class {
4719
4726
  } catch (error) {
4720
4727
  if (!useFallback && isClientFetchError(error)) {
4721
4728
  this.enableFallback(apiType);
4722
- (0, import_sdk_common14.log)(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
4729
+ (0, import_sdk_common16.log)(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
4723
4730
  return this.makeApiCall(apiType, path, params, isValidResponse);
4724
4731
  }
4725
4732
  throw error;
@@ -4729,9 +4736,9 @@ var BungeeApi = class {
4729
4736
 
4730
4737
  // src/providers/bungee/createBungeeDepositCall.ts
4731
4738
  var import_sdk_config7 = require("@cowprotocol/sdk-config");
4732
- var import_sdk_common15 = require("@cowprotocol/sdk-common");
4739
+ var import_sdk_common17 = require("@cowprotocol/sdk-common");
4733
4740
  async function createBungeeDepositCall(params) {
4734
- const adapter = (0, import_sdk_common15.getGlobalAdapter)();
4741
+ const adapter = (0, import_sdk_common17.getGlobalAdapter)();
4735
4742
  const { request, quote } = params;
4736
4743
  const { bungeeQuote, buildTx } = quote;
4737
4744
  const bridge = bungeeQuote.routeBridge;
@@ -4769,7 +4776,7 @@ async function createBungeeDepositCall(params) {
4769
4776
  fullData
4770
4777
  // data
4771
4778
  ]);
4772
- const value = request.sellTokenAddress.toLowerCase() === import_sdk_config7.ETH_ADDRESS.toLowerCase() ? BigInt(bridgeInputAmount) : 0n;
4779
+ const value = (0, import_sdk_common17.areAddressesEqual)(request.sellTokenAddress, import_sdk_config7.ETH_ADDRESS) ? BigInt(bridgeInputAmount) : 0n;
4773
4780
  const finalValue = value + nativeTokenExtraFee;
4774
4781
  const to = BungeeApproveAndBridgeV1Addresses[request.sellTokenChainId];
4775
4782
  if (!to) {
@@ -4820,7 +4827,7 @@ async function getBridgingStatusFromEvents(events, getAcrossStatus) {
4820
4827
  // src/providers/bungee/BungeeBridgeProvider.ts
4821
4828
  var import_sdk_config8 = require("@cowprotocol/sdk-config");
4822
4829
  var import_sdk_cow_shed2 = require("@cowprotocol/sdk-cow-shed");
4823
- var import_sdk_common16 = require("@cowprotocol/sdk-common");
4830
+ var import_sdk_common18 = require("@cowprotocol/sdk-common");
4824
4831
  var BUNGEE_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX2}/bungee`;
4825
4832
  var BUNGEE_SUPPORTED_NETWORKS = [import_sdk_config8.mainnet, import_sdk_config8.polygon, import_sdk_config8.arbitrumOne, import_sdk_config8.base, import_sdk_config8.optimism, import_sdk_config8.avalanche, import_sdk_config8.gnosisChain];
4826
4833
  var SLIPPAGE_TOLERANCE_BPS2 = 0;
@@ -4830,7 +4837,7 @@ var BungeeBridgeProvider = class {
4830
4837
  this.options = options;
4831
4838
  const adapter = _adapter || options.cowShedOptions?.adapter;
4832
4839
  if (adapter) {
4833
- (0, import_sdk_common16.setGlobalAdapter)(adapter);
4840
+ (0, import_sdk_common18.setGlobalAdapter)(adapter);
4834
4841
  }
4835
4842
  this.api = new BungeeApi(options.apiOptions);
4836
4843
  this.cowShedSdk = new import_sdk_cow_shed2.CowShedSdk(adapter, options.cowShedOptions?.factoryOptions);
@@ -4982,7 +4989,7 @@ var BungeeBridgeProvider = class {
4982
4989
  };
4983
4990
 
4984
4991
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
4985
- var import_sdk_common18 = require("@cowprotocol/sdk-common");
4992
+ var import_sdk_common20 = require("@cowprotocol/sdk-common");
4986
4993
  var import_sdk_config11 = require("@cowprotocol/sdk-config");
4987
4994
  var import_sdk_cow_shed3 = require("@cowprotocol/sdk-cow-shed");
4988
4995
  var import_sdk_order_book8 = require("@cowprotocol/sdk-order-book");
@@ -5056,7 +5063,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5056
5063
  import_sdk_config9.mainnet,
5057
5064
  import_sdk_config9.optimism,
5058
5065
  import_sdk_config9.polygon,
5059
- import_sdk_config9.plasma
5066
+ import_sdk_config9.plasma,
5067
+ import_sdk_config9.bitcoin,
5068
+ import_sdk_config9.solana
5060
5069
  ];
5061
5070
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5062
5071
  arb: import_sdk_config9.arbitrumOne.id,
@@ -5067,7 +5076,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5067
5076
  gnosis: import_sdk_config9.gnosisChain.id,
5068
5077
  op: import_sdk_config9.optimism.id,
5069
5078
  pol: import_sdk_config9.polygon.id,
5070
- plasma: import_sdk_config9.plasma.id
5079
+ plasma: import_sdk_config9.plasma.id,
5080
+ btc: import_sdk_config9.bitcoin.id,
5081
+ sol: import_sdk_config9.solana.id
5071
5082
  };
5072
5083
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5073
5084
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5084,7 +5095,7 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
5084
5095
 
5085
5096
  // src/providers/near-intents/util.ts
5086
5097
  var import_json_stable_stringify3 = __toESM(require("json-stable-stringify"));
5087
- var import_sdk_common17 = require("@cowprotocol/sdk-common");
5098
+ var import_sdk_common19 = require("@cowprotocol/sdk-common");
5088
5099
  var import_sdk_config10 = require("@cowprotocol/sdk-config");
5089
5100
  var calculateDeadline = (seconds) => {
5090
5101
  const secs = Number(seconds);
@@ -5098,7 +5109,7 @@ var adaptToken = (token) => {
5098
5109
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5099
5110
  if (!chainId)
5100
5111
  return null;
5101
- const tokenAddress = token.contractAddress || import_sdk_config10.ETH_ADDRESS;
5112
+ const tokenAddress = token.contractAddress ?? (chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.btc ? import_sdk_config10.BTC_CURRENCY_ADDRESS : chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.sol ? import_sdk_config10.SOL_NATIVE_CURRENCY_ADDRESS : import_sdk_config10.ETH_ADDRESS);
5102
5113
  if (!tokenAddress)
5103
5114
  return null;
5104
5115
  return {
@@ -5118,18 +5129,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
5118
5129
  return acc;
5119
5130
  }, []);
5120
5131
  var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
5121
- if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
5122
- return void 0;
5123
- }
5124
5132
  return tokens.find((token) => {
5125
5133
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5126
5134
  if (!chainId)
5127
5135
  return false;
5128
- if (targetTokenAddress.toLowerCase() === import_sdk_config10.ETH_ADDRESS.toLowerCase()) {
5129
- return chainId === targetTokenChainId && !token.contractAddress;
5136
+ if (chainId !== targetTokenChainId)
5137
+ return false;
5138
+ if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
5139
+ if (!token.contractAddress) {
5140
+ return (0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.BTC_CURRENCY_ADDRESS) || (0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.SOL_NATIVE_CURRENCY_ADDRESS);
5141
+ }
5142
+ return (0, import_sdk_common19.areAddressesEqual)(token.contractAddress, targetTokenAddress);
5143
+ }
5144
+ if ((0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.ETH_ADDRESS)) {
5145
+ return !token.contractAddress;
5130
5146
  }
5131
5147
  const tokenAddress = token.contractAddress || import_sdk_config10.ETH_ADDRESS;
5132
- return tokenAddress?.toLowerCase() === targetTokenAddress.toLowerCase() && chainId === targetTokenChainId;
5148
+ return (0, import_sdk_common19.areAddressesEqual)(tokenAddress, targetTokenAddress);
5133
5149
  });
5134
5150
  };
5135
5151
  var hashQuote = ({
@@ -5137,7 +5153,7 @@ var hashQuote = ({
5137
5153
  quoteRequest,
5138
5154
  timestamp
5139
5155
  }) => {
5140
- const adapter = (0, import_sdk_common17.getGlobalAdapter)();
5156
+ const adapter = (0, import_sdk_common19.getGlobalAdapter)();
5141
5157
  const stringifiedQuote = (0, import_json_stable_stringify3.default)({
5142
5158
  dry: false,
5143
5159
  swapType: quoteRequest.swapType,
@@ -5177,7 +5193,6 @@ var hashQuote = ({
5177
5193
  };
5178
5194
 
5179
5195
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
5180
- var import_sdk_config12 = require("@cowprotocol/sdk-config");
5181
5196
  var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5182
5197
  var REFERRAL = "cow";
5183
5198
  var providerType3 = "ReceiverAccountBridgeProvider";
@@ -5195,7 +5210,7 @@ var NearIntentsBridgeProvider = class {
5195
5210
  constructor(options, _adapter) {
5196
5211
  const adapter = _adapter || options?.cowShedOptions?.adapter;
5197
5212
  if (adapter) {
5198
- (0, import_sdk_common18.setGlobalAdapter)(adapter);
5213
+ (0, import_sdk_common20.setGlobalAdapter)(adapter);
5199
5214
  }
5200
5215
  this.api = new NearIntentsApi(options?.apiKey);
5201
5216
  this.cowShedSdk = new import_sdk_cow_shed3.CowShedSdk(adapter, options?.cowShedOptions?.factoryOptions);
@@ -5220,10 +5235,10 @@ var NearIntentsBridgeProvider = class {
5220
5235
  const { sourceTokens, targetTokens } = tokens.reduce(
5221
5236
  (acc, token) => {
5222
5237
  if (token.chainId === sellTokenChainId) {
5223
- acc.sourceTokens.set(token.address.toLowerCase(), token);
5238
+ acc.sourceTokens.set((0, import_sdk_common20.getAddressKey)(token.address), token);
5224
5239
  }
5225
5240
  if (token.chainId === buyTokenChainId) {
5226
- acc.targetTokens.set(token.address.toLowerCase(), token);
5241
+ acc.targetTokens.set((0, import_sdk_common20.getAddressKey)(token.address), token);
5227
5242
  }
5228
5243
  return acc;
5229
5244
  },
@@ -5232,7 +5247,7 @@ var NearIntentsBridgeProvider = class {
5232
5247
  targetTokens: /* @__PURE__ */ new Map()
5233
5248
  }
5234
5249
  );
5235
- const targetToken = targetTokens.get(buyTokenAddress.toLowerCase());
5250
+ const targetToken = targetTokens.get((0, import_sdk_common20.getAddressKey)(buyTokenAddress));
5236
5251
  if (!targetToken)
5237
5252
  return [];
5238
5253
  return Array.from(sourceTokens.values());
@@ -5246,9 +5261,13 @@ var NearIntentsBridgeProvider = class {
5246
5261
  account,
5247
5262
  amount,
5248
5263
  receiver,
5264
+ bridgeRecipient,
5249
5265
  validFor,
5250
5266
  owner
5251
5267
  } = request;
5268
+ if ((0, import_sdk_common20.areAddressesEqual)(sellTokenAddress, import_sdk_config11.BTC_CURRENCY_ADDRESS) || (0, import_sdk_common20.areAddressesEqual)(sellTokenAddress, import_sdk_config11.SOL_NATIVE_CURRENCY_ADDRESS)) {
5269
+ throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
5270
+ }
5252
5271
  const tokens = await this.api.getTokens();
5253
5272
  const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
5254
5273
  const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
@@ -5264,13 +5283,13 @@ var NearIntentsBridgeProvider = class {
5264
5283
  amount: amount.toString(),
5265
5284
  refundTo: owner || account,
5266
5285
  refundType: import_one_click_sdk_typescript2.QuoteRequest.refundType.ORIGIN_CHAIN,
5267
- recipient: receiver || account,
5286
+ recipient: bridgeRecipient || receiver || account,
5268
5287
  recipientType: import_one_click_sdk_typescript2.QuoteRequest.recipientType.DESTINATION_CHAIN,
5269
5288
  deadline: calculateDeadline(validFor || 3600),
5270
5289
  referral: REFERRAL
5271
5290
  });
5272
5291
  const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse);
5273
- if (recoveredDepositAddress?.address.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) {
5292
+ if (!recoveredDepositAddress || !(0, import_sdk_common20.areAddressesEqual)(recoveredDepositAddress.address, ATTESTATOR_ADDRESS)) {
5274
5293
  throw new BridgeProviderQuoteError("QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS" /* QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS */);
5275
5294
  }
5276
5295
  const { quote, timestamp: isoDate } = quoteResponse;
@@ -5347,9 +5366,6 @@ var NearIntentsBridgeProvider = class {
5347
5366
  if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
5348
5367
  throw new Error("Token not supported");
5349
5368
  }
5350
- if (!(0, import_sdk_config12.isEvmChain)(adaptedInput.chainId) || !(0, import_sdk_config12.isEvmChain)(adaptedOutput.chainId)) {
5351
- throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
5352
- }
5353
5369
  return {
5354
5370
  status: {
5355
5371
  fillTimeInSeconds: quote.timeEstimate,
@@ -5406,7 +5422,7 @@ var NearIntentsBridgeProvider = class {
5406
5422
  try {
5407
5423
  if (!quote?.depositAddress)
5408
5424
  return null;
5409
- const utils = (0, import_sdk_common18.getGlobalAdapter)().utils;
5425
+ const utils = (0, import_sdk_common20.getGlobalAdapter)().utils;
5410
5426
  const { hash: quoteHash, stringifiedQuote } = hashQuote({ quote, quoteRequest, timestamp });
5411
5427
  const depositAddr = utils.getChecksumAddress(quote.depositAddress);
5412
5428
  const { signature } = await this.api.getAttestation({
package/dist/index.mjs CHANGED
@@ -176,16 +176,17 @@ async function getCrossChainOrder(params) {
176
176
  import { TradingSdk } from "@cowprotocol/sdk-trading";
177
177
  import { OrderBookApi as OrderBookApi2 } from "@cowprotocol/sdk-order-book";
178
178
  import { ALL_SUPPORTED_CHAINS } from "@cowprotocol/sdk-config";
179
- import { enableLogging, setGlobalAdapter, TTLCache as TTLCache2 } from "@cowprotocol/sdk-common";
179
+ import { enableLogging, getAddressKey as getAddressKey4, setGlobalAdapter, TTLCache as TTLCache2 } from "@cowprotocol/sdk-common";
180
180
 
181
181
  // src/BridgingSdk/helpers.ts
182
+ import { getAddressKey } from "@cowprotocol/sdk-common";
182
183
  var getCacheKey = ({
183
184
  id,
184
185
  buyChainId,
185
186
  sellChainId = "noSellChainID",
186
187
  tokenAddress = "noTokenAddress"
187
188
  }) => {
188
- return `${id}-${buyChainId}-${sellChainId}-${tokenAddress.toLowerCase()}`;
189
+ return `${id}-${buyChainId}-${sellChainId}-${getAddressKey(tokenAddress)}`;
189
190
  };
190
191
 
191
192
  // src/BridgingSdk/getQuoteWithoutBridge.ts
@@ -255,10 +256,11 @@ function getHookMockForCostEstimation(gasLimit) {
255
256
  import { getGlobalAdapter as getGlobalAdapter2, jsonWithBigintReplacer as jsonWithBigintReplacer2, log as log2 } from "@cowprotocol/sdk-common";
256
257
 
257
258
  // src/BridgingSdk/determineIntermediateToken.ts
258
- import { areAddressesEqual, isNativeToken, isWrappedNativeToken } from "@cowprotocol/sdk-common";
259
+ import { areAddressesEqual, getAddressKey as getAddressKey3, isNativeToken, isWrappedNativeToken } from "@cowprotocol/sdk-common";
259
260
 
260
261
  // src/BridgingSdk/tokenPriority.ts
261
262
  import { SupportedChainId } from "@cowprotocol/sdk-config";
263
+ import { getAddressKey as getAddressKey2 } from "@cowprotocol/sdk-common";
262
264
  var PRIORITY_STABLECOIN_TOKENS = {
263
265
  [SupportedChainId.MAINNET]: /* @__PURE__ */ new Set([
264
266
  "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
@@ -307,7 +309,7 @@ var PRIORITY_STABLECOIN_TOKENS = {
307
309
  [SupportedChainId.LINEA]: /* @__PURE__ */ new Set([
308
310
  "0x176211869ca2b568f2a7d4ee941e073a821ee1ff",
309
311
  // USDC
310
- "0xA219439258ca9da29E9Cc4cE5596924745e12B93"
312
+ "0xa219439258ca9da29e9cc4ce5596924745e12b93"
311
313
  // USDT
312
314
  ]),
313
315
  [SupportedChainId.SEPOLIA]: /* @__PURE__ */ new Set([
@@ -319,10 +321,10 @@ function isStablecoinPriorityToken(chainId, tokenAddress) {
319
321
  const chainTokens = PRIORITY_STABLECOIN_TOKENS[chainId];
320
322
  if (!chainTokens)
321
323
  return false;
322
- return chainTokens.has(tokenAddress.toLowerCase());
324
+ return chainTokens.has(getAddressKey2(tokenAddress));
323
325
  }
324
326
  function isCorrelatedToken(tokenAddress, correlatedTokens) {
325
- return correlatedTokens.has(tokenAddress.toLowerCase());
327
+ return correlatedTokens.has(getAddressKey2(tokenAddress));
326
328
  }
327
329
 
328
330
  // src/BridgingSdk/determineIntermediateToken.ts
@@ -372,7 +374,7 @@ async function resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens) {
372
374
  if (getCorrelatedTokens) {
373
375
  try {
374
376
  const tokens = await getCorrelatedTokens(sourceChainId);
375
- return new Set(tokens.map((t) => t.toLowerCase()));
377
+ return new Set(tokens.map((t) => getAddressKey3(t)));
376
378
  } catch (error) {
377
379
  console.warn(
378
380
  "[determineIntermediateToken] Failed to fetch correlated tokens, falling back to basic priority",
@@ -498,6 +500,10 @@ async function getSwapQuote(params) {
498
500
  bridgeSlippageBps: _bridgeSlippageBps,
499
501
  amount,
500
502
  swapSlippageBps,
503
+ receiver: _receiver,
504
+ // Strip receiver from CoW API params — bridge providers override it after the quote
505
+ bridgeRecipient: _bridgeRecipient,
506
+ // Not relevant for CoW API
501
507
  ...rest
502
508
  } = swapAndBridgeRequest;
503
509
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
@@ -1243,9 +1249,9 @@ var BridgingSdk = class {
1243
1249
  const tokens = results.reduce((tokens2, result) => {
1244
1250
  if (result.status === "fulfilled" && result.value.tokens) {
1245
1251
  result.value.tokens.forEach((token) => {
1246
- const addressLower = token.address.toLowerCase();
1247
- if (!tokens2.get(addressLower)) {
1248
- tokens2.set(addressLower, token);
1252
+ const addressKey = getAddressKey4(token.address);
1253
+ if (!tokens2.get(addressKey)) {
1254
+ tokens2.set(addressKey, token);
1249
1255
  }
1250
1256
  });
1251
1257
  }
@@ -1548,7 +1554,7 @@ var ACROSS_MATH_CONTRACT_ADDRESSES = {
1548
1554
 
1549
1555
  // src/providers/across/util.ts
1550
1556
  import { OrderKind as OrderKind2 } from "@cowprotocol/sdk-order-book";
1551
- import { areAddressesEqual as areAddressesEqual2, getGlobalAdapter as getGlobalAdapter5, isCoWSettlementContract } from "@cowprotocol/sdk-common";
1557
+ import { areAddressesEqual as areAddressesEqual2, getAddressKey as getAddressKey5, getGlobalAdapter as getGlobalAdapter5, isCoWSettlementContract } from "@cowprotocol/sdk-common";
1552
1558
  import stringify from "json-stable-stringify";
1553
1559
  var PCT_100_PERCENT = 10n ** 18n;
1554
1560
  function toBridgeQuoteResult(request, slippageBps, suggestedFees) {
@@ -1635,14 +1641,15 @@ function mapAcrossStatusToBridgeStatus(status) {
1635
1641
  return AcrossStatusToBridgeStatus[status];
1636
1642
  }
1637
1643
  function getAcrossDepositEvents(chainId, logs) {
1638
- const spookContractAddress = ACROSS_SPOOK_CONTRACT_ADDRESSES[chainId]?.toLowerCase();
1644
+ const addr = ACROSS_SPOOK_CONTRACT_ADDRESSES[chainId];
1645
+ const spookContractAddress = addr ? getAddressKey5(addr) : void 0;
1639
1646
  if (!spookContractAddress) {
1640
1647
  return [];
1641
1648
  }
1642
1649
  const acrossDepositInterface = ACROSS_DEPOSIT_EVENT_INTERFACE();
1643
1650
  const ACROSS_DEPOSIT_EVENT_TOPIC = acrossDepositInterface.getEventTopic("FundsDeposited");
1644
1651
  const depositEvents = logs.filter((log7) => {
1645
- return log7.address.toLocaleLowerCase() === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
1652
+ return getAddressKey5(log7.address) === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
1646
1653
  });
1647
1654
  return depositEvents.map((event) => {
1648
1655
  const parsedLog = acrossDepositInterface.parseLog(event);
@@ -3611,7 +3618,7 @@ async function getGasLimitEstimationForHook({
3611
3618
  }
3612
3619
 
3613
3620
  // src/providers/across/AcrossBridgeProvider.ts
3614
- import { getGlobalAdapter as getGlobalAdapter8, setGlobalAdapter as setGlobalAdapter2 } from "@cowprotocol/sdk-common";
3621
+ import { getAddressKey as getAddressKey6, getGlobalAdapter as getGlobalAdapter8, setGlobalAdapter as setGlobalAdapter2 } from "@cowprotocol/sdk-common";
3615
3622
  import {
3616
3623
  arbitrumOne,
3617
3624
  base,
@@ -3663,7 +3670,7 @@ var AcrossBridgeProvider = class {
3663
3670
  }
3664
3671
  const { sellTokenChainId, buyTokenChainId, buyTokenAddress } = request;
3665
3672
  const supportedTokensState = await this.getSupportedTokensState();
3666
- const buyTokenAddressLower = buyTokenAddress.toLowerCase();
3673
+ const buyTokenAddressLower = getAddressKey6(buyTokenAddress);
3667
3674
  const sourceTokens = supportedTokensState[sellTokenChainId];
3668
3675
  const targetTokens = supportedTokensState[buyTokenChainId];
3669
3676
  const targetTokenSymbol = targetTokens && targetTokens[buyTokenAddressLower]?.symbol?.toLowerCase();
@@ -3770,7 +3777,7 @@ var AcrossBridgeProvider = class {
3770
3777
  if (!this.supportedTokens) {
3771
3778
  const supportedTokens = (await this.api.getSupportedTokens()).reduce((acc, val) => {
3772
3779
  const data = acc[val.chainId] || {};
3773
- data[val.address.toLowerCase()] = val;
3780
+ data[getAddressKey6(val.address)] = val;
3774
3781
  acc[val.chainId] = data;
3775
3782
  return acc;
3776
3783
  }, {});
@@ -4679,7 +4686,7 @@ var BungeeApi = class {
4679
4686
 
4680
4687
  // src/providers/bungee/createBungeeDepositCall.ts
4681
4688
  import { ETH_ADDRESS } from "@cowprotocol/sdk-config";
4682
- import { getGlobalAdapter as getGlobalAdapter10 } from "@cowprotocol/sdk-common";
4689
+ import { areAddressesEqual as areAddressesEqual3, getGlobalAdapter as getGlobalAdapter10 } from "@cowprotocol/sdk-common";
4683
4690
  async function createBungeeDepositCall(params) {
4684
4691
  const adapter = getGlobalAdapter10();
4685
4692
  const { request, quote } = params;
@@ -4719,7 +4726,7 @@ async function createBungeeDepositCall(params) {
4719
4726
  fullData
4720
4727
  // data
4721
4728
  ]);
4722
- const value = request.sellTokenAddress.toLowerCase() === ETH_ADDRESS.toLowerCase() ? BigInt(bridgeInputAmount) : 0n;
4729
+ const value = areAddressesEqual3(request.sellTokenAddress, ETH_ADDRESS) ? BigInt(bridgeInputAmount) : 0n;
4723
4730
  const finalValue = value + nativeTokenExtraFee;
4724
4731
  const to = BungeeApproveAndBridgeV1Addresses[request.sellTokenChainId];
4725
4732
  if (!to) {
@@ -4941,8 +4948,8 @@ var BungeeBridgeProvider = class {
4941
4948
  };
4942
4949
 
4943
4950
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
4944
- import { getGlobalAdapter as getGlobalAdapter12, setGlobalAdapter as setGlobalAdapter4 } from "@cowprotocol/sdk-common";
4945
- import { ETH_ADDRESS as ETH_ADDRESS3 } from "@cowprotocol/sdk-config";
4951
+ import { areAddressesEqual as areAddressesEqual5, getAddressKey as getAddressKey7, getGlobalAdapter as getGlobalAdapter12, setGlobalAdapter as setGlobalAdapter4 } from "@cowprotocol/sdk-common";
4952
+ import { BTC_CURRENCY_ADDRESS as BTC_CURRENCY_ADDRESS2, ETH_ADDRESS as ETH_ADDRESS3, SOL_NATIVE_CURRENCY_ADDRESS as SOL_NATIVE_CURRENCY_ADDRESS2 } from "@cowprotocol/sdk-config";
4946
4953
  import { CowShedSdk as CowShedSdk3 } from "@cowprotocol/sdk-cow-shed";
4947
4954
  import { OrderKind as OrderKind6 } from "@cowprotocol/sdk-order-book";
4948
4955
  import { QuoteRequest } from "@defuse-protocol/one-click-sdk-typescript";
@@ -5004,7 +5011,19 @@ var NearIntentsApi = class {
5004
5011
  };
5005
5012
 
5006
5013
  // src/providers/near-intents/const/index.ts
5007
- 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";
5014
+ import {
5015
+ arbitrumOne as arbitrumOne3,
5016
+ avalanche as avalanche2,
5017
+ base as base3,
5018
+ bnb,
5019
+ gnosisChain as gnosisChain2,
5020
+ mainnet as mainnet3,
5021
+ optimism as optimism3,
5022
+ polygon as polygon3,
5023
+ plasma,
5024
+ bitcoin,
5025
+ solana
5026
+ } from "@cowprotocol/sdk-config";
5008
5027
  var NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5009
5028
  var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5010
5029
  arbitrumOne3,
@@ -5015,7 +5034,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5015
5034
  mainnet3,
5016
5035
  optimism3,
5017
5036
  polygon3,
5018
- plasma
5037
+ plasma,
5038
+ bitcoin,
5039
+ solana
5019
5040
  ];
5020
5041
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5021
5042
  arb: arbitrumOne3.id,
@@ -5026,7 +5047,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5026
5047
  gnosis: gnosisChain2.id,
5027
5048
  op: optimism3.id,
5028
5049
  pol: polygon3.id,
5029
- plasma: plasma.id
5050
+ plasma: plasma.id,
5051
+ btc: bitcoin.id,
5052
+ sol: solana.id
5030
5053
  };
5031
5054
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5032
5055
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5043,8 +5066,13 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
5043
5066
 
5044
5067
  // src/providers/near-intents/util.ts
5045
5068
  import stringify3 from "json-stable-stringify";
5046
- import { getGlobalAdapter as getGlobalAdapter11 } from "@cowprotocol/sdk-common";
5047
- import { ETH_ADDRESS as ETH_ADDRESS2, isEvmChain } from "@cowprotocol/sdk-config";
5069
+ import { areAddressesEqual as areAddressesEqual4, getGlobalAdapter as getGlobalAdapter11 } from "@cowprotocol/sdk-common";
5070
+ import {
5071
+ BTC_CURRENCY_ADDRESS,
5072
+ ETH_ADDRESS as ETH_ADDRESS2,
5073
+ SOL_NATIVE_CURRENCY_ADDRESS,
5074
+ isEvmChain
5075
+ } from "@cowprotocol/sdk-config";
5048
5076
  var calculateDeadline = (seconds) => {
5049
5077
  const secs = Number(seconds);
5050
5078
  if (!Number.isFinite(secs)) {
@@ -5057,7 +5085,7 @@ var adaptToken = (token) => {
5057
5085
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5058
5086
  if (!chainId)
5059
5087
  return null;
5060
- const tokenAddress = token.contractAddress || ETH_ADDRESS2;
5088
+ const tokenAddress = token.contractAddress ?? (chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.btc ? BTC_CURRENCY_ADDRESS : chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.sol ? SOL_NATIVE_CURRENCY_ADDRESS : ETH_ADDRESS2);
5061
5089
  if (!tokenAddress)
5062
5090
  return null;
5063
5091
  return {
@@ -5077,18 +5105,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
5077
5105
  return acc;
5078
5106
  }, []);
5079
5107
  var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
5080
- if (!isEvmChain(targetTokenChainId)) {
5081
- return void 0;
5082
- }
5083
5108
  return tokens.find((token) => {
5084
5109
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5085
5110
  if (!chainId)
5086
5111
  return false;
5087
- if (targetTokenAddress.toLowerCase() === ETH_ADDRESS2.toLowerCase()) {
5088
- return chainId === targetTokenChainId && !token.contractAddress;
5112
+ if (chainId !== targetTokenChainId)
5113
+ return false;
5114
+ if (!isEvmChain(targetTokenChainId)) {
5115
+ if (!token.contractAddress) {
5116
+ return areAddressesEqual4(targetTokenAddress, BTC_CURRENCY_ADDRESS) || areAddressesEqual4(targetTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS);
5117
+ }
5118
+ return areAddressesEqual4(token.contractAddress, targetTokenAddress);
5119
+ }
5120
+ if (areAddressesEqual4(targetTokenAddress, ETH_ADDRESS2)) {
5121
+ return !token.contractAddress;
5089
5122
  }
5090
5123
  const tokenAddress = token.contractAddress || ETH_ADDRESS2;
5091
- return tokenAddress?.toLowerCase() === targetTokenAddress.toLowerCase() && chainId === targetTokenChainId;
5124
+ return areAddressesEqual4(tokenAddress, targetTokenAddress);
5092
5125
  });
5093
5126
  };
5094
5127
  var hashQuote = ({
@@ -5136,7 +5169,6 @@ var hashQuote = ({
5136
5169
  };
5137
5170
 
5138
5171
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
5139
- import { isEvmChain as isEvmChain2 } from "@cowprotocol/sdk-config";
5140
5172
  var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5141
5173
  var REFERRAL = "cow";
5142
5174
  var providerType3 = "ReceiverAccountBridgeProvider";
@@ -5179,10 +5211,10 @@ var NearIntentsBridgeProvider = class {
5179
5211
  const { sourceTokens, targetTokens } = tokens.reduce(
5180
5212
  (acc, token) => {
5181
5213
  if (token.chainId === sellTokenChainId) {
5182
- acc.sourceTokens.set(token.address.toLowerCase(), token);
5214
+ acc.sourceTokens.set(getAddressKey7(token.address), token);
5183
5215
  }
5184
5216
  if (token.chainId === buyTokenChainId) {
5185
- acc.targetTokens.set(token.address.toLowerCase(), token);
5217
+ acc.targetTokens.set(getAddressKey7(token.address), token);
5186
5218
  }
5187
5219
  return acc;
5188
5220
  },
@@ -5191,7 +5223,7 @@ var NearIntentsBridgeProvider = class {
5191
5223
  targetTokens: /* @__PURE__ */ new Map()
5192
5224
  }
5193
5225
  );
5194
- const targetToken = targetTokens.get(buyTokenAddress.toLowerCase());
5226
+ const targetToken = targetTokens.get(getAddressKey7(buyTokenAddress));
5195
5227
  if (!targetToken)
5196
5228
  return [];
5197
5229
  return Array.from(sourceTokens.values());
@@ -5205,9 +5237,13 @@ var NearIntentsBridgeProvider = class {
5205
5237
  account,
5206
5238
  amount,
5207
5239
  receiver,
5240
+ bridgeRecipient,
5208
5241
  validFor,
5209
5242
  owner
5210
5243
  } = request;
5244
+ if (areAddressesEqual5(sellTokenAddress, BTC_CURRENCY_ADDRESS2) || areAddressesEqual5(sellTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS2)) {
5245
+ throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
5246
+ }
5211
5247
  const tokens = await this.api.getTokens();
5212
5248
  const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
5213
5249
  const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
@@ -5223,13 +5259,13 @@ var NearIntentsBridgeProvider = class {
5223
5259
  amount: amount.toString(),
5224
5260
  refundTo: owner || account,
5225
5261
  refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
5226
- recipient: receiver || account,
5262
+ recipient: bridgeRecipient || receiver || account,
5227
5263
  recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
5228
5264
  deadline: calculateDeadline(validFor || 3600),
5229
5265
  referral: REFERRAL
5230
5266
  });
5231
5267
  const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse);
5232
- if (recoveredDepositAddress?.address.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) {
5268
+ if (!recoveredDepositAddress || !areAddressesEqual5(recoveredDepositAddress.address, ATTESTATOR_ADDRESS)) {
5233
5269
  throw new BridgeProviderQuoteError("QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS" /* QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS */);
5234
5270
  }
5235
5271
  const { quote, timestamp: isoDate } = quoteResponse;
@@ -5306,9 +5342,6 @@ var NearIntentsBridgeProvider = class {
5306
5342
  if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
5307
5343
  throw new Error("Token not supported");
5308
5344
  }
5309
- if (!isEvmChain2(adaptedInput.chainId) || !isEvmChain2(adaptedOutput.chainId)) {
5310
- throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
5311
- }
5312
5345
  return {
5313
5346
  status: {
5314
5347
  fillTimeInSeconds: quote.timeEstimate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/sdk-bridging",
3
- "version": "3.1.2",
3
+ "version": "3.3.0",
4
4
  "description": "Bridging for CoW Protocol",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,14 +21,14 @@
21
21
  "dependencies": {
22
22
  "@defuse-protocol/one-click-sdk-typescript": "0.1.1-0.2",
23
23
  "json-stable-stringify": "^1.3.0",
24
- "@cowprotocol/sdk-app-data": "4.6.11",
24
+ "@cowprotocol/sdk-common": "0.9.0",
25
+ "@cowprotocol/sdk-app-data": "4.6.13",
25
26
  "@cowprotocol/sdk-config": "1.1.2",
26
- "@cowprotocol/sdk-contracts-ts": "2.1.2",
27
- "@cowprotocol/sdk-order-book": "2.0.3",
28
- "@cowprotocol/sdk-common": "0.8.2",
29
- "@cowprotocol/sdk-cow-shed": "0.3.2",
30
- "@cowprotocol/sdk-weiroll": "0.1.25",
31
- "@cowprotocol/sdk-trading": "1.1.2"
27
+ "@cowprotocol/sdk-contracts-ts": "2.3.0",
28
+ "@cowprotocol/sdk-cow-shed": "0.3.4",
29
+ "@cowprotocol/sdk-order-book": "2.0.4",
30
+ "@cowprotocol/sdk-trading": "1.2.1",
31
+ "@cowprotocol/sdk-weiroll": "0.1.27"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/jest": "^29.4.0",
@@ -44,10 +44,10 @@
44
44
  "typescript": "^5.2.2",
45
45
  "viem": "^2.28.4",
46
46
  "@cow-sdk/typescript-config": "0.0.0-beta.0",
47
- "@cowprotocol/sdk-ethers-v5-adapter": "0.3.14",
48
- "@cowprotocol/sdk-ethers-v6-adapter": "0.3.14",
49
- "@cowprotocol/sdk-order-signing": "0.2.2",
50
- "@cowprotocol/sdk-viem-adapter": "0.3.14"
47
+ "@cowprotocol/sdk-ethers-v5-adapter": "0.4.1",
48
+ "@cowprotocol/sdk-ethers-v6-adapter": "0.4.1",
49
+ "@cowprotocol/sdk-viem-adapter": "0.3.15",
50
+ "@cowprotocol/sdk-order-signing": "0.2.4"
51
51
  },
52
52
  "scripts": {
53
53
  "build": "tsup src/index.ts --format esm,cjs --dts",