@shapeshiftoss/swapper 19.0.0 → 20.1.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 (165) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/exactOutputFiltering.test.d.ts +1 -0
  3. package/dist/cjs/exactOutputFiltering.test.js +70 -0
  4. package/dist/cjs/swapper.d.ts +3 -3
  5. package/dist/cjs/swapper.js +29 -6
  6. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.d.ts +1 -0
  7. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.js +2 -2
  8. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossTradeContext.js +1 -0
  9. package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.d.ts +1 -0
  10. package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.js +2 -2
  11. package/dist/cjs/swappers/BebopSwapper/utils/getBebopTradeContext.js +1 -0
  12. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -1
  13. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +11 -2
  14. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.d.ts +2 -1
  15. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +2 -1
  16. package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.d.ts +2 -1
  17. package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.js +2 -1
  18. package/dist/cjs/swappers/ChainflipSwapper/ChainflipSwapper.js +1 -0
  19. package/dist/cjs/swappers/ChainflipSwapper/checkTradeStatus.test.d.ts +1 -0
  20. package/dist/cjs/swappers/ChainflipSwapper/checkTradeStatus.test.js +48 -0
  21. package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +5 -2
  22. package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +3 -0
  23. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +1 -0
  24. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +2 -2
  25. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +1 -0
  26. package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
  27. package/dist/cjs/swappers/NearIntentsSwapper/checkTradeStatus.test.d.ts +1 -0
  28. package/dist/cjs/swappers/NearIntentsSwapper/checkTradeStatus.test.js +52 -0
  29. package/dist/cjs/swappers/NearIntentsSwapper/constants.d.ts +1 -1
  30. package/dist/cjs/swappers/NearIntentsSwapper/constants.js +4 -3
  31. package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +4 -1
  32. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.d.ts +2 -1
  33. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +14 -9
  34. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.d.ts +2 -1
  35. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +14 -9
  36. package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +3 -1
  37. package/dist/cjs/swappers/NearIntentsSwapper/utils/exactOutput.test.d.ts +1 -0
  38. package/dist/cjs/swappers/NearIntentsSwapper/utils/exactOutput.test.js +61 -0
  39. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.d.ts +2 -2
  40. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.js +4 -2
  41. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.d.ts +5 -5
  42. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +30 -26
  43. package/dist/cjs/swappers/NearIntentsSwapper/utils/quoteDeadline.test.d.ts +1 -0
  44. package/dist/cjs/swappers/NearIntentsSwapper/utils/quoteDeadline.test.js +28 -0
  45. package/dist/cjs/swappers/PortalsSwapper/endpoints.js +51 -47
  46. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +1 -1
  47. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +1 -1
  48. package/dist/cjs/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.d.ts +0 -1
  49. package/dist/cjs/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.js +3 -6
  50. package/dist/cjs/swappers/PortalsSwapper/utils/fetchPortalsTradeOrder.js +6 -3
  51. package/dist/cjs/swappers/PortalsSwapper/utils/fetchSquidStatus.d.ts +0 -1
  52. package/dist/cjs/swappers/PortalsSwapper/utils/fetchSquidStatus.js +1 -8
  53. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.d.ts +1 -0
  54. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.js +16 -8
  55. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.test.d.ts +1 -0
  56. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +70 -0
  57. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsTradeContext.d.ts +3 -2
  58. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsTradeContext.js +34 -16
  59. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsTradeContext.test.d.ts +1 -0
  60. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsTradeContext.test.js +93 -0
  61. package/dist/cjs/swappers/RelaySwapper/endpoints.js +9 -18
  62. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.d.ts +2 -1
  63. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +5 -2
  64. package/dist/cjs/swappers/RelaySwapper/getTradeRate/getTradeRate.d.ts +2 -1
  65. package/dist/cjs/swappers/RelaySwapper/getTradeRate/getTradeRate.js +5 -2
  66. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +2 -2
  67. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.js +22 -10
  68. package/dist/cjs/swappers/RelaySwapper/utils/helpers.d.ts +2 -2
  69. package/dist/cjs/swappers/RelaySwapper/utils/relayStatus.d.ts +8 -0
  70. package/dist/cjs/swappers/RelaySwapper/utils/relayStatus.js +39 -0
  71. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +18 -1
  72. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.d.ts +1 -0
  73. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.js +2 -2
  74. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTradeContext.js +6 -1
  75. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  76. package/dist/cjs/types.d.ts +21 -2
  77. package/dist/cjs/types.js +2 -0
  78. package/dist/cjs/utils/cowswap/index.d.ts +4 -1
  79. package/dist/cjs/utils/cowswap/index.js +5 -1
  80. package/dist/cjs/utils/helpers.d.ts +9 -0
  81. package/dist/cjs/utils/helpers.js +23 -1
  82. package/dist/cjs/utils/helpers.test.js +41 -0
  83. package/dist/esm/.tsbuildinfo +1 -1
  84. package/dist/esm/exactOutputFiltering.test.d.ts +1 -0
  85. package/dist/esm/exactOutputFiltering.test.js +68 -0
  86. package/dist/esm/swapper.d.ts +3 -3
  87. package/dist/esm/swapper.js +29 -6
  88. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.d.ts +1 -0
  89. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.js +2 -2
  90. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossTradeContext.js +1 -0
  91. package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.d.ts +1 -0
  92. package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.js +2 -2
  93. package/dist/esm/swappers/BebopSwapper/utils/getBebopTradeContext.js +1 -0
  94. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -1
  95. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +11 -2
  96. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.d.ts +2 -1
  97. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +2 -1
  98. package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.d.ts +2 -1
  99. package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.js +2 -1
  100. package/dist/esm/swappers/ChainflipSwapper/ChainflipSwapper.js +1 -0
  101. package/dist/esm/swappers/ChainflipSwapper/checkTradeStatus.test.d.ts +1 -0
  102. package/dist/esm/swappers/ChainflipSwapper/checkTradeStatus.test.js +46 -0
  103. package/dist/esm/swappers/ChainflipSwapper/endpoints.js +5 -2
  104. package/dist/esm/swappers/ChainflipSwapper/types.d.ts +3 -0
  105. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +1 -0
  106. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +2 -2
  107. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +1 -0
  108. package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
  109. package/dist/esm/swappers/NearIntentsSwapper/checkTradeStatus.test.d.ts +1 -0
  110. package/dist/esm/swappers/NearIntentsSwapper/checkTradeStatus.test.js +50 -0
  111. package/dist/esm/swappers/NearIntentsSwapper/constants.d.ts +1 -1
  112. package/dist/esm/swappers/NearIntentsSwapper/constants.js +3 -2
  113. package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +6 -3
  114. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.d.ts +2 -1
  115. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +7 -3
  116. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.d.ts +2 -1
  117. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +7 -3
  118. package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +3 -1
  119. package/dist/esm/swappers/NearIntentsSwapper/utils/exactOutput.test.d.ts +1 -0
  120. package/dist/esm/swappers/NearIntentsSwapper/utils/exactOutput.test.js +59 -0
  121. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.d.ts +2 -2
  122. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.js +4 -2
  123. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.d.ts +5 -5
  124. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +32 -28
  125. package/dist/esm/swappers/NearIntentsSwapper/utils/quoteDeadline.test.d.ts +1 -0
  126. package/dist/esm/swappers/NearIntentsSwapper/utils/quoteDeadline.test.js +26 -0
  127. package/dist/esm/swappers/PortalsSwapper/endpoints.js +53 -49
  128. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +1 -1
  129. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +1 -1
  130. package/dist/esm/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.d.ts +0 -1
  131. package/dist/esm/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.js +2 -4
  132. package/dist/esm/swappers/PortalsSwapper/utils/fetchPortalsTradeOrder.js +6 -3
  133. package/dist/esm/swappers/PortalsSwapper/utils/fetchSquidStatus.d.ts +0 -1
  134. package/dist/esm/swappers/PortalsSwapper/utils/fetchSquidStatus.js +0 -6
  135. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.d.ts +1 -0
  136. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.js +13 -5
  137. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.test.d.ts +1 -0
  138. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +68 -0
  139. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsTradeContext.d.ts +3 -2
  140. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsTradeContext.js +35 -17
  141. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsTradeContext.test.d.ts +1 -0
  142. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsTradeContext.test.js +91 -0
  143. package/dist/esm/swappers/RelaySwapper/endpoints.js +11 -20
  144. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.d.ts +2 -1
  145. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +3 -1
  146. package/dist/esm/swappers/RelaySwapper/getTradeRate/getTradeRate.d.ts +2 -1
  147. package/dist/esm/swappers/RelaySwapper/getTradeRate/getTradeRate.js +3 -1
  148. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +2 -2
  149. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.js +23 -11
  150. package/dist/esm/swappers/RelaySwapper/utils/helpers.d.ts +2 -2
  151. package/dist/esm/swappers/RelaySwapper/utils/relayStatus.d.ts +8 -0
  152. package/dist/esm/swappers/RelaySwapper/utils/relayStatus.js +32 -0
  153. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +18 -1
  154. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.d.ts +1 -0
  155. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.js +2 -2
  156. package/dist/esm/swappers/SunioSwapper/utils/getSunioTradeContext.js +6 -1
  157. package/dist/esm/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  158. package/dist/esm/types.d.ts +21 -2
  159. package/dist/esm/types.js +2 -0
  160. package/dist/esm/utils/cowswap/index.d.ts +4 -1
  161. package/dist/esm/utils/cowswap/index.js +3 -0
  162. package/dist/esm/utils/helpers.d.ts +9 -0
  163. package/dist/esm/utils/helpers.js +20 -0
  164. package/dist/esm/utils/helpers.test.js +42 -1
  165. package/package.json +6 -6
