@stableflow/bridges 3.1.1 → 3.1.3-rc-45fcf7f0b6-20260730

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -147,6 +147,8 @@ interface GetAllQuoteParams {
147
147
  }[];
148
148
  swapType?: OneClickSwapType;
149
149
  isProxy?: boolean;
150
+ /** When true (default), always calculate destination gas fee. When false, fee is 0 if fromTokenSymbol !== toTokenSymbol. */
151
+ forceCalculateFee?: boolean;
150
152
  };
151
153
  }
152
154
  /**
@@ -230,10 +232,7 @@ declare const formatQuoteError: (error: any, options: {
230
232
  service: Service;
231
233
  fromToken: TokenConfig;
232
234
  }) => {
233
- serviceType: "oneclick";
234
- error: string;
235
- } | {
236
- serviceType: "usdt0" | "cctp" | "fraxzero" | "fraxzero-oneclick" | "oneclick-fraxzero" | "usdt0-oneclick" | "oneclick-usdt0" | "cctp-oneclick" | "oneclick-cctp" | "native";
235
+ serviceType: Service;
237
236
  error: any;
238
237
  };
239
238
 
package/dist/index.d.ts CHANGED
@@ -147,6 +147,8 @@ interface GetAllQuoteParams {
147
147
  }[];
148
148
  swapType?: OneClickSwapType;
149
149
  isProxy?: boolean;
150
+ /** When true (default), always calculate destination gas fee. When false, fee is 0 if fromTokenSymbol !== toTokenSymbol. */
151
+ forceCalculateFee?: boolean;
150
152
  };
151
153
  }
