@cowprotocol/sdk-bridging 3.2.0 → 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
@@ -557,6 +557,10 @@ async function getSwapQuote(params) {
557
557
  bridgeSlippageBps: _bridgeSlippageBps,
558
558
  amount,
559
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
560
564
  ...rest
561
565
  } = swapAndBridgeRequest;
562
566
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
@@ -5059,7 +5063,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5059
5063
  import_sdk_config9.mainnet,
5060
5064
  import_sdk_config9.optimism,
5061
5065
  import_sdk_config9.polygon,
5062
- import_sdk_config9.plasma
5066
+ import_sdk_config9.plasma,
5067
+ import_sdk_config9.bitcoin,
5068
+ import_sdk_config9.solana
5063
5069
  ];
5064
5070
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5065
5071
  arb: import_sdk_config9.arbitrumOne.id,
@@ -5070,7 +5076,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5070
5076
  gnosis: import_sdk_config9.gnosisChain.id,
5071
5077
  op: import_sdk_config9.optimism.id,
5072
5078
  pol: import_sdk_config9.polygon.id,
5073
- 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
5074
5082
  };
5075
5083
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5076
5084
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5101,7 +5109,7 @@ var adaptToken = (token) => {
5101
5109
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5102
5110
  if (!chainId)
5103
5111
  return null;
5104
- 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);
5105
5113
  if (!tokenAddress)
5106
5114
  return null;
5107
5115
  return {
@@ -5121,18 +5129,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
5121
5129
  return acc;
5122
5130
  }, []);
5123
5131
  var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
5124
- if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
5125
- return void 0;
5126
- }
5127
5132
  return tokens.find((token) => {
5128
5133
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5129
5134
  if (!chainId)
5130
5135
  return false;
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
+ }
5131
5144
  if ((0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.ETH_ADDRESS)) {
5132
- return chainId === targetTokenChainId && !token.contractAddress;
5145
+ return !token.contractAddress;
5133
5146
  }
5134
5147
  const tokenAddress = token.contractAddress || import_sdk_config10.ETH_ADDRESS;
5135
- return (0, import_sdk_common19.areAddressesEqual)(tokenAddress, targetTokenAddress) && chainId === targetTokenChainId;
5148
+ return (0, import_sdk_common19.areAddressesEqual)(tokenAddress, targetTokenAddress);
5136
5149
  });
5137
5150
  };
