@reown/appkit-controllers 1.7.0-rc.0

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 (241) hide show
  1. package/LICENSE +190 -0
  2. package/dist/esm/exports/index.js +32 -0
  3. package/dist/esm/exports/index.js.map +1 -0
  4. package/dist/esm/exports/modal.js +2 -0
  5. package/dist/esm/exports/modal.js.map +1 -0
  6. package/dist/esm/exports/react.js +52 -0
  7. package/dist/esm/exports/react.js.map +1 -0
  8. package/dist/esm/exports/vue.js +63 -0
  9. package/dist/esm/exports/vue.js.map +1 -0
  10. package/dist/esm/src/controllers/AccountController.js +160 -0
  11. package/dist/esm/src/controllers/AccountController.js.map +1 -0
  12. package/dist/esm/src/controllers/AlertController.js +35 -0
  13. package/dist/esm/src/controllers/AlertController.js.map +1 -0
  14. package/dist/esm/src/controllers/ApiController.js +260 -0
  15. package/dist/esm/src/controllers/ApiController.js.map +1 -0
  16. package/dist/esm/src/controllers/AssetController.js +43 -0
  17. package/dist/esm/src/controllers/AssetController.js.map +1 -0
  18. package/dist/esm/src/controllers/BlockchainApiController.js +472 -0
  19. package/dist/esm/src/controllers/BlockchainApiController.js.map +1 -0
  20. package/dist/esm/src/controllers/ChainController.js +548 -0
  21. package/dist/esm/src/controllers/ChainController.js.map +1 -0
  22. package/dist/esm/src/controllers/ConnectionController.js +190 -0
  23. package/dist/esm/src/controllers/ConnectionController.js.map +1 -0
  24. package/dist/esm/src/controllers/ConnectorController.js +272 -0
  25. package/dist/esm/src/controllers/ConnectorController.js.map +1 -0
  26. package/dist/esm/src/controllers/EnsController.js +144 -0
  27. package/dist/esm/src/controllers/EnsController.js.map +1 -0
  28. package/dist/esm/src/controllers/EventsController.js +76 -0
  29. package/dist/esm/src/controllers/EventsController.js.map +1 -0
  30. package/dist/esm/src/controllers/ModalController.js +120 -0
  31. package/dist/esm/src/controllers/ModalController.js.map +1 -0
  32. package/dist/esm/src/controllers/OnRampController.js +132 -0
  33. package/dist/esm/src/controllers/OnRampController.js.map +1 -0
  34. package/dist/esm/src/controllers/OptionsController.js +146 -0
  35. package/dist/esm/src/controllers/OptionsController.js.map +1 -0
  36. package/dist/esm/src/controllers/PublicStateController.js +20 -0
  37. package/dist/esm/src/controllers/PublicStateController.js.map +1 -0
  38. package/dist/esm/src/controllers/RouterController.js +125 -0
  39. package/dist/esm/src/controllers/RouterController.js.map +1 -0
  40. package/dist/esm/src/controllers/SendController.js +305 -0
  41. package/dist/esm/src/controllers/SendController.js.map +1 -0
  42. package/dist/esm/src/controllers/SnackController.js +62 -0
  43. package/dist/esm/src/controllers/SnackController.js.map +1 -0
  44. package/dist/esm/src/controllers/SwapController.js +674 -0
  45. package/dist/esm/src/controllers/SwapController.js.map +1 -0
  46. package/dist/esm/src/controllers/ThemeController.js +55 -0
  47. package/dist/esm/src/controllers/ThemeController.js.map +1 -0
  48. package/dist/esm/src/controllers/TooltipController.js +41 -0
  49. package/dist/esm/src/controllers/TooltipController.js.map +1 -0
  50. package/dist/esm/src/controllers/TransactionsController.js +113 -0
  51. package/dist/esm/src/controllers/TransactionsController.js.map +1 -0
  52. package/dist/esm/src/utils/AssetUtil.js +86 -0
  53. package/dist/esm/src/utils/AssetUtil.js.map +1 -0
  54. package/dist/esm/src/utils/ConstantsUtil.js +239 -0
  55. package/dist/esm/src/utils/ConstantsUtil.js.map +1 -0
  56. package/dist/esm/src/utils/CoreHelperUtil.js +354 -0
  57. package/dist/esm/src/utils/CoreHelperUtil.js.map +1 -0
  58. package/dist/esm/src/utils/ERC7811Util.js +111 -0
  59. package/dist/esm/src/utils/ERC7811Util.js.map +1 -0
  60. package/dist/esm/src/utils/EnsUtil.js +10 -0
  61. package/dist/esm/src/utils/EnsUtil.js.map +1 -0
  62. package/dist/esm/src/utils/FetchUtil.js +73 -0
  63. package/dist/esm/src/utils/FetchUtil.js.map +1 -0
  64. package/dist/esm/src/utils/MobileWallet.js +31 -0
  65. package/dist/esm/src/utils/MobileWallet.js.map +1 -0
  66. package/dist/esm/src/utils/OptionsUtil.js +29 -0
  67. package/dist/esm/src/utils/OptionsUtil.js.map +1 -0
  68. package/dist/esm/src/utils/RouterUtil.js +23 -0
  69. package/dist/esm/src/utils/RouterUtil.js.map +1 -0
  70. package/dist/esm/src/utils/SIWXUtil.js +258 -0
  71. package/dist/esm/src/utils/SIWXUtil.js.map +1 -0
  72. package/dist/esm/src/utils/SendApiUtil.js +65 -0
  73. package/dist/esm/src/utils/SendApiUtil.js.map +1 -0
  74. package/dist/esm/src/utils/StorageUtil.js +485 -0
  75. package/dist/esm/src/utils/StorageUtil.js.map +1 -0
  76. package/dist/esm/src/utils/SwapApiUtil.js +89 -0
  77. package/dist/esm/src/utils/SwapApiUtil.js.map +1 -0
  78. package/dist/esm/src/utils/SwapCalculationUtil.js +74 -0
  79. package/dist/esm/src/utils/SwapCalculationUtil.js.map +1 -0
  80. package/dist/esm/src/utils/TypeUtil.js +2 -0
  81. package/dist/esm/src/utils/TypeUtil.js.map +1 -0
  82. package/dist/esm/tests/constants/OnrampTransactions.js +151 -0
  83. package/dist/esm/tests/constants/OnrampTransactions.js.map +1 -0
  84. package/dist/esm/tests/controllers/AccountController.test.js +186 -0
  85. package/dist/esm/tests/controllers/AccountController.test.js.map +1 -0
  86. package/dist/esm/tests/controllers/AlertController.test.js +48 -0
  87. package/dist/esm/tests/controllers/AlertController.test.js.map +1 -0
  88. package/dist/esm/tests/controllers/ApiController.test.js +608 -0
  89. package/dist/esm/tests/controllers/ApiController.test.js.map +1 -0
  90. package/dist/esm/tests/controllers/AssetController.test.js +92 -0
  91. package/dist/esm/tests/controllers/AssetController.test.js.map +1 -0
  92. package/dist/esm/tests/controllers/BlockchainApiController.test.js +38 -0
  93. package/dist/esm/tests/controllers/BlockchainApiController.test.js.map +1 -0
  94. package/dist/esm/tests/controllers/ChainController.test.js +382 -0
  95. package/dist/esm/tests/controllers/ChainController.test.js.map +1 -0
  96. package/dist/esm/tests/controllers/ConnectionController.test.js +151 -0
  97. package/dist/esm/tests/controllers/ConnectionController.test.js.map +1 -0
  98. package/dist/esm/tests/controllers/ConnectorController.test.js +282 -0
  99. package/dist/esm/tests/controllers/ConnectorController.test.js.map +1 -0
  100. package/dist/esm/tests/controllers/EnsController.test.js +186 -0
  101. package/dist/esm/tests/controllers/EnsController.test.js.map +1 -0
  102. package/dist/esm/tests/controllers/EventsController.test.js +47 -0
  103. package/dist/esm/tests/controllers/EventsController.test.js.map +1 -0
  104. package/dist/esm/tests/controllers/ModalController.test.js +66 -0
  105. package/dist/esm/tests/controllers/ModalController.test.js.map +1 -0
  106. package/dist/esm/tests/controllers/OnRampController.test.js +118 -0
  107. package/dist/esm/tests/controllers/OnRampController.test.js.map +1 -0
  108. package/dist/esm/tests/controllers/OptionsController.test.js +42 -0
  109. package/dist/esm/tests/controllers/OptionsController.test.js.map +1 -0
  110. package/dist/esm/tests/controllers/PublicStateController.test.js +33 -0
  111. package/dist/esm/tests/controllers/PublicStateController.test.js.map +1 -0
  112. package/dist/esm/tests/controllers/RouterController.test.js +103 -0
  113. package/dist/esm/tests/controllers/RouterController.test.js.map +1 -0
  114. package/dist/esm/tests/controllers/SendController.test.js +136 -0
  115. package/dist/esm/tests/controllers/SendController.test.js.map +1 -0
  116. package/dist/esm/tests/controllers/SnackController.test.js +86 -0
  117. package/dist/esm/tests/controllers/SnackController.test.js.map +1 -0
  118. package/dist/esm/tests/controllers/SwapController.test.js +105 -0
  119. package/dist/esm/tests/controllers/SwapController.test.js.map +1 -0
  120. package/dist/esm/tests/controllers/ThemeController.test.js +26 -0
  121. package/dist/esm/tests/controllers/ThemeController.test.js.map +1 -0
  122. package/dist/esm/tests/controllers/TooltipController.test.js +40 -0
  123. package/dist/esm/tests/controllers/TooltipController.test.js.map +1 -0
  124. package/dist/esm/tests/controllers/TransactionsController.test.js +239 -0
  125. package/dist/esm/tests/controllers/TransactionsController.test.js.map +1 -0
  126. package/dist/esm/tests/hooks/react.test.js +149 -0
  127. package/dist/esm/tests/hooks/react.test.js.map +1 -0
  128. package/dist/esm/tests/hooks/vue.test.js +56 -0
  129. package/dist/esm/tests/hooks/vue.test.js.map +1 -0
  130. package/dist/esm/tests/mocks/ChainController.js +24 -0
  131. package/dist/esm/tests/mocks/ChainController.js.map +1 -0
  132. package/dist/esm/tests/mocks/SwapController.js +118 -0
  133. package/dist/esm/tests/mocks/SwapController.js.map +1 -0
  134. package/dist/esm/tests/mocks/useAppKitAccount.js +41 -0
  135. package/dist/esm/tests/mocks/useAppKitAccount.js.map +1 -0
  136. package/dist/esm/tests/utils/AssetUtil.test.js +108 -0
  137. package/dist/esm/tests/utils/AssetUtil.test.js.map +1 -0
  138. package/dist/esm/tests/utils/CoreHelperUtil.test.js +67 -0
  139. package/dist/esm/tests/utils/CoreHelperUtil.test.js.map +1 -0
  140. package/dist/esm/tests/utils/ERC7811.test.js +268 -0
  141. package/dist/esm/tests/utils/ERC7811.test.js.map +1 -0
  142. package/dist/esm/tests/utils/EnsUtil.test.js +23 -0
  143. package/dist/esm/tests/utils/EnsUtil.test.js.map +1 -0
  144. package/dist/esm/tests/utils/FetchUtil.test.js +175 -0
  145. package/dist/esm/tests/utils/FetchUtil.test.js.map +1 -0
  146. package/dist/esm/tests/utils/MobileWallet.test.js +72 -0
  147. package/dist/esm/tests/utils/MobileWallet.test.js.map +1 -0
  148. package/dist/esm/tests/utils/OptionsUtil.test.js +20 -0
  149. package/dist/esm/tests/utils/OptionsUtil.test.js.map +1 -0
  150. package/dist/esm/tests/utils/RouterUtil.test.js +62 -0
  151. package/dist/esm/tests/utils/RouterUtil.test.js.map +1 -0
  152. package/dist/esm/tests/utils/SendApiUtil.test.js +340 -0
  153. package/dist/esm/tests/utils/SendApiUtil.test.js.map +1 -0
  154. package/dist/esm/tests/utils/StorageUtil.test.js +162 -0
  155. package/dist/esm/tests/utils/StorageUtil.test.js.map +1 -0
  156. package/dist/esm/tests/utils/SwapApiUtil.test.js +213 -0
  157. package/dist/esm/tests/utils/SwapApiUtil.test.js.map +1 -0
  158. package/dist/esm/tests/utils/SwapCalculationUtil.test.js +80 -0
  159. package/dist/esm/tests/utils/SwapCalculationUtil.test.js.map +1 -0
  160. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  161. package/dist/types/exports/index.d.ts +51 -0
  162. package/dist/types/exports/modal.d.ts +2 -0
  163. package/dist/types/exports/react.d.ts +9 -0
  164. package/dist/types/exports/vue.d.ts +9 -0
  165. package/dist/types/src/controllers/AccountController.d.ts +56 -0
  166. package/dist/types/src/controllers/AlertController.d.ts +17 -0
  167. package/dist/types/src/controllers/ApiController.d.ts +52 -0
  168. package/dist/types/src/controllers/AssetController.d.ts +22 -0
  169. package/dist/types/src/controllers/BlockchainApiController.d.ts +59 -0
  170. package/dist/types/src/controllers/ChainController.d.ts +75 -0
  171. package/dist/types/src/controllers/ConnectionController.d.ts +86 -0
  172. package/dist/types/src/controllers/ConnectorController.d.ts +61 -0
  173. package/dist/types/src/controllers/EnsController.d.ts +26 -0
  174. package/dist/types/src/controllers/EventsController.d.ts +17 -0
  175. package/dist/types/src/controllers/ModalController.d.ts +27 -0
  176. package/dist/types/src/controllers/OnRampController.d.ts +55 -0
  177. package/dist/types/src/controllers/OptionsController.d.ts +364 -0
  178. package/dist/types/src/controllers/PublicStateController.d.ts +33 -0
  179. package/dist/types/src/controllers/RouterController.d.ts +56 -0
  180. package/dist/types/src/controllers/SendController.d.ts +52 -0
  181. package/dist/types/src/controllers/SnackController.d.ts +29 -0
  182. package/dist/types/src/controllers/SwapController.d.ts +127 -0
  183. package/dist/types/src/controllers/ThemeController.d.ts +30 -0
  184. package/dist/types/src/controllers/TooltipController.d.ts +25 -0
  185. package/dist/types/src/controllers/TransactionsController.d.ts +25 -0
  186. package/dist/types/src/utils/AssetUtil.d.ts +15 -0
  187. package/dist/types/src/utils/ConstantsUtil.d.ts +86 -0
  188. package/dist/types/src/utils/CoreHelperUtil.d.ts +56 -0
  189. package/dist/types/src/utils/ERC7811Util.d.ts +67 -0
  190. package/dist/types/src/utils/EnsUtil.d.ts +3 -0
  191. package/dist/types/src/utils/FetchUtil.d.ts +26 -0
  192. package/dist/types/src/utils/MobileWallet.d.ts +9 -0
  193. package/dist/types/src/utils/OptionsUtil.d.ts +5 -0
  194. package/dist/types/src/utils/RouterUtil.d.ts +4 -0
  195. package/dist/types/src/utils/SIWXUtil.d.ts +183 -0
  196. package/dist/types/src/utils/SendApiUtil.d.ts +13 -0
  197. package/dist/types/src/utils/StorageUtil.d.ts +99 -0
  198. package/dist/types/src/utils/SwapApiUtil.d.ts +27 -0
  199. package/dist/types/src/utils/SwapCalculationUtil.d.ts +22 -0
  200. package/dist/types/src/utils/TypeUtil.d.ts +981 -0
  201. package/dist/types/tests/constants/OnrampTransactions.d.ts +138 -0
  202. package/dist/types/tests/controllers/AccountController.test.d.ts +1 -0
  203. package/dist/types/tests/controllers/AlertController.test.d.ts +1 -0
  204. package/dist/types/tests/controllers/ApiController.test.d.ts +1 -0
  205. package/dist/types/tests/controllers/AssetController.test.d.ts +1 -0
  206. package/dist/types/tests/controllers/BlockchainApiController.test.d.ts +1 -0
  207. package/dist/types/tests/controllers/ChainController.test.d.ts +1 -0
  208. package/dist/types/tests/controllers/ConnectionController.test.d.ts +1 -0
  209. package/dist/types/tests/controllers/ConnectorController.test.d.ts +1 -0
  210. package/dist/types/tests/controllers/EnsController.test.d.ts +1 -0
  211. package/dist/types/tests/controllers/EventsController.test.d.ts +1 -0
  212. package/dist/types/tests/controllers/ModalController.test.d.ts +1 -0
  213. package/dist/types/tests/controllers/OnRampController.test.d.ts +1 -0
  214. package/dist/types/tests/controllers/OptionsController.test.d.ts +1 -0
  215. package/dist/types/tests/controllers/PublicStateController.test.d.ts +1 -0
  216. package/dist/types/tests/controllers/RouterController.test.d.ts +1 -0
  217. package/dist/types/tests/controllers/SendController.test.d.ts +1 -0
  218. package/dist/types/tests/controllers/SnackController.test.d.ts +1 -0
  219. package/dist/types/tests/controllers/SwapController.test.d.ts +1 -0
  220. package/dist/types/tests/controllers/ThemeController.test.d.ts +1 -0
  221. package/dist/types/tests/controllers/TooltipController.test.d.ts +1 -0
  222. package/dist/types/tests/controllers/TransactionsController.test.d.ts +1 -0
  223. package/dist/types/tests/hooks/react.test.d.ts +1 -0
  224. package/dist/types/tests/hooks/vue.test.d.ts +2 -0
  225. package/dist/types/tests/mocks/ChainController.d.ts +2 -0
  226. package/dist/types/tests/mocks/SwapController.d.ts +75 -0
  227. package/dist/types/tests/mocks/useAppKitAccount.d.ts +40 -0
  228. package/dist/types/tests/utils/AssetUtil.test.d.ts +1 -0
  229. package/dist/types/tests/utils/CoreHelperUtil.test.d.ts +1 -0
  230. package/dist/types/tests/utils/ERC7811.test.d.ts +1 -0
  231. package/dist/types/tests/utils/EnsUtil.test.d.ts +1 -0
  232. package/dist/types/tests/utils/FetchUtil.test.d.ts +1 -0
  233. package/dist/types/tests/utils/MobileWallet.test.d.ts +1 -0
  234. package/dist/types/tests/utils/OptionsUtil.test.d.ts +1 -0
  235. package/dist/types/tests/utils/RouterUtil.test.d.ts +1 -0
  236. package/dist/types/tests/utils/SendApiUtil.test.d.ts +1 -0
  237. package/dist/types/tests/utils/StorageUtil.test.d.ts +1 -0
  238. package/dist/types/tests/utils/SwapApiUtil.test.d.ts +1 -0
  239. package/dist/types/tests/utils/SwapCalculationUtil.test.d.ts +1 -0
  240. package/package.json +81 -0
  241. package/readme.md +11 -0
