@shapeshiftoss/swapper 20.6.0 → 20.6.2

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 (119) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/constants.js +8 -0
  3. package/dist/cjs/index.d.ts +1 -0
  4. package/dist/cjs/index.js +1 -0
  5. package/dist/cjs/swappers/AcrossSwapper/constant.js +0 -7
  6. package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.d.ts +1 -1
  7. package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.js +0 -1
  8. package/dist/cjs/swappers/ChainflipSwapper/constants.d.ts +1 -1
  9. package/dist/cjs/swappers/ChainflipSwapper/constants.js +11 -1
  10. package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +2 -1
  11. package/dist/cjs/swappers/ChainflipSwapper/types.js +1 -0
  12. package/dist/cjs/swappers/ChainflipSwapper/utils/helpers.d.ts +2 -2
  13. package/dist/cjs/swappers/DebridgeSwapper/constant.js +0 -4
  14. package/dist/cjs/swappers/FyndSwapper/utils/fyndService.js +1 -1
  15. package/dist/cjs/swappers/KyberSwapper/utils/kyberService.js +1 -1
  16. package/dist/cjs/swappers/PanoraSwapper/PanoraSwapper.d.ts +2 -0
  17. package/dist/cjs/swappers/PanoraSwapper/PanoraSwapper.js +5 -0
  18. package/dist/cjs/swappers/PanoraSwapper/endpoints.d.ts +2 -0
  19. package/dist/cjs/swappers/PanoraSwapper/endpoints.js +13 -0
  20. package/dist/cjs/swappers/PanoraSwapper/index.d.ts +2 -0
  21. package/dist/cjs/swappers/PanoraSwapper/index.js +7 -0
  22. package/dist/cjs/swappers/PanoraSwapper/swapperApi/getPanoraTradeQuote.d.ts +4 -0
  23. package/dist/cjs/swappers/PanoraSwapper/swapperApi/getPanoraTradeQuote.js +42 -0
  24. package/dist/cjs/swappers/PanoraSwapper/swapperApi/getPanoraTradeRate.d.ts +4 -0
  25. package/dist/cjs/swappers/PanoraSwapper/swapperApi/getPanoraTradeRate.js +36 -0
  26. package/dist/cjs/swappers/PanoraSwapper/types.d.ts +35 -0
  27. package/dist/cjs/swappers/PanoraSwapper/types.js +2 -0
  28. package/dist/cjs/swappers/PanoraSwapper/utils/constants.d.ts +2 -0
  29. package/dist/cjs/swappers/PanoraSwapper/utils/constants.js +6 -0
  30. package/dist/cjs/swappers/PanoraSwapper/utils/fetchFromPanora.d.ts +7 -0
  31. package/dist/cjs/swappers/PanoraSwapper/utils/fetchFromPanora.js +15 -0
  32. package/dist/cjs/swappers/PanoraSwapper/utils/getPanoraStepData.d.ts +19 -0
  33. package/dist/cjs/swappers/PanoraSwapper/utils/getPanoraStepData.js +41 -0
  34. package/dist/cjs/swappers/PanoraSwapper/utils/getPanoraTradeContext.d.ts +17 -0
  35. package/dist/cjs/swappers/PanoraSwapper/utils/getPanoraTradeContext.js +63 -0
  36. package/dist/cjs/swappers/PanoraSwapper/utils/helpers.d.ts +25 -0
  37. package/dist/cjs/swappers/PanoraSwapper/utils/helpers.js +129 -0
  38. package/dist/cjs/swappers/PanoraSwapper/utils/helpers.test.d.ts +1 -0
  39. package/dist/cjs/swappers/PanoraSwapper/utils/helpers.test.js +40 -0
  40. package/dist/cjs/swappers/PanoraSwapper/utils/panoraService.d.ts +5 -0
  41. package/dist/cjs/swappers/PanoraSwapper/utils/panoraService.js +10 -0
  42. package/dist/cjs/swappers/RelaySwapper/constant.js +0 -14
  43. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +0 -70
  44. package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.d.ts +0 -1
  45. package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.js +1 -10
  46. package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.js +1 -3
  47. package/dist/cjs/swappers/ZrxSwapper/utils/zrxService.js +1 -1
  48. package/dist/cjs/types.d.ts +3 -1
  49. package/dist/cjs/types.js +1 -0
  50. package/dist/cjs/utils/aptos/checkAptosSwapStatus.d.ts +4 -0
  51. package/dist/cjs/utils/aptos/checkAptosSwapStatus.js +27 -0
  52. package/dist/cjs/utils/aptos/getAptosNetworkFeeCryptoBaseUnit.d.ts +11 -0
  53. package/dist/cjs/utils/aptos/getAptosNetworkFeeCryptoBaseUnit.js +12 -0
  54. package/dist/cjs/utils/aptos/index.d.ts +2 -0
  55. package/dist/cjs/utils/aptos/index.js +2 -0
  56. package/dist/cjs/utils/cowswap/constants.js +0 -1
  57. package/dist/cjs/utils/cowswap/index.js +0 -2
  58. package/dist/cjs/utils/helpers.js +1 -0
  59. package/dist/cjs/utils/helpers.test.js +1 -0
  60. package/dist/esm/.tsbuildinfo +1 -1
  61. package/dist/esm/constants.js +8 -0
  62. package/dist/esm/index.d.ts +1 -0
  63. package/dist/esm/index.js +1 -0
  64. package/dist/esm/swappers/AcrossSwapper/constant.js +2 -9
  65. package/dist/esm/swappers/BobGatewaySwapper/utils/constants.d.ts +1 -1
  66. package/dist/esm/swappers/BobGatewaySwapper/utils/constants.js +1 -2
  67. package/dist/esm/swappers/ChainflipSwapper/constants.d.ts +1 -1
  68. package/dist/esm/swappers/ChainflipSwapper/constants.js +12 -2
  69. package/dist/esm/swappers/ChainflipSwapper/types.d.ts +2 -1
  70. package/dist/esm/swappers/ChainflipSwapper/types.js +1 -0
  71. package/dist/esm/swappers/ChainflipSwapper/utils/helpers.d.ts +2 -2
  72. package/dist/esm/swappers/DebridgeSwapper/constant.js +2 -6
  73. package/dist/esm/swappers/FyndSwapper/utils/fyndService.js +1 -1
  74. package/dist/esm/swappers/KyberSwapper/utils/kyberService.js +1 -1
  75. package/dist/esm/swappers/PanoraSwapper/PanoraSwapper.d.ts +2 -0
  76. package/dist/esm/swappers/PanoraSwapper/PanoraSwapper.js +2 -0
  77. package/dist/esm/swappers/PanoraSwapper/endpoints.d.ts +2 -0
  78. package/dist/esm/swappers/PanoraSwapper/endpoints.js +10 -0
  79. package/dist/esm/swappers/PanoraSwapper/index.d.ts +2 -0
  80. package/dist/esm/swappers/PanoraSwapper/index.js +2 -0
  81. package/dist/esm/swappers/PanoraSwapper/swapperApi/getPanoraTradeQuote.d.ts +4 -0
  82. package/dist/esm/swappers/PanoraSwapper/swapperApi/getPanoraTradeQuote.js +38 -0
  83. package/dist/esm/swappers/PanoraSwapper/swapperApi/getPanoraTradeRate.d.ts +4 -0
  84. package/dist/esm/swappers/PanoraSwapper/swapperApi/getPanoraTradeRate.js +32 -0
  85. package/dist/esm/swappers/PanoraSwapper/types.d.ts +35 -0
  86. package/dist/esm/swappers/PanoraSwapper/types.js +1 -0
  87. package/dist/esm/swappers/PanoraSwapper/utils/constants.d.ts +2 -0
  88. package/dist/esm/swappers/PanoraSwapper/utils/constants.js +3 -0
  89. package/dist/esm/swappers/PanoraSwapper/utils/fetchFromPanora.d.ts +7 -0
  90. package/dist/esm/swappers/PanoraSwapper/utils/fetchFromPanora.js +11 -0
  91. package/dist/esm/swappers/PanoraSwapper/utils/getPanoraStepData.d.ts +19 -0
  92. package/dist/esm/swappers/PanoraSwapper/utils/getPanoraStepData.js +37 -0
  93. package/dist/esm/swappers/PanoraSwapper/utils/getPanoraTradeContext.d.ts +17 -0
  94. package/dist/esm/swappers/PanoraSwapper/utils/getPanoraTradeContext.js +59 -0
  95. package/dist/esm/swappers/PanoraSwapper/utils/helpers.d.ts +25 -0
  96. package/dist/esm/swappers/PanoraSwapper/utils/helpers.js +117 -0
  97. package/dist/esm/swappers/PanoraSwapper/utils/helpers.test.d.ts +1 -0
  98. package/dist/esm/swappers/PanoraSwapper/utils/helpers.test.js +38 -0
  99. package/dist/esm/swappers/PanoraSwapper/utils/panoraService.d.ts +5 -0
  100. package/dist/esm/swappers/PanoraSwapper/utils/panoraService.js +4 -0
  101. package/dist/esm/swappers/RelaySwapper/constant.js +2 -16
  102. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +0 -70
  103. package/dist/esm/swappers/SymbiosisSwapper/utils/constants.d.ts +0 -1
  104. package/dist/esm/swappers/SymbiosisSwapper/utils/constants.js +1 -10
  105. package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.js +1 -3
  106. package/dist/esm/swappers/ZrxSwapper/utils/zrxService.js +1 -1
  107. package/dist/esm/types.d.ts +3 -1
  108. package/dist/esm/types.js +1 -0
  109. package/dist/esm/utils/aptos/checkAptosSwapStatus.d.ts +4 -0
  110. package/dist/esm/utils/aptos/checkAptosSwapStatus.js +23 -0
  111. package/dist/esm/utils/aptos/getAptosNetworkFeeCryptoBaseUnit.d.ts +11 -0
  112. package/dist/esm/utils/aptos/getAptosNetworkFeeCryptoBaseUnit.js +8 -0
  113. package/dist/esm/utils/aptos/index.d.ts +2 -0
  114. package/dist/esm/utils/aptos/index.js +2 -0
  115. package/dist/esm/utils/cowswap/constants.js +0 -1
  116. package/dist/esm/utils/cowswap/index.js +0 -2
  117. package/dist/esm/utils/helpers.js +2 -1
  118. package/dist/esm/utils/helpers.test.js +1 -0
  119. package/package.json +6 -6
