@metamask-previews/assets-controller 0.0.0-preview-903db2da → 0.0.0-preview-3ec2a74

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 (250) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/AssetsController.cjs +1028 -61
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +229 -83
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +229 -83
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +1024 -59
  9. package/dist/AssetsController.mjs.map +1 -1
  10. package/dist/data-sources/AbstractDataSource.cjs +103 -0
  11. package/dist/data-sources/AbstractDataSource.cjs.map +1 -0
  12. package/dist/data-sources/AbstractDataSource.d.cts +92 -0
  13. package/dist/data-sources/AbstractDataSource.d.cts.map +1 -0
  14. package/dist/data-sources/AbstractDataSource.d.mts +92 -0
  15. package/dist/data-sources/AbstractDataSource.d.mts.map +1 -0
  16. package/dist/data-sources/AbstractDataSource.mjs +99 -0
  17. package/dist/data-sources/AbstractDataSource.mjs.map +1 -0
  18. package/dist/data-sources/AccountsApiDataSource.cjs +421 -0
  19. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -0
  20. package/dist/data-sources/AccountsApiDataSource.d.cts +103 -0
  21. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -0
  22. package/dist/data-sources/AccountsApiDataSource.d.mts +103 -0
  23. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -0
  24. package/dist/data-sources/AccountsApiDataSource.mjs +416 -0
  25. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -0
  26. package/dist/data-sources/BackendWebsocketDataSource.cjs +388 -0
  27. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -0
  28. package/dist/data-sources/BackendWebsocketDataSource.d.cts +95 -0
  29. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -0
  30. package/dist/data-sources/BackendWebsocketDataSource.d.mts +95 -0
  31. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -0
  32. package/dist/data-sources/BackendWebsocketDataSource.mjs +383 -0
  33. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -0
  34. package/dist/data-sources/PriceDataSource.cjs +350 -0
  35. package/dist/data-sources/PriceDataSource.cjs.map +1 -0
  36. package/dist/data-sources/PriceDataSource.d.cts +153 -0
  37. package/dist/data-sources/PriceDataSource.d.cts.map +1 -0
  38. package/dist/data-sources/PriceDataSource.d.mts +153 -0
  39. package/dist/data-sources/PriceDataSource.d.mts.map +1 -0
  40. package/dist/data-sources/PriceDataSource.mjs +346 -0
  41. package/dist/data-sources/PriceDataSource.mjs.map +1 -0
  42. package/dist/data-sources/RpcDataSource.cjs +410 -0
  43. package/dist/data-sources/RpcDataSource.cjs.map +1 -0
  44. package/dist/data-sources/RpcDataSource.d.cts +154 -0
  45. package/dist/data-sources/RpcDataSource.d.cts.map +1 -0
  46. package/dist/data-sources/RpcDataSource.d.mts +154 -0
  47. package/dist/data-sources/RpcDataSource.d.mts.map +1 -0
  48. package/dist/data-sources/RpcDataSource.mjs +405 -0
  49. package/dist/data-sources/RpcDataSource.mjs.map +1 -0
  50. package/dist/data-sources/SnapDataSource.cjs +734 -0
  51. package/dist/data-sources/SnapDataSource.cjs.map +1 -0
  52. package/dist/data-sources/SnapDataSource.d.cts +217 -0
  53. package/dist/data-sources/SnapDataSource.d.cts.map +1 -0
  54. package/dist/data-sources/SnapDataSource.d.mts +217 -0
  55. package/dist/data-sources/SnapDataSource.d.mts.map +1 -0
  56. package/dist/data-sources/SnapDataSource.mjs +723 -0
  57. package/dist/data-sources/SnapDataSource.mjs.map +1 -0
  58. package/dist/data-sources/TokenDataSource.cjs +179 -0
  59. package/dist/data-sources/TokenDataSource.cjs.map +1 -0
  60. package/dist/data-sources/TokenDataSource.d.cts +62 -0
  61. package/dist/data-sources/TokenDataSource.d.cts.map +1 -0
  62. package/dist/data-sources/TokenDataSource.d.mts +62 -0
  63. package/dist/data-sources/TokenDataSource.d.mts.map +1 -0
  64. package/dist/data-sources/TokenDataSource.mjs +175 -0
  65. package/dist/data-sources/TokenDataSource.mjs.map +1 -0
  66. package/dist/data-sources/index.cjs +62 -0
  67. package/dist/data-sources/index.cjs.map +1 -0
  68. package/dist/data-sources/index.d.cts +9 -0
  69. package/dist/data-sources/index.d.cts.map +1 -0
  70. package/dist/data-sources/index.d.mts +9 -0
  71. package/dist/data-sources/index.d.mts.map +1 -0
  72. package/dist/data-sources/index.mjs +23 -0
  73. package/dist/data-sources/index.mjs.map +1 -0
  74. package/dist/data-sources/initDataSources.cjs +199 -0
  75. package/dist/data-sources/initDataSources.cjs.map +1 -0
  76. package/dist/data-sources/initDataSources.d.cts +123 -0
  77. package/dist/data-sources/initDataSources.d.cts.map +1 -0
  78. package/dist/data-sources/initDataSources.d.mts +123 -0
  79. package/dist/data-sources/initDataSources.d.mts.map +1 -0
  80. package/dist/data-sources/initDataSources.mjs +194 -0
  81. package/dist/data-sources/initDataSources.mjs.map +1 -0
  82. package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs +638 -0
  83. package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs.map +1 -0
  84. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts +47 -0
  85. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts.map +1 -0
  86. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts +47 -0
  87. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts.map +1 -0
  88. package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs +632 -0
  89. package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs.map +1 -0
  90. package/dist/data-sources/rpc-datasource/clients/index.cjs +8 -0
  91. package/dist/data-sources/rpc-datasource/clients/index.cjs.map +1 -0
  92. package/dist/data-sources/rpc-datasource/clients/index.d.cts +3 -0
  93. package/dist/data-sources/rpc-datasource/clients/index.d.cts.map +1 -0
  94. package/dist/data-sources/rpc-datasource/clients/index.d.mts +3 -0
  95. package/dist/data-sources/rpc-datasource/clients/index.d.mts.map +1 -0
  96. package/dist/data-sources/rpc-datasource/clients/index.mjs +2 -0
  97. package/dist/data-sources/rpc-datasource/clients/index.mjs.map +1 -0
  98. package/dist/data-sources/rpc-datasource/index.cjs +9 -0
  99. package/dist/data-sources/rpc-datasource/index.cjs.map +1 -0
  100. package/dist/data-sources/rpc-datasource/index.d.cts +4 -0
  101. package/dist/data-sources/rpc-datasource/index.d.cts.map +1 -0
  102. package/dist/data-sources/rpc-datasource/index.d.mts +4 -0
  103. package/dist/data-sources/rpc-datasource/index.d.mts.map +1 -0
  104. package/dist/data-sources/rpc-datasource/index.mjs +3 -0
  105. package/dist/data-sources/rpc-datasource/index.mjs.map +1 -0
  106. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs +167 -0
  107. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs.map +1 -0
  108. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts +16 -0
  109. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts.map +1 -0
  110. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts +16 -0
  111. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts.map +1 -0
  112. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs +163 -0
  113. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs.map +1 -0
  114. package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs +173 -0
  115. package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs.map +1 -0
  116. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts +14 -0
  117. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts.map +1 -0
  118. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts +14 -0
  119. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts.map +1 -0
  120. package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs +169 -0
  121. package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs.map +1 -0
  122. package/dist/data-sources/rpc-datasource/services/index.cjs +8 -0
  123. package/dist/data-sources/rpc-datasource/services/index.cjs.map +1 -0
  124. package/dist/data-sources/rpc-datasource/services/index.d.cts +3 -0
  125. package/dist/data-sources/rpc-datasource/services/index.d.cts.map +1 -0
  126. package/dist/data-sources/rpc-datasource/services/index.d.mts +3 -0
  127. package/dist/data-sources/rpc-datasource/services/index.d.mts.map +1 -0
  128. package/dist/data-sources/rpc-datasource/services/index.mjs +3 -0
  129. package/dist/data-sources/rpc-datasource/services/index.mjs.map +1 -0
  130. package/dist/data-sources/rpc-datasource/types/assets.cjs +3 -0
  131. package/dist/data-sources/rpc-datasource/types/assets.cjs.map +1 -0
  132. package/dist/data-sources/rpc-datasource/types/assets.d.cts +53 -0
  133. package/dist/data-sources/rpc-datasource/types/assets.d.cts.map +1 -0
  134. package/dist/data-sources/rpc-datasource/types/assets.d.mts +53 -0
  135. package/dist/data-sources/rpc-datasource/types/assets.d.mts.map +1 -0
  136. package/dist/data-sources/rpc-datasource/types/assets.mjs +2 -0
  137. package/dist/data-sources/rpc-datasource/types/assets.mjs.map +1 -0
  138. package/dist/data-sources/rpc-datasource/types/config.cjs +3 -0
  139. package/dist/data-sources/rpc-datasource/types/config.cjs.map +1 -0
  140. package/dist/data-sources/rpc-datasource/types/config.d.cts +18 -0
  141. package/dist/data-sources/rpc-datasource/types/config.d.cts.map +1 -0
  142. package/dist/data-sources/rpc-datasource/types/config.d.mts +18 -0
  143. package/dist/data-sources/rpc-datasource/types/config.d.mts.map +1 -0
  144. package/dist/data-sources/rpc-datasource/types/config.mjs +2 -0
  145. package/dist/data-sources/rpc-datasource/types/config.mjs.map +1 -0
  146. package/dist/data-sources/rpc-datasource/types/core.cjs +3 -0
  147. package/dist/data-sources/rpc-datasource/types/core.cjs.map +1 -0
  148. package/dist/data-sources/rpc-datasource/types/core.d.cts +19 -0
  149. package/dist/data-sources/rpc-datasource/types/core.d.cts.map +1 -0
  150. package/dist/data-sources/rpc-datasource/types/core.d.mts +19 -0
  151. package/dist/data-sources/rpc-datasource/types/core.d.mts.map +1 -0
  152. package/dist/data-sources/rpc-datasource/types/core.mjs +2 -0
  153. package/dist/data-sources/rpc-datasource/types/core.mjs.map +1 -0
  154. package/dist/data-sources/rpc-datasource/types/index.cjs +3 -0
  155. package/dist/data-sources/rpc-datasource/types/index.cjs.map +1 -0
  156. package/dist/data-sources/rpc-datasource/types/index.d.cts +7 -0
  157. package/dist/data-sources/rpc-datasource/types/index.d.cts.map +1 -0
  158. package/dist/data-sources/rpc-datasource/types/index.d.mts +7 -0
  159. package/dist/data-sources/rpc-datasource/types/index.d.mts.map +1 -0
  160. package/dist/data-sources/rpc-datasource/types/index.mjs +2 -0
  161. package/dist/data-sources/rpc-datasource/types/index.mjs.map +1 -0
  162. package/dist/data-sources/rpc-datasource/types/multicall.cjs +3 -0
  163. package/dist/data-sources/rpc-datasource/types/multicall.cjs.map +1 -0
  164. package/dist/data-sources/rpc-datasource/types/multicall.d.cts +24 -0
  165. package/dist/data-sources/rpc-datasource/types/multicall.d.cts.map +1 -0
  166. package/dist/data-sources/rpc-datasource/types/multicall.d.mts +24 -0
  167. package/dist/data-sources/rpc-datasource/types/multicall.d.mts.map +1 -0
  168. package/dist/data-sources/rpc-datasource/types/multicall.mjs +2 -0
  169. package/dist/data-sources/rpc-datasource/types/multicall.mjs.map +1 -0
  170. package/dist/data-sources/rpc-datasource/types/services.cjs +3 -0
  171. package/dist/data-sources/rpc-datasource/types/services.cjs.map +1 -0
  172. package/dist/data-sources/rpc-datasource/types/services.d.cts +74 -0
  173. package/dist/data-sources/rpc-datasource/types/services.d.cts.map +1 -0
  174. package/dist/data-sources/rpc-datasource/types/services.d.mts +74 -0
  175. package/dist/data-sources/rpc-datasource/types/services.d.mts.map +1 -0
  176. package/dist/data-sources/rpc-datasource/types/services.mjs +2 -0
  177. package/dist/data-sources/rpc-datasource/types/services.mjs.map +1 -0
  178. package/dist/data-sources/rpc-datasource/types/state.cjs +3 -0
  179. package/dist/data-sources/rpc-datasource/types/state.cjs.map +1 -0
  180. package/dist/data-sources/rpc-datasource/types/state.d.cts +67 -0
  181. package/dist/data-sources/rpc-datasource/types/state.d.cts.map +1 -0
  182. package/dist/data-sources/rpc-datasource/types/state.d.mts +67 -0
  183. package/dist/data-sources/rpc-datasource/types/state.d.mts.map +1 -0
  184. package/dist/data-sources/rpc-datasource/types/state.mjs +2 -0
  185. package/dist/data-sources/rpc-datasource/types/state.mjs.map +1 -0
  186. package/dist/data-sources/rpc-datasource/utils/batch.cjs +45 -0
  187. package/dist/data-sources/rpc-datasource/utils/batch.cjs.map +1 -0
  188. package/dist/data-sources/rpc-datasource/utils/batch.d.cts +28 -0
  189. package/dist/data-sources/rpc-datasource/utils/batch.d.cts.map +1 -0
  190. package/dist/data-sources/rpc-datasource/utils/batch.d.mts +28 -0
  191. package/dist/data-sources/rpc-datasource/utils/batch.d.mts.map +1 -0
  192. package/dist/data-sources/rpc-datasource/utils/batch.mjs +40 -0
  193. package/dist/data-sources/rpc-datasource/utils/batch.mjs.map +1 -0
  194. package/dist/data-sources/rpc-datasource/utils/index.cjs +7 -0
  195. package/dist/data-sources/rpc-datasource/utils/index.cjs.map +1 -0
  196. package/dist/data-sources/rpc-datasource/utils/index.d.cts +2 -0
  197. package/dist/data-sources/rpc-datasource/utils/index.d.cts.map +1 -0
  198. package/dist/data-sources/rpc-datasource/utils/index.d.mts +2 -0
  199. package/dist/data-sources/rpc-datasource/utils/index.d.mts.map +1 -0
  200. package/dist/data-sources/rpc-datasource/utils/index.mjs +2 -0
  201. package/dist/data-sources/rpc-datasource/utils/index.mjs.map +1 -0
  202. package/dist/index.cjs +70 -1
  203. package/dist/index.cjs.map +1 -1
  204. package/dist/index.d.cts +19 -1
  205. package/dist/index.d.cts.map +1 -1
  206. package/dist/index.d.mts +19 -1
  207. package/dist/index.d.mts.map +1 -1
  208. package/dist/index.mjs +31 -0
  209. package/dist/index.mjs.map +1 -1
  210. package/dist/logger.cjs +7 -0
  211. package/dist/logger.cjs.map +1 -0
  212. package/dist/logger.d.cts +5 -0
  213. package/dist/logger.d.cts.map +1 -0
  214. package/dist/logger.d.mts +5 -0
  215. package/dist/logger.d.mts.map +1 -0
  216. package/dist/logger.mjs +4 -0
  217. package/dist/logger.mjs.map +1 -0
  218. package/dist/middlewares/DetectionMiddleware.cjs +101 -0
  219. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -0
  220. package/dist/middlewares/DetectionMiddleware.d.cts +54 -0
  221. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -0
  222. package/dist/middlewares/DetectionMiddleware.d.mts +54 -0
  223. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -0
  224. package/dist/middlewares/DetectionMiddleware.mjs +97 -0
  225. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -0
  226. package/dist/middlewares/index.cjs +6 -0
  227. package/dist/middlewares/index.cjs.map +1 -0
  228. package/dist/middlewares/index.d.cts +2 -0
  229. package/dist/middlewares/index.d.cts.map +1 -0
  230. package/dist/middlewares/index.d.mts +2 -0
  231. package/dist/middlewares/index.d.mts.map +1 -0
  232. package/dist/middlewares/index.mjs +2 -0
  233. package/dist/middlewares/index.mjs.map +1 -0
  234. package/dist/types.cjs +39 -0
  235. package/dist/types.cjs.map +1 -0
  236. package/dist/types.d.cts +360 -0
  237. package/dist/types.d.cts.map +1 -0
  238. package/dist/types.d.mts +360 -0
  239. package/dist/types.d.mts.map +1 -0
  240. package/dist/types.mjs +35 -0
  241. package/dist/types.mjs.map +1 -0
  242. package/dist/utils.cjs +28 -0
  243. package/dist/utils.cjs.map +1 -0
  244. package/dist/utils.d.cts +13 -0
  245. package/dist/utils.d.cts.map +1 -0
  246. package/dist/utils.d.mts +13 -0
  247. package/dist/utils.d.mts.map +1 -0
  248. package/dist/utils.mjs +24 -0
  249. package/dist/utils.mjs.map +1 -0
  250. package/package.json +15 -2
