@rabbitio/ui-kit 1.0.0-beta.8 → 1.0.0-beta.80

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 (398) hide show
  1. package/.gitlab-ci.yml +29 -0
  2. package/.husky/commit-msg +19 -0
  3. package/.husky/pre-push +1 -0
  4. package/CHANGELOG.md +0 -0
  5. package/README.md +27 -18
  6. package/coverage/base.css +224 -0
  7. package/coverage/block-navigation.js +87 -0
  8. package/coverage/clover.xml +16372 -0
  9. package/coverage/coverage-final.json +154 -0
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +1151 -0
  12. package/coverage/prettify.css +1 -0
  13. package/coverage/prettify.js +2 -0
  14. package/coverage/sort-arrow-sprite.png +0 -0
  15. package/coverage/sorter.js +196 -0
  16. package/coverage/ui-kit/index.html +116 -0
  17. package/coverage/ui-kit/index.js.html +88 -0
  18. package/coverage/ui-kit/src/common-apis/adapters/axiosAdapter.js.html +190 -0
  19. package/coverage/ui-kit/src/common-apis/adapters/index.html +131 -0
  20. package/coverage/ui-kit/src/common-apis/adapters/qrUtils.js.html +139 -0
  21. package/coverage/ui-kit/src/common-apis/amountUtils.js.html +1162 -0
  22. package/coverage/ui-kit/src/common-apis/errorUtils.js.html +211 -0
  23. package/coverage/ui-kit/src/common-apis/external-apis/apiGroups.js.html +250 -0
  24. package/coverage/ui-kit/src/common-apis/external-apis/index.html +131 -0
  25. package/coverage/ui-kit/src/common-apis/external-apis/ipAddressProviders.js.html +352 -0
  26. package/coverage/ui-kit/src/common-apis/fiatCurrenciesService.js.html +544 -0
  27. package/coverage/ui-kit/src/common-apis/globalConstants.jsx.html +94 -0
  28. package/coverage/ui-kit/src/common-apis/index.html +161 -0
  29. package/coverage/ui-kit/src/common-apis/models/blockchain.js.html +115 -0
  30. package/coverage/ui-kit/src/common-apis/models/coin.js.html +544 -0
  31. package/coverage/ui-kit/src/common-apis/models/index.html +146 -0
  32. package/coverage/ui-kit/src/common-apis/models/protocol.js.html +100 -0
  33. package/coverage/ui-kit/src/common-apis/utils/cache.js.html +811 -0
  34. package/coverage/ui-kit/src/common-apis/utils/emailAPI.js.html +133 -0
  35. package/coverage/ui-kit/src/common-apis/utils/index.html +161 -0
  36. package/coverage/ui-kit/src/common-apis/utils/logging/index.html +131 -0
  37. package/coverage/ui-kit/src/common-apis/utils/logging/logger.js.html +208 -0
  38. package/coverage/ui-kit/src/common-apis/utils/logging/logsStorage.js.html +268 -0
  39. package/coverage/ui-kit/src/common-apis/utils/postponeExecution.js.html +118 -0
  40. package/coverage/ui-kit/src/common-apis/utils/safeStringify.js.html +235 -0
  41. package/coverage/ui-kit/src/index.html +116 -0
  42. package/coverage/ui-kit/src/index.js.html +337 -0
  43. package/coverage/ui-kit/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js.html +1570 -0
  44. package/coverage/ui-kit/src/robust-api-caller/cachedRobustExternalApiCallerService.js.html +526 -0
  45. package/coverage/ui-kit/src/robust-api-caller/cancelProcessing.js.html +172 -0
  46. package/coverage/ui-kit/src/robust-api-caller/concurrentCalculationsMetadataHolder.js.html +310 -0
  47. package/coverage/ui-kit/src/robust-api-caller/externalApiProvider.js.html +553 -0
  48. package/coverage/ui-kit/src/robust-api-caller/externalServicesStatsCollector.js.html +319 -0
  49. package/coverage/ui-kit/src/robust-api-caller/index.html +206 -0
  50. package/coverage/ui-kit/src/robust-api-caller/robustExternalAPICallerService.js.html +997 -0
  51. package/coverage/ui-kit/src/swaps-lib/external-apis/index.html +146 -0
  52. package/coverage/ui-kit/src/swaps-lib/external-apis/letsExchangeSwapProvider.js.html +1513 -0
  53. package/coverage/ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +1558 -0
  54. package/coverage/ui-kit/src/swaps-lib/external-apis/swapspaceSwapProvider.js.html +1735 -0
  55. package/coverage/ui-kit/src/swaps-lib/models/baseSwapCreationInfo.js.html +223 -0
  56. package/coverage/ui-kit/src/swaps-lib/models/existingSwap.js.html +304 -0
  57. package/coverage/ui-kit/src/swaps-lib/models/existingSwapWithFiatData.js.html +469 -0
  58. package/coverage/ui-kit/src/swaps-lib/models/index.html +146 -0
  59. package/coverage/ui-kit/src/swaps-lib/services/index.html +116 -0
  60. package/coverage/ui-kit/src/swaps-lib/services/publicSwapService.js.html +2098 -0
  61. package/coverage/ui-kit/src/swaps-lib/utils/index.html +116 -0
  62. package/coverage/ui-kit/src/swaps-lib/utils/swapUtils.js.html +670 -0
  63. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/arrowIcon.jsx.html +124 -0
  64. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/arrowTosca.jsx.html +127 -0
  65. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/arrowWhite.jsx.html +127 -0
  66. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/darkRectangle.jsx.html +106 -0
  67. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/determinedError.jsx.html +439 -0
  68. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx.html +202 -0
  69. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/index.html +251 -0
  70. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/infoIcon.jsx.html +133 -0
  71. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx.html +247 -0
  72. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx.html +163 -0
  73. package/coverage/ui-kit/src/ui-kit/assets/wrappedImages/walletIcon.jsx.html +151 -0
  74. package/coverage/ui-kit/src/ui-kit/components/atoms/AssetIcon/AssetIcon.jsx.html +256 -0
  75. package/coverage/ui-kit/src/ui-kit/components/atoms/AssetIcon/index.html +116 -0
  76. package/coverage/ui-kit/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx.html +289 -0
  77. package/coverage/ui-kit/src/ui-kit/components/atoms/AssetSelection/index.html +116 -0
  78. package/coverage/ui-kit/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx.html +187 -0
  79. package/coverage/ui-kit/src/ui-kit/components/atoms/BackgroundTitle/index.html +116 -0
  80. package/coverage/ui-kit/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx.html +238 -0
  81. package/coverage/ui-kit/src/ui-kit/components/atoms/InformationMessage/index.html +116 -0
  82. package/coverage/ui-kit/src/ui-kit/components/atoms/Input/Input.jsx.html +634 -0
  83. package/coverage/ui-kit/src/ui-kit/components/atoms/Input/index.html +116 -0
  84. package/coverage/ui-kit/src/ui-kit/components/atoms/LoadingDots/LoadingDots.jsx.html +196 -0
  85. package/coverage/ui-kit/src/ui-kit/components/atoms/LoadingDots/index.html +116 -0
  86. package/coverage/ui-kit/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx.html +277 -0
  87. package/coverage/ui-kit/src/ui-kit/components/atoms/NoticeIcon/index.html +116 -0
  88. package/coverage/ui-kit/src/ui-kit/components/atoms/QrCode/QrCode.jsx.html +235 -0
  89. package/coverage/ui-kit/src/ui-kit/components/atoms/QrCode/index.html +116 -0
  90. package/coverage/ui-kit/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx.html +175 -0
  91. package/coverage/ui-kit/src/ui-kit/components/atoms/RateSelector/index.html +116 -0
  92. package/coverage/ui-kit/src/ui-kit/components/atoms/SupportChat/SupportChat.jsx.html +217 -0
  93. package/coverage/ui-kit/src/ui-kit/components/atoms/SupportChat/index.html +116 -0
  94. package/coverage/ui-kit/src/ui-kit/components/atoms/Textarea/Textarea.jsx.html +529 -0
  95. package/coverage/ui-kit/src/ui-kit/components/atoms/Textarea/index.html +116 -0
  96. package/coverage/ui-kit/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx.html +508 -0
  97. package/coverage/ui-kit/src/ui-kit/components/atoms/TitleBox/index.html +116 -0
  98. package/coverage/ui-kit/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx.html +316 -0
  99. package/coverage/ui-kit/src/ui-kit/components/atoms/Tooltip/index.html +116 -0
  100. package/coverage/ui-kit/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx.html +313 -0
  101. package/coverage/ui-kit/src/ui-kit/components/atoms/TwoLinesOfText/index.html +116 -0
  102. package/coverage/ui-kit/src/ui-kit/components/atoms/Validation/Validation.jsx.html +208 -0
  103. package/coverage/ui-kit/src/ui-kit/components/atoms/Validation/index.html +116 -0
  104. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/Button/Button.jsx.html +712 -0
  105. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/Button/index.html +116 -0
  106. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/Close/Close.jsx.html +259 -0
  107. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/Close/index.html +116 -0
  108. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx.html +421 -0
  109. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/LinkButton/index.html +116 -0
  110. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx.html +415 -0
  111. package/coverage/ui-kit/src/ui-kit/components/atoms/buttons/RadioButtonWithText/index.html +116 -0
  112. package/coverage/ui-kit/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx.html +1060 -0
  113. package/coverage/ui-kit/src/ui-kit/components/molecules/AmountInput/index.html +116 -0
  114. package/coverage/ui-kit/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx.html +1618 -0
  115. package/coverage/ui-kit/src/ui-kit/components/molecules/CoinPicker/index.html +116 -0
  116. package/coverage/ui-kit/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx.html +190 -0
  117. package/coverage/ui-kit/src/ui-kit/components/molecules/LineWithIconLink/index.html +116 -0
  118. package/coverage/ui-kit/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx.html +181 -0
  119. package/coverage/ui-kit/src/ui-kit/components/molecules/TitledLineWithIconLink/index.html +116 -0
  120. package/coverage/ui-kit/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx.html +283 -0
  121. package/coverage/ui-kit/src/ui-kit/components/organisms/CoinPickerDialogStep/index.html +116 -0
  122. package/coverage/ui-kit/src/ui-kit/components/organisms/Dialog/Dialog.jsx.html +1567 -0
  123. package/coverage/ui-kit/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx.html +451 -0
  124. package/coverage/ui-kit/src/ui-kit/components/organisms/Dialog/DialogButtons/index.html +116 -0
  125. package/coverage/ui-kit/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx.html +1699 -0
  126. package/coverage/ui-kit/src/ui-kit/components/organisms/Dialog/DialogStep/index.html +116 -0
  127. package/coverage/ui-kit/src/ui-kit/components/organisms/Dialog/index.html +116 -0
  128. package/coverage/ui-kit/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx.html +4075 -0
  129. package/coverage/ui-kit/src/ui-kit/components/organisms/SwapForm/index.html +116 -0
  130. package/coverage/ui-kit/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx.html +316 -0
  131. package/coverage/ui-kit/src/ui-kit/components/templates/DeterminedErrorDialogStep/index.html +116 -0
  132. package/coverage/ui-kit/src/ui-kit/hooks/index.html +146 -0
  133. package/coverage/ui-kit/src/ui-kit/hooks/useCallHandlingErrors.js.html +151 -0
  134. package/coverage/ui-kit/src/ui-kit/hooks/useIsHydrated.js.html +121 -0
  135. package/coverage/ui-kit/src/ui-kit/hooks/useReferredState.js.html +157 -0
  136. package/coverage/ui-kit/src/ui-kit/utils/index.html +161 -0
  137. package/coverage/ui-kit/src/ui-kit/utils/inputValueProviders.js.html +235 -0
  138. package/coverage/ui-kit/src/ui-kit/utils/textUtils.js.html +139 -0
  139. package/coverage/ui-kit/src/ui-kit/utils/uiUtils.js.html +121 -0
  140. package/coverage/ui-kit/src/ui-kit/utils/urlQueryUtils.js.html +271 -0
  141. package/coverage/ui-kit/stories/atoms/BackgroundTitle.stories.jsx.html +202 -0
  142. package/coverage/ui-kit/stories/atoms/LinesOfText.stories.jsx.html +283 -0
  143. package/coverage/ui-kit/stories/atoms/LoadingDots.stories.jsx.html +226 -0
  144. package/coverage/ui-kit/stories/atoms/QrCode.stories.jsx.html +175 -0
  145. package/coverage/ui-kit/stories/atoms/RateSelector.stories.jsx.html +136 -0
  146. package/coverage/ui-kit/stories/atoms/Validation.stories.jsx.html +178 -0
  147. package/coverage/ui-kit/stories/atoms/buttons/Button.stories.jsx.html +883 -0
  148. package/coverage/ui-kit/stories/atoms/buttons/Close.stories.jsx.html +211 -0
  149. package/coverage/ui-kit/stories/atoms/buttons/LinkButton.stories.jsx.html +301 -0
  150. package/coverage/ui-kit/stories/atoms/buttons/index.html +146 -0
  151. package/coverage/ui-kit/stories/atoms/index.html +191 -0
  152. package/coverage/ui-kit/stories/molecules/LineWithIconLink.stories.jsx.html +154 -0
  153. package/coverage/ui-kit/stories/molecules/TitledLineWithIconLink.stories.jsx.html +160 -0
  154. package/coverage/ui-kit/stories/molecules/index.html +131 -0
  155. package/coverage/ui-kit/stories/organisms/Dialog/Dialog.stories.jsx.html +523 -0
  156. package/coverage/ui-kit/stories/organisms/Dialog/DialogButtons/DialogButtons.stories.jsx.html +328 -0
  157. package/coverage/ui-kit/stories/organisms/Dialog/DialogButtons/index.html +116 -0
  158. package/coverage/ui-kit/stories/organisms/Dialog/DialogStep/DialogStep.stories.jsx.html +337 -0
  159. package/coverage/ui-kit/stories/organisms/Dialog/DialogStep/index.html +116 -0
  160. package/coverage/ui-kit/stories/organisms/Dialog/index.html +116 -0
  161. package/coverage/ui-kit/stories/stubs/exampleContent.jsx.html +145 -0
  162. package/coverage/ui-kit/stories/stubs/index.html +116 -0
  163. package/coverage/ui-kit/stories/templates/DeterminedErrorDialogStep.stories.jsx.html +190 -0
  164. package/coverage/ui-kit/stories/templates/index.html +116 -0
  165. package/coverage/ui-kit/storybook-static/138.56b7edc4.iframe.bundle.js.html +85 -0
  166. package/coverage/ui-kit/storybook-static/312.6f62bbd9.iframe.bundle.js.html +85 -0
  167. package/coverage/ui-kit/storybook-static/341.57a15f57.iframe.bundle.js.html +85 -0
  168. package/coverage/ui-kit/storybook-static/595.2e40d981.iframe.bundle.js.html +85 -0
  169. package/coverage/ui-kit/storybook-static/607.3ea32459.iframe.bundle.js.html +85 -0
  170. package/coverage/ui-kit/storybook-static/609.949af3f6.iframe.bundle.js.html +85 -0
  171. package/coverage/ui-kit/storybook-static/693.1acf0184.iframe.bundle.js.html +85 -0
  172. package/coverage/ui-kit/storybook-static/797.c87cdf19.iframe.bundle.js.html +85 -0
  173. package/coverage/ui-kit/storybook-static/862.c15e3c9c.iframe.bundle.js.html +85 -0
  174. package/coverage/ui-kit/storybook-static/87.0a1bfeb1.iframe.bundle.js.html +85 -0
  175. package/coverage/ui-kit/storybook-static/893.e21210d8.iframe.bundle.js.html +85 -0
  176. package/coverage/ui-kit/storybook-static/996.10688684.iframe.bundle.js.html +85 -0
  177. package/coverage/ui-kit/storybook-static/atoms-BackgroundTitle-stories.1a5386a1.iframe.bundle.js.html +85 -0
  178. package/coverage/ui-kit/storybook-static/atoms-LinesOfText-stories.7043a48b.iframe.bundle.js.html +85 -0
  179. package/coverage/ui-kit/storybook-static/atoms-LoadingDots-stories.662d6a83.iframe.bundle.js.html +85 -0
  180. package/coverage/ui-kit/storybook-static/atoms-QrCode-stories.e10363b6.iframe.bundle.js.html +85 -0
  181. package/coverage/ui-kit/storybook-static/atoms-RateSelector-stories.da7b9f1f.iframe.bundle.js.html +85 -0
  182. package/coverage/ui-kit/storybook-static/atoms-Validation-stories.d561b311.iframe.bundle.js.html +85 -0
  183. package/coverage/ui-kit/storybook-static/atoms-buttons-Button-stories.d336c1a5.iframe.bundle.js.html +85 -0
  184. package/coverage/ui-kit/storybook-static/atoms-buttons-Close-stories.0a902a7c.iframe.bundle.js.html +85 -0
  185. package/coverage/ui-kit/storybook-static/atoms-buttons-LinkButton-stories.ca93ab6b.iframe.bundle.js.html +85 -0
  186. package/coverage/ui-kit/storybook-static/index.html +536 -0
  187. package/coverage/ui-kit/storybook-static/main.75ff1c31.iframe.bundle.js.html +85 -0
  188. package/coverage/ui-kit/storybook-static/molecules-LineWithIconLink-stories.2d2d5753.iframe.bundle.js.html +85 -0
  189. package/coverage/ui-kit/storybook-static/molecules-TitledLineWithIconLink-stories.1383fe3f.iframe.bundle.js.html +85 -0
  190. package/coverage/ui-kit/storybook-static/organisms-Dialog-Dialog-stories.4e6da717.iframe.bundle.js.html +85 -0
  191. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogButtons-DialogButtons-stories.b79c32a3.iframe.bundle.js.html +85 -0
  192. package/coverage/ui-kit/storybook-static/organisms-Dialog-DialogStep-DialogStep-stories.74896048.iframe.bundle.js.html +85 -0
  193. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/index.html +116 -0
  194. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/addon-backgrounds/dist/preview.js.html +118 -0
  195. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/formatter-SWP5E3XI.mjs.html +118 -0
  196. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/@storybook/components/dist/index.html +116 -0
  197. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.html +116 -0
  198. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/buffer/index.js.html +118 -0
  199. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.html +116 -0
  200. package/coverage/ui-kit/storybook-static/rabbitio/ui-kit/node_modules/markdown-to-jsx/dist/index.modern.js.html +118 -0
  201. package/coverage/ui-kit/storybook-static/runtime~main.b108a22d.iframe.bundle.js.html +85 -0
  202. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/index.html +116 -0
  203. package/coverage/ui-kit/storybook-static/sb-addons/actions-9/manager-bundle.js.html +94 -0
  204. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/index.html +116 -0
  205. package/coverage/ui-kit/storybook-static/sb-addons/essentials-backgrounds-2/manager-bundle.js.html +121 -0
  206. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/index.html +116 -0
  207. package/coverage/ui-kit/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js.html +274 -0
  208. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/index.html +116 -0
  209. package/coverage/ui-kit/storybook-static/sb-addons/essentials-measure-4/manager-bundle.js.html +94 -0
  210. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/index.html +116 -0
  211. package/coverage/ui-kit/storybook-static/sb-addons/essentials-outline-5/manager-bundle.js.html +94 -0
  212. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/index.html +116 -0
  213. package/coverage/ui-kit/storybook-static/sb-addons/essentials-toolbars-3/manager-bundle.js.html +94 -0
  214. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/index.html +116 -0
  215. package/coverage/ui-kit/storybook-static/sb-addons/interactions-7/manager-bundle.js.html +121 -0
  216. package/coverage/ui-kit/storybook-static/sb-addons/links-0/index.html +116 -0
  217. package/coverage/ui-kit/storybook-static/sb-addons/links-0/manager-bundle.js.html +94 -0
  218. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/index.html +116 -0
  219. package/coverage/ui-kit/storybook-static/sb-addons/onboarding-6/manager-bundle.js.html +1588 -0
  220. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/index.html +116 -0
  221. package/coverage/ui-kit/storybook-static/sb-addons/viewport-8/manager-bundle.js.html +94 -0
  222. package/coverage/ui-kit/storybook-static/sb-manager/WithTooltip-V3YHNWJZ-LVYLGZW2.js.html +88 -0
  223. package/coverage/ui-kit/storybook-static/sb-manager/chunk-2IXBUOFS.js.html +106 -0
  224. package/coverage/ui-kit/storybook-static/sb-manager/chunk-INSKDKQB.js.html +1129 -0
  225. package/coverage/ui-kit/storybook-static/sb-manager/chunk-NGTUFCUO.js.html +112 -0
  226. package/coverage/ui-kit/storybook-static/sb-manager/chunk-UUEAOBSN.js.html +1303 -0
  227. package/coverage/ui-kit/storybook-static/sb-manager/chunk-ZEU7PDD3.js.html +88 -0
  228. package/coverage/ui-kit/storybook-static/sb-manager/formatter-SWP5E3XI-7BGIK6BL.js.html +553 -0
  229. package/coverage/ui-kit/storybook-static/sb-manager/globals-module-info.js.html +88 -0
  230. package/coverage/ui-kit/storybook-static/sb-manager/globals.js.html +88 -0
  231. package/coverage/ui-kit/storybook-static/sb-manager/index.html +281 -0
  232. package/coverage/ui-kit/storybook-static/sb-manager/index.js.html +88 -0
  233. package/coverage/ui-kit/storybook-static/sb-manager/runtime.js.html +88 -0
  234. package/coverage/ui-kit/storybook-static/sb-manager/syntaxhighlighter-V7JZZA35-DXZCI2WR.js.html +88 -0
  235. package/coverage/ui-kit/storybook-static/sb-preview/globals.js.html +88 -0
  236. package/coverage/ui-kit/storybook-static/sb-preview/index.html +131 -0
  237. package/coverage/ui-kit/storybook-static/sb-preview/runtime.js.html +421 -0
  238. package/coverage/ui-kit/storybook-static/templates-DeterminedErrorDialogStep-stories.3cc14214.iframe.bundle.js.html +85 -0
  239. package/dist/global.css +197 -0
  240. package/dist/global.css.map +1 -0
  241. package/dist/index.cjs +10864 -21
  242. package/dist/index.cjs.map +1 -1
  243. package/dist/index.css +2212 -8491
  244. package/dist/index.css.map +1 -1
  245. package/dist/index.modern.js +8354 -22
  246. package/dist/index.modern.js.map +1 -1
  247. package/dist/index.module.js +10784 -23
  248. package/dist/index.module.js.map +1 -1
  249. package/dist/index.umd.js +10855 -25
  250. package/dist/index.umd.js.map +1 -1
  251. package/index.js +1 -1
  252. package/package.json +36 -9
  253. package/src/common-apis/adapters/axiosAdapter.js +35 -0
  254. package/src/common-apis/adapters/qrUtils.js +18 -0
  255. package/src/common-apis/amountUtils.js +359 -0
  256. package/src/common-apis/errorUtils.js +42 -0
  257. package/src/common-apis/external-apis/apiGroups.js +55 -0
  258. package/src/common-apis/external-apis/ipAddressProviders.js +89 -0
  259. package/src/common-apis/fiatCurrenciesService.js +153 -0
  260. package/src/common-apis/globalConstants.jsx +3 -0
  261. package/src/common-apis/models/blockchain.js +10 -0
  262. package/src/common-apis/models/coin.js +153 -0
  263. package/src/common-apis/models/protocol.js +5 -0
  264. package/src/common-apis/tests/amountUtils/composeRateText.test.js +152 -0
  265. package/src/common-apis/tests/integration/external-apis/ipAddressProviders/getClientIpAddress.test.js +12 -0
  266. package/src/common-apis/utils/cache.js +242 -0
  267. package/src/common-apis/utils/emailAPI.js +16 -0
  268. package/src/common-apis/utils/logging/logger.js +41 -0
  269. package/src/common-apis/utils/logging/logsStorage.js +61 -0
  270. package/src/common-apis/utils/postponeExecution.js +11 -0
  271. package/src/common-apis/utils/safeStringify.js +50 -0
  272. package/src/index.js +84 -0
  273. package/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js +495 -0
  274. package/src/robust-api-caller/cachedRobustExternalApiCallerService.js +147 -0
  275. package/src/robust-api-caller/cancelProcessing.js +29 -0
  276. package/src/robust-api-caller/concurrentCalculationsMetadataHolder.js +75 -0
  277. package/src/robust-api-caller/externalApiProvider.js +156 -0
  278. package/src/robust-api-caller/externalServicesStatsCollector.js +78 -0
  279. package/src/robust-api-caller/robustExternalAPICallerService.js +304 -0
  280. package/src/robust-api-caller/tests/robustExternalAPICallerService/robustExternalAPICallerService/callExternalAPI/_performCallAttempt.test.js +533 -0
  281. package/src/robust-api-caller/tests/robustExternalAPICallerService/robustExternalAPICallerService/callExternalAPI/callExternalAPI.test.js +532 -0
  282. package/src/robust-api-caller/tests/robustExternalAPICallerService/robustExternalAPICallerService/constructor.test.js +19 -0
  283. package/src/swaps-lib/external-apis/letsExchangeSwapProvider.js +476 -0
  284. package/src/swaps-lib/external-apis/swapProvider.js +491 -0
  285. package/src/swaps-lib/external-apis/swapspaceSwapProvider.js +550 -0
  286. package/src/swaps-lib/models/baseSwapCreationInfo.js +46 -0
  287. package/src/swaps-lib/models/existingSwap.js +73 -0
  288. package/src/swaps-lib/models/existingSwapWithFiatData.js +128 -0
  289. package/src/swaps-lib/services/publicSwapService.js +671 -0
  290. package/src/swaps-lib/test/external-apis/swapProvider/getAllSupportedCurrencies.test.js +63 -0
  291. package/src/swaps-lib/test/external-apis/swapProvider/getDepositCurrencies.test.js +73 -0
  292. package/src/swaps-lib/test/external-apis/swapProvider/getWithdrawalCurrencies.test.js +102 -0
  293. package/src/swaps-lib/test/external-apis/swapProvider/removeProtocolNameFromCoinName.test.js +152 -0
  294. package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +538 -0
  295. package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/createSwap.test.js +1249 -0
  296. package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/getSwapInfo.test.js +1700 -0
  297. package/src/swaps-lib/test/utils/swapUtils/safeHandleRequestsLimitExceeding.test.js +80 -0
  298. package/src/swaps-lib/utils/swapUtils.js +195 -0
  299. package/{styles → src/ui-kit/assets/styles}/_functions.scss +5 -0
  300. package/{styles → src/ui-kit/assets/styles}/_mixins.scss +2 -2
  301. package/{styles → src/ui-kit/assets/styles}/_placeholder.scss +3 -3
  302. package/{styles → src/ui-kit/assets/styles}/_variables.scss +17 -15
  303. package/src/ui-kit/assets/styles/fonts/NunitoSans-Bold.ttf +0 -0
  304. package/src/ui-kit/assets/styles/fonts/NunitoSans-ExtraBold.ttf +0 -0
  305. package/src/ui-kit/assets/styles/fonts/NunitoSans-Light.ttf +0 -0
  306. package/src/ui-kit/assets/styles/fonts/NunitoSans-Regular.ttf +0 -0
  307. package/src/ui-kit/assets/styles/fonts/NunitoSans-SemiBold.ttf +0 -0
  308. package/src/ui-kit/assets/styles/global.scss +165 -0
  309. package/src/ui-kit/assets/styles/index.scss +10 -0
  310. package/src/ui-kit/assets/wrappedImages/arrowIcon.jsx +13 -0
  311. package/src/ui-kit/assets/wrappedImages/arrowTosca.jsx +14 -0
  312. package/src/ui-kit/assets/wrappedImages/arrowWhite.jsx +14 -0
  313. package/src/ui-kit/assets/wrappedImages/darkRectangle.jsx +7 -0
  314. package/src/ui-kit/assets/wrappedImages/determinedError.jsx +118 -0
  315. package/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx +39 -0
  316. package/src/ui-kit/assets/wrappedImages/infoIcon.jsx +16 -0
  317. package/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx +54 -0
  318. package/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx +26 -0
  319. package/src/ui-kit/assets/wrappedImages/walletIcon.jsx +22 -0
  320. package/src/ui-kit/components/atoms/AssetIcon/AssetIcon.jsx +57 -0
  321. package/{stories → src/ui-kit/components}/atoms/AssetIcon/asset-icon.module.scss +1 -1
  322. package/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx +68 -0
  323. package/src/ui-kit/components/atoms/AssetSelection/asset-selection.module.scss +56 -0
  324. package/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx +34 -0
  325. package/src/ui-kit/components/atoms/BackgroundTitle/background-title.module.scss +52 -0
  326. package/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx +51 -0
  327. package/src/ui-kit/components/atoms/InformationMessage/information-message.module.scss +38 -0
  328. package/src/ui-kit/components/atoms/Input/Input.jsx +183 -0
  329. package/src/ui-kit/components/atoms/Input/input.module.scss +107 -0
  330. package/{stories → src/ui-kit/components}/atoms/LoadingDots/LoadingDots.jsx +8 -28
  331. package/{stories → src/ui-kit/components}/atoms/LoadingDots/LoadingDots.module.scss +3 -2
  332. package/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx +64 -0
  333. package/src/ui-kit/components/atoms/NoticeIcon/notice-icon.module.scss +14 -0
  334. package/src/ui-kit/components/atoms/QrCode/QrCode.jsx +50 -0
  335. package/src/ui-kit/components/atoms/QrCode/qr-code.module.scss +15 -0
  336. package/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx +30 -0
  337. package/src/ui-kit/components/atoms/RateSelector/rate-selector.module.scss +47 -0
  338. package/{stories → src/ui-kit/components}/atoms/SupportChat/SupportChat.jsx +5 -1
  339. package/src/ui-kit/components/atoms/Textarea/Textarea.jsx +148 -0
  340. package/src/ui-kit/components/atoms/Textarea/textarea.module.scss +71 -0
  341. package/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx +141 -0
  342. package/src/ui-kit/components/atoms/TitleBox/title-box.module.scss +32 -0
  343. package/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx +77 -0
  344. package/src/ui-kit/components/atoms/Tooltip/tooltip.module.scss +237 -0
  345. package/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx +76 -0
  346. package/src/ui-kit/components/atoms/TwoLinesOfText/lines-of-text.module.scss +65 -0
  347. package/src/ui-kit/components/atoms/Validation/Validation.jsx +41 -0
  348. package/src/ui-kit/components/atoms/Validation/validation.module.scss +15 -0
  349. package/{stories → src/ui-kit/components}/atoms/buttons/Button/Button.jsx +24 -50
  350. package/{stories → src/ui-kit/components}/atoms/buttons/Button/Button.module.scss +1 -1
  351. package/src/ui-kit/components/atoms/buttons/Close/Close.jsx +58 -0
  352. package/src/ui-kit/components/atoms/buttons/Close/close.module.scss +75 -0
  353. package/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx +112 -0
  354. package/src/ui-kit/components/atoms/buttons/LinkButton/link-button.module.scss +49 -0
  355. package/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx +110 -0
  356. package/src/ui-kit/components/atoms/buttons/RadioButtonWithText/radio-button-with-text.module.scss +86 -0
  357. package/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx +325 -0
  358. package/src/ui-kit/components/molecules/AmountInput/amount-input.module.scss +199 -0
  359. package/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx +511 -0
  360. package/src/ui-kit/components/molecules/CoinPicker/coin-picker.module.scss +207 -0
  361. package/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx +35 -0
  362. package/src/ui-kit/components/molecules/LineWithIconLink/line-with-icon-link.module.scss +25 -0
  363. package/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx +32 -0
  364. package/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx +66 -0
  365. package/src/ui-kit/components/organisms/Dialog/Dialog.jsx +494 -0
  366. package/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx +122 -0
  367. package/src/ui-kit/components/organisms/Dialog/DialogButtons/dialog-buttons.module.scss +25 -0
  368. package/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx +538 -0
  369. package/src/ui-kit/components/organisms/Dialog/DialogStep/dialog-step.module.scss +381 -0
  370. package/src/ui-kit/components/organisms/Dialog/dialog.module.scss +226 -0
  371. package/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx +1330 -0
  372. package/src/ui-kit/components/organisms/SwapForm/swap-form.module.scss +134 -0
  373. package/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx +77 -0
  374. package/src/ui-kit/hooks/useCallHandlingErrors.js +22 -0
  375. package/src/ui-kit/hooks/useIsHydrated.js +12 -0
  376. package/src/ui-kit/hooks/useReferredState.js +24 -0
  377. package/src/ui-kit/tests/utils/inputValueProviders/provideFormatOfFloatValueByInputString.test.js +132 -0
  378. package/src/ui-kit/tests/utils/urlQueryUtils/getQueryParameterValues.test.js +65 -0
  379. package/src/ui-kit/tests/utils/urlQueryUtils/saveQueryParameterAndValues.test.js +104 -0
  380. package/src/ui-kit/utils/inputValueProviders.js +50 -0
  381. package/src/ui-kit/utils/textUtils.js +18 -0
  382. package/src/ui-kit/utils/uiUtils.js +12 -0
  383. package/src/ui-kit/utils/urlQueryUtils.js +62 -0
  384. package/stories/stubs/exampleContent.jsx +20 -0
  385. package/stories/atoms/AssetIcon/AssetIcon.jsx +0 -55
  386. package/stories/index.js +0 -4
  387. package/styles/_global-classes.scss +0 -433
  388. package/styles/fonts/NunitoSans-Bold.ttf +0 -0
  389. package/styles/fonts/NunitoSans-ExtraBold.ttf +0 -0
  390. package/styles/fonts/NunitoSans-Light.ttf +0 -0
  391. package/styles/fonts/NunitoSans-Regular.ttf +0 -0
  392. package/styles/fonts/NunitoSans-SemiBold.ttf +0 -0
  393. package/styles/global-styles-index.scss +0 -74
  394. package/styles/index.scss +0 -33
  395. /package/{styles → src/ui-kit/assets/styles}/colors/_light-colors.scss +0 -0
  396. /package/{styles → src/ui-kit/assets/styles}/colors/_solid-colors.scss +0 -0
  397. /package/{styles → src/ui-kit/assets/styles}/size/_margin-size.scss +0 -0
  398. /package/{styles → src/ui-kit/assets/styles}/size/_padding-size.scss +0 -0
