@rabbitio/ui-kit 1.0.0-beta.72 → 1.0.0-beta.74

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 (253) hide show
  1. package/coverage/clover.xml +6441 -1864
  2. package/coverage/coverage-final.json +157 -95
  3. package/coverage/index.html +339 -84
  4. package/coverage/{rabbit-ui-kit → ui-kit}/index.html +3 -3
  5. package/coverage/{rabbit-ui-kit → ui-kit}/index.js.html +3 -3
  6. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/axiosAdapter.js.html +3 -3
  7. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/index.html +3 -3
  8. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/qrUtils.js.html +3 -3
  9. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/amountUtils.js.html +3 -3
  10. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/errorUtils.js.html +3 -3
  11. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/apiGroups.js.html +3 -3
  12. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/index.html +3 -3
  13. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/ipAddressProviders.js.html +3 -3
  14. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/fiatCurrenciesService.js.html +3 -3
  15. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/globalConstants.jsx.html +3 -3
  16. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/index.html +3 -3
  17. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/blockchain.js.html +3 -3
  18. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/coin.js.html +3 -3
  19. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/index.html +3 -3
  20. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/protocol.js.html +3 -3
  21. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/cache.js.html +8 -8
  22. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/emailAPI.js.html +3 -3
  23. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/index.html +3 -3
  24. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/index.html +3 -3
  25. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/logger.js.html +3 -3
  26. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/logsStorage.js.html +3 -3
  27. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/postponeExecution.js.html +3 -3
  28. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/safeStringify.js.html +3 -3
  29. package/coverage/{rabbit-ui-kit → ui-kit}/src/index.html +3 -3
  30. package/coverage/{rabbit-ui-kit → ui-kit}/src/index.js.html +3 -3
  31. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js.html +3 -3
  32. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cachedRobustExternalApiCallerService.js.html +3 -3
  33. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cancelProcessing.js.html +3 -3
  34. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/concurrentCalculationsMetadataHolder.js.html +3 -3
  35. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/externalApiProvider.js.html +3 -3
  36. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/externalServicesStatsCollector.js.html +3 -3
  37. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/index.html +3 -3
  38. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/robustExternalAPICallerService.js.html +3 -3
  39. package/coverage/ui-kit/src/swaps-lib/external-apis/index.html +146 -0
  40. package/coverage/ui-kit/src/swaps-lib/external-apis/letsExchangeSwapProvider.js.html +1456 -0
  41. package/coverage/ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +1390 -0
  42. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/external-apis/swapspaceSwapProvider.js.html +45 -585
  43. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/baseSwapCreationInfo.js.html +3 -3
  44. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/existingSwap.js.html +3 -3
  45. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/existingSwapWithFiatData.js.html +3 -3
  46. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/index.html +3 -3
  47. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/services/index.html +7 -7
  48. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/services/publicSwapService.js.html +233 -50
  49. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/utils/index.html +13 -13
  50. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/utils/swapUtils.js.html +121 -46
  51. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowIcon.jsx.html +3 -3
  52. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowTosca.jsx.html +3 -3
  53. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowWhite.jsx.html +3 -3
  54. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/darkRectangle.jsx.html +3 -3
  55. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/determinedError.jsx.html +3 -3
  56. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx.html +3 -3
  57. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/index.html +3 -3
  58. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/infoIcon.jsx.html +3 -3
  59. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx.html +3 -3
  60. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx.html +3 -3
  61. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/walletIcon.jsx.html +3 -3
  62. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetIcon/AssetIcon.jsx.html +3 -3
  63. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetIcon/index.html +3 -3
  64. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx.html +3 -3
  65. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetSelection/index.html +3 -3
  66. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx.html +3 -3
  67. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/BackgroundTitle/index.html +3 -3
  68. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx.html +3 -3
  69. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/InformationMessage/index.html +3 -3
  70. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Input/Input.jsx.html +3 -3
  71. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Input/index.html +3 -3
  72. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/LoadingDots/LoadingDots.jsx.html +3 -3
  73. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/LoadingDots/index.html +3 -3
  74. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx.html +3 -3
  75. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/NoticeIcon/index.html +3 -3
  76. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/QrCode/QrCode.jsx.html +52 -7
  77. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/QrCode/index.html +7 -7
  78. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx.html +3 -3
  79. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/RateSelector/index.html +3 -3
  80. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/SupportChat/SupportChat.jsx.html +3 -3
  81. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/SupportChat/index.html +3 -3
  82. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Textarea/Textarea.jsx.html +3 -3
  83. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Textarea/index.html +3 -3
  84. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx.html +3 -3
  85. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TitleBox/index.html +3 -3
  86. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx.html +3 -3
  87. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Tooltip/index.html +3 -3
  88. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx.html +3 -3
  89. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TwoLinesOfText/index.html +3 -3
  90. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Validation/Validation.jsx.html +3 -3
  91. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Validation/index.html +3 -3
  92. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Button/Button.jsx.html +3 -3
  93. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Button/index.html +3 -3
  94. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Close/Close.jsx.html +3 -3
  95. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Close/index.html +3 -3
  96. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx.html +3 -3
  97. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/LinkButton/index.html +3 -3
  98. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx.html +3 -3
  99. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/RadioButtonWithText/index.html +3 -3
  100. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx.html +3 -3
  101. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/AmountInput/index.html +3 -3
  102. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx.html +3 -3
  103. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/CoinPicker/index.html +3 -3
  104. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx.html +3 -3
  105. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/LineWithIconLink/index.html +3 -3
  106. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx.html +3 -3
  107. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/TitledLineWithIconLink/index.html +3 -3
  108. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx.html +3 -3
  109. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/CoinPickerDialogStep/index.html +3 -3
  110. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/Dialog.jsx.html +3 -3
  111. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx.html +3 -3
  112. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogButtons/index.html +3 -3
  113. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx.html +3 -3
  114. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogStep/index.html +3 -3
  115. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/index.html +3 -3
  116. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx.html +171 -39
  117. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/SwapForm/index.html +7 -7
  118. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx.html +3 -3
  119. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/templates/DeterminedErrorDialogStep/index.html +3 -3
  120. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/index.html +3 -3
  121. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useCallHandlingErrors.js.html +3 -3
  122. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useIsHydrated.js.html +3 -3
  123. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useReferredState.js.html +3 -3
  124. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/index.html +3 -3
  125. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/inputValueProviders.js.html +3 -3
  126. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/textUtils.js.html +3 -3
  127. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/uiUtils.js.html +3 -3
  128. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/urlQueryUtils.js.html +3 -3
  129. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/BackgroundTitle.stories.jsx.html +3 -3
  130. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/LinesOfText.stories.jsx.html +3 -3
  131. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/LoadingDots.stories.jsx.html +3 -3
  132. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/QrCode.stories.jsx.html +3 -3
  133. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/RateSelector.stories.jsx.html +3 -3
  134. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/Validation.stories.jsx.html +3 -3
  135. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/Button.stories.jsx.html +3 -3
  136. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/Close.stories.jsx.html +3 -3
  137. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/LinkButton.stories.jsx.html +3 -3
  138. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/index.html +3 -3
  139. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/index.html +3 -3
  140. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/LineWithIconLink.stories.jsx.html +3 -3
  141. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/TitledLineWithIconLink.stories.jsx.html +3 -3
  142. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/index.html +3 -3
  143. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/Dialog.stories.jsx.html +3 -3
  144. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogButtons/DialogButtons.stories.jsx.html +3 -3
  145. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogButtons/index.html +3 -3
  146. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogStep/DialogStep.stories.jsx.html +3 -3
  147. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogStep/index.html +3 -3
  148. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/index.html +3 -3
  149. package/coverage/{rabbit-ui-kit → ui-kit}/stories/stubs/exampleContent.jsx.html +3 -3
  150. package/coverage/{rabbit-ui-kit → ui-kit}/stories/stubs/index.html +3 -3
  151. package/coverage/{rabbit-ui-kit → ui-kit}/stories/templates/DeterminedErrorDialogStep.stories.jsx.html +3 -3
  152. package/coverage/{rabbit-ui-kit → ui-kit}/stories/templates/index.html +3 -3
  153. package/coverage/ui-kit/storybook-static/124.c2d01e5e.iframe.bundle.js.html +85 -0
  154. package/coverage/ui-kit/storybook-static/138.56b7edc4.iframe.bundle.js.html +85 -0
  155. package/coverage/ui-kit/storybook-static/312.6f62bbd9.iframe.bundle.js.html +85 -0
  156. package/coverage/ui-kit/storybook-static/341.57a15f57.iframe.bundle.js.html +85 -0
  157. package/coverage/ui-kit/storybook-static/370.73bb343e.iframe.bundle.js.html +85 -0
  158. package/coverage/ui-kit/storybook-static/595.2e40d981.iframe.bundle.js.html +85 -0
  159. package/coverage/ui-kit/storybook-static/607.3ea32459.iframe.bundle.js.html +85 -0
  160. package/coverage/ui-kit/storybook-static/609.8c79ec77.iframe.bundle.js.html +85 -0
  161. package/coverage/ui-kit/storybook-static/666.09fdc1d7.iframe.bundle.js.html +85 -0
  162. package/coverage/ui-kit/storybook-static/797.c87cdf19.iframe.bundle.js.html +85 -0
  163. package/coverage/ui-kit/storybook-static/822.4bc0ebce.iframe.bundle.js.html +85 -0
  164. package/coverage/ui-kit/storybook-static/833.08e3ebb6.iframe.bundle.js.html +85 -0
  165. package/coverage/ui-kit/storybook-static/862.bf6bfe62.iframe.bundle.js.html +85 -0
  166. package/coverage/ui-kit/storybook-static/87.0a1bfeb1.iframe.bundle.js.html +85 -0
  167. package/coverage/ui-kit/storybook-static/893.4b09f929.iframe.bundle.js.html +85 -0
  168. package/coverage/ui-kit/storybook-static/996.846a677b.iframe.bundle.js.html +85 -0
  169. package/coverage/ui-kit/storybook-static/atoms-BackgroundTitle-stories.1a5386a1.iframe.bundle.js.html +85 -0
  170. package/coverage/ui-kit/storybook-static/atoms-LinesOfText-stories.7043a48b.iframe.bundle.js.html +85 -0
  171. package/coverage/ui-kit/storybook-static/atoms-LoadingDots-stories.091245c7.iframe.bundle.js.html +85 -0
  172. package/coverage/ui-kit/storybook-static/atoms-QrCode-stories.e10363b6.iframe.bundle.js.html +85 -0
  173. package/coverage/ui-kit/storybook-static/atoms-RateSelector-stories.af208e9a.iframe.bundle.js.html +85 -0
  174. package/coverage/ui-kit/storybook-static/atoms-Validation-stories.d561b311.iframe.bundle.js.html +85 -0
  175. package/coverage/ui-kit/storybook-static/atoms-buttons-Button-stories.e8e6b930.iframe.bundle.js.html +85 -0
  176. package/coverage/ui-kit/storybook-static/atoms-buttons-Close-stories.0a902a7c.iframe.bundle.js.html +85 -0
  177. package/coverage/ui-kit/storybook-static/atoms-buttons-LinkButton-stories.ca93ab6b.iframe.bundle.js.html +85 -0
  178. package/coverage/ui-kit/storybook-static/index.html +596 -0
  179. package/coverage/ui-kit/storybook-static/main.41f410f2.iframe.bundle.js.html +85 -0
  180. package/coverage/ui-kit/storybook-static/molecules-LineWithIconLink-stories.9721a18c.iframe.bundle.js.html +85 -0
  181. package/coverage/ui-kit/storybook-static/molecules-TitledLineWithIconLink-stories.1383fe3f.iframe.bundle.js.html +85 -0
  182. package/coverage/ui-kit/storybook-static/organisms-Dialog-Dialog-stories.4e6da717.iframe.bundle.js.html +85 -0
  183. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogButtons-DialogButtons-stories.6f45ae6e.iframe.bundle.js.html +85 -0
  184. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogStep-DialogStep-stories.74896048.iframe.bundle.js.html +85 -0
  185. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/index.html +116 -0
  186. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/preview.js.html +118 -0
  187. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/formatter-SWP5E3XI.mjs.html +118 -0
  188. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/index.html +116 -0
  189. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.html +116 -0
  190. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.js.html +118 -0
  191. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.html +116 -0
  192. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.modern.js.html +118 -0
  193. package/coverage/ui-kit/storybook-static/runtime~main.ad918f38.iframe.bundle.js.html +85 -0
  194. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/index.html +116 -0
  195. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/manager-bundle.js.html +94 -0
  196. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/index.html +116 -0
  197. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/manager-bundle.js.html +121 -0
  198. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/index.html +116 -0
  199. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js.html +274 -0
  200. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/index.html +116 -0
  201. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/manager-bundle.js.html +94 -0
  202. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/index.html +116 -0
  203. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/manager-bundle.js.html +94 -0
  204. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/index.html +116 -0
  205. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/manager-bundle.js.html +94 -0
  206. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/index.html +116 -0
  207. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/manager-bundle.js.html +121 -0
  208. package/coverage/ui-kit/storybook-static/sb-addons/links-0/index.html +116 -0
  209. package/coverage/ui-kit/storybook-static/sb-addons/links-0/manager-bundle.js.html +94 -0
  210. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/index.html +116 -0
  211. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/manager-bundle.js.html +1588 -0
  212. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/index.html +116 -0
  213. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/manager-bundle.js.html +94 -0
  214. package/coverage/ui-kit/storybook-static/sb-manager/WithTooltip-V3YHNWJZ-LVYLGZW2.js.html +88 -0
  215. package/coverage/ui-kit/storybook-static/sb-manager/chunk-2IXBUOFS.js.html +106 -0
  216. package/coverage/ui-kit/storybook-static/sb-manager/chunk-INSKDKQB.js.html +1129 -0
  217. package/coverage/ui-kit/storybook-static/sb-manager/chunk-NGTUFCUO.js.html +112 -0
  218. package/coverage/ui-kit/storybook-static/sb-manager/chunk-UUEAOBSN.js.html +1303 -0
  219. package/coverage/ui-kit/storybook-static/sb-manager/chunk-ZEU7PDD3.js.html +88 -0
  220. package/coverage/ui-kit/storybook-static/sb-manager/formatter-SWP5E3XI-7BGIK6BL.js.html +553 -0
  221. package/coverage/ui-kit/storybook-static/sb-manager/globals-module-info.js.html +88 -0
  222. package/coverage/ui-kit/storybook-static/sb-manager/globals.js.html +88 -0
  223. package/coverage/ui-kit/storybook-static/sb-manager/index.html +281 -0
  224. package/coverage/ui-kit/storybook-static/sb-manager/index.js.html +88 -0
  225. package/coverage/ui-kit/storybook-static/sb-manager/runtime.js.html +88 -0
  226. package/coverage/ui-kit/storybook-static/sb-manager/syntaxhighlighter-V7JZZA35-DXZCI2WR.js.html +88 -0
  227. package/coverage/ui-kit/storybook-static/sb-preview/globals.js.html +88 -0
  228. package/coverage/ui-kit/storybook-static/sb-preview/index.html +131 -0
  229. package/coverage/ui-kit/storybook-static/sb-preview/runtime.js.html +421 -0
  230. package/coverage/ui-kit/storybook-static/templates-DeterminedErrorDialogStep-stories.3cc14214.iframe.bundle.js.html +85 -0
  231. package/dist/index.cjs +1201 -605
  232. package/dist/index.cjs.map +1 -1
  233. package/dist/index.css +1 -1
  234. package/dist/index.css.map +1 -1
  235. package/dist/index.modern.js +786 -330
  236. package/dist/index.modern.js.map +1 -1
  237. package/dist/index.module.js +1201 -605
  238. package/dist/index.module.js.map +1 -1
  239. package/dist/index.umd.js +1201 -605
  240. package/dist/index.umd.js.map +1 -1
  241. package/package.json +1 -1
  242. package/src/swaps-lib/external-apis/letsExchangeSwapProvider.js +457 -0
  243. package/src/swaps-lib/external-apis/swapProvider.js +246 -20
  244. package/src/swaps-lib/external-apis/swapspaceSwapProvider.js +20 -200
  245. package/src/swaps-lib/services/publicSwapService.js +105 -44
  246. package/src/swaps-lib/test/external-apis/swapProvider/removeProtocolNameFromCoinName.test.js +142 -0
  247. package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +2 -2
  248. package/src/swaps-lib/utils/swapUtils.js +63 -38
  249. package/src/ui-kit/components/atoms/QrCode/QrCode.jsx +16 -1
  250. package/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx +77 -33
  251. package/src/ui-kit/components/organisms/SwapForm/swap-form.module.scss +1 -1
  252. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/index.html +0 -131
  253. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +0 -712
@@ -1642,7 +1642,7 @@ var Logger = /*#__PURE__*/function () {
1642
1642
  return Logger;
1643
1643
  }();
1644
1644
 
