@cowprotocol/sdk-bridging 0.7.0 → 0.8.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
@@ -37,6 +37,14 @@ type QuoteBridgeRequest = {
37
37
  } & WithSellToken & WithBuyToken & WithQuoter & WithTrader & TradeOptionalParameters;
38
38
  type QuoteBridgeRequestWithoutAmount = Omit<QuoteBridgeRequest, 'amount'>;
39
39
  interface BridgeQuoteResult {
40
+ /**
41
+ * Unique ID of a quote
42
+ */
43
+ id?: string;
44
+ /**
45
+ * Provider who implement ReceiverAccountBridgeProvider must return a signature of a quote than will be used to verify the quote deposit address validity
46
+ */
47
+ signature?: string;
40
48
  /**
41
49
  * Whether the quote is a sell or buy order.
42
50
  */
@@ -1280,7 +1288,10 @@ declare class NearIntentsBridgeProvider implements ReceiverAccountBridgeProvider
1280
1288
  getStatus(bridgingId: string, _originChainId: SupportedChainId): Promise<BridgeStatusResult>;
1281
1289
  getCancelBridgingTx(_bridgingId: string): Promise<EvmCall>;
1282
1290
  getRefundBridgingTx(_bridgingId: string): Promise<EvmCall>;
1283
- recoverDepositAddress({ quote, quoteRequest, timestamp }: QuoteResponse): Promise<Address$1 | null>;
1291
+ recoverDepositAddress({ quote, quoteRequest, timestamp, }: QuoteResponse): Promise<{
1292
+ address: Address$1;
1293
+ quoteHash: string;
1294
+ } | null>;
1284
1295
  }
1285
1296
 
1286
1297
  export { AcrossBridgeProvider, type AcrossBridgeProviderOptions, type AcrossQuoteResult, type BestQuoteProgressCallback, type BestQuoteProviderContext, type BridgeCallDetails, type BridgeCosts, type BridgeDeposit, type BridgeHook, BridgeOrderParsingError, type BridgeProvider, BridgeProviderError, type BridgeProviderInfo, BridgeProviderQuoteError, type BridgeProviderType, type BridgeQuoteAmountsAndCosts, type BridgeQuoteAndPost, BridgeQuoteErrors, type BridgeQuoteResult, type BridgeQuoteResults, BridgeStatus, type BridgeStatusResult, type BridgingDepositParams, BridgingSdk, BungeeBridgeProvider, type BungeeBridgeProviderOptions, type BungeeQuoteResult, type BuyTokensParams, COW_SHED_PROXY_CREATION_GAS, type CrossChainOrder, type CrossChainQuoteAndPost, DEFAULT_EXTRA_GAS_FOR_HOOK_ESTIMATION, DEFAULT_EXTRA_GAS_PROXY_CREATION, DEFAULT_GAS_COST_FOR_HOOK_ESTIMATION, type DefaultBridgeProvider, type GetProviderBuyTokens, HOOK_DAPP_BRIDGE_PROVIDER_PREFIX, type HookBridgeProvider, type MultiQuoteOptions, type MultiQuoteProgressCallback, type MultiQuoteRequest, type MultiQuoteResult, NearIntentsBridgeProvider, type NearIntentsBridgeProviderOptions, type NearIntentsQuoteResult, type ProviderQuoteContext, type QuoteBridgeRequest, type QuoteBridgeRequestWithoutAmount, RAW_PROVIDERS_FILES_PATH, type ReceiverAccountBridgeProvider, assertIsBridgeQuoteAndPost, assertIsQuoteAndPost, getCrossChainOrder, getPostHooks, isAppDoc, isBridgeQuoteAndPost, isHookBridgeProvider, isQuoteAndPost, isReceiverAccountBridgeProvider };
package/dist/index.d.ts CHANGED
@@ -37,6 +37,14 @@ type QuoteBridgeRequest = {
37
37
  } & WithSellToken & WithBuyToken & WithQuoter & WithTrader & TradeOptionalParameters;
38
38
  type QuoteBridgeRequestWithoutAmount = Omit<QuoteBridgeRequest, 'amount'>;
