@reown/appkit-core 0.0.3

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 (181) hide show
  1. package/LICENSE +190 -0
  2. package/dist/esm/exports/index.js +30 -0
  3. package/dist/esm/exports/index.js.map +1 -0
  4. package/dist/esm/exports/react.js +20 -0
  5. package/dist/esm/exports/react.js.map +1 -0
  6. package/dist/esm/src/controllers/AccountController.js +150 -0
  7. package/dist/esm/src/controllers/AccountController.js.map +1 -0
  8. package/dist/esm/src/controllers/ApiController.js +230 -0
  9. package/dist/esm/src/controllers/ApiController.js.map +1 -0
  10. package/dist/esm/src/controllers/AssetController.js +43 -0
  11. package/dist/esm/src/controllers/AssetController.js.map +1 -0
  12. package/dist/esm/src/controllers/BlockchainApiController.js +334 -0
  13. package/dist/esm/src/controllers/BlockchainApiController.js.map +1 -0
  14. package/dist/esm/src/controllers/ChainController.js +289 -0
  15. package/dist/esm/src/controllers/ChainController.js.map +1 -0
  16. package/dist/esm/src/controllers/ConnectionController.js +128 -0
  17. package/dist/esm/src/controllers/ConnectionController.js.map +1 -0
  18. package/dist/esm/src/controllers/ConnectorController.js +111 -0
  19. package/dist/esm/src/controllers/ConnectorController.js.map +1 -0
  20. package/dist/esm/src/controllers/EnsController.js +135 -0
  21. package/dist/esm/src/controllers/EnsController.js.map +1 -0
  22. package/dist/esm/src/controllers/EventsController.js +60 -0
  23. package/dist/esm/src/controllers/EventsController.js.map +1 -0
  24. package/dist/esm/src/controllers/ModalController.js +73 -0
  25. package/dist/esm/src/controllers/ModalController.js.map +1 -0
  26. package/dist/esm/src/controllers/NetworkController.js +236 -0
  27. package/dist/esm/src/controllers/NetworkController.js.map +1 -0
  28. package/dist/esm/src/controllers/OnRampController.js +133 -0
  29. package/dist/esm/src/controllers/OnRampController.js.map +1 -0
  30. package/dist/esm/src/controllers/OptionsController.js +84 -0
  31. package/dist/esm/src/controllers/OptionsController.js.map +1 -0
  32. package/dist/esm/src/controllers/PublicStateController.js +19 -0
  33. package/dist/esm/src/controllers/PublicStateController.js.map +1 -0
  34. package/dist/esm/src/controllers/RouterController.js +101 -0
  35. package/dist/esm/src/controllers/RouterController.js.map +1 -0
  36. package/dist/esm/src/controllers/SendController.js +214 -0
  37. package/dist/esm/src/controllers/SendController.js.map +1 -0
  38. package/dist/esm/src/controllers/SnackController.js +36 -0
  39. package/dist/esm/src/controllers/SnackController.js.map +1 -0
  40. package/dist/esm/src/controllers/SwapController.js +627 -0
  41. package/dist/esm/src/controllers/SwapController.js.map +1 -0
  42. package/dist/esm/src/controllers/ThemeController.js +55 -0
  43. package/dist/esm/src/controllers/ThemeController.js.map +1 -0
  44. package/dist/esm/src/controllers/TooltipController.js +41 -0
  45. package/dist/esm/src/controllers/TooltipController.js.map +1 -0
  46. package/dist/esm/src/controllers/TransactionsController.js +115 -0
  47. package/dist/esm/src/controllers/TransactionsController.js.map +1 -0
  48. package/dist/esm/src/utils/AssetUtil.js +62 -0
  49. package/dist/esm/src/utils/AssetUtil.js.map +1 -0
  50. package/dist/esm/src/utils/ConstantsUtil.js +194 -0
  51. package/dist/esm/src/utils/ConstantsUtil.js.map +1 -0
  52. package/dist/esm/src/utils/CoreHelperUtil.js +238 -0
  53. package/dist/esm/src/utils/CoreHelperUtil.js.map +1 -0
  54. package/dist/esm/src/utils/EnsUtil.js +10 -0
  55. package/dist/esm/src/utils/EnsUtil.js.map +1 -0
  56. package/dist/esm/src/utils/FetchUtil.js +73 -0
  57. package/dist/esm/src/utils/FetchUtil.js.map +1 -0
  58. package/dist/esm/src/utils/OptionsUtil.js +11 -0
  59. package/dist/esm/src/utils/OptionsUtil.js.map +1 -0
  60. package/dist/esm/src/utils/RouterUtil.js +23 -0
  61. package/dist/esm/src/utils/RouterUtil.js.map +1 -0
  62. package/dist/esm/src/utils/StorageUtil.js +107 -0
  63. package/dist/esm/src/utils/StorageUtil.js.map +1 -0
  64. package/dist/esm/src/utils/SwapApiUtil.js +92 -0
  65. package/dist/esm/src/utils/SwapApiUtil.js.map +1 -0
  66. package/dist/esm/src/utils/SwapCalculationUtil.js +74 -0
  67. package/dist/esm/src/utils/SwapCalculationUtil.js.map +1 -0
  68. package/dist/esm/src/utils/TypeUtil.js +2 -0
  69. package/dist/esm/src/utils/TypeUtil.js.map +1 -0
  70. package/dist/esm/tests/constants/OnrampTransactions.js +151 -0
  71. package/dist/esm/tests/constants/OnrampTransactions.js.map +1 -0
  72. package/dist/esm/tests/controllers/AccountController.test.js +82 -0
  73. package/dist/esm/tests/controllers/AccountController.test.js.map +1 -0
  74. package/dist/esm/tests/controllers/ApiController.test.js +532 -0
  75. package/dist/esm/tests/controllers/ApiController.test.js.map +1 -0
  76. package/dist/esm/tests/controllers/AssetController.test.js +92 -0
  77. package/dist/esm/tests/controllers/AssetController.test.js.map +1 -0
  78. package/dist/esm/tests/controllers/ChainController.test.js +70 -0
  79. package/dist/esm/tests/controllers/ChainController.test.js.map +1 -0
  80. package/dist/esm/tests/controllers/ConnectionController.test.js +116 -0
  81. package/dist/esm/tests/controllers/ConnectionController.test.js.map +1 -0
  82. package/dist/esm/tests/controllers/ConnectorController.test.js +133 -0
  83. package/dist/esm/tests/controllers/ConnectorController.test.js.map +1 -0
  84. package/dist/esm/tests/controllers/EnsController.test.js +166 -0
  85. package/dist/esm/tests/controllers/EnsController.test.js.map +1 -0
  86. package/dist/esm/tests/controllers/EventsController.test.js +18 -0
  87. package/dist/esm/tests/controllers/EventsController.test.js.map +1 -0
  88. package/dist/esm/tests/controllers/ModalController.test.js +18 -0
  89. package/dist/esm/tests/controllers/ModalController.test.js.map +1 -0
  90. package/dist/esm/tests/controllers/NetworkController.test.js +134 -0
  91. package/dist/esm/tests/controllers/NetworkController.test.js.map +1 -0
  92. package/dist/esm/tests/controllers/OnRampController.test.js +118 -0
  93. package/dist/esm/tests/controllers/OnRampController.test.js.map +1 -0
  94. package/dist/esm/tests/controllers/OptionsController.test.js +23 -0
  95. package/dist/esm/tests/controllers/OptionsController.test.js.map +1 -0
  96. package/dist/esm/tests/controllers/PublicStateController.test.js +27 -0
  97. package/dist/esm/tests/controllers/PublicStateController.test.js.map +1 -0
  98. package/dist/esm/tests/controllers/RouterController.test.js +76 -0
  99. package/dist/esm/tests/controllers/RouterController.test.js.map +1 -0
  100. package/dist/esm/tests/controllers/SendController.test.js +51 -0
  101. package/dist/esm/tests/controllers/SendController.test.js.map +1 -0
  102. package/dist/esm/tests/controllers/SnackController.test.js +37 -0
  103. package/dist/esm/tests/controllers/SnackController.test.js.map +1 -0
  104. package/dist/esm/tests/controllers/SwapController.test.js +70 -0
  105. package/dist/esm/tests/controllers/SwapController.test.js.map +1 -0
  106. package/dist/esm/tests/controllers/ThemeController.test.js +26 -0
  107. package/dist/esm/tests/controllers/ThemeController.test.js.map +1 -0
  108. package/dist/esm/tests/controllers/TooltipController.test.js +40 -0
  109. package/dist/esm/tests/controllers/TooltipController.test.js.map +1 -0
  110. package/dist/esm/tests/controllers/TransactionsController.test.js +247 -0
  111. package/dist/esm/tests/controllers/TransactionsController.test.js.map +1 -0
  112. package/dist/esm/tests/mocks/SwapController.js +118 -0
  113. package/dist/esm/tests/mocks/SwapController.js.map +1 -0
  114. package/dist/esm/tests/utils/AssetUtil.test.js +87 -0
  115. package/dist/esm/tests/utils/AssetUtil.test.js.map +1 -0
  116. package/dist/esm/tests/utils/CoreHelperUtil.test.js +27 -0
  117. package/dist/esm/tests/utils/CoreHelperUtil.test.js.map +1 -0
  118. package/dist/esm/tests/utils/SwapCalculationUtil.test.js +80 -0
  119. package/dist/esm/tests/utils/SwapCalculationUtil.test.js.map +1 -0
  120. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  121. package/dist/types/exports/index.d.ts +48 -0
  122. package/dist/types/exports/react.d.ts +19 -0
  123. package/dist/types/src/controllers/AccountController.d.ts +59 -0
  124. package/dist/types/src/controllers/ApiController.d.ts +43 -0
  125. package/dist/types/src/controllers/AssetController.d.ts +20 -0
  126. package/dist/types/src/controllers/BlockchainApiController.d.ts +49 -0
  127. package/dist/types/src/controllers/ChainController.d.ts +42 -0
  128. package/dist/types/src/controllers/ConnectionController.d.ts +63 -0
  129. package/dist/types/src/controllers/ConnectorController.d.ts +24 -0
  130. package/dist/types/src/controllers/EnsController.d.ts +21 -0
  131. package/dist/types/src/controllers/EventsController.d.ts +16 -0
  132. package/dist/types/src/controllers/ModalController.d.ts +20 -0
  133. package/dist/types/src/controllers/NetworkController.d.ts +42 -0
  134. package/dist/types/src/controllers/OnRampController.d.ts +53 -0
  135. package/dist/types/src/controllers/OptionsController.d.ts +43 -0
  136. package/dist/types/src/controllers/PublicStateController.d.ts +12 -0
  137. package/dist/types/src/controllers/RouterController.d.ts +55 -0
  138. package/dist/types/src/controllers/SendController.d.ts +42 -0
  139. package/dist/types/src/controllers/SnackController.d.ts +13 -0
  140. package/dist/types/src/controllers/SwapController.d.ts +126 -0
  141. package/dist/types/src/controllers/ThemeController.d.ts +29 -0
  142. package/dist/types/src/controllers/TooltipController.d.ts +24 -0
  143. package/dist/types/src/controllers/TransactionsController.d.ts +25 -0
  144. package/dist/types/src/utils/AssetUtil.d.ts +11 -0
  145. package/dist/types/src/utils/ConstantsUtil.d.ts +45 -0
  146. package/dist/types/src/utils/CoreHelperUtil.d.ts +43 -0
  147. package/dist/types/src/utils/EnsUtil.d.ts +3 -0
  148. package/dist/types/src/utils/FetchUtil.d.ts +26 -0
  149. package/dist/types/src/utils/OptionsUtil.d.ts +4 -0
  150. package/dist/types/src/utils/RouterUtil.d.ts +4 -0
  151. package/dist/types/src/utils/StorageUtil.d.ts +16 -0
  152. package/dist/types/src/utils/SwapApiUtil.d.ts +23 -0
  153. package/dist/types/src/utils/SwapCalculationUtil.d.ts +22 -0
  154. package/dist/types/src/utils/TypeUtil.d.ts +744 -0
  155. package/dist/types/tests/constants/OnrampTransactions.d.ts +138 -0
  156. package/dist/types/tests/controllers/AccountController.test.d.ts +1 -0
  157. package/dist/types/tests/controllers/ApiController.test.d.ts +1 -0
  158. package/dist/types/tests/controllers/AssetController.test.d.ts +1 -0
  159. package/dist/types/tests/controllers/ChainController.test.d.ts +1 -0
  160. package/dist/types/tests/controllers/ConnectionController.test.d.ts +1 -0
  161. package/dist/types/tests/controllers/ConnectorController.test.d.ts +1 -0
  162. package/dist/types/tests/controllers/EnsController.test.d.ts +1 -0
  163. package/dist/types/tests/controllers/EventsController.test.d.ts +1 -0
  164. package/dist/types/tests/controllers/ModalController.test.d.ts +1 -0
  165. package/dist/types/tests/controllers/NetworkController.test.d.ts +1 -0
  166. package/dist/types/tests/controllers/OnRampController.test.d.ts +1 -0
  167. package/dist/types/tests/controllers/OptionsController.test.d.ts +1 -0
  168. package/dist/types/tests/controllers/PublicStateController.test.d.ts +1 -0
  169. package/dist/types/tests/controllers/RouterController.test.d.ts +1 -0
  170. package/dist/types/tests/controllers/SendController.test.d.ts +1 -0
  171. package/dist/types/tests/controllers/SnackController.test.d.ts +1 -0
  172. package/dist/types/tests/controllers/SwapController.test.d.ts +1 -0
  173. package/dist/types/tests/controllers/ThemeController.test.d.ts +1 -0
  174. package/dist/types/tests/controllers/TooltipController.test.d.ts +1 -0
  175. package/dist/types/tests/controllers/TransactionsController.test.d.ts +1 -0
  176. package/dist/types/tests/mocks/SwapController.d.ts +74 -0
  177. package/dist/types/tests/utils/AssetUtil.test.d.ts +1 -0
  178. package/dist/types/tests/utils/CoreHelperUtil.test.d.ts +1 -0
  179. package/dist/types/tests/utils/SwapCalculationUtil.test.d.ts +1 -0
  180. package/package.json +52 -0
  181. package/readme.md +11 -0
