@shapeshiftoss/swapper 18.1.0 → 20.0.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 (191) 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/constant.js +2 -1
  7. package/dist/cjs/swappers/AcrossSwapper/endpoints.js +1 -1
  8. package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +2 -1
  9. package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.d.ts +6 -3
  10. package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.js +5 -1
  11. package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +1 -1
  12. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.d.ts +1 -0
  13. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.js +2 -2
  14. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossTradeContext.d.ts +1 -0
  15. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossTradeContext.js +2 -0
  16. package/dist/cjs/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +2 -0
  17. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +3 -1
  18. package/dist/cjs/swappers/AvnuSwapper/utils/getAvnuTradeContext.d.ts +1 -0
  19. package/dist/cjs/swappers/AvnuSwapper/utils/getAvnuTradeContext.js +1 -0
  20. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +5 -2
  21. package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +2 -1
  22. package/dist/cjs/swappers/BebopSwapper/types.d.ts +2 -2
  23. package/dist/cjs/swappers/BebopSwapper/types.js +2 -0
  24. package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.d.ts +1 -0
  25. package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.js +2 -2
  26. package/dist/cjs/swappers/BebopSwapper/utils/getBebopTradeContext.d.ts +1 -0
  27. package/dist/cjs/swappers/BebopSwapper/utils/getBebopTradeContext.js +2 -0
  28. package/dist/cjs/swappers/BebopSwapper/utils/helpers.d.ts +1 -1
  29. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +2 -0
  30. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -0
  31. package/dist/cjs/swappers/ButterSwap/utils/helpers.js +10 -8
  32. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +2 -0
  33. package/dist/cjs/swappers/ChainflipSwapper/constants.d.ts +1 -0
  34. package/dist/cjs/swappers/ChainflipSwapper/constants.js +3 -1
  35. package/dist/cjs/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +2 -0
  36. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +1 -0
  37. package/dist/cjs/swappers/DebridgeSwapper/constant.js +10 -8
  38. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +2 -0
  39. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +1 -0
  40. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +2 -2
  41. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +1 -0
  42. package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +5 -1
  43. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.d.ts +2 -1
  44. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +21 -9
  45. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.d.ts +2 -1
  46. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +14 -9
  47. package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +3 -1
  48. package/dist/cjs/swappers/NearIntentsSwapper/utils/exactOutput.test.d.ts +1 -0
  49. package/dist/cjs/swappers/NearIntentsSwapper/utils/exactOutput.test.js +61 -0
  50. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.d.ts +2 -2
  51. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.js +4 -2
  52. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.d.ts +3 -3
  53. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +27 -23
  54. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +11 -0
  55. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.d.ts +1 -0
  56. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.js +3 -3
  57. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsTradeContext.d.ts +1 -0
  58. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsTradeContext.js +7 -1
  59. package/dist/cjs/swappers/RelaySwapper/constant.js +4 -3
  60. package/dist/cjs/swappers/RelaySwapper/endpoints.js +12 -2
  61. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.d.ts +2 -1
  62. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +7 -2
  63. package/dist/cjs/swappers/RelaySwapper/getTradeRate/getTradeRate.d.ts +2 -1
  64. package/dist/cjs/swappers/RelaySwapper/getTradeRate/getTradeRate.js +5 -2
  65. package/dist/cjs/swappers/RelaySwapper/utils/fetchRelayTrade.js +1 -1
  66. package/dist/cjs/swappers/RelaySwapper/utils/getLatestRelayStatusMessage.js +3 -1
  67. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +2 -2
  68. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.js +22 -10
  69. package/dist/cjs/swappers/RelaySwapper/utils/helpers.d.ts +2 -2
  70. package/dist/cjs/swappers/RelaySwapper/utils/notifyTransactionIndexing.js +1 -1
  71. package/dist/cjs/swappers/RelaySwapper/utils/relayService.d.ts +6 -3
  72. package/dist/cjs/swappers/RelaySwapper/utils/relayService.js +3 -1
  73. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +5 -0
  74. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +6 -3
  75. package/dist/cjs/swappers/StonfiSwapper/endpoints.js +40 -14
  76. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +2 -0
  77. package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +2 -0
  78. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.d.ts +1 -0
  79. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.js +2 -2
  80. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTradeContext.js +6 -1
  81. package/dist/cjs/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -0
  82. package/dist/cjs/swappers/ThorchainSwapper/utils/getLongtailQuote.js +2 -0
  83. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +1 -0
  84. package/dist/cjs/swappers/ZrxSwapper/types.d.ts +1 -1
  85. package/dist/cjs/swappers/ZrxSwapper/types.js +1 -0
  86. package/dist/cjs/swappers/ZrxSwapper/utils/constants.js +1 -0
  87. package/dist/cjs/swappers/ZrxSwapper/utils/helpers.d.ts +1 -1
  88. package/dist/cjs/swappers/ZrxSwapper/utils/helpers.js +5 -0
  89. package/dist/cjs/types.d.ts +22 -2
  90. package/dist/cjs/types.js +2 -0
  91. package/dist/cjs/utils/helpers.d.ts +8 -0
  92. package/dist/cjs/utils/helpers.js +18 -1
  93. package/dist/cjs/utils/helpers.test.js +17 -0
  94. package/dist/cjs/utils/test-data/setupSwapQuote.js +1 -0
  95. package/dist/cjs/utils/thorchain/getThorL1TradeQuote.js +3 -0
  96. package/dist/esm/.tsbuildinfo +1 -1
  97. package/dist/esm/exactOutputFiltering.test.d.ts +1 -0
  98. package/dist/esm/exactOutputFiltering.test.js +68 -0
  99. package/dist/esm/swapper.d.ts +3 -3
  100. package/dist/esm/swapper.js +29 -6
  101. package/dist/esm/swappers/AcrossSwapper/constant.js +4 -3
  102. package/dist/esm/swappers/AcrossSwapper/endpoints.js +2 -2
  103. package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +2 -1
  104. package/dist/esm/swappers/AcrossSwapper/utils/acrossService.d.ts +6 -3
  105. package/dist/esm/swappers/AcrossSwapper/utils/acrossService.js +3 -0
  106. package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +2 -2
  107. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.d.ts +1 -0
  108. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.js +2 -2
  109. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossTradeContext.d.ts +1 -0
  110. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossTradeContext.js +3 -1
  111. package/dist/esm/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +2 -0
  112. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +3 -1
  113. package/dist/esm/swappers/AvnuSwapper/utils/getAvnuTradeContext.d.ts +1 -0
  114. package/dist/esm/swappers/AvnuSwapper/utils/getAvnuTradeContext.js +2 -1
  115. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +3 -0
  116. package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +2 -1
  117. package/dist/esm/swappers/BebopSwapper/types.d.ts +2 -2
  118. package/dist/esm/swappers/BebopSwapper/types.js +2 -0
  119. package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.d.ts +1 -0
  120. package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.js +2 -2
  121. package/dist/esm/swappers/BebopSwapper/utils/getBebopTradeContext.d.ts +1 -0
  122. package/dist/esm/swappers/BebopSwapper/utils/getBebopTradeContext.js +3 -1
  123. package/dist/esm/swappers/BebopSwapper/utils/helpers.d.ts +1 -1
  124. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +2 -0
  125. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -0
  126. package/dist/esm/swappers/ButterSwap/utils/helpers.js +10 -8
  127. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +2 -0
  128. package/dist/esm/swappers/ChainflipSwapper/constants.d.ts +1 -0
  129. package/dist/esm/swappers/ChainflipSwapper/constants.js +2 -0
  130. package/dist/esm/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +2 -0
  131. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +1 -0
  132. package/dist/esm/swappers/DebridgeSwapper/constant.js +11 -9
  133. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +2 -0
  134. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +1 -0
  135. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +2 -2
  136. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +1 -0
  137. package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +7 -3
  138. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.d.ts +2 -1
  139. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +14 -3
  140. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.d.ts +2 -1
  141. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +7 -3
  142. package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +3 -1
  143. package/dist/esm/swappers/NearIntentsSwapper/utils/exactOutput.test.d.ts +1 -0
  144. package/dist/esm/swappers/NearIntentsSwapper/utils/exactOutput.test.js +59 -0
  145. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.d.ts +2 -2
  146. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsTradeContext.js +4 -2
  147. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.d.ts +3 -3
  148. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +27 -23
  149. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +12 -1
  150. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.d.ts +1 -0
  151. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.js +3 -3
  152. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsTradeContext.d.ts +1 -0
  153. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsTradeContext.js +7 -1
  154. package/dist/esm/swappers/RelaySwapper/constant.js +6 -5
  155. package/dist/esm/swappers/RelaySwapper/endpoints.js +15 -5
  156. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.d.ts +2 -1
  157. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +5 -1
  158. package/dist/esm/swappers/RelaySwapper/getTradeRate/getTradeRate.d.ts +2 -1
  159. package/dist/esm/swappers/RelaySwapper/getTradeRate/getTradeRate.js +3 -1
  160. package/dist/esm/swappers/RelaySwapper/utils/fetchRelayTrade.js +2 -2
  161. package/dist/esm/swappers/RelaySwapper/utils/getLatestRelayStatusMessage.js +3 -1
  162. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +2 -2
  163. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.js +23 -11
  164. package/dist/esm/swappers/RelaySwapper/utils/helpers.d.ts +2 -2
  165. package/dist/esm/swappers/RelaySwapper/utils/notifyTransactionIndexing.js +2 -2
  166. package/dist/esm/swappers/RelaySwapper/utils/relayService.d.ts +6 -3
  167. package/dist/esm/swappers/RelaySwapper/utils/relayService.js +1 -0
  168. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +5 -0
  169. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +6 -3
  170. package/dist/esm/swappers/StonfiSwapper/endpoints.js +41 -15
  171. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +2 -0
  172. package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +2 -0
  173. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.d.ts +1 -0
  174. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.js +2 -2
  175. package/dist/esm/swappers/SunioSwapper/utils/getSunioTradeContext.js +6 -1
  176. package/dist/esm/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -0
  177. package/dist/esm/swappers/ThorchainSwapper/utils/getLongtailQuote.js +2 -0
  178. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +2 -1
  179. package/dist/esm/swappers/ZrxSwapper/types.d.ts +1 -1
  180. package/dist/esm/swappers/ZrxSwapper/types.js +1 -0
  181. package/dist/esm/swappers/ZrxSwapper/utils/constants.js +1 -0
  182. package/dist/esm/swappers/ZrxSwapper/utils/helpers.d.ts +1 -1
  183. package/dist/esm/swappers/ZrxSwapper/utils/helpers.js +5 -0
  184. package/dist/esm/types.d.ts +22 -2
  185. package/dist/esm/types.js +2 -0
  186. package/dist/esm/utils/helpers.d.ts +8 -0
  187. package/dist/esm/utils/helpers.js +15 -0
  188. package/dist/esm/utils/helpers.test.js +18 -1
  189. package/dist/esm/utils/test-data/setupSwapQuote.js +1 -0
  190. package/dist/esm/utils/thorchain/getThorL1TradeQuote.js +3 -0
  191. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const constants_1 = require("./constants");
