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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/coverage/clover.xml +6441 -1864
  2. package/coverage/coverage-final.json +157 -95
  3. package/coverage/index.html +339 -84
  4. package/coverage/{rabbit-ui-kit → ui-kit}/index.html +3 -3
  5. package/coverage/{rabbit-ui-kit → ui-kit}/index.js.html +3 -3
  6. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/axiosAdapter.js.html +3 -3
  7. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/index.html +3 -3
  8. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/adapters/qrUtils.js.html +3 -3
  9. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/amountUtils.js.html +3 -3
  10. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/errorUtils.js.html +3 -3
  11. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/apiGroups.js.html +3 -3
  12. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/index.html +3 -3
  13. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/external-apis/ipAddressProviders.js.html +3 -3
  14. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/fiatCurrenciesService.js.html +3 -3
  15. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/globalConstants.jsx.html +3 -3
  16. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/index.html +3 -3
  17. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/blockchain.js.html +3 -3
  18. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/coin.js.html +3 -3
  19. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/index.html +3 -3
  20. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/models/protocol.js.html +3 -3
  21. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/cache.js.html +8 -8
  22. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/emailAPI.js.html +3 -3
  23. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/index.html +3 -3
  24. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/index.html +3 -3
  25. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/logger.js.html +3 -3
  26. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/logging/logsStorage.js.html +3 -3
  27. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/postponeExecution.js.html +3 -3
  28. package/coverage/{rabbit-ui-kit → ui-kit}/src/common-apis/utils/safeStringify.js.html +3 -3
  29. package/coverage/{rabbit-ui-kit → ui-kit}/src/index.html +3 -3
  30. package/coverage/{rabbit-ui-kit → ui-kit}/src/index.js.html +3 -3
  31. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js.html +3 -3
  32. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cachedRobustExternalApiCallerService.js.html +3 -3
  33. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/cancelProcessing.js.html +3 -3
  34. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/concurrentCalculationsMetadataHolder.js.html +3 -3
  35. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/externalApiProvider.js.html +3 -3
  36. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/externalServicesStatsCollector.js.html +3 -3
  37. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/index.html +3 -3
  38. package/coverage/{rabbit-ui-kit → ui-kit}/src/robust-api-caller/robustExternalAPICallerService.js.html +3 -3
  39. package/coverage/ui-kit/src/swaps-lib/external-apis/index.html +146 -0
  40. package/coverage/ui-kit/src/swaps-lib/external-apis/letsExchangeSwapProvider.js.html +1456 -0
  41. package/coverage/ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +1390 -0
  42. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/external-apis/swapspaceSwapProvider.js.html +45 -585
  43. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/baseSwapCreationInfo.js.html +3 -3
  44. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/existingSwap.js.html +3 -3
  45. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/existingSwapWithFiatData.js.html +3 -3
  46. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/models/index.html +3 -3
  47. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/services/index.html +7 -7
  48. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/services/publicSwapService.js.html +233 -50
  49. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/utils/index.html +13 -13
  50. package/coverage/{rabbit-ui-kit → ui-kit}/src/swaps-lib/utils/swapUtils.js.html +121 -46
  51. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowIcon.jsx.html +3 -3
  52. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowTosca.jsx.html +3 -3
  53. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/arrowWhite.jsx.html +3 -3
  54. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/darkRectangle.jsx.html +3 -3
  55. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/determinedError.jsx.html +3 -3
  56. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx.html +3 -3
  57. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/index.html +3 -3
  58. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/infoIcon.jsx.html +3 -3
  59. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx.html +3 -3
  60. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx.html +3 -3
  61. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/assets/wrappedImages/walletIcon.jsx.html +3 -3
  62. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetIcon/AssetIcon.jsx.html +3 -3
  63. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetIcon/index.html +3 -3
  64. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx.html +3 -3
  65. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/AssetSelection/index.html +3 -3
  66. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx.html +3 -3
  67. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/BackgroundTitle/index.html +3 -3
  68. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx.html +3 -3
  69. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/InformationMessage/index.html +3 -3
  70. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Input/Input.jsx.html +3 -3
  71. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Input/index.html +3 -3
  72. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/LoadingDots/LoadingDots.jsx.html +3 -3
  73. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/LoadingDots/index.html +3 -3
  74. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx.html +3 -3
  75. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/NoticeIcon/index.html +3 -3
  76. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/QrCode/QrCode.jsx.html +52 -7
  77. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/QrCode/index.html +7 -7
  78. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx.html +3 -3
  79. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/RateSelector/index.html +3 -3
  80. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/SupportChat/SupportChat.jsx.html +3 -3
  81. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/SupportChat/index.html +3 -3
  82. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Textarea/Textarea.jsx.html +3 -3
  83. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Textarea/index.html +3 -3
  84. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx.html +3 -3
  85. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TitleBox/index.html +3 -3
  86. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx.html +3 -3
  87. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Tooltip/index.html +3 -3
  88. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx.html +3 -3
  89. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/TwoLinesOfText/index.html +3 -3
  90. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Validation/Validation.jsx.html +3 -3
  91. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/Validation/index.html +3 -3
  92. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Button/Button.jsx.html +3 -3
  93. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Button/index.html +3 -3
  94. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Close/Close.jsx.html +3 -3
  95. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/Close/index.html +3 -3
  96. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx.html +3 -3
  97. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/LinkButton/index.html +3 -3
  98. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx.html +3 -3
  99. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/atoms/buttons/RadioButtonWithText/index.html +3 -3
  100. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx.html +3 -3
  101. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/AmountInput/index.html +3 -3
  102. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx.html +3 -3
  103. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/CoinPicker/index.html +3 -3
  104. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx.html +3 -3
  105. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/LineWithIconLink/index.html +3 -3
  106. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx.html +3 -3
  107. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/molecules/TitledLineWithIconLink/index.html +3 -3
  108. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx.html +3 -3
  109. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/CoinPickerDialogStep/index.html +3 -3
  110. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/Dialog.jsx.html +3 -3
  111. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx.html +3 -3
  112. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogButtons/index.html +3 -3
  113. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx.html +3 -3
  114. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/DialogStep/index.html +3 -3
  115. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/Dialog/index.html +3 -3
  116. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx.html +171 -39
  117. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/organisms/SwapForm/index.html +7 -7
  118. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx.html +3 -3
  119. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/components/templates/DeterminedErrorDialogStep/index.html +3 -3
  120. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/index.html +3 -3
  121. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useCallHandlingErrors.js.html +3 -3
  122. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useIsHydrated.js.html +3 -3
  123. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/hooks/useReferredState.js.html +3 -3
  124. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/index.html +3 -3
  125. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/inputValueProviders.js.html +3 -3
  126. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/textUtils.js.html +3 -3
  127. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/uiUtils.js.html +3 -3
  128. package/coverage/{rabbit-ui-kit → ui-kit}/src/ui-kit/utils/urlQueryUtils.js.html +3 -3
  129. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/BackgroundTitle.stories.jsx.html +3 -3
  130. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/LinesOfText.stories.jsx.html +3 -3
  131. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/LoadingDots.stories.jsx.html +3 -3
  132. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/QrCode.stories.jsx.html +3 -3
  133. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/RateSelector.stories.jsx.html +3 -3
  134. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/Validation.stories.jsx.html +3 -3
  135. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/Button.stories.jsx.html +3 -3
  136. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/Close.stories.jsx.html +3 -3
  137. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/LinkButton.stories.jsx.html +3 -3
  138. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/buttons/index.html +3 -3
  139. package/coverage/{rabbit-ui-kit → ui-kit}/stories/atoms/index.html +3 -3
  140. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/LineWithIconLink.stories.jsx.html +3 -3
  141. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/TitledLineWithIconLink.stories.jsx.html +3 -3
  142. package/coverage/{rabbit-ui-kit → ui-kit}/stories/molecules/index.html +3 -3
  143. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/Dialog.stories.jsx.html +3 -3
  144. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogButtons/DialogButtons.stories.jsx.html +3 -3
  145. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogButtons/index.html +3 -3
  146. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogStep/DialogStep.stories.jsx.html +3 -3
  147. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/DialogStep/index.html +3 -3
  148. package/coverage/{rabbit-ui-kit → ui-kit}/stories/organisms/Dialog/index.html +3 -3
  149. package/coverage/{rabbit-ui-kit → ui-kit}/stories/stubs/exampleContent.jsx.html +3 -3
  150. package/coverage/{rabbit-ui-kit → ui-kit}/stories/stubs/index.html +3 -3
  151. package/coverage/{rabbit-ui-kit → ui-kit}/stories/templates/DeterminedErrorDialogStep.stories.jsx.html +3 -3
  152. package/coverage/{rabbit-ui-kit → ui-kit}/stories/templates/index.html +3 -3
  153. package/coverage/ui-kit/storybook-static/124.c2d01e5e.iframe.bundle.js.html +85 -0
  154. package/coverage/ui-kit/storybook-static/138.56b7edc4.iframe.bundle.js.html +85 -0
  155. package/coverage/ui-kit/storybook-static/312.6f62bbd9.iframe.bundle.js.html +85 -0
  156. package/coverage/ui-kit/storybook-static/341.57a15f57.iframe.bundle.js.html +85 -0
  157. package/coverage/ui-kit/storybook-static/370.73bb343e.iframe.bundle.js.html +85 -0
  158. package/coverage/ui-kit/storybook-static/595.2e40d981.iframe.bundle.js.html +85 -0
  159. package/coverage/ui-kit/storybook-static/607.3ea32459.iframe.bundle.js.html +85 -0
  160. package/coverage/ui-kit/storybook-static/609.8c79ec77.iframe.bundle.js.html +85 -0
  161. package/coverage/ui-kit/storybook-static/666.09fdc1d7.iframe.bundle.js.html +85 -0
  162. package/coverage/ui-kit/storybook-static/797.c87cdf19.iframe.bundle.js.html +85 -0
  163. package/coverage/ui-kit/storybook-static/822.4bc0ebce.iframe.bundle.js.html +85 -0
  164. package/coverage/ui-kit/storybook-static/833.08e3ebb6.iframe.bundle.js.html +85 -0
  165. package/coverage/ui-kit/storybook-static/862.bf6bfe62.iframe.bundle.js.html +85 -0
  166. package/coverage/ui-kit/storybook-static/87.0a1bfeb1.iframe.bundle.js.html +85 -0
  167. package/coverage/ui-kit/storybook-static/893.4b09f929.iframe.bundle.js.html +85 -0
  168. package/coverage/ui-kit/storybook-static/996.846a677b.iframe.bundle.js.html +85 -0
  169. package/coverage/ui-kit/storybook-static/atoms-BackgroundTitle-stories.1a5386a1.iframe.bundle.js.html +85 -0
  170. package/coverage/ui-kit/storybook-static/atoms-LinesOfText-stories.7043a48b.iframe.bundle.js.html +85 -0
  171. package/coverage/ui-kit/storybook-static/atoms-LoadingDots-stories.091245c7.iframe.bundle.js.html +85 -0
  172. package/coverage/ui-kit/storybook-static/atoms-QrCode-stories.e10363b6.iframe.bundle.js.html +85 -0
  173. package/coverage/ui-kit/storybook-static/atoms-RateSelector-stories.af208e9a.iframe.bundle.js.html +85 -0
  174. package/coverage/ui-kit/storybook-static/atoms-Validation-stories.d561b311.iframe.bundle.js.html +85 -0
  175. package/coverage/ui-kit/storybook-static/atoms-buttons-Button-stories.e8e6b930.iframe.bundle.js.html +85 -0
  176. package/coverage/ui-kit/storybook-static/atoms-buttons-Close-stories.0a902a7c.iframe.bundle.js.html +85 -0
  177. package/coverage/ui-kit/storybook-static/atoms-buttons-LinkButton-stories.ca93ab6b.iframe.bundle.js.html +85 -0
  178. package/coverage/ui-kit/storybook-static/index.html +596 -0
  179. package/coverage/ui-kit/storybook-static/main.41f410f2.iframe.bundle.js.html +85 -0
  180. package/coverage/ui-kit/storybook-static/molecules-LineWithIconLink-stories.9721a18c.iframe.bundle.js.html +85 -0
  181. package/coverage/ui-kit/storybook-static/molecules-TitledLineWithIconLink-stories.1383fe3f.iframe.bundle.js.html +85 -0
  182. package/coverage/ui-kit/storybook-static/organisms-Dialog-Dialog-stories.4e6da717.iframe.bundle.js.html +85 -0
  183. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogButtons-DialogButtons-stories.6f45ae6e.iframe.bundle.js.html +85 -0
  184. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogStep-DialogStep-stories.74896048.iframe.bundle.js.html +85 -0
  185. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/index.html +116 -0
  186. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/preview.js.html +118 -0
  187. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/formatter-SWP5E3XI.mjs.html +118 -0
  188. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/index.html +116 -0
  189. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.html +116 -0
  190. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.js.html +118 -0
  191. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.html +116 -0
  192. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.modern.js.html +118 -0
  193. package/coverage/ui-kit/storybook-static/runtime~main.ad918f38.iframe.bundle.js.html +85 -0
  194. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/index.html +116 -0
  195. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/manager-bundle.js.html +94 -0
  196. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/index.html +116 -0
  197. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/manager-bundle.js.html +121 -0
  198. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/index.html +116 -0
  199. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js.html +274 -0
  200. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/index.html +116 -0
  201. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/manager-bundle.js.html +94 -0
  202. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/index.html +116 -0
  203. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/manager-bundle.js.html +94 -0
  204. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/index.html +116 -0
  205. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/manager-bundle.js.html +94 -0
  206. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/index.html +116 -0
  207. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/manager-bundle.js.html +121 -0
  208. package/coverage/ui-kit/storybook-static/sb-addons/links-0/index.html +116 -0
  209. package/coverage/ui-kit/storybook-static/sb-addons/links-0/manager-bundle.js.html +94 -0
  210. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/index.html +116 -0
  211. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/manager-bundle.js.html +1588 -0
  212. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/index.html +116 -0
  213. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/manager-bundle.js.html +94 -0
  214. package/coverage/ui-kit/storybook-static/sb-manager/WithTooltip-V3YHNWJZ-LVYLGZW2.js.html +88 -0
  215. package/coverage/ui-kit/storybook-static/sb-manager/chunk-2IXBUOFS.js.html +106 -0
  216. package/coverage/ui-kit/storybook-static/sb-manager/chunk-INSKDKQB.js.html +1129 -0
  217. package/coverage/ui-kit/storybook-static/sb-manager/chunk-NGTUFCUO.js.html +112 -0
  218. package/coverage/ui-kit/storybook-static/sb-manager/chunk-UUEAOBSN.js.html +1303 -0
  219. package/coverage/ui-kit/storybook-static/sb-manager/chunk-ZEU7PDD3.js.html +88 -0
  220. package/coverage/ui-kit/storybook-static/sb-manager/formatter-SWP5E3XI-7BGIK6BL.js.html +553 -0
  221. package/coverage/ui-kit/storybook-static/sb-manager/globals-module-info.js.html +88 -0
  222. package/coverage/ui-kit/storybook-static/sb-manager/globals.js.html +88 -0
  223. package/coverage/ui-kit/storybook-static/sb-manager/index.html +281 -0
  224. package/coverage/ui-kit/storybook-static/sb-manager/index.js.html +88 -0
  225. package/coverage/ui-kit/storybook-static/sb-manager/runtime.js.html +88 -0
  226. package/coverage/ui-kit/storybook-static/sb-manager/syntaxhighlighter-V7JZZA35-DXZCI2WR.js.html +88 -0
  227. package/coverage/ui-kit/storybook-static/sb-preview/globals.js.html +88 -0
  228. package/coverage/ui-kit/storybook-static/sb-preview/index.html +131 -0
  229. package/coverage/ui-kit/storybook-static/sb-preview/runtime.js.html +421 -0
  230. package/coverage/ui-kit/storybook-static/templates-DeterminedErrorDialogStep-stories.3cc14214.iframe.bundle.js.html +85 -0
  231. package/dist/index.cjs +1201 -605
  232. package/dist/index.cjs.map +1 -1
  233. package/dist/index.css +1 -1
  234. package/dist/index.css.map +1 -1
  235. package/dist/index.modern.js +786 -330
  236. package/dist/index.modern.js.map +1 -1
  237. package/dist/index.module.js +1201 -605
  238. package/dist/index.module.js.map +1 -1
  239. package/dist/index.umd.js +1201 -605
  240. package/dist/index.umd.js.map +1 -1
  241. package/package.json +1 -1
  242. package/src/swaps-lib/external-apis/letsExchangeSwapProvider.js +457 -0
  243. package/src/swaps-lib/external-apis/swapProvider.js +246 -20
  244. package/src/swaps-lib/external-apis/swapspaceSwapProvider.js +20 -200
  245. package/src/swaps-lib/services/publicSwapService.js +105 -44
  246. package/src/swaps-lib/test/external-apis/swapProvider/removeProtocolNameFromCoinName.test.js +142 -0
  247. package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +2 -2
  248. package/src/swaps-lib/utils/swapUtils.js +63 -38
  249. package/src/ui-kit/components/atoms/QrCode/QrCode.jsx +16 -1
  250. package/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx +77 -33
  251. package/src/ui-kit/components/organisms/SwapForm/swap-form.module.scss +1 -1
  252. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/index.html +0 -131
  253. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +0 -712
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: {
@@ -4809,15 +4823,18 @@
4809
4823
  var _useReferredState = useReferredState(preservedAmount == null || preservedAmount === "" ? null : preservedAmount),
4810
4824
  sendAssetAmount = _useReferredState[0],
4811
4825
  setSendAssetAmount = _useReferredState[1];
4826
+ var _useReferredState2 = useReferredState(null),
4827
+ receiveAssetAmount = _useReferredState2[0],
4828
+ setReceiveAssetAmount = _useReferredState2[1];
4812
4829
  var _useState3 = React.useState(),
4813
4830
  swapRate = _useState3[0],
4814
4831
  setSwapRate = _useState3[1];
4815
- var _useReferredState2 = useReferredState(null),
4816
- minimalAmount = _useReferredState2[0],
4817
- setMinimalAmount = _useReferredState2[1];
4818
4832
  var _useReferredState3 = useReferredState(null),
4819
- maximumAmount = _useReferredState3[0],
4820
- setMaximumAmount = _useReferredState3[1];
4833
+ minimalAmount = _useReferredState3[0],
4834
+ setMinimalAmount = _useReferredState3[1];
4835
+ var _useReferredState4 = useReferredState(null),
4836
+ maximumAmount = _useReferredState4[0],
4837
+ setMaximumAmount = _useReferredState4[1];
4821
4838
  var _useState4 = React.useState(),
4822
4839
  validationContent = _useState4[0],
4823
4840
  setValidationContent = _useState4[1];
@@ -4844,70 +4861,76 @@
4844
4861
  var _useState11 = React.useState(preservedAmount == null || String(preservedAmount) === "0"),
4845
4862
  isAmountZero = _useState11[0],
4846
4863
  setIsAmountZero = _useState11[1];
4847
- var _useReferredState4 = useReferredState(false),
4848
- isLoading = _useReferredState4[0],
4849
- setIsLoading = _useReferredState4[1]; // Whether the form is in the progress of loading some data (new rates, for example)
4850
- var _useReferredState5 = useReferredState(null),
4851
- isFixedRate = _useReferredState5[0],
4852
- 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
4864
+ var _useReferredState5 = useReferredState(false),
4865
+ isLoading = _useReferredState5[0],
4866
+ setIsLoading = _useReferredState5[1]; // Whether the form is in the progress of loading some data (new rates, for example)
4862
4867
  var _useReferredState6 = useReferredState(null),
4863
- isSwapAll = _useReferredState6[0],
4864
- setIsSwapAll = _useReferredState6[1];
4865
- var _useState15 = React.useState([]),
4866
- swapAllButtonLoaderReSetter = _useState15[0],
4867
- setSwapAllButtonLoaderReSetter = _useState15[1];
4868
+ isFixedRate = _useReferredState6[0],
4869
+ setIsFixedRate = _useReferredState6[1];
4870
+ var _useState12 = React.useState(false),
4871
+ isLastEditedReceiving = _useState12[0],
4872
+ setIsLastEditedReceiving = _useState12[1];
4873
+ var _useState13 = React.useState(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, preservedAmount)),
4874
+ confirmButtonTo = _useState13[0],
4875
+ setConfirmButtonTo = _useState13[1];
4876
+ var _useState14 = React.useState(),
4877
+ transactionFee = _useState14[0],
4878
+ setTransactionFee = _useState14[1];
4879
+ var _useState15 = React.useState(true),
4880
+ balanceValid = _useState15[0],
4881
+ setBalanceValid = _useState15[1]; // Whether the amount is less than total balance
4868
4882
  var _useReferredState7 = useReferredState(null),
