@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
@@ -1642,7 +1642,7 @@ var Logger = /*#__PURE__*/function () {
1642
1642
  return Logger;
1643
1643
  }();
1644
1644
 
1645
- function _catch$d(body, recover) {
1645
+ function _catch$f(body, recover) {
1646
1646
  try {
1647
1647
  var result = body();
1648
1648
  } catch (e) {
@@ -1658,7 +1658,7 @@ function useCallHandlingErrors() {
1658
1658
  setState = _useState[1];
1659
1659
  return useCallback(function (functionToBeCalled, event) {
1660
1660
  try {
1661
- var _temp = _catch$d(function () {
1661
+ var _temp = _catch$f(function () {
1662
1662
  return Promise.resolve(functionToBeCalled(event)).then(function () {});
1663
1663
  }, function (error) {
1664
1664
  Logger.logError(error, (functionToBeCalled == null ? void 0 : functionToBeCalled.name) || "errorBoundaryTrigger", "Caught by ErrorBoundary");
@@ -4596,6 +4596,15 @@ function useIsHydrated() {
4596
4596
  * @return {string|null}
4597
4597
  */
4598
4598
 
4599
+ /**
4600
+ * Callback to handle isFixed flag change.
4601
+ *
4602
+ * @function
4603
+ * @name onIsFixedChange
4604
+ * @param {boolean} isFixedNewValue - new value
4605
+ * @return {void}
4606
+ */
4607
+
4599
4608
  /**
4600
4609
  * Function validating addresses.
4601
4610
  * By default, will treat any addresses as valid.
@@ -4605,6 +4614,7 @@ function useIsHydrated() {
4605
4614
  * @name validateAddressByTicker
4606
4615
  * @param {string} ticker - Ticker symbol of the asset.
4607
4616
  * @param {string} address - Address to be validated
4617
+ * @param {boolean} isFixed - Is swap rate mode = fixed
4608
4618
  * @return {Promise<boolean>}
4609
4619
  */
4610
4620
 
@@ -4652,16 +4662,18 @@ function useIsHydrated() {
4652
4662
  * @param {boolean} [props.formHasFiat] - Indicates if the form supports fiat currency.
4653
4663
  * @param {string|null} [props.termsOfUseUrl] - Terms of use URL, shown only if both terms & privacy policy passed.
4654
4664
  * @param {string|null} [props.privacyPolicyUrl] - Privacy policy of use URL, shown only if both terms & privacy policy passed.
4665
+ * @param {string} props.recipientAddressExtraIdName - Extra ID name for the recipient address.
4666
+ * @param {string} props.refundAddressExtraIdName - Extra ID name for the refund address.
4655
4667
  * @param {object} [props.translations] - Object containing translations, default English texts will be used if omitted.
4656
4668
  * @param {string} props.swapSeparatorIconSrc - Source URL for the swap separator icon.
4657
4669
  * @param {boolean} props.swapButtonAlwaysActive - Setting that allows the form state to proceed to the next step regardless of validity.
4658
- * @param {getExtraIdNameByTicker} props.getExtraIdNameByTicker - Function returning extraId name for asset
4659
4670
  * @param {validateAddressByTicker} [props.validateAddressByTicker] - Function validating address
4671
+ * @param {onIsFixedChange} [props.onIsFixedChange] - callback for changed isFixed
4660
4672
  * @return {JSX.Element} Rendered SwapForm component.
4661
4673
  * @constructor
4662
4674
  */
4663
4675
 
4664
- function _catch$c(body, recover) {
4676
+ function _catch$e(body, recover) {
4665
4677
  try {
4666
4678
  var result = body();
4667
4679
  } catch (e) {
@@ -4673,7 +4685,7 @@ function _catch$c(body, recover) {
4673
4685
  return result;
4674
4686
  }
4675
4687
  var SwapForm = function SwapForm(_ref) {
4676
- var _isFixedRate$current2, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5, _isFixedRate$current3;
4688
+ var _isFixedRate$current2, _isFixedRate$current3, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5;
4677
4689
  var sendingAssetTicker = _ref.sendingAssetTicker,
4678
4690
  receivingAssetTicker = _ref.receivingAssetTicker,
4679
4691
  _ref$sendingAssetDeci = _ref.sendingAssetDecimalCount,
@@ -4716,7 +4728,7 @@ var SwapForm = function SwapForm(_ref) {
4716
4728
  _ref$formHasBalance = _ref.formHasBalance,
4717
4729
  formHasBalance = _ref$formHasBalance === void 0 ? false : _ref$formHasBalance,
4718
4730
  _ref$retrieveSwapDeta = _ref.retrieveSwapDetails,
4719
- retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll) {
4731
+ retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll, editedLastInput) {
4720
4732
  return Promise.resolve();
4721
4733
  } : _ref$retrieveSwapDeta,
4722
4734
  _ref$retrieveInitialS = _ref.retrieveInitialSwapData,
@@ -4743,17 +4755,17 @@ var SwapForm = function SwapForm(_ref) {
4743
4755
  termsOfUseUrl = _ref$termsOfUseUrl === void 0 ? null : _ref$termsOfUseUrl,
4744
4756
  _ref$privacyPolicyUrl = _ref.privacyPolicyUrl,
4745
4757
  privacyPolicyUrl = _ref$privacyPolicyUrl === void 0 ? null : _ref$privacyPolicyUrl,
4746
- _ref$getExtraIdNameBy = _ref.getExtraIdNameByTicker,
4747
- getExtraIdNameByTicker = _ref$getExtraIdNameBy === void 0 ? function (ticker) {
4748
- return null;
4749
- } : _ref$getExtraIdNameBy,
4750
4758
  _ref$validateAddressB = _ref.validateAddressByTicker,
4751
- validateAddressByTicker = _ref$validateAddressB === void 0 ? function (ticker) {
4759
+ validateAddressByTicker = _ref$validateAddressB === void 0 ? function () {
4752
4760
  return false;
4753
4761
  } : _ref$validateAddressB,
4754
4762
  swapSeparatorIconSrc = _ref.swapSeparatorIconSrc,
4755
4763
  _ref$swapButtonAlways = _ref.swapButtonAlwaysActive,
4756
4764
  swapButtonAlwaysActive = _ref$swapButtonAlways === void 0 ? false : _ref$swapButtonAlways,
4765
+ _ref$onIsFixedChange = _ref.onIsFixedChange,
4766
+ onIsFixedChange = _ref$onIsFixedChange === void 0 ? function () {} : _ref$onIsFixedChange,
4767
+ recipientAddressExtraIdName = _ref.recipientAddressExtraIdName,
4768
+ refundAddressExtraIdName = _ref.refundAddressExtraIdName,
4757
4769
  _ref$translations = _ref.translations,
4758
4770
  translations = _ref$translations === void 0 ? {
4759
4771
  swapAllButtonTitles: {
@@ -4784,7 +4796,9 @@ var SwapForm = function SwapForm(_ref) {
4784
4796
  addressTitle: "Recepient address",
4785
4797
  refundAddressTitle: "Refund address",
4786
4798
  extraIdPlaceholder: "(optional)",
4799
+ refundAddressExtraIdTitle: "Refund extra ID (MEMO):",
4787
4800
  refundAddressExtraIdNotice: "Please check if your address requires additional identifier (sometimes called a Memo, Destination Tag, Tag, ID, Label or Note). Including this identifier is crucial when required, as omitting or misentering it can result in lost assets.",
4801
+ receivingAddressExtraIdTitle: "Destination extra ID (MEMO):",
4788
4802
  receivingAddressExtraIdNotice: "Please check if your address requires additional identifier (sometimes called a Memo, Destination Tag, Tag, ID, Label or Note). Including this identifier is crucial when required, as omitting or misentering it can result in lost assets."
4789
4803
  },
4790
4804
  rateSelector: {
@@ -4795,8 +4809,6 @@ var SwapForm = function SwapForm(_ref) {
4795
4809
  } : _ref$translations;
4796
4810
  var DETAIL_REFRESH_INTERVAL_MS = 1.5 * 60000;
4797
4811
  var IS_FIXED_BY_DEFAULT = false;
4798
-
4799
- // Updating the states below will insert the new value into the send or receive input field
4800
4812
  var _useState = useState(preservedAmount != null ? preservedAmount : null),
4801
4813
  updateSendInputTo = _useState[0],
4802
4814
  setUpdateSendInputTo = _useState[1];
@@ -4836,8 +4848,6 @@ var SwapForm = function SwapForm(_ref) {
4836
4848
  var _useState10 = useState(false),
4837
4849
  readyToSwap = _useState10[0],
4838
4850
  setReadyToSwap = _useState10[1]; // Basically a param that enables/disables the "Next" button
4839
- // TODO: [refactoring, moderate] instead of handling preservedAmount at a lot of cases below, just
4840
- // write single useEffect setting sendAssetAmount to the=is passed value and simplify the logic below. task_id=6453251e49b04c5e88a3cc771479ffb5
4841
4851
  var _useState11 = useState(preservedAmount == null || String(preservedAmount) === "0"),
4842
4852
  isAmountZero = _useState11[0],
4843
4853
  setIsAmountZero = _useState11[1];
@@ -4847,21 +4857,24 @@ var SwapForm = function SwapForm(_ref) {
4847
4857
  var _useReferredState5 = useReferredState(null),
4848
4858
  isFixedRate = _useReferredState5[0],
4849
4859
  setIsFixedRate = _useReferredState5[1];
4850
- var _useState12 = useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4851
- confirmButtonTo = _useState12[0],
4852
- setConfirmButtonTo = _useState12[1];
4853
- var _useState13 = useState(),
4854
- transactionFee = _useState13[0],
4855
- setTransactionFee = _useState13[1];
4856
- var _useState14 = useState(true),
4857
- balanceValid = _useState14[0],
4858
- setBalanceValid = _useState14[1]; // Whether the amount is less than total balance
4860
+ var _useState12 = useState(false),
4861
+ isLastEditedReceiving = _useState12[0],
4862
+ setIsLastEditedReceiving = _useState12[1];
4863
+ var _useState13 = useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4864
+ confirmButtonTo = _useState13[0],
4865
+ setConfirmButtonTo = _useState13[1];
4866
+ var _useState14 = useState(),
4867
+ transactionFee = _useState14[0],
4868
+ setTransactionFee = _useState14[1];
4869
+ var _useState15 = useState(true),
4870
+ balanceValid = _useState15[0],
4871
+ setBalanceValid = _useState15[1]; // Whether the amount is less than total balance
4859
4872
  var _useReferredState6 = useReferredState(null),
4860
4873
  isSwapAll = _useReferredState6[0],
4861
4874
  setIsSwapAll = _useReferredState6[1];
4862
- var _useState15 = useState([]),
4863
- swapAllButtonLoaderReSetter = _useState15[0],
4864
- setSwapAllButtonLoaderReSetter = _useState15[1];
4875
+ var _useState16 = useState([]),
4876
+ swapAllButtonLoaderReSetter = _useState16[0],
4877
+ setSwapAllButtonLoaderReSetter = _useState16[1];
4865
4878
  var _useReferredState7 = useReferredState(null),
4866
4879
  dataUpdateTimeoutId = _useReferredState7[0],
4867
4880
  setDataUpdateTimeoutId = _useReferredState7[1];
@@ -4877,9 +4890,9 @@ var SwapForm = function SwapForm(_ref) {
4877
4890
  var _useReferredState11 = useReferredState(false),
4878
4891
  isRecipientAddressValid = _useReferredState11[0],
4879
4892
  setIsRecipientAddressValid = _useReferredState11[1];
4880
- var _useState16 = useState(false),
4881
- isRefundAddressRequired = _useState16[0],
4882
- setIsRefundAddressRequired = _useState16[1];
4893
+ var _useState17 = useState(false),
4894
+ isRefundAddressRequired = _useState17[0],
4895
+ setIsRefundAddressRequired = _useState17[1];
4883
4896
  var _useReferredState12 = useReferredState(""),
4884
4897
  refundAddress = _useReferredState12[0],
4885
4898
  setRefundAddress = _useReferredState12[1];
@@ -4894,9 +4907,8 @@ var SwapForm = function SwapForm(_ref) {
4894
4907
  var recalculationDelayOnTyping = 1000;
4895
4908
  var isAddressFieldEnabled = !formHasBalance;
4896
4909
  var displayRateSelector = !formHasBalance;
4897
- var recipientAddressExtraIdName = getExtraIdNameByTicker(receivingAssetTicker);
4898
- var refundAddressExtraIdName = getExtraIdNameByTicker(sendingAssetTicker);
4899
4910
  var handleSendAssetAmountChange = function handleSendAssetAmountChange(amount) {
4911
+ setIsLastEditedReceiving(false);
4900
4912
  if (amount != null && amount !== "") {
4901
4913
  setUpdateReceiveInputTo(AmountUtils.trim(BigNumber(amount).times(swapRate), receivingAssetDecimalCount));
4902
4914
  } else {
@@ -4905,6 +4917,7 @@ var SwapForm = function SwapForm(_ref) {
4905
4917
  setSendAssetAmount(amount);
4906
4918
  };
4907
4919
  var handleReceiveAssetAmountChange = function handleReceiveAssetAmountChange(amount) {
4920
+ setIsLastEditedReceiving(true);
4908
4921
  var sendAssetAmount = "";
4909
4922
  if (amount != null && amount !== "") {
4910
4923
  sendAssetAmount = AmountUtils.trim(BigNumber(amount).div(swapRate), sendingAssetDecimalCount);
@@ -5005,7 +5018,7 @@ var SwapForm = function SwapForm(_ref) {
5005
5018
  }
5006
5019
  (function () {
5007
5020
  try {
5008
- return _catch$c(function () {
5021
+ return _catch$e(function () {
5009
5022
  var _minimalAmount$curren4, _maximumAmount$curren3, _isFixedRate$current;
5010
5023
  var dataMemento = {
5011
5024
  rate: swapRate,
@@ -5023,7 +5036,7 @@ var SwapForm = function SwapForm(_ref) {
5023
5036
  setIsSameCoins(false);
5024
5037
  setIsPairSupported(true);
5025
5038
  setIsSwapCalculated(false);
5026
- return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT)).then(function (response) {
5039
+ return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT, isFixedRate.current ? isLastEditedReceiving : false)).then(function (response) {
5027
5040
  if (!isSwapAll.current && String(amount) !== String(isForPreserved && sendAssetAmount.current == null ? preservedAmount : sendAssetAmount.current)) {
5028
5041
  // Means amount changed and we no more need to do this exact calculation
5029
5042
  return;
@@ -5071,7 +5084,7 @@ var SwapForm = function SwapForm(_ref) {
5071
5084
  }
5072
5085
  (function () {
5073
5086
  try {
5074
- return _catch$c(function () {
5087
+ return _catch$e(function () {
5075
5088
  setIsLoading(true);
5076
5089
  setMinimalAmount(null);
5077
5090
  setMaximumAmount(null);
@@ -5121,6 +5134,10 @@ var SwapForm = function SwapForm(_ref) {
5121
5134
  }
5122
5135
  // eslint-disable-next-line react-hooks/exhaustive-deps
5123
5136
  }, [isSwapAll.current]);
5137
+ useEffect(function () {
5138
+ onIsFixedChange(isFixedRate.current);
5139
+ // eslint-disable-next-line react-hooks/exhaustive-deps
5140
+ }, [isFixedRate.current]);
5124
5141
  useEffect(function () {
5125
5142
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current || preservedAmount || null));
5126
5143
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -5169,7 +5186,7 @@ var SwapForm = function SwapForm(_ref) {
5169
5186
  };
5170
5187
  if (!receivingAssetTicker) return;
5171
5188
  var _temp = recipientAddress.current === "";
5172
- return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current)).then(_temp2);
5189
+ return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current, isFixedRate.current)).then(_temp2);
5173
5190
  } catch (e) {
5174
5191
  Promise.reject(e);
5175
5192
  }
@@ -5184,7 +5201,7 @@ var SwapForm = function SwapForm(_ref) {
5184
5201
  };
5185
5202
  if (!sendingAssetTicker || !isRefundAddressRequired) return;
5186
5203
  var _temp3 = refundAddress.current === "";
5187
- return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current)).then(_temp4);
5204
+ return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current, isFixedRate.current)).then(_temp4);
5188
5205
  } catch (e) {
5189
5206
  Promise.reject(e);
5190
5207
  }
@@ -5209,8 +5226,6 @@ var SwapForm = function SwapForm(_ref) {
5209
5226
  };
5210
5227
  // eslint-disable-next-line react-hooks/exhaustive-deps
5211
5228
  }, [readyToSwap]);
5212
-
5213
- // TODO: [refactoring, critical] this code looks like a hack related to task_id=6e328d39063142b7b9fa01d497e616da
5214
5229
  useEffect(function () {
5215
5230
  if (triggerDataUpdateResetting) {
5216
5231
  clearTimeout(dataUpdateTimeoutId.current);
@@ -5220,8 +5235,6 @@ var SwapForm = function SwapForm(_ref) {
5220
5235
  }
5221
5236
  // eslint-disable-next-line react-hooks/exhaustive-deps
5222
5237
  }, [triggerDataUpdateResetting]);
5223
-
5224
- // Resets the passed "set value to" param to null, so it can be used multiple times with any value
5225
5238
  useEffect(function () {
5226
5239
  if (!!updateSendInputTo) setUpdateSendInputTo(null);
5227
5240
  if (!!updateReceiveInputTo) setUpdateReceiveInputTo(null);
@@ -5240,8 +5253,6 @@ var SwapForm = function SwapForm(_ref) {
5240
5253
  }
5241
5254
  // eslint-disable-next-line react-hooks/exhaustive-deps
5242
5255
  }, [isLoading.current, swapAllButtonLoaderReSetter]);
5243
-
5244
- // Handlers upon changing the asset amount
5245
5256
  useEffect(function () {
5246
5257
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current));
5247
5258
  if (sendAssetAmount.current == null) return;
@@ -5261,7 +5272,13 @@ var SwapForm = function SwapForm(_ref) {
5261
5272
  linkText: !formHasBalance ? "" : isSwapAll.current ? translations.swapAllButtonTitles.cancel : translations.swapAllButtonTitles.enable,
5262
5273
  linkButtonLoader: true,
5263
5274
  isLinkButtonDisabled: isLoading.current || sendingAssetTicker === receivingAssetTicker || BigNumber(sendingAssetBalance == null ? void 0 : sendingAssetBalance.assetAmount).eq(0)
5264
- }, /*#__PURE__*/React.createElement("div", {
5275
+ }, displayRateSelector ? /*#__PURE__*/React.createElement("div", {
5276
+ className: s$9["swap-form-rate-selector"]
5277
+ }, /*#__PURE__*/React.createElement(RateSelector, {
5278
+ isFixed: (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT,
5279
+ setIsFixed: handleRateModeChanged,
5280
+ translations: translations.rateSelector
5281
+ })) : "", /*#__PURE__*/React.createElement("div", {
5265
5282
  className: s$9["swap-form-inputs"]
5266
5283
  }, /*#__PURE__*/React.createElement(AmountInput, {
5267
5284
  ticker: sendingAssetTicker,
@@ -5309,7 +5326,7 @@ var SwapForm = function SwapForm(_ref) {
5309
5326
  assetIconProtocolSrc: receivingAssetProtocolIconSrc,
5310
5327
  fallbackAssetIconSrc: fallBackAssetIconSrc,
5311
5328
  disabled: isSwapAll.current || sendingAssetTicker === null || receivingAssetTicker === null,
5312
- locked: !formHasBalance,
5329
+ locked: !formHasBalance && !isFixedRate.current,
5313
5330
  handleCoinAmountChange: handleReceiveAssetAmountChange,
5314
5331
  handleChangeAssetClick: handleChangeReceivingAssetClick,
5315
5332
  updateAssetInputTo: updateReceiveInputTo,
@@ -5329,7 +5346,7 @@ var SwapForm = function SwapForm(_ref) {
5329
5346
  className: s$9["swap-form-information-field"]
5330
5347
  }, /*#__PURE__*/React.createElement("p", null, !isPairSupported ? translations.informationBlock.pairNotAvailable : transactionFee && minimalAmountValid ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.transactionFee, /*#__PURE__*/React.createElement("span", null, AmountUtils.crypto(transactionFee == null ? void 0 : transactionFee.crypto, sendingAssetFeeCoinTickerPrintable)), (transactionFee == null ? void 0 : transactionFee.fiat) != null && (transactionFee == null ? void 0 : transactionFee.fiat) !== "" ? /*#__PURE__*/React.createElement("span", {
5331
5348
  className: s$9["semi-transparent"]
5332
- }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React.createElement("span", null, AmountUtils.composeRateText(sendingAssetTickerPrintable, receivingAssetTickerPrintable, swapRate, receivingAssetDecimalCount, (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT))) : minimalAmount.current || maximumAmount.current ? !maximumAmountValid && maximumAmount.current != null ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React.createElement("span", {
5349
+ }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React.createElement("span", null, AmountUtils.composeRateText(sendingAssetTickerPrintable, receivingAssetTickerPrintable, swapRate, receivingAssetDecimalCount, (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT))) : minimalAmount.current || maximumAmount.current ? !maximumAmountValid && maximumAmount.current != null ? /*#__PURE__*/React.createElement(React.Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React.createElement("span", {
5333
5350
  className: s$9["interactable"] + " " + s$9["red"],
5334
5351
  onClick: isLoading.current ? function () {} : function (e) {
5335
5352
  return callHandlingErrors(handleMaximumAmountClick, e);
@@ -5356,7 +5373,7 @@ var SwapForm = function SwapForm(_ref) {
5356
5373
  adaptiveHeight: true,
5357
5374
  errorEncountered: recipientAddress.current !== "" && !isRecipientAddressValid.current
5358
5375
  })), isHydrated && recipientAddressExtraIdName ? /*#__PURE__*/React.createElement(TitleBox, {
5359
- title: recipientAddressExtraIdName,
5376
+ title: translations.addressFields.receivingAddressExtraIdTitle,
5360
5377
  titleNoticeText: translations.addressFields.receivingAddressExtraIdNotice,
5361
5378
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5362
5379
  }, /*#__PURE__*/React.createElement(Textarea, {
@@ -5378,7 +5395,7 @@ var SwapForm = function SwapForm(_ref) {
5378
5395
  adaptiveHeight: true,
5379
5396
  errorEncountered: refundAddress.current !== "" && !isRefundAddressValid.current
5380
5397
  })), refundAddressExtraIdName ? /*#__PURE__*/React.createElement(TitleBox, {
5381
- title: refundAddressExtraIdName,
5398
+ title: translations.addressFields.refundAddressExtraIdTitle,
5382
5399
  titleNoticeText: translations.addressFields.refundAddressExtraIdNotice,
5383
5400
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5384
5401
  }, /*#__PURE__*/React.createElement(Textarea, {
@@ -5389,13 +5406,7 @@ var SwapForm = function SwapForm(_ref) {
5389
5406
  value: refundAddressExtraId.current,
5390
5407
  adaptiveHeight: true,
5391
5408
  placeholder: translations.addressFields.extraIdPlaceholder
5392
- })) : null) : null) : null, displayRateSelector ? /*#__PURE__*/React.createElement("div", {
5393
- className: s$9["swap-form-rate-selector"]
5394
- }, /*#__PURE__*/React.createElement(RateSelector, {
5395
- isFixed: (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT,
5396
- setIsFixed: !isLoading.current ? handleRateModeChanged : function () {},
5397
- translations: translations.rateSelector
5398
- })) : "", validationContent ? /*#__PURE__*/React.createElement("div", {
5409
+ })) : null) : null) : null, validationContent ? /*#__PURE__*/React.createElement("div", {
5399
5410
  className: s$9["swap-form-validation-text"]
5400
5411
  }, /*#__PURE__*/React.createElement(Validation, {
5401
5412
  text: validationContent
@@ -5462,7 +5473,12 @@ SwapForm.propTypes = {
5462
5473
  fiatCurrencyCode: PropTypes.oneOfType([PropTypes.string, null]),
5463
5474
  fiatCurrencyDecimals: PropTypes.oneOfType([PropTypes.number, null]),
5464
5475
  formHasFiat: PropTypes.bool,
5476
+ termsOfUseUrl: PropTypes.oneOfType([PropTypes.string, null]),
5477
+ privacyPolicyUrl: PropTypes.oneOfType([PropTypes.string, null]),
5478
+ recipientAddressExtraIdName: PropTypes.string,
5479
+ refundAddressExtraIdName: PropTypes.string,
5465
5480
  translations: PropTypes.object,
5481
+ validateAddressByTicker: PropTypes.func,
5466
5482
  swapSeparatorIconSrc: PropTypes.string.isRequired,
5467
5483
  swapButtonAlwaysActive: PropTypes.bool
5468
5484
  };
@@ -5495,6 +5511,11 @@ SwapForm.defaultProps = {
5495
5511
  fiatCurrencyCode: null,
5496
5512
  fiatCurrencyDecimals: null,
5497
5513
  formHasFiat: true,
5514
+ termsOfUseUrl: null,
5515
+ privacyPolicyUrl: null,
5516
+ validateAddressByTicker: function validateAddressByTicker(ticker) {
5517
+ return false;
5518
+ },
5498
5519
  swapButtonAlwaysActive: false
5499
5520
  };
5500
5521
 
@@ -5506,7 +5527,7 @@ SwapForm.defaultProps = {
5506
5527
  * @return {Promise<string>} xml string of generated svg image
5507
5528
  */
5508
5529
 
5509
- function _catch$b(body, recover) {
5530
+ function _catch$d(body, recover) {
5510
5531
  try {
5511
5532
  var result = body();
5512
5533
  } catch (e) {
@@ -5519,7 +5540,7 @@ function _catch$b(body, recover) {
5519
5540
  }
5520
5541
  var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingString) {
5521
5542
  try {
5522
- return Promise.resolve(_catch$b(function () {
5543
+ return Promise.resolve(_catch$d(function () {
5523
5544
  return Promise.resolve(QRCode.toString(encodingString, {
5524
5545
  type: "svg"
5525
5546
  }));
@@ -5533,9 +5554,23 @@ var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingStrin
5533
5554
 
5534
5555
  var s$6 = {"container":"_cTbW4","m-0":"_pa1z9","p-0":"_JFpOp","m-1":"_iRmOW","p-1":"_0sPGn","m-2":"_cX5Pd","p-2":"_2cKLW","m-3":"_lsOKS","p-3":"_MDp97","m-4":"_tiugy","p-4":"_lcNdz","m-5":"_ph3Rl","p-5":"_8Oxt6","m-6":"_LQvZy","p-6":"_RqY7F","m-7":"_K6wVB","p-7":"_aqQmY","m-8":"_AvgKS","p-8":"_-THq-","m-9":"_fLxYO","p-9":"_wNjdw","m-10":"_CVvN9","p-10":"_W0zcC","ml-0":"_lOxDW","pl-0":"_AZ4Gk","ml-1":"_PfYJJ","pl-1":"_ha7hP","ml-2":"_8HztG","pl-2":"_SB-3g","ml-3":"_udBJe","pl-3":"_EYbrF","ml-4":"_zSB90","pl-4":"_bGSY-","ml-5":"_vCg0l","pl-5":"_-hUSk","ml-6":"_wpvsa","pl-6":"_Po4yI","ml-7":"_Rv-mI","pl-7":"_rHVBB","ml-8":"_zYMBf","pl-8":"_BSAmk","ml-9":"_KE07p","pl-9":"_Bhlol","ml-10":"_iG9RV","pl-10":"_syE5i","mr-0":"_Z0qEx","pr-0":"_lV0Ms","mr-1":"_gO4IU","pr-1":"_CvRZh","mr-2":"_xy-oI","pr-2":"_vihQM","mr-3":"_eJ7bJ","pr-3":"_bmsh0","mr-4":"_EoFmR","pr-4":"_fVbSK","mr-5":"_tdfPe","pr-5":"_MNash","mr-6":"_haTqx","pr-6":"_YIf0P","mr-7":"_pooWd","pr-7":"_7MZOB","mr-8":"_bS7iD","pr-8":"_JRieo","mr-9":"_f6Phu","pr-9":"_mlqUy","mr-10":"_PPXXJ","pr-10":"_abKOE","mt-0":"_ItCpw","pt-0":"_zpY0G","mt-1":"_8TETK","pt-1":"_ANVw2","mt-2":"_s2Ox7","pt-2":"_L2yLo","mt-3":"_e2KDJ","pt-3":"_QfoJy","mt-4":"_O-rrM","pt-4":"_2USiC","mt-5":"_7Kzdb","pt-5":"_l3KrZ","mt-6":"_vgOok","pt-6":"_ng-zC","mt-7":"_nTMsZ","pt-7":"_KGp6z","mt-8":"_XANFt","pt-8":"_o3eiw","mt-9":"_l3H4r","pt-9":"_CRSXn","mt-10":"_ftQLu","pt-10":"_ikh2T","mb-0":"_jg4Jh","pb-0":"_sEOhP","mb-1":"_A9pLc","pb-1":"_O3GpB","mb-2":"_Ko-ls","pb-2":"_Nh0Vh","mb-3":"_APbRY","pb-3":"_tWmjY","mb-4":"_XUlFk","pb-4":"_ZvsvW","mb-5":"_n5nhM","pb-5":"_-tSIX","mb-6":"_QtZDL","pb-6":"_-39t0","mb-7":"_D0Dpl","pb-7":"_45Xmr","mb-8":"_GqsvX","pb-8":"_6CQop","mb-9":"_Z4Ivt","pb-9":"_veodh","mb-10":"_L3rOe","pb-10":"_YRD2e","mx-0":"_bzM7J","px-0":"_8ogz0","mx-1":"_XyVmJ","px-1":"_X9KHo","mx-2":"_R6tXp","px-2":"_Zja9K","mx-3":"_vdTzJ","px-3":"_9O9dG","mx-4":"_mcsEY","px-4":"_HuOg7","mx-5":"_Q96D3","px-5":"_gwh60","mx-6":"_Tli0m","px-6":"_znyER","mx-7":"_WNYMW","px-7":"_r1il4","mx-8":"_vMRfR","px-8":"_SYdPJ","mx-9":"_3mTwX","px-9":"_XqzX6","mx-10":"_ZAjnm","px-10":"_vYiab","my-0":"_DTi5m","py-0":"_NhBC-","my-1":"_lYPq3","py-1":"_LsZYc","my-2":"_ie-4q","py-2":"_-8kuS","my-3":"_PcwSW","py-3":"_9SVW-","my-4":"_HM-DC","py-4":"_cBLeY","my-5":"_iFfyB","py-5":"_cFMUa","my-6":"_uxMHp","py-6":"_OeII-","my-7":"_Y-LlZ","py-7":"_3ydPM","my-8":"_ifpwB","py-8":"_nPGL9","my-9":"_9XS-9","py-9":"_HRWBM","my-10":"_r-9W3","py-10":"_G5SRo","m-sm-0":"_XQBmN","p-sm-0":"_s9MHP","m-sm-1":"_e6dLK","p-sm-1":"_47tQJ","m-sm-2":"_Sq84f","p-sm-2":"_7T9oC","m-sm-3":"_6DK-C","p-sm-3":"_1mWwA","m-sm-4":"_jephJ","p-sm-4":"_8isN2","m-sm-5":"_Qj6AO","p-sm-5":"_dc7y9","m-sm-6":"_TPeN7","p-sm-6":"_2rG8f","m-sm-7":"_MfYlH","p-sm-7":"_6zVKJ","m-sm-8":"_QlZvU","p-sm-8":"_tx9ap","m-sm-9":"_rLz-E","p-sm-9":"_q06Mz","m-sm-10":"_3uSku","p-sm-10":"_Hc-5n","ml-sm-0":"_1UbDf","pl-sm-0":"_touOJ","ml-sm-1":"_1bN5I","pl-sm-1":"_bQHcU","ml-sm-2":"_i8oPe","pl-sm-2":"_Vtfxf","ml-sm-3":"_CBcsQ","pl-sm-3":"_SzmcT","ml-sm-4":"_6qcw8","pl-sm-4":"_vbSGm","ml-sm-5":"_n-zBA","pl-sm-5":"_Q9Q9i","ml-sm-6":"_2o7ve","pl-sm-6":"_UPjnI","ml-sm-7":"_NeEAG","pl-sm-7":"_ngtJ-","ml-sm-8":"_-Z2Hf","pl-sm-8":"_VQpYs","ml-sm-9":"_Sla3G","pl-sm-9":"_9WquO","ml-sm-10":"_kuYOg","pl-sm-10":"_mf-JK","mr-sm-0":"_D-am2","pr-sm-0":"_Z4QgH","mr-sm-1":"_JNB16","pr-sm-1":"_1nuYG","mr-sm-2":"_JSz3T","pr-sm-2":"_VIVsb","mr-sm-3":"_hf2wL","pr-sm-3":"_U27cs","mr-sm-4":"_fphSG","pr-sm-4":"_oan05","mr-sm-5":"_-q4eR","pr-sm-5":"_1z6Az","mr-sm-6":"_ex6FB","pr-sm-6":"_4B5XH","mr-sm-7":"_AhvSF","pr-sm-7":"_98YQI","mr-sm-8":"_ukGgp","pr-sm-8":"_i1l6d","mr-sm-9":"_R-dZ7","pr-sm-9":"_rq-kd","mr-sm-10":"_dVc4S","pr-sm-10":"_X-WfK","mt-sm-0":"_gYF9v","pt-sm-0":"_EA2Ki","mt-sm-1":"_B1K8h","pt-sm-1":"_ug-cq","mt-sm-2":"_SVe1c","pt-sm-2":"_kAto4","mt-sm-3":"_zvT2b","pt-sm-3":"_eaLRc","mt-sm-4":"_2dFgE","pt-sm-4":"_tweF5","mt-sm-5":"_KlgR2","pt-sm-5":"_BwPt9","mt-sm-6":"_FVlah","pt-sm-6":"_HZ-1-","mt-sm-7":"_-usQF","pt-sm-7":"_NvK9x","mt-sm-8":"_VjH2p","pt-sm-8":"_G1yH9","mt-sm-9":"_u4fMt","pt-sm-9":"_tw7GS","mt-sm-10":"_ymkT3","pt-sm-10":"_yJhls","mb-sm-0":"_lGkDj","pb-sm-0":"_HHf7Y","mb-sm-1":"_1I2Vs","pb-sm-1":"_i3RzV","mb-sm-2":"_BIWVv","pb-sm-2":"_4tkvJ","mb-sm-3":"_FwyAM","pb-sm-3":"_abS24","mb-sm-4":"_dqY3O","pb-sm-4":"_b--2r","mb-sm-5":"_I4bmd","pb-sm-5":"_tzrqS","mb-sm-6":"_pgsKQ","pb-sm-6":"_cpvrM","mb-sm-7":"_-Rr98","pb-sm-7":"_KBGRo","mb-sm-8":"_Zl7om","pb-sm-8":"_LWOz1","mb-sm-9":"_vo0F-","pb-sm-9":"_O2BEY","mb-sm-10":"_F-Lhx","pb-sm-10":"_6AZ0T","mx-sm-0":"_Y0X-J","px-sm-0":"_HcvBd","mx-sm-1":"_X3Fb3","px-sm-1":"_-JfYt","mx-sm-2":"_1x4W2","px-sm-2":"_qydtY","mx-sm-3":"_XUuRa","px-sm-3":"_eBVc0","mx-sm-4":"_63l4w","px-sm-4":"_k3SYD","mx-sm-5":"_5i7KK","px-sm-5":"_XDYJN","mx-sm-6":"_w8TjD","px-sm-6":"_5ol5V","mx-sm-7":"_Ot40y","px-sm-7":"_oV5-L","mx-sm-8":"_a8L2h","px-sm-8":"_wi0TE","mx-sm-9":"_v7kEh","px-sm-9":"_0-HhG","mx-sm-10":"_1okBb","px-sm-10":"_95N84","my-sm-0":"_lie2G","py-sm-0":"_ouOvB","my-sm-1":"_ohdC7","py-sm-1":"_aMnh9","my-sm-2":"_7xHoJ","py-sm-2":"_0ug55","my-sm-3":"_U2pB2","py-sm-3":"_4cGIX","my-sm-4":"_ZdqXJ","py-sm-4":"_WxW7n","my-sm-5":"_oVJaN","py-sm-5":"_AWbwx","my-sm-6":"_TBmmo","py-sm-6":"_KwGcy","my-sm-7":"_o3VYk","py-sm-7":"_ci94b","my-sm-8":"_GvBdM","py-sm-8":"_SIEyA","my-sm-9":"_sq-Bc","py-sm-9":"_RahCO","my-sm-10":"_Y22he","py-sm-10":"_zgeqj","m-lg-0":"_hfSrX","p-lg-0":"_pn8y2","m-lg-1":"_LfWT0","p-lg-1":"_QVlAL","m-lg-2":"_1icWB","p-lg-2":"_dl4cc","m-lg-3":"_CMQ3-","p-lg-3":"_zrs1N","m-lg-4":"_x0g6f","p-lg-4":"_Os9NS","m-lg-5":"_U9MlN","p-lg-5":"_jFWCr","m-lg-6":"_tLOlh","p-lg-6":"_42qu5","m-lg-7":"_Aro8c","p-lg-7":"_-uOsA","m-lg-8":"_Au56y","p-lg-8":"_2Oyz7","m-lg-9":"_Osk7K","p-lg-9":"_lXQ8x","m-lg-10":"_dllSC","p-lg-10":"_Tm67i","ml-lg-0":"_Znqug","pl-lg-0":"_454P-","ml-lg-1":"_kUu3E","pl-lg-1":"_w89ET","ml-lg-2":"_WmVQL","pl-lg-2":"_kR-EV","ml-lg-3":"_k5kWU","pl-lg-3":"_-Kb0x","ml-lg-4":"_KKFXp","pl-lg-4":"_-fkcR","ml-lg-5":"_yS-Tb","pl-lg-5":"_O-1Va","ml-lg-6":"_p-vq5","pl-lg-6":"_JMyQH","ml-lg-7":"_k7-ti","pl-lg-7":"_qEF3U","ml-lg-8":"_4Hiwo","pl-lg-8":"_i0YLE","ml-lg-9":"_E7-Mc","pl-lg-9":"_tR6Ca","ml-lg-10":"_XJWn-","pl-lg-10":"_lMFa-","mr-lg-0":"_-5re8","pr-lg-0":"_frmaO","mr-lg-1":"_V7Qjd","pr-lg-1":"_RfFWZ","mr-lg-2":"_zovH5","pr-lg-2":"_I0DtE","mr-lg-3":"_R1FBX","pr-lg-3":"_UGURA","mr-lg-4":"_A91bo","pr-lg-4":"_OC0rQ","mr-lg-5":"_UuInF","pr-lg-5":"_o6Z7k","mr-lg-6":"_2WcKB","pr-lg-6":"_hb6AF","mr-lg-7":"_7zOUh","pr-lg-7":"_ISeQS","mr-lg-8":"_XB-jo","pr-lg-8":"_WH43T","mr-lg-9":"_3Z5tO","pr-lg-9":"_KDtmP","mr-lg-10":"_YWWDg","pr-lg-10":"_3jxch","mt-lg-0":"_NpdpZ","pt-lg-0":"_G3CYP","mt-lg-1":"_rBTNB","pt-lg-1":"_oP3bL","mt-lg-2":"_7k4z7","pt-lg-2":"_W-jQH","mt-lg-3":"_g3B6v","pt-lg-3":"_VJ1Ff","mt-lg-4":"_KMnJN","pt-lg-4":"_ZD8Fa","mt-lg-5":"_b5cHq","pt-lg-5":"_dg5j0","mt-lg-6":"_-Cpwd","pt-lg-6":"_THSdM","mt-lg-7":"_Z3s1F","pt-lg-7":"_lYEdd","mt-lg-8":"_Aqcim","pt-lg-8":"_layfK","mt-lg-9":"_PODRQ","pt-lg-9":"_Jwmvr","mt-lg-10":"_oE-Es","pt-lg-10":"_iqMxI","mb-lg-0":"_0ouBF","pb-lg-0":"_pY5e-","mb-lg-1":"_6UkMv","pb-lg-1":"_rTQpv","mb-lg-2":"_QdezS","pb-lg-2":"_bKRvY","mb-lg-3":"_9kRgX","pb-lg-3":"_0rDFg","mb-lg-4":"_raL2S","pb-lg-4":"_g1goH","mb-lg-5":"_ZYlhK","pb-lg-5":"_xEjIS","mb-lg-6":"_2Bqs7","pb-lg-6":"_0-ck4","mb-lg-7":"_I-Q95","pb-lg-7":"_eBNa3","mb-lg-8":"_jynhW","pb-lg-8":"_N4X7K","mb-lg-9":"_V0gnd","pb-lg-9":"_30KI-","mb-lg-10":"_u7LJD","pb-lg-10":"_0rvxP","mx-lg-0":"_eJDxo","px-lg-0":"_foMtX","mx-lg-1":"_ahZeW","px-lg-1":"_1EJE3","mx-lg-2":"_VsP4e","px-lg-2":"_ZkXCK","mx-lg-3":"_IiuAl","px-lg-3":"_ALX0f","mx-lg-4":"_jPo2Y","px-lg-4":"_iJZSC","mx-lg-5":"_uAU0P","px-lg-5":"_z75CM","mx-lg-6":"_ZiYYZ","px-lg-6":"_-wNvd","mx-lg-7":"_3W1xI","px-lg-7":"_EGCYr","mx-lg-8":"_IKuC1","px-lg-8":"_CsKA7","mx-lg-9":"_y5S5T","px-lg-9":"_pSFpC","mx-lg-10":"_X8XlP","px-lg-10":"_UFRIe","my-lg-0":"_W1tUz","py-lg-0":"_jfJjF","my-lg-1":"_nIUQq","py-lg-1":"_iG2bO","my-lg-2":"_GCiW7","py-lg-2":"_f2j4U","my-lg-3":"_a1kEm","py-lg-3":"_vucDB","my-lg-4":"_6W-Ov","py-lg-4":"_2ktTG","my-lg-5":"_O4LLf","py-lg-5":"_Hcb15","my-lg-6":"_CSfmZ","py-lg-6":"_CPuhc","my-lg-7":"_3mH-z","py-lg-7":"_X6-mZ","my-lg-8":"_asmPC","py-lg-8":"_TTf47","my-lg-9":"_mC-i2","py-lg-9":"_iFSI7","my-lg-10":"_2BFm0","py-lg-10":"_bfNEm","m-md-0":"_-spRI","p-md-0":"_LK8-A","m-md-1":"_zjpam","p-md-1":"_wv8PD","m-md-2":"_06GpP","p-md-2":"_zdlRp","m-md-3":"_sNmTl","p-md-3":"_Yo2qI","m-md-4":"_eHYDi","p-md-4":"_b0S-l","m-md-5":"_U15c8","p-md-5":"_5tzlt","m-md-6":"_ZGL7n","p-md-6":"_5wNZQ","m-md-7":"_a0fPA","p-md-7":"_QQVBX","m-md-8":"_9-xcZ","p-md-8":"_RW3k1","m-md-9":"_rDAcs","p-md-9":"_k1xXG","m-md-10":"_RbEPp","p-md-10":"_hSl5q","ml-md-0":"_JaAa5","pl-md-0":"_eC-r7","ml-md-1":"_TiFFz","pl-md-1":"_tOXmv","ml-md-2":"_9mF2Z","pl-md-2":"_vwsKB","ml-md-3":"_15YPO","pl-md-3":"_XPkcU","ml-md-4":"_boTLY","pl-md-4":"_SFsKJ","ml-md-5":"_3axKI","pl-md-5":"_D2sbk","ml-md-6":"_e7bnL","pl-md-6":"_NQ2Nm","ml-md-7":"_rBXtE","pl-md-7":"_NeI-O","ml-md-8":"_XwNPD","pl-md-8":"_SbqlX","ml-md-9":"_Y-58E","pl-md-9":"_6cNCb","ml-md-10":"_JX9Cq","pl-md-10":"_uEAJa","mr-md-0":"_Jx5kC","pr-md-0":"_9FxwM","mr-md-1":"_iy6Yx","pr-md-1":"_RTwZ-","mr-md-2":"_Sm2g4","pr-md-2":"_mZS-2","mr-md-3":"_xKF1D","pr-md-3":"_okrlw","mr-md-4":"_bSzPv","pr-md-4":"_lahnF","mr-md-5":"_p5D7E","pr-md-5":"_RYFzr","mr-md-6":"_7DOT6","pr-md-6":"_aOldY","mr-md-7":"_GfYE-","pr-md-7":"_DNhH5","mr-md-8":"_eW2PP","pr-md-8":"_fteCN","mr-md-9":"_dyAiH","pr-md-9":"_xabgi","mr-md-10":"_PHePp","pr-md-10":"_qoP00","mt-md-0":"_05YBn","pt-md-0":"_yrlcd","mt-md-1":"_yFl6Y","pt-md-1":"_6b-mC","mt-md-2":"_G7jGU","pt-md-2":"_6GZzc","mt-md-3":"_ufBby","pt-md-3":"_qbnV7","mt-md-4":"_q7LKH","pt-md-4":"_hJCP8","mt-md-5":"_qtf2d","pt-md-5":"_aRWST","mt-md-6":"_TeL7T","pt-md-6":"_ZNePu","mt-md-7":"_jl4lr","pt-md-7":"_IlTFc","mt-md-8":"_a24kO","pt-md-8":"_-zvRb","mt-md-9":"_WXX3L","pt-md-9":"_2EEJ4","mt-md-10":"_X18TD","pt-md-10":"_MVooa","mb-md-0":"_DHwvN","pb-md-0":"_Uw70J","mb-md-1":"_v4jX-","pb-md-1":"_gJHwB","mb-md-2":"_boWJw","pb-md-2":"_j5kJT","mb-md-3":"_IZI-P","pb-md-3":"_LGchh","mb-md-4":"_R0Ont","pb-md-4":"_HYfpq","mb-md-5":"_ized0","pb-md-5":"_vTIf8","mb-md-6":"_zWpdC","pb-md-6":"_WEEGo","mb-md-7":"_1f-FE","pb-md-7":"_kfQzs","mb-md-8":"_j2X9B","pb-md-8":"_yRenj","mb-md-9":"_vnyNi","pb-md-9":"_JoD-h","mb-md-10":"_M-UM-","pb-md-10":"_L6x5K","mx-md-0":"_Vb8-P","px-md-0":"_4oZZN","mx-md-1":"_x42Ry","px-md-1":"_nR54S","mx-md-2":"_sBxfn","px-md-2":"_316Hu","mx-md-3":"_Hlimc","px-md-3":"_xIOYB","mx-md-4":"_9mXFC","px-md-4":"_-Fr6a","mx-md-5":"_Iv-gL","px-md-5":"_BqRA8","mx-md-6":"_7KKoC","px-md-6":"_32kSW","mx-md-7":"_qDWiW","px-md-7":"_vFnpw","mx-md-8":"_W4giE","px-md-8":"_4xRbP","mx-md-9":"_27uMt","px-md-9":"_7JLvO","mx-md-10":"_WyzX-","px-md-10":"_rzIDq","my-md-0":"_V28a9","py-md-0":"_znJMr","my-md-1":"_-3O4g","py-md-1":"_20sBd","my-md-2":"_O-A1l","py-md-2":"_5QSZG","my-md-3":"_QzjlZ","py-md-3":"_MILKq","my-md-4":"_O6rPK","py-md-4":"_KG0dA","my-md-5":"_0OhYl","py-md-5":"_KvUZf","my-md-6":"_rpwnV","py-md-6":"_yesTR","my-md-7":"_-WMtU","py-md-7":"_Ozuan","my-md-8":"_1gsdT","py-md-8":"_Zaqjb","my-md-9":"_nBoFu","py-md-9":"_ATTX2","my-md-10":"_LmCyF","py-md-10":"_FRV8s","m-xl-0":"_vfL3y","p-xl-0":"_EAyFx","m-xl-1":"_9Ru5u","p-xl-1":"_F2FfD","m-xl-2":"_uZD3X","p-xl-2":"_X9oXS","m-xl-3":"_D4N3Z","p-xl-3":"_zDeYX","m-xl-4":"_yHbfy","p-xl-4":"_6BvXQ","m-xl-5":"_gxlNl","p-xl-5":"_pCCVG","m-xl-6":"_qya4B","p-xl-6":"_QvUyx","m-xl-7":"_eJCt5","p-xl-7":"_p6XPi","m-xl-8":"_0THjs","p-xl-8":"_cC5TI","m-xl-9":"_k0QDj","p-xl-9":"_zwxO-","m-xl-10":"_4W0VS","p-xl-10":"_Xqjzh","ml-xl-0":"_jV-29","pl-xl-0":"_yy22x","ml-xl-1":"_T5fSu","pl-xl-1":"_93-K3","ml-xl-2":"_3zBLT","pl-xl-2":"_zjoAh","ml-xl-3":"_fz6la","pl-xl-3":"_UyWvU","ml-xl-4":"_rWYaL","pl-xl-4":"_9bQv0","ml-xl-5":"_0sArB","pl-xl-5":"_7o4Af","ml-xl-6":"_Y2eGT","pl-xl-6":"_xWqqk","ml-xl-7":"_YKpXT","pl-xl-7":"_g80UK","ml-xl-8":"_4cajU","pl-xl-8":"_h9QHX","ml-xl-9":"_oOpVP","pl-xl-9":"_ZXrhV","ml-xl-10":"_WJTHf","pl-xl-10":"_IZnPI","mr-xl-0":"_TB1mj","pr-xl-0":"_E3W1c","mr-xl-1":"_8EyKO","pr-xl-1":"_eaU7V","mr-xl-2":"_aCAu-","pr-xl-2":"_Fpj5l","mr-xl-3":"_GsiAJ","pr-xl-3":"_w-FUl","mr-xl-4":"_WXA1T","pr-xl-4":"_DbO3B","mr-xl-5":"_RtwaI","pr-xl-5":"_nwxwr","mr-xl-6":"_w9wUn","pr-xl-6":"_RBEVT","mr-xl-7":"_h4yUW","pr-xl-7":"_yzODd","mr-xl-8":"_HGkda","pr-xl-8":"_NR7L2","mr-xl-9":"_DKcGP","pr-xl-9":"_vfynG","mr-xl-10":"_klfNs","pr-xl-10":"_Olvpu","mt-xl-0":"_orHon","pt-xl-0":"_pqwts","mt-xl-1":"_OH3oL","pt-xl-1":"_QKjE8","mt-xl-2":"_8D31l","pt-xl-2":"_1l79D","mt-xl-3":"_kzbfM","pt-xl-3":"_wT--w","mt-xl-4":"_r8VYm","pt-xl-4":"_DgPY3","mt-xl-5":"_LF4aG","pt-xl-5":"_vD44v","mt-xl-6":"_c4BLJ","pt-xl-6":"_ElVvf","mt-xl-7":"_GxjHg","pt-xl-7":"_230T2","mt-xl-8":"_aCStj","pt-xl-8":"_vCtDV","mt-xl-9":"_Bo25T","pt-xl-9":"_kKkav","mt-xl-10":"_koZP7","pt-xl-10":"_dsMYs","mb-xl-0":"_C-FbO","pb-xl-0":"_3Nq0y","mb-xl-1":"_XrrZu","pb-xl-1":"_bV14o","mb-xl-2":"_uMcoW","pb-xl-2":"_sreSu","mb-xl-3":"_LcyMS","pb-xl-3":"_tU2l3","mb-xl-4":"_-OT5O","pb-xl-4":"_9HkKs","mb-xl-5":"_bHipN","pb-xl-5":"_DPjem","mb-xl-6":"_hifEE","pb-xl-6":"_RIEji","mb-xl-7":"_Oa7hP","pb-xl-7":"_vzsdg","mb-xl-8":"_pkI29","pb-xl-8":"_0jC5o","mb-xl-9":"_H4C-y","pb-xl-9":"_E9bOZ","mb-xl-10":"_ZVWPI","pb-xl-10":"_-u5jh","mx-xl-0":"_zXDFY","px-xl-0":"_-1-bs","mx-xl-1":"_Tb7NK","px-xl-1":"_xsfgY","mx-xl-2":"_EIQON","px-xl-2":"_Yzt4Z","mx-xl-3":"_LT9ms","px-xl-3":"_jHgj2","mx-xl-4":"_2SbJZ","px-xl-4":"_V-Y3l","mx-xl-5":"_-G8hg","px-xl-5":"_eycX1","mx-xl-6":"_dDxDv","px-xl-6":"_TgE5t","mx-xl-7":"_9CKTr","px-xl-7":"_I-zZG","mx-xl-8":"_SyFyQ","px-xl-8":"_Hyq-2","mx-xl-9":"_LAJdn","px-xl-9":"_ng4Ed","mx-xl-10":"_lp88j","px-xl-10":"_vmD8P","my-xl-0":"_eMXwe","py-xl-0":"_aETwB","my-xl-1":"_dS2Zm","py-xl-1":"_pHxI3","my-xl-2":"_kPY2w","py-xl-2":"_sPtzJ","my-xl-3":"_g1gY4","py-xl-3":"_OUmMw","my-xl-4":"_mLo8K","py-xl-4":"_wkW-B","my-xl-5":"_6P91L","py-xl-5":"_i3OCk","my-xl-6":"_cqBd2","py-xl-6":"_fZ8e0","my-xl-7":"_saauK","py-xl-7":"_wrgof","my-xl-8":"_5m8Th","py-xl-8":"_tlMWT","my-xl-9":"_HxjEh","py-xl-9":"_l-MtD","my-xl-10":"_dJDVj","py-xl-10":"_uEjIR","background-shine":"_O8uMC","path":"_WiuLg","line":"_fS3dR","skeleton":"_Z4CzX","skeleton-animate":"_-W0Ni","skeleton-dark":"_IoNbr","skeleton-dark-animate":"_7W6h3","skeleton-transparent":"_l3AMk","skeleton-transparent-animate":"_r77sc","semi-transparent":"_ci4Xo","qr-code":"_VZ0dT","fill":"_hFE1l"};
5535
5556
 
5536
- // TODO: [dev] add JSDoc
5557
+ /**
5558
+ * QrCode component renders a QR code for a provided crypto address.
5559
+ *
5560
+ * @component
5561
+ * @example
5562
+ * const address = "0x123456789abcdef";
5563
+ * const fill = true;
5564
+ * return <QrCode address={address} fill={fill} />;
5565
+ *
5566
+ * @param {Object} props - The props for the component.
5567
+ * @param {string} props.address - The crypto address to generate the QR code for.
5568
+ * @param {boolean} [props.fill=false] - If true, applies additional CSS class to fill the container.
5569
+ *
5570
+ * @returns {JSX.Element} A div containing the generated QR code.
5571
+ */
5537
5572
 
5538
- function _catch$a(body, recover) {
5573
+ function _catch$c(body, recover) {
5539
5574
  try {
5540
5575
  var result = body();
5541
5576
  } catch (e) {
@@ -5554,7 +5589,7 @@ var QrCode = function QrCode(_ref) {
5554
5589
  useEffect(function () {
5555
5590
  (function () {
5556
5591
  try {
5557
- return _catch$a(function () {
5592
+ return _catch$c(function () {
5558
5593
  var _temp = function () {
5559
5594
  if (address) {
5560
5595
  return Promise.resolve(generateQrAndShowInCanvas(address)).then(function (_generateQrAndShowInC) {
@@ -5581,7 +5616,8 @@ QrCode.propTypes = {
5581
5616
  fill: PropTypes.bool
5582
5617
  };
5583
5618
  QrCode.defaultProps = {
5584
- address: ""
5619
+ address: "",
5620
+ fill: false
5585
5621
  };
5586
5622
 
5587
5623
  var s$5 = {"container":"_NaTd2","m-0":"_YHORQ","p-0":"_vFwmg","m-1":"_XJaHq","p-1":"_hIM3t","m-2":"_WgBak","p-2":"_QbcpO","m-3":"_-S6sq","p-3":"_jOOQ0","m-4":"_znEJf","p-4":"_Lg8C3","m-5":"_qp5LK","p-5":"_5czqM","m-6":"_274as","p-6":"_Xl4AT","m-7":"_Zm2L-","p-7":"_apGWT","m-8":"_C94JK","p-8":"_-ZZwv","m-9":"_wCPNe","p-9":"_8AlLB","m-10":"_LkyIb","p-10":"_wmhyI","ml-0":"_X2MXW","pl-0":"_zLOyd","ml-1":"_Bt-i6","pl-1":"_btKpD","ml-2":"_4Bwl5","pl-2":"_pfI2U","ml-3":"_dkGsO","pl-3":"_Bxv71","ml-4":"_UwipE","pl-4":"_earg6","ml-5":"_F5beh","pl-5":"_0UFA4","ml-6":"_8JK7d","pl-6":"_D4Q-L","ml-7":"_xD22L","pl-7":"_x7e5C","ml-8":"_FHYzO","pl-8":"_pA0Gs","ml-9":"_beftM","pl-9":"_lygHM","ml-10":"_hxaQQ","pl-10":"_AQhiw","mr-0":"_FPd0G","pr-0":"_kzAQL","mr-1":"_3huZS","pr-1":"_QXzb1","mr-2":"_Rz58G","pr-2":"_yMW65","mr-3":"_MXmu7","pr-3":"_IDswm","mr-4":"_IcYbX","pr-4":"_x-YXe","mr-5":"_NYlLE","pr-5":"_4l555","mr-6":"_UjOdV","pr-6":"_SE5we","mr-7":"_AlzPK","pr-7":"_hUHaY","mr-8":"_-gsnW","pr-8":"_IP34z","mr-9":"_UmWyx","pr-9":"_MzrNl","mr-10":"_ds0Ix","pr-10":"_AYlq-","mt-0":"_7qyuy","pt-0":"_nIHOM","mt-1":"_6RqW-","pt-1":"_4-OC1","mt-2":"_rcUWP","pt-2":"_fkjUO","mt-3":"_S7R9D","pt-3":"_j5tAQ","mt-4":"_TUqA4","pt-4":"_vVsJ-","mt-5":"_sHshm","pt-5":"_B-zUI","mt-6":"_0cWsK","pt-6":"_9bfIn","mt-7":"_fjL9E","pt-7":"_NTUdY","mt-8":"_HasBT","pt-8":"_mVF0B","mt-9":"_-u5T1","pt-9":"_ExDUQ","mt-10":"_9pUY-","pt-10":"_eiVcd","mb-0":"_03MFB","pb-0":"_-KrHh","mb-1":"_wev0C","pb-1":"_wtVjK","mb-2":"_gprlv","pb-2":"_J2Q09","mb-3":"_RhXyK","pb-3":"_12ip-","mb-4":"_z5dvT","pb-4":"_Go5-i","mb-5":"_-KBHs","pb-5":"_E3y4V","mb-6":"_yaPh3","pb-6":"_tdi0b","mb-7":"_tv-DY","pb-7":"_fm9Cu","mb-8":"_oBOhs","pb-8":"_cplbD","mb-9":"_WLAwt","pb-9":"_Au3aP","mb-10":"_s2hC1","pb-10":"_L1xED","mx-0":"_AoX5Q","px-0":"_bNNCF","mx-1":"_h8MO1","px-1":"_AJV5c","mx-2":"_QS9LF","px-2":"_hjDVm","mx-3":"_s-SQj","px-3":"_NGiEN","mx-4":"_M6wbK","px-4":"_KCPtZ","mx-5":"_inpZ7","px-5":"_Fr1vd","mx-6":"_BZCXr","px-6":"_zX70b","mx-7":"_XS9X0","px-7":"_E-fbe","mx-8":"_1bVOE","px-8":"_q0UF1","mx-9":"_cWIFa","px-9":"_gJSuV","mx-10":"_wwZlY","px-10":"_eFX6M","my-0":"_jYkDW","py-0":"_ypkZR","my-1":"_1O4Zz","py-1":"_2yJ0B","my-2":"_s180c","py-2":"_-TKas","my-3":"_rbbHu","py-3":"_nEJt6","my-4":"_3X4XE","py-4":"_GLyG-","my-5":"_PPFYe","py-5":"_wj3wh","my-6":"_zxO-F","py-6":"_-Gh70","my-7":"_H7Lx-","py-7":"_ri-zp","my-8":"_kSsB4","py-8":"_DVbNR","my-9":"_VBCoh","py-9":"_7B8Mh","my-10":"_Bs8XQ","py-10":"_pwEBN","m-sm-0":"_oHFJU","p-sm-0":"_6Ukh0","m-sm-1":"_Etjc0","p-sm-1":"_pCMmU","m-sm-2":"_ERgH4","p-sm-2":"_gubJN","m-sm-3":"_3j0mZ","p-sm-3":"_h-278","m-sm-4":"_m25O0","p-sm-4":"_yM2Bk","m-sm-5":"_KR2He","p-sm-5":"_Q3d0A","m-sm-6":"_E1VMD","p-sm-6":"_uh277","m-sm-7":"_pDEm8","p-sm-7":"_efVXx","m-sm-8":"_PFrZ3","p-sm-8":"_qZLnl","m-sm-9":"_mvAgG","p-sm-9":"_F6MJe","m-sm-10":"_076H1","p-sm-10":"_zGVoi","ml-sm-0":"_ht3fQ","pl-sm-0":"_OOKlP","ml-sm-1":"_xyrlV","pl-sm-1":"_6N0PC","ml-sm-2":"_h9adY","pl-sm-2":"_QpEtQ","ml-sm-3":"_CD11L","pl-sm-3":"_PBl7w","ml-sm-4":"_Hfd1V","pl-sm-4":"_n-oVT","ml-sm-5":"_JTt3q","pl-sm-5":"_plbYR","ml-sm-6":"_6eXa4","pl-sm-6":"_UBe72","ml-sm-7":"_Uu42M","pl-sm-7":"_yxNHm","ml-sm-8":"_7ohP7","pl-sm-8":"_11foE","ml-sm-9":"_zRuRz","pl-sm-9":"_YisGl","ml-sm-10":"_Nc8nr","pl-sm-10":"_nyiix","mr-sm-0":"_AmWPq","pr-sm-0":"_6fYUi","mr-sm-1":"_mub2q","pr-sm-1":"_Vgj29","mr-sm-2":"_CIMnU","pr-sm-2":"_ot1oR","mr-sm-3":"_JCTye","pr-sm-3":"_vF9S2","mr-sm-4":"_DK3GL","pr-sm-4":"_xdAgD","mr-sm-5":"_WW9Gf","pr-sm-5":"_wVWX0","mr-sm-6":"_ObyBZ","pr-sm-6":"_QhcRY","mr-sm-7":"_LV5L8","pr-sm-7":"_Y5Gy0","mr-sm-8":"_5g6Dc","pr-sm-8":"_2AqT8","mr-sm-9":"_3sCFZ","pr-sm-9":"_1xGS-","mr-sm-10":"_qz1yf","pr-sm-10":"_JPmov","mt-sm-0":"_Th7pa","pt-sm-0":"_ClkMf","mt-sm-1":"_V27PW","pt-sm-1":"_mtTAL","mt-sm-2":"_Q09QK","pt-sm-2":"_1I3Gw","mt-sm-3":"_govQ3","pt-sm-3":"_tYeBV","mt-sm-4":"_EcCmu","pt-sm-4":"_XMDNY","mt-sm-5":"_PDuEt","pt-sm-5":"_6Vkzk","mt-sm-6":"_0YG19","pt-sm-6":"_2Cgli","mt-sm-7":"_-lWQN","pt-sm-7":"_cEzEZ","mt-sm-8":"_nGa33","pt-sm-8":"_-raau","mt-sm-9":"_PMq4L","pt-sm-9":"_w7zEF","mt-sm-10":"_ehNrF","pt-sm-10":"_jmaO2","mb-sm-0":"_RrFqz","pb-sm-0":"_12i4p","mb-sm-1":"_7Ahx0","pb-sm-1":"_flSBK","mb-sm-2":"_NB4sU","pb-sm-2":"_gPzKo","mb-sm-3":"_TV50u","pb-sm-3":"_bSZaB","mb-sm-4":"_eysFY","pb-sm-4":"_FteNR","mb-sm-5":"_EtHbQ","pb-sm-5":"_qTuR8","mb-sm-6":"_GB6FT","pb-sm-6":"_Py5nK","mb-sm-7":"_uIaBf","pb-sm-7":"_D2bHt","mb-sm-8":"_Q-avy","pb-sm-8":"_gsv-o","mb-sm-9":"_UG-gK","pb-sm-9":"_D9sNH","mb-sm-10":"_m2xUH","pb-sm-10":"_iQbrf","mx-sm-0":"_-L1Tf","px-sm-0":"_iKCny","mx-sm-1":"_75NUT","px-sm-1":"_QhF00","mx-sm-2":"_-LVWC","px-sm-2":"_Tvv1b","mx-sm-3":"_khdAw","px-sm-3":"_PZYyJ","mx-sm-4":"_OyZmA","px-sm-4":"_95e4A","mx-sm-5":"_Vnqmh","px-sm-5":"_eTlqy","mx-sm-6":"_XUY2U","px-sm-6":"_3EpGV","mx-sm-7":"_SHfGI","px-sm-7":"_eI7rR","mx-sm-8":"_zIL2L","px-sm-8":"_9saK-","mx-sm-9":"_H1Fzw","px-sm-9":"_kf1Hf","mx-sm-10":"_P8qDH","px-sm-10":"_gio52","my-sm-0":"_chaCt","py-sm-0":"_O7-z-","my-sm-1":"_LrTqG","py-sm-1":"_pHmaj","my-sm-2":"_oU92I","py-sm-2":"_Mnwns","my-sm-3":"_1C5A9","py-sm-3":"_ImF2o","my-sm-4":"_WbO9H","py-sm-4":"_Z1OmB","my-sm-5":"_EYXZu","py-sm-5":"_vYHEp","my-sm-6":"_g3MSP","py-sm-6":"_2NYDD","my-sm-7":"_2joeb","py-sm-7":"_qd50T","my-sm-8":"_VGpWm","py-sm-8":"_cwG11","my-sm-9":"_ekf8e","py-sm-9":"_cK4PR","my-sm-10":"_cc6Y3","py-sm-10":"_NDKAw","m-lg-0":"_iPRPm","p-lg-0":"_TWGN8","m-lg-1":"_Jb7vd","p-lg-1":"_sn9pN","m-lg-2":"_nqEiy","p-lg-2":"_Gy0Hb","m-lg-3":"_BY1ks","p-lg-3":"_8URKR","m-lg-4":"_2-3-j","p-lg-4":"_uGQk4","m-lg-5":"_-XWs9","p-lg-5":"_OnrIk","m-lg-6":"_qrdeX","p-lg-6":"_nMFGQ","m-lg-7":"_BRNYT","p-lg-7":"_3dEch","m-lg-8":"_MBNzK","p-lg-8":"_C-WZp","m-lg-9":"_dLTQ8","p-lg-9":"_w6ixh","m-lg-10":"_2jd3n","p-lg-10":"_2muU8","ml-lg-0":"_lUZMw","pl-lg-0":"_-KzSM","ml-lg-1":"_YMHZ-","pl-lg-1":"_gomUI","ml-lg-2":"_SL4B8","pl-lg-2":"_cJVO2","ml-lg-3":"_q1dRp","pl-lg-3":"_xwxkL","ml-lg-4":"_C0hXq","pl-lg-4":"_ikIn8","ml-lg-5":"_tgvFs","pl-lg-5":"_eHDg5","ml-lg-6":"_lTdC3","pl-lg-6":"_7HFwm","ml-lg-7":"_2faTD","pl-lg-7":"_jOAoH","ml-lg-8":"_deSOn","pl-lg-8":"_z9y5A","ml-lg-9":"_ws2he","pl-lg-9":"_ui5L7","ml-lg-10":"_oJN2I","pl-lg-10":"_6CRTE","mr-lg-0":"_d1x7e","pr-lg-0":"_reYgy","mr-lg-1":"_j4hAO","pr-lg-1":"_5f30G","mr-lg-2":"_liNod","pr-lg-2":"_IUuhb","mr-lg-3":"_V9TWD","pr-lg-3":"_rliGE","mr-lg-4":"_3z6mJ","pr-lg-4":"_Df6xY","mr-lg-5":"_Rd09K","pr-lg-5":"_cGcMj","mr-lg-6":"_Mwrny","pr-lg-6":"_KuKUQ","mr-lg-7":"_HR1SS","pr-lg-7":"_s2dUf","mr-lg-8":"_SAzax","pr-lg-8":"_cEuIZ","mr-lg-9":"_Ze5-9","pr-lg-9":"_JOVUS","mr-lg-10":"_Uwedj","pr-lg-10":"_ROhQj","mt-lg-0":"_Kjz26","pt-lg-0":"_6Z07U","mt-lg-1":"_aFxMX","pt-lg-1":"_KR6SN","mt-lg-2":"_5i7Rc","pt-lg-2":"_u9KBR","mt-lg-3":"_m5LsE","pt-lg-3":"_t6WGi","mt-lg-4":"_-bb51","pt-lg-4":"_cRc-3","mt-lg-5":"_bnTpD","pt-lg-5":"_hPBHM","mt-lg-6":"_bwpJA","pt-lg-6":"_PMDS2","mt-lg-7":"_hoXBi","pt-lg-7":"_8xjM4","mt-lg-8":"_gZ7--","pt-lg-8":"_BA6wE","mt-lg-9":"_21yv5","pt-lg-9":"_aWyCU","mt-lg-10":"_mGr43","pt-lg-10":"_cSkrF","mb-lg-0":"_WjmMC","pb-lg-0":"_Q1gA2","mb-lg-1":"_WkTBs","pb-lg-1":"_fvTua","mb-lg-2":"_vc-w4","pb-lg-2":"_5HHv6","mb-lg-3":"_l-4sg","pb-lg-3":"_g8uEK","mb-lg-4":"_lD2hM","pb-lg-4":"_3G1cG","mb-lg-5":"_OHyTI","pb-lg-5":"_KeAKX","mb-lg-6":"_c260B","pb-lg-6":"_Ndomr","mb-lg-7":"_BXB-e","pb-lg-7":"_dGq5C","mb-lg-8":"_4AUpv","pb-lg-8":"_npllZ","mb-lg-9":"_L9Rak","pb-lg-9":"_jt9k5","mb-lg-10":"_8RT15","pb-lg-10":"_wjycY","mx-lg-0":"_W0Be1","px-lg-0":"_4uVx8","mx-lg-1":"_i2L9f","px-lg-1":"_ZjJsm","mx-lg-2":"_ZcecZ","px-lg-2":"_hqNB-","mx-lg-3":"_jNUQn","px-lg-3":"_sHebC","mx-lg-4":"_YhUDD","px-lg-4":"_-84UO","mx-lg-5":"_Ph5qw","px-lg-5":"_NR3o7","mx-lg-6":"_9jTBk","px-lg-6":"_82ujL","mx-lg-7":"_IPpAN","px-lg-7":"_C-1sM","mx-lg-8":"_ZphvL","px-lg-8":"_HzdlK","mx-lg-9":"_X8kGx","px-lg-9":"_pXV5r","mx-lg-10":"_HzIMd","px-lg-10":"_u2L1o","my-lg-0":"_Gvgjh","py-lg-0":"_OgT1y","my-lg-1":"_u3Qyn","py-lg-1":"_taLyT","my-lg-2":"_Wy-mG","py-lg-2":"_qownY","my-lg-3":"_HI-Uz","py-lg-3":"_Q6C9n","my-lg-4":"_vOnhn","py-lg-4":"_SFYHT","my-lg-5":"_9BjMz","py-lg-5":"_8JklH","my-lg-6":"_EIbP6","py-lg-6":"_nW9wp","my-lg-7":"_zJIRo","py-lg-7":"_hPFAm","my-lg-8":"_fsnJO","py-lg-8":"_iCENv","my-lg-9":"_HnasH","py-lg-9":"_-hbdR","my-lg-10":"_X1Zxr","py-lg-10":"_H17sM","m-md-0":"_Ujtmy","p-md-0":"_49fa6","m-md-1":"_KbnrJ","p-md-1":"_yM5-R","m-md-2":"_-meNJ","p-md-2":"_Y4UvM","m-md-3":"_OwGHV","p-md-3":"_RBR9C","m-md-4":"_i-AVY","p-md-4":"_WwWmC","m-md-5":"_c1Qr0","p-md-5":"_A3U4m","m-md-6":"_GPcUJ","p-md-6":"_71YbI","m-md-7":"_ikQln","p-md-7":"_wvIwY","m-md-8":"_fT38W","p-md-8":"_9Yg2c","m-md-9":"_zBOP3","p-md-9":"_GFy-1","m-md-10":"_tYxAK","p-md-10":"_kjPhi","ml-md-0":"_quQF3","pl-md-0":"_-OzvZ","ml-md-1":"_wMPHV","pl-md-1":"_41XvH","ml-md-2":"_spwuT","pl-md-2":"_24nw7","ml-md-3":"_41odn","pl-md-3":"_yz4Tk","ml-md-4":"_-2vc6","pl-md-4":"_vvnDT","ml-md-5":"_54Ig3","pl-md-5":"_CG-dk","ml-md-6":"_iVeaz","pl-md-6":"_WXTU-","ml-md-7":"_Dh8xC","pl-md-7":"_kq23e","ml-md-8":"_BJ2fl","pl-md-8":"_MG9ww","ml-md-9":"_sQHE-","pl-md-9":"_6QT8u","ml-md-10":"_NyEZe","pl-md-10":"_ekmYg","mr-md-0":"_mTGTW","pr-md-0":"_hLgfO","mr-md-1":"_Rr3ZO","pr-md-1":"_9TkH0","mr-md-2":"_FdTOQ","pr-md-2":"_neJQM","mr-md-3":"_vBv00","pr-md-3":"_eQSPq","mr-md-4":"_yaN3k","pr-md-4":"_fAvoS","mr-md-5":"_IIII7","pr-md-5":"_NgVq0","mr-md-6":"_GpgeG","pr-md-6":"_xEVGa","mr-md-7":"_9gZpZ","pr-md-7":"_-hI7f","mr-md-8":"_U54Sx","pr-md-8":"_dMcIt","mr-md-9":"_znlEn","pr-md-9":"_2BEP4","mr-md-10":"_IJ0sH","pr-md-10":"_94GCu","mt-md-0":"_5Vn-b","pt-md-0":"_8qH0J","mt-md-1":"_81Va8","pt-md-1":"_qO6aN","mt-md-2":"_PHlw6","pt-md-2":"_mjoLe","mt-md-3":"_0l6tS","pt-md-3":"_GqIf0","mt-md-4":"_63JeO","pt-md-4":"_iETbw","mt-md-5":"_MefCn","pt-md-5":"_Jp-Or","mt-md-6":"_sP1nG","pt-md-6":"_x73S0","mt-md-7":"_DwVeG","pt-md-7":"_eCRBo","mt-md-8":"_1BuEh","pt-md-8":"_gLz6T","mt-md-9":"_TUu8p","pt-md-9":"_Od9Jg","mt-md-10":"_9xo0E","pt-md-10":"_3q9Qs","mb-md-0":"_q1N2O","pb-md-0":"_EfBmm","mb-md-1":"_e6vaB","pb-md-1":"_mPlV1","mb-md-2":"_UPkLS","pb-md-2":"_wx2ox","mb-md-3":"_L4Ru9","pb-md-3":"_U2POK","mb-md-4":"_8xBOI","pb-md-4":"_-E8B-","mb-md-5":"_W-iLG","pb-md-5":"_2QLo6","mb-md-6":"_xq6DM","pb-md-6":"_MJQbH","mb-md-7":"_23LK-","pb-md-7":"_Buv8D","mb-md-8":"_cLEvD","pb-md-8":"_wig0r","mb-md-9":"_zye4T","pb-md-9":"_XqA3E","mb-md-10":"_AHFVl","pb-md-10":"_FiJ-d","mx-md-0":"_iPAbb","px-md-0":"_OI0Hm","mx-md-1":"_9G4QU","px-md-1":"_it3Pu","mx-md-2":"_fWVT6","px-md-2":"_wLA22","mx-md-3":"_r3C2F","px-md-3":"_v1Lv8","mx-md-4":"_Voueh","px-md-4":"_b36iz","mx-md-5":"_As2Gw","px-md-5":"_dQbAe","mx-md-6":"_xcEqD","px-md-6":"_MrAbj","mx-md-7":"_eBuFO","px-md-7":"_xNr13","mx-md-8":"_QPZsY","px-md-8":"_8t2Px","mx-md-9":"_BAyIu","px-md-9":"_00pz1","mx-md-10":"_lO-A1","px-md-10":"_53BzA","my-md-0":"_lh08a","py-md-0":"_kBvO0","my-md-1":"_XTRn4","py-md-1":"_MO6dK","my-md-2":"_fHMgx","py-md-2":"_FXTLg","my-md-3":"_ffpT4","py-md-3":"_22-kw","my-md-4":"_FEg-m","py-md-4":"_ypkOx","my-md-5":"_R1AN7","py-md-5":"_DydJq","my-md-6":"_FXG1K","py-md-6":"_E0BJ-","my-md-7":"_x0N4A","py-md-7":"_WjdDu","my-md-8":"_KDLR1","py-md-8":"_y64sO","my-md-9":"_8eDO2","py-md-9":"_qquBK","my-md-10":"_EwNyz","py-md-10":"_N6I0i","m-xl-0":"_8P5t6","p-xl-0":"_ZpbeQ","m-xl-1":"_Dks6J","p-xl-1":"_mE8iF","m-xl-2":"_el9ru","p-xl-2":"_UTl4r","m-xl-3":"_azB2s","p-xl-3":"_gOS9v","m-xl-4":"_Slcp6","p-xl-4":"_lNxoS","m-xl-5":"_J-0LE","p-xl-5":"_iHe8I","m-xl-6":"_yZepR","p-xl-6":"_rbMpb","m-xl-7":"_-WhgU","p-xl-7":"_mjvu4","m-xl-8":"_1GOfJ","p-xl-8":"_sxTqQ","m-xl-9":"_I4D6b","p-xl-9":"_iVvvh","m-xl-10":"_wg39S","p-xl-10":"_GyDPP","ml-xl-0":"_6gsjS","pl-xl-0":"_JmRU5","ml-xl-1":"_v1VpM","pl-xl-1":"_DEQsB","ml-xl-2":"_9L1JA","pl-xl-2":"_ie1jJ","ml-xl-3":"_zpNcl","pl-xl-3":"_0SKlr","ml-xl-4":"_-REYo","pl-xl-4":"_2lS8e","ml-xl-5":"_2Na2F","pl-xl-5":"_-s-Fm","ml-xl-6":"_pJW1z","pl-xl-6":"_CKN-E","ml-xl-7":"_FgJs7","pl-xl-7":"_j0Erz","ml-xl-8":"_J7vMq","pl-xl-8":"_o2JEq","ml-xl-9":"_drfPx","pl-xl-9":"_jyscO","ml-xl-10":"_5tuQV","pl-xl-10":"_QqMj7","mr-xl-0":"_3s4H3","pr-xl-0":"_-g6oD","mr-xl-1":"_irt5W","pr-xl-1":"_cixdv","mr-xl-2":"_-WyU1","pr-xl-2":"_508yO","mr-xl-3":"_hcmRB","pr-xl-3":"_yv-S6","mr-xl-4":"_Azljg","pr-xl-4":"_iSmGO","mr-xl-5":"_ljdF7","pr-xl-5":"_ExPZ3","mr-xl-6":"_JnJB4","pr-xl-6":"_hqr45","mr-xl-7":"_QHl1W","pr-xl-7":"_NNYAu","mr-xl-8":"_Uvzse","pr-xl-8":"_iXiqD","mr-xl-9":"_7uOKO","pr-xl-9":"_kit7Z","mr-xl-10":"_wAqvW","pr-xl-10":"_6PFk0","mt-xl-0":"_sdtH-","pt-xl-0":"_NCcCs","mt-xl-1":"_DQicu","pt-xl-1":"_4ULM-","mt-xl-2":"_YDSc6","pt-xl-2":"_lIAG5","mt-xl-3":"_TfWVv","pt-xl-3":"_iSTeE","mt-xl-4":"_JM-Od","pt-xl-4":"_k5SO2","mt-xl-5":"_FQRS6","pt-xl-5":"_L0fB3","mt-xl-6":"_eX5qy","pt-xl-6":"_y6uWa","mt-xl-7":"_c2Kgp","pt-xl-7":"_NuKFH","mt-xl-8":"_sKUD0","pt-xl-8":"_SrcyS","mt-xl-9":"_zm1YI","pt-xl-9":"_tCb2k","mt-xl-10":"_5V3Ww","pt-xl-10":"_JI4CW","mb-xl-0":"_werGX","pb-xl-0":"_ElhJG","mb-xl-1":"_RvlfX","pb-xl-1":"_ByoQk","mb-xl-2":"_Be3gd","pb-xl-2":"_FoRlm","mb-xl-3":"_1z4eB","pb-xl-3":"_4mmGN","mb-xl-4":"_ktyWD","pb-xl-4":"_NDUC-","mb-xl-5":"_5vEIK","pb-xl-5":"_ZPRwH","mb-xl-6":"_yfnPa","pb-xl-6":"_u52jn","mb-xl-7":"_y1Puu","pb-xl-7":"_Dt-tw","mb-xl-8":"_uX6MD","pb-xl-8":"_EefsF","mb-xl-9":"_GM91N","pb-xl-9":"_6tOpa","mb-xl-10":"_d9w9L","pb-xl-10":"_qMAiq","mx-xl-0":"_r0ha6","px-xl-0":"_arjXu","mx-xl-1":"_lQe5Y","px-xl-1":"_aFAtc","mx-xl-2":"_qGnkl","px-xl-2":"_r2bDr","mx-xl-3":"_AKBiJ","px-xl-3":"_qidn1","mx-xl-4":"_Xndir","px-xl-4":"_mzK8z","mx-xl-5":"_vuKvl","px-xl-5":"_5eob9","mx-xl-6":"_6zjoG","px-xl-6":"_u2376","mx-xl-7":"_NomJg","px-xl-7":"_cpIVH","mx-xl-8":"_DIbHl","px-xl-8":"_sTwkl","mx-xl-9":"_LJhtb","px-xl-9":"_99ZRS","mx-xl-10":"_RyT0w","px-xl-10":"_NXPYf","my-xl-0":"_4mARD","py-xl-0":"_cZCg4","my-xl-1":"_s65h0","py-xl-1":"_h0IMr","my-xl-2":"_xJjZc","py-xl-2":"_ap-Wz","my-xl-3":"_-nrYV","py-xl-3":"_VoZny","my-xl-4":"_t29x5","py-xl-4":"_yt6Uh","my-xl-5":"_1GB5N","py-xl-5":"_Zfpi1","my-xl-6":"_Z9v80","py-xl-6":"_-Ymwb","my-xl-7":"_TPI94","py-xl-7":"_yDb9i","my-xl-8":"_PG7cx","py-xl-8":"_Au4Oz","my-xl-9":"_NGXXu","py-xl-9":"_q-tXb","my-xl-10":"_g63Xq","py-xl-10":"_dVrmW","background-shine":"_9FSCy","path":"_YSBJs","line":"_MGRy0","skeleton":"_uSX6q","skeleton-animate":"_1JImE","skeleton-dark":"_GoVkE","skeleton-dark-animate":"_W4Xm1","skeleton-transparent":"_miCCb","skeleton-transparent-animate":"_8nUtm","semi-transparent":"_TNpj-","first-line-text":"_IGz2I","wrap":"_eKd8P","break":"_mT5i4","full-text":"_PVKxC","shorted":"_wB5qV","horizontal":"_lqJz-","second-line-text":"_hdF64"};
@@ -6266,7 +6302,7 @@ var s = {"container":"_4QDrB","coin-picker":"_mvuzQ","loading":"_18kIX","item":"
6266
6302
  var FALLBACK_ASSET_ICON_URL = "https://rabbit.io/asset-icons/fallback.svg";
6267
6303
  var DEFAULT_CRYPTO_DECIMAL_COUNT = 8;
6268
6304
 
6269
- function _catch$9(body, recover) {
6305
+ function _catch$b(body, recover) {
6270
6306
  try {
6271
6307
  var result = body();
6272
6308
  } catch (e) {
@@ -6490,7 +6526,7 @@ var CoinPicker = function CoinPicker(_ref) {
6490
6526
  var loadCoinsAndSaveToState = function loadCoinsAndSaveToState() {
6491
6527
  (function () {
6492
6528
  try {
6493
- var _temp = _catch$9(function () {
6529
+ var _temp = _catch$b(function () {
6494
6530
  return Promise.resolve(loadCoinsAndContent ? loadCoinsAndContent() : defaultLoadCoinsAndContent()).then(function (data) {
6495
6531
  setCoins(data.coins);
6496
6532
  setFilteredCoins(data.coins);
@@ -7299,7 +7335,7 @@ var Cache = /*#__PURE__*/function () {
7299
7335
  return Cache;
7300
7336
  }();
7301
7337
 
7302
- function _catch$8(body, recover) {
7338
+ function _catch$a(body, recover) {
7303
7339
  try {
7304
7340
  var result = body();
7305
7341
  } catch (e) {
@@ -7317,7 +7353,7 @@ function postponeExecution(execution, timeoutMS) {
7317
7353
  return new Promise(function (resolve, reject) {
7318
7354
  setTimeout(function () {
7319
7355
  try {
7320
- var _temp = _catch$8(function () {
7356
+ var _temp = _catch$a(function () {
7321
7357
  return Promise.resolve(execution()).then(function (_execution) {
7322
7358
  resolve(_execution);
7323
7359
  });
@@ -7401,7 +7437,7 @@ var AxiosAdapter = /*#__PURE__*/function () {
7401
7437
  return AxiosAdapter;
7402
7438
  }();
7403
7439
 
7404
- function _catch$7(body, recover) {
7440
+ function _catch$9(body, recover) {
7405
7441
  try {
7406
7442
  var result = body();
7407
7443
  } catch (e) {
@@ -7417,7 +7453,7 @@ var EmailsApi = /*#__PURE__*/function () {
7417
7453
  EmailsApi.sendEmail = function sendEmail(subject, body) {
7418
7454
  try {
7419
7455
  var _this = this;
7420
- var _temp = _catch$7(function () {
7456
+ var _temp = _catch$9(function () {
7421
7457
  var url = window.location.protocol + "//" + window.location.host + "/api/v1/" + _this.serverEndpointEntity;
7422
7458
  return Promise.resolve(axios.post(url, {
7423
7459
  subject: subject,
@@ -7835,7 +7871,7 @@ var ExternalServicesStatsCollector = /*#__PURE__*/function () {
7835
7871
  * improve the reliability of a data retrieval.
7836
7872
  */
7837
7873
 
7838
- function _catch$6(body, recover) {
7874
+ function _catch$8(body, recover) {
7839
7875
  try {
7840
7876
  var result = body();
7841
7877
  } catch (e) {
@@ -8174,7 +8210,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8174
8210
  var result;
8175
8211
  var calculationUuid = concurrentCalculationsMetadataHolder.startCalculation(_this.bio);
8176
8212
  return Promise.resolve(_finallyRethrows$1(function () {
8177
- return _catch$6(function () {
8213
+ return _catch$8(function () {
8178
8214
  function _temp5() {
8179
8215
  var _result2, _result3;
8180
8216
  if (((_result2 = result) == null ? void 0 : _result2.data) == null) {
@@ -8202,7 +8238,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8202
8238
  */
8203
8239
  var rpsFactor = result ? result.rpsFactor : RobustExternalAPICallerService.defaultRPSFactor;
8204
8240
  result = null;
8205
- var _temp3 = _catch$6(function () {
8241
+ var _temp3 = _catch$8(function () {
8206
8242
  function _temp2() {
8207
8243
  var _result$errors;
8208
8244
  if ((_result$errors = result.errors) != null && _result$errors.length) {
@@ -8226,7 +8262,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8226
8262
  return Promise.resolve(new Promise(function (resolve, reject) {
8227
8263
  setTimeout(function () {
8228
8264
  try {
8229
- var _temp6 = _catch$6(function () {
8265
+ var _temp6 = _catch$8(function () {
8230
8266
  return Promise.resolve(_this._performCallAttempt(parametersValues, timeoutMS, cancelToken, rpsFactor, doNotFailForNowData)).then(function (_this$_performCallAtt2) {
8231
8267
  resolve(_this$_performCallAtt2);
8232
8268
  });
@@ -8296,7 +8332,7 @@ var RobustExternalAPICallerService = /*#__PURE__*/function () {
8296
8332
  return;
8297
8333
  }
8298
8334
  var _temp13 = _finallyRethrows$1(function () {
8299
- return _catch$6(function () {
8335
+ return _catch$8(function () {
8300
8336
  var _provider$specificHea;
8301
8337
  function _temp12() {
8302
8338
  if (iterationsData.length) {
@@ -8628,7 +8664,7 @@ function _for(test, update, body) {
8628
8664
  }
8629
8665
  }
8630
8666
  }
8631
- function _catch$5(body, recover) {
8667
+ function _catch$7(body, recover) {
8632
8668
  try {
8633
8669
  var result = body();
8634
8670
  } catch (e) {
@@ -8707,7 +8743,7 @@ var CacheAndConcurrentRequestsResolver = /*#__PURE__*/function () {
8707
8743
  _proto.getCachedOrWaitForCachedOrAcquireLock = function getCachedOrWaitForCachedOrAcquireLock(cacheId) {
8708
8744
  try {
8709
8745
  var _this = this;
8710
- return Promise.resolve(_catch$5(function () {
8746
+ return Promise.resolve(_catch$7(function () {
8711
8747
  function _temp2() {
8712
8748
  var _cached, _cached2;
8713
8749
  return calculationId ? {
@@ -8786,7 +8822,7 @@ var CacheAndConcurrentRequestsResolver = /*#__PURE__*/function () {
8786
8822
  _proto.acquireLock = function acquireLock(cacheId) {
8787
8823
  try {
8788
8824
  var _this2 = this;
8789
- return Promise.resolve(_catch$5(function () {
8825
+ return Promise.resolve(_catch$7(function () {
8790
8826
  return Promise.resolve(_this2._requestsManager.acquireLock(cacheId));
8791
8827
  }, function (e) {
8792
8828
  improveAndRethrow(e, "acquireLock");
@@ -8956,7 +8992,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
8956
8992
  try {
8957
8993
  var _exit;
8958
8994
  var _this3 = this;
8959
- var _temp3 = _catch$5(function () {
8995
+ var _temp3 = _catch$7(function () {
8960
8996
  var activeCalculationIdForHash = _this3._activeCalculationsIds.get(requestHash);
8961
8997
  if (activeCalculationIdForHash == null) {
8962
8998
  var id = v4();
@@ -8990,7 +9026,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
8990
9026
  _proto2.acquireLock = function acquireLock(requestHash) {
8991
9027
  try {
8992
9028
  var _this4 = this;
8993
- return Promise.resolve(_catch$5(function () {
9029
+ return Promise.resolve(_catch$7(function () {
8994
9030
  var _this4$_nextCalculati;
8995
9031
  var activeId = _this4._activeCalculationsIds.get(requestHash);
8996
9032
  var nextId = v4();
@@ -9141,7 +9177,7 @@ var ManagerOfRequestsToTheSameResource = /*#__PURE__*/function () {
9141
9177
  * TODO: [tests, critical] Massively used logic
9142
9178
  */
9143
9179
 
9144
- function _catch$4(body, recover) {
9180
+ function _catch$6(body, recover) {
9145
9181
  try {
9146
9182
  var result = body();
9147
9183
  } catch (e) {
@@ -9238,7 +9274,7 @@ var CachedRobustExternalApiCallerService = /*#__PURE__*/function () {
9238
9274
  var cacheId;
9239
9275
  var result;
9240
9276
  return Promise.resolve(_finallyRethrows(function () {
9241
- return _catch$4(function () {
9277
+ return _catch$6(function () {
9242
9278
  cacheId = _this._calculateCacheId(parametersValues, customHashFunctionForParams);
9243
9279
  return Promise.resolve(_this._cahceAndRequestsResolver.getCachedOrWaitForCachedOrAcquireLock(cacheId)).then(function (_this$_cahceAndReques) {
9244
9280
  var _result2, _result4;
@@ -9307,7 +9343,7 @@ var CachedRobustExternalApiCallerService = /*#__PURE__*/function () {
9307
9343
  return CachedRobustExternalApiCallerService;
9308
9344
  }();
9309
9345
 
9310
- function _catch$3(body, recover) {
9346
+ function _catch$5(body, recover) {
9311
9347
  try {
9312
9348
  var result = body();
9313
9349
  } catch (e) {
@@ -9391,7 +9427,7 @@ var IpAddressProvider = /*#__PURE__*/function () {
9391
9427
  IpAddressProvider.getClientIpAddress = function getClientIpAddress() {
9392
9428
  try {
9393
9429
  var _this = this;
9394
- return Promise.resolve(_catch$3(function () {
9430
+ return Promise.resolve(_catch$5(function () {
9395
9431
  return Promise.resolve(_this.externalIPAddressAPICaller.callExternalAPICached([], 7000));
9396
9432
  }, function (e) {
9397
9433
  improveAndRethrow(e, "getClientIpAddress");
@@ -9571,15 +9607,44 @@ function BaseSwapCreationInfo(fromCoin, toCoin, fromAmountCoins, toAmountCoins,
9571
9607
  this.isRefundAddressRequired = isRefundAddressRequired;
9572
9608
  };
9573
9609
 
9610
+ // TODO: [refactoring, moderate] extract structure of _supportedCoins into model class
9611
+
9612
+ function _catch$4(body, recover) {
9613
+ try {
9614
+ var result = body();
9615
+ } catch (e) {
9616
+ return recover(e);
9617
+ }
9618
+ if (result && result.then) {
9619
+ return result.then(void 0, recover);
9620
+ }
9621
+ return result;
9622
+ }
9574
9623
  var SwapProvider = /*#__PURE__*/function () {
9575
- function SwapProvider() {}
9624
+ function SwapProvider(cache, customCoinBuilder, useRestrictedCoinsSet) {
9625
+ if (customCoinBuilder === void 0) {
9626
+ customCoinBuilder = function customCoinBuilder(coin, network) {
9627
+ return null;
9628
+ };
9629
+ }
9630
+ if (useRestrictedCoinsSet === void 0) {
9631
+ useRestrictedCoinsSet = true;
9632
+ }
9633
+ this._supportedCoins = [];
9634
+ this._maxRateDigits = 20;
9635
+ this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9636
+ this._customCoinBuilder = customCoinBuilder;
9637
+ this._cache = cache;
9638
+ this.isAggregator = false;
9639
+ }
9576
9640
  var _proto = SwapProvider.prototype;
9577
9641
  /**
9578
9642
  * @return {Promise<void>}
9579
9643
  */
9580
9644
  _proto.initialize = function initialize() {
9581
9645
  try {
9582
- throw new Error("Not implemented in base");
9646
+ var _this = this;
9647
+ return Promise.resolve(_this._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9583
9648
  } catch (e) {
9584
9649
  return Promise.reject(e);
9585
9650
  }
@@ -9592,15 +9657,68 @@ var SwapProvider = /*#__PURE__*/function () {
9592
9657
  throw new Error("Not implemented in base");
9593
9658
  }
9594
9659
 
9660
+ /**
9661
+ * This method sort internal list putting popular (as provider thinks) coins to the top.
9662
+ * 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.
9663
+ * @private
9664
+ */;
9665
+ _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
9666
+ this._supportedCoins.sort(function (i1, i2) {
9667
+ if (i1.isPopular !== i2.isPopular) return i2.isPopular - i1.isPopular;
9668
+ return i1.coin.ticker.localeCompare(i2.coin.ticker);
9669
+ });
9670
+ }
9671
+
9672
+ /**
9673
+ * Should fill _supportedCoins with array of coins.
9674
+ * Coin construction rules:
9675
+ * 1. ticker should be CODEPROTOCOL_CODE e.g. USDTERC20
9676
+ * 2. name should not contain (PROTOCOL_CODE) or just PROTOCOL_CODe
9677
+ * 3. protocol should be null for coins major for their blockchains like BTC, ETH
9678
+ * 4. isPopular should be a number
9679
+ *
9680
+ * @return {Promise<void>}
9681
+ * @private
9682
+ */;
9683
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9684
+ try {
9685
+ throw new Error("Not implemented in base - _fetchSupportedCurrenciesIfNeeded");
9686
+ } catch (e) {
9687
+ return Promise.reject(e);
9688
+ }
9689
+ }
9595
9690
  /**
9596
9691
  * Retrieves all currencies supported by this swap provider.
9597
9692
  * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
9598
9693
  *
9599
9694
  * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
9600
- */;
9695
+ */
9696
+ ;
9601
9697
  _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9602
9698
  try {
9603
- throw new Error("Not implemented in base");
9699
+ var _this2 = this;
9700
+ var loggerSource = "getAllSupportedCurrencies";
9701
+ return Promise.resolve(_catch$4(function () {
9702
+ return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9703
+ var _this2$_supportedCoin;
9704
+ Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins returning", loggerSource);
9705
+ return {
9706
+ result: true,
9707
+ coins: _this2._supportedCoins.map(function (item) {
9708
+ return item.coin;
9709
+ })
9710
+ };
9711
+ });
9712
+ }, function (e) {
9713
+ var _e$response;
9714
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9715
+ return {
9716
+ result: false,
9717
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9718
+ };
9719
+ }
9720
+ improveAndRethrow(e, loggerSource);
9721
+ }));
9604
9722
  } catch (e) {
9605
9723
  return Promise.reject(e);
9606
9724
  }
@@ -9614,7 +9732,31 @@ var SwapProvider = /*#__PURE__*/function () {
9614
9732
  ;
9615
9733
  _proto.getDepositCurrencies = function getDepositCurrencies() {
9616
9734
  try {
9617
- throw new Error("Not implemented in base");
9735
+ var _this3 = this;
9736
+ var loggerSource = "getDepositCurrencies";
9737
+ return Promise.resolve(_catch$4(function () {
9738
+ return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9739
+ var _this3$_supportedCoin;
9740
+ Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9741
+ return {
9742
+ result: true,
9743
+ coins: _this3._supportedCoins.filter(function (item) {
9744
+ return item.deposit;
9745
+ }).map(function (item) {
9746
+ return item.coin;
9747
+ })
9748
+ };
9749
+ });
9750
+ }, function (e) {
9751
+ var _e$response2;
9752
+ if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9753
+ return {
9754
+ result: false,
9755
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9756
+ };
9757
+ }
9758
+ improveAndRethrow(e, loggerSource);
9759
+ }));
9618
9760
  } catch (e) {
9619
9761
  return Promise.reject(e);
9620
9762
  }
@@ -9628,8 +9770,36 @@ var SwapProvider = /*#__PURE__*/function () {
9628
9770
  */
9629
9771
  ;
9630
9772
  _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9773
+ if (exceptCurrency === void 0) {
9774
+ exceptCurrency = null;
9775
+ }
9631
9776
  try {
9632
- throw new Error("Not implemented in base");
9777
+ var _this4 = this;
9778
+ var loggerSource = "getWithdrawalCurrencies";
9779
+ return Promise.resolve(_catch$4(function () {
9780
+ return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9781
+ var _this4$_supportedCoin;
9782
+ Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9783
+ return {
9784
+ result: true,
9785
+ coins: _this4._supportedCoins.filter(function (item) {
9786
+ var _item$coin, _exceptCurrency;
9787
+ return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9788
+ }).map(function (item) {
9789
+ return item.coin;
9790
+ })
9791
+ };
9792
+ });
9793
+ }, function (e) {
9794
+ var _e$response3;
9795
+ if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9796
+ return {
9797
+ result: false,
9798
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9799
+ };
9800
+ }
9801
+ improveAndRethrow(e, loggerSource);
9802
+ }));
9633
9803
  } catch (e) {
9634
9804
  return Promise.reject(e);
9635
9805
  }
@@ -9637,12 +9807,28 @@ var SwapProvider = /*#__PURE__*/function () {
9637
9807
  /**
9638
9808
  * Retrieves URL for coin icon or fallback if not found.
9639
9809
  *
9640
- * @param coin {Coin|string} coin or rabbit-format of coin ticker
9810
+ * @param coinOrTicker {Coin|string} coin or rabbit-format of coin ticker
9641
9811
  * @return {string}
9642
9812
  */
9643
9813
  ;
9644
- _proto.getIconUrl = function getIconUrl(coin) {
9645
- throw new Error("Not implemented in base");
9814
+ _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9815
+ var loggerSource = "getIconUrl";
9816
+ try {
9817
+ var _this$_supportedCoins2, _this$_supportedCoins3;
9818
+ var coin = coinOrTicker;
9819
+ if (!(coinOrTicker instanceof Coin)) {
9820
+ var _this$_supportedCoins;
9821
+ coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9822
+ return i.coin.ticker === coinOrTicker;
9823
+ })) == null ? void 0 : _this$_supportedCoins.coin;
9824
+ }
9825
+ return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9826
+ var _item$coin2, _coin;
9827
+ return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9828
+ })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9829
+ } catch (e) {
9830
+ improveAndRethrow(e, loggerSource);
9831
+ }
9646
9832
  }
9647
9833
 
9648
9834
  /**
@@ -9653,7 +9839,49 @@ var SwapProvider = /*#__PURE__*/function () {
9653
9839
  */;
9654
9840
  _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
9655
9841
  try {
9656
- throw new Error("Not implemented in base");
9842
+ var _this5 = this;
9843
+ var loggerSource = "getCoinToUSDTRate";
9844
+ return Promise.resolve(_catch$4(function () {
9845
+ return coin ? Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
9846
+ var _this5$_supportedCoin;
9847
+ // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
9848
+ var usdtTrc20 = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
9849
+ return i.coin.ticker === "USDTTRC20";
9850
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
9851
+ if (!usdtTrc20) {
9852
+ return {
9853
+ result: false
9854
+ };
9855
+ }
9856
+ var cached = _this5._cache.get("swapspace_usdt_rate_" + coin.ticker);
9857
+ if (cached != null) {
9858
+ return {
9859
+ result: true,
9860
+ rate: cached
9861
+ };
9862
+ }
9863
+ Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
9864
+ return Promise.resolve(_this5.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
9865
+ if (!result.result) {
9866
+ return {
9867
+ result: false
9868
+ };
9869
+ }
9870
+
9871
+ // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
9872
+ var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
9873
+ var rate = BigNumber(1).div(BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
9874
+ _this5._cache.put("swap_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
9875
+ );
9876
+ return {
9877
+ result: true,
9878
+ rate: rate
9879
+ };
9880
+ });
9881
+ }) : null;
9882
+ }, function (e) {
9883
+ improveAndRethrow(e, loggerSource);
9884
+ }));
9657
9885
  } catch (e) {
9658
9886
  return Promise.reject(e);
9659
9887
  }
@@ -9670,6 +9898,7 @@ var SwapProvider = /*#__PURE__*/function () {
9670
9898
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
9671
9899
  * @param [fromCoinToUsdRate=null] pass if you want to increase the min amount returned
9672
9900
  * by provider with some fixed "insurance" amount to cover min amount fluctuations.
9901
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9673
9902
  * @return {Promise<({
9674
9903
  * result: false,
9675
9904
  * reason: string,
@@ -9689,7 +9918,7 @@ var SwapProvider = /*#__PURE__*/function () {
9689
9918
  * })>}
9690
9919
  */
9691
9920
  ;
9692
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
9921
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
9693
9922
  try {
9694
9923
  throw new Error("Not implemented in base");
9695
9924
  } catch (e) {
@@ -9709,6 +9938,7 @@ var SwapProvider = /*#__PURE__*/function () {
9709
9938
  * @param fixed {boolean}
9710
9939
  * @param [toCurrencyExtraId=""] {string} optional extra ID
9711
9940
  * @param [refundExtraId=""] {string} optional extra ID for refund address
9941
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9712
9942
  * @return {Promise<({
9713
9943
  * result: true,
9714
9944
  * swapId: string,
@@ -9728,7 +9958,7 @@ var SwapProvider = /*#__PURE__*/function () {
9728
9958
  * })>}
9729
9959
  */
9730
9960
  ;
9731
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
9961
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
9732
9962
  try {
9733
9963
  throw new Error("Not implemented in base");
9734
9964
  } catch (e) {
@@ -9756,7 +9986,15 @@ var SwapProvider = /*#__PURE__*/function () {
9756
9986
  */
9757
9987
  ;
9758
9988
  _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
9759
- throw new Error("Not implemented in base");
9989
+ try {
9990
+ var _item$coin3;
9991
+ var item = this._supportedCoins.find(function (i) {
9992
+ return i.coin.ticker === ticker;
9993
+ });
9994
+ return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
9995
+ } catch (e) {
9996
+ improveAndRethrow(e, "getCoinByTickerIfPresent");
9997
+ }
9760
9998
  }
9761
9999
 
9762
10000
  /**
@@ -9765,17 +10003,68 @@ var SwapProvider = /*#__PURE__*/function () {
9765
10003
  * @return {boolean}
9766
10004
  */;
9767
10005
  _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
9768
- throw new Error("Not implemented in base");
9769
- }
9770
-
9771
- /**
9772
- * @param asset {Coin}
9773
- * @return {string|null}
9774
- */;
9775
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
9776
- throw new Error("Not implemented in base");
9777
- };
9778
- return SwapProvider;
10006
+ try {
10007
+ var assetData = this._supportedCoins.find(function (i) {
10008
+ var _i$coin;
10009
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (asset == null ? void 0 : asset.ticker);
10010
+ });
10011
+ if (assetData) {
10012
+ var corrected = assetData.validationRegexp.trim();
10013
+ corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10014
+ corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10015
+ return address.match(corrected) != null;
10016
+ }
10017
+ } catch (e) {
10018
+ Logger.logError(e, "isAddressValidForAsset");
10019
+ }
10020
+ return false;
10021
+ }
10022
+
10023
+ /**
10024
+ * @param asset {Coin}
10025
+ * @return {string|null}
10026
+ */;
10027
+ _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10028
+ try {
10029
+ var assetData = this._supportedCoins.find(function (i) {
10030
+ var _i$coin2;
10031
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (asset == null ? void 0 : asset.ticker);
10032
+ });
10033
+ if (assetData != null && assetData.hasExtraId) {
10034
+ if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10035
+ // We return some default name if the extraIdName is empty
10036
+ return "ID";
10037
+ }
10038
+ return assetData == null ? void 0 : assetData.extraIdName;
10039
+ }
10040
+ return null;
10041
+ } catch (e) {
10042
+ improveAndRethrow(e, "getExtraIdNameIfPresent");
10043
+ }
10044
+ };
10045
+ _proto.removeProtocolNameFromCoinName = function removeProtocolNameFromCoinName(coinName, tickerPrintable, protocolName) {
10046
+ if (coinName) {
10047
+ var originalName = coinName;
10048
+ if (tickerPrintable) {
10049
+ coinName = coinName.replaceAll(new RegExp("\\(" + tickerPrintable + "\\)", "gi"), "");
10050
+ }
10051
+ if (protocolName) {
10052
+ coinName = coinName.replaceAll(new RegExp("\\(" + protocolName + "\\)", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + "$", "gi"), "").replaceAll(new RegExp("^" + protocolName + " ", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + " ", "gi"), " ");
10053
+ }
10054
+ coinName = coinName.replaceAll(/ +/g, " ").trim();
10055
+ var defaultNames = ["token", "network", "protocol", "coin", "mainnet", "chain", "project", "cash", "finance", "wrapped", "blockchain", "network"];
10056
+ var lowerCoinName = coinName.toLowerCase();
10057
+ var isBecameDefaultName = defaultNames.find(function (defName) {
10058
+ return lowerCoinName === defName || lowerCoinName === "the " + defName;
10059
+ });
10060
+ if (coinName === "" || isBecameDefaultName) {
10061
+ // Rolling back to original name if our processing leads in empty name or one of the default words
10062
+ coinName = originalName;
10063
+ }
10064
+ }
10065
+ return coinName;
10066
+ };
10067
+ return SwapProvider;
9779
10068
  }();
9780
10069
  SwapProvider.COMMON_ERRORS = {
9781
10070
  REQUESTS_LIMIT_EXCEEDED: "requestsLimitExceeded"
@@ -9792,22 +10081,16 @@ SwapProvider.CREATION_FAIL_REASONS = {
9792
10081
  };
9793
10082
  SwapProvider.SWAP_STATUSES = {
9794
10083
  WAITING_FOR_PAYMENT: "waiting_for_payment",
9795
- // public +
9796
10084
  CONFIRMING: "confirming",
9797
10085
  PAYMENT_RECEIVED: "payment_received",
9798
- // public +
9799
10086
  EXCHANGING: "exchanging",
9800
- // session full // public +
9801
10087
  COMPLETED: "completed",
9802
- // session full // public +
9803
10088
  REFUNDED: "refunded",
9804
- // session full // public +
9805
10089
  EXPIRED: "expired",
9806
- // public +
9807
- FAILED: "failed" // public +
10090
+ FAILED: "failed"
9808
10091
  };
9809
10092
 
9810
- function _catch$2(body, recover) {
10093
+ function _catch$3(body, recover) {
9811
10094
  try {
9812
10095
  var result = body();
9813
10096
  } catch (e) {
@@ -9831,14 +10114,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9831
10114
  if (useRestrictedCoinsSet === void 0) {
9832
10115
  useRestrictedCoinsSet = true;
9833
10116
  }
9834
- _this = _SwapProvider.call(this) || this;
9835
- _this._supportedCoins = [];
10117
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
9836
10118
  _this._partners = [];
9837
- _this._URL = "" + apiKeysProxyUrl;
9838
- _this._maxRateDigits = 20;
9839
- _this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9840
- _this._customCoinBuilder = customCoinBuilder;
9841
- _this._cache = cache;
10119
+ _this._URL = apiKeysProxyUrl + "/swapspace";
10120
+ _this.isAggregator = true;
9842
10121
  return _this;
9843
10122
  }
9844
10123
  var _proto = SwapspaceSwapProvider.prototype;
@@ -9847,144 +10126,21 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9847
10126
  * (and even a bit smaller value) for better consistency */
9848
10127
  return 110000;
9849
10128
  };
9850
- _proto.getDepositCurrencies = function getDepositCurrencies() {
9851
- try {
9852
- var _this2 = this;
9853
- var loggerSource = "getDepositCurrencies";
9854
- return Promise.resolve(_catch$2(function () {
9855
- return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9856
- var _this2$_supportedCoin;
9857
- Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9858
- return {
9859
- result: true,
9860
- coins: _this2._supportedCoins.filter(function (item) {
9861
- return item.deposit;
9862
- }).map(function (item) {
9863
- return item.coin;
9864
- })
9865
- };
9866
- });
9867
- }, function (e) {
9868
- var _e$response;
9869
- if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9870
- return {
9871
- result: false,
9872
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9873
- };
9874
- }
9875
- improveAndRethrow(e, loggerSource);
9876
- }));
9877
- } catch (e) {
9878
- return Promise.reject(e);
9879
- }
9880
- };
9881
- _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9882
- try {
9883
- var _this3 = this;
9884
- var loggerSource = "getAllSupportedCurrencies";
9885
- return Promise.resolve(_catch$2(function () {
9886
- return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9887
- var _this3$_supportedCoin;
9888
- Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins returning", loggerSource);
9889
- return {
9890
- result: true,
9891
- coins: _this3._supportedCoins.map(function (item) {
9892
- return item.coin;
9893
- })
9894
- };
9895
- });
9896
- }, function (e) {
9897
- var _e$response2;
9898
- if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9899
- return {
9900
- result: false,
9901
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9902
- };
9903
- }
9904
- improveAndRethrow(e, loggerSource);
9905
- }));
9906
- } catch (e) {
9907
- return Promise.reject(e);
9908
- }
9909
- };
9910
- _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9911
- if (exceptCurrency === void 0) {
9912
- exceptCurrency = null;
9913
- }
9914
- try {
9915
- var _this4 = this;
9916
- var loggerSource = "getWithdrawalCurrencies";
9917
- return Promise.resolve(_catch$2(function () {
9918
- return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9919
- var _this4$_supportedCoin;
9920
- Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9921
- return {
9922
- result: true,
9923
- coins: _this4._supportedCoins.filter(function (item) {
9924
- var _item$coin, _exceptCurrency;
9925
- return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9926
- }).map(function (item) {
9927
- return item.coin;
9928
- })
9929
- };
9930
- });
9931
- }, function (e) {
9932
- var _e$response3;
9933
- if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9934
- return {
9935
- result: false,
9936
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9937
- };
9938
- }
9939
- improveAndRethrow(e, loggerSource);
9940
- }));
9941
- } catch (e) {
9942
- return Promise.reject(e);
9943
- }
9944
- };
9945
- _proto.initialize = function initialize() {
9946
- try {
9947
- var _this5 = this;
9948
- return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9949
- } catch (e) {
9950
- return Promise.reject(e);
9951
- }
9952
- };
9953
- _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9954
- var loggerSource = "getIconUrl";
9955
- try {
9956
- var _this$_supportedCoins2, _this$_supportedCoins3;
9957
- var coin = coinOrTicker;
9958
- if (!(coinOrTicker instanceof Coin)) {
9959
- var _this$_supportedCoins;
9960
- coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9961
- return i.coin.ticker === coinOrTicker;
9962
- })) == null ? void 0 : _this$_supportedCoins.coin;
9963
- }
9964
- return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9965
- var _item$coin2, _coin;
9966
- return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9967
- })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9968
- } catch (e) {
9969
- improveAndRethrow(e, loggerSource);
9970
- }
9971
- };
9972
10129
  _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9973
10130
  try {
9974
- var _this6 = this;
10131
+ var _this2 = this;
9975
10132
  var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
9976
- return Promise.resolve(_catch$2(function () {
9977
- var _temp = function (_this6$_supportedCoin) {
9978
- if (!((_this6$_supportedCoin = _this6._supportedCoins) != null && _this6$_supportedCoin.length)) {
9979
- return Promise.resolve(axios.get(_this6._URL + "/api/v2/currencies")).then(function (rawResponse) {
10133
+ return Promise.resolve(_catch$3(function () {
10134
+ var _temp = function (_this2$_supportedCoin) {
10135
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length)) {
10136
+ return Promise.resolve(axios.get(_this2._URL + "/api/v2/currencies")).then(function (rawResponse) {
9980
10137
  var _rawResponse$data, _rawResponse$data2;
9981
10138
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
9982
10139
  var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
9983
10140
  Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
9984
- _this6._supportedCoins = allowedCoins.map(function (item) {
9985
- var coin = _this6._customCoinBuilder(item.code, item.network);
9986
- if (!coin && !_this6.useRestrictedCoinsSet) {
9987
- var _item$name;
10141
+ _this2._supportedCoins = allowedCoins.map(function (item) {
10142
+ var coin = _this2._customCoinBuilder(item.code, item.network);
10143
+ if (!coin && !_this2.useRestrictedCoinsSet) {
9988
10144
  /** Building coin object for coin that isn't supported OOB in Rabbit.
9989
10145
  * We are doing this way to be able to use extended coins set for swaps.
9990
10146
  * These temporary built coins are only for in-swap use, and we omit some usual
@@ -9998,11 +10154,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
9998
10154
  /** Removing ticker and protocol name from coin name as we usually use them explicitly
9999
10155
  * from coin object rather than counting on having it in the coin name itself.
10000
10156
  * This processing is needed due to poor quality of swapspace coins names. */
10001
- var name = ((_item$name = item.name) != null ? _item$name : "").replaceAll("(" + code + ")", "").replaceAll("(" + network + ")", "").replaceAll(/ +/g, " ").trim();
10002
- if (name === "") {
10003
- // Rolling back to original name if our processing leads in empty name
10004
- name = item.name;
10005
- }
10157
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
10006
10158
  var ticker = "" + code + (code === network ? "" : network);
10007
10159
  var defaultDecimalPlacesForCoinNotSupportedOOB = 8;
10008
10160
  var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
@@ -10018,16 +10170,17 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10018
10170
  network: item.network,
10019
10171
  hasExtraId: item.hasExtraId,
10020
10172
  extraIdName: item.extraIdName,
10021
- isPopular: !!item.popular,
10173
+ isPopular: item.popular ? 1 : 0,
10022
10174
  iconURL: item.icon ? "https://storage.swapspace.co" + item.icon : FALLBACK_ASSET_ICON_URL,
10023
10175
  deposit: (_item$deposit = item.deposit) != null ? _item$deposit : false,
10024
10176
  withdrawal: (_item$withdrawal = item.withdrawal) != null ? _item$withdrawal : false,
10025
- validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null
10177
+ validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null,
10178
+ isAvailable: true
10026
10179
  };
10027
10180
  }
10028
10181
  return [];
10029
10182
  }).flat();
10030
- _this6._putPopularCoinsFirst();
10183
+ _this2._putPopularCoinsFirst();
10031
10184
  });
10032
10185
  }
10033
10186
  }();
@@ -10041,15 +10194,15 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10041
10194
  };
10042
10195
  _proto._fetchPartnersListIfNeeded = function _fetchPartnersListIfNeeded() {
10043
10196
  try {
10044
- var _this7 = this;
10197
+ var _this3 = this;
10045
10198
  var loggerSource = "_fetchPartnersListIfNeeded";
10046
- return Promise.resolve(_catch$2(function () {
10047
- var _temp2 = function (_this7$_partners) {
10048
- if (((_this7$_partners = _this7._partners) == null ? void 0 : _this7$_partners.length) === 0) {
10049
- return Promise.resolve(axios.get(_this7._URL + "/api/v2/partners")).then(function (rawResponse) {
10199
+ return Promise.resolve(_catch$3(function () {
10200
+ var _temp2 = function (_this3$_partners) {
10201
+ if (((_this3$_partners = _this3._partners) == null ? void 0 : _this3$_partners.length) === 0) {
10202
+ return Promise.resolve(axios.get(_this3._URL + "/api/v2/partners")).then(function (rawResponse) {
10050
10203
  var _rawResponse$data3;
10051
10204
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data3 = rawResponse.data) == null ? void 0 : _rawResponse$data3.length) + " partners", loggerSource);
10052
- _this7._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10205
+ _this3._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10053
10206
  });
10054
10207
  }
10055
10208
  }();
@@ -10060,99 +10213,30 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10060
10213
  } catch (e) {
10061
10214
  return Promise.reject(e);
10062
10215
  }
10063
- }
10064
- /**
10065
- * This method sort internal list putting popular (as swapspace thinks) coins to the top.
10066
- * This is just for users of this API if they don't care about the sorting - we just improve a list a bit this way.
10067
- * @private
10068
- */
10069
- ;
10070
- _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
10071
- this._supportedCoins.sort(function (i1, i2) {
10072
- if (i1.isPopular && !i2.isPopular) return -1;
10073
- if (i2.isPopular && !i1.isPopular) return 1;
10074
- return i1.coin.ticker > i2.coin.ticker ? 1 : i1.coin.ticker < i2.coin.ticker ? -1 : 0;
10075
- });
10076
- };
10077
- _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
10078
- try {
10079
- var _this8 = this;
10080
- var loggerSource = "getCoinToUSDTRate";
10081
- return Promise.resolve(_catch$2(function () {
10082
- return coin ? Promise.resolve(_this8._fetchSupportedCurrenciesIfNeeded()).then(function () {
10083
- var _this8$_supportedCoin;
10084
- // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
10085
- var usdtTrc20 = (_this8$_supportedCoin = _this8._supportedCoins.find(function (i) {
10086
- return i.coin.ticker === "USDTTRC20";
10087
- })) == null ? void 0 : _this8$_supportedCoin.coin;
10088
- if (!usdtTrc20) {
10089
- return {
10090
- result: false
10091
- };
10092
- }
10093
- var cached = _this8._cache.get("swapspace_usdt_rate_" + coin.ticker);
10094
- if (cached != null) {
10095
- return {
10096
- result: true,
10097
- rate: cached
10098
- };
10099
- }
10100
- Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
10101
- return Promise.resolve(_this8.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
10102
- if (!result.result) {
10103
- return {
10104
- result: false
10105
- };
10106
- }
10107
-
10108
- // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
10109
- var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
10110
- var rate = BigNumber(1).div(BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
10111
- _this8._cache.put("swapspace_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
10112
- );
10113
- return {
10114
- result: true,
10115
- rate: rate
10116
- };
10117
- });
10118
- }) : null;
10119
- }, function (e) {
10120
- improveAndRethrow(e, loggerSource);
10121
- }));
10122
- } catch (e) {
10123
- return Promise.reject(e);
10124
- }
10125
10216
  };
10126
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
10127
- try {
10128
- var _item$coin3;
10129
- var item = this._supportedCoins.find(function (i) {
10130
- return i.coin.ticker === ticker;
10131
- });
10132
- return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10133
- } catch (e) {
10134
- improveAndRethrow(e, "getCoinByTickerIfPresent");
10135
- }
10136
- };
10137
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
10217
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
10138
10218
  if (fixed === void 0) {
10139
10219
  fixed = false;
10140
10220
  }
10141
10221
  if (fromCoinToUsdRate === void 0) {
10142
10222
  fromCoinToUsdRate = null;
10143
10223
  }
10224
+ if (amountIsToReceive === void 0) {
10225
+ amountIsToReceive = false;
10226
+ }
10144
10227
  try {
10145
- var _this9 = this;
10228
+ var _this4 = this;
10146
10229
  var loggerSource = "getSwapInfo";
10147
- return Promise.resolve(_catch$2(function () {
10230
+ return Promise.resolve(_catch$3(function () {
10231
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10148
10232
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean") {
10149
10233
  throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed);
10150
10234
  }
10151
- var fromCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10235
+ var fromCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10152
10236
  var _i$coin;
10153
10237
  return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
10154
10238
  });
10155
- var toCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10239
+ var toCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10156
10240
  var _i$coin2;
10157
10241
  return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
10158
10242
  });
@@ -10162,11 +10246,11 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10162
10246
  return !fromCoinSwapspaceDetails.deposit || !toCoinSwapspaceDetails.withdrawal ? {
10163
10247
  result: false,
10164
10248
  reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
10165
- } : Promise.resolve(axios.get(_this9._URL + "/api/v2/amounts?fromCurrency=" + fromCoinSwapspaceDetails.code + "&fromNetwork=" + fromCoinSwapspaceDetails.network + "&toNetwork=" + toCoinSwapspaceDetails.network + "&toCurrency=" + toCoinSwapspaceDetails.code + "&amount=" + amountCoins + "&estimated=false")).then(function (response) {
10249
+ } : Promise.resolve(axios.get(_this4._URL + "/api/v2/amounts?fromCurrency=" + fromCoinSwapspaceDetails.code + "&fromNetwork=" + fromCoinSwapspaceDetails.network + "&toNetwork=" + toCoinSwapspaceDetails.network + "&toCurrency=" + toCoinSwapspaceDetails.code + "&amount=" + amountCoins + "&estimated=false")).then(function (response) {
10166
10250
  var _response$data, _exchangesSupportingT;
10167
10251
  var _exit;
10168
- function _temp4(_result6) {
10169
- if (_exit) return _result6;
10252
+ function _temp4(_result2) {
10253
+ if (_exit) return _result2;
10170
10254
  var result = {
10171
10255
  result: false,
10172
10256
  reason: smallestMin && BigNumber(amountCoins).lt(smallestMin) ? SwapProvider.NO_SWAPS_REASONS.TOO_LOW : greatestMax && BigNumber(amountCoins).gt(greatestMax) ? SwapProvider.NO_SWAPS_REASONS.TOO_HIGH : SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED,
@@ -10260,9 +10344,9 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10260
10344
  }
10261
10345
  }
10262
10346
  var rate = bestOpt.toAmount && bestOpt.fromAmount ? BigNumber(bestOpt.toAmount).div(bestOpt.fromAmount) : null;
10263
- return Promise.resolve(_this9._fetchPartnersListIfNeeded()).then(function () {
10347
+ return Promise.resolve(_this4._fetchPartnersListIfNeeded()).then(function () {
10264
10348
  var _bestOpt$duration;
10265
- var partner = _this9._partners.find(function (p) {
10349
+ var partner = _this4._partners.find(function (p) {
10266
10350
  var _bestOpt$partner;
10267
10351
  return (bestOpt == null || (_bestOpt$partner = bestOpt.partner) == null ? void 0 : _bestOpt$partner.toLowerCase()) === p.path.toLowerCase();
10268
10352
  });
@@ -10273,7 +10357,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10273
10357
  max: max,
10274
10358
  smallestMin: smallestMin,
10275
10359
  greatestMax: greatestMax,
10276
- rate: rate != null ? AmountUtils.trim(rate, _this9._maxRateDigits) : null,
10360
+ rate: rate != null ? AmountUtils.trim(rate, _this4._maxRateDigits) : null,
10277
10361
  durationMinutesRange: (_bestOpt$duration = bestOpt.duration) != null ? _bestOpt$duration : null,
10278
10362
  fixed: bestOpt.fixed,
10279
10363
  rawSwapData: bestOpt,
@@ -10287,8 +10371,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10287
10371
  return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
10288
10372
  });
10289
10373
  }, function (e) {
10290
- var _e$response4;
10291
- if ((e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status) === 429) {
10374
+ var _e$response;
10375
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
10292
10376
  return {
10293
10377
  result: false,
10294
10378
  reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
@@ -10301,18 +10385,22 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10301
10385
  return Promise.reject(e);
10302
10386
  }
10303
10387
  };
10304
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
10388
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
10305
10389
  if (toCurrencyExtraId === void 0) {
10306
10390
  toCurrencyExtraId = "";
10307
10391
  }
10308
10392
  if (refundExtraId === void 0) {
10309
10393
  refundExtraId = "";
10310
10394
  }
10395
+ if (amountIsToReceive === void 0) {
10396
+ amountIsToReceive = false;
10397
+ }
10311
10398
  try {
10312
- var _this10 = this;
10399
+ var _this5 = this;
10313
10400
  var loggerSource = "createSwap";
10314
10401
  var partner = rawSwapData == null ? void 0 : rawSwapData.partner;
10315
- return Promise.resolve(_catch$2(function () {
10402
+ return Promise.resolve(_catch$3(function () {
10403
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10316
10404
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean" || clientIpAddress.length === 0) {
10317
10405
  throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + (clientIpAddress == null ? void 0 : clientIpAddress.length) + " " + fixed);
10318
10406
  }
@@ -10320,12 +10408,12 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10320
10408
  ) {
10321
10409
  throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
10322
10410
  }
10323
- var _this10$_supportedCoi = _this10._supportedCoins.reduce(function (prev, coinData) {
10411
+ var _this5$_supportedCoin = _this5._supportedCoins.reduce(function (prev, coinData) {
10324
10412
  return [coinData.coin.ticker === fromCoin.ticker ? coinData.hasExtraId : prev[0], coinData.coin.ticker === toCoin.ticker ? coinData.hasExtraId : prev[1]];
10325
10413
  }, [false, false]),
10326
- fromCurrencyHasExtraId = _this10$_supportedCoi[0],
10327
- toCurrencyHasExtraId = _this10$_supportedCoi[1];
10328
- return Promise.resolve(_this10._fetchSupportedCurrenciesIfNeeded()).then(function () {
10414
+ fromCurrencyHasExtraId = _this5$_supportedCoin[0],
10415
+ toCurrencyHasExtraId = _this5$_supportedCoin[1];
10416
+ return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
10329
10417
  var _toCurrencyExtraId, _refundExtraId;
10330
10418
  var requestData = {
10331
10419
  partner: partner,
@@ -10344,7 +10432,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10344
10432
  refund: refundAddress
10345
10433
  };
10346
10434
  Logger.log("Sending create request: " + safeStringify(requestData), loggerSource);
10347
- return Promise.resolve(axios.post(_this10._URL + "/api/v2/exchange", requestData)).then(function (response) {
10435
+ return Promise.resolve(axios.post(_this5._URL + "/api/v2/exchange", requestData)).then(function (response) {
10348
10436
  var result = response.data;
10349
10437
  Logger.log("Creation result " + safeStringify(result), loggerSource);
10350
10438
  if (result != null && result.id) {
@@ -10369,7 +10457,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10369
10457
  toAmount: AmountUtils.trim(result == null || (_result$to4 = result.to) == null ? void 0 : _result$to4.amount, toCoin.digits),
10370
10458
  toAddress: result == null || (_result$to5 = result.to) == null ? void 0 : _result$to5.address,
10371
10459
  fromCurrencyExtraId: (_result$from$extraId = result == null || (_result$from6 = result.from) == null ? void 0 : _result$from6.extraId) != null ? _result$from$extraId : "",
10372
- rate: AmountUtils.trim(rate, _this10._maxRateDigits),
10460
+ rate: AmountUtils.trim(rate, _this5._maxRateDigits),
10373
10461
  fixed: result.fixed
10374
10462
  };
10375
10463
  }
@@ -10379,7 +10467,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10379
10467
  });
10380
10468
  });
10381
10469
  }, function (e) {
10382
- var _e$response5, _e$response6;
10470
+ var _e$response2, _e$response3;
10383
10471
  Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
10384
10472
  var composeFailResult = function composeFailResult(reason) {
10385
10473
  return {
@@ -10388,8 +10476,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10388
10476
  partner: partner
10389
10477
  };
10390
10478
  };
10391
- var status = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.status;
10392
- var data = e == null || (_e$response6 = e.response) == null ? void 0 : _e$response6.data;
10479
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
10480
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
10393
10481
  if (status === 429) {
10394
10482
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10395
10483
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10438,9 +10526,9 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10438
10526
  };
10439
10527
  _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10440
10528
  try {
10441
- var _this11 = this;
10529
+ var _this6 = this;
10442
10530
  var loggerSource = "getExistingSwapsDetailsAndStatus";
10443
- return Promise.resolve(_catch$2(function () {
10531
+ return Promise.resolve(_catch$3(function () {
10444
10532
  if (swapIds.find(function (id) {
10445
10533
  return typeof id !== "string";
10446
10534
  })) {
@@ -10448,8 +10536,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10448
10536
  }
10449
10537
  var getNotFailingOn404 = function getNotFailingOn404(swapId) {
10450
10538
  try {
10451
- return Promise.resolve(_catch$2(function () {
10452
- return Promise.resolve(axios.get(_this11._URL + "/api/v2/exchange/" + swapId));
10539
+ return Promise.resolve(_catch$3(function () {
10540
+ return Promise.resolve(axios.get(_this6._URL + "/api/v2/exchange/" + swapId));
10453
10541
  }, function (error) {
10454
10542
  var _error$response;
10455
10543
  if ((error == null || (_error$response = error.response) == null ? void 0 : _error$response.status) === 404) return [];
@@ -10469,13 +10557,13 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10469
10557
  var swaps = wo404.map(function (r) {
10470
10558
  return r.data;
10471
10559
  }).map(function (swap, index) {
10472
- var _this11$_supportedCoi, _this11$_supportedCoi2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10473
- var fromCoin = (_this11$_supportedCoi = _this11._supportedCoins.find(function (i) {
10560
+ var _this6$_supportedCoin, _this6$_supportedCoin2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10561
+ var fromCoin = (_this6$_supportedCoin = _this6._supportedCoins.find(function (i) {
10474
10562
  return i.code === swap.from.code && i.network === swap.from.network;
10475
- })) == null ? void 0 : _this11$_supportedCoi.coin;
10476
- var toCoin = (_this11$_supportedCoi2 = _this11._supportedCoins.find(function (i) {
10563
+ })) == null ? void 0 : _this6$_supportedCoin.coin;
10564
+ var toCoin = (_this6$_supportedCoin2 = _this6._supportedCoins.find(function (i) {
10477
10565
  return i.code === swap.to.code && i.network === swap.to.network;
10478
- })) == null ? void 0 : _this11$_supportedCoi2.coin;
10566
+ })) == null ? void 0 : _this6$_supportedCoin2.coin;
10479
10567
  if (!fromCoin || !toCoin) {
10480
10568
  return []; // We skip swaps with not supported coins for now
10481
10569
  }
@@ -10484,10 +10572,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10484
10572
  };
10485
10573
  var expiresAt = toUtcTimestamp(swap.timestamps.expiresAt);
10486
10574
  var isExpiredByTime = expiresAt < Date.now();
10487
- var status = _this11._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10575
+ var status = _this6._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10488
10576
  var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
10489
10577
  var addressToSendCoinsToSwapspace = swap.from.address;
10490
- return new ExistingSwap(swapIds[index], status, toUtcTimestamp(swap.timestamps.createdAt), expiresAt, swap.confirmations, AmountUtils.trim(swap.rate, _this11._maxRateDigits), swap.fixed, swap.refundAddress, addressToSendCoinsToSwapspace, fromCoin, AmountUtils.trim(swap.from.amount, fromCoin.digits), swap.from.transactionHash, swap.blockExplorerTransactionUrl.from, toCoin, AmountUtils.trim(swap.to.amount, toDigits), swap.to.transactionHash, swap.blockExplorerTransactionUrl.to, swap.to.address, swap.partner, (_swap$from$extraId = swap.from.extraId) != null ? _swap$from$extraId : null, (_swap$to$extraId = swap.to.extraId) != null ? _swap$to$extraId : null, (_swap$refundExtraId = swap.refundExtraId) != null ? _swap$refundExtraId : null);
10578
+ return new ExistingSwap(swapIds[index], status, toUtcTimestamp(swap.timestamps.createdAt), expiresAt, swap.confirmations, AmountUtils.trim(swap.rate, _this6._maxRateDigits), swap.fixed, swap.refundAddress, addressToSendCoinsToSwapspace, fromCoin, AmountUtils.trim(swap.from.amount, fromCoin.digits), swap.from.transactionHash, swap.blockExplorerTransactionUrl.from, toCoin, AmountUtils.trim(swap.to.amount, toDigits), swap.to.transactionHash, swap.blockExplorerTransactionUrl.to, swap.to.address, swap.partner, (_swap$from$extraId = swap.from.extraId) != null ? _swap$from$extraId : null, (_swap$to$extraId = swap.to.extraId) != null ? _swap$to$extraId : null, (_swap$refundExtraId = swap.refundExtraId) != null ? _swap$refundExtraId : null);
10491
10579
  }).flat();
10492
10580
  Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
10493
10581
  return {
@@ -10496,7 +10584,7 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10496
10584
  };
10497
10585
  });
10498
10586
  }, function (e) {
10499
- var _e$response7, _e$response8;
10587
+ var _e$response4, _e$response5;
10500
10588
  Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
10501
10589
  var composeFailResult = function composeFailResult(reason) {
10502
10590
  return {
@@ -10504,8 +10592,8 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10504
10592
  reason: reason
10505
10593
  };
10506
10594
  };
10507
- var status = e == null || (_e$response7 = e.response) == null ? void 0 : _e$response7.status;
10508
- var data = e == null || (_e$response8 = e.response) == null ? void 0 : _e$response8.data;
10595
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
10596
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
10509
10597
  if (status === 429) {
10510
10598
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10511
10599
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10516,45 +10604,10 @@ var SwapspaceSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10516
10604
  return Promise.reject(e);
10517
10605
  }
10518
10606
  };
10519
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
10520
- try {
10521
- var assetData = this._supportedCoins.find(function (i) {
10522
- var _i$coin3;
10523
- return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (asset == null ? void 0 : asset.ticker);
10524
- });
10525
- if (assetData) {
10526
- var corrected = assetData.validationRegexp.trim();
10527
- corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10528
- corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10529
- return address.match(corrected) != null;
10530
- }
10531
- } catch (e) {
10532
- Logger.logError(e, "isAddressValidForAsset");
10533
- }
10534
- return false;
10535
- };
10536
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10537
- try {
10538
- var assetData = this._supportedCoins.find(function (i) {
10539
- var _i$coin4;
10540
- return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (asset == null ? void 0 : asset.ticker);
10541
- });
10542
- if (assetData != null && assetData.hasExtraId) {
10543
- if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10544
- // We return some default name if the extraIdName is empty
10545
- return "ID";
10546
- }
10547
- return assetData == null ? void 0 : assetData.extraIdName;
10548
- }
10549
- return null;
10550
- } catch (e) {
10551
- improveAndRethrow(e, "getExtraIdNameIfPresent");
10552
- }
10553
- };
10554
10607
  return SwapspaceSwapProvider;
10555
10608
  }(SwapProvider);
10556
10609
 
10557
- function _catch$1(body, recover) {
10610
+ function _catch$2(body, recover) {
10558
10611
  try {
10559
10612
  var result = body();
10560
10613
  } catch (e) {
@@ -10751,134 +10804,590 @@ var SwapUtils = /*#__PURE__*/function () {
10751
10804
  if (coinToCurrentFiatRate === void 0) {
10752
10805
  coinToCurrentFiatRate = null;
10753
10806
  }
10754
- if (fiatCurrencyDecimals === void 0) {
10755
- fiatCurrencyDecimals = null;
10807
+ if (fiatCurrencyDecimals === void 0) {
10808
+ fiatCurrencyDecimals = null;
10809
+ }
10810
+ try {
10811
+ var loggerSource = "getInitialSwapData";
10812
+ return Promise.resolve(_catch$2(function () {
10813
+ /* We use some amount here that should fit at least some of the limits of the swap providers.
10814
+ * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10815
+ * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10816
+ */
10817
+ var defaultAmountUsd = BigNumber("300");
10818
+ return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10819
+ var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10820
+ Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10821
+ return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10822
+ var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10823
+ if (!details) {
10824
+ throw new Error("The details are empty: " + safeStringify(details));
10825
+ }
10826
+ if (!details.result) {
10827
+ Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10828
+ 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) {
10829
+ return {
10830
+ result: false,
10831
+ reason: details.reason
10832
+ };
10833
+ } else {
10834
+ throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10835
+ }
10836
+ }
10837
+ var fiatMin = null;
10838
+ var fiatMax = null;
10839
+ var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10840
+ var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10841
+ if (fiatRate != null) {
10842
+ fiatMin = BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10843
+ fiatMax = BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10844
+ }
10845
+ var result = {
10846
+ result: true,
10847
+ min: details == null ? void 0 : details.smallestMin,
10848
+ fiatMin: fiatMin,
10849
+ max: details == null ? void 0 : details.greatestMax,
10850
+ fiatMax: fiatMax,
10851
+ rate: AmountUtils.trim(details.rate, 30)
10852
+ };
10853
+ Logger.log("Returning: " + safeStringify(result), loggerSource);
10854
+ return result;
10855
+ });
10856
+ });
10857
+ }, function (e) {
10858
+ Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
10859
+ improveAndRethrow(e, loggerSource);
10860
+ }));
10861
+ } catch (e) {
10862
+ return Promise.reject(e);
10863
+ }
10864
+ };
10865
+ SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10866
+ (function () {
10867
+ try {
10868
+ var _temp = _catch$2(function () {
10869
+ return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10870
+ }, function (e) {
10871
+ Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10872
+ });
10873
+ return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10874
+ } catch (e) {
10875
+ Promise.reject(e);
10876
+ }
10877
+ })();
10878
+ }
10879
+
10880
+ /**
10881
+ * If some swap is not found by id then there is no item in return list.
10882
+ *
10883
+ * @param swapProviders {SwapProvider[]} - Array of swap providers
10884
+ * @param swapIds {string[]} - Array of swap IDs
10885
+ * @return {Promise<{
10886
+ * result: true,
10887
+ * swaps: ExistingSwapWithFiatData[]
10888
+ * }|{
10889
+ * result: false,
10890
+ * reason: string
10891
+ * }>}
10892
+ */;
10893
+ SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProviders, swapIds) {
10894
+ try {
10895
+ return Promise.resolve(_catch$2(function () {
10896
+ var _interrupt;
10897
+ function _temp8() {
10898
+ if (swapIds.length > 0 && allSwaps.length === 0 && failResults.length > 0) {
10899
+ var failReasons = failResults.map(function (r) {
10900
+ return r.reason;
10901
+ });
10902
+ return {
10903
+ result: false,
10904
+ reason: failReasons.find(function (r) {
10905
+ return r !== SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED;
10906
+ }) ? failReasons.join("\n") : SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
10907
+ };
10908
+ }
10909
+ return {
10910
+ result: true,
10911
+ swaps: allSwaps
10912
+ };
10913
+ }
10914
+ var allSwaps = [];
10915
+ var remainingSwapIds = new Set(swapIds);
10916
+ var failResults = [];
10917
+ var _temp7 = _forOf(swapProviders, function (provider) {
10918
+ return Promise.resolve(provider.getExistingSwapsDetailsAndStatus([].concat(remainingSwapIds))).then(function (result) {
10919
+ var _temp6 = function () {
10920
+ if (result.result) {
10921
+ var _temp5 = function _temp5() {
10922
+ allSwaps = allSwaps.concat(_extendedSwaps);
10923
+
10924
+ // Stop if we have retrieved all swaps
10925
+ if (allSwaps.length >= swapIds.length) {
10926
+ _interrupt = 1;
10927
+ }
10928
+ };
10929
+ var _extendedSwaps = [];
10930
+ var _temp4 = _forOf(result.swaps, function (swap) {
10931
+ function _temp3() {
10932
+ remainingSwapIds["delete"](swap.id);
10933
+ }
10934
+ var _temp2 = function () {
10935
+ if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10936
+ return Promise.resolve(provider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10937
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10938
+ });
10939
+ } else {
10940
+ return Promise.resolve(Promise.all([provider.getCoinToUSDTRate(swap.fromCoin), provider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10941
+ var fromCoinFiatRate = _ref[0],
10942
+ toCoinFiatRate = _ref[1];
10943
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toCoinFiatRate == null ? void 0 : toCoinFiatRate.rate) != null ? BigNumber(swap.toAmount).times(toCoinFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10944
+ });
10945
+ }
10946
+ }();
10947
+ return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
10948
+ });
10949
+ return _temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4);
10950
+ } else {
10951
+ failResults.push(result);
10952
+ }
10953
+ }();
10954
+ if (_temp6 && _temp6.then) return _temp6.then(function () {});
10955
+ });
10956
+ }, function () {
10957
+ return _interrupt;
10958
+ });
10959
+ return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
10960
+ }, function (e) {
10961
+ improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
10962
+ }));
10963
+ } catch (e) {
10964
+ return Promise.reject(e);
10965
+ }
10966
+ };
10967
+ return SwapUtils;
10968
+ }();
10969
+
10970
+ function _catch$1(body, recover) {
10971
+ try {
10972
+ var result = body();
10973
+ } catch (e) {
10974
+ return recover(e);
10975
+ }
10976
+ if (result && result.then) {
10977
+ return result.then(void 0, recover);
10978
+ }
10979
+ return result;
10980
+ }
10981
+ var LetsExchangeSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10982
+ _inheritsLoose(LetsExchangeSwapProvider, _SwapProvider);
10983
+ function LetsExchangeSwapProvider(apiKeysProxyUrl, cache, customCoinBuilder, useRestrictedCoinsSet) {
10984
+ var _this;
10985
+ if (customCoinBuilder === void 0) {
10986
+ customCoinBuilder = function customCoinBuilder(coin, network) {
10987
+ return null;
10988
+ };
10989
+ }
10990
+ if (useRestrictedCoinsSet === void 0) {
10991
+ useRestrictedCoinsSet = true;
10992
+ }
10993
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
10994
+ _this._partners = [];
10995
+ _this._URL = apiKeysProxyUrl + "/letsexchange";
10996
+ _this.isAggregator = false;
10997
+ _this.COINS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
10998
+ _this.coinsLastUpdateTimestamp = null;
10999
+ return _this;
11000
+ }
11001
+ var _proto = LetsExchangeSwapProvider.prototype;
11002
+ _proto.getSwapCreationInfoTtlMs = function getSwapCreationInfoTtlMs() {
11003
+ return 110000;
11004
+ };
11005
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
11006
+ try {
11007
+ var _this2 = this;
11008
+ var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
11009
+ return Promise.resolve(_catch$1(function () {
11010
+ var _temp = function (_this2$_supportedCoin) {
11011
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length) || !_this2.coinsLastUpdateTimestamp || _this2.coinsLastUpdateTimestamp + _this2.COINS_EXPIRATION_TIME_MS < Date.now()) {
11012
+ return Promise.resolve(axios.get(_this2._URL + "/v2/coins")).then(function (rawResponse) {
11013
+ var _rawResponse$data, _rawResponse$data2;
11014
+ Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
11015
+ var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
11016
+ Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
11017
+ _this2._supportedCoins = allowedCoins.map(function (item) {
11018
+ var code = item.code.toUpperCase();
11019
+ if (!Array.isArray(item.networks)) return [];
11020
+ return item.networks.map(function (networkDetails) {
11021
+ var network = networkDetails.code.toUpperCase();
11022
+ var coin = _this2._customCoinBuilder(code, network);
11023
+ if (!coin && !_this2.useRestrictedCoinsSet) {
11024
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
11025
+ var ticker = "" + code + (code === network ? "" : network);
11026
+ var defaultDecimalPlacesForCoinNotSupportedOOB = DEFAULT_CRYPTO_DECIMAL_COUNT;
11027
+ var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
11028
+ 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);
11029
+ }
11030
+ if (coin) {
11031
+ var _networkDetails$extra, _networkDetails$valid;
11032
+ return {
11033
+ coin: coin,
11034
+ code: item.code,
11035
+ network: networkDetails.code,
11036
+ hasExtraId: !!networkDetails.has_extra,
11037
+ extraIdName: (_networkDetails$extra = networkDetails.extra_name) != null ? _networkDetails$extra : null,
11038
+ isPopular: item.rating || 0,
11039
+ iconURL: item.icon ? item.icon : FALLBACK_ASSET_ICON_URL,
11040
+ deposit: true,
11041
+ // Letsexchange provide no such details
11042
+ withdrawal: true,
11043
+ // Letsexchange provide no such details
11044
+ validationRegexp: (_networkDetails$valid = networkDetails.validation_address_regex) != null ? _networkDetails$valid : null,
11045
+ 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)
11046
+ };
11047
+ }
11048
+ return [];
11049
+ });
11050
+ }).flat();
11051
+ _this2.coinsLastUpdateTimestamp = Date.now();
11052
+ _this2._putPopularCoinsFirst();
11053
+ });
11054
+ }
11055
+ }();
11056
+ if (_temp && _temp.then) return _temp.then(function () {});
11057
+ }, function (e) {
11058
+ improveAndRethrow(e, loggerSource);
11059
+ }));
11060
+ } catch (e) {
11061
+ return Promise.reject(e);
11062
+ }
11063
+ };
11064
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
11065
+ if (fixed === void 0) {
11066
+ fixed = false;
11067
+ }
11068
+ if (amountIsToReceive === void 0) {
11069
+ amountIsToReceive = false;
11070
+ }
11071
+ try {
11072
+ var _this3 = this;
11073
+ var loggerSource = "getSwapInfo";
11074
+ return Promise.resolve(_catch$1(function () {
11075
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean" || amountIsToReceive && !fixed) {
11076
+ throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed + ", " + amountIsToReceive);
11077
+ }
11078
+ var fromCoinDetails = _this3._supportedCoins.find(function (i) {
11079
+ var _i$coin;
11080
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11081
+ });
11082
+ var toCoinDetails = _this3._supportedCoins.find(function (i) {
11083
+ var _i$coin2;
11084
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11085
+ });
11086
+ if (!fromCoinDetails || !toCoinDetails) {
11087
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11088
+ }
11089
+ if (!fromCoinDetails.deposit || !fromCoinDetails.isAvailable || !toCoinDetails.withdrawal || !toCoinDetails.isAvailable) {
11090
+ return {
11091
+ result: false,
11092
+ reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
11093
+ };
11094
+ }
11095
+ var pathAndQuery = "/v1/info" + (amountIsToReceive ? "-revert" : "?float=" + !fixed);
11096
+ return Promise.resolve(axios.post("" + _this3._URL + pathAndQuery, {
11097
+ from: fromCoinDetails.code,
11098
+ to: toCoinDetails.code,
11099
+ network_from: fromCoinDetails.network,
11100
+ network_to: toCoinDetails.network,
11101
+ amount: amountCoins,
11102
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11103
+ })).then(function (response) {
11104
+ Logger.log("Retrieved " + (response == null ? void 0 : response.data), loggerSource);
11105
+ var data = response.data;
11106
+
11107
+ // TODO: [dev] add SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING - request alternative rate. task_id=
11108
+
11109
+ // TODO: [feature, low] implement extra coins to fit min/max if there are frequent errors due to min/max exceeding
11110
+ // let extraCoinsToFitMinMax = "0";
11111
+ // if (typeof fromCoinToUsdRate === "string" && BigNumber(fromCoinToUsdRate).gt("0")) {
11112
+ // const extraUsdToFitMinMax = BigNumber("1"); // We correct the limits as the exact limit can fluctuate and cause failed swap creation
11113
+ // extraCoinsToFitMinMax = AmountUtils.trim(extraUsdToFitMinMax.div(fromCoinToUsdRate), fromCoin.digits);
11114
+ // }
11115
+ var min = null;
11116
+ if (data != null && data.min_amount) {
11117
+ min = AmountUtils.trim(data == null ? void 0 : data.min_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11118
+ }
11119
+ var max = null;
11120
+ if (data != null && data.max_amount) {
11121
+ max = AmountUtils.trim(data == null ? void 0 : data.max_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11122
+ }
11123
+ if (data.success === false && data.error) {
11124
+ // TODO: [dev] waiting for response from letsexchange about their not-documented responses
11125
+ // {
11126
+ // "success": false,
11127
+ // "error": "Internal error"
11128
+ // }
11129
+ throw new Error("Failed to estimate swap letsexchange");
11130
+ }
11131
+ if (BigNumber(data.rate).eq("0") || BigNumber(data.amount).eq("0")) {
11132
+ // TODO actualize according to letsexchage clarification - decide, can we count on min/max abcense? task_id=76512110797f4eab8b37f1bb789825cb
11133
+ // amount: "0", rate: "0", rate_id: ""
11134
+ var reason = SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED;
11135
+ if (min && BigNumber(amountCoins).lt(min)) {
11136
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_LOW;
11137
+ } else if (max && BigNumber(amountCoins).gt(max)) {
11138
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_HIGH;
11139
+ } else if (!amountIsToReceive) {
11140
+ // If we are not requesting receiving amount (it cannot be floating-rate)
11141
+ // todo [feature, moderate] request alternative rate. task_id=31884db5392f49738c20a86115c90e1f
11142
+ // const alternativeRate = 1;
11143
+ // const alternativeRateAvailable = alternativeRate;
11144
+ // if (alternativeRateAvailable) {
11145
+ // reason = fixed
11146
+ // ? SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING
11147
+ // : SwapProvider.NO_SWAPS_REASONS.NO_FLOATING_BUT_HAVE_FIXED;
11148
+ // }
11149
+ }
11150
+ return {
11151
+ result: false,
11152
+ reason: reason,
11153
+ smallestMin: min,
11154
+ greatestMax: max
11155
+ };
11156
+ }
11157
+ var rate = amountIsToReceive ? BigNumber(amountCoins).div(data.amount) : BigNumber(data.amount).div(amountCoins);
11158
+ return {
11159
+ result: true,
11160
+ min: min,
11161
+ max: max,
11162
+ smallestMin: min,
11163
+ greatestMax: max,
11164
+ rate: AmountUtils.trim(rate, _this3._maxRateDigits),
11165
+ durationMinutesRange: null,
11166
+ fixed: fixed,
11167
+ rawSwapData: data,
11168
+ isRefundAddressRequired: false
11169
+ };
11170
+ });
11171
+ }, function (e) {
11172
+ var _e$response;
11173
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
11174
+ return {
11175
+ result: false,
11176
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11177
+ };
11178
+ }
11179
+ Logger.log("Internal error when getting swap options " + safeStringify(e), loggerSource);
11180
+ improveAndRethrow(e, loggerSource);
11181
+ }));
11182
+ } catch (e) {
11183
+ return Promise.reject(e);
11184
+ }
11185
+ };
11186
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11187
+ if (toCurrencyExtraId === void 0) {
11188
+ toCurrencyExtraId = "";
11189
+ }
11190
+ if (refundExtraId === void 0) {
11191
+ refundExtraId = "";
11192
+ }
11193
+ if (amountIsToReceive === void 0) {
11194
+ amountIsToReceive = false;
10756
11195
  }
10757
11196
  try {
10758
- var loggerSource = "getInitialSwapData";
11197
+ var _this4 = this;
11198
+ var loggerSource = "createSwap";
10759
11199
  return Promise.resolve(_catch$1(function () {
10760
- /* We use some amount here that should fit at least some of the limits of the swap providers.
10761
- * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10762
- * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10763
- */
10764
- var defaultAmountUsd = BigNumber("300");
10765
- return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10766
- var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10767
- Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10768
- return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10769
- var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10770
- if (!details) {
10771
- throw new Error("The details are empty: " + safeStringify(details));
10772
- }
10773
- if (!details.result) {
10774
- Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10775
- if ((details == null ? void 0 : details.reason) === SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED || (details == null ? void 0 : details.reason) === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10776
- return {
10777
- result: false,
10778
- reason: details.reason
10779
- };
10780
- } else {
10781
- throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10782
- }
10783
- }
10784
- var fiatMin = null;
10785
- var fiatMax = null;
10786
- var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10787
- var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10788
- if (fiatRate != null) {
10789
- fiatMin = BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10790
- fiatMax = BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10791
- }
10792
- var result = {
11200
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean") {
11201
+ throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + fixed);
11202
+ }
11203
+ if (typeof rawSwapData !== "object" || fixed && !rawSwapData.rate_id) {
11204
+ throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
11205
+ }
11206
+ var fromCoinDetails = _this4._supportedCoins.find(function (i) {
11207
+ var _i$coin3;
11208
+ return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11209
+ });
11210
+ var toCoinDetails = _this4._supportedCoins.find(function (i) {
11211
+ var _i$coin4;
11212
+ return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11213
+ });
11214
+ if (!fromCoinDetails || !toCoinDetails) {
11215
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11216
+ }
11217
+ var requestBody = {
11218
+ coin_from: fromCoinDetails.code,
11219
+ network_from: fromCoinDetails.network,
11220
+ coin_to: toCoinDetails.code,
11221
+ network_to: toCoinDetails.network,
11222
+ withdrawal: toAddress,
11223
+ withdrawal_extra_id: toCurrencyExtraId,
11224
+ "return": refundAddress,
11225
+ return_extra_id: refundExtraId,
11226
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11227
+ };
11228
+ if (amountIsToReceive) {
11229
+ requestBody.withdrawal_amount = amount;
11230
+ } else {
11231
+ requestBody.deposit_amount = amount;
11232
+ }
11233
+ if (fixed) {
11234
+ requestBody.rate_id = rawSwapData.rate_id;
11235
+ }
11236
+ return Promise.resolve(axios.post(_this4._URL + "/v1/transaction" + (amountIsToReceive ? "-revert" : "?float=" + !fixed), requestBody)).then(function (response) {
11237
+ var result = response.data;
11238
+ Logger.log("Creation result " + safeStringify(result), loggerSource);
11239
+ if (result != null && result.transaction_id) {
11240
+ var _result$rate, _result$deposit_extra;
11241
+ var rate = BigNumber((_result$rate = result.rate) != null ? _result$rate : 0).isZero() ? BigNumber(result.withdrawal_amount).div(result.deposit_amount) : BigNumber(result.rate);
11242
+ return {
10793
11243
  result: true,
10794
- min: details == null ? void 0 : details.smallestMin,
10795
- fiatMin: fiatMin,
10796
- max: details == null ? void 0 : details.greatestMax,
10797
- fiatMax: fiatMax,
10798
- rate: AmountUtils.trim(details.rate, 30)
11244
+ swapId: result.transaction_id,
11245
+ fromCoin: fromCoin,
11246
+ fromAmount: AmountUtils.trim(result.deposit_amount, fromCoin.digits),
11247
+ fromAddress: result.deposit,
11248
+ toCoin: toCoin,
11249
+ toAmount: AmountUtils.trim(result.withdrawal_amount, toCoin.digits),
11250
+ toAddress: result.withdrawal,
11251
+ fromCurrencyExtraId: (_result$deposit_extra = result.deposit_extra_id) != null ? _result$deposit_extra : "",
11252
+ rate: AmountUtils.trim(rate, _this4._maxRateDigits),
11253
+ fixed: !result.is_float
10799
11254
  };
10800
- Logger.log("Returning: " + safeStringify(result), loggerSource);
10801
- return result;
10802
- });
11255
+ }
11256
+ var errorMessage = "Swap creation succeeded but the response is wrong: " + safeStringify(response);
11257
+ Logger.log(errorMessage, loggerSource);
11258
+ throw new Error(errorMessage);
10803
11259
  });
10804
11260
  }, function (e) {
10805
- Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
11261
+ var _e$response2, _e$response3;
11262
+ Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
11263
+ var composeFailResult = function composeFailResult(reason) {
11264
+ return {
11265
+ result: false,
11266
+ reason: reason
11267
+ };
11268
+ };
11269
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
11270
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
11271
+ if (status === 429) {
11272
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11273
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11274
+ }
11275
+ // TODO: [feature, low] add custom errors handling - waiting for response from letsexchange. task_id=00d2e435f6df4fb99af912135bd9ee27
11276
+ // 422 - missing params
11277
+ Logger.log("Internal error for swap: " + safeStringify(e), loggerSource);
10806
11278
  improveAndRethrow(e, loggerSource);
10807
11279
  }));
10808
11280
  } catch (e) {
10809
11281
  return Promise.reject(e);
10810
11282
  }
10811
11283
  };
10812
- SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10813
- (function () {
10814
- try {
10815
- var _temp = _catch$1(function () {
10816
- return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10817
- }, function (e) {
10818
- Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10819
- });
10820
- return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10821
- } catch (e) {
10822
- Promise.reject(e);
10823
- }
10824
- })();
10825
- }
10826
-
10827
- /**
10828
- * If some swap is not found by id then there is no item in return list.
10829
- *
10830
- * @param swapProvider {SwapProvider}
10831
- * @param swapIds {string[]}
10832
- * @return {Promise<{
10833
- * result: true,
10834
- * swaps: ExistingSwapWithFiatData[]
10835
- * }|{
10836
- * result: false,
10837
- * reason: string
10838
- * }>}
10839
- */;
10840
- SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProvider, swapIds) {
11284
+ _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10841
11285
  try {
11286
+ var _this5 = this;
11287
+ var loggerSource = "getExistingSwapsDetailsAndStatus";
10842
11288
  return Promise.resolve(_catch$1(function () {
10843
- return Promise.resolve(swapProvider.getExistingSwapsDetailsAndStatus(swapIds)).then(function (result) {
10844
- var _temp5 = function () {
10845
- if (result.result) {
10846
- var _temp4 = function _temp4() {
10847
- result.swaps = _extendedSwaps;
10848
- };
10849
- var _extendedSwaps = [];
10850
- var _temp3 = _forOf(result.swaps, function (swap) {
10851
- var _temp2 = function () {
10852
- if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10853
- return Promise.resolve(swapProvider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10854
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10855
- });
10856
- } else {
10857
- return Promise.resolve(Promise.all([swapProvider.getCoinToUSDTRate(swap.fromCoin), swapProvider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10858
- var fromCoinFiatRate = _ref[0],
10859
- toConFiatRate = _ref[1];
10860
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toConFiatRate == null ? void 0 : toConFiatRate.rate) != null ? BigNumber(swap.toAmount).times(toConFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10861
- });
10862
- }
10863
- }();
10864
- if (_temp2 && _temp2.then) return _temp2.then(function () {});
10865
- });
10866
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
11289
+ if (swapIds.find(function (id) {
11290
+ return typeof id !== "string";
11291
+ })) {
11292
+ throw new Error("Swap id is not string: " + safeStringify(swapIds));
11293
+ }
11294
+ return Promise.resolve(axios.get(_this5._URL + "/v1/transactions-list?ids[]=" + swapIds.join("&ids[]="))).then(function (response) {
11295
+ Logger.log("All swaps RAW: " + safeStringify(response.data), loggerSource);
11296
+ var swaps = response.data.map(function (swap, index) {
11297
+ var _this5$_supportedCoin, _this5$_supportedCoin2, _swap$deposit_extra_i, _swap$withdrawal_extr, _swap$return_extra_id;
11298
+ var fromCoin = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
11299
+ return i.code === swap.coin_from && i.network === swap.coin_from_network;
11300
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
11301
+ var toCoin = (_this5$_supportedCoin2 = _this5._supportedCoins.find(function (i) {
11302
+ return i.code === swap.coin_to && i.network === swap.coin_to_network;
11303
+ })) == null ? void 0 : _this5$_supportedCoin2.coin;
11304
+ if (!fromCoin || !toCoin) {
11305
+ return []; // We skip swaps with not supported coins for now
10867
11306
  }
10868
- }();
10869
- return _temp5 && _temp5.then ? _temp5.then(function () {
10870
- return result;
10871
- }) : result;
11307
+ var toUtcTimestamp = function toUtcTimestamp(timeStr) {
11308
+ return Date.parse(timeStr.match(/.+[Zz]$/) ? timeStr : timeStr + "Z");
11309
+ };
11310
+ var expiresAt = swap.expired_at ? swap.expired_at * 1000 : null;
11311
+ var createdAt = swap.created_at ? toUtcTimestamp("" + swap.created_at) : null;
11312
+ var isExpiredByTime = expiresAt && expiresAt < Date.now();
11313
+ var status = _this5._mapLetsExchangeStatusToRabbitStatus(swap.status, isExpiredByTime);
11314
+ var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
11315
+ 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);
11316
+ }).flat();
11317
+ Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
11318
+ return {
11319
+ result: true,
11320
+ swaps: swaps
11321
+ };
10872
11322
  });
10873
11323
  }, function (e) {
10874
- improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
11324
+ var _e$response4, _e$response5;
11325
+ Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
11326
+ var composeFailResult = function composeFailResult(reason) {
11327
+ return {
11328
+ result: false,
11329
+ reason: reason
11330
+ };
11331
+ };
11332
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
11333
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
11334
+ if (status === 429) {
11335
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11336
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11337
+ }
11338
+ improveAndRethrow(e, loggerSource);
10875
11339
  }));
10876
11340
  } catch (e) {
10877
11341
  return Promise.reject(e);
10878
11342
  }
11343
+ } // TODO: [dev] Serg, please check this during the review to make sure I did no mistakes in statuses mapping.
11344
+ // I will remove these comments after the review. https://api.letsexchange.io/doc
11345
+ // wait The exchange has just been created and it’s waiting for coins to reach the deposit wallet
11346
+ // confirmation The transaction appears in mempool and now it is waiting for necessary network confirmations to start.
11347
+ // confirmed The user’s payment is confirmed, the exchange process is about to start.
11348
+ // exchanging The exchange process is running.
11349
+ // sending Funds are being sent to the recipient`s address.
11350
+ // sending_confirmation The outgoing transaction is waiting for network confirmations.
11351
+ // success The exchange is completed and the funds are successfully sent to the recipient’s address.
11352
+ // aml_check_failed The deposit was marked as risky by AML check service.
11353
+ // overdue The deposit receiving time for this transaction has expired.
11354
+ // error The transaction has failed. In most cases, the amount that was sent differs from the amount that was specified when creating the transaction.
11355
+ // refund The exchange failed and the coins were refunded to the user's wallet.
11356
+ ;
11357
+ _proto._mapLetsExchangeStatusToRabbitStatus = function _mapLetsExchangeStatusToRabbitStatus(status, isExpiredByTime) {
11358
+ switch (status) {
11359
+ case "wait":
11360
+ if (isExpiredByTime) {
11361
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11362
+ }
11363
+ return SwapProvider.SWAP_STATUSES.WAITING_FOR_PAYMENT;
11364
+ case "confirmation":
11365
+ return SwapProvider.SWAP_STATUSES.CONFIRMING;
11366
+ case "confirmed":
11367
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11368
+ case "exchanging":
11369
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11370
+ case "sending":
11371
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11372
+ case "sending_confirmation":
11373
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11374
+ case "success":
11375
+ return SwapProvider.SWAP_STATUSES.COMPLETED;
11376
+ case "refund":
11377
+ return SwapProvider.SWAP_STATUSES.REFUNDED;
11378
+ case "overdue":
11379
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11380
+ case "aml_check_failed":
11381
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11382
+ case "error":
11383
+ return SwapProvider.SWAP_STATUSES.FAILED;
11384
+ default:
11385
+ throw new Error("Unknown LetsExchange status: " + status);
11386
+ }
10879
11387
  };
10880
- return SwapUtils;
10881
- }();
11388
+ return LetsExchangeSwapProvider;
11389
+ }(SwapProvider);
11390
+ LetsExchangeSwapProvider.AFFILIATE_ID = "0zbj9hf7xg7jgdgv";
10882
11391
 
10883
11392
  function _catch(body, recover) {
10884
11393
  try {
@@ -10896,13 +11405,16 @@ var PublicSwapService = /*#__PURE__*/function () {
10896
11405
  this._swapProvider = new SwapspaceSwapProvider(apiKeysProxyUrl, cache, function () {
10897
11406
  return null;
10898
11407
  }, false);
11408
+ this._fixedSwapProvider = new LetsExchangeSwapProvider(apiKeysProxyUrl, cache, function () {
11409
+ return null;
11410
+ }, false);
10899
11411
  }
10900
11412
  var _proto = PublicSwapService.prototype;
10901
11413
  _proto.initialize = function initialize() {
10902
11414
  try {
10903
11415
  var _this = this;
10904
11416
  var _temp = _catch(function () {
10905
- return Promise.resolve(_this._swapProvider.initialize()).then(function () {});
11417
+ return Promise.resolve(Promise.all([_this._swapProvider.initialize(), _this._fixedSwapProvider.initialize()])).then(function () {});
10906
11418
  }, function (e) {
10907
11419
  Logger.logError(e, "PublicSwapService.initialize");
10908
11420
  });
@@ -10910,39 +11422,61 @@ var PublicSwapService = /*#__PURE__*/function () {
10910
11422
  } catch (e) {
10911
11423
  return Promise.reject(e);
10912
11424
  }
10913
- };
11425
+ }
11426
+ /**
11427
+ * Gets all currencies across all partners. Useful for sitemap or supported currencies count/list.
11428
+ *
11429
+ * @return {Promise<{result: boolean, coins: Coin[]}|{result: boolean, reason: string}>}
11430
+ */
11431
+ ;
10914
11432
  _proto.getAllSupportedCurrenciesListForPublicSwap = function getAllSupportedCurrenciesListForPublicSwap() {
10915
11433
  try {
10916
11434
  var _this2 = this;
10917
11435
  var loggerSource = "getAllSupportedCurrenciesListForPublicSwap";
10918
11436
  return Promise.resolve(_catch(function () {
10919
- return Promise.resolve(_this2._swapProvider.getAllSupportedCurrencies()).then(function (result) {
10920
- var _result$coins;
10921
- if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10922
- SwapUtils.safeHandleRequestsLimitExceeding();
11437
+ return Promise.resolve(_this2.initialize()).then(function () {
11438
+ return Promise.resolve(Promise.all([_this2._fixedSwapProvider.getAllSupportedCurrencies(), _this2._swapProvider.getAllSupportedCurrencies()])).then(function (result) {
11439
+ var _result$0$coins, _result$1$coins, _result$coins;
11440
+ var allCoins = [].concat((_result$0$coins = result[0].coins) != null ? _result$0$coins : []);
11441
+ ((_result$1$coins = result[1].coins) != null ? _result$1$coins : []).forEach(function (c) {
11442
+ if (!allCoins.find(function (existingCoin) {
11443
+ return existingCoin.ticker === c.ticker;
11444
+ })) {
11445
+ allCoins.push(c);
11446
+ }
11447
+ });
11448
+ if (result[0].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED || result[1].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11449
+ SwapUtils.safeHandleRequestsLimitExceeding();
11450
+ // TODO: [dev] improve this during the whitebit integration. task_id=20e7e41211b540d081bf98f392a34b2c
11451
+ // return {
11452
+ // result: false,
11453
+ // reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
11454
+ // };
11455
+ } else if (result[0].reason || result[1].reason) {
11456
+ console.log("Failed to get all supported coins", result[0].reason, result[1].reason);
11457
+ }
11458
+ Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10923
11459
  return {
10924
- result: false,
10925
- reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11460
+ result: true,
11461
+ coins: allCoins
10926
11462
  };
10927
- }
10928
- Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10929
- return {
10930
- result: true,
10931
- coins: result.coins
10932
- };
11463
+ });
10933
11464
  });
10934
11465
  }, function (e) {
10935
- improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
11466
+ improveAndRethrow(e, "getAllSupportedCurrenciesListForPublicSwap");
10936
11467
  }));
10937
11468
  } catch (e) {
10938
11469
  return Promise.reject(e);
10939
11470
  }
10940
11471
  };
10941
- _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap() {
11472
+ _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap(fixed) {
11473
+ if (fixed === void 0) {
11474
+ fixed = false;
11475
+ }
10942
11476
  try {
10943
11477
  var _this3 = this;
10944
11478
  return Promise.resolve(_catch(function () {
10945
- return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false));
11479
+ return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false, fixed));
10946
11480
  }, function (e) {
10947
11481
  improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
10948
11482
  }));
@@ -10950,11 +11484,14 @@ var PublicSwapService = /*#__PURE__*/function () {
10950
11484
  return Promise.reject(e);
10951
11485
  }
10952
11486
  };
10953
- _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap() {
11487
+ _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap(fixed) {
11488
+ if (fixed === void 0) {
11489
+ fixed = false;
11490
+ }
10954
11491
  try {
10955
11492
  var _this4 = this;
10956
11493
  return Promise.resolve(_catch(function () {
10957
- return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true));
11494
+ return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true, fixed));
10958
11495
  }, function (e) {
10959
11496
  improveAndRethrow(e, "getWithdrawCurrenciesListForPublicSwap");
10960
11497
  }));
@@ -10962,15 +11499,19 @@ var PublicSwapService = /*#__PURE__*/function () {
10962
11499
  return Promise.reject(e);
10963
11500
  }
10964
11501
  };
10965
- _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw) {
11502
+ _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw, fixed) {
10966
11503
  if (withdraw === void 0) {
10967
11504
  withdraw = false;
10968
11505
  }
11506
+ if (fixed === void 0) {
11507
+ fixed = false;
11508
+ }
10969
11509
  try {
10970
11510
  var _this5 = this;
10971
11511
  var loggerSource = "getCurrenciesListForPublicSwap";
10972
11512
  return Promise.resolve(_catch(function () {
10973
- return Promise.resolve(withdraw ? _this5._swapProvider.getWithdrawalCurrencies() : _this5._swapProvider.getDepositCurrencies()).then(function (result) {
11513
+ var provider = fixed ? _this5._fixedSwapProvider : _this5._swapProvider;
11514
+ return Promise.resolve(withdraw ? provider.getWithdrawalCurrencies() : provider.getDepositCurrencies()).then(function (result) {
10974
11515
  var _result$coins2;
10975
11516
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10976
11517
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -10995,6 +11536,9 @@ var PublicSwapService = /*#__PURE__*/function () {
10995
11536
  /**
10996
11537
  * Retrieves initial data for swapping two coins.
10997
11538
  *
11539
+ * Always FLOATING rate, FIXED is not supported - if you want to change it the default rate - all
11540
+ * the swaps code logic should be verified to align with this change.
11541
+ *
10998
11542
  * @param fromCoin {Coin}
10999
11543
  * @param toCoin {Coin}
11000
11544
  * @return {Promise<{
@@ -11047,6 +11591,8 @@ var PublicSwapService = /*#__PURE__*/function () {
11047
11591
  * @param fromAmountCoins {string}
11048
11592
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
11049
11593
  * @param [withoutFiat=false] {boolean} pass true if you don't need the fiat equivalent - this will diminish requests count
11594
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11595
+ * False means the amount is the sending amount.
11050
11596
  * @return {Promise<{
11051
11597
  * result: false,
11052
11598
  * reason: string,
@@ -11061,21 +11607,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11061
11607
  * }>}
11062
11608
  */
11063
11609
  ;
11064
- _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat) {
11610
+ _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat, amountIsToReceive) {
11065
11611
  if (fixed === void 0) {
11066
11612
  fixed = false;
11067
11613
  }
11068
11614
  if (withoutFiat === void 0) {
11069
11615
  withoutFiat = false;
11070
11616
  }
11617
+ if (amountIsToReceive === void 0) {
11618
+ amountIsToReceive = false;
11619
+ }
11071
11620
  try {
11072
11621
  var _this7 = this;
11073
11622
  var loggerSource = "getPublicSwapDetails";
11074
11623
  return Promise.resolve(_catch(function () {
11075
- function _temp2(_this7$_swapProvider$) {
11076
- var _this7$_swapProvider$2;
11077
- var coinUsdtRate = withoutFiat ? _this7$_swapProvider$ : (_this7$_swapProvider$2 = _this7$_swapProvider$ == null ? void 0 : _this7$_swapProvider$.rate) != null ? _this7$_swapProvider$2 : null;
11078
- return Promise.resolve(_this7._swapProvider.getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate)).then(function (details) {
11624
+ function _temp2(_getCoinToUSDTRate) {
11625
+ var _getCoinToUSDTRate$ra;
11626
+ var coinUsdtRate = withoutFiat ? _getCoinToUSDTRate : (_getCoinToUSDTRate$ra = _getCoinToUSDTRate == null ? void 0 : _getCoinToUSDTRate.rate) != null ? _getCoinToUSDTRate$ra : null;
11627
+ return Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate, amountIsToReceive)).then(function (details) {
11079
11628
  var _result$swapCreationI, _result$swapCreationI2;
11080
11629
  // eslint-disable-next-line no-console
11081
11630
  console.log("getSwapInfo result: ", details);
@@ -11136,7 +11685,10 @@ var PublicSwapService = /*#__PURE__*/function () {
11136
11685
  return result;
11137
11686
  });
11138
11687
  }
11139
- return withoutFiat ? _temp2(null) : Promise.resolve(_this7._swapProvider.getCoinToUSDTRate(fromCoin)).then(_temp2);
11688
+ if (amountIsToReceive && !fixed) {
11689
+ throw new Error("Estimating allowed only for fixed rate.");
11690
+ }
11691
+ return withoutFiat ? _temp2(null) : Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getCoinToUSDTRate(fromCoin)).then(_temp2);
11140
11692
  }, function (e) {
11141
11693
  improveAndRethrow(e, loggerSource);
11142
11694
  }));
@@ -11149,13 +11701,15 @@ var PublicSwapService = /*#__PURE__*/function () {
11149
11701
  *
11150
11702
  * @param fromCoin {Coin}
11151
11703
  * @param toCoin {Coin}
11152
- * @param fromAmount {string}
11704
+ * @param amount {string}
11153
11705
  * @param swapCreationInfo {BaseSwapCreationInfo}
11154
11706
  * @param toAddress {string}
11155
11707
  * @param refundAddress {string}
11156
11708
  * @param clientIp {string}
11157
11709
  * @param [toCurrencyExtraId] {string}
11158
11710
  * @param [refundExtraId] {string}
11711
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11712
+ * False means the amount is the sending amount.
11159
11713
  * @return {Promise<{
11160
11714
  * result: true,
11161
11715
  * fiatCurrencyCode: string,
@@ -11178,20 +11732,23 @@ var PublicSwapService = /*#__PURE__*/function () {
11178
11732
  * }>}
11179
11733
  */
11180
11734
  ;
11181
- _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, fromAmount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId) {
11735
+ _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, amount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11736
+ if (amountIsToReceive === void 0) {
11737
+ amountIsToReceive = false;
11738
+ }
11182
11739
  try {
11183
11740
  var _this8 = this;
11184
11741
  var loggerSource = "createPublicSwap";
11185
11742
  return Promise.resolve(_catch(function () {
11186
11743
  var _swapCreationInfo$fro, _swapCreationInfo$toC;
11187
- if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof fromAmount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11188
- throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + fromAmount + " " + swapCreationInfo);
11744
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || swapCreationInfo.isRefundAddressRequired && (typeof refundAddress !== "string" || refundAddress.length === 0) || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11745
+ throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + amount + " " + swapCreationInfo);
11189
11746
  }
11190
- Logger.log("Start: " + fromAmount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11747
+ Logger.log("Start: " + amount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11191
11748
  fromCoin: swapCreationInfo == null || (_swapCreationInfo$fro = swapCreationInfo.fromCoin) == null ? void 0 : _swapCreationInfo$fro.ticker,
11192
11749
  toCoin: swapCreationInfo == null || (_swapCreationInfo$toC = swapCreationInfo.toCoin) == null ? void 0 : _swapCreationInfo$toC.ticker
11193
11750
  })), loggerSource);
11194
- return Promise.resolve(_this8._swapProvider.createSwap(fromCoin, toCoin, fromAmount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId)).then(function (result) {
11751
+ return Promise.resolve((swapCreationInfo.fixed ? _this8._fixedSwapProvider : _this8._swapProvider).createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive)).then(function (result) {
11195
11752
  var _exit;
11196
11753
  function _temp6(_result8) {
11197
11754
  if (_exit) return _result8;
@@ -11221,7 +11778,7 @@ var PublicSwapService = /*#__PURE__*/function () {
11221
11778
  if (result.result && result != null && result.swapId) {
11222
11779
  var _temp4 = function _temp4() {
11223
11780
  var _result$fromCurrencyE;
11224
- // TODO: feature, cirtical] add GA event. task_id=tbd
11781
+ // TODO: feature, cirtical] add GA event. task_id=091004f1b6b748b29ddece6a130df904
11225
11782
  EventBusInstance.dispatch(PublicSwapService.PUBLIC_SWAP_CREATED_EVENT, null, fromCoin.ticker, toCoin.ticker, _fromAmountFiat);
11226
11783
  var toReturn = {
11227
11784
  result: true,
@@ -11301,7 +11858,7 @@ var PublicSwapService = /*#__PURE__*/function () {
11301
11858
  var _this9 = this;
11302
11859
  var loggerSource = "getPublicExistingSwapDetailsAndStatus";
11303
11860
  return Promise.resolve(_catch(function () {
11304
- return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts(_this9._swapProvider, swapIds)).then(function (result) {
11861
+ return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts([_this9._swapProvider, _this9._fixedSwapProvider], swapIds)).then(function (result) {
11305
11862
  if (!(result != null && result.result)) {
11306
11863
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11307
11864
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -11396,18 +11953,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11396
11953
 
11397
11954
  /**
11398
11955
  * @param coinOrTicker {Coin|string}
11956
+ * @param [isFixed=true] {boolean} rate type
11399
11957
  * @return {string} icon URL (ready to use)
11400
11958
  */;
11401
- _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker) {
11402
- return this._swapProvider.getIconUrl(coinOrTicker);
11959
+ _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker, isFixed) {
11960
+ // TODO: [feature, high] improve this logic - currently hacked to show better icons from fixed provider. task_id=3b6b8c2a9df04a86aaff2e070424b64f
11961
+ return this._fixedSwapProvider.getIconUrl(coinOrTicker);
11403
11962
  }
11404
11963
 
11405
11964
  /**
11406
11965
  * @param ticker {string}
11966
+ * @param [fixed=false] {boolean}
11407
11967
  * @return {Coin|null}
11408
11968
  */;
11409
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
11410
- return this._swapProvider.getCoinByTickerIfPresent(ticker);
11969
+ _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker, fixed) {
11970
+ if (fixed === void 0) {
11971
+ fixed = false;
11972
+ }
11973
+ return !fixed ? this._swapProvider.getCoinByTickerIfPresent(ticker) : this._fixedSwapProvider.getCoinByTickerIfPresent(ticker);
11411
11974
  }
11412
11975
 
11413
11976
  /**
@@ -11420,8 +11983,18 @@ var PublicSwapService = /*#__PURE__*/function () {
11420
11983
  var _this11 = this;
11421
11984
  return Promise.resolve(_catch(function () {
11422
11985
  return Promise.resolve(_this11._swapProvider.getCoinToUSDTRate(asset)).then(function (result) {
11423
- var _result$rate;
11424
- return (_result$rate = result == null ? void 0 : result.rate) != null ? _result$rate : null;
11986
+ function _temp10() {
11987
+ var _result$rate, _result13;
11988
+ return (_result$rate = (_result13 = result) == null ? void 0 : _result13.rate) != null ? _result$rate : null;
11989
+ }
11990
+ var _temp9 = function (_result14) {
11991
+ if (((_result14 = result) == null ? void 0 : _result14.rate) == null) {
11992
+ return Promise.resolve(_this11._fixedSwapProvider.getCoinToUSDTRate(asset)).then(function (_this11$_fixedSwapPro) {
11993
+ result = _this11$_fixedSwapPro;
11994
+ });
11995
+ }
11996
+ }();
11997
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
11425
11998
  });
11426
11999
  }, function (e) {
11427
12000
  improveAndRethrow(e, "getAssetToUsdtRate");
@@ -11433,12 +12006,16 @@ var PublicSwapService = /*#__PURE__*/function () {
11433
12006
  /**
11434
12007
  * @param asset {Coin}
11435
12008
  * @param address {string}
12009
+ * @param [fixed=false] {boolean}
11436
12010
  * @return {boolean}
11437
12011
  */
11438
12012
  ;
11439
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
12013
+ _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address, fixed) {
12014
+ if (fixed === void 0) {
12015
+ fixed = false;
12016
+ }
11440
12017
  try {
11441
- return this._swapProvider.isAddressValidForAsset(asset, address);
12018
+ return !fixed ? this._swapProvider.isAddressValidForAsset(asset, address) : this._fixedSwapProvider.isAddressValidForAsset(asset, address);
11442
12019
  } catch (e) {
11443
12020
  improveAndRethrow(e, "isAddressValidForAsset");
11444
12021
  }
@@ -11448,20 +12025,24 @@ var PublicSwapService = /*#__PURE__*/function () {
11448
12025
  * Retrieves token by contract address.
11449
12026
  *
11450
12027
  * @param addressString {string}
12028
+ * @param [fixed=false] {boolean}
11451
12029
  * @return {Promise<Coin|null>}
11452
12030
  */;
11453
- _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString) {
12031
+ _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString, fixed) {
12032
+ if (fixed === void 0) {
12033
+ fixed = false;
12034
+ }
11454
12035
  try {
11455
12036
  var _exit3;
11456
12037
  var _this12 = this;
11457
- var _temp10 = _catch(function () {
12038
+ var _temp12 = _catch(function () {
11458
12039
  if (!addressString) {
11459
- var _temp9 = null;
12040
+ var _temp11 = null;
11460
12041
  _exit3 = 1;
11461
- return _temp9;
12042
+ return _temp11;
11462
12043
  }
11463
12044
  var addressLowerCase = addressString.toLowerCase();
11464
- return Promise.resolve(_this12._swapProvider.getAllSupportedCurrencies()).then(function (allCoins) {
12045
+ return Promise.resolve((fixed ? _this12._fixedSwapProvider : _this12._swapProvider).getAllSupportedCurrencies()).then(function (allCoins) {
11465
12046
  if (allCoins.result) {
11466
12047
  var _allCoins$coins$find = allCoins.coins.find(function (coin) {
11467
12048
  return coin.tokenAddress && coin.tokenAddress.toLowerCase() === addressLowerCase;
@@ -11473,21 +12054,25 @@ var PublicSwapService = /*#__PURE__*/function () {
11473
12054
  }, function (e) {
11474
12055
  Logger.logError(e, "getTokenByContractAddress");
11475
12056
  });
11476
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(function (_result13) {
11477
- return _exit3 ? _result13 : null;
11478
- }) : _exit3 ? _temp10 : null);
12057
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(function (_result15) {
12058
+ return _exit3 ? _result15 : null;
12059
+ }) : _exit3 ? _temp12 : null);
11479
12060
  } catch (e) {
11480
12061
  return Promise.reject(e);
11481
12062
  }
11482
12063
  }
11483
12064
  /**
11484
12065
  * @param asset {Coin}
12066
+ * @param [fixed=false] {boolean}
11485
12067
  * @return {string|null}
11486
12068
  */
11487
12069
  ;
11488
- _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset) {
12070
+ _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset, fixed) {
12071
+ if (fixed === void 0) {
12072
+ fixed = false;
12073
+ }
11489
12074
  try {
11490
- return this._swapProvider.getExtraIdNameIfPresent(asset);
12075
+ return (fixed ? this._fixedSwapProvider : this._swapProvider).getExtraIdNameIfPresent(asset);
11491
12076
  } catch (e) {
11492
12077
  improveAndRethrow(e, "getExtraIdNameIfPresentForAsset");
11493
12078
  }