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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/coverage/clover.xml +6428 -1864
  2. package/coverage/coverage-final.json +157 -95
  3. package/coverage/index.html +339 -84
  4. package/coverage/{rabbit-ui-kit → ui-kit}/index.html +3 -3
  5. package/coverage/{rabbit-ui-kit → ui-kit}/index.js.html +3 -3
  6. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/axiosAdapter.js.html +3 -3
  7. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/index.html +3 -3
  8. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/qrUtils.js.html +3 -3
  9. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/amountUtils.js.html +3 -3
  10. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/errorUtils.js.html +3 -3
  11. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/apiGroups.js.html +3 -3
  12. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/index.html +3 -3
  13. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/ipAddressProviders.js.html +3 -3
  14. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/fiatCurrenciesService.js.html +3 -3
  15. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/globalConstants.jsx.html +3 -3
  16. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/index.html +3 -3
  17. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/blockchain.js.html +3 -3
  18. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/coin.js.html +3 -3
  19. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/index.html +3 -3
  20. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/protocol.js.html +3 -3
  21. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/cache.js.html +8 -8
  22. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/emailAPI.js.html +3 -3
  23. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/index.html +3 -3
  24. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/index.html +3 -3
  25. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/logger.js.html +3 -3
  26. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/logsStorage.js.html +3 -3
  27. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/postponeExecution.js.html +3 -3
  28. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/safeStringify.js.html +3 -3
  29. package/coverage/{rabbit-ui-kit → ui-kit}/src/index.html +3 -3
  30. package/coverage/{rabbit-ui-kit → ui-kit}/src/index.js.html +3 -3
  31. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js.html +3 -3
  32. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cachedRobustExternalApiCallerService.js.html +3 -3
  33. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cancelProcessing.js.html +3 -3
  34. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/concurrentCalculationsMetadataHolder.js.html +3 -3
  35. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/externalApiProvider.js.html +3 -3
  36. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/externalServicesStatsCollector.js.html +3 -3
  37. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/index.html +3 -3
  38. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/robustExternalAPICallerService.js.html +3 -3
  39. package/coverage/ui-kit/src/swaps-lib/external-apis/index.html +146 -0
  40. package/coverage/ui-kit/src/swaps-lib/external-apis/letsExchangeSwapProvider.js.html +1456 -0
  41. package/coverage/ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +1390 -0
  42. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/external-apis/swapspaceSwapProvider.js.html +45 -585
  43. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/baseSwapCreationInfo.js.html +3 -3
  44. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/existingSwap.js.html +3 -3
  45. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/existingSwapWithFiatData.js.html +3 -3
  46. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/index.html +3 -3
  47. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/services/index.html +7 -7
  48. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/services/publicSwapService.js.html +233 -50
  49. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/utils/index.html +13 -13
  50. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/utils/swapUtils.js.html +121 -46
  51. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowIcon.jsx.html +3 -3
  52. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowTosca.jsx.html +3 -3
  53. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowWhite.jsx.html +3 -3
  54. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/darkRectangle.jsx.html +3 -3
  55. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/determinedError.jsx.html +3 -3
  56. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx.html +3 -3
  57. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/index.html +3 -3
  58. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/infoIcon.jsx.html +3 -3
  59. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx.html +3 -3
  60. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx.html +3 -3
  61. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/walletIcon.jsx.html +3 -3
  62. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetIcon/AssetIcon.jsx.html +3 -3
  63. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetIcon/index.html +3 -3
  64. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx.html +3 -3
  65. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetSelection/index.html +3 -3
  66. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx.html +3 -3
  67. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/BackgroundTitle/index.html +3 -3
  68. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx.html +3 -3
  69. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/InformationMessage/index.html +3 -3
  70. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Input/Input.jsx.html +3 -3
  71. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Input/index.html +3 -3
  72. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/LoadingDots/LoadingDots.jsx.html +3 -3
  73. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/LoadingDots/index.html +3 -3
  74. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx.html +3 -3
  75. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/NoticeIcon/index.html +3 -3
  76. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/QrCode/QrCode.jsx.html +52 -7
  77. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/QrCode/index.html +7 -7
  78. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx.html +3 -3
  79. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/RateSelector/index.html +3 -3
  80. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/SupportChat/SupportChat.jsx.html +3 -3
  81. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/SupportChat/index.html +3 -3
  82. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Textarea/Textarea.jsx.html +3 -3
  83. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Textarea/index.html +3 -3
  84. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx.html +3 -3
  85. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TitleBox/index.html +3 -3
  86. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx.html +3 -3
  87. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Tooltip/index.html +3 -3
  88. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx.html +3 -3
  89. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TwoLinesOfText/index.html +3 -3
  90. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Validation/Validation.jsx.html +3 -3
  91. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Validation/index.html +3 -3
  92. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Button/Button.jsx.html +3 -3
  93. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Button/index.html +3 -3
  94. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Close/Close.jsx.html +3 -3
  95. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Close/index.html +3 -3
  96. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx.html +3 -3
  97. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/LinkButton/index.html +3 -3
  98. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx.html +3 -3
  99. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/RadioButtonWithText/index.html +3 -3
  100. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx.html +3 -3
  101. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/AmountInput/index.html +3 -3
  102. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx.html +3 -3
  103. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/CoinPicker/index.html +3 -3
  104. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx.html +3 -3
  105. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/LineWithIconLink/index.html +3 -3
  106. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx.html +3 -3
  107. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/TitledLineWithIconLink/index.html +3 -3
  108. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx.html +3 -3
  109. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/CoinPickerDialogStep/index.html +3 -3
  110. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/Dialog.jsx.html +3 -3
  111. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx.html +3 -3
  112. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogButtons/index.html +3 -3
  113. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx.html +3 -3
  114. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogStep/index.html +3 -3
  115. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/index.html +3 -3
  116. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx.html +129 -36
  117. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/SwapForm/index.html +7 -7
  118. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx.html +3 -3
  119. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/templates/DeterminedErrorDialogStep/index.html +3 -3
  120. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/index.html +3 -3
  121. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useCallHandlingErrors.js.html +3 -3
  122. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useIsHydrated.js.html +3 -3
  123. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useReferredState.js.html +3 -3
  124. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/index.html +3 -3
  125. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/inputValueProviders.js.html +3 -3
  126. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/textUtils.js.html +3 -3
  127. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/uiUtils.js.html +3 -3
  128. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/urlQueryUtils.js.html +3 -3
  129. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/BackgroundTitle.stories.jsx.html +3 -3
  130. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/LinesOfText.stories.jsx.html +3 -3
  131. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/LoadingDots.stories.jsx.html +3 -3
  132. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/QrCode.stories.jsx.html +3 -3
  133. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/RateSelector.stories.jsx.html +3 -3
  134. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/Validation.stories.jsx.html +3 -3
  135. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/Button.stories.jsx.html +3 -3
  136. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/Close.stories.jsx.html +3 -3
  137. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/LinkButton.stories.jsx.html +3 -3
  138. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/index.html +3 -3
  139. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/index.html +3 -3
  140. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/LineWithIconLink.stories.jsx.html +3 -3
  141. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/TitledLineWithIconLink.stories.jsx.html +3 -3
  142. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/index.html +3 -3
  143. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/Dialog.stories.jsx.html +3 -3
  144. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogButtons/DialogButtons.stories.jsx.html +3 -3
  145. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogButtons/index.html +3 -3
  146. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogStep/DialogStep.stories.jsx.html +3 -3
  147. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogStep/index.html +3 -3
  148. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/index.html +3 -3
  149. package/coverage/{rabbit-ui-kit → ui-kit}/stories/stubs/exampleContent.jsx.html +3 -3
  150. package/coverage/{rabbit-ui-kit → ui-kit}/stories/stubs/index.html +3 -3
  151. package/coverage/{rabbit-ui-kit → ui-kit}/stories/templates/DeterminedErrorDialogStep.stories.jsx.html +3 -3
  152. package/coverage/{rabbit-ui-kit → ui-kit}/stories/templates/index.html +3 -3
  153. package/coverage/ui-kit/storybook-static/124.c2d01e5e.iframe.bundle.js.html +85 -0
  154. package/coverage/ui-kit/storybook-static/138.56b7edc4.iframe.bundle.js.html +85 -0
  155. package/coverage/ui-kit/storybook-static/312.6f62bbd9.iframe.bundle.js.html +85 -0
  156. package/coverage/ui-kit/storybook-static/341.57a15f57.iframe.bundle.js.html +85 -0
  157. package/coverage/ui-kit/storybook-static/370.73bb343e.iframe.bundle.js.html +85 -0
  158. package/coverage/ui-kit/storybook-static/595.2e40d981.iframe.bundle.js.html +85 -0
  159. package/coverage/ui-kit/storybook-static/607.3ea32459.iframe.bundle.js.html +85 -0
  160. package/coverage/ui-kit/storybook-static/609.8c79ec77.iframe.bundle.js.html +85 -0
  161. package/coverage/ui-kit/storybook-static/666.09fdc1d7.iframe.bundle.js.html +85 -0
  162. package/coverage/ui-kit/storybook-static/797.c87cdf19.iframe.bundle.js.html +85 -0
  163. package/coverage/ui-kit/storybook-static/822.4bc0ebce.iframe.bundle.js.html +85 -0
  164. package/coverage/ui-kit/storybook-static/833.08e3ebb6.iframe.bundle.js.html +85 -0
  165. package/coverage/ui-kit/storybook-static/862.bf6bfe62.iframe.bundle.js.html +85 -0
  166. package/coverage/ui-kit/storybook-static/87.0a1bfeb1.iframe.bundle.js.html +85 -0
  167. package/coverage/ui-kit/storybook-static/893.4b09f929.iframe.bundle.js.html +85 -0
  168. package/coverage/ui-kit/storybook-static/996.846a677b.iframe.bundle.js.html +85 -0
  169. package/coverage/ui-kit/storybook-static/atoms-BackgroundTitle-stories.1a5386a1.iframe.bundle.js.html +85 -0
  170. package/coverage/ui-kit/storybook-static/atoms-LinesOfText-stories.7043a48b.iframe.bundle.js.html +85 -0
  171. package/coverage/ui-kit/storybook-static/atoms-LoadingDots-stories.091245c7.iframe.bundle.js.html +85 -0
  172. package/coverage/ui-kit/storybook-static/atoms-QrCode-stories.e10363b6.iframe.bundle.js.html +85 -0
  173. package/coverage/ui-kit/storybook-static/atoms-RateSelector-stories.af208e9a.iframe.bundle.js.html +85 -0
  174. package/coverage/ui-kit/storybook-static/atoms-Validation-stories.d561b311.iframe.bundle.js.html +85 -0
  175. package/coverage/ui-kit/storybook-static/atoms-buttons-Button-stories.e8e6b930.iframe.bundle.js.html +85 -0
  176. package/coverage/ui-kit/storybook-static/atoms-buttons-Close-stories.0a902a7c.iframe.bundle.js.html +85 -0
  177. package/coverage/ui-kit/storybook-static/atoms-buttons-LinkButton-stories.ca93ab6b.iframe.bundle.js.html +85 -0
  178. package/coverage/ui-kit/storybook-static/index.html +596 -0
  179. package/coverage/ui-kit/storybook-static/main.41f410f2.iframe.bundle.js.html +85 -0
  180. package/coverage/ui-kit/storybook-static/molecules-LineWithIconLink-stories.9721a18c.iframe.bundle.js.html +85 -0
  181. package/coverage/ui-kit/storybook-static/molecules-TitledLineWithIconLink-stories.1383fe3f.iframe.bundle.js.html +85 -0
  182. package/coverage/ui-kit/storybook-static/organisms-Dialog-Dialog-stories.4e6da717.iframe.bundle.js.html +85 -0
  183. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogButtons-DialogButtons-stories.6f45ae6e.iframe.bundle.js.html +85 -0
  184. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogStep-DialogStep-stories.74896048.iframe.bundle.js.html +85 -0
  185. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/index.html +116 -0
  186. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/preview.js.html +118 -0
  187. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/formatter-SWP5E3XI.mjs.html +118 -0
  188. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/index.html +116 -0
  189. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.html +116 -0
  190. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.js.html +118 -0
  191. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.html +116 -0
  192. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.modern.js.html +118 -0
  193. package/coverage/ui-kit/storybook-static/runtime~main.ad918f38.iframe.bundle.js.html +85 -0
  194. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/index.html +116 -0
  195. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/manager-bundle.js.html +94 -0
  196. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/index.html +116 -0
  197. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/manager-bundle.js.html +121 -0
  198. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/index.html +116 -0
  199. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js.html +274 -0
  200. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/index.html +116 -0
  201. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/manager-bundle.js.html +94 -0
  202. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/index.html +116 -0
  203. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/manager-bundle.js.html +94 -0
  204. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/index.html +116 -0
  205. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/manager-bundle.js.html +94 -0
  206. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/index.html +116 -0
  207. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/manager-bundle.js.html +121 -0
  208. package/coverage/ui-kit/storybook-static/sb-addons/links-0/index.html +116 -0
  209. package/coverage/ui-kit/storybook-static/sb-addons/links-0/manager-bundle.js.html +94 -0
  210. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/index.html +116 -0
  211. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/manager-bundle.js.html +1588 -0
  212. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/index.html +116 -0
  213. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/manager-bundle.js.html +94 -0
  214. package/coverage/ui-kit/storybook-static/sb-manager/WithTooltip-V3YHNWJZ-LVYLGZW2.js.html +88 -0
  215. package/coverage/ui-kit/storybook-static/sb-manager/chunk-2IXBUOFS.js.html +106 -0
  216. package/coverage/ui-kit/storybook-static/sb-manager/chunk-INSKDKQB.js.html +1129 -0
  217. package/coverage/ui-kit/storybook-static/sb-manager/chunk-NGTUFCUO.js.html +112 -0
  218. package/coverage/ui-kit/storybook-static/sb-manager/chunk-UUEAOBSN.js.html +1303 -0
  219. package/coverage/ui-kit/storybook-static/sb-manager/chunk-ZEU7PDD3.js.html +88 -0
  220. package/coverage/ui-kit/storybook-static/sb-manager/formatter-SWP5E3XI-7BGIK6BL.js.html +553 -0
  221. package/coverage/ui-kit/storybook-static/sb-manager/globals-module-info.js.html +88 -0
  222. package/coverage/ui-kit/storybook-static/sb-manager/globals.js.html +88 -0
  223. package/coverage/ui-kit/storybook-static/sb-manager/index.html +281 -0
  224. package/coverage/ui-kit/storybook-static/sb-manager/index.js.html +88 -0
  225. package/coverage/ui-kit/storybook-static/sb-manager/runtime.js.html +88 -0
  226. package/coverage/ui-kit/storybook-static/sb-manager/syntaxhighlighter-V7JZZA35-DXZCI2WR.js.html +88 -0
  227. package/coverage/ui-kit/storybook-static/sb-preview/globals.js.html +88 -0
  228. package/coverage/ui-kit/storybook-static/sb-preview/index.html +131 -0
  229. package/coverage/ui-kit/storybook-static/sb-preview/runtime.js.html +421 -0
  230. package/coverage/ui-kit/storybook-static/templates-DeterminedErrorDialogStep-stories.3cc14214.iframe.bundle.js.html +85 -0
  231. package/dist/index.cjs +1156 -571
  232. package/dist/index.cjs.map +1 -1
  233. package/dist/index.css +1 -1
  234. package/dist/index.css.map +1 -1
  235. package/dist/index.modern.js +775 -328
  236. package/dist/index.modern.js.map +1 -1
  237. package/dist/index.module.js +1156 -571
  238. package/dist/index.module.js.map +1 -1
  239. package/dist/index.umd.js +1156 -571
  240. package/dist/index.umd.js.map +1 -1
  241. package/package.json +1 -1
  242. package/src/swaps-lib/external-apis/letsExchangeSwapProvider.js +457 -0
  243. package/src/swaps-lib/external-apis/swapProvider.js +246 -20
  244. package/src/swaps-lib/external-apis/swapspaceSwapProvider.js +20 -200
  245. package/src/swaps-lib/services/publicSwapService.js +105 -44
  246. package/src/swaps-lib/test/external-apis/swapProvider/removeProtocolNameFromCoinName.test.js +142 -0
  247. package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +2 -2
  248. package/src/swaps-lib/utils/swapUtils.js +63 -38
  249. package/src/ui-kit/components/atoms/QrCode/QrCode.jsx +16 -1
  250. package/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx +61 -30
  251. package/src/ui-kit/components/organisms/SwapForm/swap-form.module.scss +1 -1
  252. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/index.html +0 -131
  253. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +0 -712
package/dist/index.umd.js CHANGED
@@ -1645,7 +1645,7 @@
1645
1645
  return Logger;
1646
1646
  }();
1647
1647
 
