@metamask/snap-networks-utils 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/README.md +4 -10
  3. package/dist/index.cjs +102 -5
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +51 -2
  6. package/dist/index.d.cts.map +1 -1
  7. package/dist/index.d.mts +51 -2
  8. package/dist/index.d.mts.map +1 -1
  9. package/dist/index.mjs +32 -1
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/providers/assets/AssetsProvider.cjs +36 -18
  12. package/dist/providers/assets/AssetsProvider.cjs.map +1 -1
  13. package/dist/providers/assets/AssetsProvider.d.cts +30 -2
  14. package/dist/providers/assets/AssetsProvider.d.cts.map +1 -1
  15. package/dist/providers/assets/AssetsProvider.d.mts +30 -2
  16. package/dist/providers/assets/AssetsProvider.d.mts.map +1 -1
  17. package/dist/providers/assets/AssetsProvider.mjs +36 -18
  18. package/dist/providers/assets/AssetsProvider.mjs.map +1 -1
  19. package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.cjs +4 -17
  20. package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.cjs.map +1 -1
  21. package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.mjs +4 -17
  22. package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.mjs.map +1 -1
  23. package/dist/services/analytics/AnalyticsService.cjs +225 -0
  24. package/dist/services/analytics/AnalyticsService.cjs.map +1 -0
  25. package/dist/services/analytics/AnalyticsService.d.cts +175 -0
  26. package/dist/services/analytics/AnalyticsService.d.cts.map +1 -0
  27. package/dist/services/analytics/AnalyticsService.d.mts +175 -0
  28. package/dist/services/analytics/AnalyticsService.d.mts.map +1 -0
  29. package/dist/services/analytics/AnalyticsService.mjs +221 -0
  30. package/dist/services/analytics/AnalyticsService.mjs.map +1 -0
  31. package/dist/ui/ActionHeader/ActionHeader.cjs +23 -0
  32. package/dist/ui/ActionHeader/ActionHeader.cjs.map +1 -0
  33. package/dist/ui/ActionHeader/ActionHeader.d.cts +27 -0
  34. package/dist/ui/ActionHeader/ActionHeader.d.cts.map +1 -0
  35. package/dist/ui/ActionHeader/ActionHeader.d.mts +27 -0
  36. package/dist/ui/ActionHeader/ActionHeader.d.mts.map +1 -0
  37. package/dist/ui/ActionHeader/ActionHeader.mjs +19 -0
  38. package/dist/ui/ActionHeader/ActionHeader.mjs.map +1 -0
  39. package/dist/ui/Asset/Asset.cjs +68 -0
  40. package/dist/ui/Asset/Asset.cjs.map +1 -0
  41. package/dist/ui/Asset/Asset.d.cts +83 -0
  42. package/dist/ui/Asset/Asset.d.cts.map +1 -0
  43. package/dist/ui/Asset/Asset.d.mts +83 -0
  44. package/dist/ui/Asset/Asset.d.mts.map +1 -0
  45. package/dist/ui/Asset/Asset.mjs +60 -0
  46. package/dist/ui/Asset/Asset.mjs.map +1 -0
  47. package/dist/ui/Asset/question-mark.svg +3 -0
  48. package/dist/ui/EstimatedChanges/EstimatedChanges.cjs +57 -0
  49. package/dist/ui/EstimatedChanges/EstimatedChanges.cjs.map +1 -0
  50. package/dist/ui/EstimatedChanges/EstimatedChanges.d.cts +50 -0
  51. package/dist/ui/EstimatedChanges/EstimatedChanges.d.cts.map +1 -0
  52. package/dist/ui/EstimatedChanges/EstimatedChanges.d.mts +50 -0
  53. package/dist/ui/EstimatedChanges/EstimatedChanges.d.mts.map +1 -0
  54. package/dist/ui/EstimatedChanges/EstimatedChanges.mjs +53 -0
  55. package/dist/ui/EstimatedChanges/EstimatedChanges.mjs.map +1 -0
  56. package/dist/ui/TransactionAlert/TransactionAlert.cjs +72 -0
  57. package/dist/ui/TransactionAlert/TransactionAlert.cjs.map +1 -0
  58. package/dist/ui/TransactionAlert/TransactionAlert.d.cts +58 -0
  59. package/dist/ui/TransactionAlert/TransactionAlert.d.cts.map +1 -0
  60. package/dist/ui/TransactionAlert/TransactionAlert.d.mts +58 -0
  61. package/dist/ui/TransactionAlert/TransactionAlert.d.mts.map +1 -0
  62. package/dist/ui/TransactionAlert/TransactionAlert.mjs +68 -0
  63. package/dist/ui/TransactionAlert/TransactionAlert.mjs.map +1 -0
  64. package/dist/utils/async/async.cjs +95 -0
  65. package/dist/utils/async/async.cjs.map +1 -0
  66. package/dist/utils/async/async.d.cts +51 -0
  67. package/dist/utils/async/async.d.cts.map +1 -0
  68. package/dist/utils/async/async.d.mts +51 -0
  69. package/dist/utils/async/async.d.mts.map +1 -0
  70. package/dist/utils/async/async.mjs +88 -0
  71. package/dist/utils/async/async.mjs.map +1 -0
  72. package/dist/utils/buildUrl/buildUrl.cjs +54 -0
  73. package/dist/utils/buildUrl/buildUrl.cjs.map +1 -0
  74. package/dist/utils/buildUrl/buildUrl.d.cts +15 -0
  75. package/dist/utils/buildUrl/buildUrl.d.cts.map +1 -0
  76. package/dist/utils/buildUrl/buildUrl.d.mts +15 -0
  77. package/dist/utils/buildUrl/buildUrl.d.mts.map +1 -0
  78. package/dist/utils/buildUrl/buildUrl.mjs +51 -0
  79. package/dist/utils/buildUrl/buildUrl.mjs.map +1 -0
  80. package/dist/utils/cache/InMemoryCache.cjs +134 -0
  81. package/dist/utils/cache/InMemoryCache.cjs.map +1 -0
  82. package/dist/utils/cache/InMemoryCache.d.cts +29 -0
  83. package/dist/utils/cache/InMemoryCache.d.cts.map +1 -0
  84. package/dist/utils/cache/InMemoryCache.d.mts +29 -0
  85. package/dist/utils/cache/InMemoryCache.d.mts.map +1 -0
  86. package/dist/utils/cache/InMemoryCache.mjs +130 -0
  87. package/dist/utils/cache/InMemoryCache.mjs.map +1 -0
  88. package/dist/utils/cache/StateCache.cjs +193 -0
  89. package/dist/utils/cache/StateCache.cjs.map +1 -0
  90. package/dist/utils/cache/StateCache.d.cts +96 -0
  91. package/dist/utils/cache/StateCache.d.cts.map +1 -0
  92. package/dist/utils/cache/StateCache.d.mts +96 -0
  93. package/dist/utils/cache/StateCache.d.mts.map +1 -0
  94. package/dist/utils/cache/StateCache.mjs +189 -0
  95. package/dist/utils/cache/StateCache.mjs.map +1 -0
  96. package/dist/utils/cache/types.cjs +3 -0
  97. package/dist/utils/cache/types.cjs.map +1 -0
  98. package/dist/utils/cache/types.d.cts +99 -0
  99. package/dist/utils/cache/types.d.cts.map +1 -0
  100. package/dist/utils/cache/types.d.mts +99 -0
  101. package/dist/utils/cache/types.d.mts.map +1 -0
  102. package/dist/utils/cache/types.mjs +2 -0
  103. package/dist/utils/cache/types.mjs.map +1 -0
  104. package/dist/utils/cache/useCache.cjs +82 -0
  105. package/dist/utils/cache/useCache.cjs.map +1 -0
  106. package/dist/utils/cache/useCache.d.cts +57 -0
  107. package/dist/utils/cache/useCache.d.cts.map +1 -0
  108. package/dist/utils/cache/useCache.d.mts +57 -0
  109. package/dist/utils/cache/useCache.d.mts.map +1 -0
  110. package/dist/utils/cache/useCache.mjs +78 -0
  111. package/dist/utils/cache/useCache.mjs.map +1 -0
  112. package/dist/utils/cache/useCacheUntil.cjs +80 -0
  113. package/dist/utils/cache/useCacheUntil.cjs.map +1 -0
  114. package/dist/utils/cache/useCacheUntil.d.cts +54 -0
  115. package/dist/utils/cache/useCacheUntil.d.cts.map +1 -0
  116. package/dist/utils/cache/useCacheUntil.d.mts +54 -0
  117. package/dist/utils/cache/useCacheUntil.d.mts.map +1 -0
  118. package/dist/utils/cache/useCacheUntil.mjs +76 -0
  119. package/dist/utils/cache/useCacheUntil.mjs.map +1 -0
  120. package/dist/utils/config/BaseConfigProvider.cjs +62 -0
  121. package/dist/utils/config/BaseConfigProvider.cjs.map +1 -0
  122. package/dist/utils/config/BaseConfigProvider.d.cts +54 -0
  123. package/dist/utils/config/BaseConfigProvider.d.cts.map +1 -0
  124. package/dist/utils/config/BaseConfigProvider.d.mts +54 -0
  125. package/dist/utils/config/BaseConfigProvider.d.mts.map +1 -0
  126. package/dist/utils/config/BaseConfigProvider.mjs +58 -0
  127. package/dist/utils/config/BaseConfigProvider.mjs.map +1 -0
  128. package/dist/utils/config/envStructs.cjs +69 -0
  129. package/dist/utils/config/envStructs.cjs.map +1 -0
  130. package/dist/utils/config/envStructs.d.cts +57 -0
  131. package/dist/utils/config/envStructs.d.cts.map +1 -0
  132. package/dist/utils/config/envStructs.d.mts +57 -0
  133. package/dist/utils/config/envStructs.d.mts.map +1 -0
  134. package/dist/utils/config/envStructs.mjs +61 -0
  135. package/dist/utils/config/envStructs.mjs.map +1 -0
  136. package/dist/utils/config/environmentStruct.cjs +19 -0
  137. package/dist/utils/config/environmentStruct.cjs.map +1 -0
  138. package/dist/utils/config/environmentStruct.d.cts +20 -0
  139. package/dist/utils/config/environmentStruct.d.cts.map +1 -0
  140. package/dist/utils/config/environmentStruct.d.mts +20 -0
  141. package/dist/utils/config/environmentStruct.d.mts.map +1 -0
  142. package/dist/utils/config/environmentStruct.mjs +16 -0
  143. package/dist/utils/config/environmentStruct.mjs.map +1 -0
  144. package/dist/utils/config/logLevelStruct.cjs +14 -0
  145. package/dist/utils/config/logLevelStruct.cjs.map +1 -0
  146. package/dist/utils/config/logLevelStruct.d.cts +17 -0
  147. package/dist/utils/config/logLevelStruct.d.cts.map +1 -0
  148. package/dist/utils/config/logLevelStruct.d.mts +17 -0
  149. package/dist/utils/config/logLevelStruct.d.mts.map +1 -0
  150. package/dist/utils/config/logLevelStruct.mjs +11 -0
  151. package/dist/utils/config/logLevelStruct.mjs.map +1 -0
  152. package/dist/utils/config/parseEnv.cjs +30 -0
  153. package/dist/utils/config/parseEnv.cjs.map +1 -0
  154. package/dist/utils/config/parseEnv.d.cts +19 -0
  155. package/dist/utils/config/parseEnv.d.cts.map +1 -0
  156. package/dist/utils/config/parseEnv.d.mts +19 -0
  157. package/dist/utils/config/parseEnv.d.mts.map +1 -0
  158. package/dist/utils/config/parseEnv.mjs +26 -0
  159. package/dist/utils/config/parseEnv.mjs.map +1 -0
  160. package/dist/utils/dedupe/InFlightCoalescer.cjs +28 -0
  161. package/dist/utils/dedupe/InFlightCoalescer.cjs.map +1 -0
  162. package/dist/utils/dedupe/InFlightCoalescer.d.cts +12 -0
  163. package/dist/utils/dedupe/InFlightCoalescer.d.cts.map +1 -0
  164. package/dist/utils/dedupe/InFlightCoalescer.d.mts +12 -0
  165. package/dist/utils/dedupe/InFlightCoalescer.d.mts.map +1 -0
  166. package/dist/utils/dedupe/InFlightCoalescer.mjs +24 -0
  167. package/dist/utils/dedupe/InFlightCoalescer.mjs.map +1 -0
  168. package/dist/utils/errors/errors.cjs +44 -0
  169. package/dist/utils/errors/errors.cjs.map +1 -0
  170. package/dist/utils/errors/errors.d.cts +37 -0
  171. package/dist/utils/errors/errors.d.cts.map +1 -0
  172. package/dist/utils/errors/errors.d.mts +37 -0
  173. package/dist/utils/errors/errors.d.mts.map +1 -0
  174. package/dist/utils/errors/errors.mjs +40 -0
  175. package/dist/utils/errors/errors.mjs.map +1 -0
  176. package/dist/utils/errors/index.cjs +18 -0
  177. package/dist/utils/errors/index.cjs.map +1 -0
  178. package/dist/utils/errors/index.d.cts +10 -0
  179. package/dist/utils/errors/index.d.cts.map +1 -0
  180. package/dist/utils/errors/index.d.mts +10 -0
  181. package/dist/utils/errors/index.d.mts.map +1 -0
  182. package/dist/utils/errors/index.mjs +6 -0
  183. package/dist/utils/errors/index.mjs.map +1 -0
  184. package/dist/utils/errors/snapRpcError.cjs +33 -0
  185. package/dist/utils/errors/snapRpcError.cjs.map +1 -0
  186. package/dist/utils/errors/snapRpcError.d.cts +11 -0
  187. package/dist/utils/errors/snapRpcError.d.cts.map +1 -0
  188. package/dist/utils/errors/snapRpcError.d.mts +11 -0
  189. package/dist/utils/errors/snapRpcError.d.mts.map +1 -0
  190. package/dist/utils/errors/snapRpcError.mjs +30 -0
  191. package/dist/utils/errors/snapRpcError.mjs.map +1 -0
  192. package/dist/utils/errors/stringifyReason.cjs +36 -0
  193. package/dist/utils/errors/stringifyReason.cjs.map +1 -0
  194. package/dist/utils/errors/stringifyReason.d.cts +15 -0
  195. package/dist/utils/errors/stringifyReason.d.cts.map +1 -0
  196. package/dist/utils/errors/stringifyReason.d.mts +15 -0
  197. package/dist/utils/errors/stringifyReason.d.mts.map +1 -0
  198. package/dist/utils/errors/stringifyReason.mjs +33 -0
  199. package/dist/utils/errors/stringifyReason.mjs.map +1 -0
  200. package/dist/utils/errors/syncError.cjs +98 -0
  201. package/dist/utils/errors/syncError.cjs.map +1 -0
  202. package/dist/utils/errors/syncError.d.cts +60 -0
  203. package/dist/utils/errors/syncError.d.cts.map +1 -0
  204. package/dist/utils/errors/syncError.d.mts +60 -0
  205. package/dist/utils/errors/syncError.d.mts.map +1 -0
  206. package/dist/utils/errors/syncError.mjs +92 -0
  207. package/dist/utils/errors/syncError.mjs.map +1 -0
  208. package/dist/utils/errors/trackError.cjs +76 -0
  209. package/dist/utils/errors/trackError.cjs.map +1 -0
  210. package/dist/utils/errors/trackError.d.cts +64 -0
  211. package/dist/utils/errors/trackError.d.cts.map +1 -0
  212. package/dist/utils/errors/trackError.d.mts +64 -0
  213. package/dist/utils/errors/trackError.d.mts.map +1 -0
  214. package/dist/utils/errors/trackError.mjs +72 -0
  215. package/dist/utils/errors/trackError.mjs.map +1 -0
  216. package/dist/utils/handlers/wrapSnapHandlers.cjs +57 -0
  217. package/dist/utils/handlers/wrapSnapHandlers.cjs.map +1 -0
  218. package/dist/utils/handlers/wrapSnapHandlers.d.cts +74 -0
  219. package/dist/utils/handlers/wrapSnapHandlers.d.cts.map +1 -0
  220. package/dist/utils/handlers/wrapSnapHandlers.d.mts +74 -0
  221. package/dist/utils/handlers/wrapSnapHandlers.d.mts.map +1 -0
  222. package/dist/utils/handlers/wrapSnapHandlers.mjs +53 -0
  223. package/dist/utils/handlers/wrapSnapHandlers.mjs.map +1 -0
  224. package/dist/utils/keyringAccount/keyringAccount.cjs +25 -0
  225. package/dist/utils/keyringAccount/keyringAccount.cjs.map +1 -0
  226. package/dist/utils/keyringAccount/keyringAccount.d.cts +29 -0
  227. package/dist/utils/keyringAccount/keyringAccount.d.cts.map +1 -0
  228. package/dist/utils/keyringAccount/keyringAccount.d.mts +29 -0
  229. package/dist/utils/keyringAccount/keyringAccount.d.mts.map +1 -0
  230. package/dist/utils/keyringAccount/keyringAccount.mjs +22 -0
  231. package/dist/utils/keyringAccount/keyringAccount.mjs.map +1 -0
  232. package/dist/utils/logger/Logger.cjs +140 -0
  233. package/dist/utils/logger/Logger.cjs.map +1 -0
  234. package/dist/utils/logger/Logger.d.cts +118 -0
  235. package/dist/utils/logger/Logger.d.cts.map +1 -0
  236. package/dist/utils/logger/Logger.d.mts +118 -0
  237. package/dist/utils/logger/Logger.d.mts.map +1 -0
  238. package/dist/utils/logger/Logger.mjs +136 -0
  239. package/dist/utils/logger/Logger.mjs.map +1 -0
  240. package/dist/utils/logger/__mocks__/Logger.cjs +26 -0
  241. package/dist/utils/logger/__mocks__/Logger.cjs.map +1 -0
  242. package/dist/utils/logger/__mocks__/Logger.d.cts +3 -0
  243. package/dist/utils/logger/__mocks__/Logger.d.cts.map +1 -0
  244. package/dist/utils/logger/__mocks__/Logger.d.mts +3 -0
  245. package/dist/utils/logger/__mocks__/Logger.d.mts.map +1 -0
  246. package/dist/utils/logger/__mocks__/Logger.mjs +23 -0
  247. package/dist/utils/logger/__mocks__/Logger.mjs.map +1 -0
  248. package/dist/utils/originPermissions/createOriginPermissions.cjs +30 -0
  249. package/dist/utils/originPermissions/createOriginPermissions.cjs.map +1 -0
  250. package/dist/utils/originPermissions/createOriginPermissions.d.cts +24 -0
  251. package/dist/utils/originPermissions/createOriginPermissions.d.cts.map +1 -0
  252. package/dist/utils/originPermissions/createOriginPermissions.d.mts +24 -0
  253. package/dist/utils/originPermissions/createOriginPermissions.d.mts.map +1 -0
  254. package/dist/utils/originPermissions/createOriginPermissions.mjs +26 -0
  255. package/dist/utils/originPermissions/createOriginPermissions.mjs.map +1 -0
  256. package/dist/utils/originPermissions/validateOrigin.cjs +23 -0
  257. package/dist/utils/originPermissions/validateOrigin.cjs.map +1 -0
  258. package/dist/utils/originPermissions/validateOrigin.d.cts +10 -0
  259. package/dist/utils/originPermissions/validateOrigin.d.cts.map +1 -0
  260. package/dist/utils/originPermissions/validateOrigin.d.mts +10 -0
  261. package/dist/utils/originPermissions/validateOrigin.d.mts.map +1 -0
  262. package/dist/utils/originPermissions/validateOrigin.mjs +19 -0
  263. package/dist/utils/originPermissions/validateOrigin.mjs.map +1 -0
  264. package/dist/utils/proofOfOwnership/proofOfOwnership.cjs +89 -0
  265. package/dist/utils/proofOfOwnership/proofOfOwnership.cjs.map +1 -0
  266. package/dist/utils/proofOfOwnership/proofOfOwnership.d.cts +143 -0
  267. package/dist/utils/proofOfOwnership/proofOfOwnership.d.cts.map +1 -0
  268. package/dist/utils/proofOfOwnership/proofOfOwnership.d.mts +143 -0
  269. package/dist/utils/proofOfOwnership/proofOfOwnership.d.mts.map +1 -0
  270. package/dist/utils/proofOfOwnership/proofOfOwnership.mjs +85 -0
  271. package/dist/utils/proofOfOwnership/proofOfOwnership.mjs.map +1 -0
  272. package/dist/utils/safeMerge/safeMerge.cjs +26 -0
  273. package/dist/utils/safeMerge/safeMerge.cjs.map +1 -0
  274. package/dist/utils/safeMerge/safeMerge.d.cts +17 -0
  275. package/dist/utils/safeMerge/safeMerge.d.cts.map +1 -0
  276. package/dist/utils/safeMerge/safeMerge.d.mts +17 -0
  277. package/dist/utils/safeMerge/safeMerge.d.mts.map +1 -0
  278. package/dist/utils/safeMerge/safeMerge.mjs +22 -0
  279. package/dist/utils/safeMerge/safeMerge.mjs.map +1 -0
  280. package/dist/utils/sanitize/sanitize.cjs +42 -0
  281. package/dist/utils/sanitize/sanitize.cjs.map +1 -0
  282. package/dist/utils/sanitize/sanitize.d.cts +15 -0
  283. package/dist/utils/sanitize/sanitize.d.cts.map +1 -0
  284. package/dist/utils/sanitize/sanitize.d.mts +15 -0
  285. package/dist/utils/sanitize/sanitize.d.mts.map +1 -0
  286. package/dist/utils/sanitize/sanitize.mjs +38 -0
  287. package/dist/utils/sanitize/sanitize.mjs.map +1 -0
  288. package/dist/utils/serialization/serialization.cjs +73 -0
  289. package/dist/utils/serialization/serialization.cjs.map +1 -0
  290. package/dist/utils/serialization/serialization.d.cts +19 -0
  291. package/dist/utils/serialization/serialization.d.cts.map +1 -0
  292. package/dist/utils/serialization/serialization.d.mts +19 -0
  293. package/dist/utils/serialization/serialization.d.mts.map +1 -0
  294. package/dist/utils/serialization/serialization.mjs +69 -0
  295. package/dist/utils/serialization/serialization.mjs.map +1 -0
  296. package/dist/utils/serialization/types.cjs +3 -0
  297. package/dist/utils/serialization/types.cjs.map +1 -0
  298. package/dist/utils/serialization/types.d.cts +8 -0
  299. package/dist/utils/serialization/types.d.cts.map +1 -0
  300. package/dist/utils/serialization/types.d.mts +8 -0
  301. package/dist/utils/serialization/types.d.mts.map +1 -0
  302. package/dist/utils/serialization/types.mjs +2 -0
  303. package/dist/utils/serialization/types.mjs.map +1 -0
  304. package/dist/utils/state/IStateManager.cjs +3 -0
  305. package/dist/utils/state/IStateManager.cjs.map +1 -0
  306. package/dist/utils/state/IStateManager.d.cts +69 -0
  307. package/dist/utils/state/IStateManager.d.cts.map +1 -0
  308. package/dist/utils/state/IStateManager.d.mts +69 -0
  309. package/dist/utils/state/IStateManager.d.mts.map +1 -0
  310. package/dist/utils/state/IStateManager.mjs +2 -0
  311. package/dist/utils/state/IStateManager.mjs.map +1 -0
  312. package/dist/utils/state/InMemoryState.cjs +41 -0
  313. package/dist/utils/state/InMemoryState.cjs.map +1 -0
  314. package/dist/utils/state/InMemoryState.d.cts +18 -0
  315. package/dist/utils/state/InMemoryState.d.cts.map +1 -0
  316. package/dist/utils/state/InMemoryState.d.mts +18 -0
  317. package/dist/utils/state/InMemoryState.d.mts.map +1 -0
  318. package/dist/utils/state/InMemoryState.mjs +38 -0
  319. package/dist/utils/state/InMemoryState.mjs.map +1 -0
  320. package/dist/utils/state/State.cjs +159 -0
  321. package/dist/utils/state/State.cjs.map +1 -0
  322. package/dist/utils/state/State.d.cts +25 -0
  323. package/dist/utils/state/State.d.cts.map +1 -0
  324. package/dist/utils/state/State.d.mts +25 -0
  325. package/dist/utils/state/State.d.mts.map +1 -0
  326. package/dist/utils/state/State.mjs +156 -0
  327. package/dist/utils/state/State.mjs.map +1 -0
  328. package/dist/utils/transactionType/transactionType.cjs +32 -0
  329. package/dist/utils/transactionType/transactionType.cjs.map +1 -0
  330. package/dist/utils/transactionType/transactionType.d.cts +17 -0
  331. package/dist/utils/transactionType/transactionType.d.cts.map +1 -0
  332. package/dist/utils/transactionType/transactionType.d.mts +17 -0
  333. package/dist/utils/transactionType/transactionType.d.mts.map +1 -0
  334. package/dist/utils/transactionType/transactionType.mjs +28 -0
  335. package/dist/utils/transactionType/transactionType.mjs.map +1 -0
  336. package/dist/utils/urlStruct/urlStruct.cjs +96 -0
  337. package/dist/utils/urlStruct/urlStruct.cjs.map +1 -0
  338. package/dist/utils/urlStruct/urlStruct.d.cts +25 -0
  339. package/dist/utils/urlStruct/urlStruct.d.cts.map +1 -0
  340. package/dist/utils/urlStruct/urlStruct.d.mts +25 -0
  341. package/dist/utils/urlStruct/urlStruct.d.mts.map +1 -0
  342. package/dist/utils/urlStruct/urlStruct.mjs +93 -0
  343. package/dist/utils/urlStruct/urlStruct.mjs.map +1 -0
  344. package/dist/utils/uuidStruct/uuidStruct.cjs +12 -0
  345. package/dist/utils/uuidStruct/uuidStruct.cjs.map +1 -0
  346. package/dist/utils/uuidStruct/uuidStruct.d.cts +8 -0
  347. package/dist/utils/uuidStruct/uuidStruct.d.cts.map +1 -0
  348. package/dist/utils/uuidStruct/uuidStruct.d.mts +8 -0
  349. package/dist/utils/uuidStruct/uuidStruct.d.mts.map +1 -0
  350. package/dist/utils/uuidStruct/uuidStruct.mjs +9 -0
  351. package/dist/utils/uuidStruct/uuidStruct.mjs.map +1 -0
  352. package/package.json +33 -13
  353. package/dist/logger.cjs +0 -57
  354. package/dist/logger.cjs.map +0 -1
  355. package/dist/logger.d.cts +0 -30
  356. package/dist/logger.d.cts.map +0 -1
  357. package/dist/logger.d.mts +0 -30
  358. package/dist/logger.d.mts.map +0 -1
  359. package/dist/logger.mjs +0 -53
  360. package/dist/logger.mjs.map +0 -1
