@cetusprotocol/aggregator-sdk 1.4.4 → 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
  }
@@ -3452,7 +3410,7 @@ var AGGREGATOR_V3_CONFIG = {
3452
3410
  };
3453
3411
 
3454
3412
  // src/api.ts
3455
- var SDK_VERSION = 1010404;
3413
+ var SDK_VERSION = 1010405;
3456
3414
  function parseRouterResponse(data, byAmountIn) {
3457
3415
  let packages = /* @__PURE__ */ new Map();
3458
3416
  if (data.packages) {
@@ -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;
@@ -3860,6 +3805,7 @@ function processErrorStatusCode(status) {
3860
3805
  case 5e3:
3861
3806
  return 1002 /* InsufficientLiquidity */;
3862
3807
  case 5001:
3808
+ case 5010:
3863
3809
  return 1007 /* NotFoundRoute */;
3864
3810
  case 5030:
3865
3811
  return 1008 /* ServiceUnavailable */;
@@ -6104,7 +6050,7 @@ function CalculateAmountLimitByDecimal(expectAmount, byAmountIn, slippage) {
6104
6050
  var CetusRouter = class {
6105
6051
  constructor(env, partner) {
6106
6052
  this.globalConfig = env === 0 /* Mainnet */ ? "0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f" : "0xc6273f844b4bc258952c4e477697aa12c918c8e08106fac6b934811298c9820a";
6107
- this.partner = partner != null ? partner : env === 0 /* Mainnet */ ? "0x639b5e433da31739e800cd085f356e64cae222966d0f1b11bd9dc76b322ff58b" : "0xfdc30896f88f74544fd507722d3bf52e46b06412ba8241ba0e854cbc65f8d85f";
6053
+ this.partner = partner ?? (env === 0 /* Mainnet */ ? "0x639b5e433da31739e800cd085f356e64cae222966d0f1b11bd9dc76b322ff58b" : "0xfdc30896f88f74544fd507722d3bf52e46b06412ba8241ba0e854cbc65f8d85f");
6108
6054
  }
6109
6055
  // By amount in
6110
6056
  swap(txb, flattenedPath, swapContext, _extends) {
@@ -6135,7 +6081,7 @@ var CetusRouter = class {
6135
6081
  txb.object(this.partner),
6136
6082
  txb.pure.bool(swapData.direction),
6137
6083
  txb.pure.u64(swapData.amountIn),
6138
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6084
+ txb.object(SUI_CLOCK_OBJECT_ID)
6139
6085
  ];
6140
6086
  txb.moveCall({
6141
6087
  target: `${swapData.publishedAt}::cetus::swap`,
@@ -6154,7 +6100,7 @@ var CetusRouter = class {
6154
6100
  txb.pure.bool(path.direction),
6155
6101
  txb.pure.bool(false),
6156
6102
  // isExactIn
6157
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6103
+ txb.object(SUI_CLOCK_OBJECT_ID)
6158
6104
  ];
6159
6105
  const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
6160
6106
  const [flashReceipt, repayAmount] = txb.moveCall({
@@ -6237,7 +6183,7 @@ var KriyaV3Router = class {
6237
6183
  txb.object(this.version),
6238
6184
  txb.pure.bool(swapData.direction),
6239
6185
  txb.pure.u64(swapData.amountIn),
6240
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6186
+ txb.object(SUI_CLOCK_OBJECT_ID)
6241
6187
  ];
6242
6188
  txb.moveCall({
6243
6189
  target: `${swapData.publishedAt}::kriya_clmm::swap`,
@@ -6284,7 +6230,7 @@ var FlowxV3Router = class {
6284
6230
  txb.pure.u64(swapData.feeRate),
6285
6231
  txb.pure.u64(swapData.amountIn),
6286
6232
  txb.pure.bool(swapData.direction),
6287
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6233
+ txb.object(SUI_CLOCK_OBJECT_ID)
6288
6234
  ];
6289
6235
  txb.moveCall({
6290
6236
  target: `${swapData.publishedAt}::flowx_clmm::swap`,
@@ -6336,7 +6282,7 @@ var TurbosRouter = class {
6336
6282
  txb.object(this.versioned),
6337
6283
  txb.pure.bool(swapData.direction),
6338
6284
  txb.pure.u64(swapData.amountIn),
6339
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6285
+ txb.object(SUI_CLOCK_OBJECT_ID)
6340
6286
  ];
6341
6287
  txb.moveCall({
6342
6288
  target: `${swapData.publishedAt}::turbos::swap`,
@@ -6379,7 +6325,7 @@ var BluefinRouter = class {
6379
6325
  txb.object(swapData.poolId),
6380
6326
  txb.pure.bool(swapData.direction),
6381
6327
  txb.pure.u64(swapData.amountIn),
6382
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6328
+ txb.object(SUI_CLOCK_OBJECT_ID)
6383
6329
  ];
6384
6330
  txb.moveCall({
6385
6331
  target: `${swapData.publishedAt}::bluefin::swap`,
@@ -6422,7 +6368,7 @@ var MomentumRouter = class {
6422
6368
  txb.pure.bool(swapData.direction),
6423
6369
  txb.pure.u64(swapData.amountIn),
6424
6370
  txb.object(this.version),
6425
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6371
+ txb.object(SUI_CLOCK_OBJECT_ID)
6426
6372
  ];
6427
6373
  txb.moveCall({
6428
6374
  target: `${swapData.publishedAt}::momentum::swap`,
@@ -6465,7 +6411,7 @@ var MagmaRouter = class {
6465
6411
  txb.object(swapData.poolId),
6466
6412
  txb.pure.bool(swapData.direction),
6467
6413
  txb.pure.u64(swapData.amountIn),
6468
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6414
+ txb.object(SUI_CLOCK_OBJECT_ID)
6469
6415
  ];
6470
6416
  txb.moveCall({
6471
6417
  target: `${swapData.publishedAt}::magma::swap`,
@@ -6618,17 +6564,16 @@ var DeepbookV3Router = class {
6618
6564
  this.executeSwapContract(txb, swapData, swapContext, _extends);
6619
6565
  }
6620
6566
  prepareSwapData(flattenedPath) {
6621
- var _a, _b, _c, _d, _e;
6622
6567
  if (flattenedPath.path.publishedAt == null) {
6623
6568
  throw new Error("DeepBook V3 not set publishedAt");
6624
6569
  }
6625
6570
  const path = flattenedPath.path;
6626
6571
  const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
6627
6572
  const amountIn = flattenedPath.isLastUseOfIntermediateToken ? AGGREGATOR_V3_CONFIG.MAX_AMOUNT_IN : path.amountIn;
6628
- const needAddDeepPricePoint = (_b = (_a = path.extendedDetails) == null ? void 0 : _a.deepbookv3_need_add_deep_price_point) != null ? _b : false;
6629
- const referencePoolId = (_c = path.extendedDetails) == null ? void 0 : _c.deepbookv3_reference_pool_id;
6630
- const referencePoolBaseType = (_d = path.extendedDetails) == null ? void 0 : _d.deepbookv3_reference_pool_base_type;
6631
- 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;
6632
6577
  if (needAddDeepPricePoint) {
6633
6578
  if (!referencePoolId) {
6634
6579
  throw new Error(
@@ -6671,12 +6616,12 @@ var DeepbookV3Router = class {
6671
6616
  arguments: [
6672
6617
  txb.object(swapData.poolId),
6673
6618
  txb.object(swapData.referencePoolId),
6674
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6619
+ txb.object(SUI_CLOCK_OBJECT_ID)
6675
6620
  ]
6676
6621
  });
6677
6622
  }
6678
6623
  executeSwapContract(txb, swapData, swapContext, _extends) {
6679
- const deepCoin = (_extends == null ? void 0 : _extends.deepbookv3DeepFee) || txb.moveCall({
6624
+ const deepCoin = _extends?.deepbookv3DeepFee || txb.moveCall({
6680
6625
  target: "0x2::coin::zero",
6681
6626
  typeArguments: [this.getDeepFeeType()]
6682
6627
  });
@@ -6687,7 +6632,7 @@ var DeepbookV3Router = class {
6687
6632
  txb.pure.u64(swapData.amountIn),
6688
6633
  txb.pure.bool(swapData.direction),
6689
6634
  deepCoin,
6690
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6635
+ txb.object(SUI_CLOCK_OBJECT_ID)
6691
6636
  ];
6692
6637
  txb.moveCall({
6693
6638
  target: `${swapData.publishedAt}::deepbookv3::swap`,
@@ -6717,7 +6662,6 @@ var AftermathRouter = class {
6717
6662
  this.executeSwapContract(txb, swapData, swapContext);
6718
6663
  }
6719
6664
  prepareSwapData(flattenedPath) {
6720
- var _a, _b;
6721
6665
  if (flattenedPath.path.publishedAt == null) {
6722
6666
  throw new Error("Aftermath not set publishedAt");
6723
6667
  }
@@ -6727,7 +6671,7 @@ var AftermathRouter = class {
6727
6671
  return {
6728
6672
  coinAType,
6729
6673
  coinBType,
6730
- 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",
6731
6675
  // Use LP supply type from path (handle both camelCase and snake_case)
6732
6676
  direction: path.direction,
6733
6677
  amountIn,
@@ -6824,7 +6768,7 @@ var SteammCPMMRouter = class {
6824
6768
  txb.object(swapData.extendedDetails.steamm_lending_market),
6825
6769
  txb.pure.bool(swapData.direction),
6826
6770
  txb.pure.u64(swapData.amountIn),
6827
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6771
+ txb.object(SUI_CLOCK_OBJECT_ID)
6828
6772
  ];
6829
6773
  txb.moveCall({
6830
6774
  target: `${swapData.publishedAt}::steamm_cpmm::swap`,
@@ -6883,7 +6827,7 @@ var ScallopRouter = class {
6883
6827
  txb.object(this.marketData),
6884
6828
  txb.object(swapData.scallopScoinTreasury),
6885
6829
  txb.pure.u64(swapData.amountIn),
6886
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6830
+ txb.object(SUI_CLOCK_OBJECT_ID)
6887
6831
  ];
6888
6832
  const func = swapData.direction ? "swap_a2b" : "swap_b2a";
6889
6833
  txb.moveCall({
@@ -6999,7 +6943,7 @@ var HaedalPmmRouter = class {
6999
6943
  // amount_in
7000
6944
  txb.pure.bool(swapData.a2b),
7001
6945
  // a2b
7002
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
6946
+ txb.object(SUI_CLOCK_OBJECT_ID)
7003
6947
  // clock
7004
6948
  ];
7005
6949
  txb.moveCall({
@@ -7073,7 +7017,7 @@ var ObricRouter = class {
7073
7017
  txb.object(this.pythStateObjectId),
7074
7018
  txb.object(swapData.coinAPriceInfoObjectId),
7075
7019
  txb.object(swapData.coinBPriceInfoObjectId),
7076
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7020
+ txb.object(SUI_CLOCK_OBJECT_ID)
7077
7021
  ];
7078
7022
  txb.moveCall({
7079
7023
  target: `${swapData.publishedAt}::obric::swap`,
@@ -7148,7 +7092,7 @@ var SevenkRouter = class {
7148
7092
  txb.object(swapData.coinAOracleId),
7149
7093
  holder,
7150
7094
  txb.object(swapData.coinAPriceId),
7151
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7095
+ txb.object(SUI_CLOCK_OBJECT_ID)
7152
7096
  ]
7153
7097
  });
7154
7098
  txb.moveCall({
@@ -7158,7 +7102,7 @@ var SevenkRouter = class {
7158
7102
  txb.object(swapData.coinBOracleId),
7159
7103
  holder,
7160
7104
  txb.object(swapData.coinBPriceId),
7161
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7105
+ txb.object(SUI_CLOCK_OBJECT_ID)
7162
7106
  ]
7163
7107
  });
7164
7108
  const args = [
@@ -7255,7 +7199,7 @@ var SteammOmmRouter = class {
7255
7199
  txb.object(extendedDetails.steammOracleRegistryId),
7256
7200
  txb.object(swapData.priceInfoObjectIdA),
7257
7201
  txb.pure.u64(extendedDetails.steammOracleIndexA),
7258
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7202
+ txb.object(SUI_CLOCK_OBJECT_ID)
7259
7203
  ]
7260
7204
  });
7261
7205
  const oraclePriceUpdateB = txb.moveCall({
@@ -7265,7 +7209,7 @@ var SteammOmmRouter = class {
7265
7209
  txb.object(extendedDetails.steammOracleRegistryId),
7266
7210
  txb.object(swapData.priceInfoObjectIdB),
7267
7211
  txb.pure.u64(extendedDetails.steammOracleIndexB),
7268
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7212
+ txb.object(SUI_CLOCK_OBJECT_ID)
7269
7213
  ]
7270
7214
  });
7271
7215
  const args = [
@@ -7277,7 +7221,7 @@ var SteammOmmRouter = class {
7277
7221
  oraclePriceUpdateA,
7278
7222
  oraclePriceUpdateB,
7279
7223
  txb.pure.u64(swapData.amountIn),
7280
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7224
+ txb.object(SUI_CLOCK_OBJECT_ID)
7281
7225
  ];
7282
7226
  txb.moveCall({
7283
7227
  target: `${swapData.publishedAt}::steamm_omm::${swapData.func}`,
@@ -7373,7 +7317,7 @@ var SteammOmmV2Router = class {
7373
7317
  txb.object(extendedDetails.steamm_oracle_registry_id),
7374
7318
  txb.object(swapData.priceInfoObjectIdA),
7375
7319
  txb.pure.u64(extendedDetails.steamm_oracle_index_a),
7376
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7320
+ txb.object(SUI_CLOCK_OBJECT_ID)
7377
7321
  ]
7378
7322
  });
7379
7323
  const oraclePriceUpdateB = txb.moveCall({
@@ -7383,7 +7327,7 @@ var SteammOmmV2Router = class {
7383
7327
  txb.object(extendedDetails.steamm_oracle_registry_id),
7384
7328
  txb.object(swapData.priceInfoObjectIdB),
7385
7329
  txb.pure.u64(extendedDetails.steamm_oracle_index_b),
7386
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7330
+ txb.object(SUI_CLOCK_OBJECT_ID)
7387
7331
  ]
7388
7332
  });
7389
7333
  const args = [
@@ -7396,7 +7340,7 @@ var SteammOmmV2Router = class {
7396
7340
  oraclePriceUpdateB,
7397
7341
  txb.pure.bool(swapData.direction),
7398
7342
  txb.pure.u64(swapData.amountIn),
7399
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
7343
+ txb.object(SUI_CLOCK_OBJECT_ID)
7400
7344
  ];
7401
7345
  txb.moveCall({
7402
7346
  target: `${swapData.publishedAt}::steamm_omm_v2::swap`,
@@ -7500,7 +7444,7 @@ var MetastableRouter = class {
7500
7444
  }
7501
7445
  depositArgs.push(txb.object(priceId));
7502
7446
  }
7503
- depositArgs.push(txb.object(utils.SUI_CLOCK_OBJECT_ID));
7447
+ depositArgs.push(txb.object(SUI_CLOCK_OBJECT_ID));
7504
7448
  break;
7505
7449
  }
7506
7450
  default:
@@ -7661,7 +7605,7 @@ var AfsuiRouter = class {
7661
7605
  txb.object("0x5"),
7662
7606
  // SuiSystemState
7663
7607
  txb.object(this.referVault),
7664
- txb.object(this.validator),
7608
+ txb.pure.address(this.validator),
7665
7609
  txb.pure.bool(swapData.direction),
7666
7610
  txb.pure.u64(swapData.amountIn)
7667
7611
  ];
@@ -7751,7 +7695,7 @@ var HawalRouter = class {
7751
7695
  swapContext,
7752
7696
  txb.object(this.staking),
7753
7697
  txb.object(swapData.poolId),
7754
- txb.object(this.validator),
7698
+ txb.pure.address(this.validator),
7755
7699
  txb.pure.bool(swapData.direction),
7756
7700
  txb.pure.u64(swapData.amountIn)
7757
7701
  ];
@@ -7871,6 +7815,221 @@ function transferOrDestroyCoin(params, txb) {
7871
7815
  arguments: [coin]
7872
7816
  });
7873
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
+ };
7874
8033
 
7875
8034
  // src/utils/uuid.ts
7876
8035
  function generateDowngradeUuid6() {
@@ -7929,7 +8088,7 @@ function extractTimestampFromDowngradeUuid6(uuid) {
7929
8088
  const timestampHex = timeHigh + timeMid;
7930
8089
  const timestamp = parseInt(timestampHex, 16);
7931
8090
  return isNaN(timestamp) ? null : timestamp;
7932
- } catch (e) {
8091
+ } catch {
7933
8092
  return null;
7934
8093
  }
7935
8094
  }
@@ -7945,72 +8104,60 @@ function processEndpoint(endpoint) {
7945
8104
  }
7946
8105
 
7947
8106
  // src/utils/account_cap.ts
7948
- function getOrCreateAccountCap(txb, client, owner) {
7949
- return __async(this, null, function* () {
7950
- let accountCapStr = yield getAccountCap(client, owner);
7951
- if (accountCapStr !== null) {
7952
- return {
7953
- accountCap: txb.object(accountCapStr),
7954
- isCreate: false
7955
- };
7956
- }
7957
- const accountCap = txb.moveCall({
7958
- target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
7959
- typeArguments: [],
7960
- arguments: []
7961
- });
8107
+ async function getOrCreateAccountCap(txb, client, owner) {
8108
+ let accountCapStr = await getAccountCap(client, owner);
8109
+ if (accountCapStr !== null) {
7962
8110
  return {
7963
- accountCap,
7964
- isCreate: true
8111
+ accountCap: txb.object(accountCapStr),
8112
+ isCreate: false
7965
8113
  };
8114
+ }
8115
+ const accountCap = txb.moveCall({
8116
+ target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
8117
+ typeArguments: [],
8118
+ arguments: []
7966
8119
  });
8120
+ return {
8121
+ accountCap,
8122
+ isCreate: true
8123
+ };
7967
8124
  }
7968
- function getAccountCap(client, owner) {
7969
- return __async(this, null, function* () {
7970
- let limit = 50;
7971
- let cursor = null;
7972
- while (true) {
7973
- const ownedObjects = client.getOwnedObjects({
7974
- owner,
7975
- cursor,
7976
- limit,
7977
- filter: {
7978
- MoveModule: {
7979
- package: DEEPBOOK_PACKAGE_ID,
7980
- module: DEEPBOOK_CUSTODIAN_V2_MODULE
7981
- }
7982
- }
7983
- });
7984
- if (ownedObjects != null && ownedObjects.data != null) {
7985
- if (ownedObjects.data.length !== 0) {
7986
- return ownedObjects.data[0].data.objectId;
7987
- }
7988
- if (ownedObjects.data.length < 50) {
7989
- break;
7990
- }
7991
- } else {
7992
- break;
7993
- }
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;
7994
8137
  }
7995
- return null;
7996
- });
8138
+ if (!ownedObjects.hasNextPage) {
8139
+ break;
8140
+ }
8141
+ cursor = ownedObjects.nextCursor ?? void 0;
8142
+ }
8143
+ return null;
7997
8144
  }
7998
8145
 
7999
8146
  // src/utils/config.ts
8000
8147
  function getAggregatorV2PublishedAt(publishedAt, packages) {
8001
- if (packages == null ? void 0 : packages.has("aggregator_v2")) {
8148
+ if (packages?.has("aggregator_v2")) {
8002
8149
  return packages.get("aggregator_v2");
8003
8150
  }
8004
8151
  return publishedAt || PUBLISHED_ADDRESSES.V2.Mainnet;
8005
8152
  }
8006
8153
  function getAggregatorV2ExtendPublishedAt(publishedAt, packages) {
8007
- if (packages == null ? void 0 : packages.has("aggregator_v2_extend")) {
8154
+ if (packages?.has("aggregator_v2_extend")) {
8008
8155
  return packages.get("aggregator_v2_extend");
8009
8156
  }
8010
8157
  return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND.Mainnet;
8011
8158
  }
8012
8159
  function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
8013
- if (packages == null ? void 0 : packages.has("aggregator_v2_extend2")) {
8160
+ if (packages?.has("aggregator_v2_extend2")) {
8014
8161
  return packages.get("aggregator_v2_extend2");
8015
8162
  }
8016
8163
  return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND2.Mainnet;
@@ -8020,8 +8167,9 @@ function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
8020
8167
  var import_bn4 = __toESM(require_bn());
8021
8168
  function extractGasMetrics(result) {
8022
8169
  const effects = result.effects;
8023
- const success = effects.status.status === "success";
8024
- if (!success) {
8170
+ const isSuccess = !result.error && effects.status.status === "success";
8171
+ if (!isSuccess) {
8172
+ const errorMsg = result.error ?? effects.status.error ?? "Unknown error";
8025
8173
  return {
8026
8174
  computationCost: "0",
8027
8175
  storageCost: "0",
@@ -8031,27 +8179,27 @@ function extractGasMetrics(result) {
8031
8179
  gasUsed: "0",
8032
8180
  gasPrice: "0",
8033
8181
  success: false,
8034
- error: effects.status.error || "Unknown error"
8182
+ error: errorMsg
8035
8183
  };
8036
8184
  }
8037
8185
  const gasUsed = effects.gasUsed;
8038
8186
  return {
8039
- computationCost: gasUsed.computationCost || "0",
8040
- storageCost: gasUsed.storageCost || "0",
8041
- storageRebate: gasUsed.storageRebate || "0",
8042
- nonRefundableStorageFee: gasUsed.nonRefundableStorageFee || "0",
8187
+ computationCost: gasUsed.computationCost,
8188
+ storageCost: gasUsed.storageCost,
8189
+ storageRebate: gasUsed.storageRebate,
8190
+ nonRefundableStorageFee: gasUsed.nonRefundableStorageFee,
8043
8191
  totalGasCost: calculateTotalGasCost(gasUsed),
8044
- gasUsed: gasUsed.computationCost || "0",
8192
+ gasUsed: gasUsed.computationCost,
8045
8193
  gasPrice: "1000",
8046
8194
  // Standard Sui gas price in MIST
8047
8195
  success: true
8048
8196
  };
8049
8197
  }
8050
8198
  function calculateTotalGasCost(gasUsed) {
8051
- const computation = new import_bn4.default(gasUsed.computationCost || "0");
8052
- const storage = new import_bn4.default(gasUsed.storageCost || "0");
8053
- const rebate = new import_bn4.default(gasUsed.storageRebate || "0");
8054
- 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);
8055
8203
  return computation.add(storage).sub(rebate).add(nonRefundable).toString();
8056
8204
  }
8057
8205
  function calculateGasEfficiency(amountOut, totalGasCost) {
@@ -8093,12 +8241,12 @@ function calculateAverageGas(analyses) {
8093
8241
  }
8094
8242
  function formatGasMetrics(metrics, isEstimated) {
8095
8243
  if (!metrics.success) {
8096
- return `\u274C Failed: ${metrics.error}`;
8244
+ return `Failed: ${metrics.error}`;
8097
8245
  }
8098
8246
  const totalGas = Number(metrics.totalGasCost);
8099
8247
  const gasInSui = totalGas / 1e9;
8100
8248
  const estimatedFlag = isEstimated ? " (estimated)" : "";
8101
- return `\u2705 Gas: ${totalGas.toString()} MIST (${gasInSui.toString()} SUI)${estimatedFlag}`;
8249
+ return `Gas: ${totalGas.toString()} MIST (${gasInSui.toString()} SUI)${estimatedFlag}`;
8102
8250
  }
8103
8251
  function exportToJSON(comparison) {
8104
8252
  return JSON.stringify(comparison, null, 2);
@@ -8166,63 +8314,62 @@ function exportToCSV(comparison) {
8166
8314
  // src/utils/msafe.ts
8167
8315
  var import_bn5 = __toESM(require_bn());
8168
8316
  var dealWithFastRouterSwapParamsForMsafe = (data) => {
8169
- var _a, _b, _c;
8170
- const result = __spreadProps(__spreadValues({}, data), {
8171
- amountIn: (_a = data == null ? void 0 : data.amountIn) == null ? void 0 : _a.toString(),
8172
- amountOut: (_b = data == null ? void 0 : data.amountIn) == null ? void 0 : _b.toString(),
8173
- paths: (_c = data == null ? void 0 : data.paths) == null ? void 0 : _c.map((item) => {
8174
- var _a2, _b2, _c2, _d, _e, _f;
8175
- const info = __spreadProps(__spreadValues({}, item), {
8176
- amountIn: (_a2 = item == null ? void 0 : item.amountIn) == null ? void 0 : _a2.toString(),
8177
- amountOut: (_b2 = item == null ? void 0 : item.amountOut) == null ? void 0 : _b2.toString()
8178
- });
8179
- if (item == null ? void 0 : item.initialPrice) {
8180
- info["initialPrice"] = (_c2 = item == null ? void 0 : item.initialPrice) == null ? void 0 : _c2.toString();
8181
- }
8182
- 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) {
8183
8331
  info["extendedDetails"] = {
8184
- 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()
8185
8333
  };
8186
8334
  }
8187
8335
  return info;
8188
8336
  })
8189
- });
8337
+ };
8190
8338
  return result;
8191
8339
  };
8192
8340
  var restituteMsafeFastRouterSwapParams = (data) => {
8193
- var _a;
8194
- const result = __spreadProps(__spreadValues({}, data), {
8195
- amountIn: new import_bn5.default(data == null ? void 0 : data.amountIn),
8196
- amountOut: new import_bn5.default(data == null ? void 0 : data.amountIn),
8197
- paths: (_a = data == null ? void 0 : data.paths) == null ? void 0 : _a.map((item) => {
8198
- var _a2, _b, _c, _d;
8199
- const info = __spreadValues({}, item);
8200
- if (item == null ? void 0 : item.initialPrice) {
8201
- info["initialPrice"] = new decimal_default((_a2 = item == null ? void 0 : item.initialPrice) == null ? void 0 : _a2.toString());
8202
- }
8203
- 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) {
8204
8353
  info["extendedDetails"] = {
8205
- 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())
8206
8355
  };
8207
8356
  }
8208
8357
  return info;
8209
8358
  })
8210
- });
8359
+ };
8211
8360
  return result;
8212
8361
  };
8213
8362
 
8214
8363
  // src/utils/transaction.ts
8215
- function printTransaction(tx, isPrint = true) {
8216
- return __async(this, null, function* () {
8217
- console.log(`inputs`, tx.getData().inputs);
8218
- tx.getData().commands.forEach((item, index) => {
8219
- if (isPrint) {
8220
- console.log(
8221
- `transaction ${index}: `,
8222
- JSON.stringify(item, bigIntReplacer, 2)
8223
- );
8224
- }
8225
- });
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
+ }
8226
8373
  });
8227
8374
  }
8228
8375
  function bigIntReplacer(key, value) {
@@ -8294,7 +8441,7 @@ var HaedalHMMV2Router = class {
8294
8441
  // amount_in
8295
8442
  txb.pure.bool(swapData.a2b),
8296
8443
  // a2b
8297
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8444
+ txb.object(SUI_CLOCK_OBJECT_ID)
8298
8445
  // clock
8299
8446
  ];
8300
8447
  txb.moveCall({
@@ -8344,7 +8491,7 @@ var FullsailRouter = class {
8344
8491
  txb.object(swapData.poolId),
8345
8492
  txb.pure.bool(swapData.direction),
8346
8493
  txb.pure.u64(swapData.amountIn),
8347
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8494
+ txb.object(SUI_CLOCK_OBJECT_ID)
8348
8495
  ];
8349
8496
  txb.moveCall({
8350
8497
  target: `${swapData.publishedAt}::fullsail::swap`,
@@ -8359,7 +8506,7 @@ var CetusDlmmRouter = class {
8359
8506
  throw new Error("CetusRouter only supported on mainnet");
8360
8507
  }
8361
8508
  this.globalConfig = "0xf31b605d117f959b9730e8c07b08b856cb05143c5e81d5751c90d2979e82f599";
8362
- this.partner = partner != null ? partner : "0x59ae16f6c42f578063c2da9b9c0173fe58120ceae08e40fd8212c8eceb80bb86";
8509
+ this.partner = partner ?? "0x59ae16f6c42f578063c2da9b9c0173fe58120ceae08e40fd8212c8eceb80bb86";
8363
8510
  this.versioned = "0x05370b2d656612dd5759cbe80463de301e3b94a921dfc72dd9daa2ecdeb2d0a8";
8364
8511
  }
8365
8512
  swap(txb, flattenedPath, swapContext, _extends) {
@@ -8391,7 +8538,7 @@ var CetusDlmmRouter = class {
8391
8538
  txb.pure.bool(swapData.direction),
8392
8539
  txb.pure.u64(swapData.amountIn),
8393
8540
  txb.object(this.versioned),
8394
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8541
+ txb.object(SUI_CLOCK_OBJECT_ID)
8395
8542
  ];
8396
8543
  txb.moveCall({
8397
8544
  target: `${swapData.publishedAt}::cetus_dlmm::swap`,
@@ -8434,7 +8581,7 @@ var FerraDlmmRouter = class {
8434
8581
  txb.object(swapData.poolId),
8435
8582
  txb.pure.bool(swapData.direction),
8436
8583
  txb.pure.u64(swapData.amountIn),
8437
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8584
+ txb.object(SUI_CLOCK_OBJECT_ID)
8438
8585
  ];
8439
8586
  txb.moveCall({
8440
8587
  target: `${swapData.publishedAt}::ferra_dlmm::swap`,
@@ -8477,7 +8624,7 @@ var FerraClmmRouter = class {
8477
8624
  txb.object(swapData.poolId),
8478
8625
  txb.pure.bool(swapData.direction),
8479
8626
  txb.pure.u64(swapData.amountIn),
8480
- txb.object(utils.SUI_CLOCK_OBJECT_ID)
8627
+ txb.object(SUI_CLOCK_OBJECT_ID)
8481
8628
  ];
8482
8629
  txb.moveCall({
8483
8630
  target: `${swapData.publishedAt}::ferra_clmm::swap`,
@@ -8619,17 +8766,18 @@ function findPythPriceIDs(paths) {
8619
8766
  }
8620
8767
  var _AggregatorClient = class _AggregatorClient {
8621
8768
  constructor(params) {
8622
- var _a, _b;
8623
8769
  this.endpoint = params.endpoint ? processEndpoint(params.endpoint) : DEFAULT_ENDPOINT;
8624
- 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 });
8625
8773
  this.signer = params.signer || "";
8626
8774
  this.env = params.env || 0 /* Mainnet */;
8627
8775
  const config2 = _AggregatorClient.CONFIG[this.env];
8628
- this.pythConnections = this.newPythClients((_a = params.pythUrls) != null ? _a : []);
8629
- this.pythClient = new pythSuiJs.SuiPythClient(
8776
+ this.pythAdapter = new PythAdapter(
8630
8777
  this.client,
8631
8778
  config2.pythStateId,
8632
- config2.wormholeStateId
8779
+ config2.wormholeStateId,
8780
+ params.pythUrls ?? []
8633
8781
  );
8634
8782
  this.apiKey = params.apiKey || "";
8635
8783
  this.partner = params.partner;
@@ -8648,16 +8796,7 @@ var _AggregatorClient = class _AggregatorClient {
8648
8796
  } else {
8649
8797
  this.overlayFeeRate = 0;
8650
8798
  }
8651
- this.overlayFeeReceiver = (_b = params.overlayFeeReceiver) != null ? _b : CLIENT_CONFIG.DEFAULT_OVERLAY_FEE_RECEIVER;
8652
- }
8653
- newPythClients(pythUrls) {
8654
- if (!pythUrls.includes("https://hermes.pyth.network")) {
8655
- pythUrls.push("https://hermes.pyth.network");
8656
- }
8657
- const connections = pythUrls.map(
8658
- (url) => new pythSuiJs.SuiPriceServiceConnection(url, { timeout: 3e3 })
8659
- );
8660
- return connections;
8799
+ this.overlayFeeReceiver = params.overlayFeeReceiver ?? CLIENT_CONFIG.DEFAULT_OVERLAY_FEE_RECEIVER;
8661
8800
  }
8662
8801
  deepbookv3DeepFeeType() {
8663
8802
  if (this.env === 0 /* Mainnet */) {
@@ -8666,53 +8805,43 @@ var _AggregatorClient = class _AggregatorClient {
8666
8805
  return DEEPBOOK_V3_DEEP_FEE_TYPES.Testnet;
8667
8806
  }
8668
8807
  }
8669
- getDeepbookV3Config() {
8670
- return __async(this, null, function* () {
8671
- return yield getDeepbookV3Config(this.endpoint);
8672
- });
8808
+ async getDeepbookV3Config() {
8809
+ return await getDeepbookV3Config(this.endpoint);
8673
8810
  }
8674
- getOneCoinUsedToMerge(coinType) {
8675
- return __async(this, null, function* () {
8676
- try {
8677
- const gotCoin = yield this.client.getCoins({
8678
- owner: this.signer,
8679
- coinType,
8680
- limit: 1
8681
- });
8682
- if (gotCoin.data.length === 1) {
8683
- return gotCoin.data[0].coinObjectId;
8684
- }
8685
- return null;
8686
- } catch (error) {
8687
- 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;
8688
8820
  }
8689
- });
8821
+ return null;
8822
+ } catch (error) {
8823
+ return null;
8824
+ }
8690
8825
  }
8691
- findRouters(params) {
8692
- return __async(this, null, function* () {
8693
- return getRouterResult(
8694
- this.endpoint,
8695
- this.apiKey,
8696
- params,
8697
- this.overlayFeeRate,
8698
- this.overlayFeeReceiver
8699
- );
8700
- });
8826
+ async findRouters(params) {
8827
+ return getRouterResult(
8828
+ this.endpoint,
8829
+ this.apiKey,
8830
+ params,
8831
+ this.overlayFeeRate,
8832
+ this.overlayFeeReceiver
8833
+ );
8701
8834
  }
8702
- findMergeSwapRouters(params) {
8703
- return __async(this, null, function* () {
8704
- return getMergeSwapResult(
8705
- this.endpoint,
8706
- this.apiKey,
8707
- params,
8708
- this.overlayFeeRate,
8709
- this.overlayFeeReceiver
8710
- );
8711
- });
8835
+ async findMergeSwapRouters(params) {
8836
+ return getMergeSwapResult(
8837
+ this.endpoint,
8838
+ this.apiKey,
8839
+ params,
8840
+ this.overlayFeeRate,
8841
+ this.overlayFeeReceiver
8842
+ );
8712
8843
  }
8713
- executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
8714
- return __async(this, null, function* () {
8715
- });
8844
+ async executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
8716
8845
  }
8717
8846
  newDexRouterV3(provider, pythPriceIDs, partner, cetusDlmmPartner) {
8718
8847
  switch (provider) {
@@ -9098,55 +9227,53 @@ var _AggregatorClient = class _AggregatorClient {
9098
9227
  );
9099
9228
  return outputCoin;
9100
9229
  }
9101
- routerSwap(params) {
9102
- return __async(this, null, function* () {
9103
- const { router, inputCoin, slippage, txb, partner } = params;
9104
- if (slippage > 1 || slippage < 0) {
9105
- throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9106
- }
9107
- if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9108
- throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9109
- }
9110
- const byAmountIn = params.router.byAmountIn;
9111
- const amountIn = router.amountIn;
9112
- const amountOut = router.amountOut;
9113
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9114
- let overlayFee = new import_bn6.default(0);
9115
- if (byAmountIn) {
9116
- overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9117
- } else {
9118
- overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9119
- }
9120
- const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
9121
- const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
9122
- const amountLimit = CalculateAmountLimitBN(
9123
- byAmountIn ? expectedAmountOut : expectedAmountIn,
9124
- byAmountIn,
9125
- 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
9126
9266
  );
9127
- const priceIDs = findPythPriceIDs(router.paths);
9128
- const priceInfoObjectIds = priceIDs.length > 0 ? yield this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9129
- if (byAmountIn) {
9130
- return this.expectInputSwapV3(
9131
- txb,
9132
- inputCoin,
9133
- router,
9134
- amountOut.toString(),
9135
- amountLimit.toString(),
9136
- priceInfoObjectIds,
9137
- partner != null ? partner : this.partner
9138
- );
9139
- } else {
9140
- return this.expectOutputSwapV3(
9141
- txb,
9142
- inputCoin,
9143
- router,
9144
- amountOut.toString(),
9145
- amountLimit.toString(),
9146
- partner != null ? partner : this.partner
9147
- );
9148
- }
9149
- });
9267
+ } else {
9268
+ return this.expectOutputSwapV3(
9269
+ txb,
9270
+ inputCoin,
9271
+ router,
9272
+ amountOut.toString(),
9273
+ amountLimit.toString(),
9274
+ partner ?? this.partner
9275
+ );
9276
+ }
9150
9277
  }
9151
9278
  /**
9152
9279
  * Router swap with max amount in validation.
@@ -9157,434 +9284,402 @@ var _AggregatorClient = class _AggregatorClient {
9157
9284
  * @returns TransactionObjectArgument - The output coin from the swap
9158
9285
  * @throws Error if input coin amount exceeds maxAmountIn
9159
9286
  */
9160
- routerSwapWithMaxAmountIn(params) {
9161
- return __async(this, null, function* () {
9162
- const { router, inputCoin, slippage, txb, partner, maxAmountIn } = params;
9163
- if (slippage > 1 || slippage < 0) {
9164
- throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9165
- }
9166
- if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9167
- throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9168
- }
9169
- const byAmountIn = params.router.byAmountIn;
9170
- const amountIn = router.amountIn;
9171
- const amountOut = router.amountOut;
9172
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9173
- let overlayFee = new import_bn6.default(0);
9174
- if (byAmountIn) {
9175
- overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9176
- } else {
9177
- overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
9178
- }
9179
- const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
9180
- const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
9181
- const amountLimit = CalculateAmountLimitBN(
9182
- byAmountIn ? expectedAmountOut : expectedAmountIn,
9183
- byAmountIn,
9184
- 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
9185
9324
  );
9186
- const priceIDs = findPythPriceIDs(router.paths);
9187
- const priceInfoObjectIds = priceIDs.length > 0 ? yield this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9188
- if (byAmountIn) {
9189
- return this.expectInputSwapV3WithMaxAmountIn(
9190
- txb,
9191
- inputCoin,
9192
- router,
9193
- maxAmountIn,
9194
- amountOut.toString(),
9195
- amountLimit.toString(),
9196
- priceInfoObjectIds,
9197
- partner != null ? partner : this.partner
9198
- );
9199
- } else {
9200
- return this.expectOutputSwapV3WithMaxAmountIn(
9201
- txb,
9202
- inputCoin,
9203
- router,
9204
- maxAmountIn,
9205
- amountOut.toString(),
9206
- amountLimit.toString(),
9207
- partner != null ? partner : this.partner
9208
- );
9209
- }
9210
- });
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
+ }
9211
9336
  }
9212
9337
  // auto build input coin
9213
9338
  // auto merge, transfer or destory target coin.
9214
- fastRouterSwap(params) {
9215
- return __async(this, null, function* () {
9216
- const { router, slippage, txb, partner, payDeepFeeAmount } = params;
9217
- const fromCoinType = router.paths[0].from;
9218
- const targetCoinType = router.paths[router.paths.length - 1].target;
9219
- const byAmountIn = router.byAmountIn;
9220
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9221
- let overlayFee = 0;
9222
- if (byAmountIn) {
9223
- overlayFee = Number(
9224
- router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9225
- );
9226
- } else {
9227
- overlayFee = Number(
9228
- router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9229
- );
9230
- }
9231
- const expectedAmountOut = byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
9232
- const expectedAmountIn = byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
9233
- const amountLimit = CalculateAmountLimit(
9234
- byAmountIn ? expectedAmountOut : expectedAmountIn,
9235
- byAmountIn,
9236
- 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()
9237
9353
  );
9238
- const amount = byAmountIn ? expectedAmountIn : amountLimit;
9239
- let inputCoin = transactions.coinWithBalance({
9240
- balance: BigInt(amount.toString()),
9241
- useGasCoin: true,
9242
- 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()
9243
9373
  });
9244
- let deepCoin;
9245
- if (payDeepFeeAmount && payDeepFeeAmount > 0) {
9246
- deepCoin = transactions.coinWithBalance({
9247
- balance: BigInt(payDeepFeeAmount),
9248
- type: this.deepbookv3DeepFeeType()
9249
- });
9250
- }
9251
- const routerSwapParams = {
9252
- router,
9253
- inputCoin,
9254
- slippage,
9255
- txb,
9256
- partner: partner != null ? partner : this.partner,
9257
- deepbookv3DeepFee: deepCoin
9258
- };
9259
- const targetCoin = yield this.routerSwap(routerSwapParams);
9260
- if (CoinUtils.isSuiCoin(targetCoinType)) {
9261
- 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]);
9262
9390
  } else {
9263
- const targetCoinObjID = yield this.getOneCoinUsedToMerge(targetCoinType);
9264
- if (targetCoinObjID != null) {
9265
- txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
9266
- } else {
9267
- transferOrDestroyCoin(
9268
- {
9269
- coin: targetCoin,
9270
- coinType: targetCoinType,
9271
- packages: router.packages
9272
- },
9273
- txb
9274
- );
9275
- }
9276
- }
9277
- });
9278
- }
9279
- mergeSwap(params) {
9280
- return __async(this, null, function* () {
9281
- const { router, inputCoins, slippage, txb, partner } = params;
9282
- if (slippage > 1 || slippage < 0) {
9283
- throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
9284
- }
9285
- if (!router.packages || !router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
9286
- throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
9287
- }
9288
- if (!router.allRoutes || router.allRoutes.length === 0) {
9289
- throw new Error("No routes found in merge swap response");
9290
- }
9291
- const outputCoins = [];
9292
- for (let i = 0; i < router.allRoutes.length && i < inputCoins.length; i++) {
9293
- const route = router.allRoutes[i];
9294
- const inputCoin = inputCoins[i];
9295
- const routeRouter = {
9296
- quoteID: router.quoteID,
9297
- amountIn: route.amountIn,
9298
- amountOut: route.amountOut,
9299
- deviationRatio: Number(route.deviationRatio),
9300
- byAmountIn: true,
9301
- // Merge swap is always by amount in
9302
- paths: route.paths,
9303
- insufficientLiquidity: false,
9304
- packages: router.packages
9305
- };
9306
- const routerParams = {
9307
- router: routeRouter,
9308
- inputCoin: inputCoin.coin,
9309
- slippage,
9310
- txb,
9311
- partner: partner != null ? partner : this.partner
9312
- };
9313
- const outputCoin = yield this.routerSwap(routerParams);
9314
- outputCoins.push(outputCoin);
9315
- }
9316
- if (outputCoins.length === 0) {
9317
- throw new Error("No output coins generated from merge swap");
9318
- }
9319
- let finalOutputCoin = outputCoins[0];
9320
- if (outputCoins.length > 1) {
9321
- txb.mergeCoins(finalOutputCoin, outputCoins.slice(1));
9391
+ transferOrDestroyCoin(
9392
+ {
9393
+ coin: targetCoin,
9394
+ coinType: targetCoinType,
9395
+ packages: router.packages
9396
+ },
9397
+ txb
9398
+ );
9322
9399
  }
9323
- return finalOutputCoin;
9324
- });
9400
+ }
9325
9401
  }
9326
- fastMergeSwap(params) {
9327
- return __async(this, null, function* () {
9328
- const { router, slippage, txb, partner } = params;
9329
- if (!router || !router.allRoutes || router.allRoutes.length === 0) {
9330
- throw new Error("Invalid router: no routes found");
9331
- }
9332
- const firstRoute = router.allRoutes[0];
9333
- const targetCoinType = firstRoute.paths[firstRoute.paths.length - 1].target;
9334
- const inputCoins = [];
9335
- const coinTypeSet = /* @__PURE__ */ new Set();
9336
- for (const route of router.allRoutes) {
9337
- const firstCoinType = route.paths[0].from;
9338
- if (coinTypeSet.has(firstCoinType)) {
9339
- continue;
9340
- }
9341
- coinTypeSet.add(firstCoinType);
9342
- const coin = transactions.coinWithBalance({
9343
- balance: BigInt(route.amountIn.toString()),
9344
- useGasCoin: CoinUtils.isSuiCoin(firstCoinType),
9345
- type: firstCoinType
9346
- });
9347
- inputCoins.push({ coinType: firstCoinType, coin });
9348
- }
9349
- const mergeSwapParams = {
9350
- router,
9351
- 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,
9352
9431
  slippage,
9353
9432
  txb,
9354
- partner: partner != null ? partner : this.partner
9355
- };
9356
- const targetCoin = yield this.mergeSwap(mergeSwapParams);
9357
- if (CoinUtils.isSuiCoin(targetCoinType)) {
9358
- txb.mergeCoins(txb.gas, [targetCoin]);
9359
- } else {
9360
- const targetCoinObjID = yield this.getOneCoinUsedToMerge(targetCoinType);
9361
- if (targetCoinObjID != null) {
9362
- txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
9363
- } else {
9364
- transferOrDestroyCoin(
9365
- {
9366
- coin: targetCoin,
9367
- coinType: targetCoinType,
9368
- packages: router.packages
9369
- },
9370
- txb
9371
- );
9372
- }
9373
- }
9374
- });
9375
- }
9376
- fixableRouterSwapV3(params) {
9377
- return __async(this, null, function* () {
9378
- const { router, inputCoin, slippage, txb, partner } = params;
9379
- checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
9380
- let overlayFee = 0;
9381
- if (router.byAmountIn) {
9382
- overlayFee = Number(
9383
- router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
9384
- );
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]);
9385
9483
  } else {
9386
- overlayFee = Number(
9387
- 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
9388
9491
  );
9389
9492
  }
9390
- const expectedAmountOut = router.byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
9391
- const expectedAmountIn = router.byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
9392
- const amountLimit = CalculateAmountLimitBN(
9393
- router.byAmountIn ? expectedAmountOut : expectedAmountIn,
9394
- router.byAmountIn,
9395
- 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()
9396
9502
  );
9397
- const priceIDs = findPythPriceIDs(router.paths);
9398
- const priceInfoObjectIds = priceIDs.length > 0 ? yield this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
9399
- if (router.byAmountIn) {
9400
- return this.expectInputSwapV3(
9401
- txb,
9402
- inputCoin,
9403
- router,
9404
- expectedAmountOut.toString(),
9405
- amountLimit.toString(),
9406
- priceInfoObjectIds,
9407
- partner != null ? partner : this.partner
9408
- );
9409
- } else {
9410
- return this.expectOutputSwapV3(
9411
- txb,
9412
- inputCoin,
9413
- router,
9414
- expectedAmountOut.toString(),
9415
- amountLimit.toString(),
9416
- partner != null ? partner : this.partner
9417
- );
9418
- }
9419
- });
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
+ }
9420
9537
  }
9421
- swapInPools(params) {
9422
- return __async(this, null, function* () {
9423
- var _a, _b, _c, _d;
9424
- const { from, target, amount, byAmountIn, pools } = params;
9425
- const fromCoin = completionCoin(from);
9426
- const targetCoin = completionCoin(target);
9427
- const tx = new transactions.Transaction();
9428
- const direction = compareCoins(fromCoin, targetCoin);
9429
- const coinA = direction ? fromCoin : targetCoin;
9430
- const coinB = direction ? targetCoin : fromCoin;
9431
- const typeArguments = [coinA, coinB];
9432
- const integratePublishedAt = this.env === 0 /* Mainnet */ ? "0xfbb32ac0fa89a3cb0c56c745b688c6d2a53ac8e43447119ad822763997ffb9c3" : "0xab2d58dd28ff0dc19b18ab2c634397b785a38c342a8f5065ade5f53f9dbffa1c";
9433
- for (let i = 0; i < pools.length; i++) {
9434
- const args = [
9435
- tx.object(pools[i]),
9436
- tx.pure.bool(direction),
9437
- tx.pure.bool(byAmountIn),
9438
- tx.pure.u64(amount.toString())
9439
- ];
9440
- tx.moveCall({
9441
- target: `${integratePublishedAt}::fetcher_script::calculate_swap_result`,
9442
- arguments: args,
9443
- typeArguments
9444
- });
9445
- }
9446
- if (!this.signer) {
9447
- this.signer = "0x0";
9448
- }
9449
- const simulateRes = yield this.client.devInspectTransactionBlock({
9450
- transactionBlock: tx,
9451
- sender: this.signer
9452
- });
9453
- if (simulateRes.error != null) {
9454
- throw new Error("Simulation error: " + simulateRes.error);
9455
- }
9456
- const valueData = (_a = simulateRes.events) == null ? void 0 : _a.filter((item) => {
9457
- 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
9458
9559
  });
9459
- if (valueData.length === 0 || valueData.length !== pools.length) {
9460
- throw new Error("Simulate event result error");
9461
- }
9462
- let tempMaxAmount = byAmountIn ? new import_bn6.default(0) : new import_bn6.default(U64_MAX);
9463
- let tempIndex = 0;
9464
- for (let i = 0; i < valueData.length; i += 1) {
9465
- if (valueData[i].parsedJson.data.is_exceed) {
9466
- continue;
9467
- }
9468
- if (params.byAmountIn) {
9469
- const amount2 = new import_bn6.default(valueData[i].parsedJson.data.amount_out);
9470
- if (amount2.gt(tempMaxAmount)) {
9471
- tempIndex = i;
9472
- tempMaxAmount = amount2;
9473
- }
9474
- } else {
9475
- const amount2 = new import_bn6.default(valueData[i].parsedJson.data.amount_out);
9476
- if (amount2.lt(tempMaxAmount)) {
9477
- tempIndex = i;
9478
- tempMaxAmount = amount2;
9479
- }
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;
9480
9594
  }
9481
9595
  }
9482
- const event = valueData[tempIndex].parsedJson.data;
9483
- const [decimalA, decimalB] = yield Promise.all([
9484
- this.client.getCoinMetadata({ coinType: coinA }).then((metadata) => metadata == null ? void 0 : metadata.decimals),
9485
- this.client.getCoinMetadata({ coinType: coinB }).then((metadata) => metadata == null ? void 0 : metadata.decimals)
9486
- ]);
9487
- if (decimalA == null || decimalB == null) {
9488
- throw new Error("Cannot get coin decimals");
9489
- }
9490
- const feeRate = Number(event.fee_rate) / 1e6;
9491
- const pureAmountIn = new import_bn6.default((_b = event.amount_in) != null ? _b : 0);
9492
- const feeAmount = new import_bn6.default((_c = event.fee_amount) != null ? _c : 0);
9493
- const amountIn = pureAmountIn.add(feeAmount);
9494
- const cetusRouterV3PublishedAt = this.env === 0 /* Mainnet */ ? MAINNET_CETUS_V3_PUBLISHED_AT : TESTNET_CETUS_V3_PUBLISHED_AT;
9495
- const aggregatorV3PublishedAt = this.env === 0 /* Mainnet */ ? AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Mainnet : AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Testnet;
9496
- const routeData = {
9497
- amountIn,
9498
- amountOut: new import_bn6.default((_d = event.amount_out) != null ? _d : 0),
9499
- deviationRatio: 0,
9500
- paths: [
9501
- {
9502
- id: pools[tempIndex],
9503
- direction,
9504
- provider: CETUS,
9505
- from: fromCoin,
9506
- target: targetCoin,
9507
- feeRate,
9508
- amountIn: amountIn.toString(),
9509
- amountOut: event.amount_out,
9510
- publishedAt: cetusRouterV3PublishedAt,
9511
- extendedDetails: {
9512
- afterSqrtPrice: event.after_sqrt_price
9513
- }
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
9514
9629
  }
9515
- ],
9516
- insufficientLiquidity: false,
9517
- byAmountIn: params.byAmountIn,
9518
- quoteID: `degraded-${generateUUID()}`,
9519
- packages: /* @__PURE__ */ new Map([
9520
- [
9521
- PACKAGE_NAMES.AGGREGATOR_V3,
9522
- aggregatorV3PublishedAt
9523
- ]
9524
- ])
9525
- };
9526
- const result = {
9527
- isExceed: event.is_exceed,
9528
- routeData
9529
- };
9530
- return result;
9531
- });
9532
- }
9533
- updatePythPriceIDs(priceIDs, txb) {
9534
- return __async(this, null, function* () {
9535
- let priceUpdateData = null;
9536
- let lastError = null;
9537
- for (const connection of this.pythConnections) {
9538
- try {
9539
- priceUpdateData = yield connection.getPriceFeedsUpdateData(priceIDs);
9540
- break;
9541
- } catch (e) {
9542
- lastError = e;
9543
- console.log("Error: ", e);
9544
- continue;
9545
9630
  }
9546
- }
9547
- if (priceUpdateData == null) {
9548
- throw new Error(
9549
- `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}`
9550
- );
9551
- }
9552
- let priceInfoObjectIds = [];
9553
- try {
9554
- priceInfoObjectIds = yield this.pythClient.updatePriceFeeds(
9555
- txb,
9556
- priceUpdateData,
9557
- priceIDs
9558
- );
9559
- } catch (e) {
9560
- throw new Error(
9561
- `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}`
9562
- );
9563
- }
9564
- let priceInfoObjectIdsMap = /* @__PURE__ */ new Map();
9565
- for (let i = 0; i < priceIDs.length; i++) {
9566
- priceInfoObjectIdsMap.set(priceIDs[i], priceInfoObjectIds[i]);
9567
- }
9568
- return priceInfoObjectIdsMap;
9569
- });
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;
9570
9647
  }
9571
- devInspectTransactionBlock(txb) {
9572
- return __async(this, null, function* () {
9573
- const res = yield this.client.devInspectTransactionBlock({
9574
- transactionBlock: txb,
9575
- sender: this.signer
9576
- });
9577
- 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
9578
9673
  });
9674
+ return res;
9579
9675
  }
9580
- sendTransaction(txb, signer) {
9581
- return __async(this, null, function* () {
9582
- const res = yield this.client.signAndExecuteTransaction({
9583
- transaction: txb,
9584
- signer
9585
- });
9586
- 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 }
9587
9681
  });
9682
+ return res;
9588
9683
  }
9589
9684
  };
9590
9685
  _AggregatorClient.CONFIG = {
@@ -9653,174 +9748,4 @@ decimal.js/decimal.mjs:
9653
9748
  *)
9654
9749
  */
9655
9750
 
9656
- exports.AFSUI = AFSUI;
9657
- exports.AFTERMATH = AFTERMATH;
9658
- exports.AFTERMATH_AMM = AFTERMATH_AMM;
9659
- exports.AFTERMATH_MODULE = AFTERMATH_MODULE;
9660
- exports.AGGREGATOR = AGGREGATOR;
9661
- exports.AGGREGATOR_V3_CONFIG = AGGREGATOR_V3_CONFIG;
9662
- exports.ALL_DEXES = ALL_DEXES;
9663
- exports.ALPHAFI = ALPHAFI;
9664
- exports.AggregatorClient = AggregatorClient;
9665
- exports.AggregatorConfig = AggregatorConfig;
9666
- exports.AggregatorError = AggregatorError;
9667
- exports.AggregatorServerErrorCode = AggregatorServerErrorCode;
9668
- exports.BLUEFIN = BLUEFIN;
9669
- exports.BLUEMOVE = BLUEMOVE;
9670
- exports.CETUS = CETUS;
9671
- exports.CETUSDLMM = CETUSDLMM;
9672
- exports.CETUS_DEX = CETUS_DEX;
9673
- exports.CETUS_MODULE = CETUS_MODULE;
9674
- exports.CETUS_PUBLISHED_AT = CETUS_PUBLISHED_AT;
9675
- exports.CHECK_COINS_THRESHOLD_FUNC = CHECK_COINS_THRESHOLD_FUNC;
9676
- exports.CLIENT_CONFIG = CLIENT_CONFIG;
9677
- exports.CLOCK_ADDRESS = CLOCK_ADDRESS;
9678
- exports.CoinInfoAddress = CoinInfoAddress;
9679
- exports.CoinStoreAddress = CoinStoreAddress;
9680
- exports.CoinUtils = CoinUtils;
9681
- exports.ConfigErrorCode = ConfigErrorCode;
9682
- exports.DEEPBOOKV2 = DEEPBOOKV2;
9683
- exports.DEEPBOOKV3 = DEEPBOOKV3;
9684
- exports.DEEPBOOK_CLOB_V2_MODULE = DEEPBOOK_CLOB_V2_MODULE;
9685
- exports.DEEPBOOK_CUSTODIAN_V2_MODULE = DEEPBOOK_CUSTODIAN_V2_MODULE;
9686
- exports.DEEPBOOK_DEX = DEEPBOOK_DEX;
9687
- exports.DEEPBOOK_MODULE = DEEPBOOK_MODULE;
9688
- exports.DEEPBOOK_PACKAGE_ID = DEEPBOOK_PACKAGE_ID;
9689
- exports.DEEPBOOK_PUBLISHED_AT = DEEPBOOK_PUBLISHED_AT;
9690
- exports.DEEPBOOK_V3_DEEP_FEE_TYPES = DEEPBOOK_V3_DEEP_FEE_TYPES;
9691
- exports.DEFAULT_AGG_V2_ENDPOINT = DEFAULT_AGG_V2_ENDPOINT;
9692
- exports.DEFAULT_AGG_V3_ENDPOINT = DEFAULT_AGG_V3_ENDPOINT;
9693
- exports.DEFAULT_ENDPOINT = DEFAULT_ENDPOINT;
9694
- exports.DEFAULT_GAS_BUDGET_FOR_MERGE = DEFAULT_GAS_BUDGET_FOR_MERGE;
9695
- exports.DEFAULT_GAS_BUDGET_FOR_SPLIT = DEFAULT_GAS_BUDGET_FOR_SPLIT;
9696
- exports.DEFAULT_GAS_BUDGET_FOR_STAKE = DEFAULT_GAS_BUDGET_FOR_STAKE;
9697
- exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER = DEFAULT_GAS_BUDGET_FOR_TRANSFER;
9698
- exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI = DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI;
9699
- exports.DEFAULT_NFT_TRANSFER_GAS_FEE = DEFAULT_NFT_TRANSFER_GAS_FEE;
9700
- exports.Env = Env;
9701
- exports.FERRACLMM = FERRACLMM;
9702
- exports.FERRADLMM = FERRADLMM;
9703
- exports.FLOWXV2 = FLOWXV2;
9704
- exports.FLOWXV3 = FLOWXV3;
9705
- exports.FLOWX_AMM = FLOWX_AMM;
9706
- exports.FLOWX_AMM_MODULE = FLOWX_AMM_MODULE;
9707
- exports.FULLSAIL = FULLSAIL;
9708
- exports.FlashSwapA2BFunc = FlashSwapA2BFunc;
9709
- exports.FlashSwapB2AFunc = FlashSwapB2AFunc;
9710
- exports.FlashSwapFunc = FlashSwapFunc;
9711
- exports.FlashSwapWithPartnerA2BFunc = FlashSwapWithPartnerA2BFunc;
9712
- exports.FlashSwapWithPartnerB2AFunc = FlashSwapWithPartnerB2AFunc;
9713
- exports.FlashSwapWithPartnerFunc = FlashSwapWithPartnerFunc;
9714
- exports.GAS_SYMBOL = GAS_SYMBOL;
9715
- exports.GAS_TYPE_ARG = GAS_TYPE_ARG;
9716
- exports.GAS_TYPE_ARG_LONG = GAS_TYPE_ARG_LONG;
9717
- exports.HAEDAL = HAEDAL;
9718
- exports.HAEDALHMMV2 = HAEDALHMMV2;
9719
- exports.HAEDALPMM = HAEDALPMM;
9720
- exports.HAWAL = HAWAL;
9721
- exports.INTEGRATE = INTEGRATE;
9722
- exports.JOIN_FUNC = JOIN_FUNC;
9723
- exports.KRIYA = KRIYA;
9724
- exports.KRIYAV3 = KRIYAV3;
9725
- exports.KRIYA_DEX = KRIYA_DEX;
9726
- exports.KRIYA_MODULE = KRIYA_MODULE;
9727
- exports.MAGMA = MAGMA;
9728
- exports.MAINNET_AFTERMATH_INSURANCE_FUND_ID = MAINNET_AFTERMATH_INSURANCE_FUND_ID;
9729
- exports.MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
9730
- exports.MAINNET_AFTERMATH_REFERRAL_VAULT_ID = MAINNET_AFTERMATH_REFERRAL_VAULT_ID;
9731
- exports.MAINNET_AFTERMATH_REGISTRY_ID = MAINNET_AFTERMATH_REGISTRY_ID;
9732
- exports.MAINNET_AFTERMATH_TREASURY_ID = MAINNET_AFTERMATH_TREASURY_ID;
9733
- exports.MAINNET_CETUS_V3_PUBLISHED_AT = MAINNET_CETUS_V3_PUBLISHED_AT;
9734
- exports.MAINNET_FLOWX_AMM_CONTAINER_ID = MAINNET_FLOWX_AMM_CONTAINER_ID;
9735
- exports.METASTABLE = METASTABLE;
9736
- exports.MOMENTUM = MOMENTUM;
9737
- exports.OBRIC = OBRIC;
9738
- exports.ONE = ONE;
9739
- exports.PACKAGE_NAMES = PACKAGE_NAMES;
9740
- exports.PAY_MODULE = PAY_MODULE;
9741
- exports.POOL_MODULT = POOL_MODULT;
9742
- exports.PUBLISHED_ADDRESSES = PUBLISHED_ADDRESSES;
9743
- exports.PYTH_CONFIG = PYTH_CONFIG;
9744
- exports.REPAY_FLASH_SWAP_A2B_FUNC = REPAY_FLASH_SWAP_A2B_FUNC;
9745
- exports.REPAY_FLASH_SWAP_B2A_FUNC = REPAY_FLASH_SWAP_B2A_FUNC;
9746
- exports.REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC;
9747
- exports.REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC;
9748
- exports.RepayFalshSwapFunc = RepayFalshSwapFunc;
9749
- exports.RepayFlashSwapWithPartnerFunc = RepayFlashSwapWithPartnerFunc;
9750
- exports.SCALLOP = SCALLOP;
9751
- exports.SEVENK = SEVENK;
9752
- exports.SPRINGSUI = SPRINGSUI;
9753
- exports.STEAMM = STEAMM;
9754
- exports.STEAMM_OMM = STEAMM_OMM;
9755
- exports.STEAMM_OMM_V2 = STEAMM_OMM_V2;
9756
- exports.SUILEND = SUILEND;
9757
- exports.SUI_SYSTEM_STATE_OBJECT_ID = SUI_SYSTEM_STATE_OBJECT_ID;
9758
- exports.SWAP_A2B_FUNC = SWAP_A2B_FUNC;
9759
- exports.SWAP_B2A_FUNC = SWAP_B2A_FUNC;
9760
- exports.SuiZeroCoinFn = SuiZeroCoinFn;
9761
- exports.TEN_POW_NINE = TEN_POW_NINE;
9762
- exports.TESTNET_AFTERMATH_INSURANCE_FUND_ID = TESTNET_AFTERMATH_INSURANCE_FUND_ID;
9763
- exports.TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
9764
- exports.TESTNET_AFTERMATH_REFERRAL_VAULT_ID = TESTNET_AFTERMATH_REFERRAL_VAULT_ID;
9765
- exports.TESTNET_AFTERMATH_REGISTRY_ID = TESTNET_AFTERMATH_REGISTRY_ID;
9766
- exports.TESTNET_AFTERMATH_TREASURY_ID = TESTNET_AFTERMATH_TREASURY_ID;
9767
- exports.TESTNET_CETUS_V3_PUBLISHED_AT = TESTNET_CETUS_V3_PUBLISHED_AT;
9768
- exports.TESTNET_FLOWX_AMM_CONTAINER_ID = TESTNET_FLOWX_AMM_CONTAINER_ID;
9769
- exports.TRANSFER_ACCOUNT_CAP = TRANSFER_ACCOUNT_CAP;
9770
- exports.TRANSFER_OR_DESTORY_COIN_FUNC = TRANSFER_OR_DESTORY_COIN_FUNC;
9771
- exports.TURBOS = TURBOS;
9772
- exports.TURBOS_DEX = TURBOS_DEX;
9773
- exports.TURBOS_MODULE = TURBOS_MODULE;
9774
- exports.TURBOS_VERSIONED = TURBOS_VERSIONED;
9775
- exports.TWO = TWO;
9776
- exports.TransactionErrorCode = TransactionErrorCode;
9777
- exports.TypesErrorCode = TypesErrorCode;
9778
- exports.U128 = U128;
9779
- exports.U64_MAX = U64_MAX;
9780
- exports.U64_MAX_BN = U64_MAX_BN;
9781
- exports.UTILS_MODULE = UTILS_MODULE;
9782
- exports.VOLO = VOLO;
9783
- exports.ZERO = ZERO;
9784
- exports.buildInputCoin = buildInputCoin;
9785
- exports.calculateGasEfficiency = calculateGasEfficiency;
9786
- exports.calculatePriceImpact = calculatePriceImpact;
9787
- exports.checkInvalidSuiAddress = checkInvalidSuiAddress;
9788
- exports.compareCoins = compareCoins;
9789
- exports.compareGasMetrics = compareGasMetrics;
9790
- exports.completionCoin = completionCoin;
9791
- exports.composeType = composeType;
9792
- exports.createTarget = createTarget;
9793
- exports.dealWithFastRouterSwapParamsForMsafe = dealWithFastRouterSwapParamsForMsafe;
9794
- exports.exportToCSV = exportToCSV;
9795
- exports.exportToJSON = exportToJSON;
9796
- exports.extractAddressFromType = extractAddressFromType;
9797
- exports.extractGasMetrics = extractGasMetrics;
9798
- exports.extractStructTagFromType = extractStructTagFromType;
9799
- exports.extractTimestampFromDowngradeUuid6 = extractTimestampFromDowngradeUuid6;
9800
- exports.fixSuiObjectId = fixSuiObjectId;
9801
- exports.formatGasMetrics = formatGasMetrics;
9802
- exports.generateDowngradeUuid6 = generateDowngradeUuid6;
9803
- exports.generateSimpleDowngradeUuid6 = generateSimpleDowngradeUuid6;
9804
- exports.getAggregatorServerErrorMessage = getAggregatorServerErrorMessage;
9805
- exports.getAggregatorV2Extend2PublishedAt = getAggregatorV2Extend2PublishedAt;
9806
- exports.getAggregatorV2ExtendPublishedAt = getAggregatorV2ExtendPublishedAt;
9807
- exports.getAggregatorV2PublishedAt = getAggregatorV2PublishedAt;
9808
- exports.getAllProviders = getAllProviders;
9809
- exports.getDeepbookV3Config = getDeepbookV3Config;
9810
- exports.getDefaultSuiInputType = getDefaultSuiInputType;
9811
- exports.getMergeSwapResult = getMergeSwapResult;
9812
- exports.getOrCreateAccountCap = getOrCreateAccountCap;
9813
- exports.getProvidersExcluding = getProvidersExcluding;
9814
- exports.getProvidersIncluding = getProvidersIncluding;
9815
- exports.getRouterResult = getRouterResult;
9816
- exports.isSortedSymbols = isSortedSymbols;
9817
- exports.isValidDowngradeUuid6 = isValidDowngradeUuid6;
9818
- exports.mintZeroCoin = mintZeroCoin;
9819
- exports.normalizeCoinType = normalizeCoinType;
9820
- exports.parseAftermathFeeType = parseAftermathFeeType;
9821
- exports.parseTurbosPoolFeeType = parseTurbosPoolFeeType;
9822
- exports.patchFixSuiObjectId = patchFixSuiObjectId;
9823
- exports.printTransaction = printTransaction;
9824
- exports.processEndpoint = processEndpoint;
9825
- exports.processFlattenRoutes = processFlattenRoutes;
9826
- 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 };