@cowprotocol/sdk-bridging 3.2.0 → 3.3.1

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
@@ -493,6 +493,7 @@ async function getIntermediateSwapResult({
493
493
  appData: {
494
494
  ...advancedSettings?.appData,
495
495
  metadata: {
496
+ ...advancedSettings?.appData?.metadata,
496
497
  hooks,
497
498
  bridging: {
498
499
  providerId: provider.info.dappId,
@@ -557,6 +558,10 @@ async function getSwapQuote(params) {
557
558
  bridgeSlippageBps: _bridgeSlippageBps,
558
559
  amount,
559
560
  swapSlippageBps,
561
+ receiver: _receiver,
562
+ // Strip receiver from CoW API params — bridge providers override it after the quote
563
+ bridgeRecipient: _bridgeRecipient,
564
+ // Not relevant for CoW API
560
565
  ...rest
561
566
  } = swapAndBridgeRequest;
562
567
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
@@ -5059,7 +5064,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5059
5064
  import_sdk_config9.mainnet,
5060
5065
  import_sdk_config9.optimism,
5061
5066
  import_sdk_config9.polygon,
5062
- import_sdk_config9.plasma
5067
+ import_sdk_config9.plasma,
5068
+ import_sdk_config9.bitcoin,
5069
+ import_sdk_config9.solana
5063
5070
  ];
5064
5071
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5065
5072
  arb: import_sdk_config9.arbitrumOne.id,
@@ -5070,7 +5077,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5070
5077
  gnosis: import_sdk_config9.gnosisChain.id,
5071
5078
  op: import_sdk_config9.optimism.id,
5072
5079
  pol: import_sdk_config9.polygon.id,
5073
- plasma: import_sdk_config9.plasma.id
5080
+ plasma: import_sdk_config9.plasma.id,
5081
+ btc: import_sdk_config9.bitcoin.id,
5082
+ sol: import_sdk_config9.solana.id
5074
5083
  };
5075
5084
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5076
5085
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5101,7 +5110,7 @@ var adaptToken = (token) => {
5101
5110
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5102
5111
  if (!chainId)
5103
5112
  return null;
5104
- const tokenAddress = token.contractAddress || import_sdk_config10.ETH_ADDRESS;
5113
+ 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
5114
  if (!tokenAddress)
5106
5115
  return null;
5107
5116
  return {
@@ -5121,18 +5130,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
5121
5130
  return acc;
5122
5131
  }, []);
5123
5132
  var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
5124
- if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
5125
- return void 0;
5126
- }
5127
5133
  return tokens.find((token) => {
5128
5134
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5129
5135
  if (!chainId)
5130
5136
  return false;
5137
+ if (chainId !== targetTokenChainId)
5138
+ return false;
5139
+ if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
5140
+ if (!token.contractAddress) {
5141
+ 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);
5142
+ }
5143
+ return (0, import_sdk_common19.areAddressesEqual)(token.contractAddress, targetTokenAddress);
5144
+ }
5131
5145
  if ((0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.ETH_ADDRESS)) {
5132
- return chainId === targetTokenChainId && !token.contractAddress;
5146
+ return !token.contractAddress;
5133
5147
  }
5134
5148
  const tokenAddress = token.contractAddress || import_sdk_config10.ETH_ADDRESS;
5135
- return (0, import_sdk_common19.areAddressesEqual)(tokenAddress, targetTokenAddress) && chainId === targetTokenChainId;
5149
+ return (0, import_sdk_common19.areAddressesEqual)(tokenAddress, targetTokenAddress);
5136
5150
  });
5137
5151
  };