@@ -1,4 +1,5 @@
1
- import type { AccountId, AssetsControllerGetAccountAssetByIDAction, AssetsControllerGetAccountAssetsByIDsAction, AssetsControllerGetAccountAssetsByScopeAction, Caip19AssetId } from "@metamask/assets-controller";
1
+ import type { AccountId, AssetsControllerGetAccountAssetByIDAction, AssetsControllerGetAccountAssetsByIDsAction, AssetsControllerGetAccountAssetsByScopeAction, AssetsControllerGetAssetMetadataAction, AssetsControllerGetAssetsAction, Caip19AssetId } from "@metamask/assets-controller";
2
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
3
  import type { Messenger } from "@metamask/messenger";
3
4
  import { AsyncMessenger } from "@metamask/snaps-sdk";
4
5
  import type { CaipChainId } from "@metamask/utils";
@@ -9,7 +10,7 @@ export declare const ASSETS_PROVIDER_NAME: "AssetsProvider";
9
10
  /**
10
11
  * Actions from other messengers that {@link AssetsProvider} calls.
11
12
  */
12
- export type AssetsProviderAllowedActions = AssetsControllerGetAccountAssetByIDAction | AssetsControllerGetAccountAssetsByIDsAction | AssetsControllerGetAccountAssetsByScopeAction;
13
+ export type AssetsProviderAllowedActions = AssetsControllerGetAccountAssetByIDAction | AssetsControllerGetAccountAssetsByIDsAction | AssetsControllerGetAccountAssetsByScopeAction | AssetsControllerGetAssetMetadataAction | AssetsControllerGetAssetsAction;
13
14
  /**
14
15
  * Messenger restricted to actions consumed by {@link AssetsProvider}.
15
16
  */