@@ -0,0 +1,491 @@
1
+ import { Logger } from "../../common-apis/utils/logging/logger.js";
2
+ import { improveAndRethrow } from "../../common-apis/errorUtils.js";
3
+ import { Coin } from "../../common-apis/models/coin.js";
4
+ import { FALLBACK_ASSET_ICON_URL } from "../../common-apis/globalConstants.jsx";
5
+ import { BigNumber } from "bignumber.js";
6
+
7
+ // TODO: [refactoring, moderate] extract structure of _supportedCoins into model class
8
+ export class SwapProvider {
9
+ constructor(cache, customCoinBuilder = (coin, network) => null, useRestrictedCoinsSet = true) {
10
+ this._supportedCoins = [];
11
+ this._maxRateDigits = 20;
12
+ this.useRestrictedCoinsSet = useRestrictedCoinsSet;
13
+ this._customCoinBuilder = customCoinBuilder;
14
+ this._cache = cache;
15
+ this.isAggregator = false;
16
+ }
17
+
18
+ static COMMON_ERRORS = {
19
+ REQUESTS_LIMIT_EXCEEDED: "requestsLimitExceeded",
20
+ };
21
+
22
+ static NO_SWAPS_REASONS = {
23
+ TOO_LOW: "tooLow",
24
+ TOO_HIGH: "tooHigh",
25
+ NOT_SUPPORTED: "notSupported",
26
+ NO_FIXED_BUT_HAVE_FLOATING: "noFixedButHaveFloating",
27
+ NO_FLOATING_BUT_HAVE_FIXED: "noFloatingButHaveFixed",
28
+ };
29
+
30
+ static CREATION_FAIL_REASONS = {
31
+ RETRIABLE_FAIL: "retriableFail",
32
+ };
33
+
34
+ static SWAP_STATUSES = {
35
+ WAITING_FOR_PAYMENT: "waiting_for_payment",
36
+ CONFIRMING: "confirming",
37
+ PAYMENT_RECEIVED: "payment_received",
38
+ EXCHANGING: "exchanging",
39
+ COMPLETED: "completed",
40
+ REFUNDED: "refunded",
41
+ EXPIRED: "expired",
42
+ FAILED: "failed",
43
+ };
44
+
45
+ /**
46
+ * @return {Promise<void>}
47
+ */
48
+ async initialize() {
49
+ await this._fetchSupportedCurrenciesIfNeeded();
50
+ }
51
+
52
+ /**
53
+ * @return {number} milliseconds TTL
54
+ */
55
+ getSwapCreationInfoTtlMs() {
56
+ throw new Error("Not implemented in base");
57
+ }
58
+
59
+ /**
60
+ * This method sort internal list putting popular (as provider thinks) coins to the top.
61
+ * 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.
62
+ * @private
63
+ */
64
+ _putPopularCoinsFirst() {
65
+ const popularCoinsList = [
66
+ "BTC",
67
+ "ETH",
68
+ "USDTERC20",
69
+ "USDTTRC20",
70
+ "USDCERC20",
71
+ "XRP",
72
+ "TON",
73
+ "XMR",
74
+ "TRX",
75
+ "DAIERC20",
76
+ "DOGE",
77
+ "BNB",
78
+ "PEPEERC20",
79
+ "NOTTON",
80
+ "SOL",
81
+ "DOT",
82
+ "LTC",
83
+ "SHIBERC20",
84
+ "AVAX",
85
+ "UNIERC20",
86
+ "LINKERC20",
87
+ "MATIC",
88
+ "BUSDBEP20",
89
+ "AAVEERC20",
90
+ "ATOM",
91
+ "RUNE",
92
+ "ADA",
93
+ ];
94
+
95
+ this._supportedCoins.sort((i1, i2) => {
96
+ const isInPopularList1 = popularCoinsList.includes(i1.coin.ticker);
97
+ const isInPopularList2 = popularCoinsList.includes(i2.coin.ticker);
98
+
99
+ // If both are in the popularCoinsList, sort by their index in the list
100
+ if (isInPopularList1 && isInPopularList2) {
101
+ const index1 = popularCoinsList.indexOf(i1.coin.ticker);
102
+ const index2 = popularCoinsList.indexOf(i2.coin.ticker);
103
+ return index1 - index2;
104
+ }
105
+
106
+ // Sort by whether the coin is in the popularCoinsList
107
+ if (isInPopularList1 && !isInPopularList2) return -1;
108
+ if (!isInPopularList1 && isInPopularList2) return 1;
109
+
110
+ // If both are not in the popularCoinsList, use the isPopular flag - partners can fill it
111
+ let p1 = i1.isPopular;
112
+ let p2 = i2.isPopular;
113
+ if (p1 !== p2) return p2 - p1;
114
+
115
+ // By default, sort by the coin ticker
116
+ return i1.coin.ticker.localeCompare(i2.coin.ticker);
117
+ });
118
+ }
119
+
120
+ /**
121
+ * Should fill _supportedCoins with array of coins.
122
+ * Coin construction rules:
123
+ * 1. ticker should be CODEPROTOCOL_CODE e.g. USDTERC20
124
+ * 2. name should not contain (PROTOCOL_CODE) or just PROTOCOL_CODe
125
+ * 3. protocol should be null for coins major for their blockchains like BTC, ETH
126
+ * 4. isPopular should be a number
127
+ *
128
+ * @return {Promise<void>}
129
+ * @private
130
+ */
131
+ async _fetchSupportedCurrenciesIfNeeded() {
132
+ throw new Error("Not implemented in base - _fetchSupportedCurrenciesIfNeeded");
133
+ }
134
+
135
+ /**
136
+ * Retrieves all currencies supported by this swap provider.
137
+ * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
138
+ *
139
+ * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
140
+ */
141
+ async getAllSupportedCurrencies() {
142
+ const loggerSource = "getAllSupportedCurrencies";
143
+ try {
144
+ await this._fetchSupportedCurrenciesIfNeeded();
145
+ Logger.log(`We have ${this._supportedCoins?.length} supported coins returning`, loggerSource);
146
+ return {
147
+ result: true,
148
+ coins: this._supportedCoins.map(item => item.coin),
149
+ };
150
+ } catch (e) {
151
+ if (e?.response?.status === 429) {
152
+ return {
153
+ result: false,
154
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
155
+ };
156
+ }
157
+ improveAndRethrow(e, loggerSource);
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Retrieves all deposit currencies supported by this swap provider.
163
+ * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
164
+ *
165
+ * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
166
+ */
167
+ async getDepositCurrencies() {
168
+ const loggerSource = "getDepositCurrencies";
169
+ try {
170
+ await this._fetchSupportedCurrenciesIfNeeded();
171
+ Logger.log(`We have ${this._supportedCoins?.length} supported coins, getting depositable`, loggerSource);
172
+ return {
173
+ result: true,
174
+ coins: this._supportedCoins.filter(item => item.deposit).map(item => item.coin),
175
+ };
176
+ } catch (e) {
177
+ if (e?.response?.status === 429) {
178
+ return {
179
+ result: false,
180
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
181
+ };
182
+ }
183
+ improveAndRethrow(e, loggerSource);
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Retrieves all withdrawable currencies supported by this swap provider.
189
+ * Returns one of SwapProvider.COMMON_ERRORS in case of processable fail.
190
+ *
191
+ * @param [exceptCurrency=null] {Coin|null}
192
+ * @return {Promise<({ result: true, coins: Coin[] }|{ result: false, reason: string })>}
193
+ */
194
+ async getWithdrawalCurrencies(exceptCurrency = null) {
195
+ const loggerSource = "getWithdrawalCurrencies";
196
+ try {
197
+ await this._fetchSupportedCurrenciesIfNeeded();
198
+ Logger.log(`We have ${this._supportedCoins?.length} supported coins, getting withdrawable`, loggerSource);
199
+ return {
200
+ result: true,
201
+ coins: this._supportedCoins
202
+ .filter(
203
+ item => item.withdrawal && (!exceptCurrency || item.coin?.ticker !== exceptCurrency?.ticker)
204
+ )
205
+ .map(item => item.coin),
206
+ };
207
+ } catch (e) {
208
+ if (e?.response?.status === 429) {
209
+ return {
210
+ result: false,
211
+ reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
212
+ };
213
+ }
214
+ improveAndRethrow(e, loggerSource);
215
+ }
216
+ }
217
+
218
+ /**
219
+ * Retrieves URL for coin icon or fallback if not found.
220
+ *
221
+ * @param coinOrTicker {Coin|string} coin or rabbit-format of coin ticker
222
+ * @return {string}
223
+ */
224
+ getIconUrl(coinOrTicker) {
225
+ const loggerSource = "getIconUrl";
226
+ try {
227
+ let coin = coinOrTicker;
228
+ if (!(coinOrTicker instanceof Coin)) {
229
+ coin = this._supportedCoins.find(i => i.coin.ticker === coinOrTicker)?.coin;
230
+ }
231
+ return (
232
+ this._supportedCoins.find(item => item.coin?.ticker === coin?.ticker)?.iconURL ??
233
+ FALLBACK_ASSET_ICON_URL
234
+ );
235
+ } catch (e) {
236
+ improveAndRethrow(e, loggerSource);
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Retrieves coin to USDT rate.
242
+ *
243
+ * @param coin {Coin}
244
+ * @return {{result: true, rate: string}|{result: false}}
245
+ */
246
+ async getCoinToUSDTRate(coin) {
247
+ const loggerSource = "getCoinToUSDTRate";
248
+ try {
249
+ if (!coin) return null;
250
+
251
+ await this._fetchSupportedCurrenciesIfNeeded();
252
+
253
+ // Using USDT TRC20 as usually fee in this network is smaller than ERC20 and this network is widely used for USDT
254
+ const usdtTrc20 = this._supportedCoins.find(i => i.coin.ticker === "USDTTRC20")?.coin;
255
+ if (!usdtTrc20) {
256
+ return { result: false };
257
+ }
258
+ const cached = this._cache.get("swapspace_usdt_rate_" + coin.ticker);
259
+ if (cached != null) {
260
+ return {
261
+ result: true,
262
+ rate: cached,
263
+ };
264
+ }
265
+
266
+ Logger.log("Loading USDT->coin rate as not found in cache:", coin?.ticker);
267
+ const result = await this.getSwapInfo(usdtTrc20, coin, "5000", false);
268
+ if (!result.result) {
269
+ return { result: false };
270
+ }
271
+
272
+ // This calculation is not precise as we cannot recognize the actual fee and network fee. Just approximate.
273
+ const standardSwapspaceFeeMultiplier = 1.004; // fee is usually 0.4%
274
+ const rate = BigNumber(1).div(BigNumber(result.rate).times(standardSwapspaceFeeMultiplier)).toString();
275
+ this._cache.put(
276
+ "swap_usdt_rate_" + coin.ticker,
277
+ rate,
278
+ 15 * 60000 // 15 minutes
279
+ );
280
+ return {
281
+ result: true,
282
+ rate: rate,
283
+ };
284
+ } catch (e) {
285
+ improveAndRethrow(e, loggerSource);
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Retrieves estimation for swapping giving coins amount.
291
+ * null min or max signals there is no corresponding limitation. undefined means that the limits were not retrieved.
292
+ * For fail result on of SwapProvider.NO_SWAPS_REASONS or SwapProvider.COMMON_ERRORS reasons will be returned.
293
+ *
294
+ * WARNING: MUST return NOT_SUPPORTED error code for any case when pair is not available/supported (Should not throw random errors for this case)
295
+ * @param fromCoin {Coin}
296
+ * @param toCoin {Coin}
297
+ * @param amountCoins {string}
298
+ * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter
299
+ * @param [fromCoinToUsdRate=null] pass if you want to increase the min amount returned
300
+ * by provider with some fixed "insurance" amount to cover min amount fluctuations.
301
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
302
+ * @return {Promise<({
303
+ * result: false,
304
+ * reason: string,
305
+ * smallestMin: (string|null|undefined),
306
+ * greatestMax: (string|null|undefined),
307
+ * }|{
308
+ * result: true,
309
+ * min: (string|null),
310
+ * max: (string|null),
311
+ * smallestMin: (string|null),
312
+ * greatestMax: (string|null),
313
+ * rate: (string|null),
314
+ * durationMinutesRange: string,
315
+ * fixed: boolean,
316
+ * isRefundAddressRequired: boolean,
317
+ * [rawSwapData]: Object
318
+ * })>}
319
+ */
320
+ async getSwapInfo(
321
+ fromCoin,
322
+ toCoin,
323
+ amountCoins,
324
+ fixed = false,
325
+ fromCoinToUsdRate = null,
326
+ amountIsToReceive = false
327
+ ) {
328
+ throw new Error("Not implemented in base");
329
+ }
330
+
331
+ /**
332
+ * For fail result we return one of SwapProvider.CREATION_FAIL_REASONS or SwapProvider.COMMON_ERRORS.*
333
+ *
334
+ * @param fromCoin {Coin}
335
+ * @param toCoin {Coin}
336
+ * @param amount {string}
337
+ * @param toAddress {string}
338
+ * @param refundAddress {string}
339
+ * @param rawSwapData {Object|null}
340
+ * @param clientIpAddress {string}
341
+ * @param fixed {boolean}
342
+ * @param [toCurrencyExtraId=""] {string} optional extra ID
343
+ * @param [refundExtraId=""] {string} optional extra ID for refund address
344
+ * @param [amountIsToReceive=false] {boolean} whether the given amount is receiving amount. False means the amount is the sending amount.
345
+ * @return {Promise<({
346
+ * result: true,
347
+ * swapId: string,
348
+ * fromCoin: Coin,
349
+ * fromAmount: string,
350
+ * fromAddress: string,
351
+ * toCoin: Coin,
352
+ * toAmount: string,
353
+ * toAddress: string,
354
+ * rate: string,
355
+ * fromCurrencyExtraId: string|undefined,
356
+ * fixed: boolean
357
+ * }|{
358
+ * result: false,
359
+ * reason: string,
360
+ * partner: string
361
+ * })>}
362
+ */
363
+ async createSwap(
364
+ fromCoin,
365
+ toCoin,
366
+ amount,
367
+ toAddress,
368
+ refundAddress,
369
+ rawSwapData,
370
+ clientIpAddress,
371
+ fixed,
372
+ toCurrencyExtraId = "",
373
+ refundExtraId = "",
374
+ amountIsToReceive = false
375
+ ) {
376
+ throw new Error("Not implemented in base");
377
+ }
378
+
379
+ /**
380
+ * Retrieves details and status for swaps by given ids.
381
+ * If some swap is not found by id then there is no item in return list.
382
+ *
383
+ * @param swapIds {string[]}
384
+ * @return {Promise<{result: false, reason: string}|{result:true, swaps: ExistingSwap[]}>}
385
+ */
386
+ async getExistingSwapsDetailsAndStatus(swapIds) {
387
+ throw new Error("Not implemented in base");
388
+ }
389
+
390
+ /**
391
+ * @param ticker {string}
392
+ * @return {Coin|null}
393
+ */
394
+ getCoinByTickerIfPresent(ticker) {
395
+ try {
396
+ const item = this._supportedCoins.find(i => i.coin.ticker === ticker);
397
+ return item?.coin ?? null;
398
+ } catch (e) {
399
+ improveAndRethrow(e, "getCoinByTickerIfPresent");
400
+ }
401
+ }
402
+
403
+ /**
404
+ * @param asset {Coin}
405
+ * @param address {string}
406
+ * @return {boolean}
407
+ */
408
+ isAddressValidForAsset(asset, address) {
409
+ try {
410
+ const assetData = this._supportedCoins.find(i => i.coin?.ticker === asset?.ticker);
411
+ if (assetData) {
412
+ let corrected = assetData.validationRegexp.trim();
413
+ corrected = corrected[0] === "/" ? corrected.slice(1) : corrected;
414
+ corrected =
415
+ corrected[corrected.length - 1] === "/" ? corrected.slice(0, corrected.length - 1) : corrected;
416
+ return address.match(corrected) != null;
417
+ }
418
+ } catch (e) {
419
+ Logger.logError(e, "isAddressValidForAsset");
420
+ }
421
+ return false;
422
+ }
423
+
424
+ /**
425
+ * @param asset {Coin}
426
+ * @return {string|null}
427
+ */
428
+ getExtraIdNameIfPresent(asset) {
429
+ try {
430
+ const assetData = this._supportedCoins.find(i => i.coin?.ticker === asset?.ticker);
431
+ if (assetData?.hasExtraId) {
432
+ if (assetData?.extraIdName == null || assetData?.extraIdName === "") {
433
+ // We return some default name if the extraIdName is empty
434
+ return "ID";
435
+ }
436
+ return assetData?.extraIdName;
437
+ }
438
+ return null;
439
+ } catch (e) {
440
+ improveAndRethrow(e, "getExtraIdNameIfPresent");
441
+ }
442
+ }
443
+
444
+ removeProtocolNameFromCoinName(coinName, tickerPrintable, protocolName) {
445
+ if (coinName) {
446
+ const originalName = coinName;
447
+ if (tickerPrintable) {
448
+ coinName = coinName.replaceAll(new RegExp(`\\(${tickerPrintable}\\)`, "gi"), "");
449
+ }
450
+ if (protocolName) {
451
+ coinName = coinName
452
+ .replaceAll(new RegExp(`\\(${protocolName}\\)`, "gi"), "")
453
+ .replaceAll(new RegExp(`^${protocolName} `, "gi"), "");
454
+ if (
455
+ !coinName.match(new RegExp(` on ${protocolName}$`, "gi")) &&
456
+ !coinName.match(new RegExp(` on ${protocolName} `, "gi"))
457
+ ) {
458
+ // Removing protocol name without braces only if there is no "on <protocol>" phrase in the coin name
459
+ coinName = coinName
460
+ .replaceAll(new RegExp(` ${protocolName}$`, "gi"), "")
461
+ .replaceAll(new RegExp(` ${protocolName} `, "gi"), " ");
462
+ }
463
+ }
464
+ coinName = coinName.replaceAll(/ +/g, " ").trim();
465
+
466
+ const defaultNames = [
467
+ "token",
468
+ "network",
469
+ "protocol",
470
+ "coin",
471
+ "mainnet",
472
+ "chain",
473
+ "project",
474
+ "cash",
475
+ "finance",
476
+ "wrapped",
477
+ "blockchain",
478
+ "network",
479
+ ];
480
+ const lowerCoinName = coinName.toLowerCase();
481
+ const isBecameDefaultName = defaultNames.find(
482
+ defName => lowerCoinName === defName || lowerCoinName === `the ${defName}`
483
+ );
484
+ if (coinName === "" || isBecameDefaultName) {
485
+ // Rolling back to original name if our processing leads in empty name or one of the default words
486
+ coinName = originalName;
487
+ }
488
+ }
489
+ return coinName;
490
+ }
491
+ }