@@ -1,6 +1,8 @@
1
- import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput, GetSolanaTradeQuoteInput, GetSolanaTradeRateInput, GetTronTradeQuoteInput, GetTronTradeRateInput, GetUtxoTradeQuoteInput, GetUtxoTradeRateInput } from '../../../types';
1
+ import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput, GetSolanaTradeQuoteInput, GetSolanaTradeRateInput, GetTronTradeQuoteInput, GetTronTradeRateInput, GetUtxoTradeQuoteInput, GetUtxoTradeRateInput, WithExactBuyAmount } from '../../../types';
2
2
  export type RelayTradeQuoteInput = GetEvmTradeQuoteInput | GetUtxoTradeQuoteInput | GetSolanaTradeQuoteInput | GetTronTradeQuoteInput;
3
3
  export type RelayTradeRateInput = GetEvmTradeRateInput | GetUtxoTradeRateInput | GetSolanaTradeRateInput | GetTronTradeRateInput;
4
+ export type RelayExactOutputTradeQuoteInput = WithExactBuyAmount<RelayTradeQuoteInput>;
5
+ export type RelayExactOutputTradeRateInput = WithExactBuyAmount<RelayTradeRateInput>;
4
6
  export type RelayTransactionMetadata = {
5
7
  to?: string;
6
8
  data?: string;
@@ -10,6 +12,20 @@ export type RelayMetadata = {
10
12
  relayId: string;
11
13
  data?: string;
12
14
  };
15
+ export type RelayRequestTransaction = {
16
+ hash?: string;
17
+ chainId?: number;
18
+ };
19
+ export type RelayRequestData = {
20
+ failReason?: string;
21
+ refundFailReason?: string;
22
+ inTxs?: RelayRequestTransaction[];
23
+ outTxs?: RelayRequestTransaction[];
24
+ };
25
+ export type RelayRequest = {
26
+ status?: RelayStatus['status'];
27
+ data?: RelayRequestData;
28
+ };
13
29
  export type RelayStatus = {
14
30
  status: 'success' | 'failure' | 'pending' | 'submitted' | 'depositing' | 'refund' | 'delayed' | 'waiting';
15
31
  details?: string;
@@ -64,6 +80,7 @@ export type RelayFees = {
64
80
  app: RelayCurrencyData;
65
81
  };
66
82
  export type QuoteDetails = {
83
+ currencyIn: RelayCurrencyData;
67
84
  currencyOut: RelayCurrencyData;
68
85
  rate: string;
69
86
  slippageTolerance: {
@@ -3,6 +3,7 @@ import type { StepDataArgs, SwapErrorRight } from '../../../types';
3
3
  import type { SunioRoute, SunioTransactionData } from '../types';
4
4
  type BaseArgs = {
5
5
  route: SunioRoute;
6
+ sellAmountCryptoBaseUnit: string;
6
7
  };
7
8
  export type GetSunioStepDataArgs = StepDataArgs<BaseArgs>;
8
9
  type SunioRateStepData = {
@@ -6,12 +6,12 @@ const monads_1 = require("@sniptt/monads");
6
6
  const utils_2 = require("../../../utils");
7
7
  const estimateSunioNetworkFee_1 = require("./estimateSunioNetworkFee");
8
8
  async function getSunioStepData(args) {
9
- const { type, route, sellAsset, from, input, deps } = args;
9
+ const { type, route, sellAsset, sellAmountCryptoBaseUnit, from, input, deps } = args;
10
10
  const estimateArgs = {
11
11
  rpcUrl: deps.config.VITE_TRON_NODE_URL,
12
12
  apiKey: deps.config.VITE_TRON_GRID_API_KEY,
13
13
  route,
14
- sellAmountCryptoBaseUnit: input.sellAmountIncludingProtocolFeesCryptoBaseUnit,
14
+ sellAmountCryptoBaseUnit,
15
15
  isSellingNativeTrx: !(0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
16
16
  address: from,
17
17
  slippageTolerancePercentageDecimal: input.slippageTolerancePercentageDecimal,
@@ -83,7 +83,12 @@ const getSunioTradeContext = async ({ input, deps, }) => {
83
83
  }),
84
84
  },
85
85
  protocolFees,
86
- stepDataArgs: { deps, sellAsset, route: bestRoute },
86
+ stepDataArgs: {
87
+ deps,
88
+ sellAsset,
89
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
90
+ route: bestRoute,
91
+ },
87
92
  });
88
93
  }
89
94
  catch (error) {
@@ -1016,6 +1016,7 @@
1016
1016
  "eip155:1/erc20:0x826180541412d574cf1336d22c0c0a287822678a",
1017
1017
  "eip155:1/erc20:0x2c06ba9e7f0daccbc1f6a33ea67e85bb68fbee3a",
1018
1018
  "eip155:1/erc20:0xcbb8f1bda10b9696c57e13bc128fe674769dcec0",
1019
+ "eip155:1/erc20:0x72dfb2e44f59c5ad2bafe84314e5b99a7cd5075e",
1019
1020
  "eip155:43114/erc20:0xc891eb4cbdeff6e073e859e987815ed1505c2acd",
1020
1021
  "eip155:43114/erc20:0xd24c2ad096400b6fbcd2ad8b24e7acbc21a1da64",
1021
1022
  "eip155:43114/erc20:0x47c3118ad183712acd42648e9e522e13690f29a0",
@@ -93,6 +93,7 @@ export declare enum TradeQuoteError {
93
93
  NoRouteFound = "NoRouteFound",
94
94
  UnsupportedChain = "UnsupportedChain",
95
95
  CrossChainNotSupported = "CrossChainNotSupported",
96
+ ExactOutputNotSupported = "ExactOutputNotSupported",
96
97
  NetworkFeeEstimationFailed = "NetworkFeeEstimationFailed",
97
98
  TradingHalted = "TradingHalted",
98
99
  SellAmountBelowMinimum = "SellAmountBelowMinimum",
@@ -212,17 +213,30 @@ export type GetUtxoTradeRateInput = CommonTradeRateInput & {
212
213
  export type GetUtxoTradeQuoteInput = GetUtxoTradeQuoteWithWallet;
213
214
  export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput;
214
215
  export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput;
216
+ export type WithExactBuyAmount<T extends {
217
+ sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
218
+ }> = T extends unknown ? Omit<T, 'sellAmountIncludingProtocolFeesCryptoBaseUnit'> & {
219
+ buyAmountCryptoBaseUnit: string;
220
+ } : never;
221
+ export type GetExactOutputTradeQuoteInput = WithExactBuyAmount<GetTradeQuoteInput>;
222
+ export type GetExactOutputTradeRateInput = WithExactBuyAmount<GetTradeRateInput>;
223
+ export type TradeAmount = {
224
+ direction: 'exactIn' | 'exactOut';
225
+ cryptoBaseUnit: string;
226
+ };
215
227
  type StepDataBaseArgs = {
216
228
  deps: SwapperDeps;
217
229
  sellAsset: Asset;
218
230
  };
231
+ type StepDataRateInput = GetTradeRateInput | GetExactOutputTradeRateInput;
232
+ type StepDataQuoteInput = GetTradeQuoteInput | GetExactOutputTradeQuoteInput;
219
233
  export type StepDataArgs<Base, Rate = unknown, Quote = unknown> = (StepDataBaseArgs & Base & {
220
234
  type: 'rate';
221
- input: GetTradeRateInput;
235
+ input: StepDataRateInput;
222
236
  from?: string;
223
237
  } & Rate) | (StepDataBaseArgs & Base & {
224
238
  type: 'quote';
225
- input: GetTradeQuoteInput;
239
+ input: StepDataQuoteInput;
226
240
  from: string;
227
241
  } & Quote);
228
242
  export type EvmSwapperDeps = {
@@ -355,6 +369,7 @@ export type TradeCommon = {
355
369
  slippageTolerancePercentageDecimal: string | undefined;
356
370
  isLongtail?: boolean;
357
371
  swapperName: SwapperName;
372
+ isExactOutput?: boolean;
358
373
  };
359
374
  type TradeQuoteBase = TradeCommon & {
360
375
  receiveAddress: string | undefined;
@@ -559,6 +574,7 @@ export type CheckTradeStatusInput = {
559
574
  export type TradeStatus = {
560
575
  status: TxStatus;
561
576
  buyTxHash: string | undefined;
577
+ sellTxHash?: string | undefined;
562
578
  swapperTxId?: string | undefined;
563
579
  swapperTxLink?: string | undefined;
564
580
  message: string | [string, InterpolationOptions] | undefined;
@@ -568,6 +584,7 @@ export type TradeQuoteResult = Result<TradeQuote[], SwapErrorRight>;
568
584
  export type TradeRateResult = Result<TradeRate[], SwapErrorRight>;
569
585
  export type EvmMessageToSign = CowMessageToSign;
570
586
  export type Swapper = {
587
+ supportsExternalPayment?: boolean;
571
588
  executeEvmTransaction?: (txToSign: SignTx<EvmChainId>, callbacks: EvmTransactionExecutionProps) => Promise<string>;
572
589
  executeEvmMessage?: (txMetaToSign: EvmMessageToSign, callbacks: EvmMessageExecutionProps, config: SwapperConfig) => Promise<string>;
573
590
  executeUtxoTransaction?: (txToSign: SignTx<UtxoChainId>, callbacks: UtxoTransactionExecutionProps) => Promise<string>;
@@ -584,6 +601,8 @@ export type SwapperApi = {
584
601
  checkTradeStatus: (input: CheckTradeStatusInput) => Promise<TradeStatus>;
585
602
  getTradeQuote: (input: GetTradeQuoteInput, deps: SwapperDeps) => Promise<TradeQuoteResult>;
586
603
  getTradeRate: (input: GetTradeRateInput, deps: SwapperDeps) => Promise<TradeRateResult>;
604
+ getExactOutputTradeQuote?: (input: GetExactOutputTradeQuoteInput, deps: SwapperDeps) => Promise<TradeQuoteResult>;
605
+ getExactOutputTradeRate?: (input: GetExactOutputTradeRateInput, deps: SwapperDeps) => Promise<TradeRateResult>;
587
606
  getUnsignedEvmTransaction?: (input: GetUnsignedEvmTransactionArgs) => Promise<SignTx<EvmChainId>>;
588
607
  getUnsignedEvmMessage?: (input: GetUnsignedEvmMessageArgs) => Promise<EvmMessageToSign>;
589
608
  getUnsignedUtxoTransaction?: (input: GetUnsignedUtxoTransactionArgs) => Promise<SignTx<UtxoChainId>>;
package/dist/cjs/types.js CHANGED
@@ -33,6 +33,8 @@ var TradeQuoteError;
33
33
  TradeQuoteError["UnsupportedChain"] = "UnsupportedChain";
34
34
  // the swapper can't swap across chains
35
35
  TradeQuoteError["CrossChainNotSupported"] = "CrossChainNotSupported";
36
+ // the swapper can quote this pair, but can't derive a sell amount from an exact buy amount
37
+ TradeQuoteError["ExactOutputNotSupported"] = "ExactOutputNotSupported";
36
38
  // the swapper wasn't able to get a network fee estimate
37
39
  TradeQuoteError["NetworkFeeEstimationFailed"] = "NetworkFeeEstimationFailed";
38
40
  // trading has been halted upstream
@@ -1,4 +1,5 @@
1
- import type { OrderClass1 } from '@cowprotocol/app-data/dist/generatedTypes/v1.3.0';
1
+ import type { AppDataRootSchema as AppDataRootSchemaLegacy } from '@cowprotocol/app-data/dist/generatedTypes/v0.4.0';
2
+ import type { AppDataRootSchema as AppDataRootSchemaLatest, OrderClass1 } from '@cowprotocol/app-data/dist/generatedTypes/v1.3.0';
2
3
  import type { ChainId } from '@shapeshiftoss/caip';
3
4
  import type { EvmChainAdapter } from '@shapeshiftoss/chain-adapters';
4
5
  import type { HDWallet } from '@shapeshiftoss/hdwallet-core';
@@ -22,3 +23,5 @@ export declare const getFullAppData: (slippageTolerancePercentage: string, affil
22
23
  appDataHash: string;
23
24
  appData: string;
24
25
  }>;
26
+ export type ParsedAppData = AppDataRootSchemaLatest | AppDataRootSchemaLegacy;
27
+ export declare const isLegacyAppData: (appData: ParsedAppData) => appData is AppDataRootSchemaLegacy;
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.getFullAppData = exports.getAffiliateAppDataFragmentByChainId = exports.cowSwapTokenToAssetId = exports.signCowOrderCancellation = exports.signCowOrder = exports.signCowMessage = exports.assertGetCowNetwork = exports.getCowNetwork = void 0;
17
+ exports.isLegacyAppData = exports.getFullAppData = exports.getAffiliateAppDataFragmentByChainId = exports.cowSwapTokenToAssetId = exports.signCowOrderCancellation = exports.signCowOrder = exports.signCowMessage = exports.assertGetCowNetwork = exports.getCowNetwork = void 0;
18
18
  const app_data_1 = require("@cowprotocol/app-data");
19
19
  const caip_1 = require("@shapeshiftoss/caip");
20
20
  const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
@@ -183,3 +183,7 @@ const getFullAppData = async (slippageTolerancePercentage, affiliateAppDataFragm
183
183
  return { appDataHash: appDataKeccak256, appData: fullAppData };
184
184
  };
185
185
  exports.getFullAppData = getFullAppData;
186
+ const isLegacyAppData = (appData) => {
187
+ return appData.version === '0.4.0';
188
+ };
189
+ exports.isLegacyAppData = isLegacyAppData;
@@ -1,5 +1,14 @@
1
1
  import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
+ import type { TradeAmount, TradeStepCommon } from '../types';
3
+ import { SwapperName } from '../types';
2
4
  export declare const FALLBACK_QUOTE_DEADLINE_MS = 60000;
5
+ export declare const getTradeAmount: (input: {
6
+ sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
7
+ } | {
8
+ buyAmountCryptoBaseUnit: string;
9
+ }) => TradeAmount;
3
10
  export declare const normalizeEpochToMs: (value: number) => number;
4
11
  export declare const isNativeEvmAsset: (assetId: AssetId) => boolean;
5
12
  export declare const getTreasuryAddressFromChainId: (chainId: ChainId) => string;
13
+ export type DepositAddressStep = Pick<TradeStepCommon, 'chainflipSpecific' | 'swapperMetadata'>;
14
+ export declare const getDepositAddress: (step: DepositAddressStep, swapperName: SwapperName) => string | undefined;
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTreasuryAddressFromChainId = exports.isNativeEvmAsset = exports.normalizeEpochToMs = exports.FALLBACK_QUOTE_DEADLINE_MS = void 0;
3
+ exports.getDepositAddress = exports.getTreasuryAddressFromChainId = exports.isNativeEvmAsset = exports.normalizeEpochToMs = exports.getTradeAmount = exports.FALLBACK_QUOTE_DEADLINE_MS = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
5
  const types_1 = require("@shapeshiftoss/types");
6
6
  const utils_1 = require("@shapeshiftoss/utils");
7
+ const types_2 = require("../types");
7
8
  // Deadline for providers without their own expiry - short enough to keep priced amounts honest
8
9
  exports.FALLBACK_QUOTE_DEADLINE_MS = 60_000;
10
+ const getTradeAmount = (input) => 'buyAmountCryptoBaseUnit' in input
11
+ ? { direction: 'exactOut', cryptoBaseUnit: input.buyAmountCryptoBaseUnit }
12
+ : { direction: 'exactIn', cryptoBaseUnit: input.sellAmountIncludingProtocolFeesCryptoBaseUnit };
13
+ exports.getTradeAmount = getTradeAmount;
9
14
  // Bands are unambiguous for any realistic date: unix s land ~2e9, ms ~2e12, µs ~2e15, ns ~2e18
10
15
  const normalizeEpochToMs = (value) => {
11
16
  if (value < 1e12)
@@ -74,3 +79,20 @@ const getTreasuryAddressFromChainId = (chainId) => {
74
79
  return treasuryAddress;
75
80
  };
76
81
  exports.getTreasuryAddressFromChainId = getTreasuryAddressFromChainId;
82
+ const getDepositAddress = (step, swapperName) => {
83
+ switch (swapperName) {
84
+ case types_2.SwapperName.Chainflip:
85
+ return step.chainflipSpecific?.depositAddress || undefined;
86
+ case types_2.SwapperName.NearIntents: {
87
+ if (step.swapperMetadata?.name !== 'nearIntents')
88
+ return;
89
+ const { depositAddress, depositMemo } = step.swapperMetadata;
90
+ if (depositMemo)
91
+ return;
92
+ return depositAddress || undefined;
93
+ }
94
+ default:
95
+ return;
96
+ }
97
+ };
98
+ exports.getDepositAddress = getDepositAddress;
@@ -4,6 +4,8 @@ const caip_1 = require("@shapeshiftoss/caip");
4
4
  const types_1 = require("@shapeshiftoss/types");
5
5
  const utils_1 = require("@shapeshiftoss/utils");
6
6
  const vitest_1 = require("vitest");
7
+ const constants_1 = require("../constants");
8
+ const types_2 = require("../types");
7
9
  const helpers_1 = require("./helpers");
8
10
  (0, vitest_1.describe)('getTreasuryAddressFromChainId', () => {
9
11
  // Affiliate and fee recipient addresses for every swapper flow through here, so pin the values
@@ -49,3 +51,42 @@ const helpers_1 = require("./helpers");
49
51
  (0, vitest_1.expect)((0, helpers_1.normalizeEpochToMs)(epochMs * 1e6)).toBe(epochMs);
50
52
  });
51
53
  });
54
+ const makeStep = (step) => step;
55
+ (0, vitest_1.describe)('getDepositAddress', () => {
56
+ (0, vitest_1.it)('reads the chainflip deposit address', () => {
57
+ const step = makeStep({ chainflipSpecific: { depositAddress: 'bc1qdeposit' } });
58
+ (0, vitest_1.expect)((0, helpers_1.getDepositAddress)(step, types_2.SwapperName.Chainflip)).toBe('bc1qdeposit');
59
+ });
60
+ (0, vitest_1.it)('returns undefined when chainflip has no deposit address', () => {
61
+ (0, vitest_1.expect)((0, helpers_1.getDepositAddress)(makeStep({}), types_2.SwapperName.Chainflip)).toBeUndefined();
62
+ });
63
+ (0, vitest_1.it)('reads the near intents deposit address', () => {
64
+ const step = makeStep({
65
+ swapperMetadata: { name: 'nearIntents', depositAddress: '0xdeposit' },
66
+ });
67
+ (0, vitest_1.expect)((0, helpers_1.getDepositAddress)(step, types_2.SwapperName.NearIntents)).toBe('0xdeposit');
68
+ });
69
+ (0, vitest_1.it)('rejects a memo-bound near intents deposit address', () => {
70
+ const step = makeStep({
71
+ swapperMetadata: { name: 'nearIntents', depositAddress: 'EQdeposit', depositMemo: '12345' },
72
+ });
73
+ (0, vitest_1.expect)((0, helpers_1.getDepositAddress)(step, types_2.SwapperName.NearIntents)).toBeUndefined();
74
+ });
75
+ (0, vitest_1.it)('rejects an empty near intents deposit address', () => {
76
+ const step = makeStep({ swapperMetadata: { name: 'nearIntents', depositAddress: '' } });
77
+ (0, vitest_1.expect)((0, helpers_1.getDepositAddress)(step, types_2.SwapperName.NearIntents)).toBeUndefined();
78
+ });
79
+ (0, vitest_1.it)('returns undefined for swappers that do not use deposit addresses', () => {
80
+ const step = makeStep({ chainflipSpecific: { depositAddress: 'bc1qdeposit' } });
81
+ (0, vitest_1.expect)((0, helpers_1.getDepositAddress)(step, types_2.SwapperName.Relay)).toBeUndefined();
82
+ });
83
+ });
84
+ (0, vitest_1.describe)('supportsExternalPayment', () => {
85
+ (0, vitest_1.it)('is flagged on exactly the externally paid swappers', () => {
86
+ const flagged = Object.entries(constants_1.swappers)
87
+ .filter(([, swapper]) => swapper?.supportsExternalPayment)
88
+ .map(([name]) => name)
89
+ .sort();
90
+ (0, vitest_1.expect)(flagged).toEqual([types_2.SwapperName.Chainflip, types_2.SwapperName.NearIntents].sort());
91
+ });
92
+ });