4869
- dataUpdateTimeoutId = _useReferredState7[0],
4870
- setDataUpdateTimeoutId = _useReferredState7[1];
4883
+ isSwapAll = _useReferredState7[0],
4884
+ setIsSwapAll = _useReferredState7[1];
4885
+ var _useState16 = React.useState([]),
4886
+ swapAllButtonLoaderReSetter = _useState16[0],
4887
+ setSwapAllButtonLoaderReSetter = _useState16[1];
4871
4888
  var _useReferredState8 = useReferredState(null),
4872
- idleDataUpdateTimeoutId = _useReferredState8[0],
4873
- setIdleDataUpdateTimeoutId = _useReferredState8[1];
4874
- var _useReferredState9 = useReferredState(""),
4875
- recipientAddress = _useReferredState9[0],
4876
- setRecipientAddress = _useReferredState9[1];
4889
+ dataUpdateTimeoutId = _useReferredState8[0],
4890
+ setDataUpdateTimeoutId = _useReferredState8[1];
4891
+ var _useReferredState9 = useReferredState(null),
4892
+ idleDataUpdateTimeoutId = _useReferredState9[0],
4893
+ setIdleDataUpdateTimeoutId = _useReferredState9[1];
4877
4894
  var _useReferredState10 = useReferredState(""),
4878
- recipientAddressExtraId = _useReferredState10[0],
4879
- setRecipientAddressExtraId = _useReferredState10[1];
4880
- var _useReferredState11 = useReferredState(false),
4881
- isRecipientAddressValid = _useReferredState11[0],
4882
- setIsRecipientAddressValid = _useReferredState11[1];
4883
- var _useState16 = React.useState(false),
4884
- isRefundAddressRequired = _useState16[0],
4885
- setIsRefundAddressRequired = _useState16[1];
4886
- var _useReferredState12 = useReferredState(""),
4887
- refundAddress = _useReferredState12[0],
4888
- setRefundAddress = _useReferredState12[1];
4895
+ recipientAddress = _useReferredState10[0],
4896
+ setRecipientAddress = _useReferredState10[1];
4897
+ var _useReferredState11 = useReferredState(""),
4898
+ recipientAddressExtraId = _useReferredState11[0],
4899
+ setRecipientAddressExtraId = _useReferredState11[1];
4900
+ var _useReferredState12 = useReferredState(false),
4901
+ isRecipientAddressValid = _useReferredState12[0],
4902
+ setIsRecipientAddressValid = _useReferredState12[1];
4903
+ var _useState17 = React.useState(false),
4904
+ isRefundAddressRequired = _useState17[0],
4905
+ setIsRefundAddressRequired = _useState17[1];
4889
4906
  var _useReferredState13 = useReferredState(""),
4890
- refundAddressExtraId = _useReferredState13[0],
4891
- setRefundAddressExtraId = _useReferredState13[1];
4892
- var _useReferredState14 = useReferredState(false),
4893
- isRefundAddressValid = _useReferredState14[0],
4894
- setIsRefundAddressValid = _useReferredState14[1];
4907
+ refundAddress = _useReferredState13[0],
4908
+ setRefundAddress = _useReferredState13[1];
4909
+ var _useReferredState14 = useReferredState(""),
4910
+ refundAddressExtraId = _useReferredState14[0],
4911
+ setRefundAddressExtraId = _useReferredState14[1];
4912
+ var _useReferredState15 = useReferredState(false),
4913
+ isRefundAddressValid = _useReferredState15[0],
4914
+ setIsRefundAddressValid = _useReferredState15[1];
4895
4915
  var callHandlingErrors = useCallHandlingErrors();
4896
4916
  var isHydrated = useIsHydrated();
4897
4917
  var recalculationDelayOnTyping = 1000;
4898
4918
  var isAddressFieldEnabled = !formHasBalance;
4899
4919
  var displayRateSelector = !formHasBalance;
4900
- var recipientAddressExtraIdName = getExtraIdNameByTicker(receivingAssetTicker);
4901
- var refundAddressExtraIdName = getExtraIdNameByTicker(sendingAssetTicker);
4902
4920
  var handleSendAssetAmountChange = function handleSendAssetAmountChange(amount) {
4921
+ setIsLastEditedReceiving(false);
4922
+ var receiveAmount = AmountUtils.trim(bignumber_js.BigNumber(amount).times(swapRate), receivingAssetDecimalCount);
4903
4923
  if (amount != null && amount !== "") {
4904
- setUpdateReceiveInputTo(AmountUtils.trim(bignumber_js.BigNumber(amount).times(swapRate), receivingAssetDecimalCount));
4924
+ setReceiveAssetAmount(receiveAmount);
4925
+ setUpdateReceiveInputTo(receiveAmount);
4905
4926
  } else {
4906
4927
  setUpdateReceiveInputTo("");
4907
4928
  }
4908
4929
  setSendAssetAmount(amount);
4909
4930
  };