@@ -0,0 +1,175 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _TokenDataSource_instances, _TokenDataSource_messenger, _TokenDataSource_apiClient, _TokenDataSource_getSupportedNetworks, _TokenDataSource_filterAssetsByNetwork, _TokenDataSource_registerActionHandlers;
13
+ import { ApiPlatformClient } from "@metamask/core-backend";
14
+ import { parseCaipAssetType } from "@metamask/utils";
15
+ import { projectLogger, createModuleLogger } from "../logger.mjs";
16
+ import { forDataTypes } from "../types.mjs";
17
+ // ============================================================================
18
+ // CONSTANTS
19
+ // ============================================================================
20
+ const CONTROLLER_NAME = 'TokenDataSource';
21
+ const log = createModuleLogger(projectLogger, CONTROLLER_NAME);
22
+ // ============================================================================
23
+ // HELPER FUNCTIONS
24
+ // ============================================================================
25
+ function transformV3AssetResponseToMetadata(assetId, assetData) {
26
+ const parsed = parseCaipAssetType(assetId);
27
+ let tokenType = 'erc20';
28
+ if (parsed.assetNamespace === 'slip44') {
29
+ tokenType = 'native';
30
+ }
31
+ else if (parsed.assetNamespace === 'spl') {
32
+ tokenType = 'spl';
33
+ }
34
+ return {
35
+ type: tokenType,
36
+ name: assetData.name,
37
+ symbol: assetData.symbol,
38
+ decimals: assetData.decimals,
39
+ image: assetData.iconUrl ?? assetData.iconUrlThumbnail,
40
+ };
41
+ }
42
+ // ============================================================================
43
+ // TOKEN DATA SOURCE
44
+ // ============================================================================
45
+ /**
46
+ * TokenDataSource enriches responses with token metadata from the Tokens API.
47
+ *
48
+ * This middleware-based data source:
49
+ * - Checks detected assets for missing metadata/images
50
+ * - Fetches metadata from Tokens API v3 for assets needing enrichment
51
+ * - Merges fetched metadata into the response
52
+ *
53
+ * Usage:
54
+ * ```typescript
55
+ * // Create and initialize (registers messenger actions)
56
+ * const tokenDataSource = new TokenDataSource({ messenger, queryApiClient });
57
+ *
58
+ * // Later, get middleware via messenger
59
+ * const middleware = messenger.call('TokenDataSource:getAssetsMiddleware');
60
+ * ```
61
+ */
62
+ export class TokenDataSource {
63
+ constructor(options) {
64
+ _TokenDataSource_instances.add(this);
65
+ this.name = CONTROLLER_NAME;
66
+ _TokenDataSource_messenger.set(this, void 0);
67
+ /** ApiPlatformClient for cached API calls */
68
+ _TokenDataSource_apiClient.set(this, void 0);
69
+ __classPrivateFieldSet(this, _TokenDataSource_messenger, options.messenger, "f");
70
+ __classPrivateFieldSet(this, _TokenDataSource_apiClient, options.queryApiClient, "f");
71
+ __classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_registerActionHandlers).call(this);
72
+ }
73
+ /**
74
+ * Get the middleware for enriching responses with token metadata.
75
+ *
76
+ * This middleware:
77
+ * 1. Extracts the response from context
78
+ * 2. Fetches metadata for detected assets (assets without metadata)
79
+ * 3. Enriches the response with fetched metadata
80
+ * 4. Calls next() at the end to continue the middleware chain
81
+ *
82
+ * @returns The middleware function for the assets pipeline.
83
+ */
84
+ get assetsMiddleware() {
85
+ return forDataTypes(['metadata'], async (ctx, next) => {
86
+ // Extract response from context
87
+ const { response } = ctx;
88
+ // Only fetch metadata for detected assets (assets without metadata)
89
+ if (!response.detectedAssets) {
90
+ return next(ctx);
91
+ }
92
+ const { assetsMetadata: stateMetadata } = ctx.getAssetsState();
93
+ const assetIdsNeedingMetadata = new Set();
94
+ for (const detectedIds of Object.values(response.detectedAssets)) {
95
+ for (const assetId of detectedIds) {
96
+ // Skip if response already has metadata with image
97
+ const responseMetadata = response.assetsMetadata?.[assetId];
98
+ if (responseMetadata?.image) {
99
+ continue;
100
+ }
101
+ // Skip if state already has metadata with image
102
+ const existingMetadata = stateMetadata[assetId];
103
+ if (existingMetadata?.image) {
104
+ continue;
105
+ }
106
+ assetIdsNeedingMetadata.add(assetId);
107
+ }
108
+ }
109
+ if (assetIdsNeedingMetadata.size === 0) {
110
+ return next(ctx);
111
+ }
112
+ // Filter asset IDs to only include supported networks
113
+ const supportedNetworks = await __classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_getSupportedNetworks).call(this);
114
+ const supportedAssetIds = __classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_filterAssetsByNetwork).call(this, [...assetIdsNeedingMetadata], supportedNetworks);
115
+ if (supportedAssetIds.length === 0) {
116
+ return next(ctx);
117
+ }
118
+ try {
119
+ // Use ApiPlatformClient for fetching asset metadata
120
+ // API returns an array with assetId as a property on each item
121
+ const metadataResponse = await __classPrivateFieldGet(this, _TokenDataSource_apiClient, "f").tokens.fetchV3Assets(supportedAssetIds);
122
+ response.assetsMetadata ?? (response.assetsMetadata = {});
123
+ for (const assetData of metadataResponse) {
124
+ const caipAssetId = assetData.assetId;
125
+ response.assetsMetadata[caipAssetId] =
126
+ transformV3AssetResponseToMetadata(assetData.assetId, assetData);
127
+ }
128
+ }
129
+ catch (error) {
130
+ log('Failed to fetch metadata', { error });
131
+ }
132
+ // Call next() at the end to continue the middleware chain
133
+ return next(ctx);
134
+ });
135
+ }
136
+ }
137
+ _TokenDataSource_messenger = new WeakMap(), _TokenDataSource_apiClient = new WeakMap(), _TokenDataSource_instances = new WeakSet(), _TokenDataSource_getSupportedNetworks =
138
+ /**
139
+ * Gets the supported networks from the API.
140
+ * Caching is handled by ApiPlatformClient.
141
+ *
142
+ * @returns Set of supported chain IDs in CAIP format
143
+ */
144
+ async function _TokenDataSource_getSupportedNetworks() {
145
+ try {
146
+ // Use v2/supportedNetworks which returns CAIP chain IDs
147
+ // ApiPlatformClient handles caching
148
+ const response = await __classPrivateFieldGet(this, _TokenDataSource_apiClient, "f").tokens.fetchTokenV2SupportedNetworks();
149
+ // Combine full and partial support networks
150
+ const allNetworks = [...response.fullSupport, ...response.partialSupport];
151
+ return new Set(allNetworks);
152
+ }
153
+ catch (error) {
154
+ log('Failed to fetch supported networks', { error });
155
+ return new Set();
156
+ }
157
+ }, _TokenDataSource_filterAssetsByNetwork = function _TokenDataSource_filterAssetsByNetwork(assetIds, supportedNetworks) {
158
+ return assetIds.filter((assetId) => {
159
+ try {
160
+ const parsed = parseCaipAssetType(assetId);
161
+ // chainId is in format "eip155:1" or "tron:728126428"
162
+ // parsed.chain has namespace and reference properties
163
+ const chainId = `${parsed.chain.namespace}:${parsed.chain.reference}`;
164
+ return supportedNetworks.has(chainId);
165
+ }
166
+ catch {
167
+ // If we can't parse the asset ID, filter it out
168
+ return false;
169
+ }
170
+ });
171
+ }, _TokenDataSource_registerActionHandlers = function _TokenDataSource_registerActionHandlers() {
172
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
+ __classPrivateFieldGet(this, _TokenDataSource_messenger, "f").registerActionHandler('TokenDataSource:getAssetsMiddleware', () => this.assetsMiddleware);
174
+ };
175
+ //# sourceMappingURL=TokenDataSource.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenDataSource.mjs","sourceRoot":"","sources":["../../src/data-sources/TokenDataSource.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,iBAAiB,EAAE,+BAA+B;AAE3D,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAGrD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAkB;AAC9D,OAAO,EAAE,YAAY,EAAE,qBAAiB;AAGxC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAyC/D,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,SAAS,kCAAkC,CACzC,OAAe,EACf,SAA0B;IAE1B,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAwB,CAAC,CAAC;IAC5D,IAAI,SAAS,GAA+B,OAAO,CAAC;IAEpD,IAAI,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,SAAS,GAAG,QAAQ,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QAC3C,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,KAAK,EAAE,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,gBAAgB;KACvD,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,eAAe;IAQ1B,YAAY,OAA+B;;QAPlC,SAAI,GAAG,eAAe,CAAC;QAEvB,6CAAqC;QAE9C,6CAA6C;QACpC,6CAA8B;QAGrC,uBAAA,IAAI,8BAAc,OAAO,CAAC,SAAS,MAAA,CAAC;QACpC,uBAAA,IAAI,8BAAc,OAAO,CAAC,cAAc,MAAA,CAAC;QACzC,uBAAA,IAAI,2EAAwB,MAA5B,IAAI,CAA0B,CAAC;IACjC,CAAC;IA0DD;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB;QAClB,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACpD,gCAAgC;YAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;YAEzB,oEAAoE;YACpE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAC/D,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;YAElD,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjE,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;oBAClC,mDAAmD;oBACnD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC5D,IAAI,gBAAgB,EAAE,KAAK,EAAE,CAAC;wBAC5B,SAAS;oBACX,CAAC;oBAED,gDAAgD;oBAChD,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;oBAChD,IAAI,gBAAgB,EAAE,KAAK,EAAE,CAAC;wBAC5B,SAAS;oBACX,CAAC;oBAED,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,IAAI,uBAAuB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,sDAAsD;YACtD,MAAM,iBAAiB,GAAG,MAAM,uBAAA,IAAI,yEAAsB,MAA1B,IAAI,CAAwB,CAAC;YAC7D,MAAM,iBAAiB,GAAG,uBAAA,IAAI,0EAAuB,MAA3B,IAAI,EAC5B,CAAC,GAAG,uBAAuB,CAAC,EAC5B,iBAAiB,CAClB,CAAC;YAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,IAAI,CAAC;gBACH,oDAAoD;gBACpD,+DAA+D;gBAC/D,MAAM,gBAAgB,GACpB,MAAM,uBAAA,IAAI,kCAAW,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBAEhE,QAAQ,CAAC,cAAc,KAAvB,QAAQ,CAAC,cAAc,GAAK,EAAE,EAAC;gBAE/B,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;oBACzC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAwB,CAAC;oBACvD,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;wBAClC,kCAAkC,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,0DAA0D;YAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;AAtIC;;;;;GAKG;AACH,KAAK;IACH,IAAI,CAAC;QACH,wDAAwD;QACxD,oCAAoC;QACpC,MAAM,QAAQ,GACZ,MAAM,uBAAA,IAAI,kCAAW,CAAC,MAAM,CAAC,6BAA6B,EAAE,CAAC;QAE/D,4CAA4C;QAC5C,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE1E,OAAO,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,2FAUC,QAAkB,EAClB,iBAA8B;IAE9B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAwB,CAAC,CAAC;YAC5D,sDAAsD;YACtD,sDAAsD;YACtD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtE,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;IAGC,8DAA8D;IAC7D,uBAAA,IAAI,kCAAmB,CAAC,qBAAqB,CAC5C,qCAAqC,EACrC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAC5B,CAAC;AACJ,CAAC","sourcesContent":["import type { V3AssetResponse } from '@metamask/core-backend';\nimport { ApiPlatformClient } from '@metamask/core-backend';\nimport type { Messenger } from '@metamask/messenger';\nimport { parseCaipAssetType } from '@metamask/utils';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport { projectLogger, createModuleLogger } from '../logger';\nimport { forDataTypes } from '../types';\nimport type { Caip19AssetId, AssetMetadata, Middleware } from '../types';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst CONTROLLER_NAME = 'TokenDataSource';\n\nconst log = createModuleLogger(projectLogger, CONTROLLER_NAME);\n\n// ============================================================================\n// MESSENGER TYPES\n// ============================================================================\n\n/**\n * Action to get the TokenDataSource middleware.\n */\nexport type TokenDataSourceGetAssetsMiddlewareAction = {\n type: `${typeof CONTROLLER_NAME}:getAssetsMiddleware`;\n handler: () => Middleware;\n};\n\n/**\n * All actions exposed by TokenDataSource.\n */\nexport type TokenDataSourceActions = TokenDataSourceGetAssetsMiddlewareAction;\n\n/**\n * TokenDataSource no longer needs external BackendApiClient actions.\n * It uses ApiPlatformClient directly.\n */\nexport type TokenDataSourceAllowedActions = never;\n\nexport type TokenDataSourceMessenger = Messenger<\n typeof CONTROLLER_NAME,\n TokenDataSourceActions,\n never\n>;\n\n// ============================================================================\n// OPTIONS\n// ============================================================================\n\nexport type TokenDataSourceOptions = {\n messenger: TokenDataSourceMessenger;\n /** ApiPlatformClient for API calls with caching */\n queryApiClient: ApiPlatformClient;\n};\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\nfunction transformV3AssetResponseToMetadata(\n assetId: string,\n assetData: V3AssetResponse,\n): AssetMetadata {\n const parsed = parseCaipAssetType(assetId as CaipAssetType);\n let tokenType: 'native' | 'erc20' | 'spl' = 'erc20';\n\n if (parsed.assetNamespace === 'slip44') {\n tokenType = 'native';\n } else if (parsed.assetNamespace === 'spl') {\n tokenType = 'spl';\n }\n\n return {\n type: tokenType,\n name: assetData.name,\n symbol: assetData.symbol,\n decimals: assetData.decimals,\n image: assetData.iconUrl ?? assetData.iconUrlThumbnail,\n };\n}\n\n// ============================================================================\n// TOKEN DATA SOURCE\n// ============================================================================\n\n/**\n * TokenDataSource enriches responses with token metadata from the Tokens API.\n *\n * This middleware-based data source:\n * - Checks detected assets for missing metadata/images\n * - Fetches metadata from Tokens API v3 for assets needing enrichment\n * - Merges fetched metadata into the response\n *\n * Usage:\n * ```typescript\n * // Create and initialize (registers messenger actions)\n * const tokenDataSource = new TokenDataSource({ messenger, queryApiClient });\n *\n * // Later, get middleware via messenger\n * const middleware = messenger.call('TokenDataSource:getAssetsMiddleware');\n * ```\n */\nexport class TokenDataSource {\n readonly name = CONTROLLER_NAME;\n\n readonly #messenger: TokenDataSourceMessenger;\n\n /** ApiPlatformClient for cached API calls */\n readonly #apiClient: ApiPlatformClient;\n\n constructor(options: TokenDataSourceOptions) {\n this.#messenger = options.messenger;\n this.#apiClient = options.queryApiClient;\n this.#registerActionHandlers();\n }\n\n /**\n * Gets the supported networks from the API.\n * Caching is handled by ApiPlatformClient.\n *\n * @returns Set of supported chain IDs in CAIP format\n */\n async #getSupportedNetworks(): Promise<Set<string>> {\n try {\n // Use v2/supportedNetworks which returns CAIP chain IDs\n // ApiPlatformClient handles caching\n const response =\n await this.#apiClient.tokens.fetchTokenV2SupportedNetworks();\n\n // Combine full and partial support networks\n const allNetworks = [...response.fullSupport, ...response.partialSupport];\n\n return new Set(allNetworks);\n } catch (error) {\n log('Failed to fetch supported networks', { error });\n return new Set();\n }\n }\n\n /**\n * Filters asset IDs to only include those from supported networks.\n *\n * @param assetIds - Array of CAIP-19 asset IDs\n * @param supportedNetworks - Set of supported chain IDs\n * @returns Array of asset IDs from supported networks\n */\n #filterAssetsByNetwork(\n assetIds: string[],\n supportedNetworks: Set<string>,\n ): string[] {\n return assetIds.filter((assetId) => {\n try {\n const parsed = parseCaipAssetType(assetId as CaipAssetType);\n // chainId is in format \"eip155:1\" or \"tron:728126428\"\n // parsed.chain has namespace and reference properties\n const chainId = `${parsed.chain.namespace}:${parsed.chain.reference}`;\n return supportedNetworks.has(chainId);\n } catch {\n // If we can't parse the asset ID, filter it out\n return false;\n }\n });\n }\n\n #registerActionHandlers(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.#messenger as any).registerActionHandler(\n 'TokenDataSource:getAssetsMiddleware',\n () => this.assetsMiddleware,\n );\n }\n\n /**\n * Get the middleware for enriching responses with token metadata.\n *\n * This middleware:\n * 1. Extracts the response from context\n * 2. Fetches metadata for detected assets (assets without metadata)\n * 3. Enriches the response with fetched metadata\n * 4. Calls next() at the end to continue the middleware chain\n *\n * @returns The middleware function for the assets pipeline.\n */\n get assetsMiddleware(): Middleware {\n return forDataTypes(['metadata'], async (ctx, next) => {\n // Extract response from context\n const { response } = ctx;\n\n // Only fetch metadata for detected assets (assets without metadata)\n if (!response.detectedAssets) {\n return next(ctx);\n }\n\n const { assetsMetadata: stateMetadata } = ctx.getAssetsState();\n const assetIdsNeedingMetadata = new Set<string>();\n\n for (const detectedIds of Object.values(response.detectedAssets)) {\n for (const assetId of detectedIds) {\n // Skip if response already has metadata with image\n const responseMetadata = response.assetsMetadata?.[assetId];\n if (responseMetadata?.image) {\n continue;\n }\n\n // Skip if state already has metadata with image\n const existingMetadata = stateMetadata[assetId];\n if (existingMetadata?.image) {\n continue;\n }\n\n assetIdsNeedingMetadata.add(assetId);\n }\n }\n\n if (assetIdsNeedingMetadata.size === 0) {\n return next(ctx);\n }\n\n // Filter asset IDs to only include supported networks\n const supportedNetworks = await this.#getSupportedNetworks();\n const supportedAssetIds = this.#filterAssetsByNetwork(\n [...assetIdsNeedingMetadata],\n supportedNetworks,\n );\n\n if (supportedAssetIds.length === 0) {\n return next(ctx);\n }\n\n try {\n // Use ApiPlatformClient for fetching asset metadata\n // API returns an array with assetId as a property on each item\n const metadataResponse =\n await this.#apiClient.tokens.fetchV3Assets(supportedAssetIds);\n\n response.assetsMetadata ??= {};\n\n for (const assetData of metadataResponse) {\n const caipAssetId = assetData.assetId as Caip19AssetId;\n response.assetsMetadata[caipAssetId] =\n transformV3AssetResponseToMetadata(assetData.assetId, assetData);\n }\n } catch (error) {\n log('Failed to fetch metadata', { error });\n }\n\n // Call next() at the end to continue the middleware chain\n return next(ctx);\n });\n }\n}\n"]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initDataSources = exports.initMessengers = exports.isTronChain = exports.isBitcoinChain = exports.isSolanaChain = exports.isSnapSupportedChain = exports.getSnapTypeForChain = exports.SNAP_REGISTRY = exports.DEFAULT_SNAP_POLL_INTERVAL = exports.DEFAULT_TRON_POLL_INTERVAL = exports.DEFAULT_BITCOIN_POLL_INTERVAL = exports.DEFAULT_SOLANA_POLL_INTERVAL = exports.ALL_DEFAULT_NETWORKS = exports.TRON_NILE_HEX = exports.TRON_SHASTA_HEX = exports.TRON_MAINNET_HEX = exports.TRON_NILE = exports.TRON_SHASTA = exports.TRON_MAINNET = exports.BITCOIN_TESTNET = exports.BITCOIN_MAINNET = exports.SOLANA_TESTNET = exports.SOLANA_DEVNET = exports.SOLANA_MAINNET = exports.TRON_CHAIN_PREFIX = exports.BITCOIN_CHAIN_PREFIX = exports.SOLANA_CHAIN_PREFIX = exports.TRON_SNAP_ID = exports.BITCOIN_SNAP_ID = exports.SOLANA_SNAP_ID = exports.SNAP_DATA_SOURCE_NAME = exports.createSnapDataSource = exports.SnapDataSource = exports.PriceDataSource = exports.TokenDataSource = exports.createRpcDataSource = exports.RpcDataSource = exports.createBackendWebsocketDataSource = exports.BackendWebsocketDataSource = exports.createAccountsApiDataSource = exports.AccountsApiDataSource = exports.AbstractDataSource = void 0;
4
+ var AbstractDataSource_1 = require("./AbstractDataSource.cjs");
5
+ Object.defineProperty(exports, "AbstractDataSource", { enumerable: true, get: function () { return AbstractDataSource_1.AbstractDataSource; } });
6
+ var AccountsApiDataSource_1 = require("./AccountsApiDataSource.cjs");
7
+ Object.defineProperty(exports, "AccountsApiDataSource", { enumerable: true, get: function () { return AccountsApiDataSource_1.AccountsApiDataSource; } });
8
+ Object.defineProperty(exports, "createAccountsApiDataSource", { enumerable: true, get: function () { return AccountsApiDataSource_1.createAccountsApiDataSource; } });
9
+ var BackendWebsocketDataSource_1 = require("./BackendWebsocketDataSource.cjs");
10
+ Object.defineProperty(exports, "BackendWebsocketDataSource", { enumerable: true, get: function () { return BackendWebsocketDataSource_1.BackendWebsocketDataSource; } });
11
+ Object.defineProperty(exports, "createBackendWebsocketDataSource", { enumerable: true, get: function () { return BackendWebsocketDataSource_1.createBackendWebsocketDataSource; } });
12
+ var RpcDataSource_1 = require("./RpcDataSource.cjs");
13
+ Object.defineProperty(exports, "RpcDataSource", { enumerable: true, get: function () { return RpcDataSource_1.RpcDataSource; } });
14
+ Object.defineProperty(exports, "createRpcDataSource", { enumerable: true, get: function () { return RpcDataSource_1.createRpcDataSource; } });
15
+ var TokenDataSource_1 = require("./TokenDataSource.cjs");
16
+ Object.defineProperty(exports, "TokenDataSource", { enumerable: true, get: function () { return TokenDataSource_1.TokenDataSource; } });
17
+ var PriceDataSource_1 = require("./PriceDataSource.cjs");
18
+ Object.defineProperty(exports, "PriceDataSource", { enumerable: true, get: function () { return PriceDataSource_1.PriceDataSource; } });
19
+ // Unified Snap Data Source (handles Solana, Bitcoin, Tron snaps)
20
+ var SnapDataSource_1 = require("./SnapDataSource.cjs");
21
+ Object.defineProperty(exports, "SnapDataSource", { enumerable: true, get: function () { return SnapDataSource_1.SnapDataSource; } });
22
+ Object.defineProperty(exports, "createSnapDataSource", { enumerable: true, get: function () { return SnapDataSource_1.createSnapDataSource; } });
23
+ Object.defineProperty(exports, "SNAP_DATA_SOURCE_NAME", { enumerable: true, get: function () { return SnapDataSource_1.SNAP_DATA_SOURCE_NAME; } });
24
+ // Snap IDs
25
+ Object.defineProperty(exports, "SOLANA_SNAP_ID", { enumerable: true, get: function () { return SnapDataSource_1.SOLANA_SNAP_ID; } });
26
+ Object.defineProperty(exports, "BITCOIN_SNAP_ID", { enumerable: true, get: function () { return SnapDataSource_1.BITCOIN_SNAP_ID; } });
27
+ Object.defineProperty(exports, "TRON_SNAP_ID", { enumerable: true, get: function () { return SnapDataSource_1.TRON_SNAP_ID; } });
28
+ // Chain prefixes
29
+ Object.defineProperty(exports, "SOLANA_CHAIN_PREFIX", { enumerable: true, get: function () { return SnapDataSource_1.SOLANA_CHAIN_PREFIX; } });
30
+ Object.defineProperty(exports, "BITCOIN_CHAIN_PREFIX", { enumerable: true, get: function () { return SnapDataSource_1.BITCOIN_CHAIN_PREFIX; } });
31
+ Object.defineProperty(exports, "TRON_CHAIN_PREFIX", { enumerable: true, get: function () { return SnapDataSource_1.TRON_CHAIN_PREFIX; } });
32
+ // Networks
33
+ Object.defineProperty(exports, "SOLANA_MAINNET", { enumerable: true, get: function () { return SnapDataSource_1.SOLANA_MAINNET; } });
34
+ Object.defineProperty(exports, "SOLANA_DEVNET", { enumerable: true, get: function () { return SnapDataSource_1.SOLANA_DEVNET; } });
35
+ Object.defineProperty(exports, "SOLANA_TESTNET", { enumerable: true, get: function () { return SnapDataSource_1.SOLANA_TESTNET; } });
36
+ Object.defineProperty(exports, "BITCOIN_MAINNET", { enumerable: true, get: function () { return SnapDataSource_1.BITCOIN_MAINNET; } });
37
+ Object.defineProperty(exports, "BITCOIN_TESTNET", { enumerable: true, get: function () { return SnapDataSource_1.BITCOIN_TESTNET; } });
38
+ Object.defineProperty(exports, "TRON_MAINNET", { enumerable: true, get: function () { return SnapDataSource_1.TRON_MAINNET; } });
39
+ Object.defineProperty(exports, "TRON_SHASTA", { enumerable: true, get: function () { return SnapDataSource_1.TRON_SHASTA; } });
40
+ Object.defineProperty(exports, "TRON_NILE", { enumerable: true, get: function () { return SnapDataSource_1.TRON_NILE; } });
41
+ Object.defineProperty(exports, "TRON_MAINNET_HEX", { enumerable: true, get: function () { return SnapDataSource_1.TRON_MAINNET_HEX; } });
42
+ Object.defineProperty(exports, "TRON_SHASTA_HEX", { enumerable: true, get: function () { return SnapDataSource_1.TRON_SHASTA_HEX; } });
43
+ Object.defineProperty(exports, "TRON_NILE_HEX", { enumerable: true, get: function () { return SnapDataSource_1.TRON_NILE_HEX; } });
44
+ Object.defineProperty(exports, "ALL_DEFAULT_NETWORKS", { enumerable: true, get: function () { return SnapDataSource_1.ALL_DEFAULT_NETWORKS; } });
45
+ // Poll intervals
46
+ Object.defineProperty(exports, "DEFAULT_SOLANA_POLL_INTERVAL", { enumerable: true, get: function () { return SnapDataSource_1.DEFAULT_SOLANA_POLL_INTERVAL; } });
47
+ Object.defineProperty(exports, "DEFAULT_BITCOIN_POLL_INTERVAL", { enumerable: true, get: function () { return SnapDataSource_1.DEFAULT_BITCOIN_POLL_INTERVAL; } });
48
+ Object.defineProperty(exports, "DEFAULT_TRON_POLL_INTERVAL", { enumerable: true, get: function () { return SnapDataSource_1.DEFAULT_TRON_POLL_INTERVAL; } });
49
+ Object.defineProperty(exports, "DEFAULT_SNAP_POLL_INTERVAL", { enumerable: true, get: function () { return SnapDataSource_1.DEFAULT_SNAP_POLL_INTERVAL; } });
50
+ // Snap registry
51
+ Object.defineProperty(exports, "SNAP_REGISTRY", { enumerable: true, get: function () { return SnapDataSource_1.SNAP_REGISTRY; } });
52
+ // Helper functions
53
+ Object.defineProperty(exports, "getSnapTypeForChain", { enumerable: true, get: function () { return SnapDataSource_1.getSnapTypeForChain; } });
54
+ Object.defineProperty(exports, "isSnapSupportedChain", { enumerable: true, get: function () { return SnapDataSource_1.isSnapSupportedChain; } });
55
+ Object.defineProperty(exports, "isSolanaChain", { enumerable: true, get: function () { return SnapDataSource_1.isSolanaChain; } });
56
+ Object.defineProperty(exports, "isBitcoinChain", { enumerable: true, get: function () { return SnapDataSource_1.isBitcoinChain; } });
57
+ Object.defineProperty(exports, "isTronChain", { enumerable: true, get: function () { return SnapDataSource_1.isTronChain; } });
58
+ // Initialization helpers
59
+ var initDataSources_1 = require("./initDataSources.cjs");
60
+ Object.defineProperty(exports, "initMessengers", { enumerable: true, get: function () { return initDataSources_1.initMessengers; } });
61
+ Object.defineProperty(exports, "initDataSources", { enumerable: true, get: function () { return initDataSources_1.initDataSources; } });
62
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":";;;AAAA,+DAI8B;AAH5B,wHAAA,kBAAkB,OAAA;AAKpB,qEASiC;AAR/B,8HAAA,qBAAqB,OAAA;AACrB,oIAAA,2BAA2B,OAAA;AAS7B,+EAUsC;AATpC,wIAAA,0BAA0B,OAAA;AAC1B,8IAAA,gCAAgC,OAAA;AAUlC,qDAYyB;AAXvB,8GAAA,aAAa,OAAA;AACb,oHAAA,mBAAmB,OAAA;AAYrB,yDAO2B;AANzB,kHAAA,eAAe,OAAA;AAQjB,yDAY2B;AAXzB,kHAAA,eAAe,OAAA;AAajB,iEAAiE;AACjE,uDAgD0B;AA/CxB,gHAAA,cAAc,OAAA;AACd,sHAAA,oBAAoB,OAAA;AACpB,uHAAA,qBAAqB,OAAA;AACrB,WAAW;AACX,gHAAA,cAAc,OAAA;AACd,iHAAA,eAAe,OAAA;AACf,8GAAA,YAAY,OAAA;AACZ,iBAAiB;AACjB,qHAAA,mBAAmB,OAAA;AACnB,sHAAA,oBAAoB,OAAA;AACpB,mHAAA,iBAAiB,OAAA;AACjB,WAAW;AACX,gHAAA,cAAc,OAAA;AACd,+GAAA,aAAa,OAAA;AACb,gHAAA,cAAc,OAAA;AACd,iHAAA,eAAe,OAAA;AACf,iHAAA,eAAe,OAAA;AACf,8GAAA,YAAY,OAAA;AACZ,6GAAA,WAAW,OAAA;AACX,2GAAA,SAAS,OAAA;AACT,kHAAA,gBAAgB,OAAA;AAChB,iHAAA,eAAe,OAAA;AACf,+GAAA,aAAa,OAAA;AACb,sHAAA,oBAAoB,OAAA;AACpB,iBAAiB;AACjB,8HAAA,4BAA4B,OAAA;AAC5B,+HAAA,6BAA6B,OAAA;AAC7B,4HAAA,0BAA0B,OAAA;AAC1B,4HAAA,0BAA0B,OAAA;AAC1B,gBAAgB;AAChB,+GAAA,aAAa,OAAA;AACb,mBAAmB;AACnB,qHAAA,mBAAmB,OAAA;AACnB,sHAAA,oBAAoB,OAAA;AACpB,+GAAA,aAAa,OAAA;AACb,gHAAA,cAAc,OAAA;AACd,6GAAA,WAAW,OAAA;AAab,yBAAyB;AACzB,yDAY2B;AAXzB,iHAAA,cAAc,OAAA;AACd,kHAAA,eAAe,OAAA","sourcesContent":["export {\n AbstractDataSource,\n type DataSourceState,\n type SubscriptionRequest,\n} from './AbstractDataSource';\n\nexport {\n AccountsApiDataSource,\n createAccountsApiDataSource,\n type AccountsApiDataSourceOptions,\n type AccountsApiDataSourceState,\n type AccountsApiDataSourceActions,\n type AccountsApiDataSourceEvents,\n type AccountsApiDataSourceMessenger,\n type AccountsApiDataSourceGetAssetsMiddlewareAction,\n} from './AccountsApiDataSource';\n\nexport {\n BackendWebsocketDataSource,\n createBackendWebsocketDataSource,\n type BackendWebsocketDataSourceOptions,\n type BackendWebsocketDataSourceState,\n type BackendWebsocketDataSourceActions,\n type BackendWebsocketDataSourceEvents,\n type BackendWebsocketDataSourceMessenger,\n type BackendWebsocketDataSourceAllowedActions,\n type BackendWebsocketDataSourceAllowedEvents,\n} from './BackendWebsocketDataSource';\n\nexport {\n RpcDataSource,\n createRpcDataSource,\n type RpcDataSourceOptions,\n type RpcDataSourceState,\n type RpcDataSourceActions,\n type RpcDataSourceEvents,\n type RpcDataSourceMessenger,\n type RpcDataSourceAllowedActions,\n type RpcDataSourceAllowedEvents,\n type ChainStatus,\n type RpcDataSourceGetAssetsMiddlewareAction,\n} from './RpcDataSource';\n\nexport {\n TokenDataSource,\n type TokenDataSourceOptions,\n type TokenDataSourceMessenger,\n type TokenDataSourceAllowedActions,\n type TokenDataSourceActions,\n type TokenDataSourceGetAssetsMiddlewareAction,\n} from './TokenDataSource';\n\nexport {\n PriceDataSource,\n type PriceDataSourceOptions,\n type PriceDataSourceMessenger,\n type PriceDataSourceAllowedActions,\n type PriceDataSourceActions,\n type PriceDataSourceEvents,\n type PriceDataSourceGetAssetsMiddlewareAction,\n type PriceDataSourceFetchAction,\n type PriceDataSourceSubscribeAction,\n type PriceDataSourceUnsubscribeAction,\n type PriceDataSourceAssetsUpdatedEvent,\n} from './PriceDataSource';\n\n// Unified Snap Data Source (handles Solana, Bitcoin, Tron snaps)\nexport {\n SnapDataSource,\n createSnapDataSource,\n SNAP_DATA_SOURCE_NAME,\n // Snap IDs\n SOLANA_SNAP_ID,\n BITCOIN_SNAP_ID,\n TRON_SNAP_ID,\n // Chain prefixes\n SOLANA_CHAIN_PREFIX,\n BITCOIN_CHAIN_PREFIX,\n TRON_CHAIN_PREFIX,\n // Networks\n SOLANA_MAINNET,\n SOLANA_DEVNET,\n SOLANA_TESTNET,\n BITCOIN_MAINNET,\n BITCOIN_TESTNET,\n TRON_MAINNET,\n TRON_SHASTA,\n TRON_NILE,\n TRON_MAINNET_HEX,\n TRON_SHASTA_HEX,\n TRON_NILE_HEX,\n ALL_DEFAULT_NETWORKS,\n // Poll intervals\n DEFAULT_SOLANA_POLL_INTERVAL,\n DEFAULT_BITCOIN_POLL_INTERVAL,\n DEFAULT_TRON_POLL_INTERVAL,\n DEFAULT_SNAP_POLL_INTERVAL,\n // Snap registry\n SNAP_REGISTRY,\n // Helper functions\n getSnapTypeForChain,\n isSnapSupportedChain,\n isSolanaChain,\n isBitcoinChain,\n isTronChain,\n // Types\n type SnapType,\n type SnapInfo,\n type SnapDataSourceState,\n type SnapDataSourceOptions,\n type SnapProvider,\n type SnapDataSourceActions,\n type SnapDataSourceEvents,\n type SnapDataSourceMessenger,\n type SnapDataSourceGetAssetsMiddlewareAction,\n} from './SnapDataSource';\n\n// Initialization helpers\nexport {\n initMessengers,\n initDataSources,\n type InitMessengersOptions,\n type InitDataSourcesOptions,\n type DataSourceMessengers,\n type DataSources,\n type DataSourceActions,\n type DataSourceEvents,\n type DataSourceAllowedActions,\n type DataSourceAllowedEvents,\n type RootMessenger,\n} from './initDataSources';\n"]}
@@ -0,0 +1,9 @@
1
+ export { AbstractDataSource, type DataSourceState, type SubscriptionRequest, } from "./AbstractDataSource.cjs";
2
+ export { AccountsApiDataSource, createAccountsApiDataSource, type AccountsApiDataSourceOptions, type AccountsApiDataSourceState, type AccountsApiDataSourceActions, type AccountsApiDataSourceEvents, type AccountsApiDataSourceMessenger, type AccountsApiDataSourceGetAssetsMiddlewareAction, } from "./AccountsApiDataSource.cjs";
3
+ export { BackendWebsocketDataSource, createBackendWebsocketDataSource, type BackendWebsocketDataSourceOptions, type BackendWebsocketDataSourceState, type BackendWebsocketDataSourceActions, type BackendWebsocketDataSourceEvents, type BackendWebsocketDataSourceMessenger, type BackendWebsocketDataSourceAllowedActions, type BackendWebsocketDataSourceAllowedEvents, } from "./BackendWebsocketDataSource.cjs";
4
+ export { RpcDataSource, createRpcDataSource, type RpcDataSourceOptions, type RpcDataSourceState, type RpcDataSourceActions, type RpcDataSourceEvents, type RpcDataSourceMessenger, type RpcDataSourceAllowedActions, type RpcDataSourceAllowedEvents, type ChainStatus, type RpcDataSourceGetAssetsMiddlewareAction, } from "./RpcDataSource.cjs";
5
+ export { TokenDataSource, type TokenDataSourceOptions, type TokenDataSourceMessenger, type TokenDataSourceAllowedActions, type TokenDataSourceActions, type TokenDataSourceGetAssetsMiddlewareAction, } from "./TokenDataSource.cjs";
6
+ export { PriceDataSource, type PriceDataSourceOptions, type PriceDataSourceMessenger, type PriceDataSourceAllowedActions, type PriceDataSourceActions, type PriceDataSourceEvents, type PriceDataSourceGetAssetsMiddlewareAction, type PriceDataSourceFetchAction, type PriceDataSourceSubscribeAction, type PriceDataSourceUnsubscribeAction, type PriceDataSourceAssetsUpdatedEvent, } from "./PriceDataSource.cjs";
7
+ export { SnapDataSource, createSnapDataSource, SNAP_DATA_SOURCE_NAME, SOLANA_SNAP_ID, BITCOIN_SNAP_ID, TRON_SNAP_ID, SOLANA_CHAIN_PREFIX, BITCOIN_CHAIN_PREFIX, TRON_CHAIN_PREFIX, SOLANA_MAINNET, SOLANA_DEVNET, SOLANA_TESTNET, BITCOIN_MAINNET, BITCOIN_TESTNET, TRON_MAINNET, TRON_SHASTA, TRON_NILE, TRON_MAINNET_HEX, TRON_SHASTA_HEX, TRON_NILE_HEX, ALL_DEFAULT_NETWORKS, DEFAULT_SOLANA_POLL_INTERVAL, DEFAULT_BITCOIN_POLL_INTERVAL, DEFAULT_TRON_POLL_INTERVAL, DEFAULT_SNAP_POLL_INTERVAL, SNAP_REGISTRY, getSnapTypeForChain, isSnapSupportedChain, isSolanaChain, isBitcoinChain, isTronChain, type SnapType, type SnapInfo, type SnapDataSourceState, type SnapDataSourceOptions, type SnapProvider, type SnapDataSourceActions, type SnapDataSourceEvents, type SnapDataSourceMessenger, type SnapDataSourceGetAssetsMiddlewareAction, } from "./SnapDataSource.cjs";
8
+ export { initMessengers, initDataSources, type InitMessengersOptions, type InitDataSourcesOptions, type DataSourceMessengers, type DataSources, type DataSourceActions, type DataSourceEvents, type DataSourceAllowedActions, type DataSourceAllowedEvents, type RootMessenger, } from "./initDataSources.cjs";
9
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,iCAA6B;AAE9B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,8CAA8C,GACpD,oCAAgC;AAEjC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACrC,KAAK,mCAAmC,EACxC,KAAK,wCAAwC,EAC7C,KAAK,uCAAuC,GAC7C,yCAAqC;AAEtC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,WAAW,EAChB,KAAK,sCAAsC,GAC5C,4BAAwB;AAEzB,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,wCAAwC,GAC9C,8BAA0B;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wCAAwC,EAC7C,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,GACvC,8BAA0B;AAG3B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EAErB,cAAc,EACd,eAAe,EACf,YAAY,EAEZ,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EAEjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,oBAAoB,EAEpB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B,EAE1B,aAAa,EAEb,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,WAAW,EAEX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,uCAAuC,GAC7C,6BAAyB;AAG1B,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,8BAA0B"}
@@ -0,0 +1,9 @@
1
+ export { AbstractDataSource, type DataSourceState, type SubscriptionRequest, } from "./AbstractDataSource.mjs";
2
+ export { AccountsApiDataSource, createAccountsApiDataSource, type AccountsApiDataSourceOptions, type AccountsApiDataSourceState, type AccountsApiDataSourceActions, type AccountsApiDataSourceEvents, type AccountsApiDataSourceMessenger, type AccountsApiDataSourceGetAssetsMiddlewareAction, } from "./AccountsApiDataSource.mjs";
3
+ export { BackendWebsocketDataSource, createBackendWebsocketDataSource, type BackendWebsocketDataSourceOptions, type BackendWebsocketDataSourceState, type BackendWebsocketDataSourceActions, type BackendWebsocketDataSourceEvents, type BackendWebsocketDataSourceMessenger, type BackendWebsocketDataSourceAllowedActions, type BackendWebsocketDataSourceAllowedEvents, } from "./BackendWebsocketDataSource.mjs";
4
+ export { RpcDataSource, createRpcDataSource, type RpcDataSourceOptions, type RpcDataSourceState, type RpcDataSourceActions, type RpcDataSourceEvents, type RpcDataSourceMessenger, type RpcDataSourceAllowedActions, type RpcDataSourceAllowedEvents, type ChainStatus, type RpcDataSourceGetAssetsMiddlewareAction, } from "./RpcDataSource.mjs";
5
+ export { TokenDataSource, type TokenDataSourceOptions, type TokenDataSourceMessenger, type TokenDataSourceAllowedActions, type TokenDataSourceActions, type TokenDataSourceGetAssetsMiddlewareAction, } from "./TokenDataSource.mjs";
6
+ export { PriceDataSource, type PriceDataSourceOptions, type PriceDataSourceMessenger, type PriceDataSourceAllowedActions, type PriceDataSourceActions, type PriceDataSourceEvents, type PriceDataSourceGetAssetsMiddlewareAction, type PriceDataSourceFetchAction, type PriceDataSourceSubscribeAction, type PriceDataSourceUnsubscribeAction, type PriceDataSourceAssetsUpdatedEvent, } from "./PriceDataSource.mjs";
7
+ export { SnapDataSource, createSnapDataSource, SNAP_DATA_SOURCE_NAME, SOLANA_SNAP_ID, BITCOIN_SNAP_ID, TRON_SNAP_ID, SOLANA_CHAIN_PREFIX, BITCOIN_CHAIN_PREFIX, TRON_CHAIN_PREFIX, SOLANA_MAINNET, SOLANA_DEVNET, SOLANA_TESTNET, BITCOIN_MAINNET, BITCOIN_TESTNET, TRON_MAINNET, TRON_SHASTA, TRON_NILE, TRON_MAINNET_HEX, TRON_SHASTA_HEX, TRON_NILE_HEX, ALL_DEFAULT_NETWORKS, DEFAULT_SOLANA_POLL_INTERVAL, DEFAULT_BITCOIN_POLL_INTERVAL, DEFAULT_TRON_POLL_INTERVAL, DEFAULT_SNAP_POLL_INTERVAL, SNAP_REGISTRY, getSnapTypeForChain, isSnapSupportedChain, isSolanaChain, isBitcoinChain, isTronChain, type SnapType, type SnapInfo, type SnapDataSourceState, type SnapDataSourceOptions, type SnapProvider, type SnapDataSourceActions, type SnapDataSourceEvents, type SnapDataSourceMessenger, type SnapDataSourceGetAssetsMiddlewareAction, } from "./SnapDataSource.mjs";
8
+ export { initMessengers, initDataSources, type InitMessengersOptions, type InitDataSourcesOptions, type DataSourceMessengers, type DataSources, type DataSourceActions, type DataSourceEvents, type DataSourceAllowedActions, type DataSourceAllowedEvents, type RootMessenger, } from "./initDataSources.mjs";
9
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,iCAA6B;AAE9B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,8CAA8C,GACpD,oCAAgC;AAEjC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACrC,KAAK,mCAAmC,EACxC,KAAK,wCAAwC,EAC7C,KAAK,uCAAuC,GAC7C,yCAAqC;AAEtC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,WAAW,EAChB,KAAK,sCAAsC,GAC5C,4BAAwB;AAEzB,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,wCAAwC,GAC9C,8BAA0B;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wCAAwC,EAC7C,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,GACvC,8BAA0B;AAG3B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EAErB,cAAc,EACd,eAAe,EACf,YAAY,EAEZ,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EAEjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,oBAAoB,EAEpB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B,EAE1B,aAAa,EAEb,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,WAAW,EAEX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,uCAAuC,GAC7C,6BAAyB;AAG1B,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,8BAA0B"}
@@ -0,0 +1,23 @@
1
+ export { AbstractDataSource } from "./AbstractDataSource.mjs";
2
+ export { AccountsApiDataSource, createAccountsApiDataSource } from "./AccountsApiDataSource.mjs";
3
+ export { BackendWebsocketDataSource, createBackendWebsocketDataSource } from "./BackendWebsocketDataSource.mjs";
4
+ export { RpcDataSource, createRpcDataSource } from "./RpcDataSource.mjs";
5
+ export { TokenDataSource } from "./TokenDataSource.mjs";
6
+ export { PriceDataSource } from "./PriceDataSource.mjs";
7
+ // Unified Snap Data Source (handles Solana, Bitcoin, Tron snaps)
8
+ export { SnapDataSource, createSnapDataSource, SNAP_DATA_SOURCE_NAME,
9
+ // Snap IDs
10
+ SOLANA_SNAP_ID, BITCOIN_SNAP_ID, TRON_SNAP_ID,
11
+ // Chain prefixes
12
+ SOLANA_CHAIN_PREFIX, BITCOIN_CHAIN_PREFIX, TRON_CHAIN_PREFIX,
13
+ // Networks
14
+ SOLANA_MAINNET, SOLANA_DEVNET, SOLANA_TESTNET, BITCOIN_MAINNET, BITCOIN_TESTNET, TRON_MAINNET, TRON_SHASTA, TRON_NILE, TRON_MAINNET_HEX, TRON_SHASTA_HEX, TRON_NILE_HEX, ALL_DEFAULT_NETWORKS,
15
+ // Poll intervals
16
+ DEFAULT_SOLANA_POLL_INTERVAL, DEFAULT_BITCOIN_POLL_INTERVAL, DEFAULT_TRON_POLL_INTERVAL, DEFAULT_SNAP_POLL_INTERVAL,
17
+ // Snap registry
18
+ SNAP_REGISTRY,
19
+ // Helper functions
20
+ getSnapTypeForChain, isSnapSupportedChain, isSolanaChain, isBitcoinChain, isTronChain } from "./SnapDataSource.mjs";
21
+ // Initialization helpers
22
+ export { initMessengers, initDataSources } from "./initDataSources.mjs";
23
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAGnB,iCAA6B;AAE9B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAO5B,oCAAgC;AAEjC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAQjC,yCAAqC;AAEtC,OAAO,EACL,aAAa,EACb,mBAAmB,EAUpB,4BAAwB;AAEzB,OAAO,EACL,eAAe,EAMhB,8BAA0B;AAE3B,OAAO,EACL,eAAe,EAWhB,8BAA0B;AAE3B,iEAAiE;AACjE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB;AACrB,WAAW;AACX,cAAc,EACd,eAAe,EACf,YAAY;AACZ,iBAAiB;AACjB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB;AACjB,WAAW;AACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,oBAAoB;AACpB,iBAAiB;AACjB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B;AAC1B,gBAAgB;AAChB,aAAa;AACb,mBAAmB;AACnB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,WAAW,EAWZ,6BAAyB;AAE1B,yBAAyB;AACzB,OAAO,EACL,cAAc,EACd,eAAe,EAUhB,8BAA0B","sourcesContent":["export {\n AbstractDataSource,\n type DataSourceState,\n type SubscriptionRequest,\n} from './AbstractDataSource';\n\nexport {\n AccountsApiDataSource,\n createAccountsApiDataSource,\n type AccountsApiDataSourceOptions,\n type AccountsApiDataSourceState,\n type AccountsApiDataSourceActions,\n type AccountsApiDataSourceEvents,\n type AccountsApiDataSourceMessenger,\n type AccountsApiDataSourceGetAssetsMiddlewareAction,\n} from './AccountsApiDataSource';\n\nexport {\n BackendWebsocketDataSource,\n createBackendWebsocketDataSource,\n type BackendWebsocketDataSourceOptions,\n type BackendWebsocketDataSourceState,\n type BackendWebsocketDataSourceActions,\n type BackendWebsocketDataSourceEvents,\n type BackendWebsocketDataSourceMessenger,\n type BackendWebsocketDataSourceAllowedActions,\n type BackendWebsocketDataSourceAllowedEvents,\n} from './BackendWebsocketDataSource';\n\nexport {\n RpcDataSource,\n createRpcDataSource,\n type RpcDataSourceOptions,\n type RpcDataSourceState,\n type RpcDataSourceActions,\n type RpcDataSourceEvents,\n type RpcDataSourceMessenger,\n type RpcDataSourceAllowedActions,\n type RpcDataSourceAllowedEvents,\n type ChainStatus,\n type RpcDataSourceGetAssetsMiddlewareAction,\n} from './RpcDataSource';\n\nexport {\n TokenDataSource,\n type TokenDataSourceOptions,\n type TokenDataSourceMessenger,\n type TokenDataSourceAllowedActions,\n type TokenDataSourceActions,\n type TokenDataSourceGetAssetsMiddlewareAction,\n} from './TokenDataSource';\n\nexport {\n PriceDataSource,\n type PriceDataSourceOptions,\n type PriceDataSourceMessenger,\n type PriceDataSourceAllowedActions,\n type PriceDataSourceActions,\n type PriceDataSourceEvents,\n type PriceDataSourceGetAssetsMiddlewareAction,\n type PriceDataSourceFetchAction,\n type PriceDataSourceSubscribeAction,\n type PriceDataSourceUnsubscribeAction,\n type PriceDataSourceAssetsUpdatedEvent,\n} from './PriceDataSource';\n\n// Unified Snap Data Source (handles Solana, Bitcoin, Tron snaps)\nexport {\n SnapDataSource,\n createSnapDataSource,\n SNAP_DATA_SOURCE_NAME,\n // Snap IDs\n SOLANA_SNAP_ID,\n BITCOIN_SNAP_ID,\n TRON_SNAP_ID,\n // Chain prefixes\n SOLANA_CHAIN_PREFIX,\n BITCOIN_CHAIN_PREFIX,\n TRON_CHAIN_PREFIX,\n // Networks\n SOLANA_MAINNET,\n SOLANA_DEVNET,\n SOLANA_TESTNET,\n BITCOIN_MAINNET,\n BITCOIN_TESTNET,\n TRON_MAINNET,\n TRON_SHASTA,\n TRON_NILE,\n TRON_MAINNET_HEX,\n TRON_SHASTA_HEX,\n TRON_NILE_HEX,\n ALL_DEFAULT_NETWORKS,\n // Poll intervals\n DEFAULT_SOLANA_POLL_INTERVAL,\n DEFAULT_BITCOIN_POLL_INTERVAL,\n DEFAULT_TRON_POLL_INTERVAL,\n DEFAULT_SNAP_POLL_INTERVAL,\n // Snap registry\n SNAP_REGISTRY,\n // Helper functions\n getSnapTypeForChain,\n isSnapSupportedChain,\n isSolanaChain,\n isBitcoinChain,\n isTronChain,\n // Types\n type SnapType,\n type SnapInfo,\n type SnapDataSourceState,\n type SnapDataSourceOptions,\n type SnapProvider,\n type SnapDataSourceActions,\n type SnapDataSourceEvents,\n type SnapDataSourceMessenger,\n type SnapDataSourceGetAssetsMiddlewareAction,\n} from './SnapDataSource';\n\n// Initialization helpers\nexport {\n initMessengers,\n initDataSources,\n type InitMessengersOptions,\n type InitDataSourcesOptions,\n type DataSourceMessengers,\n type DataSources,\n type DataSourceActions,\n type DataSourceEvents,\n type DataSourceAllowedActions,\n type DataSourceAllowedEvents,\n type RootMessenger,\n} from './initDataSources';\n"]}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initDataSources = exports.initMessengers = void 0;
4
+ const messenger_1 = require("@metamask/messenger");
5
+ const AccountsApiDataSource_1 = require("./AccountsApiDataSource.cjs");
6
+ const BackendWebsocketDataSource_1 = require("./BackendWebsocketDataSource.cjs");
7
+ const PriceDataSource_1 = require("./PriceDataSource.cjs");
8
+ const RpcDataSource_1 = require("./RpcDataSource.cjs");
9
+ const SnapDataSource_1 = require("./SnapDataSource.cjs");
10
+ const TokenDataSource_1 = require("./TokenDataSource.cjs");
11
+ const middlewares_1 = require("../middlewares/index.cjs");
12
+ // ============================================================================
13
+ // MESSENGER INITIALIZATION
14
+ // ============================================================================
15
+ /**
16
+ * Initialize all messengers for data sources.
17
+ *
18
+ * This function creates child messengers for each data source from the root
19
+ * controller messenger, with proper action/event delegation.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { initMessengers } from '@metamask/assets-controllers';
24
+ *
25
+ * const messengers = initMessengers({ messenger });
26
+ * ```
27
+ *
28
+ * @param options - Configuration options
29
+ * @returns Object containing all messengers
30
+ */
31
+ function initMessengers(options) {
32
+ const { messenger } = options;
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ const rootMessenger = messenger;
35
+ // RPC Data Source messenger
36
+ const rpcMessenger = new messenger_1.Messenger({
37
+ namespace: 'RpcDataSource',
38
+ parent: rootMessenger,
39
+ });
40
+ rootMessenger.delegate({
41
+ actions: [
42
+ 'NetworkController:getState',
43
+ 'NetworkController:getNetworkClientById',
44
+ 'AssetsController:activeChainsUpdate',
45
+ 'AssetsController:assetsUpdate',
46
+ ],
47
+ events: ['NetworkController:stateChange'],
48
+ messenger: rpcMessenger,
49
+ });
50
+ // Backend Websocket Data Source messenger
51
+ const backendWebsocketMessenger = new messenger_1.Messenger({
52
+ namespace: 'BackendWebsocketDataSource',
53
+ parent: rootMessenger,
54
+ });
55
+ rootMessenger.delegate({
56
+ actions: [
57
+ 'BackendWebSocketService:subscribe',
58
+ 'BackendWebSocketService:unsubscribe',
59
+ 'BackendWebSocketService:getState',
60
+ 'BackendWebSocketService:getConnectionInfo',
61
+ 'BackendWebSocketService:findSubscriptionsByChannelPrefix',
62
+ 'AssetsController:activeChainsUpdate',
63
+ 'AssetsController:assetsUpdate',
64
+ ],
65
+ events: [
66
+ 'BackendWebSocketService:stateChange',
67
+ 'BackendWebSocketService:connectionStateChanged',
68
+ 'AccountsApiDataSource:activeChainsUpdated',
69
+ ],
70
+ messenger: backendWebsocketMessenger,
71
+ });
72
+ // Accounts API Data Source messenger
73
+ // Note: AccountsApiDataSource uses ApiPlatformClient directly, so no BackendApiClient actions needed
74
+ const accountsApiMessenger = new messenger_1.Messenger({
75
+ namespace: 'AccountsApiDataSource',
76
+ parent: rootMessenger,
77
+ });
78
+ rootMessenger.delegate({
79
+ actions: [
80
+ 'AssetsController:activeChainsUpdate',
81
+ 'AssetsController:assetsUpdate',
82
+ ],
83
+ messenger: accountsApiMessenger,
84
+ });
85
+ // Snap Data Source messenger
86
+ const snapMessenger = new messenger_1.Messenger({
87
+ namespace: 'SnapDataSource',
88
+ parent: rootMessenger,
89
+ });
90
+ rootMessenger.delegate({
91
+ actions: [
92
+ 'AssetsController:activeChainsUpdate',
93
+ 'AssetsController:assetsUpdate',
94
+ ],
95
+ events: [
96
+ // Snap keyring balance updates - snaps emit this when balances change
97
+ 'AccountsController:accountBalancesUpdated',
98
+ ],
99
+ messenger: snapMessenger,
100
+ });
101
+ // Token Data Source messenger
102
+ // Note: TokenDataSource uses ApiPlatformClient directly, so no BackendApiClient actions needed
103
+ const tokenMessenger = new messenger_1.Messenger({
104
+ namespace: 'TokenDataSource',
105
+ parent: rootMessenger,
106
+ });
107
+ // Price Data Source messenger
108
+ // Note: PriceDataSource uses ApiPlatformClient directly, so no BackendApiClient actions needed
109
+ const priceMessenger = new messenger_1.Messenger({
110
+ namespace: 'PriceDataSource',
111
+ parent: rootMessenger,
112
+ });
113
+ rootMessenger.delegate({
114
+ actions: ['AssetsController:getState', 'AssetsController:assetsUpdate'],
115
+ messenger: priceMessenger,
116
+ });
117
+ // Detection Middleware messenger
118
+ const detectionMessenger = new messenger_1.Messenger({
119
+ namespace: 'DetectionMiddleware',
120
+ parent: rootMessenger,
121
+ });
122
+ return {
123
+ rpcMessenger: rpcMessenger,
124
+ backendWebsocketMessenger: backendWebsocketMessenger,
125
+ accountsApiMessenger: accountsApiMessenger,
126
+ snapMessenger: snapMessenger,
127
+ tokenMessenger: tokenMessenger,
128
+ priceMessenger: priceMessenger,
129
+ detectionMessenger: detectionMessenger,
130
+ };
131
+ }
132
+ exports.initMessengers = initMessengers;
133
+ // ============================================================================
134
+ // DATA SOURCE INITIALIZATION
135
+ // ============================================================================
136
+ /**
137
+ * Initialize all data sources and middlewares.
138
+ *
139
+ * This function creates and initializes all data sources, registering their
140
+ * action handlers with the messenger.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * import { initMessengers, initDataSources } from '@metamask/assets-controllers';
145
+ *
146
+ * // Initialize messengers first
147
+ * const messengers = initMessengers({ controllerMessenger });
148
+ *
149
+ * // Then initialize data sources
150
+ * const dataSources = initDataSources({
151
+ * messengers,
152
+ * snapProvider: snapController,
153
+ * });
154
+ * ```
155
+ *
156
+ * @param options - Configuration options
157
+ * @returns Object containing all data source instances
158
+ */
159
+ function initDataSources(options) {
160
+ const { messengers, snapProvider, queryApiClient } = options;
161
+ // Initialize primary data sources (provide balance data)
162
+ const rpcDataSource = new RpcDataSource_1.RpcDataSource({
163
+ messenger: messengers.rpcMessenger,
164
+ });
165
+ const backendWebsocketDataSource = new BackendWebsocketDataSource_1.BackendWebsocketDataSource({
166
+ messenger: messengers.backendWebsocketMessenger,
167
+ });
168
+ const accountsApiDataSource = new AccountsApiDataSource_1.AccountsApiDataSource({
169
+ messenger: messengers.accountsApiMessenger,
170
+ queryApiClient,
171
+ });
172
+ const snapDataSource = new SnapDataSource_1.SnapDataSource({
173
+ messenger: messengers.snapMessenger,
174
+ snapProvider,
175
+ });
176
+ // Initialize middleware data sources (enrich responses)
177
+ const tokenDataSource = new TokenDataSource_1.TokenDataSource({
178
+ messenger: messengers.tokenMessenger,
179
+ queryApiClient,
180
+ });
181
+ const priceDataSource = new PriceDataSource_1.PriceDataSource({
182
+ messenger: messengers.priceMessenger,
183
+ queryApiClient,
184
+ });
185
+ const detectionMiddleware = new middlewares_1.DetectionMiddleware({
186
+ messenger: messengers.detectionMessenger,
187
+ });
188
+ return {
189
+ rpcDataSource,
190
+ backendWebsocketDataSource,
191
+ accountsApiDataSource,
192
+ snapDataSource,
193
+ tokenDataSource,
194
+ priceDataSource,
195
+ detectionMiddleware,
196
+ };
197
+ }
198
+ exports.initDataSources = initDataSources;
199
+ //# sourceMappingURL=initDataSources.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initDataSources.cjs","sourceRoot":"","sources":["../../src/data-sources/initDataSources.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ApiPlatformClient } from '@metamask/core-backend';\nimport { Messenger } from '@metamask/messenger';\nimport type { ActionConstraint, EventConstraint } from '@metamask/messenger';\n\nimport { AccountsApiDataSource } from './AccountsApiDataSource';\nimport type {\n AccountsApiDataSourceActions,\n AccountsApiDataSourceAllowedActions,\n AccountsApiDataSourceEvents,\n AccountsApiDataSourceMessenger,\n} from './AccountsApiDataSource';\nimport { BackendWebsocketDataSource } from './BackendWebsocketDataSource';\nimport type {\n BackendWebsocketDataSourceActions,\n BackendWebsocketDataSourceAllowedActions,\n BackendWebsocketDataSourceAllowedEvents,\n BackendWebsocketDataSourceEvents,\n BackendWebsocketDataSourceMessenger,\n} from './BackendWebsocketDataSource';\nimport { PriceDataSource } from './PriceDataSource';\nimport type {\n PriceDataSourceActions,\n PriceDataSourceAllowedActions,\n PriceDataSourceEvents,\n PriceDataSourceMessenger,\n} from './PriceDataSource';\nimport { RpcDataSource } from './RpcDataSource';\nimport type {\n RpcDataSourceActions,\n RpcDataSourceAllowedActions,\n RpcDataSourceAllowedEvents,\n RpcDataSourceEvents,\n RpcDataSourceMessenger,\n} from './RpcDataSource';\nimport { SnapDataSource } from './SnapDataSource';\nimport type {\n SnapDataSourceActions,\n SnapDataSourceEvents,\n SnapDataSourceMessenger,\n SnapProvider,\n} from './SnapDataSource';\nimport { TokenDataSource } from './TokenDataSource';\nimport type {\n TokenDataSourceActions,\n TokenDataSourceMessenger,\n} from './TokenDataSource';\nimport type {\n DetectionMiddlewareActions,\n DetectionMiddlewareMessenger,\n} from '../middlewares';\nimport { DetectionMiddleware } from '../middlewares';\n\n// ============================================================================\n// ACTION & EVENT TYPES\n// ============================================================================\n\n/**\n * All actions from data sources.\n */\nexport type DataSourceActions =\n | RpcDataSourceActions\n | BackendWebsocketDataSourceActions\n | AccountsApiDataSourceActions\n | SnapDataSourceActions\n | TokenDataSourceActions\n | PriceDataSourceActions\n | DetectionMiddlewareActions;\n\n/**\n * All events from data sources.\n */\nexport type DataSourceEvents =\n | RpcDataSourceEvents\n | BackendWebsocketDataSourceEvents\n | AccountsApiDataSourceEvents\n | SnapDataSourceEvents\n | PriceDataSourceEvents;\n\n/**\n * All external actions that data sources need.\n * Note: TokenDataSource, AccountsApiDataSource, and PriceDataSource now use ApiPlatformClient\n * directly, so they don't need BackendApiClient actions delegated.\n */\nexport type DataSourceAllowedActions =\n | RpcDataSourceAllowedActions\n | BackendWebsocketDataSourceAllowedActions\n | AccountsApiDataSourceAllowedActions\n | PriceDataSourceAllowedActions;\n\n/**\n * All external events that data sources need.\n */\nexport type DataSourceAllowedEvents =\n | RpcDataSourceAllowedEvents\n | BackendWebsocketDataSourceAllowedEvents;\n\n/**\n * Root messenger type for all data sources.\n */\nexport type RootMessenger<\n AllowedActions extends ActionConstraint,\n AllowedEvents extends EventConstraint,\n> = Messenger<string, AllowedActions, AllowedEvents>;\n\n// ============================================================================\n// MESSENGER TYPES\n// ============================================================================\n\n/**\n * All messengers for data sources.\n */\nexport type DataSourceMessengers = {\n rpcMessenger: RpcDataSourceMessenger;\n backendWebsocketMessenger: BackendWebsocketDataSourceMessenger;\n accountsApiMessenger: AccountsApiDataSourceMessenger;\n snapMessenger: SnapDataSourceMessenger;\n tokenMessenger: TokenDataSourceMessenger;\n priceMessenger: PriceDataSourceMessenger;\n detectionMessenger: DetectionMiddlewareMessenger;\n};\n\n/**\n * Options for initializing messengers.\n */\nexport type InitMessengersOptions<\n AllowedActions extends ActionConstraint,\n AllowedEvents extends EventConstraint,\n> = {\n /** The root controller messenger */\n messenger: RootMessenger<AllowedActions, AllowedEvents>;\n};\n\n// ============================================================================\n// CONTROLLER TYPES\n// ============================================================================\n\n/**\n * All data source instances.\n */\nexport type DataSources = {\n rpcDataSource: RpcDataSource;\n backendWebsocketDataSource: BackendWebsocketDataSource;\n accountsApiDataSource: AccountsApiDataSource;\n snapDataSource: SnapDataSource;\n tokenDataSource: TokenDataSource;\n priceDataSource: PriceDataSource;\n detectionMiddleware: DetectionMiddleware;\n};\n\n/**\n * Options for initializing data sources.\n */\nexport type InitDataSourcesOptions = {\n /** Messengers for each data source */\n messengers: DataSourceMessengers;\n\n /** Snap provider for communicating with snaps */\n snapProvider: SnapProvider;\n\n /** ApiPlatformClient for cached API calls */\n queryApiClient: ApiPlatformClient;\n};\n\n// ============================================================================\n// MESSENGER INITIALIZATION\n// ============================================================================\n\n/**\n * Initialize all messengers for data sources.\n *\n * This function creates child messengers for each data source from the root\n * controller messenger, with proper action/event delegation.\n *\n * @example\n * ```typescript\n * import { initMessengers } from '@metamask/assets-controllers';\n *\n * const messengers = initMessengers({ messenger });\n * ```\n *\n * @param options - Configuration options\n * @returns Object containing all messengers\n */\nexport function initMessengers<\n AllowedActions extends ActionConstraint,\n AllowedEvents extends EventConstraint,\n>(\n options: InitMessengersOptions<AllowedActions, AllowedEvents>,\n): DataSourceMessengers {\n const { messenger } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rootMessenger = messenger as any;\n\n // RPC Data Source messenger\n const rpcMessenger = new Messenger({\n namespace: 'RpcDataSource',\n parent: rootMessenger,\n });\n rootMessenger.delegate({\n actions: [\n 'NetworkController:getState',\n 'NetworkController:getNetworkClientById',\n 'AssetsController:activeChainsUpdate',\n 'AssetsController:assetsUpdate',\n ],\n events: ['NetworkController:stateChange'],\n messenger: rpcMessenger,\n });\n\n // Backend Websocket Data Source messenger\n const backendWebsocketMessenger = new Messenger({\n namespace: 'BackendWebsocketDataSource',\n parent: rootMessenger,\n });\n rootMessenger.delegate({\n actions: [\n 'BackendWebSocketService:subscribe',\n 'BackendWebSocketService:unsubscribe',\n 'BackendWebSocketService:getState',\n 'BackendWebSocketService:getConnectionInfo',\n 'BackendWebSocketService:findSubscriptionsByChannelPrefix',\n 'AssetsController:activeChainsUpdate',\n 'AssetsController:assetsUpdate',\n ],\n events: [\n 'BackendWebSocketService:stateChange',\n 'BackendWebSocketService:connectionStateChanged',\n 'AccountsApiDataSource:activeChainsUpdated',\n ],\n messenger: backendWebsocketMessenger,\n });\n\n // Accounts API Data Source messenger\n // Note: AccountsApiDataSource uses ApiPlatformClient directly, so no BackendApiClient actions needed\n const accountsApiMessenger = new Messenger({\n namespace: 'AccountsApiDataSource',\n parent: rootMessenger,\n });\n rootMessenger.delegate({\n actions: [\n 'AssetsController:activeChainsUpdate',\n 'AssetsController:assetsUpdate',\n ],\n messenger: accountsApiMessenger,\n });\n\n // Snap Data Source messenger\n const snapMessenger = new Messenger({\n namespace: 'SnapDataSource',\n parent: rootMessenger,\n });\n rootMessenger.delegate({\n actions: [\n 'AssetsController:activeChainsUpdate',\n 'AssetsController:assetsUpdate',\n ],\n events: [\n // Snap keyring balance updates - snaps emit this when balances change\n 'AccountsController:accountBalancesUpdated',\n ],\n messenger: snapMessenger,\n });\n\n // Token Data Source messenger\n // Note: TokenDataSource uses ApiPlatformClient directly, so no BackendApiClient actions needed\n const tokenMessenger = new Messenger({\n namespace: 'TokenDataSource',\n parent: rootMessenger,\n });\n\n // Price Data Source messenger\n // Note: PriceDataSource uses ApiPlatformClient directly, so no BackendApiClient actions needed\n const priceMessenger = new Messenger({\n namespace: 'PriceDataSource',\n parent: rootMessenger,\n });\n rootMessenger.delegate({\n actions: ['AssetsController:getState', 'AssetsController:assetsUpdate'],\n messenger: priceMessenger,\n });\n\n // Detection Middleware messenger\n const detectionMessenger = new Messenger({\n namespace: 'DetectionMiddleware',\n parent: rootMessenger,\n });\n\n return {\n rpcMessenger: rpcMessenger as RpcDataSourceMessenger,\n backendWebsocketMessenger:\n backendWebsocketMessenger as BackendWebsocketDataSourceMessenger,\n accountsApiMessenger:\n accountsApiMessenger as AccountsApiDataSourceMessenger,\n snapMessenger: snapMessenger as SnapDataSourceMessenger,\n tokenMessenger: tokenMessenger as TokenDataSourceMessenger,\n priceMessenger: priceMessenger as PriceDataSourceMessenger,\n detectionMessenger: detectionMessenger as DetectionMiddlewareMessenger,\n };\n}\n\n// ============================================================================\n// DATA SOURCE INITIALIZATION\n// ============================================================================\n\n/**\n * Initialize all data sources and middlewares.\n *\n * This function creates and initializes all data sources, registering their\n * action handlers with the messenger.\n *\n * @example\n * ```typescript\n * import { initMessengers, initDataSources } from '@metamask/assets-controllers';\n *\n * // Initialize messengers first\n * const messengers = initMessengers({ controllerMessenger });\n *\n * // Then initialize data sources\n * const dataSources = initDataSources({\n * messengers,\n * snapProvider: snapController,\n * });\n * ```\n *\n * @param options - Configuration options\n * @returns Object containing all data source instances\n */\nexport function initDataSources(options: InitDataSourcesOptions): DataSources {\n const { messengers, snapProvider, queryApiClient } = options;\n\n // Initialize primary data sources (provide balance data)\n const rpcDataSource = new RpcDataSource({\n messenger: messengers.rpcMessenger,\n });\n\n const backendWebsocketDataSource = new BackendWebsocketDataSource({\n messenger: messengers.backendWebsocketMessenger,\n });\n\n const accountsApiDataSource = new AccountsApiDataSource({\n messenger: messengers.accountsApiMessenger,\n queryApiClient,\n });\n\n const snapDataSource = new SnapDataSource({\n messenger: messengers.snapMessenger,\n snapProvider,\n });\n\n // Initialize middleware data sources (enrich responses)\n const tokenDataSource = new TokenDataSource({\n messenger: messengers.tokenMessenger,\n queryApiClient,\n });\n\n const priceDataSource = new PriceDataSource({\n messenger: messengers.priceMessenger,\n queryApiClient,\n });\n\n const detectionMiddleware = new DetectionMiddleware({\n messenger: messengers.detectionMessenger,\n });\n\n return {\n rpcDataSource,\n backendWebsocketDataSource,\n accountsApiDataSource,\n snapDataSource,\n tokenDataSource,\n priceDataSource,\n detectionMiddleware,\n };\n}\n"]}