152
154
  /**
@@ -230,10 +232,7 @@ declare const formatQuoteError: (error: any, options: {
230
232
  service: Service;
231
233
  fromToken: TokenConfig;
232
234
  }) => {
233
- serviceType: "oneclick";
234
- error: string;
235
- } | {
236
- serviceType: "usdt0" | "cctp" | "fraxzero" | "fraxzero-oneclick" | "oneclick-fraxzero" | "usdt0-oneclick" | "oneclick-usdt0" | "cctp-oneclick" | "oneclick-cctp" | "native";
235
+ serviceType: Service;
237
236
  error: any;
238
237
  };
239
238
 
package/dist/index.js CHANGED
@@ -91,7 +91,7 @@ var OneClickService = class {
91
91
  }
92
92
  async formatQuoteData(res) {
93
93
  const { params } = res;
94
- const { isProxy = true, prices } = params;
94
+ const { isProxy = true, prices, forceCalculateFee = true } = params;
95
95
  const isExactOutput = params.swapType === core.OneClickSwapType.Output;
96
96
  core.getPrice(prices, params.fromToken.nativeToken.symbol);
97
97
  params.fromToken.nativeToken.decimals;
@@ -136,7 +136,7 @@ var OneClickService = class {
136
136
  }
137
137
  let destinationGasFee = Big__default.default(netFee).minus(bridgeFeeValue);
138
138
  destinationGasFee = Big__default.default(destinationGasFee).lt(0) ? Big__default.default(0) : destinationGasFee;
139
- if (fromTokenSymbol !== toTokenSymbol) {
139
+ if (!forceCalculateFee && fromTokenSymbol !== toTokenSymbol) {
140
140
  destinationGasFee = Big__default.default(0);
141
141
  }
142
142
  res.data.fees = {
@@ -735,46 +735,6 @@ function parseUserFriendlyTonAddress(address) {
735
735
  isTestOnly
736
736
  };
737
737
  }
738
- var formatQuoteError = (error, options) => {
739
- const { service, fromToken } = options;
740
- const defaultErrorMessage = "Failed to get quote, please try again later";
741
- if (service === core.Service.OneClick) {
742
- const getQuoteErrorMessage = () => {
743
- const _messageResult = {
744
- message: error?.message || defaultErrorMessage,
745
- sourceMessage: error?.response?.data?.message || defaultErrorMessage
746
- };
747
- if (error?.response?.data?.message && error?.response?.data?.message !== "Internal server error") {
748
- if (error?.response?.data?.message === "Failed to get quote") {
749
- _messageResult.message = "Amount exceeds max";
750
- return _messageResult;
751
- }
752
- if (error?.response?.data?.message?.includes("Amount is too low for bridge, try at least")) {
753
- const match = error.response.data.message.match(/try at least\s+(\d+(?:\.\d+)?)/i);
754
- let minimumAmount = match ? match[1] : Big__default.default(1).times(10 ** fromToken.decimals).toFixed(0);
755
- minimumAmount = Big__default.default(minimumAmount).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);
756
- _messageResult.message = `Amount is too low, at least ${minimumAmount}`;
757
- return _messageResult;
758
- }
759
- return _messageResult;
760
- }
761
- return _messageResult;
762
- };
763
- const onclickErrMsg = getQuoteErrorMessage();
764
- return {
765
- serviceType: service,
766
- error: onclickErrMsg.message
767
- };
768
- }
769
- return {
770
- serviceType: service,
771
- error: error?.message || defaultErrorMessage
772
- };
773
- };
774
- async function quoteSignature(params) {
775
- const response = await core.postRequest("/v0/cctp/sign", params);
776
- return response.data ?? {};
777
- }
778
738
  var addThousandSeparator = (numberString) => {
779
739
  if (!numberString) return "0";
780
740
  const parts = String(numberString).split(".");
@@ -878,6 +838,54 @@ var formatNumber = (value, precision, isSimple, options) => {
878
838
  };
879
839
  };
880
840
 
841
+ // src/utils/error.ts
842
+ var formatQuoteError = (error, options) => {
843
+ const { service, fromToken } = options;
844
+ const defaultErrorMessage = "Failed to get quote, please try again later";
845
+ if ([core.Service.OneClick, core.Service.OneClickUsdt0, core.Service.Usdt0OneClick, core.Service.CCTPOneClick, core.Service.OneClickCCTP, core.Service.FraxZeroOneClick, core.Service.OneClickFraxZero].includes(service)) {
846
+ const getQuoteErrorMessage = () => {
847
+ const apiMessage = error?.body?.message || error?.response?.data?.message;
848
+ const _messageResult = {
849
+ message: error?.message || defaultErrorMessage,
850
+ sourceMessage: apiMessage || defaultErrorMessage
851
+ };
852
+ if (apiMessage && apiMessage !== "Internal server error") {
853
+ if (apiMessage === "Failed to get quote") {
854
+ _messageResult.message = "Amount exceeds max";
855
+ return _messageResult;
856
+ }
857
+ if (apiMessage.includes("Amount is too low for bridge, try at least")) {
858
+ const match = apiMessage.match(/try at least\s+(\d+(?:\.\d+)?)/i);
859
+ const minWei = match ? match[1] : Big__default.default(1).times(10 ** fromToken.decimals).toFixed(0);
860
+ const minAmount = Big__default.default(minWei).div(10 ** fromToken.decimals);
861
+ const readableAmount = formatNumber(minAmount, fromToken.decimals, true);
862
+ _messageResult.message = `Amount is too low, at least ${readableAmount} ${fromToken.symbol}`;
863
+ return _messageResult;
864
+ }
865
+ if (apiMessage.includes("Cannot convert undefined or null to object")) {
866
+ _messageResult.message = "app fees exceeds 5% of amount";
867
+ return _messageResult;
868
+ }
869
+ return _messageResult;
870
+ }
871
+ return _messageResult;
872
+ };
873
+ const onclickErrMsg = getQuoteErrorMessage();
874
+ return {
875
+ serviceType: service,
876
+ error: onclickErrMsg.message
877
+ };
878
+ }
879
+ return {
880
+ serviceType: service,
881
+ error: error?.message || defaultErrorMessage
882
+ };
883
+ };
884
+ async function quoteSignature(params) {
885
+ const response = await core.postRequest("/v0/cctp/sign", params);
886
+ return response.data ?? {};
887
+ }
888
+
881
889
  // src/usdt0/config.ts
882
890
  var USDT0_CONFIG = {
883
891
  Ethereum: {
@@ -5577,55 +5585,24 @@ var CCTPOneClickService = class {
5577
5585
  refundTo: evmAddress,
5578
5586
  wallet: evmWallet
5579
5587
  };
5580
- let cctpResult;
5581
- let oneClickResult;
5582
- if (!dry) {
5583
- execTime.breakpoint();
5584
- oneClickResult = await oneclick_default.quote({
5585
- ...oneClickParams,
5586
- amountWei: Big__default.default(0.01).times(10 ** MIDDLE_TOKEN_CHAIN2.decimals).toFixed(0, 0)
5587
- });
5588
- execTime.log("CCTPOneClickService.quote", "oneClickService.quote: %o", oneClickResult);
5589
- if (oneClickResult.errMsg) {
5590
- return oneClickResult;
5591
- }
5592
- cctpParams.recipient = oneClickResult.quote.depositAddress;
5593
- execTime.breakpoint();
5594
- cctpResult = await cctp_default.quote(cctpParams);
5595
- execTime.log("CCTPOneClickService.quote", "cctpService.quote: %o", cctpResult);
5596
- execTime.breakpoint();
5597
- try {
5598
- const oneClickResult2 = await oneclick_default.quote({
5599
- ...oneClickParams,
5600
- dry: true,
5601
- amountWei: Big__default.default(cctpResult.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN2.decimals).toFixed(0, 0)
5602
- });
5603
- oneClickResult.fees = oneClickResult2.fees;
5604
- oneClickResult.outputAmount = oneClickResult2.outputAmount;
5605
- oneClickResult.estimateTime = oneClickResult2.estimateTime;
5606
- oneClickResult.priceImpact = oneClickResult2.priceImpact;
5607
- oneClickResult.exchangeRate = oneClickResult2.exchangeRate;
5608
- execTime.log("CCTPOneClickService.quote", "confirm get actual output amount result: %o", oneClickResult2);
5609
- } catch (err) {
5610
- execTime.log("CCTPOneClickService.quote", "confirm get actual output amount error: %o", err);
5611
- }
5612
- } else {
5613
- execTime.breakpoint();
5614
- cctpResult = await cctp_default.quote(cctpParams);
5615
- execTime.log("CCTPOneClickService.quote", "cctpService.quote dry: %o", cctpResult);
5616
- if (cctpResult.errMsg) {
5617
- return cctpResult;
5618
- }
5619
- oneClickParams.amountWei = Big__default.default(cctpResult.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN2.decimals).toFixed(0, 0);
5620
- execTime.breakpoint();
5621
- oneClickResult = await oneclick_default.quote(oneClickParams);
5622
- execTime.log("CCTPOneClickService.quote", "oneClickService.quote: %o", oneClickResult);
5588
+ execTime.breakpoint();
5589
+ let cctpResult = await cctp_default.quote(cctpParams);
5590
+ execTime.log("cctpService.quote: %o", cctpResult);
5591
+ if (cctpResult.errMsg) {
5592
+ return cctpResult;
5623
5593
  }
5594
+ oneClickParams.amountWei = Big__default.default(cctpResult.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN2.decimals).toFixed(0, 0);
5595
+ execTime.breakpoint();
5596
+ const oneClickResult = await oneclick_default.quote(oneClickParams);
5597
+ execTime.log("oneClickService.quote: %o", oneClickResult);
5624
5598
  if (oneClickResult.errMsg) {
5625
5599
  return oneClickResult;
5626
5600
  }
5627
- if (cctpResult.errMsg) {
5628
- return cctpResult;
5601
+ if (!dry) {
5602
+ cctpParams.recipient = oneClickResult.quote.depositAddress;
5603
+ execTime.breakpoint();
5604
+ cctpResult = await cctp_default.quote(cctpParams);
5605
+ execTime.log("cctpService.quote again: %o", cctpResult);
5629
5606
  }
5630
5607
  csl("CCTPOneClickService quote", "rose-600", "oneClickResult: %o", oneClickResult);
5631
5608
  csl("CCTPOneClickService quote", "rose-600", "cctpResult: %o", cctpResult);
@@ -6248,6 +6225,7 @@ var BridgeSFA = class _BridgeSFA {
6248
6225
  _params.appFees = params.oneclickParams?.appFees || params.appFees;
6249
6226
  _params.swapType = params.oneclickParams?.swapType;
6250
6227
  _params.isProxy = params.oneclickParams?.isProxy;
6228
+ _params.forceCalculateFee = params.oneclickParams?.forceCalculateFee;
6251
6229
  }
6252
6230
  if ([
6253
6231
  core.Service.Usdt0,