@cetusprotocol/aggregator-sdk 1.4.5 → 1.4.6

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.js CHANGED
@@ -1,38 +1,16 @@
1
- 'use strict';
2
-
3
- var transactions = require('@mysten/sui/transactions');
4
- var JSONbig = require('json-bigint');
5
- var utils = require('@mysten/sui/utils');
6
- var client = require('@mysten/sui/client');
7
- var pythSuiJs = require('@pythnetwork/pyth-sui-js');
8
-
9
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
-
11
- var JSONbig__default = /*#__PURE__*/_interopDefault(JSONbig);
1
+ import { coinWithBalance, Transaction } from '@mysten/sui/transactions';
2
+ import JSONbig from 'json-bigint';
3
+ import { normalizeSuiObjectId, SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils';
4
+ import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
5
+ import { HermesClient } from '@pythnetwork/hermes-client';
6
+ import { bcs } from '@mysten/sui/bcs';
12
7
 
13
8
  var __create = Object.create;
14
9
  var __defProp = Object.defineProperty;
15
- var __defProps = Object.defineProperties;
16
10
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
17
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
18
11
  var __getOwnPropNames = Object.getOwnPropertyNames;
19
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
12
  var __getProtoOf = Object.getPrototypeOf;
21
13
  var __hasOwnProp = Object.prototype.hasOwnProperty;
22
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
23
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
24
- var __spreadValues = (a, b) => {
25
- for (var prop in b || (b = {}))
26
- if (__hasOwnProp.call(b, prop))
27
- __defNormalProp(a, prop, b[prop]);
28
- if (__getOwnPropSymbols)
29
- for (var prop of __getOwnPropSymbols(b)) {
30
- if (__propIsEnum.call(b, prop))
31
- __defNormalProp(a, prop, b[prop]);
32
- }
33
- return a;
34
- };
35
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
36
14
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
37
15
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
38
16
  }) : x)(function(x) {
@@ -55,29 +33,9 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
55
33
  // file that has been converted to a CommonJS file using a Babel-
56
34
  // compatible transform (i.e. "__esModule" has not been set), then set
57
35
  // "default" to the CommonJS "module.exports" for node compatibility.
58
- !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target,
36
+ __defProp(target, "default", { value: mod2, enumerable: true }) ,
59
37
  mod2
60
38
  ));
61
- var __async = (__this, __arguments, generator) => {
62
- return new Promise((resolve, reject) => {
63
- var fulfilled = (value) => {
64
- try {
65
- step(generator.next(value));
66
- } catch (e) {
67
- reject(e);
68
- }
69
- };
70
- var rejected = (value) => {
71
- try {
72
- step(generator.throw(value));
73
- } catch (e) {
74
- reject(e);
75
- }
76
- };
77
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
78
- step((generator = generator.apply(__this, __arguments)).next());
79
- });
80
- };
81
39
 
82
40
  // node_modules/bn.js/lib/bn.js
