@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
@@ -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/esm/types.js CHANGED
@@ -30,6 +30,8 @@ export var TradeQuoteError;
30
30
  TradeQuoteError["UnsupportedChain"] = "UnsupportedChain";
31
31
  // the swapper can't swap across chains
32
32
  TradeQuoteError["CrossChainNotSupported"] = "CrossChainNotSupported";
33
+ // the swapper can quote this pair, but can't derive a sell amount from an exact buy amount
34
+ TradeQuoteError["ExactOutputNotSupported"] = "ExactOutputNotSupported";
33
35
  // the swapper wasn't able to get a network fee estimate
34
36
  TradeQuoteError["NetworkFeeEstimationFailed"] = "NetworkFeeEstimationFailed";
35
37
  // 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;
@@ -158,3 +158,6 @@ export const getFullAppData = async (slippageTolerancePercentage, affiliateAppDa
158
158
  const { fullAppData, appDataKeccak256 } = await generateAppDataFromDoc(appDataDoc);
159
159
  return { appDataHash: appDataKeccak256, appData: fullAppData };
160
160
  };
161
+ export const isLegacyAppData = (appData) => {
162
+ return appData.version === '0.4.0';
163
+ };
@@ -1,5 +1,14 @@
1
1
  import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
+ import type { TradeAmount, TradeStepCommon } from '../types.js';
3
+ import { SwapperName } from '../types.js';
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,8 +1,12 @@
1
1
  import { arbitrumAssetId, avalancheAssetId, baseAssetId, bscAssetId, ethAssetId, fromAssetId, gnosisAssetId, katanaAssetId, monadAssetId, optimismAssetId, plasmaAssetId, polygonAssetId, } from '@shapeshiftoss/caip';
2
2
  import { KnownChainIds } from '@shapeshiftoss/types';
3
3
  import { DAO_TREASURY_ARBITRUM, DAO_TREASURY_AVALANCHE, DAO_TREASURY_BASE, DAO_TREASURY_BITCOIN, DAO_TREASURY_BOB, DAO_TREASURY_BSC, DAO_TREASURY_ETHEREUM_MAINNET, DAO_TREASURY_GNOSIS, DAO_TREASURY_HYPEREVM, DAO_TREASURY_MONAD, DAO_TREASURY_OPTIMISM, DAO_TREASURY_POLYGON, DAO_TREASURY_SOLANA, DAO_TREASURY_STARKNET, DAO_TREASURY_TON, isTreasuryChainId, } from '@shapeshiftoss/utils';
4
+ import { SwapperName } from '../types.js';
4
5
  // Deadline for providers without their own expiry - short enough to keep priced amounts honest
5
6
  export const FALLBACK_QUOTE_DEADLINE_MS = 60_000;
7
+ export const getTradeAmount = (input) => 'buyAmountCryptoBaseUnit' in input
8
+ ? { direction: 'exactOut', cryptoBaseUnit: input.buyAmountCryptoBaseUnit }
9
+ : { direction: 'exactIn', cryptoBaseUnit: input.sellAmountIncludingProtocolFeesCryptoBaseUnit };
6
10
  // Bands are unambiguous for any realistic date: unix s land ~2e9, ms ~2e12, µs ~2e15, ns ~2e18
