@cowprotocol/sdk-bridging 0.4.5 → 0.4.7-rc.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.mjs CHANGED
@@ -75,6 +75,12 @@ function getPostHooks(fullAppData) {
75
75
  function isAppDoc(appData) {
76
76
  return typeof appData === "object" && appData !== null && "version" in appData && "metadata" in appData;
77
77
  }
78
+ function isHookBridgeProvider(provider) {
79
+ return provider.type === "HookBridgeProvider";
80
+ }
81
+ function isReceiverAccountBridgeProvider(provider) {
82
+ return provider.type === "ReceiverAccountBridgeProvider";
83
+ }
78
84
 
79
85
  // src/const.ts
80
86
  import { RAW_FILES_PATH } from "@cowprotocol/sdk-config";
@@ -149,7 +155,7 @@ async function getCrossChainOrder(params) {
149
155
 
150
156
  // src/BridgingSdk/BridgingSdk.ts
151
157
  import { TradingSdk } from "@cowprotocol/sdk-trading";
152
- import { OrderBookApi } from "@cowprotocol/sdk-order-book";
158
+ import { OrderBookApi as OrderBookApi2 } from "@cowprotocol/sdk-order-book";
153
159
  import { ALL_SUPPORTED_CHAINS } from "@cowprotocol/sdk-config";
154
160
  import { enableLogging, setGlobalAdapter, TTLCache as TTLCache2 } from "@cowprotocol/sdk-common";
155
161
 
@@ -184,14 +190,14 @@ function getQuoteWithoutBridge(params) {
184
190
  import {
185
191
  getTradeParametersAfterQuote,
186
192
  mergeAppDataDoc,
187
- postSwapOrderFromQuote
193
+ postSwapOrderFromQuote as postSwapOrderFromQuoteTrading
188
194
  } from "@cowprotocol/sdk-trading";
189
- import { getGlobalAdapter as getGlobalAdapter2, jsonWithBigintReplacer as jsonWithBigintReplacer2, log as log2 } from "@cowprotocol/sdk-common";
195
+ import { getGlobalAdapter as getGlobalAdapter3, log as log3 } from "@cowprotocol/sdk-common";
190
196
  import { OrderKind } from "@cowprotocol/sdk-order-book";
191
197
 
192
198
  // src/BridgingSdk/getBridgeSignedHook.ts
193
199
  import { getGlobalAdapter } from "@cowprotocol/sdk-common";
194
- async function getBridgeSignedHook(bridgeRequest, { provider, signer, hookGasLimit, swapResult, validToOverride }) {
200
+ async function getBridgeSignedHook(provider, bridgeRequest, { signer, hookGasLimit, swapResult, validToOverride }) {
195
201
  const adapter = getGlobalAdapter();
196
202
  const bridgingQuote = await provider.getQuote(bridgeRequest);
197
203
  const unsignedBridgeCall = await provider.getUnsignedBridgeCall(bridgeRequest, bridgingQuote);
@@ -225,9 +231,14 @@ function getHookMockForCostEstimation(gasLimit) {
225
231
  };
226
232
  }
227
233
 
228
- // src/BridgingSdk/getQuoteWithBridge.ts
229
- async function getQuoteWithBridge(params) {
230
- const { provider, swapAndBridgeRequest, advancedSettings, tradingSdk, bridgeHookSigner } = params;
234
+ // src/BridgingSdk/getIntermediateSwapResult.ts
235
+ import { getGlobalAdapter as getGlobalAdapter2, jsonWithBigintReplacer as jsonWithBigintReplacer2, log as log2 } from "@cowprotocol/sdk-common";
236
+ async function getIntermediateSwapResult({
237
+ provider,
238
+ params,
239
+ getBridgeHook
240
+ }) {
241
+ const { swapAndBridgeRequest, advancedSettings, tradingSdk } = params;
231
242
  const {
232
243
  kind,
233
244
  sellTokenChainId,
@@ -235,25 +246,101 @@ async function getQuoteWithBridge(params) {
235
246
  buyTokenChainId,
236
247
  buyTokenAddress,
237
248
  amount,
238
- signer: signerLike,
239
- ...rest
249
+ signer: signerLike
240
250
  } = swapAndBridgeRequest;
241
251
  const adapter = getGlobalAdapter2();
242
252
  const signer = signerLike ? adapter.createSigner(signerLike) : adapter.signer;
243
- if (kind !== OrderKind.SELL) {
244
- throw new Error("Bridging only support SELL orders");
245
- }
246
253
  log2(
247
254
  `Cross-chain ${kind} ${amount} ${sellTokenAddress} (source chain ${sellTokenChainId}) for ${buyTokenAddress} (target chain ${buyTokenChainId})`
248
255
  );
249
- const bridgeRequestWithoutAmount = await getBaseBridgeQuoteRequest({
250
- swapAndBridgeRequest,
256
+ const intermediateTokens = await getIntermediateTokens({
251
257
  provider,
258
+ quoteBridgeRequest: swapAndBridgeRequest,
252
259
  intermediateTokensCache: params.intermediateTokensCache
253
260
  });
254
- const hookEstimatedGasLimit = await provider.getGasLimitEstimationForHook(bridgeRequestWithoutAmount);
255
- const mockedHook = getHookMockForCostEstimation(hookEstimatedGasLimit);
256
- log2(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
261
+ const intermediateToken = intermediateTokens[0];
262
+ log2(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
263
+ if (!intermediateToken) {
264
+ throw new BridgeProviderQuoteError("NO_INTERMEDIATE_TOKENS" /* NO_INTERMEDIATE_TOKENS */, { intermediateTokens });
265
+ }
266
+ const bridgeRequestWithoutAmount = {
267
+ ...swapAndBridgeRequest,
268
+ sellTokenAddress: intermediateToken.address,
269
+ sellTokenDecimals: intermediateToken.decimals
270
+ };
271
+ const { sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
272
+ const bridgeHook = getBridgeHook ? await getBridgeHook(bridgeRequestWithoutAmount) : void 0;
273
+ const advancedSettingsHooks = advancedSettings?.appData?.metadata?.hooks;
274
+ const hooks = bridgeHook ? {
275
+ pre: advancedSettingsHooks?.pre,
276
+ post: [...advancedSettingsHooks?.post || [], bridgeHook]
277
+ } : advancedSettingsHooks;
278
+ const finalAdvancedSettings = {
279
+ ...advancedSettings,
280
+ appData: {
281
+ ...advancedSettings?.appData,
282
+ metadata: {
283
+ hooks,
284
+ bridging: {
285
+ destinationChainId: buyTokenChainId.toString(),
286
+ destinationTokenAddress: buyTokenAddress
287
+ }
288
+ }
289
+ }
290
+ };
291
+ const { swapResult, orderBookApi } = await getSwapQuote({
292
+ swapAndBridgeRequest,
293
+ bridgeRequestWithoutAmount,
294
+ tradingSdk,
295
+ advancedSettings: finalAdvancedSettings,
296
+ signer
297
+ });
298
+ const intermediateTokenAmount = swapResult.amountsAndCosts.afterSlippage.buyAmount;
299
+ log2(
300
+ `Expected to receive ${intermediateTokenAmount} of the intermediate token (${(intermediateTokenAmount / 10n ** BigInt(intermediaryTokenDecimals)).toString()} formatted)`
301
+ );
302
+ return {
303
+ swapAndBridgeRequest,
304
+ signer,
305
+ bridgeRequestWithoutAmount,
306
+ intermediateTokenAmount,
307
+ intermediaryTokenDecimals,
308
+ swapResult,
309
+ orderBookApi
310
+ };
311
+ }
312
+ async function getIntermediateTokens(params) {
313
+ const { provider, quoteBridgeRequest, intermediateTokensCache } = params;
314
+ let intermediateTokens = [];
315
+ const cacheKey = getCacheKey({
316
+ id: provider.info.dappId,
317
+ buyChainId: quoteBridgeRequest.buyTokenChainId.toString(),
318
+ sellChainId: quoteBridgeRequest.sellTokenChainId.toString(),
319
+ tokenAddress: quoteBridgeRequest.buyTokenAddress
320
+ });
321
+ const cached = intermediateTokensCache?.get(cacheKey);
322
+ if (cached) {
323
+ intermediateTokens = cached;
324
+ } else {
325
+ intermediateTokens = await provider.getIntermediateTokens(quoteBridgeRequest);
326
+ intermediateTokensCache?.set(cacheKey, intermediateTokens);
327
+ }
328
+ if (intermediateTokens.length === 0) {
329
+ throw new BridgeProviderQuoteError("NO_INTERMEDIATE_TOKENS" /* NO_INTERMEDIATE_TOKENS */);
330
+ }
331
+ return intermediateTokens;
332
+ }
333
+ async function getSwapQuote(params) {
334
+ const { swapAndBridgeRequest, bridgeRequestWithoutAmount, tradingSdk, advancedSettings, signer } = params;
335
+ const {
336
+ kind,
337
+ sellTokenChainId,
338
+ sellTokenAddress,
339
+ buyTokenChainId: _buyTokenChainId,
340
+ buyTokenAddress: _buyTokenAddress,
341
+ amount,
342
+ ...rest
343
+ } = swapAndBridgeRequest;
257
344
  const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
258
345
  const swapParams = {
259
346
  ...rest,
@@ -272,52 +359,149 @@ async function getQuoteWithBridge(params) {
272
359
  jsonWithBigintReplacer2
273
360
  )}`
274
361
  );
275
- const advancedSettingsHooks = advancedSettings?.appData?.metadata?.hooks;
276
- const { result: swapResult, orderBookApi } = await tradingSdk.getQuoteResults(swapParams, {
277
- ...advancedSettings,
278
- appData: {
279
- ...advancedSettings?.appData,
280
- metadata: {
281
- hooks: {
282
- pre: advancedSettingsHooks?.pre,
283
- post: [...advancedSettingsHooks?.post || [], mockedHook]
284
- },
285
- bridging: {
286
- destinationChainId: buyTokenChainId.toString(),
287
- destinationTokenAddress: buyTokenAddress
362
+ const { result: swapResult, orderBookApi } = await tradingSdk.getQuoteResults(swapParams, advancedSettings);
363
+ return { swapResult, orderBookApi };
364
+ }
365
+
366
+ // src/BridgingSdk/getQuoteWithBridge.ts
367
+ async function getQuoteWithBridge(provider, params) {
368
+ const { kind } = params.swapAndBridgeRequest;
369
+ if (kind !== OrderKind.SELL) {
370
+ throw new Error("Bridging only support SELL orders");
371
+ }
372
+ if (isHookBridgeProvider(provider)) {
373
+ return getQuoteWithHookBridge(provider, params);
374
+ }
375
+ if (isReceiverAccountBridgeProvider(provider)) {
376
+ return getQuoteWithReceiverAccountBridge(provider, params);
377
+ }
378
+ throw new Error("Provider type is unknown: " + provider.type);
379
+ }
380
+ function createPostSwapOrderFromQuote(params) {
381
+ const { getBridgeProviderQuote, signer, sellTokenAddress, orderBookApi } = params;
382
+ return async function postSwapOrderFromQuote(advancedSettings, signingStepManager) {
383
+ await signingStepManager?.beforeBridgingSign?.();
384
+ const { swapResult } = await getBridgeProviderQuote(signer, advancedSettings).catch((error) => {
385
+ signingStepManager?.onBridgingSignError?.();
386
+ throw error;
387
+ });
388
+ await signingStepManager?.afterBridgingSign?.();
389
+ const quoteResults = {
390
+ result: {
391
+ ...swapResult,
392
+ tradeParameters: getTradeParametersAfterQuote({
393
+ quoteParameters: swapResult.tradeParameters,
394
+ sellToken: sellTokenAddress
395
+ }),
396
+ signer
397
+ },
398
+ orderBookApi
399
+ };
400
+ await signingStepManager?.beforeOrderSign?.();
401
+ return postSwapOrderFromQuoteTrading(quoteResults, {
402
+ ...advancedSettings,
403
+ appData: swapResult.appDataInfo.doc,
404
+ quoteRequest: {
405
+ ...advancedSettings?.quoteRequest,
406
+ // Changing receiver back for the quote request
407
+ receiver: swapResult.tradeParameters.receiver
408
+ }
409
+ }).then(async (result) => {
410
+ await signingStepManager?.afterOrderSign?.();
411
+ return result;
412
+ }).catch((error) => {
413
+ signingStepManager?.onOrderSignError?.();
414
+ throw error;
415
+ });
416
+ };
417
+ }
418
+ async function getQuoteWithReceiverAccountBridge(provider, params) {
419
+ const {
420
+ swapAndBridgeRequest,
421
+ signer,
422
+ bridgeRequestWithoutAmount,
423
+ intermediateTokenAmount,
424
+ swapResult,
425
+ orderBookApi
426
+ } = await getIntermediateSwapResult({
427
+ provider,
428
+ params
429
+ });
430
+ async function getBridgeProviderQuote() {
431
+ const { bridgeReceiverOverride, bridgeResult } = await getAccountBridgeResult(provider, {
432
+ swapAndBridgeRequest,
433
+ bridgeRequestWithoutAmount,
434
+ intermediateTokenAmount
435
+ });
436
+ log3(`Bridge receiver override: ${bridgeReceiverOverride}`);
437
+ swapResult.tradeParameters.receiver = bridgeReceiverOverride;
438
+ return {
439
+ bridgeResult,
440
+ swapResult: {
441
+ ...swapResult,
442
+ tradeParameters: {
443
+ ...swapResult.tradeParameters,
444
+ receiver: bridgeReceiverOverride
288
445
  }
289
446
  }
447
+ };
448
+ }
449
+ const result = await getBridgeProviderQuote();
450
+ return {
451
+ swap: result.swapResult,
452
+ bridge: result.bridgeResult,
453
+ postSwapOrderFromQuote: createPostSwapOrderFromQuote({
454
+ getBridgeProviderQuote,
455
+ signer,
456
+ sellTokenAddress: swapAndBridgeRequest.sellTokenAddress,
457
+ orderBookApi
458
+ })
459
+ };
460
+ }
461
+ async function getQuoteWithHookBridge(provider, params) {
462
+ const { quoteSigner } = params;
463
+ const {
464
+ signer,
465
+ swapAndBridgeRequest,
466
+ bridgeRequestWithoutAmount,
467
+ intermediateTokenAmount,
468
+ orderBookApi,
469
+ swapResult
470
+ } = await getIntermediateSwapResult({
471
+ provider,
472
+ params,
473
+ getBridgeHook: async (bridgeRequestWithoutAmount2) => {
474
+ const hookEstimatedGasLimit2 = await provider.getGasLimitEstimationForHook(bridgeRequestWithoutAmount2);
475
+ const mockedHook = getHookMockForCostEstimation(hookEstimatedGasLimit2);
476
+ log3(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
477
+ return mockedHook;
290
478
  }
291
479
  });
292
- const intermediateTokenAmount = swapResult.amountsAndCosts.afterSlippage.buyAmount;
293
- log2(
294
- `Expected to receive ${intermediateTokenAmount} of the intermediate token (${(intermediateTokenAmount / 10n ** BigInt(intermediaryTokenDecimals)).toString()} formatted)`
295
- );
296
- async function signHooksAndSetSwapResult(signer2, hookGasLimit, advancedSettings2) {
297
- const appDataOverride = advancedSettings2?.appData;
298
- const receiverOverride = advancedSettings2?.quoteRequest?.receiver;
299
- const validToOverride = advancedSettings2?.quoteRequest?.validTo;
480
+ const hookEstimatedGasLimit = await provider.getGasLimitEstimationForHook(bridgeRequestWithoutAmount);
481
+ async function getBridgeProviderQuote(signer2, hookGasLimit, advancedSettings) {
482
+ const appDataOverride = advancedSettings?.appData;
483
+ const receiverOverride = advancedSettings?.quoteRequest?.receiver;
484
+ const validToOverride = advancedSettings?.quoteRequest?.validTo;
300
485
  const {
301
486
  bridgeHook,
302
487
  appDataInfo: { doc: appData, fullAppData, appDataKeccak256 },
303
488
  bridgeResult
304
- } = await getBridgeResult({
305
- swapAndBridgeRequest: { ...swapAndBridgeRequest, kind: OrderKind.SELL },
489
+ } = await getHookBridgeResult(provider, {
490
+ swapAndBridgeRequest,
306
491
  swapResult,
307
492
  bridgeRequestWithoutAmount: {
308
493
  ...bridgeRequestWithoutAmount,
309
494
  receiver: receiverOverride || bridgeRequestWithoutAmount.receiver
310
495
  },
311
- provider,
312
496
  intermediateTokenAmount,
313
497
  signer: signer2,
314
498
  appDataOverride,
315
499
  validToOverride,
316
500
  hookGasLimit
317
501
  });
318
- log2(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
502
+ log3(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
319
503
  swapResult.tradeParameters.receiver = bridgeHook.recipient;
320
- log2(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
504
+ log3(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
321
505
  swapResult.appDataInfo = {
322
506
  fullAppData,
323
507
  appDataKeccak256,
@@ -334,93 +518,58 @@ async function getQuoteWithBridge(params) {
334
518
  }
335
519
  };
336
520
  }
337
- log2(`Using gas limit: ${hookEstimatedGasLimit}`);
338
- const result = await signHooksAndSetSwapResult(
339
- // Sign the hooks with bridgeHookSigner if provided
340
- bridgeHookSigner ? adapter.createSigner(bridgeHookSigner) : signer,
341
- // Use estimated hook gas limit if bridgeHookSigner is provided, so we don't have to estimate the hook gas limit twice
342
- // Moreover, since bridgeHookSigner is not the real signer, the estimation will fail
521
+ log3(`Using gas limit: ${hookEstimatedGasLimit}`);
522
+ const result = await getBridgeProviderQuote(
523
+ // Sign the hooks with quoteSigner if provided
524
+ quoteSigner ? getGlobalAdapter3().createSigner(quoteSigner) : signer,
525
+ // Use estimated hook gas limit if quoteSigner is provided, so we don't have to estimate the hook gas limit twice
526
+ // Moreover, since quoteSigner is not the real signer, the estimation will fail
343
527
  hookEstimatedGasLimit
344
528
  );
345
529
  return {
346
530
  swap: result.swapResult,
347
531
  bridge: result.bridgeResult,
348
- async postSwapOrderFromQuote(advancedSettings2, signingStepManager) {
349
- await signingStepManager?.beforeBridgingSign?.();
350
- const { swapResult: swapResult2 } = await signHooksAndSetSwapResult(signer, hookEstimatedGasLimit, advancedSettings2).catch(
351
- (error) => {
352
- signingStepManager?.onBridgingSignError?.();
353
- throw error;
354
- }
355
- );
356
- await signingStepManager?.afterBridgingSign?.();
357
- const quoteResults = {
358
- result: {
359
- ...swapResult2,
360
- tradeParameters: getTradeParametersAfterQuote({
361
- quoteParameters: swapResult2.tradeParameters,
362
- sellToken: sellTokenAddress
363
- }),
364
- signer
365
- },
366
- orderBookApi
367
- };
368
- await signingStepManager?.beforeOrderSign?.();
369
- return postSwapOrderFromQuote(quoteResults, {
370
- ...advancedSettings2,
371
- appData: swapResult2.appDataInfo.doc,
372
- quoteRequest: {
373
- ...advancedSettings2?.quoteRequest,
374
- // Changing receiver back to account proxy
375
- receiver: swapResult2.tradeParameters.receiver
376
- }
377
- }).catch((error) => {
378
- signingStepManager?.onOrderSignError?.();
379
- throw error;
380
- }).then(async (result2) => {
381
- await signingStepManager?.afterOrderSign?.();
382
- return result2;
383
- });
384
- }
532
+ postSwapOrderFromQuote: createPostSwapOrderFromQuote({
533
+ getBridgeProviderQuote: (signer2, advancedSettings) => getBridgeProviderQuote(signer2, hookEstimatedGasLimit, advancedSettings),
534
+ signer,
535
+ sellTokenAddress: swapAndBridgeRequest.sellTokenAddress,
536
+ orderBookApi
537
+ })
385
538
  };
386
539
  }
387
- async function getBaseBridgeQuoteRequest(params) {
388
- const { provider, swapAndBridgeRequest: quoteBridgeRequest, intermediateTokensCache } = params;
389
- let intermediateTokens = [];
390
- const cacheKey = getCacheKey({
391
- id: provider.info.dappId,
392
- buyChainId: quoteBridgeRequest.buyTokenChainId.toString(),
393
- sellChainId: quoteBridgeRequest.sellTokenChainId.toString(),
394
- tokenAddress: quoteBridgeRequest.buyTokenAddress
395
- });
396
- const cached = intermediateTokensCache?.get(cacheKey);
397
- if (cached) {
398
- intermediateTokens = cached;
399
- } else {
400
- intermediateTokens = await provider.getIntermediateTokens(quoteBridgeRequest);
401
- intermediateTokensCache?.set(cacheKey, intermediateTokens);
402
- }
403
- if (intermediateTokens.length === 0) {
404
- throw new BridgeProviderQuoteError("NO_INTERMEDIATE_TOKENS" /* NO_INTERMEDIATE_TOKENS */);
405
- }
406
- const intermediateToken = intermediateTokens[0];
407
- log2(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
408
- if (!intermediateToken) {
409
- throw new BridgeProviderQuoteError("NO_INTERMEDIATE_TOKENS" /* NO_INTERMEDIATE_TOKENS */, { intermediateTokens });
410
- }
411
- return {
412
- ...quoteBridgeRequest,
413
- sellTokenAddress: intermediateToken.address,
414
- sellTokenDecimals: intermediateToken.decimals
540
+ async function getAccountBridgeResult(provider, context) {
541
+ const { bridgeRequestWithoutAmount, intermediateTokenAmount } = context;
542
+ const bridgeRequest = {
543
+ ...bridgeRequestWithoutAmount,
544
+ amount: intermediateTokenAmount
545
+ };
546
+ const bridgingQuote = await provider.getQuote(bridgeRequest);
547
+ const bridgeReceiverOverride = await provider.getBridgeReceiverOverride(bridgeRequest, bridgingQuote);
548
+ const bridgeResult = {
549
+ providerInfo: provider.info,
550
+ tradeParameters: bridgeRequest,
551
+ // Just the bridge (not the swap & bridge)
552
+ bridgeReceiverOverride,
553
+ isSell: bridgingQuote.isSell,
554
+ expectedFillTimeSeconds: bridgingQuote.expectedFillTimeSeconds,
555
+ fees: bridgingQuote.fees,
556
+ limits: bridgingQuote.limits,
557
+ quoteTimestamp: bridgingQuote.quoteTimestamp,
558
+ amountsAndCosts: bridgingQuote.amountsAndCosts
415
559
  };
560
+ return { bridgeResult, bridgeReceiverOverride };
416
561
  }
417
- async function getBridgeResult(context) {
418
- const { swapResult, bridgeRequestWithoutAmount, provider, intermediateTokenAmount, appDataOverride } = context;
562
+ async function getHookBridgeResult(provider, context) {
563
+ const { swapResult, bridgeRequestWithoutAmount, intermediateTokenAmount, appDataOverride } = context;
419
564
  const bridgeRequest = {
420
565
  ...bridgeRequestWithoutAmount,
421
566
  amount: intermediateTokenAmount
422
567
  };
423
- const { hook: bridgeHook, unsignedBridgeCall, bridgingQuote } = await getBridgeSignedHook(bridgeRequest, context);
568
+ const {
569
+ hook: bridgeHook,
570
+ unsignedBridgeCall,
571
+ bridgingQuote
572
+ } = await getBridgeSignedHook(provider, bridgeRequest, context);
424
573
  const swapAppData = await mergeAppDataDoc(swapResult.appDataInfo.doc, appDataOverride || {});
425
574
  const swapResultHooks = swapAppData.doc.metadata.hooks;
426
575
  const postHooks = (swapResultHooks?.post || []).filter((hook) => {
@@ -484,14 +633,13 @@ var SingleQuoteStrategy = class extends BaseSingleQuoteStrategy {
484
633
  swapAndBridgeRequest: quoteBridgeRequest,
485
634
  advancedSettings,
486
635
  tradingSdk,
487
- provider,
488
- bridgeHookSigner: advancedSettings?.quoteSigner
636
+ quoteSigner: advancedSettings?.quoteSigner
489
637
  };
490
638
  const request2 = this.intermediateTokensCache ? {
491
639
  ...baseParams,
492
640
  intermediateTokensCache: this.intermediateTokensCache
493
641
  } : baseParams;
494
- return getQuoteWithBridge(request2);
642
+ return getQuoteWithBridge(provider, request2);
495
643
  } else {
496
644
  return getQuoteWithoutBridge({
497
645
  quoteBridgeRequest,
@@ -643,15 +791,14 @@ var MultiQuoteStrategy = class extends BaseMultiQuoteStrategy {
643
791
  swapAndBridgeRequest: quoteBridgeRequest,
644
792
  advancedSettings,
645
793
  tradingSdk: config.tradingSdk,
646
- provider,
647
- bridgeHookSigner: advancedSettings?.quoteSigner
794
+ quoteSigner: advancedSettings?.quoteSigner
648
795
  };
649
796
  const request = this.intermediateTokensCache ? {
650
797
  ...baseParams,
651
798
  intermediateTokensCache: this.intermediateTokensCache
652
799
  } : baseParams;
653
800
  const quote = await Promise.race([
654
- getQuoteWithBridge(request),
801
+ getQuoteWithBridge(provider, request),
655
802
  createBridgeQuoteTimeoutPromise(providerTimeout, `Provider ${provider.info.dappId}`)
656
803
  ]);
657
804
  const result = {
@@ -720,14 +867,14 @@ var BestQuoteStrategy = class extends BaseBestQuoteStrategy {
720
867
  advancedSettings,
721
868
  tradingSdk: config.tradingSdk,
722
869
  provider,
723
- bridgeHookSigner: advancedSettings?.quoteSigner
870
+ quoteSigner: advancedSettings?.quoteSigner
724
871
  };
725
872
  const request = this.intermediateTokensCache ? {
726
873
  ...baseParams,
727
874
  intermediateTokensCache: this.intermediateTokensCache
728
875
  } : baseParams;
729
876
  const quote = await Promise.race([
730
- getQuoteWithBridge(request),
877
+ getQuoteWithBridge(provider, request),
731
878
  createBridgeQuoteTimeoutPromise(providerTimeout, `Provider ${provider.info.dappId}`)
732
879
  ]);
733
880
  const result = {
@@ -784,7 +931,7 @@ var BridgingSdk = class {
784
931
  enableLogging(options.enableLogging);
785
932
  }
786
933
  const tradingSdk = options.tradingSdk ?? new TradingSdk();
787
- const orderBookApi = tradingSdk?.options.orderBookApi ?? new OrderBookApi();
934
+ const orderBookApi = tradingSdk?.options.orderBookApi ?? new OrderBookApi2();
788
935
  this.config = {
789
936
  ...restOptions,
790
937
  providers,
@@ -970,7 +1117,7 @@ var BridgingSdk = class {
970
1117
  };
971
1118
 
972
1119
  // src/providers/across/AcrossApi.ts
973
- import { log as log3 } from "@cowprotocol/sdk-common";
1120
+ import { log as log4 } from "@cowprotocol/sdk-common";
974
1121
  var ACROSS_API_URL = "https://app.across.to/api";
975
1122
  var AcrossApi = class {
976
1123
  constructor(options = {}) {
@@ -1036,7 +1183,7 @@ var AcrossApi = class {
1036
1183
  async fetchApi(path, params, isValidResponse) {
1037
1184
  const baseUrl = this.options.apiBaseUrl || ACROSS_API_URL;
1038
1185
  const url = `${baseUrl}${path}?${new URLSearchParams(params).toString()}`;
1039
- log3(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
1186
+ log4(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
1040
1187
  const response = await fetch(url, {
1041
1188
  method: "GET"
1042
1189
  });
@@ -1075,14 +1222,14 @@ function isValidRoute(item) {
1075
1222
  }
1076
1223
 
1077
1224
  // src/providers/across/const/interfaces.ts
1078
- import { getGlobalAdapter as getGlobalAdapter3 } from "@cowprotocol/sdk-common";
1225
+ import { getGlobalAdapter as getGlobalAdapter4 } from "@cowprotocol/sdk-common";
1079
1226
  var ACROSS_DEPOSIT_EVENT_INTERFACE = () => {
1080
- return getGlobalAdapter3().utils.createInterface([
1227
+ return getGlobalAdapter4().utils.createInterface([
1081
1228
  "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)"
1082
1229
  ]);
1083
1230
  };
1084
1231
  var COW_TRADE_EVENT_INTERFACE = () => {
1085
- return getGlobalAdapter3().utils.createInterface([
1232
+ return getGlobalAdapter4().utils.createInterface([
1086
1233
  "event Trade(address owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)"
1087
1234
  ]);
1088
1235
  };
@@ -1130,7 +1277,7 @@ var ACROSS_MATH_CONTRACT_ADDRESSES = {
1130
1277
  // src/providers/across/util.ts
1131
1278
  import { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from "@cowprotocol/sdk-config";
1132
1279
  import { getBigNumber, OrderKind as OrderKind2 } from "@cowprotocol/sdk-order-book";
1133
- import { getGlobalAdapter as getGlobalAdapter4 } from "@cowprotocol/sdk-common";
1280
+ import { getGlobalAdapter as getGlobalAdapter5 } from "@cowprotocol/sdk-common";
1134
1281
  var PCT_100_PERCENT = 10n ** 18n;
1135
1282
  function toBridgeQuoteResult(request, slippageBps, suggestedFees) {
1136
1283
  const { kind } = request;
@@ -1187,7 +1334,7 @@ function toAmountsAndCosts(request, slippageBps, suggestedFees) {
1187
1334
  };
1188
1335
  }
1189
1336
  function bytes32ToAddress(address) {
1190
- return getGlobalAdapter4().utils.decodeAbi(["address"], address).toString();
1337
+ return getGlobalAdapter5().utils.decodeAbi(["address"], address).toString();
1191
1338
  }
1192
1339
  function assertValidPct(pct) {
1193
1340
  if (pct > PCT_100_PERCENT || pct < 0n) {
@@ -1222,8 +1369,8 @@ function getAcrossDepositEvents(chainId, logs) {
1222
1369
  }
1223
1370
  const acrossDepositInterface = ACROSS_DEPOSIT_EVENT_INTERFACE();
1224
1371
  const ACROSS_DEPOSIT_EVENT_TOPIC = acrossDepositInterface.getEventTopic("FundsDeposited");
1225
- const depositEvents = logs.filter((log6) => {
1226
- return log6.address.toLocaleLowerCase() === spookContractAddress && log6.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
1372
+ const depositEvents = logs.filter((log7) => {
1373
+ return log7.address.toLocaleLowerCase() === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
1227
1374
  });
1228
1375
  return depositEvents.map((event) => {
1229
1376
  const parsedLog = acrossDepositInterface.parseLog(event);
@@ -1264,8 +1411,8 @@ function getAcrossDepositEvents(chainId, logs) {
1264
1411
  }
1265
1412
  function getCowTradeEvents(chainId, logs) {
1266
1413
  const COW_TRADE_EVENT_TOPIC = COW_TRADE_EVENT_INTERFACE().getEventTopic("Trade");
1267
- const cowTradeEvents = logs.filter((log6) => {
1268
- return log6.address.toLowerCase() === COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[chainId].toLowerCase() && log6.topics[0] === COW_TRADE_EVENT_TOPIC;
1414
+ const cowTradeEvents = logs.filter((log7) => {
1415
+ return log7.address.toLowerCase() === COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[chainId].toLowerCase() && log7.topics[0] === COW_TRADE_EVENT_TOPIC;
1269
1416
  });
1270
1417
  return cowTradeEvents.map((event) => {
1271
1418
  const parsedLog = COW_TRADE_EVENT_INTERFACE().parseLog(event);
@@ -3065,11 +3212,11 @@ var ACROSS_SPOKE_POOL_ABI = [
3065
3212
  ];
3066
3213
 
3067
3214
  // src/providers/across/createAcrossDepositCall.ts
3068
- import { getGlobalAdapter as getGlobalAdapter5 } from "@cowprotocol/sdk-common";
3215
+ import { getGlobalAdapter as getGlobalAdapter6 } from "@cowprotocol/sdk-common";
3069
3216
  var ERC20_BALANCE_OF_ABI = ["function balanceOf(address account) external view returns (uint256)"];
3070
3217
  var ERC20_APPROVE_OF_ABI = ["function approve(address spender, uint256 amount) external returns (bool)"];
3071
3218
  function getSpookPoolContract(sellTokenChainId) {
3072
- const adapter = getGlobalAdapter5();
3219
+ const adapter = getGlobalAdapter6();
3073
3220
  const spokePoolAddress = ACROSS_SPOOK_CONTRACT_ADDRESSES[sellTokenChainId];
3074
3221
  if (!spokePoolAddress) {
3075
3222
  throw new Error("Spoke pool address not found for chain: " + sellTokenChainId);
@@ -3080,7 +3227,7 @@ function getSpookPoolContract(sellTokenChainId) {
3080
3227
  );
3081
3228
  }
3082
3229
  function getMathContract(sellTokenChainId) {
3083
- const adapter = getGlobalAdapter5();
3230
+ const adapter = getGlobalAdapter6();
3084
3231
  const mathContractAddress = ACROSS_MATH_CONTRACT_ADDRESSES[sellTokenChainId];
3085
3232
  if (!mathContractAddress) {
3086
3233
  throw new Error("Math contract address not found for chain: " + sellTokenChainId);
@@ -3091,14 +3238,14 @@ function getMathContract(sellTokenChainId) {
3091
3238
  );
3092
3239
  }
3093
3240
  function getBalanceOfSellTokenContract(sellTokenAddress) {
3094
- const adapter = getGlobalAdapter5();
3241
+ const adapter = getGlobalAdapter6();
3095
3242
  return createWeirollContract(
3096
3243
  adapter.getContract(sellTokenAddress, ERC20_BALANCE_OF_ABI),
3097
3244
  WeirollCommandFlags.STATICCALL
3098
3245
  );
3099
3246
  }
3100
3247
  function getApproveSellTokenContract(sellTokenAddress) {
3101
- const adapter = getGlobalAdapter5();
3248
+ const adapter = getGlobalAdapter6();
3102
3249
  return createWeirollContract(adapter.getContract(sellTokenAddress, ERC20_APPROVE_OF_ABI), WeirollCommandFlags.CALL);
3103
3250
  }
3104
3251
  function createAcrossDepositCall(params) {
@@ -3143,7 +3290,7 @@ function createAcrossDepositCall(params) {
3143
3290
  }
3144
3291
 
3145
3292
  // src/providers/across/getDepositParams.ts
3146
- import { log as log4 } from "@cowprotocol/sdk-common";
3293
+ import { log as log5 } from "@cowprotocol/sdk-common";
3147
3294
  async function getDepositParams(chainId, orderId, txReceipt) {
3148
3295
  const depositEvents = getAcrossDepositEvents(chainId, txReceipt.logs);
3149
3296
  if (depositEvents.length === 0) {
@@ -3155,7 +3302,7 @@ async function getDepositParams(chainId, orderId, txReceipt) {
3155
3302
  return null;
3156
3303
  const depositEvent = depositEvents[orderTradeIndex];
3157
3304
  if (!depositEvent) {
3158
- log4(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
3305
+ log5(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
3159
3306
  return null;
3160
3307
  }
3161
3308
  return {
@@ -3174,14 +3321,14 @@ async function getDepositParams(chainId, orderId, txReceipt) {
3174
3321
  }
3175
3322
 
3176
3323
  // src/providers/utils/getGasLimitEstimationForHook.ts
3177
- import { getGlobalAdapter as getGlobalAdapter6 } from "@cowprotocol/sdk-common";
3324
+ import { getGlobalAdapter as getGlobalAdapter7 } from "@cowprotocol/sdk-common";
3178
3325
  async function getGasLimitEstimationForHook({
3179
3326
  cowShedSdk,
3180
3327
  request,
3181
3328
  extraGas,
3182
3329
  extraGasProxyCreation
3183
3330
  }) {
3184
- const adapter = getGlobalAdapter6();
3331
+ const adapter = getGlobalAdapter7();
3185
3332
  const proxyAddress = cowShedSdk.getCowShedAccount(request.sellTokenChainId, request.owner || request.account);
3186
3333
  const proxyCode = await adapter.getCode(proxyAddress);
3187
3334
  if (!proxyCode || proxyCode === "0x") {
@@ -3192,7 +3339,7 @@ async function getGasLimitEstimationForHook({
3192
3339
  }
3193
3340
 
3194
3341
  // src/providers/across/AcrossBridgeProvider.ts
3195
- import { getGlobalAdapter as getGlobalAdapter7, setGlobalAdapter as setGlobalAdapter2 } from "@cowprotocol/sdk-common";
3342
+ import { getGlobalAdapter as getGlobalAdapter8, setGlobalAdapter as setGlobalAdapter2 } from "@cowprotocol/sdk-common";
3196
3343
  import {
3197
3344
  arbitrumOne,
3198
3345
  base,
@@ -3206,6 +3353,7 @@ var ACROSS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/across`;
3206
3353
  var ACROSS_SUPPORTED_NETWORKS = [mainnet, polygon, arbitrumOne, base, optimism];
3207
3354
  var SLIPPAGE_TOLERANCE_BPS = 0;
3208
3355
  var AcrossBridgeProvider = class {
3356
+ type = "HookBridgeProvider";
3209
3357
  api;
3210
3358
  cowShedSdk;
3211
3359
  supportedTokens = null;
@@ -3307,7 +3455,7 @@ var AcrossBridgeProvider = class {
3307
3455
  throw new Error("Not implemented");
3308
3456
  }
3309
3457
  async getBridgingParams(chainId, orderUid, txHash) {
3310
- const adapter = getGlobalAdapter7();
3458
+ const adapter = getGlobalAdapter8();
3311
3459
  const txReceipt = await adapter.getTransactionReceipt(txHash);
3312
3460
  if (!txReceipt)
3313
3461
  return null;
@@ -3825,7 +3973,7 @@ var BUNGEE_APPROVE_AND_BRIDGE_V1_ABI = [
3825
3973
  ];
3826
3974
 
3827
3975
  // src/providers/bungee/BungeeApi.ts
3828
- import { getGlobalAdapter as getGlobalAdapter8, log as log5 } from "@cowprotocol/sdk-common";
3976
+ import { getGlobalAdapter as getGlobalAdapter9, log as log6 } from "@cowprotocol/sdk-common";
3829
3977
 
3830
3978
  // src/providers/bungee/consts.ts
3831
3979
  var BUNGEE_API_PATH = "/api/v1/bungee";
@@ -4099,7 +4247,7 @@ var BungeeApi = class {
4099
4247
  * @returns True if the bungee tx data is valid, false otherwise
4100
4248
  */
4101
4249
  async verifyBungeeBuildTxData(originChainId, txData, routeId, expectedSocketRequest) {
4102
- const adapter = getGlobalAdapter8();
4250
+ const adapter = getGlobalAdapter9();
4103
4251
  const socketVerifierAddress = SocketVerifierAddresses[originChainId];
4104
4252
  if (!socketVerifierAddress) {
4105
4253
  throw new BridgeProviderQuoteError("TX_BUILD_ERROR" /* TX_BUILD_ERROR */, {
@@ -4220,13 +4368,13 @@ var BungeeApi = class {
4220
4368
  if (this.shouldAddAffiliate(apiType, baseUrl) && this.options.affiliate) {
4221
4369
  headers["affiliate"] = this.options.affiliate;
4222
4370
  }
4223
- log5(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
4371
+ log6(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
4224
4372
  try {
4225
4373
  const response = await fetch(url, { method: "GET", headers });
4226
4374
  if (!response.ok) {
4227
4375
  if (isInfrastructureError(response.status) && !useFallback) {
4228
4376
  this.enableFallback(apiType);
4229
- log5(
4377
+ log6(
4230
4378
  `Infrastructure error (${response.status}) detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`
4231
4379
  );
4232
4380
  return this.makeApiCall(apiType, path, params, isValidResponse);
@@ -4242,7 +4390,7 @@ var BungeeApi = class {
4242
4390
  } catch (error) {
4243
4391
  if (!useFallback && isClientFetchError(error)) {
4244
4392
  this.enableFallback(apiType);
4245
- log5(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
4393
+ log6(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
4246
4394
  return this.makeApiCall(apiType, path, params, isValidResponse);
4247
4395
  }
4248
4396
  throw error;
@@ -4252,9 +4400,9 @@ var BungeeApi = class {
4252
4400
 
4253
4401
  // src/providers/bungee/createBungeeDepositCall.ts
4254
4402
  import { ETH_ADDRESS } from "@cowprotocol/sdk-config";
4255
- import { getGlobalAdapter as getGlobalAdapter9 } from "@cowprotocol/sdk-common";
4403
+ import { getGlobalAdapter as getGlobalAdapter10 } from "@cowprotocol/sdk-common";
4256
4404
  async function createBungeeDepositCall(params) {
4257
- const adapter = getGlobalAdapter9();
4405
+ const adapter = getGlobalAdapter10();
4258
4406
  const { request, quote } = params;
4259
4407
  const { bungeeQuote, buildTx } = quote;
4260
4408
  const bridge = bungeeQuote.routeBridge;
@@ -4370,6 +4518,7 @@ var BungeeBridgeProvider = class {
4370
4518
  this.api = new BungeeApi(options.apiOptions);
4371
4519
  this.cowShedSdk = new CowShedSdk2(adapter, options.cowShedOptions?.factoryOptions);
4372
4520
  }
4521
+ type = "HookBridgeProvider";
4373
4522
  api;
4374
4523
  cowShedSdk;
4375
4524
  info = {
@@ -4533,5 +4682,7 @@ export {
4533
4682
  getPostHooks,
4534
4683
  isAppDoc,
4535
4684
  isBridgeQuoteAndPost,
4536
- isQuoteAndPost
4685
+ isHookBridgeProvider,
4686
+ isQuoteAndPost,
4687
+ isReceiverAccountBridgeProvider
4537
4688
  };