@@ -13,6 +13,7 @@ import { fyndApi, fyndSwapper } from './swappers/FyndSwapper/index.js';
13
13
  import { kyberApi, kyberSwapper } from './swappers/KyberSwapper/index.js';
14
14
  import { mayachainApi, mayachainSwapper } from './swappers/MayachainSwapper/index.js';
15
15
  import { nearIntentsApi, nearIntentsSwapper } from './swappers/NearIntentsSwapper/index.js';
16
+ import { panoraApi, panoraSwapper } from './swappers/PanoraSwapper/index.js';
16
17
  import { portalsApi, portalsSwapper } from './swappers/PortalsSwapper/index.js';
17
18
  import { relayApi, relaySwapper } from './swappers/RelaySwapper/index.js';
18
19
  import { stonfiApi, stonfiSwapper } from './swappers/StonfiSwapper/index.js';
@@ -114,6 +115,10 @@ export const swappers = {
114
115
  ...kyberSwapper,
115
116
  ...kyberApi,
116
117
  },
118
+ [SwapperName.Panora]: {
119
+ ...panoraSwapper,
120
+ ...panoraApi,
121
+ },
117
122
  [SwapperName.Test]: undefined,
118
123
  };
119
124
  const DEFAULT_SLIPPAGE_DECIMAL_PERCENTAGE = '0.002';