@@ -43,5 +44,32 @@ export declare class AssetsProvider {
43
44
  * @returns Controller assets keyed by CAIP-19 asset ID.
44
45
  */
45
46
  getAccountAssetsByScope(scope: CaipChainId, accountId: AccountId): Promise<ReturnType<AssetsControllerGetAccountAssetsByScopeAction['handler']>>;
47
+ /**
48
+ * Returns metadata for a CAIP-19 asset from controller state, or `undefined`
49
+ * if the asset is unknown.
50
+ *
51
+ * @param assetId - CAIP-19 asset ID.
52
+ * @returns Controller asset metadata, or `undefined`.
53
+ */
54
+ getAssetMetadata(assetId: Caip19AssetId): Promise<ReturnType<AssetsControllerGetAssetMetadataAction['handler']>>;
55
+ /**
56
+ * Fetches combined assets (balance + metadata + price + computed
57
+ * `fiatValue`) for the given accounts, bypassing client-side caches.
58
+ *
59
+ * Unlike the state-only getters above, this maps to the controller's
60
+ * one-time fetch pipeline: passing `forceUpdate: true` refreshes the data
61
+ * from the data sources and updates controller state, and the returned
62
+ * value reflects that fresh fetch rather than current state. Pass
63
+ * `bypassServerCache: true` (only together with `forceUpdate`) to also
64
+ * bypass server-side HTTP caches such as the Accounts API's 60-second
65
+ * cache; use sparingly, e.g. right after a transaction confirms when the
66
+ * cached snapshot is known stale.
67
+ *
68
+ * @param accounts - Internal accounts to fetch assets for.
69
+ * @param options - Fetch options (`chainIds`, `forceUpdate`,
70
+ * `bypassServerCache`, `dataTypes`, etc.).
71
+ * @returns Combined assets keyed by account ID, then CAIP-19 asset ID.
72
+ */
73
+ getAssets(accounts: InternalAccount[], options?: Parameters<AssetsControllerGetAssetsAction['handler']>[1]): Promise<ReturnType<AssetsControllerGetAssetsAction['handler']>>;
46
74
  }
47
75
  //# sourceMappingURL=AssetsProvider.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsProvider.d.cts","sourceRoot":"","sources":["../../../src/providers/assets/AssetsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,yCAAyC,EACzC,2CAA2C,EAC3C,6CAA6C,EAC7C,aAAa,EACd,oCAAoC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,EAAE,cAAc,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB;AAEnD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,yCAAyC,GACzC,2CAA2C,GAC3C,6CAA6C,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,SAAS,CAAC,OAAO,oBAAoB,EAAE,4BAA4B,CAAC,CACrE,CAAC;AAEF,qBAAa,cAAc;;gBAGb,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,uBAAuB,CAAA;KAAE;IAIjE;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC,SAAS,CAAC,CAAC,CAAC;IAQ5E;;;;;;OAMG;IACG,qBAAqB,CACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CACR,UAAU,CAAC,2CAA2C,CAAC,SAAS,CAAC,CAAC,CACnE;IAQD;;;;;;OAMG;IACG,uBAAuB,CAC3B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,SAAS,GACnB,OAAO,CACR,UAAU,CAAC,6CAA6C,CAAC,SAAS,CAAC,CAAC,CACrE;CAOF"}
