@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,360 @@
1
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
+ import type { CaipAssetType, CaipChainId, Json } from "@metamask/utils";
3
+ /**
4
+ * CAIP-19 compliant asset identifier
5
+ * Format: "{chainId}/{assetNamespace}:{assetReference}[/tokenId]"
6
+ *
7
+ * Examples:
8
+ * - Native: "eip155:1/slip44:60" (ETH)
9
+ * - ERC20: "eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" (USDC)
10
+ * - ERC721: "eip155:1/erc721:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D/1234" (BAYC #1234)
11
+ * - SPL: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
12
+ */
13
+ export type Caip19AssetId = CaipAssetType;
14
+ /**
15
+ * InternalAccount UUID from AccountsController
16
+ * Not the blockchain address!
17
+ */
18
+ export type AccountId = string;
19
+ /**
20
+ * CAIP-2 chain identifier
21
+ */
22
+ export type ChainId = CaipChainId;
23
+ /**
24
+ * Asset types define the metadata structure, not blockchain implementation.
25
+ * - "fungible" includes: native, erc20, spl - all share balance, symbol, decimals
26
+ * - "nft" includes: erc721, erc1155 - include tokenId, image, attributes
27
+ */
28
+ export type AssetType = 'fungible' | 'nft' | 'collectible';
29
+ /**
30
+ * Token standards - blockchain implementation details
31
+ */
32
+ export type TokenStandard = 'native' | 'erc20' | 'erc721' | 'erc1155' | 'spl' | string;
33
+ /**
34
+ * Base metadata attributes shared by ALL asset types.
35
+ */
36
+ export type BaseAssetMetadata = {
37
+ /** Token standard - how it's implemented on the blockchain */
38
+ type: TokenStandard;
39
+ /** Display symbol (e.g., "ETH", "USDC") */
40
+ symbol: string;
41
+ /** Full name (e.g., "Ethereum", "USD Coin") */
42
+ name: string;
43
+ /** Token decimals (18 for ETH, 6 for USDC, etc.) */
44
+ decimals: number;
45
+ /** Logo URL or data URI */
46
+ image?: string;
47
+ };
48
+ /**
49
+ * Metadata for fungible tokens
50
+ * Asset Type: "fungible"
51
+ * Includes: native, ERC-20, SPL, and other fungible token standards
52
+ */
53
+ export type FungibleAssetMetadata = {
54
+ type: 'native' | 'erc20' | 'spl';
55
+ /** Spam detection flag */
56
+ isSpam?: boolean;
57
+ /** Verification status */
58
+ verified?: boolean;
59
+ /** Token list memberships */
60
+ collections?: string[];
61
+ } & BaseAssetMetadata;
62
+ /**
63
+ * Metadata for ERC721 NFTs
64
+ * Asset Type: "nft"
65
+ */
66
+ export type ERC721AssetMetadata = {
67
+ type: 'erc721';
68
+ decimals: 0;
69
+ /** Collection name */
70
+ collectionName?: string;
71
+ /** Collection size */
72
+ collectionSize?: number;
73
+ /** NFT traits/attributes - must be Json-serializable */
74
+ traits?: Record<string, Json>;
75
+ /** Rarity score */
76
+ rarity?: number;
77
+ /** Verification status */
78
+ verified?: boolean;
79
+ } & BaseAssetMetadata;
80
+ /**
81
+ * Metadata for ERC1155 multi-tokens
82
+ */
83
+ export type ERC1155AssetMetadata = {
84
+ type: 'erc1155';
85
+ /** Token URI */
86
+ tokenUri?: string;
87
+ /** Token category */
88
+ category?: string;
89
+ /** Spam detection flag */
90
+ isSpam?: boolean;
91
+ } & BaseAssetMetadata;
92
+ /**
93
+ * Union type representing all possible asset metadata types.
94
+ * All types must be JSON-serializable.
95
+ */
96
+ export type AssetMetadata = FungibleAssetMetadata | ERC721AssetMetadata | ERC1155AssetMetadata | (BaseAssetMetadata & {
97
+ [key: string]: Json;
98
+ });
99
+ /**
100
+ * Base price attributes.
101
+ */
102
+ export type BaseAssetPrice = {
103
+ /** Current price in USD */
104
+ price: number;
105
+ /** 24h price change percentage */
106
+ priceChange24h?: number;
107
+ /** Timestamp of last price update */
108
+ lastUpdated: number;
109
+ };
110
+ /**
111
+ * Price data for fungible tokens (native, ERC20, SPL)
112
+ */
113
+ export type FungibleAssetPrice = {
114
+ /** Market capitalization */
115
+ marketCap?: number;
116
+ /** 24h trading volume */
117
+ volume24h?: number;
118
+ /** Circulating supply */
119
+ circulatingSupply?: number;
120
+ /** Total supply */
121
+ totalSupply?: number;
122
+ } & BaseAssetPrice;
123
+ /**
124
+ * Price data for NFT collections
125
+ */
126
+ export type NFTAssetPrice = {
127
+ /** Floor price */
128
+ floorPrice?: number;
129
+ /** Last sale price */
130
+ lastSalePrice?: number;
131
+ /** Collection trading volume */
132
+ collectionVolume?: number;
133
+ /** Average price */
134
+ averagePrice?: number;
135
+ /** Number of sales in 24h */
136
+ sales24h?: number;
137
+ } & BaseAssetPrice;
138
+ /**
139
+ * Union type representing all possible asset price types.
140
+ * All types must be JSON-serializable.
141
+ */
142
+ export type AssetPrice = FungibleAssetPrice | NFTAssetPrice | (BaseAssetPrice & {
143
+ [key: string]: Json;
144
+ });
145
+ /**
146
+ * Balance data for fungible tokens (native, ERC20, SPL).
147
+ */
148
+ export type FungibleAssetBalance = {
149
+ /** Raw balance amount as string (e.g., "1000000000" for 1000 USDC) */
150
+ amount: string;
151
+ };
152
+ /**
153
+ * Balance data for ERC721 NFTs.
154
+ * Each tokenId has its own CAIP-19 asset ID, so always "1".
155
+ */
156
+ export type ERC721AssetBalance = {
157
+ /** Always "1" for ERC721 (non-fungible) */
158
+ amount: '1';
159
+ };
160
+ /**
161
+ * Balance data for ERC1155 multi-tokens.
162
+ */
163
+ export type ERC1155AssetBalance = {
164
+ /** Quantity owned of this specific tokenId */
165
+ amount: string;
166
+ };
167
+ /**
168
+ * Union type representing all possible asset balance types.
169
+ * All types must be JSON-serializable.
170
+ */
171
+ export type AssetBalance = FungibleAssetBalance | ERC721AssetBalance | ERC1155AssetBalance | {
172
+ amount: string;
173
+ [key: string]: Json;
174
+ };
175
+ /**
176
+ * Data type dimension - what kind of data
177
+ */
178
+ export type DataType = 'balance' | 'metadata' | 'price';
179
+ /**
180
+ * Request for data from data sources
181
+ */
182
+ export type DataRequest = {
183
+ /** Accounts to fetch data for */
184
+ accounts: InternalAccount[];
185
+ /** CAIP-2 chain IDs */
186
+ chainIds: ChainId[];
187
+ /** Filter by asset types */
188
+ assetTypes?: AssetType[];
189
+ /** Which data to fetch */
190
+ dataTypes: DataType[];
191
+ /** Specific CAIP-19 asset IDs */
192
+ customAssets?: Caip19AssetId[];
193
+ /** Force fresh fetch, bypass cache */
194
+ forceUpdate?: boolean;
195
+ /** Hint for polling interval (ms) - used by data sources that implement polling */
196
+ updateInterval?: number;
197
+ };
198
+ /**
199
+ * Response from data sources
200
+ */
201
+ export type DataResponse = {
202
+ /** Metadata for assets (shared across accounts) */
203
+ assetsMetadata?: Record<Caip19AssetId, AssetMetadata>;
204
+ /** Price data for assets (shared across accounts) */
205
+ assetsPrice?: Record<Caip19AssetId, AssetPrice>;
206
+ /** Balance data per account */
207
+ assetsBalance?: Record<AccountId, Record<Caip19AssetId, AssetBalance>>;
208
+ /** Errors encountered, keyed by chain ID */
209
+ errors?: Record<ChainId, string>;
210
+ /** Detected assets (assets that do not have metadata) */
211
+ detectedAssets?: Record<AccountId, Caip19AssetId[]>;
212
+ };
213
+ /**
214
+ * Internal state structure for AssetsController following normalized design.
215
+ *
216
+ * Keys use CAIP identifiers:
217
+ * - assetsMetadata keys: CAIP-19 asset IDs (e.g., "eip155:1/erc20:0x...")
218
+ * - assetsBalance outer keys: Account IDs (InternalAccount.id UUIDs)
219
+ * - assetsBalance inner keys: CAIP-19 asset IDs
220
+ * - customAssets outer keys: Account IDs (InternalAccount.id UUIDs)
221
+ * - customAssets inner values: CAIP-19 asset IDs array
222
+ */
223
+ export type AssetsControllerStateInternal = {
224
+ /** Shared metadata for all assets (stored once per asset) */
225
+ assetsMetadata: Record<Caip19AssetId, AssetMetadata>;
226
+ /** Per-account balance data */
227
+ assetsBalance: Record<AccountId, Record<Caip19AssetId, AssetBalance>>;
228
+ /** Custom assets added by users per account */
229
+ customAssets: Record<AccountId, Caip19AssetId[]>;
230
+ };
231
+ /**
232
+ * Base context for all middleware operations.
233
+ * Contains the common interface shared by fetch and subscribe.
234
+ */
235
+ export type Context = {
236
+ /** The data request */
237
+ request: DataRequest;
238
+ /** The response data (mutated by middlewares) */
239
+ response: DataResponse;
240
+ /** Get current assets state */
241
+ getAssetsState: () => AssetsControllerStateInternal;
242
+ };
243
+ /**
244
+ * Next function for middleware chain
245
+ */
246
+ export type NextFunction = (context: Context) => Promise<Context>;
247
+ /**
248
+ * Middleware function - works for both fetch and subscribe operations.
249
+ */
250
+ export type Middleware = (context: Context, next: NextFunction) => Promise<Context>;
251
+ /**
252
+ * Wraps a middleware to only execute if specific dataTypes are requested.
253
+ *
254
+ * @param dataTypes - DataTypes that must be in the request for middleware to run
255
+ * @param middleware - The middleware to conditionally execute
256
+ * @returns A middleware that skips execution if none of the dataTypes are requested
257
+ *
258
+ * @example
259
+ * ```typescript
260
+ * // Only runs for metadata requests
261
+ * const metadataMiddleware = forDataTypes(['metadata'], async (ctx, next) => {
262
+ * const result = await next(ctx);
263
+ * // Enrich metadata...
264
+ * return result;
265
+ * });
266
+ *
267
+ * // Runs for balance or price requests
268
+ * const balanceOrPriceMiddleware = forDataTypes(['balance', 'price'], async (ctx, next) => {
269
+ * const result = await next(ctx);
270
+ * // Process balances or prices...
271
+ * return result;
272
+ * });
273
+ * ```
274
+ */
275
+ export declare function forDataTypes(dataTypes: DataType[], middleware: Middleware): Middleware;
276
+ /**
277
+ * Context for fetch operations.
278
+ * Extends base Context - no additional fields needed for fetch.
279
+ */
280
+ export type FetchContext = Context;
281
+ export type FetchNextFunction = NextFunction;
282
+ export type FetchMiddleware = Middleware;
283
+ /**
284
+ * Data source ID.
285
+ *
286
+ * Data sources follow a standard messenger pattern:
287
+ * - `${id}:getActiveChains` - action to get active chains
288
+ * - `${id}:activeChainsUpdated` - event when chains change
289
+ *
290
+ * Registration order determines subscription order.
291
+ */
292
+ export type DataSourceDefinition = string;
293
+ /**
294
+ * Registered data source
295
+ */
296
+ export type RegisteredDataSource = DataSourceDefinition;
297
+ /**
298
+ * Subscription response
299
+ */
300
+ export type SubscriptionResponse = {
301
+ /** Chains actively subscribed */
302
+ chains: ChainId[];
303
+ /** Account ID being watched */
304
+ accountId: AccountId;
305
+ /** Asset types being watched */
306
+ assetTypes: AssetType[];
307
+ /** Data types being kept fresh */
308
+ dataTypes: DataType[];
309
+ /** Cleanup function */
310
+ unsubscribe: () => void;
311
+ };
312
+ /**
313
+ * Combined asset type matching state structure: balance, metadata, price
314
+ */
315
+ export type Asset = {
316
+ /** CAIP-19 asset ID */
317
+ id: Caip19AssetId;
318
+ /** CAIP-2 chain ID (extracted from id) */
319
+ chainId: ChainId;
320
+ /** Balance data */
321
+ balance: AssetBalance;
322
+ /** Metadata (symbol, name, decimals, etc.) */
323
+ metadata: AssetMetadata;
324
+ /** Price data */
325
+ price: AssetPrice;
326
+ /** Computed fiat value (balance × price) */
327
+ fiatValue: number;
328
+ };
329
+ /**
330
+ * Event emitted when balances change
331
+ */
332
+ export type BalanceChangeEvent = {
333
+ accountId: AccountId;
334
+ assetId: Caip19AssetId;
335
+ previousAmount: string;
336
+ newAmount: string;
337
+ timestamp: number;
338
+ };
339
+ /**
340
+ * Event emitted when prices change
341
+ */
342
+ export type PriceChangeEvent = {
343
+ assetIds: Caip19AssetId[];
344
+ timestamp: number;
345
+ };
346
+ /**
347
+ * Event emitted when metadata changes
348
+ */
349
+ export type MetadataChangeEvent = {
350
+ assetId: Caip19AssetId;
351
+ changes: Partial<AssetMetadata>;
352
+ };
353
+ /**
354
+ * Event emitted when assets without metadata are detected
355
+ */
356
+ export type AssetsDetectedEvent = {
357
+ accountId: AccountId;
358
+ assetIds: Caip19AssetId[];
359
+ };
360
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.mjs ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Wraps a middleware to only execute if specific dataTypes are requested.
3
+ *
4
+ * @param dataTypes - DataTypes that must be in the request for middleware to run
5
+ * @param middleware - The middleware to conditionally execute
6
+ * @returns A middleware that skips execution if none of the dataTypes are requested
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Only runs for metadata requests
11
+ * const metadataMiddleware = forDataTypes(['metadata'], async (ctx, next) => {
12
+ * const result = await next(ctx);
13
+ * // Enrich metadata...
14
+ * return result;
15
+ * });
16
+ *
17
+ * // Runs for balance or price requests
18
+ * const balanceOrPriceMiddleware = forDataTypes(['balance', 'price'], async (ctx, next) => {
19
+ * const result = await next(ctx);
20
+ * // Process balances or prices...
21
+ * return result;
22
+ * });
23
+ * ```
24
+ */
25
+ export function forDataTypes(dataTypes, middleware) {
26
+ return async (ctx, next) => {
27
+ const requestedTypes = ctx.request.dataTypes;
28
+ const shouldRun = dataTypes.some((dt) => requestedTypes.includes(dt));
29
+ if (!shouldRun) {
30
+ return next(ctx);
31
+ }
32
+ return middleware(ctx, next);
33
+ };
34
+ }
35
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyTA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAqB,EACrB,UAAsB;IAEtB,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { CaipAssetType, CaipChainId, Json } from '@metamask/utils';\n\n/**\n * CAIP-19 compliant asset identifier\n * Format: \"{chainId}/{assetNamespace}:{assetReference}[/tokenId]\"\n *\n * Examples:\n * - Native: \"eip155:1/slip44:60\" (ETH)\n * - ERC20: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\" (USDC)\n * - ERC721: \"eip155:1/erc721:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D/1234\" (BAYC #1234)\n * - SPL: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n */\nexport type Caip19AssetId = CaipAssetType;\n\n/**\n * InternalAccount UUID from AccountsController\n * Not the blockchain address!\n */\nexport type AccountId = string;\n\n/**\n * CAIP-2 chain identifier\n */\nexport type ChainId = CaipChainId;\n\n// ============================================================================\n// ASSET TYPES - Defined by metadata structure\n// ============================================================================\n\n/**\n * Asset types define the metadata structure, not blockchain implementation.\n * - \"fungible\" includes: native, erc20, spl - all share balance, symbol, decimals\n * - \"nft\" includes: erc721, erc1155 - include tokenId, image, attributes\n */\nexport type AssetType = 'fungible' | 'nft' | 'collectible';\n\n/**\n * Token standards - blockchain implementation details\n */\nexport type TokenStandard =\n | 'native'\n | 'erc20'\n | 'erc721'\n | 'erc1155'\n | 'spl'\n | string;\n\n// ============================================================================\n// METADATA TYPES (vary by asset type)\n// ============================================================================\n\n/**\n * Base metadata attributes shared by ALL asset types.\n */\nexport type BaseAssetMetadata = {\n /** Token standard - how it's implemented on the blockchain */\n type: TokenStandard;\n /** Display symbol (e.g., \"ETH\", \"USDC\") */\n symbol: string;\n /** Full name (e.g., \"Ethereum\", \"USD Coin\") */\n name: string;\n /** Token decimals (18 for ETH, 6 for USDC, etc.) */\n decimals: number;\n /** Logo URL or data URI */\n image?: string;\n};\n\n/**\n * Metadata for fungible tokens\n * Asset Type: \"fungible\"\n * Includes: native, ERC-20, SPL, and other fungible token standards\n */\nexport type FungibleAssetMetadata = {\n type: 'native' | 'erc20' | 'spl';\n /** Spam detection flag */\n isSpam?: boolean;\n /** Verification status */\n verified?: boolean;\n /** Token list memberships */\n collections?: string[];\n} & BaseAssetMetadata;\n\n/**\n * Metadata for ERC721 NFTs\n * Asset Type: \"nft\"\n */\nexport type ERC721AssetMetadata = {\n type: 'erc721';\n decimals: 0;\n /** Collection name */\n collectionName?: string;\n /** Collection size */\n collectionSize?: number;\n /** NFT traits/attributes - must be Json-serializable */\n traits?: Record<string, Json>;\n /** Rarity score */\n rarity?: number;\n /** Verification status */\n verified?: boolean;\n} & BaseAssetMetadata;\n\n/**\n * Metadata for ERC1155 multi-tokens\n */\nexport type ERC1155AssetMetadata = {\n type: 'erc1155';\n /** Token URI */\n tokenUri?: string;\n /** Token category */\n category?: string;\n /** Spam detection flag */\n isSpam?: boolean;\n} & BaseAssetMetadata;\n\n/**\n * Union type representing all possible asset metadata types.\n * All types must be JSON-serializable.\n */\nexport type AssetMetadata =\n | FungibleAssetMetadata\n | ERC721AssetMetadata\n | ERC1155AssetMetadata\n | (BaseAssetMetadata & { [key: string]: Json });\n\n// ============================================================================\n// PRICE TYPES (vary by asset type)\n// ============================================================================\n\n/**\n * Base price attributes.\n */\nexport type BaseAssetPrice = {\n /** Current price in USD */\n price: number;\n /** 24h price change percentage */\n priceChange24h?: number;\n /** Timestamp of last price update */\n lastUpdated: number;\n};\n\n/**\n * Price data for fungible tokens (native, ERC20, SPL)\n */\nexport type FungibleAssetPrice = {\n /** Market capitalization */\n marketCap?: number;\n /** 24h trading volume */\n volume24h?: number;\n /** Circulating supply */\n circulatingSupply?: number;\n /** Total supply */\n totalSupply?: number;\n} & BaseAssetPrice;\n\n/**\n * Price data for NFT collections\n */\nexport type NFTAssetPrice = {\n /** Floor price */\n floorPrice?: number;\n /** Last sale price */\n lastSalePrice?: number;\n /** Collection trading volume */\n collectionVolume?: number;\n /** Average price */\n averagePrice?: number;\n /** Number of sales in 24h */\n sales24h?: number;\n} & BaseAssetPrice;\n\n/**\n * Union type representing all possible asset price types.\n * All types must be JSON-serializable.\n */\nexport type AssetPrice =\n | FungibleAssetPrice\n | NFTAssetPrice\n | (BaseAssetPrice & { [key: string]: Json });\n\n// ============================================================================\n// BALANCE TYPES (vary by asset type)\n// ============================================================================\n\n/**\n * Balance data for fungible tokens (native, ERC20, SPL).\n */\nexport type FungibleAssetBalance = {\n /** Raw balance amount as string (e.g., \"1000000000\" for 1000 USDC) */\n amount: string;\n};\n\n/**\n * Balance data for ERC721 NFTs.\n * Each tokenId has its own CAIP-19 asset ID, so always \"1\".\n */\nexport type ERC721AssetBalance = {\n /** Always \"1\" for ERC721 (non-fungible) */\n amount: '1';\n};\n\n/**\n * Balance data for ERC1155 multi-tokens.\n */\nexport type ERC1155AssetBalance = {\n /** Quantity owned of this specific tokenId */\n amount: string;\n};\n\n/**\n * Union type representing all possible asset balance types.\n * All types must be JSON-serializable.\n */\nexport type AssetBalance =\n | FungibleAssetBalance\n | ERC721AssetBalance\n | ERC1155AssetBalance\n | { amount: string; [key: string]: Json };\n\n// ============================================================================\n// DATA SOURCE TYPES\n// ============================================================================\n\n/**\n * Data type dimension - what kind of data\n */\nexport type DataType = 'balance' | 'metadata' | 'price';\n\n/**\n * Request for data from data sources\n */\nexport type DataRequest = {\n /** Accounts to fetch data for */\n accounts: InternalAccount[];\n /** CAIP-2 chain IDs */\n chainIds: ChainId[];\n /** Filter by asset types */\n assetTypes?: AssetType[];\n /** Which data to fetch */\n dataTypes: DataType[];\n /** Specific CAIP-19 asset IDs */\n customAssets?: Caip19AssetId[];\n /** Force fresh fetch, bypass cache */\n forceUpdate?: boolean;\n /** Hint for polling interval (ms) - used by data sources that implement polling */\n updateInterval?: number;\n};\n\n/**\n * Response from data sources\n */\nexport type DataResponse = {\n /** Metadata for assets (shared across accounts) */\n assetsMetadata?: Record<Caip19AssetId, AssetMetadata>;\n /** Price data for assets (shared across accounts) */\n assetsPrice?: Record<Caip19AssetId, AssetPrice>;\n /** Balance data per account */\n assetsBalance?: Record<AccountId, Record<Caip19AssetId, AssetBalance>>;\n /** Errors encountered, keyed by chain ID */\n errors?: Record<ChainId, string>;\n /** Detected assets (assets that do not have metadata) */\n detectedAssets?: Record<AccountId, Caip19AssetId[]>;\n};\n\n// ============================================================================\n// UNIFIED MIDDLEWARE TYPES\n// ============================================================================\n\n/**\n * Internal state structure for AssetsController following normalized design.\n *\n * Keys use CAIP identifiers:\n * - assetsMetadata keys: CAIP-19 asset IDs (e.g., \"eip155:1/erc20:0x...\")\n * - assetsBalance outer keys: Account IDs (InternalAccount.id UUIDs)\n * - assetsBalance inner keys: CAIP-19 asset IDs\n * - customAssets outer keys: Account IDs (InternalAccount.id UUIDs)\n * - customAssets inner values: CAIP-19 asset IDs array\n */\nexport type AssetsControllerStateInternal = {\n /** Shared metadata for all assets (stored once per asset) */\n assetsMetadata: Record<Caip19AssetId, AssetMetadata>;\n /** Per-account balance data */\n assetsBalance: Record<AccountId, Record<Caip19AssetId, AssetBalance>>;\n /** Custom assets added by users per account */\n customAssets: Record<AccountId, Caip19AssetId[]>;\n};\n\n/**\n * Base context for all middleware operations.\n * Contains the common interface shared by fetch and subscribe.\n */\nexport type Context = {\n /** The data request */\n request: DataRequest;\n /** The response data (mutated by middlewares) */\n response: DataResponse;\n /** Get current assets state */\n getAssetsState: () => AssetsControllerStateInternal;\n};\n\n/**\n * Next function for middleware chain\n */\nexport type NextFunction = (context: Context) => Promise<Context>;\n\n/**\n * Middleware function - works for both fetch and subscribe operations.\n */\nexport type Middleware = (\n context: Context,\n next: NextFunction,\n) => Promise<Context>;\n\n/**\n * Wraps a middleware to only execute if specific dataTypes are requested.\n *\n * @param dataTypes - DataTypes that must be in the request for middleware to run\n * @param middleware - The middleware to conditionally execute\n * @returns A middleware that skips execution if none of the dataTypes are requested\n *\n * @example\n * ```typescript\n * // Only runs for metadata requests\n * const metadataMiddleware = forDataTypes(['metadata'], async (ctx, next) => {\n * const result = await next(ctx);\n * // Enrich metadata...\n * return result;\n * });\n *\n * // Runs for balance or price requests\n * const balanceOrPriceMiddleware = forDataTypes(['balance', 'price'], async (ctx, next) => {\n * const result = await next(ctx);\n * // Process balances or prices...\n * return result;\n * });\n * ```\n */\nexport function forDataTypes(\n dataTypes: DataType[],\n middleware: Middleware,\n): Middleware {\n return async (ctx, next) => {\n const requestedTypes = ctx.request.dataTypes;\n const shouldRun = dataTypes.some((dt) => requestedTypes.includes(dt));\n\n if (!shouldRun) {\n return next(ctx);\n }\n\n return middleware(ctx, next);\n };\n}\n\n/**\n * Context for fetch operations.\n * Extends base Context - no additional fields needed for fetch.\n */\nexport type FetchContext = Context;\n\n// Legacy aliases for backwards compatibility\nexport type FetchNextFunction = NextFunction;\nexport type FetchMiddleware = Middleware;\n\n/**\n * Data source ID.\n *\n * Data sources follow a standard messenger pattern:\n * - `${id}:getActiveChains` - action to get active chains\n * - `${id}:activeChainsUpdated` - event when chains change\n *\n * Registration order determines subscription order.\n */\nexport type DataSourceDefinition = string;\n\n/**\n * Registered data source\n */\nexport type RegisteredDataSource = DataSourceDefinition;\n\n/**\n * Subscription response\n */\nexport type SubscriptionResponse = {\n /** Chains actively subscribed */\n chains: ChainId[];\n /** Account ID being watched */\n accountId: AccountId;\n /** Asset types being watched */\n assetTypes: AssetType[];\n /** Data types being kept fresh */\n dataTypes: DataType[];\n /** Cleanup function */\n unsubscribe: () => void;\n};\n\n// ============================================================================\n// COMBINED ASSET TYPE (for UI)\n// ============================================================================\n\n/**\n * Combined asset type matching state structure: balance, metadata, price\n */\nexport type Asset = {\n /** CAIP-19 asset ID */\n id: Caip19AssetId;\n /** CAIP-2 chain ID (extracted from id) */\n chainId: ChainId;\n /** Balance data */\n balance: AssetBalance;\n /** Metadata (symbol, name, decimals, etc.) */\n metadata: AssetMetadata;\n /** Price data */\n price: AssetPrice;\n /** Computed fiat value (balance × price) */\n fiatValue: number;\n};\n\n// ============================================================================\n// EVENT TYPES\n// ============================================================================\n\n/**\n * Event emitted when balances change\n */\nexport type BalanceChangeEvent = {\n accountId: AccountId;\n assetId: Caip19AssetId;\n previousAmount: string;\n newAmount: string;\n timestamp: number;\n};\n\n/**\n * Event emitted when prices change\n */\nexport type PriceChangeEvent = {\n assetIds: Caip19AssetId[];\n timestamp: number;\n};\n\n/**\n * Event emitted when metadata changes\n */\nexport type MetadataChangeEvent = {\n assetId: Caip19AssetId;\n changes: Partial<AssetMetadata>;\n};\n\n/**\n * Event emitted when assets without metadata are detected\n */\nexport type AssetsDetectedEvent = {\n accountId: AccountId;\n assetIds: Caip19AssetId[];\n};\n"]}
package/dist/utils.cjs ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAssetId = void 0;
4
+ const util_1 = require("@ethereumjs/util");
5
+ const utils_1 = require("@metamask/utils");
6
+ /**
7
+ * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
8
+ * This ensures consistent asset IDs regardless of the data source format.
9
+ *
10
+ * For EVM ERC20 tokens (e.g., "eip155:1/erc20:0x..."), the address is checksummed.
11
+ * All other asset types are returned unchanged.
12
+ *
13
+ * @param assetId - The CAIP-19 asset ID to normalize
14
+ * @returns The normalized asset ID with checksummed address (for EVM tokens)
15
+ */
16
+ function normalizeAssetId(assetId) {
17
+ const parsed = (0, utils_1.parseCaipAssetType)(assetId);
18
+ const chainIdParsed = (0, utils_1.parseCaipChainId)(parsed.chainId);
19
+ // Only checksum EVM ERC20 addresses
20
+ if (chainIdParsed.namespace === 'eip155' &&
21
+ parsed.assetNamespace === 'erc20') {
22
+ const checksummedAddress = (0, util_1.toChecksumAddress)(parsed.assetReference);
23
+ return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}`;
24
+ }
25
+ return assetId;
26
+ }
27
+ exports.normalizeAssetId = normalizeAssetId;
28
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AACrD,2CAAuE;AAIvE;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,IAAA,wBAAiB,EAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAmB,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAdD,4CAcC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type { Caip19AssetId } from './types';\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}` as Caip19AssetId;\n }\n\n return assetId;\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { Caip19AssetId } from "./types.cjs";
2
+ /**
3
+ * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
4
+ * This ensures consistent asset IDs regardless of the data source format.
5
+ *
6
+ * For EVM ERC20 tokens (e.g., "eip155:1/erc20:0x..."), the address is checksummed.
7
+ * All other asset types are returned unchanged.
8
+ *
9
+ * @param assetId - The CAIP-19 asset ID to normalize
10
+ * @returns The normalized asset ID with checksummed address (for EVM tokens)
11
+ */
12
+ export declare function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId;
13
+ //# sourceMappingURL=utils.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAgB;AAE7C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CActE"}
@@ -0,0 +1,13 @@
1
+ import type { Caip19AssetId } from "./types.mjs";
2
+ /**
3
+ * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
4
+ * This ensures consistent asset IDs regardless of the data source format.
5
+ *
6
+ * For EVM ERC20 tokens (e.g., "eip155:1/erc20:0x..."), the address is checksummed.
7
+ * All other asset types are returned unchanged.
8
+ *
9
+ * @param assetId - The CAIP-19 asset ID to normalize
10
+ * @returns The normalized asset ID with checksummed address (for EVM tokens)
11
+ */
12
+ export declare function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId;
13
+ //# sourceMappingURL=utils.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.mts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAgB;AAE7C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CActE"}
package/dist/utils.mjs ADDED
@@ -0,0 +1,24 @@
1
+ import { toChecksumAddress } from "@ethereumjs/util";
2
+ import { parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
3
+ /**
4
+ * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
5
+ * This ensures consistent asset IDs regardless of the data source format.
6
+ *
7
+ * For EVM ERC20 tokens (e.g., "eip155:1/erc20:0x..."), the address is checksummed.
8
+ * All other asset types are returned unchanged.
9
+ *
10
+ * @param assetId - The CAIP-19 asset ID to normalize
11
+ * @returns The normalized asset ID with checksummed address (for EVM tokens)
12
+ */
13
+ export function normalizeAssetId(assetId) {
14
+ const parsed = parseCaipAssetType(assetId);
15
+ const chainIdParsed = parseCaipChainId(parsed.chainId);
16
+ // Only checksum EVM ERC20 addresses
17
+ if (chainIdParsed.namespace === 'eip155' &&
18
+ parsed.assetNamespace === 'erc20') {
19
+ const checksummedAddress = toChecksumAddress(parsed.assetReference);
20
+ return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}`;
21
+ }
22
+ return assetId;
23
+ }
24
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB;AACrD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,wBAAwB;AAIvE;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAmB,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type { Caip19AssetId } from './types';\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}` as Caip19AssetId;\n }\n\n return assetId;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/assets-controller",
3
- "version": "0.0.0-preview-903db2da",
3
+ "version": "0.0.0-preview-3ec2a74",
4
4
  "description": "Tracks assets balances/prices and handles token detection across all digital assets",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -48,13 +48,26 @@
48
48
  "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
49
49
  },