1645
- function _catch$d(body, recover) {
1645
+ function _catch$f(body, recover) {
1646
1646
  try {
1647
1647
  var result = body();
1648
1648
  } catch (e) {
@@ -1658,7 +1658,7 @@ function useCallHandlingErrors() {
1658
1658
  setState = _useState[1];
1659
1659
  return useCallback(function (functionToBeCalled, event) {
1660
1660
  try {
1661
- var _temp = _catch$d(function () {
1661
+ var _temp = _catch$f(function () {
1662
1662
  return Promise.resolve(functionToBeCalled(event)).then(function () {});
1663
1663
  }, function (error) {
1664
1664
  Logger.logError(error, (functionToBeCalled == null ? void 0 : functionToBeCalled.name) || "errorBoundaryTrigger", "Caught by ErrorBoundary");
@@ -4596,6 +4596,15 @@ function useIsHydrated() {
4596
4596
  * @return {string|null}
4597
4597
  */
4598
4598
 
4599
+ /**
4600
+ * Callback to handle isFixed flag change.
4601
+ *
4602
+ * @function
4603
+ * @name onIsFixedChange
4604
+ * @param {boolean} isFixedNewValue - new value
4605
+ * @return {void}
4606
+ */
4607
+
4599
4608
  /**
4600
4609
  * Function validating addresses.
4601
4610
  * By default, will treat any addresses as valid.
@@ -4605,6 +4614,7 @@ function useIsHydrated() {
4605
4614
  * @name validateAddressByTicker
4606
4615
  * @param {string} ticker - Ticker symbol of the asset.
4607
4616
  * @param {string} address - Address to be validated
4617
+ * @param {boolean} isFixed - Is swap rate mode = fixed
4608
4618
  * @return {Promise<boolean>}
4609
4619
  */
4610
4620
 
@@ -4652,16 +4662,18 @@ function useIsHydrated() {
4652
4662
  * @param {boolean} [props.formHasFiat] - Indicates if the form supports fiat currency.
4653
4663
  * @param {string|null} [props.termsOfUseUrl] - Terms of use URL, shown only if both terms & privacy policy passed.
4654
4664
  * @param {string|null} [props.privacyPolicyUrl] - Privacy policy of use URL, shown only if both terms & privacy policy passed.
4665
+ * @param {string} props.recipientAddressExtraIdName - Extra ID name for the recipient address.
4666
+ * @param {string} props.refundAddressExtraIdName - Extra ID name for the refund address.
4655
4667
  * @param {object} [props.translations] - Object containing translations, default English texts will be used if omitted.
4656
4668
  * @param {string} props.swapSeparatorIconSrc - Source URL for the swap separator icon.
4657
4669
  * @param {boolean} props.swapButtonAlwaysActive - Setting that allows the form state to proceed to the next step regardless of validity.
4658
- * @param {getExtraIdNameByTicker} props.getExtraIdNameByTicker - Function returning extraId name for asset
4659
4670
  * @param {validateAddressByTicker} [props.validateAddressByTicker] - Function validating address
4671
+ * @param {onIsFixedChange} [props.onIsFixedChange] - callback for changed isFixed
4660
4672
  * @return {JSX.Element} Rendered SwapForm component.
4661
4673
  * @constructor
4662
4674
  */
4663
4675
 
4664
- function _catch$c(body, recover) {
4676
+ function _catch$e(body, recover) {
4665
4677
  try {
4666
4678
  var result = body();
4667
4679
  } catch (e) {
@@ -4673,7 +4685,7 @@ function _catch$c(body, recover) {
4673
4685
  return result;
4674
4686
  }
4675
4687
  var SwapForm = function SwapForm(_ref) {
4676
- var _isFixedRate$current2, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5, _isFixedRate$current3;
4688
+ var _isFixedRate$current2, _isFixedRate$current3, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5;
4677
4689
  var sendingAssetTicker = _ref.sendingAssetTicker,
4678
4690
  receivingAssetTicker = _ref.receivingAssetTicker,
4679
4691
  _ref$sendingAssetDeci = _ref.sendingAssetDecimalCount,
@@ -4716,7 +4728,7 @@ var SwapForm = function SwapForm(_ref) {
4716
4728
  _ref$formHasBalance = _ref.formHasBalance,
4717
4729
  formHasBalance = _ref$formHasBalance === void 0 ? false : _ref$formHasBalance,
4718
4730
  _ref$retrieveSwapDeta = _ref.retrieveSwapDetails,
4719
- retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll) {
4731
+ retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll, editedLastInput) {
4720
4732
  return Promise.resolve();
4721
4733
  } : _ref$retrieveSwapDeta,
4722
4734
  _ref$retrieveInitialS = _ref.retrieveInitialSwapData,
@@ -4743,17 +4755,17 @@ var SwapForm = function SwapForm(_ref) {
4743
4755
  termsOfUseUrl = _ref$termsOfUseUrl === void 0 ? null : _ref$termsOfUseUrl,
4744
4756
  _ref$privacyPolicyUrl = _ref.privacyPolicyUrl,
4745
4757
  privacyPolicyUrl = _ref$privacyPolicyUrl === void 0 ? null : _ref$privacyPolicyUrl,
4746
- _ref$getExtraIdNameBy = _ref.getExtraIdNameByTicker,
4747
- getExtraIdNameByTicker = _ref$getExtraIdNameBy === void 0 ? function (ticker) {
4748
- return null;
4749
- } : _ref$getExtraIdNameBy,
4750
4758
  _ref$validateAddressB = _ref.validateAddressByTicker,
4751
- validateAddressByTicker = _ref$validateAddressB === void 0 ? function (ticker) {
4759
+ validateAddressByTicker = _ref$validateAddressB === void 0 ? function () {
4752
4760
  return false;
4753
4761
  } : _ref$validateAddressB,
4754
4762
  swapSeparatorIconSrc = _ref.swapSeparatorIconSrc,
4755
4763
  _ref$swapButtonAlways = _ref.swapButtonAlwaysActive,
4756
4764
  swapButtonAlwaysActive = _ref$swapButtonAlways === void 0 ? false : _ref$swapButtonAlways,
4765
+ _ref$onIsFixedChange = _ref.onIsFixedChange,
4766
+ onIsFixedChange = _ref$onIsFixedChange === void 0 ? function () {} : _ref$onIsFixedChange,
4767
+ recipientAddressExtraIdName = _ref.recipientAddressExtraIdName,
4768
+ refundAddressExtraIdName = _ref.refundAddressExtraIdName,
4757
4769
  _ref$translations = _ref.translations,
4758
4770
  translations = _ref$translations === void 0 ? {
4759
4771
  swapAllButtonTitles: {
@@ -4784,7 +4796,9 @@ var SwapForm = function SwapForm(_ref) {
4784
4796
  addressTitle: "Recepient address",
4785
4797
  refundAddressTitle: "Refund address",
4786
4798
  extraIdPlaceholder: "(optional)",
4799
+ refundAddressExtraIdTitle: "Refund extra ID (MEMO):",
4787
4800
  refundAddressExtraIdNotice: "Please check if your address requires additional identifier (sometimes called a Memo, Destination Tag, Tag, ID, Label or Note). Including this identifier is crucial when required, as omitting or misentering it can result in lost assets.",
4801
+ receivingAddressExtraIdTitle: "Destination extra ID (MEMO):",
4788
4802
  receivingAddressExtraIdNotice: "Please check if your address requires additional identifier (sometimes called a Memo, Destination Tag, Tag, ID, Label or Note). Including this identifier is crucial when required, as omitting or misentering it can result in lost assets."
4789
4803
  },
4790
4804
  rateSelector: {
@@ -4806,15 +4820,18 @@ var SwapForm = function SwapForm(_ref) {
4806
4820
  var _useReferredState = useReferredState(preservedAmount == null || preservedAmount === "" ? null : preservedAmount),
4807
4821
  sendAssetAmount = _useReferredState[0],
4808
4822
  setSendAssetAmount = _useReferredState[1];
4823
+ var _useReferredState2 = useReferredState(null),
4824
+ receiveAssetAmount = _useReferredState2[0],
4825
+ setReceiveAssetAmount = _useReferredState2[1];
4809
4826
  var _useState3 = useState(),
4810
4827
  swapRate = _useState3[0],
4811
4828
  setSwapRate = _useState3[1];
4812
- var _useReferredState2 = useReferredState(null),
4813
- minimalAmount = _useReferredState2[0],
4814
- setMinimalAmount = _useReferredState2[1];
4815
4829
  var _useReferredState3 = useReferredState(null),
4816
- maximumAmount = _useReferredState3[0],
4817
- setMaximumAmount = _useReferredState3[1];
4830
+ minimalAmount = _useReferredState3[0],
4831
+ setMinimalAmount = _useReferredState3[1];
4832
+ var _useReferredState4 = useReferredState(null),
4833
+ maximumAmount = _useReferredState4[0],
4834
+ setMaximumAmount = _useReferredState4[1];
4818
4835
  var _useState4 = useState(),
4819
4836
  validationContent = _useState4[0],
4820
4837
  setValidationContent = _useState4[1];
@@ -4841,70 +4858,76 @@ var SwapForm = function SwapForm(_ref) {
4841
4858
  var _useState11 = useState(preservedAmount == null || String(preservedAmount) === "0"),
4842
4859
  isAmountZero = _useState11[0],
4843
4860
  setIsAmountZero = _useState11[1];
4844
- var _useReferredState4 = useReferredState(false),
4845
- isLoading = _useReferredState4[0],
4846
- setIsLoading = _useReferredState4[1]; // Whether the form is in the progress of loading some data (new rates, for example)
4847
- var _useReferredState5 = useReferredState(null),
4848
- isFixedRate = _useReferredState5[0],
4849
- setIsFixedRate = _useReferredState5[1];
4850
- var _useState12 = useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4851
- confirmButtonTo = _useState12[0],
4852
- setConfirmButtonTo = _useState12[1];
4853
- var _useState13 = useState(),
4854
- transactionFee = _useState13[0],
4855
- setTransactionFee = _useState13[1];
4856
- var _useState14 = useState(true),
4857
- balanceValid = _useState14[0],
4858
- setBalanceValid = _useState14[1]; // Whether the amount is less than total balance
4861
+ var _useReferredState5 = useReferredState(false),
4862
+ isLoading = _useReferredState5[0],
4863
+ setIsLoading = _useReferredState5[1]; // Whether the form is in the progress of loading some data (new rates, for example)
4859
4864
  var _useReferredState6 = useReferredState(null),
4860
- isSwapAll = _useReferredState6[0],
4861
- setIsSwapAll = _useReferredState6[1];
4862
- var _useState15 = useState([]),
4863
- swapAllButtonLoaderReSetter = _useState15[0],
4864
- setSwapAllButtonLoaderReSetter = _useState15[1];
4865
+ isFixedRate = _useReferredState6[0],
4866
+ setIsFixedRate = _useReferredState6[1];
4867
+ var _useState12 = useState(false),
4868
+ isLastEditedReceiving = _useState12[0],
4869
+ setIsLastEditedReceiving = _useState12[1];
4870
+ var _useState13 = useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4871
+ confirmButtonTo = _useState13[0],
4872
+ setConfirmButtonTo = _useState13[1];
4873
+ var _useState14 = useState(),
4874
+ transactionFee = _useState14[0],
4875
+ setTransactionFee = _useState14[1];
4876
+ var _useState15 = useState(true),
4877
+ balanceValid = _useState15[0],
4878
+ setBalanceValid = _useState15[1]; // Whether the amount is less than total balance
4865
4879
  var _useReferredState7 = useReferredState(null),
4866
- dataUpdateTimeoutId = _useReferredState7[0],
4867
- setDataUpdateTimeoutId = _useReferredState7[1];
4880
+ isSwapAll = _useReferredState7[0],
4881
+ setIsSwapAll = _useReferredState7[1];
4882
+ var _useState16 = useState([]),
4883
+ swapAllButtonLoaderReSetter = _useState16[0],
4884
+ setSwapAllButtonLoaderReSetter = _useState16[1];
4868
4885
  var _useReferredState8 = useReferredState(null),
4869
- idleDataUpdateTimeoutId = _useReferredState8[0],
4870
- setIdleDataUpdateTimeoutId = _useReferredState8[1];
4871
- var _useReferredState9 = useReferredState(""),
4872
- recipientAddress = _useReferredState9[0],
4873
- setRecipientAddress = _useReferredState9[1];
4886
+ dataUpdateTimeoutId = _useReferredState8[0],
4887
+ setDataUpdateTimeoutId = _useReferredState8[1];
4888
+ var _useReferredState9 = useReferredState(null),
4889
+ idleDataUpdateTimeoutId = _useReferredState9[0],
4890
+ setIdleDataUpdateTimeoutId = _useReferredState9[1];
4874
4891
  var _useReferredState10 = useReferredState(""),
4875
- recipientAddressExtraId = _useReferredState10[0],
4876
- setRecipientAddressExtraId = _useReferredState10[1];
4877
- var _useReferredState11 = useReferredState(false),
4878
- isRecipientAddressValid = _useReferredState11[0],
4879
- setIsRecipientAddressValid = _useReferredState11[1];
4880
- var _useState16 = useState(false),
4881
- isRefundAddressRequired = _useState16[0],
4882
- setIsRefundAddressRequired = _useState16[1];
4883
- var _useReferredState12 = useReferredState(""),
4884
- refundAddress = _useReferredState12[0],
4885
- setRefundAddress = _useReferredState12[1];
4892
+ recipientAddress = _useReferredState10[0],
4893
+ setRecipientAddress = _useReferredState10[1];
4894
+ var _useReferredState11 = useReferredState(""),
4895
+ recipientAddressExtraId = _useReferredState11[0],
4896
+ setRecipientAddressExtraId = _useReferredState11[1];
4897
+ var _useReferredState12 = useReferredState(false),
4898
+ isRecipientAddressValid = _useReferredState12[0],
4899
+ setIsRecipientAddressValid = _useReferredState12[1];
4900
+ var _useState17 = useState(false),
4901
+ isRefundAddressRequired = _useState17[0],
4902
+ setIsRefundAddressRequired = _useState17[1];
4886
4903
  var _useReferredState13 = useReferredState(""),
4887
- refundAddressExtraId = _useReferredState13[0],
4888
- setRefundAddressExtraId = _useReferredState13[1];
4889
- var _useReferredState14 = useReferredState(false),
4890
- isRefundAddressValid = _useReferredState14[0],
4891
- setIsRefundAddressValid = _useReferredState14[1];
4904
+ refundAddress = _useReferredState13[0],
4905
+ setRefundAddress = _useReferredState13[1];
4906
+ var _useReferredState14 = useReferredState(""),
4907
+ refundAddressExtraId = _useReferredState14[0],
4908
+ setRefundAddressExtraId = _useReferredState14[1];
4909
+ var _useReferredState15 = useReferredState(false),
4910
+ isRefundAddressValid = _useReferredState15[0],
4911
+ setIsRefundAddressValid = _useReferredState15[1];
4892
4912
  var callHandlingErrors = useCallHandlingErrors();
4893
4913
  var isHydrated = useIsHydrated();
4894
4914
  var recalculationDelayOnTyping = 1000;
4895
4915
  var isAddressFieldEnabled = !formHasBalance;
4896
4916
  var displayRateSelector = !formHasBalance;
4897
- var recipientAddressExtraIdName = getExtraIdNameByTicker(receivingAssetTicker);
4898
- var refundAddressExtraIdName = getExtraIdNameByTicker(sendingAssetTicker);
4899
4917
  var handleSendAssetAmountChange = function handleSendAssetAmountChange(amount) {
4918
+ setIsLastEditedReceiving(false);
4919
+ var receiveAmount = AmountUtils.trim(BigNumber(amount).times(swapRate), receivingAssetDecimalCount);
4900
4920
  if (amount != null && amount !== "") {
4901
- setUpdateReceiveInputTo(AmountUtils.trim(BigNumber(amount).times(swapRate), receivingAssetDecimalCount));
4921
+ setReceiveAssetAmount(receiveAmount);
4922
+ setUpdateReceiveInputTo(receiveAmount);
4902
4923
  } else {
4903
4924
  setUpdateReceiveInputTo("");
4904
4925
  }
4905
4926
  setSendAssetAmount(amount);
4906
4927
  };
4907
4928
  var handleReceiveAssetAmountChange = function handleReceiveAssetAmountChange(amount) {
4929
+ setReceiveAssetAmount(amount);
4930
+ setIsLastEditedReceiving(true);
4908
4931
  var sendAssetAmount = "";
4909
4932
  if (amount != null && amount !== "") {
4910
4933
  sendAssetAmount = AmountUtils.trim(BigNumber(amount).div(swapRate), sendingAssetDecimalCount);
@@ -5005,7 +5028,7 @@ var SwapForm = function SwapForm(_ref) {
5005
5028
  }
5006
5029
  (function () {
5007
5030
  try {
5008
- return _catch$c(function () {
5031
+ return _catch$e(function () {
5009
5032
  var _minimalAmount$curren4, _maximumAmount$curren3, _isFixedRate$current;
5010
5033
  var dataMemento = {
5011
5034
  rate: swapRate,
@@ -5023,7 +5046,7 @@ var SwapForm = function SwapForm(_ref) {
5023
5046
  setIsSameCoins(false);
5024
5047
  setIsPairSupported(true);
5025
5048
  setIsSwapCalculated(false);
5026
- return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT)).then(function (response) {
5049
+ return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT, isFixedRate.current ? isLastEditedReceiving : false)).then(function (response) {
5027
5050
  if (!isSwapAll.current && String(amount) !== String(isForPreserved && sendAssetAmount.current == null ? preservedAmount : sendAssetAmount.current)) {
5028
5051
  // Means amount changed and we no more need to do this exact calculation
5029
5052
  return;
@@ -5071,7 +5094,7 @@ var SwapForm = function SwapForm(_ref) {
5071
5094
  }
5072
5095
  (function () {
5073
5096
  try {
5074
- return _catch$c(function () {
5097
+ return _catch$e(function () {
5075
5098
  setIsLoading(true);
5076
5099
  setMinimalAmount(null);
5077
5100
  setMaximumAmount(null);
@@ -5111,7 +5134,7 @@ var SwapForm = function SwapForm(_ref) {
5111
5134
  };
5112
5135
  var handleRateModeChanged = function handleRateModeChanged(isFixed) {
5113
5136
  setIsFixedRate(isFixed);
5114
- requestDataRefresh(sendAssetAmount.current, true);
5137
+ requestDataRefresh(isLastEditedReceiving ? receiveAssetAmount.current : sendAssetAmount.current, true);
5115
5138
  };
5116
5139
  useEffect(function () {
5117
5140
  if (isSwapAll.current === true) {
@@ -5121,6 +5144,10 @@ var SwapForm = function SwapForm(_ref) {
5121
5144
  }
5122
5145
  // eslint-disable-next-line react-hooks/exhaustive-deps
5123
5146
  }, [isSwapAll.current]);
5147
+ useEffect(function () {
5148
+ onIsFixedChange(isFixedRate.current);
5149
+ // eslint-disable-next-line react-hooks/exhaustive-deps
5150
+ }, [isFixedRate.current]);
5124
5151
  useEffect(function () {
5125
5152
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current || preservedAmount || null));
5126
5153
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -5130,7 +5157,7 @@ var SwapForm = function SwapForm(_ref) {
5130
5157
  var isCurrentAmountNotZero = sendAssetAmount.current && !BigNumber("0").eq(sendAssetAmount.current);
5131
5158
  var isPreservedAmountNotZero = preservedAmount && !BigNumber("0").eq(preservedAmount);
5132
5159
  if (isCurrentAmountNotZero) {
5133
- loadFullEstimation(sendAssetAmount.current);
5160
+ loadFullEstimation(isLastEditedReceiving ? receiveAssetAmount.current : sendAssetAmount.current);
5134
5161
  } else if (isPreservedAmountNotZero) {
5135
5162
  loadFullEstimation(preservedAmount, true);
5136
5163
  } else {
@@ -5169,7 +5196,7 @@ var SwapForm = function SwapForm(_ref) {
5169
5196
  };
5170
5197
  if (!receivingAssetTicker) return;
5171
5198
  var _temp = recipientAddress.current === "";
5172
- return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current)).then(_temp2);
5199
+ return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current, isFixedRate.current)).then(_temp2);
5173
5200
  } catch (e) {
5174
5201
  Promise.reject(e);
5175
5202
  }
@@ -5184,7 +5211,7 @@ var SwapForm = function SwapForm(_ref) {
5184
5211
  };
5185
5212
  if (!sendingAssetTicker || !isRefundAddressRequired) return;
5186
5213
  var _temp3 = refundAddress.current === "";
5187
- return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current)).then(_temp4);
5214
+ return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current, isFixedRate.current)).then(_temp4);
5188
5215
  } catch (e) {
5189
5216
  Promise.reject(e);
5190
5217
  }
@@ -5197,7 +5224,7 @@ var SwapForm = function SwapForm(_ref) {
5197
5224
  if (readyToSwap) {
5198
5225
  timeoutId = setTimeout(function () {
5199
5226
  var _sendAssetAmount$curr;
5200
- return requestDataRefresh((_sendAssetAmount$curr = sendAssetAmount.current) != null ? _sendAssetAmount$curr : preservedAmount, true);
5227
+ return requestDataRefresh(isLastEditedReceiving ? receiveAssetAmount.current : (_sendAssetAmount$curr = sendAssetAmount.current) != null ? _sendAssetAmount$curr : preservedAmount, true);
5201
5228
  }, DETAIL_REFRESH_INTERVAL_MS);
5202
5229
  setIdleDataUpdateTimeoutId(timeoutId);
5203
5230
  } else {
@@ -5209,8 +5236,6 @@ var SwapForm = function SwapForm(_ref) {
5209
5236
  };
5210
5237
  // eslint-disable-next-line react-hooks/exhaustive-deps
5211
5238
  }, [readyToSwap]);
5212
-
5213
- // TODO: [refactoring, critical] this code looks like a hack related to task_id=6e328d39063142b7b9fa01d497e616da
5214
5239
  useEffect(function () {
5215
5240
  if (triggerDataUpdateResetting) {
5216
5241
  clearTimeout(dataUpdateTimeoutId.current);
@@ -5220,8 +5245,6 @@ var SwapForm = function SwapForm(_ref) {
5220
5245
  }
5221
5246
  // eslint-disable-next-line react-hooks/exhaustive-deps
5222
5247
  }, [triggerDataUpdateResetting]);
5223
-
5224
- // Resets the passed "set value to" param to null, so it can be used multiple times with any value
5225
5248
  useEffect(function () {
5226
5249
  if (!!updateSendInputTo) setUpdateSendInputTo(null);
5227
5250
  if (!!updateReceiveInputTo) setUpdateReceiveInputTo(null);
@@ -5240,13 +5263,12 @@ var SwapForm = function SwapForm(_ref) {
5240
5263
  }
5241
5264
  // eslint-disable-next-line react-hooks/exhaustive-deps
5242
5265
  }, [isLoading.current, swapAllButtonLoaderReSetter]);
5243
-
5244
- // Handlers upon changing the asset amount
5245
5266
  useEffect(function () {
5246
5267
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current));
5247
5268
  if (sendAssetAmount.current == null) return;
5248
5269
  var processingAmount = sendAssetAmount.current === "" ? "0" : sendAssetAmount.current;
5249
- requestDataRefresh(processingAmount);
5270
+ var processingReceivingAmount = receiveAssetAmount.current === "" ? "0" : receiveAssetAmount.current;
5271
+ requestDataRefresh(isLastEditedReceiving ? processingReceivingAmount : processingAmount);
5250
5272
  processMinMaxAmounts(processingAmount);
5251
5273
  setIsAmountZero(BigNumber("0").eq(processingAmount));
5252
5274
  setIsSwapCalculated(false);
@@ -5261,7 +5283,13 @@ var SwapForm = function SwapForm(_ref) {
5261
5283
  linkText: !formHasBalance ? "" : isSwapAll.current ? translations.swapAllButtonTitles.cancel : translations.swapAllButtonTitles.enable,
5262
5284
  linkButtonLoader: true,
5263
5285
  isLinkButtonDisabled: isLoading.current || sendingAssetTicker === receivingAssetTicker || BigNumber(sendingAssetBalance == null ? void 0 : sendingAssetBalance.assetAmount).eq(0)
5264
- }, /*#__PURE__*/React.createElement("div", {
5286
+ }, displayRateSelector ? /*#__PURE__*/React.createElement("div", {
5287
+ className: s$9["swap-form-rate-selector"]
5288
+ }, /*#__PURE__*/React.createElement(RateSelector, {
5289
+ isFixed: (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT,
5290
+ setIsFixed: handleRateModeChanged,
5291
+ translations: translations.rateSelector
5292
+ })) : "", /*#__PURE__*/React.createElement("div", {
5265
5293
  className: s$9["swap-form-inputs"]
5266
5294
  }, /*#__PURE__*/React.createElement(AmountInput, {
5267
5295
  ticker: sendingAssetTicker,
@@ -5309,7 +5337,7 @@ var SwapForm = function SwapForm(_ref) {
5309
5337
  assetIconProtocolSrc: receivingAssetProtocolIconSrc,
5310
5338
  fallbackAssetIconSrc: fallBackAssetIconSrc,
5311
5339
  disabled: isSwapAll.current || sendingAssetTicker === null || receivingAssetTicker === null,
5312
- locked: !formHasBalance,
5340
+ locked: !formHasBalance && !isFixedRate.current,
5313
5341
  handleCoinAmountChange: handleReceiveAssetAmountChange,
5314
5342
  handleChangeAssetClick: handleChangeReceivingAssetClick,
5315
5343
  updateAssetInputTo: updateReceiveInputTo,
@@ -5329,7 +5357,7 @@ var SwapForm = function SwapForm(_ref) {
5329
5357
  className: s$9["swap-form-information-field"]
5330
5358
  }, /*#__PURE__*/React.createElement("p", null, !isPairSupported ? translations.informationBlock.pairNotAvailable : transactionFee && minimalAmountValid ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.transactionFee, /*#__PURE__*/React.createElement("span", null, AmountUtils.crypto(transactionFee == null ? void 0 : transactionFee.crypto, sendingAssetFeeCoinTickerPrintable)), (transactionFee == null ? void 0 : transactionFee.fiat) != null && (transactionFee == null ? void 0 : transactionFee.fiat) !== "" ? /*#__PURE__*/React.createElement("span", {
5331
5359
  className: s$9["semi-transparent"]
5332
- }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React.createElement("span", null, AmountUtils.composeRateText(sendingAssetTickerPrintable, receivingAssetTickerPrintable, swapRate, receivingAssetDecimalCount, (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT))) : minimalAmount.current || maximumAmount.current ? !maximumAmountValid && maximumAmount.current != null ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React.createElement("span", {
5360
+ }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React.createElement("span", null, AmountUtils.composeRateText(sendingAssetTickerPrintable, receivingAssetTickerPrintable, swapRate, receivingAssetDecimalCount, (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT))) : minimalAmount.current || maximumAmount.current ? !maximumAmountValid && maximumAmount.current != null ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React.createElement("span", {
5333
5361
  className: s$9["interactable"] + " " + s$9["red"],
5334
5362
  onClick: isLoading.current ? function () {} : function (e) {
5335
5363
  return callHandlingErrors(handleMaximumAmountClick, e);
@@ -5356,7 +5384,7 @@ var SwapForm = function SwapForm(_ref) {
5356
5384
  adaptiveHeight: true,
5357
5385
  errorEncountered: recipientAddress.current !== "" && !isRecipientAddressValid.current
5358
5386
  })), isHydrated && recipientAddressExtraIdName ? /*#__PURE__*/React.createElement(TitleBox, {
5359
- title: recipientAddressExtraIdName,
5387
+ title: translations.addressFields.receivingAddressExtraIdTitle,
5360
5388
  titleNoticeText: translations.addressFields.receivingAddressExtraIdNotice,
5361
5389
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5362
5390
  }, /*#__PURE__*/React.createElement(Textarea, {
@@ -5378,7 +5406,7 @@ var SwapForm = function SwapForm(_ref) {
5378
5406
  adaptiveHeight: true,
5379
5407
  errorEncountered: refundAddress.current !== "" && !isRefundAddressValid.current
5380
5408
  })), refundAddressExtraIdName ? /*#__PURE__*/React.createElement(TitleBox, {
5381
- title: refundAddressExtraIdName,
5409
+ title: translations.addressFields.refundAddressExtraIdTitle,
5382
5410
  titleNoticeText: translations.addressFields.refundAddressExtraIdNotice,
5383
5411
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5384
5412
  }, /*#__PURE__*/React.createElement(Textarea, {
@@ -5389,13 +5417,7 @@ var SwapForm = function SwapForm(_ref) {
5389
5417
  value: refundAddressExtraId.current,
5390
5418
  adaptiveHeight: true,
5391
5419
  placeholder: translations.addressFields.extraIdPlaceholder
5392
- })) : null) : null) : null, displayRateSelector ? /*#__PURE__*/React.createElement("div", {
5393
- className: s$9["swap-form-rate-selector"]
5394
- }, /*#__PURE__*/React.createElement(RateSelector, {
5395
- isFixed: (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT,
5396
- setIsFixed: !isLoading.current ? handleRateModeChanged : function () {},
5397
- translations: translations.rateSelector
5398
- })) : "", validationContent ? /*#__PURE__*/React.createElement("div", {
5420
+ })) : null) : null) : null, validationContent ? /*#__PURE__*/React.createElement("div", {
5399
5421
  className: s$9["swap-form-validation-text"]
5400
5422
  }, /*#__PURE__*/React.createElement(Validation, {
5401
5423
  text: validationContent
@@ -5416,7 +5438,7 @@ var SwapForm = function SwapForm(_ref) {
5416
5438
  mode: "primary",
5417
5439
  content: translations.confirmButtonText,
5418
5440
  onClick: function onClick(resetButtonLoader) {
5419
- return handleConfirmButtonClick(resetButtonLoader, setValidationContent, setBalanceValid, setMinimalAmountValid, setMaximumAmountValid, setIsPairSupported, setIsSameCoins, recipientAddress.current, recipientAddressExtraId.current, refundAddress.current, refundAddressExtraId.current);
5441
+ return handleConfirmButtonClick(resetButtonLoader, setValidationContent, setBalanceValid, setMinimalAmountValid, setMaximumAmountValid, setIsPairSupported, setIsSameCoins, recipientAddress.current, recipientAddressExtraId.current, refundAddress.current, refundAddressExtraId.current, isLastEditedReceiving);
5420
5442
  },
5421
5443
  fullWidthOnMobiles: true,
5422
5444
  isDisabled: !readyToSwap,
@@ -5462,7 +5484,12 @@ SwapForm.propTypes = {
5462
5484
  fiatCurrencyCode: PropTypes.oneOfType([PropTypes.string, null]),
5463
5485
  fiatCurrencyDecimals: PropTypes.oneOfType([PropTypes.number, null]),
5464
5486
  formHasFiat: PropTypes.bool,
5487
+ termsOfUseUrl: PropTypes.oneOfType([PropTypes.string, null]),
5488
+ privacyPolicyUrl: PropTypes.oneOfType([PropTypes.string, null]),
5489
+ recipientAddressExtraIdName: PropTypes.string,
5490
+ refundAddressExtraIdName: PropTypes.string,
5465
5491
  translations: PropTypes.object,
5492
+ validateAddressByTicker: PropTypes.func,
5466
5493
  swapSeparatorIconSrc: PropTypes.string.isRequired,
5467
5494
  swapButtonAlwaysActive: PropTypes.bool
5468
5495
  };
@@ -5495,6 +5522,11 @@ SwapForm.defaultProps = {
5495
5522
  fiatCurrencyCode: null,
5496
5523
  fiatCurrencyDecimals: null,
5497
5524
  formHasFiat: true,
5525
+ termsOfUseUrl: null,
5526
+ privacyPolicyUrl: null,
5527
+ validateAddressByTicker: function validateAddressByTicker(ticker) {
5528
+ return false;
5529
+ },
5498
5530
  swapButtonAlwaysActive: false
5499
5531
  };
5500
5532
 
@@ -5506,7 +5538,7 @@ SwapForm.defaultProps = {
5506
5538
  * @return {Promise<string>} xml string of generated svg image
5507
5539
  */
5508
5540
 
5509
- function _catch$b(body, recover) {
5541
+ function _catch$d(body, recover) {
5510
5542
  try {
5511
5543
  var result = body();
5512
5544
  } catch (e) {
@@ -5519,7 +5551,7 @@ function _catch$b(body, recover) {
5519
5551
  }
5520
5552
  var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingString) {
5521
5553
  try {
5522
- return Promise.resolve(_catch$b(function () {
5554
+ return Promise.resolve(_catch$d(function () {
5523
5555
  return Promise.resolve(QRCode.toString(encodingString, {
5524
5556
  type: "svg"
5525
5557
  }));
@@ -5533,9 +5565,23 @@ var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingStrin
5533
5565
 
5534
5566
  var s$6 = {"container":"_cTbW4","m-0":"_pa1z9","p-0":"_JFpOp","m-1":"_iRmOW","p-1":"_0sPGn","m-2":"_cX5Pd","p-2":"_2cKLW","m-3":"_lsOKS","p-3":"_MDp97","m-4":"_tiugy","p-4":"_lcNdz","m-5":"_ph3Rl","p-5":"_8Oxt6","m-6":"_LQvZy","p-6":"_RqY7F","m-7":"_K6wVB","p-7":"_aqQmY","m-8":"_AvgKS","p-8":"_-THq-","m-9":"_fLxYO","p-9":"_wNjdw","m-10":"_CVvN9","p-10":"_W0zcC","ml-0":"_lOxDW","pl-0":"_AZ4Gk","ml-1":"_PfYJJ","pl-1":"_ha7hP","ml-2":"_8HztG","pl-2":"_SB-3g","ml-3":"_udBJe","pl-3":"_EYbrF","ml-4":"_zSB90","pl-4":"_bGSY-","ml-5":"_vCg0l","pl-5":"_-hUSk","ml-6":"_wpvsa","pl-6":"_Po4yI","ml-7":"_Rv-mI","pl-7":"_rHVBB","ml-8":"_zYMBf","pl-8":"_BSAmk","ml-9":"_KE07p","pl-9":"_Bhlol","ml-10":"_iG9RV","pl-10":"_syE5i","mr-0":"_Z0qEx","pr-0":"_lV0Ms","mr-1":"_gO4IU","pr-1":"_CvRZh","mr-2":"_xy-oI","pr-2":"_vihQM","mr-3":"_eJ7bJ","pr-3":"_bmsh0","mr-4":"_EoFmR","pr-4":"_fVbSK","mr-5":"_tdfPe","pr-5":"_MNash","mr-6":"_haTqx","pr-6":"_YIf0P","mr-7":"_pooWd","pr-7":"_7MZOB","mr-8":"_bS7iD","pr-8":"_JRieo","mr-9":"_f6Phu","pr-9":"_mlqUy","mr-10":"_PPXXJ","pr-10":"_abKOE","mt-0":"_ItCpw","pt-0":"_zpY0G","mt-1":"_8TETK","pt-1":"_ANVw2","mt-2":"_s2Ox7","pt-2":"_L2yLo","mt-3":"_e2KDJ","pt-3":"_QfoJy","mt-4":"_O-rrM","pt-4":"_2USiC","mt-5":"_7Kzdb","pt-5":"_l3KrZ","mt-6":"_vgOok","pt-6":"_ng-zC","mt-7":"_nTMsZ","pt-7":"_KGp6z","mt-8":"_XANFt","pt-8":"_o3eiw","mt-9":"_l3H4r","pt-9":"_CRSXn","mt-10":"_ftQLu","pt-10":"_ikh2T","mb-0":"_jg4Jh","pb-0":"_sEOhP","mb-1":"_A9pLc","pb-1":"_O3GpB","mb-2":"_Ko-ls","pb-2":"_Nh0Vh","mb-3":"_APbRY","pb-3":"_tWmjY","mb-4":"_XUlFk","pb-4":"_ZvsvW","mb-5":"_n5nhM","pb-5":"_-tSIX","mb-6":"_QtZDL","pb-6":"_-39t0","mb-7":"_D0Dpl","pb-7":"_45Xmr","mb-8":"_GqsvX","pb-8":"_6CQop","mb-9":"_Z4Ivt","pb-9":"_veodh","mb-10":"_L3rOe","pb-10":"_YRD2e","mx-0":"_bzM7J","px-0":"_8ogz0","mx-1":"_XyVmJ","px-1":"_X9KHo","mx-2":"_R6tXp","px-2":"_Zja9K","mx-3":"_vdTzJ","px-3":"_9O9dG","mx-4":"_mcsEY","px-4":"_HuOg7","mx-5":"_Q96D3","px-5":"_gwh60","mx-6":"_Tli0m","px-6":"_znyER","mx-7":"_WNYMW","px-7":"_r1il4","mx-8":"_vMRfR","px-8":"_SYdPJ","mx-9":"_3mTwX","px-9":"_XqzX6","mx-10":"_ZAjnm","px-10":"_vYiab","my-0":"_DTi5m","py-0":"_NhBC-","my-1":"_lYPq3","py-1":"_LsZYc","my-2":"_ie-4q","py-2":"_-8kuS","my-3":"_PcwSW","py-3":"_9SVW-","my-4":"_HM-DC","py-4":"_cBLeY","my-5":"_iFfyB","py-5":"_cFMUa","my-6":"_uxMHp","py-6":"_OeII-","my-7":"_Y-LlZ","py-7":"_3ydPM","my-8":"_ifpwB","py-8":"_nPGL9","my-9":"_9XS-9","py-9":"_HRWBM","my-10":"_r-9W3","py-10":"_G5SRo","m-sm-0":"_XQBmN","p-sm-0":"_s9MHP","m-sm-1":"_e6dLK","p-sm-1":"_47tQJ","m-sm-2":"_Sq84f","p-sm-2":"_7T9oC","m-sm-3":"_6DK-C","p-sm-3":"_1mWwA","m-sm-4":"_jephJ","p-sm-4":"_8isN2","m-sm-5":"_Qj6AO","p-sm-5":"_dc7y9","m-sm-6":"_TPeN7","p-sm-6":"_2rG8f","m-sm-7":"_MfYlH","p-sm-7":"_6zVKJ","m-sm-8":"_QlZvU","p-sm-8":"_tx9ap","m-sm-9":"_rLz-E","p-sm-9":"_q06Mz","m-sm-10":"_3uSku","p-sm-10":"_Hc-5n","ml-sm-0":"_1UbDf","pl-sm-0":"_touOJ","ml-sm-1":"_1bN5I","pl-sm-1":"_bQHcU","ml-sm-2":"_i8oPe","pl-sm-2":"_Vtfxf","ml-sm-3":"_CBcsQ","pl-sm-3":"_SzmcT","ml-sm-4":"_6qcw8","pl-sm-4":"_vbSGm","ml-sm-5":"_n-zBA","pl-sm-5":"_Q9Q9i","ml-sm-6":"_2o7ve","pl-sm-6":"_UPjnI","ml-sm-7":"_NeEAG","pl-sm-7":"_ngtJ-","ml-sm-8":"_-Z2Hf","pl-sm-8":"_VQpYs","ml-sm-9":"_Sla3G","pl-sm-9":"_9WquO","ml-sm-10":"_kuYOg","pl-sm-10":"_mf-JK","mr-sm-0":"_D-am2","pr-sm-0":"_Z4QgH","mr-sm-1":"_JNB16","pr-sm-1":"_1nuYG","mr-sm-2":"_JSz3T","pr-sm-2":"_VIVsb","mr-sm-3":"_hf2wL","pr-sm-3":"_U27cs","mr-sm-4":"_fphSG","pr-sm-4":"_oan05","mr-sm-5":"_-q4eR","pr-sm-5":"_1z6Az","mr-sm-6":"_ex6FB","pr-sm-6":"_4B5XH","mr-sm-7":"_AhvSF","pr-sm-7":"_98YQI","mr-sm-8":"_ukGgp","pr-sm-8":"_i1l6d","mr-sm-9":"_R-dZ7","pr-sm-9":"_rq-kd","mr-sm-10":"_dVc4S","pr-sm-10":"_X-WfK","mt-sm-0":"_gYF9v","pt-sm-0":"_EA2Ki","mt-sm-1":"_B1K8h","pt-sm-1":"_ug-cq","mt-sm-2":"_SVe1c","pt-sm-2":"_kAto4","mt-sm-3":"_zvT2b","pt-sm-3":"_eaLRc","mt-sm-4":"_2dFgE","pt-sm-4":"_tweF5","mt-sm-5":"_KlgR2","pt-sm-5":"_BwPt9","mt-sm-6":"_FVlah","pt-sm-6":"_HZ-1-","mt-sm-7":"_-usQF","pt-sm-7":"_NvK9x","mt-sm-8":"_VjH2p","pt-sm-8":"_G1yH9","mt-sm-9":"_u4fMt","pt-sm-9":"_tw7GS","mt-sm-10":"_ymkT3","pt-sm-10":"_yJhls","mb-sm-0":"_lGkDj","pb-sm-0":"_HHf7Y","mb-sm-1":"_1I2Vs","pb-sm-1":"_i3RzV","mb-sm-2":"_BIWVv","pb-sm-2":"_4tkvJ","mb-sm-3":"_FwyAM","pb-sm-3":"_abS24","mb-sm-4":"_dqY3O","pb-sm-4":"_b--2r","mb-sm-5":"_I4bmd","pb-sm-5":"_tzrqS","mb-sm-6":"_pgsKQ","pb-sm-6":"_cpvrM","mb-sm-7":"_-Rr98","pb-sm-7":"_KBGRo","mb-sm-8":"_Zl7om","pb-sm-8":"_LWOz1","mb-sm-9":"_vo0F-","pb-sm-9":"_O2BEY","mb-sm-10":"_F-Lhx","pb-sm-10":"_6AZ0T","mx-sm-0":"_Y0X-J","px-sm-0":"_HcvBd","mx-sm-1":"_X3Fb3","px-sm-1":"_-JfYt","mx-sm-2":"_1x4W2","px-sm-2":"_qydtY","mx-sm-3":"_XUuRa","px-sm-3":"_eBVc0","mx-sm-4":"_63l4w","px-sm-4":"_k3SYD","mx-sm-5":"_5i7KK","px-sm-5":"_XDYJN","mx-sm-6":"_w8TjD","px-sm-6":"_5ol5V","mx-sm-7":"_Ot40y","px-sm-7":"_oV5-L","mx-sm-8":"_a8L2h","px-sm-8":"_wi0TE","mx-sm-9":"_v7kEh","px-sm-9":"_0-HhG","mx-sm-10":"_1okBb","px-sm-10":"_95N84","my-sm-0":"_lie2G","py-sm-0":"_ouOvB","my-sm-1":"_ohdC7","py-sm-1":"_aMnh9","my-sm-2":"_7xHoJ","py-sm-2":"_0ug55","my-sm-3":"_U2pB2","py-sm-3":"_4cGIX","my-sm-4":"_ZdqXJ","py-sm-4":"_WxW7n","my-sm-5":"_oVJaN","py-sm-5":"_AWbwx","my-sm-6":"_TBmmo","py-sm-6":"_KwGcy","my-sm-7":"_o3VYk","py-sm-7":"_ci94b","my-sm-8":"_GvBdM","py-sm-8":"_SIEyA","my-sm-9":"_sq-Bc","py-sm-9":"_RahCO","my-sm-10":"_Y22he","py-sm-10":"_zgeqj","m-lg-0":"_hfSrX","p-lg-0":"_pn8y2","m-lg-1":"_LfWT0","p-lg-1":"_QVlAL","m-lg-2":"_1icWB","p-lg-2":"_dl4cc","m-lg-3":"_CMQ3-","p-lg-3":"_zrs1N","m-lg-4":"_x0g6f","p-lg-4":"_Os9NS","m-lg-5":"_U9MlN","p-lg-5":"_jFWCr","m-lg-6":"_tLOlh","p-lg-6":"_42qu5","m-lg-7":"_Aro8c","p-lg-7":"_-uOsA","m-lg-8":"_Au56y","p-lg-8":"_2Oyz7","m-lg-9":"_Osk7K","p-lg-9":"_lXQ8x","m-lg-10":"_dllSC","p-lg-10":"_Tm67i","ml-lg-0":"_Znqug","pl-lg-0":"_454P-","ml-lg-1":"_kUu3E","pl-lg-1":"_w89ET","ml-lg-2":"_WmVQL","pl-lg-2":"_kR-EV","ml-lg-3":"_k5kWU","pl-lg-3":"_-Kb0x","ml-lg-4":"_KKFXp","pl-lg-4":"_-fkcR","ml-lg-5":"_yS-Tb","pl-lg-5":"_O-1Va","ml-lg-6":"_p-vq5","pl-lg-6":"_JMyQH","ml-lg-7":"_k7-ti","pl-lg-7":"_qEF3U","ml-lg-8":"_4Hiwo","pl-lg-8":"_i0YLE","ml-lg-9":"_E7-Mc","pl-lg-9":"_tR6Ca","ml-lg-10":"_XJWn-","pl-lg-10":"_lMFa-","mr-lg-0":"_-5re8","pr-lg-0":"_frmaO","mr-lg-1":"_V7Qjd","pr-lg-1":"_RfFWZ","mr-lg-2":"_zovH5","pr-lg-2":"_I0DtE","mr-lg-3":"_R1FBX","pr-lg-3":"_UGURA","mr-lg-4":"_A91bo","pr-lg-4":"_OC0rQ","mr-lg-5":"_UuInF","pr-lg-5":"_o6Z7k","mr-lg-6":"_2WcKB","pr-lg-6":"_hb6AF","mr-lg-7":"_7zOUh","pr-lg-7":"_ISeQS","mr-lg-8":"_XB-jo","pr-lg-8":"_WH43T","mr-lg-9":"_3Z5tO","pr-lg-9":"_KDtmP","mr-lg-10":"_YWWDg","pr-lg-10":"_3jxch","mt-lg-0":"_NpdpZ","pt-lg-0":"_G3CYP","mt-lg-1":"_rBTNB","pt-lg-1":"_oP3bL","mt-lg-2":"_7k4z7","pt-lg-2":"_W-jQH","mt-lg-3":"_g3B6v","pt-lg-3":"_VJ1Ff","mt-lg-4":"_KMnJN","pt-lg-4":"_ZD8Fa","mt-lg-5":"_b5cHq","pt-lg-5":"_dg5j0","mt-lg-6":"_-Cpwd","pt-lg-6":"_THSdM","mt-lg-7":"_Z3s1F","pt-lg-7":"_lYEdd","mt-lg-8":"_Aqcim","pt-lg-8":"_layfK","mt-lg-9":"_PODRQ","pt-lg-9":"_Jwmvr","mt-lg-10":"_oE-Es","pt-lg-10":"_iqMxI","mb-lg-0":"_0ouBF","pb-lg-0":"_pY5e-","mb-lg-1":"_6UkMv","pb-lg-1":"_rTQpv","mb-lg-2":"_QdezS","pb-lg-2":"_bKRvY","mb-lg-3":"_9kRgX","pb-lg-3":"_0rDFg","mb-lg-4":"_raL2S","pb-lg-4":"_g1goH","mb-lg-5":"_ZYlhK","pb-lg-5":"_xEjIS","mb-lg-6":"_2Bqs7","pb-lg-6":"_0-ck4","mb-lg-7":"_I-Q95","pb-lg-7":"_eBNa3","mb-lg-8":"_jynhW","pb-lg-8":"_N4X7K","mb-lg-9":"_V0gnd","pb-lg-9":"_30KI-","mb-lg-10":"_u7LJD","pb-lg-10":"_0rvxP","mx-lg-0":"_eJDxo","px-lg-0":"_foMtX","mx-lg-1":"_ahZeW","px-lg-1":"_1EJE3","mx-lg-2":"_VsP4e","px-lg-2":"_ZkXCK","mx-lg-3":"_IiuAl","px-lg-3":"_ALX0f","mx-lg-4":"_jPo2Y","px-lg-4":"_iJZSC","mx-lg-5":"_uAU0P","px-lg-5":"_z75CM","mx-lg-6":"_ZiYYZ","px-lg-6":"_-wNvd","mx-lg-7":"_3W1xI","px-lg-7":"_EGCYr","mx-lg-8":"_IKuC1","px-lg-8":"_CsKA7","mx-lg-9":"_y5S5T","px-lg-9":"_pSFpC","mx-lg-10":"_X8XlP","px-lg-10":"_UFRIe","my-lg-0":"_W1tUz","py-lg-0":"_jfJjF","my-lg-1":"_nIUQq","py-lg-1":"_iG2bO","my-lg-2":"_GCiW7","py-lg-2":"_f2j4U","my-lg-3":"_a1kEm","py-lg-3":"_vucDB","my-lg-4":"_6W-Ov","py-lg-4":"_2ktTG","my-lg-5":"_O4LLf","py-lg-5":"_Hcb15","my-lg-6":"_CSfmZ","py-lg-6":"_CPuhc","my-lg-7":"_3mH-z","py-lg-7":"_X6-mZ","my-lg-8":"_asmPC","py-lg-8":"_TTf47","my-lg-9":"_mC-i2","py-lg-9":"_iFSI7","my-lg-10":"_2BFm0","py-lg-10":"_bfNEm","m-md-0":"_-spRI","p-md-0":"_LK8-A","m-md-1":"_zjpam","p-md-1":"_wv8PD","m-md-2":"_06GpP","p-md-2":"_zdlRp","m-md-3":"_sNmTl","p-md-3":"_Yo2qI","m-md-4":"_eHYDi","p-md-4":"_b0S-l","m-md-5":"_U15c8","p-md-5":"_5tzlt","m-md-6":"_ZGL7n","p-md-6":"_5wNZQ","m-md-7":"_a0fPA","p-md-7":"_QQVBX","m-md-8":"_9-xcZ","p-md-8":"_RW3k1","m-md-9":"_rDAcs","p-md-9":"_k1xXG","m-md-10":"_RbEPp","p-md-10":"_hSl5q","ml-md-0":"_JaAa5","pl-md-0":"_eC-r7","ml-md-1":"_TiFFz","pl-md-1":"_tOXmv","ml-md-2":"_9mF2Z","pl-md-2":"_vwsKB","ml-md-3":"_15YPO","pl-md-3":"_XPkcU","ml-md-4":"_boTLY","pl-md-4":"_SFsKJ","ml-md-5":"_3axKI","pl-md-5":"_D2sbk","ml-md-6":"_e7bnL","pl-md-6":"_NQ2Nm","ml-md-7":"_rBXtE","pl-md-7":"_NeI-O","ml-md-8":"_XwNPD","pl-md-8":"_SbqlX","ml-md-9":"_Y-58E","pl-md-9":"_6cNCb","ml-md-10":"_JX9Cq","pl-md-10":"_uEAJa","mr-md-0":"_Jx5kC","pr-md-0":"_9FxwM","mr-md-1":"_iy6Yx","pr-md-1":"_RTwZ-","mr-md-2":"_Sm2g4","pr-md-2":"_mZS-2","mr-md-3":"_xKF1D","pr-md-3":"_okrlw","mr-md-4":"_bSzPv","pr-md-4":"_lahnF","mr-md-5":"_p5D7E","pr-md-5":"_RYFzr","mr-md-6":"_7DOT6","pr-md-6":"_aOldY","mr-md-7":"_GfYE-","pr-md-7":"_DNhH5","mr-md-8":"_eW2PP","pr-md-8":"_fteCN","mr-md-9":"_dyAiH","pr-md-9":"_xabgi","mr-md-10":"_PHePp","pr-md-10":"_qoP00","mt-md-0":"_05YBn","pt-md-0":"_yrlcd","mt-md-1":"_yFl6Y","pt-md-1":"_6b-mC","mt-md-2":"_G7jGU","pt-md-2":"_6GZzc","mt-md-3":"_ufBby","pt-md-3":"_qbnV7","mt-md-4":"_q7LKH","pt-md-4":"_hJCP8","mt-md-5":"_qtf2d","pt-md-5":"_aRWST","mt-md-6":"_TeL7T","pt-md-6":"_ZNePu","mt-md-7":"_jl4lr","pt-md-7":"_IlTFc","mt-md-8":"_a24kO","pt-md-8":"_-zvRb","mt-md-9":"_WXX3L","pt-md-9":"_2EEJ4","mt-md-10":"_X18TD","pt-md-10":"_MVooa","mb-md-0":"_DHwvN","pb-md-0":"_Uw70J","mb-md-1":"_v4jX-","pb-md-1":"_gJHwB","mb-md-2":"_boWJw","pb-md-2":"_j5kJT","mb-md-3":"_IZI-P","pb-md-3":"_LGchh","mb-md-4":"_R0Ont","pb-md-4":"_HYfpq","mb-md-5":"_ized0","pb-md-5":"_vTIf8","mb-md-6":"_zWpdC","pb-md-6":"_WEEGo","mb-md-7":"_1f-FE","pb-md-7":"_kfQzs","mb-md-8":"_j2X9B","pb-md-8":"_yRenj","mb-md-9":"_vnyNi","pb-md-9":"_JoD-h","mb-md-10":"_M-UM-","pb-md-10":"_L6x5K","mx-md-0":"_Vb8-P","px-md-0":"_4oZZN","mx-md-1":"_x42Ry","px-md-1":"_nR54S","mx-md-2":"_sBxfn","px-md-2":"_316Hu","mx-md-3":"_Hlimc","px-md-3":"_xIOYB","mx-md-4":"_9mXFC","px-md-4":"_-Fr6a","mx-md-5":"_Iv-gL","px-md-5":"_BqRA8","mx-md-6":"_7KKoC","px-md-6":"_32kSW","mx-md-7":"_qDWiW","px-md-7":"_vFnpw","mx-md-8":"_W4giE","px-md-8":"_4xRbP","mx-md-9":"_27uMt","px-md-9":"_7JLvO","mx-md-10":"_WyzX-","px-md-10":"_rzIDq","my-md-0":"_V28a9","py-md-0":"_znJMr","my-md-1":"_-3O4g","py-md-1":"_20sBd","my-md-2":"_O-A1l","py-md-2":"_5QSZG","my-md-3":"_QzjlZ","py-md-3":"_MILKq","my-md-4":"_O6rPK","py-md-4":"_KG0dA","my-md-5":"_0OhYl","py-md-5":"_KvUZf","my-md-6":"_rpwnV","py-md-6":"_yesTR","my-md-7":"_-WMtU","py-md-7":"_Ozuan","my-md-8":"_1gsdT","py-md-8":"_Zaqjb","my-md-9":"_nBoFu","py-md-9":"_ATTX2","my-md-10":"_LmCyF","py-md-10":"_FRV8s","m-xl-0":"_vfL3y","p-xl-0":"_EAyFx","m-xl-1":"_9Ru5u","p-xl-1":"_F2FfD","m-xl-2":"_uZD3X","p-xl-2":"_X9oXS","m-xl-3":"_D4N3Z","p-xl-3":"_zDeYX","m-xl-4":"_yHbfy","p-xl-4":"_6BvXQ","m-xl-5":"_gxlNl","p-xl-5":"_pCCVG","m-xl-6":"_qya4B","p-xl-6":"_QvUyx","m-xl-7":"_eJCt5","p-xl-7":"_p6XPi","m-xl-8":"_0THjs","p-xl-8":"_cC5TI","m-xl-9":"_k0QDj","p-xl-9":"_zwxO-","m-xl-10":"_4W0VS","p-xl-10":"_Xqjzh","ml-xl-0":"_jV-29","pl-xl-0":"_yy22x","ml-xl-1":"_T5fSu","pl-xl-1":"_93-K3","ml-xl-2":"_3zBLT","pl-xl-2":"_zjoAh","ml-xl-3":"_fz6la","pl-xl-3":"_UyWvU","ml-xl-4":"_rWYaL","pl-xl-4":"_9bQv0","ml-xl-5":"_0sArB","pl-xl-5":"_7o4Af","ml-xl-6":"_Y2eGT","pl-xl-6":"_xWqqk","ml-xl-7":"_YKpXT","pl-xl-7":"_g80UK","ml-xl-8":"_4cajU","pl-xl-8":"_h9QHX","ml-xl-9":"_oOpVP","pl-xl-9":"_ZXrhV","ml-xl-10":"_WJTHf","pl-xl-10":"_IZnPI","mr-xl-0":"_TB1mj","pr-xl-0":"_E3W1c","mr-xl-1":"_8EyKO","pr-xl-1":"_eaU7V","mr-xl-2":"_aCAu-","pr-xl-2":"_Fpj5l","mr-xl-3":"_GsiAJ","pr-xl-3":"_w-FUl","mr-xl-4":"_WXA1T","pr-xl-4":"_DbO3B","mr-xl-5":"_RtwaI","pr-xl-5":"_nwxwr","mr-xl-6":"_w9wUn","pr-xl-6":"_RBEVT","mr-xl-7":"_h4yUW","pr-xl-7":"_yzODd","mr-xl-8":"_HGkda","pr-xl-8":"_NR7L2","mr-xl-9":"_DKcGP","pr-xl-9":"_vfynG","mr-xl-10":"_klfNs","pr-xl-10":"_Olvpu","mt-xl-0":"_orHon","pt-xl-0":"_pqwts","mt-xl-1":"_OH3oL","pt-xl-1":"_QKjE8","mt-xl-2":"_8D31l","pt-xl-2":"_1l79D","mt-xl-3":"_kzbfM","pt-xl-3":"_wT--w","mt-xl-4":"_r8VYm","pt-xl-4":"_DgPY3","mt-xl-5":"_LF4aG","pt-xl-5":"_vD44v","mt-xl-6":"_c4BLJ","pt-xl-6":"_ElVvf","mt-xl-7":"_GxjHg","pt-xl-7":"_230T2","mt-xl-8":"_aCStj","pt-xl-8":"_vCtDV","mt-xl-9":"_Bo25T","pt-xl-9":"_kKkav","mt-xl-10":"_koZP7","pt-xl-10":"_dsMYs","mb-xl-0":"_C-FbO","pb-xl-0":"_3Nq0y","mb-xl-1":"_XrrZu","pb-xl-1":"_bV14o","mb-xl-2":"_uMcoW","pb-xl-2":"_sreSu","mb-xl-3":"_LcyMS","pb-xl-3":"_tU2l3","mb-xl-4":"_-OT5O","pb-xl-4":"_9HkKs","mb-xl-5":"_bHipN","pb-xl-5":"_DPjem","mb-xl-6":"_hifEE","pb-xl-6":"_RIEji","mb-xl-7":"_Oa7hP","pb-xl-7":"_vzsdg","mb-xl-8":"_pkI29","pb-xl-8":"_0jC5o","mb-xl-9":"_H4C-y","pb-xl-9":"_E9bOZ","mb-xl-10":"_ZVWPI","pb-xl-10":"_-u5jh","mx-xl-0":"_zXDFY","px-xl-0":"_-1-bs","mx-xl-1":"_Tb7NK","px-xl-1":"_xsfgY","mx-xl-2":"_EIQON","px-xl-2":"_Yzt4Z","mx-xl-3":"_LT9ms","px-xl-3":"_jHgj2","mx-xl-4":"_2SbJZ","px-xl-4":"_V-Y3l","mx-xl-5":"_-G8hg","px-xl-5":"_eycX1","mx-xl-6":"_dDxDv","px-xl-6":"_TgE5t","mx-xl-7":"_9CKTr","px-xl-7":"_I-zZG","mx-xl-8":"_SyFyQ","px-xl-8":"_Hyq-2","mx-xl-9":"_LAJdn","px-xl-9":"_ng4Ed","mx-xl-10":"_lp88j","px-xl-10":"_vmD8P","my-xl-0":"_eMXwe","py-xl-0":"_aETwB","my-xl-1":"_dS2Zm","py-xl-1":"_pHxI3","my-xl-2":"_kPY2w","py-xl-2":"_sPtzJ","my-xl-3":"_g1gY4","py-xl-3":"_OUmMw","my-xl-4":"_mLo8K","py-xl-4":"_wkW-B","my-xl-5":"_6P91L","py-xl-5":"_i3OCk","my-xl-6":"_cqBd2","py-xl-6":"_fZ8e0","my-xl-7":"_saauK","py-xl-7":"_wrgof","my-xl-8":"_5m8Th","py-xl-8":"_tlMWT","my-xl-9":"_HxjEh","py-xl-9":"_l-MtD","my-xl-10":"_dJDVj","py-xl-10":"_uEjIR","background-shine":"_O8uMC","path":"_WiuLg","line":"_fS3dR","skeleton":"_Z4CzX","skeleton-animate":"_-W0Ni","skeleton-dark":"_IoNbr","skeleton-dark-animate":"_7W6h3","skeleton-transparent":"_l3AMk","skeleton-transparent-animate":"_r77sc","semi-transparent":"_ci4Xo","qr-code":"_VZ0dT","fill":"_hFE1l"};
5535
5567
 
5536
- // TODO: [dev] add JSDoc
5568
+ /**
5569
+ * QrCode component renders a QR code for a provided crypto address.
5570
+ *
5571
+ * @component
5572
+ * @example
5573
+ * const address = "0x123456789abcdef";
5574
+ * const fill = true;
5575
+ * return <QrCode address={address} fill={fill} />;
5576
+ *
5577
+ * @param {Object} props - The props for the component.
5578
+ * @param {string} props.address - The crypto address to generate the QR code for.
5579
+ * @param {boolean} [props.fill=false] - If true, applies additional CSS class to fill the container.
5580
+ *
5581
+ * @returns {JSX.Element} A div containing the generated QR code.
5582
+ */
5537
5583
 
5538
- function _catch$a(body, recover) {
5584
+ function _catch$c(body, recover) {
5539
5585
  try {
5540
5586
  var result = body();
5541
5587
  } catch (e) {
@@ -5554,7 +5600,7 @@ var QrCode = function QrCode(_ref) {
5554
5600
  useEffect(function () {
5555
5601
  (function () {
5556
5602
  try {
5557
- return _catch$a(function () {
5603
+ return _catch$c(function () {
5558
5604
  var _temp = function () {
5559
5605
  if (address) {
5560
5606
  return Promise.resolve(generateQrAndShowInCanvas(address)).then(function (_generateQrAndShowInC) {
@@ -5581,7 +5627,8 @@ QrCode.propTypes = {
5581
5627
  fill: PropTypes.bool
5582
5628
  };
5583
5629
  QrCode.defaultProps = {
5584
- address: ""
5630
+ address: "",
5631
+ fill: false
5585
5632
  };
5586
5633
 
5587
5634
  var s$5 = {"container":"_NaTd2","m-0":"_YHORQ","p-0":"_vFwmg","m-1":"_XJaHq","p-1":"_hIM3t","m-2":"_WgBak","p-2":"_QbcpO","m-3":"_-S6sq","p-3":"_jOOQ0","m-4":"_znEJf","p-4":"_Lg8C3","m-5":"_qp5LK","p-5":"_5czqM","m-6":"_274as","p-6":"_Xl4AT","m-7":"_Zm2L-","p-7":"_apGWT","m-8":"_C94JK","p-8":"_-ZZwv","m-9":"_wCPNe","p-9":"_8AlLB","m-10":"_LkyIb","p-10":"_wmhyI","ml-0":"_X2MXW","pl-0":"_zLOyd","ml-1":"_Bt-i6","pl-1":"_btKpD","ml-2":"_4Bwl5","pl-2":"_pfI2U","ml-3":"_dkGsO","pl-3":"_Bxv71","ml-4":"_UwipE","pl-4":"_earg6","ml-5":"_F5beh","pl-5":"_0UFA4","ml-6":"_8JK7d","pl-6":"_D4Q-L","ml-7":"_xD22L","pl-7":"_x7e5C","ml-8":"_FHYzO","pl-8":"_pA0Gs","ml-9":"_beftM","pl-9":"_lygHM","ml-10":"_hxaQQ","pl-10":"_AQhiw","mr-0":"_FPd0G","pr-0":"_kzAQL","mr-1":"_3huZS","pr-1":"_QXzb1","mr-2":"_Rz58G","pr-2":"_yMW65","mr-3":"_MXmu7","pr-3":"_IDswm","mr-4":"_IcYbX","pr-4":"_x-YXe","mr-5":"_NYlLE","pr-5":"_4l555","mr-6":"_UjOdV","pr-6":"_SE5we","mr-7":"_AlzPK","pr-7":"_hUHaY","mr-8":"_-gsnW","pr-8":"_IP34z","mr-9":"_UmWyx","pr-9":"_MzrNl","mr-10":"_ds0Ix","pr-10":"_AYlq-","mt-0":"_7qyuy","pt-0":"_nIHOM","mt-1":"_6RqW-","pt-1":"_4-OC1","mt-2":"_rcUWP","pt-2":"_fkjUO","mt-3":"_S7R9D","pt-3":"_j5tAQ","mt-4":"_TUqA4","pt-4":"_vVsJ-","mt-5":"_sHshm","pt-5":"_B-zUI","mt-6":"_0cWsK","pt-6":"_9bfIn","mt-7":"_fjL9E","pt-7":"_NTUdY","mt-8":"_HasBT","pt-8":"_mVF0B","mt-9":"_-u5T1","pt-9":"_ExDUQ","mt-10":"_9pUY-","pt-10":"_eiVcd","mb-0":"_03MFB","pb-0":"_-KrHh","mb-1":"_wev0C","pb-1":"_wtVjK","mb-2":"_gprlv","pb-2":"_J2Q09","mb-3":"_RhXyK","pb-3":"_12ip-","mb-4":"_z5dvT","pb-4":"_Go5-i","mb-5":"_-KBHs","pb-5":"_E3y4V","mb-6":"_yaPh3","pb-6":"_tdi0b","mb-7":"_tv-DY","pb-7":"_fm9Cu","mb-8":"_oBOhs","pb-8":"_cplbD","mb-9":"_WLAwt","pb-9":"_Au3aP","mb-10":"_s2hC1","pb-10":"_L1xED","mx-0":"_AoX5Q","px-0":"_bNNCF","mx-1":"_h8MO1","px-1":"_AJV5c","mx-2":"_QS9LF","px-2":"_hjDVm","mx-3":"_s-SQj","px-3":"_NGiEN","mx-4":"_M6wbK","px-4":"_KCPtZ","mx-5":"_inpZ7","px-5":"_Fr1vd","mx-6":"_BZCXr","px-6":"_zX70b","mx-7":"_XS9X0","px-7":"_E-fbe","mx-8":"_1bVOE","px-8":"_q0UF1","mx-9":"_cWIFa","px-9":"_gJSuV","mx-10":"_wwZlY","px-10":"_eFX6M","my-0":"_jYkDW","py-0":"_ypkZR","my-1":"_1O4Zz","py-1":"_2yJ0B","my-2":"_s180c","py-2":"_-TKas","my-3":"_rbbHu","py-3":"_nEJt6","my-4":"_3X4XE","py-4":"_GLyG-","my-5":"_PPFYe","py-5":"_wj3wh","my-6":"_zxO-F","py-6":"_-Gh70","my-7":"_H7Lx-","py-7":"_ri-zp","my-8":"_kSsB4","py-8":"_DVbNR","my-9":"_VBCoh","py-9":"_7B8Mh","my-10":"_Bs8XQ","py-10":"_pwEBN","m-sm-0":"_oHFJU","p-sm-0":"_6Ukh0","m-sm-1":"_Etjc0","p-sm-1":"_pCMmU","m-sm-2":"_ERgH4","p-sm-2":"_gubJN","m-sm-3":"_3j0mZ","p-sm-3":"_h-278","m-sm-4":"_m25O0","p-sm-4":"_yM2Bk","m-sm-5":"_KR2He","p-sm-5":"_Q3d0A","m-sm-6":"_E1VMD","p-sm-6":"_uh277","m-sm-7":"_pDEm8","p-sm-7":"_efVXx","m-sm-8":"_PFrZ3","p-sm-8":"_qZLnl","m-sm-9":"_mvAgG","p-sm-9":"_F6MJe","m-sm-10":"_076H1","p-sm-10":"_zGVoi","ml-sm-0":"_ht3fQ","pl-sm-0":"_OOKlP","ml-sm-1":"_xyrlV","pl-sm-1":"_6N0PC","ml-sm-2":"_h9adY","pl-sm-2":"_QpEtQ","ml-sm-3":"_CD11L","pl-sm-3":"_PBl7w","ml-sm-4":"_Hfd1V","pl-sm-4":"_n-oVT","ml-sm-5":"_JTt3q","pl-sm-5":"_plbYR","ml-sm-6":"_6eXa4","pl-sm-6":"_UBe72","ml-sm-7":"_Uu42M","pl-sm-7":"_yxNHm","ml-sm-8":"_7ohP7","pl-sm-8":"_11foE","ml-sm-9":"_zRuRz","pl-sm-9":"_YisGl","ml-sm-10":"_Nc8nr","pl-sm-10":"_nyiix","mr-sm-0":"_AmWPq","pr-sm-0":"_6fYUi","mr-sm-1":"_mub2q","pr-sm-1":"_Vgj29","mr-sm-2":"_CIMnU","pr-sm-2":"_ot1oR","mr-sm-3":"_JCTye","pr-sm-3":"_vF9S2","mr-sm-4":"_DK3GL","pr-sm-4":"_xdAgD","mr-sm-5":"_WW9Gf","pr-sm-5":"_wVWX0","mr-sm-6":"_ObyBZ","pr-sm-6":"_QhcRY","mr-sm-7":"_LV5L8","pr-sm-7":"_Y5Gy0","mr-sm-8":"_5g6Dc","pr-sm-8":"_2AqT8","mr-sm-9":"_3sCFZ","pr-sm-9":"_1xGS-","mr-sm-10":"_qz1yf","pr-sm-10":"_JPmov","mt-sm-0":"_Th7pa","pt-sm-0":"_ClkMf","mt-sm-1":"_V27PW","pt-sm-1":"_mtTAL","mt-sm-2":"_Q09QK","pt-sm-2":"_1I3Gw","mt-sm-3":"_govQ3","pt-sm-3":"_tYeBV","mt-sm-4":"_EcCmu","pt-sm-4":"_XMDNY","mt-sm-5":"_PDuEt","pt-sm-5":"_6Vkzk","mt-sm-6":"_0YG19","pt-sm-6":"_2Cgli","mt-sm-7":"_-lWQN","pt-sm-7":"_cEzEZ","mt-sm-8":"_nGa33","pt-sm-8":"_-raau","mt-sm-9":"_PMq4L","pt-sm-9":"_w7zEF","mt-sm-10":"_ehNrF","pt-sm-10":"_jmaO2","mb-sm-0":"_RrFqz","pb-sm-0":"_12i4p","mb-sm-1":"_7Ahx0","pb-sm-1":"_flSBK","mb-sm-2":"_NB4sU","pb-sm-2":"_gPzKo","mb-sm-3":"_TV50u","pb-sm-3":"_bSZaB","mb-sm-4":"_eysFY","pb-sm-4":"_FteNR","mb-sm-5":"_EtHbQ","pb-sm-5":"_qTuR8","mb-sm-6":"_GB6FT","pb-sm-6":"_Py5nK","mb-sm-7":"_uIaBf","pb-sm-7":"_D2bHt","mb-sm-8":"_Q-avy","pb-sm-8":"_gsv-o","mb-sm-9":"_UG-gK","pb-sm-9":"_D9sNH","mb-sm-10":"_m2xUH","pb-sm-10":"_iQbrf","mx-sm-0":"_-L1Tf","px-sm-0":"_iKCny","mx-sm-1":"_75NUT","px-sm-1":"_QhF00","mx-sm-2":"_-LVWC","px-sm-2":"_Tvv1b","mx-sm-3":"_khdAw","px-sm-3":"_PZYyJ","mx-sm-4":"_OyZmA","px-sm-4":"_95e4A","mx-sm-5":"_Vnqmh","px-sm-5":"_eTlqy","mx-sm-6":"_XUY2U","px-sm-6":"_3EpGV","mx-sm-7":"_SHfGI","px-sm-7":"_eI7rR","mx-sm-8":"_zIL2L","px-sm-8":"_9saK-","mx-sm-9":"_H1Fzw","px-sm-9":"_kf1Hf","mx-sm-10":"_P8qDH","px-sm-10":"_gio52","my-sm-0":"_chaCt","py-sm-0":"_O7-z-","my-sm-1":"_LrTqG","py-sm-1":"_pHmaj","my-sm-2":"_oU92I","py-sm-2":"_Mnwns","my-sm-3":"_1C5A9","py-sm-3":"_ImF2o","my-sm-4":"_WbO9H","py-sm-4":"_Z1OmB","my-sm-5":"_EYXZu","py-sm-5":"_vYHEp","my-sm-6":"_g3MSP","py-sm-6":"_2NYDD","my-sm-7":"_2joeb","py-sm-7":"_qd50T","my-sm-8":"_VGpWm","py-sm-8":"_cwG11","my-sm-9":"_ekf8e","py-sm-9":"_cK4PR","my-sm-10":"_cc6Y3","py-sm-10":"_NDKAw","m-lg-0":"_iPRPm","p-lg-0":"_TWGN8","m-lg-1":"_Jb7vd","p-lg-1":"_sn9pN","m-lg-2":"_nqEiy","p-lg-2":"_Gy0Hb","m-lg-3":"_BY1ks","p-lg-3":"_8URKR","m-lg-4":"_2-3-j","p-lg-4":"_uGQk4","m-lg-5":"_-XWs9","p-lg-5":"_OnrIk","m-lg-6":"_qrdeX","p-lg-6":"_nMFGQ","m-lg-7":"_BRNYT","p-lg-7":"_3dEch","m-lg-8":"_MBNzK","p-lg-8":"_C-WZp","m-lg-9":"_dLTQ8","p-lg-9":"_w6ixh","m-lg-10":"_2jd3n","p-lg-10":"_2muU8","ml-lg-0":"_lUZMw","pl-lg-0":"_-KzSM","ml-lg-1":"_YMHZ-","pl-lg-1":"_gomUI","ml-lg-2":"_SL4B8","pl-lg-2":"_cJVO2","ml-lg-3":"_q1dRp","pl-lg-3":"_xwxkL","ml-lg-4":"_C0hXq","pl-lg-4":"_ikIn8","ml-lg-5":"_tgvFs","pl-lg-5":"_eHDg5","ml-lg-6":"_lTdC3","pl-lg-6":"_7HFwm","ml-lg-7":"_2faTD","pl-lg-7":"_jOAoH","ml-lg-8":"_deSOn","pl-lg-8":"_z9y5A","ml-lg-9":"_ws2he","pl-lg-9":"_ui5L7","ml-lg-10":"_oJN2I","pl-lg-10":"_6CRTE","mr-lg-0":"_d1x7e","pr-lg-0":"_reYgy","mr-lg-1":"_j4hAO","pr-lg-1":"_5f30G","mr-lg-2":"_liNod","pr-lg-2":"_IUuhb","mr-lg-3":"_V9TWD","pr-lg-3":"_rliGE","mr-lg-4":"_3z6mJ","pr-lg-4":"_Df6xY","mr-lg-5":"_Rd09K","pr-lg-5":"_cGcMj","mr-lg-6":"_Mwrny","pr-lg-6":"_KuKUQ","mr-lg-7":"_HR1SS","pr-lg-7":"_s2dUf","mr-lg-8":"_SAzax","pr-lg-8":"_cEuIZ","mr-lg-9":"_Ze5-9","pr-lg-9":"_JOVUS","mr-lg-10":"_Uwedj","pr-lg-10":"_ROhQj","mt-lg-0":"_Kjz26","pt-lg-0":"_6Z07U","mt-lg-1":"_aFxMX","pt-lg-1":"_KR6SN","mt-lg-2":"_5i7Rc","pt-lg-2":"_u9KBR","mt-lg-3":"_m5LsE","pt-lg-3":"_t6WGi","mt-lg-4":"_-bb51","pt-lg-4":"_cRc-3","mt-lg-5":"_bnTpD","pt-lg-5":"_hPBHM","mt-lg-6":"_bwpJA","pt-lg-6":"_PMDS2","mt-lg-7":"_hoXBi","pt-lg-7":"_8xjM4","mt-lg-8":"_gZ7--","pt-lg-8":"_BA6wE","mt-lg-9":"_21yv5","pt-lg-9":"_aWyCU","mt-lg-10":"_mGr43","pt-lg-10":"_cSkrF","mb-lg-0":"_WjmMC","pb-lg-0":"_Q1gA2","mb-lg-1":"_WkTBs","pb-lg-1":"_fvTua","mb-lg-2":"_vc-w4","pb-lg-2":"_5HHv6","mb-lg-3":"_l-4sg","pb-lg-3":"_g8uEK","mb-lg-4":"_lD2hM","pb-lg-4":"_3G1cG","mb-lg-5":"_OHyTI","pb-lg-5":"_KeAKX","mb-lg-6":"_c260B","pb-lg-6":"_Ndomr","mb-lg-7":"_BXB-e","pb-lg-7":"_dGq5C","mb-lg-8":"_4AUpv","pb-lg-8":"_npllZ","mb-lg-9":"_L9Rak","pb-lg-9":"_jt9k5","mb-lg-10":"_8RT15","pb-lg-10":"_wjycY","mx-lg-0":"_W0Be1","px-lg-0":"_4uVx8","mx-lg-1":"_i2L9f","px-lg-1":"_ZjJsm","mx-lg-2":"_ZcecZ","px-lg-2":"_hqNB-","mx-lg-3":"_jNUQn","px-lg-3":"_sHebC","mx-lg-4":"_YhUDD","px-lg-4":"_-84UO","mx-lg-5":"_Ph5qw","px-lg-5":"_NR3o7","mx-lg-6":"_9jTBk","px-lg-6":"_82ujL","mx-lg-7":"_IPpAN","px-lg-7":"_C-1sM","mx-lg-8":"_ZphvL","px-lg-8":"_HzdlK","mx-lg-9":"_X8kGx","px-lg-9":"_pXV5r","mx-lg-10":"_HzIMd","px-lg-10":"_u2L1o","my-lg-0":"_Gvgjh","py-lg-0":"_OgT1y","my-lg-1":"_u3Qyn","py-lg-1":"_taLyT","my-lg-2":"_Wy-mG","py-lg-2":"_qownY","my-lg-3":"_HI-Uz","py-lg-3":"_Q6C9n","my-lg-4":"_vOnhn","py-lg-4":"_SFYHT","my-lg-5":"_9BjMz","py-lg-5":"_8JklH","my-lg-6":"_EIbP6","py-lg-6":"_nW9wp","my-lg-7":"_zJIRo","py-lg-7":"_hPFAm","my-lg-8":"_fsnJO","py-lg-8":"_iCENv","my-lg-9":"_HnasH","py-lg-9":"_-hbdR","my-lg-10":"_X1Zxr","py-lg-10":"_H17sM","m-md-0":"_Ujtmy","p-md-0":"_49fa6","m-md-1":"_KbnrJ","p-md-1":"_yM5-R","m-md-2":"_-meNJ","p-md-2":"_Y4UvM","m-md-3":"_OwGHV","p-md-3":"_RBR9C","m-md-4":"_i-AVY","p-md-4":"_WwWmC","m-md-5":"_c1Qr0","p-md-5":"_A3U4m","m-md-6":"_GPcUJ","p-md-6":"_71YbI","m-md-7":"_ikQln","p-md-7":"_wvIwY","m-md-8":"_fT38W","p-md-8":"_9Yg2c","m-md-9":"_zBOP3","p-md-9":"_GFy-1","m-md-10":"_tYxAK","p-md-10":"_kjPhi","ml-md-0":"_quQF3","pl-md-0":"_-OzvZ","ml-md-1":"_wMPHV","pl-md-1":"_41XvH","ml-md-2":"_spwuT","pl-md-2":"_24nw7","ml-md-3":"_41odn","pl-md-3":"_yz4Tk","ml-md-4":"_-2vc6","pl-md-4":"_vvnDT","ml-md-5":"_54Ig3","pl-md-5":"_CG-dk","ml-md-6":"_iVeaz","pl-md-6":"_WXTU-","ml-md-7":"_Dh8xC","pl-md-7":"_kq23e","ml-md-8":"_BJ2fl","pl-md-8":"_MG9ww","ml-md-9":"_sQHE-","pl-md-9":"_6QT8u","ml-md-10":"_NyEZe","pl-md-10":"_ekmYg","mr-md-0":"_mTGTW","pr-md-0":"_hLgfO","mr-md-1":"_Rr3ZO","pr-md-1":"_9TkH0","mr-md-2":"_FdTOQ","pr-md-2":"_neJQM","mr-md-3":"_vBv00","pr-md-3":"_eQSPq","mr-md-4":"_yaN3k","pr-md-4":"_fAvoS","mr-md-5":"_IIII7","pr-md-5":"_NgVq0","mr-md-6":"_GpgeG","pr-md-6":"_xEVGa","mr-md-7":"_9gZpZ","pr-md-7":"_-hI7f","mr-md-8":"_U54Sx","pr-md-8":"_dMcIt","mr-md-9":"_znlEn","pr-md-9":"_2BEP4","mr-md-10":"_IJ0sH","pr-md-10":"_94GCu","mt-md-0":"_5Vn-b","pt-md-0":"_8qH0J","mt-md-1":"_81Va8","pt-md-1":"_qO6aN","mt-md-2":"_PHlw6","pt-md-2":"_mjoLe","mt-md-3":"_0l6tS","pt-md-3":"_GqIf0","mt-md-4":"_63JeO","pt-md-4":"_iETbw","mt-md-5":"_MefCn","pt-md-5":"_Jp-Or","mt-md-6":"_sP1nG","pt-md-6":"_x73S0","mt-md-7":"_DwVeG","pt-md-7":"_eCRBo","mt-md-8":"_1BuEh","pt-md-8":"_gLz6T","mt-md-9":"_TUu8p","pt-md-9":"_Od9Jg","mt-md-10":"_9xo0E","pt-md-10":"_3q9Qs","mb-md-0":"_q1N2O","pb-md-0":"_EfBmm","mb-md-1":"_e6vaB","pb-md-1":"_mPlV1","mb-md-2":"_UPkLS","pb-md-2":"_wx2ox","mb-md-3":"_L4Ru9","pb-md-3":"_U2POK","mb-md-4":"_8xBOI","pb-md-4":"_-E8B-","mb-md-5":"_W-iLG","pb-md-5":"_2QLo6","mb-md-6":"_xq6DM","pb-md-6":"_MJQbH","mb-md-7":"_23LK-","pb-md-7":"_Buv8D","mb-md-8":"_cLEvD","pb-md-8":"_wig0r","mb-md-9":"_zye4T","pb-md-9":"_XqA3E","mb-md-10":"_AHFVl","pb-md-10":"_FiJ-d","mx-md-0":"_iPAbb","px-md-0":"_OI0Hm","mx-md-1":"_9G4QU","px-md-1":"_it3Pu","mx-md-2":"_fWVT6","px-md-2":"_wLA22","mx-md-3":"_r3C2F","px-md-3":"_v1Lv8","mx-md-4":"_Voueh","px-md-4":"_b36iz","mx-md-5":"_As2Gw","px-md-5":"_dQbAe","mx-md-6":"_xcEqD","px-md-6":"_MrAbj","mx-md-7":"_eBuFO","px-md-7":"_xNr13","mx-md-8":"_QPZsY","px-md-8":"_8t2Px","mx-md-9":"_BAyIu","px-md-9":"_00pz1","mx-md-10":"_lO-A1","px-md-10":"_53BzA","my-md-0":"_lh08a","py-md-0":"_kBvO0","my-md-1":"_XTRn4","py-md-1":"_MO6dK","my-md-2":"_fHMgx","py-md-2":"_FXTLg","my-md-3":"_ffpT4","py-md-3":"_22-kw","my-md-4":"_FEg-m","py-md-4":"_ypkOx","my-md-5":"_R1AN7","py-md-5":"_DydJq","my-md-6":"_FXG1K","py-md-6":"_E0BJ-","my-md-7":"_x0N4A","py-md-7":"_WjdDu","my-md-8":"_KDLR1","py-md-8":"_y64sO","my-md-9":"_8eDO2","py-md-9":"_qquBK","my-md-10":"_EwNyz","py-md-10":"_N6I0i","m-xl-0":"_8P5t6","p-xl-0":"_ZpbeQ","m-xl-1":"_Dks6J","p-xl-1":"_mE8iF","m-xl-2":"_el9ru","p-xl-2":"_UTl4r","m-xl-3":"_azB2s","p-xl-3":"_gOS9v","m-xl-4":"_Slcp6","p-xl-4":"_lNxoS","m-xl-5":"_J-0LE","p-xl-5":"_iHe8I","m-xl-6":"_yZepR","p-xl-6":"_rbMpb","m-xl-7":"_-WhgU","p-xl-7":"_mjvu4","m-xl-8":"_1GOfJ","p-xl-8":"_sxTqQ","m-xl-9":"_I4D6b","p-xl-9":"_iVvvh","m-xl-10":"_wg39S","p-xl-10":"_GyDPP","ml-xl-0":"_6gsjS","pl-xl-0":"_JmRU5","ml-xl-1":"_v1VpM","pl-xl-1":"_DEQsB","ml-xl-2":"_9L1JA","pl-xl-2":"_ie1jJ","ml-xl-3":"_zpNcl","pl-xl-3":"_0SKlr","ml-xl-4":"_-REYo","pl-xl-4":"_2lS8e","ml-xl-5":"_2Na2F","pl-xl-5":"_-s-Fm","ml-xl-6":"_pJW1z","pl-xl-6":"_CKN-E","ml-xl-7":"_FgJs7","pl-xl-7":"_j0Erz","ml-xl-8":"_J7vMq","pl-xl-8":"_o2JEq","ml-xl-9":"_drfPx","pl-xl-9":"_jyscO","ml-xl-10":"_5tuQV","pl-xl-10":"_QqMj7","mr-xl-0":"_3s4H3","pr-xl-0":"_-g6oD","mr-xl-1":"_irt5W","pr-xl-1":"_cixdv","mr-xl-2":"_-WyU1","pr-xl-2":"_508yO","mr-xl-3":"_hcmRB","pr-xl-3":"_yv-S6","mr-xl-4":"_Azljg","pr-xl-4":"_iSmGO","mr-xl-5":"_ljdF7","pr-xl-5":"_ExPZ3","mr-xl-6":"_JnJB4","pr-xl-6":"_hqr45","mr-xl-7":"_QHl1W","pr-xl-7":"_NNYAu","mr-xl-8":"_Uvzse","pr-xl-8":"_iXiqD","mr-xl-9":"_7uOKO","pr-xl-9":"_kit7Z","mr-xl-10":"_wAqvW","pr-xl-10":"_6PFk0","mt-xl-0":"_sdtH-","pt-xl-0":"_NCcCs","mt-xl-1":"_DQicu","pt-xl-1":"_4ULM-","mt-xl-2":"_YDSc6","pt-xl-2":"_lIAG5","mt-xl-3":"_TfWVv","pt-xl-3":"_iSTeE","mt-xl-4":"_JM-Od","pt-xl-4":"_k5SO2","mt-xl-5":"_FQRS6","pt-xl-5":"_L0fB3","mt-xl-6":"_eX5qy","pt-xl-6":"_y6uWa","mt-xl-7":"_c2Kgp","pt-xl-7":"_NuKFH","mt-xl-8":"_sKUD0","pt-xl-8":"_SrcyS","mt-xl-9":"_zm1YI","pt-xl-9":"_tCb2k","mt-xl-10":"_5V3Ww","pt-xl-10":"_JI4CW","mb-xl-0":"_werGX","pb-xl-0":"_ElhJG","mb-xl-1":"_RvlfX","pb-xl-1":"_ByoQk","mb-xl-2":"_Be3gd","pb-xl-2":"_FoRlm","mb-xl-3":"_1z4eB","pb-xl-3":"_4mmGN","mb-xl-4":"_ktyWD","pb-xl-4":"_NDUC-","mb-xl-5":"_5vEIK","pb-xl-5":"_ZPRwH","mb-xl-6":"_yfnPa","pb-xl-6":"_u52jn","mb-xl-7":"_y1Puu","pb-xl-7":"_Dt-tw","mb-xl-8":"_uX6MD","pb-xl-8":"_EefsF","mb-xl-9":"_GM91N","pb-xl-9":"_6tOpa","mb-xl-10":"_d9w9L","pb-xl-10":"_qMAiq","mx-xl-0":"_r0ha6","px-xl-0":"_arjXu","mx-xl-1":"_lQe5Y","px-xl-1":"_aFAtc","mx-xl-2":"_qGnkl","px-xl-2":"_r2bDr","mx-xl-3":"_AKBiJ","px-xl-3":"_qidn1","mx-xl-4":"_Xndir","px-xl-4":"_mzK8z","mx-xl-5":"_vuKvl","px-xl-5":"_5eob9","mx-xl-6":"_6zjoG","px-xl-6":"_u2376","mx-xl-7":"_NomJg","px-xl-7":"_cpIVH","mx-xl-8":"_DIbHl","px-xl-8":"_sTwkl","mx-xl-9":"_LJhtb","px-xl-9":"_99ZRS","mx-xl-10":"_RyT0w","px-xl-10":"_NXPYf","my-xl-0":"_4mARD","py-xl-0":"_cZCg4","my-xl-1":"_s65h0","py-xl-1":"_h0IMr","my-xl-2":"_xJjZc","py-xl-2":"_ap-Wz","my-xl-3":"_-nrYV","py-xl-3":"_VoZny","my-xl-4":"_t29x5","py-xl-4":"_yt6Uh","my-xl-5":"_1GB5N","py-xl-5":"_Zfpi1","my-xl-6":"_Z9v80","py-xl-6":"_-Ymwb","my-xl-7":"_TPI94","py-xl-7":"_yDb9i","my-xl-8":"_PG7cx","py-xl-8":"_Au4Oz","my-xl-9":"_NGXXu","py-xl-9":"_q-tXb","my-xl-10":"_g63Xq","py-xl-10":"_dVrmW","background-shine":"_9FSCy","path":"_YSBJs","line":"_MGRy0","skeleton":"_uSX6q","skeleton-animate":"_1JImE","skeleton-dark":"_GoVkE","skeleton-dark-animate":"_W4Xm1","skeleton-transparent":"_miCCb","skeleton-transparent-animate":"_8nUtm","semi-transparent":"_TNpj-","first-line-text":"_IGz2I","wrap":"_eKd8P","break":"_mT5i4","full-text":"_PVKxC","shorted":"_wB5qV","horizontal":"_lqJz-","second-line-text":"_hdF64"};
@@ -6266,7 +6313,7 @@ var s = {"container":"_4QDrB","coin-picker":"_mvuzQ","loading":"_18kIX","item":"
6266
6313
  var FALLBACK_ASSET_ICON_URL = "https://rabbit.io/asset-icons/fallback.svg";
6267
6314
  var DEFAULT_CRYPTO_DECIMAL_COUNT = 8;
6268
6315
 
6269
- function _catch$9(body, recover) {
6316
+ function _catch$b(body, recover) {
6270
6317
  try {
6271
6318
  var result = body();
6272
6319
  } catch (e) {
@@ -6490,7 +6537,7 @@ var CoinPicker = function CoinPicker(_ref) {
6490
6537
  var loadCoinsAndSaveToState = function loadCoinsAndSaveToState() {
6491
6538
  (function () {
6492
6539
  try {
6493
- var _temp = _catch$9(function () {
6540
+ var _temp = _catch$b(function () {
6494
6541
  return Promise.resolve(loadCoinsAndContent ? loadCoinsAndContent() : defaultLoadCoinsAndContent()).then(function (data) {
6495
6542
  setCoins(data.coins);
6496
6543
  setFilteredCoins(data.coins);
@@ -7299,7 +7346,7 @@ var Cache = /*#__PURE__*/function () {
7299
7346
  return Cache;
7300
7347
  }();
7301
7348
 
7302
- function _catch$8(body, recover) {
7349
+ function _catch$a(body, recover) {
7303
7350
  try {
7304
7351
  var result = body();
7305
7352
  } catch (e) {
@@ -7317,7 +7364,7 @@ function postponeExecution(execution, timeoutMS) {
7317
7364
  return new Promise(function (resolve, reject) {
7318
7365
  setTimeout(function () {
7319
7366
  try {
7320
- var _temp = _catch$8(function () {
7367
+ var _temp = _catch$a(function () {
7321
7368
  return Promise.resolve(execution()).then(function (_execution) {
7322
7369
  resolve(_execution);
7323
7370
  });
@@ -7401,7 +7448,7 @@ var AxiosAdapter = /*#__PURE__*/function () {
7401
7448
  return AxiosAdapter;
7402
7449
  }();
7403
7450
 
7404
- function _catch$7(body, recover) {
7451
+ function _catch$9(body, recover) {
7405
7452
  try {
7406
7453
  var result = body();
7407
7454
  } catch (e) {
@@ -7417,7 +7464,7 @@ var EmailsApi = /*#__PURE__*/function () {
7417
7464
  EmailsApi.sendEmail = function sendEmail(subject, body) {
7418
7465
  try {
7419
7466
  var _this = this;
7420
- var _temp = _catch$7(function () {
7467
+ var _temp = _catch$9(function () {
7421
7468
  var url = window.location.protocol + "//" + window.location.host + "/api/v1/" + _this.serverEndpointEntity;
7422
7469
  return Promise.resolve(axios.post(url, {
7423
7470
  subject: subject,
@@ -7835,7 +7882,7 @@ var ExternalServicesStatsCollector = /*#__PURE__*/function () {
7835
7882
  * improve the reliability of a data retrieval.
7836
7883
  */
7837
7884
 
7838
- function _catch$6(body, recover) {
7885
+ function _catch$8(body, recover) {
7839
7886
  try {
7840
7887
  var result = body();
7841
7888
  } catch (e) {
@@ -8174,7 +8221,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8174
8221
  var result;
8175
8222
  var calculationUuid = concurrentCalculationsMetadataHolder.startCalculation(_this.bio);
8176
8223
  return Promise.resolve(_finallyRethrows$1(function () {
8177
- return _catch$6(function () {
8224
+ return _catch$8(function () {
8178
8225
  function _temp5() {
8179
8226
  var _result2, _result3;
8180
8227
  if (((_result2 = result) == null ? void 0 : _result2.data) == null) {
@@ -8202,7 +8249,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8202
8249
  */
8203
8250
  var rpsFactor = result ? result.rpsFactor : RobustExternalAPICallerService.defaultRPSFactor;
8204
8251
  result = null;
8205
- var _temp3 = _catch$6(function () {
8252
+ var _temp3 = _catch$8(function () {
8206
8253
  function _temp2() {
8207
8254
  var _result$errors;
8208
8255
  if ((_result$errors = result.errors) != null && _result$errors.length) {
@@ -8226,7 +8273,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8226
8273
  return Promise.resolve(new Promise(function (resolve, reject) {
8227
8274
  setTimeout(function () {
8228
8275
  try {
8229
- var _temp6 = _catch$6(function () {
8276
+ var _temp6 = _catch$8(function () {
8230
8277
  return Promise.resolve(_this._performCallAttempt(parametersValues, timeoutMS, cancelToken, rpsFactor, doNotFailForNowData)).then(function (_this$_performCallAtt2) {
8231
8278
  resolve(_this$_performCallAtt2);
8232
8279
  });
@@ -8296,7 +8343,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8296
8343
  return;
8297
8344
  }
8298
8345
  var _temp13 = _finallyRethrows$1(function () {
8299
- return _catch$6(function () {
8346
+ return _catch$8(function () {
8300
8347
  var _provider$specificHea;
8301
8348
  function _temp12() {
8302
8349
  if (iterationsData.length) {
@@ -8628,7 +8675,7 @@ function _for(test, update, body) {
8628
8675
  }
8629
8676
  }
8630
8677
  }
8631
- function _catch$5(body, recover) {
8678
+ function _catch$7(body, recover) {
8632
8679
  try {
8633
8680
  var result = body();
8634
8681
  } catch (e) {
@@ -8707,7 +8754,7 @@ var CacheAndConcurrentRequestsResolver = /*#__PURE__*/function () {
8707
8754
  _proto.getCachedOrWaitForCachedOrAcquireLock = function getCachedOrWaitForCachedOrAcquireLock(cacheId) {
8708
8755
  try {
8709
8756
  var _this = this;
8710
- return Promise.resolve(_catch$5(function () {
8757
+ return Promise.resolve(_catch$7(function () {
8711
8758
  function _temp2() {
8712
8759
  var _cached, _cached2;
8713
8760
  return calculationId ? {
@@ -8786,7 +8833,7 @@ var CacheAndConcurrentRequestsResolver = /*#__PURE__*/function () {
8786
8833
  _proto.acquireLock = function acquireLock(cacheId) {
8787
8834
  try {
8788
8835
  var _this2 = this;
8789
- return Promise.resolve(_catch$5(function () {
8836
+ return Promise.resolve(_catch$7(function () {
8790
8837
  return Promise.resolve(_this2._requestsManager.acquireLock(cacheId));
8791
8838
  }, function (e) {
8792
8839
  improveAndRethrow(e, "acquireLock");
@@ -8956,7 +9003,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
8956
9003
  try {
8957
9004
  var _exit;
8958
9005
  var _this3 = this;
8959
- var _temp3 = _catch$5(function () {
9006
+ var _temp3 = _catch$7(function () {
8960
9007
  var activeCalculationIdForHash = _this3._activeCalculationsIds.get(requestHash);
8961
9008
  if (activeCalculationIdForHash == null) {
8962
9009
  var id = v4();
@@ -8990,7 +9037,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
8990
9037
  _proto2.acquireLock = function acquireLock(requestHash) {
8991
9038
  try {
8992
9039
  var _this4 = this;
8993
- return Promise.resolve(_catch$5(function () {
9040
+ return Promise.resolve(_catch$7(function () {
8994
9041
  var _this4$_nextCalculati;
8995
9042
  var activeId = _this4._activeCalculationsIds.get(requestHash);
8996
9043
  var nextId = v4();
@@ -9141,7 +9188,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
9141
9188
  * TODO: [tests, critical] Massively used logic
9142
9189
  */
9143
9190
 
9144
- function _catch$4(body, recover) {
9191
+ function _catch$6(body, recover) {
9145
9192
  try {
9146
9193
  var result = body();
9147
9194
  } catch (e) {
@@ -9238,7 +9285,7 @@ var CachedRobustExternalApiCallerService = /*#__PURE__*/function () {
9238
9285
  var cacheId;
9239
9286
  var result;
9240
9287
  return Promise.resolve(_finallyRethrows(function () {
9241
- return _catch$4(function () {
9288
+ return _catch$6(function () {
9242
9289
  cacheId = _this._calculateCacheId(parametersValues, customHashFunctionForParams);
9243
9290
  return Promise.resolve(_this._cahceAndRequestsResolver.getCachedOrWaitForCachedOrAcquireLock(cacheId)).then(function (_this$_cahceAndReques) {
9244
9291
  var _result2, _result4;
@@ -9307,7 +9354,7 @@ var CachedRobustExternalApiCallerService = /*#__PURE__*/function () {
9307
9354
  return CachedRobustExternalApiCallerService;
9308
9355
  }();
9309
9356
 
9310
- function _catch$3(body, recover) {
9357
+ function _catch$5(body, recover) {
9311
9358
  try {
9312
9359
  var result = body();
9313
9360
  } catch (e) {
@@ -9391,7 +9438,7 @@ var IpAddressProvider = /*#__PURE__*/function () {
9391
9438
  IpAddressProvider.getClientIpAddress = function getClientIpAddress() {
9392
9439
  try {
9393
9440
  var _this = this;
9394
- return Promise.resolve(_catch$3(function () {
9441
+ return Promise.resolve(_catch$5(function () {
9395
9442
  return Promise.resolve(_this.externalIPAddressAPICaller.callExternalAPICached([], 7000));
9396
9443
  }, function (e) {
9397
9444
  improveAndRethrow(e, "getClientIpAddress");
@@ -9571,15 +9618,44 @@ function BaseSwapCreationInfo(fromCoin, toCoin, fromAmountCoins, toAmountCoins,
9571
9618
  this.isRefundAddressRequired = isRefundAddressRequired;
9572
9619
  };
9573
9620
 
9621
+ // TODO: [refactoring, moderate] extract structure of _supportedCoins into model class
9622
+
9623
+ function _catch$4(body, recover) {
9624
+ try {
9625
+ var result = body();
9626
+ } catch (e) {
9627
+ return recover(e);
9628
+ }
9629
+ if (result && result.then) {
9630
+ return result.then(void 0, recover);
9631
+ }
9632
+ return result;
9633
+ }
9574
9634
  var SwapProvider = /*#__PURE__*/function () {
9575
- function SwapProvider() {}
9635
+ function SwapProvider(cache, customCoinBuilder, useRestrictedCoinsSet) {
9636
+ if (customCoinBuilder === void 0) {
9637
+ customCoinBuilder = function customCoinBuilder(coin, network) {
9638
+ return null;
9639
+ };
9640
+ }
9641
+ if (useRestrictedCoinsSet === void 0) {
9642
+ useRestrictedCoinsSet = true;
9643
+ }
9644
+ this._supportedCoins = [];
9645
+ this._maxRateDigits = 20;
9646
+ this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9647
+ this._customCoinBuilder = customCoinBuilder;
9648
+ this._cache = cache;
9649
+ this.isAggregator = false;
9650
+ }
9576
9651
  var _proto = SwapProvider.prototype;
9577
9652
  /**
9578
9653
  * @return {Promise<void>}
9579
9654
  */
9580
9655
  _proto.initialize = function initialize() {
9581
9656
  try {
9582
- throw new Error("Not implemented in base");
9657
+ var _this = this;
9658
+ return Promise.resolve(_this._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9583
9659
  } catch (e) {
9584
9660
  return Promise.reject(e);
9585
9661
  }
@@ -9592,15 +9668,68 @@ var SwapProvider = /*#__PURE__*/function () {
9592
9668
  throw new Error("Not implemented in base");
9593
9669
  }
9594
9670
 
9671
+ /**
9672
+ * This method sort internal list putting popular (as provider thinks) coins to the top.
9673
+ * This is just for users of this API if they don't care about the sorting - we just improve a list a bit this way.
9674
+ * @private
9675
+ */;
9676
+ _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
9677
+ this._supportedCoins.sort(function (i1, i2) {
9678
+ if (i1.isPopular !== i2.isPopular) return i2.isPopular - i1.isPopular;
9679
+ return i1.coin.ticker.localeCompare(i2.coin.ticker);
9680
+ });
9681
+ }
9682
+
9683
+ /**
9684
+ * Should fill _supportedCoins with array of coins.
9685
+ * Coin construction rules:
9686
+ * 1. ticker should be CODEPROTOCOL_CODE e.g. USDTERC20
9687
+ * 2. name should not contain (PROTOCOL_CODE) or just PROTOCOL_CODe
9688
+ * 3. protocol should be null for coins major for their blockchains like BTC, ETH
9689
+ * 4. isPopular should be a number
9690
+ *
9691
+ * @return {Promise<void>}
9692
+ * @private
9693
+ */;
9694
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9695
+ try {
9696
+ throw new Error("Not implemented in base - _fetchSupportedCurrenciesIfNeeded");
9697
+ } catch (e) {
9698
+ return Promise.reject(e);
9699
+ }
9700
+ }
9595
9701
  /**
9596
9702
  * Retrieves all currencies supported by this swap provider.
9597
9703
  * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
9598
9704
  *
9599
9705
  * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
9600
- */;
9706
+ */
9707
+ ;
9601
9708
  _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9602
9709
  try {
9603
- throw new Error("Not implemented in base");
9710
+ var _this2 = this;
9711
+ var loggerSource = "getAllSupportedCurrencies";
9712
+ return Promise.resolve(_catch$4(function () {
9713
+ return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9714
+ var _this2$_supportedCoin;
9715
+ Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins returning", loggerSource);
9716
+ return {
9717
+ result: true,
9718
+ coins: _this2._supportedCoins.map(function (item) {
9719
+ return item.coin;
9720
+ })
9721
+ };
9722
+ });
9723
+ }, function (e) {
9724
+ var _e$response;
9725
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9726
+ return {
9727
+ result: false,
9728
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9729
+ };
9730
+ }
9731
+ improveAndRethrow(e, loggerSource);
9732
+ }));
9604
9733
  } catch (e) {
9605
9734
  return Promise.reject(e);
9606
9735
  }
@@ -9614,7 +9743,31 @@ var SwapProvider = /*#__PURE__*/function () {
9614
9743
  ;
9615
9744
  _proto.getDepositCurrencies = function getDepositCurrencies() {
9616
9745
  try {
9617
- throw new Error("Not implemented in base");
9746
+ var _this3 = this;
9747
+ var loggerSource = "getDepositCurrencies";
9748
+ return Promise.resolve(_catch$4(function () {
9749
+ return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9750
+ var _this3$_supportedCoin;
9751
+ Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9752
+ return {
9753
+ result: true,
9754
+ coins: _this3._supportedCoins.filter(function (item) {
9755
+ return item.deposit;
9756
+ }).map(function (item) {
9757
+ return item.coin;
9758
+ })
9759
+ };
9760
+ });
9761
+ }, function (e) {
9762
+ var _e$response2;
9763
+ if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9764
+ return {
9765
+ result: false,
9766
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9767
+ };
9768
+ }
9769
+ improveAndRethrow(e, loggerSource);
9770
+ }));
9618
9771
  } catch (e) {
9619
9772
  return Promise.reject(e);
9620
9773
  }
@@ -9628,8 +9781,36 @@ var SwapProvider = /*#__PURE__*/function () {
9628
9781
  */
9629
9782
  ;
9630
9783
  _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9784
+ if (exceptCurrency === void 0) {
9785
+ exceptCurrency = null;
9786
+ }
9631
9787
  try {
9632
- throw new Error("Not implemented in base");
9788
+ var _this4 = this;
9789
+ var loggerSource = "getWithdrawalCurrencies";
9790
+ return Promise.resolve(_catch$4(function () {
9791
+ return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9792
+ var _this4$_supportedCoin;
9793
+ Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9794
+ return {
9795
+ result: true,
9796
+ coins: _this4._supportedCoins.filter(function (item) {
9797
+ var _item$coin, _exceptCurrency;
9798
+ return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9799
+ }).map(function (item) {
9800
+ return item.coin;
9801
+ })
9802
+ };
9803
+ });
9804
+ }, function (e) {
9805
+ var _e$response3;
9806
+ if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9807
+ return {
9808
+ result: false,
9809
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9810
+ };
9811
+ }
9812
+ improveAndRethrow(e, loggerSource);
9813
+ }));
9633
9814
  } catch (e) {
9634
9815
  return Promise.reject(e);
9635
9816
  }
@@ -9637,12 +9818,28 @@ var SwapProvider = /*#__PURE__*/function () {
9637
9818
  /**
9638
9819
  * Retrieves URL for coin icon or fallback if not found.
9639
9820
  *
9640
- * @param coin {Coin|string} coin or rabbit-format of coin ticker
9821
+ * @param coinOrTicker {Coin|string} coin or rabbit-format of coin ticker
9641
9822
  * @return {string}
9642
9823
  */
9643
9824
  ;
9644
- _proto.getIconUrl = function getIconUrl(coin) {
9645
- throw new Error("Not implemented in base");
9825
+ _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9826
+ var loggerSource = "getIconUrl";
9827
+ try {
9828
+ var _this$_supportedCoins2, _this$_supportedCoins3;
9829
+ var coin = coinOrTicker;
9830
+ if (!(coinOrTicker instanceof Coin)) {
9831
+ var _this$_supportedCoins;
9832
+ coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9833
+ return i.coin.ticker === coinOrTicker;
9834
+ })) == null ? void 0 : _this$_supportedCoins.coin;
9835
+ }
9836
+ return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9837
+ var _item$coin2, _coin;
9838
+ return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9839
+ })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9840
+ } catch (e) {
9841
+ improveAndRethrow(e, loggerSource);
9842
+ }
9646
9843
  }
9647
9844
 
9648
9845
  /**
@@ -9653,7 +9850,49 @@ var SwapProvider = /*#__PURE__*/function () {
9653
9850
  */;
9654
9851
  _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
9655
9852
  try {
9656
- throw new Error("Not implemented in base");
9853
+ var _this5 = this;
9854
+ var loggerSource = "getCoinToUSDTRate";
9855
+ return Promise.resolve(_catch$4(function () {
9856
+ return coin ? Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
9857
+ var _this5$_supportedCoin;
9858
+ // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
9859
+ var usdtTrc20 = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
9860
+ return i.coin.ticker === "USDTTRC20";
9861
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
9862
+ if (!usdtTrc20) {
9863
+ return {
9864
+ result: false
9865
+ };
9866
+ }
9867
+ var cached = _this5._cache.get("swapspace_usdt_rate_" + coin.ticker);
9868
+ if (cached != null) {
9869
+ return {
9870
+ result: true,
9871
+ rate: cached
9872
+ };
9873
+ }
9874
+ Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
9875
+ return Promise.resolve(_this5.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
9876
+ if (!result.result) {
9877
+ return {
9878
+ result: false
9879
+ };
9880
+ }
9881
+
9882
+ // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
9883
+ var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
9884
+ var rate = BigNumber(1).div(BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
9885
+ _this5._cache.put("swap_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
9886
+ );
9887
+ return {
9888
+ result: true,
9889
+ rate: rate
9890
+ };
9891
+ });
9892
+ }) : null;
9893
+ }, function (e) {
9894
+ improveAndRethrow(e, loggerSource);
9895
+ }));
9657
9896
  } catch (e) {
9658
9897
  return Promise.reject(e);
9659
9898
  }
@@ -9670,6 +9909,7 @@ var SwapProvider = /*#__PURE__*/function () {
9670
9909
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
9671
9910
  * @param [fromCoinToUsdRate=null] pass if you want to increase the min amount returned
9672
9911
  * by provider with some fixed "insurance" amount to cover min amount fluctuations.
9912
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9673
9913
  * @return {Promise<({
9674
9914
  * result: false,
9675
9915
  * reason: string,
@@ -9689,7 +9929,7 @@ var SwapProvider = /*#__PURE__*/function () {
9689
9929
  * })>}
9690
9930
  */
9691
9931
  ;
9692
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
9932
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
9693
9933
  try {
9694
9934
  throw new Error("Not implemented in base");
9695
9935
  } catch (e) {
@@ -9709,6 +9949,7 @@ var SwapProvider = /*#__PURE__*/function () {
9709
9949
  * @param fixed {boolean}
9710
9950
  * @param [toCurrencyExtraId=""] {string} optional extra ID
9711
9951
  * @param [refundExtraId=""] {string} optional extra ID for refund address
9952
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9712
9953
  * @return {Promise<({
9713
9954
  * result: true,
9714
9955
  * swapId: string,
@@ -9728,7 +9969,7 @@ var SwapProvider = /*#__PURE__*/function () {
9728
9969
  * })>}
9729
9970
  */
9730
9971
  ;
9731
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
9972
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
9732
9973
  try {
9733
9974
  throw new Error("Not implemented in base");
9734
9975
  } catch (e) {
@@ -9756,7 +9997,15 @@ var SwapProvider = /*#__PURE__*/function () {
9756
9997
  */
9757
9998
  ;
9758
9999
  _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
9759
- throw new Error("Not implemented in base");
10000
+ try {
10001
+ var _item$coin3;
10002
+ var item = this._supportedCoins.find(function (i) {
10003
+ return i.coin.ticker === ticker;
10004
+ });
10005
+ return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10006
+ } catch (e) {
10007
+ improveAndRethrow(e, "getCoinByTickerIfPresent");
10008
+ }
9760
10009
  }
9761
10010
 
9762
10011
  /**
@@ -9765,16 +10014,67 @@ var SwapProvider = /*#__PURE__*/function () {
9765
10014
  * @return {boolean}
9766
10015
  */;
9767
10016
  _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
9768
- throw new Error("Not implemented in base");
9769
- }
9770
-
9771
- /**
9772
- * @param asset {Coin}
9773
- * @return {string|null}
9774
- */;
9775
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
9776
- throw new Error("Not implemented in base");
9777
- };
10017
+ try {
10018
+ var assetData = this._supportedCoins.find(function (i) {
10019
+ var _i$coin;
10020
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (asset == null ? void 0 : asset.ticker);
10021
+ });
10022
+ if (assetData) {
10023
+ var corrected = assetData.validationRegexp.trim();
10024
+ corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10025
+ corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10026
+ return address.match(corrected) != null;
10027
+ }
10028
+ } catch (e) {
10029
+ Logger.logError(e, "isAddressValidForAsset");
10030
+ }
10031
+ return false;
10032
+ }
10033
+
10034
+ /**
10035
+ * @param asset {Coin}
10036
+ * @return {string|null}
10037
+ */;
10038
+ _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10039
+ try {
10040
+ var assetData = this._supportedCoins.find(function (i) {
10041
+ var _i$coin2;
10042
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (asset == null ? void 0 : asset.ticker);
10043
+ });
10044
+ if (assetData != null && assetData.hasExtraId) {
10045
+ if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10046
+ // We return some default name if the extraIdName is empty
10047
+ return "ID";
10048
+ }
10049
+ return assetData == null ? void 0 : assetData.extraIdName;
10050
+ }
10051
+ return null;
10052
+ } catch (e) {
10053
+ improveAndRethrow(e, "getExtraIdNameIfPresent");
10054
+ }
10055
+ };
10056
+ _proto.removeProtocolNameFromCoinName = function removeProtocolNameFromCoinName(coinName, tickerPrintable, protocolName) {
10057
+ if (coinName) {
10058
+ var originalName = coinName;
10059
+ if (tickerPrintable) {
10060
+ coinName = coinName.replaceAll(new RegExp("\\(" + tickerPrintable + "\\)", "gi"), "");
10061
+ }
10062
+ if (protocolName) {
10063
+ coinName = coinName.replaceAll(new RegExp("\\(" + protocolName + "\\)", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + "$", "gi"), "").replaceAll(new RegExp("^" + protocolName + " ", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + " ", "gi"), " ");
10064
+ }
10065
+ coinName = coinName.replaceAll(/ +/g, " ").trim();
10066
+ var defaultNames = ["token", "network", "protocol", "coin", "mainnet", "chain", "project", "cash", "finance", "wrapped", "blockchain", "network"];
10067
+ var lowerCoinName = coinName.toLowerCase();
10068
+ var isBecameDefaultName = defaultNames.find(function (defName) {
10069
+ return lowerCoinName === defName || lowerCoinName === "the " + defName;
10070
+ });
10071
+ if (coinName === "" || isBecameDefaultName) {
10072
+ // Rolling back to original name if our processing leads in empty name or one of the default words
10073
+ coinName = originalName;
10074
+ }
10075
+ }
10076
+ return coinName;
10077
+ };
9778
10078
  return SwapProvider;
9779
10079
  }();
9780
10080
  SwapProvider.COMMON_ERRORS = {
@@ -9792,22 +10092,16 @@ SwapProvider.CREATION_FAIL_REASONS = {
9792
10092
  };
9793
10093
  SwapProvider.SWAP_STATUSES = {
9794
10094
  WAITING_FOR_PAYMENT: "waiting_for_payment",
9795
- // public +
9796
10095
  CONFIRMING: "confirming",
9797
10096
  PAYMENT_RECEIVED: "payment_received",
9798
- // public +
9799
10097
  EXCHANGING: "exchanging",
9800
- // session full // public +
9801
10098
  COMPLETED: "completed",
9802
- // session full // public +
9803
10099
  REFUNDED: "refunded",
9804
- // session full // public +
9805
10100
  EXPIRED: "expired",
9806
- // public +
9807
- FAILED: "failed" // public +
10101
+ FAILED: "failed"
9808
10102
  };
9809
10103
 
9810
- function _catch$2(body, recover) {
10104
+ function _catch$3(body, recover) {
9811
10105
  try {
9812
10106
  var result = body();
9813
10107
  } catch (e) {
@@ -9831,14 +10125,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9831
10125
  if (useRestrictedCoinsSet === void 0) {
9832
10126
  useRestrictedCoinsSet = true;
9833
10127
  }
9834
- _this = _SwapProvider.call(this) || this;
9835
- _this._supportedCoins = [];
10128
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
9836
10129
  _this._partners = [];
9837
- _this._URL = "" + apiKeysProxyUrl;
9838
- _this._maxRateDigits = 20;
9839
- _this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9840
- _this._customCoinBuilder = customCoinBuilder;
9841
- _this._cache = cache;
10130
+ _this._URL = apiKeysProxyUrl + "/swapspace";
10131
+ _this.isAggregator = true;
9842
10132
  return _this;
9843
10133
  }
9844
10134
  var _proto = SwapspaceSwapProvider.prototype;
@@ -9847,144 +10137,21 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9847
10137
  * (and even a bit smaller value) for better consistency */
9848
10138
  return 110000;
9849
10139
  };
9850
- _proto.getDepositCurrencies = function getDepositCurrencies() {
9851
- try {
9852
- var _this2 = this;
9853
- var loggerSource = "getDepositCurrencies";
9854
- return Promise.resolve(_catch$2(function () {
9855
- return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9856
- var _this2$_supportedCoin;
9857
- Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9858
- return {
9859
- result: true,
9860
- coins: _this2._supportedCoins.filter(function (item) {
9861
- return item.deposit;
9862
- }).map(function (item) {
9863
- return item.coin;
9864
- })
9865
- };
9866
- });
9867
- }, function (e) {
9868
- var _e$response;
9869
- if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9870
- return {
9871
- result: false,
9872
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9873
- };
9874
- }
9875
- improveAndRethrow(e, loggerSource);
9876
- }));
9877
- } catch (e) {
9878
- return Promise.reject(e);
9879
- }
9880
- };
9881
- _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9882
- try {
9883
- var _this3 = this;
9884
- var loggerSource = "getAllSupportedCurrencies";
9885
- return Promise.resolve(_catch$2(function () {
9886
- return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9887
- var _this3$_supportedCoin;
9888
- Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins returning", loggerSource);
9889
- return {
9890
- result: true,
9891
- coins: _this3._supportedCoins.map(function (item) {
9892
- return item.coin;
9893
- })
9894
- };
9895
- });
9896
- }, function (e) {
9897
- var _e$response2;
9898
- if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9899
- return {
9900
- result: false,
9901
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9902
- };
9903
- }
9904
- improveAndRethrow(e, loggerSource);
9905
- }));
9906
- } catch (e) {
9907
- return Promise.reject(e);
9908
- }
9909
- };
9910
- _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9911
- if (exceptCurrency === void 0) {
9912
- exceptCurrency = null;
9913
- }
9914
- try {
9915
- var _this4 = this;
9916
- var loggerSource = "getWithdrawalCurrencies";
9917
- return Promise.resolve(_catch$2(function () {
9918
- return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9919
- var _this4$_supportedCoin;
9920
- Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9921
- return {
9922
- result: true,
9923
- coins: _this4._supportedCoins.filter(function (item) {
9924
- var _item$coin, _exceptCurrency;
9925
- return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9926
- }).map(function (item) {
9927
- return item.coin;
9928
- })
9929
- };
9930
- });
9931
- }, function (e) {
9932
- var _e$response3;
9933
- if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9934
- return {
9935
- result: false,
9936
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9937
- };
9938
- }
9939
- improveAndRethrow(e, loggerSource);
9940
- }));
9941
- } catch (e) {
9942
- return Promise.reject(e);
9943
- }
9944
- };
9945
- _proto.initialize = function initialize() {
9946
- try {
9947
- var _this5 = this;
9948
- return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9949
- } catch (e) {
9950
- return Promise.reject(e);
9951
- }
9952
- };
9953
- _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9954
- var loggerSource = "getIconUrl";
9955
- try {
9956
- var _this$_supportedCoins2, _this$_supportedCoins3;
9957
- var coin = coinOrTicker;
9958
- if (!(coinOrTicker instanceof Coin)) {
9959
- var _this$_supportedCoins;
9960
- coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9961
- return i.coin.ticker === coinOrTicker;
9962
- })) == null ? void 0 : _this$_supportedCoins.coin;
9963
- }
9964
- return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9965
- var _item$coin2, _coin;
9966
- return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9967
- })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9968
- } catch (e) {
9969
- improveAndRethrow(e, loggerSource);
9970
- }
9971
- };
9972
10140
  _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9973
10141
  try {
9974
- var _this6 = this;
10142
+ var _this2 = this;
9975
10143
  var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
9976
- return Promise.resolve(_catch$2(function () {
9977
- var _temp = function (_this6$_supportedCoin) {
9978
- if (!((_this6$_supportedCoin = _this6._supportedCoins) != null && _this6$_supportedCoin.length)) {
9979
- return Promise.resolve(axios.get(_this6._URL + "/api/v2/currencies")).then(function (rawResponse) {
10144
+ return Promise.resolve(_catch$3(function () {
10145
+ var _temp = function (_this2$_supportedCoin) {
10146
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length)) {
10147
+ return Promise.resolve(axios.get(_this2._URL + "/api/v2/currencies")).then(function (rawResponse) {
9980
10148
  var _rawResponse$data, _rawResponse$data2;
9981
10149
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
9982
10150
  var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
9983
10151
  Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
9984
- _this6._supportedCoins = allowedCoins.map(function (item) {
9985
- var coin = _this6._customCoinBuilder(item.code, item.network);
9986
- if (!coin && !_this6.useRestrictedCoinsSet) {
9987
- var _item$name;
10152
+ _this2._supportedCoins = allowedCoins.map(function (item) {
10153
+ var coin = _this2._customCoinBuilder(item.code, item.network);
10154
+ if (!coin && !_this2.useRestrictedCoinsSet) {
9988
10155
  /** Building coin object for coin that isn't supported OOB in Rabbit.
9989
10156
  * We are doing this way to be able to use extended coins set for swaps.
9990
10157
  * These temporary built coins are only for in-swap use, and we omit some usual
@@ -9998,11 +10165,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9998
10165
  /** Removing ticker and protocol name from coin name as we usually use them explicitly
9999
10166
  * from coin object rather than counting on having it in the coin name itself.
10000
10167
  * This processing is needed due to poor quality of swapspace coins names. */
10001
- var name = ((_item$name = item.name) != null ? _item$name : "").replaceAll("(" + code + ")", "").replaceAll("(" + network + ")", "").replaceAll(/ +/g, " ").trim();
10002
- if (name === "") {
10003
- // Rolling back to original name if our processing leads in empty name
10004
- name = item.name;
10005
- }
10168
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
10006
10169
  var ticker = "" + code + (code === network ? "" : network);
10007
10170
  var defaultDecimalPlacesForCoinNotSupportedOOB = 8;
10008
10171
  var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
@@ -10018,16 +10181,17 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10018
10181
  network: item.network,
10019
10182
  hasExtraId: item.hasExtraId,
10020
10183
  extraIdName: item.extraIdName,
10021
- isPopular: !!item.popular,
10184
+ isPopular: item.popular ? 1 : 0,
10022
10185
  iconURL: item.icon ? "https://storage.swapspace.co" + item.icon : FALLBACK_ASSET_ICON_URL,
10023
10186
  deposit: (_item$deposit = item.deposit) != null ? _item$deposit : false,
10024
10187
  withdrawal: (_item$withdrawal = item.withdrawal) != null ? _item$withdrawal : false,
10025
- validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null
10188
+ validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null,
10189
+ isAvailable: true
10026
10190
  };
10027
10191
  }
10028
10192
  return [];
10029
10193
  }).flat();
10030
- _this6._putPopularCoinsFirst();
10194
+ _this2._putPopularCoinsFirst();
10031
10195
  });
10032
10196
  }
10033
10197
  }();
@@ -10041,15 +10205,15 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10041
10205
  };
10042
10206
  _proto._fetchPartnersListIfNeeded = function _fetchPartnersListIfNeeded() {
10043
10207
  try {
10044
- var _this7 = this;
10208
+ var _this3 = this;
10045
10209
  var loggerSource = "_fetchPartnersListIfNeeded";
10046
- return Promise.resolve(_catch$2(function () {
10047
- var _temp2 = function (_this7$_partners) {
10048
- if (((_this7$_partners = _this7._partners) == null ? void 0 : _this7$_partners.length) === 0) {
10049
- return Promise.resolve(axios.get(_this7._URL + "/api/v2/partners")).then(function (rawResponse) {
10210
+ return Promise.resolve(_catch$3(function () {
10211
+ var _temp2 = function (_this3$_partners) {
10212
+ if (((_this3$_partners = _this3._partners) == null ? void 0 : _this3$_partners.length) === 0) {
10213
+ return Promise.resolve(axios.get(_this3._URL + "/api/v2/partners")).then(function (rawResponse) {
10050
10214
  var _rawResponse$data3;
10051
10215
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data3 = rawResponse.data) == null ? void 0 : _rawResponse$data3.length) + " partners", loggerSource);
10052
- _this7._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10216
+ _this3._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10053
10217
  });
10054
10218
  }
10055
10219
  }();
@@ -10060,99 +10224,30 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10060
10224
  } catch (e) {
10061
10225
  return Promise.reject(e);
10062
10226
  }
10063
- }
10064
- /**
10065
- * This method sort internal list putting popular (as swapspace thinks) coins to the top.
10066
- * This is just for users of this API if they don't care about the sorting - we just improve a list a bit this way.
10067
- * @private
10068
- */
10069
- ;
10070
- _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
10071
- this._supportedCoins.sort(function (i1, i2) {
10072
- if (i1.isPopular && !i2.isPopular) return -1;
10073
- if (i2.isPopular && !i1.isPopular) return 1;
10074
- return i1.coin.ticker > i2.coin.ticker ? 1 : i1.coin.ticker < i2.coin.ticker ? -1 : 0;
10075
- });
10076
- };
10077
- _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
10078
- try {
10079
- var _this8 = this;
10080
- var loggerSource = "getCoinToUSDTRate";
10081
- return Promise.resolve(_catch$2(function () {
10082
- return coin ? Promise.resolve(_this8._fetchSupportedCurrenciesIfNeeded()).then(function () {
10083
- var _this8$_supportedCoin;
10084
- // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
10085
- var usdtTrc20 = (_this8$_supportedCoin = _this8._supportedCoins.find(function (i) {
10086
- return i.coin.ticker === "USDTTRC20";
10087
- })) == null ? void 0 : _this8$_supportedCoin.coin;
10088
- if (!usdtTrc20) {
10089
- return {
10090
- result: false
10091
- };
10092
- }
10093
- var cached = _this8._cache.get("swapspace_usdt_rate_" + coin.ticker);
10094
- if (cached != null) {
10095
- return {
10096
- result: true,
10097
- rate: cached
10098
- };
10099
- }
10100
- Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
10101
- return Promise.resolve(_this8.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
10102
- if (!result.result) {
10103
- return {
10104
- result: false
10105
- };
10106
- }
10107
-
10108
- // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
10109
- var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
10110
- var rate = BigNumber(1).div(BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
10111
- _this8._cache.put("swapspace_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
10112
- );
10113
- return {
10114
- result: true,
10115
- rate: rate
10116
- };
10117
- });
10118
- }) : null;
10119
- }, function (e) {
10120
- improveAndRethrow(e, loggerSource);
10121
- }));
10122
- } catch (e) {
10123
- return Promise.reject(e);
10124
- }
10125
10227
  };
10126
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
10127
- try {
10128
- var _item$coin3;
10129
- var item = this._supportedCoins.find(function (i) {
10130
- return i.coin.ticker === ticker;
10131
- });
10132
- return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10133
- } catch (e) {
10134
- improveAndRethrow(e, "getCoinByTickerIfPresent");
10135
- }
10136
- };
10137
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
10228
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
10138
10229
  if (fixed === void 0) {
10139
10230
  fixed = false;
10140
10231
  }
10141
10232
  if (fromCoinToUsdRate === void 0) {
10142
10233
  fromCoinToUsdRate = null;
10143
10234
  }
10235
+ if (amountIsToReceive === void 0) {
10236
+ amountIsToReceive = false;
10237
+ }
10144
10238
  try {
10145
- var _this9 = this;
10239
+ var _this4 = this;
10146
10240
  var loggerSource = "getSwapInfo";
10147
- return Promise.resolve(_catch$2(function () {
10241
+ return Promise.resolve(_catch$3(function () {
10242
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10148
10243
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean") {
10149
10244
  throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed);
10150
10245
  }
10151
- var fromCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10246
+ var fromCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10152
10247
  var _i$coin;
10153
10248
  return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
10154
10249
  });
10155
- var toCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10250
+ var toCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10156
10251
  var _i$coin2;
10157
10252
  return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
10158
10253
  });
@@ -10162,11 +10257,11 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10162
10257
  return !fromCoinSwapspaceDetails.deposit || !toCoinSwapspaceDetails.withdrawal ? {
10163
10258
  result: false,
10164
10259
  reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
10165
- } : Promise.resolve(axios.get(_this9._URL + "/api/v2/amounts?fromCurrency=" + fromCoinSwapspaceDetails.code + "&fromNetwork=" + fromCoinSwapspaceDetails.network + "&toNetwork=" + toCoinSwapspaceDetails.network + "&toCurrency=" + toCoinSwapspaceDetails.code + "&amount=" + amountCoins + "&estimated=false")).then(function (response) {
10260
+ } : Promise.resolve(axios.get(_this4._URL + "/api/v2/amounts?fromCurrency=" + fromCoinSwapspaceDetails.code + "&fromNetwork=" + fromCoinSwapspaceDetails.network + "&toNetwork=" + toCoinSwapspaceDetails.network + "&toCurrency=" + toCoinSwapspaceDetails.code + "&amount=" + amountCoins + "&estimated=false")).then(function (response) {
10166
10261
  var _response$data, _exchangesSupportingT;
10167
10262
  var _exit;
10168
- function _temp4(_result6) {
10169
- if (_exit) return _result6;
10263
+ function _temp4(_result2) {
10264
+ if (_exit) return _result2;
10170
10265
  var result = {
10171
10266
  result: false,
10172
10267
  reason: smallestMin && BigNumber(amountCoins).lt(smallestMin) ? SwapProvider.NO_SWAPS_REASONS.TOO_LOW : greatestMax && BigNumber(amountCoins).gt(greatestMax) ? SwapProvider.NO_SWAPS_REASONS.TOO_HIGH : SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED,
@@ -10260,9 +10355,9 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10260
10355
  }
10261
10356
  }
10262
10357
  var rate = bestOpt.toAmount && bestOpt.fromAmount ? BigNumber(bestOpt.toAmount).div(bestOpt.fromAmount) : null;
10263
- return Promise.resolve(_this9._fetchPartnersListIfNeeded()).then(function () {
10358
+ return Promise.resolve(_this4._fetchPartnersListIfNeeded()).then(function () {
10264
10359
  var _bestOpt$duration;
10265
- var partner = _this9._partners.find(function (p) {
10360
+ var partner = _this4._partners.find(function (p) {
10266
10361
  var _bestOpt$partner;
10267
10362
  return (bestOpt == null || (_bestOpt$partner = bestOpt.partner) == null ? void 0 : _bestOpt$partner.toLowerCase()) === p.path.toLowerCase();
10268
10363
  });
@@ -10273,7 +10368,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10273
10368
  max: max,
10274
10369
  smallestMin: smallestMin,
10275
10370
  greatestMax: greatestMax,
10276
- rate: rate != null ? AmountUtils.trim(rate, _this9._maxRateDigits) : null,
10371
+ rate: rate != null ? AmountUtils.trim(rate, _this4._maxRateDigits) : null,
10277
10372
  durationMinutesRange: (_bestOpt$duration = bestOpt.duration) != null ? _bestOpt$duration : null,
10278
10373
  fixed: bestOpt.fixed,
10279
10374
  rawSwapData: bestOpt,
@@ -10287,8 +10382,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10287
10382
  return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
10288
10383
  });
10289
10384
  }, function (e) {
10290
- var _e$response4;
10291
- if ((e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status) === 429) {
10385
+ var _e$response;
10386
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
10292
10387
  return {
10293
10388
  result: false,
10294
10389
  reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
@@ -10301,18 +10396,22 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10301
10396
  return Promise.reject(e);
10302
10397
  }
10303
10398
  };
10304
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
10399
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
10305
10400
  if (toCurrencyExtraId === void 0) {
10306
10401
  toCurrencyExtraId = "";
10307
10402
  }
10308
10403
  if (refundExtraId === void 0) {
10309
10404
  refundExtraId = "";
10310
10405
  }
10406
+ if (amountIsToReceive === void 0) {
10407
+ amountIsToReceive = false;
10408
+ }
10311
10409
  try {
10312
- var _this10 = this;
10410
+ var _this5 = this;
10313
10411
  var loggerSource = "createSwap";
10314
10412
  var partner = rawSwapData == null ? void 0 : rawSwapData.partner;
10315
- return Promise.resolve(_catch$2(function () {
10413
+ return Promise.resolve(_catch$3(function () {
10414
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10316
10415
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean" || clientIpAddress.length === 0) {
10317
10416
  throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + (clientIpAddress == null ? void 0 : clientIpAddress.length) + " " + fixed);
10318
10417
  }
@@ -10320,12 +10419,12 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10320
10419
  ) {
10321
10420
  throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
10322
10421
  }
10323
- var _this10$_supportedCoi = _this10._supportedCoins.reduce(function (prev, coinData) {
10422
+ var _this5$_supportedCoin = _this5._supportedCoins.reduce(function (prev, coinData) {
10324
10423
  return [coinData.coin.ticker === fromCoin.ticker ? coinData.hasExtraId : prev[0], coinData.coin.ticker === toCoin.ticker ? coinData.hasExtraId : prev[1]];
10325
10424
  }, [false, false]),
10326
- fromCurrencyHasExtraId = _this10$_supportedCoi[0],
10327
- toCurrencyHasExtraId = _this10$_supportedCoi[1];
10328
- return Promise.resolve(_this10._fetchSupportedCurrenciesIfNeeded()).then(function () {
10425
+ fromCurrencyHasExtraId = _this5$_supportedCoin[0],
10426
+ toCurrencyHasExtraId = _this5$_supportedCoin[1];
10427
+ return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
10329
10428
  var _toCurrencyExtraId, _refundExtraId;
10330
10429
  var requestData = {
10331
10430
  partner: partner,
@@ -10344,7 +10443,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10344
10443
  refund: refundAddress
10345
10444
  };
10346
10445
  Logger.log("Sending create request: " + safeStringify(requestData), loggerSource);
10347
- return Promise.resolve(axios.post(_this10._URL + "/api/v2/exchange", requestData)).then(function (response) {
10446
+ return Promise.resolve(axios.post(_this5._URL + "/api/v2/exchange", requestData)).then(function (response) {
10348
10447
  var result = response.data;
10349
10448
  Logger.log("Creation result " + safeStringify(result), loggerSource);
10350
10449
  if (result != null && result.id) {
@@ -10369,7 +10468,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10369
10468
  toAmount: AmountUtils.trim(result == null || (_result$to4 = result.to) == null ? void 0 : _result$to4.amount, toCoin.digits),
10370
10469
  toAddress: result == null || (_result$to5 = result.to) == null ? void 0 : _result$to5.address,
10371
10470
  fromCurrencyExtraId: (_result$from$extraId = result == null || (_result$from6 = result.from) == null ? void 0 : _result$from6.extraId) != null ? _result$from$extraId : "",
10372
- rate: AmountUtils.trim(rate, _this10._maxRateDigits),
10471
+ rate: AmountUtils.trim(rate, _this5._maxRateDigits),
10373
10472
  fixed: result.fixed
10374
10473
  };
10375
10474
  }
@@ -10379,7 +10478,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10379
10478
  });
10380
10479
  });
10381
10480
  }, function (e) {
10382
- var _e$response5, _e$response6;
10481
+ var _e$response2, _e$response3;
10383
10482
  Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
10384
10483
  var composeFailResult = function composeFailResult(reason) {
10385
10484
  return {
@@ -10388,8 +10487,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10388
10487
  partner: partner
10389
10488
  };
10390
10489
  };
10391
- var status = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.status;
10392
- var data = e == null || (_e$response6 = e.response) == null ? void 0 : _e$response6.data;
10490
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
10491
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
10393
10492
  if (status === 429) {
10394
10493
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10395
10494
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10438,9 +10537,9 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10438
10537
  };
10439
10538
  _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10440
10539
  try {
10441
- var _this11 = this;
10540
+ var _this6 = this;
10442
10541
  var loggerSource = "getExistingSwapsDetailsAndStatus";
10443
- return Promise.resolve(_catch$2(function () {
10542
+ return Promise.resolve(_catch$3(function () {
10444
10543
  if (swapIds.find(function (id) {
10445
10544
  return typeof id !== "string";
10446
10545
  })) {
@@ -10448,8 +10547,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10448
10547
  }
10449
10548
  var getNotFailingOn404 = function getNotFailingOn404(swapId) {
10450
10549
  try {
10451
- return Promise.resolve(_catch$2(function () {
10452
- return Promise.resolve(axios.get(_this11._URL + "/api/v2/exchange/" + swapId));
10550
+ return Promise.resolve(_catch$3(function () {
10551
+ return Promise.resolve(axios.get(_this6._URL + "/api/v2/exchange/" + swapId));
10453
10552
  }, function (error) {
10454
10553
  var _error$response;
10455
10554
  if ((error == null || (_error$response = error.response) == null ? void 0 : _error$response.status) === 404) return [];
@@ -10469,13 +10568,13 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10469
10568
  var swaps = wo404.map(function (r) {
10470
10569
  return r.data;
10471
10570
  }).map(function (swap, index) {
10472
- var _this11$_supportedCoi, _this11$_supportedCoi2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10473
- var fromCoin = (_this11$_supportedCoi = _this11._supportedCoins.find(function (i) {
10571
+ var _this6$_supportedCoin, _this6$_supportedCoin2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10572
+ var fromCoin = (_this6$_supportedCoin = _this6._supportedCoins.find(function (i) {
10474
10573
  return i.code === swap.from.code && i.network === swap.from.network;
10475
- })) == null ? void 0 : _this11$_supportedCoi.coin;
10476
- var toCoin = (_this11$_supportedCoi2 = _this11._supportedCoins.find(function (i) {
10574
+ })) == null ? void 0 : _this6$_supportedCoin.coin;
10575
+ var toCoin = (_this6$_supportedCoin2 = _this6._supportedCoins.find(function (i) {
10477
10576
  return i.code === swap.to.code && i.network === swap.to.network;
10478
- })) == null ? void 0 : _this11$_supportedCoi2.coin;
10577
+ })) == null ? void 0 : _this6$_supportedCoin2.coin;
10479
10578
  if (!fromCoin || !toCoin) {
10480
10579
  return []; // We skip swaps with not supported coins for now
10481
10580
  }
@@ -10484,10 +10583,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10484
10583
  };
10485
10584
  var expiresAt = toUtcTimestamp(swap.timestamps.expiresAt);
10486
10585
  var isExpiredByTime = expiresAt < Date.now();
10487
- var status = _this11._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10586
+ var status = _this6._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10488
10587
  var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
10489
10588
  var addressToSendCoinsToSwapspace = swap.from.address;
10490
- return new ExistingSwap(swapIds[index], status, toUtcTimestamp(swap.timestamps.createdAt), expiresAt, swap.confirmations, AmountUtils.trim(swap.rate, _this11._maxRateDigits), swap.fixed, swap.refundAddress, addressToSendCoinsToSwapspace, fromCoin, AmountUtils.trim(swap.from.amount, fromCoin.digits), swap.from.transactionHash, swap.blockExplorerTransactionUrl.from, toCoin, AmountUtils.trim(swap.to.amount, toDigits), swap.to.transactionHash, swap.blockExplorerTransactionUrl.to, swap.to.address, swap.partner, (_swap$from$extraId = swap.from.extraId) != null ? _swap$from$extraId : null, (_swap$to$extraId = swap.to.extraId) != null ? _swap$to$extraId : null, (_swap$refundExtraId = swap.refundExtraId) != null ? _swap$refundExtraId : null);
10589
+ return new ExistingSwap(swapIds[index], status, toUtcTimestamp(swap.timestamps.createdAt), expiresAt, swap.confirmations, AmountUtils.trim(swap.rate, _this6._maxRateDigits), swap.fixed, swap.refundAddress, addressToSendCoinsToSwapspace, fromCoin, AmountUtils.trim(swap.from.amount, fromCoin.digits), swap.from.transactionHash, swap.blockExplorerTransactionUrl.from, toCoin, AmountUtils.trim(swap.to.amount, toDigits), swap.to.transactionHash, swap.blockExplorerTransactionUrl.to, swap.to.address, swap.partner, (_swap$from$extraId = swap.from.extraId) != null ? _swap$from$extraId : null, (_swap$to$extraId = swap.to.extraId) != null ? _swap$to$extraId : null, (_swap$refundExtraId = swap.refundExtraId) != null ? _swap$refundExtraId : null);
10491
10590
  }).flat();
10492
10591
  Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
10493
10592
  return {
@@ -10496,7 +10595,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10496
10595
  };
10497
10596
  });
10498
10597
  }, function (e) {
10499
- var _e$response7, _e$response8;
10598
+ var _e$response4, _e$response5;
10500
10599
  Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
10501
10600
  var composeFailResult = function composeFailResult(reason) {
10502
10601
  return {
@@ -10504,8 +10603,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10504
10603
  reason: reason
10505
10604
  };
10506
10605
  };
10507
- var status = e == null || (_e$response7 = e.response) == null ? void 0 : _e$response7.status;
10508
- var data = e == null || (_e$response8 = e.response) == null ? void 0 : _e$response8.data;
10606
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
10607
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
10509
10608
  if (status === 429) {
10510
10609
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10511
10610
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10516,45 +10615,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10516
10615
  return Promise.reject(e);
10517
10616
  }
10518
10617
  };
10519
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
10520
- try {
10521
- var assetData = this._supportedCoins.find(function (i) {
10522
- var _i$coin3;
10523
- return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (asset == null ? void 0 : asset.ticker);
10524
- });
10525
- if (assetData) {
10526
- var corrected = assetData.validationRegexp.trim();
10527
- corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10528
- corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10529
- return address.match(corrected) != null;
10530
- }
10531
- } catch (e) {
10532
- Logger.logError(e, "isAddressValidForAsset");
10533
- }
10534
- return false;
10535
- };
10536
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10537
- try {
10538
- var assetData = this._supportedCoins.find(function (i) {
10539
- var _i$coin4;
10540
- return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (asset == null ? void 0 : asset.ticker);
10541
- });
10542
- if (assetData != null && assetData.hasExtraId) {
10543
- if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10544
- // We return some default name if the extraIdName is empty
10545
- return "ID";
10546
- }
10547
- return assetData == null ? void 0 : assetData.extraIdName;
10548
- }
10549
- return null;
10550
- } catch (e) {
10551
- improveAndRethrow(e, "getExtraIdNameIfPresent");
10552
- }
10553
- };
10554
10618
  return SwapspaceSwapProvider;
10555
10619
  }(SwapProvider);
10556
10620
 
10557
- function _catch$1(body, recover) {
10621
+ function _catch$2(body, recover) {
10558
10622
  try {
10559
10623
  var result = body();
10560
10624
  } catch (e) {
@@ -10751,134 +10815,590 @@ var SwapUtils = /*#__PURE__*/function () {
10751
10815
  if (coinToCurrentFiatRate === void 0) {
10752
10816
  coinToCurrentFiatRate = null;
10753
10817
  }
10754
- if (fiatCurrencyDecimals === void 0) {
10755
- fiatCurrencyDecimals = null;
10818
+ if (fiatCurrencyDecimals === void 0) {
10819
+ fiatCurrencyDecimals = null;
10820
+ }
10821
+ try {
10822
+ var loggerSource = "getInitialSwapData";
10823
+ return Promise.resolve(_catch$2(function () {
10824
+ /* We use some amount here that should fit at least some of the limits of the swap providers.
10825
+ * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10826
+ * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10827
+ */
10828
+ var defaultAmountUsd = BigNumber("300");
10829
+ return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10830
+ var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10831
+ Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10832
+ return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10833
+ var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10834
+ if (!details) {
10835
+ throw new Error("The details are empty: " + safeStringify(details));
10836
+ }
10837
+ if (!details.result) {
10838
+ Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10839
+ if ((details == null ? void 0 : details.reason) === SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED || (details == null ? void 0 : details.reason) === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10840
+ return {
10841
+ result: false,
10842
+ reason: details.reason
10843
+ };
10844
+ } else {
10845
+ throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10846
+ }
10847
+ }
10848
+ var fiatMin = null;
10849
+ var fiatMax = null;
10850
+ var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10851
+ var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10852
+ if (fiatRate != null) {
10853
+ fiatMin = BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10854
+ fiatMax = BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10855
+ }
10856
+ var result = {
10857
+ result: true,
10858
+ min: details == null ? void 0 : details.smallestMin,
10859
+ fiatMin: fiatMin,
10860
+ max: details == null ? void 0 : details.greatestMax,
10861
+ fiatMax: fiatMax,
10862
+ rate: AmountUtils.trim(details.rate, 30)
10863
+ };
10864
+ Logger.log("Returning: " + safeStringify(result), loggerSource);
10865
+ return result;
10866
+ });
10867
+ });
10868
+ }, function (e) {
10869
+ Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
10870
+ improveAndRethrow(e, loggerSource);
10871
+ }));
10872
+ } catch (e) {
10873
+ return Promise.reject(e);
10874
+ }
10875
+ };
10876
+ SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10877
+ (function () {
10878
+ try {
10879
+ var _temp = _catch$2(function () {
10880
+ return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10881
+ }, function (e) {
10882
+ Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10883
+ });
10884
+ return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10885
+ } catch (e) {
10886
+ Promise.reject(e);
10887
+ }
10888
+ })();
10889
+ }
10890
+
10891
+ /**
10892
+ * If some swap is not found by id then there is no item in return list.
10893
+ *
10894
+ * @param swapProviders {SwapProvider[]} - Array of swap providers
10895
+ * @param swapIds {string[]} - Array of swap IDs
10896
+ * @return {Promise<{
10897
+ * result: true,
10898
+ * swaps: ExistingSwapWithFiatData[]
10899
+ * }|{
10900
+ * result: false,
10901
+ * reason: string
10902
+ * }>}
10903
+ */;
10904
+ SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProviders, swapIds) {
10905
+ try {
10906
+ return Promise.resolve(_catch$2(function () {
10907
+ var _interrupt;
10908
+ function _temp8() {
10909
+ if (swapIds.length > 0 && allSwaps.length === 0 && failResults.length > 0) {
10910
+ var failReasons = failResults.map(function (r) {
10911
+ return r.reason;
10912
+ });
10913
+ return {
10914
+ result: false,
10915
+ reason: failReasons.find(function (r) {
10916
+ return r !== SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED;
10917
+ }) ? failReasons.join("\n") : SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
10918
+ };
10919
+ }
10920
+ return {
10921
+ result: true,
10922
+ swaps: allSwaps
10923
+ };
10924
+ }
10925
+ var allSwaps = [];
10926
+ var remainingSwapIds = new Set(swapIds);
10927
+ var failResults = [];
10928
+ var _temp7 = _forOf(swapProviders, function (provider) {
10929
+ return Promise.resolve(provider.getExistingSwapsDetailsAndStatus([].concat(remainingSwapIds))).then(function (result) {
10930
+ var _temp6 = function () {
10931
+ if (result.result) {
10932
+ var _temp5 = function _temp5() {
10933
+ allSwaps = allSwaps.concat(_extendedSwaps);
10934
+
10935
+ // Stop if we have retrieved all swaps
10936
+ if (allSwaps.length >= swapIds.length) {
10937
+ _interrupt = 1;
10938
+ }
10939
+ };
10940
+ var _extendedSwaps = [];
10941
+ var _temp4 = _forOf(result.swaps, function (swap) {
10942
+ function _temp3() {
10943
+ remainingSwapIds["delete"](swap.id);
10944
+ }
10945
+ var _temp2 = function () {
10946
+ if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10947
+ return Promise.resolve(provider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10948
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10949
+ });
10950
+ } else {
10951
+ return Promise.resolve(Promise.all([provider.getCoinToUSDTRate(swap.fromCoin), provider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10952
+ var fromCoinFiatRate = _ref[0],
10953
+ toCoinFiatRate = _ref[1];
10954
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toCoinFiatRate == null ? void 0 : toCoinFiatRate.rate) != null ? BigNumber(swap.toAmount).times(toCoinFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10955
+ });
10956
+ }
10957
+ }();
10958
+ return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
10959
+ });
10960
+ return _temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4);
10961
+ } else {
10962
+ failResults.push(result);
10963
+ }
10964
+ }();
10965
+ if (_temp6 && _temp6.then) return _temp6.then(function () {});
10966
+ });
10967
+ }, function () {
10968
+ return _interrupt;
10969
+ });
10970
+ return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
10971
+ }, function (e) {
10972
+ improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
10973
+ }));
10974
+ } catch (e) {
10975
+ return Promise.reject(e);
10976
+ }
10977
+ };
10978
+ return SwapUtils;
10979
+ }();
10980
+
10981
+ function _catch$1(body, recover) {
10982
+ try {
10983
+ var result = body();
10984
+ } catch (e) {
10985
+ return recover(e);
10986
+ }
10987
+ if (result && result.then) {
10988
+ return result.then(void 0, recover);
10989
+ }
10990
+ return result;
10991
+ }
10992
+ var LetsExchangeSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10993
+ _inheritsLoose(LetsExchangeSwapProvider, _SwapProvider);
10994
+ function LetsExchangeSwapProvider(apiKeysProxyUrl, cache, customCoinBuilder, useRestrictedCoinsSet) {
10995
+ var _this;
10996
+ if (customCoinBuilder === void 0) {
10997
+ customCoinBuilder = function customCoinBuilder(coin, network) {
10998
+ return null;
10999
+ };
11000
+ }
11001
+ if (useRestrictedCoinsSet === void 0) {
11002
+ useRestrictedCoinsSet = true;
11003
+ }
11004
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
11005
+ _this._partners = [];
11006
+ _this._URL = apiKeysProxyUrl + "/letsexchange";
11007
+ _this.isAggregator = false;
11008
+ _this.COINS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
11009
+ _this.coinsLastUpdateTimestamp = null;
11010
+ return _this;
11011
+ }
11012
+ var _proto = LetsExchangeSwapProvider.prototype;
11013
+ _proto.getSwapCreationInfoTtlMs = function getSwapCreationInfoTtlMs() {
11014
+ return 110000;
11015
+ };
11016
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
11017
+ try {
11018
+ var _this2 = this;
11019
+ var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
11020
+ return Promise.resolve(_catch$1(function () {
11021
+ var _temp = function (_this2$_supportedCoin) {
11022
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length) || !_this2.coinsLastUpdateTimestamp || _this2.coinsLastUpdateTimestamp + _this2.COINS_EXPIRATION_TIME_MS < Date.now()) {
11023
+ return Promise.resolve(axios.get(_this2._URL + "/v2/coins")).then(function (rawResponse) {
11024
+ var _rawResponse$data, _rawResponse$data2;
11025
+ Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
11026
+ var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
11027
+ Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
11028
+ _this2._supportedCoins = allowedCoins.map(function (item) {
11029
+ var code = item.code.toUpperCase();
11030
+ if (!Array.isArray(item.networks)) return [];
11031
+ return item.networks.map(function (networkDetails) {
11032
+ var network = networkDetails.code.toUpperCase();
11033
+ var coin = _this2._customCoinBuilder(code, network);
11034
+ if (!coin && !_this2.useRestrictedCoinsSet) {
11035
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
11036
+ var ticker = "" + code + (code === network ? "" : network);
11037
+ var defaultDecimalPlacesForCoinNotSupportedOOB = DEFAULT_CRYPTO_DECIMAL_COUNT;
11038
+ var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
11039
+ coin = new Coin(name, ticker, code, defaultDecimalPlacesForCoinNotSupportedOOB, null, "", null, null, defaultMinConfirmationsForCoinNotSupportedOOB, null, [], 60000, null, code !== network ? new Protocol(network) : null, item.contract_address || null, false);
11040
+ }
11041
+ if (coin) {
11042
+ var _networkDetails$extra, _networkDetails$valid;
11043
+ return {
11044
+ coin: coin,
11045
+ code: item.code,
11046
+ network: networkDetails.code,
11047
+ hasExtraId: !!networkDetails.has_extra,
11048
+ extraIdName: (_networkDetails$extra = networkDetails.extra_name) != null ? _networkDetails$extra : null,
11049
+ isPopular: item.rating || 0,
11050
+ iconURL: item.icon ? item.icon : FALLBACK_ASSET_ICON_URL,
11051
+ deposit: true,
11052
+ // Letsexchange provide no such details
11053
+ withdrawal: true,
11054
+ // Letsexchange provide no such details
11055
+ validationRegexp: (_networkDetails$valid = networkDetails.validation_address_regex) != null ? _networkDetails$valid : null,
11056
+ isAvailable: (typeof item.is_active !== "number" || item.is_active === 1) && (typeof item.disabled !== "number" || item.disabled === 0) && (typeof networkDetails.is_active !== "number" || networkDetails.is_active === 1)
11057
+ };
11058
+ }
11059
+ return [];
11060
+ });
11061
+ }).flat();
11062
+ _this2.coinsLastUpdateTimestamp = Date.now();
11063
+ _this2._putPopularCoinsFirst();
11064
+ });
11065
+ }
11066
+ }();
11067
+ if (_temp && _temp.then) return _temp.then(function () {});
11068
+ }, function (e) {
11069
+ improveAndRethrow(e, loggerSource);
11070
+ }));
11071
+ } catch (e) {
11072
+ return Promise.reject(e);
11073
+ }
11074
+ };
11075
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
11076
+ if (fixed === void 0) {
11077
+ fixed = false;
11078
+ }
11079
+ if (amountIsToReceive === void 0) {
11080
+ amountIsToReceive = false;
11081
+ }
11082
+ try {
11083
+ var _this3 = this;
11084
+ var loggerSource = "getSwapInfo";
11085
+ return Promise.resolve(_catch$1(function () {
11086
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean" || amountIsToReceive && !fixed) {
11087
+ throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed + ", " + amountIsToReceive);
11088
+ }
11089
+ var fromCoinDetails = _this3._supportedCoins.find(function (i) {
11090
+ var _i$coin;
11091
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11092
+ });
11093
+ var toCoinDetails = _this3._supportedCoins.find(function (i) {
11094
+ var _i$coin2;
11095
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11096
+ });
11097
+ if (!fromCoinDetails || !toCoinDetails) {
11098
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11099
+ }
11100
+ if (!fromCoinDetails.deposit || !fromCoinDetails.isAvailable || !toCoinDetails.withdrawal || !toCoinDetails.isAvailable) {
11101
+ return {
11102
+ result: false,
11103
+ reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
11104
+ };
11105
+ }
11106
+ var pathAndQuery = "/v1/info" + (amountIsToReceive ? "-revert" : "?float=" + !fixed);
11107
+ return Promise.resolve(axios.post("" + _this3._URL + pathAndQuery, {
11108
+ from: fromCoinDetails.code,
11109
+ to: toCoinDetails.code,
11110
+ network_from: fromCoinDetails.network,
11111
+ network_to: toCoinDetails.network,
11112
+ amount: amountCoins,
11113
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11114
+ })).then(function (response) {
11115
+ Logger.log("Retrieved " + (response == null ? void 0 : response.data), loggerSource);
11116
+ var data = response.data;
11117
+
11118
+ // TODO: [dev] add SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING - request alternative rate. task_id=
11119
+
11120
+ // TODO: [feature, low] implement extra coins to fit min/max if there are frequent errors due to min/max exceeding
11121
+ // let extraCoinsToFitMinMax = "0";
11122
+ // if (typeof fromCoinToUsdRate === "string" && BigNumber(fromCoinToUsdRate).gt("0")) {
11123
+ // const extraUsdToFitMinMax = BigNumber("1"); // We correct the limits as the exact limit can fluctuate and cause failed swap creation
11124
+ // extraCoinsToFitMinMax = AmountUtils.trim(extraUsdToFitMinMax.div(fromCoinToUsdRate), fromCoin.digits);
11125
+ // }
11126
+ var min = null;
11127
+ if (data != null && data.min_amount) {
11128
+ min = AmountUtils.trim(data == null ? void 0 : data.min_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11129
+ }
11130
+ var max = null;
11131
+ if (data != null && data.max_amount) {
11132
+ max = AmountUtils.trim(data == null ? void 0 : data.max_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11133
+ }
11134
+ if (data.success === false && data.error) {
11135
+ // TODO: [dev] waiting for response from letsexchange about their not-documented responses
11136
+ // {
11137
+ // "success": false,
11138
+ // "error": "Internal error"
11139
+ // }
11140
+ throw new Error("Failed to estimate swap letsexchange");
11141
+ }
11142
+ if (BigNumber(data.rate).eq("0") || BigNumber(data.amount).eq("0")) {
11143
+ // TODO actualize according to letsexchage clarification - decide, can we count on min/max abcense? task_id=76512110797f4eab8b37f1bb789825cb
11144
+ // amount: "0", rate: "0", rate_id: ""
11145
+ var reason = SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED;
11146
+ if (min && BigNumber(amountCoins).lt(min)) {
11147
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_LOW;
11148
+ } else if (max && BigNumber(amountCoins).gt(max)) {
11149
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_HIGH;
11150
+ } else if (!amountIsToReceive) {
11151
+ // If we are not requesting receiving amount (it cannot be floating-rate)
11152
+ // todo [feature, moderate] request alternative rate. task_id=31884db5392f49738c20a86115c90e1f
11153
+ // const alternativeRate = 1;
11154
+ // const alternativeRateAvailable = alternativeRate;
11155
+ // if (alternativeRateAvailable) {
11156
+ // reason = fixed
11157
+ // ? SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING
11158
+ // : SwapProvider.NO_SWAPS_REASONS.NO_FLOATING_BUT_HAVE_FIXED;
11159
+ // }
11160
+ }
11161
+ return {
11162
+ result: false,
11163
+ reason: reason,
11164
+ smallestMin: min,
11165
+ greatestMax: max
11166
+ };
11167
+ }
11168
+ var rate = amountIsToReceive ? BigNumber(amountCoins).div(data.amount) : BigNumber(data.amount).div(amountCoins);
11169
+ return {
11170
+ result: true,
11171
+ min: min,
11172
+ max: max,
11173
+ smallestMin: min,
11174
+ greatestMax: max,
11175
+ rate: AmountUtils.trim(rate, _this3._maxRateDigits),
11176
+ durationMinutesRange: null,
11177
+ fixed: fixed,
11178
+ rawSwapData: data,
11179
+ isRefundAddressRequired: false
11180
+ };
11181
+ });
11182
+ }, function (e) {
11183
+ var _e$response;
11184
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
11185
+ return {
11186
+ result: false,
11187
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11188
+ };
11189
+ }
11190
+ Logger.log("Internal error when getting swap options " + safeStringify(e), loggerSource);
11191
+ improveAndRethrow(e, loggerSource);
11192
+ }));
11193
+ } catch (e) {
11194
+ return Promise.reject(e);
11195
+ }
11196
+ };
11197
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11198
+ if (toCurrencyExtraId === void 0) {
11199
+ toCurrencyExtraId = "";
11200
+ }
11201
+ if (refundExtraId === void 0) {
11202
+ refundExtraId = "";
11203
+ }
11204
+ if (amountIsToReceive === void 0) {
11205
+ amountIsToReceive = false;
10756
11206
  }
10757
11207
  try {
10758
- var loggerSource = "getInitialSwapData";
11208
+ var _this4 = this;
11209
+ var loggerSource = "createSwap";
10759
11210
  return Promise.resolve(_catch$1(function () {
10760
- /* We use some amount here that should fit at least some of the limits of the swap providers.
10761
- * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10762
- * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10763
- */
10764
- var defaultAmountUsd = BigNumber("300");
10765
- return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10766
- var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10767
- Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10768
- return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10769
- var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10770
- if (!details) {
10771
- throw new Error("The details are empty: " + safeStringify(details));
10772
- }
10773
- if (!details.result) {
10774
- Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10775
- if ((details == null ? void 0 : details.reason) === SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED || (details == null ? void 0 : details.reason) === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10776
- return {
10777
- result: false,
10778
- reason: details.reason
10779
- };
10780
- } else {
10781
- throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10782
- }
10783
- }
10784
- var fiatMin = null;
10785
- var fiatMax = null;
10786
- var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10787
- var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10788
- if (fiatRate != null) {
10789
- fiatMin = BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10790
- fiatMax = BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10791
- }
10792
- var result = {
11211
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean") {
11212
+ throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + fixed);
11213
+ }
11214
+ if (typeof rawSwapData !== "object" || fixed && !rawSwapData.rate_id) {
11215
+ throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
11216
+ }
11217
+ var fromCoinDetails = _this4._supportedCoins.find(function (i) {
11218
+ var _i$coin3;
11219
+ return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11220
+ });
11221
+ var toCoinDetails = _this4._supportedCoins.find(function (i) {
11222
+ var _i$coin4;
11223
+ return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11224
+ });
11225
+ if (!fromCoinDetails || !toCoinDetails) {
11226
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11227
+ }
11228
+ var requestBody = {
11229
+ coin_from: fromCoinDetails.code,
11230
+ network_from: fromCoinDetails.network,
11231
+ coin_to: toCoinDetails.code,
11232
+ network_to: toCoinDetails.network,
11233
+ withdrawal: toAddress,
11234
+ withdrawal_extra_id: toCurrencyExtraId,
11235
+ "return": refundAddress,
11236
+ return_extra_id: refundExtraId,
11237
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11238
+ };
11239
+ if (amountIsToReceive) {
11240
+ requestBody.withdrawal_amount = amount;
11241
+ } else {
11242
+ requestBody.deposit_amount = amount;
11243
+ }
11244
+ if (fixed) {
11245
+ requestBody.rate_id = rawSwapData.rate_id;
11246
+ }
11247
+ return Promise.resolve(axios.post(_this4._URL + "/v1/transaction" + (amountIsToReceive ? "-revert" : "?float=" + !fixed), requestBody)).then(function (response) {
11248
+ var result = response.data;
11249
+ Logger.log("Creation result " + safeStringify(result), loggerSource);
11250
+ if (result != null && result.transaction_id) {
11251
+ var _result$rate, _result$deposit_extra;
11252
+ var rate = BigNumber((_result$rate = result.rate) != null ? _result$rate : 0).isZero() ? BigNumber(result.withdrawal_amount).div(result.deposit_amount) : BigNumber(result.rate);
11253
+ return {
10793
11254
  result: true,
10794
- min: details == null ? void 0 : details.smallestMin,
10795
- fiatMin: fiatMin,
10796
- max: details == null ? void 0 : details.greatestMax,
10797
- fiatMax: fiatMax,
10798
- rate: AmountUtils.trim(details.rate, 30)
11255
+ swapId: result.transaction_id,
11256
+ fromCoin: fromCoin,
11257
+ fromAmount: AmountUtils.trim(result.deposit_amount, fromCoin.digits),
11258
+ fromAddress: result.deposit,
11259
+ toCoin: toCoin,
11260
+ toAmount: AmountUtils.trim(result.withdrawal_amount, toCoin.digits),
11261
+ toAddress: result.withdrawal,
11262
+ fromCurrencyExtraId: (_result$deposit_extra = result.deposit_extra_id) != null ? _result$deposit_extra : "",
11263
+ rate: AmountUtils.trim(rate, _this4._maxRateDigits),
11264
+ fixed: !result.is_float
10799
11265
  };
10800
- Logger.log("Returning: " + safeStringify(result), loggerSource);
10801
- return result;
10802
- });
11266
+ }
11267
+ var errorMessage = "Swap creation succeeded but the response is wrong: " + safeStringify(response);
11268
+ Logger.log(errorMessage, loggerSource);
11269
+ throw new Error(errorMessage);
10803
11270
  });
10804
11271
  }, function (e) {
10805
- Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
11272
+ var _e$response2, _e$response3;
11273
+ Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
11274
+ var composeFailResult = function composeFailResult(reason) {
11275
+ return {
11276
+ result: false,
11277
+ reason: reason
11278
+ };
11279
+ };
11280
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
11281
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
11282
+ if (status === 429) {
11283
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11284
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11285
+ }
11286
+ // TODO: [feature, low] add custom errors handling - waiting for response from letsexchange. task_id=00d2e435f6df4fb99af912135bd9ee27
11287
+ // 422 - missing params
11288
+ Logger.log("Internal error for swap: " + safeStringify(e), loggerSource);
10806
11289
  improveAndRethrow(e, loggerSource);
10807
11290
  }));
10808
11291
  } catch (e) {
10809
11292
  return Promise.reject(e);
10810
11293
  }
10811
11294
  };
10812
- SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10813
- (function () {
10814
- try {
10815
- var _temp = _catch$1(function () {
10816
- return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10817
- }, function (e) {
10818
- Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10819
- });
10820
- return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10821
- } catch (e) {
10822
- Promise.reject(e);
10823
- }
10824
- })();
10825
- }
10826
-
10827
- /**
10828
- * If some swap is not found by id then there is no item in return list.
10829
- *
10830
- * @param swapProvider {SwapProvider}
10831
- * @param swapIds {string[]}
10832
- * @return {Promise<{
10833
- * result: true,
10834
- * swaps: ExistingSwapWithFiatData[]
10835
- * }|{
10836
- * result: false,
10837
- * reason: string
10838
- * }>}
10839
- */;
10840
- SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProvider, swapIds) {
11295
+ _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10841
11296
  try {
11297
+ var _this5 = this;
11298
+ var loggerSource = "getExistingSwapsDetailsAndStatus";
10842
11299
  return Promise.resolve(_catch$1(function () {
10843
- return Promise.resolve(swapProvider.getExistingSwapsDetailsAndStatus(swapIds)).then(function (result) {
10844
- var _temp5 = function () {
10845
- if (result.result) {
10846
- var _temp4 = function _temp4() {
10847
- result.swaps = _extendedSwaps;
10848
- };
10849
- var _extendedSwaps = [];
10850
- var _temp3 = _forOf(result.swaps, function (swap) {
10851
- var _temp2 = function () {
10852
- if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10853
- return Promise.resolve(swapProvider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10854
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10855
- });
10856
- } else {
10857
- return Promise.resolve(Promise.all([swapProvider.getCoinToUSDTRate(swap.fromCoin), swapProvider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10858
- var fromCoinFiatRate = _ref[0],
10859
- toConFiatRate = _ref[1];
10860
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toConFiatRate == null ? void 0 : toConFiatRate.rate) != null ? BigNumber(swap.toAmount).times(toConFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10861
- });
10862
- }
10863
- }();
10864
- if (_temp2 && _temp2.then) return _temp2.then(function () {});
10865
- });
10866
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
11300
+ if (swapIds.find(function (id) {
11301
+ return typeof id !== "string";
11302
+ })) {
11303
+ throw new Error("Swap id is not string: " + safeStringify(swapIds));
11304
+ }
11305
+ return Promise.resolve(axios.get(_this5._URL + "/v1/transactions-list?ids[]=" + swapIds.join("&ids[]="))).then(function (response) {
11306
+ Logger.log("All swaps RAW: " + safeStringify(response.data), loggerSource);
11307
+ var swaps = response.data.map(function (swap, index) {
11308
+ var _this5$_supportedCoin, _this5$_supportedCoin2, _swap$deposit_extra_i, _swap$withdrawal_extr, _swap$return_extra_id;
11309
+ var fromCoin = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
11310
+ return i.code === swap.coin_from && i.network === swap.coin_from_network;
11311
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
11312
+ var toCoin = (_this5$_supportedCoin2 = _this5._supportedCoins.find(function (i) {
11313
+ return i.code === swap.coin_to && i.network === swap.coin_to_network;
11314
+ })) == null ? void 0 : _this5$_supportedCoin2.coin;
11315
+ if (!fromCoin || !toCoin) {
11316
+ return []; // We skip swaps with not supported coins for now
10867
11317
  }
10868
- }();
10869
- return _temp5 && _temp5.then ? _temp5.then(function () {
10870
- return result;
10871
- }) : result;
11318
+ var toUtcTimestamp = function toUtcTimestamp(timeStr) {
11319
+ return Date.parse(timeStr.match(/.+[Zz]$/) ? timeStr : timeStr + "Z");
11320
+ };
11321
+ var expiresAt = swap.expired_at ? swap.expired_at * 1000 : null;
11322
+ var createdAt = swap.created_at ? toUtcTimestamp("" + swap.created_at) : null;
11323
+ var isExpiredByTime = expiresAt && expiresAt < Date.now();
11324
+ var status = _this5._mapLetsExchangeStatusToRabbitStatus(swap.status, isExpiredByTime);
11325
+ var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
11326
+ return new ExistingSwap(swapIds[index], status, createdAt, expiresAt, swap.confirmations, AmountUtils.trim(swap.rate, _this5._maxRateDigits), swap.is_float != null ? !swap.is_float : false, swap["return"], swap.deposit, fromCoin, AmountUtils.trim(swap.deposit_amount, fromCoin.digits), swap.hash_in, swap.hash_in ? "" + swap.coin_from_explorer_url + swap.hash_in : null, toCoin, AmountUtils.trim(swap.withdrawal_amount, toDigits), swap.hash_out, swap.hash_out ? "" + swap.coin_to_explorer_url + swap.hash_out : null, swap.withdrawal, "letsexchange", (_swap$deposit_extra_i = swap.deposit_extra_id) != null ? _swap$deposit_extra_i : null, (_swap$withdrawal_extr = swap.withdrawal_extra_id) != null ? _swap$withdrawal_extr : null, (_swap$return_extra_id = swap.return_extra_id) != null ? _swap$return_extra_id : null);
11327
+ }).flat();
11328
+ Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
11329
+ return {
11330
+ result: true,
11331
+ swaps: swaps
11332
+ };
10872
11333
  });
10873
11334
  }, function (e) {
10874
- improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
11335
+ var _e$response4, _e$response5;
11336
+ Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
11337
+ var composeFailResult = function composeFailResult(reason) {
11338
+ return {
11339
+ result: false,
11340
+ reason: reason
11341
+ };
11342
+ };
11343
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
11344
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
11345
+ if (status === 429) {
11346
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11347
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11348
+ }
11349
+ improveAndRethrow(e, loggerSource);
10875
11350
  }));
10876
11351
  } catch (e) {
10877
11352
  return Promise.reject(e);
10878
11353
  }
11354
+ } // TODO: [dev] Serg, please check this during the review to make sure I did no mistakes in statuses mapping.
11355
+ // I will remove these comments after the review. https://api.letsexchange.io/doc
11356
+ // wait The exchange has just been created and it’s waiting for coins to reach the deposit wallet
11357
+ // confirmation The transaction appears in mempool and now it is waiting for necessary network confirmations to start.
11358
+ // confirmed The user’s payment is confirmed, the exchange process is about to start.
11359
+ // exchanging The exchange process is running.
11360
+ // sending Funds are being sent to the recipient`s address.
11361
+ // sending_confirmation The outgoing transaction is waiting for network confirmations.
11362
+ // success The exchange is completed and the funds are successfully sent to the recipient’s address.
11363
+ // aml_check_failed The deposit was marked as risky by AML check service.
11364
+ // overdue The deposit receiving time for this transaction has expired.
11365
+ // error The transaction has failed. In most cases, the amount that was sent differs from the amount that was specified when creating the transaction.
11366
+ // refund The exchange failed and the coins were refunded to the user's wallet.
11367
+ ;
11368
+ _proto._mapLetsExchangeStatusToRabbitStatus = function _mapLetsExchangeStatusToRabbitStatus(status, isExpiredByTime) {
11369
+ switch (status) {
11370
+ case "wait":
11371
+ if (isExpiredByTime) {
11372
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11373
+ }
11374
+ return SwapProvider.SWAP_STATUSES.WAITING_FOR_PAYMENT;
11375
+ case "confirmation":
11376
+ return SwapProvider.SWAP_STATUSES.CONFIRMING;
11377
+ case "confirmed":
11378
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11379
+ case "exchanging":
11380
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11381
+ case "sending":
11382
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11383
+ case "sending_confirmation":
11384
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11385
+ case "success":
11386
+ return SwapProvider.SWAP_STATUSES.COMPLETED;
11387
+ case "refund":
11388
+ return SwapProvider.SWAP_STATUSES.REFUNDED;
11389
+ case "overdue":
11390
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11391
+ case "aml_check_failed":
11392
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11393
+ case "error":
11394
+ return SwapProvider.SWAP_STATUSES.FAILED;
11395
+ default:
11396
+ throw new Error("Unknown LetsExchange status: " + status);
11397
+ }
10879
11398
  };
10880
- return SwapUtils;
10881
- }();
11399
+ return LetsExchangeSwapProvider;
11400
+ }(SwapProvider);
11401
+ LetsExchangeSwapProvider.AFFILIATE_ID = "0zbj9hf7xg7jgdgv";
10882
11402
 
10883
11403
  function _catch(body, recover) {
10884
11404
  try {
@@ -10896,13 +11416,16 @@ var PublicSwapService = /*#__PURE__*/function () {
10896
11416
  this._swapProvider = new SwapspaceSwapProvider(apiKeysProxyUrl, cache, function () {
10897
11417
  return null;
10898
11418
  }, false);
11419
+ this._fixedSwapProvider = new LetsExchangeSwapProvider(apiKeysProxyUrl, cache, function () {
11420
+ return null;
11421
+ }, false);
10899
11422
  }
10900
11423
  var _proto = PublicSwapService.prototype;
10901
11424
  _proto.initialize = function initialize() {
10902
11425
  try {
10903
11426
  var _this = this;
10904
11427
  var _temp = _catch(function () {
10905
- return Promise.resolve(_this._swapProvider.initialize()).then(function () {});
11428
+ return Promise.resolve(Promise.all([_this._swapProvider.initialize(), _this._fixedSwapProvider.initialize()])).then(function () {});
10906
11429
  }, function (e) {
10907
11430
  Logger.logError(e, "PublicSwapService.initialize");
10908
11431
  });
@@ -10910,39 +11433,61 @@ var PublicSwapService = /*#__PURE__*/function () {
10910
11433
  } catch (e) {
10911
11434
  return Promise.reject(e);
10912
11435
  }
10913
- };
11436
+ }
11437
+ /**
11438
+ * Gets all currencies across all partners. Useful for sitemap or supported currencies count/list.
11439
+ *
11440
+ * @return {Promise<{result: boolean, coins: Coin[]}|{result: boolean, reason: string}>}
11441
+ */
11442
+ ;
10914
11443
  _proto.getAllSupportedCurrenciesListForPublicSwap = function getAllSupportedCurrenciesListForPublicSwap() {
10915
11444
  try {
10916
11445
  var _this2 = this;
10917
11446
  var loggerSource = "getAllSupportedCurrenciesListForPublicSwap";
10918
11447
  return Promise.resolve(_catch(function () {
10919
- return Promise.resolve(_this2._swapProvider.getAllSupportedCurrencies()).then(function (result) {
10920
- var _result$coins;
10921
- if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10922
- SwapUtils.safeHandleRequestsLimitExceeding();
11448
+ return Promise.resolve(_this2.initialize()).then(function () {
11449
+ return Promise.resolve(Promise.all([_this2._fixedSwapProvider.getAllSupportedCurrencies(), _this2._swapProvider.getAllSupportedCurrencies()])).then(function (result) {
11450
+ var _result$0$coins, _result$1$coins, _result$coins;
11451
+ var allCoins = [].concat((_result$0$coins = result[0].coins) != null ? _result$0$coins : []);
11452
+ ((_result$1$coins = result[1].coins) != null ? _result$1$coins : []).forEach(function (c) {
11453
+ if (!allCoins.find(function (existingCoin) {
11454
+ return existingCoin.ticker === c.ticker;
11455
+ })) {
11456
+ allCoins.push(c);
11457
+ }
11458
+ });
11459
+ if (result[0].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED || result[1].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11460
+ SwapUtils.safeHandleRequestsLimitExceeding();
11461
+ // TODO: [dev] improve this during the whitebit integration. task_id=20e7e41211b540d081bf98f392a34b2c
11462
+ // return {
11463
+ // result: false,
11464
+ // reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
11465
+ // };
11466
+ } else if (result[0].reason || result[1].reason) {
11467
+ console.log("Failed to get all supported coins", result[0].reason, result[1].reason);
11468
+ }
11469
+ Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10923
11470
  return {
10924
- result: false,
10925
- reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11471
+ result: true,
11472
+ coins: allCoins
10926
11473
  };
10927
- }
10928
- Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10929
- return {
10930
- result: true,
10931
- coins: result.coins
10932
- };
11474
+ });
10933
11475
  });
10934
11476
  }, function (e) {
10935
- improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
11477
+ improveAndRethrow(e, "getAllSupportedCurrenciesListForPublicSwap");
10936
11478
  }));
10937
11479
  } catch (e) {
10938
11480
  return Promise.reject(e);
10939
11481
  }
10940
11482
  };
10941
- _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap() {
11483
+ _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap(fixed) {
11484
+ if (fixed === void 0) {
11485
+ fixed = false;
11486
+ }
10942
11487
  try {
10943
11488
  var _this3 = this;
10944
11489
  return Promise.resolve(_catch(function () {
10945
- return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false));
11490
+ return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false, fixed));
10946
11491
  }, function (e) {
10947
11492
  improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
10948
11493
  }));
@@ -10950,11 +11495,14 @@ var PublicSwapService = /*#__PURE__*/function () {
10950
11495
  return Promise.reject(e);
10951
11496
  }
10952
11497
  };
10953
- _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap() {
11498
+ _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap(fixed) {
11499
+ if (fixed === void 0) {
11500
+ fixed = false;
11501
+ }
10954
11502
  try {
10955
11503
  var _this4 = this;
10956
11504
  return Promise.resolve(_catch(function () {
10957
- return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true));
11505
+ return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true, fixed));
10958
11506
  }, function (e) {
10959
11507
  improveAndRethrow(e, "getWithdrawCurrenciesListForPublicSwap");
10960
11508
  }));
@@ -10962,15 +11510,19 @@ var PublicSwapService = /*#__PURE__*/function () {
10962
11510
  return Promise.reject(e);
10963
11511
  }
10964
11512
  };
10965
- _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw) {
11513
+ _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw, fixed) {
10966
11514
  if (withdraw === void 0) {
10967
11515
  withdraw = false;
10968
11516
  }
11517
+ if (fixed === void 0) {
11518
+ fixed = false;
11519
+ }
10969
11520
  try {
10970
11521
  var _this5 = this;
10971
11522
  var loggerSource = "getCurrenciesListForPublicSwap";
10972
11523
  return Promise.resolve(_catch(function () {
10973
- return Promise.resolve(withdraw ? _this5._swapProvider.getWithdrawalCurrencies() : _this5._swapProvider.getDepositCurrencies()).then(function (result) {
11524
+ var provider = fixed ? _this5._fixedSwapProvider : _this5._swapProvider;
11525
+ return Promise.resolve(withdraw ? provider.getWithdrawalCurrencies() : provider.getDepositCurrencies()).then(function (result) {
10974
11526
  var _result$coins2;
10975
11527
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10976
11528
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -10995,6 +11547,9 @@ var PublicSwapService = /*#__PURE__*/function () {
10995
11547
  /**
10996
11548
  * Retrieves initial data for swapping two coins.
10997
11549
  *
11550
+ * Always FLOATING rate, FIXED is not supported - if you want to change it the default rate - all
11551
+ * the swaps code logic should be verified to align with this change.
11552
+ *
10998
11553
  * @param fromCoin {Coin}
10999
11554
  * @param toCoin {Coin}
11000
11555
  * @return {Promise<{
@@ -11047,6 +11602,8 @@ var PublicSwapService = /*#__PURE__*/function () {
11047
11602
  * @param fromAmountCoins {string}
11048
11603
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
11049
11604
  * @param [withoutFiat=false] {boolean} pass true if you don't need the fiat equivalent - this will diminish requests count
11605
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11606
+ * False means the amount is the sending amount.
11050
11607
  * @return {Promise<{
11051
11608
  * result: false,
11052
11609
  * reason: string,
@@ -11061,21 +11618,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11061
11618
  * }>}
11062
11619
  */
11063
11620
  ;
11064
- _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat) {
11621
+ _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat, amountIsToReceive) {
11065
11622
  if (fixed === void 0) {
11066
11623
  fixed = false;
11067
11624
  }
11068
11625
  if (withoutFiat === void 0) {
11069
11626
  withoutFiat = false;
11070
11627
  }
11628
+ if (amountIsToReceive === void 0) {
11629
+ amountIsToReceive = false;
11630
+ }
11071
11631
  try {
11072
11632
  var _this7 = this;
11073
11633
  var loggerSource = "getPublicSwapDetails";
11074
11634
  return Promise.resolve(_catch(function () {
11075
- function _temp2(_this7$_swapProvider$) {
11076
- var _this7$_swapProvider$2;
11077
- var coinUsdtRate = withoutFiat ? _this7$_swapProvider$ : (_this7$_swapProvider$2 = _this7$_swapProvider$ == null ? void 0 : _this7$_swapProvider$.rate) != null ? _this7$_swapProvider$2 : null;
11078
- return Promise.resolve(_this7._swapProvider.getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate)).then(function (details) {
11635
+ function _temp2(_getCoinToUSDTRate) {
11636
+ var _getCoinToUSDTRate$ra;
11637
+ var coinUsdtRate = withoutFiat ? _getCoinToUSDTRate : (_getCoinToUSDTRate$ra = _getCoinToUSDTRate == null ? void 0 : _getCoinToUSDTRate.rate) != null ? _getCoinToUSDTRate$ra : null;
11638
+ return Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate, amountIsToReceive)).then(function (details) {
11079
11639
  var _result$swapCreationI, _result$swapCreationI2;
11080
11640
  // eslint-disable-next-line no-console
11081
11641
  console.log("getSwapInfo result: ", details);
@@ -11136,7 +11696,10 @@ var PublicSwapService = /*#__PURE__*/function () {
11136
11696
  return result;
11137
11697
  });
11138
11698
  }
11139
- return withoutFiat ? _temp2(null) : Promise.resolve(_this7._swapProvider.getCoinToUSDTRate(fromCoin)).then(_temp2);
11699
+ if (amountIsToReceive && !fixed) {
11700
+ throw new Error("Estimating allowed only for fixed rate.");
11701
+ }
11702
+ return withoutFiat ? _temp2(null) : Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getCoinToUSDTRate(fromCoin)).then(_temp2);
11140
11703
  }, function (e) {
11141
11704
  improveAndRethrow(e, loggerSource);
11142
11705
  }));
@@ -11149,13 +11712,15 @@ var PublicSwapService = /*#__PURE__*/function () {
11149
11712
  *
11150
11713
  * @param fromCoin {Coin}
11151
11714
  * @param toCoin {Coin}
11152
- * @param fromAmount {string}
11715
+ * @param amount {string}
11153
11716
  * @param swapCreationInfo {BaseSwapCreationInfo}
11154
11717
  * @param toAddress {string}
11155
11718
  * @param refundAddress {string}
11156
11719
  * @param clientIp {string}
11157
11720
  * @param [toCurrencyExtraId] {string}
11158
11721
  * @param [refundExtraId] {string}
11722
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11723
+ * False means the amount is the sending amount.
11159
11724
  * @return {Promise<{
11160
11725
  * result: true,
11161
11726
  * fiatCurrencyCode: string,
@@ -11178,20 +11743,23 @@ var PublicSwapService = /*#__PURE__*/function () {
11178
11743
  * }>}
11179
11744
  */
11180
11745
  ;
11181
- _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, fromAmount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId) {
11746
+ _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, amount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11747
+ if (amountIsToReceive === void 0) {
11748
+ amountIsToReceive = false;
11749
+ }
11182
11750
  try {
11183
11751
  var _this8 = this;
11184
11752
  var loggerSource = "createPublicSwap";
11185
11753
  return Promise.resolve(_catch(function () {
11186
11754
  var _swapCreationInfo$fro, _swapCreationInfo$toC;
11187
- if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof fromAmount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11188
- throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + fromAmount + " " + swapCreationInfo);
11755
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || swapCreationInfo.isRefundAddressRequired && (typeof refundAddress !== "string" || refundAddress.length === 0) || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11756
+ throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + amount + " " + swapCreationInfo);
11189
11757
  }
11190
- Logger.log("Start: " + fromAmount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11758
+ Logger.log("Start: " + amount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11191
11759
  fromCoin: swapCreationInfo == null || (_swapCreationInfo$fro = swapCreationInfo.fromCoin) == null ? void 0 : _swapCreationInfo$fro.ticker,
11192
11760
  toCoin: swapCreationInfo == null || (_swapCreationInfo$toC = swapCreationInfo.toCoin) == null ? void 0 : _swapCreationInfo$toC.ticker
11193
11761
  })), loggerSource);
11194
- return Promise.resolve(_this8._swapProvider.createSwap(fromCoin, toCoin, fromAmount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId)).then(function (result) {
11762
+ return Promise.resolve((swapCreationInfo.fixed ? _this8._fixedSwapProvider : _this8._swapProvider).createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive)).then(function (result) {
11195
11763
  var _exit;
11196
11764
  function _temp6(_result8) {
11197
11765
  if (_exit) return _result8;
@@ -11221,7 +11789,7 @@ var PublicSwapService = /*#__PURE__*/function () {
11221
11789
  if (result.result && result != null && result.swapId) {
11222
11790
  var _temp4 = function _temp4() {
11223
11791
  var _result$fromCurrencyE;
11224
- // TODO: feature, cirtical] add GA event. task_id=tbd
11792
+ // TODO: feature, cirtical] add GA event. task_id=091004f1b6b748b29ddece6a130df904
11225
11793
  EventBusInstance.dispatch(PublicSwapService.PUBLIC_SWAP_CREATED_EVENT, null, fromCoin.ticker, toCoin.ticker, _fromAmountFiat);
11226
11794
  var toReturn = {
11227
11795
  result: true,
@@ -11301,7 +11869,7 @@ var PublicSwapService = /*#__PURE__*/function () {
11301
11869
  var _this9 = this;
11302
11870
  var loggerSource = "getPublicExistingSwapDetailsAndStatus";
11303
11871
  return Promise.resolve(_catch(function () {
11304
- return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts(_this9._swapProvider, swapIds)).then(function (result) {
11872
+ return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts([_this9._swapProvider, _this9._fixedSwapProvider], swapIds)).then(function (result) {
11305
11873
  if (!(result != null && result.result)) {
11306
11874
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11307
11875
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -11396,18 +11964,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11396
11964
 
11397
11965
  /**
11398
11966
  * @param coinOrTicker {Coin|string}
11967
+ * @param [isFixed=true] {boolean} rate type
11399
11968
  * @return {string} icon URL (ready to use)
11400
11969
  */;
11401
- _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker) {
11402
- return this._swapProvider.getIconUrl(coinOrTicker);
11970
+ _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker, isFixed) {
11971
+ // TODO: [feature, high] improve this logic - currently hacked to show better icons from fixed provider. task_id=3b6b8c2a9df04a86aaff2e070424b64f
11972
+ return this._fixedSwapProvider.getIconUrl(coinOrTicker);
11403
11973
  }
11404
11974
 
11405
11975
  /**
11406
11976
  * @param ticker {string}
11977
+ * @param [fixed=false] {boolean}
11407
11978
  * @return {Coin|null}
11408
11979
  */;
11409
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
11410
- return this._swapProvider.getCoinByTickerIfPresent(ticker);
11980
+ _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker, fixed) {
11981
+ if (fixed === void 0) {
11982
+ fixed = false;
11983
+ }
11984
+ return !fixed ? this._swapProvider.getCoinByTickerIfPresent(ticker) : this._fixedSwapProvider.getCoinByTickerIfPresent(ticker);
11411
11985
  }
11412
11986
 
11413
11987
  /**
@@ -11420,8 +11994,18 @@ var PublicSwapService = /*#__PURE__*/function () {
11420
11994
  var _this11 = this;
11421
11995
  return Promise.resolve(_catch(function () {
11422
11996
  return Promise.resolve(_this11._swapProvider.getCoinToUSDTRate(asset)).then(function (result) {
11423
- var _result$rate;
11424
- return (_result$rate = result == null ? void 0 : result.rate) != null ? _result$rate : null;
11997
+ function _temp10() {
11998
+ var _result$rate, _result13;
11999
+ return (_result$rate = (_result13 = result) == null ? void 0 : _result13.rate) != null ? _result$rate : null;
12000
+ }
12001
+ var _temp9 = function (_result14) {
12002
+ if (((_result14 = result) == null ? void 0 : _result14.rate) == null) {
12003
+ return Promise.resolve(_this11._fixedSwapProvider.getCoinToUSDTRate(asset)).then(function (_this11$_fixedSwapPro) {
12004
+ result = _this11$_fixedSwapPro;
12005
+ });
12006
+ }
12007
+ }();
12008
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
11425
12009
  });
11426
12010
  }, function (e) {
11427
12011
  improveAndRethrow(e, "getAssetToUsdtRate");
@@ -11433,12 +12017,16 @@ var PublicSwapService = /*#__PURE__*/function () {
11433
12017
  /**
11434
12018
  * @param asset {Coin}
11435
12019
  * @param address {string}
12020
+ * @param [fixed=false] {boolean}
11436
12021
  * @return {boolean}
11437
12022
  */
11438
12023
  ;
11439
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
12024
+ _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address, fixed) {
12025
+ if (fixed === void 0) {
12026
+ fixed = false;
12027
+ }
11440
12028
  try {
11441
- return this._swapProvider.isAddressValidForAsset(asset, address);
12029
+ return !fixed ? this._swapProvider.isAddressValidForAsset(asset, address) : this._fixedSwapProvider.isAddressValidForAsset(asset, address);
11442
12030
  } catch (e) {
11443
12031
  improveAndRethrow(e, "isAddressValidForAsset");
11444
12032
  }
@@ -11448,20 +12036,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11448
12036
  * Retrieves token by contract address.
11449
12037
  *
11450
12038
  * @param addressString {string}
12039
+ * @param [fixed=false] {boolean}
11451
12040
  * @return {Promise<Coin|null>}
11452
12041
  */;
11453
- _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString) {
12042
+ _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString, fixed) {
12043
+ if (fixed === void 0) {
12044
+ fixed = false;
12045
+ }
11454
12046
  try {
11455
12047
  var _exit3;
11456
12048
  var _this12 = this;
11457
- var _temp10 = _catch(function () {
12049
+ var _temp12 = _catch(function () {
11458
12050
  if (!addressString) {
11459
- var _temp9 = null;
12051
+ var _temp11 = null;
11460
12052
  _exit3 = 1;
11461
- return _temp9;
12053
+ return _temp11;
11462
12054
  }
11463
12055
  var addressLowerCase = addressString.toLowerCase();
11464
- return Promise.resolve(_this12._swapProvider.getAllSupportedCurrencies()).then(function (allCoins) {
12056
+ return Promise.resolve((fixed ? _this12._fixedSwapProvider : _this12._swapProvider).getAllSupportedCurrencies()).then(function (allCoins) {
11465
12057
  if (allCoins.result) {
11466
12058
  var _allCoins$coins$find = allCoins.coins.find(function (coin) {
11467
12059
  return coin.tokenAddress && coin.tokenAddress.toLowerCase() === addressLowerCase;
@@ -11473,21 +12065,25 @@ var PublicSwapService = /*#__PURE__*/function () {
11473
12065
  }, function (e) {
11474
12066
  Logger.logError(e, "getTokenByContractAddress");
11475
12067
  });
11476
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(function (_result13) {
11477
- return _exit3 ? _result13 : null;
11478
- }) : _exit3 ? _temp10 : null);
12068
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(function (_result15) {
12069
+ return _exit3 ? _result15 : null;
12070
+ }) : _exit3 ? _temp12 : null);
11479
12071
  } catch (e) {
11480
12072
  return Promise.reject(e);
11481
12073
  }
11482
12074
  }
11483
12075
  /**
11484
12076
  * @param asset {Coin}
12077
+ * @param [fixed=false] {boolean}
11485
12078
  * @return {string|null}
11486
12079
  */
11487
12080
  ;
11488
- _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset) {
12081
+ _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset, fixed) {
12082
+ if (fixed === void 0) {
12083
+ fixed = false;
12084
+ }
11489
12085
  try {
11490
- return this._swapProvider.getExtraIdNameIfPresent(asset);
12086
+ return (fixed ? this._fixedSwapProvider : this._swapProvider).getExtraIdNameIfPresent(asset);
11491
12087
  } catch (e) {
11492
12088
  improveAndRethrow(e, "getExtraIdNameIfPresentForAsset");
11493
12089
  }