83
41
  var require_bn = __commonJS({
@@ -2947,17 +2905,17 @@ function extractAddressFromType(type) {
2947
2905
  return type.split("::")[0];
2948
2906
  }
2949
2907
  function extractStructTagFromType(type) {
2950
- var _a;
2951
2908
  try {
2952
2909
  let _type = type.replace(/\s/g, "");
2953
2910
  const genericsString = _type.match(/(<.+>)$/);
2954
- const generics = (_a = genericsString == null ? void 0 : genericsString[0]) == null ? void 0 : _a.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);
2911
+ const generics = genericsString?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);
2955
2912
  if (generics) {
2956
2913
  _type = _type.slice(0, _type.indexOf("<"));
2957
2914
  const tag2 = extractStructTagFromType(_type);
2958
- const structTag2 = __spreadProps(__spreadValues({}, tag2), {
2915
+ const structTag2 = {
2916
+ ...tag2,
2959
2917
  type_arguments: generics.map((item) => extractStructTagFromType(item).source_address)
2960
- });
2918
+ };
2961
2919
  structTag2.type_arguments = structTag2.type_arguments.map((item) => {
2962
2920
  return CoinUtils.isSuiCoin(item) ? item : extractStructTagFromType(item).source_address;
2963
2921
  });
@@ -2968,7 +2926,7 @@ function extractStructTagFromType(type) {
2968
2926
  const isSuiCoin = _type === GAS_TYPE_ARG || _type === GAS_TYPE_ARG_LONG;
2969
2927
  const structTag = {
2970
2928
  full_address: _type,
2971
- address: isSuiCoin ? "0x2" : utils.normalizeSuiObjectId(parts[0]),
2929
+ address: isSuiCoin ? "0x2" : normalizeSuiObjectId(parts[0]),
2972
2930
  module: parts[1],
2973
2931
  name: parts[2],
2974
2932
  type_arguments: [],
@@ -2993,7 +2951,7 @@ function normalizeCoinType(coinType) {
2993
2951
  }
2994
2952
  function fixSuiObjectId(value) {
2995
2953
  if (value.toLowerCase().startsWith("0x")) {
2996
- return utils.normalizeSuiObjectId(value);
2954
+ return normalizeSuiObjectId(value);
2997
2955
  }
2998
2956
  return value;
2999
2957
  }
@@ -3488,7 +3446,6 @@ function parseRouterResponse(data, byAmountIn) {
3488
3446
  };
3489
3447
  }
3490
3448
  function parseMergeSwapResponse(data) {
3491
- var _a;
3492
3449
  let packages = /* @__PURE__ */ new Map();
3493
3450
  if (data.packages) {
3494
3451
  if (data.packages instanceof Map) {
@@ -3525,133 +3482,85 @@ function parseMergeSwapResponse(data) {
3525
3482
  }
3526
3483
  return {
3527
3484
  quoteID: data.request_id || "",
3528
- totalAmountOut: new import_bn2.default(((_a = data.total_amount_out) == null ? void 0 : _a.toString()) || "0"),
3485
+ totalAmountOut: new import_bn2.default(data.total_amount_out?.toString() || "0"),
3529
3486
  allRoutes,
3530
3487
  packages,
3531
3488
  gas: data.gas
3532
3489
  };
3533
3490
  }
3534
- function getRouterResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
3535
- return __async(this, null, function* () {
3536
- let response;
3537
- if (params.liquidityChanges && params.liquidityChanges.length > 0) {
3538
- response = yield postRouterWithLiquidityChanges(endpoint, params);
3539
- } else {
3540
- response = yield getRouter(endpoint, apiKey, params);
3541
- }
3542
- if (!response) {
3543
- return null;
3544
- }
3545
- if (!response.ok) {
3546
- let errorCode = 1004 /* BadRequest */;
3547
- if (response.status === 429) {
3548
- errorCode = 1001 /* RateLimitExceeded */;
3549
- }
3550
- return {
3551
- quoteID: "",
3552
- amountIn: ZERO,
3553
- amountOut: ZERO,
3554
- paths: [],
3555
- byAmountIn: params.byAmountIn,
3556
- insufficientLiquidity: false,
3557
- deviationRatio: 0,
3558
- error: {
3559
- code: errorCode,
3560
- msg: getAggregatorServerErrorMessage(errorCode)
3561
- }
3562
- };
3563
- }
3564
- const data = JSONbig__default.default.parse(yield response.text());
3565
- if (data.data != null) {
3566
- const res = parseRouterResponse(data.data, params.byAmountIn);
3567
- if (overlayFee > 0 && overlayFeeReceiver !== "0x0") {
3568
- if (params.byAmountIn) {
3569
- const overlayFeeAmount = res.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3570
- res.overlayFee = Number(overlayFeeAmount.toString());
3571
- res.amountOut = res.amountOut.sub(overlayFeeAmount);
3572
- } else {
3573
- const overlayFeeAmount = res.amountIn.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3574
- res.overlayFee = Number(overlayFeeAmount.toString());
3575
- res.amountIn = res.amountIn.add(overlayFeeAmount);
3576
- }
3577
- }
3578
- if (!res.packages) {
3579
- res.packages = /* @__PURE__ */ new Map();
3580
- }
3581
- if (!res.packages.has("aggregator_v3")) {
3582
- res.packages.set(
3583
- "aggregator_v3",
3584
- "0x3864c7c59a4889fec05d1aae4bc9dba5a0e0940594b424fbed44cb3f6ac4c032"
3585
- );
3586
- }
3587
- return res;
3491
+ async function getRouterResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
3492
+ let response;
3493
+ if (params.liquidityChanges && params.liquidityChanges.length > 0) {
3494
+ response = await postRouterWithLiquidityChanges(endpoint, params);
3495
+ } else {
3496
+ response = await getRouter(endpoint, apiKey, params);
3497
+ }
3498
+ if (!response) {
3499
+ return null;
3500
+ }
3501
+ if (!response.ok) {
3502
+ let errorCode = 1004 /* BadRequest */;
3503
+ if (response.status === 429) {
3504
+ errorCode = 1001 /* RateLimitExceeded */;
3588
3505
  }
3589
- const code = processErrorStatusCode(data.code);
3590
- const msg = getAggregatorServerErrorMessage(code, data.msg);
3591
- const insufficientLiquidity = msg.includes("Insufficient liquidity");
3592
3506
  return {
3593
3507
  quoteID: "",
3594
3508
  amountIn: ZERO,
3595
3509
  amountOut: ZERO,
3596
3510
  paths: [],
3597
- insufficientLiquidity,
3598
3511
  byAmountIn: params.byAmountIn,
3512
+ insufficientLiquidity: false,
3599
3513
  deviationRatio: 0,
3600
3514
  error: {
3601
- code,
3602
- msg
3515
+ code: errorCode,
3516
+ msg: getAggregatorServerErrorMessage(errorCode)
3603
3517
  }
3604
3518
  };
3605
- });
3606
- }
3607
- function getRouter(endpoint, apiKey, params) {
3608
- return __async(this, null, function* () {
3609
- try {
3610
- const {
3611
- from,
3612
- target,
3613
- amount,
3614
- byAmountIn,
3615
- depth,
3616
- splitAlgorithm,
3617
- splitFactor,
3618
- splitCount,
3619
- providers
3620
- } = params;
3621
- const fromCoin = completionCoin(from);
3622
- const targetCoin = completionCoin(target);
3623
- let url = `${endpoint}/find_routes?from=${fromCoin}&target=${targetCoin}&amount=${amount.toString()}&by_amount_in=${byAmountIn}`;
3624
- if (depth) {
3625
- url += `&depth=${depth}`;
3626
- }
3627
- if (splitAlgorithm) {
3628
- url += `&split_algorithm=${splitAlgorithm}`;
3629
- }
3630
- if (splitFactor) {
3631
- url += `&split_factor=${splitFactor}`;
3632
- }
3633
- if (splitCount) {
3634
- url += `&split_count=${splitCount}`;
3635
- }
3636
- if (providers) {
3637
- if (providers.length > 0) {
3638
- url += `&providers=${providers.join(",")}`;
3639
- }
3640
- }
3641
- if (apiKey.length > 0) {
3642
- url += `&apiKey=${apiKey}`;
3519
+ }
3520
+ const data = JSONbig.parse(await response.text());
3521
+ if (data.data != null) {
3522
+ const res = parseRouterResponse(data.data, params.byAmountIn);
3523
+ if (overlayFee > 0 && overlayFeeReceiver !== "0x0") {
3524
+ if (params.byAmountIn) {
3525
+ const overlayFeeAmount = res.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3526
+ res.overlayFee = Number(overlayFeeAmount.toString());
3527
+ res.amountOut = res.amountOut.sub(overlayFeeAmount);
3528
+ } else {
3529
+ const overlayFeeAmount = res.amountIn.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3530
+ res.overlayFee = Number(overlayFeeAmount.toString());
3531
+ res.amountIn = res.amountIn.add(overlayFeeAmount);
3643
3532
  }
3644
- url += `&v=${SDK_VERSION}`;
3645
- const response = yield fetch(url);
3646
- return response;
3647
- } catch (error) {
3648
- console.error(error);
3649
- return null;
3650
3533
  }
3651
- });
3534
+ if (!res.packages) {
3535
+ res.packages = /* @__PURE__ */ new Map();
3536
+ }
3537
+ if (!res.packages.has("aggregator_v3")) {
3538
+ res.packages.set(
3539
+ "aggregator_v3",
3540
+ "0x3864c7c59a4889fec05d1aae4bc9dba5a0e0940594b424fbed44cb3f6ac4c032"
3541
+ );
3542
+ }
3543
+ return res;
3544
+ }
3545
+ const code = processErrorStatusCode(data.code);
3546
+ const msg = getAggregatorServerErrorMessage(code, data.msg);
3547
+ const insufficientLiquidity = msg.includes("Insufficient liquidity");
3548
+ return {
3549
+ quoteID: "",
3550
+ amountIn: ZERO,
3551
+ amountOut: ZERO,
3552
+ paths: [],
3553
+ insufficientLiquidity,
3554
+ byAmountIn: params.byAmountIn,
3555
+ deviationRatio: 0,
3556
+ error: {
3557
+ code,
3558
+ msg
3559
+ }
3560
+ };
3652
3561
  }
3653
- function postRouterWithLiquidityChanges(endpoint, params) {
3654
- return __async(this, null, function* () {
3562
+ async function getRouter(endpoint, apiKey, params) {
3563
+ try {
3655
3564
  const {
3656
3565
  from,
3657
3566
  target,
@@ -3661,154 +3570,190 @@ function postRouterWithLiquidityChanges(endpoint, params) {
3661
3570
  splitAlgorithm,
3662
3571
  splitFactor,
3663
3572
  splitCount,
3664
- providers,
3665
- liquidityChanges
3573
+ providers
3666
3574
  } = params;
3667
3575
  const fromCoin = completionCoin(from);
3668
3576
  const targetCoin = completionCoin(target);
3669
- const url = `${endpoint}/find_routes`;
3670
- const providersStr = providers == null ? void 0 : providers.join(",");
3671
- const requestData = {
3672
- from: fromCoin,
3673
- target: targetCoin,
3674
- amount: Number(amount.toString()),
3675
- by_amount_in: byAmountIn,
3676
- depth,
3677
- split_algorithm: splitAlgorithm,
3678
- split_factor: splitFactor,
3679
- split_count: splitCount,
3680
- providers: providersStr,
3681
- liquidity_changes: liquidityChanges.map((change) => ({
3682
- pool: change.poolID,
3683
- tick_lower: change.ticklower,
3684
- tick_upper: change.tickUpper,
3685
- delta_liquidity: change.deltaLiquidity
3686
- })),
3687
- v: SDK_VERSION
3688
- };
3689
- try {
3690
- const response = yield fetch(url, {
3691
- method: "POST",
3692
- headers: {
3693
- "Content-Type": "application/json"
3694
- },
3695
- body: JSON.stringify(requestData)
3696
- });
3697
- return response;
3698
- } catch (error) {
3699
- console.error("Error:", error);
3700
- return null;
3577
+ let url = `${endpoint}/find_routes?from=${fromCoin}&target=${targetCoin}&amount=${amount.toString()}&by_amount_in=${byAmountIn}`;
3578
+ if (depth) {
3579
+ url += `&depth=${depth}`;
3701
3580
  }
3702
- });
3703
- }
3704
- function getMergeSwapRouter(endpoint, apiKey, params) {
3705
- return __async(this, null, function* () {
3706
- try {
3707
- const { target, byAmountIn, depth, providers, froms } = params;
3708
- const targetCoin = completionCoin(target);
3709
- let url = `${endpoint}/multi_find_routes?target=${targetCoin}&by_amount_in=${byAmountIn}`;
3710
- if (depth) {
3711
- url += `&depth=${depth}`;
3712
- }
3713
- if (providers && providers.length > 0) {
3581
+ if (splitAlgorithm) {
3582
+ url += `&split_algorithm=${splitAlgorithm}`;
3583
+ }
3584
+ if (splitFactor) {
3585
+ url += `&split_factor=${splitFactor}`;
3586
+ }
3587
+ if (splitCount) {
3588
+ url += `&split_count=${splitCount}`;
3589
+ }
3590
+ if (providers) {
3591
+ if (providers.length > 0) {
3714
3592
  url += `&providers=${providers.join(",")}`;
3715
3593
  }
3716
- if (apiKey.length > 0) {
3717
- url += `&apiKey=${apiKey}`;
3718
- }
3719
- url += `&v=${SDK_VERSION}`;
3720
- const fromsData = froms.map((from) => ({
3721
- coin_type: completionCoin(from.coinType),
3722
- amount: Number(from.amount.toString())
3723
- }));
3724
- url += `&froms=${encodeURIComponent(JSON.stringify(fromsData))}`;
3725
- const response = yield fetch(url);
3726
- console.log("response", response);
3727
- return response;
3728
- } catch (error) {
3729
- console.error(error);
3730
- return null;
3731
3594
  }
3732
- });
3733
- }
3734
- function getMergeSwapResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
3735
- return __async(this, null, function* () {
3736
- const response = yield getMergeSwapRouter(endpoint, apiKey, params);
3737
- if (!response) {
3738
- return null;
3595
+ if (apiKey.length > 0) {
3596
+ url += `&apiKey=${apiKey}`;
3739
3597
  }
3740
- if (!response.ok) {
3741
- let errorCode = 1004 /* BadRequest */;
3742
- if (response.status === 429) {
3743
- errorCode = 1001 /* RateLimitExceeded */;
3744
- }
3745
- return {
3746
- quoteID: "",
3747
- totalAmountOut: ZERO,
3748
- allRoutes: [],
3749
- error: {
3750
- code: errorCode,
3751
- msg: getAggregatorServerErrorMessage(errorCode)
3752
- }
3753
- };
3598
+ url += `&v=${SDK_VERSION}`;
3599
+ const response = await fetch(url);
3600
+ return response;
3601
+ } catch (error) {
3602
+ console.error(error);
3603
+ return null;
3604
+ }
3605
+ }
3606
+ async function postRouterWithLiquidityChanges(endpoint, params) {
3607
+ const {
3608
+ from,
3609
+ target,
3610
+ amount,
3611
+ byAmountIn,
3612
+ depth,
3613
+ splitAlgorithm,
3614
+ splitFactor,
3615
+ splitCount,
3616
+ providers,
3617
+ liquidityChanges
3618
+ } = params;
3619
+ const fromCoin = completionCoin(from);
3620
+ const targetCoin = completionCoin(target);
3621
+ const url = `${endpoint}/find_routes`;
3622
+ const providersStr = providers?.join(",");
3623
+ const requestData = {
3624
+ from: fromCoin,
3625
+ target: targetCoin,
3626
+ amount: Number(amount.toString()),
3627
+ by_amount_in: byAmountIn,
3628
+ depth,
3629
+ split_algorithm: splitAlgorithm,
3630
+ split_factor: splitFactor,
3631
+ split_count: splitCount,
3632
+ providers: providersStr,
3633
+ liquidity_changes: liquidityChanges.map((change) => ({
3634
+ pool: change.poolID,
3635
+ tick_lower: change.ticklower,
3636
+ tick_upper: change.tickUpper,
3637
+ delta_liquidity: change.deltaLiquidity
3638
+ })),
3639
+ v: SDK_VERSION
3640
+ };
3641
+ try {
3642
+ const response = await fetch(url, {
3643
+ method: "POST",
3644
+ headers: {
3645
+ "Content-Type": "application/json"
3646
+ },
3647
+ body: JSON.stringify(requestData)
3648
+ });
3649
+ return response;
3650
+ } catch (error) {
3651
+ console.error("Error:", error);
3652
+ return null;
3653
+ }
3654
+ }
3655
+ async function getMergeSwapRouter(endpoint, apiKey, params) {
3656
+ try {
3657
+ const { target, byAmountIn, depth, providers, froms } = params;
3658
+ const targetCoin = completionCoin(target);
3659
+ let url = `${endpoint}/multi_find_routes?target=${targetCoin}&by_amount_in=${byAmountIn}`;
3660
+ if (depth) {
3661
+ url += `&depth=${depth}`;
3662
+ }
3663
+ if (providers && providers.length > 0) {
3664
+ url += `&providers=${providers.join(",")}`;
3665
+ }
3666
+ if (apiKey.length > 0) {
3667
+ url += `&apiKey=${apiKey}`;
3668
+ }
3669
+ url += `&v=${SDK_VERSION}`;
3670
+ const fromsData = froms.map((from) => ({
3671
+ coin_type: completionCoin(from.coinType),
3672
+ amount: Number(from.amount.toString())
3673
+ }));
3674
+ url += `&froms=${encodeURIComponent(JSON.stringify(fromsData))}`;
3675
+ const response = await fetch(url);
3676
+ console.log("response", response);
3677
+ return response;
3678
+ } catch (error) {
3679
+ console.error(error);
3680
+ return null;
3681
+ }
3682
+ }
3683
+ async function getMergeSwapResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
3684
+ const response = await getMergeSwapRouter(endpoint, apiKey, params);
3685
+ if (!response) {
3686
+ return null;
3687
+ }
3688
+ if (!response.ok) {
3689
+ let errorCode = 1004 /* BadRequest */;
3690
+ if (response.status === 429) {
3691
+ errorCode = 1001 /* RateLimitExceeded */;
3754
3692
  }
3755
- if (!response.ok) {
3756
- const code2 = processErrorStatusCode(response.status);
3757
- const responseText2 = yield response.text();
3758
- const data2 = JSONbig__default.default.parse(responseText2);
3759
- const msg2 = getAggregatorServerErrorMessage(code2, data2.msg);
3760
- return {
3761
- quoteID: "",
3762
- totalAmountOut: ZERO,
3763
- allRoutes: [],
3764
- error: {
3765
- code: code2,
3766
- msg: msg2
3767
- }
3768
- };
3769
- }
3770
- const responseText = yield response.text();
3771
- const data = JSONbig__default.default.parse(responseText);
3772
- if (data.data != null) {
3773
- console.log("data.data not null", data.data);
3774
- const res = parseMergeSwapResponse(data.data);
3775
- if (overlayFee > 0 && overlayFeeReceiver !== "0x0" && params.byAmountIn) {
3776
- const overlayFeeAmount = res.totalAmountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3777
- res.totalAmountOut = res.totalAmountOut.sub(overlayFeeAmount);
3778
- for (const route of res.allRoutes) {
3779
- const routeFee = route.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3780
- route.amountOut = route.amountOut.sub(routeFee);
3781
- }
3782
- }
3783
- if (!res.packages) {
3784
- res.packages = /* @__PURE__ */ new Map();
3693
+ return {
3694
+ quoteID: "",
3695
+ totalAmountOut: ZERO,
3696
+ allRoutes: [],
3697
+ error: {
3698
+ code: errorCode,
3699
+ msg: getAggregatorServerErrorMessage(errorCode)
3785
3700
  }
3786
- return res;
3787
- }
3788
- const code = processErrorStatusCode(data.code);
3789
- const msg = getAggregatorServerErrorMessage(code, data.msg);
3701
+ };
3702
+ }
3703
+ if (!response.ok) {
3704
+ const code2 = processErrorStatusCode(response.status);
3705
+ const responseText2 = await response.text();
3706
+ const data2 = JSONbig.parse(responseText2);
3707
+ const msg2 = getAggregatorServerErrorMessage(code2, data2.msg);
3790
3708
  return {
3791
3709
  quoteID: "",
3792
3710
  totalAmountOut: ZERO,
3793
3711
  allRoutes: [],
3794
3712
  error: {
3795
- code,
3796
- msg
3713
+ code: code2,
3714
+ msg: msg2
3797
3715
  }
3798
3716
  };
3799
- });
3800
- }
3801
- function getDeepbookV3Config(endpoint) {
3802
- return __async(this, null, function* () {
3803
- const url = `${endpoint}/deepbookv3_config`;
3804
- try {
3805
- const response = yield fetch(url);
3806
- return response.json();
3807
- } catch (error) {
3808
- console.error("Error:", error);
3809
- return null;
3717
+ }
3718
+ const responseText = await response.text();
3719
+ const data = JSONbig.parse(responseText);
3720
+ if (data.data != null) {
3721
+ console.log("data.data not null", data.data);
3722
+ const res = parseMergeSwapResponse(data.data);
3723
+ if (overlayFee > 0 && overlayFeeReceiver !== "0x0" && params.byAmountIn) {
3724
+ const overlayFeeAmount = res.totalAmountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3725
+ res.totalAmountOut = res.totalAmountOut.sub(overlayFeeAmount);
3726
+ for (const route of res.allRoutes) {
3727
+ const routeFee = route.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
3728
+ route.amountOut = route.amountOut.sub(routeFee);
3729
+ }
3810
3730
  }
3811
- });
3731
+ if (!res.packages) {
3732
+ res.packages = /* @__PURE__ */ new Map();
3733
+ }
3734
+ return res;
3735
+ }
3736
+ const code = processErrorStatusCode(data.code);
3737
+ const msg = getAggregatorServerErrorMessage(code, data.msg);
3738
+ return {
3739
+ quoteID: "",
3740
+ totalAmountOut: ZERO,
3741
+ allRoutes: [],
3742
+ error: {
3743
+ code,
3744
+ msg
3745
+ }
3746
+ };
3747
+ }
3748
+ async function getDeepbookV3Config(endpoint) {
3749
+ const url = `${endpoint}/deepbookv3_config`;
3750
+ try {
3751
+ const response = await fetch(url);
3752
+ return response.json();
3753
+ } catch (error) {
3754
+ console.error("Error:", error);
3755
+ return null;
3756
+ }
3812
3757
  }
3813
3758
  function processFlattenRoutes(routerData) {
3814
3759
  const paths = routerData.paths;
@@ -6105,7 +6050,7 @@ function CalculateAmountLimitByDecimal(expectAmount, byAmountIn, slippage) {
6105
6050
  var CetusRouter = class {
6106
6051
  constructor(env, partner) {
6107
6052
  this.globalConfig = env === 0 /* Mainnet */ ? "0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f" : "0xc6273f844b4bc258952c4e477697aa12c918c8e08106fac6b934811298c9820a";
6108
- this.partner = partner != null ? partner : env === 0 /* Mainnet */ ? "0x639b5e433da31739e800cd085f356e64cae222966d0f1b11bd9dc76b322ff58b" : "0xfdc30896f88f74544fd507722d3bf52e46b06412ba8241ba0e854cbc65f8d85f";
6053
+ this.partner = partner ?? (env === 0 /* Mainnet */ ? "0x639b5e433da31739e800cd085f356e64cae222966d0f1b11bd9dc76b322ff58b" : "0xfdc30896f88f74544fd507722d3bf52e46b06412ba8241ba0e854cbc65f8d85f");
6109
6054
  }
6110
6055
  // By amount in
6111
6056
  swap(txb, flattenedPath, swapContext, _extends) {
@@ -6136,7 +6081,7 @@ var CetusRouter = class {
6136
6081
  txb.object(this.partner),
6137
6082
  txb.pure.bool(swapData.direction),
6138
6083
  txb.pure.u64(swapData.amountIn),
6139
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6084
+ txb.object(SUI_CLOCK_OBJECT_ID)
6140
6085
  ];
6141
6086
  txb.moveCall({
6142
6087
  target: `${swapData.publishedAt}::cetus::swap`,
@@ -6155,7 +6100,7 @@ var CetusRouter = class {
6155
6100
  txb.pure.bool(path.direction),
6156
6101
  txb.pure.bool(false),
6157
6102
  // isExactIn
6158
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6103
+ txb.object(SUI_CLOCK_OBJECT_ID)
6159
6104
  ];
6160
6105
  const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
6161
6106
  const [flashReceipt, repayAmount] = txb.moveCall({
@@ -6238,7 +6183,7 @@ var KriyaV3Router = class {
6238
6183
  txb.object(this.version),
6239
6184
  txb.pure.bool(swapData.direction),
6240
6185
  txb.pure.u64(swapData.amountIn),
6241
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6186
+ txb.object(SUI_CLOCK_OBJECT_ID)
6242
6187
  ];
6243
6188
  txb.moveCall({
6244
6189
  target: `${swapData.publishedAt}::kriya_clmm::swap`,
@@ -6285,7 +6230,7 @@ var FlowxV3Router = class {
6285
6230
  txb.pure.u64(swapData.feeRate),
6286
6231
  txb.pure.u64(swapData.amountIn),
6287
6232
  txb.pure.bool(swapData.direction),
6288
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6233
+ txb.object(SUI_CLOCK_OBJECT_ID)
6289
6234
  ];
6290
6235
  txb.moveCall({
6291
6236
  target: `${swapData.publishedAt}::flowx_clmm::swap`,
@@ -6337,7 +6282,7 @@ var TurbosRouter = class {
6337
6282
  txb.object(this.versioned),
6338
6283
  txb.pure.bool(swapData.direction),
6339
6284
  txb.pure.u64(swapData.amountIn),
6340
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6285
+ txb.object(SUI_CLOCK_OBJECT_ID)
6341
6286
  ];
6342
6287
  txb.moveCall({
6343
6288
  target: `${swapData.publishedAt}::turbos::swap`,
@@ -6380,7 +6325,7 @@ var BluefinRouter = class {
6380
6325
  txb.object(swapData.poolId),
6381
6326
  txb.pure.bool(swapData.direction),
6382
6327
  txb.pure.u64(swapData.amountIn),
6383
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6328
+ txb.object(SUI_CLOCK_OBJECT_ID)
6384
6329
  ];
6385
6330
  txb.moveCall({
6386
6331
  target: `${swapData.publishedAt}::bluefin::swap`,
@@ -6423,7 +6368,7 @@ var MomentumRouter = class {
6423
6368
  txb.pure.bool(swapData.direction),
6424
6369
  txb.pure.u64(swapData.amountIn),
6425
6370
  txb.object(this.version),
6426
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6371
+ txb.object(SUI_CLOCK_OBJECT_ID)
6427
6372
  ];
6428
6373
  txb.moveCall({
6429
6374
  target: `${swapData.publishedAt}::momentum::swap`,
@@ -6466,7 +6411,7 @@ var MagmaRouter = class {
6466
6411
  txb.object(swapData.poolId),
6467
6412
  txb.pure.bool(swapData.direction),
6468
6413
  txb.pure.u64(swapData.amountIn),
6469
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6414
+ txb.object(SUI_CLOCK_OBJECT_ID)
6470
6415
  ];
6471
6416
  txb.moveCall({
6472
6417
  target: `${swapData.publishedAt}::magma::swap`,
@@ -6619,17 +6564,16 @@ var DeepbookV3Router = class {
6619
6564
  this.executeSwapContract(txb, swapData, swapContext, _extends);
6620
6565
  }
6621
6566
  prepareSwapData(flattenedPath) {
6622
- var _a, _b, _c, _d, _e;
6623
6567
  if (flattenedPath.path.publishedAt == null) {
6624
6568
  throw new Error("DeepBook V3 not set publishedAt");
6625
6569
  }
6626
6570
  const path = flattenedPath.path;
6627
6571
  const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
6628
6572
  const amountIn = flattenedPath.isLastUseOfIntermediateToken ? AGGREGATOR_V3_CONFIG.MAX_AMOUNT_IN : path.amountIn;
6629
- const needAddDeepPricePoint = (_b = (_a = path.extendedDetails) == null ? void 0 : _a.deepbookv3_need_add_deep_price_point) != null ? _b : false;
6630
- const referencePoolId = (_c = path.extendedDetails) == null ? void 0 : _c.deepbookv3_reference_pool_id;
6631
- const referencePoolBaseType = (_d = path.extendedDetails) == null ? void 0 : _d.deepbookv3_reference_pool_base_type;
6632
- const referencePoolQuoteType = (_e = path.extendedDetails) == null ? void 0 : _e.deepbookv3_reference_pool_quote_type;
6573
+ const needAddDeepPricePoint = path.extendedDetails?.deepbookv3_need_add_deep_price_point ?? false;
6574
+ const referencePoolId = path.extendedDetails?.deepbookv3_reference_pool_id;
6575
+ const referencePoolBaseType = path.extendedDetails?.deepbookv3_reference_pool_base_type;
6576
+ const referencePoolQuoteType = path.extendedDetails?.deepbookv3_reference_pool_quote_type;
6633
6577
  if (needAddDeepPricePoint) {
6634
6578
  if (!referencePoolId) {
6635
6579
  throw new Error(
@@ -6672,12 +6616,12 @@ var DeepbookV3Router = class {
6672
6616
  arguments: [
6673
6617
  txb.object(swapData.poolId),
6674
6618
  txb.object(swapData.referencePoolId),
6675
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6619
+ txb.object(SUI_CLOCK_OBJECT_ID)
6676
6620
  ]
6677
6621
  });
6678
6622
  }
6679
6623
  executeSwapContract(txb, swapData, swapContext, _extends) {
6680
- const deepCoin = (_extends == null ? void 0 : _extends.deepbookv3DeepFee) || txb.moveCall({
6624
+ const deepCoin = _extends?.deepbookv3DeepFee || txb.moveCall({
6681
6625
  target: "0x2::coin::zero",
6682
6626
  typeArguments: [this.getDeepFeeType()]
6683
6627
  });
@@ -6688,7 +6632,7 @@ var DeepbookV3Router = class {
6688
6632
  txb.pure.u64(swapData.amountIn),
6689
6633
  txb.pure.bool(swapData.direction),
6690
6634
  deepCoin,
6691
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6635
+ txb.object(SUI_CLOCK_OBJECT_ID)
6692
6636
  ];
6693
6637
  txb.moveCall({
6694
6638
  target: `${swapData.publishedAt}::deepbookv3::swap`,
@@ -6718,7 +6662,6 @@ var AftermathRouter = class {
6718
6662
  this.executeSwapContract(txb, swapData, swapContext);
6719
6663
  }
6720
6664
  prepareSwapData(flattenedPath) {
6721
- var _a, _b;
6722
6665
  if (flattenedPath.path.publishedAt == null) {
6723
6666
  throw new Error("Aftermath not set publishedAt");
6724
6667
  }
@@ -6728,7 +6671,7 @@ var AftermathRouter = class {
6728
6671
  return {
6729
6672
  coinAType,
6730
6673
  coinBType,
6731
- feeType: ((_a = path.extendedDetails) == null ? void 0 : _a.aftermath_lp_supply_type) || ((_b = path.extendedDetails) == null ? void 0 : _b.aftermath_lp_supply_type) || "0x2::sui::SUI",
6674
+ feeType: path.extendedDetails?.aftermath_lp_supply_type || path.extendedDetails?.aftermath_lp_supply_type || "0x2::sui::SUI",
6732
6675
  // Use LP supply type from path (handle both camelCase and snake_case)
6733
6676
  direction: path.direction,
6734
6677
  amountIn,
@@ -6825,7 +6768,7 @@ var SteammCPMMRouter = class {
6825
6768
  txb.object(swapData.extendedDetails.steamm_lending_market),
6826
6769
  txb.pure.bool(swapData.direction),
6827
6770
  txb.pure.u64(swapData.amountIn),
6828
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6771
+ txb.object(SUI_CLOCK_OBJECT_ID)
6829
6772
  ];
6830
6773
  txb.moveCall({
6831
6774
  target: `${swapData.publishedAt}::steamm_cpmm::swap`,
@@ -6884,7 +6827,7 @@ var ScallopRouter = class {
6884
6827
  txb.object(this.marketData),
6885
6828
  txb.object(swapData.scallopScoinTreasury),
6886
6829
  txb.pure.u64(swapData.amountIn),
6887
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6830
+ txb.object(SUI_CLOCK_OBJECT_ID)
6888
6831
  ];
6889
6832
  const func = swapData.direction ? "swap_a2b" : "swap_b2a";
6890
6833
  txb.moveCall({
@@ -7000,7 +6943,7 @@ var HaedalPmmRouter = class {
7000
6943
  // amount_in
7001
6944
  txb.pure.bool(swapData.a2b),
7002
6945
  // a2b
7003
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6946
+ txb.object(SUI_CLOCK_OBJECT_ID)
7004
6947
  // clock
7005
6948
  ];
7006
6949
  txb.moveCall({
@@ -7074,7 +7017,7 @@ var ObricRouter = class {
7074
7017
  txb.object(this.pythStateObjectId),
7075
7018
  txb.object(swapData.coinAPriceInfoObjectId),
7076
7019
  txb.object(swapData.coinBPriceInfoObjectId),
7077
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7020
+ txb.object(SUI_CLOCK_OBJECT_ID)
7078
7021
  ];
7079
7022
  txb.moveCall({
7080
7023
  target: `${swapData.publishedAt}::obric::swap`,
@@ -7149,7 +7092,7 @@ var SevenkRouter = class {
7149
7092
  txb.object(swapData.coinAOracleId),
7150
7093
  holder,
7151
7094
  txb.object(swapData.coinAPriceId),
7152
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7095
+ txb.object(SUI_CLOCK_OBJECT_ID)
7153
7096
  ]
7154
7097
  });
7155
7098
  txb.moveCall({
@@ -7159,7 +7102,7 @@ var SevenkRouter = class {
7159
7102
  txb.object(swapData.coinBOracleId),
7160
7103
  holder,
7161
7104
  txb.object(swapData.coinBPriceId),
7162
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7105
+ txb.object(SUI_CLOCK_OBJECT_ID)
7163
7106
  ]
7164
7107
  });
7165
7108
  const args = [
@@ -7256,7 +7199,7 @@ var SteammOmmRouter = class {
7256
7199
  txb.object(extendedDetails.steammOracleRegistryId),
7257
7200
  txb.object(swapData.priceInfoObjectIdA),
7258
7201
  txb.pure.u64(extendedDetails.steammOracleIndexA),
7259
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7202
+ txb.object(SUI_CLOCK_OBJECT_ID)
7260
7203
  ]
7261
7204
  });
7262
7205
  const oraclePriceUpdateB = txb.moveCall({
@@ -7266,7 +7209,7 @@ var SteammOmmRouter = class {
7266
7209
  txb.object(extendedDetails.steammOracleRegistryId),
7267
7210
  txb.object(swapData.priceInfoObjectIdB),
7268
7211
  txb.pure.u64(extendedDetails.steammOracleIndexB),
7269
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7212
+ txb.object(SUI_CLOCK_OBJECT_ID)
7270
7213
  ]
7271
7214
  });
7272
7215
  const args = [
@@ -7278,7 +7221,7 @@ var SteammOmmRouter = class {
7278
7221
  oraclePriceUpdateA,
7279
7222
  oraclePriceUpdateB,
7280
7223
  txb.pure.u64(swapData.amountIn),
7281
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7224
+ txb.object(SUI_CLOCK_OBJECT_ID)
7282
7225
  ];
7283
7226
  txb.moveCall({
7284
7227
  target: `${swapData.publishedAt}::steamm_omm::${swapData.func}`,
@@ -7374,7 +7317,7 @@ var SteammOmmV2Router = class {
7374
7317
  txb.object(extendedDetails.steamm_oracle_registry_id),
7375
7318
  txb.object(swapData.priceInfoObjectIdA),
7376
7319
  txb.pure.u64(extendedDetails.steamm_oracle_index_a),
7377
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7320
+ txb.object(SUI_CLOCK_OBJECT_ID)
7378
7321
  ]
7379
7322
  });
7380
7323
  const oraclePriceUpdateB = txb.moveCall({
@@ -7384,7 +7327,7 @@ var SteammOmmV2Router = class {
7384
7327
  txb.object(extendedDetails.steamm_oracle_registry_id),
7385
7328
  txb.object(swapData.priceInfoObjectIdB),
7386
7329
  txb.pure.u64(extendedDetails.steamm_oracle_index_b),
7387
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7330
+ txb.object(SUI_CLOCK_OBJECT_ID)
7388
7331
  ]
7389
7332
  });
7390
7333
  const args = [
@@ -7397,7 +7340,7 @@ var SteammOmmV2Router = class {
7397
7340
  oraclePriceUpdateB,
7398
7341
  txb.pure.bool(swapData.direction),
7399
7342
  txb.pure.u64(swapData.amountIn),
7400
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7343
+ txb.object(SUI_CLOCK_OBJECT_ID)
7401
7344
  ];
7402
7345
  txb.moveCall({
7403
7346
  target: `${swapData.publishedAt}::steamm_omm_v2::swap`,
@@ -7501,7 +7444,7 @@ var MetastableRouter = class {
7501
7444
  }
7502
7445
  depositArgs.push(txb.object(priceId));
7503
7446
  }
7504
- depositArgs.push(txb.object(utils.SUI_CLOCK_OBJECT_ID));
7447
+ depositArgs.push(txb.object(SUI_CLOCK_OBJECT_ID));
7505
7448
  break;
7506
7449
  }
7507
7450
  default:
@@ -7662,7 +7605,7 @@ var AfsuiRouter = class {
7662
7605
  txb.object("0x5"),
7663
7606
  // SuiSystemState
7664
7607
  txb.object(this.referVault),
7665
- txb.object(this.validator),
7608
+ txb.pure.address(this.validator),
7666
7609
  txb.pure.bool(swapData.direction),
7667
7610
  txb.pure.u64(swapData.amountIn)
7668
7611
  ];
@@ -7752,7 +7695,7 @@ var HawalRouter = class {
7752
7695
  swapContext,
7753
7696
  txb.object(this.staking),
7754
7697
  txb.object(swapData.poolId),
7755
- txb.object(this.validator),
7698
+ txb.pure.address(this.validator),
7756
7699
  txb.pure.bool(swapData.direction),
7757
7700
  txb.pure.u64(swapData.amountIn)
7758
7701
  ];
@@ -7872,6 +7815,221 @@ function transferOrDestroyCoin(params, txb) {
7872
7815
  arguments: [coin]
7873
7816
  });
7874
7817
  }
7818
+ var MAX_ARGUMENT_SIZE = 16 * 1024;
7819
+ var PythAdapter = class {
7820
+ constructor(client, pythStateId, wormholeStateId, hermesUrls) {
7821
+ this.priceFeedObjectIdCache = /* @__PURE__ */ new Map();
7822
+ this.client = client;
7823
+ this.pythStateId = pythStateId;
7824
+ this.wormholeStateId = wormholeStateId;
7825
+ const urls = [...hermesUrls];
7826
+ if (!urls.includes("https://hermes.pyth.network")) {
7827
+ urls.push("https://hermes.pyth.network");
7828
+ }
7829
+ this.hermesClients = urls.map(
7830
+ (url) => new HermesClient(url, { timeout: 3e3 })
7831
+ );
7832
+ }
7833
+ async getPriceFeedsUpdateData(priceIDs) {
7834
+ let lastError = null;
7835
+ for (const hermes of this.hermesClients) {
7836
+ try {
7837
+ const response = await hermes.getLatestPriceUpdates(priceIDs, {
7838
+ encoding: "hex"
7839
+ });
7840
+ return response.binary.data.map((hex) => Buffer.from(hex, "hex"));
7841
+ } catch (e) {
7842
+ lastError = e;
7843
+ continue;
7844
+ }
7845
+ }
7846
+ throw new Error(
7847
+ `All Pyth Hermes endpoints are unavailable. Detailed error: ${lastError?.message}`
7848
+ );
7849
+ }
7850
+ async getBaseUpdateFee() {
7851
+ if (this.baseUpdateFee !== void 0) {
7852
+ return this.baseUpdateFee;
7853
+ }
7854
+ const res = await this.client.getObject({
7855
+ id: this.pythStateId,
7856
+ options: { showContent: true }
7857
+ });
7858
+ const content = res.data?.content;
7859
+ const json = content && "fields" in content ? content.fields : null;
7860
+ if (!json) {
7861
+ throw new Error("Unable to fetch pyth state object");
7862
+ }
7863
+ this.baseUpdateFee = Number(json.base_update_fee);
7864
+ return this.baseUpdateFee;
7865
+ }
7866
+ async getPackageId(objectId) {
7867
+ const res = await this.client.getObject({
7868
+ id: objectId,
7869
+ options: { showContent: true }
7870
+ });
7871
+ const content = res.data?.content;
7872
+ const json = content && "fields" in content ? content.fields : null;
7873
+ if (!json) {
7874
+ throw new Error(`Cannot fetch package id for object ${objectId}`);
7875
+ }
7876
+ if ("upgrade_cap" in json) {
7877
+ const upgradeCap = json.upgrade_cap;
7878
+ const packageId = upgradeCap?.fields?.package;
7879
+ if (typeof packageId === "string") {
7880
+ return packageId;
7881
+ }
7882
+ }
7883
+ throw new Error("upgrade_cap not found");
7884
+ }
7885
+ async getWormholePackageId() {
7886
+ if (!this.wormholePackageId) {
7887
+ this.wormholePackageId = await this.getPackageId(this.wormholeStateId);
7888
+ }
7889
+ return this.wormholePackageId;
7890
+ }
7891
+ async getPythPackageId() {
7892
+ if (!this.pythPackageId) {
7893
+ this.pythPackageId = await this.getPackageId(this.pythStateId);
7894
+ }
7895
+ return this.pythPackageId;
7896
+ }
7897
+ async getPriceFeedObjectId(feedId) {
7898
+ const normalizedFeedId = feedId.replace("0x", "");
7899
+ if (this.priceFeedObjectIdCache.has(normalizedFeedId)) {
7900
+ return this.priceFeedObjectIdCache.get(normalizedFeedId);
7901
+ }
7902
+ const { id: tableId, fieldType } = await this.getPriceTableInfo();
7903
+ const feedIdBytes = Buffer.from(normalizedFeedId, "hex");
7904
+ try {
7905
+ const result = await this.client.getDynamicFieldObject({
7906
+ parentId: tableId,
7907
+ name: {
7908
+ type: `${fieldType}::price_identifier::PriceIdentifier`,
7909
+ value: { bytes: Array.from(feedIdBytes) }
7910
+ }
7911
+ });
7912
+ const content = result.data?.content;
7913
+ const json = content && "fields" in content ? content.fields : null;
7914
+ const objectId = typeof json?.value === "string" ? json.value : void 0;
7915
+ if (!objectId) {
7916
+ return void 0;
7917
+ }
7918
+ this.priceFeedObjectIdCache.set(normalizedFeedId, objectId);
7919
+ return objectId;
7920
+ } catch {
7921
+ return void 0;
7922
+ }
7923
+ }
7924
+ async getPriceTableInfo() {
7925
+ if (this.priceTableInfo !== void 0) {
7926
+ return this.priceTableInfo;
7927
+ }
7928
+ const result = await this.client.getDynamicFieldObject({
7929
+ parentId: this.pythStateId,
7930
+ name: {
7931
+ type: "vector<u8>",
7932
+ value: "price_info"
7933
+ }
7934
+ });
7935
+ if (!result.data?.type) {
7936
+ throw new Error(
7937
+ "Price Table not found, contract may not be initialized"
7938
+ );
7939
+ }
7940
+ let type = result.data.type.replace("0x2::table::Table<", "");
7941
+ type = type.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>", "");
7942
+ this.priceTableInfo = { id: result.data.objectId, fieldType: type };
7943
+ return this.priceTableInfo;
7944
+ }
7945
+ extractVaaBytesFromAccumulatorMessage(accumulatorMessage) {
7946
+ const trailingPayloadSize = accumulatorMessage.readUint8(6);
7947
+ const vaaSizeOffset = 7 + trailingPayloadSize + 1;
7948
+ const vaaSize = accumulatorMessage.readUint16BE(vaaSizeOffset);
7949
+ const vaaOffset = vaaSizeOffset + 2;
7950
+ return accumulatorMessage.subarray(vaaOffset, vaaOffset + vaaSize);
7951
+ }
7952
+ async verifyVaas(vaas, tx) {
7953
+ const wormholePackageId = await this.getWormholePackageId();
7954
+ const verifiedVaas = [];
7955
+ for (const vaa of vaas) {
7956
+ const [verifiedVaa] = tx.moveCall({
7957
+ target: `${wormholePackageId}::vaa::parse_and_verify`,
7958
+ arguments: [
7959
+ tx.object(this.wormholeStateId),
7960
+ tx.pure(
7961
+ bcs.vector(bcs.u8()).serialize(Array.from(vaa), { maxSize: MAX_ARGUMENT_SIZE }).toBytes()
7962
+ ),
7963
+ tx.object(SUI_CLOCK_OBJECT_ID)
7964
+ ]
7965
+ });
7966
+ verifiedVaas.push(verifiedVaa);
7967
+ }
7968
+ return verifiedVaas;
7969
+ }
7970
+ async verifyVaasAndGetHotPotato(tx, updates, packageId) {
7971
+ if (updates.length > 1) {
7972
+ throw new Error(
7973
+ "SDK does not support sending multiple accumulator messages in a single transaction"
7974
+ );
7975
+ }
7976
+ const vaa = this.extractVaaBytesFromAccumulatorMessage(updates[0]);
7977
+ const verifiedVaas = await this.verifyVaas([vaa], tx);
7978
+ const [priceUpdatesHotPotato] = tx.moveCall({
7979
+ target: `${packageId}::pyth::create_authenticated_price_infos_using_accumulator`,
7980
+ arguments: [
7981
+ tx.object(this.pythStateId),
7982
+ tx.pure(
7983
+ bcs.vector(bcs.u8()).serialize(Array.from(updates[0]), { maxSize: MAX_ARGUMENT_SIZE }).toBytes()
7984
+ ),
7985
+ verifiedVaas[0],
7986
+ tx.object(SUI_CLOCK_OBJECT_ID)
7987
+ ]
7988
+ });
7989
+ return priceUpdatesHotPotato;
7990
+ }
7991
+ async updatePriceFeeds(tx, updates, feedIds) {
7992
+ const packageId = await this.getPythPackageId();
7993
+ let priceUpdatesHotPotato = await this.verifyVaasAndGetHotPotato(
7994
+ tx,
7995
+ updates,
7996
+ packageId
7997
+ );
7998
+ const baseUpdateFee = await this.getBaseUpdateFee();
7999
+ const coins = tx.splitCoins(
8000
+ tx.gas,
8001
+ feedIds.map(() => tx.pure.u64(baseUpdateFee))
8002
+ );
8003
+ const priceInfoObjects = [];
8004
+ let coinId = 0;
8005
+ for (const feedId of feedIds) {
8006
+ const priceInfoObjectId = await this.getPriceFeedObjectId(feedId);
8007
+ if (!priceInfoObjectId) {
8008
+ throw new Error(
8009
+ `Price feed ${feedId} not found, please create it first`
8010
+ );
8011
+ }
8012
+ priceInfoObjects.push(priceInfoObjectId);
8013
+ [priceUpdatesHotPotato] = tx.moveCall({
8014
+ target: `${packageId}::pyth::update_single_price_feed`,
8015
+ arguments: [
8016
+ tx.object(this.pythStateId),
8017
+ priceUpdatesHotPotato,
8018
+ tx.object(priceInfoObjectId),
8019
+ coins[coinId],
8020
+ tx.object(SUI_CLOCK_OBJECT_ID)
8021
+ ]
8022
+ });
8023
+ coinId++;
8024
+ }
8025
+ tx.moveCall({
8026
+ target: `${packageId}::hot_potato_vector::destroy`,
8027
+ arguments: [priceUpdatesHotPotato],
8028
+ typeArguments: [`${packageId}::price_info::PriceInfo`]
8029
+ });
8030
+ return priceInfoObjects;
8031
+ }
8032
+ };
7875
8033
 
7876
8034
  // src/utils/uuid.ts
7877
8035
  function generateDowngradeUuid6() {
@@ -7930,7 +8088,7 @@ function extractTimestampFromDowngradeUuid6(uuid) {
7930
8088
  const timestampHex = timeHigh + timeMid;
7931
8089
  const timestamp = parseInt(timestampHex, 16);
7932
8090
  return isNaN(timestamp) ? null : timestamp;
7933
- } catch (e) {
8091
+ } catch {
7934
8092
  return null;
7935
8093
  }
7936
8094
  }
@@ -7946,72 +8104,60 @@ function processEndpoint(endpoint) {
7946
8104
  }
7947
8105
 
7948
8106
  // src/utils/account_cap.ts
7949
- function getOrCreateAccountCap(txb, client, owner) {
7950
- return __async(this, null, function* () {
7951
- let accountCapStr = yield getAccountCap(client, owner);
7952
- if (accountCapStr !== null) {
7953
- return {
7954
- accountCap: txb.object(accountCapStr),
7955
- isCreate: false
7956
- };
7957
- }
7958
- const accountCap = txb.moveCall({
7959
- target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
7960
- typeArguments: [],
7961
- arguments: []
7962
- });
8107
+ async function getOrCreateAccountCap(txb, client, owner) {
8108
+ let accountCapStr = await getAccountCap(client, owner);
8109
+ if (accountCapStr !== null) {
7963
8110
  return {
7964
- accountCap,
7965
- isCreate: true
8111
+ accountCap: txb.object(accountCapStr),
8112
+ isCreate: false
7966
8113
  };
8114
+ }
8115
+ const accountCap = txb.moveCall({
8116
+ target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
8117
+ typeArguments: [],
8118
+ arguments: []
7967
8119
  });
8120
+ return {
8121
+ accountCap,
8122
+ isCreate: true
8123
+ };
7968
8124
  }
7969
- function getAccountCap(client, owner) {
7970
- return __async(this, null, function* () {
7971
- let limit = 50;
7972
- let cursor = null;
7973
- while (true) {
7974
- const ownedObjects = client.getOwnedObjects({
7975
- owner,
7976
- cursor,
7977
- limit,
7978
- filter: {
7979
- MoveModule: {
7980
- package: DEEPBOOK_PACKAGE_ID,
7981
- module: DEEPBOOK_CUSTODIAN_V2_MODULE
7982
- }
7983
- }
7984
- });
7985
- if (ownedObjects != null && ownedObjects.data != null) {
7986
- if (ownedObjects.data.length !== 0) {
7987
- return ownedObjects.data[0].data.objectId;
7988
- }
7989
- if (ownedObjects.data.length < 50) {
7990
- break;
7991
- }
7992
- } else {
7993
- break;
7994
- }
8125
+ async function getAccountCap(client, owner) {
8126
+ const limit = 50;
8127
+ let cursor = void 0;
8128
+ while (true) {
8129
+ const ownedObjects = await client.getOwnedObjects({
8130
+ owner,
8131
+ cursor,
8132
+ limit,
8133
+ filter: { StructType: `${DEEPBOOK_PACKAGE_ID}::${DEEPBOOK_CUSTODIAN_V2_MODULE}::AccountCap` }
8134
+ });
8135
+ if (ownedObjects.data.length !== 0) {
8136
+ return ownedObjects.data[0].data?.objectId ?? null;
7995
8137
  }
7996
- return null;
7997
- });
8138
+ if (!ownedObjects.hasNextPage) {
8139
+ break;
8140
+ }
8141
+ cursor = ownedObjects.nextCursor ?? void 0;
8142
+ }
8143
+ return null;
7998
8144
  }
7999
8145
 
8000
8146
  // src/utils/config.ts
8001
8147
  function getAggregatorV2PublishedAt(publishedAt, packages) {
8002
- if (packages == null ? void 0 : packages.has("aggregator_v2")) {
8148
+ if (packages?.has("aggregator_v2")) {
8003
8149
  return packages.get("aggregator_v2");
8004
8150
  }
8005
8151
  return publishedAt || PUBLISHED_ADDRESSES.V2.Mainnet;
8006
8152
  }
8007
8153
  function getAggregatorV2ExtendPublishedAt(publishedAt, packages) {
8008
- if (packages == null ? void 0 : packages.has("aggregator_v2_extend")) {
8154
+ if (packages?.has("aggregator_v2_extend")) {
8009
8155
  return packages.get("aggregator_v2_extend");
8010
8156
  }
8011
8157
  return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND.Mainnet;
8012
8158
  }
8013
8159
  function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
8014
- if (packages == null ? void 0 : packages.has("aggregator_v2_extend2")) {
8160
+ if (packages?.has("aggregator_v2_extend2")) {
8015
8161
  return packages.get("aggregator_v2_extend2");
8016
8162
  }
8017
8163
  return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND2.Mainnet;
@@ -8021,8 +8167,9 @@ function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
8021
8167
  var import_bn4 = __toESM(require_bn());
8022
8168
  function extractGasMetrics(result) {
8023
8169
  const effects = result.effects;
8024
- const success = effects.status.status === "success";
8025
- if (!success) {
8170
+ const isSuccess = !result.error && effects.status.status === "success";
8171
+ if (!isSuccess) {
8172
+ const errorMsg = result.error ?? effects.status.error ?? "Unknown error";
8026
8173
  return {
8027
8174
  computationCost: "0",
8028
8175
  storageCost: "0",
@@ -8032,27 +8179,27 @@ function extractGasMetrics(result) {
8032
8179
  gasUsed: "0",
8033
8180
  gasPrice: "0",
8034
8181
  success: false,
8035
- error: effects.status.error || "Unknown error"
8182
+ error: errorMsg
8036
8183
  };
8037
8184
  }
8038
8185
  const gasUsed = effects.gasUsed;
8039
8186
  return {
8040
- computationCost: gasUsed.computationCost || "0",
8041
- storageCost: gasUsed.storageCost || "0",
8042
- storageRebate: gasUsed.storageRebate || "0",
8043
- nonRefundableStorageFee: gasUsed.nonRefundableStorageFee || "0",
8187
+ computationCost: gasUsed.computationCost,
8188
+ storageCost: gasUsed.storageCost,
8189
+ storageRebate: gasUsed.storageRebate,
8190
+ nonRefundableStorageFee: gasUsed.nonRefundableStorageFee,
8044
8191
  totalGasCost: calculateTotalGasCost(gasUsed),
8045
- gasUsed: gasUsed.computationCost || "0",
8192
+ gasUsed: gasUsed.computationCost,
8046
8193
  gasPrice: "1000",
8047
8194
  // Standard Sui gas price in MIST
8048
8195
  success: true
8049
8196
  };
8050
8197
  }
8051
8198
  function calculateTotalGasCost(gasUsed) {
8052
- const computation = new import_bn4.default(gasUsed.computationCost || "0");
8053
- const storage = new import_bn4.default(gasUsed.storageCost || "0");
8054
- const rebate = new import_bn4.default(gasUsed.storageRebate || "0");
8055
- const nonRefundable = new import_bn4.default(gasUsed.nonRefundableStorageFee || "0");
8199
+ const computation = new import_bn4.default(gasUsed.computationCost);
8200
+ const storage = new import_bn4.default(gasUsed.storageCost);
8201
+ const rebate = new import_bn4.default(gasUsed.storageRebate);
8202
+ const nonRefundable = new import_bn4.default(gasUsed.nonRefundableStorageFee);
8056
8203
  return computation.add(storage).sub(rebate).add(nonRefundable).toString();
8057
8204
  }
8058
8205
  function calculateGasEfficiency(amountOut, totalGasCost) {
@@ -8094,12 +8241,12 @@ function calculateAverageGas(analyses) {
8094
8241
  }
8095
8242
  function formatGasMetrics(metrics, isEstimated) {
8096
8243
  if (!metrics.success) {
8097
- return `\u274C Failed: ${metrics.error}`;
8244
+ return `Failed: ${metrics.error}`;
8098
8245
  }
8099
8246
  const totalGas = Number(metrics.totalGasCost);
8100
8247
  const gasInSui = totalGas / 1e9;
8101
8248
  const estimatedFlag = isEstimated ? " (estimated)" : "";
8102
- return `\u2705 Gas: ${totalGas.toString()} MIST (${gasInSui.toString()} SUI)${estimatedFlag}`;
8249
+ return `Gas: ${totalGas.toString()} MIST (${gasInSui.toString()} SUI)${estimatedFlag}`;
8103
8250
  }
8104
8251
  function exportToJSON(comparison) {
8105
8252
  return JSON.stringify(comparison, null, 2);
@@ -8167,63 +8314,62 @@ function exportToCSV(comparison) {
8167
8314
  // src/utils/msafe.ts
8168
8315
  var import_bn5 = __toESM(require_bn());
8169
8316
  var dealWithFastRouterSwapParamsForMsafe = (data) => {
8170
- var _a, _b, _c;
8171
- const result = __spreadProps(__spreadValues({}, data), {
8172
- amountIn: (_a = data == null ? void 0 : data.amountIn) == null ? void 0 : _a.toString(),
8173
- amountOut: (_b = data == null ? void 0 : data.amountIn) == null ? void 0 : _b.toString(),
8174
- paths: (_c = data == null ? void 0 : data.paths) == null ? void 0 : _c.map((item) => {
8175
- var _a2, _b2, _c2, _d, _e, _f;
8176
- const info = __spreadProps(__spreadValues({}, item), {
8177
- amountIn: (_a2 = item == null ? void 0 : item.amountIn) == null ? void 0 : _a2.toString(),
8178
- amountOut: (_b2 = item == null ? void 0 : item.amountOut) == null ? void 0 : _b2.toString()
8179
- });
8180
- if (item == null ? void 0 : item.initialPrice) {
8181
- info["initialPrice"] = (_c2 = item == null ? void 0 : item.initialPrice) == null ? void 0 : _c2.toString();
8182
- }
8183
- if ((_d = item == null ? void 0 : item.extendedDetails) == null ? void 0 : _d.after_sqrt_price) {
8317
+ const result = {
8318
+ ...data,
8319
+ amountIn: data?.amountIn?.toString(),
8320
+ amountOut: data?.amountIn?.toString(),
8321
+ paths: data?.paths?.map((item) => {
8322
+ const info = {
8323
+ ...item,
8324
+ amountIn: item?.amountIn?.toString(),
8325
+ amountOut: item?.amountOut?.toString()
8326
+ };
8327
+ if (item?.initialPrice) {
8328
+ info["initialPrice"] = item?.initialPrice?.toString();
8329
+ }
8330
+ if (item?.extendedDetails?.after_sqrt_price) {
8184
8331
  info["extendedDetails"] = {
8185
- after_sqrt_price: (_f = (_e = item == null ? void 0 : item.extendedDetails) == null ? void 0 : _e.afterSqrtPrice) == null ? void 0 : _f.toString()
8332
+ after_sqrt_price: item?.extendedDetails?.afterSqrtPrice?.toString()
8186
8333
  };
8187
8334
  }
8188
8335
  return info;
8189
8336
  })
8190
- });
8337
+ };
8191
8338
  return result;
8192
8339
  };
8193
8340
  var restituteMsafeFastRouterSwapParams = (data) => {
8194
- var _a;
8195
- const result = __spreadProps(__spreadValues({}, data), {
8196
- amountIn: new import_bn5.default(data == null ? void 0 : data.amountIn),
8197
- amountOut: new import_bn5.default(data == null ? void 0 : data.amountIn),
8198
- paths: (_a = data == null ? void 0 : data.paths) == null ? void 0 : _a.map((item) => {
8199
- var _a2, _b, _c, _d;
8200
- const info = __spreadValues({}, item);
8201
- if (item == null ? void 0 : item.initialPrice) {
8202
- info["initialPrice"] = new decimal_default((_a2 = item == null ? void 0 : item.initialPrice) == null ? void 0 : _a2.toString());
8203
- }
8204
- if ((_b = item == null ? void 0 : item.extendedDetails) == null ? void 0 : _b.after_sqrt_price) {
8341
+ const result = {
8342
+ ...data,
8343
+ amountIn: new import_bn5.default(data?.amountIn),
8344
+ amountOut: new import_bn5.default(data?.amountIn),
8345
+ paths: data?.paths?.map((item) => {
8346
+ const info = {
8347
+ ...item
8348
+ };
8349
+ if (item?.initialPrice) {
8350
+ info["initialPrice"] = new decimal_default(item?.initialPrice?.toString());
8351
+ }
8352
+ if (item?.extendedDetails?.after_sqrt_price) {
8205
8353
  info["extendedDetails"] = {
8206
- after_sqrt_price: new decimal_default((_d = (_c = item == null ? void 0 : item.extendedDetails) == null ? void 0 : _c.after_sqrt_price) == null ? void 0 : _d.toString())
8354
+ after_sqrt_price: new decimal_default(item?.extendedDetails?.after_sqrt_price?.toString())
8207
8355
  };
8208
8356
  }
8209
8357
  return info;
8210
8358
  })
8211
- });
8359
+ };
8212
8360
  return result;
8213
8361
  };
8214
8362
 
8215
8363
  // src/utils/transaction.ts
8216
- function printTransaction(tx, isPrint = true) {
8217
- return __async(this, null, function* () {
8218
- console.log(`inputs`, tx.getData().inputs);
8219
- tx.getData().commands.forEach((item, index) => {
8220
- if (isPrint) {
8221
- console.log(
8222
- `transaction ${index}: `,
8223
- JSON.stringify(item, bigIntReplacer, 2)
8224
- );
8225
- }
8226
- });
8364
+ async function printTransaction(tx, isPrint = true) {
8365
+ console.log(`inputs`, tx.getData().inputs);
8366
+ tx.getData().commands.forEach((item, index) => {
8367
+ if (isPrint) {
8368
+ console.log(
8369
+ `transaction ${index}: `,
8370
+ JSON.stringify(item, bigIntReplacer, 2)
8371
+ );
8372
+ }
8227
8373
  });
8228
8374
  }
8229
8375
  function bigIntReplacer(key, value) {
@@ -8295,7 +8441,7 @@ var HaedalHMMV2Router = class {
8295
8441
  // amount_in
8296
8442
  txb.pure.bool(swapData.a2b),
8297
8443
  // a2b
8298
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8444
+ txb.object(SUI_CLOCK_OBJECT_ID)
8299
8445
  // clock
8300
8446
  ];
8301
8447
  txb.moveCall({
@@ -8345,7 +8491,7 @@ var FullsailRouter = class {
8345
8491
  txb.object(swapData.poolId),
8346
8492
  txb.pure.bool(swapData.direction),
8347
8493
  txb.pure.u64(swapData.amountIn),
8348
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8494
+ txb.object(SUI_CLOCK_OBJECT_ID)
8349
8495
  ];
8350
8496
  txb.moveCall({
8351
8497
  target: `${swapData.publishedAt}::fullsail::swap`,
@@ -8360,7 +8506,7 @@ var CetusDlmmRouter = class {
8360
8506
  throw new Error("CetusRouter only supported on mainnet");
8361
8507
  }
8362
8508
  this.globalConfig = "0xf31b605d117f959b9730e8c07b08b856cb05143c5e81d5751c90d2979e82f599";
8363
- this.partner = partner != null ? partner : "0x59ae16f6c42f578063c2da9b9c0173fe58120ceae08e40fd8212c8eceb80bb86";
8509
+ this.partner = partner ?? "0x59ae16f6c42f578063c2da9b9c0173fe58120ceae08e40fd8212c8eceb80bb86";
8364
8510
  this.versioned = "0x05370b2d656612dd5759cbe80463de301e3b94a921dfc72dd9daa2ecdeb2d0a8";
8365
8511
  }
8366
8512
  swap(txb, flattenedPath, swapContext, _extends) {
@@ -8392,7 +8538,7 @@ var CetusDlmmRouter = class {
8392
8538
  txb.pure.bool(swapData.direction),
8393
8539
  txb.pure.u64(swapData.amountIn),
8394
8540
  txb.object(this.versioned),
8395
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8541
+ txb.object(SUI_CLOCK_OBJECT_ID)
8396
8542
  ];
8397
8543
  txb.moveCall({
8398
8544
  target: `${swapData.publishedAt}::cetus_dlmm::swap`,
@@ -8435,7 +8581,7 @@ var FerraDlmmRouter = class {
8435
8581
  txb.object(swapData.poolId),
8436
8582
  txb.pure.bool(swapData.direction),
8437
8583
  txb.pure.u64(swapData.amountIn),
8438
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8584
+ txb.object(SUI_CLOCK_OBJECT_ID)
8439
8585
  ];
8440
8586
  txb.moveCall({
8441
8587
  target: `${swapData.publishedAt}::ferra_dlmm::swap`,
@@ -8478,7 +8624,7 @@ var FerraClmmRouter = class {
8478
8624
  txb.object(swapData.poolId),
8479
8625
  txb.pure.bool(swapData.direction),
8480
8626
  txb.pure.u64(swapData.amountIn),
8481
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8627
+ txb.object(SUI_CLOCK_OBJECT_ID)
8482
8628
  ];
8483
8629
  txb.moveCall({
8484
8630
  target: `${swapData.publishedAt}::ferra_clmm::swap`,
@@ -8620,17 +8766,18 @@ function findPythPriceIDs(paths) {
8620
8766
  }
8621
8767
  var _AggregatorClient = class _AggregatorClient {
8622
8768
  constructor(params) {
8623
- var _a, _b;
8624
8769
  this.endpoint = params.endpoint ? processEndpoint(params.endpoint) : DEFAULT_ENDPOINT;
8625
- this.client = params.client || new client.SuiClient({ url: client.getFullnodeUrl("mainnet") });
8770
+ const network = params.env === 1 /* Testnet */ ? "testnet" : "mainnet";
8771
+ const rpcUrl = params.env === 1 /* Testnet */ ? "https://fullnode.testnet.sui.io:443" : "https://fullnode.mainnet.sui.io:443";
8772
+ this.client = params.client ?? new SuiJsonRpcClient({ network, url: rpcUrl });
8626
8773
  this.signer = params.signer || "";
8627
8774
  this.env = params.env || 0 /* Mainnet */;
8628
8775
  const config2 = _AggregatorClient.CONFIG[this.env];
8629
- this.pythConnections = this.newPythClients((_a = params.pythUrls) != null ? _a : []);
8630
- this.pythClient = new pythSuiJs.SuiPythClient(
8776
+ this.pythAdapter = new PythAdapter(
8631
8777
  this.client,
8632
8778
  config2.pythStateId,
8633
- config2.wormholeStateId
8779
+ config2.wormholeStateId,
8780
+ params.pythUrls ?? []
8634
8781
  );
8635
8782
  this.apiKey = params.apiKey || "";
8636
8783
  this.partner = params.partner;
@@ -8649,16 +8796,7 @@ var _AggregatorClient = class _AggregatorClient {
8649
8796
  } else {
8650
8797
  this.overlayFeeRate = 0;
8651
8798
  }
8652
- this.overlayFeeReceiver = (_b = params.overlayFeeReceiver) != null ? _b : CLIENT_CONFIG.DEFAULT_OVERLAY_FEE_RECEIVER;
8653
- }
8654
- newPythClients(pythUrls) {
8655
- if (!pythUrls.includes("https://hermes.pyth.network")) {
8656
- pythUrls.push("https://hermes.pyth.network");
8657
- }
8658
- const connections = pythUrls.map(
8659
- (url) => new pythSuiJs.SuiPriceServiceConnection(url, { timeout: 3e3 })
8660
- );
8661
- return connections;
8799
+ this.overlayFeeReceiver = params.overlayFeeReceiver ?? CLIENT_CONFIG.DEFAULT_OVERLAY_FEE_RECEIVER;
8662
8800
  }
8663
8801
  deepbookv3DeepFeeType() {
8664
8802
  if (this.env === 0 /* Mainnet */) {
@@ -8667,53 +8805,43 @@ var _AggregatorClient = class _AggregatorClient {
8667
8805
  return DEEPBOOK_V3_DEEP_FEE_TYPES.Testnet;
8668
8806
  }
8669
8807
  }
8670
- getDeepbookV3Config() {
8671
- return __async(this, null, function* () {
8672
- return yield getDeepbookV3Config(this.endpoint);
8673
- });
8808
+ async getDeepbookV3Config() {
8809
+ return await getDeepbookV3Config(this.endpoint);
8674
8810
  }
8675
- getOneCoinUsedToMerge(coinType) {
8676
- return __async(this, null, function* () {
8677
- try {
8678
- const gotCoin = yield this.client.getCoins({
8679
- owner: this.signer,
8680
- coinType,
8681
- limit: 1
8682
- });
8683
- if (gotCoin.data.length === 1) {
8684
- return gotCoin.data[0].coinObjectId;
8685
- }
8686
- return null;
8687
- } catch (error) {
8688
- return null;
8811
+ async getOneCoinUsedToMerge(coinType) {
8812
+ try {
8813
+ const gotCoin = await this.client.getCoins({
8814
+ owner: this.signer,
8815
+ coinType,
8816
+ limit: 1
8817
+ });
8818
+ if (gotCoin.data.length === 1) {
8819
+ return gotCoin.data[0].coinObjectId;
8689
8820
  }
8690
- });
8821
+ return null;
8822
+ } catch (error) {
8823
+ return null;
8824
+ }
8691
8825
  }
8692
- findRouters(params) {
8693
- return __async(this, null, function* () {
8694
- return getRouterResult(
8695
- this.endpoint,
8696
- this.apiKey,
8697
- params,
8698
- this.overlayFeeRate,
8699
- this.overlayFeeReceiver
8700
- );
8701
- });
8826
+ async findRouters(params) {
8827
+ return getRouterResult(
8828
+ this.endpoint,
8829
+ this.apiKey,
8830
+ params,
8831
+ this.overlayFeeRate,
8832
+ this.overlayFeeReceiver
8833
+ );
8702
8834
  }
8703
- findMergeSwapRouters(params) {
8704
- return __async(this, null, function* () {
8705
- return getMergeSwapResult(
8706
- this.endpoint,
8707
- this.apiKey,
8708
- params,
8709
- this.overlayFeeRate,
8710
- this.overlayFeeReceiver
8711
- );
8712
- });
8835
+ async findMergeSwapRouters(params) {
8836
+ return getMergeSwapResult(
8837
+ this.endpoint,
8838
+ this.apiKey,
8839
+ params,
8840
+ this.overlayFeeRate,
8841
+ this.overlayFeeReceiver
8842
+ );
8713
8843
  }
8714
- executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
8715
- return __async(this, null, function* () {
8716
- });
8844
+ async executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
8717
8845
  }
8718
8846
  newDexRouterV3(provider, pythPriceIDs, partner, cetusDlmmPartner) {
8719
8847
  switch (provider) {
@@ -9099,55 +9227,53 @@ var _AggregatorClient = class _AggregatorClient {
9099
9227
  );
9100
9228
  return outputCoin;
9101
9229
  }
9102
- routerSwap(params) {
9103
- return __async(this, null, function* () {
9104
- const { router, inputCoin, slippage, txb, partner } = params;
9105
- if (slippage > 1 || slippage < 0) {
9106
- throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9107
- }
9108
- if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9109
- throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9110
- }
9111
- const byAmountIn = params.router.byAmountIn;
9112
- const amountIn = router.amountIn;
9113
- const amountOut = router.amountOut;
9114
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9115
- let overlayFee = new import_bn6.default(0);
9116
- if (byAmountIn) {
9117
- overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9118
- } else {
9119
- overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9120
- }
9121
- const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
9122
- const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
9123
- const amountLimit = CalculateAmountLimitBN(
9124
- byAmountIn ? expectedAmountOut : expectedAmountIn,
9125
- byAmountIn,
9126
- slippage
9230
+ async routerSwap(params) {
9231
+ const { router, inputCoin, slippage, txb, partner } = params;
9232
+ if (slippage > 1 || slippage < 0) {
9233
+ throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9234
+ }
9235
+ if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9236
+ throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9237
+ }
9238
+ const byAmountIn = params.router.byAmountIn;
9239
+ const amountIn = router.amountIn;
9240
+ const amountOut = router.amountOut;
9241
+ checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9242
+ let overlayFee = new import_bn6.default(0);
9243
+ if (byAmountIn) {
9244
+ overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9245
+ } else {
9246
+ overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9247
+ }
9248
+ const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
9249
+ const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
9250
+ const amountLimit = CalculateAmountLimitBN(
9251
+ byAmountIn ? expectedAmountOut : expectedAmountIn,
9252
+ byAmountIn,
9253
+ slippage
9254
+ );
9255
+ const priceIDs = findPythPriceIDs(router.paths);
9256
+ const priceInfoObjectIds = priceIDs.length > 0 ? await this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9257
+ if (byAmountIn) {
9258
+ return this.expectInputSwapV3(
9259
+ txb,
9260
+ inputCoin,
9261
+ router,
9262
+ amountOut.toString(),
9263
+ amountLimit.toString(),
9264
+ priceInfoObjectIds,
9265
+ partner ?? this.partner
9127
9266
  );
9128
- const priceIDs = findPythPriceIDs(router.paths);
9129
- const priceInfoObjectIds = priceIDs.length > 0 ? yield this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9130
- if (byAmountIn) {
9131
- return this.expectInputSwapV3(
9132
- txb,
9133
- inputCoin,
9134
- router,
9135
- amountOut.toString(),
9136
- amountLimit.toString(),
9137
- priceInfoObjectIds,
9138
- partner != null ? partner : this.partner
9139
- );
9140
- } else {
9141
- return this.expectOutputSwapV3(
9142
- txb,
9143
- inputCoin,
9144
- router,
9145
- amountOut.toString(),
9146
- amountLimit.toString(),
9147
- partner != null ? partner : this.partner
9148
- );
9149
- }
9150
- });
9267
+ } else {
9268
+ return this.expectOutputSwapV3(
9269
+ txb,
9270
+ inputCoin,
9271
+ router,
9272
+ amountOut.toString(),
9273
+ amountLimit.toString(),
9274
+ partner ?? this.partner
9275
+ );
9276
+ }
9151
9277
  }
9152
9278
  /**
9153
9279
  * Router swap with max amount in validation.
@@ -9158,434 +9284,402 @@ var _AggregatorClient = class _AggregatorClient {
9158
9284
  * @returns TransactionObjectArgument - The output coin from the swap
9159
9285
  * @throws Error if input coin amount exceeds maxAmountIn
9160
9286
  */
9161
- routerSwapWithMaxAmountIn(params) {
9162
- return __async(this, null, function* () {
9163
- const { router, inputCoin, slippage, txb, partner, maxAmountIn } = params;
9164
- if (slippage > 1 || slippage < 0) {
9165
- throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9166
- }
9167
- if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9168
- throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9169
- }
9170
- const byAmountIn = params.router.byAmountIn;
9171
- const amountIn = router.amountIn;
9172
- const amountOut = router.amountOut;
9173
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9174
- let overlayFee = new import_bn6.default(0);
9175
- if (byAmountIn) {
9176
- overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9177
- } else {
9178
- overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9179
- }
9180
- const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
9181
- const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
9182
- const amountLimit = CalculateAmountLimitBN(
9183
- byAmountIn ? expectedAmountOut : expectedAmountIn,
9184
- byAmountIn,
9185
- slippage
9287
+ async routerSwapWithMaxAmountIn(params) {
9288
+ const { router, inputCoin, slippage, txb, partner, maxAmountIn } = params;
9289
+ if (slippage > 1 || slippage < 0) {
9290
+ throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9291
+ }
9292
+ if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9293
+ throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9294
+ }
9295
+ const byAmountIn = params.router.byAmountIn;
9296
+ const amountIn = router.amountIn;
9297
+ const amountOut = router.amountOut;
9298
+ checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9299
+ let overlayFee = new import_bn6.default(0);
9300
+ if (byAmountIn) {
9301
+ overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9302
+ } else {
9303
+ overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9304
+ }
9305
+ const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
9306
+ const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
9307
+ const amountLimit = CalculateAmountLimitBN(
9308
+ byAmountIn ? expectedAmountOut : expectedAmountIn,
9309
+ byAmountIn,
9310
+ slippage
9311
+ );
9312
+ const priceIDs = findPythPriceIDs(router.paths);
9313
+ const priceInfoObjectIds = priceIDs.length > 0 ? await this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9314
+ if (byAmountIn) {
9315
+ return this.expectInputSwapV3WithMaxAmountIn(
9316
+ txb,
9317
+ inputCoin,
9318
+ router,
9319
+ maxAmountIn,
9320
+ amountOut.toString(),
9321
+ amountLimit.toString(),
9322
+ priceInfoObjectIds,
9323
+ partner ?? this.partner
9186
9324
  );
9187
- const priceIDs = findPythPriceIDs(router.paths);
9188
- const priceInfoObjectIds = priceIDs.length > 0 ? yield this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9189
- if (byAmountIn) {
9190
- return this.expectInputSwapV3WithMaxAmountIn(
9191
- txb,
9192
- inputCoin,
9193
- router,
9194
- maxAmountIn,
9195
- amountOut.toString(),
9196
- amountLimit.toString(),
9197
- priceInfoObjectIds,
9198
- partner != null ? partner : this.partner
9199
- );
9200
- } else {
9201
- return this.expectOutputSwapV3WithMaxAmountIn(
9202
- txb,
9203
- inputCoin,
9204
- router,
9205
- maxAmountIn,
9206
- amountOut.toString(),
9207
- amountLimit.toString(),
9208
- partner != null ? partner : this.partner
9209
- );
9210
- }
9211
- });
9325
+ } else {
9326
+ return this.expectOutputSwapV3WithMaxAmountIn(
9327
+ txb,
9328
+ inputCoin,
9329
+ router,
9330
+ maxAmountIn,
9331
+ amountOut.toString(),
9332
+ amountLimit.toString(),
9333
+ partner ?? this.partner
9334
+ );
9335
+ }
9212
9336
  }
9213
9337
  // auto build input coin
9214
9338
  // auto merge, transfer or destory target coin.
9215
- fastRouterSwap(params) {
9216
- return __async(this, null, function* () {
9217
- const { router, slippage, txb, partner, payDeepFeeAmount } = params;
9218
- const fromCoinType = router.paths[0].from;
9219
- const targetCoinType = router.paths[router.paths.length - 1].target;
9220
- const byAmountIn = router.byAmountIn;
9221
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9222
- let overlayFee = 0;
9223
- if (byAmountIn) {
9224
- overlayFee = Number(
9225
- router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9226
- );
9227
- } else {
9228
- overlayFee = Number(
9229
- router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9230
- );
9231
- }
9232
- const expectedAmountOut = byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
9233
- const expectedAmountIn = byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
9234
- const amountLimit = CalculateAmountLimit(
9235
- byAmountIn ? expectedAmountOut : expectedAmountIn,
9236
- byAmountIn,
9237
- slippage
9339
+ async fastRouterSwap(params) {
9340
+ const { router, slippage, txb, partner, payDeepFeeAmount } = params;
9341
+ const fromCoinType = router.paths[0].from;
9342
+ const targetCoinType = router.paths[router.paths.length - 1].target;
9343
+ const byAmountIn = router.byAmountIn;
9344
+ checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9345
+ let overlayFee = 0;
9346
+ if (byAmountIn) {
9347
+ overlayFee = Number(
9348
+ router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9349
+ );
9350
+ } else {
9351
+ overlayFee = Number(
9352
+ router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9238
9353
  );
9239
- const amount = byAmountIn ? expectedAmountIn : amountLimit;
9240
- let inputCoin = transactions.coinWithBalance({
9241
- balance: BigInt(amount.toString()),
9242
- useGasCoin: true,
9243
- type: fromCoinType
9354
+ }
9355
+ const expectedAmountOut = byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
9356
+ const expectedAmountIn = byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
9357
+ const amountLimit = CalculateAmountLimit(
9358
+ byAmountIn ? expectedAmountOut : expectedAmountIn,
9359
+ byAmountIn,
9360
+ slippage
9361
+ );
9362
+ const amount = byAmountIn ? expectedAmountIn : amountLimit;
9363
+ let inputCoin = coinWithBalance({
9364
+ balance: BigInt(amount.toString()),
9365
+ useGasCoin: true,
9366
+ type: fromCoinType
9367
+ });
9368
+ let deepCoin;
9369
+ if (payDeepFeeAmount && payDeepFeeAmount > 0) {
9370
+ deepCoin = coinWithBalance({
9371
+ balance: BigInt(payDeepFeeAmount),
9372
+ type: this.deepbookv3DeepFeeType()
9244
9373
  });
9245
- let deepCoin;
9246
- if (payDeepFeeAmount && payDeepFeeAmount > 0) {
9247
- deepCoin = transactions.coinWithBalance({
9248
- balance: BigInt(payDeepFeeAmount),
9249
- type: this.deepbookv3DeepFeeType()
9250
- });
9251
- }
9252
- const routerSwapParams = {
9253
- router,
9254
- inputCoin,
9255
- slippage,
9256
- txb,
9257
- partner: partner != null ? partner : this.partner,
9258
- deepbookv3DeepFee: deepCoin
9259
- };
9260
- const targetCoin = yield this.routerSwap(routerSwapParams);
9261
- if (CoinUtils.isSuiCoin(targetCoinType)) {
9262
- txb.mergeCoins(txb.gas, [targetCoin]);
9374
+ }
9375
+ const routerSwapParams = {
9376
+ router,
9377
+ inputCoin,
9378
+ slippage,
9379
+ txb,
9380
+ partner: partner ?? this.partner,
9381
+ deepbookv3DeepFee: deepCoin
9382
+ };
9383
+ const targetCoin = await this.routerSwap(routerSwapParams);
9384
+ if (CoinUtils.isSuiCoin(targetCoinType)) {
9385
+ txb.mergeCoins(txb.gas, [targetCoin]);
9386
+ } else {
9387
+ const targetCoinObjID = await this.getOneCoinUsedToMerge(targetCoinType);
9388
+ if (targetCoinObjID != null) {
9389
+ txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
9263
9390
  } else {
9264
- const targetCoinObjID = yield this.getOneCoinUsedToMerge(targetCoinType);
9265
- if (targetCoinObjID != null) {
9266
- txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
9267
- } else {
9268
- transferOrDestroyCoin(
9269
- {
9270
- coin: targetCoin,
9271
- coinType: targetCoinType,
9272
- packages: router.packages
9273
- },
9274
- txb
9275
- );
9276
- }
9277
- }
9278
- });
9279
- }
9280
- mergeSwap(params) {
9281
- return __async(this, null, function* () {
9282
- const { router, inputCoins, slippage, txb, partner } = params;
9283
- if (slippage > 1 || slippage < 0) {
9284
- throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9285
- }
9286
- if (!router.packages || !router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9287
- throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9288
- }
9289
- if (!router.allRoutes || router.allRoutes.length === 0) {
9290
- throw new Error("No routes found in merge swap response");
9291
- }
9292
- const outputCoins = [];
9293
- for (let i = 0; i < router.allRoutes.length && i < inputCoins.length; i++) {
9294
- const route = router.allRoutes[i];
9295
- const inputCoin = inputCoins[i];
9296
- const routeRouter = {
9297
- quoteID: router.quoteID,
9298
- amountIn: route.amountIn,
9299
- amountOut: route.amountOut,
9300
- deviationRatio: Number(route.deviationRatio),
9301
- byAmountIn: true,
9302
- // Merge swap is always by amount in
9303
- paths: route.paths,
9304
- insufficientLiquidity: false,
9305
- packages: router.packages
9306
- };
9307
- const routerParams = {
9308
- router: routeRouter,
9309
- inputCoin: inputCoin.coin,
9310
- slippage,
9311
- txb,
9312
- partner: partner != null ? partner : this.partner
9313
- };
9314
- const outputCoin = yield this.routerSwap(routerParams);
9315
- outputCoins.push(outputCoin);
9316
- }
9317
- if (outputCoins.length === 0) {
9318
- throw new Error("No output coins generated from merge swap");
9319
- }
9320
- let finalOutputCoin = outputCoins[0];
9321
- if (outputCoins.length > 1) {
9322
- txb.mergeCoins(finalOutputCoin, outputCoins.slice(1));
9391
+ transferOrDestroyCoin(
9392
+ {
9393
+ coin: targetCoin,
9394
+ coinType: targetCoinType,
9395
+ packages: router.packages
9396
+ },
9397
+ txb
9398
+ );
9323
9399
  }
9324
- return finalOutputCoin;
9325
- });
9400
+ }
9326
9401
  }
9327
- fastMergeSwap(params) {
9328
- return __async(this, null, function* () {
9329
- const { router, slippage, txb, partner } = params;
9330
- if (!router || !router.allRoutes || router.allRoutes.length === 0) {
9331
- throw new Error("Invalid router: no routes found");
9332
- }
9333
- const firstRoute = router.allRoutes[0];
9334
- const targetCoinType = firstRoute.paths[firstRoute.paths.length - 1].target;
9335
- const inputCoins = [];
9336
- const coinTypeSet = /* @__PURE__ */ new Set();
9337
- for (const route of router.allRoutes) {
9338
- const firstCoinType = route.paths[0].from;
9339
- if (coinTypeSet.has(firstCoinType)) {
9340
- continue;
9341
- }
9342
- coinTypeSet.add(firstCoinType);
9343
- const coin = transactions.coinWithBalance({
9344
- balance: BigInt(route.amountIn.toString()),
9345
- useGasCoin: CoinUtils.isSuiCoin(firstCoinType),
9346
- type: firstCoinType
9347
- });
9348
- inputCoins.push({ coinType: firstCoinType, coin });
9349
- }
9350
- const mergeSwapParams = {
9351
- router,
9352
- inputCoins,
9402
+ async mergeSwap(params) {
9403
+ const { router, inputCoins, slippage, txb, partner } = params;
9404
+ if (slippage > 1 || slippage < 0) {
9405
+ throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9406
+ }
9407
+ if (!router.packages || !router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9408
+ throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9409
+ }
9410
+ if (!router.allRoutes || router.allRoutes.length === 0) {
9411
+ throw new Error("No routes found in merge swap response");
9412
+ }
9413
+ const outputCoins = [];
9414
+ for (let i = 0; i < router.allRoutes.length && i < inputCoins.length; i++) {
9415
+ const route = router.allRoutes[i];
9416
+ const inputCoin = inputCoins[i];
9417
+ const routeRouter = {
9418
+ quoteID: router.quoteID,
9419
+ amountIn: route.amountIn,
9420
+ amountOut: route.amountOut,
9421
+ deviationRatio: Number(route.deviationRatio),
9422
+ byAmountIn: true,
9423
+ // Merge swap is always by amount in
9424
+ paths: route.paths,
9425
+ insufficientLiquidity: false,
9426
+ packages: router.packages
9427
+ };
9428
+ const routerParams = {
9429
+ router: routeRouter,
9430
+ inputCoin: inputCoin.coin,
9353
9431
  slippage,
9354
9432
  txb,
9355
- partner: partner != null ? partner : this.partner
9356
- };
9357
- const targetCoin = yield this.mergeSwap(mergeSwapParams);
9358
- if (CoinUtils.isSuiCoin(targetCoinType)) {
9359
- txb.mergeCoins(txb.gas, [targetCoin]);
9360
- } else {
9361
- const targetCoinObjID = yield this.getOneCoinUsedToMerge(targetCoinType);
9362
- if (targetCoinObjID != null) {
9363
- txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
9364
- } else {
9365
- transferOrDestroyCoin(
9366
- {
9367
- coin: targetCoin,
9368
- coinType: targetCoinType,
9369
- packages: router.packages
9370
- },
9371
- txb
9372
- );
9373
- }
9374
- }
9375
- });
9376
- }
9377
- fixableRouterSwapV3(params) {
9378
- return __async(this, null, function* () {
9379
- const { router, inputCoin, slippage, txb, partner } = params;
9380
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9381
- let overlayFee = 0;
9382
- if (router.byAmountIn) {
9383
- overlayFee = Number(
9384
- router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9385
- );
9433
+ partner: partner ?? this.partner
9434
+ };
9435
+ const outputCoin = await this.routerSwap(routerParams);
9436
+ outputCoins.push(outputCoin);
9437
+ }
9438
+ if (outputCoins.length === 0) {
9439
+ throw new Error("No output coins generated from merge swap");
9440
+ }
9441
+ let finalOutputCoin = outputCoins[0];
9442
+ if (outputCoins.length > 1) {
9443
+ txb.mergeCoins(finalOutputCoin, outputCoins.slice(1));
9444
+ }
9445
+ return finalOutputCoin;
9446
+ }
9447
+ async fastMergeSwap(params) {
9448
+ const { router, slippage, txb, partner } = params;
9449
+ if (!router || !router.allRoutes || router.allRoutes.length === 0) {
9450
+ throw new Error("Invalid router: no routes found");
9451
+ }
9452
+ const firstRoute = router.allRoutes[0];
9453
+ const targetCoinType = firstRoute.paths[firstRoute.paths.length - 1].target;
9454
+ const inputCoins = [];
9455
+ const coinTypeSet = /* @__PURE__ */ new Set();
9456
+ for (const route of router.allRoutes) {
9457
+ const firstCoinType = route.paths[0].from;
9458
+ if (coinTypeSet.has(firstCoinType)) {
9459
+ continue;
9460
+ }
9461
+ coinTypeSet.add(firstCoinType);
9462
+ const coin = coinWithBalance({
9463
+ balance: BigInt(route.amountIn.toString()),
9464
+ useGasCoin: CoinUtils.isSuiCoin(firstCoinType),
9465
+ type: firstCoinType
9466
+ });
9467
+ inputCoins.push({ coinType: firstCoinType, coin });
9468
+ }
9469
+ const mergeSwapParams = {
9470
+ router,
9471
+ inputCoins,
9472
+ slippage,
9473
+ txb,
9474
+ partner: partner ?? this.partner
9475
+ };
9476
+ const targetCoin = await this.mergeSwap(mergeSwapParams);
9477
+ if (CoinUtils.isSuiCoin(targetCoinType)) {
9478
+ txb.mergeCoins(txb.gas, [targetCoin]);
9479
+ } else {
9480
+ const targetCoinObjID = await this.getOneCoinUsedToMerge(targetCoinType);
9481
+ if (targetCoinObjID != null) {
9482
+ txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
9386
9483
  } else {
9387
- overlayFee = Number(
9388
- router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9484
+ transferOrDestroyCoin(
9485
+ {
9486
+ coin: targetCoin,
9487
+ coinType: targetCoinType,
9488
+ packages: router.packages
9489
+ },
9490
+ txb
9389
9491
  );
9390
9492
  }
9391
- const expectedAmountOut = router.byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
9392
- const expectedAmountIn = router.byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
9393
- const amountLimit = CalculateAmountLimitBN(
9394
- router.byAmountIn ? expectedAmountOut : expectedAmountIn,
9395
- router.byAmountIn,
9396
- slippage
9493
+ }
9494
+ }
9495
+ async fixableRouterSwapV3(params) {
9496
+ const { router, inputCoin, slippage, txb, partner } = params;
9497
+ checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9498
+ let overlayFee = 0;
9499
+ if (router.byAmountIn) {
9500
+ overlayFee = Number(
9501
+ router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9397
9502
  );
9398
- const priceIDs = findPythPriceIDs(router.paths);
9399
- const priceInfoObjectIds = priceIDs.length > 0 ? yield this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9400
- if (router.byAmountIn) {
9401
- return this.expectInputSwapV3(
9402
- txb,
9403
- inputCoin,
9404
- router,
9405
- expectedAmountOut.toString(),
9406
- amountLimit.toString(),
9407
- priceInfoObjectIds,
9408
- partner != null ? partner : this.partner
9409
- );
9410
- } else {
9411
- return this.expectOutputSwapV3(
9412
- txb,
9413
- inputCoin,
9414
- router,
9415
- expectedAmountOut.toString(),
9416
- amountLimit.toString(),
9417
- partner != null ? partner : this.partner
9418
- );
9419
- }
9420
- });
9503
+ } else {
9504
+ overlayFee = Number(
9505
+ router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9506
+ );
9507
+ }
9508
+ const expectedAmountOut = router.byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
9509
+ const expectedAmountIn = router.byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
9510
+ const amountLimit = CalculateAmountLimitBN(
9511
+ router.byAmountIn ? expectedAmountOut : expectedAmountIn,
9512
+ router.byAmountIn,
9513
+ slippage
9514
+ );
9515
+ const priceIDs = findPythPriceIDs(router.paths);
9516
+ const priceInfoObjectIds = priceIDs.length > 0 ? await this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9517
+ if (router.byAmountIn) {
9518
+ return this.expectInputSwapV3(
9519
+ txb,
9520
+ inputCoin,
9521
+ router,
9522
+ expectedAmountOut.toString(),
9523
+ amountLimit.toString(),
9524
+ priceInfoObjectIds,
9525
+ partner ?? this.partner
9526
+ );
9527
+ } else {
9528
+ return this.expectOutputSwapV3(
9529
+ txb,
9530
+ inputCoin,
9531
+ router,
9532
+ expectedAmountOut.toString(),
9533
+ amountLimit.toString(),
9534
+ partner ?? this.partner
9535
+ );
9536
+ }
9421
9537
  }
9422
- swapInPools(params) {
9423
- return __async(this, null, function* () {
9424
- var _a, _b, _c, _d;
9425
- const { from, target, amount, byAmountIn, pools } = params;
9426
- const fromCoin = completionCoin(from);
9427
- const targetCoin = completionCoin(target);
9428
- const tx = new transactions.Transaction();
9429
- const direction = compareCoins(fromCoin, targetCoin);
9430
- const coinA = direction ? fromCoin : targetCoin;
9431
- const coinB = direction ? targetCoin : fromCoin;
9432
- const typeArguments = [coinA, coinB];
9433
- const integratePublishedAt = this.env === 0 /* Mainnet */ ? "0xfbb32ac0fa89a3cb0c56c745b688c6d2a53ac8e43447119ad822763997ffb9c3" : "0xab2d58dd28ff0dc19b18ab2c634397b785a38c342a8f5065ade5f53f9dbffa1c";
9434
- for (let i = 0; i < pools.length; i++) {
9435
- const args = [
9436
- tx.object(pools[i]),
9437
- tx.pure.bool(direction),
9438
- tx.pure.bool(byAmountIn),
9439
- tx.pure.u64(amount.toString())
9440
- ];
9441
- tx.moveCall({
9442
- target: `${integratePublishedAt}::fetcher_script::calculate_swap_result`,
9443
- arguments: args,
9444
- typeArguments
9445
- });
9446
- }
9447
- if (!this.signer) {
9448
- this.signer = "0x0";
9449
- }
9450
- const simulateRes = yield this.client.devInspectTransactionBlock({
9451
- transactionBlock: tx,
9452
- sender: this.signer
9453
- });
9454
- if (simulateRes.error != null) {
9455
- throw new Error("Simulation error: " + simulateRes.error);
9456
- }
9457
- const valueData = (_a = simulateRes.events) == null ? void 0 : _a.filter((item) => {
9458
- return item.type.includes("CalculatedSwapResultEvent");
9538
+ async swapInPools(params) {
9539
+ const { from, target, amount, byAmountIn, pools } = params;
9540
+ const fromCoin = completionCoin(from);
9541
+ const targetCoin = completionCoin(target);
9542
+ const tx = new Transaction();
9543
+ const direction = compareCoins(fromCoin, targetCoin);
9544
+ const coinA = direction ? fromCoin : targetCoin;
9545
+ const coinB = direction ? targetCoin : fromCoin;
9546
+ const typeArguments = [coinA, coinB];
9547
+ const integratePublishedAt = this.env === 0 /* Mainnet */ ? "0xfbb32ac0fa89a3cb0c56c745b688c6d2a53ac8e43447119ad822763997ffb9c3" : "0xab2d58dd28ff0dc19b18ab2c634397b785a38c342a8f5065ade5f53f9dbffa1c";
9548
+ for (let i = 0; i < pools.length; i++) {
9549
+ const args = [
9550
+ tx.object(pools[i]),
9551
+ tx.pure.bool(direction),
9552
+ tx.pure.bool(byAmountIn),
9553
+ tx.pure.u64(amount.toString())
9554
+ ];
9555
+ tx.moveCall({
9556
+ target: `${integratePublishedAt}::fetcher_script::calculate_swap_result`,
9557
+ arguments: args,
9558
+ typeArguments
9459
9559
  });
9460
- if (valueData.length === 0 || valueData.length !== pools.length) {
9461
- throw new Error("Simulate event result error");
9462
- }
9463
- let tempMaxAmount = byAmountIn ? new import_bn6.default(0) : new import_bn6.default(U64_MAX);
9464
- let tempIndex = 0;
9465
- for (let i = 0; i < valueData.length; i += 1) {
9466
- if (valueData[i].parsedJson.data.is_exceed) {
9467
- continue;
9468
- }
9469
- if (params.byAmountIn) {
9470
- const amount2 = new import_bn6.default(valueData[i].parsedJson.data.amount_out);
9471
- if (amount2.gt(tempMaxAmount)) {
9472
- tempIndex = i;
9473
- tempMaxAmount = amount2;
9474
- }
9475
- } else {
9476
- const amount2 = new import_bn6.default(valueData[i].parsedJson.data.amount_out);
9477
- if (amount2.lt(tempMaxAmount)) {
9478
- tempIndex = i;
9479
- tempMaxAmount = amount2;
9480
- }
9560
+ }
9561
+ tx.setSenderIfNotSet(this.signer || "0x0");
9562
+ const simulateRes = await this.client.devInspectTransactionBlock({
9563
+ sender: this.signer || "0x0",
9564
+ transactionBlock: tx
9565
+ });
9566
+ if (simulateRes.error) {
9567
+ throw new Error("Simulation error: " + simulateRes.error);
9568
+ }
9569
+ const events = simulateRes.events ?? [];
9570
+ const valueData = events.filter((item) => {
9571
+ return item.type.includes("CalculatedSwapResultEvent");
9572
+ });
9573
+ if (valueData.length === 0 || valueData.length !== pools.length) {
9574
+ throw new Error("Simulate event result error");
9575
+ }
9576
+ let tempMaxAmount = byAmountIn ? new import_bn6.default(0) : new import_bn6.default(U64_MAX);
9577
+ let tempIndex = 0;
9578
+ for (let i = 0; i < valueData.length; i += 1) {
9579
+ const eventJson2 = valueData[i].parsedJson;
9580
+ if (eventJson2?.data?.is_exceed) {
9581
+ continue;
9582
+ }
9583
+ if (params.byAmountIn) {
9584
+ const amount2 = new import_bn6.default(eventJson2?.data?.amount_out ?? 0);
9585
+ if (amount2.gt(tempMaxAmount)) {
9586
+ tempIndex = i;
9587
+ tempMaxAmount = amount2;
9588
+ }
9589
+ } else {
9590
+ const amount2 = new import_bn6.default(eventJson2?.data?.amount_out ?? 0);
9591
+ if (amount2.lt(tempMaxAmount)) {
9592
+ tempIndex = i;
9593
+ tempMaxAmount = amount2;
9481
9594
  }
9482
9595
  }
9483
- const event = valueData[tempIndex].parsedJson.data;
9484
- const [decimalA, decimalB] = yield Promise.all([
9485
- this.client.getCoinMetadata({ coinType: coinA }).then((metadata) => metadata == null ? void 0 : metadata.decimals),
9486
- this.client.getCoinMetadata({ coinType: coinB }).then((metadata) => metadata == null ? void 0 : metadata.decimals)
9487
- ]);
9488
- if (decimalA == null || decimalB == null) {
9489
- throw new Error("Cannot get coin decimals");
9490
- }
9491
- const feeRate = Number(event.fee_rate) / 1e6;
9492
- const pureAmountIn = new import_bn6.default((_b = event.amount_in) != null ? _b : 0);
9493
- const feeAmount = new import_bn6.default((_c = event.fee_amount) != null ? _c : 0);
9494
- const amountIn = pureAmountIn.add(feeAmount);
9495
- const cetusRouterV3PublishedAt = this.env === 0 /* Mainnet */ ? MAINNET_CETUS_V3_PUBLISHED_AT : TESTNET_CETUS_V3_PUBLISHED_AT;
9496
- const aggregatorV3PublishedAt = this.env === 0 /* Mainnet */ ? AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Mainnet : AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Testnet;
9497
- const routeData = {
9498
- amountIn,
9499
- amountOut: new import_bn6.default((_d = event.amount_out) != null ? _d : 0),
9500
- deviationRatio: 0,
9501
- paths: [
9502
- {
9503
- id: pools[tempIndex],
9504
- direction,
9505
- provider: CETUS,
9506
- from: fromCoin,
9507
- target: targetCoin,
9508
- feeRate,
9509
- amountIn: amountIn.toString(),
9510
- amountOut: event.amount_out,
9511
- publishedAt: cetusRouterV3PublishedAt,
9512
- extendedDetails: {
9513
- afterSqrtPrice: event.after_sqrt_price
9514
- }
9596
+ }
9597
+ const eventJson = valueData[tempIndex].parsedJson;
9598
+ const eventData = eventJson?.data;
9599
+ const [decimalA, decimalB] = await Promise.all([
9600
+ this.client.getCoinMetadata({ coinType: coinA }).then((res) => res?.decimals ?? null),
9601
+ this.client.getCoinMetadata({ coinType: coinB }).then((res) => res?.decimals ?? null)
9602
+ ]);
9603
+ if (decimalA == null || decimalB == null) {
9604
+ throw new Error("Cannot get coin decimals");
9605
+ }
9606
+ const feeRate = Number(eventData?.fee_rate ?? 0) / 1e6;
9607
+ const pureAmountIn = new import_bn6.default(eventData?.amount_in ?? 0);
9608
+ const feeAmount = new import_bn6.default(eventData?.fee_amount ?? 0);
9609
+ const amountIn = pureAmountIn.add(feeAmount);
9610
+ const cetusRouterV3PublishedAt = this.env === 0 /* Mainnet */ ? MAINNET_CETUS_V3_PUBLISHED_AT : TESTNET_CETUS_V3_PUBLISHED_AT;
9611
+ const aggregatorV3PublishedAt = this.env === 0 /* Mainnet */ ? AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Mainnet : AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Testnet;
9612
+ const routeData = {
9613
+ amountIn,
9614
+ amountOut: new import_bn6.default(eventData?.amount_out ?? 0),
9615
+ deviationRatio: 0,
9616
+ paths: [
9617
+ {
9618
+ id: pools[tempIndex],
9619
+ direction,
9620
+ provider: CETUS,
9621
+ from: fromCoin,
9622
+ target: targetCoin,
9623
+ feeRate,
9624
+ amountIn: amountIn.toString(),
9625
+ amountOut: eventData?.amount_out ?? "0",
9626
+ publishedAt: cetusRouterV3PublishedAt,
9627
+ extendedDetails: {
9628
+ afterSqrtPrice: eventData?.after_sqrt_price
9515
9629
  }
9516
- ],
9517
- insufficientLiquidity: false,
9518
- byAmountIn: params.byAmountIn,
9519
- quoteID: `degraded-${generateUUID()}`,
9520
- packages: /* @__PURE__ */ new Map([
9521
- [
9522
- PACKAGE_NAMES.AGGREGATOR_V3,
9523
- aggregatorV3PublishedAt
9524
- ]
9525
- ])
9526
- };
9527
- const result = {
9528
- isExceed: event.is_exceed,
9529
- routeData
9530
- };
9531
- return result;
9532
- });
9533
- }
9534
- updatePythPriceIDs(priceIDs, txb) {
9535
- return __async(this, null, function* () {
9536
- let priceUpdateData = null;
9537
- let lastError = null;
9538
- for (const connection of this.pythConnections) {
9539
- try {
9540
- priceUpdateData = yield connection.getPriceFeedsUpdateData(priceIDs);
9541
- break;
9542
- } catch (e) {
9543
- lastError = e;
9544
- console.log("Error: ", e);
9545
- continue;
9546
9630
  }
9547
- }
9548
- if (priceUpdateData == null) {
9549
- throw new Error(
9550
- `All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes. Detailed error: ${lastError == null ? void 0 : lastError.message}`
9551
- );
9552
- }
9553
- let priceInfoObjectIds = [];
9554
- try {
9555
- priceInfoObjectIds = yield this.pythClient.updatePriceFeeds(
9556
- txb,
9557
- priceUpdateData,
9558
- priceIDs
9559
- );
9560
- } catch (e) {
9561
- throw new Error(
9562
- `All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes in the pythUrls parameter when initializing AggregatorClient, for example: new AggregatorClient({ pythUrls: ["https://your-pyth-node-url"] }). Detailed error: ${e}`
9563
- );
9564
- }
9565
- let priceInfoObjectIdsMap = /* @__PURE__ */ new Map();
9566
- for (let i = 0; i < priceIDs.length; i++) {
9567
- priceInfoObjectIdsMap.set(priceIDs[i], priceInfoObjectIds[i]);
9568
- }
9569
- return priceInfoObjectIdsMap;
9570
- });
9631
+ ],
9632
+ insufficientLiquidity: false,
9633
+ byAmountIn: params.byAmountIn,
9634
+ quoteID: `degraded-${generateUUID()}`,
9635
+ packages: /* @__PURE__ */ new Map([
9636
+ [
9637
+ PACKAGE_NAMES.AGGREGATOR_V3,
9638
+ aggregatorV3PublishedAt
9639
+ ]
9640
+ ])
9641
+ };
9642
+ const result = {
9643
+ isExceed: eventData?.is_exceed ?? false,
9644
+ routeData
9645
+ };
9646
+ return result;
9571
9647
  }
9572
- devInspectTransactionBlock(txb) {
9573
- return __async(this, null, function* () {
9574
- const res = yield this.client.devInspectTransactionBlock({
9575
- transactionBlock: txb,
9576
- sender: this.signer
9577
- });
9578
- return res;
9648
+ async updatePythPriceIDs(priceIDs, txb) {
9649
+ const priceUpdateData = await this.pythAdapter.getPriceFeedsUpdateData(priceIDs);
9650
+ let priceInfoObjectIds;
9651
+ try {
9652
+ priceInfoObjectIds = await this.pythAdapter.updatePriceFeeds(
9653
+ txb,
9654
+ priceUpdateData,
9655
+ priceIDs
9656
+ );
9657
+ } catch (e) {
9658
+ throw new Error(
9659
+ `Failed to update Pyth price feeds. Ensure pythUrls are configured correctly. Detailed error: ${e}`
9660
+ );
9661
+ }
9662
+ const priceInfoObjectIdsMap = /* @__PURE__ */ new Map();
9663
+ for (let i = 0; i < priceIDs.length; i++) {
9664
+ priceInfoObjectIdsMap.set(priceIDs[i], priceInfoObjectIds[i]);
9665
+ }
9666
+ return priceInfoObjectIdsMap;
9667
+ }
9668
+ async devInspectTransactionBlock(txb) {
9669
+ txb.setSenderIfNotSet(this.signer || "0x0");
9670
+ const res = await this.client.devInspectTransactionBlock({
9671
+ sender: this.signer || "0x0",
9672
+ transactionBlock: txb
9579
9673
  });
9674
+ return res;
9580
9675
  }
9581
- sendTransaction(txb, signer) {
9582
- return __async(this, null, function* () {
9583
- const res = yield this.client.signAndExecuteTransaction({
9584
- transaction: txb,
9585
- signer
9586
- });
9587
- return res;
9676
+ async sendTransaction(txb, signer) {
9677
+ const res = await this.client.signAndExecuteTransaction({
9678
+ transaction: txb,
9679
+ signer,
9680
+ options: { showEffects: true, showEvents: true, showBalanceChanges: true }
9588
9681
  });
9682
+ return res;
9589
9683
  }
9590
9684
  };
9591
9685
  _AggregatorClient.CONFIG = {
@@ -9654,174 +9748,4 @@ decimal.js/decimal.mjs:
9654
9748
  *)
9655
9749
  */
9656
9750
 
9657
- exports.AFSUI = AFSUI;
9658
- exports.AFTERMATH = AFTERMATH;
9659
- exports.AFTERMATH_AMM = AFTERMATH_AMM;
9660
- exports.AFTERMATH_MODULE = AFTERMATH_MODULE;
9661
- exports.AGGREGATOR = AGGREGATOR;
9662
- exports.AGGREGATOR_V3_CONFIG = AGGREGATOR_V3_CONFIG;
9663
- exports.ALL_DEXES = ALL_DEXES;
9664
- exports.ALPHAFI = ALPHAFI;
9665
- exports.AggregatorClient = AggregatorClient;
9666
- exports.AggregatorConfig = AggregatorConfig;
9667
- exports.AggregatorError = AggregatorError;
9668
- exports.AggregatorServerErrorCode = AggregatorServerErrorCode;
9669
- exports.BLUEFIN = BLUEFIN;
9670
- exports.BLUEMOVE = BLUEMOVE;
9671
- exports.CETUS = CETUS;
9672
- exports.CETUSDLMM = CETUSDLMM;
9673
- exports.CETUS_DEX = CETUS_DEX;
9674
- exports.CETUS_MODULE = CETUS_MODULE;
9675
- exports.CETUS_PUBLISHED_AT = CETUS_PUBLISHED_AT;
9676
- exports.CHECK_COINS_THRESHOLD_FUNC = CHECK_COINS_THRESHOLD_FUNC;
9677
- exports.CLIENT_CONFIG = CLIENT_CONFIG;
9678
- exports.CLOCK_ADDRESS = CLOCK_ADDRESS;
9679
- exports.CoinInfoAddress = CoinInfoAddress;
9680
- exports.CoinStoreAddress = CoinStoreAddress;
9681
- exports.CoinUtils = CoinUtils;
9682
- exports.ConfigErrorCode = ConfigErrorCode;
9683
- exports.DEEPBOOKV2 = DEEPBOOKV2;
9684
- exports.DEEPBOOKV3 = DEEPBOOKV3;
9685
- exports.DEEPBOOK_CLOB_V2_MODULE = DEEPBOOK_CLOB_V2_MODULE;
9686
- exports.DEEPBOOK_CUSTODIAN_V2_MODULE = DEEPBOOK_CUSTODIAN_V2_MODULE;
9687
- exports.DEEPBOOK_DEX = DEEPBOOK_DEX;
9688
- exports.DEEPBOOK_MODULE = DEEPBOOK_MODULE;
9689
- exports.DEEPBOOK_PACKAGE_ID = DEEPBOOK_PACKAGE_ID;
9690
- exports.DEEPBOOK_PUBLISHED_AT = DEEPBOOK_PUBLISHED_AT;
9691
- exports.DEEPBOOK_V3_DEEP_FEE_TYPES = DEEPBOOK_V3_DEEP_FEE_TYPES;
9692
- exports.DEFAULT_AGG_V2_ENDPOINT = DEFAULT_AGG_V2_ENDPOINT;
9693
- exports.DEFAULT_AGG_V3_ENDPOINT = DEFAULT_AGG_V3_ENDPOINT;
9694
- exports.DEFAULT_ENDPOINT = DEFAULT_ENDPOINT;
9695
- exports.DEFAULT_GAS_BUDGET_FOR_MERGE = DEFAULT_GAS_BUDGET_FOR_MERGE;
9696
- exports.DEFAULT_GAS_BUDGET_FOR_SPLIT = DEFAULT_GAS_BUDGET_FOR_SPLIT;
9697
- exports.DEFAULT_GAS_BUDGET_FOR_STAKE = DEFAULT_GAS_BUDGET_FOR_STAKE;
9698
- exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER = DEFAULT_GAS_BUDGET_FOR_TRANSFER;
9699
- exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI = DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI;
9700
- exports.DEFAULT_NFT_TRANSFER_GAS_FEE = DEFAULT_NFT_TRANSFER_GAS_FEE;
9701
- exports.Env = Env;
9702
- exports.FERRACLMM = FERRACLMM;
9703
- exports.FERRADLMM = FERRADLMM;
9704
- exports.FLOWXV2 = FLOWXV2;
9705
- exports.FLOWXV3 = FLOWXV3;
9706
- exports.FLOWX_AMM = FLOWX_AMM;
9707
- exports.FLOWX_AMM_MODULE = FLOWX_AMM_MODULE;
9708
- exports.FULLSAIL = FULLSAIL;
9709
- exports.FlashSwapA2BFunc = FlashSwapA2BFunc;
9710
- exports.FlashSwapB2AFunc = FlashSwapB2AFunc;
9711
- exports.FlashSwapFunc = FlashSwapFunc;
9712
- exports.FlashSwapWithPartnerA2BFunc = FlashSwapWithPartnerA2BFunc;
9713
- exports.FlashSwapWithPartnerB2AFunc = FlashSwapWithPartnerB2AFunc;
9714
- exports.FlashSwapWithPartnerFunc = FlashSwapWithPartnerFunc;
9715
- exports.GAS_SYMBOL = GAS_SYMBOL;
9716
- exports.GAS_TYPE_ARG = GAS_TYPE_ARG;
9717
- exports.GAS_TYPE_ARG_LONG = GAS_TYPE_ARG_LONG;
9718
- exports.HAEDAL = HAEDAL;
9719
- exports.HAEDALHMMV2 = HAEDALHMMV2;
9720
- exports.HAEDALPMM = HAEDALPMM;
9721
- exports.HAWAL = HAWAL;
9722
- exports.INTEGRATE = INTEGRATE;
9723
- exports.JOIN_FUNC = JOIN_FUNC;
9724
- exports.KRIYA = KRIYA;
9725
- exports.KRIYAV3 = KRIYAV3;
9726
- exports.KRIYA_DEX = KRIYA_DEX;
9727
- exports.KRIYA_MODULE = KRIYA_MODULE;
9728
- exports.MAGMA = MAGMA;
9729
- exports.MAINNET_AFTERMATH_INSURANCE_FUND_ID = MAINNET_AFTERMATH_INSURANCE_FUND_ID;
9730
- exports.MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
9731
- exports.MAINNET_AFTERMATH_REFERRAL_VAULT_ID = MAINNET_AFTERMATH_REFERRAL_VAULT_ID;
9732
- exports.MAINNET_AFTERMATH_REGISTRY_ID = MAINNET_AFTERMATH_REGISTRY_ID;
9733
- exports.MAINNET_AFTERMATH_TREASURY_ID = MAINNET_AFTERMATH_TREASURY_ID;
9734
- exports.MAINNET_CETUS_V3_PUBLISHED_AT = MAINNET_CETUS_V3_PUBLISHED_AT;
9735
- exports.MAINNET_FLOWX_AMM_CONTAINER_ID = MAINNET_FLOWX_AMM_CONTAINER_ID;
9736
- exports.METASTABLE = METASTABLE;
9737
- exports.MOMENTUM = MOMENTUM;
9738
- exports.OBRIC = OBRIC;
9739
- exports.ONE = ONE;
9740
- exports.PACKAGE_NAMES = PACKAGE_NAMES;
9741
- exports.PAY_MODULE = PAY_MODULE;
9742
- exports.POOL_MODULT = POOL_MODULT;
9743
- exports.PUBLISHED_ADDRESSES = PUBLISHED_ADDRESSES;
9744
- exports.PYTH_CONFIG = PYTH_CONFIG;
9745
- exports.REPAY_FLASH_SWAP_A2B_FUNC = REPAY_FLASH_SWAP_A2B_FUNC;
9746
- exports.REPAY_FLASH_SWAP_B2A_FUNC = REPAY_FLASH_SWAP_B2A_FUNC;
9747
- exports.REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC;
9748
- exports.REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC;
9749
- exports.RepayFalshSwapFunc = RepayFalshSwapFunc;
9750
- exports.RepayFlashSwapWithPartnerFunc = RepayFlashSwapWithPartnerFunc;
9751
- exports.SCALLOP = SCALLOP;
9752
- exports.SEVENK = SEVENK;
9753
- exports.SPRINGSUI = SPRINGSUI;
9754
- exports.STEAMM = STEAMM;
9755
- exports.STEAMM_OMM = STEAMM_OMM;
9756
- exports.STEAMM_OMM_V2 = STEAMM_OMM_V2;
9757
- exports.SUILEND = SUILEND;
9758
- exports.SUI_SYSTEM_STATE_OBJECT_ID = SUI_SYSTEM_STATE_OBJECT_ID;
9759
- exports.SWAP_A2B_FUNC = SWAP_A2B_FUNC;
9760
- exports.SWAP_B2A_FUNC = SWAP_B2A_FUNC;
9761
- exports.SuiZeroCoinFn = SuiZeroCoinFn;
9762
- exports.TEN_POW_NINE = TEN_POW_NINE;
9763
- exports.TESTNET_AFTERMATH_INSURANCE_FUND_ID = TESTNET_AFTERMATH_INSURANCE_FUND_ID;
9764
- exports.TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
9765
- exports.TESTNET_AFTERMATH_REFERRAL_VAULT_ID = TESTNET_AFTERMATH_REFERRAL_VAULT_ID;
9766
- exports.TESTNET_AFTERMATH_REGISTRY_ID = TESTNET_AFTERMATH_REGISTRY_ID;
9767
- exports.TESTNET_AFTERMATH_TREASURY_ID = TESTNET_AFTERMATH_TREASURY_ID;
9768
- exports.TESTNET_CETUS_V3_PUBLISHED_AT = TESTNET_CETUS_V3_PUBLISHED_AT;
9769
- exports.TESTNET_FLOWX_AMM_CONTAINER_ID = TESTNET_FLOWX_AMM_CONTAINER_ID;
9770
- exports.TRANSFER_ACCOUNT_CAP = TRANSFER_ACCOUNT_CAP;
9771
- exports.TRANSFER_OR_DESTORY_COIN_FUNC = TRANSFER_OR_DESTORY_COIN_FUNC;
9772
- exports.TURBOS = TURBOS;
9773
- exports.TURBOS_DEX = TURBOS_DEX;
9774
- exports.TURBOS_MODULE = TURBOS_MODULE;
9775
- exports.TURBOS_VERSIONED = TURBOS_VERSIONED;
9776
- exports.TWO = TWO;
9777
- exports.TransactionErrorCode = TransactionErrorCode;
9778
- exports.TypesErrorCode = TypesErrorCode;
9779
- exports.U128 = U128;
9780
- exports.U64_MAX = U64_MAX;
9781
- exports.U64_MAX_BN = U64_MAX_BN;
9782
- exports.UTILS_MODULE = UTILS_MODULE;
9783
- exports.VOLO = VOLO;
9784
- exports.ZERO = ZERO;
9785
- exports.buildInputCoin = buildInputCoin;
9786
- exports.calculateGasEfficiency = calculateGasEfficiency;
9787
- exports.calculatePriceImpact = calculatePriceImpact;
9788
- exports.checkInvalidSuiAddress = checkInvalidSuiAddress;
9789
- exports.compareCoins = compareCoins;
9790
- exports.compareGasMetrics = compareGasMetrics;
9791
- exports.completionCoin = completionCoin;
9792
- exports.composeType = composeType;
9793
- exports.createTarget = createTarget;
9794
- exports.dealWithFastRouterSwapParamsForMsafe = dealWithFastRouterSwapParamsForMsafe;
9795
- exports.exportToCSV = exportToCSV;
9796
- exports.exportToJSON = exportToJSON;
9797
- exports.extractAddressFromType = extractAddressFromType;
9798
- exports.extractGasMetrics = extractGasMetrics;
9799
- exports.extractStructTagFromType = extractStructTagFromType;
9800
- exports.extractTimestampFromDowngradeUuid6 = extractTimestampFromDowngradeUuid6;
9801
- exports.fixSuiObjectId = fixSuiObjectId;
9802
- exports.formatGasMetrics = formatGasMetrics;
9803
- exports.generateDowngradeUuid6 = generateDowngradeUuid6;
9804
- exports.generateSimpleDowngradeUuid6 = generateSimpleDowngradeUuid6;
9805
- exports.getAggregatorServerErrorMessage = getAggregatorServerErrorMessage;
9806
- exports.getAggregatorV2Extend2PublishedAt = getAggregatorV2Extend2PublishedAt;
9807
- exports.getAggregatorV2ExtendPublishedAt = getAggregatorV2ExtendPublishedAt;
9808
- exports.getAggregatorV2PublishedAt = getAggregatorV2PublishedAt;
9809
- exports.getAllProviders = getAllProviders;
9810
- exports.getDeepbookV3Config = getDeepbookV3Config;
9811
- exports.getDefaultSuiInputType = getDefaultSuiInputType;
9812
- exports.getMergeSwapResult = getMergeSwapResult;
9813
- exports.getOrCreateAccountCap = getOrCreateAccountCap;
9814
- exports.getProvidersExcluding = getProvidersExcluding;
9815
- exports.getProvidersIncluding = getProvidersIncluding;
9816
- exports.getRouterResult = getRouterResult;
9817
- exports.isSortedSymbols = isSortedSymbols;
9818
- exports.isValidDowngradeUuid6 = isValidDowngradeUuid6;
9819
- exports.mintZeroCoin = mintZeroCoin;
9820
- exports.normalizeCoinType = normalizeCoinType;
9821
- exports.parseAftermathFeeType = parseAftermathFeeType;
9822
- exports.parseTurbosPoolFeeType = parseTurbosPoolFeeType;
9823
- exports.patchFixSuiObjectId = patchFixSuiObjectId;
9824
- exports.printTransaction = printTransaction;
9825
- exports.processEndpoint = processEndpoint;
9826
- exports.processFlattenRoutes = processFlattenRoutes;
9827
- exports.restituteMsafeFastRouterSwapParams = restituteMsafeFastRouterSwapParams;
9751
+ export { AFSUI, AFTERMATH, AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AGGREGATOR_V3_CONFIG, ALL_DEXES, ALPHAFI, AggregatorClient, AggregatorConfig, AggregatorError, AggregatorServerErrorCode, BLUEFIN, BLUEMOVE, CETUS, CETUSDLMM, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLIENT_CONFIG, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, CoinUtils, ConfigErrorCode, DEEPBOOKV2, DEEPBOOKV3, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, DEEPBOOK_V3_DEEP_FEE_TYPES, DEFAULT_AGG_V2_ENDPOINT, DEFAULT_AGG_V3_ENDPOINT, DEFAULT_ENDPOINT, DEFAULT_GAS_BUDGET_FOR_MERGE, DEFAULT_GAS_BUDGET_FOR_SPLIT, DEFAULT_GAS_BUDGET_FOR_STAKE, DEFAULT_GAS_BUDGET_FOR_TRANSFER, DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI, DEFAULT_NFT_TRANSFER_GAS_FEE, Env, FERRACLMM, FERRADLMM, FLOWXV2, FLOWXV3, FLOWX_AMM, FLOWX_AMM_MODULE, FULLSAIL, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, GAS_SYMBOL, GAS_TYPE_ARG, GAS_TYPE_ARG_LONG, HAEDAL, HAEDALHMMV2, HAEDALPMM, HAWAL, INTEGRATE, JOIN_FUNC, KRIYA, KRIYAV3, KRIYA_DEX, KRIYA_MODULE, MAGMA, MAINNET_AFTERMATH_INSURANCE_FUND_ID, MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID, MAINNET_AFTERMATH_REFERRAL_VAULT_ID, MAINNET_AFTERMATH_REGISTRY_ID, MAINNET_AFTERMATH_TREASURY_ID, MAINNET_CETUS_V3_PUBLISHED_AT, MAINNET_FLOWX_AMM_CONTAINER_ID, METASTABLE, MOMENTUM, OBRIC, ONE, PACKAGE_NAMES, PAY_MODULE, POOL_MODULT, PUBLISHED_ADDRESSES, PYTH_CONFIG, REPAY_FLASH_SWAP_A2B_FUNC, REPAY_FLASH_SWAP_B2A_FUNC, REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC, REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC, RepayFalshSwapFunc, RepayFlashSwapWithPartnerFunc, SCALLOP, SEVENK, SPRINGSUI, STEAMM, STEAMM_OMM, STEAMM_OMM_V2, SUILEND, SUI_SYSTEM_STATE_OBJECT_ID, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, TEN_POW_NINE, TESTNET_AFTERMATH_INSURANCE_FUND_ID, TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID, TESTNET_AFTERMATH_REFERRAL_VAULT_ID, TESTNET_AFTERMATH_REGISTRY_ID, TESTNET_AFTERMATH_TREASURY_ID, TESTNET_CETUS_V3_PUBLISHED_AT, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, TransactionErrorCode, TypesErrorCode, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, VOLO, ZERO, buildInputCoin, calculateGasEfficiency, calculatePriceImpact, checkInvalidSuiAddress, compareCoins, compareGasMetrics, completionCoin, composeType, createTarget, dealWithFastRouterSwapParamsForMsafe, exportToCSV, exportToJSON, extractAddressFromType, extractGasMetrics, extractStructTagFromType, extractTimestampFromDowngradeUuid6, fixSuiObjectId, formatGasMetrics, generateDowngradeUuid6, generateSimpleDowngradeUuid6, getAggregatorServerErrorMessage, getAggregatorV2Extend2PublishedAt, getAggregatorV2ExtendPublishedAt, getAggregatorV2PublishedAt, getAllProviders, getDeepbookV3Config, getDefaultSuiInputType, getMergeSwapResult, getOrCreateAccountCap, getProvidersExcluding, getProvidersIncluding, getRouterResult, isSortedSymbols, isValidDowngradeUuid6, mintZeroCoin, normalizeCoinType, parseAftermathFeeType, parseTurbosPoolFeeType, patchFixSuiObjectId, printTransaction, processEndpoint, processFlattenRoutes, restituteMsafeFastRouterSwapParams };