1
+ {"version":3,"file":"AssetsProvider.d.cts","sourceRoot":"","sources":["../../../src/providers/assets/AssetsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,yCAAyC,EACzC,2CAA2C,EAC3C,6CAA6C,EAC7C,sCAAsC,EACtC,+BAA+B,EAC/B,aAAa,EACd,oCAAoC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,EAAE,cAAc,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB;AAEnD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,yCAAyC,GACzC,2CAA2C,GAC3C,6CAA6C,GAC7C,sCAAsC,GACtC,+BAA+B,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,SAAS,CAAC,OAAO,oBAAoB,EAAE,4BAA4B,CAAC,CACrE,CAAC;AAEF,qBAAa,cAAc;;gBAGb,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,uBAAuB,CAAA;KAAE;IAIjE;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC,SAAS,CAAC,CAAC,CAAC;IAQ5E;;;;;;OAMG;IACG,qBAAqB,CACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CACR,UAAU,CAAC,2CAA2C,CAAC,SAAS,CAAC,CAAC,CACnE;IAQD;;;;;;OAMG;IACG,uBAAuB,CAC3B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,SAAS,GACnB,OAAO,CACR,UAAU,CAAC,6CAA6C,CAAC,SAAS,CAAC,CAAC,CACrE;IAQD;;;;;;OAMG;IACG,gBAAgB,CACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,sCAAsC,CAAC,SAAS,CAAC,CAAC,CAAC;IAIzE;;;;;;;;;;;;;;;;;OAiBG;IACG,SAAS,CACb,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,CAAC,EAAE,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAClE,OAAO,CAAC,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC;CAOnE"}
@@ -1,4 +1,5 @@
1
- import type { AccountId, AssetsControllerGetAccountAssetByIDAction, AssetsControllerGetAccountAssetsByIDsAction, AssetsControllerGetAccountAssetsByScopeAction, Caip19AssetId } from "@metamask/assets-controller";
1
+ import type { AccountId, AssetsControllerGetAccountAssetByIDAction, AssetsControllerGetAccountAssetsByIDsAction, AssetsControllerGetAccountAssetsByScopeAction, AssetsControllerGetAssetMetadataAction, AssetsControllerGetAssetsAction, Caip19AssetId } from "@metamask/assets-controller";
2
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
3
  import type { Messenger } from "@metamask/messenger";
3
4
  import { AsyncMessenger } from "@metamask/snaps-sdk";
4
5
  import type { CaipChainId } from "@metamask/utils";
@@ -9,7 +10,7 @@ export declare const ASSETS_PROVIDER_NAME: "AssetsProvider";
9
10
  /**
10
11
  * Actions from other messengers that {@link AssetsProvider} calls.
11
12
  */
12
- export type AssetsProviderAllowedActions = AssetsControllerGetAccountAssetByIDAction | AssetsControllerGetAccountAssetsByIDsAction | AssetsControllerGetAccountAssetsByScopeAction;
13
+ export type AssetsProviderAllowedActions = AssetsControllerGetAccountAssetByIDAction | AssetsControllerGetAccountAssetsByIDsAction | AssetsControllerGetAccountAssetsByScopeAction | AssetsControllerGetAssetMetadataAction | AssetsControllerGetAssetsAction;
13
14
  /**
14
15
  * Messenger restricted to actions consumed by {@link AssetsProvider}.
15
16
  */
@@ -43,5 +44,32 @@ export declare class AssetsProvider {
43
44
  * @returns Controller assets keyed by CAIP-19 asset ID.
44
45
  */
45
46
  getAccountAssetsByScope(scope: CaipChainId, accountId: AccountId): Promise<ReturnType<AssetsControllerGetAccountAssetsByScopeAction['handler']>>;
47
+ /**
48
+ * Returns metadata for a CAIP-19 asset from controller state, or `undefined`
49
+ * if the asset is unknown.
50
+ *
51
+ * @param assetId - CAIP-19 asset ID.
52
+ * @returns Controller asset metadata, or `undefined`.
53
+ */
54
+ getAssetMetadata(assetId: Caip19AssetId): Promise<ReturnType<AssetsControllerGetAssetMetadataAction['handler']>>;
55
+ /**
56
+ * Fetches combined assets (balance + metadata + price + computed
57
+ * `fiatValue`) for the given accounts, bypassing client-side caches.
58
+ *
59
+ * Unlike the state-only getters above, this maps to the controller's
60
+ * one-time fetch pipeline: passing `forceUpdate: true` refreshes the data
61
+ * from the data sources and updates controller state, and the returned
62
+ * value reflects that fresh fetch rather than current state. Pass
63
+ * `bypassServerCache: true` (only together with `forceUpdate`) to also
64
+ * bypass server-side HTTP caches such as the Accounts API's 60-second
65
+ * cache; use sparingly, e.g. right after a transaction confirms when the
66
+ * cached snapshot is known stale.
67
+ *
68
+ * @param accounts - Internal accounts to fetch assets for.
69
+ * @param options - Fetch options (`chainIds`, `forceUpdate`,
70
+ * `bypassServerCache`, `dataTypes`, etc.).
71
+ * @returns Combined assets keyed by account ID, then CAIP-19 asset ID.
72
+ */
73
+ getAssets(accounts: InternalAccount[], options?: Parameters<AssetsControllerGetAssetsAction['handler']>[1]): Promise<ReturnType<AssetsControllerGetAssetsAction['handler']>>;
46
74
  }
47
75
  //# sourceMappingURL=AssetsProvider.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsProvider.d.mts","sourceRoot":"","sources":["../../../src/providers/assets/AssetsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,yCAAyC,EACzC,2CAA2C,EAC3C,6CAA6C,EAC7C,aAAa,EACd,oCAAoC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,EAAE,cAAc,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB;AAEnD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,yCAAyC,GACzC,2CAA2C,GAC3C,6CAA6C,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,SAAS,CAAC,OAAO,oBAAoB,EAAE,4BAA4B,CAAC,CACrE,CAAC;AAEF,qBAAa,cAAc;;gBAGb,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,uBAAuB,CAAA;KAAE;IAIjE;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC,SAAS,CAAC,CAAC,CAAC;IAQ5E;;;;;;OAMG;IACG,qBAAqB,CACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CACR,UAAU,CAAC,2CAA2C,CAAC,SAAS,CAAC,CAAC,CACnE;IAQD;;;;;;OAMG;IACG,uBAAuB,CAC3B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,SAAS,GACnB,OAAO,CACR,UAAU,CAAC,6CAA6C,CAAC,SAAS,CAAC,CAAC,CACrE;CAOF"}
1
+ {"version":3,"file":"AssetsProvider.d.mts","sourceRoot":"","sources":["../../../src/providers/assets/AssetsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,yCAAyC,EACzC,2CAA2C,EAC3C,6CAA6C,EAC7C,sCAAsC,EACtC,+BAA+B,EAC/B,aAAa,EACd,oCAAoC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,EAAE,cAAc,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB;AAEnD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,yCAAyC,GACzC,2CAA2C,GAC3C,6CAA6C,GAC7C,sCAAsC,GACtC,+BAA+B,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,SAAS,CAAC,OAAO,oBAAoB,EAAE,4BAA4B,CAAC,CACrE,CAAC;AAEF,qBAAa,cAAc;;gBAGb,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,uBAAuB,CAAA;KAAE;IAIjE;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC,SAAS,CAAC,CAAC,CAAC;IAQ5E;;;;;;OAMG;IACG,qBAAqB,CACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CACR,UAAU,CAAC,2CAA2C,CAAC,SAAS,CAAC,CAAC,CACnE;IAQD;;;;;;OAMG;IACG,uBAAuB,CAC3B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,SAAS,GACnB,OAAO,CACR,UAAU,CAAC,6CAA6C,CAAC,SAAS,CAAC,CAAC,CACrE;IAQD;;;;;;OAMG;IACG,gBAAgB,CACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,sCAAsC,CAAC,SAAS,CAAC,CAAC,CAAC;IAIzE;;;;;;;;;;;;;;;;;OAiBG;IACG,SAAS,CACb,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,CAAC,EAAE,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAClE,OAAO,CAAC,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC;CAOnE"}
@@ -1,23 +1,11 @@
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 _AssetsProvider_messenger;
13
1
  /**
14
2
  * Namespace for the {@link AssetsProvider} messenger.
15
3
  */
16
4
  export const ASSETS_PROVIDER_NAME = 'AssetsProvider';
17
5
  export class AssetsProvider {
6
+ #messenger;
18
7
  constructor({ messenger }) {
19
- _AssetsProvider_messenger.set(this, void 0);
20
- __classPrivateFieldSet(this, _AssetsProvider_messenger, messenger, "f");
8
+ this.#messenger = messenger;
21
9
  }
22
10
  /**
23
11
  * Returns a single account asset by CAIP-19 ID, or `undefined` if missing.
@@ -27,7 +15,7 @@ export class AssetsProvider {
27
15
  * @returns Controller asset, or `undefined`.
28
16
  */
29
17
  async getAccountAssetByID(accountId, assetId) {
30
- return __classPrivateFieldGet(this, _AssetsProvider_messenger, "f").call('AssetsController:getAccountAssetByID', accountId, assetId);
18
+ return this.#messenger.call('AssetsController:getAccountAssetByID', accountId, assetId);
31
19
  }
32
20
  /**
33
21
  * Returns account assets for the given CAIP-19 IDs, keyed by asset ID.
@@ -37,7 +25,7 @@ export class AssetsProvider {
37
25
  * @returns Map of asset ID → controller asset.
38
26
  */
39
27
  async getAccountAssetsByIDs(accountId, assetIds) {
40
- return __classPrivateFieldGet(this, _AssetsProvider_messenger, "f").call('AssetsController:getAccountAssetsByIDs', accountId, assetIds);
28
+ return this.#messenger.call('AssetsController:getAccountAssetsByIDs', accountId, assetIds);
41
29
  }
42
30
  /**
43
31
  * Returns controller-backed assets for an account on a chain.
@@ -47,8 +35,38 @@ export class AssetsProvider {
47
35
  * @returns Controller assets keyed by CAIP-19 asset ID.
48
36
  */
49
37
  async getAccountAssetsByScope(scope, accountId) {
50
- return __classPrivateFieldGet(this, _AssetsProvider_messenger, "f").call('AssetsController:getAccountAssetsByScope', accountId, scope);
38
+ return this.#messenger.call('AssetsController:getAccountAssetsByScope', accountId, scope);
39
+ }
40
+ /**
41
+ * Returns metadata for a CAIP-19 asset from controller state, or `undefined`
42
+ * if the asset is unknown.
43
+ *
44
+ * @param assetId - CAIP-19 asset ID.
45
+ * @returns Controller asset metadata, or `undefined`.
46
+ */
47
+ async getAssetMetadata(assetId) {
48
+ return this.#messenger.call('AssetsController:getAssetMetadata', assetId);
49
+ }
50
+ /**
51
+ * Fetches combined assets (balance + metadata + price + computed
52
+ * `fiatValue`) for the given accounts, bypassing client-side caches.
53
+ *
54
+ * Unlike the state-only getters above, this maps to the controller's
55
+ * one-time fetch pipeline: passing `forceUpdate: true` refreshes the data
56
+ * from the data sources and updates controller state, and the returned
57
+ * value reflects that fresh fetch rather than current state. Pass
58
+ * `bypassServerCache: true` (only together with `forceUpdate`) to also
59
+ * bypass server-side HTTP caches such as the Accounts API's 60-second
60
+ * cache; use sparingly, e.g. right after a transaction confirms when the
61
+ * cached snapshot is known stale.
62
+ *
63
+ * @param accounts - Internal accounts to fetch assets for.
64
+ * @param options - Fetch options (`chainIds`, `forceUpdate`,
65
+ * `bypassServerCache`, `dataTypes`, etc.).
66
+ * @returns Combined assets keyed by account ID, then CAIP-19 asset ID.
67
+ */
68
+ async getAssets(accounts, options) {
69
+ return this.#messenger.call('AssetsController:getAssets', accounts, options);
51
70
  }
52
71
  }
53
- _AssetsProvider_messenger = new WeakMap();
54
72
  //# sourceMappingURL=AssetsProvider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsProvider.mjs","sourceRoot":"","sources":["../../../src/providers/assets/AssetsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAWA;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAyB,CAAC;AAiB9D,MAAM,OAAO,cAAc;IAGzB,YAAY,EAAE,SAAS,EAA0C;QAFxD,4CAAoC;QAG3C,uBAAA,IAAI,6BAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CACvB,SAAoB,EACpB,OAAsB;QAEtB,OAAO,uBAAA,IAAI,iCAAW,CAAC,IAAI,CACzB,sCAAsC,EACtC,SAAS,EACT,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACzB,SAAoB,EACpB,QAAyB;QAIzB,OAAO,uBAAA,IAAI,iCAAW,CAAC,IAAI,CACzB,wCAAwC,EACxC,SAAS,EACT,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAC3B,KAAkB,EAClB,SAAoB;QAIpB,OAAO,uBAAA,IAAI,iCAAW,CAAC,IAAI,CACzB,0CAA0C,EAC1C,SAAS,EACT,KAAK,CACN,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type {\n AccountId,\n AssetsControllerGetAccountAssetByIDAction,\n AssetsControllerGetAccountAssetsByIDsAction,\n AssetsControllerGetAccountAssetsByScopeAction,\n Caip19AssetId,\n} from '@metamask/assets-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport { AsyncMessenger } from '@metamask/snaps-sdk';\nimport type { CaipChainId } from '@metamask/utils';\n\n/**\n * Namespace for the {@link AssetsProvider} messenger.\n */\nexport const ASSETS_PROVIDER_NAME = 'AssetsProvider' as const;\n\n/**\n * Actions from other messengers that {@link AssetsProvider} calls.\n */\nexport type AssetsProviderAllowedActions =\n | AssetsControllerGetAccountAssetByIDAction\n | AssetsControllerGetAccountAssetsByIDsAction\n | AssetsControllerGetAccountAssetsByScopeAction;\n\n/**\n * Messenger restricted to actions consumed by {@link AssetsProvider}.\n */\nexport type AssetsProviderMessenger = AsyncMessenger<\n Messenger<typeof ASSETS_PROVIDER_NAME, AssetsProviderAllowedActions>\n>;\n\nexport class AssetsProvider {\n readonly #messenger: AssetsProviderMessenger;\n\n constructor({ messenger }: { messenger: AssetsProviderMessenger }) {\n this.#messenger = messenger;\n }\n\n /**\n * Returns a single account asset by CAIP-19 ID, or `undefined` if missing.\n *\n * @param accountId - Keyring account ID.\n * @param assetId - CAIP-19 asset ID.\n * @returns Controller asset, or `undefined`.\n */\n async getAccountAssetByID(\n accountId: AccountId,\n assetId: Caip19AssetId,\n ): Promise<ReturnType<AssetsControllerGetAccountAssetByIDAction['handler']>> {\n return this.#messenger.call(\n 'AssetsController:getAccountAssetByID',\n accountId,\n assetId,\n );\n }\n\n /**\n * Returns account assets for the given CAIP-19 IDs, keyed by asset ID.\n *\n * @param accountId - Keyring account ID.\n * @param assetIds - CAIP-19 asset IDs to resolve.\n * @returns Map of asset ID → controller asset.\n */\n async getAccountAssetsByIDs(\n accountId: AccountId,\n assetIds: Caip19AssetId[],\n ): Promise<\n ReturnType<AssetsControllerGetAccountAssetsByIDsAction['handler']>\n > {\n return this.#messenger.call(\n 'AssetsController:getAccountAssetsByIDs',\n accountId,\n assetIds,\n );\n }\n\n /**\n * Returns controller-backed assets for an account on a chain.\n *\n * @param scope - CAIP-2 chain ID to filter controller results.\n * @param accountId - Keyring account ID.\n * @returns Controller assets keyed by CAIP-19 asset ID.\n */\n async getAccountAssetsByScope(\n scope: CaipChainId,\n accountId: AccountId,\n ): Promise<\n ReturnType<AssetsControllerGetAccountAssetsByScopeAction['handler']>\n > {\n return this.#messenger.call(\n 'AssetsController:getAccountAssetsByScope',\n accountId,\n scope,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"AssetsProvider.mjs","sourceRoot":"","sources":["../../../src/providers/assets/AssetsProvider.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAyB,CAAC;AAmB9D,MAAM,OAAO,cAAc;IAChB,UAAU,CAA0B;IAE7C,YAAY,EAAE,SAAS,EAA0C;QAC/D,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CACvB,SAAoB,EACpB,OAAsB;QAEtB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,sCAAsC,EACtC,SAAS,EACT,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACzB,SAAoB,EACpB,QAAyB;QAIzB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,wCAAwC,EACxC,SAAS,EACT,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAC3B,KAAkB,EAClB,SAAoB;QAIpB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,0CAA0C,EAC1C,SAAS,EACT,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAAsB;QAEtB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,SAAS,CACb,QAA2B,EAC3B,OAAmE;QAEnE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,4BAA4B,EAC5B,QAAQ,EACR,OAAO,CACR,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type {\n AccountId,\n AssetsControllerGetAccountAssetByIDAction,\n AssetsControllerGetAccountAssetsByIDsAction,\n AssetsControllerGetAccountAssetsByScopeAction,\n AssetsControllerGetAssetMetadataAction,\n AssetsControllerGetAssetsAction,\n Caip19AssetId,\n} from '@metamask/assets-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { Messenger } from '@metamask/messenger';\nimport { AsyncMessenger } from '@metamask/snaps-sdk';\nimport type { CaipChainId } from '@metamask/utils';\n\n/**\n * Namespace for the {@link AssetsProvider} messenger.\n */\nexport const ASSETS_PROVIDER_NAME = 'AssetsProvider' as const;\n\n/**\n * Actions from other messengers that {@link AssetsProvider} calls.\n */\nexport type AssetsProviderAllowedActions =\n | AssetsControllerGetAccountAssetByIDAction\n | AssetsControllerGetAccountAssetsByIDsAction\n | AssetsControllerGetAccountAssetsByScopeAction\n | AssetsControllerGetAssetMetadataAction\n | AssetsControllerGetAssetsAction;\n\n/**\n * Messenger restricted to actions consumed by {@link AssetsProvider}.\n */\nexport type AssetsProviderMessenger = AsyncMessenger<\n Messenger<typeof ASSETS_PROVIDER_NAME, AssetsProviderAllowedActions>\n>;\n\nexport class AssetsProvider {\n readonly #messenger: AssetsProviderMessenger;\n\n constructor({ messenger }: { messenger: AssetsProviderMessenger }) {\n this.#messenger = messenger;\n }\n\n /**\n * Returns a single account asset by CAIP-19 ID, or `undefined` if missing.\n *\n * @param accountId - Keyring account ID.\n * @param assetId - CAIP-19 asset ID.\n * @returns Controller asset, or `undefined`.\n */\n async getAccountAssetByID(\n accountId: AccountId,\n assetId: Caip19AssetId,\n ): Promise<ReturnType<AssetsControllerGetAccountAssetByIDAction['handler']>> {\n return this.#messenger.call(\n 'AssetsController:getAccountAssetByID',\n accountId,\n assetId,\n );\n }\n\n /**\n * Returns account assets for the given CAIP-19 IDs, keyed by asset ID.\n *\n * @param accountId - Keyring account ID.\n * @param assetIds - CAIP-19 asset IDs to resolve.\n * @returns Map of asset ID → controller asset.\n */\n async getAccountAssetsByIDs(\n accountId: AccountId,\n assetIds: Caip19AssetId[],\n ): Promise<\n ReturnType<AssetsControllerGetAccountAssetsByIDsAction['handler']>\n > {\n return this.#messenger.call(\n 'AssetsController:getAccountAssetsByIDs',\n accountId,\n assetIds,\n );\n }\n\n /**\n * Returns controller-backed assets for an account on a chain.\n *\n * @param scope - CAIP-2 chain ID to filter controller results.\n * @param accountId - Keyring account ID.\n * @returns Controller assets keyed by CAIP-19 asset ID.\n */\n async getAccountAssetsByScope(\n scope: CaipChainId,\n accountId: AccountId,\n ): Promise<\n ReturnType<AssetsControllerGetAccountAssetsByScopeAction['handler']>\n > {\n return this.#messenger.call(\n 'AssetsController:getAccountAssetsByScope',\n accountId,\n scope,\n );\n }\n\n /**\n * Returns metadata for a CAIP-19 asset from controller state, or `undefined`\n * if the asset is unknown.\n *\n * @param assetId - CAIP-19 asset ID.\n * @returns Controller asset metadata, or `undefined`.\n */\n async getAssetMetadata(\n assetId: Caip19AssetId,\n ): Promise<ReturnType<AssetsControllerGetAssetMetadataAction['handler']>> {\n return this.#messenger.call('AssetsController:getAssetMetadata', assetId);\n }\n\n /**\n * Fetches combined assets (balance + metadata + price + computed\n * `fiatValue`) for the given accounts, bypassing client-side caches.\n *\n * Unlike the state-only getters above, this maps to the controller's\n * one-time fetch pipeline: passing `forceUpdate: true` refreshes the data\n * from the data sources and updates controller state, and the returned\n * value reflects that fresh fetch rather than current state. Pass\n * `bypassServerCache: true` (only together with `forceUpdate`) to also\n * bypass server-side HTTP caches such as the Accounts API's 60-second\n * cache; use sparingly, e.g. right after a transaction confirms when the\n * cached snapshot is known stale.\n *\n * @param accounts - Internal accounts to fetch assets for.\n * @param options - Fetch options (`chainIds`, `forceUpdate`,\n * `bypassServerCache`, `dataTypes`, etc.).\n * @returns Combined assets keyed by account ID, then CAIP-19 asset ID.\n */\n async getAssets(\n accounts: InternalAccount[],\n options?: Parameters<AssetsControllerGetAssetsAction['handler']>[1],\n ): Promise<ReturnType<AssetsControllerGetAssetsAction['handler']>> {\n return this.#messenger.call(\n 'AssetsController:getAssets',\n accounts,\n options,\n );\n }\n}\n"]}
@@ -1,16 +1,4 @@
1
1
  "use strict";
2
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
- if (kind === "m") throw new TypeError("Private method is not writable");
4
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
- 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");
6
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
- };
8
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
- 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");
11
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
- };
13
- var _RemoteFeatureFlagsProvider_messenger;
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.RemoteFeatureFlagsProvider = exports.REMOTE_FEATURE_FLAGS_PROVIDER_NAME = void 0;
16
4
  /**
@@ -18,9 +6,9 @@ exports.RemoteFeatureFlagsProvider = exports.REMOTE_FEATURE_FLAGS_PROVIDER_NAME
18
6
  */