39
39
  interface BridgeQuoteResult {
40
+ /**
41
+ * Unique ID of a quote
42
+ */
43
+ id?: string;
44
+ /**
45
+ * Provider who implement ReceiverAccountBridgeProvider must return a signature of a quote than will be used to verify the quote deposit address validity
46
+ */
47
+ signature?: string;
40
48
  /**
41
49
  * Whether the quote is a sell or buy order.
42
50
  */
@@ -1280,7 +1288,10 @@ declare class NearIntentsBridgeProvider implements ReceiverAccountBridgeProvider
1280
1288
  getStatus(bridgingId: string, _originChainId: SupportedChainId): Promise<BridgeStatusResult>;
1281
1289
  getCancelBridgingTx(_bridgingId: string): Promise<EvmCall>;
1282
1290
  getRefundBridgingTx(_bridgingId: string): Promise<EvmCall>;
1283
- recoverDepositAddress({ quote, quoteRequest, timestamp }: QuoteResponse): Promise<Address$1 | null>;
1291
+ recoverDepositAddress({ quote, quoteRequest, timestamp, }: QuoteResponse): Promise<{
1292
+ address: Address$1;
1293
+ quoteHash: string;
1294
+ } | null>;
1284
1295
  }
1285
1296
 
1286
1297
  export { AcrossBridgeProvider, type AcrossBridgeProviderOptions, type AcrossQuoteResult, type BestQuoteProgressCallback, type BestQuoteProviderContext, type BridgeCallDetails, type BridgeCosts, type BridgeDeposit, type BridgeHook, BridgeOrderParsingError, type BridgeProvider, BridgeProviderError, type BridgeProviderInfo, BridgeProviderQuoteError, type BridgeProviderType, type BridgeQuoteAmountsAndCosts, type BridgeQuoteAndPost, BridgeQuoteErrors, type BridgeQuoteResult, type BridgeQuoteResults, BridgeStatus, type BridgeStatusResult, type BridgingDepositParams, BridgingSdk, BungeeBridgeProvider, type BungeeBridgeProviderOptions, type BungeeQuoteResult, type BuyTokensParams, COW_SHED_PROXY_CREATION_GAS, type CrossChainOrder, type CrossChainQuoteAndPost, DEFAULT_EXTRA_GAS_FOR_HOOK_ESTIMATION, DEFAULT_EXTRA_GAS_PROXY_CREATION, DEFAULT_GAS_COST_FOR_HOOK_ESTIMATION, type DefaultBridgeProvider, type GetProviderBuyTokens, HOOK_DAPP_BRIDGE_PROVIDER_PREFIX, type HookBridgeProvider, type MultiQuoteOptions, type MultiQuoteProgressCallback, type MultiQuoteRequest, type MultiQuoteResult, NearIntentsBridgeProvider, type NearIntentsBridgeProviderOptions, type NearIntentsQuoteResult, type ProviderQuoteContext, type QuoteBridgeRequest, type QuoteBridgeRequestWithoutAmount, RAW_PROVIDERS_FILES_PATH, type ReceiverAccountBridgeProvider, assertIsBridgeQuoteAndPost, assertIsQuoteAndPost, getCrossChainOrder, getPostHooks, isAppDoc, isBridgeQuoteAndPost, isHookBridgeProvider, isQuoteAndPost, isReceiverAccountBridgeProvider };
package/dist/index.js CHANGED
@@ -507,6 +507,11 @@ async function getQuoteWithReceiverAccountBridge(provider, params) {
507
507
  });
508
508
  (0, import_sdk_common4.log)(`Bridge receiver override: ${bridgeReceiverOverride}`);
509
509
  swapResult.tradeParameters.receiver = bridgeReceiverOverride;