5138
5152
  var hashQuote = ({
@@ -5180,7 +5194,6 @@ var hashQuote = ({
5180
5194
  };
5181
5195
 
5182
5196
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
5183
- var import_sdk_config12 = require("@cowprotocol/sdk-config");
5184
5197
  var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5185
5198
  var REFERRAL = "cow";
5186
5199
  var providerType3 = "ReceiverAccountBridgeProvider";
@@ -5249,9 +5262,13 @@ var NearIntentsBridgeProvider = class {
5249
5262
  account,
5250
5263
  amount,
5251
5264
  receiver,
5265
+ bridgeRecipient,
5252
5266
  validFor,
5253
5267
  owner
5254
5268
  } = request;
5269
+ 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)) {
5270
+ throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
5271
+ }
5255
5272
  const tokens = await this.api.getTokens();
5256
5273
  const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
5257
5274
  const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
@@ -5267,7 +5284,7 @@ var NearIntentsBridgeProvider = class {
5267
5284
  amount: amount.toString(),
5268
5285
  refundTo: owner || account,
5269
5286
  refundType: import_one_click_sdk_typescript2.QuoteRequest.refundType.ORIGIN_CHAIN,
5270
- recipient: receiver || account,
5287
+ recipient: bridgeRecipient || receiver || account,
5271
5288
  recipientType: import_one_click_sdk_typescript2.QuoteRequest.recipientType.DESTINATION_CHAIN,
5272
5289
  deadline: calculateDeadline(validFor || 3600),
5273
5290
  referral: REFERRAL
@@ -5350,9 +5367,6 @@ var NearIntentsBridgeProvider = class {
5350
5367
  if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
5351
5368
  throw new Error("Token not supported");
5352
5369
  }
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
5370
  return {
5357
5371
  status: {
5358
5372
  fillTimeInSeconds: quote.timeEstimate,
package/dist/index.mjs CHANGED
@@ -436,6 +436,7 @@ async function getIntermediateSwapResult({
436
436
  appData: {
437
437
  ...advancedSettings?.appData,
438
438
  metadata: {
439
+ ...advancedSettings?.appData?.metadata,
439
440
  hooks,
440
441
  bridging: {
441
442
  providerId: provider.info.dappId,
@@ -500,6 +501,10 @@ async function getSwapQuote(params) {
500
501
  bridgeSlippageBps: _bridgeSlippageBps,
501
502
  amount,
502
503
  swapSlippageBps,
504
+ receiver: _receiver,
505
+ // Strip receiver from CoW API params — bridge providers override it after the quote
506
+ bridgeRecipient: _bridgeRecipient,
507
+ // Not relevant for CoW API
503
508
  ...rest
504
509
  } = swapAndBridgeRequest;
505
510
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
@@ -4945,7 +4950,7 @@ var BungeeBridgeProvider = class {
4945
4950
 
4946
4951
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
4947
4952
  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";
4953
+ 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
4954
  import { CowShedSdk as CowShedSdk3 } from "@cowprotocol/sdk-cow-shed";
4950
4955
  import { OrderKind as OrderKind6 } from "@cowprotocol/sdk-order-book";
4951
4956
  import { QuoteRequest } from "@defuse-protocol/one-click-sdk-typescript";
@@ -5007,7 +5012,19 @@ var NearIntentsApi = class {
5007
5012
  };
5008
5013
 
5009
5014
  // 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";
5015
+ import {
5016
+ arbitrumOne as arbitrumOne3,
5017
+ avalanche as avalanche2,
5018
+ base as base3,
5019
+ bnb,
5020
+ gnosisChain as gnosisChain2,
5021
+ mainnet as mainnet3,
5022
+ optimism as optimism3,
5023
+ polygon as polygon3,
5024
+ plasma,
5025
+ bitcoin,
5026
+ solana
5027
+ } from "@cowprotocol/sdk-config";
5011
5028
  var NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5012
5029
  var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5013
5030
  arbitrumOne3,
@@ -5018,7 +5035,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
5018
5035
  mainnet3,
5019
5036
  optimism3,
5020
5037
  polygon3,
5021
- plasma
5038
+ plasma,
5039
+ bitcoin,
5040
+ solana
5022
5041
  ];
5023
5042
  var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5024
5043
  arb: arbitrumOne3.id,
@@ -5029,7 +5048,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
5029
5048
  gnosis: gnosisChain2.id,
5030
5049
  op: optimism3.id,
5031
5050
  pol: polygon3.id,
5032
- plasma: plasma.id
5051
+ plasma: plasma.id,
5052
+ btc: bitcoin.id,
5053
+ sol: solana.id
5033
5054
  };
5034
5055
  var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
5035
5056
  KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
@@ -5047,7 +5068,12 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
5047
5068
  // src/providers/near-intents/util.ts
5048
5069
  import stringify3 from "json-stable-stringify";
5049
5070
  import { areAddressesEqual as areAddressesEqual4, getGlobalAdapter as getGlobalAdapter11 } from "@cowprotocol/sdk-common";
5050
- import { ETH_ADDRESS as ETH_ADDRESS2, isEvmChain } from "@cowprotocol/sdk-config";
5071
+ import {
5072
+ BTC_CURRENCY_ADDRESS,
5073
+ ETH_ADDRESS as ETH_ADDRESS2,
5074
+ SOL_NATIVE_CURRENCY_ADDRESS,
5075
+ isEvmChain
5076
+ } from "@cowprotocol/sdk-config";
5051
5077
  var calculateDeadline = (seconds) => {
5052
5078
  const secs = Number(seconds);
5053
5079
  if (!Number.isFinite(secs)) {
@@ -5060,7 +5086,7 @@ var adaptToken = (token) => {
5060
5086
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5061
5087
  if (!chainId)
5062
5088
  return null;
5063
- const tokenAddress = token.contractAddress || ETH_ADDRESS2;
5089
+ 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
5090
  if (!tokenAddress)
5065
5091
  return null;
5066
5092
  return {
@@ -5080,18 +5106,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
5080
5106
  return acc;
5081
5107
  }, []);
5082
5108
  var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
5083
- if (!isEvmChain(targetTokenChainId)) {
5084
- return void 0;
5085
- }
5086
5109
  return tokens.find((token) => {
5087
5110
  const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
5088
5111
  if (!chainId)
5089
5112
  return false;
5113
+ if (chainId !== targetTokenChainId)
5114
+ return false;
5115
+ if (!isEvmChain(targetTokenChainId)) {
5116
+ if (!token.contractAddress) {
5117
+ return areAddressesEqual4(targetTokenAddress, BTC_CURRENCY_ADDRESS) || areAddressesEqual4(targetTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS);
5118
+ }
5119
+ return areAddressesEqual4(token.contractAddress, targetTokenAddress);
5120
+ }
5090
5121
  if (areAddressesEqual4(targetTokenAddress, ETH_ADDRESS2)) {
5091
- return chainId === targetTokenChainId && !token.contractAddress;
5122
+ return !token.contractAddress;
5092
5123
  }
5093
5124
  const tokenAddress = token.contractAddress || ETH_ADDRESS2;
5094
- return areAddressesEqual4(tokenAddress, targetTokenAddress) && chainId === targetTokenChainId;
5125
+ return areAddressesEqual4(tokenAddress, targetTokenAddress);
5095
5126
  });
5096
5127
  };
5097
5128
  var hashQuote = ({
@@ -5139,7 +5170,6 @@ var hashQuote = ({
5139
5170
  };
5140
5171
 
5141
5172
  // src/providers/near-intents/NearIntentsBridgeProvider.ts
5142
- import { isEvmChain as isEvmChain2 } from "@cowprotocol/sdk-config";
5143
5173
  var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
5144
5174
  var REFERRAL = "cow";
5145
5175
  var providerType3 = "ReceiverAccountBridgeProvider";
@@ -5208,9 +5238,13 @@ var NearIntentsBridgeProvider = class {
5208
5238
  account,
5209
5239
  amount,
5210
5240
  receiver,
5241
+ bridgeRecipient,
5211
5242
  validFor,
5212
5243
  owner
5213
5244
  } = request;
5245
+ if (areAddressesEqual5(sellTokenAddress, BTC_CURRENCY_ADDRESS2) || areAddressesEqual5(sellTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS2)) {
5246
+ throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
5247
+ }
5214
5248
  const tokens = await this.api.getTokens();
5215
5249
  const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
5216
5250
  const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
@@ -5226,7 +5260,7 @@ var NearIntentsBridgeProvider = class {
5226
5260
  amount: amount.toString(),
5227
5261
  refundTo: owner || account,
5228
5262
  refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
5229
- recipient: receiver || account,
5263
+ recipient: bridgeRecipient || receiver || account,
5230
5264
  recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
5231
5265
  deadline: calculateDeadline(validFor || 3600),
5232
5266
  referral: REFERRAL
@@ -5309,9 +5343,6 @@ var NearIntentsBridgeProvider = class {
5309
5343
  if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
5310
5344
  throw new Error("Token not supported");
5311
5345
  }
5312
- if (!isEvmChain2(adaptedInput.chainId) || !isEvmChain2(adaptedOutput.chainId)) {
5313
- throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
5314
- }
5315
5346
  return {
5316
5347
  status: {
5317
5348
  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.1",
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",
26
24
  "@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"
25
+ "@cowprotocol/sdk-common": "0.9.0",
26
+ "@cowprotocol/sdk-contracts-ts": "2.3.0",
27
+ "@cowprotocol/sdk-app-data": "4.6.13",
28
+ "@cowprotocol/sdk-cow-shed": "0.3.4",
29
+ "@cowprotocol/sdk-order-book": "2.0.4",
30
+ "@cowprotocol/sdk-weiroll": "0.1.27",
31
+ "@cowprotocol/sdk-trading": "1.2.1"
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",