5
+ const swapper_1 = require("./swapper");
6
+ const types_1 = require("./types");
7
+ const assets_1 = require("./utils/test-data/assets");
8
+ // Exact-output support is structural - a swapper cannot claim it without implementing it
9
+ (0, vitest_1.describe)('exact output capability', () => {
10
+ (0, vitest_1.it)('is implemented by the swappers whose upstream API can honour an exact buy amount', () => {
11
+ for (const swapperName of [types_1.SwapperName.NearIntents, types_1.SwapperName.Relay]) {
12
+ (0, vitest_1.expect)(constants_1.swappers[swapperName]?.getExactOutputTradeRate).toBeDefined();
13
+ (0, vitest_1.expect)(constants_1.swappers[swapperName]?.getExactOutputTradeQuote).toBeDefined();
14
+ }
15
+ });
16
+ (0, vitest_1.it)('is absent everywhere else', () => {
17
+ const exactOutputCapable = Object.values(types_1.SwapperName).filter(swapperName => constants_1.swappers[swapperName]?.getExactOutputTradeRate !== undefined);
18
+ (0, vitest_1.expect)(exactOutputCapable).toEqual([types_1.SwapperName.Relay, types_1.SwapperName.NearIntents]);
19
+ });
20
+ });
21
+ const exactOutputInput = {
22
+ sellAsset: assets_1.ETH,
23
+ buyAsset: assets_1.BTC,
24
+ buyAmountCryptoBaseUnit: '100000',
25
+ affiliateBps: '0',
26
+ allowMultiHop: true,
27
+ receiveAddress: undefined,
28
+ accountNumber: undefined,
29
+ quoteOrRate: 'rate',
30
+ };
31
+ const deps = {};
32
+ (0, vitest_1.describe)('getTradeRates on an exact buy amount', () => {
33
+ // Silently omitting these would read as the swapper being unavailable rather than unable
34
+ (0, vitest_1.it)('reports an error for a swapper that cannot quote one', async () => {
35
+ const result = await (0, swapper_1.getTradeRates)(exactOutputInput, types_1.SwapperName.Thorchain, deps);
36
+ (0, vitest_1.expect)(result).toBeDefined();
37
+ (0, vitest_1.expect)(result?.isErr()).toBe(true);
38
+ (0, vitest_1.expect)(result?.unwrapErr().code).toEqual(types_1.TradeQuoteError.ExactOutputNotSupported);
39
+ (0, vitest_1.expect)(result?.swapperName).toEqual(types_1.SwapperName.Thorchain);
40
+ });
41
+ (0, vitest_1.it)('skips entirely on a zero buy amount', async () => {
42
+ const result = await (0, swapper_1.getTradeRates)({ ...exactOutputInput, buyAmountCryptoBaseUnit: '0' }, types_1.SwapperName.Thorchain, deps);
43
+ (0, vitest_1.expect)(result).toBeUndefined();
44
+ });
45
+ // The base-unit regex upstream admits padded zeros, so the check can't be a string comparison
46
+ (0, vitest_1.it)('skips entirely on a padded zero buy amount', async () => {
47
+ const result = await (0, swapper_1.getTradeRates)({ ...exactOutputInput, buyAmountCryptoBaseUnit: '00' }, types_1.SwapperName.Thorchain, deps);
48
+ (0, vitest_1.expect)(result).toBeUndefined();
49
+ });
50
+ });
51
+ // Quotes dispatch on the same input shape as rates, so they gate the same way
52
+ (0, vitest_1.describe)('getTradeQuotes on an exact buy amount', () => {
53
+ const exactOutputQuoteInput = {
54
+ ...exactOutputInput,
55
+ receiveAddress: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq',
56
+ accountNumber: 0,
57
+ quoteOrRate: 'quote',
58
+ };
59
+ (0, vitest_1.it)('reports an error for a swapper that cannot quote one', async () => {
60
+ const result = await (0, swapper_1.getTradeQuotes)(exactOutputQuoteInput, types_1.SwapperName.Thorchain, deps);
61
+ (0, vitest_1.expect)(result).toBeDefined();
62
+ (0, vitest_1.expect)(result?.isErr()).toBe(true);
63
+ (0, vitest_1.expect)(result?.unwrapErr().code).toEqual(types_1.TradeQuoteError.ExactOutputNotSupported);
64
+ (0, vitest_1.expect)(result?.swapperName).toEqual(types_1.SwapperName.Thorchain);
65
+ });
66
+ (0, vitest_1.it)('skips entirely on a zero buy amount', async () => {
67
+ const result = await (0, swapper_1.getTradeQuotes)({ ...exactOutputQuoteInput, buyAmountCryptoBaseUnit: '0' }, types_1.SwapperName.Thorchain, deps);
68
+ (0, vitest_1.expect)(result).toBeUndefined();
69
+ });
70
+ });
@@ -1,3 +1,3 @@
1
- import type { GetTradeQuoteInput, GetTradeRateInput, QuoteResult, RateResult, SwapperDeps, SwapperName } from './types';
2
- export declare const getTradeQuotes: (getTradeQuoteInput: GetTradeQuoteInput, swapperName: SwapperName, deps: SwapperDeps) => Promise<QuoteResult | undefined>;
3
- export declare const getTradeRates: (getTradeRateInput: GetTradeRateInput, swapperName: SwapperName, deps: SwapperDeps, quoteTimeoutMs?: number) => Promise<RateResult | undefined>;
1
+ import type { GetExactOutputTradeQuoteInput, GetExactOutputTradeRateInput, GetTradeQuoteInput, GetTradeRateInput, QuoteResult, RateResult, SwapperDeps, SwapperName } from './types';
2
+ export declare const getTradeQuotes: (getTradeQuoteInput: GetTradeQuoteInput | GetExactOutputTradeQuoteInput, swapperName: SwapperName, deps: SwapperDeps) => Promise<QuoteResult | undefined>;
3
+ export declare const getTradeRates: (getTradeRateInput: GetTradeRateInput | GetExactOutputTradeRateInput, swapperName: SwapperName, deps: SwapperDeps, quoteTimeoutMs?: number) => Promise<RateResult | undefined>;
@@ -2,19 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTradeRates = exports.getTradeQuotes = void 0;
4
4
  const utils_1 = require("@shapeshiftoss/utils");
