@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.d.mts +66 -30
- package/dist/index.d.ts +66 -30
- package/dist/index.js +315 -162
- package/dist/index.mjs +307 -156
- package/package.json +6 -6
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
|
|
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, {
|
|
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/
|
|
229
|
-
|
|
230
|
-
|
|
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
|
|
250
|
-
swapAndBridgeRequest,
|
|
256
|
+
const intermediateTokens = await getIntermediateTokens({
|
|
251
257
|
provider,
|
|
258
|
+
quoteBridgeRequest: swapAndBridgeRequest,
|
|
252
259
|
intermediateTokensCache: params.intermediateTokensCache
|
|
253
260
|
});
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
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
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
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
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
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
|
|
305
|
-
swapAndBridgeRequest
|
|
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
|
-
|
|
502
|
+
log3(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
|
|
319
503
|
swapResult.tradeParameters.receiver = bridgeHook.recipient;
|
|
320
|
-
|
|
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
|
-
|
|
338
|
-
const result = await
|
|
339
|
-
// Sign the hooks with
|
|
340
|
-
|
|
341
|
-
// Use estimated hook gas limit if
|
|
342
|
-
// Moreover, since
|
|
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
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
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
|
|
388
|
-
const {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
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
|
|
418
|
-
const { swapResult, bridgeRequestWithoutAmount,
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
1225
|
+
import { getGlobalAdapter as getGlobalAdapter4 } from "@cowprotocol/sdk-common";
|
|
1079
1226
|
var ACROSS_DEPOSIT_EVENT_INTERFACE = () => {
|
|
1080
|
-
return
|
|
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
|
|
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
|
|
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
|
|
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((
|
|
1226
|
-
return
|
|
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((
|
|
1268
|
-
return
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
4403
|
+
import { getGlobalAdapter as getGlobalAdapter10 } from "@cowprotocol/sdk-common";
|
|
4256
4404
|
async function createBungeeDepositCall(params) {
|
|
4257
|
-
const adapter =
|
|
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
|
-
|
|
4685
|
+
isHookBridgeProvider,
|
|
4686
|
+
isQuoteAndPost,
|
|
4687
|
+
isReceiverAccountBridgeProvider
|
|
4537
4688
|
};
|