@@ -135,6 +140,7 @@ const DEFAULT_DEBRIDGE_SLIPPAGE_DECIMAL_PERCENTAGE = '0.03';
135
140
  const DEFAULT_BOB_GATEWAY_SLIPPAGE_DECIMAL_PERCENTAGE = '0.03';
136
141
  // Symbiosis splits the tolerance across up to three legs, and a destination leg over its share pays out the transit token instead of reverting
137
142
  const DEFAULT_SYMBIOSIS_SLIPPAGE_DECIMAL_PERCENTAGE = '0.01';
143
+ const DEFAULT_PANORA_SLIPPAGE_DECIMAL_PERCENTAGE = '0.005';
138
144
  export const getDefaultSlippageDecimalPercentageForSwapper = (swapperName) => {
139
145
  if (swapperName === undefined)
140
146
  return DEFAULT_SLIPPAGE_DECIMAL_PERCENTAGE;
@@ -163,6 +169,8 @@ export const getDefaultSlippageDecimalPercentageForSwapper = (swapperName) => {
163
169
  throw new Error('Default slippage not supported by Across');
164
170
  case SwapperName.Debridge:
165
171
  return DEFAULT_DEBRIDGE_SLIPPAGE_DECIMAL_PERCENTAGE;
172
+ case SwapperName.Panora:
173
+ return DEFAULT_PANORA_SLIPPAGE_DECIMAL_PERCENTAGE;
166
174
  case SwapperName.ButterSwap:
167
175
  return DEFAULT_BUTTERSWAP_SLIPPAGE_DECIMAL_PERCENTAGE;
168
176
  case SwapperName.NearIntents:
@@ -17,6 +17,7 @@ export * from './swappers/CowSwapper/index.js';
17
17
  export * from './swappers/DebridgeSwapper/index.js';
18
18
  export * from './swappers/FyndSwapper/index.js';
19
19
  export * from './swappers/KyberSwapper/index.js';
20
+ export * from './swappers/PanoraSwapper/index.js';
20
21
  export * from './swappers/PortalsSwapper/index.js';
21
22
  export * from './swappers/ThorchainSwapper/index.js';
22
23
  export * from './swappers/MayachainSwapper/index.js';
package/dist/esm/index.js CHANGED
@@ -17,6 +17,7 @@ export * from './swappers/CowSwapper/index.js';
17
17
  export * from './swappers/DebridgeSwapper/index.js';
18
18
  export * from './swappers/FyndSwapper/index.js';
19
19
  export * from './swappers/KyberSwapper/index.js';
20
+ export * from './swappers/PanoraSwapper/index.js';
20
21
  export * from './swappers/PortalsSwapper/index.js';
21
22
  export * from './swappers/ThorchainSwapper/index.js';
22
23
  export * from './swappers/MayachainSwapper/index.js';
@@ -1,7 +1,7 @@
1
- import { arbitrumChainId, baseChainId, blastChainId, bscChainId, ethChainId, hyperEvmChainId, inkChainId, lineaChainId, megaethChainId, modeChainId, monadChainId, optimismChainId, plasmaChainId, polygonChainId, robinhoodChainId, scrollChainId, solanaChainId, soneiumChainId, unichainChainId, worldChainChainId, zkSyncEraChainId, } from '@shapeshiftoss/caip';
1
+ import { arbitrumChainId, baseChainId, bscChainId, ethChainId, hyperEvmChainId, inkChainId, megaethChainId, monadChainId, optimismChainId, plasmaChainId, polygonChainId, robinhoodChainId, solanaChainId, unichainChainId, } from '@shapeshiftoss/caip';
2
2
  import invert from 'lodash/invert';
3
3
  import { zeroAddress } from 'viem';
4
- import { arbitrum, base, blast, bsc, hyperEvm, ink, linea, mainnet as ethereum, megaeth, mode, monad, optimism, plasma, polygon, robinhood, scroll, soneium, unichain, worldchain, zksync, } from 'viem/chains';
4
+ import { arbitrum, base, bsc, hyperEvm, ink, mainnet as ethereum, megaeth, monad, optimism, plasma, polygon, robinhood, unichain, } from 'viem/chains';
5
5
  import { TradeQuoteError } from '../../types.js';
6
6
  import { AcrossErrorCode } from './utils/types.js';
7
7
  export const chainIdToAcrossChainId = {
@@ -14,17 +14,10 @@ export const chainIdToAcrossChainId = {
14
14
  [monadChainId]: monad.id,
15
15
  [hyperEvmChainId]: hyperEvm.id,
16
16
  [inkChainId]: ink.id,
17
- [lineaChainId]: linea.id,
18
- [modeChainId]: mode.id,
19
17
  [plasmaChainId]: plasma.id,
20
- [zkSyncEraChainId]: zksync.id,
21
- [blastChainId]: blast.id,
22
- [worldChainChainId]: worldchain.id,
23
18
  [unichainChainId]: unichain.id,
24
- [soneiumChainId]: soneium.id,
25
19
  // Across uses a custom Solana chain ID
26
20
  [solanaChainId]: 34268394551451,
27
- [scrollChainId]: scroll.id,
28
21
  [megaethChainId]: megaeth.id,
29
22
  [robinhoodChainId]: robinhood.id,
30
23
  };
@@ -1,7 +1,7 @@
1
1
  import type { ChainId } from '@shapeshiftoss/caip';
2
2
  export declare const BOB_GATEWAY_BASE_URL = "https://gateway-api-mainnet.gobob.xyz";
3
3
  export declare const chainIdToBobGatewayChainName: {
4
- readonly [x: string]: "ethereum" | "polygon" | "arbitrum" | "base" | "avalanche" | "bsc" | "robinhood" | "bob" | "plasma" | "tron" | "bera" | "bitcoin" | "sei" | "sonic" | "unichain" | "hyperevm";
4
+ readonly [x: string]: "ethereum" | "polygon" | "arbitrum" | "base" | "avalanche" | "bsc" | "robinhood" | "bob" | "plasma" | "tron" | "bitcoin" | "sei" | "sonic" | "unichain" | "hyperevm";
5
5
  };
6
6
  export declare const bobGatewayChainNameToChainId: Record<BobGatewayChainName, ChainId>;
7
7
  export type BobGatewayChainName = (typeof chainIdToBobGatewayChainName)[keyof typeof chainIdToBobGatewayChainName];
@@ -1,4 +1,4 @@
1
- import { arbitrumChainId, avalancheChainId, baseChainId, berachainChainId, bobChainId, bscChainId, btcChainId, ethChainId, hyperEvmChainId, plasmaChainId, polygonChainId, robinhoodChainId, seiChainId, sonicChainId, tronChainId, unichainChainId, } from '@shapeshiftoss/caip';
1
+ import { arbitrumChainId, avalancheChainId, baseChainId, bobChainId, bscChainId, btcChainId, ethChainId, hyperEvmChainId, plasmaChainId, polygonChainId, robinhoodChainId, seiChainId, sonicChainId, tronChainId, unichainChainId, } from '@shapeshiftoss/caip';
2
2
  export const BOB_GATEWAY_BASE_URL = 'https://gateway-api-mainnet.gobob.xyz';
3
3
  // Chain name strings expected by the BOB Gateway API
4
4
  // https://gateway-api-mainnet.gobob.xyz/v4/get-routes
@@ -6,7 +6,6 @@ export const chainIdToBobGatewayChainName = {
6
6
  [arbitrumChainId]: 'arbitrum',
7
7
  [avalancheChainId]: 'avalanche',
8
8
  [baseChainId]: 'base',
9
- [berachainChainId]: 'bera',
10
9
  [btcChainId]: 'bitcoin',
11
10
  [bobChainId]: 'bob',
12
11
  [bscChainId]: 'bsc',
@@ -6,7 +6,7 @@ import { ChainflipNetwork } from './types.js';
6
6
  export declare const CHAINFLIP_REGULAR_QUOTE: "regular";
7
7
  export declare const CHAINFLIP_DCA_QUOTE: "dca";
8
8
  export declare const CHAINFLIP_CHANNEL_DEADLINE_MS: number;
9
- export declare const ChainflipSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BitcoinMainnet, KnownChainIds.SolanaMainnet, KnownChainIds.TronMainnet];
9
+ export declare const ChainflipSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BitcoinMainnet, KnownChainIds.SolanaMainnet, KnownChainIds.TronMainnet, KnownChainIds.BnbSmartChainMainnet];
10
10
  export type ChainflipSupportedChainId = (typeof ChainflipSupportedChainIds)[number];
11
11
  export declare const ChainflipSupportedAssetIdsByChainId: Partial<Record<KnownChainIds, AssetId[]>>;
12
12
  export declare const chainIdToChainflipNetwork: Partial<Record<ChainId, ChainflipNetwork>>;
@@ -1,4 +1,4 @@
1
- import { arbitrumAssetId, btcAssetId, ethAssetId, flipAssetId, solAssetId, tronAssetId, usdcAssetId, usdcOnArbitrumOneAssetId, usdcOnSolanaAssetId, usdtAssetId, usdtOnArbitrumOneAssetId, usdtOnSolanaAssetId, usdtOnTronAssetId, wbtcAssetId, } from '@shapeshiftoss/caip';
1
+ import { arbitrumAssetId, bscAssetId, btcAssetId, cbbtcAssetId, ethAssetId, flipAssetId, solAssetId, tronAssetId, usdcAssetId, usdcOnArbitrumOneAssetId, usdcOnSolanaAssetId, usdtAssetId, usdtOnArbitrumOneAssetId, usdtOnBscAssetId, usdtOnSolanaAssetId, usdtOnTronAssetId, wbtcAssetId, } from '@shapeshiftoss/caip';
2
2
  import { KnownChainIds } from '@shapeshiftoss/types';
3
3
  import { SwapperName } from '../../types.js';
4
4
  import { ChainflipNetwork } from './types.js';
@@ -12,9 +12,17 @@ export const ChainflipSupportedChainIds = [
12
12
  KnownChainIds.BitcoinMainnet,
13
13
  KnownChainIds.SolanaMainnet,
14
14
  KnownChainIds.TronMainnet,
15
+ KnownChainIds.BnbSmartChainMainnet,
15
16
  ];
16
17
  export const ChainflipSupportedAssetIdsByChainId = {
17
- [KnownChainIds.EthereumMainnet]: [ethAssetId, flipAssetId, usdcAssetId, usdtAssetId, wbtcAssetId],
18
+ [KnownChainIds.EthereumMainnet]: [
19
+ ethAssetId,
20
+ flipAssetId,
21
+ usdcAssetId,
22
+ usdtAssetId,
23
+ wbtcAssetId,
24
+ cbbtcAssetId,
25
+ ],
18
26
  [KnownChainIds.ArbitrumMainnet]: [
19
27
  arbitrumAssetId,
20
28
  usdcOnArbitrumOneAssetId,
@@ -23,6 +31,7 @@ export const ChainflipSupportedAssetIdsByChainId = {
23
31
  [KnownChainIds.BitcoinMainnet]: [btcAssetId],
24
32
  [KnownChainIds.SolanaMainnet]: [solAssetId, usdcOnSolanaAssetId, usdtOnSolanaAssetId],
25
33
  [KnownChainIds.TronMainnet]: [tronAssetId, usdtOnTronAssetId],
34
+ [KnownChainIds.BnbSmartChainMainnet]: [bscAssetId, usdtOnBscAssetId],
26
35
  };
27
36
  export const chainIdToChainflipNetwork = {
28
37
  [KnownChainIds.EthereumMainnet]: ChainflipNetwork.Ethereum,
@@ -30,6 +39,7 @@ export const chainIdToChainflipNetwork = {
30
39
  [KnownChainIds.BitcoinMainnet]: ChainflipNetwork.Bitcoin,
31
40
  [KnownChainIds.SolanaMainnet]: ChainflipNetwork.Solana,
32
41
  [KnownChainIds.TronMainnet]: ChainflipNetwork.Tron,
42
+ [KnownChainIds.BnbSmartChainMainnet]: ChainflipNetwork.Bsc,
33
43
  };
34
44
  export const CHAINFLIP_SWAP_SOURCE = SwapperName.Chainflip;
35
45
  export const CHAINFLIP_BOOST_SWAP_SOURCE = `${SwapperName.Chainflip} • Boost`;
@@ -24,5 +24,6 @@ export declare enum ChainflipNetwork {
24
24
  Ethereum = "Ethereum",
25
25
  Arbitrum = "Arbitrum",
26
26
  Solana = "Solana",
27
- Tron = "Tron"
27
+ Tron = "Tron",
28
+ Bsc = "Bsc"
28
29
  }
@@ -5,4 +5,5 @@ export var ChainflipNetwork;
5
5
  ChainflipNetwork["Arbitrum"] = "Arbitrum";
6
6
  ChainflipNetwork["Solana"] = "Solana";
7
7
  ChainflipNetwork["Tron"] = "Tron";
8
+ ChainflipNetwork["Bsc"] = "Bsc";
8
9
  })(ChainflipNetwork || (ChainflipNetwork = {}));
@@ -21,8 +21,8 @@ type GetChainFlipSwapArgs = ChainFlipBrokerBaseArgs & {
21
21
  numberOfChunks?: number;
22
22
  chunkIntervalBlocks?: number;
23
23
  };
24
- export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BitcoinMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet | import("@shapeshiftoss/types").KnownChainIds.TronMainnet;
25
- export declare const isSupportedAssetId: (chainId: ChainId, assetId: AssetId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BitcoinMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet | import("@shapeshiftoss/types").KnownChainIds.TronMainnet;
24
+ export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BitcoinMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet | import("@shapeshiftoss/types").KnownChainIds.TronMainnet;
25
+ export declare const isSupportedAssetId: (chainId: ChainId, assetId: AssetId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BitcoinMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet | import("@shapeshiftoss/types").KnownChainIds.TronMainnet;
26
26
  export declare const assertValidTrade: ({ sellAsset, buyAsset, }: {
27
27
  sellAsset: Asset;
28
28
  buyAsset: Asset;
@@ -1,7 +1,7 @@
1
- import { arbitrumChainId, avalancheChainId, baseChainId, berachainChainId, bobChainId, bscChainId, cronosChainId, ethChainId, flowEvmChainId, gnosisChainId, hyperEvmChainId, lineaChainId, mantleChainId, megaethChainId, monadChainId, optimismChainId, plasmaChainId, polygonChainId, robinhoodChainId, seiChainId, sonicChainId, storyChainId, } from '@shapeshiftoss/caip';
1
+ import { arbitrumChainId, avalancheChainId, baseChainId, bobChainId, bscChainId, cronosChainId, ethChainId, gnosisChainId, hyperEvmChainId, mantleChainId, megaethChainId, monadChainId, optimismChainId, plasmaChainId, polygonChainId, robinhoodChainId, seiChainId, sonicChainId, } from '@shapeshiftoss/caip';
2
2
  import invert from 'lodash/invert';
3
3
  import { zeroAddress } from 'viem';
4
- import { arbitrum, avalanche, base, bsc, linea, mainnet as ethereum, optimism, polygon, robinhood, } from 'viem/chains';
4
+ import { arbitrum, avalanche, base, bsc, mainnet as ethereum, optimism, polygon, robinhood, } from 'viem/chains';
5
5
  export const chainIdToDebridgeChainId = {
6
6
  [ethChainId]: ethereum.id,
7
7
  [optimismChainId]: optimism.id,
@@ -17,12 +17,8 @@ export const chainIdToDebridgeChainId = {
17
17
  [avalancheChainId]: avalanche.id,
18
18
  [mantleChainId]: 100000023,
19
19
  [cronosChainId]: 100000019,
20
- [berachainChainId]: 100000020,
21
- [lineaChainId]: linea.id,
22
20
  [bobChainId]: 100000021,
23
21
  [sonicChainId]: 100000014,
24
- [storyChainId]: 100000013,
25
- [flowEvmChainId]: 100000009,
26
22
  [megaethChainId]: 100000031,
27
23
  [robinhoodChainId]: robinhood.id,
28
24
  };
@@ -1,3 +1,3 @@
1
1
  import axios from 'axios';
2
2
  import { makeSwapperAxiosServiceMonadic } from '../../../utils/index.js';
3
- export const fyndService = makeSwapperAxiosServiceMonadic(axios.create({ timeout: 10_000 }));
3
+ export const fyndService = makeSwapperAxiosServiceMonadic(axios.create({ timeout: 15_000 }));
@@ -1,3 +1,3 @@
1
1
  import axios from 'axios';
2
2
  import { makeSwapperAxiosServiceMonadic } from '../../../utils/index.js';
3
- export const kyberService = makeSwapperAxiosServiceMonadic(axios.create({ timeout: 10_000 }));
3
+ export const kyberService = makeSwapperAxiosServiceMonadic(axios.create({ timeout: 15_000 }));
@@ -0,0 +1,2 @@
1
+ import type { Swapper } from '../../types.js';
2
+ export declare const panoraSwapper: Swapper;
@@ -0,0 +1,2 @@
1
+ import { executeAptosTransaction } from '../../utils/index.js';
2
+ export const panoraSwapper = { executeAptosTransaction };
@@ -0,0 +1,2 @@
1
+ import type { SwapperApi } from '../../types.js';
2
+ export declare const panoraApi: SwapperApi;
@@ -0,0 +1,10 @@
1
+ import { checkAptosSwapStatus, getAptosTransactionFees, getUnsignedAptosTransaction, } from '../../utils/aptos/index.js';
2
+ import { getPanoraTradeQuote } from './swapperApi/getPanoraTradeQuote.js';
3
+ import { getPanoraTradeRate } from './swapperApi/getPanoraTradeRate.js';
4
+ export const panoraApi = {
5
+ getTradeQuote: (input, deps) => getPanoraTradeQuote(input, deps),
6
+ getTradeRate: (input, deps) => getPanoraTradeRate(input, deps),
7
+ getUnsignedAptosTransaction,
8
+ getAptosTransactionFees,
9
+ checkTradeStatus: checkAptosSwapStatus,
10
+ };
@@ -0,0 +1,2 @@
1
+ export { panoraApi } from './endpoints.js';
2
+ export { panoraSwapper } from './PanoraSwapper.js';
@@ -0,0 +1,2 @@
1
+ export { panoraApi } from './endpoints.js';
2
+ export { panoraSwapper } from './PanoraSwapper.js';
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types.js';
3
+ import type { PanoraTradeQuoteInput } from '../types.js';
4
+ export declare const getPanoraTradeQuote: (input: PanoraTradeQuoteInput, deps: SwapperDeps) => Promise<Result<TradeQuote[], SwapErrorRight>>;
@@ -0,0 +1,38 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { assertQuoteAddresses } from '../../../utils/index.js';
3
+ import { getPanoraStepData } from '../utils/getPanoraStepData.js';
4
+ import { getPanoraTradeContext } from '../utils/getPanoraTradeContext.js';
5
+ export const getPanoraTradeQuote = async (input, deps) => {
6
+ const { accountNumber } = input;
7
+ const maybeAddresses = assertQuoteAddresses(input);
8
+ if (maybeAddresses.isErr())
9
+ return Err(maybeAddresses.unwrapErr());
10
+ const { sendAddress, receiveAddress } = maybeAddresses.unwrap();
11
+ const maybeContext = await getPanoraTradeContext({ input, deps });
12
+ if (maybeContext.isErr())
13
+ return Err(maybeContext.unwrapErr());
14
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
15
+ const maybeStepData = await getPanoraStepData({
16
+ ...stepDataArgs,
17
+ type: 'quote',
18
+ input,
19
+ from: sendAddress,
20
+ });
21
+ if (maybeStepData.isErr())
22
+ return Err(maybeStepData.unwrapErr());
23
+ const { transactionData, networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
24
+ const tradeQuote = {
25
+ ...tradeCommon,
26
+ quoteOrRate: 'quote',
27
+ receiveAddress,
28
+ steps: [
29
+ {
30
+ ...stepCommon,
31
+ accountNumber,
32
+ transactionData,
33
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
34
+ },
35
+ ],
36
+ };
37
+ return Ok([tradeQuote]);
38
+ };
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight, SwapperDeps, TradeRate } from '../../../types.js';
3
+ import type { PanoraTradeRateInput } from '../types.js';
4
+ export declare const getPanoraTradeRate: (input: PanoraTradeRateInput, deps: SwapperDeps) => Promise<Result<TradeRate[], SwapErrorRight>>;
@@ -0,0 +1,32 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { getPanoraStepData } from '../utils/getPanoraStepData.js';
3
+ import { getPanoraTradeContext } from '../utils/getPanoraTradeContext.js';
4
+ export const getPanoraTradeRate = async (input, deps) => {
5
+ const { accountNumber, receiveAddress, sendAddress } = input;
6
+ const maybeContext = await getPanoraTradeContext({ input, deps });
7
+ if (maybeContext.isErr())
8
+ return Err(maybeContext.unwrapErr());
9
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
10
+ const maybeStepData = await getPanoraStepData({
11
+ ...stepDataArgs,
12
+ type: 'rate',
13
+ input,
14
+ from: sendAddress,
15
+ });
16
+ if (maybeStepData.isErr())
17
+ return Err(maybeStepData.unwrapErr());
18
+ const { networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
19
+ const tradeRate = {
20
+ ...tradeCommon,
21
+ quoteOrRate: 'rate',
22
+ receiveAddress,
23
+ steps: [
24
+ {
25
+ ...stepCommon,
26
+ accountNumber,
27
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
28
+ },
29
+ ],
30
+ };
31
+ return Ok([tradeRate]);
32
+ };
@@ -0,0 +1,35 @@
1
+ import type { GetAptosTradeQuoteInput, GetAptosTradeRateInput } from '../../types.js';
2
+ export type PanoraTradeQuoteInput = GetAptosTradeQuoteInput;
3
+ export type PanoraTradeRateInput = GetAptosTradeRateInput;
4
+ export type PanoraSwapRequest = {
5
+ fromTokenAddress: string;
6
+ toTokenAddress: string;
7
+ fromTokenAmount: string;
8
+ toWalletAddress: string;
9
+ slippagePercentage: number;
10
+ integratorFeePercentage?: number;
11
+ integratorFeeAddress?: string;
12
+ };
13
+ export type PanoraToken = {
14
+ address: string;
15
+ symbol: string | null;
16
+ decimals: number | null;
17
+ };
18
+ export type PanoraQuote = {
19
+ toTokenAmount: string;
20
+ minToTokenAmount: string;
21
+ feeTokenAmount: string;
22
+ rawTransaction: {
23
+ bcs: string;
24
+ };
25
+ };
26
+ export type PanoraSwapResponse = {
27
+ fromToken: PanoraToken;
28
+ toToken: PanoraToken;
29
+ feeToken: PanoraToken;
30
+ quotes: PanoraQuote[];
31
+ };
32
+ export type PanoraErrorResponse = {
33
+ statusCode?: number;
34
+ message: string;
35
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare const PANORA_API_URL = "https://api.panora.exchange";
2
+ export declare const PANORA_FALLBACK_NETWORK_FEE_CRYPTO_BASE_UNIT = "1000000";
@@ -0,0 +1,3 @@
1
+ export const PANORA_API_URL = 'https://api.panora.exchange';
2
+ // 0.01 APT, between measured routes of 0.002 APT (no storage writes) and 0.04 APT (with)
3
+ export const PANORA_FALLBACK_NETWORK_FEE_CRYPTO_BASE_UNIT = '1000000';
@@ -0,0 +1,7 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight } from '../../../types.js';
3
+ import type { PanoraSwapRequest, PanoraSwapResponse } from '../types.js';
4
+ export declare const fetchPanoraSwap: ({ request, apiKey, }: {
5
+ request: PanoraSwapRequest;
6
+ apiKey: string;
7
+ }) => Promise<Result<PanoraSwapResponse, SwapErrorRight>>;
@@ -0,0 +1,11 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { getPanoraRequestError } from './helpers.js';
3
+ import { panoraService } from './panoraService.js';
4
+ export const fetchPanoraSwap = async ({ request, apiKey, }) => {
5
+ const maybeResponse = await panoraService.post('/swap', request, {
6
+ headers: { 'x-api-key': apiKey },
7
+ });
8
+ if (maybeResponse.isErr())
9
+ return Err(getPanoraRequestError(maybeResponse.unwrapErr()));
10
+ return Ok(maybeResponse.unwrap().data);
11
+ };
@@ -0,0 +1,19 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types.js';
3
+ export type GetPanoraStepDataArgs = StepDataArgs<{
4
+ payload: string;
5
+ }>;
6
+ type PanoraRateStepData = {
7
+ networkFeeCryptoBaseUnit: string;
8
+ };
9
+ type PanoraQuoteStepData = {
10
+ transactionData: TxBuildData;
11
+ networkFeeCryptoBaseUnit: string;
12
+ };
13
+ export declare function getPanoraStepData(args: Extract<GetPanoraStepDataArgs, {
14
+ type: 'rate';
15
+ }>): Promise<Result<PanoraRateStepData, SwapErrorRight>>;
16
+ export declare function getPanoraStepData(args: Extract<GetPanoraStepDataArgs, {
17
+ type: 'quote';
18
+ }>): Promise<Result<PanoraQuoteStepData, SwapErrorRight>>;
19
+ export {};
@@ -0,0 +1,37 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { makeNetworkFeeEstimationFailedErr } from '../../../utils/index.js';
3
+ import { getAptosNetworkFeeCryptoBaseUnit } from '../../../utils/aptos/index.js';
4
+ import { PANORA_FALLBACK_NETWORK_FEE_CRYPTO_BASE_UNIT } from './constants.js';
5
+ export async function getPanoraStepData(args) {
6
+ const { sellAsset, payload, from, deps } = args;
7
+ const adapter = deps.assertGetAptosChainAdapter(sellAsset.chainId);
8
+ if (args.type === 'rate') {
9
+ const networkFeeCryptoBaseUnit = from
10
+ ? await getAptosNetworkFeeCryptoBaseUnit({ adapter, from, payload })
11
+ .then(({ networkFeeCryptoBaseUnit }) => networkFeeCryptoBaseUnit)
12
+ .catch(() => PANORA_FALLBACK_NETWORK_FEE_CRYPTO_BASE_UNIT)
13
+ : PANORA_FALLBACK_NETWORK_FEE_CRYPTO_BASE_UNIT;
14
+ const stepData = { networkFeeCryptoBaseUnit };
15
+ return Ok(stepData);
16
+ }
17
+ try {
18
+ const { networkFeeCryptoBaseUnit, feeData } = await getAptosNetworkFeeCryptoBaseUnit({
19
+ adapter,
20
+ from: args.from,
21
+ payload,
22
+ });
23
+ const stepData = {
24
+ transactionData: {
25
+ type: 'aptos',
26
+ payload,
27
+ gasUnitPrice: feeData.chainSpecific.gasUnitPrice,
28
+ maxGasAmount: feeData.chainSpecific.maxGasAmount,
29
+ },
30
+ networkFeeCryptoBaseUnit,
31
+ };
32
+ return Ok(stepData);
33
+ }
34
+ catch (error) {
35
+ return Err(makeNetworkFeeEstimationFailedErr('getPanoraStepData', error));
36
+ }
37
+ }
@@ -0,0 +1,17 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { QuoteFeeData, SwapErrorRight, SwapperDeps, TradeCommon, TradeStepCommon } from '../../../types.js';
3
+ import type { PanoraTradeQuoteInput, PanoraTradeRateInput } from '../types.js';
4
+ import type { GetPanoraStepDataArgs } from './getPanoraStepData.js';
5
+ type PanoraTradeContext = {
6
+ tradeCommon: TradeCommon & {
7
+ slippageTolerancePercentageDecimal: string;
8
+ };
9
+ stepCommon: Omit<TradeStepCommon, 'feeData'>;
10
+ protocolFees: QuoteFeeData['protocolFees'];
11
+ stepDataArgs: Omit<GetPanoraStepDataArgs, 'type' | 'input' | 'from'>;
12
+ };
13
+ export declare const getPanoraTradeContext: ({ input, deps, }: {
14
+ input: PanoraTradeQuoteInput | PanoraTradeRateInput;
15
+ deps: SwapperDeps;
16
+ }) => Promise<Result<PanoraTradeContext, SwapErrorRight>>;
17
+ export {};
@@ -0,0 +1,59 @@
1
+ import { bnOrZero, fromBaseUnit } from '@shapeshiftoss/utils';
2
+ import { Err, Ok } from '@sniptt/monads';
3
+ import { v4 as uuid } from 'uuid';
4
+ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
5
+ import { SwapperName } from '../../../types.js';
6
+ import { APTOS_PLACEHOLDER_ADDRESS } from '../../../utils/aptos/index.js';
7
+ import { fetchPanoraSwap } from './fetchFromPanora.js';
8
+ import { assertValidTrade, assetIdToPanoraToken, getPanoraFeeParams, getPanoraTradeAmounts, validatePanoraSwap, } from './helpers.js';
9
+ export const getPanoraTradeContext = async ({ input, deps, }) => {
10
+ const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, sendAddress, receiveAddress, affiliateBps, } = input;
11
+ const maybeValidTrade = assertValidTrade({ sellAsset, buyAsset });
12
+ if (maybeValidTrade.isErr())
13
+ return Err(maybeValidTrade.unwrapErr());
14
+ const slippageTolerancePercentageDecimal = input.slippageTolerancePercentageDecimal ??
15
+ getDefaultSlippageDecimalPercentageForSwapper(SwapperName.Panora);
16
+ const maybeResponse = await fetchPanoraSwap({
17
+ request: {
18
+ fromTokenAddress: assetIdToPanoraToken(sellAsset.assetId),
19
+ toTokenAddress: assetIdToPanoraToken(buyAsset.assetId),
20
+ fromTokenAmount: fromBaseUnit(sellAmountIncludingProtocolFeesCryptoBaseUnit, sellAsset.precision),
21
+ // The router pays out to toWalletAddress, which a walletless rate has to fill with a placeholder
22
+ toWalletAddress: receiveAddress ?? sendAddress ?? APTOS_PLACEHOLDER_ADDRESS,
23
+ slippagePercentage: bnOrZero(slippageTolerancePercentageDecimal).times(100).toNumber(),
24
+ ...getPanoraFeeParams(affiliateBps),
25
+ },
26
+ apiKey: deps.config.VITE_PANORA_API_KEY,
27
+ });
28
+ if (maybeResponse.isErr())
29
+ return Err(maybeResponse.unwrapErr());
30
+ const maybeSwap = validatePanoraSwap({
31
+ response: maybeResponse.unwrap(),
32
+ sellAsset,
33
+ buyAsset,
34
+ });
35
+ if (maybeSwap.isErr())
36
+ return Err(maybeSwap.unwrapErr());
37
+ const { quote, payload } = maybeSwap.unwrap();
38
+ const tradeAmounts = getPanoraTradeAmounts({ input, quote });
39
+ return Ok({
40
+ tradeCommon: {
41
+ id: uuid(),
42
+ rate: tradeAmounts.rate,
43
+ swapperName: SwapperName.Panora,
44
+ affiliateBps,
45
+ slippageTolerancePercentageDecimal,
46
+ },
47
+ stepCommon: {
48
+ estimatedExecutionTimeMs: undefined,
49
+ allowanceContract: '',
50
+ sellAsset,
51
+ buyAsset,
52
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
53
+ ...tradeAmounts,
54
+ source: SwapperName.Panora,
55
+ },
56
+ protocolFees: {},
57
+ stepDataArgs: { deps, sellAsset, payload },
58
+ });
59
+ };
@@ -0,0 +1,25 @@
1
+ import type { AssetId } from '@shapeshiftoss/caip';
2
+ import type { Asset } from '@shapeshiftoss/types';
3
+ import type { Result } from '@sniptt/monads';
4
+ import type { SwapErrorRight, TradeStepCommon } from '../../../types.js';
5
+ import type { PanoraQuote, PanoraSwapRequest, PanoraSwapResponse, PanoraTradeQuoteInput, PanoraTradeRateInput } from '../types.js';
6
+ export declare const assertValidTrade: ({ sellAsset, buyAsset, }: {
7
+ sellAsset: Asset;
8
+ buyAsset: Asset;
9
+ }) => Result<true, SwapErrorRight>;
10
+ export declare const assetIdToPanoraToken: (assetId: AssetId) => string;
11
+ export declare const getPanoraFeeParams: (affiliateBps: string) => Pick<PanoraSwapRequest, 'integratorFeePercentage' | 'integratorFeeAddress'>;
12
+ export declare const getPanoraRequestError: (error: SwapErrorRight) => SwapErrorRight;
13
+ export type ValidatedPanoraSwap = {
14
+ quote: PanoraQuote;
15
+ payload: string;
16
+ };
17
+ export declare const validatePanoraSwap: ({ response, sellAsset, buyAsset, }: {
18
+ response: PanoraSwapResponse;
19
+ sellAsset: Asset;
20
+ buyAsset: Asset;
21
+ }) => Result<ValidatedPanoraSwap, SwapErrorRight>;
22
+ export declare const getPanoraTradeAmounts: ({ input, quote, }: {
23
+ input: PanoraTradeQuoteInput | PanoraTradeRateInput;
24
+ quote: PanoraQuote;
25
+ }) => Pick<TradeStepCommon, 'rate' | 'buyAmountBeforeFeesCryptoBaseUnit' | 'buyAmountAfterFeesCryptoBaseUnit' | 'affiliateFee'>;