510
+ swapResult.appDataInfo = await (0, import_sdk_trading.mergeAppDataDoc)(swapResult.appDataInfo.doc, {
511
+ metadata: {
512
+ bridging: overrideAppDataWithBridgingQuoteDetails(swapResult.appDataInfo.doc.metadata.bridging, bridgeResult)
513
+ }
514
+ });
510
515
  return {
511
516
  bridgeResult,
512
517
  swapResult: {
@@ -622,6 +627,8 @@ async function getAccountBridgeResult(provider, context) {
622
627
  const bridgingQuote = await provider.getQuote(bridgeRequest);
623
628
  const bridgeReceiverOverride = await provider.getBridgeReceiverOverride(bridgeRequest, bridgingQuote);
624
629
  const bridgeResult = {
630
+ id: bridgingQuote.id,
631
+ signature: bridgingQuote.signature,
625
632
  providerInfo: provider.info,
626
633
  tradeParameters: bridgeRequest,
627
634
  // Just the bridge (not the swap & bridge)
@@ -653,6 +660,7 @@ async function getHookBridgeResult(provider, context) {
653
660
  });
654
661
  const appDataInfo = await (0, import_sdk_trading.mergeAppDataDoc)(swapAppData.doc, {
655
662
  metadata: {
663
+ bridging: overrideAppDataWithBridgingQuoteDetails(swapResult.appDataInfo.doc.metadata.bridging, bridgingQuote),
656
664
  hooks: {
657
665
  pre: swapResultHooks?.pre,
658
666
  post: [...postHooks, ...[bridgeHook.postHook]]
@@ -676,6 +684,15 @@ async function getHookBridgeResult(provider, context) {
676
684
  };
677
685
  return { bridgeResult, bridgeHook, appDataInfo };
678
686
  }
687
+ function overrideAppDataWithBridgingQuoteDetails(bridgingMetaData, quote) {
688
+ if (!bridgingMetaData)
689
+ return bridgingMetaData;
690
+ return {
691
+ ...bridgingMetaData,
692
+ ...quote.id ? { quoteId: quote.id } : void 0,
693
+ ...quote.signature ? { quoteSignature: quote.signature } : void 0
694
+ };
695
+ }
679
696
 
680
697
  // src/BridgingSdk/strategies/QuoteStrategy.ts
681
698
  var QuoteStrategy = class {
@@ -3735,6 +3752,7 @@ function toBridgeQuoteResult2(request, slippageBps, bungeeQuoteWithBuildTx) {
3735
3752
  const { kind } = request;
3736
3753
  const { bungeeQuote, buildTx } = bungeeQuoteWithBuildTx;
3737
3754
  return {
3755
+ id: bungeeQuoteWithBuildTx.bungeeQuote.route.quoteId.toString(),
3738
3756
  isSell: kind === import_sdk_order_book5.OrderKind.SELL,
3739
3757
  amountsAndCosts: toAmountsAndCosts2(request, slippageBps, bungeeQuote),
3740
3758
  quoteTimestamp: Number(bungeeQuote.quoteTimestamp),
@@ -5035,7 +5053,7 @@ var NearIntentsBridgeProvider = class {
5035
5053
  throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
5036
5054
  const quoteResponse = await this.api.getQuote({
5037
5055
  dry: false,
5038
- swapType: import_one_click_sdk_typescript2.QuoteRequest.swapType.EXACT_INPUT,
5056
+ swapType: import_one_click_sdk_typescript2.QuoteRequest.swapType.FLEX_INPUT,
5039
5057
  slippageTolerance: request.slippageBps ?? 100,
5040
5058
  originAsset: sellToken.assetId,
5041
5059
  depositType: import_one_click_sdk_typescript2.QuoteRequest.depositType.ORIGIN_CHAIN,
@@ -5049,7 +5067,7 @@ var NearIntentsBridgeProvider = class {
5049
5067
  referral: REFERRAL
5050
5068
  });
5051
5069
  const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse);
5052
- if (recoveredDepositAddress?.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) {
5070
+ if (recoveredDepositAddress?.address.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) {
5053
5071
  throw new BridgeProviderQuoteError("QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS" /* QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS */);
5054
5072
  }
5055
5073
  const { quote, timestamp: isoDate } = quoteResponse;
@@ -5060,6 +5078,8 @@ var NearIntentsBridgeProvider = class {
5060
5078
  const feeAmountInSellCurrency = Math.trunc(Number(quote.amountOut) * slippage);
5061
5079
  const bridgeFee = Math.trunc(Number(quote.amountIn) * slippage);
5062
5080
  return {
5081
+ id: recoveredDepositAddress.quoteHash,
5082
+ signature: quoteResponse.signature,
5063
5083
  isSell: request.kind === import_sdk_order_book7.OrderKind.SELL,
5064
5084
  depositAddress: quote.depositAddress,
5065
5085
  quoteTimestamp: new Date(isoDate).getTime(),
@@ -5167,7 +5187,11 @@ var NearIntentsBridgeProvider = class {
5167
5187
  getRefundBridgingTx(_bridgingId) {
5168
5188
  throw new Error("Not implemented");
5169
5189
  }
5170
- async recoverDepositAddress({ quote, quoteRequest, timestamp }) {
5190
+ async recoverDepositAddress({
5191
+ quote,
5192
+ quoteRequest,
5193
+ timestamp
5194
+ }) {
5171
5195
  try {
5172
5196
  if (!quote?.depositAddress)
5173
5197
  return null;
@@ -5183,7 +5207,10 @@ var NearIntentsBridgeProvider = class {
5183
5207
  const payload = utils.hexConcat([depositAddr, quoteHash]);
5184
5208
  const messageBytes = utils.hexConcat([ATTESTATION_PREFIX_CONST, ATTESTION_VERSION_BYTE, payload]);
5185
5209
  const hash = utils.keccak256(messageBytes);
5186
- return utils.recoverAddress(hash, signature);
5210
+ return {
5211
+ address: await utils.recoverAddress(hash, signature),
5212
+ quoteHash
5213
+ };
5187
5214
  } catch {
5188
5215
  return null;
5189
5216
  }
package/dist/index.mjs CHANGED
@@ -452,6 +452,11 @@ async function getQuoteWithReceiverAccountBridge(provider, params) {
452
452
  });
453
453
  log3(`Bridge receiver override: ${bridgeReceiverOverride}`);
454
454
  swapResult.tradeParameters.receiver = bridgeReceiverOverride;
455
+ swapResult.appDataInfo = await mergeAppDataDoc(swapResult.appDataInfo.doc, {
456
+ metadata: {
457
+ bridging: overrideAppDataWithBridgingQuoteDetails(swapResult.appDataInfo.doc.metadata.bridging, bridgeResult)
458
+ }
459
+ });
455
460
  return {
456
461
  bridgeResult,
457
462
  swapResult: {
@@ -567,6 +572,8 @@ async function getAccountBridgeResult(provider, context) {
567
572
  const bridgingQuote = await provider.getQuote(bridgeRequest);
568
573
  const bridgeReceiverOverride = await provider.getBridgeReceiverOverride(bridgeRequest, bridgingQuote);
569
574
  const bridgeResult = {
575
+ id: bridgingQuote.id,
576
+ signature: bridgingQuote.signature,
570
577
  providerInfo: provider.info,
571
578
  tradeParameters: bridgeRequest,
572
579
  // Just the bridge (not the swap & bridge)
@@ -598,6 +605,7 @@ async function getHookBridgeResult(provider, context) {
598
605
  });
599
606
  const appDataInfo = await mergeAppDataDoc(swapAppData.doc, {
600
607
  metadata: {
608
+ bridging: overrideAppDataWithBridgingQuoteDetails(swapResult.appDataInfo.doc.metadata.bridging, bridgingQuote),
601
609
  hooks: {
602
610
  pre: swapResultHooks?.pre,
603
611
  post: [...postHooks, ...[bridgeHook.postHook]]
@@ -621,6 +629,15 @@ async function getHookBridgeResult(provider, context) {
621
629
  };
622
630
  return { bridgeResult, bridgeHook, appDataInfo };
623
631
  }
632
+ function overrideAppDataWithBridgingQuoteDetails(bridgingMetaData, quote) {
633
+ if (!bridgingMetaData)
634
+ return bridgingMetaData;
635
+ return {
636
+ ...bridgingMetaData,
637
+ ...quote.id ? { quoteId: quote.id } : void 0,
638
+ ...quote.signature ? { quoteSignature: quote.signature } : void 0
639
+ };
640
+ }
624
641
 
625
642
  // src/BridgingSdk/strategies/QuoteStrategy.ts
626
643
  var QuoteStrategy = class {
@@ -3686,6 +3703,7 @@ function toBridgeQuoteResult2(request, slippageBps, bungeeQuoteWithBuildTx) {
3686
3703
  const { kind } = request;
3687
3704
  const { bungeeQuote, buildTx } = bungeeQuoteWithBuildTx;
3688
3705
  return {
3706
+ id: bungeeQuoteWithBuildTx.bungeeQuote.route.quoteId.toString(),
3689
3707
  isSell: kind === OrderKind4.SELL,
3690
3708
  amountsAndCosts: toAmountsAndCosts2(request, slippageBps, bungeeQuote),
3691
3709
  quoteTimestamp: Number(bungeeQuote.quoteTimestamp),
@@ -4995,7 +5013,7 @@ var NearIntentsBridgeProvider = class {
4995
5013
  throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
4996
5014
  const quoteResponse = await this.api.getQuote({
4997
5015
  dry: false,
4998
- swapType: QuoteRequest.swapType.EXACT_INPUT,
5016
+ swapType: QuoteRequest.swapType.FLEX_INPUT,
4999
5017
  slippageTolerance: request.slippageBps ?? 100,
5000
5018
  originAsset: sellToken.assetId,
5001
5019
  depositType: QuoteRequest.depositType.ORIGIN_CHAIN,
@@ -5009,7 +5027,7 @@ var NearIntentsBridgeProvider = class {
5009
5027
  referral: REFERRAL
5010
5028
  });
5011
5029
  const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse);
5012
- if (recoveredDepositAddress?.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) {
5030
+ if (recoveredDepositAddress?.address.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) {
5013
5031
  throw new BridgeProviderQuoteError("QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS" /* QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS */);
5014
5032
  }
5015
5033
  const { quote, timestamp: isoDate } = quoteResponse;
@@ -5020,6 +5038,8 @@ var NearIntentsBridgeProvider = class {
5020
5038
  const feeAmountInSellCurrency = Math.trunc(Number(quote.amountOut) * slippage);
5021
5039
  const bridgeFee = Math.trunc(Number(quote.amountIn) * slippage);
5022
5040
  return {
5041
+ id: recoveredDepositAddress.quoteHash,
5042
+ signature: quoteResponse.signature,
5023
5043
  isSell: request.kind === OrderKind6.SELL,
5024
5044
  depositAddress: quote.depositAddress,
5025
5045
  quoteTimestamp: new Date(isoDate).getTime(),
@@ -5127,7 +5147,11 @@ var NearIntentsBridgeProvider = class {
5127
5147
  getRefundBridgingTx(_bridgingId) {
5128
5148
  throw new Error("Not implemented");
5129
5149
  }
5130
- async recoverDepositAddress({ quote, quoteRequest, timestamp }) {
5150
+ async recoverDepositAddress({
5151
+ quote,
5152
+ quoteRequest,
5153
+ timestamp
5154
+ }) {
5131
5155
  try {
5132
5156
  if (!quote?.depositAddress)
5133
5157
  return null;
@@ -5143,7 +5167,10 @@ var NearIntentsBridgeProvider = class {
5143
5167
  const payload = utils.hexConcat([depositAddr, quoteHash]);
5144
5168
  const messageBytes = utils.hexConcat([ATTESTATION_PREFIX_CONST, ATTESTION_VERSION_BYTE, payload]);
5145
5169
  const hash = utils.keccak256(messageBytes);
5146
- return utils.recoverAddress(hash, signature);
5170
+ return {
5171
+ address: await utils.recoverAddress(hash, signature),
5172
+ quoteHash
5173
+ };
5147
5174
  } catch {
5148
5175
  return null;
5149
5176
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/sdk-bridging",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "description": "Bridging for CoW Protocol",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -16,13 +16,13 @@
16
16
  "dependencies": {
17
17
  "@defuse-protocol/one-click-sdk-typescript": "0.1.1-0.2",
18
18
  "json-stable-stringify": "^1.3.0",
19
- "@cowprotocol/sdk-app-data": "4.2.0",
20
19
  "@cowprotocol/sdk-common": "0.4.0",
20
+ "@cowprotocol/sdk-app-data": "4.3.0",
21
21
  "@cowprotocol/sdk-config": "0.4.0",
22
- "@cowprotocol/sdk-contracts-ts": "0.6.0",
23
- "@cowprotocol/sdk-cow-shed": "0.2.1",
22
+ "@cowprotocol/sdk-cow-shed": "0.2.2",
23
+ "@cowprotocol/sdk-contracts-ts": "0.7.0",
24
24
  "@cowprotocol/sdk-order-book": "0.3.0",
25
- "@cowprotocol/sdk-trading": "0.5.0",
25
+ "@cowprotocol/sdk-trading": "0.5.1",
26
26
  "@cowprotocol/sdk-weiroll": "0.1.6"
27
27
  },
28
28
  "devDependencies": {
@@ -38,11 +38,11 @@
38
38
  "tsup": "^7.2.0",
39
39
  "typescript": "^5.2.2",
40
40
  "viem": "^2.28.4",
41
+ "@cow-sdk/typescript-config": "0.0.0-beta.0",
41
42
  "@cowprotocol/sdk-ethers-v5-adapter": "0.3.0",
42
43
  "@cowprotocol/sdk-ethers-v6-adapter": "0.3.0",
43
- "@cow-sdk/typescript-config": "0.0.0-beta.0",
44
- "@cowprotocol/sdk-order-signing": "0.1.12",
45
- "@cowprotocol/sdk-viem-adapter": "0.3.0"
44
+ "@cowprotocol/sdk-viem-adapter": "0.3.0",
45
+ "@cowprotocol/sdk-order-signing": "0.1.13"
46
46
  },
47
47
  "scripts": {
48
48
  "build": "tsup src/index.ts --format esm,cjs --dts",