@allbridge/bridge-core-sdk 3.29.1 → 3.29.2-alpha.1

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.
@@ -34,6 +34,7 @@ const models_1 = require("../../../models");
34
34
  const calculation_1 = require("../../../utils/calculation");
35
35
  const compute_budget_1 = require("../../utils/sol/compute-budget");
36
36
  const JUP_ADD_INDEX = 1.1;
37
+ const JUP_SLIPPAGE_INDEX = 1.01;
37
38
  class JupiterService {
38
39
  api;
39
40
  jupiterUrl;
@@ -51,7 +52,10 @@ class JupiterService {
51
52
  const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, txFeeParams, true);
52
53
  return { jupTx: tx, solTxSendParams: { ...solTxSendParams, ...solTxSendUpdatedParams } };
53
54
  }
54
- catch (ignoreError) {
55
+ catch (error) {
56
+ if (error instanceof exceptions_1.AmountNotEnoughError) {
57
+ throw error;
58
+ }
55
59
  try {
56
60
  const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, txFeeParams, false);
57
61
  return { jupTx: tx, solTxSendParams: { ...solTxSendParams, ...solTxSendUpdatedParams } };
@@ -71,7 +75,12 @@ class JupiterService {
71
75
  const { fee, extraGas, gasFeePaymentMethod, sourceNativeTokenPrice } = await this.convertStableCoinFeeAndExtraGasToNativeCurrency(params.sourceToken, solTxSendParams);
72
76
  let amountToProcess = exactOut ? (0, big_js_1.Big)(fee) : (0, big_js_1.Big)(solTxSendParams.fee);
73
77
  if (extraGas) {
74
- amountToProcess = amountToProcess.plus(extraGas);
78
+ if (exactOut) {
79
+ amountToProcess = amountToProcess.plus(extraGas);
80
+ }
81
+ else if (solTxSendParams.extraGas) {
82
+ amountToProcess = amountToProcess.plus(solTxSendParams.extraGas);
83
+ }
75
84
  }
76
85
  if (txFeeParams?.payTxFeeWithStablecoinSwap) {
77
86
  const feeTx = 5000;
@@ -100,7 +109,9 @@ class JupiterService {
100
109
  if (!amountIn) {
101
110
  throw new exceptions_1.JupiterError("Cannot get inAmount");
102
111
  }
103
- newAmount = (0, big_js_1.Big)(solTxSendParams.amount).minus((0, big_js_1.Big)(amountIn).mul(JUP_ADD_INDEX)).toFixed(0);
112
+ newAmount = (0, big_js_1.Big)(solTxSendParams.amount)
113
+ .minus((0, big_js_1.Big)(amountIn).mul(JUP_SLIPPAGE_INDEX).toFixed(0, big_js_1.Big.roundUp))
114
+ .toFixed(0);
104
115
  }
105
116
  else {
106
117
  newAmount = (0, big_js_1.Big)(solTxSendParams.amount).minus(amountToProcess).toFixed(0);
@@ -1 +1 @@
1
- {"version":3,"file":"jupiter-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/jupiter-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgD;AAChD,6CAAuD;AACvD,+CAA0C;AAC1C,mCAA6B;AAC7B,4CAAyC;AAEzC,oDAAiG;AACjG,4CAAqF;AACrF,4DAAqE;AAErE,mEAA4E;AAU5E,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,MAAa,cAAc;IAMf;IALV,UAAU,CAAS;IACnB,YAAY,CAAU;IACtB,WAAW,CAAU;IAErB,YACU,GAAwB,EAChC,aAA4B;QADpB,QAAG,GAAH,GAAG,CAAqB;QAGhC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB;QACxF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,mBAAmB,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,kBAAkB,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,MAAkB,EAClB,eAAgC;QAEhC,MAAM,WAAW,GAAG,IAAA,2CAA0B,EAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACzG,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,sBAAsB,EAAE,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC1G,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,sBAAsB,EAAE,EAAE,CAAC;YAC3F,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,yBAAY,EAAE,CAAC;oBAC9B,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;oBACpC,MAAM,IAAI,yBAAY,CAAC,iEAAiE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvG,CAAC;gBACD,MAAM,IAAI,yBAAY,CAAC,8DAA8D,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,eAAgC,EAChC,MAAkB,EAClB,WAA8B,EAC9B,QAAiB;QAUjB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,GAClE,MAAM,IAAI,CAAC,+CAA+C,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAElG,IAAI,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,YAAG,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,YAAG,EAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACb,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,WAAW,EAAE,0BAA0B,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC;YACnB,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;YAC5C,MAAM,QAAQ,GAAG,KAAK,GAAG,iBAAiB,CAAC;YAE3C,IAAI,QAAQ,EAAE,CAAC;gBACb,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC5B,MAAM,IAAI,qBAAQ,CAAC,sCAAsC,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,gBAAgB,GAAG,IAAA,YAAG,EAAC,QAAQ,CAAC;qBACnC,GAAG,CAAC,sBAAsB,CAAC;qBAC3B,GAAG,CAAC,IAAA,YAAG,EAAC,EAAE,CAAC,CAAC,GAAG,CAAC,eAAM,CAAC,sBAAsB,CAAC,kBAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;qBAC/F,OAAO,CAAC,CAAC,CAAC,CAAC;gBACd,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAClD,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,WAAW,CAAC,YAAY,EAC/B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAC1B,QAAQ,CACT,CAAC;QAEF,IAAI,SAAiB,CAAC;QACtB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,yBAAY,CAAC,qBAAqB,CAAC,CAAC;YAChD,CAAC;YACD,SAAS,GAAG,IAAA,YAAG,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAA,YAAG,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAA,YAAG,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,IAAA,YAAG,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,iCAAoB,CAC5B,iCAAiC,IAAA,qCAAuB,EACtD,IAAA,YAAG,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAC7B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAC5B,CAAC,OAAO,EAAE,qBAAqB,CACjC,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE,EAAE,EAAE;YACN,sBAAsB,EAAE;gBACtB,MAAM,EAAE,SAAS;gBACjB,GAAG,EAAE,GAAG;gBACR,QAAQ,EAAE,QAAQ;gBAClB,mBAAmB,EAAE,mBAAmB;aACzC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,+CAA+C,CAC3D,WAAkC,EAClC,eAAgC;QAOhC,IAAI,eAAe,CAAC,mBAAmB,IAAI,yBAAgB,CAAC,eAAe,EAAE,CAAC;YAC5E,MAAM,sBAAsB,GAAG,CAC7B,MAAM,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;gBACvC,aAAa,EAAE,eAAe,CAAC,WAAW;gBAC1C,kBAAkB,EAAE,eAAe,CAAC,SAAS;gBAC7C,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,WAAW,EAAE,WAAW,CAAC,YAAY;aACtC,CAAC,CACH,CAAC,sBAAsB,CAAC;YACzB,MAAM,GAAG,GAAG,IAAA,YAAG,EAAC,eAAe,CAAC,GAAG,CAAC;iBACjC,GAAG,CAAC,sBAAsB,CAAC;iBAC3B,GAAG,CAAC,IAAA,YAAG,EAAC,EAAE,CAAC,CAAC,GAAG,CAAC,eAAM,CAAC,sBAAsB,CAAC,kBAAS,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;iBACxF,OAAO,CAAC,CAAC,CAAC,CAAC;YACd,IAAI,QAAQ,CAAC;YACb,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,GAAG,IAAA,YAAG,EAAC,eAAe,CAAC,QAAQ,CAAC;qBACrC,GAAG,CAAC,sBAAsB,CAAC;qBAC3B,GAAG,CAAC,IAAA,YAAG,EAAC,EAAE,CAAC,CAAC,GAAG,CAAC,eAAM,CAAC,sBAAsB,CAAC,kBAAS,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;qBACxF,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,mBAAmB,EAAE,yBAAgB,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,CAAC;QAC/G,CAAC;QACD,OAAO;YACL,GAAG,EAAE,eAAe,CAAC,GAAG;YACxB,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,mBAAmB,EAAE,yBAAgB,CAAC,oBAAoB;SAC3D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,WAAmB,EACnB,kBAA0B,EAC1B,MAAc,EACd,QAAiB;QAEjB,IAAI,aAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACnD,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,oBAAoB,kBAAkB,eAAe,uBAAW,CAAC,QAAQ,EAAE,WAAW,MAAM,aAAa,QAAQ,wCAAwC,CAAC;YAEtL,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,IAAI,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5C,CAAC;YACD,aAAa,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACnC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS;aAC5E,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAU,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9F,MAAM,IAAI,yBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,IAAI,yBAAY,CAAC,kBAAkB,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,QAAQ,CAAC;QACb,IAAI,QAAQ,IAAI,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC9C,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,yBAAY,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,mBAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,mBAAmB,GAAG,MAAM,eAAK,CAAC,IAAI,CACpC,GAAG,IAAI,CAAC,UAAU,OAAO,EACzB;gBACE,aAAa,EAAE,aAAa,CAAC,IAAI;gBACjC,aAAa,EAAE,WAAW;gBAC1B,gBAAgB,EAAE,IAAI;aACvB,EACD;gBACE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS;aAC5E,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAU,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9F,MAAM,IAAI,yBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,IAAI,yBAAY,CAAC,6BAA6B,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,eAAe,CAAC;QACpB,IAAI,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC/C,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,yBAAY,CAAC,6BAA6B,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAClE,MAAM,EAAE,GAAG,8BAAoB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAEhE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IACxD,CAAC;CACF;AA5ND,wCA4NC","sourcesContent":["import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport axios, { AxiosError } from \"axios\";\nimport { Big } from \"big.js\";\nimport { Chains } from \"../../../chains\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AmountNotEnoughError, JupiterError, SdkError, SdkRootError } from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, TokenWithChainDetails } from \"../../../models\";\nimport { convertIntAmountToFloat } from \"../../../utils/calculation\";\nimport { SolanaTxFeeParams } from \"../../models\";\nimport { normalizeSolanaTxFeeParams } from \"../../utils/sol/compute-budget\";\nimport { SendParams } from \"../models\";\nimport { SolTxSendParams } from \"./utils\";\n\nexport interface JupiterParams {\n jupiterUrl: string;\n jupiterApiKeyHeader?: string;\n jupiterMaxAccounts?: number;\n}\n\nconst JUP_ADD_INDEX = 1.1;\n\nexport class JupiterService {\n jupiterUrl: string;\n apiKeyHeader?: string;\n maxAccounts?: number;\n\n constructor(\n private api: AllbridgeCoreClient,\n jupiterParams: JupiterParams\n ) {\n this.jupiterUrl = jupiterParams.jupiterUrl.replace(/\\/$/, \"\"); // trim last \"/\" if exist\n this.apiKeyHeader = jupiterParams.jupiterApiKeyHeader;\n this.maxAccounts = jupiterParams.jupiterMaxAccounts;\n }\n\n async buildJupAndUpdateTxSendParams(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ jupTx: VersionedTransaction; solTxSendParams: SolTxSendParams }> {\n const txFeeParams = normalizeSolanaTxFeeParams(params.txFeeParams?.solana);\n\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, txFeeParams, true);\n return { jupTx: tx, solTxSendParams: { ...solTxSendParams, ...solTxSendUpdatedParams } };\n } catch (ignoreError) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, txFeeParams, false);\n return { jupTx: tx, solTxSendParams: { ...solTxSendParams, ...solTxSendUpdatedParams } };\n } catch (e) {\n if (e instanceof SdkRootError) {\n throw e;\n }\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation Jupiter swap transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation Jupiter swap transaction\");\n }\n }\n }\n\n private async processJup(\n solTxSendParams: SolTxSendParams,\n params: SendParams,\n txFeeParams: SolanaTxFeeParams,\n exactOut: boolean\n ): Promise<{\n tx: VersionedTransaction;\n solTxSendUpdatedParams: {\n amount: string;\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n };\n }> {\n const { fee, extraGas, gasFeePaymentMethod, sourceNativeTokenPrice } =\n await this.convertStableCoinFeeAndExtraGasToNativeCurrency(params.sourceToken, solTxSendParams);\n\n let amountToProcess = exactOut ? Big(fee) : Big(solTxSendParams.fee);\n if (extraGas) {\n amountToProcess = amountToProcess.plus(extraGas);\n }\n\n if (txFeeParams?.payTxFeeWithStablecoinSwap) {\n const feeTx = 5000;\n const txAccountCreation = 2296800 + 1224960;\n const totalFee = feeTx + txAccountCreation;\n\n if (exactOut) {\n amountToProcess = amountToProcess.plus(totalFee);\n } else {\n if (!sourceNativeTokenPrice) {\n throw new SdkError(\"sourceNativeTokenPrice is undefined.\");\n }\n const totalFeeInStable = Big(totalFee)\n .mul(sourceNativeTokenPrice)\n .div(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - params.sourceToken.decimals))\n .toFixed(0);\n amountToProcess = amountToProcess.plus(totalFeeInStable);\n }\n }\n\n if (!exactOut) {\n amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);\n }\n\n const { tx, amountIn } = await this.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut\n );\n\n let newAmount: string;\n if (exactOut) {\n if (!amountIn) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n newAmount = Big(solTxSendParams.amount).minus(Big(amountIn).mul(JUP_ADD_INDEX)).toFixed(0);\n } else {\n newAmount = Big(solTxSendParams.amount).minus(amountToProcess).toFixed(0);\n }\n if (Big(newAmount).lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(newAmount).minus(1).neg(),\n params.sourceToken.decimals\n ).toFixed()} stables is missing`\n );\n }\n return {\n tx: tx,\n solTxSendUpdatedParams: {\n amount: newAmount,\n fee: fee,\n extraGas: extraGas,\n gasFeePaymentMethod: gasFeePaymentMethod,\n },\n };\n }\n\n private async convertStableCoinFeeAndExtraGasToNativeCurrency(\n sourceToken: TokenWithChainDetails,\n solTxSendParams: SolTxSendParams\n ): Promise<{\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n sourceNativeTokenPrice?: string;\n }> {\n if (solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n const sourceNativeTokenPrice = (\n await this.api.getReceiveTransactionCost({\n sourceChainId: solTxSendParams.fromChainId,\n destinationChainId: solTxSendParams.toChainId,\n messenger: solTxSendParams.messenger,\n sourceToken: sourceToken.tokenAddress,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - sourceToken.decimals))\n .toFixed(0);\n let extraGas;\n if (solTxSendParams.extraGas) {\n extraGas = Big(solTxSendParams.extraGas)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - sourceToken.decimals))\n .toFixed(0);\n }\n return { fee, extraGas, gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY, sourceNativeTokenPrice };\n }\n return {\n fee: solTxSendParams.fee,\n extraGas: solTxSendParams.extraGas,\n gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY,\n };\n }\n\n private async getJupiterSwapTx(\n userAddress: string,\n stableTokenAddress: string,\n amount: string,\n exactOut: boolean\n ): Promise<{ tx: VersionedTransaction; amountIn?: string }> {\n let quoteResponse: any;\n try {\n const swapMode = exactOut ? \"ExactOut\" : \"ExactIn\";\n let url = `${this.jupiterUrl}/quote?inputMint=${stableTokenAddress}&outputMint=${NATIVE_MINT.toString()}&amount=${amount}&swapMode=${swapMode}&slippageBps=100&onlyDirectRoutes=true`;\n\n if (this.maxAccounts) {\n url += `&maxAccounts=${this.maxAccounts}`;\n }\n quoteResponse = await axios.get(url, {\n headers: this.apiKeyHeader ? { \"x-api-key\": this.apiKeyHeader } : undefined,\n });\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get route\");\n }\n\n let inAmount;\n if (exactOut && quoteResponse?.data?.inAmount) {\n inAmount = quoteResponse.data.inAmount;\n } else if (exactOut) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n\n let transactionResponse: any;\n try {\n transactionResponse = await axios.post(\n `${this.jupiterUrl}/swap`,\n {\n quoteResponse: quoteResponse.data,\n userPublicKey: userAddress,\n wrapAndUnwrapSol: true,\n },\n {\n headers: this.apiKeyHeader ? { \"x-api-key\": this.apiKeyHeader } : undefined,\n }\n );\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n let swapTransaction;\n if (transactionResponse?.data?.swapTransaction) {\n swapTransaction = transactionResponse.data.swapTransaction;\n } else {\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n const swapTransactionBuf = Buffer.from(swapTransaction, \"base64\");\n const tx = VersionedTransaction.deserialize(swapTransactionBuf);\n\n return exactOut ? { tx, amountIn: inAmount } : { tx };\n }\n}\n"]}
1
+ {"version":3,"file":"jupiter-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/jupiter-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport axios, { AxiosError } from \"axios\";\nimport { Big } from \"big.js\";\nimport { Chains } from \"../../../chains\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AmountNotEnoughError, JupiterError, SdkError, SdkRootError } from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, TokenWithChainDetails } from \"../../../models\";\nimport { convertIntAmountToFloat } from \"../../../utils/calculation\";\nimport { SolanaTxFeeParams } from \"../../models\";\nimport { normalizeSolanaTxFeeParams } from \"../../utils/sol/compute-budget\";\nimport { SendParams } from \"../models\";\nimport { SolTxSendParams } from \"./utils\";\n\nexport interface JupiterParams {\n jupiterUrl: string;\n jupiterApiKeyHeader?: string;\n jupiterMaxAccounts?: number;\n}\n\nconst JUP_ADD_INDEX = 1.1;\nconst JUP_SLIPPAGE_INDEX = 1.01;\n\nexport class JupiterService {\n jupiterUrl: string;\n apiKeyHeader?: string;\n maxAccounts?: number;\n\n constructor(\n private api: AllbridgeCoreClient,\n jupiterParams: JupiterParams\n ) {\n this.jupiterUrl = jupiterParams.jupiterUrl.replace(/\\/$/, \"\"); // trim last \"/\" if exist\n this.apiKeyHeader = jupiterParams.jupiterApiKeyHeader;\n this.maxAccounts = jupiterParams.jupiterMaxAccounts;\n }\n\n async buildJupAndUpdateTxSendParams(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ jupTx: VersionedTransaction; solTxSendParams: SolTxSendParams }> {\n const txFeeParams = normalizeSolanaTxFeeParams(params.txFeeParams?.solana);\n\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, txFeeParams, true);\n return { jupTx: tx, solTxSendParams: { ...solTxSendParams, ...solTxSendUpdatedParams } };\n } catch (error) {\n if (error instanceof AmountNotEnoughError) {\n throw error;\n }\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, txFeeParams, false);\n return { jupTx: tx, solTxSendParams: { ...solTxSendParams, ...solTxSendUpdatedParams } };\n } catch (e) {\n if (e instanceof SdkRootError) {\n throw e;\n }\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation Jupiter swap transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation Jupiter swap transaction\");\n }\n }\n }\n\n private async processJup(\n solTxSendParams: SolTxSendParams,\n params: SendParams,\n txFeeParams: SolanaTxFeeParams,\n exactOut: boolean\n ): Promise<{\n tx: VersionedTransaction;\n solTxSendUpdatedParams: {\n amount: string;\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n };\n }> {\n const { fee, extraGas, gasFeePaymentMethod, sourceNativeTokenPrice } =\n await this.convertStableCoinFeeAndExtraGasToNativeCurrency(params.sourceToken, solTxSendParams);\n\n let amountToProcess = exactOut ? Big(fee) : Big(solTxSendParams.fee);\n if (extraGas) {\n if (exactOut) {\n amountToProcess = amountToProcess.plus(extraGas);\n } else if (solTxSendParams.extraGas) {\n amountToProcess = amountToProcess.plus(solTxSendParams.extraGas);\n }\n }\n\n if (txFeeParams?.payTxFeeWithStablecoinSwap) {\n const feeTx = 5000;\n const txAccountCreation = 2296800 + 1224960;\n const totalFee = feeTx + txAccountCreation;\n\n if (exactOut) {\n amountToProcess = amountToProcess.plus(totalFee);\n } else {\n if (!sourceNativeTokenPrice) {\n throw new SdkError(\"sourceNativeTokenPrice is undefined.\");\n }\n const totalFeeInStable = Big(totalFee)\n .mul(sourceNativeTokenPrice)\n .div(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - params.sourceToken.decimals))\n .toFixed(0);\n amountToProcess = amountToProcess.plus(totalFeeInStable);\n }\n }\n\n if (!exactOut) {\n amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);\n }\n\n const { tx, amountIn } = await this.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut\n );\n\n let newAmount: string;\n if (exactOut) {\n if (!amountIn) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n newAmount = Big(solTxSendParams.amount)\n .minus(Big(amountIn).mul(JUP_SLIPPAGE_INDEX).toFixed(0, Big.roundUp))\n .toFixed(0);\n } else {\n newAmount = Big(solTxSendParams.amount).minus(amountToProcess).toFixed(0);\n }\n if (Big(newAmount).lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(newAmount).minus(1).neg(),\n params.sourceToken.decimals\n ).toFixed()} stables is missing`\n );\n }\n return {\n tx: tx,\n solTxSendUpdatedParams: {\n amount: newAmount,\n fee: fee,\n extraGas: extraGas,\n gasFeePaymentMethod: gasFeePaymentMethod,\n },\n };\n }\n\n private async convertStableCoinFeeAndExtraGasToNativeCurrency(\n sourceToken: TokenWithChainDetails,\n solTxSendParams: SolTxSendParams\n ): Promise<{\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n sourceNativeTokenPrice?: string;\n }> {\n if (solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n const sourceNativeTokenPrice = (\n await this.api.getReceiveTransactionCost({\n sourceChainId: solTxSendParams.fromChainId,\n destinationChainId: solTxSendParams.toChainId,\n messenger: solTxSendParams.messenger,\n sourceToken: sourceToken.tokenAddress,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - sourceToken.decimals))\n .toFixed(0);\n let extraGas;\n if (solTxSendParams.extraGas) {\n extraGas = Big(solTxSendParams.extraGas)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - sourceToken.decimals))\n .toFixed(0);\n }\n return { fee, extraGas, gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY, sourceNativeTokenPrice };\n }\n return {\n fee: solTxSendParams.fee,\n extraGas: solTxSendParams.extraGas,\n gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY,\n };\n }\n\n private async getJupiterSwapTx(\n userAddress: string,\n stableTokenAddress: string,\n amount: string,\n exactOut: boolean\n ): Promise<{ tx: VersionedTransaction; amountIn?: string }> {\n let quoteResponse: any;\n try {\n const swapMode = exactOut ? \"ExactOut\" : \"ExactIn\";\n let url = `${this.jupiterUrl}/quote?inputMint=${stableTokenAddress}&outputMint=${NATIVE_MINT.toString()}&amount=${amount}&swapMode=${swapMode}&slippageBps=100&onlyDirectRoutes=true`;\n\n if (this.maxAccounts) {\n url += `&maxAccounts=${this.maxAccounts}`;\n }\n quoteResponse = await axios.get(url, {\n headers: this.apiKeyHeader ? { \"x-api-key\": this.apiKeyHeader } : undefined,\n });\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get route\");\n }\n\n let inAmount;\n if (exactOut && quoteResponse?.data?.inAmount) {\n inAmount = quoteResponse.data.inAmount;\n } else if (exactOut) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n\n let transactionResponse: any;\n try {\n transactionResponse = await axios.post(\n `${this.jupiterUrl}/swap`,\n {\n quoteResponse: quoteResponse.data,\n userPublicKey: userAddress,\n wrapAndUnwrapSol: true,\n },\n {\n headers: this.apiKeyHeader ? { \"x-api-key\": this.apiKeyHeader } : undefined,\n }\n );\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n let swapTransaction;\n if (transactionResponse?.data?.swapTransaction) {\n swapTransaction = transactionResponse.data.swapTransaction;\n } else {\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n const swapTransactionBuf = Buffer.from(swapTransaction, \"base64\");\n const tx = VersionedTransaction.deserialize(swapTransactionBuf);\n\n return exactOut ? { tx, amountIn: inAmount } : { tx };\n }\n}\n"]}
@@ -1 +1 @@
1
- export declare const VERSION = "3.29.1";
1
+ export declare const VERSION = "3.29.2-alpha.1";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = "3.29.1";
4
+ exports.VERSION = "3.29.2-alpha.1";
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = \"3.29.1\";\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,gBAAgB,CAAC","sourcesContent":["export const VERSION = \"3.29.2-alpha.1\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allbridge/bridge-core-sdk",
3
- "version": "3.29.1",
3
+ "version": "3.29.2-alpha.1",
4
4
  "main": "./dist/cjs/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/src/index.d.ts",