5
+ const monads_1 = require("@sniptt/monads");
5
6
  const constants_1 = require("./constants");
6
7
  const types_1 = require("./types");
7
8
  const utils_2 = require("./utils");
9
+ const EXACT_OUTPUT_NOT_SUPPORTED_ERROR = (0, utils_2.makeSwapErrorRight)({
10
+ code: types_1.TradeQuoteError.ExactOutputNotSupported,
11
+ message: 'This swapper cannot derive a sell amount from an exact buy amount',
12
+ });
8
13
  const getTradeQuotes = async (getTradeQuoteInput, swapperName, deps) => {
9
14
  if ((0, utils_1.bnOrZero)(getTradeQuoteInput.affiliateBps).lt(0))
10
15
  return;
11
- if (getTradeQuoteInput.sellAmountIncludingProtocolFeesCryptoBaseUnit === '0')
12
- return;
13
16
  const swapper = constants_1.swappers[swapperName];
14
17
  if (swapper === undefined)
15
18
  return;
19
+ // Compared numerically so a padded zero can't slip through as an amount
20
+ const drivingAmount = 'buyAmountCryptoBaseUnit' in getTradeQuoteInput
21
+ ? getTradeQuoteInput.buyAmountCryptoBaseUnit
22
+ : getTradeQuoteInput.sellAmountIncludingProtocolFeesCryptoBaseUnit;
23
+ if ((0, utils_1.bnOrZero)(drivingAmount).isZero())
24
+ return;
25
+ const quotePromise = 'buyAmountCryptoBaseUnit' in getTradeQuoteInput
26
+ ? swapper.getExactOutputTradeQuote?.(getTradeQuoteInput, deps)
27
+ : swapper.getTradeQuote(getTradeQuoteInput, deps);
28
+ if (!quotePromise)
29
+ return { ...(0, monads_1.Err)(EXACT_OUTPUT_NOT_SUPPORTED_ERROR), swapperName };
16
30
  try {
17
- const quote = await (0, utils_1.timeoutMonadic)(swapper.getTradeQuote(getTradeQuoteInput, deps), constants_1.QUOTE_TIMEOUT_MS, constants_1.QUOTE_TIMEOUT_ERROR);
31
+ const quote = await (0, utils_1.timeoutMonadic)(quotePromise, constants_1.QUOTE_TIMEOUT_MS, constants_1.QUOTE_TIMEOUT_ERROR);
18
32
  return {
19
33
  ...quote,
20
34
  swapperName,
@@ -30,13 +44,22 @@ exports.getTradeQuotes = getTradeQuotes;
30
44
  const getTradeRates = async (getTradeRateInput, swapperName, deps, quoteTimeoutMs = constants_1.QUOTE_TIMEOUT_MS) => {
31
45
  if ((0, utils_1.bnOrZero)(getTradeRateInput.affiliateBps).lt(0))
32
46
  return;
33
- if (getTradeRateInput.sellAmountIncludingProtocolFeesCryptoBaseUnit === '0')
34
- return;
35
47
  const swapper = constants_1.swappers[swapperName];
36
48
  if (swapper === undefined)
37
49
  return;
50
+ // Compared numerically so a padded zero can't slip through as an amount
51
+ const drivingAmount = 'buyAmountCryptoBaseUnit' in getTradeRateInput
52
+ ? getTradeRateInput.buyAmountCryptoBaseUnit
53
+ : getTradeRateInput.sellAmountIncludingProtocolFeesCryptoBaseUnit;
54
+ if ((0, utils_1.bnOrZero)(drivingAmount).isZero())
55
+ return;
56
+ const ratePromise = 'buyAmountCryptoBaseUnit' in getTradeRateInput
57
+ ? swapper.getExactOutputTradeRate?.(getTradeRateInput, deps)
58
+ : swapper.getTradeRate(getTradeRateInput, deps);
59
+ if (!ratePromise)
60
+ return { ...(0, monads_1.Err)(EXACT_OUTPUT_NOT_SUPPORTED_ERROR), swapperName };
38
61
  try {
39
- const { timed, original } = (0, utils_1.timeoutMonadicWithOriginal)(swapper.getTradeRate(getTradeRateInput, deps), quoteTimeoutMs, (0, utils_2.makeSwapErrorRight)({
62
+ const { timed, original } = (0, utils_1.timeoutMonadicWithOriginal)(ratePromise, quoteTimeoutMs, (0, utils_2.makeSwapErrorRight)({
40
63
  code: types_1.TradeQuoteError.Timeout,
41
64
  message: `quote timed out after ${quoteTimeoutMs / 1000}s`,
42
65
  }));
@@ -31,7 +31,8 @@ exports.chainIdToAcrossChainId = {
31
31
  // Across uses a custom Solana chain ID
32
32
  [caip_1.solanaChainId]: 34268394551451,
33
33
  [caip_1.scrollChainId]: chains_1.scroll.id,
34
- [caip_1.megaethChainId]: 4326,
34
+ [caip_1.megaethChainId]: chains_1.megaeth.id,
35
+ [caip_1.robinhoodChainId]: chains_1.robinhood.id,
35
36
  };
36
37
  exports.acrossChainIdToChainId = (0, invert_1.default)(exports.chainIdToAcrossChainId);
37
38
  exports.ACROSS_SUPPORTED_CHAIN_IDS = Object.keys(exports.chainIdToAcrossChainId);
@@ -36,7 +36,7 @@ exports.acrossApi = {
36
36
  return sourceTxStatus;
37
37
  txHash = sourceTxStatus.buyTxHash ?? txHash;
38
38
  }
39
- const maybeStatusResponse = await acrossService_1.acrossService.get(`${config.VITE_ACROSS_API_URL}/deposit/status?depositTxnRef=${txHash}`);
39
+ const maybeStatusResponse = await acrossService_1.acrossService.get(`${config.VITE_ACROSS_API_URL}/deposit/status?depositTxnRef=${txHash}`, (0, acrossService_1.getAcrossRequestConfig)(config));
40
40
  if (maybeStatusResponse.isErr()) {
41
41
  return {
42
42
  buyTxHash: undefined,
@@ -19,7 +19,7 @@ const getTradeQuote = async (input, deps) => {
19
19
  });
20
20
  if (maybeContext.isErr())
21
21
  return (0, monads_1.Err)(maybeContext.unwrapErr());
22
- const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
22
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs, deadline } = maybeContext.unwrap();
23
23
  const maybeStepData = await (0, getAcrossStepData_1.getAcrossStepData)({ ...stepDataArgs, type: 'quote', input });
24
24
  if (maybeStepData.isErr())
25
25
  return (0, monads_1.Err)(maybeStepData.unwrapErr());
@@ -27,6 +27,7 @@ const getTradeQuote = async (input, deps) => {
27
27
  const tradeQuote = {
28
28
  ...tradeCommon,
29
29
  quoteOrRate: 'quote',
30
+ deadline,
30
31
  receiveAddress,
31
32
  steps: [
32
33
  {
@@ -1,5 +1,8 @@
1
+ import type { AxiosRequestConfig } from 'axios';
2
+ import type { SwapperConfig } from '../../../types';
1
3
  export declare const acrossService: {
2
- get: <T = any>(url: string, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T, any, {}>, import("../../..").SwapErrorRight>>;
3
- post: <T_1 = any>(url: string, data: any, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T_1, any, {}>, import("../../..").SwapErrorRight>>;
4
- delete: <T_2 = any>(url: string, data: any, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T_2, any, {}>, import("../../..").SwapErrorRight>>;
4
+ get: <T = any>(url: string, config?: AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T, any, {}>, import("../../../types").SwapErrorRight>>;
5
+ post: <T_1 = any>(url: string, data: any, config?: AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T_1, any, {}>, import("../../../types").SwapErrorRight>>;
6
+ delete: <T_2 = any>(url: string, data: any, config?: AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T_2, any, {}>, import("../../../types").SwapErrorRight>>;
5
7
  };
8
+ export declare const getAcrossRequestConfig: (config: SwapperConfig) => AxiosRequestConfig | undefined;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.acrossService = void 0;
6
+ exports.getAcrossRequestConfig = exports.acrossService = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const utils_1 = require("../../../utils");
9
9
  const axiosConfig = {
@@ -15,3 +15,7 @@ const axiosConfig = {
15
15
  };
16
16
  const acrossServiceBase = axios_1.default.create(axiosConfig);
17
17
  exports.acrossService = (0, utils_1.makeSwapperAxiosServiceMonadic)(acrossServiceBase);
18
+ const getAcrossRequestConfig = (config) => config.VITE_ACROSS_API_KEY
19
+ ? { headers: { Authorization: `Bearer ${config.VITE_ACROSS_API_KEY}` } }
20
+ : undefined;
21
+ exports.getAcrossRequestConfig = getAcrossRequestConfig;
@@ -22,6 +22,6 @@ const fetchAcrossTrade = (params, config) => {
22
22
  if (params.slippage)
23
23
  searchParams.set('slippage', params.slippage);
24
24
  const url = `${config.VITE_ACROSS_API_URL}/swap/approval?${searchParams.toString()}`;
25
- return acrossService_1.acrossService.get(url);
25
+ return acrossService_1.acrossService.get(url, (0, acrossService_1.getAcrossRequestConfig)(config));
26
26
  };
27
27
  exports.fetchAcrossTrade = fetchAcrossTrade;
@@ -3,6 +3,7 @@ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types';
3
3
  import type { AcrossSwapTx } from './types';
4
4
  type BaseArgs = {
5
5
  swapTx: AcrossSwapTx;
6
+ sellAmountCryptoBaseUnit: string;
6
7
  spenderAddress: string;
7
8
  fallbackNetworkFeeCryptoBaseUnit: string;
8
9
  };
@@ -10,7 +10,7 @@ const utils_2 = require("../../../utils");
10
10
  const evm_1 = require("../../../utils/evm");
11
11
  const solana_1 = require("../../../utils/solana");
12
12
  async function getAcrossStepData(args) {
13
- const { swapTx, sellAsset, spenderAddress, from, type, input, fallbackNetworkFeeCryptoBaseUnit, deps, } = args;
13
+ const { swapTx, sellAsset, sellAmountCryptoBaseUnit, spenderAddress, from, type, input, fallbackNetworkFeeCryptoBaseUnit, deps, } = args;
14
14
  const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
15
15
  switch (swapTx.ecosystem) {
16
16
  case 'evm': {
@@ -25,7 +25,7 @@ async function getAcrossStepData(args) {
25
25
  };
26
26
  const stateOverride = {
27
27
  sellAsset,
28
- sellAmountCryptoBaseUnit: input.sellAmountIncludingProtocolFeesCryptoBaseUnit,
28
+ sellAmountCryptoBaseUnit,
29
29
  spenderAddress,
30
30
  };
31
31
  if (type === 'rate') {
@@ -7,6 +7,7 @@ type AcrossTradeContext = {
7
7
  stepCommon: Omit<TradeStepCommon, 'feeData'>;
8
8
  protocolFees: QuoteFeeData['protocolFees'];
9
9
  stepDataArgs: Omit<GetAcrossStepDataArgs, 'type' | 'input'>;
10
+ deadline: number;
10
11
  };
11
12
  export declare const getAcrossTradeContext: ({ input, deps, depositor, recipient, }: {
12
13
  input: AcrossTradeQuoteInput | AcrossTradeRateInput;
@@ -173,11 +173,13 @@ const getAcrossTradeContext = async ({ input, deps, depositor, recipient, }) =>
173
173
  stepDataArgs: {
174
174
  swapTx: quote.swapTx,
175
175
  sellAsset,
176
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
176
177
  from: depositor,
177
178
  spenderAddress: allowanceContract,
178
179
  fallbackNetworkFeeCryptoBaseUnit: quote.fees.originGas.amount,
179
180
  deps,
180
181
  },
182
+ deadline: (0, helpers_1.normalizeEpochToMs)(quote.quoteExpiryTimestamp),
181
183
  });
182
184
  };
183
185
  exports.getAcrossTradeContext = getAcrossTradeContext;
@@ -4,6 +4,7 @@ exports.getTradeQuote = exports.getTradeQuoteWithWallet = void 0;
4
4
  const hdwallet_core_1 = require("@shapeshiftoss/hdwallet-core");
5
5
  const monads_1 = require("@sniptt/monads");
6
6
  const utils_1 = require("../../../utils");
7
+ const helpers_1 = require("../../../utils/helpers");
7
8
  const getArbitrumBridgeStepData_1 = require("../utils/getArbitrumBridgeStepData");
8
9
  const getArbitrumBridgeTradeContext_1 = require("../utils/getArbitrumBridgeTradeContext");
9
10
  const getTradeQuoteWithWallet = async (inputWithWallet, deps) => {
@@ -36,6 +37,7 @@ const getTradeQuote = async (input, deps) => {
36
37
  const tradeQuote = {
37
38
  ...tradeCommon,
38
39
  quoteOrRate: 'quote',
40
+ deadline: Date.now() + helpers_1.FALLBACK_QUOTE_DEADLINE_MS,
39
41
  receiveAddress,
40
42
  steps: [
41
43
  {
@@ -5,6 +5,7 @@ const monads_1 = require("@sniptt/monads");
5
5
  const starknet_1 = require("starknet");
6
6
  const types_1 = require("../../../types");
7
7
  const utils_1 = require("../../../utils");
8
+ const helpers_1 = require("../../../utils/helpers");
8
9
  const getAvnuTradeContext_1 = require("../utils/getAvnuTradeContext");
9
10
  const getTradeQuote = async (input, deps) => {
10
11
  const { sellAsset, accountNumber } = input;
@@ -20,7 +21,7 @@ const getTradeQuote = async (input, deps) => {
20
21
  const maybeContext = await (0, getAvnuTradeContext_1.getAvnuTradeContext)({ input, takerAddress: normalizedSendAddress });
21
22
  if (maybeContext.isErr())
22
23
  return (0, monads_1.Err)(maybeContext.unwrapErr());
23
- const { tradeCommon, stepCommon, protocolFees, quoteId, sellTokenAddress } = maybeContext.unwrap();
24
+ const { tradeCommon, stepCommon, protocolFees, quoteId, sellTokenAddress, deadline } = maybeContext.unwrap();
24
25
  const adapter = deps.assertGetStarknetChainAdapter(sellAsset.chainId);
25
26
  const feeData = await adapter.getFeeData({
26
27
  to: normalizedReceiveAddress,
@@ -35,6 +36,7 @@ const getTradeQuote = async (input, deps) => {
35
36
  ...tradeCommon,
36
37
  receiveAddress: normalizedReceiveAddress,
37
38
  quoteOrRate: 'quote',
39
+ deadline: deadline ?? Date.now() + helpers_1.FALLBACK_QUOTE_DEADLINE_MS,
38
40
  steps: [
39
41
  {
40
42
  ...stepCommon,
@@ -6,6 +6,7 @@ type AvnuTradeContext = {
6
6
  protocolFees: QuoteFeeData['protocolFees'];
7
7
  quoteId: string;
8
8
  sellTokenAddress: string;
9
+ deadline: number | undefined;
9
10
  };
10
11
  export declare const getAvnuTradeContext: ({ input, takerAddress, }: {
11
12
  input: GetStarknetTradeQuoteInput | GetStarknetTradeRateInput;
@@ -93,6 +93,7 @@ const getAvnuTradeContext = async ({ input, takerAddress, }) => {
93
93
  protocolFees,
94
94
  quoteId: bestQuote.quoteId,
95
95
  sellTokenAddress,
96
+ deadline: bestQuote.expiry ? (0, helpers_1.normalizeEpochToMs)(bestQuote.expiry) : undefined,
96
97
  });
97
98
  }
98
99
  catch (error) {
@@ -4,8 +4,9 @@ exports.getBebopSolanaTradeQuote = void 0;
4
4
  const monads_1 = require("@sniptt/monads");
5
5
  const types_1 = require("../../../types");
6
6
  const utils_1 = require("../../../utils");
7
+ const helpers_1 = require("../../../utils/helpers");
7
8
  const getBebopSolanaTradeContext_1 = require("../utils/getBebopSolanaTradeContext");
8
- const helpers_1 = require("../utils/helpers");
9
+ const helpers_2 = require("../utils/helpers");
9
10
  const getBebopSolanaTradeQuote = async (input, deps) => {
10
11
  const { accountNumber } = input;
11
12
  const maybeAddresses = (0, utils_1.assertQuoteAddresses)(input);
@@ -21,7 +22,7 @@ const getBebopSolanaTradeQuote = async (input, deps) => {
21
22
  if (maybeContext.isErr())
22
23
  return (0, monads_1.Err)(maybeContext.unwrapErr());
23
24
  const { tradeCommon, stepCommon, response } = maybeContext.unwrap();
24
- if (!(0, helpers_1.isBebopSolanaTxSafe)(response.solana_tx, sendAddress)) {
25
+ if (!(0, helpers_2.isBebopSolanaTxSafe)(response.solana_tx, sendAddress)) {
25
26
  return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
26
27
  message: 'Bebop signer index mismatch - taker not at expected position',
27
28
  code: types_1.TradeQuoteError.NoRouteFound,
@@ -30,6 +31,8 @@ const getBebopSolanaTradeQuote = async (input, deps) => {
30
31
  const tradeQuote = {
31
32
  ...tradeCommon,
32
33
  quoteOrRate: 'quote',
34
+ // The sealed multi-signer tx is blockhash-pinned, so the provider expiry governs
35
+ deadline: (0, helpers_1.normalizeEpochToMs)(response.expiry),
33
36
  receiveAddress,
34
37
  steps: [
35
38
  {
@@ -20,7 +20,7 @@ const getBebopTradeQuote = async (input, deps) => {
20
20
  });
21
21
  if (maybeContext.isErr())
22
22
  return (0, monads_1.Err)(maybeContext.unwrapErr());
23
- const { tradeCommon, stepCommon, stepDataArgs } = maybeContext.unwrap();
23
+ const { tradeCommon, stepCommon, stepDataArgs, deadline } = maybeContext.unwrap();
24
24
  const maybeStepData = await (0, getBebopStepData_1.getBebopStepData)({ ...stepDataArgs, type: 'quote', input });
25
25
  if (maybeStepData.isErr())
26
26
  return (0, monads_1.Err)(maybeStepData.unwrapErr());
@@ -28,6 +28,7 @@ const getBebopTradeQuote = async (input, deps) => {
28
28
  const tradeQuote = {
29
29
  ...tradeCommon,
30
30
  quoteOrRate: 'quote',
31
+ deadline,
31
32
  receiveAddress,
32
33
  steps: [
33
34
  {
@@ -3,8 +3,8 @@ import type { Address, Hex } from 'viem';
3
3
  import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput, GetSolanaTradeQuoteInput, GetSolanaTradeRateInput } from '../../types';
4
4
  export type BebopTradeQuoteInput = GetEvmTradeQuoteInput | GetSolanaTradeQuoteInput;
5
5
  export type BebopTradeRateInput = GetEvmTradeRateInput | GetSolanaTradeRateInput;
6
- export declare const bebopSupportedEvmChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet];
7
- export declare const bebopSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.SolanaMainnet];
6
+ export declare const bebopSupportedEvmChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.RobinhoodMainnet];
7
+ export declare const bebopSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.RobinhoodMainnet, KnownChainIds.SolanaMainnet];
8
8
  export type BebopSupportedChainId = (typeof bebopSupportedChainIds)[number];
9
9
  export type BebopMetadata = {
10
10
  name: 'bebop';
@@ -10,6 +10,7 @@ exports.bebopSupportedEvmChainIds = [
10
10
  types_1.KnownChainIds.AvalancheMainnet,
11
11
  types_1.KnownChainIds.OptimismMainnet,
12
12
  types_1.KnownChainIds.BnbSmartChainMainnet,
13
+ types_1.KnownChainIds.RobinhoodMainnet,
13
14
  ];
14
15
  exports.bebopSupportedChainIds = [
15
16
  ...exports.bebopSupportedEvmChainIds,
@@ -23,6 +24,7 @@ exports.chainIdToBebopChain = {
23
24
  [types_1.KnownChainIds.AvalancheMainnet]: 'avalanche',
24
25
  [types_1.KnownChainIds.OptimismMainnet]: 'optimism',
25
26
  [types_1.KnownChainIds.BnbSmartChainMainnet]: 'bsc',
27
+ [types_1.KnownChainIds.RobinhoodMainnet]: 'robinhood',
26
28
  [types_1.KnownChainIds.SolanaMainnet]: 'solana',
27
29
  };
28
30
  exports.BEBOP_NATIVE_MARKER = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
@@ -3,6 +3,7 @@ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types';
3
3
  import type { BebopQuoteResponse } from '../types';
4
4
  type BaseArgs = {
5
5
  tx: BebopQuoteResponse['tx'];
6
+ sellAmountCryptoBaseUnit: string;
6
7
  spenderAddress: string;
7
8
  };
8
9
  export type GetBebopStepDataArgs = StepDataArgs<BaseArgs, {
@@ -8,7 +8,7 @@ const viem_1 = require("viem");
8
8
  const utils_2 = require("../../../utils");
9
9
  const evm_1 = require("../../../utils/evm");
10
10
  async function getBebopStepData(args) {
11
- const { tx, spenderAddress, sellAsset, type, input, from, deps } = args;
11
+ const { tx, spenderAddress, sellAsset, sellAmountCryptoBaseUnit, type, input, from, deps } = args;
12
12
  const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
13
13
  const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
14
14
  if (type === 'rate') {
@@ -43,7 +43,7 @@ async function getBebopStepData(args) {
43
43
  supportsEIP1559,
44
44
  stateOverride: {
45
45
  sellAsset,
46
- sellAmountCryptoBaseUnit: input.sellAmountIncludingProtocolFeesCryptoBaseUnit,
46
+ sellAmountCryptoBaseUnit,
47
47
  spenderAddress,
48
48
  },
49
49
  });
@@ -6,6 +6,7 @@ type BebopTradeContext = {
6
6
  tradeCommon: TradeCommon;
7
7
  stepCommon: Omit<TradeStepCommon, 'feeData'>;
8
8
  stepDataArgs: Omit<GetBebopStepDataArgs, 'type' | 'input'>;
9
+ deadline: number;
9
10
  };
10
11
  export declare const getBebopTradeContext: ({ input, deps, from, receiver, }: {
11
12
  input: GetEvmTradeQuoteInput | GetEvmTradeRateInput;
@@ -78,9 +78,11 @@ const getBebopTradeContext = async ({ input, deps, from, receiver, }) => {
78
78
  tx: quote.tx,
79
79
  spenderAddress: allowanceContract,
80
80
  sellAsset,
81
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
81
82
  from,
82
83
  deps,
83
84
  },
85
+ deadline: (0, helpers_1.normalizeEpochToMs)(quote.expiry),
84
86
  });
85
87
  };
86
88
  exports.getBebopTradeContext = getBebopTradeContext;
@@ -2,7 +2,7 @@ import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
2
  import type { Asset } from '@shapeshiftoss/types';
3
3
  export declare const assetIdToBebopToken: (assetId: AssetId) => string;
4
4
  export declare const assetIdToBebopSolanaToken: (assetId: AssetId) => string;
5
- export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.AvalancheMainnet | import("@shapeshiftoss/types").KnownChainIds.OptimismMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.PolygonMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BaseMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet;
5
+ export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.AvalancheMainnet | import("@shapeshiftoss/types").KnownChainIds.OptimismMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.PolygonMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BaseMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet | import("@shapeshiftoss/types").KnownChainIds.RobinhoodMainnet;
6
6
  export declare const assertValidTrade: ({ buyAsset, sellAsset, }: {
7
7
  buyAsset: Asset;
8
8
  sellAsset: Asset;
@@ -4,6 +4,7 @@ exports.getBobGatewayTradeQuote = void 0;
4
4
  const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
5
  const monads_1 = require("@sniptt/monads");
6
6
  const utils_1 = require("../../../utils");
7
+ const helpers_1 = require("../../../utils/helpers");
7
8
  const getBobGatewayStepData_1 = require("../utils/getBobGatewayStepData");
8
9
  const getBobGatewayTradeContext_1 = require("../utils/getBobGatewayTradeContext");
9
10
  const getBobGatewayTradeQuote = async (input, deps) => {
@@ -36,6 +37,7 @@ const getBobGatewayTradeQuote = async (input, deps) => {
36
37
  const tradeQuote = {
37
38
  ...tradeCommon,
38
39
  quoteOrRate: 'quote',
40
+ deadline: Date.now() + helpers_1.FALLBACK_QUOTE_DEADLINE_MS,
39
41
  receiveAddress,
40
42
  steps: [
41
43
  {
@@ -7,6 +7,7 @@ const monads_1 = require("@sniptt/monads");
7
7
  const constants_1 = require("../../../constants");
8
8
  const types_1 = require("../../../types");
9
9
  const utils_2 = require("../../../utils");
10
+ const helpers_1 = require("../../../utils/helpers");
10
11
  const getButterSwapStepData_1 = require("../utils/getButterSwapStepData");
11
12
  const getButterSwapTradeContext_1 = require("../utils/getButterSwapTradeContext");
12
13
  const xhr_1 = require("../xhr");
@@ -62,6 +63,7 @@ const getTradeQuote = async (input, deps) => {
62
63
  const tradeQuote = {
63
64
  ...tradeCommon,
64
65
  quoteOrRate: 'quote',
66
+ deadline: Date.now() + helpers_1.FALLBACK_QUOTE_DEADLINE_MS,
65
67
  receiveAddress,
66
68
  steps: [
67
69
  {
@@ -6,20 +6,22 @@ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
6
6
  const types_1 = require("@shapeshiftoss/types");
7
7
  const utils_1 = require("@shapeshiftoss/utils");
8
8
  const monads_1 = require("@sniptt/monads");
9
+ const chains_1 = require("viem/chains");
9
10
  const types_2 = require("../../../types");
10
11
  const utils_2 = require("../../../utils");
11
12
  // https://docs.butternetwork.io/butter-swap-integration/butter-api-for-routing/get-supportedchainlist#butter-chain-id-explanation
12
13
  const BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID = {
13
- 1: types_1.KnownChainIds.EthereumMainnet,
14
- 137: types_1.KnownChainIds.PolygonMainnet,
15
- 56: types_1.KnownChainIds.BnbSmartChainMainnet,
16
- 42161: types_1.KnownChainIds.ArbitrumMainnet,
17
- 10: types_1.KnownChainIds.OptimismMainnet,
18
- 8453: types_1.KnownChainIds.BaseMainnet,
19
- 43114: types_1.KnownChainIds.AvalancheMainnet,
14
+ [chains_1.mainnet.id]: types_1.KnownChainIds.EthereumMainnet,
15
+ [chains_1.polygon.id]: types_1.KnownChainIds.PolygonMainnet,
16
+ [chains_1.bsc.id]: types_1.KnownChainIds.BnbSmartChainMainnet,
17
+ [chains_1.arbitrum.id]: types_1.KnownChainIds.ArbitrumMainnet,
18
+ [chains_1.optimism.id]: types_1.KnownChainIds.OptimismMainnet,
19
+ [chains_1.base.id]: types_1.KnownChainIds.BaseMainnet,
20
+ [chains_1.avalanche.id]: types_1.KnownChainIds.AvalancheMainnet,
21
+ [chains_1.robinhood.id]: types_1.KnownChainIds.RobinhoodMainnet,
20
22
  1360108768460801: types_1.KnownChainIds.SolanaMainnet,
21
23
  1360095883558913: types_1.KnownChainIds.BitcoinMainnet,
22
- 728126428: types_1.KnownChainIds.TronMainnet,
24
+ [chains_1.tron.id]: types_1.KnownChainIds.TronMainnet,
23
25
  };
24
26
  const CHAIN_ID_TO_BUTTERSWAP_CHAIN_ID = Object.entries(BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID).reduce((acc, [butterSwapChainId, chainId]) => {
25
27
  acc[chainId] = Number(butterSwapChainId);
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTradeQuote = void 0;
4
4
  const monads_1 = require("@sniptt/monads");
5
5
  const utils_1 = require("../../../utils");
6
+ const helpers_1 = require("../../../utils/helpers");
6
7
  const getCetusStepData_1 = require("./getCetusStepData");
7
8
  const getCetusTradeContext_1 = require("./getCetusTradeContext");
8
9
  const getTradeQuote = async (input, deps) => {
@@ -27,6 +28,7 @@ const getTradeQuote = async (input, deps) => {
27
28
  const tradeQuote = {
28
29
  ...tradeCommon,
29
30
  quoteOrRate: 'quote',
31
+ deadline: Date.now() + helpers_1.FALLBACK_QUOTE_DEADLINE_MS,
30
32
  receiveAddress,
31
33
  steps: [
32
34
  {
@@ -5,6 +5,7 @@ import type { SwapSource } from '../../types';
5
5
  import { ChainflipNetwork } from './types';
6
6
  export declare const CHAINFLIP_REGULAR_QUOTE: "regular";
7
7
  export declare const CHAINFLIP_DCA_QUOTE: "dca";
8
+ export declare const CHAINFLIP_CHANNEL_DEADLINE_MS: number;
8
9
  export declare const ChainflipSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BitcoinMainnet, KnownChainIds.SolanaMainnet, KnownChainIds.TronMainnet];
9
10
  export type ChainflipSupportedChainId = (typeof ChainflipSupportedChainIds)[number];
10
11
  export declare const ChainflipSupportedAssetIdsByChainId: Partial<Record<KnownChainIds, AssetId[]>>;
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChainflipStatusMessage = exports.usdcAsset = exports.CHAINFLIP_DCA_BOOST_SWAP_SOURCE = exports.CHAINFLIP_DCA_SWAP_SOURCE = exports.CHAINFLIP_BOOST_SWAP_SOURCE = exports.CHAINFLIP_SWAP_SOURCE = exports.chainIdToChainflipNetwork = exports.ChainflipSupportedAssetIdsByChainId = exports.ChainflipSupportedChainIds = exports.CHAINFLIP_DCA_QUOTE = exports.CHAINFLIP_REGULAR_QUOTE = void 0;
3
+ exports.ChainflipStatusMessage = exports.usdcAsset = exports.CHAINFLIP_DCA_BOOST_SWAP_SOURCE = exports.CHAINFLIP_DCA_SWAP_SOURCE = exports.CHAINFLIP_BOOST_SWAP_SOURCE = exports.CHAINFLIP_SWAP_SOURCE = exports.chainIdToChainflipNetwork = exports.ChainflipSupportedAssetIdsByChainId = exports.ChainflipSupportedChainIds = exports.CHAINFLIP_CHANNEL_DEADLINE_MS = exports.CHAINFLIP_DCA_QUOTE = exports.CHAINFLIP_REGULAR_QUOTE = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
5
  const types_1 = require("@shapeshiftoss/types");
6
6
  const types_2 = require("../../types");
7
7
  const types_3 = require("./types");
8
8
  exports.CHAINFLIP_REGULAR_QUOTE = 'regular';
9
9
  exports.CHAINFLIP_DCA_QUOTE = 'dca';
10
+ // Deposit channels stay open ~24h - 6h keeps a 4x margin against depositing to an expired channel
11
+ exports.CHAINFLIP_CHANNEL_DEADLINE_MS = 6 * 60 * 60 * 1000;
10
12
  exports.ChainflipSupportedChainIds = [
11
13
  types_1.KnownChainIds.EthereumMainnet,
12
14
  types_1.KnownChainIds.ArbitrumMainnet,
@@ -4,6 +4,7 @@ exports.getTradeQuote = void 0;
4
4
  const monads_1 = require("@sniptt/monads");
5
5
  const types_1 = require("../../../types");
6
6
  const utils_1 = require("../../../utils");
7
+ const constants_1 = require("../constants");
7
8
  const getChainflipStepData_1 = require("../utils/getChainflipStepData");
8
9
  const getChainflipTradeContexts_1 = require("../utils/getChainflipTradeContexts");
9
10
  const helpers_1 = require("../utils/helpers");
@@ -69,6 +70,7 @@ const getTradeQuote = async (input, deps) => {
69
70
  tradeQuotes.push({
70
71
  ...tradeCommon,
71
72
  quoteOrRate: 'quote',
73
+ deadline: Date.now() + constants_1.CHAINFLIP_CHANNEL_DEADLINE_MS,
72
74
  receiveAddress,
73
75
  steps: [
74
76
  {
@@ -32,6 +32,7 @@ const getCowSwapTradeQuote = async (input, deps) => {
32
32
  const tradeQuote = {
33
33
  ...tradeCommon,
34
34
  quoteOrRate: 'quote',
35
+ deadline: stepDataArgs.cowswapQuoteResponse.quote.validTo * 1000,
35
36
  receiveAddress,
36
37
  steps: [
37
38
  {