1648
- function _catch$d(body, recover) {
1648
+ function _catch$f(body, recover) {
1649
1649
  try {
1650
1650
  var result = body();
1651
1651
  } catch (e) {
@@ -1661,7 +1661,7 @@
1661
1661
  setState = _useState[1];
1662
1662
  return React.useCallback(function (functionToBeCalled, event) {
1663
1663
  try {
1664
- var _temp = _catch$d(function () {
1664
+ var _temp = _catch$f(function () {
1665
1665
  return Promise.resolve(functionToBeCalled(event)).then(function () {});
1666
1666
  }, function (error) {
1667
1667
  Logger.logError(error, (functionToBeCalled == null ? void 0 : functionToBeCalled.name) || "errorBoundaryTrigger", "Caught by ErrorBoundary");
@@ -4599,6 +4599,15 @@
4599
4599
  * @return {string|null}
4600
4600
  */
4601
4601
 
4602
+ /**
4603
+ * Callback to handle isFixed flag change.
4604
+ *
4605
+ * @function
4606
+ * @name onIsFixedChange
4607
+ * @param {boolean} isFixedNewValue - new value
4608
+ * @return {void}
4609
+ */
4610
+
4602
4611
  /**
4603
4612
  * Function validating addresses.
4604
4613
  * By default, will treat any addresses as valid.
@@ -4608,6 +4617,7 @@
4608
4617
  * @name validateAddressByTicker
4609
4618
  * @param {string} ticker - Ticker symbol of the asset.
4610
4619
  * @param {string} address - Address to be validated
4620
+ * @param {boolean} isFixed - Is swap rate mode = fixed
4611
4621
  * @return {Promise<boolean>}
4612
4622
  */
4613
4623
 
@@ -4655,16 +4665,18 @@
4655
4665
  * @param {boolean} [props.formHasFiat] - Indicates if the form supports fiat currency.
4656
4666
  * @param {string|null} [props.termsOfUseUrl] - Terms of use URL, shown only if both terms & privacy policy passed.
4657
4667
  * @param {string|null} [props.privacyPolicyUrl] - Privacy policy of use URL, shown only if both terms & privacy policy passed.
4668
+ * @param {string} props.recipientAddressExtraIdName - Extra ID name for the recipient address.
4669
+ * @param {string} props.refundAddressExtraIdName - Extra ID name for the refund address.
4658
4670
  * @param {object} [props.translations] - Object containing translations, default English texts will be used if omitted.
4659
4671
  * @param {string} props.swapSeparatorIconSrc - Source URL for the swap separator icon.
4660
4672
  * @param {boolean} props.swapButtonAlwaysActive - Setting that allows the form state to proceed to the next step regardless of validity.
4661
- * @param {getExtraIdNameByTicker} props.getExtraIdNameByTicker - Function returning extraId name for asset
4662
4673
  * @param {validateAddressByTicker} [props.validateAddressByTicker] - Function validating address
4674
+ * @param {onIsFixedChange} [props.onIsFixedChange] - callback for changed isFixed
4663
4675
  * @return {JSX.Element} Rendered SwapForm component.
4664
4676
  * @constructor
4665
4677
  */
4666
4678
 
4667
- function _catch$c(body, recover) {
4679
+ function _catch$e(body, recover) {
4668
4680
  try {
4669
4681
  var result = body();
4670
4682
  } catch (e) {
@@ -4676,7 +4688,7 @@
4676
4688
  return result;
4677
4689
  }
4678
4690
  var SwapForm = function SwapForm(_ref) {
4679
- var _isFixedRate$current2, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5, _isFixedRate$current3;
4691
+ var _isFixedRate$current2, _isFixedRate$current3, _maximumAmount$curren4, _maximumAmount$curren5, _maximumAmount$curren6, _minimalAmount$curren5;
4680
4692
  var sendingAssetTicker = _ref.sendingAssetTicker,
4681
4693
  receivingAssetTicker = _ref.receivingAssetTicker,
4682
4694
  _ref$sendingAssetDeci = _ref.sendingAssetDecimalCount,
@@ -4719,7 +4731,7 @@
4719
4731
  _ref$formHasBalance = _ref.formHasBalance,
4720
4732
  formHasBalance = _ref$formHasBalance === void 0 ? false : _ref$formHasBalance,
4721
4733
  _ref$retrieveSwapDeta = _ref.retrieveSwapDetails,
4722
- retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll) {
4734
+ retrieveSwapDetails = _ref$retrieveSwapDeta === void 0 ? function (sendingAssetTicker, receivingAssetTicker, amount, isSwapAll, editedLastInput) {
4723
4735
  return Promise.resolve();
4724
4736
  } : _ref$retrieveSwapDeta,
4725
4737
  _ref$retrieveInitialS = _ref.retrieveInitialSwapData,
@@ -4746,17 +4758,17 @@
4746
4758
  termsOfUseUrl = _ref$termsOfUseUrl === void 0 ? null : _ref$termsOfUseUrl,
4747
4759
  _ref$privacyPolicyUrl = _ref.privacyPolicyUrl,
4748
4760
  privacyPolicyUrl = _ref$privacyPolicyUrl === void 0 ? null : _ref$privacyPolicyUrl,
4749
- _ref$getExtraIdNameBy = _ref.getExtraIdNameByTicker,
4750
- getExtraIdNameByTicker = _ref$getExtraIdNameBy === void 0 ? function (ticker) {
4751
- return null;
4752
- } : _ref$getExtraIdNameBy,
4753
4761
  _ref$validateAddressB = _ref.validateAddressByTicker,
4754
- validateAddressByTicker = _ref$validateAddressB === void 0 ? function (ticker) {
4762
+ validateAddressByTicker = _ref$validateAddressB === void 0 ? function () {
4755
4763
  return false;
4756
4764
  } : _ref$validateAddressB,
4757
4765
  swapSeparatorIconSrc = _ref.swapSeparatorIconSrc,
4758
4766
  _ref$swapButtonAlways = _ref.swapButtonAlwaysActive,
4759
4767
  swapButtonAlwaysActive = _ref$swapButtonAlways === void 0 ? false : _ref$swapButtonAlways,
4768
+ _ref$onIsFixedChange = _ref.onIsFixedChange,
4769
+ onIsFixedChange = _ref$onIsFixedChange === void 0 ? function () {} : _ref$onIsFixedChange,
4770
+ recipientAddressExtraIdName = _ref.recipientAddressExtraIdName,
4771
+ refundAddressExtraIdName = _ref.refundAddressExtraIdName,
4760
4772
  _ref$translations = _ref.translations,
4761
4773
  translations = _ref$translations === void 0 ? {
4762
4774
  swapAllButtonTitles: {
@@ -4787,7 +4799,9 @@
4787
4799
  addressTitle: "Recepient address",
4788
4800
  refundAddressTitle: "Refund address",
4789
4801
  extraIdPlaceholder: "(optional)",
4802
+ refundAddressExtraIdTitle: "Refund extra ID (MEMO):",
4790
4803
  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.",
4804
+ receivingAddressExtraIdTitle: "Destination extra ID (MEMO):",
4791
4805
  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."
4792
4806
  },
4793
4807
  rateSelector: {
@@ -4798,8 +4812,6 @@
4798
4812
  } : _ref$translations;
4799
4813
  var DETAIL_REFRESH_INTERVAL_MS = 1.5 * 60000;
4800
4814
  var IS_FIXED_BY_DEFAULT = false;
4801
-
4802
- // Updating the states below will insert the new value into the send or receive input field
4803
4815
  var _useState = React.useState(preservedAmount != null ? preservedAmount : null),
4804
4816
  updateSendInputTo = _useState[0],
4805
4817
  setUpdateSendInputTo = _useState[1];
@@ -4839,8 +4851,6 @@
4839
4851
  var _useState10 = React.useState(false),
4840
4852
  readyToSwap = _useState10[0],
4841
4853
  setReadyToSwap = _useState10[1]; // Basically a param that enables/disables the "Next" button
4842
- // TODO: [refactoring, moderate] instead of handling preservedAmount at a lot of cases below, just
4843
- // write single useEffect setting sendAssetAmount to the=is passed value and simplify the logic below. task_id=6453251e49b04c5e88a3cc771479ffb5
4844
4854
  var _useState11 = React.useState(preservedAmount == null || String(preservedAmount) === "0"),
4845
4855
  isAmountZero = _useState11[0],
4846
4856
  setIsAmountZero = _useState11[1];
@@ -4850,21 +4860,24 @@
4850
4860
  var _useReferredState5 = useReferredState(null),
4851
4861
  isFixedRate = _useReferredState5[0],
4852
4862
  setIsFixedRate = _useReferredState5[1];
4853
- var _useState12 = React.useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4854
- confirmButtonTo = _useState12[0],
4855
- setConfirmButtonTo = _useState12[1];
4856
- var _useState13 = React.useState(),
4857
- transactionFee = _useState13[0],
4858
- setTransactionFee = _useState13[1];
4859
- var _useState14 = React.useState(true),
4860
- balanceValid = _useState14[0],
4861
- setBalanceValid = _useState14[1]; // Whether the amount is less than total balance
4863
+ var _useState12 = React.useState(false),
4864
+ isLastEditedReceiving = _useState12[0],
4865
+ setIsLastEditedReceiving = _useState12[1];
4866
+ var _useState13 = React.useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4867
+ confirmButtonTo = _useState13[0],
4868
+ setConfirmButtonTo = _useState13[1];
4869
+ var _useState14 = React.useState(),
4870
+ transactionFee = _useState14[0],
4871
+ setTransactionFee = _useState14[1];
4872
+ var _useState15 = React.useState(true),
4873
+ balanceValid = _useState15[0],
4874
+ setBalanceValid = _useState15[1]; // Whether the amount is less than total balance
4862
4875
  var _useReferredState6 = useReferredState(null),
4863
4876
  isSwapAll = _useReferredState6[0],
4864
4877
  setIsSwapAll = _useReferredState6[1];
4865
- var _useState15 = React.useState([]),
4866
- swapAllButtonLoaderReSetter = _useState15[0],
4867
- setSwapAllButtonLoaderReSetter = _useState15[1];
4878
+ var _useState16 = React.useState([]),
4879
+ swapAllButtonLoaderReSetter = _useState16[0],
4880
+ setSwapAllButtonLoaderReSetter = _useState16[1];
4868
4881
  var _useReferredState7 = useReferredState(null),
4869
4882
  dataUpdateTimeoutId = _useReferredState7[0],
4870
4883
  setDataUpdateTimeoutId = _useReferredState7[1];
@@ -4880,9 +4893,9 @@
4880
4893
  var _useReferredState11 = useReferredState(false),
4881
4894
  isRecipientAddressValid = _useReferredState11[0],
4882
4895
  setIsRecipientAddressValid = _useReferredState11[1];
4883
- var _useState16 = React.useState(false),
4884
- isRefundAddressRequired = _useState16[0],
4885
- setIsRefundAddressRequired = _useState16[1];
4896
+ var _useState17 = React.useState(false),
4897
+ isRefundAddressRequired = _useState17[0],
4898
+ setIsRefundAddressRequired = _useState17[1];
4886
4899
  var _useReferredState12 = useReferredState(""),
4887
4900
  refundAddress = _useReferredState12[0],
4888
4901
  setRefundAddress = _useReferredState12[1];
@@ -4897,9 +4910,8 @@
4897
4910
  var recalculationDelayOnTyping = 1000;
4898
4911
  var isAddressFieldEnabled = !formHasBalance;
4899
4912
  var displayRateSelector = !formHasBalance;
4900
- var recipientAddressExtraIdName = getExtraIdNameByTicker(receivingAssetTicker);
4901
- var refundAddressExtraIdName = getExtraIdNameByTicker(sendingAssetTicker);
4902
4913
  var handleSendAssetAmountChange = function handleSendAssetAmountChange(amount) {
4914
+ setIsLastEditedReceiving(false);
4903
4915
  if (amount != null && amount !== "") {
4904
4916
  setUpdateReceiveInputTo(AmountUtils.trim(bignumber_js.BigNumber(amount).times(swapRate), receivingAssetDecimalCount));
4905
4917
  } else {
@@ -4908,6 +4920,7 @@
4908
4920
  setSendAssetAmount(amount);
4909
4921
  };
4910
4922
  var handleReceiveAssetAmountChange = function handleReceiveAssetAmountChange(amount) {
4923
+ setIsLastEditedReceiving(true);
4911
4924
  var sendAssetAmount = "";
4912
4925
  if (amount != null && amount !== "") {
4913
4926
  sendAssetAmount = AmountUtils.trim(bignumber_js.BigNumber(amount).div(swapRate), sendingAssetDecimalCount);
@@ -5008,7 +5021,7 @@
5008
5021
  }
5009
5022
  (function () {
5010
5023
  try {
5011
- return _catch$c(function () {
5024
+ return _catch$e(function () {
5012
5025
  var _minimalAmount$curren4, _maximumAmount$curren3, _isFixedRate$current;
5013
5026
  var dataMemento = {
5014
5027
  rate: swapRate,
@@ -5026,7 +5039,7 @@
5026
5039
  setIsSameCoins(false);
5027
5040
  setIsPairSupported(true);
5028
5041
  setIsSwapCalculated(false);
5029
- return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT)).then(function (response) {
5042
+ 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) {
5030
5043
  if (!isSwapAll.current && String(amount) !== String(isForPreserved && sendAssetAmount.current == null ? preservedAmount : sendAssetAmount.current)) {
5031
5044
  // Means amount changed and we no more need to do this exact calculation
5032
5045
  return;
@@ -5074,7 +5087,7 @@
5074
5087
  }
5075
5088
  (function () {
5076
5089
  try {
5077
- return _catch$c(function () {
5090
+ return _catch$e(function () {
5078
5091
  setIsLoading(true);
5079
5092
  setMinimalAmount(null);
5080
5093
  setMaximumAmount(null);
@@ -5124,6 +5137,10 @@
5124
5137
  }
5125
5138
  // eslint-disable-next-line react-hooks/exhaustive-deps
5126
5139
  }, [isSwapAll.current]);
5140
+ React.useEffect(function () {
5141
+ onIsFixedChange(isFixedRate.current);
5142
+ // eslint-disable-next-line react-hooks/exhaustive-deps
5143
+ }, [isFixedRate.current]);
5127
5144
  React.useEffect(function () {
5128
5145
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current || preservedAmount || null));
5129
5146
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -5172,7 +5189,7 @@
5172
5189
  };
5173
5190
  if (!receivingAssetTicker) return;
5174
5191
  var _temp = recipientAddress.current === "";
5175
- return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current)).then(_temp2);
5192
+ return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current, isFixedRate.current)).then(_temp2);
5176
5193
  } catch (e) {
5177
5194
  Promise.reject(e);
5178
5195
  }
@@ -5187,7 +5204,7 @@
5187
5204
  };
5188
5205
  if (!sendingAssetTicker || !isRefundAddressRequired) return;
5189
5206
  var _temp3 = refundAddress.current === "";
5190
- return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current)).then(_temp4);
5207
+ return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current, isFixedRate.current)).then(_temp4);
5191
5208
  } catch (e) {
5192
5209
  Promise.reject(e);
5193
5210
  }
@@ -5212,8 +5229,6 @@
5212
5229
  };
5213
5230
  // eslint-disable-next-line react-hooks/exhaustive-deps
5214
5231
  }, [readyToSwap]);
5215
-
5216
- // TODO: [refactoring, critical] this code looks like a hack related to task_id=6e328d39063142b7b9fa01d497e616da
5217
5232
  React.useEffect(function () {
5218
5233
  if (triggerDataUpdateResetting) {
5219
5234
  clearTimeout(dataUpdateTimeoutId.current);
@@ -5223,8 +5238,6 @@
5223
5238
  }
5224
5239
  // eslint-disable-next-line react-hooks/exhaustive-deps
5225
5240
  }, [triggerDataUpdateResetting]);
5226
-
5227
- // Resets the passed "set value to" param to null, so it can be used multiple times with any value
5228
5241
  React.useEffect(function () {
5229
5242
  if (!!updateSendInputTo) setUpdateSendInputTo(null);
5230
5243
  if (!!updateReceiveInputTo) setUpdateReceiveInputTo(null);
@@ -5243,8 +5256,6 @@
5243
5256
  }
5244
5257
  // eslint-disable-next-line react-hooks/exhaustive-deps
5245
5258
  }, [isLoading.current, swapAllButtonLoaderReSetter]);
5246
-
5247
- // Handlers upon changing the asset amount
5248
5259
  React.useEffect(function () {
5249
5260
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current));
5250
5261
  if (sendAssetAmount.current == null) return;
@@ -5264,7 +5275,13 @@
5264
5275
  linkText: !formHasBalance ? "" : isSwapAll.current ? translations.swapAllButtonTitles.cancel : translations.swapAllButtonTitles.enable,
5265
5276
  linkButtonLoader: true,
5266
5277
  isLinkButtonDisabled: isLoading.current || sendingAssetTicker === receivingAssetTicker || bignumber_js.BigNumber(sendingAssetBalance == null ? void 0 : sendingAssetBalance.assetAmount).eq(0)
5267
- }, /*#__PURE__*/React__default["default"].createElement("div", {
5278
+ }, displayRateSelector ? /*#__PURE__*/React__default["default"].createElement("div", {
5279
+ className: s$9["swap-form-rate-selector"]
5280
+ }, /*#__PURE__*/React__default["default"].createElement(RateSelector, {
5281
+ isFixed: (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT,
5282
+ setIsFixed: handleRateModeChanged,
5283
+ translations: translations.rateSelector
5284
+ })) : "", /*#__PURE__*/React__default["default"].createElement("div", {
5268
5285
  className: s$9["swap-form-inputs"]
5269
5286
  }, /*#__PURE__*/React__default["default"].createElement(AmountInput, {
5270
5287
  ticker: sendingAssetTicker,
@@ -5312,7 +5329,7 @@
5312
5329
  assetIconProtocolSrc: receivingAssetProtocolIconSrc,
5313
5330
  fallbackAssetIconSrc: fallBackAssetIconSrc,
5314
5331
  disabled: isSwapAll.current || sendingAssetTicker === null || receivingAssetTicker === null,
5315
- locked: !formHasBalance,
5332
+ locked: !formHasBalance && !isFixedRate.current,
5316
5333
  handleCoinAmountChange: handleReceiveAssetAmountChange,
5317
5334
  handleChangeAssetClick: handleChangeReceivingAssetClick,
5318
5335
  updateAssetInputTo: updateReceiveInputTo,
@@ -5332,7 +5349,7 @@
5332
5349
  className: s$9["swap-form-information-field"]
5333
5350
  }, /*#__PURE__*/React__default["default"].createElement("p", null, !isPairSupported ? translations.informationBlock.pairNotAvailable : transactionFee && minimalAmountValid ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.transactionFee, /*#__PURE__*/React__default["default"].createElement("span", null, AmountUtils.crypto(transactionFee == null ? void 0 : transactionFee.crypto, sendingAssetFeeCoinTickerPrintable)), (transactionFee == null ? void 0 : transactionFee.fiat) != null && (transactionFee == null ? void 0 : transactionFee.fiat) !== "" ? /*#__PURE__*/React__default["default"].createElement("span", {
5334
5351
  className: s$9["semi-transparent"]
5335
- }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React__default["default"].createElement("span", null, AmountUtils.composeRateText(sendingAssetTickerPrintable, receivingAssetTickerPrintable, swapRate, receivingAssetDecimalCount, (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT))) : minimalAmount.current || maximumAmount.current ? !maximumAmountValid && maximumAmount.current != null ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React__default["default"].createElement("span", {
5352
+ }, " ~ " + AmountUtils.fiat(transactionFee == null ? void 0 : transactionFee.fiat, fiatCurrencyCode)) : "") : !isLoading.current && (isSwapCalculated || !minimalAmount.current && swapRate) ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.swapRate, /*#__PURE__*/React__default["default"].createElement("span", null, AmountUtils.composeRateText(sendingAssetTickerPrintable, receivingAssetTickerPrintable, swapRate, receivingAssetDecimalCount, (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT))) : minimalAmount.current || maximumAmount.current ? !maximumAmountValid && maximumAmount.current != null ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, translations.informationBlock.maximumAmount, /*#__PURE__*/React__default["default"].createElement("span", {
5336
5353
  className: s$9["interactable"] + " " + s$9["red"],
5337
5354
  onClick: isLoading.current ? function () {} : function (e) {
5338
5355
  return callHandlingErrors(handleMaximumAmountClick, e);
@@ -5359,7 +5376,7 @@
5359
5376
  adaptiveHeight: true,
5360
5377
  errorEncountered: recipientAddress.current !== "" && !isRecipientAddressValid.current
5361
5378
  })), isHydrated && recipientAddressExtraIdName ? /*#__PURE__*/React__default["default"].createElement(TitleBox, {
5362
- title: recipientAddressExtraIdName,
5379
+ title: translations.addressFields.receivingAddressExtraIdTitle,
5363
5380
  titleNoticeText: translations.addressFields.receivingAddressExtraIdNotice,
5364
5381
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5365
5382
  }, /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -5381,7 +5398,7 @@
5381
5398
  adaptiveHeight: true,
5382
5399
  errorEncountered: refundAddress.current !== "" && !isRefundAddressValid.current
5383
5400
  })), refundAddressExtraIdName ? /*#__PURE__*/React__default["default"].createElement(TitleBox, {
5384
- title: refundAddressExtraIdName,
5401
+ title: translations.addressFields.refundAddressExtraIdTitle,
5385
5402
  titleNoticeText: translations.addressFields.refundAddressExtraIdNotice,
5386
5403
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5387
5404
  }, /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -5392,13 +5409,7 @@
5392
5409
  value: refundAddressExtraId.current,
5393
5410
  adaptiveHeight: true,
5394
5411
  placeholder: translations.addressFields.extraIdPlaceholder
5395
- })) : null) : null) : null, displayRateSelector ? /*#__PURE__*/React__default["default"].createElement("div", {
5396
- className: s$9["swap-form-rate-selector"]
5397
- }, /*#__PURE__*/React__default["default"].createElement(RateSelector, {
5398
- isFixed: (_isFixedRate$current3 = isFixedRate.current) != null ? _isFixedRate$current3 : IS_FIXED_BY_DEFAULT,
5399
- setIsFixed: !isLoading.current ? handleRateModeChanged : function () {},
5400
- translations: translations.rateSelector
5401
- })) : "", validationContent ? /*#__PURE__*/React__default["default"].createElement("div", {
5412
+ })) : null) : null) : null, validationContent ? /*#__PURE__*/React__default["default"].createElement("div", {
5402
5413
  className: s$9["swap-form-validation-text"]
5403
5414
  }, /*#__PURE__*/React__default["default"].createElement(Validation, {
5404
5415
  text: validationContent
@@ -5465,7 +5476,12 @@
5465
5476
  fiatCurrencyCode: PropTypes.oneOfType([PropTypes.string, null]),
5466
5477
  fiatCurrencyDecimals: PropTypes.oneOfType([PropTypes.number, null]),
5467
5478
  formHasFiat: PropTypes.bool,
5479
+ termsOfUseUrl: PropTypes.oneOfType([PropTypes.string, null]),
5480
+ privacyPolicyUrl: PropTypes.oneOfType([PropTypes.string, null]),
5481
+ recipientAddressExtraIdName: PropTypes.string,
5482
+ refundAddressExtraIdName: PropTypes.string,
5468
5483
  translations: PropTypes.object,
5484
+ validateAddressByTicker: PropTypes.func,
5469
5485
  swapSeparatorIconSrc: PropTypes.string.isRequired,
5470
5486
  swapButtonAlwaysActive: PropTypes.bool
5471
5487
  };
@@ -5498,6 +5514,11 @@
5498
5514
  fiatCurrencyCode: null,
5499
5515
  fiatCurrencyDecimals: null,
5500
5516
  formHasFiat: true,
5517
+ termsOfUseUrl: null,
5518
+ privacyPolicyUrl: null,
5519
+ validateAddressByTicker: function validateAddressByTicker(ticker) {
5520
+ return false;
5521
+ },
5501
5522
  swapButtonAlwaysActive: false
5502
5523
  };
5503
5524
 
@@ -5509,7 +5530,7 @@
5509
5530
  * @return {Promise<string>} xml string of generated svg image
5510
5531
  */
5511
5532
 
5512
- function _catch$b(body, recover) {
5533
+ function _catch$d(body, recover) {
5513
5534
  try {
5514
5535
  var result = body();
5515
5536
  } catch (e) {
@@ -5522,7 +5543,7 @@
5522
5543
  }
5523
5544
  var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingString) {
5524
5545
  try {
5525
- return Promise.resolve(_catch$b(function () {
5546
+ return Promise.resolve(_catch$d(function () {
5526
5547
  return Promise.resolve(QRCode__default["default"].toString(encodingString, {
5527
5548
  type: "svg"
5528
5549
  }));
@@ -5536,9 +5557,23 @@
5536
5557
 
5537
5558
  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"};
5538
5559
 
5539
- // TODO: [dev] add JSDoc
5560
+ /**
5561
+ * QrCode component renders a QR code for a provided crypto address.
5562
+ *
5563
+ * @component
5564
+ * @example
5565
+ * const address = "0x123456789abcdef";
5566
+ * const fill = true;
5567
+ * return <QrCode address={address} fill={fill} />;
5568
+ *
5569
+ * @param {Object} props - The props for the component.
5570
+ * @param {string} props.address - The crypto address to generate the QR code for.
5571
+ * @param {boolean} [props.fill=false] - If true, applies additional CSS class to fill the container.
5572
+ *
5573
+ * @returns {JSX.Element} A div containing the generated QR code.
5574
+ */
5540
5575
 
5541
- function _catch$a(body, recover) {
5576
+ function _catch$c(body, recover) {
5542
5577
  try {
5543
5578
  var result = body();
5544
5579
  } catch (e) {
@@ -5557,7 +5592,7 @@
5557
5592
  React.useEffect(function () {
5558
5593
  (function () {
5559
5594
  try {
5560
- return _catch$a(function () {
5595
+ return _catch$c(function () {
5561
5596
  var _temp = function () {
5562
5597
  if (address) {
5563
5598
  return Promise.resolve(generateQrAndShowInCanvas(address)).then(function (_generateQrAndShowInC) {
@@ -5584,7 +5619,8 @@
5584
5619
  fill: PropTypes.bool
5585
5620
  };
5586
5621
  QrCode.defaultProps = {
5587
- address: ""
5622
+ address: "",
5623
+ fill: false
5588
5624
  };
5589
5625
 
5590
5626
  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"};
@@ -6269,7 +6305,7 @@
6269
6305
  var FALLBACK_ASSET_ICON_URL = "https://rabbit.io/asset-icons/fallback.svg";
6270
6306
  var DEFAULT_CRYPTO_DECIMAL_COUNT = 8;
6271
6307
 
6272
- function _catch$9(body, recover) {
6308
+ function _catch$b(body, recover) {
6273
6309
  try {
6274
6310
  var result = body();
6275
6311
  } catch (e) {
@@ -6493,7 +6529,7 @@
6493
6529
  var loadCoinsAndSaveToState = function loadCoinsAndSaveToState() {
6494
6530
  (function () {
6495
6531
  try {
6496
- var _temp = _catch$9(function () {
6532
+ var _temp = _catch$b(function () {
6497
6533
  return Promise.resolve(loadCoinsAndContent ? loadCoinsAndContent() : defaultLoadCoinsAndContent()).then(function (data) {
6498
6534
  setCoins(data.coins);
6499
6535
  setFilteredCoins(data.coins);
@@ -7302,7 +7338,7 @@
7302
7338
  return Cache;
7303
7339
  }();
7304
7340
 
7305
- function _catch$8(body, recover) {
7341
+ function _catch$a(body, recover) {
7306
7342
  try {
7307
7343
  var result = body();
7308
7344
  } catch (e) {
@@ -7320,7 +7356,7 @@
7320
7356
  return new Promise(function (resolve, reject) {
7321
7357
  setTimeout(function () {
7322
7358
  try {
7323
- var _temp = _catch$8(function () {
7359
+ var _temp = _catch$a(function () {
7324
7360
  return Promise.resolve(execution()).then(function (_execution) {
7325
7361
  resolve(_execution);
7326
7362
  });
@@ -7404,7 +7440,7 @@
7404
7440
  return AxiosAdapter;
7405
7441
  }();
7406
7442
 
7407
- function _catch$7(body, recover) {
7443
+ function _catch$9(body, recover) {
7408
7444
  try {
7409
7445
  var result = body();
7410
7446
  } catch (e) {
@@ -7420,7 +7456,7 @@
7420
7456
  EmailsApi.sendEmail = function sendEmail(subject, body) {
7421
7457
  try {
7422
7458
  var _this = this;
7423
- var _temp = _catch$7(function () {
7459
+ var _temp = _catch$9(function () {
7424
7460
  var url = window.location.protocol + "//" + window.location.host + "/api/v1/" + _this.serverEndpointEntity;
7425
7461
  return Promise.resolve(axios__default["default"].post(url, {
7426
7462
  subject: subject,
@@ -7838,7 +7874,7 @@
7838
7874
  * improve the reliability of a data retrieval.
7839
7875
  */
7840
7876
 
7841
- function _catch$6(body, recover) {
7877
+ function _catch$8(body, recover) {
7842
7878
  try {
7843
7879
  var result = body();
7844
7880
  } catch (e) {
@@ -8177,7 +8213,7 @@
8177
8213
  var result;
8178
8214
  var calculationUuid = concurrentCalculationsMetadataHolder.startCalculation(_this.bio);
8179
8215
  return Promise.resolve(_finallyRethrows$1(function () {
8180
- return _catch$6(function () {
8216
+ return _catch$8(function () {
8181
8217
  function _temp5() {
8182
8218
  var _result2, _result3;
8183
8219
  if (((_result2 = result) == null ? void 0 : _result2.data) == null) {
@@ -8205,7 +8241,7 @@
8205
8241
  */
8206
8242
  var rpsFactor = result ? result.rpsFactor : RobustExternalAPICallerService.defaultRPSFactor;
8207
8243
  result = null;
8208
- var _temp3 = _catch$6(function () {
8244
+ var _temp3 = _catch$8(function () {
8209
8245
  function _temp2() {
8210
8246
  var _result$errors;
8211
8247
  if ((_result$errors = result.errors) != null && _result$errors.length) {
@@ -8229,7 +8265,7 @@
8229
8265
  return Promise.resolve(new Promise(function (resolve, reject) {
8230
8266
  setTimeout(function () {
8231
8267
  try {
8232
- var _temp6 = _catch$6(function () {
8268
+ var _temp6 = _catch$8(function () {
8233
8269
  return Promise.resolve(_this._performCallAttempt(parametersValues, timeoutMS, cancelToken, rpsFactor, doNotFailForNowData)).then(function (_this$_performCallAtt2) {
8234
8270
  resolve(_this$_performCallAtt2);
8235
8271
  });
@@ -8299,7 +8335,7 @@
8299
8335
  return;
8300
8336
  }
8301
8337
  var _temp13 = _finallyRethrows$1(function () {
8302
- return _catch$6(function () {
8338
+ return _catch$8(function () {
8303
8339
  var _provider$specificHea;
8304
8340
  function _temp12() {
8305
8341
  if (iterationsData.length) {
@@ -8631,7 +8667,7 @@
8631
8667
  }
8632
8668
  }
8633
8669
  }
8634
- function _catch$5(body, recover) {
8670
+ function _catch$7(body, recover) {
8635
8671
  try {
8636
8672
  var result = body();
8637
8673
  } catch (e) {
@@ -8710,7 +8746,7 @@
8710
8746
  _proto.getCachedOrWaitForCachedOrAcquireLock = function getCachedOrWaitForCachedOrAcquireLock(cacheId) {
8711
8747
  try {
8712
8748
  var _this = this;
8713
- return Promise.resolve(_catch$5(function () {
8749
+ return Promise.resolve(_catch$7(function () {
8714
8750
  function _temp2() {
8715
8751
  var _cached, _cached2;
8716
8752
  return calculationId ? {
@@ -8789,7 +8825,7 @@
8789
8825
  _proto.acquireLock = function acquireLock(cacheId) {
8790
8826
  try {
8791
8827
  var _this2 = this;
8792
- return Promise.resolve(_catch$5(function () {
8828
+ return Promise.resolve(_catch$7(function () {
8793
8829
  return Promise.resolve(_this2._requestsManager.acquireLock(cacheId));
8794
8830
  }, function (e) {
8795
8831
  improveAndRethrow(e, "acquireLock");
@@ -8959,7 +8995,7 @@
8959
8995
  try {
8960
8996
  var _exit;
8961
8997
  var _this3 = this;
8962
- var _temp3 = _catch$5(function () {
8998
+ var _temp3 = _catch$7(function () {
8963
8999
  var activeCalculationIdForHash = _this3._activeCalculationsIds.get(requestHash);
8964
9000
  if (activeCalculationIdForHash == null) {
8965
9001
  var id = uuid.v4();
@@ -8993,7 +9029,7 @@
8993
9029
  _proto2.acquireLock = function acquireLock(requestHash) {
8994
9030
  try {
8995
9031
  var _this4 = this;
8996
- return Promise.resolve(_catch$5(function () {
9032
+ return Promise.resolve(_catch$7(function () {
8997
9033
  var _this4$_nextCalculati;
8998
9034
  var activeId = _this4._activeCalculationsIds.get(requestHash);
8999
9035
  var nextId = uuid.v4();
@@ -9144,7 +9180,7 @@
9144
9180
  * TODO: [tests, critical] Massively used logic
9145
9181
  */
9146
9182
 
9147
- function _catch$4(body, recover) {
9183
+ function _catch$6(body, recover) {
9148
9184
  try {
9149
9185
  var result = body();
9150
9186
  } catch (e) {
@@ -9241,7 +9277,7 @@
9241
9277
  var cacheId;
9242
9278
  var result;
9243
9279
  return Promise.resolve(_finallyRethrows(function () {
9244
- return _catch$4(function () {
9280
+ return _catch$6(function () {
9245
9281
  cacheId = _this._calculateCacheId(parametersValues, customHashFunctionForParams);
9246
9282
  return Promise.resolve(_this._cahceAndRequestsResolver.getCachedOrWaitForCachedOrAcquireLock(cacheId)).then(function (_this$_cahceAndReques) {
9247
9283
  var _result2, _result4;
@@ -9310,7 +9346,7 @@
9310
9346
  return CachedRobustExternalApiCallerService;
9311
9347
  }();
9312
9348
 
9313
- function _catch$3(body, recover) {
9349
+ function _catch$5(body, recover) {
9314
9350
  try {
9315
9351
  var result = body();
9316
9352
  } catch (e) {
@@ -9394,7 +9430,7 @@
9394
9430
  IpAddressProvider.getClientIpAddress = function getClientIpAddress() {
9395
9431
  try {
9396
9432
  var _this = this;
9397
- return Promise.resolve(_catch$3(function () {
9433
+ return Promise.resolve(_catch$5(function () {
9398
9434
  return Promise.resolve(_this.externalIPAddressAPICaller.callExternalAPICached([], 7000));
9399
9435
  }, function (e) {
9400
9436
  improveAndRethrow(e, "getClientIpAddress");
@@ -9574,15 +9610,44 @@
9574
9610
  this.isRefundAddressRequired = isRefundAddressRequired;
9575
9611
  };
9576
9612
 
9613
+ // TODO: [refactoring, moderate] extract structure of _supportedCoins into model class
9614
+
9615
+ function _catch$4(body, recover) {
9616
+ try {
9617
+ var result = body();
9618
+ } catch (e) {
9619
+ return recover(e);
9620
+ }
9621
+ if (result && result.then) {
9622
+ return result.then(void 0, recover);
9623
+ }
9624
+ return result;
9625
+ }
9577
9626
  var SwapProvider = /*#__PURE__*/function () {
9578
- function SwapProvider() {}
9627
+ function SwapProvider(cache, customCoinBuilder, useRestrictedCoinsSet) {
9628
+ if (customCoinBuilder === void 0) {
9629
+ customCoinBuilder = function customCoinBuilder(coin, network) {
9630
+ return null;
9631
+ };
9632
+ }
9633
+ if (useRestrictedCoinsSet === void 0) {
9634
+ useRestrictedCoinsSet = true;
9635
+ }
9636
+ this._supportedCoins = [];
9637
+ this._maxRateDigits = 20;
9638
+ this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9639
+ this._customCoinBuilder = customCoinBuilder;
9640
+ this._cache = cache;
9641
+ this.isAggregator = false;
9642
+ }
9579
9643
  var _proto = SwapProvider.prototype;
9580
9644
  /**
9581
9645
  * @return {Promise<void>}
9582
9646
  */
9583
9647
  _proto.initialize = function initialize() {
9584
9648
  try {
9585
- throw new Error("Not implemented in base");
9649
+ var _this = this;
9650
+ return Promise.resolve(_this._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9586
9651
  } catch (e) {
9587
9652
  return Promise.reject(e);
9588
9653
  }
@@ -9595,15 +9660,68 @@
9595
9660
  throw new Error("Not implemented in base");
9596
9661
  }
9597
9662
 
9663
+ /**
9664
+ * This method sort internal list putting popular (as provider thinks) coins to the top.
9665
+ * 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.
9666
+ * @private
9667
+ */;
9668
+ _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
9669
+ this._supportedCoins.sort(function (i1, i2) {
9670
+ if (i1.isPopular !== i2.isPopular) return i2.isPopular - i1.isPopular;
9671
+ return i1.coin.ticker.localeCompare(i2.coin.ticker);
9672
+ });
9673
+ }
9674
+
9675
+ /**
9676
+ * Should fill _supportedCoins with array of coins.
9677
+ * Coin construction rules:
9678
+ * 1. ticker should be CODEPROTOCOL_CODE e.g. USDTERC20
9679
+ * 2. name should not contain (PROTOCOL_CODE) or just PROTOCOL_CODe
9680
+ * 3. protocol should be null for coins major for their blockchains like BTC, ETH
9681
+ * 4. isPopular should be a number
9682
+ *
9683
+ * @return {Promise<void>}
9684
+ * @private
9685
+ */;
9686
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9687
+ try {
9688
+ throw new Error("Not implemented in base - _fetchSupportedCurrenciesIfNeeded");
9689
+ } catch (e) {
9690
+ return Promise.reject(e);
9691
+ }
9692
+ }
9598
9693
  /**
9599
9694
  * Retrieves all currencies supported by this swap provider.
9600
9695
  * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
9601
9696
  *
9602
9697
  * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
9603
- */;
9698
+ */
9699
+ ;
9604
9700
  _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9605
9701
  try {
9606
- throw new Error("Not implemented in base");
9702
+ var _this2 = this;
9703
+ var loggerSource = "getAllSupportedCurrencies";
9704
+ return Promise.resolve(_catch$4(function () {
9705
+ return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9706
+ var _this2$_supportedCoin;
9707
+ Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins returning", loggerSource);
9708
+ return {
9709
+ result: true,
9710
+ coins: _this2._supportedCoins.map(function (item) {
9711
+ return item.coin;
9712
+ })
9713
+ };
9714
+ });
9715
+ }, function (e) {
9716
+ var _e$response;
9717
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9718
+ return {
9719
+ result: false,
9720
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9721
+ };
9722
+ }
9723
+ improveAndRethrow(e, loggerSource);
9724
+ }));
9607
9725
  } catch (e) {
9608
9726
  return Promise.reject(e);
9609
9727
  }
@@ -9617,7 +9735,31 @@
9617
9735
  ;
9618
9736
  _proto.getDepositCurrencies = function getDepositCurrencies() {
9619
9737
  try {
9620
- throw new Error("Not implemented in base");
9738
+ var _this3 = this;
9739
+ var loggerSource = "getDepositCurrencies";
9740
+ return Promise.resolve(_catch$4(function () {
9741
+ return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9742
+ var _this3$_supportedCoin;
9743
+ Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9744
+ return {
9745
+ result: true,
9746
+ coins: _this3._supportedCoins.filter(function (item) {
9747
+ return item.deposit;
9748
+ }).map(function (item) {
9749
+ return item.coin;
9750
+ })
9751
+ };
9752
+ });
9753
+ }, function (e) {
9754
+ var _e$response2;
9755
+ if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9756
+ return {
9757
+ result: false,
9758
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9759
+ };
9760
+ }
9761
+ improveAndRethrow(e, loggerSource);
9762
+ }));
9621
9763
  } catch (e) {
9622
9764
  return Promise.reject(e);
9623
9765
  }
@@ -9631,8 +9773,36 @@
9631
9773
  */
9632
9774
  ;
9633
9775
  _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9776
+ if (exceptCurrency === void 0) {
9777
+ exceptCurrency = null;
9778
+ }
9634
9779
  try {
9635
- throw new Error("Not implemented in base");
9780
+ var _this4 = this;
9781
+ var loggerSource = "getWithdrawalCurrencies";
9782
+ return Promise.resolve(_catch$4(function () {
9783
+ return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9784
+ var _this4$_supportedCoin;
9785
+ Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9786
+ return {
9787
+ result: true,
9788
+ coins: _this4._supportedCoins.filter(function (item) {
9789
+ var _item$coin, _exceptCurrency;
9790
+ return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9791
+ }).map(function (item) {
9792
+ return item.coin;
9793
+ })
9794
+ };
9795
+ });
9796
+ }, function (e) {
9797
+ var _e$response3;
9798
+ if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9799
+ return {
9800
+ result: false,
9801
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9802
+ };
9803
+ }
9804
+ improveAndRethrow(e, loggerSource);
9805
+ }));
9636
9806
  } catch (e) {
9637
9807
  return Promise.reject(e);
9638
9808
  }
@@ -9640,12 +9810,28 @@
9640
9810
  /**
9641
9811
  * Retrieves URL for coin icon or fallback if not found.
9642
9812
  *
9643
- * @param coin {Coin|string} coin or rabbit-format of coin ticker
9813
+ * @param coinOrTicker {Coin|string} coin or rabbit-format of coin ticker
9644
9814
  * @return {string}
9645
9815
  */
9646
9816
  ;
9647
- _proto.getIconUrl = function getIconUrl(coin) {
9648
- throw new Error("Not implemented in base");
9817
+ _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9818
+ var loggerSource = "getIconUrl";
9819
+ try {
9820
+ var _this$_supportedCoins2, _this$_supportedCoins3;
9821
+ var coin = coinOrTicker;
9822
+ if (!(coinOrTicker instanceof Coin)) {
9823
+ var _this$_supportedCoins;
9824
+ coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9825
+ return i.coin.ticker === coinOrTicker;
9826
+ })) == null ? void 0 : _this$_supportedCoins.coin;
9827
+ }
9828
+ return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9829
+ var _item$coin2, _coin;
9830
+ return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9831
+ })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9832
+ } catch (e) {
9833
+ improveAndRethrow(e, loggerSource);
9834
+ }
9649
9835
  }
9650
9836
 
9651
9837
  /**
@@ -9656,7 +9842,49 @@
9656
9842
  */;
9657
9843
  _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
9658
9844
  try {
9659
- throw new Error("Not implemented in base");
9845
+ var _this5 = this;
9846
+ var loggerSource = "getCoinToUSDTRate";
9847
+ return Promise.resolve(_catch$4(function () {
9848
+ return coin ? Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
9849
+ var _this5$_supportedCoin;
9850
+ // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
9851
+ var usdtTrc20 = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
9852
+ return i.coin.ticker === "USDTTRC20";
9853
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
9854
+ if (!usdtTrc20) {
9855
+ return {
9856
+ result: false
9857
+ };
9858
+ }
9859
+ var cached = _this5._cache.get("swapspace_usdt_rate_" + coin.ticker);
9860
+ if (cached != null) {
9861
+ return {
9862
+ result: true,
9863
+ rate: cached
9864
+ };
9865
+ }
9866
+ Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
9867
+ return Promise.resolve(_this5.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
9868
+ if (!result.result) {
9869
+ return {
9870
+ result: false
9871
+ };
9872
+ }
9873
+
9874
+ // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
9875
+ var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
9876
+ var rate = bignumber_js.BigNumber(1).div(bignumber_js.BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
9877
+ _this5._cache.put("swap_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
9878
+ );
9879
+ return {
9880
+ result: true,
9881
+ rate: rate
9882
+ };
9883
+ });
9884
+ }) : null;
9885
+ }, function (e) {
9886
+ improveAndRethrow(e, loggerSource);
9887
+ }));
9660
9888
  } catch (e) {
9661
9889
  return Promise.reject(e);
9662
9890
  }
@@ -9673,6 +9901,7 @@
9673
9901
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
9674
9902
  * @param [fromCoinToUsdRate=null] pass if you want to increase the min amount returned
9675
9903
  * by provider with some fixed "insurance" amount to cover min amount fluctuations.
9904
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9676
9905
  * @return {Promise<({
9677
9906
  * result: false,
9678
9907
  * reason: string,
@@ -9692,7 +9921,7 @@
9692
9921
  * })>}
9693
9922
  */
9694
9923
  ;
9695
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
9924
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
9696
9925
  try {
9697
9926
  throw new Error("Not implemented in base");
9698
9927
  } catch (e) {
@@ -9712,6 +9941,7 @@
9712
9941
  * @param fixed {boolean}
9713
9942
  * @param [toCurrencyExtraId=""] {string} optional extra ID
9714
9943
  * @param [refundExtraId=""] {string} optional extra ID for refund address
9944
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9715
9945
  * @return {Promise<({
9716
9946
  * result: true,
9717
9947
  * swapId: string,
@@ -9731,7 +9961,7 @@
9731
9961
  * })>}
9732
9962
  */
9733
9963
  ;
9734
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
9964
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
9735
9965
  try {
9736
9966
  throw new Error("Not implemented in base");
9737
9967
  } catch (e) {
@@ -9759,7 +9989,15 @@
9759
9989
  */
9760
9990
  ;
9761
9991
  _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
9762
- throw new Error("Not implemented in base");
9992
+ try {
9993
+ var _item$coin3;
9994
+ var item = this._supportedCoins.find(function (i) {
9995
+ return i.coin.ticker === ticker;
9996
+ });
9997
+ return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
9998
+ } catch (e) {
9999
+ improveAndRethrow(e, "getCoinByTickerIfPresent");
10000
+ }
9763
10001
  }
9764
10002
 
9765
10003
  /**
@@ -9768,17 +10006,68 @@
9768
10006
  * @return {boolean}
9769
10007
  */;
9770
10008
  _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
9771
- throw new Error("Not implemented in base");
9772
- }
9773
-
9774
- /**
9775
- * @param asset {Coin}
9776
- * @return {string|null}
9777
- */;
9778
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
9779
- throw new Error("Not implemented in base");
9780
- };
9781
- return SwapProvider;
10009
+ try {
10010
+ var assetData = this._supportedCoins.find(function (i) {
10011
+ var _i$coin;
10012
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (asset == null ? void 0 : asset.ticker);
10013
+ });
10014
+ if (assetData) {
10015
+ var corrected = assetData.validationRegexp.trim();
10016
+ corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10017
+ corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10018
+ return address.match(corrected) != null;
10019
+ }
10020
+ } catch (e) {
10021
+ Logger.logError(e, "isAddressValidForAsset");
10022
+ }
10023
+ return false;
10024
+ }
10025
+
10026
+ /**
10027
+ * @param asset {Coin}
10028
+ * @return {string|null}
10029
+ */;
10030
+ _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10031
+ try {
10032
+ var assetData = this._supportedCoins.find(function (i) {
10033
+ var _i$coin2;
10034
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (asset == null ? void 0 : asset.ticker);
10035
+ });
10036
+ if (assetData != null && assetData.hasExtraId) {
10037
+ if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10038
+ // We return some default name if the extraIdName is empty
10039
+ return "ID";
10040
+ }
10041
+ return assetData == null ? void 0 : assetData.extraIdName;
10042
+ }
10043
+ return null;
10044
+ } catch (e) {
10045
+ improveAndRethrow(e, "getExtraIdNameIfPresent");
10046
+ }
10047
+ };
10048
+ _proto.removeProtocolNameFromCoinName = function removeProtocolNameFromCoinName(coinName, tickerPrintable, protocolName) {
10049
+ if (coinName) {
10050
+ var originalName = coinName;
10051
+ if (tickerPrintable) {
10052
+ coinName = coinName.replaceAll(new RegExp("\\(" + tickerPrintable + "\\)", "gi"), "");
10053
+ }
10054
+ if (protocolName) {
10055
+ coinName = coinName.replaceAll(new RegExp("\\(" + protocolName + "\\)", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + "$", "gi"), "").replaceAll(new RegExp("^" + protocolName + " ", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + " ", "gi"), " ");
10056
+ }
10057
+ coinName = coinName.replaceAll(/ +/g, " ").trim();
10058
+ var defaultNames = ["token", "network", "protocol", "coin", "mainnet", "chain", "project", "cash", "finance", "wrapped", "blockchain", "network"];
10059
+ var lowerCoinName = coinName.toLowerCase();
10060
+ var isBecameDefaultName = defaultNames.find(function (defName) {
10061
+ return lowerCoinName === defName || lowerCoinName === "the " + defName;
10062
+ });
10063
+ if (coinName === "" || isBecameDefaultName) {
10064
+ // Rolling back to original name if our processing leads in empty name or one of the default words
10065
+ coinName = originalName;
10066
+ }
10067
+ }
10068
+ return coinName;
10069
+ };
10070
+ return SwapProvider;
9782
10071
  }();
9783
10072
  SwapProvider.COMMON_ERRORS = {
9784
10073
  REQUESTS_LIMIT_EXCEEDED: "requestsLimitExceeded"
@@ -9795,22 +10084,16 @@
9795
10084
  };
9796
10085
  SwapProvider.SWAP_STATUSES = {
9797
10086
  WAITING_FOR_PAYMENT: "waiting_for_payment",
9798
- // public +
9799
10087
  CONFIRMING: "confirming",
9800
10088
  PAYMENT_RECEIVED: "payment_received",
9801
- // public +
9802
10089
  EXCHANGING: "exchanging",
9803
- // session full // public +
9804
10090
  COMPLETED: "completed",
9805
- // session full // public +
9806
10091
  REFUNDED: "refunded",
9807
- // session full // public +
9808
10092
  EXPIRED: "expired",
9809
- // public +
9810
- FAILED: "failed" // public +
10093
+ FAILED: "failed"
9811
10094
  };
9812
10095
 
9813
- function _catch$2(body, recover) {
10096
+ function _catch$3(body, recover) {
9814
10097
  try {
9815
10098
  var result = body();
9816
10099
  } catch (e) {
@@ -9834,14 +10117,10 @@
9834
10117
  if (useRestrictedCoinsSet === void 0) {
9835
10118
  useRestrictedCoinsSet = true;
9836
10119
  }
9837
- _this = _SwapProvider.call(this) || this;
9838
- _this._supportedCoins = [];
10120
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
9839
10121
  _this._partners = [];
9840
- _this._URL = "" + apiKeysProxyUrl;
9841
- _this._maxRateDigits = 20;
9842
- _this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9843
- _this._customCoinBuilder = customCoinBuilder;
9844
- _this._cache = cache;
10122
+ _this._URL = apiKeysProxyUrl + "/swapspace";
10123
+ _this.isAggregator = true;
9845
10124
  return _this;
9846
10125
  }
9847
10126
  var _proto = SwapspaceSwapProvider.prototype;
@@ -9850,144 +10129,21 @@
9850
10129
  * (and even a bit smaller value) for better consistency */
9851
10130
  return 110000;
9852
10131
  };
9853
- _proto.getDepositCurrencies = function getDepositCurrencies() {
9854
- try {
9855
- var _this2 = this;
9856
- var loggerSource = "getDepositCurrencies";
9857
- return Promise.resolve(_catch$2(function () {
9858
- return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9859
- var _this2$_supportedCoin;
9860
- Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9861
- return {
9862
- result: true,
9863
- coins: _this2._supportedCoins.filter(function (item) {
9864
- return item.deposit;
9865
- }).map(function (item) {
9866
- return item.coin;
9867
- })
9868
- };
9869
- });
9870
- }, function (e) {
9871
- var _e$response;
9872
- if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9873
- return {
9874
- result: false,
9875
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9876
- };
9877
- }
9878
- improveAndRethrow(e, loggerSource);
9879
- }));
9880
- } catch (e) {
9881
- return Promise.reject(e);
9882
- }
9883
- };
9884
- _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9885
- try {
9886
- var _this3 = this;
9887
- var loggerSource = "getAllSupportedCurrencies";
9888
- return Promise.resolve(_catch$2(function () {
9889
- return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9890
- var _this3$_supportedCoin;
9891
- Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins returning", loggerSource);
9892
- return {
9893
- result: true,
9894
- coins: _this3._supportedCoins.map(function (item) {
9895
- return item.coin;
9896
- })
9897
- };
9898
- });
9899
- }, function (e) {
9900
- var _e$response2;
9901
- if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9902
- return {
9903
- result: false,
9904
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9905
- };
9906
- }
9907
- improveAndRethrow(e, loggerSource);
9908
- }));
9909
- } catch (e) {
9910
- return Promise.reject(e);
9911
- }
9912
- };
9913
- _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9914
- if (exceptCurrency === void 0) {
9915
- exceptCurrency = null;
9916
- }
9917
- try {
9918
- var _this4 = this;
9919
- var loggerSource = "getWithdrawalCurrencies";
9920
- return Promise.resolve(_catch$2(function () {
9921
- return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9922
- var _this4$_supportedCoin;
9923
- Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9924
- return {
9925
- result: true,
9926
- coins: _this4._supportedCoins.filter(function (item) {
9927
- var _item$coin, _exceptCurrency;
9928
- return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9929
- }).map(function (item) {
9930
- return item.coin;
9931
- })
9932
- };
9933
- });
9934
- }, function (e) {
9935
- var _e$response3;
9936
- if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9937
- return {
9938
- result: false,
9939
- reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9940
- };
9941
- }
9942
- improveAndRethrow(e, loggerSource);
9943
- }));
9944
- } catch (e) {
9945
- return Promise.reject(e);
9946
- }
9947
- };
9948
- _proto.initialize = function initialize() {
9949
- try {
9950
- var _this5 = this;
9951
- return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9952
- } catch (e) {
9953
- return Promise.reject(e);
9954
- }
9955
- };
9956
- _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9957
- var loggerSource = "getIconUrl";
9958
- try {
9959
- var _this$_supportedCoins2, _this$_supportedCoins3;
9960
- var coin = coinOrTicker;
9961
- if (!(coinOrTicker instanceof Coin)) {
9962
- var _this$_supportedCoins;
9963
- coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9964
- return i.coin.ticker === coinOrTicker;
9965
- })) == null ? void 0 : _this$_supportedCoins.coin;
9966
- }
9967
- return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9968
- var _item$coin2, _coin;
9969
- return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9970
- })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9971
- } catch (e) {
9972
- improveAndRethrow(e, loggerSource);
9973
- }
9974
- };
9975
10132
  _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9976
10133
  try {
9977
- var _this6 = this;
10134
+ var _this2 = this;
9978
10135
  var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
9979
- return Promise.resolve(_catch$2(function () {
9980
- var _temp = function (_this6$_supportedCoin) {
9981
- if (!((_this6$_supportedCoin = _this6._supportedCoins) != null && _this6$_supportedCoin.length)) {
9982
- return Promise.resolve(axios__default["default"].get(_this6._URL + "/api/v2/currencies")).then(function (rawResponse) {
10136
+ return Promise.resolve(_catch$3(function () {
10137
+ var _temp = function (_this2$_supportedCoin) {
10138
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length)) {
10139
+ return Promise.resolve(axios__default["default"].get(_this2._URL + "/api/v2/currencies")).then(function (rawResponse) {
9983
10140
  var _rawResponse$data, _rawResponse$data2;
9984
10141
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
9985
10142
  var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
9986
10143
  Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
9987
- _this6._supportedCoins = allowedCoins.map(function (item) {
9988
- var coin = _this6._customCoinBuilder(item.code, item.network);
9989
- if (!coin && !_this6.useRestrictedCoinsSet) {
9990
- var _item$name;
10144
+ _this2._supportedCoins = allowedCoins.map(function (item) {
10145
+ var coin = _this2._customCoinBuilder(item.code, item.network);
10146
+ if (!coin && !_this2.useRestrictedCoinsSet) {
9991
10147
  /** Building coin object for coin that isn't supported OOB in Rabbit.
9992
10148
  * We are doing this way to be able to use extended coins set for swaps.
9993
10149
  * These temporary built coins are only for in-swap use, and we omit some usual
@@ -10001,11 +10157,7 @@
10001
10157
  /** Removing ticker and protocol name from coin name as we usually use them explicitly
10002
10158
  * from coin object rather than counting on having it in the coin name itself.
10003
10159
  * This processing is needed due to poor quality of swapspace coins names. */
10004
- var name = ((_item$name = item.name) != null ? _item$name : "").replaceAll("(" + code + ")", "").replaceAll("(" + network + ")", "").replaceAll(/ +/g, " ").trim();
10005
- if (name === "") {
10006
- // Rolling back to original name if our processing leads in empty name
10007
- name = item.name;
10008
- }
10160
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
10009
10161
  var ticker = "" + code + (code === network ? "" : network);
10010
10162
  var defaultDecimalPlacesForCoinNotSupportedOOB = 8;
10011
10163
  var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
@@ -10021,16 +10173,17 @@
10021
10173
  network: item.network,
10022
10174
  hasExtraId: item.hasExtraId,
10023
10175
  extraIdName: item.extraIdName,
10024
- isPopular: !!item.popular,
10176
+ isPopular: item.popular ? 1 : 0,
10025
10177
  iconURL: item.icon ? "https://storage.swapspace.co" + item.icon : FALLBACK_ASSET_ICON_URL,
10026
10178
  deposit: (_item$deposit = item.deposit) != null ? _item$deposit : false,
10027
10179
  withdrawal: (_item$withdrawal = item.withdrawal) != null ? _item$withdrawal : false,
10028
- validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null
10180
+ validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null,
10181
+ isAvailable: true
10029
10182
  };
10030
10183
  }
10031
10184
  return [];
10032
10185
  }).flat();
10033
- _this6._putPopularCoinsFirst();
10186
+ _this2._putPopularCoinsFirst();
10034
10187
  });
10035
10188
  }
10036
10189
  }();
@@ -10044,15 +10197,15 @@
10044
10197
  };
10045
10198
  _proto._fetchPartnersListIfNeeded = function _fetchPartnersListIfNeeded() {
10046
10199
  try {
10047
- var _this7 = this;
10200
+ var _this3 = this;
10048
10201
  var loggerSource = "_fetchPartnersListIfNeeded";
10049
- return Promise.resolve(_catch$2(function () {
10050
- var _temp2 = function (_this7$_partners) {
10051
- if (((_this7$_partners = _this7._partners) == null ? void 0 : _this7$_partners.length) === 0) {
10052
- return Promise.resolve(axios__default["default"].get(_this7._URL + "/api/v2/partners")).then(function (rawResponse) {
10202
+ return Promise.resolve(_catch$3(function () {
10203
+ var _temp2 = function (_this3$_partners) {
10204
+ if (((_this3$_partners = _this3._partners) == null ? void 0 : _this3$_partners.length) === 0) {
10205
+ return Promise.resolve(axios__default["default"].get(_this3._URL + "/api/v2/partners")).then(function (rawResponse) {
10053
10206
  var _rawResponse$data3;
10054
10207
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data3 = rawResponse.data) == null ? void 0 : _rawResponse$data3.length) + " partners", loggerSource);
10055
- _this7._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10208
+ _this3._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10056
10209
  });
10057
10210
  }
10058
10211
  }();
@@ -10063,99 +10216,30 @@
10063
10216
  } catch (e) {
10064
10217
  return Promise.reject(e);
10065
10218
  }
10066
- }
10067
- /**
10068
- * This method sort internal list putting popular (as swapspace thinks) coins to the top.
10069
- * 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.
10070
- * @private
10071
- */
10072
- ;
10073
- _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
10074
- this._supportedCoins.sort(function (i1, i2) {
10075
- if (i1.isPopular && !i2.isPopular) return -1;
10076
- if (i2.isPopular && !i1.isPopular) return 1;
10077
- return i1.coin.ticker > i2.coin.ticker ? 1 : i1.coin.ticker < i2.coin.ticker ? -1 : 0;
10078
- });
10079
- };
10080
- _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
10081
- try {
10082
- var _this8 = this;
10083
- var loggerSource = "getCoinToUSDTRate";
10084
- return Promise.resolve(_catch$2(function () {
10085
- return coin ? Promise.resolve(_this8._fetchSupportedCurrenciesIfNeeded()).then(function () {
10086
- var _this8$_supportedCoin;
10087
- // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
10088
- var usdtTrc20 = (_this8$_supportedCoin = _this8._supportedCoins.find(function (i) {
10089
- return i.coin.ticker === "USDTTRC20";
10090
- })) == null ? void 0 : _this8$_supportedCoin.coin;
10091
- if (!usdtTrc20) {
10092
- return {
10093
- result: false
10094
- };
10095
- }
10096
- var cached = _this8._cache.get("swapspace_usdt_rate_" + coin.ticker);
10097
- if (cached != null) {
10098
- return {
10099
- result: true,
10100
- rate: cached
10101
- };
10102
- }
10103
- Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
10104
- return Promise.resolve(_this8.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
10105
- if (!result.result) {
10106
- return {
10107
- result: false
10108
- };
10109
- }
10110
-
10111
- // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
10112
- var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
10113
- var rate = bignumber_js.BigNumber(1).div(bignumber_js.BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
10114
- _this8._cache.put("swapspace_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
10115
- );
10116
- return {
10117
- result: true,
10118
- rate: rate
10119
- };
10120
- });
10121
- }) : null;
10122
- }, function (e) {
10123
- improveAndRethrow(e, loggerSource);
10124
- }));
10125
- } catch (e) {
10126
- return Promise.reject(e);
10127
- }
10128
10219
  };
10129
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
10130
- try {
10131
- var _item$coin3;
10132
- var item = this._supportedCoins.find(function (i) {
10133
- return i.coin.ticker === ticker;
10134
- });
10135
- return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10136
- } catch (e) {
10137
- improveAndRethrow(e, "getCoinByTickerIfPresent");
10138
- }
10139
- };
10140
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
10220
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
10141
10221
  if (fixed === void 0) {
10142
10222
  fixed = false;
10143
10223
  }
10144
10224
  if (fromCoinToUsdRate === void 0) {
10145
10225
  fromCoinToUsdRate = null;
10146
10226
  }
10227
+ if (amountIsToReceive === void 0) {
10228
+ amountIsToReceive = false;
10229
+ }
10147
10230
  try {
10148
- var _this9 = this;
10231
+ var _this4 = this;
10149
10232
  var loggerSource = "getSwapInfo";
10150
- return Promise.resolve(_catch$2(function () {
10233
+ return Promise.resolve(_catch$3(function () {
10234
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10151
10235
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || bignumber_js.BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean") {
10152
10236
  throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed);
10153
10237
  }
10154
- var fromCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10238
+ var fromCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10155
10239
  var _i$coin;
10156
10240
  return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
10157
10241
  });
10158
- var toCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10242
+ var toCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10159
10243
  var _i$coin2;
10160
10244
  return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
10161
10245
  });
@@ -10165,11 +10249,11 @@
10165
10249
  return !fromCoinSwapspaceDetails.deposit || !toCoinSwapspaceDetails.withdrawal ? {
10166
10250
  result: false,
10167
10251
  reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
10168
- } : Promise.resolve(axios__default["default"].get(_this9._URL + "/api/v2/amounts?fromCurrency=" + fromCoinSwapspaceDetails.code + "&fromNetwork=" + fromCoinSwapspaceDetails.network + "&toNetwork=" + toCoinSwapspaceDetails.network + "&toCurrency=" + toCoinSwapspaceDetails.code + "&amount=" + amountCoins + "&estimated=false")).then(function (response) {
10252
+ } : Promise.resolve(axios__default["default"].get(_this4._URL + "/api/v2/amounts?fromCurrency=" + fromCoinSwapspaceDetails.code + "&fromNetwork=" + fromCoinSwapspaceDetails.network + "&toNetwork=" + toCoinSwapspaceDetails.network + "&toCurrency=" + toCoinSwapspaceDetails.code + "&amount=" + amountCoins + "&estimated=false")).then(function (response) {
10169
10253
  var _response$data, _exchangesSupportingT;
10170
10254
  var _exit;
10171
- function _temp4(_result6) {
10172
- if (_exit) return _result6;
10255
+ function _temp4(_result2) {
10256
+ if (_exit) return _result2;
10173
10257
  var result = {
10174
10258
  result: false,
10175
10259
  reason: smallestMin && bignumber_js.BigNumber(amountCoins).lt(smallestMin) ? SwapProvider.NO_SWAPS_REASONS.TOO_LOW : greatestMax && bignumber_js.BigNumber(amountCoins).gt(greatestMax) ? SwapProvider.NO_SWAPS_REASONS.TOO_HIGH : SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED,
@@ -10263,9 +10347,9 @@
10263
10347
  }
10264
10348
  }
10265
10349
  var rate = bestOpt.toAmount && bestOpt.fromAmount ? bignumber_js.BigNumber(bestOpt.toAmount).div(bestOpt.fromAmount) : null;
10266
- return Promise.resolve(_this9._fetchPartnersListIfNeeded()).then(function () {
10350
+ return Promise.resolve(_this4._fetchPartnersListIfNeeded()).then(function () {
10267
10351
  var _bestOpt$duration;
10268
- var partner = _this9._partners.find(function (p) {
10352
+ var partner = _this4._partners.find(function (p) {
10269
10353
  var _bestOpt$partner;
10270
10354
  return (bestOpt == null || (_bestOpt$partner = bestOpt.partner) == null ? void 0 : _bestOpt$partner.toLowerCase()) === p.path.toLowerCase();
10271
10355
  });
@@ -10276,7 +10360,7 @@
10276
10360
  max: max,
10277
10361
  smallestMin: smallestMin,
10278
10362
  greatestMax: greatestMax,
10279
- rate: rate != null ? AmountUtils.trim(rate, _this9._maxRateDigits) : null,
10363
+ rate: rate != null ? AmountUtils.trim(rate, _this4._maxRateDigits) : null,
10280
10364
  durationMinutesRange: (_bestOpt$duration = bestOpt.duration) != null ? _bestOpt$duration : null,
10281
10365
  fixed: bestOpt.fixed,
10282
10366
  rawSwapData: bestOpt,
@@ -10290,8 +10374,8 @@
10290
10374
  return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
10291
10375
  });
10292
10376
  }, function (e) {
10293
- var _e$response4;
10294
- if ((e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status) === 429) {
10377
+ var _e$response;
10378
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
10295
10379
  return {
10296
10380
  result: false,
10297
10381
  reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
@@ -10304,18 +10388,22 @@
10304
10388
  return Promise.reject(e);
10305
10389
  }
10306
10390
  };
10307
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
10391
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
10308
10392
  if (toCurrencyExtraId === void 0) {
10309
10393
  toCurrencyExtraId = "";
10310
10394
  }
10311
10395
  if (refundExtraId === void 0) {
10312
10396
  refundExtraId = "";
10313
10397
  }
10398
+ if (amountIsToReceive === void 0) {
10399
+ amountIsToReceive = false;
10400
+ }
10314
10401
  try {
10315
- var _this10 = this;
10402
+ var _this5 = this;
10316
10403
  var loggerSource = "createSwap";
10317
10404
  var partner = rawSwapData == null ? void 0 : rawSwapData.partner;
10318
- return Promise.resolve(_catch$2(function () {
10405
+ return Promise.resolve(_catch$3(function () {
10406
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10319
10407
  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) {
10320
10408
  throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + (clientIpAddress == null ? void 0 : clientIpAddress.length) + " " + fixed);
10321
10409
  }
@@ -10323,12 +10411,12 @@
10323
10411
  ) {
10324
10412
  throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
10325
10413
  }
10326
- var _this10$_supportedCoi = _this10._supportedCoins.reduce(function (prev, coinData) {
10414
+ var _this5$_supportedCoin = _this5._supportedCoins.reduce(function (prev, coinData) {
10327
10415
  return [coinData.coin.ticker === fromCoin.ticker ? coinData.hasExtraId : prev[0], coinData.coin.ticker === toCoin.ticker ? coinData.hasExtraId : prev[1]];
10328
10416
  }, [false, false]),
10329
- fromCurrencyHasExtraId = _this10$_supportedCoi[0],
10330
- toCurrencyHasExtraId = _this10$_supportedCoi[1];
10331
- return Promise.resolve(_this10._fetchSupportedCurrenciesIfNeeded()).then(function () {
10417
+ fromCurrencyHasExtraId = _this5$_supportedCoin[0],
10418
+ toCurrencyHasExtraId = _this5$_supportedCoin[1];
10419
+ return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
10332
10420
  var _toCurrencyExtraId, _refundExtraId;
10333
10421
  var requestData = {
10334
10422
  partner: partner,
@@ -10347,7 +10435,7 @@
10347
10435
  refund: refundAddress
10348
10436
  };
10349
10437
  Logger.log("Sending create request: " + safeStringify(requestData), loggerSource);
10350
- return Promise.resolve(axios__default["default"].post(_this10._URL + "/api/v2/exchange", requestData)).then(function (response) {
10438
+ return Promise.resolve(axios__default["default"].post(_this5._URL + "/api/v2/exchange", requestData)).then(function (response) {
10351
10439
  var result = response.data;
10352
10440
  Logger.log("Creation result " + safeStringify(result), loggerSource);
10353
10441
  if (result != null && result.id) {
@@ -10372,7 +10460,7 @@
10372
10460
  toAmount: AmountUtils.trim(result == null || (_result$to4 = result.to) == null ? void 0 : _result$to4.amount, toCoin.digits),
10373
10461
  toAddress: result == null || (_result$to5 = result.to) == null ? void 0 : _result$to5.address,
10374
10462
  fromCurrencyExtraId: (_result$from$extraId = result == null || (_result$from6 = result.from) == null ? void 0 : _result$from6.extraId) != null ? _result$from$extraId : "",
10375
- rate: AmountUtils.trim(rate, _this10._maxRateDigits),
10463
+ rate: AmountUtils.trim(rate, _this5._maxRateDigits),
10376
10464
  fixed: result.fixed
10377
10465
  };
10378
10466
  }
@@ -10382,7 +10470,7 @@
10382
10470
  });
10383
10471
  });
10384
10472
  }, function (e) {
10385
- var _e$response5, _e$response6;
10473
+ var _e$response2, _e$response3;
10386
10474
  Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
10387
10475
  var composeFailResult = function composeFailResult(reason) {
10388
10476
  return {
@@ -10391,8 +10479,8 @@
10391
10479
  partner: partner
10392
10480
  };
10393
10481
  };
10394
- var status = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.status;
10395
- var data = e == null || (_e$response6 = e.response) == null ? void 0 : _e$response6.data;
10482
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
10483
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
10396
10484
  if (status === 429) {
10397
10485
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10398
10486
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10441,9 +10529,9 @@
10441
10529
  };
10442
10530
  _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10443
10531
  try {
10444
- var _this11 = this;
10532
+ var _this6 = this;
10445
10533
  var loggerSource = "getExistingSwapsDetailsAndStatus";
10446
- return Promise.resolve(_catch$2(function () {
10534
+ return Promise.resolve(_catch$3(function () {
10447
10535
  if (swapIds.find(function (id) {
10448
10536
  return typeof id !== "string";
10449
10537
  })) {
@@ -10451,8 +10539,8 @@
10451
10539
  }
10452
10540
  var getNotFailingOn404 = function getNotFailingOn404(swapId) {
10453
10541
  try {
10454
- return Promise.resolve(_catch$2(function () {
10455
- return Promise.resolve(axios__default["default"].get(_this11._URL + "/api/v2/exchange/" + swapId));
10542
+ return Promise.resolve(_catch$3(function () {
10543
+ return Promise.resolve(axios__default["default"].get(_this6._URL + "/api/v2/exchange/" + swapId));
10456
10544
  }, function (error) {
10457
10545
  var _error$response;
10458
10546
  if ((error == null || (_error$response = error.response) == null ? void 0 : _error$response.status) === 404) return [];
@@ -10472,13 +10560,13 @@
10472
10560
  var swaps = wo404.map(function (r) {
10473
10561
  return r.data;
10474
10562
  }).map(function (swap, index) {
10475
- var _this11$_supportedCoi, _this11$_supportedCoi2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10476
- var fromCoin = (_this11$_supportedCoi = _this11._supportedCoins.find(function (i) {
10563
+ var _this6$_supportedCoin, _this6$_supportedCoin2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10564
+ var fromCoin = (_this6$_supportedCoin = _this6._supportedCoins.find(function (i) {
10477
10565
  return i.code === swap.from.code && i.network === swap.from.network;
10478
- })) == null ? void 0 : _this11$_supportedCoi.coin;
10479
- var toCoin = (_this11$_supportedCoi2 = _this11._supportedCoins.find(function (i) {
10566
+ })) == null ? void 0 : _this6$_supportedCoin.coin;
10567
+ var toCoin = (_this6$_supportedCoin2 = _this6._supportedCoins.find(function (i) {
10480
10568
  return i.code === swap.to.code && i.network === swap.to.network;
10481
- })) == null ? void 0 : _this11$_supportedCoi2.coin;
10569
+ })) == null ? void 0 : _this6$_supportedCoin2.coin;
10482
10570
  if (!fromCoin || !toCoin) {
10483
10571
  return []; // We skip swaps with not supported coins for now
10484
10572
  }
@@ -10487,10 +10575,10 @@
10487
10575
  };
10488
10576
  var expiresAt = toUtcTimestamp(swap.timestamps.expiresAt);
10489
10577
  var isExpiredByTime = expiresAt < Date.now();
10490
- var status = _this11._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10578
+ var status = _this6._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10491
10579
  var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
10492
10580
  var addressToSendCoinsToSwapspace = swap.from.address;
10493
- 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);
10581
+ 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);
10494
10582
  }).flat();
10495
10583
  Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
10496
10584
  return {
@@ -10499,7 +10587,7 @@
10499
10587
  };
10500
10588
  });
10501
10589
  }, function (e) {
10502
- var _e$response7, _e$response8;
10590
+ var _e$response4, _e$response5;
10503
10591
  Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
10504
10592
  var composeFailResult = function composeFailResult(reason) {
10505
10593
  return {
@@ -10507,8 +10595,8 @@
10507
10595
  reason: reason
10508
10596
  };
10509
10597
  };
10510
- var status = e == null || (_e$response7 = e.response) == null ? void 0 : _e$response7.status;
10511
- var data = e == null || (_e$response8 = e.response) == null ? void 0 : _e$response8.data;
10598
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
10599
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
10512
10600
  if (status === 429) {
10513
10601
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10514
10602
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10519,45 +10607,10 @@
10519
10607
  return Promise.reject(e);
10520
10608
  }
10521
10609
  };
10522
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
10523
- try {
10524
- var assetData = this._supportedCoins.find(function (i) {
10525
- var _i$coin3;
10526
- return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (asset == null ? void 0 : asset.ticker);
10527
- });
10528
- if (assetData) {
10529
- var corrected = assetData.validationRegexp.trim();
10530
- corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10531
- corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10532
- return address.match(corrected) != null;
10533
- }
10534
- } catch (e) {
10535
- Logger.logError(e, "isAddressValidForAsset");
10536
- }
10537
- return false;
10538
- };
10539
- _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10540
- try {
10541
- var assetData = this._supportedCoins.find(function (i) {
10542
- var _i$coin4;
10543
- return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (asset == null ? void 0 : asset.ticker);
10544
- });
10545
- if (assetData != null && assetData.hasExtraId) {
10546
- if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10547
- // We return some default name if the extraIdName is empty
10548
- return "ID";
10549
- }
10550
- return assetData == null ? void 0 : assetData.extraIdName;
10551
- }
10552
- return null;
10553
- } catch (e) {
10554
- improveAndRethrow(e, "getExtraIdNameIfPresent");
10555
- }
10556
- };
10557
10610
  return SwapspaceSwapProvider;
10558
10611
  }(SwapProvider);
10559
10612
 
10560
- function _catch$1(body, recover) {
10613
+ function _catch$2(body, recover) {
10561
10614
  try {
10562
10615
  var result = body();
10563
10616
  } catch (e) {
@@ -10754,134 +10807,590 @@
10754
10807
  if (coinToCurrentFiatRate === void 0) {
10755
10808
  coinToCurrentFiatRate = null;
10756
10809
  }
10757
- if (fiatCurrencyDecimals === void 0) {
10758
- fiatCurrencyDecimals = null;
10810
+ if (fiatCurrencyDecimals === void 0) {
10811
+ fiatCurrencyDecimals = null;
10812
+ }
10813
+ try {
10814
+ var loggerSource = "getInitialSwapData";
10815
+ return Promise.resolve(_catch$2(function () {
10816
+ /* We use some amount here that should fit at least some of the limits of the swap providers.
10817
+ * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10818
+ * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10819
+ */
10820
+ var defaultAmountUsd = bignumber_js.BigNumber("300");
10821
+ return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10822
+ var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10823
+ Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10824
+ return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10825
+ var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10826
+ if (!details) {
10827
+ throw new Error("The details are empty: " + safeStringify(details));
10828
+ }
10829
+ if (!details.result) {
10830
+ Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10831
+ 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) {
10832
+ return {
10833
+ result: false,
10834
+ reason: details.reason
10835
+ };
10836
+ } else {
10837
+ throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10838
+ }
10839
+ }
10840
+ var fiatMin = null;
10841
+ var fiatMax = null;
10842
+ var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10843
+ var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10844
+ if (fiatRate != null) {
10845
+ fiatMin = bignumber_js.BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10846
+ fiatMax = bignumber_js.BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10847
+ }
10848
+ var result = {
10849
+ result: true,
10850
+ min: details == null ? void 0 : details.smallestMin,
10851
+ fiatMin: fiatMin,
10852
+ max: details == null ? void 0 : details.greatestMax,
10853
+ fiatMax: fiatMax,
10854
+ rate: AmountUtils.trim(details.rate, 30)
10855
+ };
10856
+ Logger.log("Returning: " + safeStringify(result), loggerSource);
10857
+ return result;
10858
+ });
10859
+ });
10860
+ }, function (e) {
10861
+ Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
10862
+ improveAndRethrow(e, loggerSource);
10863
+ }));
10864
+ } catch (e) {
10865
+ return Promise.reject(e);
10866
+ }
10867
+ };
10868
+ SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10869
+ (function () {
10870
+ try {
10871
+ var _temp = _catch$2(function () {
10872
+ return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10873
+ }, function (e) {
10874
+ Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10875
+ });
10876
+ return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10877
+ } catch (e) {
10878
+ Promise.reject(e);
10879
+ }
10880
+ })();
10881
+ }
10882
+
10883
+ /**
10884
+ * If some swap is not found by id then there is no item in return list.
10885
+ *
10886
+ * @param swapProviders {SwapProvider[]} - Array of swap providers
10887
+ * @param swapIds {string[]} - Array of swap IDs
10888
+ * @return {Promise<{
10889
+ * result: true,
10890
+ * swaps: ExistingSwapWithFiatData[]
10891
+ * }|{
10892
+ * result: false,
10893
+ * reason: string
10894
+ * }>}
10895
+ */;
10896
+ SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProviders, swapIds) {
10897
+ try {
10898
+ return Promise.resolve(_catch$2(function () {
10899
+ var _interrupt;
10900
+ function _temp8() {
10901
+ if (swapIds.length > 0 && allSwaps.length === 0 && failResults.length > 0) {
10902
+ var failReasons = failResults.map(function (r) {
10903
+ return r.reason;
10904
+ });
10905
+ return {
10906
+ result: false,
10907
+ reason: failReasons.find(function (r) {
10908
+ return r !== SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED;
10909
+ }) ? failReasons.join("\n") : SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
10910
+ };
10911
+ }
10912
+ return {
10913
+ result: true,
10914
+ swaps: allSwaps
10915
+ };
10916
+ }
10917
+ var allSwaps = [];
10918
+ var remainingSwapIds = new Set(swapIds);
10919
+ var failResults = [];
10920
+ var _temp7 = _forOf(swapProviders, function (provider) {
10921
+ return Promise.resolve(provider.getExistingSwapsDetailsAndStatus([].concat(remainingSwapIds))).then(function (result) {
10922
+ var _temp6 = function () {
10923
+ if (result.result) {
10924
+ var _temp5 = function _temp5() {
10925
+ allSwaps = allSwaps.concat(_extendedSwaps);
10926
+
10927
+ // Stop if we have retrieved all swaps
10928
+ if (allSwaps.length >= swapIds.length) {
10929
+ _interrupt = 1;
10930
+ }
10931
+ };
10932
+ var _extendedSwaps = [];
10933
+ var _temp4 = _forOf(result.swaps, function (swap) {
10934
+ function _temp3() {
10935
+ remainingSwapIds["delete"](swap.id);
10936
+ }
10937
+ var _temp2 = function () {
10938
+ if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10939
+ return Promise.resolve(provider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10940
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10941
+ });
10942
+ } else {
10943
+ return Promise.resolve(Promise.all([provider.getCoinToUSDTRate(swap.fromCoin), provider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10944
+ var fromCoinFiatRate = _ref[0],
10945
+ toCoinFiatRate = _ref[1];
10946
+ _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toCoinFiatRate == null ? void 0 : toCoinFiatRate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(toCoinFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10947
+ });
10948
+ }
10949
+ }();
10950
+ return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
10951
+ });
10952
+ return _temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4);
10953
+ } else {
10954
+ failResults.push(result);
10955
+ }
10956
+ }();
10957
+ if (_temp6 && _temp6.then) return _temp6.then(function () {});
10958
+ });
10959
+ }, function () {
10960
+ return _interrupt;
10961
+ });
10962
+ return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
10963
+ }, function (e) {
10964
+ improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
10965
+ }));
10966
+ } catch (e) {
10967
+ return Promise.reject(e);
10968
+ }
10969
+ };
10970
+ return SwapUtils;
10971
+ }();
10972
+
10973
+ function _catch$1(body, recover) {
10974
+ try {
10975
+ var result = body();
10976
+ } catch (e) {
10977
+ return recover(e);
10978
+ }
10979
+ if (result && result.then) {
10980
+ return result.then(void 0, recover);
10981
+ }
10982
+ return result;
10983
+ }
10984
+ var LetsExchangeSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10985
+ _inheritsLoose(LetsExchangeSwapProvider, _SwapProvider);
10986
+ function LetsExchangeSwapProvider(apiKeysProxyUrl, cache, customCoinBuilder, useRestrictedCoinsSet) {
10987
+ var _this;
10988
+ if (customCoinBuilder === void 0) {
10989
+ customCoinBuilder = function customCoinBuilder(coin, network) {
10990
+ return null;
10991
+ };
10992
+ }
10993
+ if (useRestrictedCoinsSet === void 0) {
10994
+ useRestrictedCoinsSet = true;
10995
+ }
10996
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
10997
+ _this._partners = [];
10998
+ _this._URL = apiKeysProxyUrl + "/letsexchange";
10999
+ _this.isAggregator = false;
11000
+ _this.COINS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
11001
+ _this.coinsLastUpdateTimestamp = null;
11002
+ return _this;
11003
+ }
11004
+ var _proto = LetsExchangeSwapProvider.prototype;
11005
+ _proto.getSwapCreationInfoTtlMs = function getSwapCreationInfoTtlMs() {
11006
+ return 110000;
11007
+ };
11008
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
11009
+ try {
11010
+ var _this2 = this;
11011
+ var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
11012
+ return Promise.resolve(_catch$1(function () {
11013
+ var _temp = function (_this2$_supportedCoin) {
11014
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length) || !_this2.coinsLastUpdateTimestamp || _this2.coinsLastUpdateTimestamp + _this2.COINS_EXPIRATION_TIME_MS < Date.now()) {
11015
+ return Promise.resolve(axios__default["default"].get(_this2._URL + "/v2/coins")).then(function (rawResponse) {
11016
+ var _rawResponse$data, _rawResponse$data2;
11017
+ Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
11018
+ var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
11019
+ Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
11020
+ _this2._supportedCoins = allowedCoins.map(function (item) {
11021
+ var code = item.code.toUpperCase();
11022
+ if (!Array.isArray(item.networks)) return [];
11023
+ return item.networks.map(function (networkDetails) {
11024
+ var network = networkDetails.code.toUpperCase();
11025
+ var coin = _this2._customCoinBuilder(code, network);
11026
+ if (!coin && !_this2.useRestrictedCoinsSet) {
11027
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
11028
+ var ticker = "" + code + (code === network ? "" : network);
11029
+ var defaultDecimalPlacesForCoinNotSupportedOOB = DEFAULT_CRYPTO_DECIMAL_COUNT;
11030
+ var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
11031
+ 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);
11032
+ }
11033
+ if (coin) {
11034
+ var _networkDetails$extra, _networkDetails$valid;
11035
+ return {
11036
+ coin: coin,
11037
+ code: item.code,
11038
+ network: networkDetails.code,
11039
+ hasExtraId: !!networkDetails.has_extra,
11040
+ extraIdName: (_networkDetails$extra = networkDetails.extra_name) != null ? _networkDetails$extra : null,
11041
+ isPopular: item.rating || 0,
11042
+ iconURL: item.icon ? item.icon : FALLBACK_ASSET_ICON_URL,
11043
+ deposit: true,
11044
+ // Letsexchange provide no such details
11045
+ withdrawal: true,
11046
+ // Letsexchange provide no such details
11047
+ validationRegexp: (_networkDetails$valid = networkDetails.validation_address_regex) != null ? _networkDetails$valid : null,
11048
+ 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)
11049
+ };
11050
+ }
11051
+ return [];
11052
+ });
11053
+ }).flat();
11054
+ _this2.coinsLastUpdateTimestamp = Date.now();
11055
+ _this2._putPopularCoinsFirst();
11056
+ });
11057
+ }
11058
+ }();
11059
+ if (_temp && _temp.then) return _temp.then(function () {});
11060
+ }, function (e) {
11061
+ improveAndRethrow(e, loggerSource);
11062
+ }));
11063
+ } catch (e) {
11064
+ return Promise.reject(e);
11065
+ }
11066
+ };
11067
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
11068
+ if (fixed === void 0) {
11069
+ fixed = false;
11070
+ }
11071
+ if (amountIsToReceive === void 0) {
11072
+ amountIsToReceive = false;
11073
+ }
11074
+ try {
11075
+ var _this3 = this;
11076
+ var loggerSource = "getSwapInfo";
11077
+ return Promise.resolve(_catch$1(function () {
11078
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || bignumber_js.BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean" || amountIsToReceive && !fixed) {
11079
+ throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed + ", " + amountIsToReceive);
11080
+ }
11081
+ var fromCoinDetails = _this3._supportedCoins.find(function (i) {
11082
+ var _i$coin;
11083
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11084
+ });
11085
+ var toCoinDetails = _this3._supportedCoins.find(function (i) {
11086
+ var _i$coin2;
11087
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11088
+ });
11089
+ if (!fromCoinDetails || !toCoinDetails) {
11090
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11091
+ }
11092
+ if (!fromCoinDetails.deposit || !fromCoinDetails.isAvailable || !toCoinDetails.withdrawal || !toCoinDetails.isAvailable) {
11093
+ return {
11094
+ result: false,
11095
+ reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
11096
+ };
11097
+ }
11098
+ var pathAndQuery = "/v1/info" + (amountIsToReceive ? "-revert" : "?float=" + !fixed);
11099
+ return Promise.resolve(axios__default["default"].post("" + _this3._URL + pathAndQuery, {
11100
+ from: fromCoinDetails.code,
11101
+ to: toCoinDetails.code,
11102
+ network_from: fromCoinDetails.network,
11103
+ network_to: toCoinDetails.network,
11104
+ amount: amountCoins,
11105
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11106
+ })).then(function (response) {
11107
+ Logger.log("Retrieved " + (response == null ? void 0 : response.data), loggerSource);
11108
+ var data = response.data;
11109
+
11110
+ // TODO: [dev] add SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING - request alternative rate. task_id=
11111
+
11112
+ // TODO: [feature, low] implement extra coins to fit min/max if there are frequent errors due to min/max exceeding
11113
+ // let extraCoinsToFitMinMax = "0";
11114
+ // if (typeof fromCoinToUsdRate === "string" && BigNumber(fromCoinToUsdRate).gt("0")) {
11115
+ // const extraUsdToFitMinMax = BigNumber("1"); // We correct the limits as the exact limit can fluctuate and cause failed swap creation
11116
+ // extraCoinsToFitMinMax = AmountUtils.trim(extraUsdToFitMinMax.div(fromCoinToUsdRate), fromCoin.digits);
11117
+ // }
11118
+ var min = null;
11119
+ if (data != null && data.min_amount) {
11120
+ min = AmountUtils.trim(data == null ? void 0 : data.min_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11121
+ }
11122
+ var max = null;
11123
+ if (data != null && data.max_amount) {
11124
+ max = AmountUtils.trim(data == null ? void 0 : data.max_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11125
+ }
11126
+ if (data.success === false && data.error) {
11127
+ // TODO: [dev] waiting for response from letsexchange about their not-documented responses
11128
+ // {
11129
+ // "success": false,
11130
+ // "error": "Internal error"
11131
+ // }
11132
+ throw new Error("Failed to estimate swap letsexchange");
11133
+ }
11134
+ if (bignumber_js.BigNumber(data.rate).eq("0") || bignumber_js.BigNumber(data.amount).eq("0")) {
11135
+ // TODO actualize according to letsexchage clarification - decide, can we count on min/max abcense? task_id=76512110797f4eab8b37f1bb789825cb
11136
+ // amount: "0", rate: "0", rate_id: ""
11137
+ var reason = SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED;
11138
+ if (min && bignumber_js.BigNumber(amountCoins).lt(min)) {
11139
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_LOW;
11140
+ } else if (max && bignumber_js.BigNumber(amountCoins).gt(max)) {
11141
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_HIGH;
11142
+ } else if (!amountIsToReceive) {
11143
+ // If we are not requesting receiving amount (it cannot be floating-rate)
11144
+ // todo [feature, moderate] request alternative rate. task_id=31884db5392f49738c20a86115c90e1f
11145
+ // const alternativeRate = 1;
11146
+ // const alternativeRateAvailable = alternativeRate;
11147
+ // if (alternativeRateAvailable) {
11148
+ // reason = fixed
11149
+ // ? SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING
11150
+ // : SwapProvider.NO_SWAPS_REASONS.NO_FLOATING_BUT_HAVE_FIXED;
11151
+ // }
11152
+ }
11153
+ return {
11154
+ result: false,
11155
+ reason: reason,
11156
+ smallestMin: min,
11157
+ greatestMax: max
11158
+ };
11159
+ }
11160
+ var rate = amountIsToReceive ? bignumber_js.BigNumber(amountCoins).div(data.amount) : bignumber_js.BigNumber(data.amount).div(amountCoins);
11161
+ return {
11162
+ result: true,
11163
+ min: min,
11164
+ max: max,
11165
+ smallestMin: min,
11166
+ greatestMax: max,
11167
+ rate: AmountUtils.trim(rate, _this3._maxRateDigits),
11168
+ durationMinutesRange: null,
11169
+ fixed: fixed,
11170
+ rawSwapData: data,
11171
+ isRefundAddressRequired: false
11172
+ };
11173
+ });
11174
+ }, function (e) {
11175
+ var _e$response;
11176
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
11177
+ return {
11178
+ result: false,
11179
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11180
+ };
11181
+ }
11182
+ Logger.log("Internal error when getting swap options " + safeStringify(e), loggerSource);
11183
+ improveAndRethrow(e, loggerSource);
11184
+ }));
11185
+ } catch (e) {
11186
+ return Promise.reject(e);
11187
+ }
11188
+ };
11189
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11190
+ if (toCurrencyExtraId === void 0) {
11191
+ toCurrencyExtraId = "";
11192
+ }
11193
+ if (refundExtraId === void 0) {
11194
+ refundExtraId = "";
11195
+ }
11196
+ if (amountIsToReceive === void 0) {
11197
+ amountIsToReceive = false;
10759
11198
  }
10760
11199
  try {
10761
- var loggerSource = "getInitialSwapData";
11200
+ var _this4 = this;
11201
+ var loggerSource = "createSwap";
10762
11202
  return Promise.resolve(_catch$1(function () {
10763
- /* We use some amount here that should fit at least some of the limits of the swap providers.
10764
- * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10765
- * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10766
- */
10767
- var defaultAmountUsd = bignumber_js.BigNumber("300");
10768
- return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10769
- var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10770
- Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10771
- return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10772
- var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10773
- if (!details) {
10774
- throw new Error("The details are empty: " + safeStringify(details));
10775
- }
10776
- if (!details.result) {
10777
- Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10778
- 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) {
10779
- return {
10780
- result: false,
10781
- reason: details.reason
10782
- };
10783
- } else {
10784
- throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10785
- }
10786
- }
10787
- var fiatMin = null;
10788
- var fiatMax = null;
10789
- var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10790
- var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10791
- if (fiatRate != null) {
10792
- fiatMin = bignumber_js.BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10793
- fiatMax = bignumber_js.BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10794
- }
10795
- var result = {
11203
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean") {
11204
+ throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + fixed);
11205
+ }
11206
+ if (typeof rawSwapData !== "object" || fixed && !rawSwapData.rate_id) {
11207
+ throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
11208
+ }
11209
+ var fromCoinDetails = _this4._supportedCoins.find(function (i) {
11210
+ var _i$coin3;
11211
+ return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11212
+ });
11213
+ var toCoinDetails = _this4._supportedCoins.find(function (i) {
11214
+ var _i$coin4;
11215
+ return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11216
+ });
11217
+ if (!fromCoinDetails || !toCoinDetails) {
11218
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11219
+ }
11220
+ var requestBody = {
11221
+ coin_from: fromCoinDetails.code,
11222
+ network_from: fromCoinDetails.network,
11223
+ coin_to: toCoinDetails.code,
11224
+ network_to: toCoinDetails.network,
11225
+ withdrawal: toAddress,
11226
+ withdrawal_extra_id: toCurrencyExtraId,
11227
+ "return": refundAddress,
11228
+ return_extra_id: refundExtraId,
11229
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11230
+ };
11231
+ if (amountIsToReceive) {
11232
+ requestBody.withdrawal_amount = amount;
11233
+ } else {
11234
+ requestBody.deposit_amount = amount;
11235
+ }
11236
+ if (fixed) {
11237
+ requestBody.rate_id = rawSwapData.rate_id;
11238
+ }
11239
+ return Promise.resolve(axios__default["default"].post(_this4._URL + "/v1/transaction" + (amountIsToReceive ? "-revert" : "?float=" + !fixed), requestBody)).then(function (response) {
11240
+ var result = response.data;
11241
+ Logger.log("Creation result " + safeStringify(result), loggerSource);
11242
+ if (result != null && result.transaction_id) {
11243
+ var _result$rate, _result$deposit_extra;
11244
+ var rate = bignumber_js.BigNumber((_result$rate = result.rate) != null ? _result$rate : 0).isZero() ? bignumber_js.BigNumber(result.withdrawal_amount).div(result.deposit_amount) : bignumber_js.BigNumber(result.rate);
11245
+ return {
10796
11246
  result: true,
10797
- min: details == null ? void 0 : details.smallestMin,
10798
- fiatMin: fiatMin,
10799
- max: details == null ? void 0 : details.greatestMax,
10800
- fiatMax: fiatMax,
10801
- rate: AmountUtils.trim(details.rate, 30)
11247
+ swapId: result.transaction_id,
11248
+ fromCoin: fromCoin,
11249
+ fromAmount: AmountUtils.trim(result.deposit_amount, fromCoin.digits),
11250
+ fromAddress: result.deposit,
11251
+ toCoin: toCoin,
11252
+ toAmount: AmountUtils.trim(result.withdrawal_amount, toCoin.digits),
11253
+ toAddress: result.withdrawal,
11254
+ fromCurrencyExtraId: (_result$deposit_extra = result.deposit_extra_id) != null ? _result$deposit_extra : "",
11255
+ rate: AmountUtils.trim(rate, _this4._maxRateDigits),
11256
+ fixed: !result.is_float
10802
11257
  };
10803
- Logger.log("Returning: " + safeStringify(result), loggerSource);
10804
- return result;
10805
- });
11258
+ }
11259
+ var errorMessage = "Swap creation succeeded but the response is wrong: " + safeStringify(response);
11260
+ Logger.log(errorMessage, loggerSource);
11261
+ throw new Error(errorMessage);
10806
11262
  });
10807
11263
  }, function (e) {
10808
- Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
11264
+ var _e$response2, _e$response3;
11265
+ Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
11266
+ var composeFailResult = function composeFailResult(reason) {
11267
+ return {
11268
+ result: false,
11269
+ reason: reason
11270
+ };
11271
+ };
11272
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
11273
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
11274
+ if (status === 429) {
11275
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11276
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11277
+ }
11278
+ // TODO: [feature, low] add custom errors handling - waiting for response from letsexchange. task_id=00d2e435f6df4fb99af912135bd9ee27
11279
+ // 422 - missing params
11280
+ Logger.log("Internal error for swap: " + safeStringify(e), loggerSource);
10809
11281
  improveAndRethrow(e, loggerSource);
10810
11282
  }));
10811
11283
  } catch (e) {
10812
11284
  return Promise.reject(e);
10813
11285
  }
10814
11286
  };
10815
- SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10816
- (function () {
10817
- try {
10818
- var _temp = _catch$1(function () {
10819
- return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10820
- }, function (e) {
10821
- Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10822
- });
10823
- return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10824
- } catch (e) {
10825
- Promise.reject(e);
10826
- }
10827
- })();
10828
- }
10829
-
10830
- /**
10831
- * If some swap is not found by id then there is no item in return list.
10832
- *
10833
- * @param swapProvider {SwapProvider}
10834
- * @param swapIds {string[]}
10835
- * @return {Promise<{
10836
- * result: true,
10837
- * swaps: ExistingSwapWithFiatData[]
10838
- * }|{
10839
- * result: false,
10840
- * reason: string
10841
- * }>}
10842
- */;
10843
- SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProvider, swapIds) {
11287
+ _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10844
11288
  try {
11289
+ var _this5 = this;
11290
+ var loggerSource = "getExistingSwapsDetailsAndStatus";
10845
11291
  return Promise.resolve(_catch$1(function () {
10846
- return Promise.resolve(swapProvider.getExistingSwapsDetailsAndStatus(swapIds)).then(function (result) {
10847
- var _temp5 = function () {
10848
- if (result.result) {
10849
- var _temp4 = function _temp4() {
10850
- result.swaps = _extendedSwaps;
10851
- };
10852
- var _extendedSwaps = [];
10853
- var _temp3 = _forOf(result.swaps, function (swap) {
10854
- var _temp2 = function () {
10855
- if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10856
- return Promise.resolve(swapProvider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10857
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(rate.rate).toNumber() : null, (rate == null ? void 0 : rate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(rate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10858
- });
10859
- } else {
10860
- return Promise.resolve(Promise.all([swapProvider.getCoinToUSDTRate(swap.fromCoin), swapProvider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10861
- var fromCoinFiatRate = _ref[0],
10862
- toConFiatRate = _ref[1];
10863
- _extendedSwaps.push(ExistingSwapWithFiatData.fromExistingSwap(swap, (fromCoinFiatRate == null ? void 0 : fromCoinFiatRate.rate) != null ? bignumber_js.BigNumber(swap.fromAmount).times(fromCoinFiatRate.rate).toNumber() : null, (toConFiatRate == null ? void 0 : toConFiatRate.rate) != null ? bignumber_js.BigNumber(swap.toAmount).times(toConFiatRate.rate).toNumber() : null, "USD", FiatCurrenciesService.getCurrencyDecimalCountByCode("USD")));
10864
- });
10865
- }
10866
- }();
10867
- if (_temp2 && _temp2.then) return _temp2.then(function () {});
10868
- });
10869
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
11292
+ if (swapIds.find(function (id) {
11293
+ return typeof id !== "string";
11294
+ })) {
11295
+ throw new Error("Swap id is not string: " + safeStringify(swapIds));
11296
+ }
11297
+ return Promise.resolve(axios__default["default"].get(_this5._URL + "/v1/transactions-list?ids[]=" + swapIds.join("&ids[]="))).then(function (response) {
11298
+ Logger.log("All swaps RAW: " + safeStringify(response.data), loggerSource);
11299
+ var swaps = response.data.map(function (swap, index) {
11300
+ var _this5$_supportedCoin, _this5$_supportedCoin2, _swap$deposit_extra_i, _swap$withdrawal_extr, _swap$return_extra_id;
11301
+ var fromCoin = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
11302
+ return i.code === swap.coin_from && i.network === swap.coin_from_network;
11303
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
11304
+ var toCoin = (_this5$_supportedCoin2 = _this5._supportedCoins.find(function (i) {
11305
+ return i.code === swap.coin_to && i.network === swap.coin_to_network;
11306
+ })) == null ? void 0 : _this5$_supportedCoin2.coin;
11307
+ if (!fromCoin || !toCoin) {
11308
+ return []; // We skip swaps with not supported coins for now
10870
11309
  }
10871
- }();
10872
- return _temp5 && _temp5.then ? _temp5.then(function () {
10873
- return result;
10874
- }) : result;
11310
+ var toUtcTimestamp = function toUtcTimestamp(timeStr) {
11311
+ return Date.parse(timeStr.match(/.+[Zz]$/) ? timeStr : timeStr + "Z");
11312
+ };
11313
+ var expiresAt = swap.expired_at ? swap.expired_at * 1000 : null;
11314
+ var createdAt = swap.created_at ? toUtcTimestamp("" + swap.created_at) : null;
11315
+ var isExpiredByTime = expiresAt && expiresAt < Date.now();
11316
+ var status = _this5._mapLetsExchangeStatusToRabbitStatus(swap.status, isExpiredByTime);
11317
+ var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
11318
+ 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);
11319
+ }).flat();
11320
+ Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
11321
+ return {
11322
+ result: true,
11323
+ swaps: swaps
11324
+ };
10875
11325
  });
10876
11326
  }, function (e) {
10877
- improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
11327
+ var _e$response4, _e$response5;
11328
+ Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
11329
+ var composeFailResult = function composeFailResult(reason) {
11330
+ return {
11331
+ result: false,
11332
+ reason: reason
11333
+ };
11334
+ };
11335
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
11336
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
11337
+ if (status === 429) {
11338
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11339
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11340
+ }
11341
+ improveAndRethrow(e, loggerSource);
10878
11342
  }));
10879
11343
  } catch (e) {
10880
11344
  return Promise.reject(e);
10881
11345
  }
11346
+ } // TODO: [dev] Serg, please check this during the review to make sure I did no mistakes in statuses mapping.
11347
+ // I will remove these comments after the review. https://api.letsexchange.io/doc
11348
+ // wait The exchange has just been created and it’s waiting for coins to reach the deposit wallet
11349
+ // confirmation The transaction appears in mempool and now it is waiting for necessary network confirmations to start.
11350
+ // confirmed The user’s payment is confirmed, the exchange process is about to start.
11351
+ // exchanging The exchange process is running.
11352
+ // sending Funds are being sent to the recipient`s address.
11353
+ // sending_confirmation The outgoing transaction is waiting for network confirmations.
11354
+ // success The exchange is completed and the funds are successfully sent to the recipient’s address.
11355
+ // aml_check_failed The deposit was marked as risky by AML check service.
11356
+ // overdue The deposit receiving time for this transaction has expired.
11357
+ // error The transaction has failed. In most cases, the amount that was sent differs from the amount that was specified when creating the transaction.
11358
+ // refund The exchange failed and the coins were refunded to the user's wallet.
11359
+ ;
11360
+ _proto._mapLetsExchangeStatusToRabbitStatus = function _mapLetsExchangeStatusToRabbitStatus(status, isExpiredByTime) {
11361
+ switch (status) {
11362
+ case "wait":
11363
+ if (isExpiredByTime) {
11364
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11365
+ }
11366
+ return SwapProvider.SWAP_STATUSES.WAITING_FOR_PAYMENT;
11367
+ case "confirmation":
11368
+ return SwapProvider.SWAP_STATUSES.CONFIRMING;
11369
+ case "confirmed":
11370
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11371
+ case "exchanging":
11372
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11373
+ case "sending":
11374
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11375
+ case "sending_confirmation":
11376
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11377
+ case "success":
11378
+ return SwapProvider.SWAP_STATUSES.COMPLETED;
11379
+ case "refund":
11380
+ return SwapProvider.SWAP_STATUSES.REFUNDED;
11381
+ case "overdue":
11382
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11383
+ case "aml_check_failed":
11384
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11385
+ case "error":
11386
+ return SwapProvider.SWAP_STATUSES.FAILED;
11387
+ default:
11388
+ throw new Error("Unknown LetsExchange status: " + status);
11389
+ }
10882
11390
  };
10883
- return SwapUtils;
10884
- }();
11391
+ return LetsExchangeSwapProvider;
11392
+ }(SwapProvider);
11393
+ LetsExchangeSwapProvider.AFFILIATE_ID = "0zbj9hf7xg7jgdgv";
10885
11394
 
10886
11395
  function _catch(body, recover) {
10887
11396
  try {
@@ -10899,13 +11408,16 @@
10899
11408
  this._swapProvider = new SwapspaceSwapProvider(apiKeysProxyUrl, cache, function () {
10900
11409
  return null;
10901
11410
  }, false);
11411
+ this._fixedSwapProvider = new LetsExchangeSwapProvider(apiKeysProxyUrl, cache, function () {
11412
+ return null;
11413
+ }, false);
10902
11414
  }
10903
11415
  var _proto = PublicSwapService.prototype;
10904
11416
  _proto.initialize = function initialize() {
10905
11417
  try {
10906
11418
  var _this = this;
10907
11419
  var _temp = _catch(function () {
10908
- return Promise.resolve(_this._swapProvider.initialize()).then(function () {});
11420
+ return Promise.resolve(Promise.all([_this._swapProvider.initialize(), _this._fixedSwapProvider.initialize()])).then(function () {});
10909
11421
  }, function (e) {
10910
11422
  Logger.logError(e, "PublicSwapService.initialize");
10911
11423
  });
@@ -10913,39 +11425,61 @@
10913
11425
  } catch (e) {
10914
11426
  return Promise.reject(e);
10915
11427
  }
10916
- };
11428
+ }
11429
+ /**
11430
+ * Gets all currencies across all partners. Useful for sitemap or supported currencies count/list.
11431
+ *
11432
+ * @return {Promise<{result: boolean, coins: Coin[]}|{result: boolean, reason: string}>}
11433
+ */
11434
+ ;
10917
11435
  _proto.getAllSupportedCurrenciesListForPublicSwap = function getAllSupportedCurrenciesListForPublicSwap() {
10918
11436
  try {
10919
11437
  var _this2 = this;
10920
11438
  var loggerSource = "getAllSupportedCurrenciesListForPublicSwap";
10921
11439
  return Promise.resolve(_catch(function () {
10922
- return Promise.resolve(_this2._swapProvider.getAllSupportedCurrencies()).then(function (result) {
10923
- var _result$coins;
10924
- if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10925
- SwapUtils.safeHandleRequestsLimitExceeding();
11440
+ return Promise.resolve(_this2.initialize()).then(function () {
11441
+ return Promise.resolve(Promise.all([_this2._fixedSwapProvider.getAllSupportedCurrencies(), _this2._swapProvider.getAllSupportedCurrencies()])).then(function (result) {
11442
+ var _result$0$coins, _result$1$coins, _result$coins;
11443
+ var allCoins = [].concat((_result$0$coins = result[0].coins) != null ? _result$0$coins : []);
11444
+ ((_result$1$coins = result[1].coins) != null ? _result$1$coins : []).forEach(function (c) {
11445
+ if (!allCoins.find(function (existingCoin) {
11446
+ return existingCoin.ticker === c.ticker;
11447
+ })) {
11448
+ allCoins.push(c);
11449
+ }
11450
+ });
11451
+ if (result[0].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED || result[1].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11452
+ SwapUtils.safeHandleRequestsLimitExceeding();
11453
+ // TODO: [dev] improve this during the whitebit integration. task_id=20e7e41211b540d081bf98f392a34b2c
11454
+ // return {
11455
+ // result: false,
11456
+ // reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
11457
+ // };
11458
+ } else if (result[0].reason || result[1].reason) {
11459
+ console.log("Failed to get all supported coins", result[0].reason, result[1].reason);
11460
+ }
11461
+ Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10926
11462
  return {
10927
- result: false,
10928
- reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11463
+ result: true,
11464
+ coins: allCoins
10929
11465
  };
10930
- }
10931
- Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10932
- return {
10933
- result: true,
10934
- coins: result.coins
10935
- };
11466
+ });
10936
11467
  });
10937
11468
  }, function (e) {
10938
- improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
11469
+ improveAndRethrow(e, "getAllSupportedCurrenciesListForPublicSwap");
10939
11470
  }));
10940
11471
  } catch (e) {
10941
11472
  return Promise.reject(e);
10942
11473
  }
10943
11474
  };
10944
- _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap() {
11475
+ _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap(fixed) {
11476
+ if (fixed === void 0) {
11477
+ fixed = false;
11478
+ }
10945
11479
  try {
10946
11480
  var _this3 = this;
10947
11481
  return Promise.resolve(_catch(function () {
10948
- return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false));
11482
+ return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false, fixed));
10949
11483
  }, function (e) {
10950
11484
  improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
10951
11485
  }));
@@ -10953,11 +11487,14 @@
10953
11487
  return Promise.reject(e);
10954
11488
  }
10955
11489
  };
10956
- _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap() {
11490
+ _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap(fixed) {
11491
+ if (fixed === void 0) {
11492
+ fixed = false;
11493
+ }
10957
11494
  try {
10958
11495
  var _this4 = this;
10959
11496
  return Promise.resolve(_catch(function () {
10960
- return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true));
11497
+ return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true, fixed));
10961
11498
  }, function (e) {
10962
11499
  improveAndRethrow(e, "getWithdrawCurrenciesListForPublicSwap");
10963
11500
  }));
@@ -10965,15 +11502,19 @@
10965
11502
  return Promise.reject(e);
10966
11503
  }
10967
11504
  };
10968
- _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw) {
11505
+ _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw, fixed) {
10969
11506
  if (withdraw === void 0) {
10970
11507
  withdraw = false;
10971
11508
  }
11509
+ if (fixed === void 0) {
11510
+ fixed = false;
11511
+ }
10972
11512
  try {
10973
11513
  var _this5 = this;
10974
11514
  var loggerSource = "getCurrenciesListForPublicSwap";
10975
11515
  return Promise.resolve(_catch(function () {
10976
- return Promise.resolve(withdraw ? _this5._swapProvider.getWithdrawalCurrencies() : _this5._swapProvider.getDepositCurrencies()).then(function (result) {
11516
+ var provider = fixed ? _this5._fixedSwapProvider : _this5._swapProvider;
11517
+ return Promise.resolve(withdraw ? provider.getWithdrawalCurrencies() : provider.getDepositCurrencies()).then(function (result) {
10977
11518
  var _result$coins2;
10978
11519
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10979
11520
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -10998,6 +11539,9 @@
10998
11539
  /**
10999
11540
  * Retrieves initial data for swapping two coins.
11000
11541
  *
11542
+ * Always FLOATING rate, FIXED is not supported - if you want to change it the default rate - all
11543
+ * the swaps code logic should be verified to align with this change.
11544
+ *
11001
11545
  * @param fromCoin {Coin}
11002
11546
  * @param toCoin {Coin}
11003
11547
  * @return {Promise<{
@@ -11050,6 +11594,8 @@
11050
11594
  * @param fromAmountCoins {string}
11051
11595
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
11052
11596
  * @param [withoutFiat=false] {boolean} pass true if you don't need the fiat equivalent - this will diminish requests count
11597
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11598
+ * False means the amount is the sending amount.
11053
11599
  * @return {Promise<{
11054
11600
  * result: false,
11055
11601
  * reason: string,
@@ -11064,21 +11610,24 @@
11064
11610
  * }>}
11065
11611
  */
11066
11612
  ;
11067
- _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat) {
11613
+ _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat, amountIsToReceive) {
11068
11614
  if (fixed === void 0) {
11069
11615
  fixed = false;
11070
11616
  }
11071
11617
  if (withoutFiat === void 0) {
11072
11618
  withoutFiat = false;
11073
11619
  }
11620
+ if (amountIsToReceive === void 0) {
11621
+ amountIsToReceive = false;
11622
+ }
11074
11623
  try {
11075
11624
  var _this7 = this;
11076
11625
  var loggerSource = "getPublicSwapDetails";
11077
11626
  return Promise.resolve(_catch(function () {
11078
- function _temp2(_this7$_swapProvider$) {
11079
- var _this7$_swapProvider$2;
11080
- var coinUsdtRate = withoutFiat ? _this7$_swapProvider$ : (_this7$_swapProvider$2 = _this7$_swapProvider$ == null ? void 0 : _this7$_swapProvider$.rate) != null ? _this7$_swapProvider$2 : null;
11081
- return Promise.resolve(_this7._swapProvider.getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate)).then(function (details) {
11627
+ function _temp2(_getCoinToUSDTRate) {
11628
+ var _getCoinToUSDTRate$ra;
11629
+ var coinUsdtRate = withoutFiat ? _getCoinToUSDTRate : (_getCoinToUSDTRate$ra = _getCoinToUSDTRate == null ? void 0 : _getCoinToUSDTRate.rate) != null ? _getCoinToUSDTRate$ra : null;
11630
+ return Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate, amountIsToReceive)).then(function (details) {
11082
11631
  var _result$swapCreationI, _result$swapCreationI2;
11083
11632
  // eslint-disable-next-line no-console
11084
11633
  console.log("getSwapInfo result: ", details);
@@ -11139,7 +11688,10 @@
11139
11688
  return result;
11140
11689
  });
11141
11690
  }
11142
- return withoutFiat ? _temp2(null) : Promise.resolve(_this7._swapProvider.getCoinToUSDTRate(fromCoin)).then(_temp2);
11691
+ if (amountIsToReceive && !fixed) {
11692
+ throw new Error("Estimating allowed only for fixed rate.");
11693
+ }
11694
+ return withoutFiat ? _temp2(null) : Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getCoinToUSDTRate(fromCoin)).then(_temp2);
11143
11695
  }, function (e) {
11144
11696
  improveAndRethrow(e, loggerSource);
11145
11697
  }));
@@ -11152,13 +11704,15 @@
11152
11704
  *
11153
11705
  * @param fromCoin {Coin}
11154
11706
  * @param toCoin {Coin}
11155
- * @param fromAmount {string}
11707
+ * @param amount {string}
11156
11708
  * @param swapCreationInfo {BaseSwapCreationInfo}
11157
11709
  * @param toAddress {string}
11158
11710
  * @param refundAddress {string}
11159
11711
  * @param clientIp {string}
11160
11712
  * @param [toCurrencyExtraId] {string}
11161
11713
  * @param [refundExtraId] {string}
11714
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11715
+ * False means the amount is the sending amount.
11162
11716
  * @return {Promise<{
11163
11717
  * result: true,
11164
11718
  * fiatCurrencyCode: string,
@@ -11181,20 +11735,23 @@
11181
11735
  * }>}
11182
11736
  */
11183
11737
  ;
11184
- _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, fromAmount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId) {
11738
+ _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, amount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11739
+ if (amountIsToReceive === void 0) {
11740
+ amountIsToReceive = false;
11741
+ }
11185
11742
  try {
11186
11743
  var _this8 = this;
11187
11744
  var loggerSource = "createPublicSwap";
11188
11745
  return Promise.resolve(_catch(function () {
11189
11746
  var _swapCreationInfo$fro, _swapCreationInfo$toC;
11190
- if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof fromAmount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11191
- throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + fromAmount + " " + swapCreationInfo);
11747
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || swapCreationInfo.isRefundAddressRequired && (typeof refundAddress !== "string" || refundAddress.length === 0) || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11748
+ throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + amount + " " + swapCreationInfo);
11192
11749
  }
11193
- Logger.log("Start: " + fromAmount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11750
+ Logger.log("Start: " + amount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11194
11751
  fromCoin: swapCreationInfo == null || (_swapCreationInfo$fro = swapCreationInfo.fromCoin) == null ? void 0 : _swapCreationInfo$fro.ticker,
11195
11752
  toCoin: swapCreationInfo == null || (_swapCreationInfo$toC = swapCreationInfo.toCoin) == null ? void 0 : _swapCreationInfo$toC.ticker
11196
11753
  })), loggerSource);
11197
- return Promise.resolve(_this8._swapProvider.createSwap(fromCoin, toCoin, fromAmount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId)).then(function (result) {
11754
+ 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) {
11198
11755
  var _exit;
11199
11756
  function _temp6(_result8) {
11200
11757
  if (_exit) return _result8;
@@ -11224,7 +11781,7 @@
11224
11781
  if (result.result && result != null && result.swapId) {
11225
11782
  var _temp4 = function _temp4() {
11226
11783
  var _result$fromCurrencyE;
11227
- // TODO: feature, cirtical] add GA event. task_id=tbd
11784
+ // TODO: feature, cirtical] add GA event. task_id=091004f1b6b748b29ddece6a130df904
11228
11785
  EventBusInstance__default["default"].dispatch(PublicSwapService.PUBLIC_SWAP_CREATED_EVENT, null, fromCoin.ticker, toCoin.ticker, _fromAmountFiat);
11229
11786
  var toReturn = {
11230
11787
  result: true,
@@ -11304,7 +11861,7 @@
11304
11861
  var _this9 = this;
11305
11862
  var loggerSource = "getPublicExistingSwapDetailsAndStatus";
11306
11863
  return Promise.resolve(_catch(function () {
11307
- return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts(_this9._swapProvider, swapIds)).then(function (result) {
11864
+ return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts([_this9._swapProvider, _this9._fixedSwapProvider], swapIds)).then(function (result) {
11308
11865
  if (!(result != null && result.result)) {
11309
11866
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11310
11867
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -11399,18 +11956,24 @@
11399
11956
 
11400
11957
  /**
11401
11958
  * @param coinOrTicker {Coin|string}
11959
+ * @param [isFixed=true] {boolean} rate type
11402
11960
  * @return {string} icon URL (ready to use)
11403
11961
  */;
11404
- _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker) {
11405
- return this._swapProvider.getIconUrl(coinOrTicker);
11962
+ _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker, isFixed) {
11963
+ // TODO: [feature, high] improve this logic - currently hacked to show better icons from fixed provider. task_id=3b6b8c2a9df04a86aaff2e070424b64f
11964
+ return this._fixedSwapProvider.getIconUrl(coinOrTicker);
11406
11965
  }
11407
11966
 
11408
11967
  /**
11409
11968
  * @param ticker {string}
11969
+ * @param [fixed=false] {boolean}
11410
11970
  * @return {Coin|null}
11411
11971
  */;
11412
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
11413
- return this._swapProvider.getCoinByTickerIfPresent(ticker);
11972
+ _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker, fixed) {
11973
+ if (fixed === void 0) {
11974
+ fixed = false;
11975
+ }
11976
+ return !fixed ? this._swapProvider.getCoinByTickerIfPresent(ticker) : this._fixedSwapProvider.getCoinByTickerIfPresent(ticker);
11414
11977
  }
11415
11978
 
11416
11979
  /**
@@ -11423,8 +11986,18 @@
11423
11986
  var _this11 = this;
11424
11987
  return Promise.resolve(_catch(function () {
11425
11988
  return Promise.resolve(_this11._swapProvider.getCoinToUSDTRate(asset)).then(function (result) {
11426
- var _result$rate;
11427
- return (_result$rate = result == null ? void 0 : result.rate) != null ? _result$rate : null;
11989
+ function _temp10() {
11990
+ var _result$rate, _result13;
11991
+ return (_result$rate = (_result13 = result) == null ? void 0 : _result13.rate) != null ? _result$rate : null;
11992
+ }
11993
+ var _temp9 = function (_result14) {
11994
+ if (((_result14 = result) == null ? void 0 : _result14.rate) == null) {
11995
+ return Promise.resolve(_this11._fixedSwapProvider.getCoinToUSDTRate(asset)).then(function (_this11$_fixedSwapPro) {
11996
+ result = _this11$_fixedSwapPro;
11997
+ });
11998
+ }
11999
+ }();
12000
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
11428
12001
  });
11429
12002
  }, function (e) {
11430
12003
  improveAndRethrow(e, "getAssetToUsdtRate");
@@ -11436,12 +12009,16 @@
11436
12009
  /**
11437
12010
  * @param asset {Coin}
11438
12011
  * @param address {string}
12012
+ * @param [fixed=false] {boolean}
11439
12013
  * @return {boolean}
11440
12014
  */
11441
12015
  ;
11442
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
12016
+ _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address, fixed) {
12017
+ if (fixed === void 0) {
12018
+ fixed = false;
12019
+ }
11443
12020
  try {
11444
- return this._swapProvider.isAddressValidForAsset(asset, address);
12021
+ return !fixed ? this._swapProvider.isAddressValidForAsset(asset, address) : this._fixedSwapProvider.isAddressValidForAsset(asset, address);
11445
12022
  } catch (e) {
11446
12023
  improveAndRethrow(e, "isAddressValidForAsset");
11447
12024
  }
@@ -11451,20 +12028,24 @@
11451
12028
  * Retrieves token by contract address.
11452
12029
  *
11453
12030
  * @param addressString {string}
12031
+ * @param [fixed=false] {boolean}
11454
12032
  * @return {Promise<Coin|null>}
11455
12033
  */;
11456
- _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString) {
12034
+ _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString, fixed) {
12035
+ if (fixed === void 0) {
12036
+ fixed = false;
12037
+ }
11457
12038
  try {
11458
12039
  var _exit3;
11459
12040
  var _this12 = this;
11460
- var _temp10 = _catch(function () {
12041
+ var _temp12 = _catch(function () {
11461
12042
  if (!addressString) {
11462
- var _temp9 = null;
12043
+ var _temp11 = null;
11463
12044
  _exit3 = 1;
11464
- return _temp9;
12045
+ return _temp11;
11465
12046
  }
11466
12047
  var addressLowerCase = addressString.toLowerCase();
11467
- return Promise.resolve(_this12._swapProvider.getAllSupportedCurrencies()).then(function (allCoins) {
12048
+ return Promise.resolve((fixed ? _this12._fixedSwapProvider : _this12._swapProvider).getAllSupportedCurrencies()).then(function (allCoins) {
11468
12049
  if (allCoins.result) {
11469
12050
  var _allCoins$coins$find = allCoins.coins.find(function (coin) {
11470
12051
  return coin.tokenAddress && coin.tokenAddress.toLowerCase() === addressLowerCase;
@@ -11476,21 +12057,25 @@
11476
12057
  }, function (e) {
11477
12058
  Logger.logError(e, "getTokenByContractAddress");
11478
12059
  });
11479
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(function (_result13) {
11480
- return _exit3 ? _result13 : null;
11481
- }) : _exit3 ? _temp10 : null);
12060
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(function (_result15) {
12061
+ return _exit3 ? _result15 : null;
12062
+ }) : _exit3 ? _temp12 : null);
11482
12063
  } catch (e) {
11483
12064
  return Promise.reject(e);
11484
12065
  }
11485
12066
  }
11486
12067
  /**
11487
12068
  * @param asset {Coin}
12069
+ * @param [fixed=false] {boolean}
11488
12070
  * @return {string|null}
11489
12071
  */
11490
12072
  ;
11491
- _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset) {
12073
+ _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset, fixed) {
12074
+ if (fixed === void 0) {
12075
+ fixed = false;
12076
+ }
11492
12077
  try {
11493
- return this._swapProvider.getExtraIdNameIfPresent(asset);
12078
+ return (fixed ? this._fixedSwapProvider : this._swapProvider).getExtraIdNameIfPresent(asset);
11494
12079
  } catch (e) {
11495
12080
  improveAndRethrow(e, "getExtraIdNameIfPresentForAsset");
11496
12081
  }