7
11
  export const normalizeEpochToMs = (value) => {
8
12
  if (value < 1e12)
@@ -68,3 +72,19 @@ export const getTreasuryAddressFromChainId = (chainId) => {
68
72
  throw new Error(`[getTreasuryAddressFromChainId] - Unsupported chainId: ${chainId}`);
69
73
  return treasuryAddress;
70
74
  };
75
+ export const getDepositAddress = (step, swapperName) => {
76
+ switch (swapperName) {
77
+ case SwapperName.Chainflip:
78
+ return step.chainflipSpecific?.depositAddress || undefined;
79
+ case SwapperName.NearIntents: {
80
+ if (step.swapperMetadata?.name !== 'nearIntents')
81
+ return;
82
+ const { depositAddress, depositMemo } = step.swapperMetadata;
83
+ if (depositMemo)
84
+ return;
85
+ return depositAddress || undefined;
86
+ }
87
+ default:
88
+ return;
89
+ }
90
+ };
@@ -2,7 +2,9 @@ import { thorchainChainId } from '@shapeshiftoss/caip';
2
2
  import { KnownChainIds } from '@shapeshiftoss/types';
3
3
  import { treasuryChainIds } from '@shapeshiftoss/utils';
4
4
  import { describe, expect, it } from 'vitest';
5
- import { getTreasuryAddressFromChainId, normalizeEpochToMs } from './helpers.js';
5
+ import { swappers } from '../constants.js';
6
+ import { SwapperName } from '../types.js';
7
+ import { getDepositAddress, getTreasuryAddressFromChainId, normalizeEpochToMs } from './helpers.js';
6
8
  describe('getTreasuryAddressFromChainId', () => {
7
9
  // Affiliate and fee recipient addresses for every swapper flow through here, so pin the values
8
10
  // rather than the wiring - a chain pointing at another chain's treasury misroutes revenue silently
@@ -47,3 +49,42 @@ describe('normalizeEpochToMs', () => {
47
49
  expect(normalizeEpochToMs(epochMs * 1e6)).toBe(epochMs);
48
50
  });
49
51
  });
52
+ const makeStep = (step) => step;
53
+ describe('getDepositAddress', () => {
54
+ it('reads the chainflip deposit address', () => {
55
+ const step = makeStep({ chainflipSpecific: { depositAddress: 'bc1qdeposit' } });
56
+ expect(getDepositAddress(step, SwapperName.Chainflip)).toBe('bc1qdeposit');
57
+ });
58
+ it('returns undefined when chainflip has no deposit address', () => {
59
+ expect(getDepositAddress(makeStep({}), SwapperName.Chainflip)).toBeUndefined();
60
+ });
61
+ it('reads the near intents deposit address', () => {
62
+ const step = makeStep({
63
+ swapperMetadata: { name: 'nearIntents', depositAddress: '0xdeposit' },
64
+ });
65
+ expect(getDepositAddress(step, SwapperName.NearIntents)).toBe('0xdeposit');
66
+ });
67
+ it('rejects a memo-bound near intents deposit address', () => {
68
+ const step = makeStep({
69
+ swapperMetadata: { name: 'nearIntents', depositAddress: 'EQdeposit', depositMemo: '12345' },
70
+ });
71
+ expect(getDepositAddress(step, SwapperName.NearIntents)).toBeUndefined();
72
+ });
73
+ it('rejects an empty near intents deposit address', () => {
74
+ const step = makeStep({ swapperMetadata: { name: 'nearIntents', depositAddress: '' } });
75
+ expect(getDepositAddress(step, SwapperName.NearIntents)).toBeUndefined();
76
+ });
77
+ it('returns undefined for swappers that do not use deposit addresses', () => {
78
+ const step = makeStep({ chainflipSpecific: { depositAddress: 'bc1qdeposit' } });
79
+ expect(getDepositAddress(step, SwapperName.Relay)).toBeUndefined();
80
+ });
81
+ });
82
+ describe('supportsExternalPayment', () => {
83
+ it('is flagged on exactly the externally paid swappers', () => {
84
+ const flagged = Object.entries(swappers)
85
+ .filter(([, swapper]) => swapper?.supportsExternalPayment)
86
+ .map(([name]) => name)
87
+ .sort();
88
+ expect(flagged).toEqual([SwapperName.Chainflip, SwapperName.NearIntents].sort());
89
+ });
90
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/swapper",
3
- "version": "19.0.0",
3
+ "version": "20.1.0",
4
4
  "repository": "https://github.com/shapeshift/web",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -28,7 +28,7 @@
28
28
  "@coral-xyz/anchor": "0.29.0",
29
29
  "@cowprotocol/app-data": "^2.3.0",
30
30
  "@defuse-protocol/one-click-sdk-typescript": "^0.1.1-0.2",
31
- "@gobob/bob-sdk": "5.8.1",
31
+ "@gobob/bob-sdk": "5.11.1",
32
32
  "@mysten/sui": "^1.45.2",
33
33
  "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.0",
34
34
  "@sniptt/monads": "^0.5.10",
@@ -52,11 +52,11 @@
52
52
  "viem": "2.55.11",
53
53
  "@shapeshiftoss/caip": "^8.16.10",
54
54
  "@shapeshiftoss/hdwallet-core": "^1.62.41",
55
- "@shapeshiftoss/types": "^9.0.0",
56
- "@shapeshiftoss/unchained-client": "^10.14.11",
57
55
  "@shapeshiftoss/contracts": "^1.0.7",
58
- "@shapeshiftoss/utils": "^1.1.0",
59
- "@shapeshiftoss/chain-adapters": "^11.5.1"
56
+ "@shapeshiftoss/types": "^9.0.1",
57
+ "@shapeshiftoss/chain-adapters": "^11.5.1",
58
+ "@shapeshiftoss/utils": "^1.1.1",
59
+ "@shapeshiftoss/unchained-client": "^10.14.11"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/lodash": "^4.14.178",