19
7
  exports.REMOTE_FEATURE_FLAGS_PROVIDER_NAME = 'RemoteFeatureFlagsProvider';
20
8
  class RemoteFeatureFlagsProvider {
9
+ #messenger;
21
10
  constructor({ messenger, }) {
22
- _RemoteFeatureFlagsProvider_messenger.set(this, void 0);
23
- __classPrivateFieldSet(this, _RemoteFeatureFlagsProvider_messenger, messenger, "f");
11
+ this.#messenger = messenger;
24
12
  }
25
13
  /**
26
14
  * Returns a single remote feature flag value, or `undefined` if missing.
@@ -29,7 +17,7 @@ class RemoteFeatureFlagsProvider {
29
17
  * @returns Flag value, or `undefined`.
30
18
  */
31
19
  async getFeatureFlag(flagKey) {
32
- const { remoteFeatureFlags } = await __classPrivateFieldGet(this, _RemoteFeatureFlagsProvider_messenger, "f").call('RemoteFeatureFlagController:getState');
20
+ const { remoteFeatureFlags } = await this.#messenger.call('RemoteFeatureFlagController:getState');
33
21
  return remoteFeatureFlags[flagKey];
34
22
  }
35
23
  /**
@@ -40,7 +28,7 @@ class RemoteFeatureFlagsProvider {
40
28
  * @returns Map of flag key → value.
41
29
  */
42
30
  async getFeatureFlags(flagKeys) {
43
- const { remoteFeatureFlags } = await __classPrivateFieldGet(this, _RemoteFeatureFlagsProvider_messenger, "f").call('RemoteFeatureFlagController:getState');
31
+ const { remoteFeatureFlags } = await this.#messenger.call('RemoteFeatureFlagController:getState');
44
32
  return flagKeys.reduce((acc, flagKey) => {
45
33
  acc[flagKey] = remoteFeatureFlags[flagKey];
46
34
  return acc;
@@ -48,5 +36,4 @@ class RemoteFeatureFlagsProvider {
48
36
  }
49
37
  }
50
38
  exports.RemoteFeatureFlagsProvider = RemoteFeatureFlagsProvider;
51
- _RemoteFeatureFlagsProvider_messenger = new WeakMap();
52
39
  //# sourceMappingURL=RemoteFeatureFlagsProvider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteFeatureFlagsProvider.cjs","sourceRoot":"","sources":["../../../src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAKA;;GAEG;AACU,QAAA,kCAAkC,GAC7C,4BAAqC,CAAC;AAkBxC,MAAa,0BAA0B;IAGrC,YAAY,EACV,SAAS,GAGV;QANQ,wDAAgD;QAOvD,uBAAA,IAAI,yCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,uBAAA,IAAI,6CAAW,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACnB,QAAkB;QAElB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,uBAAA,IAAI,6CAAW,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAmC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACxE,GAAG,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF;AA5CD,gEA4CC","sourcesContent":["import type { Messenger } from '@metamask/messenger';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport { AsyncMessenger } from '@metamask/snaps-sdk';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Namespace for the {@link RemoteFeatureFlagsProvider} messenger.\n */\nexport const REMOTE_FEATURE_FLAGS_PROVIDER_NAME =\n 'RemoteFeatureFlagsProvider' as const;\n\n/**\n * Actions from other messengers that {@link RemoteFeatureFlagsProvider} calls.\n */\nexport type RemoteFeatureFlagsProviderAllowedActions =\n RemoteFeatureFlagControllerGetStateAction;\n\n/**\n * Messenger restricted to actions consumed by {@link RemoteFeatureFlagsProvider}.\n */\nexport type RemoteFeatureFlagsProviderMessenger = AsyncMessenger<\n Messenger<\n typeof REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProviderAllowedActions\n >\n>;\n\nexport class RemoteFeatureFlagsProvider {\n readonly #messenger: RemoteFeatureFlagsProviderMessenger;\n\n constructor({\n messenger,\n }: {\n messenger: RemoteFeatureFlagsProviderMessenger;\n }) {\n this.#messenger = messenger;\n }\n\n /**\n * Returns a single remote feature flag value, or `undefined` if missing.\n *\n * @param flagKey - LaunchDarkly / client-config feature flag key.\n * @returns Flag value, or `undefined`.\n */\n async getFeatureFlag(flagKey: string): Promise<Json | undefined> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return remoteFeatureFlags[flagKey];\n }\n\n /**\n * Returns remote feature flag values for the given keys, keyed by flag key.\n * Missing keys are included with value `undefined`.\n *\n * @param flagKeys - Feature flag keys to resolve.\n * @returns Map of flag key → value.\n */\n async getFeatureFlags(\n flagKeys: string[],\n ): Promise<Record<string, Json | undefined>> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return flagKeys.reduce<Record<string, Json | undefined>>((acc, flagKey) => {\n acc[flagKey] = remoteFeatureFlags[flagKey];\n return acc;\n }, {});\n }\n}\n"]}
1
+ {"version":3,"file":"RemoteFeatureFlagsProvider.cjs","sourceRoot":"","sources":["../../../src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACU,QAAA,kCAAkC,GAC7C,4BAAqC,CAAC;AAkBxC,MAAa,0BAA0B;IAC5B,UAAU,CAAsC;IAEzD,YAAY,EACV,SAAS,GAGV;QACC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACnB,QAAkB;QAElB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAmC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACxE,GAAG,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF;AA5CD,gEA4CC","sourcesContent":["import type { Messenger } from '@metamask/messenger';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport { AsyncMessenger } from '@metamask/snaps-sdk';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Namespace for the {@link RemoteFeatureFlagsProvider} messenger.\n */\nexport const REMOTE_FEATURE_FLAGS_PROVIDER_NAME =\n 'RemoteFeatureFlagsProvider' as const;\n\n/**\n * Actions from other messengers that {@link RemoteFeatureFlagsProvider} calls.\n */\nexport type RemoteFeatureFlagsProviderAllowedActions =\n RemoteFeatureFlagControllerGetStateAction;\n\n/**\n * Messenger restricted to actions consumed by {@link RemoteFeatureFlagsProvider}.\n */\nexport type RemoteFeatureFlagsProviderMessenger = AsyncMessenger<\n Messenger<\n typeof REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProviderAllowedActions\n >\n>;\n\nexport class RemoteFeatureFlagsProvider {\n readonly #messenger: RemoteFeatureFlagsProviderMessenger;\n\n constructor({\n messenger,\n }: {\n messenger: RemoteFeatureFlagsProviderMessenger;\n }) {\n this.#messenger = messenger;\n }\n\n /**\n * Returns a single remote feature flag value, or `undefined` if missing.\n *\n * @param flagKey - LaunchDarkly / client-config feature flag key.\n * @returns Flag value, or `undefined`.\n */\n async getFeatureFlag(flagKey: string): Promise<Json | undefined> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return remoteFeatureFlags[flagKey];\n }\n\n /**\n * Returns remote feature flag values for the given keys, keyed by flag key.\n * Missing keys are included with value `undefined`.\n *\n * @param flagKeys - Feature flag keys to resolve.\n * @returns Map of flag key → value.\n */\n async getFeatureFlags(\n flagKeys: string[],\n ): Promise<Record<string, Json | undefined>> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return flagKeys.reduce<Record<string, Json | undefined>>((acc, flagKey) => {\n acc[flagKey] = remoteFeatureFlags[flagKey];\n return acc;\n }, {});\n }\n}\n"]}
@@ -1,23 +1,11 @@
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 _RemoteFeatureFlagsProvider_messenger;
13
1
  /**
14
2
  * Namespace for the {@link RemoteFeatureFlagsProvider} messenger.
15
3
  */
16
4
  export const REMOTE_FEATURE_FLAGS_PROVIDER_NAME = 'RemoteFeatureFlagsProvider';
17
5
  export class RemoteFeatureFlagsProvider {
6
+ #messenger;
18
7
  constructor({ messenger, }) {
19
- _RemoteFeatureFlagsProvider_messenger.set(this, void 0);
20
- __classPrivateFieldSet(this, _RemoteFeatureFlagsProvider_messenger, messenger, "f");
8
+ this.#messenger = messenger;
21
9
  }
22
10
  /**
23
11
  * Returns a single remote feature flag value, or `undefined` if missing.
@@ -26,7 +14,7 @@ export class RemoteFeatureFlagsProvider {
26
14
  * @returns Flag value, or `undefined`.
27
15
  */
28
16
  async getFeatureFlag(flagKey) {
29
- const { remoteFeatureFlags } = await __classPrivateFieldGet(this, _RemoteFeatureFlagsProvider_messenger, "f").call('RemoteFeatureFlagController:getState');
17
+ const { remoteFeatureFlags } = await this.#messenger.call('RemoteFeatureFlagController:getState');
30
18
  return remoteFeatureFlags[flagKey];
31
19
  }
32
20
  /**
@@ -37,12 +25,11 @@ export class RemoteFeatureFlagsProvider {
37
25
  * @returns Map of flag key → value.
38
26
  */
39
27
  async getFeatureFlags(flagKeys) {
40
- const { remoteFeatureFlags } = await __classPrivateFieldGet(this, _RemoteFeatureFlagsProvider_messenger, "f").call('RemoteFeatureFlagController:getState');
28
+ const { remoteFeatureFlags } = await this.#messenger.call('RemoteFeatureFlagController:getState');
41
29
  return flagKeys.reduce((acc, flagKey) => {
42
30
  acc[flagKey] = remoteFeatureFlags[flagKey];
43
31
  return acc;
44
32
  }, {});
45
33
  }
46
34
  }
47
- _RemoteFeatureFlagsProvider_messenger = new WeakMap();
48
35
  //# sourceMappingURL=RemoteFeatureFlagsProvider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteFeatureFlagsProvider.mjs","sourceRoot":"","sources":["../../../src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAC7C,4BAAqC,CAAC;AAkBxC,MAAM,OAAO,0BAA0B;IAGrC,YAAY,EACV,SAAS,GAGV;QANQ,wDAAgD;QAOvD,uBAAA,IAAI,yCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,uBAAA,IAAI,6CAAW,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACnB,QAAkB;QAElB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,uBAAA,IAAI,6CAAW,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAmC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACxE,GAAG,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF","sourcesContent":["import type { Messenger } from '@metamask/messenger';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport { AsyncMessenger } from '@metamask/snaps-sdk';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Namespace for the {@link RemoteFeatureFlagsProvider} messenger.\n */\nexport const REMOTE_FEATURE_FLAGS_PROVIDER_NAME =\n 'RemoteFeatureFlagsProvider' as const;\n\n/**\n * Actions from other messengers that {@link RemoteFeatureFlagsProvider} calls.\n */\nexport type RemoteFeatureFlagsProviderAllowedActions =\n RemoteFeatureFlagControllerGetStateAction;\n\n/**\n * Messenger restricted to actions consumed by {@link RemoteFeatureFlagsProvider}.\n */\nexport type RemoteFeatureFlagsProviderMessenger = AsyncMessenger<\n Messenger<\n typeof REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProviderAllowedActions\n >\n>;\n\nexport class RemoteFeatureFlagsProvider {\n readonly #messenger: RemoteFeatureFlagsProviderMessenger;\n\n constructor({\n messenger,\n }: {\n messenger: RemoteFeatureFlagsProviderMessenger;\n }) {\n this.#messenger = messenger;\n }\n\n /**\n * Returns a single remote feature flag value, or `undefined` if missing.\n *\n * @param flagKey - LaunchDarkly / client-config feature flag key.\n * @returns Flag value, or `undefined`.\n */\n async getFeatureFlag(flagKey: string): Promise<Json | undefined> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return remoteFeatureFlags[flagKey];\n }\n\n /**\n * Returns remote feature flag values for the given keys, keyed by flag key.\n * Missing keys are included with value `undefined`.\n *\n * @param flagKeys - Feature flag keys to resolve.\n * @returns Map of flag key → value.\n */\n async getFeatureFlags(\n flagKeys: string[],\n ): Promise<Record<string, Json | undefined>> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return flagKeys.reduce<Record<string, Json | undefined>>((acc, flagKey) => {\n acc[flagKey] = remoteFeatureFlags[flagKey];\n return acc;\n }, {});\n }\n}\n"]}
1
+ {"version":3,"file":"RemoteFeatureFlagsProvider.mjs","sourceRoot":"","sources":["../../../src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAC7C,4BAAqC,CAAC;AAkBxC,MAAM,OAAO,0BAA0B;IAC5B,UAAU,CAAsC;IAEzD,YAAY,EACV,SAAS,GAGV;QACC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACnB,QAAkB;QAElB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACvD,sCAAsC,CACvC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAmC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACxE,GAAG,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF","sourcesContent":["import type { Messenger } from '@metamask/messenger';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport { AsyncMessenger } from '@metamask/snaps-sdk';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Namespace for the {@link RemoteFeatureFlagsProvider} messenger.\n */\nexport const REMOTE_FEATURE_FLAGS_PROVIDER_NAME =\n 'RemoteFeatureFlagsProvider' as const;\n\n/**\n * Actions from other messengers that {@link RemoteFeatureFlagsProvider} calls.\n */\nexport type RemoteFeatureFlagsProviderAllowedActions =\n RemoteFeatureFlagControllerGetStateAction;\n\n/**\n * Messenger restricted to actions consumed by {@link RemoteFeatureFlagsProvider}.\n */\nexport type RemoteFeatureFlagsProviderMessenger = AsyncMessenger<\n Messenger<\n typeof REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProviderAllowedActions\n >\n>;\n\nexport class RemoteFeatureFlagsProvider {\n readonly #messenger: RemoteFeatureFlagsProviderMessenger;\n\n constructor({\n messenger,\n }: {\n messenger: RemoteFeatureFlagsProviderMessenger;\n }) {\n this.#messenger = messenger;\n }\n\n /**\n * Returns a single remote feature flag value, or `undefined` if missing.\n *\n * @param flagKey - LaunchDarkly / client-config feature flag key.\n * @returns Flag value, or `undefined`.\n */\n async getFeatureFlag(flagKey: string): Promise<Json | undefined> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return remoteFeatureFlags[flagKey];\n }\n\n /**\n * Returns remote feature flag values for the given keys, keyed by flag key.\n * Missing keys are included with value `undefined`.\n *\n * @param flagKeys - Feature flag keys to resolve.\n * @returns Map of flag key → value.\n */\n async getFeatureFlags(\n flagKeys: string[],\n ): Promise<Record<string, Json | undefined>> {\n const { remoteFeatureFlags } = await this.#messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n return flagKeys.reduce<Record<string, Json | undefined>>((acc, flagKey) => {\n acc[flagKey] = remoteFeatureFlags[flagKey];\n return acc;\n }, {});\n }\n}\n"]}
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnalyticsService = exports.SecurityEventType = exports.TransactionEventType = void 0;
4
+ exports.TransactionEventType = {
5
+ TransactionAdded: 'Transaction Added',
6
+ TransactionRejected: 'Transaction Rejected',
7
+ TransactionApproved: 'Transaction Approved',
8
+ TransactionSubmitted: 'Transaction Submitted',
9
+ TransactionFinalized: 'Transaction Finalized',
10
+ };
11
+ exports.SecurityEventType = {
12
+ SecurityAlertDetected: 'Security Alert Detected',
13
+ SecurityScanCompleted: 'Security Scan Completed',
14
+ };
15
+ /**
16
+ * Tracks common network Snap analytics events.
17
+ */
18
+ class AnalyticsService {
19
+ #getSnapProvider;
20
+ #logger;
21
+ #trackError;
22
+ constructor({ getSnapProvider, logger, trackError, }) {
23
+ this.#getSnapProvider = getSnapProvider;
24
+ this.#logger = logger.withPrefix('[AnalyticsService]');
25
+ this.#trackError = trackError;
26
+ }
27
+ /**
28
+ * Track an event in MetaMask analytics.
29
+ *
30
+ * Tracking and error-reporting failures are logged but never interrupt the
31
+ * user flow.
32
+ *
33
+ * @param event - Event name.
34
+ * @param properties - Event properties.
35
+ */
36
+ async trackEvent(event, properties) {
37
+ try {
38
+ await this.#getSnapProvider().request({
39
+ method: 'snap_trackEvent',
40
+ params: {
41
+ event: {
42
+ event,
43
+ properties,
44
+ },
45
+ },
46
+ });
47
+ }
48
+ catch (error) {
49
+ try {
50
+ await this.#trackError(error);
51
+ }
52
+ catch (trackingError) {
53
+ this.#logger.warn('Failed to report analytics error', {
54
+ error: trackingError,
55
+ });
56
+ }
57
+ this.#logger.warn('Failed to track event', {
58
+ error,
59
+ event,
60
+ properties,
61
+ });
62
+ }
63
+ }
64
+ /**
65
+ * Track a "Transaction Added" event when a transaction confirmation is shown.
66
+ *
67
+ * @param properties - Event properties.
68
+ * @param properties.origin - The origin of the request.
69
+ * @param properties.accountType - The type of account.
70
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
71
+ * @param properties.transactionType - Optional transaction type.
72
+ */
73
+ async trackTransactionAdded(properties) {
74
+ await this.#trackTransactionEvent(exports.TransactionEventType.TransactionAdded, 'Snap transaction added', properties);
75
+ }
76
+ /**
77
+ * Track a "Transaction Rejected" event when the user rejects a transaction.
78
+ *
79
+ * @param properties - Event properties.
80
+ * @param properties.origin - The origin of the request.
81
+ * @param properties.accountType - The type of account.
82
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
83
+ * @param properties.transactionType - Optional transaction type.
84
+ */
85
+ async trackTransactionRejected(properties) {
86
+ await this.#trackTransactionEvent(exports.TransactionEventType.TransactionRejected, 'Snap transaction rejected', properties);
87
+ }
88
+ /**
89
+ * Track a "Transaction Approved" event when a transaction is approved.
90
+ *
91
+ * @param properties - Event properties.
92
+ * @param properties.origin - The origin of the request.
93
+ * @param properties.accountType - The type of account.
94
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
95
+ * @param properties.transactionType - Optional transaction type.
96
+ */
97
+ async trackTransactionApproved(properties) {
98
+ await this.#trackTransactionEvent(exports.TransactionEventType.TransactionApproved, 'Snap transaction approved', properties);
99
+ }
100
+ /**
101
+ * Track a "Transaction Submitted" event when a transaction is broadcast.
102
+ *
103
+ * @param properties - Event properties.
104
+ * @param properties.origin - The origin of the request.
105
+ * @param properties.accountType - The type of account.
106
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
107
+ * @param properties.transactionType - Optional transaction type.
108
+ */
109
+ async trackTransactionSubmitted(properties) {
110
+ await this.#trackTransactionEvent(exports.TransactionEventType.TransactionSubmitted, 'Snap transaction submitted', properties);
111
+ }
112
+ /**
113
+ * Track a "Transaction Finalized" event when a transaction reaches a final state.
114
+ *
115
+ * @param properties - Event properties.
116
+ * @param properties.origin - The origin of the request.
117
+ * @param properties.accountType - The type of account.
118
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
119
+ * @param properties.transactionStatus - Optional final transaction status.
120
+ * @param properties.transactionType - Optional transaction type.
121
+ */
122
+ async trackTransactionFinalized({ origin, accountType, chainIdCaip, transactionStatus, transactionType, }) {
123
+ await this.trackEvent(exports.TransactionEventType.TransactionFinalized, {
124
+ message: 'Snap transaction finalized',
125
+ origin,
126
+ account_type: accountType,
127
+ chain_id_caip: chainIdCaip,
128
+ ...(transactionStatus === undefined
129
+ ? {}
130
+ : { transaction_status: transactionStatus }),
131
+ ...(transactionType === undefined
132
+ ? {}
133
+ : { transaction_type: transactionType }),
134
+ });
135
+ }
136
+ /**
137
+ * Track a "Security Alert Detected" event when a malicious or warning
138
+ * transaction is detected.
139
+ *
140
+ * @param properties - Event properties.
141
+ * @param properties.origin - The origin of the request.
142
+ * @param properties.accountType - The type of account.
143
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
144
+ * @param properties.securityAlertResponse - The type of security alert.
145
+ * @param properties.securityAlertReason - The reason for the security alert.
146
+ * @param properties.securityAlertDescription - Human-readable description of the alert.
147
+ */
148
+ async trackSecurityAlertDetected({ origin, accountType, chainIdCaip, securityAlertResponse, securityAlertReason, securityAlertDescription, }) {
149
+ await this.trackEvent(exports.SecurityEventType.SecurityAlertDetected, {
150
+ message: 'Snap security alert detected',
151
+ origin,
152
+ account_type: accountType,
153
+ chain_id_caip: chainIdCaip,
154
+ security_alert_response: securityAlertResponse,
155
+ security_alert_reason: securityAlertReason,
156
+ security_alert_description: securityAlertDescription,
157
+ });
158
+ }
159
+ /**
160
+ * Track a "Security Scan Completed" event when a transaction security scan
161
+ * finishes.
162
+ *
163
+ * @param properties - Event properties.
164
+ * @param properties.origin - The origin of the request.
165
+ * @param properties.accountType - The type of account.
166
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
167
+ * @param properties.scanStatus - The status of the scan.
168
+ * @param properties.hasSecurityAlerts - Whether security alerts were detected.
169
+ */
170
+ async trackSecurityScanCompleted({ origin, accountType, chainIdCaip, scanStatus, hasSecurityAlerts, }) {
171
+ await this.trackEvent(exports.SecurityEventType.SecurityScanCompleted, {
172
+ message: 'Snap security scan completed',
173
+ origin,
174
+ account_type: accountType,
175
+ chain_id_caip: chainIdCaip,
176
+ scan_status: scanStatus,
177
+ has_security_alerts: hasSecurityAlerts,
178
+ });
179
+ }
180
+ /**
181
+ * Track a "WebSocket Connection Closed Not Cleanly" event when a Snap
182
+ * WebSocket disconnects without a clean close.
183
+ *
184
+ * @param properties - Event properties.
185
+ * @param properties.origin - The origin of the connection.
186
+ * @param properties.code - The WebSocket close code.
187
+ * @param properties.reason - The close reason, if any.
188
+ */
189
+ async trackWebSocketConnectionClosedNotCleanly({ origin, code, reason, }) {
190
+ await this.trackEvent('WebSocket Connection Closed Not Cleanly', {
191
+ message: 'Snap WebSocket connection closed not cleanly',
192
+ origin,
193
+ code,
194
+ reason,
195
+ });
196
+ }
197
+ /**
198
+ * Track a transaction lifecycle event.
199
+ *
200
+ * Centralizes the shared payload so the common properties only have to change
201
+ * in one place. `transaction_type` is added only when the emitting Snap could
202
+ * classify the transaction.
203
+ *
204
+ * @param event - Event name.
205
+ * @param message - Human-readable event message.
206
+ * @param properties - Event properties.
207
+ * @param properties.origin - The origin of the request.
208
+ * @param properties.accountType - The type of account.
209
+ * @param properties.chainIdCaip - The CAIP-2 chain ID.
210
+ * @param properties.transactionType - Optional transaction type.
211
+ */
212
+ async #trackTransactionEvent(event, message, { origin, accountType, chainIdCaip, transactionType, }) {
213
+ await this.trackEvent(event, {
214
+ message,
215
+ origin,
216
+ account_type: accountType,
217
+ chain_id_caip: chainIdCaip,
218
+ ...(transactionType === undefined
219
+ ? {}
220
+ : { transaction_type: transactionType }),
221
+ });
222
+ }
223
+ }
224
+ exports.AnalyticsService = AnalyticsService;
225
+ //# sourceMappingURL=AnalyticsService.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsService.cjs","sourceRoot":"","sources":["../../../src/services/analytics/AnalyticsService.ts"],"names":[],"mappings":";;;AAMa,QAAA,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,mBAAmB;IACrC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,sBAAsB;IAC3C,oBAAoB,EAAE,uBAAuB;IAC7C,oBAAoB,EAAE,uBAAuB;CACrC,CAAC;AAKE,QAAA,iBAAiB,GAAG;IAC/B,qBAAqB,EAAE,yBAAyB;IAChD,qBAAqB,EAAE,yBAAyB;CACxC,CAAC;AAsEX;;GAEG;AACH,MAAa,gBAAgB;IAGlB,gBAAgB,CAAkB;IAElC,OAAO,CAAS;IAEhB,WAAW,CAAe;IAEnC,YAAY,EACV,eAAe,EACf,MAAM,EACN,UAAU,GACyB;QACnC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CACd,KAAa,EACb,UAAgC;QAEhC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC;gBACpC,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,KAAK;wBACL,UAAU;qBACX;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE;oBACpD,KAAK,EAAE,aAAa;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACzC,KAAK;gBACL,KAAK;gBACL,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,qBAAqB,CACzB,UAAsC;QAEtC,MAAM,IAAI,CAAC,sBAAsB,CAC/B,4BAAoB,CAAC,gBAAgB,EACrC,wBAAwB,EACxB,UAAU,CACX,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,wBAAwB,CAC5B,UAAsC;QAEtC,MAAM,IAAI,CAAC,sBAAsB,CAC/B,4BAAoB,CAAC,mBAAmB,EACxC,2BAA2B,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,wBAAwB,CAC5B,UAAsC;QAEtC,MAAM,IAAI,CAAC,sBAAsB,CAC/B,4BAAoB,CAAC,mBAAmB,EACxC,2BAA2B,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,yBAAyB,CAC7B,UAAsC;QAEtC,MAAM,IAAI,CAAC,sBAAsB,CAC/B,4BAAoB,CAAC,oBAAoB,EACzC,4BAA4B,EAC5B,UAAU,CACX,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,yBAAyB,CAAC,EAC9B,MAAM,EACN,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,eAAe,GACqB;QACpC,MAAM,IAAI,CAAC,UAAU,CAAC,4BAAoB,CAAC,oBAAoB,EAAE;YAC/D,OAAO,EAAE,4BAA4B;YACrC,MAAM;YACN,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,WAAW;YAC1B,GAAG,CAAC,iBAAiB,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;YAC9C,GAAG,CAAC,eAAe,KAAK,SAAS;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,0BAA0B,CAAC,EAC/B,MAAM,EACN,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,GACa;QACrC,MAAM,IAAI,CAAC,UAAU,CAAC,yBAAiB,CAAC,qBAAqB,EAAE;YAC7D,OAAO,EAAE,8BAA8B;YACvC,MAAM;YACN,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,WAAW;YAC1B,uBAAuB,EAAE,qBAAqB;YAC9C,qBAAqB,EAAE,mBAAmB;YAC1C,0BAA0B,EAAE,wBAAwB;SACrD,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,0BAA0B,CAAC,EAC/B,MAAM,EACN,WAAW,EACX,WAAW,EACX,UAAU,EACV,iBAAiB,GACoB;QACrC,MAAM,IAAI,CAAC,UAAU,CAAC,yBAAiB,CAAC,qBAAqB,EAAE;YAC7D,OAAO,EAAE,8BAA8B;YACvC,MAAM;YACN,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,WAAW;YAC1B,WAAW,EAAE,UAAU;YACvB,mBAAmB,EAAE,iBAAiB;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,wCAAwC,CAAC,EAC7C,MAAM,EACN,IAAI,EACJ,MAAM,GACmC;QACzC,MAAM,IAAI,CAAC,UAAU,CAAC,yCAAyC,EAAE;YAC/D,OAAO,EAAE,8CAA8C;YACvD,MAAM;YACN,IAAI;YACJ,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,sBAAsB,CAC1B,KAA2B,EAC3B,OAAe,EACf,EACE,MAAM,EACN,WAAW,EACX,WAAW,EACX,eAAe,GACY;QAE7B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YAC3B,OAAO;YACP,MAAM;YACN,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,WAAW;YAC1B,GAAG,CAAC,eAAe,KAAK,SAAS;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;CACF;AA1RD,4CA0RC","sourcesContent":["import type { TransactionType } from '@metamask/keyring-api';\nimport type { Json } from '@metamask/snaps-sdk';\n\nimport type { TrackErrorFn } from '../../utils/errors';\nimport type { Logger } from '../../utils/logger/Logger';\n\nexport const TransactionEventType = {\n TransactionAdded: 'Transaction Added',\n TransactionRejected: 'Transaction Rejected',\n TransactionApproved: 'Transaction Approved',\n TransactionSubmitted: 'Transaction Submitted',\n TransactionFinalized: 'Transaction Finalized',\n} as const;\n\nexport type TransactionEventType =\n (typeof TransactionEventType)[keyof typeof TransactionEventType];\n\nexport const SecurityEventType = {\n SecurityAlertDetected: 'Security Alert Detected',\n SecurityScanCompleted: 'Security Scan Completed',\n} as const;\n\nexport type SecurityEventType =\n (typeof SecurityEventType)[keyof typeof SecurityEventType];\n\nexport type SnapTrackEventRequest = {\n method: 'snap_trackEvent';\n params: {\n event: {\n event: string;\n properties: Record<string, Json>;\n };\n };\n};\n\nexport type TrackEventCapableProvider = {\n request: (args: SnapTrackEventRequest) => Promise<unknown>;\n};\n\nexport type AnalyticsServiceOptions<\n TProvider extends TrackEventCapableProvider = TrackEventCapableProvider,\n> = {\n getSnapProvider: () => TProvider;\n logger: Logger;\n trackError: TrackErrorFn;\n};\n\n/**\n * Fields shared by every event tied to an account on a chain.\n */\nexport type AccountEventProperties = {\n origin: string;\n accountType: string;\n chainIdCaip: string;\n};\n\n/**\n * Properties of a transaction lifecycle event.\n *\n * `transactionType` is the optional classification of the transaction.\n *\n * Security events intentionally do not extend this type: they are not tied to a\n * transaction classification, so advertising `transactionType` there would let\n * callers pass a value that is silently discarded.\n */\nexport type TransactionEventProperties = AccountEventProperties & {\n transactionType?: `${TransactionType}`;\n};\n\nexport type TransactionFinalizedEventProperties = TransactionEventProperties & {\n transactionStatus?: string;\n};\n\nexport type SecurityAlertDetectedEventProperties = AccountEventProperties & {\n securityAlertResponse: string;\n securityAlertReason: string | null;\n securityAlertDescription: string;\n};\n\nexport type SecurityScanCompletedEventProperties = AccountEventProperties & {\n scanStatus: string;\n hasSecurityAlerts: boolean;\n};\n\nexport type WebSocketConnectionClosedEventProperties = {\n origin: string;\n code: number;\n reason: string | null;\n};\n\n/**\n * Tracks common network Snap analytics events.\n */\nexport class AnalyticsService<\n TProvider extends TrackEventCapableProvider = TrackEventCapableProvider,\n> {\n readonly #getSnapProvider: () => TProvider;\n\n readonly #logger: Logger;\n\n readonly #trackError: TrackErrorFn;\n\n constructor({\n getSnapProvider,\n logger,\n trackError,\n }: AnalyticsServiceOptions<TProvider>) {\n this.#getSnapProvider = getSnapProvider;\n this.#logger = logger.withPrefix('[AnalyticsService]');\n this.#trackError = trackError;\n }\n\n /**\n * Track an event in MetaMask analytics.\n *\n * Tracking and error-reporting failures are logged but never interrupt the\n * user flow.\n *\n * @param event - Event name.\n * @param properties - Event properties.\n */\n async trackEvent(\n event: string,\n properties: Record<string, Json>,\n ): Promise<void> {\n try {\n await this.#getSnapProvider().request({\n method: 'snap_trackEvent',\n params: {\n event: {\n event,\n properties,\n },\n },\n });\n } catch (error) {\n try {\n await this.#trackError(error);\n } catch (trackingError) {\n this.#logger.warn('Failed to report analytics error', {\n error: trackingError,\n });\n }\n\n this.#logger.warn('Failed to track event', {\n error,\n event,\n properties,\n });\n }\n }\n\n /**\n * Track a \"Transaction Added\" event when a transaction confirmation is shown.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.transactionType - Optional transaction type.\n */\n async trackTransactionAdded(\n properties: TransactionEventProperties,\n ): Promise<void> {\n await this.#trackTransactionEvent(\n TransactionEventType.TransactionAdded,\n 'Snap transaction added',\n properties,\n );\n }\n\n /**\n * Track a \"Transaction Rejected\" event when the user rejects a transaction.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.transactionType - Optional transaction type.\n */\n async trackTransactionRejected(\n properties: TransactionEventProperties,\n ): Promise<void> {\n await this.#trackTransactionEvent(\n TransactionEventType.TransactionRejected,\n 'Snap transaction rejected',\n properties,\n );\n }\n\n /**\n * Track a \"Transaction Approved\" event when a transaction is approved.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.transactionType - Optional transaction type.\n */\n async trackTransactionApproved(\n properties: TransactionEventProperties,\n ): Promise<void> {\n await this.#trackTransactionEvent(\n TransactionEventType.TransactionApproved,\n 'Snap transaction approved',\n properties,\n );\n }\n\n /**\n * Track a \"Transaction Submitted\" event when a transaction is broadcast.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.transactionType - Optional transaction type.\n */\n async trackTransactionSubmitted(\n properties: TransactionEventProperties,\n ): Promise<void> {\n await this.#trackTransactionEvent(\n TransactionEventType.TransactionSubmitted,\n 'Snap transaction submitted',\n properties,\n );\n }\n\n /**\n * Track a \"Transaction Finalized\" event when a transaction reaches a final state.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.transactionStatus - Optional final transaction status.\n * @param properties.transactionType - Optional transaction type.\n */\n async trackTransactionFinalized({\n origin,\n accountType,\n chainIdCaip,\n transactionStatus,\n transactionType,\n }: TransactionFinalizedEventProperties): Promise<void> {\n await this.trackEvent(TransactionEventType.TransactionFinalized, {\n message: 'Snap transaction finalized',\n origin,\n account_type: accountType,\n chain_id_caip: chainIdCaip,\n ...(transactionStatus === undefined\n ? {}\n : { transaction_status: transactionStatus }),\n ...(transactionType === undefined\n ? {}\n : { transaction_type: transactionType }),\n });\n }\n\n /**\n * Track a \"Security Alert Detected\" event when a malicious or warning\n * transaction is detected.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.securityAlertResponse - The type of security alert.\n * @param properties.securityAlertReason - The reason for the security alert.\n * @param properties.securityAlertDescription - Human-readable description of the alert.\n */\n async trackSecurityAlertDetected({\n origin,\n accountType,\n chainIdCaip,\n securityAlertResponse,\n securityAlertReason,\n securityAlertDescription,\n }: SecurityAlertDetectedEventProperties): Promise<void> {\n await this.trackEvent(SecurityEventType.SecurityAlertDetected, {\n message: 'Snap security alert detected',\n origin,\n account_type: accountType,\n chain_id_caip: chainIdCaip,\n security_alert_response: securityAlertResponse,\n security_alert_reason: securityAlertReason,\n security_alert_description: securityAlertDescription,\n });\n }\n\n /**\n * Track a \"Security Scan Completed\" event when a transaction security scan\n * finishes.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.scanStatus - The status of the scan.\n * @param properties.hasSecurityAlerts - Whether security alerts were detected.\n */\n async trackSecurityScanCompleted({\n origin,\n accountType,\n chainIdCaip,\n scanStatus,\n hasSecurityAlerts,\n }: SecurityScanCompletedEventProperties): Promise<void> {\n await this.trackEvent(SecurityEventType.SecurityScanCompleted, {\n message: 'Snap security scan completed',\n origin,\n account_type: accountType,\n chain_id_caip: chainIdCaip,\n scan_status: scanStatus,\n has_security_alerts: hasSecurityAlerts,\n });\n }\n\n /**\n * Track a \"WebSocket Connection Closed Not Cleanly\" event when a Snap\n * WebSocket disconnects without a clean close.\n *\n * @param properties - Event properties.\n * @param properties.origin - The origin of the connection.\n * @param properties.code - The WebSocket close code.\n * @param properties.reason - The close reason, if any.\n */\n async trackWebSocketConnectionClosedNotCleanly({\n origin,\n code,\n reason,\n }: WebSocketConnectionClosedEventProperties): Promise<void> {\n await this.trackEvent('WebSocket Connection Closed Not Cleanly', {\n message: 'Snap WebSocket connection closed not cleanly',\n origin,\n code,\n reason,\n });\n }\n\n /**\n * Track a transaction lifecycle event.\n *\n * Centralizes the shared payload so the common properties only have to change\n * in one place. `transaction_type` is added only when the emitting Snap could\n * classify the transaction.\n *\n * @param event - Event name.\n * @param message - Human-readable event message.\n * @param properties - Event properties.\n * @param properties.origin - The origin of the request.\n * @param properties.accountType - The type of account.\n * @param properties.chainIdCaip - The CAIP-2 chain ID.\n * @param properties.transactionType - Optional transaction type.\n */\n async #trackTransactionEvent(\n event: TransactionEventType,\n message: string,\n {\n origin,\n accountType,\n chainIdCaip,\n transactionType,\n }: TransactionEventProperties,\n ): Promise<void> {\n await this.trackEvent(event, {\n message,\n origin,\n account_type: accountType,\n chain_id_caip: chainIdCaip,\n ...(transactionType === undefined\n ? {}\n : { transaction_type: transactionType }),\n });\n }\n}\n"]}