@reown/appkit-core-react-native 0.0.0-feat-multi-social-20250715153550 → 0.0.0-feat-onramp-20250718191948

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 (194) hide show
  1. package/lib/commonjs/controllers/AccountController.js +17 -20
  2. package/lib/commonjs/controllers/AccountController.js.map +1 -1
  3. package/lib/commonjs/controllers/ApiController.js +15 -17
  4. package/lib/commonjs/controllers/ApiController.js.map +1 -1
  5. package/lib/commonjs/controllers/BlockchainApiController.js +28 -110
  6. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
  7. package/lib/commonjs/controllers/ConnectionController.js +11 -8
  8. package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
  9. package/lib/commonjs/controllers/ConnectorController.js +49 -0
  10. package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
  11. package/lib/commonjs/controllers/EnsController.js +4 -4
  12. package/lib/commonjs/controllers/EnsController.js.map +1 -1
  13. package/lib/commonjs/controllers/EventsController.js +4 -4
  14. package/lib/commonjs/controllers/EventsController.js.map +1 -1
  15. package/lib/commonjs/controllers/ModalController.js +2 -2
  16. package/lib/commonjs/controllers/ModalController.js.map +1 -1
  17. package/lib/commonjs/controllers/OnRampController.js +62 -21
  18. package/lib/commonjs/controllers/OnRampController.js.map +1 -1
  19. package/lib/commonjs/controllers/OptionsController.js +3 -8
  20. package/lib/commonjs/controllers/OptionsController.js.map +1 -1
  21. package/lib/commonjs/controllers/RouterController.js +22 -1
  22. package/lib/commonjs/controllers/RouterController.js.map +1 -1
  23. package/lib/commonjs/controllers/SendController.js +33 -34
  24. package/lib/commonjs/controllers/SendController.js.map +1 -1
  25. package/lib/commonjs/controllers/SnackController.js +5 -29
  26. package/lib/commonjs/controllers/SnackController.js.map +1 -1
  27. package/lib/commonjs/controllers/SwapController.js +148 -136
  28. package/lib/commonjs/controllers/SwapController.js.map +1 -1
  29. package/lib/commonjs/controllers/ThemeController.js +1 -9
  30. package/lib/commonjs/controllers/ThemeController.js.map +1 -1
  31. package/lib/commonjs/controllers/TransactionsController.js +21 -25
  32. package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
  33. package/lib/commonjs/controllers/WebviewController.js +52 -0
  34. package/lib/commonjs/controllers/WebviewController.js.map +1 -0
  35. package/lib/commonjs/index.js +24 -3
  36. package/lib/commonjs/index.js.map +1 -1
  37. package/lib/commonjs/utils/AssetUtil.js +12 -8
  38. package/lib/commonjs/utils/AssetUtil.js.map +1 -1
  39. package/lib/commonjs/utils/ConnectionUtil.js +33 -0
  40. package/lib/commonjs/utils/ConnectionUtil.js.map +1 -0
  41. package/lib/commonjs/utils/ConstantsUtil.js +8 -537
  42. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
  43. package/lib/commonjs/utils/CoreHelperUtil.js +4 -4
  44. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
  45. package/lib/commonjs/utils/FetchUtil.js +28 -9
  46. package/lib/commonjs/utils/FetchUtil.js.map +1 -1
  47. package/lib/commonjs/utils/NetworkUtil.js +46 -0
  48. package/lib/commonjs/utils/NetworkUtil.js.map +1 -0
  49. package/lib/commonjs/utils/StorageUtil.js +42 -51
  50. package/lib/commonjs/utils/StorageUtil.js.map +1 -1
  51. package/lib/commonjs/utils/SwapApiUtil.js +21 -15
  52. package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
  53. package/lib/module/controllers/AccountController.js +17 -20
  54. package/lib/module/controllers/AccountController.js.map +1 -1
  55. package/lib/module/controllers/ApiController.js +15 -16
  56. package/lib/module/controllers/ApiController.js.map +1 -1
  57. package/lib/module/controllers/BlockchainApiController.js +28 -110
  58. package/lib/module/controllers/BlockchainApiController.js.map +1 -1
  59. package/lib/module/controllers/ConnectionController.js +11 -8
  60. package/lib/module/controllers/ConnectionController.js.map +1 -1
  61. package/lib/module/controllers/ConnectorController.js +44 -0
  62. package/lib/module/controllers/ConnectorController.js.map +1 -0
  63. package/lib/module/controllers/EnsController.js +2 -2
  64. package/lib/module/controllers/EnsController.js.map +1 -1
  65. package/lib/module/controllers/EventsController.js +1 -1
  66. package/lib/module/controllers/EventsController.js.map +1 -1
  67. package/lib/module/controllers/ModalController.js +2 -2
  68. package/lib/module/controllers/ModalController.js.map +1 -1
  69. package/lib/module/controllers/OnRampController.js +62 -21
  70. package/lib/module/controllers/OnRampController.js.map +1 -1
  71. package/lib/module/controllers/OptionsController.js +3 -8
  72. package/lib/module/controllers/OptionsController.js.map +1 -1
  73. package/lib/module/controllers/RouterController.js +22 -1
  74. package/lib/module/controllers/RouterController.js.map +1 -1
  75. package/lib/module/controllers/SendController.js +30 -31
  76. package/lib/module/controllers/SendController.js.map +1 -1
  77. package/lib/module/controllers/SnackController.js +5 -29
  78. package/lib/module/controllers/SnackController.js.map +1 -1
  79. package/lib/module/controllers/SwapController.js +148 -136
  80. package/lib/module/controllers/SwapController.js.map +1 -1
  81. package/lib/module/controllers/ThemeController.js +1 -9
  82. package/lib/module/controllers/ThemeController.js.map +1 -1
  83. package/lib/module/controllers/TransactionsController.js +19 -23
  84. package/lib/module/controllers/TransactionsController.js.map +1 -1
  85. package/lib/module/controllers/WebviewController.js +47 -0
  86. package/lib/module/controllers/WebviewController.js.map +1 -0
  87. package/lib/module/index.js +4 -1
  88. package/lib/module/index.js.map +1 -1
  89. package/lib/module/utils/AssetUtil.js +12 -8
  90. package/lib/module/utils/AssetUtil.js.map +1 -1
  91. package/lib/module/utils/ConnectionUtil.js +27 -0
  92. package/lib/module/utils/ConnectionUtil.js.map +1 -0
  93. package/lib/module/utils/ConstantsUtil.js +8 -537
  94. package/lib/module/utils/ConstantsUtil.js.map +1 -1
  95. package/lib/module/utils/CoreHelperUtil.js +4 -4
  96. package/lib/module/utils/CoreHelperUtil.js.map +1 -1
  97. package/lib/module/utils/FetchUtil.js +28 -9
  98. package/lib/module/utils/FetchUtil.js.map +1 -1
  99. package/lib/module/utils/NetworkUtil.js +40 -0
  100. package/lib/module/utils/NetworkUtil.js.map +1 -0
  101. package/lib/module/utils/StorageUtil.js +42 -51
  102. package/lib/module/utils/StorageUtil.js.map +1 -1
  103. package/lib/module/utils/SwapApiUtil.js +21 -15
  104. package/lib/module/utils/SwapApiUtil.js.map +1 -1
  105. package/lib/typescript/controllers/AccountController.d.ts +4 -4
  106. package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
  107. package/lib/typescript/controllers/ApiController.d.ts +1 -1
  108. package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
  109. package/lib/typescript/controllers/BlockchainApiController.d.ts +4 -16
  110. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
  111. package/lib/typescript/controllers/ConnectionController.d.ts +11 -3
  112. package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
  113. package/lib/typescript/controllers/ConnectorController.d.ts +18 -0
  114. package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
  115. package/lib/typescript/controllers/ModalController.d.ts +1 -1
  116. package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
  117. package/lib/typescript/controllers/NetworkController.d.ts +1 -1
  118. package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
  119. package/lib/typescript/controllers/OnRampController.d.ts +3 -1
  120. package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
  121. package/lib/typescript/controllers/OptionsController.d.ts +2 -5
  122. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
  123. package/lib/typescript/controllers/PublicStateController.d.ts +1 -1
  124. package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -1
  125. package/lib/typescript/controllers/RouterController.d.ts +16 -4
  126. package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
  127. package/lib/typescript/controllers/SendController.d.ts.map +1 -1
  128. package/lib/typescript/controllers/SnackController.d.ts +3 -3
  129. package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
  130. package/lib/typescript/controllers/SwapController.d.ts +9 -9
  131. package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
  132. package/lib/typescript/controllers/ThemeController.d.ts +1 -1
  133. package/lib/typescript/controllers/ThemeController.d.ts.map +1 -1
  134. package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
  135. package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
  136. package/lib/typescript/controllers/WebviewController.d.ts +21 -0
  137. package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
  138. package/lib/typescript/index.d.ts +4 -1
  139. package/lib/typescript/index.d.ts.map +1 -1
  140. package/lib/typescript/utils/AssetUtil.d.ts +3 -3
  141. package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
  142. package/lib/typescript/utils/ConnectionUtil.d.ts +4 -0
  143. package/lib/typescript/utils/ConnectionUtil.d.ts.map +1 -0
  144. package/lib/typescript/utils/ConstantsUtil.d.ts +1 -421
  145. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
  146. package/lib/typescript/utils/CoreHelperUtil.d.ts +3 -3
  147. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
  148. package/lib/typescript/utils/FetchUtil.d.ts +1 -1
  149. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
  150. package/lib/typescript/utils/NetworkUtil.d.ts +8 -0
  151. package/lib/typescript/utils/NetworkUtil.d.ts.map +1 -0
  152. package/lib/typescript/utils/StorageUtil.d.ts +7 -14
  153. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
  154. package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
  155. package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
  156. package/lib/typescript/utils/TypeUtil.d.ts +173 -24
  157. package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
  158. package/package.json +4 -4
  159. package/src/controllers/AccountController.ts +27 -23
  160. package/src/controllers/ApiController.ts +9 -15
  161. package/src/controllers/BlockchainApiController.ts +31 -145
  162. package/src/controllers/ConnectionController.ts +24 -12
  163. package/src/controllers/ConnectorController.ts +63 -0
  164. package/src/controllers/EnsController.ts +2 -2
  165. package/src/controllers/EventsController.ts +1 -1
  166. package/src/controllers/ModalController.ts +3 -4
  167. package/src/controllers/NetworkController.ts +1 -1
  168. package/src/controllers/OnRampController.ts +93 -33
  169. package/src/controllers/OptionsController.ts +13 -14
  170. package/src/controllers/PublicStateController.ts +1 -1
  171. package/src/controllers/RouterController.ts +54 -5
  172. package/src/controllers/SendController.ts +30 -39
  173. package/src/controllers/SnackController.ts +5 -31
  174. package/src/controllers/SwapController.ts +178 -155
  175. package/src/controllers/ThemeController.ts +2 -11
  176. package/src/controllers/TransactionsController.ts +20 -26
  177. package/src/controllers/WebviewController.ts +63 -0
  178. package/src/index.ts +6 -3
  179. package/src/utils/AssetUtil.ts +14 -8
  180. package/src/utils/ConnectionUtil.ts +27 -0
  181. package/src/utils/ConstantsUtil.ts +8 -542
  182. package/src/utils/CoreHelperUtil.ts +7 -15
  183. package/src/utils/FetchUtil.ts +31 -10
  184. package/src/utils/NetworkUtil.ts +33 -0
  185. package/src/utils/StorageUtil.ts +48 -60
  186. package/src/utils/SwapApiUtil.ts +38 -27
  187. package/src/utils/TypeUtil.ts +173 -26
  188. package/lib/commonjs/controllers/ConnectionsController.js +0 -383
  189. package/lib/commonjs/controllers/ConnectionsController.js.map +0 -1
  190. package/lib/module/controllers/ConnectionsController.js +0 -378
  191. package/lib/module/controllers/ConnectionsController.js.map +0 -1
  192. package/lib/typescript/controllers/ConnectionsController.d.ts +0 -52
  193. package/lib/typescript/controllers/ConnectionsController.d.ts.map +0 -1
  194. package/src/controllers/ConnectionsController.ts +0 -503