5138
5151
  var hashQuote = ({
@@ -5180,7 +5193,6 @@ var hashQuote = ({
5180
5193
  };
5181
5194
 
5182
5195
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
5183
- var import_sdk_config12 = require("@cowprotocol/sdk-config");
5184
5196
  var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5185
5197
  var REFERRAL = "cow";
5186
5198
  var providerType3 = "ReceiverAccountBridgeProvider";
@@ -5249,9 +5261,13 @@ var NearIntentsBridgeProvider = class {
5249
5261
  account,
5250
5262
  amount,
5251
5263
  receiver,
5264
+ bridgeRecipient,
5252
5265
  validFor,
5253
5266
  owner
5254
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
+ }
5255
5271
  const tokens = await this.api.getTokens();
5256
5272
  const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
5257
5273
  const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
@@ -5267,7 +5283,7 @@ var NearIntentsBridgeProvider = class {
5267
5283
  amount: amount.toString(),
5268
5284
  refundTo: owner || account,
5269
5285
  refundType: import_one_click_sdk_typescript2.QuoteRequest.refundType.ORIGIN_CHAIN,
5270
- recipient: receiver || account,
5286
+ recipient: bridgeRecipient || receiver || account,
5271
5287
  recipientType: import_one_click_sdk_typescript2.QuoteRequest.recipientType.DESTINATION_CHAIN,
5272
5288
  deadline: calculateDeadline(validFor || 3600),
5273
5289
  referral: REFERRAL
@@ -5350,9 +5366,6 @@ var NearIntentsBridgeProvider = class {
5350
5366
  if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
5351
5367
  throw new Error("Token not supported");
5352
5368
  }
5353
- if (!(0, import_sdk_config12.isEvmChain)(adaptedInput.chainId) || !(0, import_sdk_config12.isEvmChain)(adaptedOutput.chainId)) {
5354
- throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
5355
- }
5356
5369
  return {
5357
5370
  status: {
5358
5371
  fillTimeInSeconds: quote.timeEstimate,
package/dist/index.mjs CHANGED
@@ -500,6 +500,10 @@ async function getSwapQuote(params) {
500
500
  bridgeSlippageBps: _bridgeSlippageBps,
501
501
  amount,
502
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
503
507
  ...rest
504
508
  } = swapAndBridgeRequest;
505
509
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
@@ -4945,7 +4949,7 @@ var BungeeBridgeProvider = class {
4945
4949
 
4946
4950
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
4947
4951
  import { areAddressesEqual as areAddressesEqual5, getAddressKey as getAddressKey7, getGlobalAdapter as getGlobalAdapter12, setGlobalAdapter as setGlobalAdapter4 } from "@cowprotocol/sdk-common";
4948
- import { ETH_ADDRESS as ETH_ADDRESS3 } from "@cowprotocol/sdk-config";
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";
4949
4953
  import { CowShedSdk as CowShedSdk3 } from "@cowprotocol/sdk-cow-shed";
4950
4954
  import { OrderKind as OrderKind6 } from "@cowprotocol/sdk-order-book";
4951
4955
  import { QuoteRequest } from "@defuse-protocol/one-click-sdk-typescript";
@@ -5007,7 +5011,19 @@ var NearIntentsApi = class {
5007
5011
  };
5008
5012
 
5009
5013
  // src/providers/near-intents/const/index.ts
5010
- 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";
5011
5027
  var NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5012
5028
  var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5013
5029
  arbitrumOne3,
@@ -5018,7 +5034,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5018
5034
  mainnet3,
5019
5035
  optimism3,
5020
5036
  polygon3,
5021
- plasma
5037
+ plasma,
5038
+ bitcoin,
5039
+ solana
5022
5040
  ];
5023
5041
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5024
5042
  arb: arbitrumOne3.id,
@@ -5029,7 +5047,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5029
5047
  gnosis: gnosisChain2.id,
5030
5048
  op: optimism3.id,
5031
5049
  pol: polygon3.id,
5032
- plasma: plasma.id
5050
+ plasma: plasma.id,
5051
+ btc: bitcoin.id,
5052
+ sol: solana.id
5033
5053
  };
5034
5054
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5035
5055
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5047,7 +5067,12 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
5047
5067
  // src/providers/near-intents/util.ts
5048
5068
  import stringify3 from "json-stable-stringify";
5049
5069
  import { areAddressesEqual as areAddressesEqual4, getGlobalAdapter as getGlobalAdapter11 } from "@cowprotocol/sdk-common";
5050
- import { ETH_ADDRESS as ETH_ADDRESS2, isEvmChain } from "@cowprotocol/sdk-config";
5070
+ import {
5071
+ BTC_CURRENCY_ADDRESS,
5072
+ ETH_ADDRESS as ETH_ADDRESS2,
5073
+ SOL_NATIVE_CURRENCY_ADDRESS,
5074
+ isEvmChain
5075
+ } from "@cowprotocol/sdk-config";
5051
5076
  var calculateDeadline = (seconds) => {
5052
5077
  const secs = Number(seconds);
5053
5078
  if (!Number.isFinite(secs)) {
@@ -5060,7 +5085,7 @@ var adaptToken = (token) => {
5060
5085
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5061
5086
  if (!chainId)
5062
5087
  return null;
5063
- 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);
5064
5089
  if (!tokenAddress)
5065
5090
  return null;
5066
5091
  return {
@@ -5080,18 +5105,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
5080
5105
  return acc;
5081
5106
  }, []);
5082
5107
  var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
5083
- if (!isEvmChain(targetTokenChainId)) {
5084
- return void 0;
5085
- }
5086
5108
  return tokens.find((token) => {
5087
5109
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5088
5110
  if (!chainId)
5089
5111
  return false;
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
+ }
5090
5120
  if (areAddressesEqual4(targetTokenAddress, ETH_ADDRESS2)) {
5091
- return chainId === targetTokenChainId && !token.contractAddress;
5121
+ return !token.contractAddress;
5092
5122
  }
5093
5123
  const tokenAddress = token.contractAddress || ETH_ADDRESS2;
5094
- return areAddressesEqual4(tokenAddress, targetTokenAddress) && chainId === targetTokenChainId;
5124
+ return areAddressesEqual4(tokenAddress, targetTokenAddress);
5095
5125
  });
5096
5126
  };
5097
5127
  var hashQuote = ({
@@ -5139,7 +5169,6 @@ var hashQuote = ({
5139
5169
  };
5140
5170
 
5141
5171
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
5142
- import { isEvmChain as isEvmChain2 } from "@cowprotocol/sdk-config";
5143
5172
  var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5144
5173
  var REFERRAL = "cow";
5145
5174
  var providerType3 = "ReceiverAccountBridgeProvider";
@@ -5208,9 +5237,13 @@ var NearIntentsBridgeProvider = class {
5208
5237
  account,
5209
5238
  amount,
5210
5239
  receiver,
5240
+ bridgeRecipient,
5211
5241
  validFor,
5212
5242
  owner
5213
5243
  } = request;
5244
+ if (areAddressesEqual5(sellTokenAddress, BTC_CURRENCY_ADDRESS2) || areAddressesEqual5(sellTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS2)) {
5245
+ throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
5246
+ }
5214
5247
  const tokens = await this.api.getTokens();
5215
5248
  const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
5216
5249
  const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
@@ -5226,7 +5259,7 @@ var NearIntentsBridgeProvider = class {
5226
5259
  amount: amount.toString(),
5227
5260
  refundTo: owner || account,
5228
5261
  refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
5229
- recipient: receiver || account,
5262
+ recipient: bridgeRecipient || receiver || account,
5230
5263
  recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
5231
5264
  deadline: calculateDeadline(validFor || 3600),
5232
5265
  referral: REFERRAL
@@ -5309,9 +5342,6 @@ var NearIntentsBridgeProvider = class {
5309
5342
  if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
5310
5343
  throw new Error("Token not supported");
5311
5344
  }
5312
- if (!isEvmChain2(adaptedInput.chainId) || !isEvmChain2(adaptedOutput.chainId)) {
5313
- throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
5314
- }
5315
5345
  return {
5316
5346
  status: {
5317
5347
  fillTimeInSeconds: quote.timeEstimate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/sdk-bridging",
3
- "version": "3.2.0",
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-common": "0.8.2",
25
- "@cowprotocol/sdk-app-data": "4.6.12",
24
+ "@cowprotocol/sdk-common": "0.9.0",
25
+ "@cowprotocol/sdk-app-data": "4.6.13",
26
26
  "@cowprotocol/sdk-config": "1.1.2",
27
- "@cowprotocol/sdk-cow-shed": "0.3.3",
28
- "@cowprotocol/sdk-contracts-ts": "2.2.0",
29
- "@cowprotocol/sdk-order-book": "2.0.3",
30
- "@cowprotocol/sdk-trading": "1.2.0",
31
- "@cowprotocol/sdk-weiroll": "0.1.26"
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-v6-adapter": "0.4.0",
48
- "@cowprotocol/sdk-ethers-v5-adapter": "0.4.0",
49
- "@cowprotocol/sdk-viem-adapter": "0.3.14",
50
- "@cowprotocol/sdk-order-signing": "0.2.3"
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",