@shapeshiftoss/swapper 20.3.0 → 20.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/constants.js +15 -0
  3. package/dist/cjs/index.d.ts +2 -0
  4. package/dist/cjs/index.js +2 -0
  5. package/dist/cjs/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  6. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +1 -2
  7. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +2 -1
  8. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +21 -15
  9. package/dist/cjs/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +1 -0
  10. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +0 -2
  11. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +0 -2
  12. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
  13. package/dist/cjs/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
  14. package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +1 -0
  15. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  16. package/dist/cjs/swappers/FyndSwapper/FyndSwapper.d.ts +2 -0
  17. package/dist/cjs/swappers/FyndSwapper/FyndSwapper.js +5 -0
  18. package/dist/cjs/swappers/FyndSwapper/endpoints.d.ts +2 -0
  19. package/dist/cjs/swappers/FyndSwapper/endpoints.js +14 -0
  20. package/dist/cjs/swappers/FyndSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  21. package/dist/cjs/swappers/FyndSwapper/getTradeQuote/getTradeQuote.js +43 -0
  22. package/dist/cjs/swappers/FyndSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  23. package/dist/cjs/swappers/FyndSwapper/getTradeRate/getTradeRate.js +34 -0
  24. package/dist/cjs/swappers/FyndSwapper/index.d.ts +2 -0
  25. package/dist/cjs/swappers/FyndSwapper/index.js +7 -0
  26. package/dist/cjs/swappers/FyndSwapper/types.d.ts +41 -0
  27. package/dist/cjs/swappers/FyndSwapper/types.js +2 -0
  28. package/dist/cjs/swappers/FyndSwapper/utils/constants.d.ts +33 -0
  29. package/dist/cjs/swappers/FyndSwapper/utils/constants.js +38 -0
  30. package/dist/cjs/swappers/FyndSwapper/utils/fetchFromFynd.d.ts +13 -0
  31. package/dist/cjs/swappers/FyndSwapper/utils/fetchFromFynd.js +42 -0
  32. package/dist/cjs/swappers/FyndSwapper/utils/fyndService.d.ts +5 -0
  33. package/dist/cjs/swappers/FyndSwapper/utils/fyndService.js +9 -0
  34. package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.d.ts +25 -0
  35. package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.js +48 -0
  36. package/dist/cjs/swappers/FyndSwapper/utils/getFyndTradeContext.d.ts +18 -0
  37. package/dist/cjs/swappers/FyndSwapper/utils/getFyndTradeContext.js +94 -0
  38. package/dist/cjs/swappers/FyndSwapper/utils/helpers.d.ts +24 -0
  39. package/dist/cjs/swappers/FyndSwapper/utils/helpers.js +174 -0
  40. package/dist/cjs/swappers/FyndSwapper/utils/helpers.test.d.ts +1 -0
  41. package/dist/cjs/swappers/FyndSwapper/utils/helpers.test.js +101 -0
  42. package/dist/cjs/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
  43. package/dist/cjs/swappers/PortalsSwapper/endpoints.js +4 -1
  44. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +1 -1
  45. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +2 -3
  46. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +1 -0
  47. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.js +4 -0
  48. package/dist/cjs/swappers/RelaySwapper/utils/relayStatus.js +3 -3
  49. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +9 -4
  50. package/dist/cjs/swappers/SymbiosisSwapper/SymbiosisSwapper.d.ts +2 -0
  51. package/dist/cjs/swappers/SymbiosisSwapper/SymbiosisSwapper.js +8 -0
  52. package/dist/cjs/swappers/SymbiosisSwapper/endpoints.d.ts +2 -0
  53. package/dist/cjs/swappers/SymbiosisSwapper/endpoints.js +66 -0
  54. package/dist/cjs/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  55. package/dist/cjs/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.js +42 -0
  56. package/dist/cjs/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  57. package/dist/cjs/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.js +34 -0
  58. package/dist/cjs/swappers/SymbiosisSwapper/index.d.ts +2 -0
  59. package/dist/cjs/swappers/SymbiosisSwapper/index.js +7 -0
  60. package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.d.ts +19 -0
  61. package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.js +64 -0
  62. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.d.ts +26 -0
  63. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.js +106 -0
  64. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.d.ts +1 -0
  65. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.js +161 -0
  66. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.d.ts +17 -0
  67. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.js +146 -0
  68. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.d.ts +38 -0
  69. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.js +172 -0
  70. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.test.d.ts +1 -0
  71. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.test.js +151 -0
  72. package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.d.ts +5 -0
  73. package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.js +18 -0
  74. package/dist/cjs/swappers/SymbiosisSwapper/utils/types.d.ts +83 -0
  75. package/dist/cjs/swappers/SymbiosisSwapper/utils/types.js +11 -0
  76. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  77. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  78. package/dist/cjs/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
  79. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +24 -1
  80. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.d.ts +1 -0
  81. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.js +110 -0
  82. package/dist/cjs/swappers/ZrxSwapper/types.d.ts +2 -1
  83. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.d.ts +1 -0
  84. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.js +26 -0
  85. package/dist/cjs/types.d.ts +6 -5
  86. package/dist/cjs/types.js +2 -0
  87. package/dist/cjs/utils/helpers.d.ts +1 -2
  88. package/dist/cjs/utils/helpers.js +8 -32
  89. package/dist/cjs/utils/helpers.test.js +6 -2
  90. package/dist/esm/.tsbuildinfo +1 -1
  91. package/dist/esm/constants.js +15 -0
  92. package/dist/esm/index.d.ts +2 -0
  93. package/dist/esm/index.js +2 -0
  94. package/dist/esm/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  95. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +1 -2
  96. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +2 -1
  97. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +21 -15
  98. package/dist/esm/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +1 -0
  99. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +0 -2
  100. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +0 -2
  101. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
  102. package/dist/esm/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
  103. package/dist/esm/swappers/ChainflipSwapper/types.d.ts +1 -0
  104. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  105. package/dist/esm/swappers/FyndSwapper/FyndSwapper.d.ts +2 -0
  106. package/dist/esm/swappers/FyndSwapper/FyndSwapper.js +2 -0
  107. package/dist/esm/swappers/FyndSwapper/endpoints.d.ts +2 -0
  108. package/dist/esm/swappers/FyndSwapper/endpoints.js +11 -0
  109. package/dist/esm/swappers/FyndSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  110. package/dist/esm/swappers/FyndSwapper/getTradeQuote/getTradeQuote.js +39 -0
  111. package/dist/esm/swappers/FyndSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  112. package/dist/esm/swappers/FyndSwapper/getTradeRate/getTradeRate.js +30 -0
  113. package/dist/esm/swappers/FyndSwapper/index.d.ts +2 -0
  114. package/dist/esm/swappers/FyndSwapper/index.js +2 -0
  115. package/dist/esm/swappers/FyndSwapper/types.d.ts +41 -0
  116. package/dist/esm/swappers/FyndSwapper/types.js +1 -0
  117. package/dist/esm/swappers/FyndSwapper/utils/constants.d.ts +33 -0
  118. package/dist/esm/swappers/FyndSwapper/utils/constants.js +35 -0
  119. package/dist/esm/swappers/FyndSwapper/utils/fetchFromFynd.d.ts +13 -0
  120. package/dist/esm/swappers/FyndSwapper/utils/fetchFromFynd.js +38 -0
  121. package/dist/esm/swappers/FyndSwapper/utils/fyndService.d.ts +5 -0
  122. package/dist/esm/swappers/FyndSwapper/utils/fyndService.js +3 -0
  123. package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.d.ts +25 -0
  124. package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.js +44 -0
  125. package/dist/esm/swappers/FyndSwapper/utils/getFyndTradeContext.d.ts +18 -0
  126. package/dist/esm/swappers/FyndSwapper/utils/getFyndTradeContext.js +90 -0
  127. package/dist/esm/swappers/FyndSwapper/utils/helpers.d.ts +24 -0
  128. package/dist/esm/swappers/FyndSwapper/utils/helpers.js +162 -0
  129. package/dist/esm/swappers/FyndSwapper/utils/helpers.test.d.ts +1 -0
  130. package/dist/esm/swappers/FyndSwapper/utils/helpers.test.js +99 -0
  131. package/dist/esm/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
  132. package/dist/esm/swappers/PortalsSwapper/endpoints.js +4 -1
  133. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +2 -2
  134. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +2 -3
  135. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +1 -0
  136. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.js +5 -1
  137. package/dist/esm/swappers/RelaySwapper/utils/relayStatus.js +3 -3
  138. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +9 -4
  139. package/dist/esm/swappers/SymbiosisSwapper/SymbiosisSwapper.d.ts +2 -0
  140. package/dist/esm/swappers/SymbiosisSwapper/SymbiosisSwapper.js +5 -0
  141. package/dist/esm/swappers/SymbiosisSwapper/endpoints.d.ts +2 -0
  142. package/dist/esm/swappers/SymbiosisSwapper/endpoints.js +63 -0
  143. package/dist/esm/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  144. package/dist/esm/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.js +38 -0
  145. package/dist/esm/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  146. package/dist/esm/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.js +30 -0
  147. package/dist/esm/swappers/SymbiosisSwapper/index.d.ts +2 -0
  148. package/dist/esm/swappers/SymbiosisSwapper/index.js +2 -0
  149. package/dist/esm/swappers/SymbiosisSwapper/utils/constants.d.ts +19 -0
  150. package/dist/esm/swappers/SymbiosisSwapper/utils/constants.js +61 -0
  151. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.d.ts +26 -0
  152. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.js +102 -0
  153. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.d.ts +1 -0
  154. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.js +159 -0
  155. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.d.ts +17 -0
  156. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.js +139 -0
  157. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.d.ts +38 -0
  158. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.js +156 -0
  159. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.test.d.ts +1 -0
  160. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.test.js +149 -0
  161. package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.d.ts +5 -0
  162. package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.js +12 -0
  163. package/dist/esm/swappers/SymbiosisSwapper/utils/types.d.ts +83 -0
  164. package/dist/esm/swappers/SymbiosisSwapper/utils/types.js +8 -0
  165. package/dist/esm/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  166. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  167. package/dist/esm/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
  168. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +25 -2
  169. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.d.ts +1 -0
  170. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.js +108 -0
  171. package/dist/esm/swappers/ZrxSwapper/types.d.ts +2 -1
  172. package/dist/esm/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.d.ts +1 -0
  173. package/dist/esm/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.js +22 -0
  174. package/dist/esm/types.d.ts +6 -5
  175. package/dist/esm/types.js +2 -0
  176. package/dist/esm/utils/helpers.d.ts +1 -2
  177. package/dist/esm/utils/helpers.js +9 -33
  178. package/dist/esm/utils/helpers.test.js +6 -2
  179. package/package.json +7 -7
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.symbiosisApi = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
6
+ const unchained_client_1 = require("@shapeshiftoss/unchained-client");
7
+ const utils_1 = require("../../utils");
8
+ const evm_1 = require("../../utils/evm");
9
+ const tron_1 = require("../../utils/tron");
10
+ const getTradeQuote_1 = require("./getTradeQuote/getTradeQuote");
11
+ const getTradeRate_1 = require("./getTradeRate/getTradeRate");
12
+ const constants_1 = require("./utils/constants");
13
+ const helpers_1 = require("./utils/helpers");
14
+ const symbiosisService_1 = require("./utils/symbiosisService");
15
+ exports.symbiosisApi = {
16
+ getTradeQuote: (input, deps) => (0, getTradeQuote_1.getTradeQuote)(input, deps),
17
+ getTradeRate: (input, deps) => (0, getTradeRate_1.getTradeRate)(input, deps),
18
+ getEvmTransactionFees: evm_1.getEvmTransactionFees,
19
+ getUnsignedEvmTransaction: evm_1.getUnsignedEvmTransaction,
20
+ getTronTransactionFees: tron_1.getTronTransactionFees,
21
+ getUnsignedTronTransaction: tron_1.getUnsignedTronTransaction,
22
+ checkTradeStatus: async ({ txHash, chainId, address, config, swap, fetchIsSmartContractAddressQuery, assertGetEvmChainAdapter, assertGetTronChainAdapter, }) => {
23
+ if (!swap)
24
+ throw new Error('Missing swap');
25
+ const evmSourceTxStatus = (0, chain_adapters_1.isEvmChainId)(chainId)
26
+ ? await (0, utils_1.checkEvmSwapStatus)({
27
+ txHash,
28
+ chainId,
29
+ address,
30
+ assertGetEvmChainAdapter,
31
+ fetchIsSmartContractAddressQuery,
32
+ })
33
+ : undefined;
34
+ if (evmSourceTxStatus && evmSourceTxStatus.status !== unchained_client_1.TxStatus.Confirmed) {
35
+ return evmSourceTxStatus;
36
+ }
37
+ const sourceTxHash = evmSourceTxStatus?.buyTxHash ?? txHash;
38
+ if (chainId === caip_1.tronChainId) {
39
+ const sourceTx = await assertGetTronChainAdapter(chainId)
40
+ .httpProvider.getTransaction({ txid: sourceTxHash })
41
+ .catch(() => null);
42
+ if (!sourceTx?.confirmations) {
43
+ return { buyTxHash: undefined, status: unchained_client_1.TxStatus.Pending, message: undefined };
44
+ }
45
+ if ((0, helpers_1.isTronSourceTxFailed)(sourceTx)) {
46
+ return { buyTxHash: undefined, status: unchained_client_1.TxStatus.Failed, message: undefined };
47
+ }
48
+ }
49
+ const sellSymbiosisChainId = constants_1.chainIdToSymbiosisChainId[chainId];
50
+ const buySymbiosisChainId = constants_1.chainIdToSymbiosisChainId[swap.buyAsset.chainId];
51
+ const maybeStatusResponse = await symbiosisService_1.symbiosisService.get(`${config.VITE_SYMBIOSIS_API_URL}/v2/tx/${sellSymbiosisChainId}/${sourceTxHash}`);
52
+ if (maybeStatusResponse.isErr()) {
53
+ return {
54
+ buyTxHash: undefined,
55
+ status: unchained_client_1.TxStatus.Unknown,
56
+ message: undefined,
57
+ };
58
+ }
59
+ const { data: response } = maybeStatusResponse.unwrap();
60
+ return {
61
+ ...(0, helpers_1.getSymbiosisTradeStatus)({ response, buySymbiosisChainId }),
62
+ swapperTxId: sourceTxHash,
63
+ swapperTxLink: `${constants_1.SYMBIOSIS_EXPLORER_URL}/transactions/${sellSymbiosisChainId}/${sourceTxHash}`,
64
+ };
65
+ },
66
+ };
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types';
3
+ import type { SymbiosisTradeQuoteInput } from '../utils/types';
4
+ export declare const getTradeQuote: (input: SymbiosisTradeQuoteInput, deps: SwapperDeps) => Promise<Result<TradeQuote[], SwapErrorRight>>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTradeQuote = void 0;
4
+ const monads_1 = require("@sniptt/monads");
5
+ const utils_1 = require("../../../utils");
6
+ const getSymbiosisStepData_1 = require("../utils/getSymbiosisStepData");
7
+ const getSymbiosisTradeContext_1 = require("../utils/getSymbiosisTradeContext");
8
+ const getTradeQuote = async (input, deps) => {
9
+ const { accountNumber } = input;
10
+ const maybeAddresses = (0, utils_1.assertQuoteAddresses)(input);
11
+ if (maybeAddresses.isErr())
12
+ return (0, monads_1.Err)(maybeAddresses.unwrapErr());
13
+ const { sendAddress, receiveAddress } = maybeAddresses.unwrap();
14
+ const maybeContext = await (0, getSymbiosisTradeContext_1.getSymbiosisTradeContext)({
15
+ input,
16
+ deps,
17
+ from: sendAddress,
18
+ to: receiveAddress,
19
+ });
20
+ if (maybeContext.isErr())
21
+ return (0, monads_1.Err)(maybeContext.unwrapErr());
22
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
23
+ const maybeStepData = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({ ...stepDataArgs, type: 'quote', input });
24
+ if (maybeStepData.isErr())
25
+ return (0, monads_1.Err)(maybeStepData.unwrapErr());
26
+ const { transactionData, networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
27
+ const tradeQuote = {
28
+ ...tradeCommon,
29
+ quoteOrRate: 'quote',
30
+ receiveAddress,
31
+ steps: [
32
+ {
33
+ ...stepCommon,
34
+ accountNumber,
35
+ transactionData,
36
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
37
+ },
38
+ ],
39
+ };
40
+ return (0, monads_1.Ok)([tradeQuote]);
41
+ };
42
+ exports.getTradeQuote = getTradeQuote;
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight, SwapperDeps, TradeRate } from '../../../types';
3
+ import type { SymbiosisTradeRateInput } from '../utils/types';
4
+ export declare const getTradeRate: (input: SymbiosisTradeRateInput, deps: SwapperDeps) => Promise<Result<TradeRate[], SwapErrorRight>>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTradeRate = void 0;
4
+ const monads_1 = require("@sniptt/monads");
5
+ const getSymbiosisStepData_1 = require("../utils/getSymbiosisStepData");
6
+ const getSymbiosisTradeContext_1 = require("../utils/getSymbiosisTradeContext");
7
+ const helpers_1 = require("../utils/helpers");
8
+ const getTradeRate = async (input, deps) => {
9
+ const { accountNumber, sellAsset, buyAsset, sendAddress, receiveAddress } = input;
10
+ const from = sendAddress ?? (0, helpers_1.getDefaultUserAddress)(sellAsset.chainId);
11
+ const to = receiveAddress ?? (0, helpers_1.getDefaultUserAddress)(buyAsset.chainId);
12
+ const maybeContext = await (0, getSymbiosisTradeContext_1.getSymbiosisTradeContext)({ input, deps, from, to });
13
+ if (maybeContext.isErr())
14
+ return (0, monads_1.Err)(maybeContext.unwrapErr());
15
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
16
+ const maybeStepData = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({ ...stepDataArgs, type: 'rate', input });
17
+ if (maybeStepData.isErr())
18
+ return (0, monads_1.Err)(maybeStepData.unwrapErr());
19
+ const { networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
20
+ const tradeRate = {
21
+ ...tradeCommon,
22
+ quoteOrRate: 'rate',
23
+ receiveAddress: to,
24
+ steps: [
25
+ {
26
+ ...stepCommon,
27
+ accountNumber,
28
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
29
+ },
30
+ ],
31
+ };
32
+ return (0, monads_1.Ok)([tradeRate]);
33
+ };
34
+ exports.getTradeRate = getTradeRate;
@@ -0,0 +1,2 @@
1
+ export { symbiosisApi } from './endpoints';
2
+ export { symbiosisSwapper } from './SymbiosisSwapper';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.symbiosisSwapper = exports.symbiosisApi = void 0;
4
+ var endpoints_1 = require("./endpoints");
5
+ Object.defineProperty(exports, "symbiosisApi", { enumerable: true, get: function () { return endpoints_1.symbiosisApi; } });
6
+ var SymbiosisSwapper_1 = require("./SymbiosisSwapper");
7
+ Object.defineProperty(exports, "symbiosisSwapper", { enumerable: true, get: function () { return SymbiosisSwapper_1.symbiosisSwapper; } });
@@ -0,0 +1,19 @@
1
+ import type { ChainId } from '@shapeshiftoss/caip';
2
+ export declare const chainIdToSymbiosisChainId: Partial<Record<ChainId, number>>;
3
+ export declare const symbiosisChainIdToChainId: Partial<Record<number, ChainId>>;
4
+ export declare const SYMBIOSIS_DISABLED_PROVIDERS = "chainflip-bridge,thorchain-bridge,changelly,intent-solver";
5
+ export declare const SYMBIOSIS_CROSSCHAIN_SWAP_KIND = "crosschain-swap";
6
+ export declare const SYMBIOSIS_SRC_CHAIN_SWAP_LABEL = "src-chain-swap";
7
+ export declare const SYMBIOSIS_PARTNER_SWAP_LABEL = "partner-swap";
8
+ export declare const SYMBIOSIS_SEMI_CENTRALIZED_LABEL = "semi-centralized";
9
+ export declare const SYMBIOSIS_MIN_SLIPPAGE_BPS = 10;
10
+ export declare const SYMBIOSIS_MAX_SLIPPAGE_BPS = 1000;
11
+ export declare const SYMBIOSIS_PARTNER_ADDRESS = "0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC";
12
+ export declare const SYMBIOSIS_PARTNER_FEE_BPS = "60";
13
+ export declare const SYMBIOSIS_PARTNER_FEE_DESCRIPTION = "Partner fee";
14
+ export declare const SYMBIOSIS_PARTNER_ID = "shapeshift";
15
+ export declare const DEFAULT_SYMBIOSIS_EVM_USER_ADDRESS = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
16
+ export declare const DEFAULT_SYMBIOSIS_TRON_USER_ADDRESS = "TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7";
17
+ export declare const SYMBIOSIS_TRON_BRIDGE_ENERGY = "470000";
18
+ export declare const SYMBIOSIS_TRON_SOURCE_SWAP_ENERGY = "580000";
19
+ export declare const SYMBIOSIS_EXPLORER_URL = "https://explorer.symbiosis.finance";
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SYMBIOSIS_EXPLORER_URL = exports.SYMBIOSIS_TRON_SOURCE_SWAP_ENERGY = exports.SYMBIOSIS_TRON_BRIDGE_ENERGY = exports.DEFAULT_SYMBIOSIS_TRON_USER_ADDRESS = exports.DEFAULT_SYMBIOSIS_EVM_USER_ADDRESS = exports.SYMBIOSIS_PARTNER_ID = exports.SYMBIOSIS_PARTNER_FEE_DESCRIPTION = exports.SYMBIOSIS_PARTNER_FEE_BPS = exports.SYMBIOSIS_PARTNER_ADDRESS = exports.SYMBIOSIS_MAX_SLIPPAGE_BPS = exports.SYMBIOSIS_MIN_SLIPPAGE_BPS = exports.SYMBIOSIS_SEMI_CENTRALIZED_LABEL = exports.SYMBIOSIS_PARTNER_SWAP_LABEL = exports.SYMBIOSIS_SRC_CHAIN_SWAP_LABEL = exports.SYMBIOSIS_CROSSCHAIN_SWAP_KIND = exports.SYMBIOSIS_DISABLED_PROVIDERS = exports.symbiosisChainIdToChainId = exports.chainIdToSymbiosisChainId = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const SYMBIOSIS_TRON_CHAIN_ID = 728126428;
6
+ const SYMBIOSIS_SUPPORTED_EVM_CHAIN_IDS = [
7
+ caip_1.ethChainId,
8
+ caip_1.bscChainId,
9
+ caip_1.polygonChainId,
10
+ caip_1.avalancheChainId,
11
+ caip_1.arbitrumChainId,
12
+ caip_1.optimismChainId,
13
+ caip_1.baseChainId,
14
+ caip_1.gnosisChainId,
15
+ caip_1.zkSyncEraChainId,
16
+ caip_1.lineaChainId,
17
+ caip_1.scrollChainId,
18
+ caip_1.mantleChainId,
19
+ caip_1.modeChainId,
20
+ caip_1.seiChainId,
21
+ caip_1.cronosChainId,
22
+ caip_1.sonicChainId,
23
+ caip_1.abstractChainId,
24
+ caip_1.berachainChainId,
25
+ caip_1.unichainChainId,
26
+ caip_1.soneiumChainId,
27
+ caip_1.hyperEvmChainId,
28
+ caip_1.katanaChainId,
29
+ caip_1.plasmaChainId,
30
+ caip_1.monadChainId,
31
+ caip_1.robinhoodChainId,
32
+ ];
33
+ // Symbiosis uses the EVM chain reference as its chain id, and its own id for Tron
34
+ const SYMBIOSIS_CHAIN_ID_ENTRIES = [
35
+ ...SYMBIOSIS_SUPPORTED_EVM_CHAIN_IDS.map((chainId) => [
36
+ chainId,
37
+ Number((0, caip_1.fromChainId)(chainId).chainReference),
38
+ ]),
39
+ [caip_1.tronChainId, SYMBIOSIS_TRON_CHAIN_ID],
40
+ ];
41
+ exports.chainIdToSymbiosisChainId = Object.fromEntries(SYMBIOSIS_CHAIN_ID_ENTRIES);
42
+ exports.symbiosisChainIdToChainId = Object.fromEntries(SYMBIOSIS_CHAIN_ID_ENTRIES.map(([chainId, symbiosisChainId]) => [symbiosisChainId, chainId]));
43
+ // Disabled liquidity providers: bridges we integrate directly, custodial Changelly, and intent routes that skip the partner fee
44
+ exports.SYMBIOSIS_DISABLED_PROVIDERS = 'chainflip-bridge,thorchain-bridge,changelly,intent-solver';
45
+ exports.SYMBIOSIS_CROSSCHAIN_SWAP_KIND = 'crosschain-swap';
46
+ exports.SYMBIOSIS_SRC_CHAIN_SWAP_LABEL = 'src-chain-swap';
47
+ // Labels on routes with a leg outside Symbiosis
48
+ exports.SYMBIOSIS_PARTNER_SWAP_LABEL = 'partner-swap';
49
+ exports.SYMBIOSIS_SEMI_CENTRALIZED_LABEL = 'semi-centralized';
50
+ // /v2/quote answers 'Slippage is too low' under 10 and 'too high' over 1000
51
+ exports.SYMBIOSIS_MIN_SLIPPAGE_BPS = 10;
52
+ exports.SYMBIOSIS_MAX_SLIPPAGE_BPS = 1000;
53
+ // Our registered partner address and the fixed fee rate Symbiosis has configured for it
54
+ exports.SYMBIOSIS_PARTNER_ADDRESS = '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC';
55
+ exports.SYMBIOSIS_PARTNER_FEE_BPS = '60';
56
+ exports.SYMBIOSIS_PARTNER_FEE_DESCRIPTION = 'Partner fee';
57
+ // Sent as X-Partner-Id so Symbiosis attributes our swaps to this client id in its explorer and metrics
58
+ exports.SYMBIOSIS_PARTNER_ID = 'shapeshift';
59
+ exports.DEFAULT_SYMBIOSIS_EVM_USER_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
60
+ exports.DEFAULT_SYMBIOSIS_TRON_USER_ADDRESS = 'TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7';
61
+ // metaRoute energy over 31 mainnet calls on 2026-10-05: up to 467,826 bridging the sell token, up to 578,456 with a source swap first
62
+ exports.SYMBIOSIS_TRON_BRIDGE_ENERGY = '470000';
63
+ exports.SYMBIOSIS_TRON_SOURCE_SWAP_ENERGY = '580000';
64
+ exports.SYMBIOSIS_EXPLORER_URL = 'https://explorer.symbiosis.finance';
@@ -0,0 +1,26 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types';
3
+ import type { SymbiosisSwapTx } from './types';
4
+ type BaseArgs = {
5
+ swapTx: SymbiosisSwapTx;
6
+ sellAmountCryptoBaseUnit: string;
7
+ spenderAddress: string;
8
+ tronFallbackEnergy: string;
9
+ };
10
+ export type GetSymbiosisStepDataArgs = StepDataArgs<BaseArgs, {
11
+ from: string;
12
+ }>;
13
+ type SymbiosisRateStepData = {
14
+ networkFeeCryptoBaseUnit: string | undefined;
15
+ };
16
+ type SymbiosisQuoteStepData = {
17
+ transactionData: TxBuildData;
18
+ networkFeeCryptoBaseUnit: string;
19
+ };
20
+ export declare function getSymbiosisStepData(args: Extract<GetSymbiosisStepDataArgs, {
21
+ type: 'rate';
22
+ }>): Promise<Result<SymbiosisRateStepData, SwapErrorRight>>;
23
+ export declare function getSymbiosisStepData(args: Extract<GetSymbiosisStepDataArgs, {
24
+ type: 'quote';
25
+ }>): Promise<Result<SymbiosisQuoteStepData, SwapErrorRight>>;
26
+ export {};
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSymbiosisStepData = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
6
+ const utils_1 = require("@shapeshiftoss/utils");
7
+ const monads_1 = require("@sniptt/monads");
8
+ const utils_2 = require("../../../utils");
9
+ const evm_1 = require("../../../utils/evm");
10
+ const tron_1 = require("../../../utils/tron");
11
+ const constants_1 = require("./constants");
12
+ const helpers_1 = require("./helpers");
13
+ async function getSymbiosisStepData(args) {
14
+ const { swapTx, sellAsset, sellAmountCryptoBaseUnit, spenderAddress, tronFallbackEnergy, from, type, input, deps, } = args;
15
+ // Symbiosis adds its own fee to the native value on other route kinds - a step must send exactly the sell amount
16
+ const expectedValue = (0, utils_1.isToken)(sellAsset.assetId) ? '0' : sellAmountCryptoBaseUnit;
17
+ if (!(0, utils_1.bnOrZero)(swapTx.tx.value).eq(expectedValue)) {
18
+ return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getSymbiosisStepData'));
19
+ }
20
+ if (swapTx.tx.chainId !== constants_1.chainIdToSymbiosisChainId[sellAsset.chainId]) {
21
+ return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getSymbiosisStepData'));
22
+ }
23
+ switch (swapTx.type) {
24
+ case 'evm': {
25
+ const { tx } = swapTx;
26
+ const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
27
+ const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
28
+ const transactionData = {
29
+ type: 'evm',
30
+ chainId: Number((0, caip_1.fromChainId)(sellAsset.chainId).chainReference),
31
+ to: tx.to,
32
+ data: tx.data,
33
+ value: tx.value ?? '0',
34
+ };
35
+ const stateOverride = { sellAsset, sellAmountCryptoBaseUnit, spenderAddress };
36
+ if (type === 'rate') {
37
+ const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
38
+ adapter,
39
+ transactionData,
40
+ from,
41
+ supportsEIP1559,
42
+ stateOverride,
43
+ }).catch(() => undefined);
44
+ const stepData = { networkFeeCryptoBaseUnit };
45
+ return (0, monads_1.Ok)(stepData);
46
+ }
47
+ try {
48
+ const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
49
+ adapter,
50
+ transactionData,
51
+ from,
52
+ supportsEIP1559,
53
+ stateOverride,
54
+ });
55
+ const stepData = { transactionData, networkFeeCryptoBaseUnit };
56
+ return (0, monads_1.Ok)(stepData);
57
+ }
58
+ catch (error) {
59
+ return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getSymbiosisStepData', error));
60
+ }
61
+ }
62
+ case 'tron': {
63
+ const { tx } = swapTx;
64
+ if (!tx.functionSelector)
65
+ return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getSymbiosisStepData'));
66
+ const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
67
+ const call = {
68
+ to: tx.to,
69
+ data: (0, helpers_1.buildSymbiosisTronCallData)({ functionSelector: tx.functionSelector, data: tx.data }),
70
+ value: tx.value ?? '0',
71
+ };
72
+ if (type === 'rate') {
73
+ const networkFeeCryptoBaseUnit = await (0, tron_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
74
+ adapter,
75
+ energy: tronFallbackEnergy,
76
+ bandwidthBytes: chain_adapters_1.tron.getTronContractCallBandwidthBytes(call.data),
77
+ contractAddress: call.to,
78
+ fullEnergyOnShareLookupFailure: true,
79
+ }).catch(() => undefined);
80
+ const stepData = { networkFeeCryptoBaseUnit };
81
+ return (0, monads_1.Ok)(stepData);
82
+ }
83
+ try {
84
+ const stepData = {
85
+ transactionData: { type: 'tron', ...call },
86
+ networkFeeCryptoBaseUnit: await (0, tron_1.getTronContractCallNetworkFeeCryptoBaseUnit)({
87
+ adapter,
88
+ transactionData: call,
89
+ from,
90
+ sellAsset,
91
+ sellAmountCryptoBaseUnit,
92
+ spenderAddress,
93
+ fallbackEnergy: tronFallbackEnergy,
94
+ }),
95
+ };
96
+ return (0, monads_1.Ok)(stepData);
97
+ }
98
+ catch (error) {
99
+ return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getSymbiosisStepData', error));
100
+ }
101
+ }
102
+ default:
103
+ return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getSymbiosisStepData'));
104
+ }
105
+ }
106
+ exports.getSymbiosisStepData = getSymbiosisStepData;
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const caip_1 = require("@shapeshiftoss/caip");
4
+ const vitest_1 = require("vitest");
5
+ const types_1 = require("../../../types");
6
+ const evm_1 = require("../../../utils/evm");
7
+ const assets_1 = require("../../../utils/test-data/assets");
8
+ const tron_1 = require("../../../utils/tron");
9
+ const getSymbiosisStepData_1 = require("./getSymbiosisStepData");
10
+ vitest_1.vi.mock('../../../utils/evm', () => ({
11
+ getEvmNetworkFeeCryptoBaseUnit: vitest_1.vi.fn(),
12
+ }));
13
+ vitest_1.vi.mock('../../../utils/tron', () => ({
14
+ getTronContractCallFallbackFeeCryptoBaseUnit: vitest_1.vi.fn(),
15
+ getTronContractCallNetworkFeeCryptoBaseUnit: vitest_1.vi.fn(),
16
+ }));
17
+ const TRX = {
18
+ ...assets_1.ETH,
19
+ assetId: caip_1.tronAssetId,
20
+ chainId: caip_1.tronChainId,
21
+ symbol: 'TRX',
22
+ precision: 6,
23
+ };
24
+ const ROUTER = '0x3743c756b64ECd0770f1d4f47696A73d2A46dcbe';
25
+ const TRON_ROUTER = 'TPuaJ6gnYfE9gLUDFrbWbPx3tMnjG8max1';
26
+ const FROM = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
27
+ const TRON_FROM = 'TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7';
28
+ const deps = {
29
+ assertGetEvmChainAdapter: vitest_1.vi.fn(() => ({})),
30
+ assertGetTronChainAdapter: vitest_1.vi.fn(() => ({})),
31
+ };
32
+ const quoteInput = { supportsEIP1559: true };
33
+ const evmSwapTx = {
34
+ type: 'evm',
35
+ tx: { chainId: 42161, to: ROUTER, data: '0xa11b1198', value: '0' },
36
+ };
37
+ const tronSwapTx = {
38
+ type: 'tron',
39
+ tx: {
40
+ chainId: 728126428,
41
+ from: TRON_FROM,
42
+ to: TRON_ROUTER,
43
+ data: '0x0020',
44
+ value: '500000000',
45
+ feeLimit: 200000000,
46
+ functionSelector: 'metaRoute((bytes,bytes,address[],address,address,uint256,bool,address,bytes))',
47
+ },
48
+ };
49
+ const evmArgs = {
50
+ swapTx: evmSwapTx,
51
+ sellAsset: assets_1.USDC_ARBITRUM,
52
+ sellAmountCryptoBaseUnit: '100000000',
53
+ spenderAddress: ROUTER,
54
+ tronFallbackEnergy: '470000',
55
+ from: FROM,
56
+ deps,
57
+ };
58
+ const tronArgs = {
59
+ swapTx: tronSwapTx,
60
+ sellAsset: TRX,
61
+ sellAmountCryptoBaseUnit: '500000000',
62
+ spenderAddress: '',
63
+ tronFallbackEnergy: '580000',
64
+ from: TRON_FROM,
65
+ deps,
66
+ };
67
+ (0, vitest_1.describe)('getSymbiosisStepData', () => {
68
+ (0, vitest_1.beforeEach)(() => {
69
+ vitest_1.vi.clearAllMocks();
70
+ });
71
+ (0, vitest_1.describe)('evm', () => {
72
+ (0, vitest_1.it)('fails to build when a token sell carries native value', async () => {
73
+ const swapTx = {
74
+ type: 'evm',
75
+ tx: { ...evmSwapTx.tx, value: '300000000000000' },
76
+ };
77
+ const result = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({
78
+ ...evmArgs,
79
+ swapTx,
80
+ type: 'quote',
81
+ input: quoteInput,
82
+ });
83
+ (0, vitest_1.expect)(result.unwrapErr().code).toBe(types_1.TradeQuoteError.InvalidResponse);
84
+ (0, vitest_1.expect)(evm_1.getEvmNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
85
+ });
86
+ (0, vitest_1.it)('fails to build when a native sell sends more than the sell amount', async () => {
87
+ const swapTx = {
88
+ type: 'evm',
89
+ tx: { ...evmSwapTx.tx, value: '50300000000000000' },
90
+ };
91
+ const result = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({
92
+ ...evmArgs,
93
+ swapTx,
94
+ sellAsset: assets_1.ETH_ARBITRUM,
95
+ sellAmountCryptoBaseUnit: '50000000000000000',
96
+ type: 'quote',
97
+ input: quoteInput,
98
+ });
99
+ (0, vitest_1.expect)(result.unwrapErr().code).toBe(types_1.TradeQuoteError.InvalidResponse);
100
+ (0, vitest_1.expect)(evm_1.getEvmNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
101
+ });
102
+ (0, vitest_1.it)('fails to build when the payload is for another chain', async () => {
103
+ const swapTx = { type: 'evm', tx: { ...evmSwapTx.tx, chainId: 1 } };
104
+ const result = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({
105
+ ...evmArgs,
106
+ swapTx,
107
+ type: 'quote',
108
+ input: quoteInput,
109
+ });
110
+ (0, vitest_1.expect)(result.unwrapErr().code).toBe(types_1.TradeQuoteError.InvalidResponse);
111
+ (0, vitest_1.expect)(evm_1.getEvmNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
112
+ });
113
+ (0, vitest_1.it)('builds a native sell whose value is exactly the sell amount', async () => {
114
+ vitest_1.vi.mocked(evm_1.getEvmNetworkFeeCryptoBaseUnit).mockResolvedValue('1234');
115
+ const swapTx = {
116
+ type: 'evm',
117
+ tx: { ...evmSwapTx.tx, value: '50000000000000000' },
118
+ };
119
+ const result = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({
120
+ ...evmArgs,
121
+ swapTx,
122
+ sellAsset: assets_1.ETH_ARBITRUM,
123
+ sellAmountCryptoBaseUnit: '50000000000000000',
124
+ type: 'quote',
125
+ input: quoteInput,
126
+ });
127
+ (0, vitest_1.expect)(result.isOk()).toBe(true);
128
+ });
129
+ });
130
+ (0, vitest_1.describe)('tron', () => {
131
+ const expectedCall = { to: TRON_ROUTER, data: '0xa11b11980020', value: '500000000' };
132
+ (0, vitest_1.it)('assembles the contract call and prices it for a quote', async () => {
133
+ vitest_1.vi.mocked(tron_1.getTronContractCallNetworkFeeCryptoBaseUnit).mockResolvedValue('45000000');
134
+ const result = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({ ...tronArgs, type: 'quote', input: quoteInput });
135
+ (0, vitest_1.expect)(result.unwrap()).toEqual({
136
+ transactionData: { type: 'tron', ...expectedCall },
137
+ networkFeeCryptoBaseUnit: '45000000',
138
+ });
139
+ (0, vitest_1.expect)(tron_1.getTronContractCallNetworkFeeCryptoBaseUnit).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
140
+ transactionData: expectedCall,
141
+ from: TRON_FROM,
142
+ spenderAddress: '',
143
+ fallbackEnergy: '580000',
144
+ }));
145
+ });
146
+ (0, vitest_1.it)('fails to build when the response has no function selector', async () => {
147
+ const swapTx = {
148
+ type: 'tron',
149
+ tx: { ...tronSwapTx.tx, functionSelector: undefined },
150
+ };
151
+ const result = await (0, getSymbiosisStepData_1.getSymbiosisStepData)({
152
+ ...tronArgs,
153
+ swapTx,
154
+ type: 'quote',
155
+ input: quoteInput,
156
+ });
157
+ (0, vitest_1.expect)(result.unwrapErr().code).toBe(types_1.TradeQuoteError.InvalidResponse);
158
+ (0, vitest_1.expect)(tron_1.getTronContractCallNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
159
+ });
160
+ });
161
+ });
@@ -0,0 +1,17 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { QuoteFeeData, SwapErrorRight, SwapperDeps, TradeCommon, TradeStepCommon } from '../../../types';
3
+ import type { GetSymbiosisStepDataArgs } from './getSymbiosisStepData';
4
+ import type { SymbiosisTradeQuoteInput, SymbiosisTradeRateInput } from './types';
5
+ type SymbiosisTradeContext = {
6
+ tradeCommon: TradeCommon;
7
+ stepCommon: Omit<TradeStepCommon, 'feeData'>;
8
+ protocolFees: QuoteFeeData['protocolFees'];
9
+ stepDataArgs: Omit<GetSymbiosisStepDataArgs, 'type' | 'input'>;
10
+ };
11
+ export declare const getSymbiosisTradeContext: ({ input, deps, from, to, }: {
12
+ input: SymbiosisTradeQuoteInput | SymbiosisTradeRateInput;
13
+ deps: SwapperDeps;
14
+ from: string;
15
+ to: string;
16
+ }) => Promise<Result<SymbiosisTradeContext, SwapErrorRight>>;
17
+ export {};