4910
4931
  var handleReceiveAssetAmountChange = function handleReceiveAssetAmountChange(amount) {
4932
+ setReceiveAssetAmount(amount);
4933
+ setIsLastEditedReceiving(true);
4911
4934
  var sendAssetAmount = "";
4912
4935
  if (amount != null && amount !== "") {
4913
4936
  sendAssetAmount = AmountUtils.trim(bignumber_js.BigNumber(amount).div(swapRate), sendingAssetDecimalCount);
@@ -5008,7 +5031,7 @@
5008
5031
  }
5009
5032
  (function () {
5010
5033
  try {
5011
- return _catch$c(function () {
5034
+ return _catch$e(function () {
5012
5035
  var _minimalAmount$curren4, _maximumAmount$curren3, _isFixedRate$current;
5013
5036
  var dataMemento = {
5014
5037
  rate: swapRate,
@@ -5026,7 +5049,7 @@
5026
5049
  setIsSameCoins(false);
5027
5050
  setIsPairSupported(true);
5028
5051
  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) {
5052
+ return Promise.resolve(retrieveSwapDetails(sendingAssetTicker, receivingAssetTicker, amount, isSwapAll.current, (_isFixedRate$current = isFixedRate.current) != null ? _isFixedRate$current : IS_FIXED_BY_DEFAULT, isFixedRate.current ? isLastEditedReceiving : false)).then(function (response) {
5030
5053
  if (!isSwapAll.current && String(amount) !== String(isForPreserved && sendAssetAmount.current == null ? preservedAmount : sendAssetAmount.current)) {
5031
5054
  // Means amount changed and we no more need to do this exact calculation
5032
5055
  return;
@@ -5074,7 +5097,7 @@
5074
5097
  }
5075
5098
  (function () {
5076
5099
  try {
5077
- return _catch$c(function () {
5100
+ return _catch$e(function () {
5078
5101
  setIsLoading(true);
5079
5102
  setMinimalAmount(null);
5080
5103
  setMaximumAmount(null);
@@ -5114,7 +5137,7 @@
5114
5137
  };
5115
5138
  var handleRateModeChanged = function handleRateModeChanged(isFixed) {
5116
5139
  setIsFixedRate(isFixed);
5117
- requestDataRefresh(sendAssetAmount.current, true);
5140
+ requestDataRefresh(isLastEditedReceiving ? receiveAssetAmount.current : sendAssetAmount.current, true);
5118
5141
  };
5119
5142
  React.useEffect(function () {
5120
5143
  if (isSwapAll.current === true) {
@@ -5124,6 +5147,10 @@
5124
5147
  }
5125
5148
  // eslint-disable-next-line react-hooks/exhaustive-deps
5126
5149
  }, [isSwapAll.current]);
5150
+ React.useEffect(function () {
5151
+ onIsFixedChange(isFixedRate.current);
5152
+ // eslint-disable-next-line react-hooks/exhaustive-deps
5153
+ }, [isFixedRate.current]);
5127
5154
  React.useEffect(function () {
5128
5155
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current || preservedAmount || null));
5129
5156
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -5133,7 +5160,7 @@
5133
5160
  var isCurrentAmountNotZero = sendAssetAmount.current && !bignumber_js.BigNumber("0").eq(sendAssetAmount.current);
5134
5161
  var isPreservedAmountNotZero = preservedAmount && !bignumber_js.BigNumber("0").eq(preservedAmount);
5135
5162
  if (isCurrentAmountNotZero) {
5136
- loadFullEstimation(sendAssetAmount.current);
5163
+ loadFullEstimation(isLastEditedReceiving ? receiveAssetAmount.current : sendAssetAmount.current);
5137
5164
  } else if (isPreservedAmountNotZero) {
5138
5165
  loadFullEstimation(preservedAmount, true);
5139
5166
  } else {
@@ -5172,7 +5199,7 @@
5172
5199
  };
5173
5200
  if (!receivingAssetTicker) return;
5174
5201
  var _temp = recipientAddress.current === "";
5175
- return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current)).then(_temp2);
5202
+ return _temp ? _temp2(false) : Promise.resolve(validateAddressByTicker(receivingAssetTicker, recipientAddress.current, isFixedRate.current)).then(_temp2);
5176
5203
  } catch (e) {
5177
5204
  Promise.reject(e);
5178
5205
  }
@@ -5187,7 +5214,7 @@
5187
5214
  };
5188
5215
  if (!sendingAssetTicker || !isRefundAddressRequired) return;
5189
5216
  var _temp3 = refundAddress.current === "";
5190
- return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current)).then(_temp4);
5217
+ return _temp3 ? _temp4(false) : Promise.resolve(validateAddressByTicker(sendingAssetTicker, refundAddress.current, isFixedRate.current)).then(_temp4);
5191
5218
  } catch (e) {
5192
5219
  Promise.reject(e);
5193
5220
  }
@@ -5200,7 +5227,7 @@
5200
5227
  if (readyToSwap) {
5201
5228
  timeoutId = setTimeout(function () {
5202
5229
  var _sendAssetAmount$curr;
5203
- return requestDataRefresh((_sendAssetAmount$curr = sendAssetAmount.current) != null ? _sendAssetAmount$curr : preservedAmount, true);
5230
+ return requestDataRefresh(isLastEditedReceiving ? receiveAssetAmount.current : (_sendAssetAmount$curr = sendAssetAmount.current) != null ? _sendAssetAmount$curr : preservedAmount, true);
5204
5231
  }, DETAIL_REFRESH_INTERVAL_MS);
5205
5232
  setIdleDataUpdateTimeoutId(timeoutId);
5206
5233
  } else {
@@ -5212,8 +5239,6 @@
5212
5239
  };
5213
5240
  // eslint-disable-next-line react-hooks/exhaustive-deps
5214
5241
  }, [readyToSwap]);
5215
-
5216
- // TODO: [refactoring, critical] this code looks like a hack related to task_id=6e328d39063142b7b9fa01d497e616da
5217
5242
  React.useEffect(function () {
5218
5243
  if (triggerDataUpdateResetting) {
5219
5244
  clearTimeout(dataUpdateTimeoutId.current);
@@ -5223,8 +5248,6 @@
5223
5248
  }
5224
5249
  // eslint-disable-next-line react-hooks/exhaustive-deps
5225
5250
  }, [triggerDataUpdateResetting]);
5226
-
5227
- // Resets the passed "set value to" param to null, so it can be used multiple times with any value
5228
5251
  React.useEffect(function () {
5229
5252
  if (!!updateSendInputTo) setUpdateSendInputTo(null);
5230
5253
  if (!!updateReceiveInputTo) setUpdateReceiveInputTo(null);
@@ -5243,13 +5266,12 @@
5243
5266
  }
5244
5267
  // eslint-disable-next-line react-hooks/exhaustive-deps
5245
5268
  }, [isLoading.current, swapAllButtonLoaderReSetter]);
5246
-
5247
- // Handlers upon changing the asset amount
5248
5269
  React.useEffect(function () {
5249
5270
  setConfirmButtonTo(composeConfirmButtonTo(sendingAssetTicker, receivingAssetTicker, sendAssetAmount.current));
5250
5271
  if (sendAssetAmount.current == null) return;
5251
5272
  var processingAmount = sendAssetAmount.current === "" ? "0" : sendAssetAmount.current;
5252
- requestDataRefresh(processingAmount);
5273
+ var processingReceivingAmount = receiveAssetAmount.current === "" ? "0" : receiveAssetAmount.current;
5274
+ requestDataRefresh(isLastEditedReceiving ? processingReceivingAmount : processingAmount);
5253
5275
  processMinMaxAmounts(processingAmount);
5254
5276
  setIsAmountZero(bignumber_js.BigNumber("0").eq(processingAmount));
5255
5277
  setIsSwapCalculated(false);
@@ -5264,7 +5286,13 @@
5264
5286
  linkText: !formHasBalance ? "" : isSwapAll.current ? translations.swapAllButtonTitles.cancel : translations.swapAllButtonTitles.enable,
5265
5287
  linkButtonLoader: true,
5266
5288
  isLinkButtonDisabled: isLoading.current || sendingAssetTicker === receivingAssetTicker || bignumber_js.BigNumber(sendingAssetBalance == null ? void 0 : sendingAssetBalance.assetAmount).eq(0)
5267
- }, /*#__PURE__*/React__default["default"].createElement("div", {
5289
+ }, displayRateSelector ? /*#__PURE__*/React__default["default"].createElement("div", {
5290
+ className: s$9["swap-form-rate-selector"]
5291
+ }, /*#__PURE__*/React__default["default"].createElement(RateSelector, {
5292
+ isFixed: (_isFixedRate$current2 = isFixedRate.current) != null ? _isFixedRate$current2 : IS_FIXED_BY_DEFAULT,
5293
+ setIsFixed: handleRateModeChanged,
5294
+ translations: translations.rateSelector
5295
+ })) : "", /*#__PURE__*/React__default["default"].createElement("div", {
5268
5296
  className: s$9["swap-form-inputs"]
5269
5297
  }, /*#__PURE__*/React__default["default"].createElement(AmountInput, {
5270
5298
  ticker: sendingAssetTicker,
@@ -5312,7 +5340,7 @@
5312
5340
  assetIconProtocolSrc: receivingAssetProtocolIconSrc,
5313
5341
  fallbackAssetIconSrc: fallBackAssetIconSrc,
5314
5342
  disabled: isSwapAll.current || sendingAssetTicker === null || receivingAssetTicker === null,
5315
- locked: !formHasBalance,
5343
+ locked: !formHasBalance && !isFixedRate.current,
5316
5344
  handleCoinAmountChange: handleReceiveAssetAmountChange,
5317
5345
  handleChangeAssetClick: handleChangeReceivingAssetClick,
5318
5346
  updateAssetInputTo: updateReceiveInputTo,
@@ -5332,7 +5360,7 @@
5332
5360
  className: s$9["swap-form-information-field"]
5333
5361
  }, /*#__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
5362
  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", {
5363
+ }, " ~ " + 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
5364
  className: s$9["interactable"] + " " + s$9["red"],
5337
5365
  onClick: isLoading.current ? function () {} : function (e) {
5338
5366
  return callHandlingErrors(handleMaximumAmountClick, e);
@@ -5359,7 +5387,7 @@
5359
5387
  adaptiveHeight: true,
5360
5388
  errorEncountered: recipientAddress.current !== "" && !isRecipientAddressValid.current
5361
5389
  })), isHydrated && recipientAddressExtraIdName ? /*#__PURE__*/React__default["default"].createElement(TitleBox, {
5362
- title: recipientAddressExtraIdName,
5390
+ title: translations.addressFields.receivingAddressExtraIdTitle,
5363
5391
  titleNoticeText: translations.addressFields.receivingAddressExtraIdNotice,
5364
5392
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5365
5393
  }, /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -5381,7 +5409,7 @@
5381
5409
  adaptiveHeight: true,
5382
5410
  errorEncountered: refundAddress.current !== "" && !isRefundAddressValid.current
5383
5411
  })), refundAddressExtraIdName ? /*#__PURE__*/React__default["default"].createElement(TitleBox, {
5384
- title: refundAddressExtraIdName,
5412
+ title: translations.addressFields.refundAddressExtraIdTitle,
5385
5413
  titleNoticeText: translations.addressFields.refundAddressExtraIdNotice,
5386
5414
  titleNoticePosition: TOOLTIP_POSITIONS.TOP_LEFT
5387
5415
  }, /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -5392,13 +5420,7 @@
5392
5420
  value: refundAddressExtraId.current,
5393
5421
  adaptiveHeight: true,
5394
5422
  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", {
5423
+ })) : null) : null) : null, validationContent ? /*#__PURE__*/React__default["default"].createElement("div", {
5402
5424
  className: s$9["swap-form-validation-text"]
5403
5425
  }, /*#__PURE__*/React__default["default"].createElement(Validation, {
5404
5426
  text: validationContent
@@ -5419,7 +5441,7 @@
5419
5441
  mode: "primary",
5420
5442
  content: translations.confirmButtonText,
5421
5443
  onClick: function onClick(resetButtonLoader) {
5422
- return handleConfirmButtonClick(resetButtonLoader, setValidationContent, setBalanceValid, setMinimalAmountValid, setMaximumAmountValid, setIsPairSupported, setIsSameCoins, recipientAddress.current, recipientAddressExtraId.current, refundAddress.current, refundAddressExtraId.current);
5444
+ return handleConfirmButtonClick(resetButtonLoader, setValidationContent, setBalanceValid, setMinimalAmountValid, setMaximumAmountValid, setIsPairSupported, setIsSameCoins, recipientAddress.current, recipientAddressExtraId.current, refundAddress.current, refundAddressExtraId.current, isLastEditedReceiving);
5423
5445
  },
5424
5446
  fullWidthOnMobiles: true,
5425
5447
  isDisabled: !readyToSwap,
@@ -5465,7 +5487,12 @@
5465
5487
  fiatCurrencyCode: PropTypes.oneOfType([PropTypes.string, null]),
5466
5488
  fiatCurrencyDecimals: PropTypes.oneOfType([PropTypes.number, null]),
5467
5489
  formHasFiat: PropTypes.bool,
5490
+ termsOfUseUrl: PropTypes.oneOfType([PropTypes.string, null]),
5491
+ privacyPolicyUrl: PropTypes.oneOfType([PropTypes.string, null]),
5492
+ recipientAddressExtraIdName: PropTypes.string,
5493
+ refundAddressExtraIdName: PropTypes.string,
5468
5494
  translations: PropTypes.object,
5495
+ validateAddressByTicker: PropTypes.func,
5469
5496
  swapSeparatorIconSrc: PropTypes.string.isRequired,
5470
5497
  swapButtonAlwaysActive: PropTypes.bool
5471
5498
  };
@@ -5498,6 +5525,11 @@
5498
5525
  fiatCurrencyCode: null,
5499
5526
  fiatCurrencyDecimals: null,
5500
5527
  formHasFiat: true,
5528
+ termsOfUseUrl: null,
5529
+ privacyPolicyUrl: null,
5530
+ validateAddressByTicker: function validateAddressByTicker(ticker) {
5531
+ return false;
5532
+ },
5501
5533
  swapButtonAlwaysActive: false
5502
5534
  };
5503
5535
 
@@ -5509,7 +5541,7 @@
5509
5541
  * @return {Promise<string>} xml string of generated svg image
5510
5542
  */
5511
5543
 
5512
- function _catch$b(body, recover) {
5544
+ function _catch$d(body, recover) {
5513
5545
  try {
5514
5546
  var result = body();
5515
5547
  } catch (e) {
@@ -5522,7 +5554,7 @@
5522
5554
  }
5523
5555
  var generateQrAndShowInCanvas = function generateQrAndShowInCanvas(encodingString) {
5524
5556
  try {
5525
- return Promise.resolve(_catch$b(function () {
5557
+ return Promise.resolve(_catch$d(function () {
5526
5558
  return Promise.resolve(QRCode__default["default"].toString(encodingString, {
5527
5559
  type: "svg"
5528
5560
  }));
@@ -5536,9 +5568,23 @@
5536
5568
 
5537
5569
  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
5570
 
5539
- // TODO: [dev] add JSDoc
5571
+ /**
5572
+ * QrCode component renders a QR code for a provided crypto address.
5573
+ *
5574
+ * @component
5575
+ * @example
5576
+ * const address = "0x123456789abcdef";
5577
+ * const fill = true;
5578
+ * return <QrCode address={address} fill={fill} />;
5579
+ *
5580
+ * @param {Object} props - The props for the component.
5581
+ * @param {string} props.address - The crypto address to generate the QR code for.
5582
+ * @param {boolean} [props.fill=false] - If true, applies additional CSS class to fill the container.
5583
+ *
5584
+ * @returns {JSX.Element} A div containing the generated QR code.
5585
+ */
5540
5586
 
5541
- function _catch$a(body, recover) {
5587
+ function _catch$c(body, recover) {
5542
5588
  try {
5543
5589
  var result = body();
5544
5590
  } catch (e) {
@@ -5557,7 +5603,7 @@
5557
5603
  React.useEffect(function () {
5558
5604
  (function () {
5559
5605
  try {
5560
- return _catch$a(function () {
5606
+ return _catch$c(function () {
5561
5607
  var _temp = function () {
5562
5608
  if (address) {
5563
5609
  return Promise.resolve(generateQrAndShowInCanvas(address)).then(function (_generateQrAndShowInC) {
@@ -5584,7 +5630,8 @@
5584
5630
  fill: PropTypes.bool
5585
5631
  };
5586
5632
  QrCode.defaultProps = {
5587
- address: ""
5633
+ address: "",
5634
+ fill: false
5588
5635
  };
5589
5636
 
5590
5637
  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 +6316,7 @@
6269
6316
  var FALLBACK_ASSET_ICON_URL = "https://rabbit.io/asset-icons/fallback.svg";
6270
6317
  var DEFAULT_CRYPTO_DECIMAL_COUNT = 8;
6271
6318
 
6272
- function _catch$9(body, recover) {
6319
+ function _catch$b(body, recover) {
6273
6320
  try {
6274
6321
  var result = body();
6275
6322
  } catch (e) {
@@ -6493,7 +6540,7 @@
6493
6540
  var loadCoinsAndSaveToState = function loadCoinsAndSaveToState() {
6494
6541
  (function () {
6495
6542
  try {
6496
- var _temp = _catch$9(function () {
6543
+ var _temp = _catch$b(function () {
6497
6544
  return Promise.resolve(loadCoinsAndContent ? loadCoinsAndContent() : defaultLoadCoinsAndContent()).then(function (data) {
6498
6545
  setCoins(data.coins);
6499
6546
  setFilteredCoins(data.coins);
@@ -7302,7 +7349,7 @@
7302
7349
  return Cache;
7303
7350
  }();
7304
7351
 
7305
- function _catch$8(body, recover) {
7352
+ function _catch$a(body, recover) {
7306
7353
  try {
7307
7354
  var result = body();
7308
7355
  } catch (e) {
@@ -7320,7 +7367,7 @@
7320
7367
  return new Promise(function (resolve, reject) {
7321
7368
  setTimeout(function () {
7322
7369
  try {
7323
- var _temp = _catch$8(function () {
7370
+ var _temp = _catch$a(function () {
7324
7371
  return Promise.resolve(execution()).then(function (_execution) {
7325
7372
  resolve(_execution);
7326
7373
  });
@@ -7404,7 +7451,7 @@
7404
7451
  return AxiosAdapter;
7405
7452
  }();
7406
7453
 
7407
- function _catch$7(body, recover) {
7454
+ function _catch$9(body, recover) {
7408
7455
  try {
7409
7456
  var result = body();
7410
7457
  } catch (e) {
@@ -7420,7 +7467,7 @@
7420
7467
  EmailsApi.sendEmail = function sendEmail(subject, body) {
7421
7468
  try {
7422
7469
  var _this = this;
7423
- var _temp = _catch$7(function () {
7470
+ var _temp = _catch$9(function () {
7424
7471
  var url = window.location.protocol + "//" + window.location.host + "/api/v1/" + _this.serverEndpointEntity;
7425
7472
  return Promise.resolve(axios__default["default"].post(url, {
7426
7473
  subject: subject,
@@ -7838,7 +7885,7 @@
7838
7885
  * improve the reliability of a data retrieval.
7839
7886
  */
7840
7887
 
7841
- function _catch$6(body, recover) {
7888
+ function _catch$8(body, recover) {
7842
7889
  try {
7843
7890
  var result = body();
7844
7891
  } catch (e) {
@@ -8177,7 +8224,7 @@
8177
8224
  var result;
8178
8225
  var calculationUuid = concurrentCalculationsMetadataHolder.startCalculation(_this.bio);
8179
8226
  return Promise.resolve(_finallyRethrows$1(function () {
8180
- return _catch$6(function () {
8227
+ return _catch$8(function () {
8181
8228
  function _temp5() {
8182
8229
  var _result2, _result3;
8183
8230
  if (((_result2 = result) == null ? void 0 : _result2.data) == null) {
@@ -8205,7 +8252,7 @@
8205
8252
  */
8206
8253
  var rpsFactor = result ? result.rpsFactor : RobustExternalAPICallerService.defaultRPSFactor;
8207
8254
  result = null;
8208
- var _temp3 = _catch$6(function () {
8255
+ var _temp3 = _catch$8(function () {
8209
8256
  function _temp2() {
8210
8257
  var _result$errors;
8211
8258
  if ((_result$errors = result.errors) != null && _result$errors.length) {
@@ -8229,7 +8276,7 @@
8229
8276
  return Promise.resolve(new Promise(function (resolve, reject) {
8230
8277
  setTimeout(function () {
8231
8278
  try {
8232
- var _temp6 = _catch$6(function () {
8279
+ var _temp6 = _catch$8(function () {
8233
8280
  return Promise.resolve(_this._performCallAttempt(parametersValues, timeoutMS, cancelToken, rpsFactor, doNotFailForNowData)).then(function (_this$_performCallAtt2) {
8234
8281
  resolve(_this$_performCallAtt2);
8235
8282
  });
@@ -8299,7 +8346,7 @@
8299
8346
  return;
8300
8347
  }
8301
8348
  var _temp13 = _finallyRethrows$1(function () {
8302
- return _catch$6(function () {
8349
+ return _catch$8(function () {
8303
8350
  var _provider$specificHea;
8304
8351
  function _temp12() {
8305
8352
  if (iterationsData.length) {
@@ -8631,7 +8678,7 @@
8631
8678
  }
8632
8679
  }
8633
8680
  }
8634
- function _catch$5(body, recover) {
8681
+ function _catch$7(body, recover) {
8635
8682
  try {
8636
8683
  var result = body();
8637
8684
  } catch (e) {
@@ -8710,7 +8757,7 @@
8710
8757
  _proto.getCachedOrWaitForCachedOrAcquireLock = function getCachedOrWaitForCachedOrAcquireLock(cacheId) {
8711
8758
  try {
8712
8759
  var _this = this;
8713
- return Promise.resolve(_catch$5(function () {
8760
+ return Promise.resolve(_catch$7(function () {
8714
8761
  function _temp2() {
8715
8762
  var _cached, _cached2;
8716
8763
  return calculationId ? {
@@ -8789,7 +8836,7 @@
8789
8836
  _proto.acquireLock = function acquireLock(cacheId) {
8790
8837
  try {
8791
8838
  var _this2 = this;
8792
- return Promise.resolve(_catch$5(function () {
8839
+ return Promise.resolve(_catch$7(function () {
8793
8840
  return Promise.resolve(_this2._requestsManager.acquireLock(cacheId));
8794
8841
  }, function (e) {
8795
8842
  improveAndRethrow(e, "acquireLock");
@@ -8959,7 +9006,7 @@
8959
9006
  try {
8960
9007
  var _exit;
8961
9008
  var _this3 = this;
8962
- var _temp3 = _catch$5(function () {
9009
+ var _temp3 = _catch$7(function () {
8963
9010
  var activeCalculationIdForHash = _this3._activeCalculationsIds.get(requestHash);
8964
9011
  if (activeCalculationIdForHash == null) {
8965
9012
  var id = uuid.v4();
@@ -8993,7 +9040,7 @@
8993
9040
  _proto2.acquireLock = function acquireLock(requestHash) {
8994
9041
  try {
8995
9042
  var _this4 = this;
8996
- return Promise.resolve(_catch$5(function () {
9043
+ return Promise.resolve(_catch$7(function () {
8997
9044
  var _this4$_nextCalculati;
8998
9045
  var activeId = _this4._activeCalculationsIds.get(requestHash);
8999
9046
  var nextId = uuid.v4();
@@ -9144,7 +9191,7 @@
9144
9191
  * TODO: [tests, critical] Massively used logic
9145
9192
  */
9146
9193
 
9147
- function _catch$4(body, recover) {
9194
+ function _catch$6(body, recover) {
9148
9195
  try {
9149
9196
  var result = body();
9150
9197
  } catch (e) {
@@ -9241,7 +9288,7 @@
9241
9288
  var cacheId;
9242
9289
  var result;
9243
9290
  return Promise.resolve(_finallyRethrows(function () {
9244
- return _catch$4(function () {
9291
+ return _catch$6(function () {
9245
9292
  cacheId = _this._calculateCacheId(parametersValues, customHashFunctionForParams);
9246
9293
  return Promise.resolve(_this._cahceAndRequestsResolver.getCachedOrWaitForCachedOrAcquireLock(cacheId)).then(function (_this$_cahceAndReques) {
9247
9294
  var _result2, _result4;
@@ -9310,7 +9357,7 @@
9310
9357
  return CachedRobustExternalApiCallerService;
9311
9358
  }();
9312
9359
 
9313
- function _catch$3(body, recover) {
9360
+ function _catch$5(body, recover) {
9314
9361
  try {
9315
9362
  var result = body();
9316
9363
  } catch (e) {
@@ -9394,7 +9441,7 @@
9394
9441
  IpAddressProvider.getClientIpAddress = function getClientIpAddress() {
9395
9442
  try {
9396
9443
  var _this = this;
9397
- return Promise.resolve(_catch$3(function () {
9444
+ return Promise.resolve(_catch$5(function () {
9398
9445
  return Promise.resolve(_this.externalIPAddressAPICaller.callExternalAPICached([], 7000));
9399
9446
  }, function (e) {
9400
9447
  improveAndRethrow(e, "getClientIpAddress");
@@ -9574,15 +9621,44 @@
9574
9621
  this.isRefundAddressRequired = isRefundAddressRequired;
9575
9622
  };
9576
9623
 
9624
+ // TODO: [refactoring, moderate] extract structure of _supportedCoins into model class
9625
+
9626
+ function _catch$4(body, recover) {
9627
+ try {
9628
+ var result = body();
9629
+ } catch (e) {
9630
+ return recover(e);
9631
+ }
9632
+ if (result && result.then) {
9633
+ return result.then(void 0, recover);
9634
+ }
9635
+ return result;
9636
+ }
9577
9637
  var SwapProvider = /*#__PURE__*/function () {
9578
- function SwapProvider() {}
9638
+ function SwapProvider(cache, customCoinBuilder, useRestrictedCoinsSet) {
9639
+ if (customCoinBuilder === void 0) {
9640
+ customCoinBuilder = function customCoinBuilder(coin, network) {
9641
+ return null;
9642
+ };
9643
+ }
9644
+ if (useRestrictedCoinsSet === void 0) {
9645
+ useRestrictedCoinsSet = true;
9646
+ }
9647
+ this._supportedCoins = [];
9648
+ this._maxRateDigits = 20;
9649
+ this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9650
+ this._customCoinBuilder = customCoinBuilder;
9651
+ this._cache = cache;
9652
+ this.isAggregator = false;
9653
+ }
9579
9654
  var _proto = SwapProvider.prototype;
9580
9655
  /**
9581
9656
  * @return {Promise<void>}
9582
9657
  */
9583
9658
  _proto.initialize = function initialize() {
9584
9659
  try {
9585
- throw new Error("Not implemented in base");
9660
+ var _this = this;
9661
+ return Promise.resolve(_this._fetchSupportedCurrenciesIfNeeded()).then(function () {});
9586
9662
  } catch (e) {
9587
9663
  return Promise.reject(e);
9588
9664
  }
@@ -9595,15 +9671,68 @@
9595
9671
  throw new Error("Not implemented in base");
9596
9672
  }
9597
9673
 
9674
+ /**
9675
+ * This method sort internal list putting popular (as provider thinks) coins to the top.
9676
+ * 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.
9677
+ * @private
9678
+ */;
9679
+ _proto._putPopularCoinsFirst = function _putPopularCoinsFirst() {
9680
+ this._supportedCoins.sort(function (i1, i2) {
9681
+ if (i1.isPopular !== i2.isPopular) return i2.isPopular - i1.isPopular;
9682
+ return i1.coin.ticker.localeCompare(i2.coin.ticker);
9683
+ });
9684
+ }
9685
+
9686
+ /**
9687
+ * Should fill _supportedCoins with array of coins.
9688
+ * Coin construction rules:
9689
+ * 1. ticker should be CODEPROTOCOL_CODE e.g. USDTERC20
9690
+ * 2. name should not contain (PROTOCOL_CODE) or just PROTOCOL_CODe
9691
+ * 3. protocol should be null for coins major for their blockchains like BTC, ETH
9692
+ * 4. isPopular should be a number
9693
+ *
9694
+ * @return {Promise<void>}
9695
+ * @private
9696
+ */;
9697
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9698
+ try {
9699
+ throw new Error("Not implemented in base - _fetchSupportedCurrenciesIfNeeded");
9700
+ } catch (e) {
9701
+ return Promise.reject(e);
9702
+ }
9703
+ }
9598
9704
  /**
9599
9705
  * Retrieves all currencies supported by this swap provider.
9600
9706
  * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
9601
9707
  *
9602
9708
  * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
9603
- */;
9709
+ */
9710
+ ;
9604
9711
  _proto.getAllSupportedCurrencies = function getAllSupportedCurrencies() {
9605
9712
  try {
9606
- throw new Error("Not implemented in base");
9713
+ var _this2 = this;
9714
+ var loggerSource = "getAllSupportedCurrencies";
9715
+ return Promise.resolve(_catch$4(function () {
9716
+ return Promise.resolve(_this2._fetchSupportedCurrenciesIfNeeded()).then(function () {
9717
+ var _this2$_supportedCoin;
9718
+ Logger.log("We have " + ((_this2$_supportedCoin = _this2._supportedCoins) == null ? void 0 : _this2$_supportedCoin.length) + " supported coins returning", loggerSource);
9719
+ return {
9720
+ result: true,
9721
+ coins: _this2._supportedCoins.map(function (item) {
9722
+ return item.coin;
9723
+ })
9724
+ };
9725
+ });
9726
+ }, function (e) {
9727
+ var _e$response;
9728
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
9729
+ return {
9730
+ result: false,
9731
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9732
+ };
9733
+ }
9734
+ improveAndRethrow(e, loggerSource);
9735
+ }));
9607
9736
  } catch (e) {
9608
9737
  return Promise.reject(e);
9609
9738
  }
@@ -9617,7 +9746,31 @@
9617
9746
  ;
9618
9747
  _proto.getDepositCurrencies = function getDepositCurrencies() {
9619
9748
  try {
9620
- throw new Error("Not implemented in base");
9749
+ var _this3 = this;
9750
+ var loggerSource = "getDepositCurrencies";
9751
+ return Promise.resolve(_catch$4(function () {
9752
+ return Promise.resolve(_this3._fetchSupportedCurrenciesIfNeeded()).then(function () {
9753
+ var _this3$_supportedCoin;
9754
+ Logger.log("We have " + ((_this3$_supportedCoin = _this3._supportedCoins) == null ? void 0 : _this3$_supportedCoin.length) + " supported coins, getting depositable", loggerSource);
9755
+ return {
9756
+ result: true,
9757
+ coins: _this3._supportedCoins.filter(function (item) {
9758
+ return item.deposit;
9759
+ }).map(function (item) {
9760
+ return item.coin;
9761
+ })
9762
+ };
9763
+ });
9764
+ }, function (e) {
9765
+ var _e$response2;
9766
+ if ((e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status) === 429) {
9767
+ return {
9768
+ result: false,
9769
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9770
+ };
9771
+ }
9772
+ improveAndRethrow(e, loggerSource);
9773
+ }));
9621
9774
  } catch (e) {
9622
9775
  return Promise.reject(e);
9623
9776
  }
@@ -9631,8 +9784,36 @@
9631
9784
  */
9632
9785
  ;
9633
9786
  _proto.getWithdrawalCurrencies = function getWithdrawalCurrencies(exceptCurrency) {
9787
+ if (exceptCurrency === void 0) {
9788
+ exceptCurrency = null;
9789
+ }
9634
9790
  try {
9635
- throw new Error("Not implemented in base");
9791
+ var _this4 = this;
9792
+ var loggerSource = "getWithdrawalCurrencies";
9793
+ return Promise.resolve(_catch$4(function () {
9794
+ return Promise.resolve(_this4._fetchSupportedCurrenciesIfNeeded()).then(function () {
9795
+ var _this4$_supportedCoin;
9796
+ Logger.log("We have " + ((_this4$_supportedCoin = _this4._supportedCoins) == null ? void 0 : _this4$_supportedCoin.length) + " supported coins, getting withdrawable", loggerSource);
9797
+ return {
9798
+ result: true,
9799
+ coins: _this4._supportedCoins.filter(function (item) {
9800
+ var _item$coin, _exceptCurrency;
9801
+ return item.withdrawal && (!exceptCurrency || ((_item$coin = item.coin) == null ? void 0 : _item$coin.ticker) !== ((_exceptCurrency = exceptCurrency) == null ? void 0 : _exceptCurrency.ticker));
9802
+ }).map(function (item) {
9803
+ return item.coin;
9804
+ })
9805
+ };
9806
+ });
9807
+ }, function (e) {
9808
+ var _e$response3;
9809
+ if ((e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.status) === 429) {
9810
+ return {
9811
+ result: false,
9812
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
9813
+ };
9814
+ }
9815
+ improveAndRethrow(e, loggerSource);
9816
+ }));
9636
9817
  } catch (e) {
9637
9818
  return Promise.reject(e);
9638
9819
  }
@@ -9640,12 +9821,28 @@
9640
9821
  /**
9641
9822
  * Retrieves URL for coin icon or fallback if not found.
9642
9823
  *
9643
- * @param coin {Coin|string} coin or rabbit-format of coin ticker
9824
+ * @param coinOrTicker {Coin|string} coin or rabbit-format of coin ticker
9644
9825
  * @return {string}
9645
9826
  */
9646
9827
  ;
9647
- _proto.getIconUrl = function getIconUrl(coin) {
9648
- throw new Error("Not implemented in base");
9828
+ _proto.getIconUrl = function getIconUrl(coinOrTicker) {
9829
+ var loggerSource = "getIconUrl";
9830
+ try {
9831
+ var _this$_supportedCoins2, _this$_supportedCoins3;
9832
+ var coin = coinOrTicker;
9833
+ if (!(coinOrTicker instanceof Coin)) {
9834
+ var _this$_supportedCoins;
9835
+ coin = (_this$_supportedCoins = this._supportedCoins.find(function (i) {
9836
+ return i.coin.ticker === coinOrTicker;
9837
+ })) == null ? void 0 : _this$_supportedCoins.coin;
9838
+ }
9839
+ return (_this$_supportedCoins2 = (_this$_supportedCoins3 = this._supportedCoins.find(function (item) {
9840
+ var _item$coin2, _coin;
9841
+ return ((_item$coin2 = item.coin) == null ? void 0 : _item$coin2.ticker) === ((_coin = coin) == null ? void 0 : _coin.ticker);
9842
+ })) == null ? void 0 : _this$_supportedCoins3.iconURL) != null ? _this$_supportedCoins2 : FALLBACK_ASSET_ICON_URL;
9843
+ } catch (e) {
9844
+ improveAndRethrow(e, loggerSource);
9845
+ }
9649
9846
  }
9650
9847
 
9651
9848
  /**
@@ -9656,7 +9853,49 @@
9656
9853
  */;
9657
9854
  _proto.getCoinToUSDTRate = function getCoinToUSDTRate(coin) {
9658
9855
  try {
9659
- throw new Error("Not implemented in base");
9856
+ var _this5 = this;
9857
+ var loggerSource = "getCoinToUSDTRate";
9858
+ return Promise.resolve(_catch$4(function () {
9859
+ return coin ? Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
9860
+ var _this5$_supportedCoin;
9861
+ // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
9862
+ var usdtTrc20 = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
9863
+ return i.coin.ticker === "USDTTRC20";
9864
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
9865
+ if (!usdtTrc20) {
9866
+ return {
9867
+ result: false
9868
+ };
9869
+ }
9870
+ var cached = _this5._cache.get("swapspace_usdt_rate_" + coin.ticker);
9871
+ if (cached != null) {
9872
+ return {
9873
+ result: true,
9874
+ rate: cached
9875
+ };
9876
+ }
9877
+ Logger.log("Loading USDT->coin rate as not found in cache:", coin == null ? void 0 : coin.ticker);
9878
+ return Promise.resolve(_this5.getSwapInfo(usdtTrc20, coin, "5000", false)).then(function (result) {
9879
+ if (!result.result) {
9880
+ return {
9881
+ result: false
9882
+ };
9883
+ }
9884
+
9885
+ // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
9886
+ var standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
9887
+ var rate = bignumber_js.BigNumber(1).div(bignumber_js.BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
9888
+ _this5._cache.put("swap_usdt_rate_" + coin.ticker, rate, 15 * 60000 // 15 minutes
9889
+ );
9890
+ return {
9891
+ result: true,
9892
+ rate: rate
9893
+ };
9894
+ });
9895
+ }) : null;
9896
+ }, function (e) {
9897
+ improveAndRethrow(e, loggerSource);
9898
+ }));
9660
9899
  } catch (e) {
9661
9900
  return Promise.reject(e);
9662
9901
  }
@@ -9673,6 +9912,7 @@
9673
9912
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
9674
9913
  * @param [fromCoinToUsdRate=null] pass if you want to increase the min amount returned
9675
9914
  * by provider with some fixed "insurance" amount to cover min amount fluctuations.
9915
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9676
9916
  * @return {Promise<({
9677
9917
  * result: false,
9678
9918
  * reason: string,
@@ -9692,7 +9932,7 @@
9692
9932
  * })>}
9693
9933
  */
9694
9934
  ;
9695
- _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate) {
9935
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
9696
9936
  try {
9697
9937
  throw new Error("Not implemented in base");
9698
9938
  } catch (e) {
@@ -9712,6 +9952,7 @@
9712
9952
  * @param fixed {boolean}
9713
9953
  * @param [toCurrencyExtraId=""] {string} optional extra ID
9714
9954
  * @param [refundExtraId=""] {string} optional extra ID for refund address
9955
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
9715
9956
  * @return {Promise<({
9716
9957
  * result: true,
9717
9958
  * swapId: string,
@@ -9731,7 +9972,7 @@
9731
9972
  * })>}
9732
9973
  */
9733
9974
  ;
9734
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
9975
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
9735
9976
  try {
9736
9977
  throw new Error("Not implemented in base");
9737
9978
  } catch (e) {
@@ -9759,7 +10000,15 @@
9759
10000
  */
9760
10001
  ;
9761
10002
  _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
9762
- throw new Error("Not implemented in base");
10003
+ try {
10004
+ var _item$coin3;
10005
+ var item = this._supportedCoins.find(function (i) {
10006
+ return i.coin.ticker === ticker;
10007
+ });
10008
+ return (_item$coin3 = item == null ? void 0 : item.coin) != null ? _item$coin3 : null;
10009
+ } catch (e) {
10010
+ improveAndRethrow(e, "getCoinByTickerIfPresent");
10011
+ }
9763
10012
  }
9764
10013
 
9765
10014
  /**
@@ -9768,16 +10017,67 @@
9768
10017
  * @return {boolean}
9769
10018
  */;
9770
10019
  _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
- };
10020
+ try {
10021
+ var assetData = this._supportedCoins.find(function (i) {
10022
+ var _i$coin;
10023
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (asset == null ? void 0 : asset.ticker);
10024
+ });
10025
+ if (assetData) {
10026
+ var corrected = assetData.validationRegexp.trim();
10027
+ corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
10028
+ corrected = corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
10029
+ return address.match(corrected) != null;
10030
+ }
10031
+ } catch (e) {
10032
+ Logger.logError(e, "isAddressValidForAsset");
10033
+ }
10034
+ return false;
10035
+ }
10036
+
10037
+ /**
10038
+ * @param asset {Coin}
10039
+ * @return {string|null}
10040
+ */;
10041
+ _proto.getExtraIdNameIfPresent = function getExtraIdNameIfPresent(asset) {
10042
+ try {
10043
+ var assetData = this._supportedCoins.find(function (i) {
10044
+ var _i$coin2;
10045
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (asset == null ? void 0 : asset.ticker);
10046
+ });
10047
+ if (assetData != null && assetData.hasExtraId) {
10048
+ if ((assetData == null ? void 0 : assetData.extraIdName) == null || (assetData == null ? void 0 : assetData.extraIdName) === "") {
10049
+ // We return some default name if the extraIdName is empty
10050
+ return "ID";
10051
+ }
10052
+ return assetData == null ? void 0 : assetData.extraIdName;
10053
+ }
10054
+ return null;
10055
+ } catch (e) {
10056
+ improveAndRethrow(e, "getExtraIdNameIfPresent");
10057
+ }
10058
+ };
10059
+ _proto.removeProtocolNameFromCoinName = function removeProtocolNameFromCoinName(coinName, tickerPrintable, protocolName) {
10060
+ if (coinName) {
10061
+ var originalName = coinName;
10062
+ if (tickerPrintable) {
10063
+ coinName = coinName.replaceAll(new RegExp("\\(" + tickerPrintable + "\\)", "gi"), "");
10064
+ }
10065
+ if (protocolName) {
10066
+ coinName = coinName.replaceAll(new RegExp("\\(" + protocolName + "\\)", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + "$", "gi"), "").replaceAll(new RegExp("^" + protocolName + " ", "gi"), "").replaceAll(new RegExp("(?<!on) " + protocolName + " ", "gi"), " ");
10067
+ }
10068
+ coinName = coinName.replaceAll(/ +/g, " ").trim();
10069
+ var defaultNames = ["token", "network", "protocol", "coin", "mainnet", "chain", "project", "cash", "finance", "wrapped", "blockchain", "network"];
10070
+ var lowerCoinName = coinName.toLowerCase();
10071
+ var isBecameDefaultName = defaultNames.find(function (defName) {
10072
+ return lowerCoinName === defName || lowerCoinName === "the " + defName;
10073
+ });
10074
+ if (coinName === "" || isBecameDefaultName) {
10075
+ // Rolling back to original name if our processing leads in empty name or one of the default words
10076
+ coinName = originalName;
10077
+ }
10078
+ }
10079
+ return coinName;
10080
+ };
9781
10081
  return SwapProvider;
9782
10082
  }();
9783
10083
  SwapProvider.COMMON_ERRORS = {
@@ -9795,22 +10095,16 @@
9795
10095
  };
9796
10096
  SwapProvider.SWAP_STATUSES = {
9797
10097
  WAITING_FOR_PAYMENT: "waiting_for_payment",
9798
- // public +
9799
10098
  CONFIRMING: "confirming",
9800
10099
  PAYMENT_RECEIVED: "payment_received",
9801
- // public +
9802
10100
  EXCHANGING: "exchanging",
9803
- // session full // public +
9804
10101
  COMPLETED: "completed",
9805
- // session full // public +
9806
10102
  REFUNDED: "refunded",
9807
- // session full // public +
9808
10103
  EXPIRED: "expired",
9809
- // public +
9810
- FAILED: "failed" // public +
10104
+ FAILED: "failed"
9811
10105
  };
9812
10106
 
9813
- function _catch$2(body, recover) {
10107
+ function _catch$3(body, recover) {
9814
10108
  try {
9815
10109
  var result = body();
9816
10110
  } catch (e) {
@@ -9834,14 +10128,10 @@
9834
10128
  if (useRestrictedCoinsSet === void 0) {
9835
10129
  useRestrictedCoinsSet = true;
9836
10130
  }
9837
- _this = _SwapProvider.call(this) || this;
9838
- _this._supportedCoins = [];
10131
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
9839
10132
  _this._partners = [];
9840
- _this._URL = "" + apiKeysProxyUrl;
9841
- _this._maxRateDigits = 20;
9842
- _this.useRestrictedCoinsSet = useRestrictedCoinsSet;
9843
- _this._customCoinBuilder = customCoinBuilder;
9844
- _this._cache = cache;
10133
+ _this._URL = apiKeysProxyUrl + "/swapspace";
10134
+ _this.isAggregator = true;
9845
10135
  return _this;
9846
10136
  }
9847
10137
  var _proto = SwapspaceSwapProvider.prototype;
@@ -9850,144 +10140,21 @@
9850
10140
  * (and even a bit smaller value) for better consistency */
9851
10141
  return 110000;
9852
10142
  };
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
10143
  _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
9976
10144
  try {
9977
- var _this6 = this;
10145
+ var _this2 = this;
9978
10146
  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) {
10147
+ return Promise.resolve(_catch$3(function () {
10148
+ var _temp = function (_this2$_supportedCoin) {
10149
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length)) {
10150
+ return Promise.resolve(axios__default["default"].get(_this2._URL + "/api/v2/currencies")).then(function (rawResponse) {
9983
10151
  var _rawResponse$data, _rawResponse$data2;
9984
10152
  Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
9985
10153
  var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
9986
10154
  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;
10155
+ _this2._supportedCoins = allowedCoins.map(function (item) {
10156
+ var coin = _this2._customCoinBuilder(item.code, item.network);
10157
+ if (!coin && !_this2.useRestrictedCoinsSet) {
9991
10158
  /** Building coin object for coin that isn't supported OOB in Rabbit.
9992
10159
  * We are doing this way to be able to use extended coins set for swaps.
9993
10160
  * These temporary built coins are only for in-swap use, and we omit some usual
@@ -10001,11 +10168,7 @@
10001
10168
  /** Removing ticker and protocol name from coin name as we usually use them explicitly
10002
10169
  * from coin object rather than counting on having it in the coin name itself.
10003
10170
  * 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
- }
10171
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
10009
10172
  var ticker = "" + code + (code === network ? "" : network);
10010
10173
  var defaultDecimalPlacesForCoinNotSupportedOOB = 8;
10011
10174
  var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
@@ -10021,16 +10184,17 @@
10021
10184
  network: item.network,
10022
10185
  hasExtraId: item.hasExtraId,
10023
10186
  extraIdName: item.extraIdName,
10024
- isPopular: !!item.popular,
10187
+ isPopular: item.popular ? 1 : 0,
10025
10188
  iconURL: item.icon ? "https://storage.swapspace.co" + item.icon : FALLBACK_ASSET_ICON_URL,
10026
10189
  deposit: (_item$deposit = item.deposit) != null ? _item$deposit : false,
10027
10190
  withdrawal: (_item$withdrawal = item.withdrawal) != null ? _item$withdrawal : false,
10028
- validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null
10191
+ validationRegexp: (_item$validationRegex = item.validationRegexp) != null ? _item$validationRegex : null,
10192
+ isAvailable: true
10029
10193
  };
10030
10194
  }
10031
10195
  return [];
10032
10196
  }).flat();
10033
- _this6._putPopularCoinsFirst();
10197
+ _this2._putPopularCoinsFirst();
10034
10198
  });
10035
10199
  }
10036
10200
  }();
@@ -10044,15 +10208,15 @@
10044
10208
  };
10045
10209
  _proto._fetchPartnersListIfNeeded = function _fetchPartnersListIfNeeded() {
10046
10210
  try {
10047
- var _this7 = this;
10211
+ var _this3 = this;
10048
10212
  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) {
10213
+ return Promise.resolve(_catch$3(function () {
10214
+ var _temp2 = function (_this3$_partners) {
10215
+ if (((_this3$_partners = _this3._partners) == null ? void 0 : _this3$_partners.length) === 0) {
10216
+ return Promise.resolve(axios__default["default"].get(_this3._URL + "/api/v2/partners")).then(function (rawResponse) {
10053
10217
  var _rawResponse$data3;
10054
10218
  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 : [];
10219
+ _this3._partners = Array.isArray(rawResponse == null ? void 0 : rawResponse.data) ? rawResponse == null ? void 0 : rawResponse.data : [];
10056
10220
  });
10057
10221
  }
10058
10222
  }();
@@ -10063,99 +10227,30 @@
10063
10227
  } catch (e) {
10064
10228
  return Promise.reject(e);
10065
10229
  }
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
10230
  };
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) {
10231
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
10141
10232
  if (fixed === void 0) {
10142
10233
  fixed = false;
10143
10234
  }
10144
10235
  if (fromCoinToUsdRate === void 0) {
10145
10236
  fromCoinToUsdRate = null;
10146
10237
  }
10238
+ if (amountIsToReceive === void 0) {
10239
+ amountIsToReceive = false;
10240
+ }
10147
10241
  try {
10148
- var _this9 = this;
10242
+ var _this4 = this;
10149
10243
  var loggerSource = "getSwapInfo";
10150
- return Promise.resolve(_catch$2(function () {
10244
+ return Promise.resolve(_catch$3(function () {
10245
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10151
10246
  if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || bignumber_js.BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean") {
10152
10247
  throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed);
10153
10248
  }
10154
- var fromCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10249
+ var fromCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10155
10250
  var _i$coin;
10156
10251
  return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
10157
10252
  });
10158
- var toCoinSwapspaceDetails = _this9._supportedCoins.find(function (i) {
10253
+ var toCoinSwapspaceDetails = _this4._supportedCoins.find(function (i) {
10159
10254
  var _i$coin2;
10160
10255
  return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
10161
10256
  });
@@ -10165,11 +10260,11 @@
10165
10260
  return !fromCoinSwapspaceDetails.deposit || !toCoinSwapspaceDetails.withdrawal ? {
10166
10261
  result: false,
10167
10262
  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) {
10263
+ } : 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
10264
  var _response$data, _exchangesSupportingT;
10170
10265
  var _exit;
10171
- function _temp4(_result6) {
10172
- if (_exit) return _result6;
10266
+ function _temp4(_result2) {
10267
+ if (_exit) return _result2;
10173
10268
  var result = {
10174
10269
  result: false,
10175
10270
  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 +10358,9 @@
10263
10358
  }
10264
10359
  }
10265
10360
  var rate = bestOpt.toAmount && bestOpt.fromAmount ? bignumber_js.BigNumber(bestOpt.toAmount).div(bestOpt.fromAmount) : null;
10266
- return Promise.resolve(_this9._fetchPartnersListIfNeeded()).then(function () {
10361
+ return Promise.resolve(_this4._fetchPartnersListIfNeeded()).then(function () {
10267
10362
  var _bestOpt$duration;
10268
- var partner = _this9._partners.find(function (p) {
10363
+ var partner = _this4._partners.find(function (p) {
10269
10364
  var _bestOpt$partner;
10270
10365
  return (bestOpt == null || (_bestOpt$partner = bestOpt.partner) == null ? void 0 : _bestOpt$partner.toLowerCase()) === p.path.toLowerCase();
10271
10366
  });
@@ -10276,7 +10371,7 @@
10276
10371
  max: max,
10277
10372
  smallestMin: smallestMin,
10278
10373
  greatestMax: greatestMax,
10279
- rate: rate != null ? AmountUtils.trim(rate, _this9._maxRateDigits) : null,
10374
+ rate: rate != null ? AmountUtils.trim(rate, _this4._maxRateDigits) : null,
10280
10375
  durationMinutesRange: (_bestOpt$duration = bestOpt.duration) != null ? _bestOpt$duration : null,
10281
10376
  fixed: bestOpt.fixed,
10282
10377
  rawSwapData: bestOpt,
@@ -10290,8 +10385,8 @@
10290
10385
  return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
10291
10386
  });
10292
10387
  }, function (e) {
10293
- var _e$response4;
10294
- if ((e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status) === 429) {
10388
+ var _e$response;
10389
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
10295
10390
  return {
10296
10391
  result: false,
10297
10392
  reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
@@ -10304,18 +10399,22 @@
10304
10399
  return Promise.reject(e);
10305
10400
  }
10306
10401
  };
10307
- _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId) {
10402
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
10308
10403
  if (toCurrencyExtraId === void 0) {
10309
10404
  toCurrencyExtraId = "";
10310
10405
  }
10311
10406
  if (refundExtraId === void 0) {
10312
10407
  refundExtraId = "";
10313
10408
  }
10409
+ if (amountIsToReceive === void 0) {
10410
+ amountIsToReceive = false;
10411
+ }
10314
10412
  try {
10315
- var _this10 = this;
10413
+ var _this5 = this;
10316
10414
  var loggerSource = "createSwap";
10317
10415
  var partner = rawSwapData == null ? void 0 : rawSwapData.partner;
10318
- return Promise.resolve(_catch$2(function () {
10416
+ return Promise.resolve(_catch$3(function () {
10417
+ if (amountIsToReceive) throw new Error("Swapspace doesn't support exchanging to get the exact receiving amount");
10319
10418
  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
10419
  throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + (clientIpAddress == null ? void 0 : clientIpAddress.length) + " " + fixed);
10321
10420
  }
@@ -10323,12 +10422,12 @@
10323
10422
  ) {
10324
10423
  throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
10325
10424
  }
10326
- var _this10$_supportedCoi = _this10._supportedCoins.reduce(function (prev, coinData) {
10425
+ var _this5$_supportedCoin = _this5._supportedCoins.reduce(function (prev, coinData) {
10327
10426
  return [coinData.coin.ticker === fromCoin.ticker ? coinData.hasExtraId : prev[0], coinData.coin.ticker === toCoin.ticker ? coinData.hasExtraId : prev[1]];
10328
10427
  }, [false, false]),
10329
- fromCurrencyHasExtraId = _this10$_supportedCoi[0],
10330
- toCurrencyHasExtraId = _this10$_supportedCoi[1];
10331
- return Promise.resolve(_this10._fetchSupportedCurrenciesIfNeeded()).then(function () {
10428
+ fromCurrencyHasExtraId = _this5$_supportedCoin[0],
10429
+ toCurrencyHasExtraId = _this5$_supportedCoin[1];
10430
+ return Promise.resolve(_this5._fetchSupportedCurrenciesIfNeeded()).then(function () {
10332
10431
  var _toCurrencyExtraId, _refundExtraId;
10333
10432
  var requestData = {
10334
10433
  partner: partner,
@@ -10347,7 +10446,7 @@
10347
10446
  refund: refundAddress
10348
10447
  };
10349
10448
  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) {
10449
+ return Promise.resolve(axios__default["default"].post(_this5._URL + "/api/v2/exchange", requestData)).then(function (response) {
10351
10450
  var result = response.data;
10352
10451
  Logger.log("Creation result " + safeStringify(result), loggerSource);
10353
10452
  if (result != null && result.id) {
@@ -10372,7 +10471,7 @@
10372
10471
  toAmount: AmountUtils.trim(result == null || (_result$to4 = result.to) == null ? void 0 : _result$to4.amount, toCoin.digits),
10373
10472
  toAddress: result == null || (_result$to5 = result.to) == null ? void 0 : _result$to5.address,
10374
10473
  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),
10474
+ rate: AmountUtils.trim(rate, _this5._maxRateDigits),
10376
10475
  fixed: result.fixed
10377
10476
  };
10378
10477
  }
@@ -10382,7 +10481,7 @@
10382
10481
  });
10383
10482
  });
10384
10483
  }, function (e) {
10385
- var _e$response5, _e$response6;
10484
+ var _e$response2, _e$response3;
10386
10485
  Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
10387
10486
  var composeFailResult = function composeFailResult(reason) {
10388
10487
  return {
@@ -10391,8 +10490,8 @@
10391
10490
  partner: partner
10392
10491
  };
10393
10492
  };
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;
10493
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
10494
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
10396
10495
  if (status === 429) {
10397
10496
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10398
10497
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10441,9 +10540,9 @@
10441
10540
  };
10442
10541
  _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10443
10542
  try {
10444
- var _this11 = this;
10543
+ var _this6 = this;
10445
10544
  var loggerSource = "getExistingSwapsDetailsAndStatus";
10446
- return Promise.resolve(_catch$2(function () {
10545
+ return Promise.resolve(_catch$3(function () {
10447
10546
  if (swapIds.find(function (id) {
10448
10547
  return typeof id !== "string";
10449
10548
  })) {
@@ -10451,8 +10550,8 @@
10451
10550
  }
10452
10551
  var getNotFailingOn404 = function getNotFailingOn404(swapId) {
10453
10552
  try {
10454
- return Promise.resolve(_catch$2(function () {
10455
- return Promise.resolve(axios__default["default"].get(_this11._URL + "/api/v2/exchange/" + swapId));
10553
+ return Promise.resolve(_catch$3(function () {
10554
+ return Promise.resolve(axios__default["default"].get(_this6._URL + "/api/v2/exchange/" + swapId));
10456
10555
  }, function (error) {
10457
10556
  var _error$response;
10458
10557
  if ((error == null || (_error$response = error.response) == null ? void 0 : _error$response.status) === 404) return [];
@@ -10472,13 +10571,13 @@
10472
10571
  var swaps = wo404.map(function (r) {
10473
10572
  return r.data;
10474
10573
  }).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) {
10574
+ var _this6$_supportedCoin, _this6$_supportedCoin2, _swap$from$extraId, _swap$to$extraId, _swap$refundExtraId;
10575
+ var fromCoin = (_this6$_supportedCoin = _this6._supportedCoins.find(function (i) {
10477
10576
  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) {
10577
+ })) == null ? void 0 : _this6$_supportedCoin.coin;
10578
+ var toCoin = (_this6$_supportedCoin2 = _this6._supportedCoins.find(function (i) {
10480
10579
  return i.code === swap.to.code && i.network === swap.to.network;
10481
- })) == null ? void 0 : _this11$_supportedCoi2.coin;
10580
+ })) == null ? void 0 : _this6$_supportedCoin2.coin;
10482
10581
  if (!fromCoin || !toCoin) {
10483
10582
  return []; // We skip swaps with not supported coins for now
10484
10583
  }
@@ -10487,10 +10586,10 @@
10487
10586
  };
10488
10587
  var expiresAt = toUtcTimestamp(swap.timestamps.expiresAt);
10489
10588
  var isExpiredByTime = expiresAt < Date.now();
10490
- var status = _this11._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10589
+ var status = _this6._mapSwapspaceStatusToRabbitStatus(swap.status, isExpiredByTime);
10491
10590
  var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
10492
10591
  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);
10592
+ 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
10593
  }).flat();
10495
10594
  Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
10496
10595
  return {
@@ -10499,7 +10598,7 @@
10499
10598
  };
10500
10599
  });
10501
10600
  }, function (e) {
10502
- var _e$response7, _e$response8;
10601
+ var _e$response4, _e$response5;
10503
10602
  Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
10504
10603
  var composeFailResult = function composeFailResult(reason) {
10505
10604
  return {
@@ -10507,8 +10606,8 @@
10507
10606
  reason: reason
10508
10607
  };
10509
10608
  };
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;
10609
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
10610
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
10512
10611
  if (status === 429) {
10513
10612
  Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
10514
10613
  return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
@@ -10519,45 +10618,10 @@
10519
10618
  return Promise.reject(e);
10520
10619
  }
10521
10620
  };
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
10621
  return SwapspaceSwapProvider;
10558
10622
  }(SwapProvider);
10559
10623
 
10560
- function _catch$1(body, recover) {
10624
+ function _catch$2(body, recover) {
10561
10625
  try {
10562
10626
  var result = body();
10563
10627
  } catch (e) {
@@ -10754,134 +10818,590 @@
10754
10818
  if (coinToCurrentFiatRate === void 0) {
10755
10819
  coinToCurrentFiatRate = null;
10756
10820
  }
10757
- if (fiatCurrencyDecimals === void 0) {
10758
- fiatCurrencyDecimals = null;
10821
+ if (fiatCurrencyDecimals === void 0) {
10822
+ fiatCurrencyDecimals = null;
10823
+ }
10824
+ try {
10825
+ var loggerSource = "getInitialSwapData";
10826
+ return Promise.resolve(_catch$2(function () {
10827
+ /* We use some amount here that should fit at least some of the limits of the swap providers.
10828
+ * So we are going to get some rate to be used as the default for the on-flight calculations before we get
10829
+ * the exact rate (that should be retrieved by getSwapCreationInfo method) for a specific amount.
10830
+ */
10831
+ var defaultAmountUsd = bignumber_js.BigNumber("300");
10832
+ return Promise.resolve(swapProvider.getCoinToUSDTRate(fromCoin)).then(function (coinUsdRate) {
10833
+ var coinAmountForDefaultUsdAmount = AmountUtils.trim(coinUsdRate.result ? defaultAmountUsd.div(coinUsdRate == null ? void 0 : coinUsdRate.rate) : defaultAmountUsd, fromCoin.digits);
10834
+ Logger.log("Init: " + coinAmountForDefaultUsdAmount + " " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10835
+ return Promise.resolve(swapProvider.getSwapInfo(fromCoin, toCoin, coinAmountForDefaultUsdAmount)).then(function (details) {
10836
+ var _coinToCurrentFiatRat, _fiatCurrencyDecimals;
10837
+ if (!details) {
10838
+ throw new Error("The details are empty: " + safeStringify(details));
10839
+ }
10840
+ if (!details.result) {
10841
+ Logger.log("Failed with reason: " + details.reason + ". " + fromCoin.ticker + "->" + toCoin.ticker, loggerSource);
10842
+ 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) {
10843
+ return {
10844
+ result: false,
10845
+ reason: details.reason
10846
+ };
10847
+ } else {
10848
+ throw new Error("Unhandled error case: " + (details == null ? void 0 : details.reason));
10849
+ }
10850
+ }
10851
+ var fiatMin = null;
10852
+ var fiatMax = null;
10853
+ var fiatRate = (_coinToCurrentFiatRat = coinToCurrentFiatRate) != null ? _coinToCurrentFiatRat : coinUsdRate == null ? void 0 : coinUsdRate.rate;
10854
+ var fiatDecimals = (_fiatCurrencyDecimals = fiatCurrencyDecimals) != null ? _fiatCurrencyDecimals : FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");
10855
+ if (fiatRate != null) {
10856
+ fiatMin = bignumber_js.BigNumber(details == null ? void 0 : details.smallestMin).times(fiatRate).toFixed(fiatDecimals);
10857
+ fiatMax = bignumber_js.BigNumber(details == null ? void 0 : details.greatestMax).times(fiatRate).toFixed(fiatDecimals);
10858
+ }
10859
+ var result = {
10860
+ result: true,
10861
+ min: details == null ? void 0 : details.smallestMin,
10862
+ fiatMin: fiatMin,
10863
+ max: details == null ? void 0 : details.greatestMax,
10864
+ fiatMax: fiatMax,
10865
+ rate: AmountUtils.trim(details.rate, 30)
10866
+ };
10867
+ Logger.log("Returning: " + safeStringify(result), loggerSource);
10868
+ return result;
10869
+ });
10870
+ });
10871
+ }, function (e) {
10872
+ Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
10873
+ improveAndRethrow(e, loggerSource);
10874
+ }));
10875
+ } catch (e) {
10876
+ return Promise.reject(e);
10877
+ }
10878
+ };
10879
+ SwapUtils.safeHandleRequestsLimitExceeding = function safeHandleRequestsLimitExceeding() {
10880
+ (function () {
10881
+ try {
10882
+ var _temp = _catch$2(function () {
10883
+ return Promise.resolve(EmailsApi.sendEmail("AUTOMATIC EMAIL - SWAPSPACE REQUESTS LIMIT EXCEEDED", "Requests limit exceeded. Urgently ask swaps provider support for limit increasing")).then(function () {});
10884
+ }, function (e) {
10885
+ Logger.log("Failed to handle limit exceeding " + safeStringify(e), "_safeHandleRequestsLimitExceeding");
10886
+ });
10887
+ return _temp && _temp.then ? _temp.then(function () {}) : void 0;
10888
+ } catch (e) {
10889
+ Promise.reject(e);
10890
+ }
10891
+ })();
10892
+ }
10893
+
10894
+ /**
10895
+ * If some swap is not found by id then there is no item in return list.
10896
+ *
10897
+ * @param swapProviders {SwapProvider[]} - Array of swap providers
10898
+ * @param swapIds {string[]} - Array of swap IDs
10899
+ * @return {Promise<{
10900
+ * result: true,
10901
+ * swaps: ExistingSwapWithFiatData[]
10902
+ * }|{
10903
+ * result: false,
10904
+ * reason: string
10905
+ * }>}
10906
+ */;
10907
+ SwapUtils.getExistingSwapsDetailsWithFiatAmounts = function getExistingSwapsDetailsWithFiatAmounts(swapProviders, swapIds) {
10908
+ try {
10909
+ return Promise.resolve(_catch$2(function () {
10910
+ var _interrupt;
10911
+ function _temp8() {
10912
+ if (swapIds.length > 0 && allSwaps.length === 0 && failResults.length > 0) {
10913
+ var failReasons = failResults.map(function (r) {
10914
+ return r.reason;
10915
+ });
10916
+ return {
10917
+ result: false,
10918
+ reason: failReasons.find(function (r) {
10919
+ return r !== SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED;
10920
+ }) ? failReasons.join("\n") : SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
10921
+ };
10922
+ }
10923
+ return {
10924
+ result: true,
10925
+ swaps: allSwaps
10926
+ };
10927
+ }
10928
+ var allSwaps = [];
10929
+ var remainingSwapIds = new Set(swapIds);
10930
+ var failResults = [];
10931
+ var _temp7 = _forOf(swapProviders, function (provider) {
10932
+ return Promise.resolve(provider.getExistingSwapsDetailsAndStatus([].concat(remainingSwapIds))).then(function (result) {
10933
+ var _temp6 = function () {
10934
+ if (result.result) {
10935
+ var _temp5 = function _temp5() {
10936
+ allSwaps = allSwaps.concat(_extendedSwaps);
10937
+
10938
+ // Stop if we have retrieved all swaps
10939
+ if (allSwaps.length >= swapIds.length) {
10940
+ _interrupt = 1;
10941
+ }
10942
+ };
10943
+ var _extendedSwaps = [];
10944
+ var _temp4 = _forOf(result.swaps, function (swap) {
10945
+ function _temp3() {
10946
+ remainingSwapIds["delete"](swap.id);
10947
+ }
10948
+ var _temp2 = function () {
10949
+ if (swap.status === SwapProvider.SWAP_STATUSES.REFUNDED) {
10950
+ return Promise.resolve(provider.getCoinToUSDTRate(swap.fromCoin)).then(function (rate) {
10951
+ _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")));
10952
+ });
10953
+ } else {
10954
+ return Promise.resolve(Promise.all([provider.getCoinToUSDTRate(swap.fromCoin), provider.getCoinToUSDTRate(swap.toCoin)])).then(function (_ref) {
10955
+ var fromCoinFiatRate = _ref[0],
10956
+ toCoinFiatRate = _ref[1];
10957
+ _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")));
10958
+ });
10959
+ }
10960
+ }();
10961
+ return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
10962
+ });
10963
+ return _temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4);
10964
+ } else {
10965
+ failResults.push(result);
10966
+ }
10967
+ }();
10968
+ if (_temp6 && _temp6.then) return _temp6.then(function () {});
10969
+ });
10970
+ }, function () {
10971
+ return _interrupt;
10972
+ });
10973
+ return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
10974
+ }, function (e) {
10975
+ improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
10976
+ }));
10977
+ } catch (e) {
10978
+ return Promise.reject(e);
10979
+ }
10980
+ };
10981
+ return SwapUtils;
10982
+ }();
10983
+
10984
+ function _catch$1(body, recover) {
10985
+ try {
10986
+ var result = body();
10987
+ } catch (e) {
10988
+ return recover(e);
10989
+ }
10990
+ if (result && result.then) {
10991
+ return result.then(void 0, recover);
10992
+ }
10993
+ return result;
10994
+ }
10995
+ var LetsExchangeSwapProvider = /*#__PURE__*/function (_SwapProvider) {
10996
+ _inheritsLoose(LetsExchangeSwapProvider, _SwapProvider);
10997
+ function LetsExchangeSwapProvider(apiKeysProxyUrl, cache, customCoinBuilder, useRestrictedCoinsSet) {
10998
+ var _this;
10999
+ if (customCoinBuilder === void 0) {
11000
+ customCoinBuilder = function customCoinBuilder(coin, network) {
11001
+ return null;
11002
+ };
11003
+ }
11004
+ if (useRestrictedCoinsSet === void 0) {
11005
+ useRestrictedCoinsSet = true;
11006
+ }
11007
+ _this = _SwapProvider.call(this, cache, customCoinBuilder, useRestrictedCoinsSet) || this;
11008
+ _this._partners = [];
11009
+ _this._URL = apiKeysProxyUrl + "/letsexchange";
11010
+ _this.isAggregator = false;
11011
+ _this.COINS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
11012
+ _this.coinsLastUpdateTimestamp = null;
11013
+ return _this;
11014
+ }
11015
+ var _proto = LetsExchangeSwapProvider.prototype;
11016
+ _proto.getSwapCreationInfoTtlMs = function getSwapCreationInfoTtlMs() {
11017
+ return 110000;
11018
+ };
11019
+ _proto._fetchSupportedCurrenciesIfNeeded = function _fetchSupportedCurrenciesIfNeeded() {
11020
+ try {
11021
+ var _this2 = this;
11022
+ var loggerSource = "_fetchSupportedCurrenciesIfNeeded";
11023
+ return Promise.resolve(_catch$1(function () {
11024
+ var _temp = function (_this2$_supportedCoin) {
11025
+ if (!((_this2$_supportedCoin = _this2._supportedCoins) != null && _this2$_supportedCoin.length) || !_this2.coinsLastUpdateTimestamp || _this2.coinsLastUpdateTimestamp + _this2.COINS_EXPIRATION_TIME_MS < Date.now()) {
11026
+ return Promise.resolve(axios__default["default"].get(_this2._URL + "/v2/coins")).then(function (rawResponse) {
11027
+ var _rawResponse$data, _rawResponse$data2;
11028
+ Logger.log("Retrieved " + (rawResponse == null || (_rawResponse$data = rawResponse.data) == null ? void 0 : _rawResponse$data.length), loggerSource);
11029
+ var allowedCoins = (_rawResponse$data2 = rawResponse == null ? void 0 : rawResponse.data) != null ? _rawResponse$data2 : [];
11030
+ Logger.log("Allowed cnt " + allowedCoins.length, loggerSource);
11031
+ _this2._supportedCoins = allowedCoins.map(function (item) {
11032
+ var code = item.code.toUpperCase();
11033
+ if (!Array.isArray(item.networks)) return [];
11034
+ return item.networks.map(function (networkDetails) {
11035
+ var network = networkDetails.code.toUpperCase();
11036
+ var coin = _this2._customCoinBuilder(code, network);
11037
+ if (!coin && !_this2.useRestrictedCoinsSet) {
11038
+ var name = _this2.removeProtocolNameFromCoinName(item.name, code, network);
11039
+ var ticker = "" + code + (code === network ? "" : network);
11040
+ var defaultDecimalPlacesForCoinNotSupportedOOB = DEFAULT_CRYPTO_DECIMAL_COUNT;
11041
+ var defaultMinConfirmationsForCoinNotSupportedOOB = 1;
11042
+ 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);
11043
+ }
11044
+ if (coin) {
11045
+ var _networkDetails$extra, _networkDetails$valid;
11046
+ return {
11047
+ coin: coin,
11048
+ code: item.code,
11049
+ network: networkDetails.code,
11050
+ hasExtraId: !!networkDetails.has_extra,
11051
+ extraIdName: (_networkDetails$extra = networkDetails.extra_name) != null ? _networkDetails$extra : null,
11052
+ isPopular: item.rating || 0,
11053
+ iconURL: item.icon ? item.icon : FALLBACK_ASSET_ICON_URL,
11054
+ deposit: true,
11055
+ // Letsexchange provide no such details
11056
+ withdrawal: true,
11057
+ // Letsexchange provide no such details
11058
+ validationRegexp: (_networkDetails$valid = networkDetails.validation_address_regex) != null ? _networkDetails$valid : null,
11059
+ 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)
11060
+ };
11061
+ }
11062
+ return [];
11063
+ });
11064
+ }).flat();
11065
+ _this2.coinsLastUpdateTimestamp = Date.now();
11066
+ _this2._putPopularCoinsFirst();
11067
+ });
11068
+ }
11069
+ }();
11070
+ if (_temp && _temp.then) return _temp.then(function () {});
11071
+ }, function (e) {
11072
+ improveAndRethrow(e, loggerSource);
11073
+ }));
11074
+ } catch (e) {
11075
+ return Promise.reject(e);
11076
+ }
11077
+ };
11078
+ _proto.getSwapInfo = function getSwapInfo(fromCoin, toCoin, amountCoins, fixed, fromCoinToUsdRate, amountIsToReceive) {
11079
+ if (fixed === void 0) {
11080
+ fixed = false;
11081
+ }
11082
+ if (amountIsToReceive === void 0) {
11083
+ amountIsToReceive = false;
11084
+ }
11085
+ try {
11086
+ var _this3 = this;
11087
+ var loggerSource = "getSwapInfo";
11088
+ return Promise.resolve(_catch$1(function () {
11089
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amountCoins !== "string" || bignumber_js.BigNumber(amountCoins).lt("0") || fixed !== null && typeof fixed !== "boolean" || amountIsToReceive && !fixed) {
11090
+ throw new Error("Wrong input params: " + amountCoins + " " + fromCoin.ticker + " -> " + toCoin.ticker + ", " + (fromCoin instanceof Coin) + ", " + (toCoin instanceof Coin) + ", " + typeof fixed + " " + fixed + ", " + amountIsToReceive);
11091
+ }
11092
+ var fromCoinDetails = _this3._supportedCoins.find(function (i) {
11093
+ var _i$coin;
11094
+ return ((_i$coin = i.coin) == null ? void 0 : _i$coin.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11095
+ });
11096
+ var toCoinDetails = _this3._supportedCoins.find(function (i) {
11097
+ var _i$coin2;
11098
+ return ((_i$coin2 = i.coin) == null ? void 0 : _i$coin2.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11099
+ });
11100
+ if (!fromCoinDetails || !toCoinDetails) {
11101
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11102
+ }
11103
+ if (!fromCoinDetails.deposit || !fromCoinDetails.isAvailable || !toCoinDetails.withdrawal || !toCoinDetails.isAvailable) {
11104
+ return {
11105
+ result: false,
11106
+ reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED
11107
+ };
11108
+ }
11109
+ var pathAndQuery = "/v1/info" + (amountIsToReceive ? "-revert" : "?float=" + !fixed);
11110
+ return Promise.resolve(axios__default["default"].post("" + _this3._URL + pathAndQuery, {
11111
+ from: fromCoinDetails.code,
11112
+ to: toCoinDetails.code,
11113
+ network_from: fromCoinDetails.network,
11114
+ network_to: toCoinDetails.network,
11115
+ amount: amountCoins,
11116
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11117
+ })).then(function (response) {
11118
+ Logger.log("Retrieved " + (response == null ? void 0 : response.data), loggerSource);
11119
+ var data = response.data;
11120
+
11121
+ // TODO: [dev] add SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING - request alternative rate. task_id=
11122
+
11123
+ // TODO: [feature, low] implement extra coins to fit min/max if there are frequent errors due to min/max exceeding
11124
+ // let extraCoinsToFitMinMax = "0";
11125
+ // if (typeof fromCoinToUsdRate === "string" && BigNumber(fromCoinToUsdRate).gt("0")) {
11126
+ // const extraUsdToFitMinMax = BigNumber("1"); // We correct the limits as the exact limit can fluctuate and cause failed swap creation
11127
+ // extraCoinsToFitMinMax = AmountUtils.trim(extraUsdToFitMinMax.div(fromCoinToUsdRate), fromCoin.digits);
11128
+ // }
11129
+ var min = null;
11130
+ if (data != null && data.min_amount) {
11131
+ min = AmountUtils.trim(data == null ? void 0 : data.min_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11132
+ }
11133
+ var max = null;
11134
+ if (data != null && data.max_amount) {
11135
+ max = AmountUtils.trim(data == null ? void 0 : data.max_amount, amountIsToReceive ? toCoin.digits : fromCoin.digits);
11136
+ }
11137
+ if (data.success === false && data.error) {
11138
+ // TODO: [dev] waiting for response from letsexchange about their not-documented responses
11139
+ // {
11140
+ // "success": false,
11141
+ // "error": "Internal error"
11142
+ // }
11143
+ throw new Error("Failed to estimate swap letsexchange");
11144
+ }
11145
+ if (bignumber_js.BigNumber(data.rate).eq("0") || bignumber_js.BigNumber(data.amount).eq("0")) {
11146
+ // TODO actualize according to letsexchage clarification - decide, can we count on min/max abcense? task_id=76512110797f4eab8b37f1bb789825cb
11147
+ // amount: "0", rate: "0", rate_id: ""
11148
+ var reason = SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED;
11149
+ if (min && bignumber_js.BigNumber(amountCoins).lt(min)) {
11150
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_LOW;
11151
+ } else if (max && bignumber_js.BigNumber(amountCoins).gt(max)) {
11152
+ reason = SwapProvider.NO_SWAPS_REASONS.TOO_HIGH;
11153
+ } else if (!amountIsToReceive) {
11154
+ // If we are not requesting receiving amount (it cannot be floating-rate)
11155
+ // todo [feature, moderate] request alternative rate. task_id=31884db5392f49738c20a86115c90e1f
11156
+ // const alternativeRate = 1;
11157
+ // const alternativeRateAvailable = alternativeRate;
11158
+ // if (alternativeRateAvailable) {
11159
+ // reason = fixed
11160
+ // ? SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING
11161
+ // : SwapProvider.NO_SWAPS_REASONS.NO_FLOATING_BUT_HAVE_FIXED;
11162
+ // }
11163
+ }
11164
+ return {
11165
+ result: false,
11166
+ reason: reason,
11167
+ smallestMin: min,
11168
+ greatestMax: max
11169
+ };
11170
+ }
11171
+ var rate = amountIsToReceive ? bignumber_js.BigNumber(amountCoins).div(data.amount) : bignumber_js.BigNumber(data.amount).div(amountCoins);
11172
+ return {
11173
+ result: true,
11174
+ min: min,
11175
+ max: max,
11176
+ smallestMin: min,
11177
+ greatestMax: max,
11178
+ rate: AmountUtils.trim(rate, _this3._maxRateDigits),
11179
+ durationMinutesRange: null,
11180
+ fixed: fixed,
11181
+ rawSwapData: data,
11182
+ isRefundAddressRequired: false
11183
+ };
11184
+ });
11185
+ }, function (e) {
11186
+ var _e$response;
11187
+ if ((e == null || (_e$response = e.response) == null ? void 0 : _e$response.status) === 429) {
11188
+ return {
11189
+ result: false,
11190
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11191
+ };
11192
+ }
11193
+ Logger.log("Internal error when getting swap options " + safeStringify(e), loggerSource);
11194
+ improveAndRethrow(e, loggerSource);
11195
+ }));
11196
+ } catch (e) {
11197
+ return Promise.reject(e);
11198
+ }
11199
+ };
11200
+ _proto.createSwap = function createSwap(fromCoin, toCoin, amount, toAddress, refundAddress, rawSwapData, clientIpAddress, fixed, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11201
+ if (toCurrencyExtraId === void 0) {
11202
+ toCurrencyExtraId = "";
11203
+ }
11204
+ if (refundExtraId === void 0) {
11205
+ refundExtraId = "";
11206
+ }
11207
+ if (amountIsToReceive === void 0) {
11208
+ amountIsToReceive = false;
10759
11209
  }
10760
11210
  try {
10761
- var loggerSource = "getInitialSwapData";
11211
+ var _this4 = this;
11212
+ var loggerSource = "createSwap";
10762
11213
  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 = {
11214
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || typeof refundAddress !== "string" || typeof clientIpAddress != "string" || typeof fixed != "boolean") {
11215
+ throw new Error("Invalid input: " + fromCoin + " " + toCoin + " " + amount + " " + toAddress + " " + refundAddress + " " + fixed);
11216
+ }
11217
+ if (typeof rawSwapData !== "object" || fixed && !rawSwapData.rate_id) {
11218
+ throw new Error("Invalid raw swap data: " + safeStringify(rawSwapData));
11219
+ }
11220
+ var fromCoinDetails = _this4._supportedCoins.find(function (i) {
11221
+ var _i$coin3;
11222
+ return ((_i$coin3 = i.coin) == null ? void 0 : _i$coin3.ticker) === (fromCoin == null ? void 0 : fromCoin.ticker);
11223
+ });
11224
+ var toCoinDetails = _this4._supportedCoins.find(function (i) {
11225
+ var _i$coin4;
11226
+ return ((_i$coin4 = i.coin) == null ? void 0 : _i$coin4.ticker) === (toCoin == null ? void 0 : toCoin.ticker);
11227
+ });
11228
+ if (!fromCoinDetails || !toCoinDetails) {
11229
+ throw new Error("Failed to find coin details for: " + fromCoin.ticker + " -> " + toCoin.ticker);
11230
+ }
11231
+ var requestBody = {
11232
+ coin_from: fromCoinDetails.code,
11233
+ network_from: fromCoinDetails.network,
11234
+ coin_to: toCoinDetails.code,
11235
+ network_to: toCoinDetails.network,
11236
+ withdrawal: toAddress,
11237
+ withdrawal_extra_id: toCurrencyExtraId,
11238
+ "return": refundAddress,
11239
+ return_extra_id: refundExtraId,
11240
+ affiliate_id: LetsExchangeSwapProvider.AFFILIATE_ID
11241
+ };
11242
+ if (amountIsToReceive) {
11243
+ requestBody.withdrawal_amount = amount;
11244
+ } else {
11245
+ requestBody.deposit_amount = amount;
11246
+ }
11247
+ if (fixed) {
11248
+ requestBody.rate_id = rawSwapData.rate_id;
11249
+ }
11250
+ return Promise.resolve(axios__default["default"].post(_this4._URL + "/v1/transaction" + (amountIsToReceive ? "-revert" : "?float=" + !fixed), requestBody)).then(function (response) {
11251
+ var result = response.data;
11252
+ Logger.log("Creation result " + safeStringify(result), loggerSource);
11253
+ if (result != null && result.transaction_id) {
11254
+ var _result$rate, _result$deposit_extra;
11255
+ 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);
11256
+ return {
10796
11257
  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)
11258
+ swapId: result.transaction_id,
11259
+ fromCoin: fromCoin,
11260
+ fromAmount: AmountUtils.trim(result.deposit_amount, fromCoin.digits),
11261
+ fromAddress: result.deposit,
11262
+ toCoin: toCoin,
11263
+ toAmount: AmountUtils.trim(result.withdrawal_amount, toCoin.digits),
11264
+ toAddress: result.withdrawal,
11265
+ fromCurrencyExtraId: (_result$deposit_extra = result.deposit_extra_id) != null ? _result$deposit_extra : "",
11266
+ rate: AmountUtils.trim(rate, _this4._maxRateDigits),
11267
+ fixed: !result.is_float
10802
11268
  };
10803
- Logger.log("Returning: " + safeStringify(result), loggerSource);
10804
- return result;
10805
- });
11269
+ }
11270
+ var errorMessage = "Swap creation succeeded but the response is wrong: " + safeStringify(response);
11271
+ Logger.log(errorMessage, loggerSource);
11272
+ throw new Error(errorMessage);
10806
11273
  });
10807
11274
  }, function (e) {
10808
- Logger.logError(e, loggerSource, "Failed to init swap: " + safeStringify(e));
11275
+ var _e$response2, _e$response3;
11276
+ Logger.logError(e, loggerSource, "Failed to create swap. Error is: " + safeStringify(e));
11277
+ var composeFailResult = function composeFailResult(reason) {
11278
+ return {
11279
+ result: false,
11280
+ reason: reason
11281
+ };
11282
+ };
11283
+ var status = e == null || (_e$response2 = e.response) == null ? void 0 : _e$response2.status;
11284
+ var data = e == null || (_e$response3 = e.response) == null ? void 0 : _e$response3.data;
11285
+ if (status === 429) {
11286
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11287
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11288
+ }
11289
+ // TODO: [feature, low] add custom errors handling - waiting for response from letsexchange. task_id=00d2e435f6df4fb99af912135bd9ee27
11290
+ // 422 - missing params
11291
+ Logger.log("Internal error for swap: " + safeStringify(e), loggerSource);
10809
11292
  improveAndRethrow(e, loggerSource);
10810
11293
  }));
10811
11294
  } catch (e) {
10812
11295
  return Promise.reject(e);
10813
11296
  }
10814
11297
  };
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) {
11298
+ _proto.getExistingSwapsDetailsAndStatus = function getExistingSwapsDetailsAndStatus(swapIds) {
10844
11299
  try {
11300
+ var _this5 = this;
11301
+ var loggerSource = "getExistingSwapsDetailsAndStatus";
10845
11302
  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);
11303
+ if (swapIds.find(function (id) {
11304
+ return typeof id !== "string";
11305
+ })) {
11306
+ throw new Error("Swap id is not string: " + safeStringify(swapIds));
11307
+ }
11308
+ return Promise.resolve(axios__default["default"].get(_this5._URL + "/v1/transactions-list?ids[]=" + swapIds.join("&ids[]="))).then(function (response) {
11309
+ Logger.log("All swaps RAW: " + safeStringify(response.data), loggerSource);
11310
+ var swaps = response.data.map(function (swap, index) {
11311
+ var _this5$_supportedCoin, _this5$_supportedCoin2, _swap$deposit_extra_i, _swap$withdrawal_extr, _swap$return_extra_id;
11312
+ var fromCoin = (_this5$_supportedCoin = _this5._supportedCoins.find(function (i) {
11313
+ return i.code === swap.coin_from && i.network === swap.coin_from_network;
11314
+ })) == null ? void 0 : _this5$_supportedCoin.coin;
11315
+ var toCoin = (_this5$_supportedCoin2 = _this5._supportedCoins.find(function (i) {
11316
+ return i.code === swap.coin_to && i.network === swap.coin_to_network;
11317
+ })) == null ? void 0 : _this5$_supportedCoin2.coin;
11318
+ if (!fromCoin || !toCoin) {
11319
+ return []; // We skip swaps with not supported coins for now
10870
11320
  }
10871
- }();
10872
- return _temp5 && _temp5.then ? _temp5.then(function () {
10873
- return result;
10874
- }) : result;
11321
+ var toUtcTimestamp = function toUtcTimestamp(timeStr) {
11322
+ return Date.parse(timeStr.match(/.+[Zz]$/) ? timeStr : timeStr + "Z");
11323
+ };
11324
+ var expiresAt = swap.expired_at ? swap.expired_at * 1000 : null;
11325
+ var createdAt = swap.created_at ? toUtcTimestamp("" + swap.created_at) : null;
11326
+ var isExpiredByTime = expiresAt && expiresAt < Date.now();
11327
+ var status = _this5._mapLetsExchangeStatusToRabbitStatus(swap.status, isExpiredByTime);
11328
+ var toDigits = status === SwapProvider.SWAP_STATUSES.REFUNDED ? fromCoin.digits : toCoin.digits;
11329
+ 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);
11330
+ }).flat();
11331
+ Logger.log("Swap details result " + safeStringify(swaps), loggerSource);
11332
+ return {
11333
+ result: true,
11334
+ swaps: swaps
11335
+ };
10875
11336
  });
10876
11337
  }, function (e) {
10877
- improveAndRethrow(e, "getExistingSwapsDetailsWithFiatAmounts");
11338
+ var _e$response4, _e$response5;
11339
+ Logger.logError(e, loggerSource, "Failed to get swap details. Error is: " + safeStringify(e));
11340
+ var composeFailResult = function composeFailResult(reason) {
11341
+ return {
11342
+ result: false,
11343
+ reason: reason
11344
+ };
11345
+ };
11346
+ var status = e == null || (_e$response4 = e.response) == null ? void 0 : _e$response4.status;
11347
+ var data = e == null || (_e$response5 = e.response) == null ? void 0 : _e$response5.data;
11348
+ if (status === 429) {
11349
+ Logger.log("Returning fail - RPS limit exceeded " + data, loggerSource);
11350
+ return composeFailResult(SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED);
11351
+ }
11352
+ improveAndRethrow(e, loggerSource);
10878
11353
  }));
10879
11354
  } catch (e) {
10880
11355
  return Promise.reject(e);
10881
11356
  }
11357
+ } // TODO: [dev] Serg, please check this during the review to make sure I did no mistakes in statuses mapping.
11358
+ // I will remove these comments after the review. https://api.letsexchange.io/doc
11359
+ // wait The exchange has just been created and it’s waiting for coins to reach the deposit wallet
11360
+ // confirmation The transaction appears in mempool and now it is waiting for necessary network confirmations to start.
11361
+ // confirmed The user’s payment is confirmed, the exchange process is about to start.
11362
+ // exchanging The exchange process is running.
11363
+ // sending Funds are being sent to the recipient`s address.
11364
+ // sending_confirmation The outgoing transaction is waiting for network confirmations.
11365
+ // success The exchange is completed and the funds are successfully sent to the recipient’s address.
11366
+ // aml_check_failed The deposit was marked as risky by AML check service.
11367
+ // overdue The deposit receiving time for this transaction has expired.
11368
+ // error The transaction has failed. In most cases, the amount that was sent differs from the amount that was specified when creating the transaction.
11369
+ // refund The exchange failed and the coins were refunded to the user's wallet.
11370
+ ;
11371
+ _proto._mapLetsExchangeStatusToRabbitStatus = function _mapLetsExchangeStatusToRabbitStatus(status, isExpiredByTime) {
11372
+ switch (status) {
11373
+ case "wait":
11374
+ if (isExpiredByTime) {
11375
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11376
+ }
11377
+ return SwapProvider.SWAP_STATUSES.WAITING_FOR_PAYMENT;
11378
+ case "confirmation":
11379
+ return SwapProvider.SWAP_STATUSES.CONFIRMING;
11380
+ case "confirmed":
11381
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11382
+ case "exchanging":
11383
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11384
+ case "sending":
11385
+ return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
11386
+ case "sending_confirmation":
11387
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11388
+ case "success":
11389
+ return SwapProvider.SWAP_STATUSES.COMPLETED;
11390
+ case "refund":
11391
+ return SwapProvider.SWAP_STATUSES.REFUNDED;
11392
+ case "overdue":
11393
+ return SwapProvider.SWAP_STATUSES.EXPIRED;
11394
+ case "aml_check_failed":
11395
+ return SwapProvider.SWAP_STATUSES.EXCHANGING;
11396
+ case "error":
11397
+ return SwapProvider.SWAP_STATUSES.FAILED;
11398
+ default:
11399
+ throw new Error("Unknown LetsExchange status: " + status);
11400
+ }
10882
11401
  };
10883
- return SwapUtils;
10884
- }();
11402
+ return LetsExchangeSwapProvider;
11403
+ }(SwapProvider);
11404
+ LetsExchangeSwapProvider.AFFILIATE_ID = "0zbj9hf7xg7jgdgv";
10885
11405
 
10886
11406
  function _catch(body, recover) {
10887
11407
  try {
@@ -10899,13 +11419,16 @@
10899
11419
  this._swapProvider = new SwapspaceSwapProvider(apiKeysProxyUrl, cache, function () {
10900
11420
  return null;
10901
11421
  }, false);
11422
+ this._fixedSwapProvider = new LetsExchangeSwapProvider(apiKeysProxyUrl, cache, function () {
11423
+ return null;
11424
+ }, false);
10902
11425
  }
10903
11426
  var _proto = PublicSwapService.prototype;
10904
11427
  _proto.initialize = function initialize() {
10905
11428
  try {
10906
11429
  var _this = this;
10907
11430
  var _temp = _catch(function () {
10908
- return Promise.resolve(_this._swapProvider.initialize()).then(function () {});
11431
+ return Promise.resolve(Promise.all([_this._swapProvider.initialize(), _this._fixedSwapProvider.initialize()])).then(function () {});
10909
11432
  }, function (e) {
10910
11433
  Logger.logError(e, "PublicSwapService.initialize");
10911
11434
  });
@@ -10913,39 +11436,61 @@
10913
11436
  } catch (e) {
10914
11437
  return Promise.reject(e);
10915
11438
  }
10916
- };
11439
+ }
11440
+ /**
11441
+ * Gets all currencies across all partners. Useful for sitemap or supported currencies count/list.
11442
+ *
11443
+ * @return {Promise<{result: boolean, coins: Coin[]}|{result: boolean, reason: string}>}
11444
+ */
11445
+ ;
10917
11446
  _proto.getAllSupportedCurrenciesListForPublicSwap = function getAllSupportedCurrenciesListForPublicSwap() {
10918
11447
  try {
10919
11448
  var _this2 = this;
10920
11449
  var loggerSource = "getAllSupportedCurrenciesListForPublicSwap";
10921
11450
  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();
11451
+ return Promise.resolve(_this2.initialize()).then(function () {
11452
+ return Promise.resolve(Promise.all([_this2._fixedSwapProvider.getAllSupportedCurrencies(), _this2._swapProvider.getAllSupportedCurrencies()])).then(function (result) {
11453
+ var _result$0$coins, _result$1$coins, _result$coins;
11454
+ var allCoins = [].concat((_result$0$coins = result[0].coins) != null ? _result$0$coins : []);
11455
+ ((_result$1$coins = result[1].coins) != null ? _result$1$coins : []).forEach(function (c) {
11456
+ if (!allCoins.find(function (existingCoin) {
11457
+ return existingCoin.ticker === c.ticker;
11458
+ })) {
11459
+ allCoins.push(c);
11460
+ }
11461
+ });
11462
+ if (result[0].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED || result[1].reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11463
+ SwapUtils.safeHandleRequestsLimitExceeding();
11464
+ // TODO: [dev] improve this during the whitebit integration. task_id=20e7e41211b540d081bf98f392a34b2c
11465
+ // return {
11466
+ // result: false,
11467
+ // reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
11468
+ // };
11469
+ } else if (result[0].reason || result[1].reason) {
11470
+ console.log("Failed to get all supported coins", result[0].reason, result[1].reason);
11471
+ }
11472
+ Logger.log("Retrieved " + (result == null || (_result$coins = result.coins) == null ? void 0 : _result$coins.length) + " supported currencies for swap", loggerSource);
10926
11473
  return {
10927
- result: false,
10928
- reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED
11474
+ result: true,
11475
+ coins: allCoins
10929
11476
  };
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
- };
11477
+ });
10936
11478
  });
10937
11479
  }, function (e) {
10938
- improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
11480
+ improveAndRethrow(e, "getAllSupportedCurrenciesListForPublicSwap");
10939
11481
  }));
10940
11482
  } catch (e) {
10941
11483
  return Promise.reject(e);
10942
11484
  }
10943
11485
  };
10944
- _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap() {
11486
+ _proto.getDepositCurrenciesListForPublicSwap = function getDepositCurrenciesListForPublicSwap(fixed) {
11487
+ if (fixed === void 0) {
11488
+ fixed = false;
11489
+ }
10945
11490
  try {
10946
11491
  var _this3 = this;
10947
11492
  return Promise.resolve(_catch(function () {
10948
- return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false));
11493
+ return Promise.resolve(_this3._getCurrenciesListForPublicSwap(false, fixed));
10949
11494
  }, function (e) {
10950
11495
  improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");
10951
11496
  }));
@@ -10953,11 +11498,14 @@
10953
11498
  return Promise.reject(e);
10954
11499
  }
10955
11500
  };
10956
- _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap() {
11501
+ _proto.getWithdrawCurrenciesListForPublicSwap = function getWithdrawCurrenciesListForPublicSwap(fixed) {
11502
+ if (fixed === void 0) {
11503
+ fixed = false;
11504
+ }
10957
11505
  try {
10958
11506
  var _this4 = this;
10959
11507
  return Promise.resolve(_catch(function () {
10960
- return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true));
11508
+ return Promise.resolve(_this4._getCurrenciesListForPublicSwap(true, fixed));
10961
11509
  }, function (e) {
10962
11510
  improveAndRethrow(e, "getWithdrawCurrenciesListForPublicSwap");
10963
11511
  }));
@@ -10965,15 +11513,19 @@
10965
11513
  return Promise.reject(e);
10966
11514
  }
10967
11515
  };
10968
- _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw) {
11516
+ _proto._getCurrenciesListForPublicSwap = function _getCurrenciesListForPublicSwap(withdraw, fixed) {
10969
11517
  if (withdraw === void 0) {
10970
11518
  withdraw = false;
10971
11519
  }
11520
+ if (fixed === void 0) {
11521
+ fixed = false;
11522
+ }
10972
11523
  try {
10973
11524
  var _this5 = this;
10974
11525
  var loggerSource = "getCurrenciesListForPublicSwap";
10975
11526
  return Promise.resolve(_catch(function () {
10976
- return Promise.resolve(withdraw ? _this5._swapProvider.getWithdrawalCurrencies() : _this5._swapProvider.getDepositCurrencies()).then(function (result) {
11527
+ var provider = fixed ? _this5._fixedSwapProvider : _this5._swapProvider;
11528
+ return Promise.resolve(withdraw ? provider.getWithdrawalCurrencies() : provider.getDepositCurrencies()).then(function (result) {
10977
11529
  var _result$coins2;
10978
11530
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
10979
11531
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -10998,6 +11550,9 @@
10998
11550
  /**
10999
11551
  * Retrieves initial data for swapping two coins.
11000
11552
  *
11553
+ * Always FLOATING rate, FIXED is not supported - if you want to change it the default rate - all
11554
+ * the swaps code logic should be verified to align with this change.
11555
+ *
11001
11556
  * @param fromCoin {Coin}
11002
11557
  * @param toCoin {Coin}
11003
11558
  * @return {Promise<{
@@ -11050,6 +11605,8 @@
11050
11605
  * @param fromAmountCoins {string}
11051
11606
  * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
11052
11607
  * @param [withoutFiat=false] {boolean} pass true if you don't need the fiat equivalent - this will diminish requests count
11608
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11609
+ * False means the amount is the sending amount.
11053
11610
  * @return {Promise<{
11054
11611
  * result: false,
11055
11612
  * reason: string,
@@ -11064,21 +11621,24 @@
11064
11621
  * }>}
11065
11622
  */
11066
11623
  ;
11067
- _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat) {
11624
+ _proto.getPublicSwapDetails = function getPublicSwapDetails(fromCoin, toCoin, fromAmountCoins, fixed, withoutFiat, amountIsToReceive) {
11068
11625
  if (fixed === void 0) {
11069
11626
  fixed = false;
11070
11627
  }
11071
11628
  if (withoutFiat === void 0) {
11072
11629
  withoutFiat = false;
11073
11630
  }
11631
+ if (amountIsToReceive === void 0) {
11632
+ amountIsToReceive = false;
11633
+ }
11074
11634
  try {
11075
11635
  var _this7 = this;
11076
11636
  var loggerSource = "getPublicSwapDetails";
11077
11637
  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) {
11638
+ function _temp2(_getCoinToUSDTRate) {
11639
+ var _getCoinToUSDTRate$ra;
11640
+ var coinUsdtRate = withoutFiat ? _getCoinToUSDTRate : (_getCoinToUSDTRate$ra = _getCoinToUSDTRate == null ? void 0 : _getCoinToUSDTRate.rate) != null ? _getCoinToUSDTRate$ra : null;
11641
+ return Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getSwapInfo(fromCoin, toCoin, fromAmountCoins, fixed, coinUsdtRate, amountIsToReceive)).then(function (details) {
11082
11642
  var _result$swapCreationI, _result$swapCreationI2;
11083
11643
  // eslint-disable-next-line no-console
11084
11644
  console.log("getSwapInfo result: ", details);
@@ -11139,7 +11699,10 @@
11139
11699
  return result;
11140
11700
  });
11141
11701
  }
11142
- return withoutFiat ? _temp2(null) : Promise.resolve(_this7._swapProvider.getCoinToUSDTRate(fromCoin)).then(_temp2);
11702
+ if (amountIsToReceive && !fixed) {
11703
+ throw new Error("Estimating allowed only for fixed rate.");
11704
+ }
11705
+ return withoutFiat ? _temp2(null) : Promise.resolve((fixed ? _this7._fixedSwapProvider : _this7._swapProvider).getCoinToUSDTRate(fromCoin)).then(_temp2);
11143
11706
  }, function (e) {
11144
11707
  improveAndRethrow(e, loggerSource);
11145
11708
  }));
@@ -11152,13 +11715,15 @@
11152
11715
  *
11153
11716
  * @param fromCoin {Coin}
11154
11717
  * @param toCoin {Coin}
11155
- * @param fromAmount {string}
11718
+ * @param amount {string}
11156
11719
  * @param swapCreationInfo {BaseSwapCreationInfo}
11157
11720
  * @param toAddress {string}
11158
11721
  * @param refundAddress {string}
11159
11722
  * @param clientIp {string}
11160
11723
  * @param [toCurrencyExtraId] {string}
11161
11724
  * @param [refundExtraId] {string}
11725
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount.
11726
+ * False means the amount is the sending amount.
11162
11727
  * @return {Promise<{
11163
11728
  * result: true,
11164
11729
  * fiatCurrencyCode: string,
@@ -11181,20 +11746,23 @@
11181
11746
  * }>}
11182
11747
  */
11183
11748
  ;
11184
- _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, fromAmount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId) {
11749
+ _proto.createPublicSwap = function createPublicSwap(fromCoin, toCoin, amount, swapCreationInfo, toAddress, refundAddress, clientIp, toCurrencyExtraId, refundExtraId, amountIsToReceive) {
11750
+ if (amountIsToReceive === void 0) {
11751
+ amountIsToReceive = false;
11752
+ }
11185
11753
  try {
11186
11754
  var _this8 = this;
11187
11755
  var loggerSource = "createPublicSwap";
11188
11756
  return Promise.resolve(_catch(function () {
11189
11757
  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);
11758
+ if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || typeof amount !== "string" || typeof toAddress !== "string" || swapCreationInfo.isRefundAddressRequired && (typeof refundAddress !== "string" || refundAddress.length === 0) || !(swapCreationInfo instanceof BaseSwapCreationInfo)) {
11759
+ throw new Error("Wrong input: " + fromCoin.ticker + " " + toCoin.ticker + " " + amount + " " + swapCreationInfo);
11192
11760
  }
11193
- Logger.log("Start: " + fromAmount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11761
+ Logger.log("Start: " + amount + " " + fromCoin.ticker + " -> " + toCoin.ticker + ". Details: " + safeStringify(_extends({}, swapCreationInfo, {
11194
11762
  fromCoin: swapCreationInfo == null || (_swapCreationInfo$fro = swapCreationInfo.fromCoin) == null ? void 0 : _swapCreationInfo$fro.ticker,
11195
11763
  toCoin: swapCreationInfo == null || (_swapCreationInfo$toC = swapCreationInfo.toCoin) == null ? void 0 : _swapCreationInfo$toC.ticker
11196
11764
  })), loggerSource);
11197
- return Promise.resolve(_this8._swapProvider.createSwap(fromCoin, toCoin, fromAmount, toAddress, refundAddress, swapCreationInfo.rawSwapData, clientIp, swapCreationInfo.fixed, toCurrencyExtraId, refundExtraId)).then(function (result) {
11765
+ 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
11766
  var _exit;
11199
11767
  function _temp6(_result8) {
11200
11768
  if (_exit) return _result8;
@@ -11224,7 +11792,7 @@
11224
11792
  if (result.result && result != null && result.swapId) {
11225
11793
  var _temp4 = function _temp4() {
11226
11794
  var _result$fromCurrencyE;
11227
- // TODO: feature, cirtical] add GA event. task_id=tbd
11795
+ // TODO: feature, cirtical] add GA event. task_id=091004f1b6b748b29ddece6a130df904
11228
11796
  EventBusInstance__default["default"].dispatch(PublicSwapService.PUBLIC_SWAP_CREATED_EVENT, null, fromCoin.ticker, toCoin.ticker, _fromAmountFiat);
11229
11797
  var toReturn = {
11230
11798
  result: true,
@@ -11304,7 +11872,7 @@
11304
11872
  var _this9 = this;
11305
11873
  var loggerSource = "getPublicExistingSwapDetailsAndStatus";
11306
11874
  return Promise.resolve(_catch(function () {
11307
- return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts(_this9._swapProvider, swapIds)).then(function (result) {
11875
+ return Promise.resolve(SwapUtils.getExistingSwapsDetailsWithFiatAmounts([_this9._swapProvider, _this9._fixedSwapProvider], swapIds)).then(function (result) {
11308
11876
  if (!(result != null && result.result)) {
11309
11877
  if (result.reason === SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED) {
11310
11878
  SwapUtils.safeHandleRequestsLimitExceeding();
@@ -11399,18 +11967,24 @@
11399
11967
 
11400
11968
  /**
11401
11969
  * @param coinOrTicker {Coin|string}
11970
+ * @param [isFixed=true] {boolean} rate type
11402
11971
  * @return {string} icon URL (ready to use)
11403
11972
  */;
11404
- _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker) {
11405
- return this._swapProvider.getIconUrl(coinOrTicker);
11973
+ _proto.getAssetIconUrl = function getAssetIconUrl(coinOrTicker, isFixed) {
11974
+ // TODO: [feature, high] improve this logic - currently hacked to show better icons from fixed provider. task_id=3b6b8c2a9df04a86aaff2e070424b64f
11975
+ return this._fixedSwapProvider.getIconUrl(coinOrTicker);
11406
11976
  }
11407
11977
 
11408
11978
  /**
11409
11979
  * @param ticker {string}
11980
+ * @param [fixed=false] {boolean}
11410
11981
  * @return {Coin|null}
11411
11982
  */;
11412
- _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker) {
11413
- return this._swapProvider.getCoinByTickerIfPresent(ticker);
11983
+ _proto.getCoinByTickerIfPresent = function getCoinByTickerIfPresent(ticker, fixed) {
11984
+ if (fixed === void 0) {
11985
+ fixed = false;
11986
+ }
11987
+ return !fixed ? this._swapProvider.getCoinByTickerIfPresent(ticker) : this._fixedSwapProvider.getCoinByTickerIfPresent(ticker);
11414
11988
  }
11415
11989
 
11416
11990
  /**
@@ -11423,8 +11997,18 @@
11423
11997
  var _this11 = this;
11424
11998
  return Promise.resolve(_catch(function () {
11425
11999
  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;
12000
+ function _temp10() {
12001
+ var _result$rate, _result13;
12002
+ return (_result$rate = (_result13 = result) == null ? void 0 : _result13.rate) != null ? _result$rate : null;
12003
+ }
12004
+ var _temp9 = function (_result14) {
12005
+ if (((_result14 = result) == null ? void 0 : _result14.rate) == null) {
12006
+ return Promise.resolve(_this11._fixedSwapProvider.getCoinToUSDTRate(asset)).then(function (_this11$_fixedSwapPro) {
12007
+ result = _this11$_fixedSwapPro;
12008
+ });
12009
+ }
12010
+ }();
12011
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
11428
12012
  });
11429
12013
  }, function (e) {
11430
12014
  improveAndRethrow(e, "getAssetToUsdtRate");
@@ -11436,12 +12020,16 @@
11436
12020
  /**
11437
12021
  * @param asset {Coin}
11438
12022
  * @param address {string}
12023
+ * @param [fixed=false] {boolean}
11439
12024
  * @return {boolean}
11440
12025
  */
11441
12026
  ;
11442
- _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address) {
12027
+ _proto.isAddressValidForAsset = function isAddressValidForAsset(asset, address, fixed) {
12028
+ if (fixed === void 0) {
12029
+ fixed = false;
12030
+ }
11443
12031
  try {
11444
- return this._swapProvider.isAddressValidForAsset(asset, address);
12032
+ return !fixed ? this._swapProvider.isAddressValidForAsset(asset, address) : this._fixedSwapProvider.isAddressValidForAsset(asset, address);
11445
12033
  } catch (e) {
11446
12034
  improveAndRethrow(e, "isAddressValidForAsset");
11447
12035
  }
@@ -11451,20 +12039,24 @@
11451
12039
  * Retrieves token by contract address.
11452
12040
  *
11453
12041
  * @param addressString {string}
12042
+ * @param [fixed=false] {boolean}
11454
12043
  * @return {Promise<Coin|null>}
11455
12044
  */;
11456
- _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString) {
12045
+ _proto.getTokenByContractAddress = function getTokenByContractAddress(addressString, fixed) {
12046
+ if (fixed === void 0) {
12047
+ fixed = false;
12048
+ }
11457
12049
  try {
11458
12050
  var _exit3;
11459
12051
  var _this12 = this;
11460
- var _temp10 = _catch(function () {
12052
+ var _temp12 = _catch(function () {
11461
12053
  if (!addressString) {
11462
- var _temp9 = null;
12054
+ var _temp11 = null;
11463
12055
  _exit3 = 1;
11464
- return _temp9;
12056
+ return _temp11;
11465
12057
  }
11466
12058
  var addressLowerCase = addressString.toLowerCase();
11467
- return Promise.resolve(_this12._swapProvider.getAllSupportedCurrencies()).then(function (allCoins) {
12059
+ return Promise.resolve((fixed ? _this12._fixedSwapProvider : _this12._swapProvider).getAllSupportedCurrencies()).then(function (allCoins) {
11468
12060
  if (allCoins.result) {
11469
12061
  var _allCoins$coins$find = allCoins.coins.find(function (coin) {
11470
12062
  return coin.tokenAddress && coin.tokenAddress.toLowerCase() === addressLowerCase;
@@ -11476,21 +12068,25 @@
11476
12068
  }, function (e) {
11477
12069
  Logger.logError(e, "getTokenByContractAddress");
11478
12070
  });
11479
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(function (_result13) {
11480
- return _exit3 ? _result13 : null;
11481
- }) : _exit3 ? _temp10 : null);
12071
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(function (_result15) {
12072
+ return _exit3 ? _result15 : null;
12073
+ }) : _exit3 ? _temp12 : null);
11482
12074
  } catch (e) {
11483
12075
  return Promise.reject(e);
11484
12076
  }
11485
12077
  }
11486
12078
  /**
11487
12079
  * @param asset {Coin}
12080
+ * @param [fixed=false] {boolean}
11488
12081
  * @return {string|null}
11489
12082
  */
11490
12083
  ;
11491
- _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset) {
12084
+ _proto.getExtraIdNameIfPresentForAsset = function getExtraIdNameIfPresentForAsset(asset, fixed) {
12085
+ if (fixed === void 0) {
12086
+ fixed = false;
12087
+ }
11492
12088
  try {
11493
- return this._swapProvider.getExtraIdNameIfPresent(asset);
12089
+ return (fixed ? this._fixedSwapProvider : this._swapProvider).getExtraIdNameIfPresent(asset);
11494
12090
  } catch (e) {
11495
12091
  improveAndRethrow(e, "getExtraIdNameIfPresentForAsset");
11496
12092
  }