@@ -11,47 +11,23 @@ const state = proxy({
11
11
  long: false
12
12
  });
13
13
 
14
- // -- Private Variables --------------------------------- //
15
- let hideTimeout = null;
16
-
17
- // -- Private Functions --------------------------------- //
18
- const clearHideTimeout = () => {
19
- if (hideTimeout) {
20
- clearTimeout(hideTimeout);
21
- hideTimeout = null;
22
- }
23
- };
24
- const scheduleAutoHide = long => {
25
- clearHideTimeout();
26
- const duration = long ? 15000 : 2200;
27
- hideTimeout = setTimeout(() => {
28
- SnackController.hide();
29
- }, duration);
30
- };
31
-
32
14
  // -- Controller ---------------------------------------- //
33
15
  export const SnackController = {
34
16
  state,
35
- showSuccess(message, long = false) {
17
+ showSuccess(message) {
36
18
  state.message = message;
37
19
  state.variant = 'success';
38
20
  state.open = true;
39
- state.long = long;
40
- scheduleAutoHide(long);
41
21
  },
42
- showError(message, long = false) {
22
+ showError(message) {
43
23
  state.message = message;
44
24
  state.variant = 'error';
45
25
  state.open = true;
46
- state.long = long;
47
- scheduleAutoHide(long);
48
26
  },
49
- showLoading(message, long = false) {
27
+ showLoading(message) {
50
28
  state.message = message;
51
29
  state.variant = 'loading';
52
30
  state.open = true;
53
- state.long = long;
54
- scheduleAutoHide(long);
55
31
  },
56
32
  showInternalError(error) {
57
33
  const {
@@ -62,7 +38,6 @@ export const SnackController = {
62
38
  state.variant = 'error';
63
39
  state.open = true;
64
40
  state.long = true;
65
- scheduleAutoHide(true);
66
41
  }
67
42
  if (error.longMessage) {
68
43
  // eslint-disable-next-line no-console
@@ -70,9 +45,10 @@ export const SnackController = {
70
45
  }
71
46
  },
72
47
  hide() {
73
- clearHideTimeout();
74
48
  state.open = false;
75
49
  state.long = false;
50
+ state.message = '';
51
+ state.variant = 'success';
76
52
  }
77
53
  };
78
54
  //# sourceMappingURL=SnackController.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["proxy","OptionsController","state","message","variant","open","long","hideTimeout","clearHideTimeout","clearTimeout","scheduleAutoHide","duration","setTimeout","SnackController","hide","showSuccess","showError","showLoading","showInternalError","error","debug","shortMessage","longMessage","console"],"sourceRoot":"../../../src","sources":["controllers/SnackController.ts"],"mappings":"AAAA,SAASA,KAAK,QAAQ,QAAQ;AAC9B,SAASC,iBAAiB,QAAQ,qBAAqB;;AAEvD;;AAaA;AACA,MAAMC,KAAK,GAAGF,KAAK,CAAuB;EACxCG,OAAO,EAAE,EAAE;EACXC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE,KAAK;EACXC,IAAI,EAAE;AACR,CAAC,CAAC;;AAEF;AACA,IAAIC,WAAkC,GAAG,IAAI;;AAE7C;AACA,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EAC7B,IAAID,WAAW,EAAE;IACfE,YAAY,CAACF,WAAW,CAAC;IACzBA,WAAW,GAAG,IAAI;EACpB;AACF,CAAC;AAED,MAAMG,gBAAgB,GAAIJ,IAAa,IAAK;EAC1CE,gBAAgB,CAAC,CAAC;EAElB,MAAMG,QAAQ,GAAGL,IAAI,GAAG,KAAK,GAAG,IAAI;EACpCC,WAAW,GAAGK,UAAU,CAAC,MAAM;IAC7BC,eAAe,CAACC,IAAI,CAAC,CAAC;EACxB,CAAC,EAAEH,QAAQ,CAAC;AACd,CAAC;;AAED;AACA,OAAO,MAAME,eAAe,GAAG;EAC7BX,KAAK;EAELa,WAAWA,CAACZ,OAAwC,EAAEG,IAAI,GAAG,KAAK,EAAE;IAClEJ,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,SAAS;IACzBF,KAAK,CAACG,IAAI,GAAG,IAAI;IACjBH,KAAK,CAACI,IAAI,GAAGA,IAAI;IACjBI,gBAAgB,CAACJ,IAAI,CAAC;EACxB,CAAC;EAEDU,SAASA,CAACb,OAAwC,EAAEG,IAAI,GAAG,KAAK,EAAE;IAChEJ,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,OAAO;IACvBF,KAAK,CAACG,IAAI,GAAG,IAAI;IACjBH,KAAK,CAACI,IAAI,GAAGA,IAAI;IACjBI,gBAAgB,CAACJ,IAAI,CAAC;EACxB,CAAC;EAEDW,WAAWA,CAACd,OAAwC,EAAEG,IAAI,GAAG,KAAK,EAAE;IAClEJ,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,SAAS;IACzBF,KAAK,CAACG,IAAI,GAAG,IAAI;IACjBH,KAAK,CAACI,IAAI,GAAGA,IAAI;IACjBI,gBAAgB,CAACJ,IAAI,CAAC;EACxB,CAAC;EAEDY,iBAAiBA,CAACC,KAAc,EAAE;IAChC,MAAM;MAAEC;IAAM,CAAC,GAAGnB,iBAAiB,CAACC,KAAK;IAEzC,IAAIkB,KAAK,EAAE;MACTlB,KAAK,CAACC,OAAO,GAAGgB,KAAK,CAACE,YAAY;MAClCnB,KAAK,CAACE,OAAO,GAAG,OAAO;MACvBF,KAAK,CAACG,IAAI,GAAG,IAAI;MACjBH,KAAK,CAACI,IAAI,GAAG,IAAI;MACjBI,gBAAgB,CAAC,IAAI,CAAC;IACxB;IAEA,IAAIS,KAAK,CAACG,WAAW,EAAE;MACrB;MACAC,OAAO,CAACJ,KAAK,CAACA,KAAK,CAACG,WAAW,CAAC;IAClC;EACF,CAAC;EAEDR,IAAIA,CAAA,EAAG;IACLN,gBAAgB,CAAC,CAAC;IAClBN,KAAK,CAACG,IAAI,GAAG,KAAK;IAClBH,KAAK,CAACI,IAAI,GAAG,KAAK;EACpB;AACF,CAAC"}
1
+ {"version":3,"names":["proxy","OptionsController","state","message","variant","open","long","SnackController","showSuccess","showError","showLoading","showInternalError","error","debug","shortMessage","longMessage","console","hide"],"sourceRoot":"../../../src","sources":["controllers/SnackController.ts"],"mappings":"AAAA,SAASA,KAAK,QAAQ,QAAQ;AAC9B,SAASC,iBAAiB,QAAQ,qBAAqB;;AAEvD;;AAaA;AACA,MAAMC,KAAK,GAAGF,KAAK,CAAuB;EACxCG,OAAO,EAAE,EAAE;EACXC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE,KAAK;EACXC,IAAI,EAAE;AACR,CAAC,CAAC;;AAEF;AACA,OAAO,MAAMC,eAAe,GAAG;EAC7BL,KAAK;EAELM,WAAWA,CAACL,OAAwC,EAAE;IACpDD,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,SAAS;IACzBF,KAAK,CAACG,IAAI,GAAG,IAAI;EACnB,CAAC;EAEDI,SAASA,CAACN,OAAwC,EAAE;IAClDD,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,OAAO;IACvBF,KAAK,CAACG,IAAI,GAAG,IAAI;EACnB,CAAC;EAEDK,WAAWA,CAACP,OAAwC,EAAE;IACpDD,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,SAAS;IACzBF,KAAK,CAACG,IAAI,GAAG,IAAI;EACnB,CAAC;EAEDM,iBAAiBA,CAACC,KAAc,EAAE;IAChC,MAAM;MAAEC;IAAM,CAAC,GAAGZ,iBAAiB,CAACC,KAAK;IAEzC,IAAIW,KAAK,EAAE;MACTX,KAAK,CAACC,OAAO,GAAGS,KAAK,CAACE,YAAY;MAClCZ,KAAK,CAACE,OAAO,GAAG,OAAO;MACvBF,KAAK,CAACG,IAAI,GAAG,IAAI;MACjBH,KAAK,CAACI,IAAI,GAAG,IAAI;IACnB;IAEA,IAAIM,KAAK,CAACG,WAAW,EAAE;MACrB;MACAC,OAAO,CAACJ,KAAK,CAACA,KAAK,CAACG,WAAW,CAAC;IAClC;EACF,CAAC;EAEDE,IAAIA,CAAA,EAAG;IACLf,KAAK,CAACG,IAAI,GAAG,KAAK;IAClBH,KAAK,CAACI,IAAI,GAAG,KAAK;IAClBJ,KAAK,CAACC,OAAO,GAAG,EAAE;IAClBD,KAAK,CAACE,OAAO,GAAG,SAAS;EAC3B;AACF,CAAC"}
@@ -3,15 +3,18 @@ import { proxy, subscribe as sub } from 'valtio';
3
3
  import { NumberUtil } from '@reown/appkit-common-react-native';
4
4
  import { ConstantsUtil } from '../utils/ConstantsUtil';
5
5
  import { SwapApiUtil } from '../utils/SwapApiUtil';
6
+ import { NetworkController } from './NetworkController';
6
7
  import { BlockchainApiController } from './BlockchainApiController';
7
8
  import { OptionsController } from './OptionsController';
8
9
  import { SwapCalculationUtil } from '../utils/SwapCalculationUtil';
9
10
  import { SnackController } from './SnackController';
10
11
  import { RouterController } from './RouterController';
12
+ import { ConnectorController } from './ConnectorController';
13
+ import { AccountController } from './AccountController';
11
14
  import { CoreHelperUtil } from '../utils/CoreHelperUtil';
15
+ import { ConnectionController } from './ConnectionController';
12
16
  import { TransactionsController } from './TransactionsController';
13
17
  import { EventsController } from './EventsController';
14
- import { ConnectionsController } from './ConnectionsController';
15
18
 
16
19
  // -- Constants ---------------------------------------- //
17
20
  export const INITIAL_GAS_LIMIT = 150000;
@@ -29,7 +32,8 @@ class TransactionError extends Error {
29
32
  // -- State --------------------------------------------- //
30
33
  const initialState = {
31
34
  // Loading states
32
- loadingTokens: false,
35
+ initializing: false,
36
+ initialized: false,
33
37
  loadingPrices: false,
34
38
  loadingQuote: false,
35
39
  loadingApprovalTransaction: false,
@@ -49,6 +53,7 @@ const initialState = {
49
53
  toTokenAmount: '',
50
54
  toTokenPriceInUSD: 0,
51
55
  networkPrice: '0',
56
+ networkBalanceInUSD: '0',
52
57
  networkTokenSymbol: '',
53
58
  inputError: undefined,
54
59
  // Request values
@@ -79,17 +84,10 @@ export const SwapController = {
79
84
  return subKey(state, key, callback);
80
85
  },
81
86
  getParams() {
82
- const {
83
- activeAddress,
84
- activeNamespace,
85
- activeNetwork,
86
- connection
87
- } = ConnectionsController.state;
88
- const address = CoreHelperUtil.getPlainAddress(activeAddress);
89
- if (!activeNamespace || !activeNetwork) {
90
- throw new Error('No active namespace or network found to swap the tokens from.');
91
- }
92
- const networkAddress = `${activeNetwork.caipNetworkId}:${ConstantsUtil.NATIVE_TOKEN_ADDRESS[activeNamespace]}`;
87
+ const caipAddress = AccountController.state.caipAddress;
88
+ const address = CoreHelperUtil.getPlainAddress(caipAddress);
89
+ const networkAddress = NetworkController.getActiveNetworkTokenAddress();
90
+ const type = ConnectorController.state.connectedConnector;
93
91
  if (!address) {
94
92
  throw new Error('No address found to swap the tokens from.');
95
93
  }
@@ -99,7 +97,7 @@ export const SwapController = {
99
97
  return {
100
98
  networkAddress,
101
99
  fromAddress: address,
102
- fromCaipAddress: activeAddress,
100
+ fromCaipAddress: caipAddress,
103
101
  sourceTokenAddress: state.sourceToken?.address,
104
102
  toTokenAddress: state.toToken?.address,
105
103
  toTokenAmount: state.toTokenAmount,
@@ -109,12 +107,12 @@ export const SwapController = {
109
107
  invalidToToken,
110
108
  invalidSourceToken,
111
109
  invalidSourceTokenAmount,
112
- availableToSwap: activeAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
113
- isAuthConnector: !!connection?.properties?.provider
110
+ availableToSwap: caipAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
111
+ isAuthConnector: type === 'AUTH'
114
112
  };
115
113
  },
116
114
  switchTokens() {
117
- if (state.loadingTokens) {
115
+ if (state.initializing || !state.initialized) {
118
116
  return;
119
117
  }
120
118
  let newSourceToken = state.toToken ? {
@@ -134,32 +132,35 @@ export const SwapController = {
134
132
  this.setToTokenAmount('');
135
133
  this.swapTokens();
136
134
  },
135
+ resetState() {
136
+ state.myTokensWithBalance = initialState.myTokensWithBalance;
137
+ state.tokensPriceMap = initialState.tokensPriceMap;
138
+ state.initialized = initialState.initialized;
139
+ state.sourceToken = initialState.sourceToken;
140
+ state.sourceTokenAmount = initialState.sourceTokenAmount;
141
+ state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
142
+ state.toToken = initialState.toToken;
143
+ state.toTokenAmount = initialState.toTokenAmount;
144
+ state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
145
+ state.networkPrice = initialState.networkPrice;
146
+ state.networkTokenSymbol = initialState.networkTokenSymbol;
147
+ state.networkBalanceInUSD = initialState.networkBalanceInUSD;
148
+ state.inputError = initialState.inputError;
149
+ },
137
150
  async fetchTokens() {
138
- try {
139
- const {
140
- networkAddress
141
- } = this.getParams();
142
- state.loadingTokens = true;
143
- await this.getTokenList();
144
- await this.getNetworkTokenPrice();
145
- await this.getMyTokensWithBalance();
146
- const networkToken = state.tokens?.find(token => token.address === networkAddress);
147
- if (networkToken) {
148
- state.networkTokenSymbol = networkToken.symbol;
149
- }
150
-
151
- // Set default source token if not set
152
- if (!state.sourceToken && state.myTokensWithBalance?.length) {
153
- const sourceToken = state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) || state.myTokensWithBalance?.[0];
154
- this.setSourceToken(sourceToken);
155
- this.setSourceTokenAmount('1');
156
- }
157
- } catch (error) {
158
- SnackController.showError('Failed to initialize swap');
159
- RouterController.goBack();
160
- } finally {
161
- state.loadingTokens = false;
151
+ const {
152
+ networkAddress
153
+ } = this.getParams();
154
+ await this.getTokenList();
155
+ await this.getNetworkTokenPrice();
156
+ await this.getMyTokensWithBalance();
157
+ const networkToken = state.tokens?.find(token => token.address === networkAddress);
158
+ if (networkToken) {
159
+ state.networkTokenSymbol = networkToken.symbol;
162
160
  }
161
+ const sourceToken = state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) || state.myTokensWithBalance?.[0];
162
+ this.setSourceToken(sourceToken);
163
+ this.setSourceTokenAmount('1');
163
164
  },
164
165
  async getTokenList() {
165
166
  const tokens = await SwapApiUtil.getTokenList();
@@ -181,19 +182,15 @@ export const SwapController = {
181
182
  }, {});
182
183
  },
183
184
  async getMyTokensWithBalance(forceUpdate) {
184
- await ConnectionsController.fetchBalance(forceUpdate);
185
- const swapBalances = SwapApiUtil.mapBalancesToSwapTokens(ConnectionsController.state.balances);
186
- if (!swapBalances) {
185
+ const balances = await SwapApiUtil.getMyTokensWithBalance(forceUpdate);
186
+ if (!balances) {
187
187
  return;
188
188
  }
189
189
  await this.getInitialGasPrice();
190
- this.setBalances(swapBalances);
190
+ this.setBalances(balances);
191
191
  },
192
- getFilteredPopularTokens(balances) {
193
- if (!balances) {
194
- return state.popularTokens;
195
- }
196
- return state.popularTokens?.filter(token => !balances.some(t => t.address === token.address));
192
+ getFilteredPopularTokens() {
193
+ return state.popularTokens?.filter(token => !state.myTokensWithBalance?.some(t => t.address === token.address));
197
194
  },
198
195
  setSourceToken(sourceToken) {
199
196
  if (!sourceToken) {
@@ -211,6 +208,23 @@ export const SwapController = {
211
208
  state.toTokenAmount = '';
212
209
  }
213
210
  },
211
+ async initializeState() {
212
+ if (state.initializing) {
213
+ return;
214
+ }
215
+ state.initializing = true;
216
+ if (!state.initialized) {
217
+ try {
218
+ await this.fetchTokens();
219
+ state.initialized = true;
220
+ } catch (error) {
221
+ state.initialized = false;
222
+ SnackController.showError('Failed to initialize swap');
223
+ RouterController.goBack();
224
+ }
225
+ }
226
+ state.initializing = false;
227
+ },
214
228
  async getAddressPrice(address) {
215
229
  const existPrice = state.tokensPriceMap[address];
216
230
  if (existPrice) {
@@ -265,10 +279,19 @@ export const SwapController = {
265
279
  return SwapCalculationUtil.getProviderFeePrice(state.sourceTokenAmount, state.sourceTokenPriceInUSD);
266
280
  },
267
281
  setBalances(balances) {
268
- state.myTokensWithBalance = balances;
282
+ const {
283
+ networkAddress
284
+ } = this.getParams();
285
+ const caipNetwork = NetworkController.state.caipNetwork;
286
+ if (!caipNetwork) {
287
+ return;
288
+ }
289
+ const networkToken = balances.find(token => token.address === networkAddress);
269
290
  balances.forEach(token => {
270
291
  state.tokensPriceMap[token.address] = token.price || 0;
271
292
  });
293
+ state.myTokensWithBalance = balances.filter(token => token.address?.startsWith(caipNetwork.id));
294
+ state.networkBalanceInUSD = networkToken ? NumberUtil.multiply(networkToken.quantity.numeric, networkToken.price).toString() : '0';
272
295
  },
273
296
  setToToken(toToken) {
274
297
  if (!toToken) {
@@ -303,42 +326,36 @@ export const SwapController = {
303
326
  },
304
327
  // -- Swap ---------------------------------------------- //
305
328
  async swapTokens() {
306
- const address = ConnectionsController.state.activeAddress;
329
+ const address = AccountController.state.address;
307
330
  const sourceToken = state.sourceToken;
308
331
  const toToken = state.toToken;
309
332
  const haveSourceTokenAmount = NumberUtil.bigNumber(state.sourceTokenAmount).isGreaterThan(0);
310
- if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount || !address) {
333
+ if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount) {
311
334
  return;
312
335
  }
313
336
  state.loadingQuote = true;
314
337
  const amountDecimal = NumberUtil.bigNumber(state.sourceTokenAmount).multipliedBy(10 ** sourceToken.decimals).integerValue();
315
- try {
316
- const quoteResponse = await BlockchainApiController.fetchSwapQuote({
317
- userAddress: address,
318
- projectId: OptionsController.state.projectId,
319
- from: sourceToken.address,
320
- to: toToken.address,
321
- gasPrice: state.gasFee,
322
- amount: amountDecimal.toString()
323
- });
324
- const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
325
- if (!quoteToAmount) {
326
- state.loadingQuote = false;
327
- return;
328
- }
329
- const toTokenAmount = NumberUtil.bigNumber(quoteToAmount).dividedBy(10 ** toToken.decimals).toString();
330
- this.setToTokenAmount(toTokenAmount);
331
- const isInsufficientToken = this.hasInsufficientToken(state.sourceTokenAmount, sourceToken.address);
332
- if (isInsufficientToken) {
333
- state.inputError = 'Insufficient balance';
334
- } else {
335
- state.inputError = undefined;
336
- this.setTransactionDetails();
337
- }
338
- } catch (error) {
339
- SnackController.showError('Failed to get swap quote');
340
- } finally {
341
- state.loadingQuote = false;
338
+ const quoteResponse = await BlockchainApiController.fetchSwapQuote({
339
+ userAddress: address,
340
+ projectId: OptionsController.state.projectId,
341
+ from: sourceToken.address,
342
+ to: toToken.address,
343
+ gasPrice: state.gasFee,
344
+ amount: amountDecimal.toString()
345
+ });
346
+ state.loadingQuote = false;
347
+ const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
348
+ if (!quoteToAmount) {
349
+ return;
350
+ }
351
+ const toTokenAmount = NumberUtil.bigNumber(quoteToAmount).dividedBy(10 ** toToken.decimals).toString();
352
+ this.setToTokenAmount(toTokenAmount);
353
+ const isInsufficientToken = this.hasInsufficientToken(state.sourceTokenAmount, sourceToken.address);
354
+ if (isInsufficientToken) {
355
+ state.inputError = 'Insufficient balance';
356
+ } else {
357
+ state.inputError = undefined;
358
+ this.setTransactionDetails();
342
359
  }
343
360
  },
344
361
  // -- Create Transactions -------------------------------------- //
@@ -402,7 +419,7 @@ export const SwapController = {
402
419
  if (!response) {
403
420
  throw new Error('createAllowanceTransaction - No response from generateApproveCalldata');
404
421
  }
405
- const gasLimit = await ConnectionsController.estimateGas({
422
+ const gasLimit = await ConnectionController.estimateGas({
406
423
  address: fromAddress,
407
424
  to: CoreHelperUtil.getPlainAddress(response.tx.to),
408
425
  data: response.tx.data
@@ -452,7 +469,7 @@ export const SwapController = {
452
469
  if (!fromCaipAddress || !sourceTokenAmount || !sourceToken || !toToken) {
453
470
  return undefined;
454
471
  }
455
- const amount = ConnectionsController.parseUnits(sourceTokenAmount, sourceToken.decimals)?.toString();
472
+ const amount = ConnectionController.parseUnits(sourceTokenAmount, sourceToken.decimals)?.toString();
456
473
  try {
457
474
  const response = await BlockchainApiController.generateSwapCalldata({
458
475
  projectId: OptionsController.state.projectId,
@@ -490,28 +507,40 @@ export const SwapController = {
490
507
  },
491
508
  async sendTransactionForApproval(data) {
492
509
  const {
493
- fromAddress
510
+ fromAddress,
511
+ isAuthConnector
494
512
  } = this.getParams();
495
513
  state.loadingApprovalTransaction = true;
496
- SnackController.showLoading('Approve limit increase in your wallet');
514
+ const approveLimitMessage = `Approve limit increase in your wallet`;
515
+ if (isAuthConnector) {
516
+ RouterController.pushTransactionStack({
517
+ view: null,
518
+ goBack: true,
519
+ onSuccess() {
520
+ SnackController.showLoading(approveLimitMessage);
521
+ }
522
+ });
523
+ } else {
524
+ SnackController.showLoading(approveLimitMessage);
525
+ }
497
526
  try {
498
- await ConnectionsController.sendTransaction({
527
+ await ConnectionController.sendTransaction({
499
528
  address: fromAddress,
500
529
  to: data.to,
501
530
  data: data.data,
502
531
  value: BigInt(data.value),
503
532
  gasPrice: BigInt(data.gasPrice),
504
- chainNamespace: ConnectionsController.state.activeNamespace
533
+ chainNamespace: 'eip155'
505
534
  });
506
535
  await this.swapTokens();
507
536
  await this.getTransaction();
508
537
  state.approvalTransaction = undefined;
538
+ state.loadingApprovalTransaction = false;
509
539
  } catch (err) {
510
540
  const error = err;
511
541
  state.transactionError = error?.shortMessage;
512
- SnackController.showError(error?.shortMessage ?? 'Transaction error');
513
- } finally {
514
542
  state.loadingApprovalTransaction = false;
543
+ SnackController.showError(error?.shortMessage ?? 'Transaction error');
515
544
  }
516
545
  },
517
546
  async sendTransactionForSwap(data) {
@@ -520,41 +549,57 @@ export const SwapController = {
520
549
  }
521
550
  const {
522
551
  fromAddress,
552
+ toTokenAmount,
523
553
  isAuthConnector
524
554
  } = this.getParams();
525
555
  state.loadingTransaction = true;
526
- const snackbarSuccessMessage = `Swapped ${state.sourceToken?.symbol} to ${state.toToken?.symbol}`;
527
- SnackController.showLoading('Confirm transaction in your wallet');
556
+ const snackbarPendingMessage = `Swapping ${state.sourceToken?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken?.symbol}`;
557
+ const snackbarSuccessMessage = `Swapped ${state.sourceToken?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken?.symbol}`;
558
+ if (isAuthConnector) {
559
+ RouterController.pushTransactionStack({
560
+ view: 'Account',
561
+ goBack: false,
562
+ onSuccess() {
563
+ SnackController.showLoading(snackbarPendingMessage);
564
+ SwapController.resetState();
565
+ }
566
+ });
567
+ } else {
568
+ SnackController.showLoading('Confirm transaction in your wallet');
569
+ }
528
570
  try {
529
- const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].filter(Boolean);
530
- const transactionHash = await ConnectionsController.sendTransaction({
571
+ const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].join(',');
572
+ const transactionHash = await ConnectionController.sendTransaction({
531
573
  address: fromAddress,
532
574
  to: data.to,
533
575
  data: data.data,
534
576
  gas: data.gas,
535
577
  gasPrice: BigInt(data.gasPrice),
536
578
  value: data.value,
537
- chainNamespace: ConnectionsController.state.activeNamespace
579
+ chainNamespace: 'eip155'
538
580
  });
539
581
  state.loadingTransaction = false;
540
- SnackController.showSuccess(snackbarSuccessMessage, true);
582
+ SnackController.showSuccess(snackbarSuccessMessage);
541
583
  EventsController.sendEvent({
542
584
  type: 'track',
543
585
  event: 'SWAP_SUCCESS',
544
586
  properties: {
545
- network: ConnectionsController.state.activeNetwork?.caipNetworkId || '',
587
+ network: NetworkController.state.caipNetwork?.id || '',
546
588
  swapFromToken: this.state.sourceToken?.symbol || '',
547
589
  swapToToken: this.state.toToken?.symbol || '',
548
590
  swapFromAmount: this.state.sourceTokenAmount || '',
549
591
  swapToAmount: this.state.toTokenAmount || '',
550
- isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
592
+ isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
551
593
  }
552
594
  });
553
- RouterController.replace(isAuthConnector ? 'Account' : 'AccountDefault');
554
- SwapController.clearTokens();
595
+ SwapController.resetState();
596
+ if (!isAuthConnector) {
597
+ RouterController.replace('AccountDefault');
598
+ }
555
599
  SwapController.getMyTokensWithBalance(forceUpdateAddresses);
600
+ AccountController.fetchTokenBalance();
556
601
  setTimeout(() => {
557
- TransactionsController.fetchTransactions(ConnectionsController.state.activeAddress, true);
602
+ TransactionsController.fetchTransactions(AccountController.state.address, true);
558
603
  }, 5000);
559
604
  return transactionHash;
560
605
  } catch (err) {
@@ -567,59 +612,26 @@ export const SwapController = {
567
612
  event: 'SWAP_ERROR',
568
613
  properties: {
569
614
  message: error?.shortMessage ?? error?.message ?? 'Unknown',
570
- network: ConnectionsController.state.activeNetwork?.caipNetworkId || '',
615
+ network: NetworkController.state.caipNetwork?.id || '',
571
616
  swapFromToken: this.state.sourceToken?.symbol || '',
572
617
  swapToToken: this.state.toToken?.symbol || '',
573
618
  swapFromAmount: this.state.sourceTokenAmount || '',
574
619
  swapToAmount: this.state.toTokenAmount || '',
575
- isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
620
+ isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
576
621
  }
577
622
  });
578
623
  return undefined;
579
624
  }
580
625
  },
581
- clearTransactionLoaders() {
582
- state.loadingApprovalTransaction = false;
583
- state.loadingBuildTransaction = false;
584
- state.loadingTransaction = false;
585
- },
586
- clearTokens() {
587
- state.sourceToken = initialState.sourceToken;
588
- state.sourceTokenAmount = initialState.sourceTokenAmount;
589
- state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
590
- state.toToken = initialState.toToken;
591
- state.toTokenAmount = initialState.toTokenAmount;
592
- state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
593
- state.inputError = initialState.inputError;
594
- state.loadingApprovalTransaction = initialState.loadingApprovalTransaction;
595
- state.loadingBuildTransaction = initialState.loadingBuildTransaction;
596
- state.loadingTransaction = initialState.loadingTransaction;
597
- state.fetchError = initialState.fetchError;
598
- state.transactionError = initialState.transactionError;
599
- state.swapTransaction = initialState.swapTransaction;
600
- state.approvalTransaction = initialState.approvalTransaction;
601
- },
602
- resetState() {
603
- this.clearTokens();
604
- state.myTokensWithBalance = initialState.myTokensWithBalance;
605
- state.tokensPriceMap = initialState.tokensPriceMap;
606
- state.networkPrice = initialState.networkPrice;
607
- state.networkTokenSymbol = initialState.networkTokenSymbol;
608
- },
609
626
  // -- Checks -------------------------------------------- //
610
627
  hasInsufficientToken(sourceTokenAmount, sourceTokenAddress) {
611
- const {
612
- balances
613
- } = ConnectionsController.state;
614
- const networkToken = balances?.find(t => t.address === undefined);
615
- const networkBalanceInUSD = networkToken ? NumberUtil.multiply(networkToken.quantity?.numeric ?? '0', networkToken.price).toString() : '0';
616
628
  const isInsufficientSourceTokenForSwap = SwapCalculationUtil.isInsufficientSourceTokenForSwap(sourceTokenAmount, sourceTokenAddress, state.myTokensWithBalance);
617
629
  let insufficientNetworkTokenForGas = true;
618
- if (ConnectionsController.state.accountType === 'smartAccount') {
630
+ if (AccountController.state.preferredAccountType === 'smartAccount') {
619
631
  // Smart Accounts may pay gas in any ERC20 token
620
632
  insufficientNetworkTokenForGas = false;
621
633
  } else {
622
- insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(networkBalanceInUSD, state.gasPriceInUSD);
634
+ insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(state.networkBalanceInUSD, state.gasPriceInUSD);
623
635
  }
624
636
  return insufficientNetworkTokenForGas || isInsufficientSourceTokenForSwap;
625
637
  },