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

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 +6428 -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 +129 -36
  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 +1156 -571
  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 +775 -328
  236. package/dist/index.modern.js.map +1 -1
  237. package/dist/index.module.js +1156 -571
  238. package/dist/index.module.js.map +1 -1
  239. package/dist/index.umd.js +1156 -571
  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 +61 -30
  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
package/dist/index.cjs CHANGED
@@ -1655,7 +1655,7 @@ var Logger = /*#__PURE__*/function () {
1655
1655
  return Logger;
1656
1656
  }();
1657
1657
 
1658
- function _catch$d(body, recover) {
1658
+ function _catch$f(body, recover) {
1659
1659
  try {
1660
1660
  var result = body();
1661
1661
  } catch (e) {
@@ -1671,7 +1671,7 @@ function useCallHandlingErrors() {
1671
1671
  setState = _useState[1];
1672
1672
  return React.useCallback(function (functionToBeCalled, event) {
1673
1673
  try {
1674
- var _temp = _catch$d(function () {
1674
+ var _temp = _catch$f(function () {
1675
1675
  return Promise.resolve(functionToBeCalled(event)).then(function () {});
1676
1676
  }, function (error) {
1677
1677
  Logger.logError(error, (functionToBeCalled == null ? void 0 : functionToBeCalled.name) || "errorBoundaryTrigger", "Caught by ErrorBoundary");
@@ -4609,6 +4609,15 @@ function useIsHydrated() {
4609
4609
  * @return {string|null}
4610
4610
  */
4611
4611
 
4612
+ /**
4613
+ * Callback to handle isFixed flag change.
4614
+ *
4615
+ * @function
4616
+ * @name onIsFixedChange
4617
+ * @param {boolean} isFixedNewValue - new value
4618
+ * @return {void}
4619
+ */
4620
+
4612
4621
  /**
4613
4622
  * Function validating addresses.
4614
4623
  * By default, will treat any addresses as valid.
@@ -4618,6 +4627,7 @@ function useIsHydrated() {
4618
4627
  * @name validateAddressByTicker
4619
4628
  * @param {string} ticker - Ticker symbol of the asset.
4620
4629
  * @param {string} address - Address to be validated
4630
+ * @param {boolean} isFixed - Is swap rate mode = fixed
4621
4631
  * @return {Promise<boolean>}
4622
4632
  */
4623
4633
 
@@ -4665,16 +4675,18 @@ function useIsHydrated() {
4665
4675
  * @param {boolean} [props.formHasFiat] - Indicates if the form supports fiat currency.
4666
4676
  * @param {string|null} [props.termsOfUseUrl] - Terms of use URL, shown only if both terms & privacy policy passed.
4667
4677
  * @param {string|null} [props.privacyPolicyUrl] - Privacy policy of use URL, shown only if both terms & privacy policy passed.
4678
+ * @param {string} props.recipientAddressExtraIdName - Extra ID name for the recipient address.
4679
+ * @param {string} props.refundAddressExtraIdName - Extra ID name for the refund address.
4668
4680
  * @param {object} [props.translations] - Object containing translations, default English texts will be used if omitted.
4669
4681
  * @param {string} props.swapSeparatorIconSrc - Source URL for the swap separator icon.
4670
4682
  * @param {boolean} props.swapButtonAlwaysActive - Setting that allows the form state to proceed to the next step regardless of validity.
4671
- * @param {getExtraIdNameByTicker} props.getExtraIdNameByTicker - Function returning extraId name for asset
4672
4683
  * @param {validateAddressByTicker} [props.validateAddressByTicker] - Function validating address
4684
+ * @param {onIsFixedChange} [props.onIsFixedChange] - callback for changed isFixed
4673
4685
  * @return {JSX.Element} Rendered SwapForm component.
4674
4686
  * @constructor
4675
4687
  */
4676
4688
 
4677
- function _catch$c(body, recover) {
4689
+ function _catch$e(body, recover) {
4678
4690
  try {
4679
4691
  var result = body();
4680
4692
  } catch (e) {
@@ -4686,7 +4698,7 @@ function _catch$c(body, recover) {
4686
4698
  return result;
4687
4699
  }
4688
4700
  var SwapForm = function SwapForm(_ref) {
4689
- var _isFixedRate$current2, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5, _isFixedRate$current3;
4701
+ var _isFixedRate$current2, _isFixedRate$current3, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5;
4690
4702
  var sendingAssetTicker = _ref.sendingAssetTicker,
4691
4703
  receivingAssetTicker = _ref.receivingAssetTicker,
4692
4704
  _ref$sendingAssetDeci = _ref.sendingAssetDecimalCount,
@@ -4729,7 +4741,7 @@ var SwapForm = function SwapForm(_ref) {
4729
4741
  _ref$formHasBalance = _ref.formHasBalance,
4730
4742
  formHasBalance = _ref$formHasBalance === void 0 ? false : _ref$formHasBalance,
4731
4743
  _ref$retrieveSwapDeta = _ref.retrieveSwapDetails,
4732
- retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll) {
4744
+ retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll, editedLastInput) {
4733
4745
  return Promise.resolve();
4734
4746
  } : _ref$retrieveSwapDeta,
4735
4747
  _ref$retrieveInitialS = _ref.retrieveInitialSwapData,
@@ -4756,17 +4768,17 @@ var SwapForm = function SwapForm(_ref) {
4756
4768
  termsOfUseUrl = _ref$termsOfUseUrl === void 0 ? null : _ref$termsOfUseUrl,
4757
4769
  _ref$privacyPolicyUrl = _ref.privacyPolicyUrl,
4758
4770
  privacyPolicyUrl = _ref$privacyPolicyUrl === void 0 ? null : _ref$privacyPolicyUrl,
4759
- _ref$getExtraIdNameBy = _ref.getExtraIdNameByTicker,
4760
- getExtraIdNameByTicker = _ref$getExtraIdNameBy === void 0 ? function (ticker) {
4761
- return null;
4762
- } : _ref$getExtraIdNameBy,
4763
4771
  _ref$validateAddressB = _ref.validateAddressByTicker,
4764
- validateAddressByTicker = _ref$validateAddressB === void 0 ? function (ticker) {
4772
+ validateAddressByTicker = _ref$validateAddressB === void 0 ? function () {
4765
4773
  return false;
4766
4774
  } : _ref$validateAddressB,
4767
4775
  swapSeparatorIconSrc = _ref.swapSeparatorIconSrc,
4768
4776
  _ref$swapButtonAlways = _ref.swapButtonAlwaysActive,
4769
4777
  swapButtonAlwaysActive = _ref$swapButtonAlways === void 0 ? false : _ref$swapButtonAlways,
4778
+ _ref$onIsFixedChange = _ref.onIsFixedChange,
4779
+ onIsFixedChange = _ref$onIsFixedChange === void 0 ? function () {} : _ref$onIsFixedChange,
4780
+ recipientAddressExtraIdName = _ref.recipientAddressExtraIdName,
4781
+ refundAddressExtraIdName = _ref.refundAddressExtraIdName,
4770
4782
  _ref$translations = _ref.translations,
4771
4783
  translations = _ref$translations === void 0 ? {
4772
4784
  swapAllButtonTitles: {
@@ -4797,7 +4809,9 @@ var SwapForm = function SwapForm(_ref) {
4797
4809
  addressTitle: "Recepient address",
4798
4810
  refundAddressTitle: "Refund address",
4799
4811
  extraIdPlaceholder: "(optional)",
4812
+ refundAddressExtraIdTitle: "Refund extra ID (MEMO):",
4800
4813
  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.",
4814
+ receivingAddressExtraIdTitle: "Destination extra ID (MEMO):",
4801
4815
  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."
4802
4816
  },
4803
4817
  rateSelector: {
@@ -4808,8 +4822,6 @@ var SwapForm = function SwapForm(_ref) {
4808
4822
  } : _ref$translations;
4809
4823
  var DETAIL_REFRESH_INTERVAL_MS = 1.5 * 60000;
4810
4824
  var IS_FIXED_BY_DEFAULT = false;
4811
-
4812
- // Updating the states below will insert the new value into the send or receive input field
4813
4825
  var _useState = React.useState(preservedAmount != null ? preservedAmount : null),
4814
4826
  updateSendInputTo = _useState[0],
4815
4827
  setUpdateSendInputTo = _useState[1];
@@ -4849,8 +4861,6 @@ var SwapForm = function SwapForm(_ref) {
4849
4861
  var _useState10 = React.useState(false),
4850
4862
  readyToSwap = _useState10[0],
4851
4863
  setReadyToSwap = _useState10[1]; // Basically a param that enables/disables the "Next" button
4852
- // TODO: [refactoring, moderate] instead of handling preservedAmount at a lot of cases below, just
4853
- // write single useEffect setting sendAssetAmount to the=is passed value and simplify the logic below. task_id=6453251e49b04c5e88a3cc771479ffb5
4854
4864
  var _useState11 = React.useState(preservedAmount == null || String(preservedAmount) === "0"),
4855
4865
  isAmountZero = _useState11[0],
4856
4866
  setIsAmountZero = _useState11[1];
@@ -4860,21 +4870,24 @@ var SwapForm = function SwapForm(_ref) {
4860
4870
  var _useReferredState5 = useReferredState(null),
4861
4871
  isFixedRate = _useReferredState5[0],
4862
4872
  setIsFixedRate = _useReferredState5[1];
4863
- var _useState12 = React.useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4864
- confirmButtonTo = _useState12[0],
4865
- setConfirmButtonTo = _useState12[1];
4866
- var _useState13 = React.useState(),
4867
- transactionFee = _useState13[0],
4868
- setTransactionFee = _useState13[1];
4869
- var _useState14 = React.useState(true),
4870
- balanceValid = _useState14[0],
4871
- setBalanceValid = _useState14[1]; // Whether the amount is less than total balance
4873
+ var _useState12 = React.useState(false),
4874
+ isLastEditedReceiving = _useState12[0],
4875
+ setIsLastEditedReceiving = _useState12[1];
4876
+ var _useState13 = React.useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4877
+ confirmButtonTo = _useState13[0],
4878
+ setConfirmButtonTo = _useState13[1];
4879
+ var _useState14 = React.useState(),
4880
+ transactionFee = _useState14[0],
4881
+ setTransactionFee = _useState14[1];
4882
+ var _useState15 = React.useState(true),
4883
+ balanceValid = _useState15[0],
4884
+ setBalanceValid = _useState15[1]; // Whether the amount is less than total balance
4872
4885
  var _useReferredState6 = useReferredState(null),
4873
4886
  isSwapAll = _useReferredState6[0],
4874
4887
  setIsSwapAll = _useReferredState6[1];
4875
- var _useState15 = React.useState([]),
4876
- swapAllButtonLoaderReSetter = _useState15[0],
4877
- setSwapAllButtonLoaderReSetter = _useState15[1];
4888
+ var _useState16 = React.useState([]),
4889
+ swapAllButtonLoaderReSetter = _useState16[0],
4890
+ setSwapAllButtonLoaderReSetter = _useState16[1];
4878
4891
  var _useReferredState7 = useReferredState(null),
4879
4892
  dataUpdateTimeoutId = _useReferredState7[0],
4880
4893
  setDataUpdateTimeoutId = _useReferredState7[1];
@@ -4890,9 +4903,9 @@ var SwapForm = function SwapForm(_ref) {
4890
4903
  var _useReferredState11 = useReferredState(false),
4891
4904
  isRecipientAddressValid = _useReferredState11[0],
4892
4905
  setIsRecipientAddressValid = _useReferredState11[1];
4893
- var _useState16 = React.useState(false),
4894
- isRefundAddressRequired = _useState16[0],
4895
- setIsRefundAddressRequired = _useState16[1];
4906
+ var _useState17 = React.useState(false),
4907
+ isRefundAddressRequired = _useState17[0],
4908
+ setIsRefundAddressRequired = _useState17[1];
4896
4909
  var _useReferredState12 = useReferredState(""),
4897
4910
  refundAddress = _useReferredState12[0],
4898
4911
  setRefundAddress = _useReferredState12[1];
@@ -4907,9 +4920,8 @@ var SwapForm = function SwapForm(_ref) {
4907
4920
  var recalculationDelayOnTyping = 1000;
4908
4921
  var isAddressFieldEnabled = !formHasBalance;
4909
4922
  var displayRateSelector = !formHasBalance;
4910
- var recipientAddressExtraIdName = getExtraIdNameByTicker(receivingAssetTicker);
4911
- var refundAddressExtraIdName = getExtraIdNameByTicker(sendingAssetTicker);
4912
4923
  var handleSendAssetAmountChange = function handleSendAssetAmountChange(amount) {
4924
+ setIsLastEditedReceiving(false);
4913
4925
  if (amount != null && amount !== "") {
4914
4926
  setUpdateReceiveInputTo(AmountUtils.trim(bignumber_js.BigNumber(amount).times(swapRate), receivingAssetDecimalCount));
4915
4927
  } else {
@@ -4918,6 +4930,7 @@ var SwapForm = function SwapForm(_ref) {
4918
4930
  setSendAssetAmount(amount);
4919
4931
  };
4920
4932
  var handleReceiveAssetAmountChange = function handleReceiveAssetAmountChange(amount) {
4933
+ setIsLastEditedReceiving(true);
4921
4934
  var sendAssetAmount = "";
4922
4935
  if (amount != null && amount !== "") {
4923
4936
  sendAssetAmount = AmountUtils.trim(bignumber_js.BigNumber(amount).div(swapRate), sendingAssetDecimalCount);
@@ -5018,7 +5031,7 @@ var SwapForm = function SwapForm(_ref) {
5018
5031
  }
5019
5032
  (function () {
5020
5033
  try {
5021
- return _catch$c(function () {
5034
+ return _catch$e(function () {
5022
5035
  var _minimalAmount$curren4, _maximumAmount$curren3, _isFixedRate$current;
5023
5036
  var dataMemento = {
5024
5037
  rate: swapRate,
@@ -5036,7 +5049,7 @@ var SwapForm = function SwapForm(_ref) {
5036
5049
  setIsSameCoins(false);
5037
5050
  setIsPairSupported(true);
5038
5051
  setIsSwapCalculated(false);
5039
- return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT)).then(function (response) {
5052
+ 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) {
5040
5053
  if (!isSwapAll.current && String(amount) !== String(isForPreserved && sendAssetAmount.current == null ? preservedAmount : sendAssetAmount.current)) {
5041
5054
  // Means amount changed and we no more need to do this exact calculation
5042
5055
  return;
@@ -5084,7 +5097,7 @@ var SwapForm = function SwapForm(_ref) {
5084
5097
  }
5085
5098
  (function () {
5086
5099
  try {
5087
- return _catch$c(function () {
5100
+ return _catch$e(function () {
5088
5101
  setIsLoading(true);
5089
5102
  setMinimalAmount(null);
5090
5103
  setMaximumAmount(null);
@@ -5134,6 +5147,10 @@ var SwapForm = function SwapForm(_ref) {
5134
5147
  }
5135
5148
  // eslint-disable-next-line react-hooks/exhaustive-deps
5136
5149
  }, [isSwapAll.current]);
5150
+ React.useEffect(function () {
5151
+ onIsFixedChange(isFixedRate.current);
5152
+ // eslint-disable-next-line react-hooks/exhaustive-deps
5153
+ }, [isFixedRate.current]);
5137
5154
  React.useEffect(function () {
5138
5155
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current || preservedAmount || null));
5139
5156
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -5182,7 +5199,7 @@ var SwapForm = function SwapForm(_ref) {
5182
5199
  };
5183
5200
  if (!receivingAssetTicker) return;
5184
5201
  var _temp = recipientAddress.current === "";
5185
- return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current)).then(_temp2);
5202
+ return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current, isFixedRate.current)).then(_temp2);
5186
5203
  } catch (e) {
5187
5204
  Promise.reject(e);
5188
5205
  }
@@ -5197,7 +5214,7 @@ var SwapForm = function SwapForm(_ref) {
5197
5214
  };
5198
5215
  if (!sendingAssetTicker || !isRefundAddressRequired) return;
5199
5216
  var _temp3 = refundAddress.current === "";
5200
- return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current)).then(_temp4);
5217
+ return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current, isFixedRate.current)).then(_temp4);
5201
5218
  } catch (e) {
5202
5219
  Promise.reject(e);
5203
5220
  }
@@ -5222,8 +5239,6 @@ var SwapForm = function SwapForm(_ref) {
5222
5239
  };
5223
5240
  // eslint-disable-next-line react-hooks/exhaustive-deps
5224
5241
  }, [readyToSwap]);
5225
-
5226
- // TODO: [refactoring, critical] this code looks like a hack related to task_id=6e328d39063142b7b9fa01d497e616da
5227
5242
  React.useEffect(function () {
5228
5243
  if (triggerDataUpdateResetting) {
5229
5244
  clearTimeout(dataUpdateTimeoutId.current);
@@ -5233,8 +5248,6 @@ var SwapForm = function SwapForm(_ref) {
5233
5248
  }
5234
5249
  // eslint-disable-next-line react-hooks/exhaustive-deps
5235
5250
  }, [triggerDataUpdateResetting]);
5236
-
5237
- // Resets the passed "set value to" param to null, so it can be used multiple times with any value
5238
5251
  React.useEffect(function () {
5239
5252
  if (!!updateSendInputTo) setUpdateSendInputTo(null);
5240
5253
  if (!!updateReceiveInputTo) setUpdateReceiveInputTo(null);
@@ -5253,8 +5266,6 @@ var SwapForm = function SwapForm(_ref) {
5253
5266
  }
5254
5267
  // eslint-disable-next-line react-hooks/exhaustive-deps
5255
5268
  }, [isLoading.current, swapAllButtonLoaderReSetter]);
5256
-
5257
- // Handlers upon changing the asset amount
5258
5269
  React.useEffect(function () {
5259
5270
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current));
5260
5271
  if (sendAssetAmount.current == null) return;
@@ -5274,7 +5285,13 @@ var SwapForm = function SwapForm(_ref) {
5274
5285
  linkText: !formHasBalance ? "" : isSwapAll.current ? translations.swapAllButtonTitles.cancel : translations.swapAllButtonTitles.enable,
5275
5286
  linkButtonLoader: true,
5276
5287
  isLinkButtonDisabled: isLoading.current || sendingAssetTicker === receivingAssetTicker || bignumber_js.BigNumber(sendingAssetBalance == null ? void 0 : sendingAssetBalance.assetAmount).eq(0)
5277
- }, /*#__PURE__*/React__default["default"].createElement("div", {
5288
+ }, displayRateSelector ? /*#__PURE__*/React__default["default"].createElement("div", {
5289
+ className: s$9["swap-form-rate-selector"]
5290
+ }, /*#__PURE__*/React__default["default"].createElement(RateSelector, {
5291
+ isFixed: (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT,
5292
+ setIsFixed: handleRateModeChanged,
5293
+ translations: translations.rateSelector
5294
+ })) : "", /*#__PURE__*/React__default["default"].createElement("div", {
5278
5295
  className: s$9["swap-form-inputs"]
5279
5296
  }, /*#__PURE__*/React__default["default"].createElement(AmountInput, {
5280
5297
  ticker: sendingAssetTicker,
@@ -5322,7 +5339,7 @@ var SwapForm = function SwapForm(_ref) {
5322
5339
  assetIconProtocolSrc: receivingAssetProtocolIconSrc,
5323
5340
  fallbackAssetIconSrc: fallBackAssetIconSrc,
5324
5341
  disabled: isSwapAll.current || sendingAssetTicker === null || receivingAssetTicker === null,
5325
- locked: !formHasBalance,
5342
+ locked: !formHasBalance && !isFixedRate.current,
5326
5343
  handleCoinAmountChange: handleReceiveAssetAmountChange,
5327
5344
  handleChangeAssetClick: handleChangeReceivingAssetClick,
5328
5345
  updateAssetInputTo: updateReceiveInputTo,
@@ -5342,7 +5359,7 @@ var SwapForm = function SwapForm(_ref) {
5342
5359
  className: s$9["swap-form-information-field"]
5343
5360
  }, /*#__PURE__*/React__default["default"].createElement("p", null, !isPairSupported ? translations.informationBlock.pairNotAvailable : transactionFee && minimalAmountValid ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.transactionFee, /*#__PURE__*/React__default["default"].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__default["default"].createElement("span", {
5344
5361
  className: s$9["semi-transparent"]
5345
- }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React__default["default"].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__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React__default["default"].createElement("span", {
5362
+ }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React__default["default"].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__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React__default["default"].createElement("span", {
5346
5363
  className: s$9["interactable"] + " " + s$9["red"],
5347
5364
  onClick: isLoading.current ? function () {} : function (e) {
5348
5365
  return callHandlingErrors(handleMaximumAmountClick, e);
@@ -5369,7 +5386,7 @@ var SwapForm = function SwapForm(_ref) {
5369
5386
  adaptiveHeight: true,
5370
5387
  errorEncountered: recipientAddress.current !== "" && !isRecipientAddressValid.current
5371
5388
  })), isHydrated && recipientAddressExtraIdName ? /*#__PURE__*/React__default["default"].createElement(TitleBox, {
5372
- title: recipientAddressExtraIdName,
5389
+ title: translations.addressFields.receivingAddressExtraIdTitle,
5373
5390
  titleNoticeText: translations.addressFields.receivingAddressExtraIdNotice,
5374
5391
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5375
5392
  }, /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -5391,7 +5408,7 @@ var SwapForm = function SwapForm(_ref) {
5391
5408
  adaptiveHeight: true,
5392
5409
  errorEncountered: refundAddress.current !== "" && !isRefundAddressValid.current
5393
5410
  })), refundAddressExtraIdName ? /*#__PURE__*/React__default["default"].createElement(TitleBox, {
5394
- title: refundAddressExtraIdName,
5411
+ title: translations.addressFields.refundAddressExtraIdTitle,
5395
5412
  titleNoticeText: translations.addressFields.refundAddressExtraIdNotice,
5396
5413
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5397
5414
  }, /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -5402,13 +5419,7 @@ var SwapForm = function SwapForm(_ref) {
5402
5419
  value: refundAddressExtraId.current,
5403
5420
  adaptiveHeight: true,
5404
5421
  placeholder: translations.addressFields.extraIdPlaceholder
5405
- })) : null) : null) : null, displayRateSelector ? /*#__PURE__*/React__default["default"].createElement("div", {
5406
- className: s$9["swap-form-rate-selector"]
5407
- }, /*#__PURE__*/React__default["default"].createElement(RateSelector, {
5408
- isFixed: (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT,
5409
- setIsFixed: !isLoading.current ? handleRateModeChanged : function () {},
5410
- translations: translations.rateSelector
5411
- })) : "", validationContent ? /*#__PURE__*/React__default["default"].createElement("div", {
5422
+ })) : null) : null) : null, validationContent ? /*#__PURE__*/React__default["default"].createElement("div", {
5412
5423
  className: s$9["swap-form-validation-text"]
5413
5424
  }, /*#__PURE__*/React__default["default"].createElement(Validation, {
5414
5425
  text: validationContent
@@ -5475,7 +5486,12 @@ SwapForm.propTypes = {
5475
5486
  fiatCurrencyCode: PropTypes.oneOfType([PropTypes.string, null]),
5476
5487
  fiatCurrencyDecimals: PropTypes.oneOfType([PropTypes.number, null]),
5477
5488
  formHasFiat: PropTypes.bool,
5489
+ termsOfUseUrl: PropTypes.oneOfType([PropTypes.string, null]),
5490
+ privacyPolicyUrl: PropTypes.oneOfType([PropTypes.string, null]),
5491
+ recipientAddressExtraIdName: PropTypes.string,
5492
+ refundAddressExtraIdName: PropTypes.string,
5478
5493
  translations: PropTypes.object,
5494
+ validateAddressByTicker: PropTypes.func,
5479
5495
  swapSeparatorIconSrc: PropTypes.string.isRequired,
5480
5496
  swapButtonAlwaysActive: PropTypes.bool
5481
5497
  };
@@ -5508,6 +5524,11 @@ SwapForm.defaultProps = {
5508
5524
  fiatCurrencyCode: null,
5509
5525
  fiatCurrencyDecimals: null,
5510
5526
  formHasFiat: true,
5527
+ termsOfUseUrl: null,
5528
+ privacyPolicyUrl: null,
5529
+ validateAddressByTicker: function validateAddressByTicker(ticker) {
5530
+ return false;
5531
+ },
5511
5532
  swapButtonAlwaysActive: false
5512
5533
  };
5513
5534
 
@@ -5519,7 +5540,7 @@ SwapForm.defaultProps = {
5519
5540
  * @return {Promise<string>} xml string of generated svg image
5520
5541
  */
5521
5542
 
5522
- function _catch$b(body, recover) {
5543
+ function _catch$d(body, recover) {
5523
5544
  try {
5524
5545
  var result = body();
5525
5546
  } catch (e) {
@@ -5532,7 +5553,7 @@ function _catch$b(body, recover) {
5532
5553
  }
5533
5554
  var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingString) {
5534
5555
  try {
5535
- return Promise.resolve(_catch$b(function () {
5556
+ return Promise.resolve(_catch$d(function () {
5536
5557
  return Promise.resolve(QRCode__default["default"].toString(encodingString, {
5537
5558
  type: "svg"
5538
5559
  }));
@@ -5546,9 +5567,23 @@ var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingStrin
5546
5567
 
5547
5568
  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"};
5548
5569
 
5549
- // TODO: [dev] add JSDoc
5570
+ /**
5571
+ * QrCode component renders a QR code for a provided crypto address.
5572
+ *
5573
+ * @component
5574
+ * @example
5575
+ * const address = "0x123456789abcdef";
5576
+ * const fill = true;
5577
+ * return <QrCode address={address} fill={fill} />;
5578
+ *
5579
+ * @param {Object} props - The props for the component.
5580
+ * @param {string} props.address - The crypto address to generate the QR code for.
5581
+ * @param {boolean} [props.fill=false] - If true, applies additional CSS class to fill the container.
5582
+ *
5583
+ * @returns {JSX.Element} A div containing the generated QR code.
5584
+ */
5550
5585
 
5551
- function _catch$a(body, recover) {
5586
+ function _catch$c(body, recover) {
5552
5587
  try {
5553
5588
  var result = body();
5554
5589
  } catch (e) {
@@ -5567,7 +5602,7 @@ var QrCode = function QrCode(_ref) {
5567
5602
  React.useEffect(function () {
5568
5603
  (function () {
5569
5604
  try {
5570
- return _catch$a(function () {
5605
+ return _catch$c(function () {
5571
5606
  var _temp = function () {
5572
5607
  if (address) {
5573
5608
  return Promise.resolve(generateQrAndShowInCanvas(address)).then(function (_generateQrAndShowInC) {
@@ -5594,7 +5629,8 @@ QrCode.propTypes = {
5594
5629
  fill: PropTypes.bool
5595
5630
  };
5596
5631
  QrCode.defaultProps = {
5597
- address: ""
5632
+ address: "",
5633
+ fill: false
5598
5634
  };
5599
5635
 
5600
5636
  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"};
@@ -6279,7 +6315,7 @@ var s = {"container":"_4QDrB","coin-picker":"_mvuzQ","loading":"_18kIX","item":"
6279
6315
  var FALLBACK_ASSET_ICON_URL = "https://rabbit.io/asset-icons/fallback.svg";
6280
6316
  var DEFAULT_CRYPTO_DECIMAL_COUNT = 8;
6281
6317
 
6282
- function _catch$9(body, recover) {
6318
+ function _catch$b(body, recover) {
6283
6319
  try {
6284
6320
  var result = body();
6285
6321
  } catch (e) {
@@ -6503,7 +6539,7 @@ var CoinPicker = function CoinPicker(_ref) {
6503
6539
  var loadCoinsAndSaveToState = function loadCoinsAndSaveToState() {
6504
6540
  (function () {
6505
6541
  try {
6506
- var _temp = _catch$9(function () {
6542
+ var _temp = _catch$b(function () {
6507
6543
  return Promise.resolve(loadCoinsAndContent ? loadCoinsAndContent() : defaultLoadCoinsAndContent()).then(function (data) {
6508
6544
  setCoins(data.coins);
6509
6545
  setFilteredCoins(data.coins);
@@ -7312,7 +7348,7 @@ var Cache = /*#__PURE__*/function () {
7312
7348
  return Cache;
7313
7349
  }();
7314
7350
 
7315
- function _catch$8(body, recover) {
7351
+ function _catch$a(body, recover) {
7316
7352
  try {
7317
7353
  var result = body();
7318
7354
  } catch (e) {
@@ -7330,7 +7366,7 @@ function postponeExecution(execution, timeoutMS) {
7330
7366
  return new Promise(function (resolve, reject) {
7331
7367
  setTimeout(function () {
7332
7368
  try {
7333
- var _temp = _catch$8(function () {
7369
+ var _temp = _catch$a(function () {
7334
7370
  return Promise.resolve(execution()).then(function (_execution) {
7335
7371
  resolve(_execution);
7336
7372
  });
@@ -7414,7 +7450,7 @@ var AxiosAdapter = /*#__PURE__*/function () {
7414
7450
  return AxiosAdapter;
7415
7451
  }();
7416
7452
 
7417
- function _catch$7(body, recover) {
7453
+ function _catch$9(body, recover) {
7418
7454
  try {
7419
7455
  var result = body();
7420
7456
  } catch (e) {
@@ -7430,7 +7466,7 @@ var EmailsApi = /*#__PURE__*/function () {
7430
7466
  EmailsApi.sendEmail = function sendEmail(subject, body) {
7431
7467
  try {
7432
7468
  var _this = this;
7433
- var _temp = _catch$7(function () {
7469
+ var _temp = _catch$9(function () {
7434
7470
  var url = window.location.protocol + "//" + window.location.host + "/api/v1/" + _this.serverEndpointEntity;
7435
7471
  return Promise.resolve(axios__default["default"].post(url, {
7436
7472
  subject: subject,
@@ -7848,7 +7884,7 @@ var ExternalServicesStatsCollector = /*#__PURE__*/function () {
7848
7884
  * improve the reliability of a data retrieval.
7849
7885
  */
7850
7886
 
7851
- function _catch$6(body, recover) {
7887
+ function _catch$8(body, recover) {
7852
7888
  try {
7853
7889
  var result = body();
7854
7890
  } catch (e) {
@@ -8187,7 +8223,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8187
8223
  var result;
8188
8224
  var calculationUuid = concurrentCalculationsMetadataHolder.startCalculation(_this.bio);
8189
8225
  return Promise.resolve(_finallyRethrows$1(function () {
8190
- return _catch$6(function () {
8226
+ return _catch$8(function () {
8191
8227
  function _temp5() {
8192
8228
  var _result2, _result3;
8193
8229
  if (((_result2 = result) == null ? void 0 : _result2.data) == null) {
@@ -8215,7 +8251,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8215
8251
  */
8216
8252
  var rpsFactor = result ? result.rpsFactor : RobustExternalAPICallerService.defaultRPSFactor;
8217
8253
  result = null;
8218
- var _temp3 = _catch$6(function () {
8254
+ var _temp3 = _catch$8(function () {
8219
8255
  function _temp2() {
8220
8256
  var _result$errors;
8221
8257
  if ((_result$errors = result.errors) != null && _result$errors.length) {
@@ -8239,7 +8275,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8239
8275
  return Promise.resolve(new Promise(function (resolve, reject) {
8240
8276
  setTimeout(function () {
8241
8277
  try {
8242
- var _temp6 = _catch$6(function () {
8278
+ var _temp6 = _catch$8(function () {
8243
8279
  return Promise.resolve(_this._performCallAttempt(parametersValues, timeoutMS, cancelToken, rpsFactor, doNotFailForNowData)).then(function (_this$_performCallAtt2) {
8244
8280
  resolve(_this$_performCallAtt2);
8245
8281
  });
@@ -8309,7 +8345,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8309
8345
  return;
8310
8346
  }
8311
8347
  var _temp13 = _finallyRethrows$1(function () {
8312
- return _catch$6(function () {
8348
+ return _catch$8(function () {
8313
8349
  var _provider$specificHea;
8314
8350
  function _temp12() {
8315
8351
  if (iterationsData.length) {
@@ -8641,7 +8677,7 @@ function _for(test, update, body) {
8641
8677
  }
8642
8678
  }
8643
8679
  }
8644
- function _catch$5(body, recover) {
8680
+ function _catch$7(body, recover) {
8645
8681
  try {
8646
8682
  var result = body();
8647
8683
  } catch (e) {
@@ -8720,7 +8756,7 @@ var CacheAndConcurrentRequestsResolver = /*#__PURE__*/function () {
8720
8756
  _proto.getCachedOrWaitForCachedOrAcquireLock = function getCachedOrWaitForCachedOrAcquireLock(cacheId) {
8721
8757
  try {
8722
8758
  var _this = this;
8723
- return Promise.resolve(_catch$5(function () {
8759
+ return Promise.resolve(_catch$7(function () {
8724
8760
  function _temp2() {
8725
8761
  var _cached, _cached2;
8726
8762
  return calculationId ? {
@@ -8799,7 +8835,7 @@ var CacheAndConcurrentRequestsResolver = /*#__PURE__*/function () {
8799
8835
  _proto.acquireLock = function acquireLock(cacheId) {
8800
8836
  try {
8801
8837
  var _this2 = this;
8802
- return Promise.resolve(_catch$5(function () {
8838
+ return Promise.resolve(_catch$7(function () {
8803
8839
  return Promise.resolve(_this2._requestsManager.acquireLock(cacheId));
8804
8840
  }, function (e) {
8805
8841
  improveAndRethrow(e, "acquireLock");
@@ -8969,7 +9005,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
8969
9005
  try {
8970
9006
  var _exit;
8971
9007
  var _this3 = this;
8972
- var _temp3 = _catch$5(function () {
9008
+ var _temp3 = _catch$7(function () {
8973
9009
  var activeCalculationIdForHash = _this3._activeCalculationsIds.get(requestHash);
8974
9010
  if (activeCalculationIdForHash == null) {
8975
9011
  var id = uuid.v4();
@@ -9003,7 +9039,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
9003
9039
  _proto2.acquireLock = function acquireLock(requestHash) {
9004
9040
  try {
9005
9041
  var _this4 = this;
9006
- return Promise.resolve(_catch$5(function () {
9042
+ return Promise.resolve(_catch$7(function () {
9007
9043
  var _this4$_nextCalculati;
9008
9044
  var activeId = _this4._activeCalculationsIds.get(requestHash);
9009
9045
  var nextId = uuid.v4();
@@ -9154,7 +9190,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
9154
9190
  * TODO: [tests, critical] Massively used logic
9155
9191
  */
9156
9192
 
9157
- function _catch$4(body, recover) {
9193
+ function _catch$6(body, recover) {
9158
9194
  try {
9159
9195
  var result = body();
9160
9196
  } catch (e) {
@@ -9251,7 +9287,7 @@ var CachedRobustExternalApiCallerService = /*#__PURE__*/function () {
9251
9287
  var cacheId;
9252
9288
  var result;
9253
9289
  return Promise.resolve(_finallyRethrows(function () {
9254
- return _catch$4(function () {
9290
+ return _catch$6(function () {
9255
9291
  cacheId = _this._calculateCacheId(parametersValues, customHashFunctionForParams);
9256
9292
  return Promise.resolve(_this._cahceAndRequestsResolver.getCachedOrWaitForCachedOrAcquireLock(cacheId)).then(function (_this$_cahceAndReques) {
9257
9293
  var _result2, _result4;
@@ -9320,7 +9356,7 @@ var CachedRobustExternalApiCallerService = /*#__PURE__*/function () {
9320
9356
  return CachedRobustExternalApiCallerService;
9321
9357
  }();
9322
9358
 
9323
- function _catch$3(body, recover) {
9359
+ function _catch$5(body, recover) {
9324
9360
  try {
9325
9361
  var result = body();
9326
9362
  } catch (e) {
@@ -9404,7 +9440,7 @@ var IpAddressProvider = /*#__PURE__*/function () {
9404
9440
  IpAddressProvider.getClientIpAddress = function getClientIpAddress() {
9405
9441
  try {
9406
9442
  var _this = this;
9407
- return Promise.resolve(_catch$3(function () {
9443
+ return Promise.resolve(_catch$5(function () {
9408
9444
  return Promise.resolve(_this.externalIPAddressAPICaller.callExternalAPICached([], 7000));
9409
9445
  }, function (e) {
9410
9446
  improveAndRethrow(e, "getClientIpAddress");
@@ -9584,15 +9620,44 @@ function BaseSwapCreationInfo(fromCoin, toCoin, fromAmountCoins, toAmountCoins,
9584
9620
  this.isRefundAddressRequired = isRefundAddressRequired;
9585
9621
  };
9586
9622
 
9623
+ // TODO: [refactoring, moderate] extract structure of _supportedCoins into model class
9624
+
9625
+ function _catch$4(body, recover) {
9626
+ try {
9627
+ var result = body();
9628
+ } catch (e) {
9629
+ return recover(e);
9630
+ }
9631
+ if (result && result.then) {
9632
+ return result.then(void 0, recover);
9633
+ }
9634
+ return result;
9635
+ }
9587
9636
  var SwapProvider = /*#__PURE__*/function () {
9588
- function SwapProvider() {}
9637
+ function SwapProvider(cache, customCoinBuilder, useRestrictedCoinsSet) {
9638
+ if (customCoinBuilder === void 0) {
9639
+ customCoinBuilder = function customCoinBuilder(coin, network) {
9640
+ return null;
9641
+ };
9642
+ }
9643
+ if (useRestrictedCoinsSet === void 0) {
9644
+ useRestrictedCoinsSet = true;
9645
+ }
9646
+ this._supportedCoins = [];
9647
+ this._maxRateDigits = 20;
9648
+ this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9649
+ this._customCoinBuilder = customCoinBuilder;
9650
+ this._cache = cache;
9651
+ this.isAggregator = false;
9652
+ }
9589
9653
  var _proto = SwapProvider.prototype;
9590
9654
  /**
9591
9655
  * @return {Promise<void>}
9592
9656
  */
9593
9657
  _proto.initialize = function initialize() {
9594
9658
  try {
9595
- throw new Error("Not implemented in base");
9659
+ var _this = this;
9660
+ return Promise.resolve(_this._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9596
9661
  } catch (e) {
9597
9662
  return Promise.reject(e);
9598
9663
  }
@@ -9605,15 +9670,68 @@ var SwapProvider = /*#__PURE__*/function () {
9605
9670
  throw new Error("Not implemented in base");
9606
9671
  }
9607
9672
 
9673
+ /**
9674
+ * This method sort internal list putting popular (as provider thinks) coins to the top.
9675
+ * 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.
9676
+ * @private
9677
+ */;
9678
+ _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
9679
+ this._supportedCoins.sort(function (i1, i2) {
9680
+ if (i1.isPopular !== i2.isPopular) return i2.isPopular - i1.isPopular;
9681
+ return i1.coin.ticker.localeCompare(i2.coin.ticker);
9682
+ });
9683
+ }
9684
+
9685
+ /**
9686
+ * Should fill _supportedCoins with array of coins.
9687
+ * Coin construction rules:
9688
+ * 1. ticker should be CODEPROTOCOL_CODE e.g. USDTERC20
9689
+ * 2. name should not contain (PROTOCOL_CODE) or just PROTOCOL_CODe
9690
+ * 3. protocol should be null for coins major for their blockchains like BTC, ETH
9691
+ * 4. isPopular should be a number
9692
+ *
9693
+ * @return {Promise<void>}
9694
+ * @private
9695
+ */;
9696
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9697
+ try {
9698
+ throw new Error("Not implemented in base - _fetchSupportedCurrenciesIfNeeded");
9699
+ } catch (e) {
9700
+ return Promise.reject(e);
9701
+ }
9702
+ }
9608
9703
  /**
9609
9704
  * Retrieves all currencies supported by this swap provider.
9610
9705
  * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
9611
9706
  *
9612
9707
  * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
9613
- */;
9708
+ */
9709
+ ;
9614
9710
  _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9615
9711
  try {
9616
- throw new Error("Not implemented in base");
9712
+ var _this2 = this;
9713
+ var loggerSource = "getAllSupportedCurrencies";
9714
+ return Promise.resolve(_catch$4(function () {
9715
+ return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9716
+ var _this2$_supportedCoin;
9717
+ Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins returning", loggerSource);
9718
+ return {
9719
+ result: true,
9720
+ coins: _this2._supportedCoins.map(function (item) {
9721
+ return item.coin;
9722
+ })
9723
+ };
9724
+ });
9725
+ }, function (e) {
9726
+ var _e$response;
9727
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9728
+ return {
9729
+ result: false,
9730
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9731
+ };
9732
+ }
9733
+ improveAndRethrow(e, loggerSource);
9734
+ }));
9617
9735
  } catch (e) {
9618
9736
  return Promise.reject(e);
9619
9737
  }
@@ -9627,7 +9745,31 @@ var SwapProvider = /*#__PURE__*/function () {
9627
9745
  ;
9628
9746
  _proto.getDepositCurrencies = function getDepositCurrencies() {
9629
9747
  try {
9630
- throw new Error("Not implemented in base");
9748
+ var _this3 = this;
9749
+ var loggerSource = "getDepositCurrencies";
9750
+ return Promise.resolve(_catch$4(function () {
9751
+ return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9752
+ var _this3$_supportedCoin;
9753
+ Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9754
+ return {
9755
+ result: true,
9756
+ coins: _this3._supportedCoins.filter(function (item) {
9757
+ return item.deposit;
9758
+ }).map(function (item) {
9759
+ return item.coin;
9760
+ })
9761
+ };
9762
+ });
9763
+ }, function (e) {
9764
+ var _e$response2;
9765
+ if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9766
+ return {
9767
+ result: false,
9768
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9769
+ };
9770
+ }
9771
+ improveAndRethrow(e, loggerSource);
9772
+ }));
9631
9773
  } catch (e) {
9632
9774
  return Promise.reject(e);
9633
9775
  }
@@ -9641,8 +9783,36 @@ var SwapProvider = /*#__PURE__*/function () {
9641
9783
  */
9642
9784
  ;
9643
9785
  _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9786
+ if (exceptCurrency === void 0) {
9787
+ exceptCurrency = null;
9788
+ }
9644
9789
  try {
9645
- throw new Error("Not implemented in base");
9790
+ var _this4 = this;
9791
+ var loggerSource = "getWithdrawalCurrencies";
9792
+ return Promise.resolve(_catch$4(function () {
9793
+ return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9794
+ var _this4$_supportedCoin;
9795
+ Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9796
+ return {
9797
+ result: true,
9798
+ coins: _this4._supportedCoins.filter(function (item) {
9799
+ var _item$coin, _exceptCurrency;
9800
+ return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9801
+ }).map(function (item) {
9802
+ return item.coin;
9803
+ })
9804
+ };
9805
+ });
9806
+ }, function (e) {
9807
+ var _e$response3;
9808
+ if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9809
+ return {
9810
+ result: false,
9811
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9812
+ };
9813
+ }
9814
+ improveAndRethrow(e, loggerSource);
9815
+ }));
9646
9816
  } catch (e) {
9647
9817
  return Promise.reject(e);
9648
9818
  }
@@ -9650,12 +9820,28 @@ var SwapProvider = /*#__PURE__*/function () {
9650
9820
  /**
9651
9821
  * Retrieves URL for coin icon or fallback if not found.
9652
9822
  *
9653
- * @param coin {Coin|string} coin or rabbit-format of coin ticker
9823
+ * @param coinOrTicker {Coin|string} coin or rabbit-format of coin ticker
9654
9824
  * @return {string}
9655
9825
  */
9656
9826
  ;
9657
- _proto.getIconUrl = function getIconUrl(coin) {
9658
- throw new Error("Not implemented in base");
9827
+ _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9828
+ var loggerSource = "getIconUrl";
9829
+ try {
9830
+ var _this$_supportedCoins2, _this$_supportedCoins3;
9831
+ var coin = coinOrTicker;
9832
+ if (!(coinOrTicker instanceof Coin)) {
9833
+ var _this$_supportedCoins;
9834
+ coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9835
+ return i.coin.ticker === coinOrTicker;
9836
+ })) == null ? void 0 : _this$_supportedCoins.coin;
9837
+ }
9838
+ return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9839
+ var _item$coin2, _coin;
9840
+ return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9841
+ })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9842
+ } catch (e) {
9843
+ improveAndRethrow(e, loggerSource);
9844
+ }
9659
9845
  }
9660
9846
 
9661
9847
  /**
@@ -9666,7 +9852,49 @@ var SwapProvider = /*#__PURE__*/function () {
9666
9852
  */;
9667
9853
  _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
9668
9854
  try {
9669
- throw new Error("Not implemented in base");
9855
+ var _this5 = this;
9856
+ var loggerSource = "getCoinToUSDTRate";
9857
+ return Promise.resolve(_catch$4(function () {
9858
+ return coin ? Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
9859
+ var _this5$_supportedCoin;
9860
+ // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
9861
+ var usdtTrc20 = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
9862
+ return i.coin.ticker === "USDTTRC20";
9863
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
9864
+ if (!usdtTrc20) {
9865
+ return {
9866
+ result: false
9867
+ };
9868
+ }
9869
+ var cached = _this5._cache.get("swapspace_usdt_rate_" + coin.ticker);
9870
+ if (cached != null) {
9871
+ return {
9872
+ result: true,
9873
+ rate: cached
9874
+ };
9875
+ }
9876
+ Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
9877
+ return Promise.resolve(_this5.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
9878
+ if (!result.result) {
9879
+ return {
9880
+ result: false
9881
+ };
9882
+ }
9883
+
9884
+ // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
9885
+ var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
9886
+ var rate = bignumber_js.BigNumber(1).div(bignumber_js.BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
9887
+ _this5._cache.put("swap_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
9888
+ );
9889
+ return {
9890
+ result: true,
9891
+ rate: rate
9892
+ };
9893
+ });
9894
+ }) : null;
9895
+ }, function (e) {
9896
+ improveAndRethrow(e, loggerSource);
9897
+ }));
9670
9898
  } catch (e) {
9671
9899
  return Promise.reject(e);
9672
9900
  }
@@ -9683,6 +9911,7 @@ var SwapProvider = /*#__PURE__*/function () {
9683
9911
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
9684
9912
  * @param [fromCoinToUsdRate=null] pass if you want to increase the min amount returned
9685
9913
  * by provider with some fixed "insurance" amount to cover min amount fluctuations.
9914
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9686
9915
  * @return {Promise<({
9687
9916
  * result: false,
9688
9917
  * reason: string,
@@ -9702,7 +9931,7 @@ var SwapProvider = /*#__PURE__*/function () {
9702
9931
  * })>}
9703
9932
  */
9704
9933
  ;
9705
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
9934
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
9706
9935
  try {
9707
9936
  throw new Error("Not implemented in base");
9708
9937
  } catch (e) {
@@ -9722,6 +9951,7 @@ var SwapProvider = /*#__PURE__*/function () {
9722
9951
  * @param fixed {boolean}
9723
9952
  * @param [toCurrencyExtraId=""] {string} optional extra ID
9724
9953
  * @param [refundExtraId=""] {string} optional extra ID for refund address
9954
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9725
9955
  * @return {Promise<({
9726
9956
  * result: true,
9727
9957
  * swapId: string,
@@ -9741,7 +9971,7 @@ var SwapProvider = /*#__PURE__*/function () {
9741
9971
  * })>}
9742
9972
  */
9743
9973
  ;
9744
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
9974
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
9745
9975
  try {
9746
9976
  throw new Error("Not implemented in base");
9747
9977
  } catch (e) {
@@ -9769,7 +9999,15 @@ var SwapProvider = /*#__PURE__*/function () {
9769
9999
  */
9770
10000
  ;
9771
10001
  _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
9772
- throw new Error("Not implemented in base");
10002
+ try {
10003
+ var _item$coin3;
10004
+ var item = this._supportedCoins.find(function (i) {
10005
+ return i.coin.ticker === ticker;
10006
+ });
10007
+ return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10008
+ } catch (e) {
10009
+ improveAndRethrow(e, "getCoinByTickerIfPresent");
10010
+ }
9773
10011
  }
9774
10012
 
9775
10013
  /**
@@ -9778,17 +10016,68 @@ var SwapProvider = /*#__PURE__*/function () {
9778
10016
  * @return {boolean}
9779
10017
  */;
9780
10018
  _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
9781
- throw new Error("Not implemented in base");
9782
- }
9783
-
9784
- /**
9785
- * @param asset {Coin}
9786
- * @return {string|null}
9787
- */;
9788
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
9789
- throw new Error("Not implemented in base");
9790
- };
9791
- return SwapProvider;
10019
+ try {
10020
+ var assetData = this._supportedCoins.find(function (i) {
10021
+ var _i$coin;
10022
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (asset == null ? void 0 : asset.ticker);
10023
+ });
10024
+ if (assetData) {
10025
+ var corrected = assetData.validationRegexp.trim();
10026
+ corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10027
+ corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10028
+ return address.match(corrected) != null;
10029
+ }
10030
+ } catch (e) {
10031
+ Logger.logError(e, "isAddressValidForAsset");
10032
+ }
10033
+ return false;
10034
+ }
10035
+
10036
+ /**
10037
+ * @param asset {Coin}
10038
+ * @return {string|null}
10039
+ */;
10040
+ _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10041
+ try {
10042
+ var assetData = this._supportedCoins.find(function (i) {
10043
+ var _i$coin2;
10044
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (asset == null ? void 0 : asset.ticker);
10045
+ });
10046
+ if (assetData != null && assetData.hasExtraId) {
10047
+ if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10048
+ // We return some default name if the extraIdName is empty
10049
+ return "ID";
10050
+ }
10051
+ return assetData == null ? void 0 : assetData.extraIdName;
10052
+ }
10053
+ return null;
10054
+ } catch (e) {
10055
+ improveAndRethrow(e, "getExtraIdNameIfPresent");
10056
+ }
10057
+ };
10058
+ _proto.removeProtocolNameFromCoinName = function removeProtocolNameFromCoinName(coinName, tickerPrintable, protocolName) {
10059
+ if (coinName) {
10060
+ var originalName = coinName;
10061
+ if (tickerPrintable) {
10062
+ coinName = coinName.replaceAll(new RegExp("\\(" + tickerPrintable + "\\)", "gi"), "");
10063
+ }
10064
+ if (protocolName) {
10065
+ coinName = coinName.replaceAll(new RegExp("\\(" + protocolName + "\\)", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + "$", "gi"), "").replaceAll(new RegExp("^" + protocolName + " ", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + " ", "gi"), " ");
10066
+ }
10067
+ coinName = coinName.replaceAll(/ +/g, " ").trim();
10068
+ var defaultNames = ["token", "network", "protocol", "coin", "mainnet", "chain", "project", "cash", "finance", "wrapped", "blockchain", "network"];
10069
+ var lowerCoinName = coinName.toLowerCase();
10070
+ var isBecameDefaultName = defaultNames.find(function (defName) {
10071
+ return lowerCoinName === defName || lowerCoinName === "the " + defName;
10072
+ });
10073
+ if (coinName === "" || isBecameDefaultName) {
10074
+ // Rolling back to original name if our processing leads in empty name or one of the default words
10075
+ coinName = originalName;
10076
+ }
10077
+ }
10078
+ return coinName;
10079
+ };
10080
+ return SwapProvider;
9792
10081
  }();
9793
10082
  SwapProvider.COMMON_ERRORS = {
9794
10083
  REQUESTS_LIMIT_EXCEEDED: "requestsLimitExceeded"
@@ -9805,22 +10094,16 @@ SwapProvider.CREATION_FAIL_REASONS = {
9805
10094
  };
9806
10095
  SwapProvider.SWAP_STATUSES = {
9807
10096
  WAITING_FOR_PAYMENT: "waiting_for_payment",
9808
- // public +
9809
10097
  CONFIRMING: "confirming",
9810
10098
  PAYMENT_RECEIVED: "payment_received",
9811
- // public +
9812
10099
  EXCHANGING: "exchanging",
9813
- // session full // public +
9814
10100
  COMPLETED: "completed",
9815
- // session full // public +
9816
10101
  REFUNDED: "refunded",
9817
- // session full // public +
9818
10102
  EXPIRED: "expired",
9819
- // public +
9820
- FAILED: "failed" // public +
10103
+ FAILED: "failed"
9821
10104
  };
9822
10105
 
9823
- function _catch$2(body, recover) {
10106
+ function _catch$3(body, recover) {
9824
10107
  try {
9825
10108
  var result = body();
9826
10109
  } catch (e) {
@@ -9844,14 +10127,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9844
10127
  if (useRestrictedCoinsSet === void 0) {
9845
10128
  useRestrictedCoinsSet = true;
9846
10129
  }
9847
- _this = _SwapProvider.call(this) || this;
9848
- _this._supportedCoins = [];
10130
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
9849
10131
  _this._partners = [];
9850
- _this._URL = "" + apiKeysProxyUrl;
9851
- _this._maxRateDigits = 20;
9852
- _this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9853
- _this._customCoinBuilder = customCoinBuilder;
9854
- _this._cache = cache;
10132
+ _this._URL = apiKeysProxyUrl + "/swapspace";
10133
+ _this.isAggregator = true;
9855
10134
  return _this;
9856
10135
  }
9857
10136
  var _proto = SwapspaceSwapProvider.prototype;
@@ -9860,144 +10139,21 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9860
10139
  * (and even a bit smaller value) for better consistency */
9861
10140
  return 110000;
9862
10141
  };
9863
- _proto.getDepositCurrencies = function getDepositCurrencies() {
9864
- try {
9865
- var _this2 = this;
9866
- var loggerSource = "getDepositCurrencies";
9867
- return Promise.resolve(_catch$2(function () {
9868
- return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9869
- var _this2$_supportedCoin;
9870
- Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9871
- return {
9872
- result: true,
9873
- coins: _this2._supportedCoins.filter(function (item) {
9874
- return item.deposit;
9875
- }).map(function (item) {
9876
- return item.coin;
9877
- })
9878
- };
9879
- });
9880
- }, function (e) {
9881
- var _e$response;
9882
- if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9883
- return {
9884
- result: false,
9885
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9886
- };
9887
- }
9888
- improveAndRethrow(e, loggerSource);
9889
- }));
9890
- } catch (e) {
9891
- return Promise.reject(e);
9892
- }
9893
- };
9894
- _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9895
- try {
9896
- var _this3 = this;
9897
- var loggerSource = "getAllSupportedCurrencies";
9898
- return Promise.resolve(_catch$2(function () {
9899
- return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9900
- var _this3$_supportedCoin;
9901
- Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins returning", loggerSource);
9902
- return {
9903
- result: true,
9904
- coins: _this3._supportedCoins.map(function (item) {
9905
- return item.coin;
9906
- })
9907
- };
9908
- });
9909
- }, function (e) {
9910
- var _e$response2;
9911
- if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9912
- return {
9913
- result: false,
9914
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9915
- };
9916
- }
9917
- improveAndRethrow(e, loggerSource);
9918
- }));
9919
- } catch (e) {
9920
- return Promise.reject(e);
9921
- }
9922
- };
9923
- _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9924
- if (exceptCurrency === void 0) {
9925
- exceptCurrency = null;
9926
- }
9927
- try {
9928
- var _this4 = this;
9929
- var loggerSource = "getWithdrawalCurrencies";
9930
- return Promise.resolve(_catch$2(function () {
9931
- return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9932
- var _this4$_supportedCoin;
9933
- Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9934
- return {
9935
- result: true,
9936
- coins: _this4._supportedCoins.filter(function (item) {
9937
- var _item$coin, _exceptCurrency;
9938
- return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9939
- }).map(function (item) {
9940
- return item.coin;
9941
- })
9942
- };
9943
- });
9944
- }, function (e) {
9945
- var _e$response3;
9946
- if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9947
- return {
9948
- result: false,
9949
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9950
- };
9951
- }
9952
- improveAndRethrow(e, loggerSource);
9953
- }));
9954
- } catch (e) {
9955
- return Promise.reject(e);
9956
- }
9957
- };
9958
- _proto.initialize = function initialize() {
9959
- try {
9960
- var _this5 = this;
9961
- return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9962
- } catch (e) {
9963
- return Promise.reject(e);
9964
- }
9965
- };
9966
- _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9967
- var loggerSource = "getIconUrl";
9968
- try {
9969
- var _this$_supportedCoins2, _this$_supportedCoins3;
9970
- var coin = coinOrTicker;
9971
- if (!(coinOrTicker instanceof Coin)) {
9972
- var _this$_supportedCoins;
9973
- coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9974
- return i.coin.ticker === coinOrTicker;
9975
- })) == null ? void 0 : _this$_supportedCoins.coin;
9976
- }
9977
- return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9978
- var _item$coin2, _coin;
9979
- return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9980
- })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9981
- } catch (e) {
9982
- improveAndRethrow(e, loggerSource);
9983
- }
9984
- };
9985
10142
  _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9986
10143
  try {
9987
- var _this6 = this;
10144
+ var _this2 = this;
9988
10145
  var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
9989
- return Promise.resolve(_catch$2(function () {
9990
- var _temp = function (_this6$_supportedCoin) {
9991
- if (!((_this6$_supportedCoin = _this6._supportedCoins) != null && _this6$_supportedCoin.length)) {
9992
- return Promise.resolve(axios__default["default"].get(_this6._URL + "/api/v2/currencies")).then(function (rawResponse) {
10146
+ return Promise.resolve(_catch$3(function () {
10147
+ var _temp = function (_this2$_supportedCoin) {
10148
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length)) {
10149
+ return Promise.resolve(axios__default["default"].get(_this2._URL + "/api/v2/currencies")).then(function (rawResponse) {
9993
10150
  var _rawResponse$data, _rawResponse$data2;
9994
10151
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
9995
10152
  var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
9996
10153
  Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
9997
- _this6._supportedCoins = allowedCoins.map(function (item) {
9998
- var coin = _this6._customCoinBuilder(item.code, item.network);
9999
- if (!coin && !_this6.useRestrictedCoinsSet) {
10000
- var _item$name;
10154
+ _this2._supportedCoins = allowedCoins.map(function (item) {
10155
+ var coin = _this2._customCoinBuilder(item.code, item.network);
10156
+ if (!coin && !_this2.useRestrictedCoinsSet) {
10001
10157
  /** Building coin object for coin that isn't supported OOB in Rabbit.
10002
10158
  * We are doing this way to be able to use extended coins set for swaps.
10003
10159
  * These temporary built coins are only for in-swap use, and we omit some usual
@@ -10011,11 +10167,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10011
10167
  /** Removing ticker and protocol name from coin name as we usually use them explicitly
10012
10168
  * from coin object rather than counting on having it in the coin name itself.
10013
10169
  * This processing is needed due to poor quality of swapspace coins names. */
10014
- var name = ((_item$name = item.name) != null ? _item$name : "").replaceAll("(" + code + ")", "").replaceAll("(" + network + ")", "").replaceAll(/ +/g, " ").trim();
10015
- if (name === "") {
10016
- // Rolling back to original name if our processing leads in empty name
10017
- name = item.name;
10018
- }
10170
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
10019
10171
  var ticker = "" + code + (code === network ? "" : network);
10020
10172
  var defaultDecimalPlacesForCoinNotSupportedOOB = 8;
10021
10173
  var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
@@ -10031,16 +10183,17 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10031
10183
  network: item.network,
10032
10184
  hasExtraId: item.hasExtraId,
10033
10185
  extraIdName: item.extraIdName,
10034
- isPopular: !!item.popular,
10186
+ isPopular: item.popular ? 1 : 0,
10035
10187
  iconURL: item.icon ? "https://storage.swapspace.co" + item.icon : FALLBACK_ASSET_ICON_URL,
10036
10188
  deposit: (_item$deposit = item.deposit) != null ? _item$deposit : false,
10037
10189
  withdrawal: (_item$withdrawal = item.withdrawal) != null ? _item$withdrawal : false,
10038
- validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null
10190
+ validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null,
10191
+ isAvailable: true
10039
10192
  };
10040
10193
  }
10041
10194
  return [];
10042
10195
  }).flat();
10043
- _this6._putPopularCoinsFirst();
10196
+ _this2._putPopularCoinsFirst();
10044
10197
  });
10045
10198
  }
10046
10199
  }();
@@ -10054,15 +10207,15 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10054
10207
  };
10055
10208
  _proto._fetchPartnersListIfNeeded = function _fetchPartnersListIfNeeded() {
10056
10209
  try {
10057
- var _this7 = this;
10210
+ var _this3 = this;
10058
10211
  var loggerSource = "_fetchPartnersListIfNeeded";
10059
- return Promise.resolve(_catch$2(function () {
10060
- var _temp2 = function (_this7$_partners) {
10061
- if (((_this7$_partners = _this7._partners) == null ? void 0 : _this7$_partners.length) === 0) {
10062
- return Promise.resolve(axios__default["default"].get(_this7._URL + "/api/v2/partners")).then(function (rawResponse) {
10212
+ return Promise.resolve(_catch$3(function () {
10213
+ var _temp2 = function (_this3$_partners) {
10214
+ if (((_this3$_partners = _this3._partners) == null ? void 0 : _this3$_partners.length) === 0) {
10215
+ return Promise.resolve(axios__default["default"].get(_this3._URL + "/api/v2/partners")).then(function (rawResponse) {
10063
10216
  var _rawResponse$data3;
10064
10217
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data3 = rawResponse.data) == null ? void 0 : _rawResponse$data3.length) + " partners", loggerSource);
10065
- _this7._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10218
+ _this3._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10066
10219
  });
10067
10220
  }
10068
10221
  }();
@@ -10073,99 +10226,30 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10073
10226
  } catch (e) {
10074
10227
  return Promise.reject(e);
10075
10228
  }
10076
- }
10077
- /**
10078
- * This method sort internal list putting popular (as swapspace thinks) coins to the top.
10079
- * 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.
10080
- * @private
10081
- */
10082
- ;
10083
- _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
10084
- this._supportedCoins.sort(function (i1, i2) {
10085
- if (i1.isPopular && !i2.isPopular) return -1;
10086
- if (i2.isPopular && !i1.isPopular) return 1;
10087
- return i1.coin.ticker > i2.coin.ticker ? 1 : i1.coin.ticker < i2.coin.ticker ? -1 : 0;
10088
- });
10089
- };
10090
- _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
10091
- try {
10092
- var _this8 = this;
10093
- var loggerSource = "getCoinToUSDTRate";
10094
- return Promise.resolve(_catch$2(function () {
10095
- return coin ? Promise.resolve(_this8._fetchSupportedCurrenciesIfNeeded()).then(function () {
10096
- var _this8$_supportedCoin;
10097
- // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
10098
- var usdtTrc20 = (_this8$_supportedCoin = _this8._supportedCoins.find(function (i) {
10099
- return i.coin.ticker === "USDTTRC20";
10100
- })) == null ? void 0 : _this8$_supportedCoin.coin;
10101
- if (!usdtTrc20) {
10102
- return {
10103
- result: false
10104
- };
10105
- }
10106
- var cached = _this8._cache.get("swapspace_usdt_rate_" + coin.ticker);
10107
- if (cached != null) {
10108
- return {
10109
- result: true,
10110
- rate: cached
10111
- };
10112
- }
10113
- Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
10114
- return Promise.resolve(_this8.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
10115
- if (!result.result) {
10116
- return {
10117
- result: false
10118
- };
10119
- }
10120
-
10121
- // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
10122
- var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
10123
- var rate = bignumber_js.BigNumber(1).div(bignumber_js.BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
10124
- _this8._cache.put("swapspace_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
10125
- );
10126
- return {
10127
- result: true,
10128
- rate: rate
10129
- };
10130
- });
10131
- }) : null;
10132
- }, function (e) {
10133
- improveAndRethrow(e, loggerSource);
10134
- }));
10135
- } catch (e) {
10136
- return Promise.reject(e);
10137
- }
10138
10229
  };
10139
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
10140
- try {
10141
- var _item$coin3;
10142
- var item = this._supportedCoins.find(function (i) {
10143
- return i.coin.ticker === ticker;
10144
- });
10145
- return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10146
- } catch (e) {
10147
- improveAndRethrow(e, "getCoinByTickerIfPresent");
10148
- }
10149
- };
10150
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
10230
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
10151
10231
  if (fixed === void 0) {
10152
10232
  fixed = false;
10153
10233
  }
10154
10234
  if (fromCoinToUsdRate === void 0) {
10155
10235
  fromCoinToUsdRate = null;
10156
10236
  }
10237
+ if (amountIsToReceive === void 0) {
10238
+ amountIsToReceive = false;
10239
+ }
10157
10240
  try {
10158
- var _this9 = this;
10241
+ var _this4 = this;
10159
10242
  var loggerSource = "getSwapInfo";
10160
- return Promise.resolve(_catch$2(function () {
10243
+ return Promise.resolve(_catch$3(function () {
10244
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10161
10245
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || bignumber_js.BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean") {
10162
10246
  throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed);
10163
10247
  }
10164
- var fromCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10248
+ var fromCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10165
10249
  var _i$coin;
10166
10250
  return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
10167
10251
  });
10168
- var toCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10252
+ var toCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10169
10253
  var _i$coin2;
10170
10254
  return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
10171
10255
  });
@@ -10175,11 +10259,11 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10175
10259
  return !fromCoinSwapspaceDetails.deposit || !toCoinSwapspaceDetails.withdrawal ? {
10176
10260
  result: false,
10177
10261
  reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
10178
- } : Promise.resolve(axios__default["default"].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) {
10262
+ } : Promise.resolve(axios__default["default"].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) {
10179
10263
  var _response$data, _exchangesSupportingT;
10180
10264
  var _exit;
10181
- function _temp4(_result6) {
10182
- if (_exit) return _result6;
10265
+ function _temp4(_result2) {
10266
+ if (_exit) return _result2;
10183
10267
  var result = {
10184
10268
  result: false,
10185
10269
  reason: smallestMin && bignumber_js.BigNumber(amountCoins).lt(smallestMin) ? SwapProvider.NO_SWAPS_REASONS.TOO_LOW : greatestMax && bignumber_js.BigNumber(amountCoins).gt(greatestMax) ? SwapProvider.NO_SWAPS_REASONS.TOO_HIGH : SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED,
@@ -10273,9 +10357,9 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10273
10357
  }
10274
10358
  }
10275
10359
  var rate = bestOpt.toAmount && bestOpt.fromAmount ? bignumber_js.BigNumber(bestOpt.toAmount).div(bestOpt.fromAmount) : null;
10276
- return Promise.resolve(_this9._fetchPartnersListIfNeeded()).then(function () {
10360
+ return Promise.resolve(_this4._fetchPartnersListIfNeeded()).then(function () {
10277
10361
  var _bestOpt$duration;
10278
- var partner = _this9._partners.find(function (p) {
10362
+ var partner = _this4._partners.find(function (p) {
10279
10363
  var _bestOpt$partner;
10280
10364
  return (bestOpt == null || (_bestOpt$partner = bestOpt.partner) == null ? void 0 : _bestOpt$partner.toLowerCase()) === p.path.toLowerCase();
10281
10365
  });
@@ -10286,7 +10370,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10286
10370
  max: max,
10287
10371
  smallestMin: smallestMin,
10288
10372
  greatestMax: greatestMax,
10289
- rate: rate != null ? AmountUtils.trim(rate, _this9._maxRateDigits) : null,
10373
+ rate: rate != null ? AmountUtils.trim(rate, _this4._maxRateDigits) : null,
10290
10374
  durationMinutesRange: (_bestOpt$duration = bestOpt.duration) != null ? _bestOpt$duration : null,
10291
10375
  fixed: bestOpt.fixed,
10292
10376
  rawSwapData: bestOpt,
@@ -10300,8 +10384,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10300
10384
  return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
10301
10385
  });
10302
10386
  }, function (e) {
10303
- var _e$response4;
10304
- if ((e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status) === 429) {
10387
+ var _e$response;
10388
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
10305
10389
  return {
10306
10390
  result: false,
10307
10391
  reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
@@ -10314,18 +10398,22 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10314
10398
  return Promise.reject(e);
10315
10399
  }
10316
10400
  };
10317
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
10401
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
10318
10402
  if (toCurrencyExtraId === void 0) {
10319
10403
  toCurrencyExtraId = "";
10320
10404
  }
10321
10405
  if (refundExtraId === void 0) {
10322
10406
  refundExtraId = "";
10323
10407
  }
10408
+ if (amountIsToReceive === void 0) {
10409
+ amountIsToReceive = false;
10410
+ }
10324
10411
  try {
10325
- var _this10 = this;
10412
+ var _this5 = this;
10326
10413
  var loggerSource = "createSwap";
10327
10414
  var partner = rawSwapData == null ? void 0 : rawSwapData.partner;
10328
- return Promise.resolve(_catch$2(function () {
10415
+ return Promise.resolve(_catch$3(function () {
10416
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10329
10417
  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) {
10330
10418
  throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + (clientIpAddress == null ? void 0 : clientIpAddress.length) + " " + fixed);
10331
10419
  }
@@ -10333,12 +10421,12 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10333
10421
  ) {
10334
10422
  throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
10335
10423
  }
10336
- var _this10$_supportedCoi = _this10._supportedCoins.reduce(function (prev, coinData) {
10424
+ var _this5$_supportedCoin = _this5._supportedCoins.reduce(function (prev, coinData) {
10337
10425
  return [coinData.coin.ticker === fromCoin.ticker ? coinData.hasExtraId : prev[0], coinData.coin.ticker === toCoin.ticker ? coinData.hasExtraId : prev[1]];
10338
10426
  }, [false, false]),
10339
- fromCurrencyHasExtraId = _this10$_supportedCoi[0],
10340
- toCurrencyHasExtraId = _this10$_supportedCoi[1];
10341
- return Promise.resolve(_this10._fetchSupportedCurrenciesIfNeeded()).then(function () {
10427
+ fromCurrencyHasExtraId = _this5$_supportedCoin[0],
10428
+ toCurrencyHasExtraId = _this5$_supportedCoin[1];
10429
+ return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
10342
10430
  var _toCurrencyExtraId, _refundExtraId;
10343
10431
  var requestData = {
10344
10432
  partner: partner,
@@ -10357,7 +10445,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10357
10445
  refund: refundAddress
10358
10446
  };
10359
10447
  Logger.log("Sending create request: " + safeStringify(requestData), loggerSource);
10360
- return Promise.resolve(axios__default["default"].post(_this10._URL + "/api/v2/exchange", requestData)).then(function (response) {
10448
+ return Promise.resolve(axios__default["default"].post(_this5._URL + "/api/v2/exchange", requestData)).then(function (response) {
10361
10449
  var result = response.data;
10362
10450
  Logger.log("Creation result " + safeStringify(result), loggerSource);
10363
10451
  if (result != null && result.id) {
@@ -10382,7 +10470,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10382
10470
  toAmount: AmountUtils.trim(result == null || (_result$to4 = result.to) == null ? void 0 : _result$to4.amount, toCoin.digits),
10383
10471
  toAddress: result == null || (_result$to5 = result.to) == null ? void 0 : _result$to5.address,
10384
10472
  fromCurrencyExtraId: (_result$from$extraId = result == null || (_result$from6 = result.from) == null ? void 0 : _result$from6.extraId) != null ? _result$from$extraId : "",
10385
- rate: AmountUtils.trim(rate, _this10._maxRateDigits),
10473
+ rate: AmountUtils.trim(rate, _this5._maxRateDigits),
10386
10474
  fixed: result.fixed
10387
10475
  };
10388
10476
  }
@@ -10392,7 +10480,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10392
10480
  });
10393
10481
  });
10394
10482
  }, function (e) {
10395
- var _e$response5, _e$response6;
10483
+ var _e$response2, _e$response3;
10396
10484
  Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
10397
10485
  var composeFailResult = function composeFailResult(reason) {
10398
10486
  return {
@@ -10401,8 +10489,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10401
10489
  partner: partner
10402
10490
  };
10403
10491
  };
10404
- var status = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.status;
10405
- var data = e == null || (_e$response6 = e.response) == null ? void 0 : _e$response6.data;
10492
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
10493
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
10406
10494
  if (status === 429) {
10407
10495
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10408
10496
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10451,9 +10539,9 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10451
10539
  };
10452
10540
  _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10453
10541
  try {
10454
- var _this11 = this;
10542
+ var _this6 = this;
10455
10543
  var loggerSource = "getExistingSwapsDetailsAndStatus";
10456
- return Promise.resolve(_catch$2(function () {
10544
+ return Promise.resolve(_catch$3(function () {
10457
10545
  if (swapIds.find(function (id) {
10458
10546
  return typeof id !== "string";
10459
10547
  })) {
@@ -10461,8 +10549,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10461
10549
  }
10462
10550
  var getNotFailingOn404 = function getNotFailingOn404(swapId) {
10463
10551
  try {
10464
- return Promise.resolve(_catch$2(function () {
10465
- return Promise.resolve(axios__default["default"].get(_this11._URL + "/api/v2/exchange/" + swapId));
10552
+ return Promise.resolve(_catch$3(function () {
10553
+ return Promise.resolve(axios__default["default"].get(_this6._URL + "/api/v2/exchange/" + swapId));
10466
10554
  }, function (error) {
10467
10555
  var _error$response;
10468
10556
  if ((error == null || (_error$response = error.response) == null ? void 0 : _error$response.status) === 404) return [];
@@ -10482,13 +10570,13 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10482
10570
  var swaps = wo404.map(function (r) {
10483
10571
  return r.data;
10484
10572
  }).map(function (swap, index) {
10485
- var _this11$_supportedCoi, _this11$_supportedCoi2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10486
- var fromCoin = (_this11$_supportedCoi = _this11._supportedCoins.find(function (i) {
10573
+ var _this6$_supportedCoin, _this6$_supportedCoin2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10574
+ var fromCoin = (_this6$_supportedCoin = _this6._supportedCoins.find(function (i) {
10487
10575
  return i.code === swap.from.code && i.network === swap.from.network;
10488
- })) == null ? void 0 : _this11$_supportedCoi.coin;
10489
- var toCoin = (_this11$_supportedCoi2 = _this11._supportedCoins.find(function (i) {
10576
+ })) == null ? void 0 : _this6$_supportedCoin.coin;
10577
+ var toCoin = (_this6$_supportedCoin2 = _this6._supportedCoins.find(function (i) {
10490
10578
  return i.code === swap.to.code && i.network === swap.to.network;
10491
- })) == null ? void 0 : _this11$_supportedCoi2.coin;
10579
+ })) == null ? void 0 : _this6$_supportedCoin2.coin;
10492
10580
  if (!fromCoin || !toCoin) {
10493
10581
  return []; // We skip swaps with not supported coins for now
10494
10582
  }
@@ -10497,10 +10585,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10497
10585
  };
10498
10586
  var expiresAt = toUtcTimestamp(swap.timestamps.expiresAt);
10499
10587
  var isExpiredByTime = expiresAt < Date.now();
10500
- var status = _this11._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10588
+ var status = _this6._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10501
10589
  var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
10502
10590
  var addressToSendCoinsToSwapspace = swap.from.address;
10503
- 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);
10591
+ 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);
10504
10592
  }).flat();
10505
10593
  Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
10506
10594
  return {
@@ -10509,7 +10597,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10509
10597
  };
10510
10598
  });
10511
10599
  }, function (e) {
10512
- var _e$response7, _e$response8;
10600
+ var _e$response4, _e$response5;
10513
10601
  Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
10514
10602
  var composeFailResult = function composeFailResult(reason) {
10515
10603
  return {
@@ -10517,8 +10605,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10517
10605
  reason: reason
10518
10606
  };
10519
10607
  };
10520
- var status = e == null || (_e$response7 = e.response) == null ? void 0 : _e$response7.status;
10521
- var data = e == null || (_e$response8 = e.response) == null ? void 0 : _e$response8.data;
10608
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
10609
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
10522
10610
  if (status === 429) {
10523
10611
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10524
10612
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10529,45 +10617,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10529
10617
  return Promise.reject(e);
10530
10618
  }
10531
10619
  };
10532
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
10533
- try {
10534
- var assetData = this._supportedCoins.find(function (i) {
10535
- var _i$coin3;
10536
- return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (asset == null ? void 0 : asset.ticker);
10537
- });
10538
- if (assetData) {
10539
- var corrected = assetData.validationRegexp.trim();
10540
- corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10541
- corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10542
- return address.match(corrected) != null;
10543
- }
10544
- } catch (e) {
10545
- Logger.logError(e, "isAddressValidForAsset");
10546
- }
10547
- return false;
10548
- };
10549
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10550
- try {
10551
- var assetData = this._supportedCoins.find(function (i) {
10552
- var _i$coin4;
10553
- return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (asset == null ? void 0 : asset.ticker);
10554
- });
10555
- if (assetData != null && assetData.hasExtraId) {
10556
- if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10557
- // We return some default name if the extraIdName is empty
10558
- return "ID";
10559
- }
10560
- return assetData == null ? void 0 : assetData.extraIdName;
10561
- }
10562
- return null;
10563
- } catch (e) {
10564
- improveAndRethrow(e, "getExtraIdNameIfPresent");
10565
- }
10566
- };
10567
10620
  return SwapspaceSwapProvider;
10568
10621
  }(SwapProvider);
10569
10622
 
10570
- function _catch$1(body, recover) {
10623
+ function _catch$2(body, recover) {
10571
10624
  try {
10572
10625
  var result = body();
10573
10626
  } catch (e) {
@@ -10764,134 +10817,590 @@ var SwapUtils = /*#__PURE__*/function () {
10764
10817
  if (coinToCurrentFiatRate === void 0) {
10765
10818
  coinToCurrentFiatRate = null;
10766
10819
  }
10767
- if (fiatCurrencyDecimals === void 0) {
10768
- fiatCurrencyDecimals = null;
10820
+ if (fiatCurrencyDecimals === void 0) {
10821
+ fiatCurrencyDecimals = null;
10822
+ }
10823
+ try {
10824
+ var loggerSource = "getInitialSwapData";
10825
+ return Promise.resolve(_catch$2(function () {
10826
+ /* We use some amount here that should fit at least some of the limits of the swap providers.
10827
+ * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10828
+ * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10829
+ */
10830
+ var defaultAmountUsd = bignumber_js.BigNumber("300");
10831
+ return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10832
+ var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10833
+ Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10834
+ return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10835
+ var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10836
+ if (!details) {
10837
+ throw new Error("The details are empty: " + safeStringify(details));
10838
+ }
10839
+ if (!details.result) {
10840
+ Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10841
+ 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) {
10842
+ return {
10843
+ result: false,
10844
+ reason: details.reason
10845
+ };
10846
+ } else {
10847
+ throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10848
+ }
10849
+ }
10850
+ var fiatMin = null;
10851
+ var fiatMax = null;
10852
+ var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10853
+ var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10854
+ if (fiatRate != null) {
10855
+ fiatMin = bignumber_js.BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10856
+ fiatMax = bignumber_js.BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10857
+ }
10858
+ var result = {
10859
+ result: true,
10860
+ min: details == null ? void 0 : details.smallestMin,
10861
+ fiatMin: fiatMin,
10862
+ max: details == null ? void 0 : details.greatestMax,
10863
+ fiatMax: fiatMax,
10864
+ rate: AmountUtils.trim(details.rate, 30)
10865
+ };
10866
+ Logger.log("Returning: " + safeStringify(result), loggerSource);
10867
+ return result;
10868
+ });
10869
+ });
10870
+ }, function (e) {
10871
+ Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
10872
+ improveAndRethrow(e, loggerSource);
10873
+ }));
10874
+ } catch (e) {
10875
+ return Promise.reject(e);
10876
+ }
10877
+ };
10878
+ SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10879
+ (function () {
10880
+ try {
10881
+ var _temp = _catch$2(function () {
10882
+ return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10883
+ }, function (e) {
10884
+ Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10885
+ });
10886
+ return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10887
+ } catch (e) {
10888
+ Promise.reject(e);
10889
+ }
10890
+ })();
10891
+ }
10892
+
10893
+ /**
10894
+ * If some swap is not found by id then there is no item in return list.
10895
+ *
10896
+ * @param swapProviders {SwapProvider[]} - Array of swap providers
10897
+ * @param swapIds {string[]} - Array of swap IDs
10898
+ * @return {Promise<{
10899
+ * result: true,
10900
+ * swaps: ExistingSwapWithFiatData[]
10901
+ * }|{
10902
+ * result: false,
10903
+ * reason: string
10904
+ * }>}
10905
+ */;
10906
+ SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProviders, swapIds) {
10907
+ try {
10908
+ return Promise.resolve(_catch$2(function () {
10909
+ var _interrupt;
10910
+ function _temp8() {
10911
+ if (swapIds.length > 0 && allSwaps.length === 0 && failResults.length > 0) {
10912
+ var failReasons = failResults.map(function (r) {
10913
+ return r.reason;
10914
+ });
10915
+ return {
10916
+ result: false,
10917
+ reason: failReasons.find(function (r) {
10918
+ return r !== SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED;
10919
+ }) ? failReasons.join("\n") : SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
10920
+ };
10921
+ }
10922
+ return {
10923
+ result: true,
10924
+ swaps: allSwaps
10925
+ };
10926
+ }
10927
+ var allSwaps = [];
10928
+ var remainingSwapIds = new Set(swapIds);
10929
+ var failResults = [];
10930
+ var _temp7 = _forOf(swapProviders, function (provider) {
10931
+ return Promise.resolve(provider.getExistingSwapsDetailsAndStatus([].concat(remainingSwapIds))).then(function (result) {
10932
+ var _temp6 = function () {
10933
+ if (result.result) {
10934
+ var _temp5 = function _temp5() {
10935
+ allSwaps = allSwaps.concat(_extendedSwaps);
10936
+
10937
+ // Stop if we have retrieved all swaps
10938
+ if (allSwaps.length >= swapIds.length) {
10939
+ _interrupt = 1;
10940
+ }
10941
+ };
10942
+ var _extendedSwaps = [];
10943
+ var _temp4 = _forOf(result.swaps, function (swap) {
10944
+ function _temp3() {
10945
+ remainingSwapIds["delete"](swap.id);
10946
+ }
10947
+ var _temp2 = function () {
10948
+ if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10949
+ return Promise.resolve(provider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10950
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10951
+ });
10952
+ } else {
10953
+ return Promise.resolve(Promise.all([provider.getCoinToUSDTRate(swap.fromCoin), provider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10954
+ var fromCoinFiatRate = _ref[0],
10955
+ toCoinFiatRate = _ref[1];
10956
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toCoinFiatRate == null ? void 0 : toCoinFiatRate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(toCoinFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10957
+ });
10958
+ }
10959
+ }();
10960
+ return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
10961
+ });
10962
+ return _temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4);
10963
+ } else {
10964
+ failResults.push(result);
10965
+ }
10966
+ }();
10967
+ if (_temp6 && _temp6.then) return _temp6.then(function () {});
10968
+ });
10969
+ }, function () {
10970
+ return _interrupt;
10971
+ });
10972
+ return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
10973
+ }, function (e) {
10974
+ improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
10975
+ }));
10976
+ } catch (e) {
10977
+ return Promise.reject(e);
10978
+ }
10979
+ };
10980
+ return SwapUtils;
10981
+ }();
10982
+
10983
+ function _catch$1(body, recover) {
10984
+ try {
10985
+ var result = body();
10986
+ } catch (e) {
10987
+ return recover(e);
10988
+ }
10989
+ if (result && result.then) {
10990
+ return result.then(void 0, recover);
10991
+ }
10992
+ return result;
10993
+ }
10994
+ var LetsExchangeSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10995
+ _inheritsLoose(LetsExchangeSwapProvider, _SwapProvider);
10996
+ function LetsExchangeSwapProvider(apiKeysProxyUrl, cache, customCoinBuilder, useRestrictedCoinsSet) {
10997
+ var _this;
10998
+ if (customCoinBuilder === void 0) {
10999
+ customCoinBuilder = function customCoinBuilder(coin, network) {
11000
+ return null;
11001
+ };
11002
+ }
11003
+ if (useRestrictedCoinsSet === void 0) {
11004
+ useRestrictedCoinsSet = true;
11005
+ }
11006
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
11007
+ _this._partners = [];
11008
+ _this._URL = apiKeysProxyUrl + "/letsexchange";
11009
+ _this.isAggregator = false;
11010
+ _this.COINS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
11011
+ _this.coinsLastUpdateTimestamp = null;
11012
+ return _this;
11013
+ }
11014
+ var _proto = LetsExchangeSwapProvider.prototype;
11015
+ _proto.getSwapCreationInfoTtlMs = function getSwapCreationInfoTtlMs() {
11016
+ return 110000;
11017
+ };
11018
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
11019
+ try {
11020
+ var _this2 = this;
11021
+ var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
11022
+ return Promise.resolve(_catch$1(function () {
11023
+ var _temp = function (_this2$_supportedCoin) {
11024
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length) || !_this2.coinsLastUpdateTimestamp || _this2.coinsLastUpdateTimestamp + _this2.COINS_EXPIRATION_TIME_MS < Date.now()) {
11025
+ return Promise.resolve(axios__default["default"].get(_this2._URL + "/v2/coins")).then(function (rawResponse) {
11026
+ var _rawResponse$data, _rawResponse$data2;
11027
+ Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
11028
+ var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
11029
+ Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
11030
+ _this2._supportedCoins = allowedCoins.map(function (item) {
11031
+ var code = item.code.toUpperCase();
11032
+ if (!Array.isArray(item.networks)) return [];
11033
+ return item.networks.map(function (networkDetails) {
11034
+ var network = networkDetails.code.toUpperCase();
11035
+ var coin = _this2._customCoinBuilder(code, network);
11036
+ if (!coin && !_this2.useRestrictedCoinsSet) {
11037
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
11038
+ var ticker = "" + code + (code === network ? "" : network);
11039
+ var defaultDecimalPlacesForCoinNotSupportedOOB = DEFAULT_CRYPTO_DECIMAL_COUNT;
11040
+ var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
11041
+ 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);
11042
+ }
11043
+ if (coin) {
11044
+ var _networkDetails$extra, _networkDetails$valid;
11045
+ return {
11046
+ coin: coin,
11047
+ code: item.code,
11048
+ network: networkDetails.code,
11049
+ hasExtraId: !!networkDetails.has_extra,
11050
+ extraIdName: (_networkDetails$extra = networkDetails.extra_name) != null ? _networkDetails$extra : null,
11051
+ isPopular: item.rating || 0,
11052
+ iconURL: item.icon ? item.icon : FALLBACK_ASSET_ICON_URL,
11053
+ deposit: true,
11054
+ // Letsexchange provide no such details
11055
+ withdrawal: true,
11056
+ // Letsexchange provide no such details
11057
+ validationRegexp: (_networkDetails$valid = networkDetails.validation_address_regex) != null ? _networkDetails$valid : null,
11058
+ 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)
11059
+ };
11060
+ }
11061
+ return [];
11062
+ });
11063
+ }).flat();
11064
+ _this2.coinsLastUpdateTimestamp = Date.now();
11065
+ _this2._putPopularCoinsFirst();
11066
+ });
11067
+ }
11068
+ }();
11069
+ if (_temp && _temp.then) return _temp.then(function () {});
11070
+ }, function (e) {
11071
+ improveAndRethrow(e, loggerSource);
11072
+ }));
11073
+ } catch (e) {
11074
+ return Promise.reject(e);
11075
+ }
11076
+ };
11077
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
11078
+ if (fixed === void 0) {
11079
+ fixed = false;
11080
+ }
11081
+ if (amountIsToReceive === void 0) {
11082
+ amountIsToReceive = false;
11083
+ }
11084
+ try {
11085
+ var _this3 = this;
11086
+ var loggerSource = "getSwapInfo";
11087
+ return Promise.resolve(_catch$1(function () {
11088
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || bignumber_js.BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean" || amountIsToReceive && !fixed) {
11089
+ throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed + ", " + amountIsToReceive);
11090
+ }
11091
+ var fromCoinDetails = _this3._supportedCoins.find(function (i) {
11092
+ var _i$coin;
11093
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11094
+ });
11095
+ var toCoinDetails = _this3._supportedCoins.find(function (i) {
11096
+ var _i$coin2;
11097
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11098
+ });
11099
+ if (!fromCoinDetails || !toCoinDetails) {
11100
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11101
+ }
11102
+ if (!fromCoinDetails.deposit || !fromCoinDetails.isAvailable || !toCoinDetails.withdrawal || !toCoinDetails.isAvailable) {
11103
+ return {
11104
+ result: false,
11105
+ reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
11106
+ };
11107
+ }
11108
+ var pathAndQuery = "/v1/info" + (amountIsToReceive ? "-revert" : "?float=" + !fixed);
11109
+ return Promise.resolve(axios__default["default"].post("" + _this3._URL + pathAndQuery, {
11110
+ from: fromCoinDetails.code,
11111
+ to: toCoinDetails.code,
11112
+ network_from: fromCoinDetails.network,
11113
+ network_to: toCoinDetails.network,
11114
+ amount: amountCoins,
11115
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11116
+ })).then(function (response) {
11117
+ Logger.log("Retrieved " + (response == null ? void 0 : response.data), loggerSource);
11118
+ var data = response.data;
11119
+
11120
+ // TODO: [dev] add SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING - request alternative rate. task_id=
11121
+
11122
+ // TODO: [feature, low] implement extra coins to fit min/max if there are frequent errors due to min/max exceeding
11123
+ // let extraCoinsToFitMinMax = "0";
11124
+ // if (typeof fromCoinToUsdRate === "string" && BigNumber(fromCoinToUsdRate).gt("0")) {
11125
+ // const extraUsdToFitMinMax = BigNumber("1"); // We correct the limits as the exact limit can fluctuate and cause failed swap creation
11126
+ // extraCoinsToFitMinMax = AmountUtils.trim(extraUsdToFitMinMax.div(fromCoinToUsdRate), fromCoin.digits);
11127
+ // }
11128
+ var min = null;
11129
+ if (data != null && data.min_amount) {
11130
+ min = AmountUtils.trim(data == null ? void 0 : data.min_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11131
+ }
11132
+ var max = null;
11133
+ if (data != null && data.max_amount) {
11134
+ max = AmountUtils.trim(data == null ? void 0 : data.max_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11135
+ }
11136
+ if (data.success === false && data.error) {
11137
+ // TODO: [dev] waiting for response from letsexchange about their not-documented responses
11138
+ // {
11139
+ // "success": false,
11140
+ // "error": "Internal error"
11141
+ // }
11142
+ throw new Error("Failed to estimate swap letsexchange");
11143
+ }
11144
+ if (bignumber_js.BigNumber(data.rate).eq("0") || bignumber_js.BigNumber(data.amount).eq("0")) {
11145
+ // TODO actualize according to letsexchage clarification - decide, can we count on min/max abcense? task_id=76512110797f4eab8b37f1bb789825cb
11146
+ // amount: "0", rate: "0", rate_id: ""
11147
+ var reason = SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED;
11148
+ if (min && bignumber_js.BigNumber(amountCoins).lt(min)) {
11149
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_LOW;
11150
+ } else if (max && bignumber_js.BigNumber(amountCoins).gt(max)) {
11151
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_HIGH;
11152
+ } else if (!amountIsToReceive) {
11153
+ // If we are not requesting receiving amount (it cannot be floating-rate)
11154
+ // todo [feature, moderate] request alternative rate. task_id=31884db5392f49738c20a86115c90e1f
11155
+ // const alternativeRate = 1;
11156
+ // const alternativeRateAvailable = alternativeRate;
11157
+ // if (alternativeRateAvailable) {
11158
+ // reason = fixed
11159
+ // ? SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING
11160
+ // : SwapProvider.NO_SWAPS_REASONS.NO_FLOATING_BUT_HAVE_FIXED;
11161
+ // }
11162
+ }
11163
+ return {
11164
+ result: false,
11165
+ reason: reason,
11166
+ smallestMin: min,
11167
+ greatestMax: max
11168
+ };
11169
+ }
11170
+ var rate = amountIsToReceive ? bignumber_js.BigNumber(amountCoins).div(data.amount) : bignumber_js.BigNumber(data.amount).div(amountCoins);
11171
+ return {
11172
+ result: true,
11173
+ min: min,
11174
+ max: max,
11175
+ smallestMin: min,
11176
+ greatestMax: max,
11177
+ rate: AmountUtils.trim(rate, _this3._maxRateDigits),
11178
+ durationMinutesRange: null,
11179
+ fixed: fixed,
11180
+ rawSwapData: data,
11181
+ isRefundAddressRequired: false
11182
+ };
11183
+ });
11184
+ }, function (e) {
11185
+ var _e$response;
11186
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
11187
+ return {
11188
+ result: false,
11189
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11190
+ };
11191
+ }
11192
+ Logger.log("Internal error when getting swap options " + safeStringify(e), loggerSource);
11193
+ improveAndRethrow(e, loggerSource);
11194
+ }));
11195
+ } catch (e) {
11196
+ return Promise.reject(e);
11197
+ }
11198
+ };
11199
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11200
+ if (toCurrencyExtraId === void 0) {
11201
+ toCurrencyExtraId = "";
11202
+ }
11203
+ if (refundExtraId === void 0) {
11204
+ refundExtraId = "";
11205
+ }
11206
+ if (amountIsToReceive === void 0) {
11207
+ amountIsToReceive = false;
10769
11208
  }
10770
11209
  try {
10771
- var loggerSource = "getInitialSwapData";
11210
+ var _this4 = this;
11211
+ var loggerSource = "createSwap";
10772
11212
  return Promise.resolve(_catch$1(function () {
10773
- /* We use some amount here that should fit at least some of the limits of the swap providers.
10774
- * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10775
- * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10776
- */
10777
- var defaultAmountUsd = bignumber_js.BigNumber("300");
10778
- return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10779
- var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10780
- Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10781
- return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10782
- var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10783
- if (!details) {
10784
- throw new Error("The details are empty: " + safeStringify(details));
10785
- }
10786
- if (!details.result) {
10787
- Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10788
- 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) {
10789
- return {
10790
- result: false,
10791
- reason: details.reason
10792
- };
10793
- } else {
10794
- throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10795
- }
10796
- }
10797
- var fiatMin = null;
10798
- var fiatMax = null;
10799
- var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10800
- var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10801
- if (fiatRate != null) {
10802
- fiatMin = bignumber_js.BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10803
- fiatMax = bignumber_js.BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10804
- }
10805
- var result = {
11213
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean") {
11214
+ throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + fixed);
11215
+ }
11216
+ if (typeof rawSwapData !== "object" || fixed && !rawSwapData.rate_id) {
11217
+ throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
11218
+ }
11219
+ var fromCoinDetails = _this4._supportedCoins.find(function (i) {
11220
+ var _i$coin3;
11221
+ return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11222
+ });
11223
+ var toCoinDetails = _this4._supportedCoins.find(function (i) {
11224
+ var _i$coin4;
11225
+ return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11226
+ });
11227
+ if (!fromCoinDetails || !toCoinDetails) {
11228
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11229
+ }
11230
+ var requestBody = {
11231
+ coin_from: fromCoinDetails.code,
11232
+ network_from: fromCoinDetails.network,
11233
+ coin_to: toCoinDetails.code,
11234
+ network_to: toCoinDetails.network,
11235
+ withdrawal: toAddress,
11236
+ withdrawal_extra_id: toCurrencyExtraId,
11237
+ "return": refundAddress,
11238
+ return_extra_id: refundExtraId,
11239
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11240
+ };
11241
+ if (amountIsToReceive) {
11242
+ requestBody.withdrawal_amount = amount;
11243
+ } else {
11244
+ requestBody.deposit_amount = amount;
11245
+ }
11246
+ if (fixed) {
11247
+ requestBody.rate_id = rawSwapData.rate_id;
11248
+ }
11249
+ return Promise.resolve(axios__default["default"].post(_this4._URL + "/v1/transaction" + (amountIsToReceive ? "-revert" : "?float=" + !fixed), requestBody)).then(function (response) {
11250
+ var result = response.data;
11251
+ Logger.log("Creation result " + safeStringify(result), loggerSource);
11252
+ if (result != null && result.transaction_id) {
11253
+ var _result$rate, _result$deposit_extra;
11254
+ var rate = bignumber_js.BigNumber((_result$rate = result.rate) != null ? _result$rate : 0).isZero() ? bignumber_js.BigNumber(result.withdrawal_amount).div(result.deposit_amount) : bignumber_js.BigNumber(result.rate);
11255
+ return {
10806
11256
  result: true,
10807
- min: details == null ? void 0 : details.smallestMin,
10808
- fiatMin: fiatMin,
10809
- max: details == null ? void 0 : details.greatestMax,
10810
- fiatMax: fiatMax,
10811
- rate: AmountUtils.trim(details.rate, 30)
11257
+ swapId: result.transaction_id,
11258
+ fromCoin: fromCoin,
11259
+ fromAmount: AmountUtils.trim(result.deposit_amount, fromCoin.digits),
11260
+ fromAddress: result.deposit,
11261
+ toCoin: toCoin,
11262
+ toAmount: AmountUtils.trim(result.withdrawal_amount, toCoin.digits),
11263
+ toAddress: result.withdrawal,
11264
+ fromCurrencyExtraId: (_result$deposit_extra = result.deposit_extra_id) != null ? _result$deposit_extra : "",
11265
+ rate: AmountUtils.trim(rate, _this4._maxRateDigits),
11266
+ fixed: !result.is_float
10812
11267
  };
10813
- Logger.log("Returning: " + safeStringify(result), loggerSource);
10814
- return result;
10815
- });
11268
+ }
11269
+ var errorMessage = "Swap creation succeeded but the response is wrong: " + safeStringify(response);
11270
+ Logger.log(errorMessage, loggerSource);
11271
+ throw new Error(errorMessage);
10816
11272
  });
10817
11273
  }, function (e) {
10818
- Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
11274
+ var _e$response2, _e$response3;
11275
+ Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
11276
+ var composeFailResult = function composeFailResult(reason) {
11277
+ return {
11278
+ result: false,
11279
+ reason: reason
11280
+ };
11281
+ };
11282
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
11283
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
11284
+ if (status === 429) {
11285
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11286
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11287
+ }
11288
+ // TODO: [feature, low] add custom errors handling - waiting for response from letsexchange. task_id=00d2e435f6df4fb99af912135bd9ee27
11289
+ // 422 - missing params
11290
+ Logger.log("Internal error for swap: " + safeStringify(e), loggerSource);
10819
11291
  improveAndRethrow(e, loggerSource);
10820
11292
  }));
10821
11293
  } catch (e) {
10822
11294
  return Promise.reject(e);
10823
11295
  }
10824
11296
  };
10825
- SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10826
- (function () {
10827
- try {
10828
- var _temp = _catch$1(function () {
10829
- return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10830
- }, function (e) {
10831
- Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10832
- });
10833
- return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10834
- } catch (e) {
10835
- Promise.reject(e);
10836
- }
10837
- })();
10838
- }
10839
-
10840
- /**
10841
- * If some swap is not found by id then there is no item in return list.
10842
- *
10843
- * @param swapProvider {SwapProvider}
10844
- * @param swapIds {string[]}
10845
- * @return {Promise<{
10846
- * result: true,
10847
- * swaps: ExistingSwapWithFiatData[]
10848
- * }|{
10849
- * result: false,
10850
- * reason: string
10851
- * }>}
10852
- */;
10853
- SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProvider, swapIds) {
11297
+ _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10854
11298
  try {
11299
+ var _this5 = this;
11300
+ var loggerSource = "getExistingSwapsDetailsAndStatus";
10855
11301
  return Promise.resolve(_catch$1(function () {
10856
- return Promise.resolve(swapProvider.getExistingSwapsDetailsAndStatus(swapIds)).then(function (result) {
10857
- var _temp5 = function () {
10858
- if (result.result) {
10859
- var _temp4 = function _temp4() {
10860
- result.swaps = _extendedSwaps;
10861
- };
10862
- var _extendedSwaps = [];
10863
- var _temp3 = _forOf(result.swaps, function (swap) {
10864
- var _temp2 = function () {
10865
- if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10866
- return Promise.resolve(swapProvider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10867
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10868
- });
10869
- } else {
10870
- return Promise.resolve(Promise.all([swapProvider.getCoinToUSDTRate(swap.fromCoin), swapProvider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10871
- var fromCoinFiatRate = _ref[0],
10872
- toConFiatRate = _ref[1];
10873
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toConFiatRate == null ? void 0 : toConFiatRate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(toConFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10874
- });
10875
- }
10876
- }();
10877
- if (_temp2 && _temp2.then) return _temp2.then(function () {});
10878
- });
10879
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
11302
+ if (swapIds.find(function (id) {
11303
+ return typeof id !== "string";
11304
+ })) {
11305
+ throw new Error("Swap id is not string: " + safeStringify(swapIds));
11306
+ }
11307
+ return Promise.resolve(axios__default["default"].get(_this5._URL + "/v1/transactions-list?ids[]=" + swapIds.join("&ids[]="))).then(function (response) {
11308
+ Logger.log("All swaps RAW: " + safeStringify(response.data), loggerSource);
11309
+ var swaps = response.data.map(function (swap, index) {
11310
+ var _this5$_supportedCoin, _this5$_supportedCoin2, _swap$deposit_extra_i, _swap$withdrawal_extr, _swap$return_extra_id;
11311
+ var fromCoin = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
11312
+ return i.code === swap.coin_from && i.network === swap.coin_from_network;
11313
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
11314
+ var toCoin = (_this5$_supportedCoin2 = _this5._supportedCoins.find(function (i) {
11315
+ return i.code === swap.coin_to && i.network === swap.coin_to_network;
11316
+ })) == null ? void 0 : _this5$_supportedCoin2.coin;
11317
+ if (!fromCoin || !toCoin) {
11318
+ return []; // We skip swaps with not supported coins for now
10880
11319
  }
10881
- }();
10882
- return _temp5 && _temp5.then ? _temp5.then(function () {
10883
- return result;
10884
- }) : result;
11320
+ var toUtcTimestamp = function toUtcTimestamp(timeStr) {
11321
+ return Date.parse(timeStr.match(/.+[Zz]$/) ? timeStr : timeStr + "Z");
11322
+ };
11323
+ var expiresAt = swap.expired_at ? swap.expired_at * 1000 : null;
11324
+ var createdAt = swap.created_at ? toUtcTimestamp("" + swap.created_at) : null;
11325
+ var isExpiredByTime = expiresAt && expiresAt < Date.now();
11326
+ var status = _this5._mapLetsExchangeStatusToRabbitStatus(swap.status, isExpiredByTime);
11327
+ var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
11328
+ 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);
11329
+ }).flat();
11330
+ Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
11331
+ return {
11332
+ result: true,
11333
+ swaps: swaps
11334
+ };
10885
11335
  });
10886
11336
  }, function (e) {
10887
- improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
11337
+ var _e$response4, _e$response5;
11338
+ Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
11339
+ var composeFailResult = function composeFailResult(reason) {
11340
+ return {
11341
+ result: false,
11342
+ reason: reason
11343
+ };
11344
+ };
11345
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
11346
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
11347
+ if (status === 429) {
11348
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11349
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11350
+ }
11351
+ improveAndRethrow(e, loggerSource);
10888
11352
  }));
10889
11353
  } catch (e) {
10890
11354
  return Promise.reject(e);
10891
11355
  }
11356
+ } // TODO: [dev] Serg, please check this during the review to make sure I did no mistakes in statuses mapping.
11357
+ // I will remove these comments after the review. https://api.letsexchange.io/doc
11358
+ // wait The exchange has just been created and it’s waiting for coins to reach the deposit wallet
11359
+ // confirmation The transaction appears in mempool and now it is waiting for necessary network confirmations to start.
11360
+ // confirmed The user’s payment is confirmed, the exchange process is about to start.
11361
+ // exchanging The exchange process is running.
11362
+ // sending Funds are being sent to the recipient`s address.
11363
+ // sending_confirmation The outgoing transaction is waiting for network confirmations.
11364
+ // success The exchange is completed and the funds are successfully sent to the recipient’s address.
11365
+ // aml_check_failed The deposit was marked as risky by AML check service.
11366
+ // overdue The deposit receiving time for this transaction has expired.
11367
+ // error The transaction has failed. In most cases, the amount that was sent differs from the amount that was specified when creating the transaction.
11368
+ // refund The exchange failed and the coins were refunded to the user's wallet.
11369
+ ;
11370
+ _proto._mapLetsExchangeStatusToRabbitStatus = function _mapLetsExchangeStatusToRabbitStatus(status, isExpiredByTime) {
11371
+ switch (status) {
11372
+ case "wait":
11373
+ if (isExpiredByTime) {
11374
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11375
+ }
11376
+ return SwapProvider.SWAP_STATUSES.WAITING_FOR_PAYMENT;
11377
+ case "confirmation":
11378
+ return SwapProvider.SWAP_STATUSES.CONFIRMING;
11379
+ case "confirmed":
11380
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11381
+ case "exchanging":
11382
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11383
+ case "sending":
11384
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11385
+ case "sending_confirmation":
11386
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11387
+ case "success":
11388
+ return SwapProvider.SWAP_STATUSES.COMPLETED;
11389
+ case "refund":
11390
+ return SwapProvider.SWAP_STATUSES.REFUNDED;
11391
+ case "overdue":
11392
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11393
+ case "aml_check_failed":
11394
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11395
+ case "error":
11396
+ return SwapProvider.SWAP_STATUSES.FAILED;
11397
+ default:
11398
+ throw new Error("Unknown LetsExchange status: " + status);
11399
+ }
10892
11400
  };
10893
- return SwapUtils;
10894
- }();
11401
+ return LetsExchangeSwapProvider;
11402
+ }(SwapProvider);
11403
+ LetsExchangeSwapProvider.AFFILIATE_ID = "0zbj9hf7xg7jgdgv";
10895
11404
 
10896
11405
  function _catch(body, recover) {
10897
11406
  try {
@@ -10909,13 +11418,16 @@ var PublicSwapService = /*#__PURE__*/function () {
10909
11418
  this._swapProvider = new SwapspaceSwapProvider(apiKeysProxyUrl, cache, function () {
10910
11419
  return null;
10911
11420
  }, false);
11421
+ this._fixedSwapProvider = new LetsExchangeSwapProvider(apiKeysProxyUrl, cache, function () {
11422
+ return null;
11423
+ }, false);
10912
11424
  }
10913
11425
  var _proto = PublicSwapService.prototype;
10914
11426
  _proto.initialize = function initialize() {
10915
11427
  try {
10916
11428
  var _this = this;
10917
11429
  var _temp = _catch(function () {
10918
- return Promise.resolve(_this._swapProvider.initialize()).then(function () {});
11430
+ return Promise.resolve(Promise.all([_this._swapProvider.initialize(), _this._fixedSwapProvider.initialize()])).then(function () {});
10919
11431
  }, function (e) {
10920
11432
  Logger.logError(e, "PublicSwapService.initialize");
10921
11433
  });
@@ -10923,39 +11435,61 @@ var PublicSwapService = /*#__PURE__*/function () {
10923
11435
  } catch (e) {
10924
11436
  return Promise.reject(e);
10925
11437
  }
10926
- };
11438
+ }
11439
+ /**
11440
+ * Gets all currencies across all partners. Useful for sitemap or supported currencies count/list.
11441
+ *
11442
+ * @return {Promise<{result: boolean, coins: Coin[]}|{result: boolean, reason: string}>}
11443
+ */
11444
+ ;
10927
11445
  _proto.getAllSupportedCurrenciesListForPublicSwap = function getAllSupportedCurrenciesListForPublicSwap() {
10928
11446
  try {
10929
11447
  var _this2 = this;
10930
11448
  var loggerSource = "getAllSupportedCurrenciesListForPublicSwap";
10931
11449
  return Promise.resolve(_catch(function () {
10932
- return Promise.resolve(_this2._swapProvider.getAllSupportedCurrencies()).then(function (result) {
10933
- var _result$coins;
10934
- if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10935
- SwapUtils.safeHandleRequestsLimitExceeding();
11450
+ return Promise.resolve(_this2.initialize()).then(function () {
11451
+ return Promise.resolve(Promise.all([_this2._fixedSwapProvider.getAllSupportedCurrencies(), _this2._swapProvider.getAllSupportedCurrencies()])).then(function (result) {
11452
+ var _result$0$coins, _result$1$coins, _result$coins;
11453
+ var allCoins = [].concat((_result$0$coins = result[0].coins) != null ? _result$0$coins : []);
11454
+ ((_result$1$coins = result[1].coins) != null ? _result$1$coins : []).forEach(function (c) {
11455
+ if (!allCoins.find(function (existingCoin) {
11456
+ return existingCoin.ticker === c.ticker;
11457
+ })) {
11458
+ allCoins.push(c);
11459
+ }
11460
+ });
11461
+ if (result[0].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED || result[1].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11462
+ SwapUtils.safeHandleRequestsLimitExceeding();
11463
+ // TODO: [dev] improve this during the whitebit integration. task_id=20e7e41211b540d081bf98f392a34b2c
11464
+ // return {
11465
+ // result: false,
11466
+ // reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
11467
+ // };
11468
+ } else if (result[0].reason || result[1].reason) {
11469
+ console.log("Failed to get all supported coins", result[0].reason, result[1].reason);
11470
+ }
11471
+ Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10936
11472
  return {
10937
- result: false,
10938
- reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11473
+ result: true,
11474
+ coins: allCoins
10939
11475
  };
10940
- }
10941
- Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10942
- return {
10943
- result: true,
10944
- coins: result.coins
10945
- };
11476
+ });
10946
11477
  });
10947
11478
  }, function (e) {
10948
- improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
11479
+ improveAndRethrow(e, "getAllSupportedCurrenciesListForPublicSwap");
10949
11480
  }));
10950
11481
  } catch (e) {
10951
11482
  return Promise.reject(e);
10952
11483
  }
10953
11484
  };
10954
- _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap() {
11485
+ _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap(fixed) {
11486
+ if (fixed === void 0) {
11487
+ fixed = false;
11488
+ }
10955
11489
  try {
10956
11490
  var _this3 = this;
10957
11491
  return Promise.resolve(_catch(function () {
10958
- return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false));
11492
+ return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false, fixed));
10959
11493
  }, function (e) {
10960
11494
  improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
10961
11495
  }));
@@ -10963,11 +11497,14 @@ var PublicSwapService = /*#__PURE__*/function () {
10963
11497
  return Promise.reject(e);
10964
11498
  }
10965
11499
  };
10966
- _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap() {
11500
+ _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap(fixed) {
11501
+ if (fixed === void 0) {
11502
+ fixed = false;
11503
+ }
10967
11504
  try {
10968
11505
  var _this4 = this;
10969
11506
  return Promise.resolve(_catch(function () {
10970
- return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true));
11507
+ return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true, fixed));
10971
11508
  }, function (e) {
10972
11509
  improveAndRethrow(e, "getWithdrawCurrenciesListForPublicSwap");
10973
11510
  }));
@@ -10975,15 +11512,19 @@ var PublicSwapService = /*#__PURE__*/function () {
10975
11512
  return Promise.reject(e);
10976
11513
  }
10977
11514
  };
10978
- _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw) {
11515
+ _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw, fixed) {
10979
11516
  if (withdraw === void 0) {
10980
11517
  withdraw = false;
10981
11518
  }
11519
+ if (fixed === void 0) {
11520
+ fixed = false;
11521
+ }
10982
11522
  try {
10983
11523
  var _this5 = this;
10984
11524
  var loggerSource = "getCurrenciesListForPublicSwap";
10985
11525
  return Promise.resolve(_catch(function () {
10986
- return Promise.resolve(withdraw ? _this5._swapProvider.getWithdrawalCurrencies() : _this5._swapProvider.getDepositCurrencies()).then(function (result) {
11526
+ var provider = fixed ? _this5._fixedSwapProvider : _this5._swapProvider;
11527
+ return Promise.resolve(withdraw ? provider.getWithdrawalCurrencies() : provider.getDepositCurrencies()).then(function (result) {
10987
11528
  var _result$coins2;
10988
11529
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10989
11530
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -11008,6 +11549,9 @@ var PublicSwapService = /*#__PURE__*/function () {
11008
11549
  /**
11009
11550
  * Retrieves initial data for swapping two coins.
11010
11551
  *
11552
+ * Always FLOATING rate, FIXED is not supported - if you want to change it the default rate - all
11553
+ * the swaps code logic should be verified to align with this change.
11554
+ *
11011
11555
  * @param fromCoin {Coin}
11012
11556
  * @param toCoin {Coin}
11013
11557
  * @return {Promise<{
@@ -11060,6 +11604,8 @@ var PublicSwapService = /*#__PURE__*/function () {
11060
11604
  * @param fromAmountCoins {string}
11061
11605
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
11062
11606
  * @param [withoutFiat=false] {boolean} pass true if you don't need the fiat equivalent - this will diminish requests count
11607
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11608
+ * False means the amount is the sending amount.
11063
11609
  * @return {Promise<{
11064
11610
  * result: false,
11065
11611
  * reason: string,
@@ -11074,21 +11620,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11074
11620
  * }>}
11075
11621
  */
11076
11622
  ;
11077
- _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat) {
11623
+ _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat, amountIsToReceive) {
11078
11624
  if (fixed === void 0) {
11079
11625
  fixed = false;
11080
11626
  }
11081
11627
  if (withoutFiat === void 0) {
11082
11628
  withoutFiat = false;
11083
11629
  }
11630
+ if (amountIsToReceive === void 0) {
11631
+ amountIsToReceive = false;
11632
+ }
11084
11633
  try {
11085
11634
  var _this7 = this;
11086
11635
  var loggerSource = "getPublicSwapDetails";
11087
11636
  return Promise.resolve(_catch(function () {
11088
- function _temp2(_this7$_swapProvider$) {
11089
- var _this7$_swapProvider$2;
11090
- var coinUsdtRate = withoutFiat ? _this7$_swapProvider$ : (_this7$_swapProvider$2 = _this7$_swapProvider$ == null ? void 0 : _this7$_swapProvider$.rate) != null ? _this7$_swapProvider$2 : null;
11091
- return Promise.resolve(_this7._swapProvider.getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate)).then(function (details) {
11637
+ function _temp2(_getCoinToUSDTRate) {
11638
+ var _getCoinToUSDTRate$ra;
11639
+ var coinUsdtRate = withoutFiat ? _getCoinToUSDTRate : (_getCoinToUSDTRate$ra = _getCoinToUSDTRate == null ? void 0 : _getCoinToUSDTRate.rate) != null ? _getCoinToUSDTRate$ra : null;
11640
+ return Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate, amountIsToReceive)).then(function (details) {
11092
11641
  var _result$swapCreationI, _result$swapCreationI2;
11093
11642
  // eslint-disable-next-line no-console
11094
11643
  console.log("getSwapInfo result: ", details);
@@ -11149,7 +11698,10 @@ var PublicSwapService = /*#__PURE__*/function () {
11149
11698
  return result;
11150
11699
  });
11151
11700
  }
11152
- return withoutFiat ? _temp2(null) : Promise.resolve(_this7._swapProvider.getCoinToUSDTRate(fromCoin)).then(_temp2);
11701
+ if (amountIsToReceive && !fixed) {
11702
+ throw new Error("Estimating allowed only for fixed rate.");
11703
+ }
11704
+ return withoutFiat ? _temp2(null) : Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getCoinToUSDTRate(fromCoin)).then(_temp2);
11153
11705
  }, function (e) {
11154
11706
  improveAndRethrow(e, loggerSource);
11155
11707
  }));
@@ -11162,13 +11714,15 @@ var PublicSwapService = /*#__PURE__*/function () {
11162
11714
  *
11163
11715
  * @param fromCoin {Coin}
11164
11716
  * @param toCoin {Coin}
11165
- * @param fromAmount {string}
11717
+ * @param amount {string}
11166
11718
  * @param swapCreationInfo {BaseSwapCreationInfo}
11167
11719
  * @param toAddress {string}
11168
11720
  * @param refundAddress {string}
11169
11721
  * @param clientIp {string}
11170
11722
  * @param [toCurrencyExtraId] {string}
11171
11723
  * @param [refundExtraId] {string}
11724
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11725
+ * False means the amount is the sending amount.
11172
11726
  * @return {Promise<{
11173
11727
  * result: true,
11174
11728
  * fiatCurrencyCode: string,
@@ -11191,20 +11745,23 @@ var PublicSwapService = /*#__PURE__*/function () {
11191
11745
  * }>}
11192
11746
  */
11193
11747
  ;
11194
- _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, fromAmount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId) {
11748
+ _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, amount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11749
+ if (amountIsToReceive === void 0) {
11750
+ amountIsToReceive = false;
11751
+ }
11195
11752
  try {
11196
11753
  var _this8 = this;
11197
11754
  var loggerSource = "createPublicSwap";
11198
11755
  return Promise.resolve(_catch(function () {
11199
11756
  var _swapCreationInfo$fro, _swapCreationInfo$toC;
11200
- if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof fromAmount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11201
- throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + fromAmount + " " + swapCreationInfo);
11757
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || swapCreationInfo.isRefundAddressRequired && (typeof refundAddress !== "string" || refundAddress.length === 0) || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11758
+ throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + amount + " " + swapCreationInfo);
11202
11759
  }
11203
- Logger.log("Start: " + fromAmount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11760
+ Logger.log("Start: " + amount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11204
11761
  fromCoin: swapCreationInfo == null || (_swapCreationInfo$fro = swapCreationInfo.fromCoin) == null ? void 0 : _swapCreationInfo$fro.ticker,
11205
11762
  toCoin: swapCreationInfo == null || (_swapCreationInfo$toC = swapCreationInfo.toCoin) == null ? void 0 : _swapCreationInfo$toC.ticker
11206
11763
  })), loggerSource);
11207
- return Promise.resolve(_this8._swapProvider.createSwap(fromCoin, toCoin, fromAmount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId)).then(function (result) {
11764
+ 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) {
11208
11765
  var _exit;
11209
11766
  function _temp6(_result8) {
11210
11767
  if (_exit) return _result8;
@@ -11234,7 +11791,7 @@ var PublicSwapService = /*#__PURE__*/function () {
11234
11791
  if (result.result && result != null && result.swapId) {
11235
11792
  var _temp4 = function _temp4() {
11236
11793
  var _result$fromCurrencyE;
11237
- // TODO: feature, cirtical] add GA event. task_id=tbd
11794
+ // TODO: feature, cirtical] add GA event. task_id=091004f1b6b748b29ddece6a130df904
11238
11795
  EventBusInstance__default["default"].dispatch(PublicSwapService.PUBLIC_SWAP_CREATED_EVENT, null, fromCoin.ticker, toCoin.ticker, _fromAmountFiat);
11239
11796
  var toReturn = {
11240
11797
  result: true,
@@ -11314,7 +11871,7 @@ var PublicSwapService = /*#__PURE__*/function () {
11314
11871
  var _this9 = this;
11315
11872
  var loggerSource = "getPublicExistingSwapDetailsAndStatus";
11316
11873
  return Promise.resolve(_catch(function () {
11317
- return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts(_this9._swapProvider, swapIds)).then(function (result) {
11874
+ return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts([_this9._swapProvider, _this9._fixedSwapProvider], swapIds)).then(function (result) {
11318
11875
  if (!(result != null && result.result)) {
11319
11876
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11320
11877
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -11409,18 +11966,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11409
11966
 
11410
11967
  /**
11411
11968
  * @param coinOrTicker {Coin|string}
11969
+ * @param [isFixed=true] {boolean} rate type
11412
11970
  * @return {string} icon URL (ready to use)
11413
11971
  */;
11414
- _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker) {
11415
- return this._swapProvider.getIconUrl(coinOrTicker);
11972
+ _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker, isFixed) {
11973
+ // TODO: [feature, high] improve this logic - currently hacked to show better icons from fixed provider. task_id=3b6b8c2a9df04a86aaff2e070424b64f
11974
+ return this._fixedSwapProvider.getIconUrl(coinOrTicker);
11416
11975
  }
11417
11976
 
11418
11977
  /**
11419
11978
  * @param ticker {string}
11979
+ * @param [fixed=false] {boolean}
11420
11980
  * @return {Coin|null}
11421
11981
  */;
11422
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
11423
- return this._swapProvider.getCoinByTickerIfPresent(ticker);
11982
+ _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker, fixed) {
11983
+ if (fixed === void 0) {
11984
+ fixed = false;
11985
+ }
11986
+ return !fixed ? this._swapProvider.getCoinByTickerIfPresent(ticker) : this._fixedSwapProvider.getCoinByTickerIfPresent(ticker);
11424
11987
  }
11425
11988
 
11426
11989
  /**
@@ -11433,8 +11996,18 @@ var PublicSwapService = /*#__PURE__*/function () {
11433
11996
  var _this11 = this;
11434
11997
  return Promise.resolve(_catch(function () {
11435
11998
  return Promise.resolve(_this11._swapProvider.getCoinToUSDTRate(asset)).then(function (result) {
11436
- var _result$rate;
11437
- return (_result$rate = result == null ? void 0 : result.rate) != null ? _result$rate : null;
11999
+ function _temp10() {
12000
+ var _result$rate, _result13;
12001
+ return (_result$rate = (_result13 = result) == null ? void 0 : _result13.rate) != null ? _result$rate : null;
12002
+ }
12003
+ var _temp9 = function (_result14) {
12004
+ if (((_result14 = result) == null ? void 0 : _result14.rate) == null) {
12005
+ return Promise.resolve(_this11._fixedSwapProvider.getCoinToUSDTRate(asset)).then(function (_this11$_fixedSwapPro) {
12006
+ result = _this11$_fixedSwapPro;
12007
+ });
12008
+ }
12009
+ }();
12010
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
11438
12011
  });
11439
12012
  }, function (e) {
11440
12013
  improveAndRethrow(e, "getAssetToUsdtRate");
@@ -11446,12 +12019,16 @@ var PublicSwapService = /*#__PURE__*/function () {
11446
12019
  /**
11447
12020
  * @param asset {Coin}
11448
12021
  * @param address {string}
12022
+ * @param [fixed=false] {boolean}
11449
12023
  * @return {boolean}
11450
12024
  */
11451
12025
  ;
11452
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
12026
+ _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address, fixed) {
12027
+ if (fixed === void 0) {
12028
+ fixed = false;
12029
+ }
11453
12030
  try {
11454
- return this._swapProvider.isAddressValidForAsset(asset, address);
12031
+ return !fixed ? this._swapProvider.isAddressValidForAsset(asset, address) : this._fixedSwapProvider.isAddressValidForAsset(asset, address);
11455
12032
  } catch (e) {
11456
12033
  improveAndRethrow(e, "isAddressValidForAsset");
11457
12034
  }
@@ -11461,20 +12038,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11461
12038
  * Retrieves token by contract address.
11462
12039
  *
11463
12040
  * @param addressString {string}
12041
+ * @param [fixed=false] {boolean}
11464
12042
  * @return {Promise<Coin|null>}
11465
12043
  */;
11466
- _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString) {
12044
+ _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString, fixed) {
12045
+ if (fixed === void 0) {
12046
+ fixed = false;
12047
+ }
11467
12048
  try {
11468
12049
  var _exit3;
11469
12050
  var _this12 = this;
11470
- var _temp10 = _catch(function () {
12051
+ var _temp12 = _catch(function () {
11471
12052
  if (!addressString) {
11472
- var _temp9 = null;
12053
+ var _temp11 = null;
11473
12054
  _exit3 = 1;
11474
- return _temp9;
12055
+ return _temp11;
11475
12056
  }
11476
12057
  var addressLowerCase = addressString.toLowerCase();
11477
- return Promise.resolve(_this12._swapProvider.getAllSupportedCurrencies()).then(function (allCoins) {
12058
+ return Promise.resolve((fixed ? _this12._fixedSwapProvider : _this12._swapProvider).getAllSupportedCurrencies()).then(function (allCoins) {
11478
12059
  if (allCoins.result) {
11479
12060
  var _allCoins$coins$find = allCoins.coins.find(function (coin) {
11480
12061
  return coin.tokenAddress && coin.tokenAddress.toLowerCase() === addressLowerCase;
@@ -11486,21 +12067,25 @@ var PublicSwapService = /*#__PURE__*/function () {
11486
12067
  }, function (e) {
11487
12068
  Logger.logError(e, "getTokenByContractAddress");
11488
12069
  });
11489
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(function (_result13) {
11490
- return _exit3 ? _result13 : null;
11491
- }) : _exit3 ? _temp10 : null);
12070
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(function (_result15) {
12071
+ return _exit3 ? _result15 : null;
12072
+ }) : _exit3 ? _temp12 : null);
11492
12073
  } catch (e) {
11493
12074
  return Promise.reject(e);
11494
12075
  }
11495
12076
  }
11496
12077
  /**
11497
12078
  * @param asset {Coin}
12079
+ * @param [fixed=false] {boolean}
11498
12080
  * @return {string|null}
11499
12081
  */
11500
12082
  ;
11501
- _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset) {
12083
+ _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset, fixed) {
12084
+ if (fixed === void 0) {
12085
+ fixed = false;
12086
+ }
11502
12087
  try {
11503
- return this._swapProvider.getExtraIdNameIfPresent(asset);
12088
+ return (fixed ? this._fixedSwapProvider : this._swapProvider).getExtraIdNameIfPresent(asset);
11504
12089
  } catch (e) {
11505
12090
  improveAndRethrow(e, "getExtraIdNameIfPresentForAsset");
11506
12091
  }