50
50
  "dependencies": {
51
+ "@ethereumjs/util": "^9.1.0",
52
+ "@ethersproject/providers": "^5.7.0",
53
+ "@metamask/account-tree-controller": "^4.0.0",
51
54
  "@metamask/base-controller": "^9.0.0",
52
- "@metamask/messenger": "^0.3.0"
55
+ "@metamask/core-backend": "^5.0.0",
56
+ "@metamask/keyring-controller": "^25.0.0",
57
+ "@metamask/keyring-internal-api": "^9.0.0",
58
+ "@metamask/messenger": "^0.3.0",
59
+ "@metamask/network-enablement-controller": "^4.1.0",
60
+ "@metamask/utils": "^11.9.0",
61
+ "async-mutex": "^0.5.0",
62
+ "bignumber.js": "^9.1.2",
63
+ "lodash": "^4.17.21",
64
+ "viem": "^2.44.4"
53
65
  },
54
66
  "devDependencies": {
55
67
  "@metamask/auto-changelog": "^3.4.4",
56
68
  "@ts-bridge/cli": "^0.6.4",
57
69
  "@types/jest": "^27.4.1",
70
+ "@types/lodash": "^4.14.191",
58
71
  "deepmerge": "^4.2.2",
59
72
  "jest": "^27.5.1",
60
73
  "ts-jest": "^27.1.4",