@@ -0,0 +1,532 @@
1
+ import { beforeAll, describe, expect, it, vi } from 'vitest';
2
+ import { ApiController, AssetController, ChainController, ConnectorController, NetworkController, OptionsController } from '../../exports/index.js';
3
+ import { api } from '../../src/controllers/ApiController.js';
4
+ import { ConstantsUtil } from '@reown/appkit-common';
5
+ // -- Constants ----------------------------------------------------------------
6
+ const chain = ConstantsUtil.CHAIN.EVM;
7
+ // -- Tests --------------------------------------------------------------------
8
+ beforeAll(() => {
9
+ ChainController.initialize([{ chainNamespace: ConstantsUtil.CHAIN.EVM }]);
10
+ });
11
+ describe('ApiController', () => {
12
+ it('should have valid default state', () => {
13
+ expect(ApiController.state).toEqual({
14
+ page: 1,
15
+ count: 0,
16
+ featured: [],
17
+ recommended: [],
18
+ wallets: [],
19
+ search: [],
20
+ isAnalyticsEnabled: false,
21
+ excludedRDNS: []
22
+ });
23
+ });
24
+ it('should fetch wallet image and update AssetController state correctly', async () => {
25
+ const imageId = '123';
26
+ const image = 'image.jpg';
27
+ const blob = new Blob([image]);
28
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
29
+ await ApiController._fetchWalletImage(imageId);
30
+ expect(fetchSpy).toHaveBeenCalledWith({
31
+ path: `${api.baseUrl}/getWalletImage/${imageId}`,
32
+ headers: ApiController._getApiHeaders()
33
+ });
34
+ // Cannot exactly recreate the object url
35
+ expect(AssetController.state.walletImages[imageId]).toMatch(/^blob:/u);
36
+ });
37
+ it('should fetch network image and update AssetController state correctly', async () => {
38
+ const imageId = '123';
39
+ const image = 'image.jpg';
40
+ const blob = new Blob([image]);
41
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
42
+ await ApiController._fetchNetworkImage(imageId);
43
+ expect(fetchSpy).toHaveBeenCalledWith({
44
+ path: `${api.baseUrl}/public/getAssetImage/${imageId}`,
45
+ headers: ApiController._getApiHeaders()
46
+ });
47
+ // Cannot exactly recreate the object url
48
+ expect(AssetController.state.networkImages[imageId]).toMatch(/^blob:/u);
49
+ });
50
+ it('should fetch connector image and update AssetController state correctly', async () => {
51
+ const imageId = '123';
52
+ const image = 'image.jpg';
53
+ const blob = new Blob([image]);
54
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
55
+ await ApiController._fetchConnectorImage(imageId);
56
+ expect(fetchSpy).toHaveBeenCalledWith({
57
+ path: `${api.baseUrl}/public/getAssetImage/${imageId}`,
58
+ headers: ApiController._getApiHeaders()
59
+ });
60
+ // Cannot exactly recreate the object url
61
+ expect(AssetController.state.connectorImages[imageId]).toMatch(/^blob:/u);
62
+ });
63
+ it('should fetch currency image and update AssetController state correctly', async () => {
64
+ const countryCode = 'AR';
65
+ const image = 'image.jpg';
66
+ const blob = new Blob([image]);
67
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
68
+ await ApiController._fetchCurrencyImage(countryCode);
69
+ expect(fetchSpy).toHaveBeenCalledWith({
70
+ path: `${api.baseUrl}/public/getCurrencyImage/${countryCode}`,
71
+ headers: ApiController._getApiHeaders()
72
+ });
73
+ // Cannot exactly recreate the object url
74
+ expect(AssetController.state.currencyImages[countryCode]).toMatch(/^blob:/u);
75
+ });
76
+ it('should fetch token image and update AssetController state correctly', async () => {
77
+ const symbol = 'AR';
78
+ const image = 'image.jpg';
79
+ const blob = new Blob([image]);
80
+ const fetchSpy = vi.spyOn(api, 'getBlob').mockResolvedValueOnce(blob);
81
+ await ApiController._fetchTokenImage(symbol);
82
+ expect(fetchSpy).toHaveBeenCalledWith({
83
+ path: `${api.baseUrl}/public/getTokenImage/${symbol}`,
84
+ headers: ApiController._getApiHeaders()
85
+ });
86
+ // Cannot exactly recreate the object url
87
+ expect(AssetController.state.tokenImages[symbol]).toMatch(/^blob:/u);
88
+ });
89
+ it('should fetch network images ', async () => {
90
+ NetworkController.setRequestedCaipNetworks([
91
+ {
92
+ id: 'eip155:1',
93
+ name: 'Ethereum Mainnet',
94
+ imageId: '12341',
95
+ chainNamespace: chain,
96
+ chainId: '1',
97
+ currency: 'ETH',
98
+ explorerUrl: 'https://explorer.ethereum.org',
99
+ rpcUrl: 'https://rpc.ethereum.org'
100
+ },
101
+ {
102
+ id: 'eip155:4',
103
+ name: 'Ethereum Rinkeby',
104
+ imageId: '12342',
105
+ chainNamespace: chain,
106
+ chainId: '4',
107
+ currency: 'ETH',
108
+ explorerUrl: 'https://explorer.ethereum.org',
109
+ rpcUrl: 'https://rpc.ethereum.org'
110
+ },
111
+ {
112
+ id: 'eip155:42',
113
+ name: 'Ethereum Kovan',
114
+ chainNamespace: chain,
115
+ chainId: '42',
116
+ currency: 'ETH',
117
+ explorerUrl: 'https://explorer.ethereum.org',
118
+ rpcUrl: 'https://rpc.ethereum.org'
119
+ }
120
+ ], chain);
121
+ const fetchSpy = vi.spyOn(ApiController, '_fetchNetworkImage').mockResolvedValue();
122
+ await ApiController.fetchNetworkImages();
123
+ // Does not call if imageId is not present
124
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
125
+ });
126
+ it('should only fetch network images for networks with imageIds', async () => {
127
+ NetworkController.setRequestedCaipNetworks([
128
+ {
129
+ id: 'eip155:1',
130
+ name: 'Ethereum Mainnet',
131
+ imageId: '12341',
132
+ chainNamespace: chain,
133
+ chainId: '1',
134
+ currency: 'ETH',
135
+ explorerUrl: 'https://explorer.ethereum.org',
136
+ rpcUrl: 'https://rpc.ethereum.org'
137
+ },
138
+ {
139
+ id: 'eip155:4',
140
+ name: 'Ethereum Rinkeby',
141
+ imageId: '12342',
142
+ chainNamespace: chain,
143
+ chainId: '4',
144
+ currency: 'ETH',
145
+ explorerUrl: 'https://explorer.ethereum.org',
146
+ rpcUrl: 'https://rpc.ethereum.org'
147
+ },
148
+ {
149
+ id: 'eip155:42',
150
+ name: 'Ethereum Kovan',
151
+ chainNamespace: chain,
152
+ chainId: '42',
153
+ currency: 'ETH',
154
+ explorerUrl: 'https://explorer.ethereum.org',
155
+ rpcUrl: 'https://rpc.ethereum.org'
156
+ }
157
+ ], chain);
158
+ const fetchSpy = vi.spyOn(ApiController, '_fetchNetworkImage').mockResolvedValue();
159
+ await ApiController.fetchNetworkImages();
160
+ // Does not call if imageId is not present
161
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
162
+ });
163
+ it('should fetch connector images', async () => {
164
+ ConnectorController.setConnectors([
165
+ {
166
+ id: '12341',
167
+ name: 'MetaMask',
168
+ imageId: '12341',
169
+ type: 'INJECTED',
170
+ chain: ConstantsUtil.CHAIN.EVM
171
+ },
172
+ {
173
+ id: '12341',
174
+ name: 'RandomConnector',
175
+ type: 'INJECTED',
176
+ chain: ConstantsUtil.CHAIN.EVM
177
+ }
178
+ ]);
179
+ const fetchSpy = vi.spyOn(ApiController, '_fetchConnectorImage').mockResolvedValue();
180
+ await ApiController.fetchConnectorImages();
181
+ // Does not call if imageId is not present
182
+ expect(fetchSpy).toHaveBeenCalledTimes(1);
183
+ });
184
+ it('should fetch currency images', async () => {
185
+ const currencies = ['USD', 'EUR'];
186
+ const fetchSpy = vi.spyOn(ApiController, '_fetchCurrencyImage').mockResolvedValue();
187
+ await ApiController.fetchCurrencyImages(currencies);
188
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
189
+ });
190
+ it('should fetch token images', async () => {
191
+ const currencies = ['USDC', 'ETH'];
192
+ const fetchSpy = vi.spyOn(ApiController, '_fetchCurrencyImage').mockResolvedValue();
193
+ await ApiController.fetchCurrencyImages(currencies);
194
+ expect(fetchSpy).toHaveBeenCalledTimes(2);
195
+ });
196
+ it('should fetch featured wallets with configured featured wallets', async () => {
197
+ const featuredWalletIds = ['12341', '12342'];
198
+ const data = [
199
+ {
200
+ id: '12341',
201
+ name: 'MetaMask',
202
+ image_id: '12341'
203
+ },
204
+ {
205
+ id: '12342',
206
+ name: 'RandomWallet',
207
+ image_id: '12342'
208
+ },
209
+ {
210
+ id: '12343',
211
+ name: 'RandomWallet'
212
+ }
213
+ ];
214
+ OptionsController.setFeaturedWalletIds(featuredWalletIds);
215
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
216
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
217
+ await ApiController.fetchFeaturedWallets();
218
+ expect(fetchSpy).toHaveBeenCalledWith({
219
+ path: '/getWallets',
220
+ headers: ApiController._getApiHeaders(),
221
+ params: {
222
+ page: '1',
223
+ entries: '2',
224
+ include: '12341,12342'
225
+ }
226
+ });
227
+ expect(fetchImageSpy).toHaveBeenCalledTimes(2);
228
+ expect(ApiController.state.featured).toEqual(data);
229
+ });
230
+ it('should not fetch featured wallets without configured featured wallets', async () => {
231
+ OptionsController.setFeaturedWalletIds([]);
232
+ const fetchSpy = vi.spyOn(api, 'get');
233
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
234
+ await ApiController.fetchFeaturedWallets();
235
+ expect(fetchSpy).not.toHaveBeenCalled();
236
+ expect(fetchImageSpy).not.toHaveBeenCalled();
237
+ });
238
+ // Recommended wallets
239
+ it('should fetch recommended wallets with configured recommended wallets', async () => {
240
+ const includeWalletIds = ['12341', '12342'];
241
+ const excludeWalletIds = ['12343'];
242
+ const featuredWalletIds = ['12344'];
243
+ const data = [
244
+ {
245
+ id: '12341',
246
+ name: 'MetaMask',
247
+ image_id: '12341'
248
+ },
249
+ {
250
+ id: '12342',
251
+ name: 'RandomWallet',
252
+ image_id: '12342'
253
+ },
254
+ {
255
+ id: '12343',
256
+ name: 'RandomWallet'
257
+ }
258
+ ];
259
+ OptionsController.setIncludeWalletIds(includeWalletIds);
260
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
261
+ OptionsController.setFeaturedWalletIds(featuredWalletIds);
262
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data, count: data.length });
263
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
264
+ await ApiController.fetchRecommendedWallets();
265
+ expect(fetchSpy).toHaveBeenCalledWith({
266
+ path: '/getWallets',
267
+ headers: ApiController._getApiHeaders(),
268
+ params: {
269
+ page: '1',
270
+ // Fixed to recommendedEntries
271
+ entries: '4',
272
+ include: '12341,12342',
273
+ exclude: '12343,12344'
274
+ }
275
+ });
276
+ expect(fetchImageSpy).toHaveBeenCalledTimes(2);
277
+ expect(ApiController.state.recommended).toEqual(data);
278
+ expect(ApiController.state.count).toBe(data.length);
279
+ });
280
+ it('should fetch recommended wallet images without configured recommended wallets', async () => {
281
+ OptionsController.setIncludeWalletIds([]);
282
+ OptionsController.setExcludeWalletIds([]);
283
+ OptionsController.setFeaturedWalletIds([]);
284
+ ApiController.state.recommended = [];
285
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data: [], count: 0 });
286
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
287
+ await ApiController.fetchRecommendedWallets();
288
+ expect(fetchSpy).toHaveBeenCalledWith({
289
+ path: '/getWallets',
290
+ headers: ApiController._getApiHeaders(),
291
+ params: {
292
+ page: '1',
293
+ entries: '4',
294
+ include: '',
295
+ exclude: ''
296
+ }
297
+ });
298
+ expect(fetchImageSpy).not.toHaveBeenCalled();
299
+ });
300
+ // Fetch wallets
301
+ it('should fetch wallets with configured recommended wallets', async () => {
302
+ const includeWalletIds = ['12341', '12342'];
303
+ const excludeWalletIds = ['12343'];
304
+ const featuredWalletIds = ['12344'];
305
+ const data = [
306
+ {
307
+ id: '12341',
308
+ name: 'MetaMask',
309
+ image_id: '12341'
310
+ },
311
+ {
312
+ id: '12342',
313
+ name: 'RandomWallet',
314
+ image_id: '12342'
315
+ }
316
+ ];
317
+ OptionsController.setIncludeWalletIds(includeWalletIds);
318
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
319
+ OptionsController.setFeaturedWalletIds(featuredWalletIds);
320
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data, count: data.length });
321
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
322
+ await ApiController.fetchWallets({ page: 1 });
323
+ expect(fetchSpy).toHaveBeenCalledWith({
324
+ path: '/getWallets',
325
+ headers: ApiController._getApiHeaders(),
326
+ params: {
327
+ page: '1',
328
+ entries: '40',
329
+ include: '12341,12342',
330
+ exclude: '12343,12344'
331
+ }
332
+ });
333
+ expect(fetchImageSpy).toHaveBeenCalledTimes(2);
334
+ expect(ApiController.state.wallets).toEqual(data);
335
+ });
336
+ it('should fetch excludedWalletIds and check if RDNS of EIP6963 matches', async () => {
337
+ const excludeWalletIds = ['12345', '12346'];
338
+ const EIP6963Wallets = [
339
+ { name: 'MetaMask', rdns: 'io.metamask' },
340
+ { name: 'Rainbow', rdns: 'me.rainbow' }
341
+ ];
342
+ const filteredWallet = [{ name: 'Rainbow', rdns: 'me.rainbow' }];
343
+ const data = [
344
+ {
345
+ id: '12345',
346
+ name: 'MetaMask',
347
+ rdns: 'io.metamask'
348
+ },
349
+ {
350
+ id: '12346',
351
+ name: 'Phantom',
352
+ rdns: 'app.phantom'
353
+ }
354
+ ];
355
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
356
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data, count: data.length });
357
+ const fetchWalletsSpy = vi.spyOn(ApiController, 'searchWalletByIds');
358
+ await ApiController.searchWalletByIds({ ids: excludeWalletIds });
359
+ expect(fetchSpy).toHaveBeenCalledWith({
360
+ path: '/getWallets',
361
+ headers: ApiController._getApiHeaders(),
362
+ params: {
363
+ page: '1',
364
+ entries: String(excludeWalletIds.length),
365
+ include: excludeWalletIds.join(',')
366
+ }
367
+ });
368
+ expect(fetchWalletsSpy).toHaveBeenCalledOnce();
369
+ expect(ApiController.state.excludedRDNS).toEqual(['io.metamask', 'app.phantom']);
370
+ const result = EIP6963Wallets.filter(wallet => !ApiController.state.excludedRDNS.includes(wallet.rdns));
371
+ expect(result).toEqual(filteredWallet);
372
+ });
373
+ // Wallet search with exact wallet name
374
+ it('should search wallet with search term', async () => {
375
+ const includeWalletIds = ['12341', '12342'];
376
+ const excludeWalletIds = ['12343'];
377
+ const data = [
378
+ {
379
+ id: '12341',
380
+ name: 'MetaMask',
381
+ image_id: '12341'
382
+ }
383
+ ];
384
+ OptionsController.setIncludeWalletIds(includeWalletIds);
385
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
386
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
387
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
388
+ await ApiController.searchWallet({ search: 'MetaMask' });
389
+ expect(fetchSpy).toHaveBeenCalledWith({
390
+ path: '/getWallets',
391
+ headers: ApiController._getApiHeaders(),
392
+ params: {
393
+ page: '1',
394
+ entries: '100',
395
+ search: 'MetaMask',
396
+ include: '12341,12342',
397
+ exclude: '12343'
398
+ }
399
+ });
400
+ expect(fetchImageSpy).toHaveBeenCalledOnce();
401
+ expect(ApiController.state.search).toEqual(data);
402
+ });
403
+ // Wallet search with whitespace and multiple words
404
+ it('should search wallet with search term', async () => {
405
+ const includeWalletIds = ['12341', '12342'];
406
+ const excludeWalletIds = ['12343'];
407
+ let data = [
408
+ {
409
+ id: '12341',
410
+ name: 'MetaMask',
411
+ image_id: '12341'
412
+ }
413
+ ];
414
+ OptionsController.setIncludeWalletIds(includeWalletIds);
415
+ OptionsController.setExcludeWalletIds(excludeWalletIds);
416
+ let fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
417
+ const fetchImageSpy = vi.spyOn(ApiController, '_fetchWalletImage').mockResolvedValue();
418
+ // Whitespace
419
+ await ApiController.searchWallet({ search: 'MetaMask ' });
420
+ expect(fetchSpy).toHaveBeenCalledWith({
421
+ path: '/getWallets',
422
+ headers: ApiController._getApiHeaders(),
423
+ params: {
424
+ page: '1',
425
+ entries: '100',
426
+ search: 'MetaMask',
427
+ include: '12341,12342',
428
+ exclude: '12343'
429
+ }
430
+ });
431
+ expect(fetchImageSpy).toHaveBeenCalledOnce();
432
+ expect(ApiController.state.search).toEqual(data);
433
+ // Leading Whitespace
434
+ await ApiController.searchWallet({ search: ' Metamask' });
435
+ expect(fetchSpy).toHaveBeenCalledWith({
436
+ path: '/getWallets',
437
+ headers: ApiController._getApiHeaders(),
438
+ params: {
439
+ page: '1',
440
+ entries: '100',
441
+ search: 'MetaMask',
442
+ include: '12341,12342',
443
+ exclude: '12343'
444
+ }
445
+ });
446
+ expect(ApiController.state.search).toEqual(data);
447
+ // Leading and Trailing Whitespace
448
+ await ApiController.searchWallet({ search: ' Metamask ' });
449
+ expect(fetchSpy).toHaveBeenCalledWith({
450
+ path: '/getWallets',
451
+ headers: ApiController._getApiHeaders(),
452
+ params: {
453
+ page: '1',
454
+ entries: '100',
455
+ search: 'MetaMask',
456
+ include: '12341,12342',
457
+ exclude: '12343'
458
+ }
459
+ });
460
+ expect(ApiController.state.search).toEqual(data);
461
+ data = [
462
+ {
463
+ id: '12341',
464
+ name: 'Safe Wallet',
465
+ image_id: '12341'
466
+ }
467
+ ];
468
+ fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
469
+ await ApiController.searchWallet({ search: 'Safe Wallet' });
470
+ expect(fetchSpy).toHaveBeenCalledWith({
471
+ path: '/getWallets',
472
+ headers: ApiController._getApiHeaders(),
473
+ params: {
474
+ page: '1',
475
+ entries: '100',
476
+ search: 'Safe Wallet',
477
+ include: '12341,12342',
478
+ exclude: '12343'
479
+ }
480
+ });
481
+ expect(ApiController.state.search).toEqual(data);
482
+ });
483
+ // Prefetch
484
+ it('should prefetch without analytics', () => {
485
+ OptionsController.setFeatures({ analytics: false });
486
+ const fetchFeaturedSpy = vi.spyOn(ApiController, 'fetchFeaturedWallets').mockResolvedValue();
487
+ const fetchNetworkImagesSpy = vi.spyOn(ApiController, 'fetchNetworkImages').mockResolvedValue();
488
+ const recommendedWalletsSpy = vi
489
+ .spyOn(ApiController, 'fetchRecommendedWallets')
490
+ .mockResolvedValue();
491
+ const fetchConnectorImagesSpy = vi
492
+ .spyOn(ApiController, 'fetchConnectorImages')
493
+ .mockResolvedValue();
494
+ const fetchAnalyticsSpy = vi.spyOn(ApiController, 'fetchAnalyticsConfig');
495
+ ApiController.prefetch();
496
+ expect(fetchAnalyticsSpy).not.toHaveBeenCalled();
497
+ expect(fetchFeaturedSpy).toHaveBeenCalledOnce();
498
+ expect(fetchNetworkImagesSpy).toHaveBeenCalledOnce();
499
+ expect(recommendedWalletsSpy).toHaveBeenCalledOnce();
500
+ expect(fetchConnectorImagesSpy).toHaveBeenCalledOnce();
501
+ });
502
+ it('should prefetch with analytics', () => {
503
+ OptionsController.setFeatures({ analytics: true });
504
+ const fetchSpy = vi.spyOn(ApiController, 'fetchFeaturedWallets').mockResolvedValue();
505
+ const fetchNetworkImagesSpy = vi.spyOn(ApiController, 'fetchNetworkImages').mockResolvedValue();
506
+ const recommendedWalletsSpy = vi
507
+ .spyOn(ApiController, 'fetchRecommendedWallets')
508
+ .mockResolvedValue();
509
+ const fetchConnectorImagesSpy = vi
510
+ .spyOn(ApiController, 'fetchConnectorImages')
511
+ .mockResolvedValue();
512
+ const fetchAnalyticsSpy = vi.spyOn(ApiController, 'fetchAnalyticsConfig').mockResolvedValue();
513
+ ApiController.prefetch();
514
+ expect(fetchAnalyticsSpy).toHaveBeenCalledOnce();
515
+ expect(fetchSpy).toHaveBeenCalledOnce();
516
+ expect(fetchNetworkImagesSpy).toHaveBeenCalledOnce();
517
+ expect(recommendedWalletsSpy).toHaveBeenCalledOnce();
518
+ expect(fetchConnectorImagesSpy).toHaveBeenCalledOnce();
519
+ });
520
+ // Fetch analytics config - somehow this is failing
521
+ it.skip('should fetch analytics config', async () => {
522
+ const data = { isAnalyticsEnabled: true };
523
+ const fetchSpy = vi.spyOn(api, 'get').mockResolvedValue({ data });
524
+ await ApiController.fetchAnalyticsConfig();
525
+ expect(fetchSpy).toHaveBeenCalledWith({
526
+ path: '/getAnalyticsConfig',
527
+ headers: ApiController._getApiHeaders()
528
+ });
529
+ expect(ApiController.state.isAnalyticsEnabled).toBe(true);
530
+ });
531
+ });
532
+ //# sourceMappingURL=ApiController.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiController.test.js","sourceRoot":"","sources":["../../../../tests/controllers/ApiController.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,wCAAwC,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,gFAAgF;AAChF,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAA;AAErC,gFAAgF;AAChF,SAAS,CAAC,GAAG,EAAE;IACb,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAC3E,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YAClC,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,kBAAkB,EAAE,KAAK;YACzB,YAAY,EAAE,EAAE;SACjB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,OAAO,GAAG,KAAK,CAAA;QACrB,MAAM,KAAK,GAAG,WAAW,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAErE,MAAM,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,mBAAmB,OAAO,EAAE;YAChD,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;SACxC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,OAAO,GAAG,KAAK,CAAA;QACrB,MAAM,KAAK,GAAG,WAAW,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAErE,MAAM,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,yBAAyB,OAAO,EAAE;YACtD,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;SACxC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,OAAO,GAAG,KAAK,CAAA;QACrB,MAAM,KAAK,GAAG,WAAW,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAErE,MAAM,aAAa,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,yBAAyB,OAAO,EAAE;YACtD,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;SACxC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC3E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,WAAW,GAAG,IAAI,CAAA;QACxB,MAAM,KAAK,GAAG,WAAW,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAErE,MAAM,aAAa,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,4BAA4B,WAAW,EAAE;YAC7D,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;SACxC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAI,CAAA;QACnB,MAAM,KAAK,GAAG,WAAW,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAErE,MAAM,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,yBAAyB,MAAM,EAAE;YACrD,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;SACxC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,iBAAiB,CAAC,wBAAwB,CACxC;YACE;gBACE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,gBAAgB;gBACtB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,0BAA0B;aACnC;SACF,EACD,KAAK,CACN,CAAA;QACD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAClF,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAA;QAExC,0CAA0C;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,iBAAiB,CAAC,wBAAwB,CACxC;YACE;gBACE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,gBAAgB;gBACtB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,0BAA0B;aACnC;SACF,EACD,KAAK,CACN,CAAA;QACD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAClF,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAA;QAExC,0CAA0C;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,mBAAmB,CAAC,aAAa,CAAC;YAChC;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG;aAC/B;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG;aAC/B;SACF,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QACpF,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAA;QAE1C,0CAA0C;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QACnF,MAAM,aAAa,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAEnD,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QACnF,MAAM,aAAa,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAEnD,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG;YACX;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,cAAc;aACrB;SACF,CAAA;QACD,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QACtF,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAA;QAE1C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,aAAa;aACvB;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrC,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAEtF,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAA;QAE1C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACvC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,sBAAsB;IACtB,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG;YACX;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,cAAc;aACrB;SACF,CAAA;QACD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QACvD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QACvD,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAA;QAEzD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrF,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAEtF,MAAM,aAAa,CAAC,uBAAuB,EAAE,CAAA;QAE7C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,8BAA8B;gBAC9B,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,aAAa;aACvB;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QACzC,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QACzC,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAA;QAC1C,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAA;QAEpC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/E,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAEtF,MAAM,aAAa,CAAC,uBAAuB,EAAE,CAAA;QAE7C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ;SACF,CAAC,CAAA;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,gBAAgB;IAChB,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG;YACX;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,OAAO;aAClB;SACF,CAAA;QACD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QACvD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QACvD,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAA;QAEzD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrF,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAEtF,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QAE7C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,aAAa;aACvB;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,MAAM,cAAc,GAAG;YACrB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE;YACzC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;SACxC,CAAA;QACD,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAChE,MAAM,IAAI,GAAG;YACX;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,aAAa;aACpB;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,aAAa;aACpB;SACF,CAAA;QAED,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QAEvD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrF,MAAM,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAA;QAEpE,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAEhE,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBACxC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;aACpC;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAC9C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;QAChF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAClC,MAAM,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAClE,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,uCAAuC;IACvC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,IAAI,GAAG;YACX;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,OAAO;aAClB;SACF,CAAA;QACD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QACvD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QAEvD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAEtF,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;QAExD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAC5C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,mDAAmD;IACnD,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,IAAI,GAAG;YACT;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,OAAO;aAClB;SACF,CAAA;QACD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QACvD,iBAAiB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QAEvD,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/D,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAEtF,aAAa;QACb,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;QAE5D,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAA;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAC5C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEhD,qBAAqB;QACrB,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;QAEzD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAA;QACF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEhD,kCAAkC;QAClC,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;QAE3D,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAA;QACF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEhD,IAAI,GAAG;YACL;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE,OAAO;aAClB;SACF,CAAA;QACD,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;QAE3D,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;YACvC,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAA;QACF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,WAAW;IACX,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,iBAAiB,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACnD,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAC5F,MAAM,qBAAqB,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAC/F,MAAM,qBAAqB,GAAG,EAAE;aAC7B,KAAK,CAAC,aAAa,EAAE,yBAAyB,CAAC;aAC/C,iBAAiB,EAAE,CAAA;QACtB,MAAM,uBAAuB,GAAG,EAAE;aAC/B,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC;aAC5C,iBAAiB,EAAE,CAAA;QAEtB,MAAM,iBAAiB,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;QAEzE,aAAa,CAAC,QAAQ,EAAE,CAAA;QAExB,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAChD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAC/C,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACpD,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACpD,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,EAAE,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,iBAAiB,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QACpF,MAAM,qBAAqB,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAC/F,MAAM,qBAAqB,GAAG,EAAE;aAC7B,KAAK,CAAC,aAAa,EAAE,yBAAyB,CAAC;aAC/C,iBAAiB,EAAE,CAAA;QACtB,MAAM,uBAAuB,GAAG,EAAE;aAC/B,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC;aAC5C,iBAAiB,EAAE,CAAA;QAEtB,MAAM,iBAAiB,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,iBAAiB,EAAE,CAAA;QAE7F,aAAa,CAAC,QAAQ,EAAE,CAAA;QAExB,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACvC,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACpD,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACpD,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,EAAE,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,mDAAmD;IACnD,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,IAAI,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QAEjE,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAA;QAE1C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YACpC,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE;SACxC,CAAC,CAAA;QAEF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,92 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { AssetController } from '../../exports/index.js';
3
+ // -- Constants ----------------------------------------------------------------
4
+ const walletImage = 'w3mWallet.png';
5
+ const walletImage2 = 'w3mWallet2.png';
6
+ const networkImage = 'ethereum.png';
7
+ const networkImage2 = 'polygon.png';
8
+ const connectorImage = 'email-connector.png';
9
+ const connectorImage2 = 'metamask-connector.png';
10
+ const tokenImage = 'eth.png';
11
+ const tokenImage2 = 'usdc.png';
12
+ const currencyImage = 'usd.png';
13
+ const currencyImage2 = 'eur.png';
14
+ const wallet = 'w3m';
15
+ const wallet2 = 'w4m';
16
+ const network = 'ethereum';
17
+ const network2 = 'polygon';
18
+ const connector = 'w3m-email';
19
+ const connector2 = 'mm-connector';
20
+ const token = 'ETH';
21
+ const token2 = 'MATIC';
22
+ const currency = 'USD';
23
+ const currency2 = 'EUR';
24
+ // -- Tests --------------------------------------------------------------------
25
+ describe('AssetController', () => {
26
+ it('should have valid default state', () => {
27
+ expect(AssetController.state).toEqual({
28
+ chainImages: {},
29
+ walletImages: {},
30
+ networkImages: {},
31
+ connectorImages: {},
32
+ tokenImages: {},
33
+ currencyImages: {}
34
+ });
35
+ });
36
+ it('should update state properly on setWalletImage()', () => {
37
+ AssetController.setWalletImage(wallet, walletImage);
38
+ expect(AssetController.state.walletImages).toEqual({ [wallet]: walletImage });
39
+ AssetController.setWalletImage(wallet, walletImage2);
40
+ expect(AssetController.state.walletImages).toEqual({ [wallet]: walletImage2 });
41
+ AssetController.setWalletImage(wallet2, walletImage2);
42
+ expect(AssetController.state.walletImages).toEqual({
43
+ [wallet]: walletImage2,
44
+ [wallet2]: walletImage2
45
+ });
46
+ });
47
+ it('should update state properly on setNetworkImage()', () => {
48
+ AssetController.setNetworkImage(network, networkImage);
49
+ expect(AssetController.state.networkImages).toEqual({ [network]: networkImage });
50
+ AssetController.setNetworkImage(network, networkImage2);
51
+ expect(AssetController.state.networkImages).toEqual({ [network]: networkImage2 });
52
+ AssetController.setNetworkImage(network2, networkImage2);
53
+ expect(AssetController.state.networkImages).toEqual({
54
+ [network]: networkImage2,
55
+ [network2]: networkImage2
56
+ });
57
+ });
58
+ it('should update state properly on setConnectorImage()', () => {
59
+ AssetController.setConnectorImage(connector, connectorImage);
60
+ expect(AssetController.state.connectorImages).toEqual({ [connector]: connectorImage });
61
+ AssetController.setConnectorImage(connector, connectorImage2);
62
+ expect(AssetController.state.connectorImages).toEqual({ [connector]: connectorImage2 });
63
+ AssetController.setConnectorImage(connector2, connectorImage2);
64
+ expect(AssetController.state.connectorImages).toEqual({
65
+ [connector]: connectorImage2,
66
+ [connector2]: connectorImage2
67
+ });
68
+ });
69
+ it('should update state properly on setTokenImage()', () => {
70
+ AssetController.setTokenImage(token, tokenImage);
71
+ expect(AssetController.state.tokenImages).toEqual({ [token]: tokenImage });
72
+ AssetController.setTokenImage(token, tokenImage2);
73
+ expect(AssetController.state.tokenImages).toEqual({ [token]: tokenImage2 });
74
+ AssetController.setTokenImage(token2, tokenImage2);
75
+ expect(AssetController.state.tokenImages).toEqual({
76
+ [token]: tokenImage2,
77
+ [token2]: tokenImage2
78
+ });
79
+ });
80
+ it('should update state properly on setCurrencyImage()', () => {
81
+ AssetController.setCurrencyImage(currency, currencyImage);
82
+ expect(AssetController.state.currencyImages).toEqual({ [currency]: currencyImage });
83
+ AssetController.setCurrencyImage(currency, currencyImage2);
84
+ expect(AssetController.state.currencyImages).toEqual({ [currency]: currencyImage2 });
85
+ AssetController.setCurrencyImage(currency2, currencyImage2);
86
+ expect(AssetController.state.currencyImages).toEqual({
87
+ [currency]: currencyImage2,
88
+ [currency2]: currencyImage2
89
+ });
90
+ });
91
+ });
92
+ //# sourceMappingURL=AssetController.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetController.test.js","sourceRoot":"","sources":["../../../../tests/controllers/AssetController.test.ts"],"names":[],"mappings":"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"}