@@ -0,0 +1,608 @@
1
+ import { beforeAll, describe, expect, it, vi } from 'vitest';
2
+ import { ConstantsUtil } from '@reown/appkit-common';
3
+ import { ApiController, AssetController, ChainController, ConnectorController, OptionsController } from '../../exports/index.js';
4
+ import { api } from '../../src/controllers/ApiController.js';
5
+ // -- Constants ----------------------------------------------------------------
6
+ const chain = ConstantsUtil.CHAIN.EVM;
7
+ const networks = [
8
+ {
9
+ caipNetworkId: 'eip155:1',
10
+ id: 1,
11
+ name: 'Ethereum Mainnet',
12
+ assets: {
13
+ imageId: '12341',
14
+ imageUrl: ''
15
+ },
16
+ chainNamespace: chain,
17
+ nativeCurrency: {
18
+ name: 'Ethereum',
19
+ decimals: 18,
20
+ symbol: 'ETH'
21
+ },
22
+ rpcUrls: {
23
+ default: {
24
+ http: ['']
25
+ }
26
+ }
27
+ },
28
+ {
29
+ caipNetworkId: 'eip155:4',
30
+ id: 4,
31
+ name: 'Ethereum Rinkeby',
32
+ assets: {
33
+ imageId: '12342',
34
+ imageUrl: ''
35
+ },
36
+ chainNamespace: chain,
37
+ nativeCurrency: {
38
+ name: 'Ethereum',
39
+ decimals: 18,
40
+ symbol: 'ETH'
41
+ },
42
+ rpcUrls: {
43
+ default: {
44
+ http: ['']
45
+ }
46
+ }
47
+ },
48
+ {
49
+ caipNetworkId: 'eip155:42',
50
+ id: 42,
51
+ name: 'Ethereum Kovan',
52
+ chainNamespace: chain,
53
+ nativeCurrency: {
54
+ name: 'Ethereum',
55
+ decimals: 18,
56
+ symbol: 'ETH'
57
+ },
58
+ rpcUrls: {
59
+ default: {
60
+ http: ['']
61
+ }
62
+ }
63
+ }
64
+ ];
65
+ // -- Tests --------------------------------------------------------------------
66
+ beforeAll(() => {
67
+ global.URL.createObjectURL = vi.fn((file) => `blob:${file}`);
68
+ ChainController.initialize([
69
+ {
70
+ namespace: ConstantsUtil.CHAIN.EVM,
71
+ caipNetworks: []
72
+ }
73
+ ], [], {
74
+ connectionControllerClient: vi.fn(),
75
+ networkControllerClient: vi.fn()
76
+ });
77
+ });
78
+ describe('ApiController', () => {
79
+ it('should have valid default state', () => {
80
+ expect(ApiController.state).toEqual({
81
+ page: 1,
82
+ count: 0,
83
+ featured: [],
84
+ recommended: [],
85
+ wallets: [],
86
+ search: [],
87
+ isAnalyticsEnabled: false,
88
+ excludedRDNS: [],
89
+ isFetchingRecommendedWallets: false
90
+ });
91
+ });
92
+ it('should fetch wallet image and update AssetController state correctly', async () => {
93
+ const imageId = '123';
94
+ const image = 'image.jpg';
95
+ const blob = new Blob([image]);
96
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
97
+ await ApiController._fetchWalletImage(imageId);
98
+ expect(fetchSpy).toHaveBeenCalledWith({
99
+ path: `${api.baseUrl}/getWalletImage/${imageId}`,
100
+ params: ApiController._getSdkProperties()
101
+ });
102
+ // Cannot exactly recreate the object url
103
+ expect(AssetController.state.walletImages[imageId]).toMatch(/^blob:/u);
104
+ });
105
+ it('should fetch network image and update AssetController state correctly', async () => {
106
+ const imageId = '123';
107
+ const image = 'image.jpg';
108
+ const blob = new Blob([image]);
109
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
110
+ await ApiController._fetchNetworkImage(imageId);
111
+ expect(fetchSpy).toHaveBeenCalledWith({
112
+ path: `${api.baseUrl}/public/getAssetImage/${imageId}`,
113
+ params: ApiController._getSdkProperties()
114
+ });
115
+ // Cannot exactly recreate the object url
116
+ expect(AssetController.state.networkImages[imageId]).toMatch(/^blob:/u);
117
+ });
118
+ it('should fetch connector image and update AssetController state correctly', async () => {
119
+ const imageId = '123';
120
+ const image = 'image.jpg';
121
+ const blob = new Blob([image]);
122
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
123
+ await ApiController._fetchConnectorImage(imageId);
124
+ expect(fetchSpy).toHaveBeenCalledWith({
125
+ path: `${api.baseUrl}/public/getAssetImage/${imageId}`,
126
+ params: ApiController._getSdkProperties()
127
+ });
128
+ // Cannot exactly recreate the object url
129
+ expect(AssetController.state.connectorImages[imageId]).toMatch(/^blob:/u);
130
+ });
131
+ it('should fetch currency image and update AssetController state correctly', async () => {
132
+ const countryCode = 'AR';
133
+ const image = 'image.jpg';
134
+ const blob = new Blob([image]);
135
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
136
+ await ApiController._fetchCurrencyImage(countryCode);
137
+ expect(fetchSpy).toHaveBeenCalledWith({
138
+ path: `${api.baseUrl}/public/getCurrencyImage/${countryCode}`,
139
+ params: ApiController._getSdkProperties()
140
+ });
141
+ // Cannot exactly recreate the object url
142
+ expect(AssetController.state.currencyImages[countryCode]).toMatch(/^blob:/u);
143
+ });
144
+ it('should fetch token image and update AssetController state correctly', async () => {
145
+ const symbol = 'AR';
146
+ const image = 'image.jpg';
147
+ const blob = new Blob([image]);
148
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
149
+ await ApiController._fetchTokenImage(symbol);
150
+ expect(fetchSpy).toHaveBeenCalledWith({
151
+ path: `${api.baseUrl}/public/getTokenImage/${symbol}`,
152
+ params: ApiController._getSdkProperties()
153
+ });
154
+ // Cannot exactly recreate the object url
155
+ expect(AssetController.state.tokenImages[symbol]).toMatch(/^blob:/u);
156
+ });
157
+ it('should fetch network images ', async () => {
158
+ const reuqestedCaipNetworks = [
159
+ {
160
+ caipNetworkId: 'eip155:1',
161
+ id: 1,
162
+ name: 'Ethereum Mainnet',
163
+ assets: {
164
+ imageId: '12341',
165
+ imageUrl: ''
166
+ },
167
+ chainNamespace: chain,
168
+ nativeCurrency: {
169
+ name: 'Ethereum',
170
+ decimals: 18,
171
+ symbol: 'ETH'
172
+ },
173
+ rpcUrls: {
174
+ default: {
175
+ http: ['']
176
+ }
177
+ }
178
+ },
179
+ {
180
+ caipNetworkId: 'eip155:4',
181
+ id: 4,
182
+ name: 'Ethereum Rinkeby',
183
+ assets: {
184
+ imageId: '12342',
185
+ imageUrl: ''
186
+ },
187
+ chainNamespace: chain,
188
+ nativeCurrency: {
189
+ name: 'Ethereum',
190
+ decimals: 18,
191
+ symbol: 'ETH'
192
+ },
193
+ rpcUrls: {
194
+ default: {
195
+ http: ['']
196
+ }
197
+ }
198
+ },
199
+ {
200
+ caipNetworkId: 'eip155:42',
201
+ id: 42,
202
+ name: 'Ethereum Kovan',
203
+ chainNamespace: chain,
204
+ nativeCurrency: {
205
+ name: 'Ethereum',
206
+ decimals: 18,
207
+ symbol: 'ETH'
208
+ },
209
+ rpcUrls: {
210
+ default: {
211
+ http: ['']
212
+ }
213
+ }
214
+ }
215
+ ];
216
+ ChainController.initialize([
217
+ {
218
+ namespace: ConstantsUtil.CHAIN.EVM,
219
+ caipNetworks: reuqestedCaipNetworks
220
+ }
221
+ ], reuqestedCaipNetworks, {
222
+ connectionControllerClient: vi.fn(),
223
+ networkControllerClient: vi.fn()
224
+ });
225
+ const fetchSpy = vi.spyOn(ApiController, '_fetchNetworkImage').mockResolvedValue();
226
+ await ApiController.fetchNetworkImages();
227
+ // Does not call if imageId is not present
228
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
229
+ });
230
+ it('should only fetch network images for networks with imageIds', async () => {
231
+ ChainController.setRequestedCaipNetworks(networks, chain);
232
+ const fetchSpy = vi.spyOn(ApiController, '_fetchNetworkImage').mockResolvedValue();
233
+ await ApiController.fetchNetworkImages();
234
+ // Does not call if imageId is not present
235
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
236
+ });
237
+ it('should fetch connector images', async () => {
238
+ ConnectorController.setConnectors([
239
+ {
240
+ id: '12341',
241
+ name: 'MetaMask',
242
+ imageId: '12341',
243
+ type: 'INJECTED',
244
+ chain: ConstantsUtil.CHAIN.EVM
245
+ },
246
+ {
247
+ id: '12341',
248
+ name: 'RandomConnector',
249
+ type: 'INJECTED',
250
+ chain: ConstantsUtil.CHAIN.EVM
251
+ }
252
+ ]);
253
+ const fetchSpy = vi.spyOn(ApiController, '_fetchConnectorImage').mockResolvedValue();
254
+ await ApiController.fetchConnectorImages();
255
+ // Does not call if imageId is not present
256
+ expect(fetchSpy).toHaveBeenCalledTimes(1);
257
+ });
258
+ it('should fetch currency images', async () => {
259
+ const currencies = ['USD', 'EUR'];
260
+ const fetchSpy = vi.spyOn(ApiController, '_fetchCurrencyImage').mockResolvedValue();
261
+ await ApiController.fetchCurrencyImages(currencies);
262
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
263
+ });
264
+ it('should fetch token images', async () => {
265
+ const currencies = ['USDC', 'ETH'];
266
+ const fetchSpy = vi.spyOn(ApiController, '_fetchCurrencyImage').mockResolvedValue();
267
+ await ApiController.fetchCurrencyImages(currencies);
268
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
269
+ });
270
+ it('should fetch featured wallets with configured featured wallets', async () => {
271
+ const featuredWalletIds = ['12341', '12342'];
272
+ const data = [
273
+ {
274
+ caipNetworkId: '12341',
275
+ id: 12341,
276
+ name: 'MetaMask',
277
+ image_id: '12341'
278
+ },
279
+ {
280
+ caipNetworkId: '12342',
281
+ id: 12342,
282
+ name: 'RandomWallet',
283
+ image_id: '12342'
284
+ },
285
+ {
286
+ caipNetworkId: '12343',
287
+ id: 12343,
288
+ name: 'RandomWallet'
289
+ }
290
+ ];
291
+ OptionsController.setFeaturedWalletIds(featuredWalletIds);
292
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
293
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
294
+ await ApiController.fetchFeaturedWallets();
295
+ expect(fetchSpy).toHaveBeenCalledWith({
296
+ path: '/getWallets',
297
+ params: {
298
+ ...ApiController._getSdkProperties(),
299
+ page: '1',
300
+ entries: '2',
301
+ include: '12341,12342'
302
+ }
303
+ });
304
+ expect(fetchImageSpy).toHaveBeenCalledTimes(2);
305
+ expect(ApiController.state.featured).toEqual(data);
306
+ });
307
+ it('should not fetch featured wallets without configured featured wallets', async () => {
308
+ OptionsController.setFeaturedWalletIds([]);
309
+ const fetchSpy = vi.spyOn(api, 'get');
310
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
311
+ await ApiController.fetchFeaturedWallets();
312
+ expect(fetchSpy).not.toHaveBeenCalled();
313
+ expect(fetchImageSpy).not.toHaveBeenCalled();
314
+ });
315
+ // Recommended wallets
316
+ it('should fetch recommended wallets with configured recommended wallets', async () => {
317
+ const includeWalletIds = ['12341', '12342'];
318
+ const excludeWalletIds = ['12343'];
319
+ const featuredWalletIds = ['12344'];
320
+ const data = [
321
+ {
322
+ caipNetworkId: '12341',
323
+ id: 12341,
324
+ name: 'MetaMask',
325
+ image_id: '12341'
326
+ },
327
+ {
328
+ caipNetworkId: '12342',
329
+ id: 12342,
330
+ name: 'RandomWallet',
331
+ image_id: '12342'
332
+ },
333
+ {
334
+ caipNetworkId: '12343',
335
+ id: 12343,
336
+ name: 'RandomWallet'
337
+ }
338
+ ];
339
+ OptionsController.setIncludeWalletIds(includeWalletIds);
340
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
341
+ OptionsController.setFeaturedWalletIds(featuredWalletIds);
342
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data, count: data.length });
343
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
344
+ await ApiController.fetchRecommendedWallets();
345
+ expect(fetchSpy).toHaveBeenCalledWith({
346
+ path: '/getWallets',
347
+ params: {
348
+ ...ApiController._getSdkProperties(),
349
+ chains: 'eip155:1,eip155:4,eip155:42',
350
+ page: '1',
351
+ // Fixed to recommendedEntries
352
+ entries: '4',
353
+ include: '12341,12342',
354
+ exclude: '12343,12344'
355
+ }
356
+ });
357
+ expect(fetchImageSpy).toHaveBeenCalledTimes(2);
358
+ expect(ApiController.state.recommended).toEqual(data);
359
+ expect(ApiController.state.count).toBe(data.length);
360
+ });
361
+ it('should fetch recommended wallet images without configured recommended wallets', async () => {
362
+ OptionsController.setIncludeWalletIds([]);
363
+ OptionsController.setExcludeWalletIds([]);
364
+ OptionsController.setFeaturedWalletIds([]);
365
+ ApiController.state.recommended = [];
366
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data: [], count: 0 });
367
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
368
+ await ApiController.fetchRecommendedWallets();
369
+ expect(fetchSpy).toHaveBeenCalledWith({
370
+ path: '/getWallets',
371
+ params: {
372
+ ...ApiController._getSdkProperties(),
373
+ chains: 'eip155:1,eip155:4,eip155:42',
374
+ page: '1',
375
+ entries: '4',
376
+ include: '',
377
+ exclude: ''
378
+ }
379
+ });
380
+ expect(fetchImageSpy).not.toHaveBeenCalled();
381
+ });
382
+ // Fetch wallets
383
+ it('should fetch wallets with configured recommended wallets', async () => {
384
+ const includeWalletIds = ['12341', '12342'];
385
+ const excludeWalletIds = ['12343'];
386
+ const featuredWalletIds = ['12344'];
387
+ const data = [
388
+ {
389
+ caipNetworkId: '12341',
390
+ id: 12341,
391
+ name: 'MetaMask',
392
+ image_id: '12341'
393
+ },
394
+ {
395
+ caipNetworkId: '12342',
396
+ id: 12342,
397
+ name: 'RandomWallet',
398
+ image_id: '12342'
399
+ }
400
+ ];
401
+ OptionsController.setIncludeWalletIds(includeWalletIds);
402
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
403
+ OptionsController.setFeaturedWalletIds(featuredWalletIds);
404
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data, count: data.length });
405
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
406
+ await ApiController.fetchWallets({ page: 1 });
407
+ expect(fetchSpy).toHaveBeenCalledWith({
408
+ path: '/getWallets',
409
+ params: {
410
+ ...ApiController._getSdkProperties(),
411
+ page: '1',
412
+ chains: 'eip155:1,eip155:4,eip155:42',
413
+ entries: '40',
414
+ include: '12341,12342',
415
+ exclude: '12343,12344'
416
+ }
417
+ });
418
+ expect(fetchImageSpy).toHaveBeenCalledTimes(2);
419
+ expect(ApiController.state.wallets).toEqual(data);
420
+ });
421
+ it('should fetch excludedWalletIds and check if RDNS of EIP6963 matches', async () => {
422
+ const excludeWalletIds = ['12345', '12346'];
423
+ const EIP6963Wallets = [
424
+ { name: 'MetaMask', rdns: 'io.metamask' },
425
+ { name: 'Rainbow', rdns: 'me.rainbow' }
426
+ ];
427
+ const filteredWallet = [{ name: 'Rainbow', rdns: 'me.rainbow' }];
428
+ const data = [
429
+ {
430
+ caipNetworkId: '12345',
431
+ id: 12345,
432
+ name: 'MetaMask',
433
+ rdns: 'io.metamask'
434
+ },
435
+ {
436
+ caipNetworkId: '12346',
437
+ id: 12346,
438
+ name: 'Phantom',
439
+ rdns: 'app.phantom'
440
+ }
441
+ ];
442
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
443
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data, count: data.length });
444
+ const fetchWalletsSpy = vi.spyOn(ApiController, 'initializeExcludedWalletRdns');
445
+ await ApiController.initializeExcludedWalletRdns({ ids: excludeWalletIds });
446
+ expect(fetchSpy).toHaveBeenCalledWith({
447
+ path: '/getWallets',
448
+ params: {
449
+ ...ApiController._getSdkProperties(),
450
+ page: '1',
451
+ badge_type: undefined,
452
+ chains: 'eip155:1,eip155:4,eip155:42',
453
+ entries: String(excludeWalletIds.length),
454
+ include: excludeWalletIds.join(',')
455
+ }
456
+ });
457
+ expect(fetchWalletsSpy).toHaveBeenCalledOnce();
458
+ expect(ApiController.state.excludedRDNS).toEqual(['io.metamask', 'app.phantom']);
459
+ const result = EIP6963Wallets.filter(wallet => !ApiController.state.excludedRDNS.includes(wallet.rdns));
460
+ expect(result).toEqual(filteredWallet);
461
+ });
462
+ it('should search wallet with exact wallet name', async () => {
463
+ const includeWalletIds = ['12341', '12342'];
464
+ const excludeWalletIds = ['12343'];
465
+ const data = [
466
+ {
467
+ caipNetworkId: '12341',
468
+ id: 12341,
469
+ name: 'MetaMask',
470
+ image_id: '12341'
471
+ }
472
+ ];
473
+ OptionsController.setIncludeWalletIds(includeWalletIds);
474
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
475
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
476
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
477
+ await ApiController.searchWallet({ search: 'MetaMask' });
478
+ expect(fetchSpy).toHaveBeenCalledWith({
479
+ path: '/getWallets',
480
+ params: {
481
+ ...ApiController._getSdkProperties(),
482
+ page: '1',
483
+ badge_type: undefined,
484
+ chains: 'eip155:1,eip155:4,eip155:42',
485
+ entries: '100',
486
+ search: 'MetaMask',
487
+ include: '12341,12342',
488
+ exclude: '12343'
489
+ }
490
+ });
491
+ expect(fetchImageSpy).toHaveBeenCalledOnce();
492
+ expect(ApiController.state.search).toEqual(data);
493
+ });
494
+ it('should search wallet with whitespace and multiple words', async () => {
495
+ const includeWalletIds = ['12341', '12342'];
496
+ const excludeWalletIds = ['12343'];
497
+ let data = [
498
+ {
499
+ caipNetworkId: '12341',
500
+ id: 12341,
501
+ name: 'MetaMask',
502
+ image_id: '12341'
503
+ }
504
+ ];
505
+ OptionsController.setIncludeWalletIds(includeWalletIds);
506
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
507
+ let fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
508
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
509
+ // Whitespace
510
+ await ApiController.searchWallet({ search: 'MetaMask ' });
511
+ expect(fetchSpy).toHaveBeenCalledWith({
512
+ path: '/getWallets',
513
+ params: {
514
+ ...ApiController._getSdkProperties(),
515
+ page: '1',
516
+ badge_type: undefined,
517
+ chains: 'eip155:1,eip155:4,eip155:42',
518
+ entries: '100',
519
+ search: 'MetaMask',
520
+ include: '12341,12342',
521
+ exclude: '12343'
522
+ }
523
+ });
524
+ expect(fetchImageSpy).toHaveBeenCalledOnce();
525
+ expect(ApiController.state.search).toEqual(data);
526
+ // Leading Whitespace
527
+ await ApiController.searchWallet({ search: ' Metamask' });
528
+ expect(fetchSpy).toHaveBeenCalledWith({
529
+ path: '/getWallets',
530
+ params: {
531
+ ...ApiController._getSdkProperties(),
532
+ page: '1',
533
+ badge_type: undefined,
534
+ chains: 'eip155:1,eip155:4,eip155:42',
535
+ entries: '100',
536
+ search: 'MetaMask',
537
+ include: '12341,12342',
538
+ exclude: '12343'
539
+ }
540
+ });
541
+ expect(ApiController.state.search).toEqual(data);
542
+ // Leading and Trailing Whitespace
543
+ await ApiController.searchWallet({ search: ' Metamask ' });
544
+ expect(fetchSpy).toHaveBeenCalledWith({
545
+ path: '/getWallets',
546
+ params: {
547
+ ...ApiController._getSdkProperties(),
548
+ page: '1',
549
+ badge_type: undefined,
550
+ chains: 'eip155:1,eip155:4,eip155:42',
551
+ entries: '100',
552
+ search: 'MetaMask',
553
+ include: '12341,12342',
554
+ exclude: '12343'
555
+ }
556
+ });
557
+ expect(ApiController.state.search).toEqual(data);
558
+ data = [
559
+ {
560
+ caipNetworkId: '12341',
561
+ id: 12341,
562
+ name: 'Safe Wallet',
563
+ image_id: '12341'
564
+ }
565
+ ];
566
+ fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
567
+ await ApiController.searchWallet({ search: 'Safe Wallet' });
568
+ expect(fetchSpy).toHaveBeenCalledWith({
569
+ path: '/getWallets',
570
+ params: {
571
+ ...ApiController._getSdkProperties(),
572
+ page: '1',
573
+ badge_type: undefined,
574
+ chains: 'eip155:1,eip155:4,eip155:42',
575
+ entries: '100',
576
+ search: 'Safe Wallet',
577
+ include: '12341,12342',
578
+ exclude: '12343'
579
+ }
580
+ });
581
+ expect(ApiController.state.search).toEqual(data);
582
+ });
583
+ // Prefetch
584
+ it('should prefetch without analytics', () => {
585
+ OptionsController.setFeatures({ analytics: false });
586
+ const fetchAnalyticsSpy = vi.spyOn(ApiController, 'fetchAnalyticsConfig');
587
+ ApiController.prefetchAnalyticsConfig();
588
+ expect(fetchAnalyticsSpy).not.toHaveBeenCalled();
589
+ });
590
+ it('should prefetch with analytics', () => {
591
+ OptionsController.setFeatures({ analytics: true });
592
+ const fetchAnalyticsSpy = vi.spyOn(ApiController, 'fetchAnalyticsConfig').mockResolvedValue();
593
+ ApiController.prefetchAnalyticsConfig();
594
+ expect(fetchAnalyticsSpy).toHaveBeenCalledOnce();
595
+ });
596
+ // Fetch analytics config - somehow this is failing
597
+ it.skip('should fetch analytics config', async () => {
598
+ const data = { isAnalyticsEnabled: true };
599
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
600
+ await ApiController.fetchAnalyticsConfig();
601
+ expect(fetchSpy).toHaveBeenCalledWith({
602
+ path: '/getAnalyticsConfig',
603
+ ...ApiController._getSdkProperties()
604
+ });
605
+ expect(ApiController.state.isAnalyticsEnabled).toBe(true);
606
+ });
607
+ });
608
+ //# sourceMappingURL=ApiController.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiController.test.js","sourceRoot":"","sources":["../../../../tests/controllers/ApiController.test.ts"],"names":[],"mappings":"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"}