@metamask-previews/assets-controllers 29.0.0-preview-a1db0714 → 29.0.0-preview-699063fc

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 (89) hide show
  1. package/dist/AccountTrackerController.js +2 -2
  2. package/dist/AccountTrackerController.mjs +1 -1
  3. package/dist/NftController.js +2 -2
  4. package/dist/NftController.mjs +1 -1
  5. package/dist/NftDetectionController.js +2 -2
  6. package/dist/NftDetectionController.mjs +1 -1
  7. package/dist/TokenBalancesController.js +2 -2
  8. package/dist/TokenBalancesController.mjs +1 -1
  9. package/dist/TokenDetectionController.js +2 -2
  10. package/dist/TokenDetectionController.mjs +1 -1
  11. package/dist/TokenListController.js +3 -3
  12. package/dist/TokenListController.mjs +2 -2
  13. package/dist/TokenRatesController.js +2 -2
  14. package/dist/TokenRatesController.mjs +1 -1
  15. package/dist/TokensController.js +3 -3
  16. package/dist/TokensController.mjs +2 -2
  17. package/dist/{chunk-6AID3HJG.mjs → chunk-4LY47RPI.mjs} +5 -9
  18. package/dist/chunk-4LY47RPI.mjs.map +1 -0
  19. package/dist/{chunk-2IFE6FHM.mjs → chunk-ASFD56OL.mjs} +9 -37
  20. package/dist/chunk-ASFD56OL.mjs.map +1 -0
  21. package/dist/{chunk-FWKJDOD5.js → chunk-AVPUXAZY.js} +25 -78
  22. package/dist/chunk-AVPUXAZY.js.map +1 -0
  23. package/dist/{chunk-RUE635TV.mjs → chunk-C64L6MMU.mjs} +2 -2
  24. package/dist/{chunk-2MMZPHA6.mjs → chunk-D3PCUDTX.mjs} +21 -44
  25. package/dist/chunk-D3PCUDTX.mjs.map +1 -0
  26. package/dist/{chunk-IUDE4QAH.js → chunk-F2F3NGG3.js} +82 -137
  27. package/dist/chunk-F2F3NGG3.js.map +1 -0
  28. package/dist/{chunk-OPYNW5AW.js → chunk-I53XGBU3.js} +21 -44
  29. package/dist/chunk-I53XGBU3.js.map +1 -0
  30. package/dist/{chunk-3YTCRJI6.js → chunk-IOQX3VTD.js} +13 -27
  31. package/dist/chunk-IOQX3VTD.js.map +1 -0
  32. package/dist/{chunk-WNDGC3UZ.js → chunk-LD4GC7OR.js} +5 -9
  33. package/dist/chunk-LD4GC7OR.js.map +1 -0
  34. package/dist/{chunk-NRWTWDPT.mjs → chunk-MDHJNCTR.mjs} +23 -76
  35. package/dist/chunk-MDHJNCTR.mjs.map +1 -0
  36. package/dist/{chunk-OHSQRYVL.js → chunk-OKEA7NPV.js} +14 -3
  37. package/dist/chunk-OKEA7NPV.js.map +1 -0
  38. package/dist/{chunk-Z6FI22NX.mjs → chunk-ONJIVH6M.mjs} +82 -137
  39. package/dist/chunk-ONJIVH6M.mjs.map +1 -0
  40. package/dist/{chunk-ZWIFMJBZ.mjs → chunk-OWTCG2N3.mjs} +13 -27
  41. package/dist/chunk-OWTCG2N3.mjs.map +1 -0
  42. package/dist/{chunk-6562LMBM.mjs → chunk-PAJTKWEC.mjs} +12 -23
  43. package/dist/chunk-PAJTKWEC.mjs.map +1 -0
  44. package/dist/{chunk-NXGX7LZJ.mjs → chunk-S6KASB6I.mjs} +15 -4
  45. package/dist/chunk-S6KASB6I.mjs.map +1 -0
  46. package/dist/{chunk-DEQZ35QE.js → chunk-U36OEBF2.js} +3 -3
  47. package/dist/{chunk-4XJFIURR.js → chunk-V4ZO3F2S.js} +12 -23
  48. package/dist/chunk-V4ZO3F2S.js.map +1 -0
  49. package/dist/{chunk-BIUBOZW5.js → chunk-X2MMIBYW.js} +9 -37
  50. package/dist/chunk-X2MMIBYW.js.map +1 -0
  51. package/dist/index.js +10 -10
  52. package/dist/index.mjs +9 -9
  53. package/dist/token-service.js +2 -2
  54. package/dist/token-service.mjs +1 -1
  55. package/dist/tsconfig.build.tsbuildinfo +1 -1
  56. package/dist/types/AccountTrackerController.d.ts +9 -10
  57. package/dist/types/AccountTrackerController.d.ts.map +1 -1
  58. package/dist/types/NftController.d.ts +6 -8
  59. package/dist/types/NftController.d.ts.map +1 -1
  60. package/dist/types/NftDetectionController.d.ts +6 -15
  61. package/dist/types/NftDetectionController.d.ts.map +1 -1
  62. package/dist/types/TokenBalancesController.d.ts +2 -2
  63. package/dist/types/TokenBalancesController.d.ts.map +1 -1
  64. package/dist/types/TokenDetectionController.d.ts +5 -5
  65. package/dist/types/TokenDetectionController.d.ts.map +1 -1
  66. package/dist/types/TokenRatesController.d.ts +7 -10
  67. package/dist/types/TokenRatesController.d.ts.map +1 -1
  68. package/dist/types/TokensController.d.ts +6 -6
  69. package/dist/types/TokensController.d.ts.map +1 -1
  70. package/dist/types/token-service.d.ts.map +1 -1
  71. package/package.json +2 -2
  72. package/dist/chunk-2IFE6FHM.mjs.map +0 -1
  73. package/dist/chunk-2MMZPHA6.mjs.map +0 -1
  74. package/dist/chunk-3YTCRJI6.js.map +0 -1
  75. package/dist/chunk-4XJFIURR.js.map +0 -1
  76. package/dist/chunk-6562LMBM.mjs.map +0 -1
  77. package/dist/chunk-6AID3HJG.mjs.map +0 -1
  78. package/dist/chunk-BIUBOZW5.js.map +0 -1
  79. package/dist/chunk-FWKJDOD5.js.map +0 -1
  80. package/dist/chunk-IUDE4QAH.js.map +0 -1
  81. package/dist/chunk-NRWTWDPT.mjs.map +0 -1
  82. package/dist/chunk-NXGX7LZJ.mjs.map +0 -1
  83. package/dist/chunk-OHSQRYVL.js.map +0 -1
  84. package/dist/chunk-OPYNW5AW.js.map +0 -1
  85. package/dist/chunk-WNDGC3UZ.js.map +0 -1
  86. package/dist/chunk-Z6FI22NX.mjs.map +0 -1
  87. package/dist/chunk-ZWIFMJBZ.mjs.map +0 -1
  88. /package/dist/{chunk-RUE635TV.mjs.map → chunk-C64L6MMU.mjs.map} +0 -0
  89. /package/dist/{chunk-DEQZ35QE.js.map → chunk-U36OEBF2.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunk4XJFIURRjs = require('./chunk-4XJFIURR.js');
4
+ var _chunkV4ZO3F2Sjs = require('./chunk-V4ZO3F2S.js');
5
5
  require('./chunk-Z4BLTVTB.js');
6
6
 
7
7
 
8
8
 
9
- exports.AccountTrackerController = _chunk4XJFIURRjs.AccountTrackerController; exports.default = _chunk4XJFIURRjs.AccountTrackerController_default;
9
+ exports.AccountTrackerController = _chunkV4ZO3F2Sjs.AccountTrackerController; exports.default = _chunkV4ZO3F2Sjs.AccountTrackerController_default;
10
10
  //# sourceMappingURL=AccountTrackerController.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AccountTrackerController,
3
3
  AccountTrackerController_default
4
- } from "./chunk-6562LMBM.mjs";
4
+ } from "./chunk-PAJTKWEC.mjs";
5
5
  import "./chunk-XUI43LEZ.mjs";
6
6
  export {
7
7
  AccountTrackerController,
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkIUDE4QAHjs = require('./chunk-IUDE4QAH.js');
5
+ var _chunkF2F3NGG3js = require('./chunk-F2F3NGG3.js');
6
6
  require('./chunk-RGHTNZQ6.js');
7
7
  require('./chunk-LS6R3HQL.js');
8
8
  require('./chunk-Z4BLTVTB.js');
@@ -10,5 +10,5 @@ require('./chunk-Z4BLTVTB.js');
10
10
 
11
11
 
12
12
 
13
- exports.NftController = _chunkIUDE4QAHjs.NftController; exports.default = _chunkIUDE4QAHjs.NftController_default; exports.getDefaultNftState = _chunkIUDE4QAHjs.getDefaultNftState;
13
+ exports.NftController = _chunkF2F3NGG3js.NftController; exports.default = _chunkF2F3NGG3js.NftController_default; exports.getDefaultNftState = _chunkF2F3NGG3js.getDefaultNftState;
14
14
  //# sourceMappingURL=NftController.js.map
@@ -2,7 +2,7 @@ import {
2
2
  NftController,
3
3
  NftController_default,
4
4
  getDefaultNftState
5
- } from "./chunk-Z6FI22NX.mjs";
5
+ } from "./chunk-ONJIVH6M.mjs";
6
6
  import "./chunk-CP3HC7AQ.mjs";
7
7
  import "./chunk-X5PLVMOQ.mjs";
8
8
  import "./chunk-XUI43LEZ.mjs";
@@ -2,12 +2,12 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkBIUBOZW5js = require('./chunk-BIUBOZW5.js');
5
+ var _chunkX2MMIBYWjs = require('./chunk-X2MMIBYW.js');
6
6
  require('./chunk-RGHTNZQ6.js');
7
7
  require('./chunk-Z4BLTVTB.js');
8
8
 
9
9
 
10
10
 
11
11
 
12
- exports.BlockaidResultType = _chunkBIUBOZW5js.BlockaidResultType; exports.NftDetectionController = _chunkBIUBOZW5js.NftDetectionController; exports.default = _chunkBIUBOZW5js.NftDetectionController_default;
12
+ exports.BlockaidResultType = _chunkX2MMIBYWjs.BlockaidResultType; exports.NftDetectionController = _chunkX2MMIBYWjs.NftDetectionController; exports.default = _chunkX2MMIBYWjs.NftDetectionController_default;
13
13
  //# sourceMappingURL=NftDetectionController.js.map
@@ -2,7 +2,7 @@ import {
2
2
  BlockaidResultType,
3
3
  NftDetectionController,
4
4
  NftDetectionController_default
5
- } from "./chunk-2IFE6FHM.mjs";
5
+ } from "./chunk-ASFD56OL.mjs";
6
6
  import "./chunk-CP3HC7AQ.mjs";
7
7
  import "./chunk-XUI43LEZ.mjs";
8
8
  export {
@@ -2,11 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkWNDGC3UZjs = require('./chunk-WNDGC3UZ.js');
5
+ var _chunkLD4GC7ORjs = require('./chunk-LD4GC7OR.js');
6
6
  require('./chunk-Z4BLTVTB.js');
7
7
 
8
8
 
9
9
 
10
10
 
11
- exports.TokenBalancesController = _chunkWNDGC3UZjs.TokenBalancesController; exports.default = _chunkWNDGC3UZjs.TokenBalancesController_default; exports.getDefaultTokenBalancesState = _chunkWNDGC3UZjs.getDefaultTokenBalancesState;
11
+ exports.TokenBalancesController = _chunkLD4GC7ORjs.TokenBalancesController; exports.default = _chunkLD4GC7ORjs.TokenBalancesController_default; exports.getDefaultTokenBalancesState = _chunkLD4GC7ORjs.getDefaultTokenBalancesState;
12
12
  //# sourceMappingURL=TokenBalancesController.js.map
@@ -2,7 +2,7 @@ import {
2
2
  TokenBalancesController,
3
3
  TokenBalancesController_default,
4
4
  getDefaultTokenBalancesState
5
- } from "./chunk-6AID3HJG.mjs";
5
+ } from "./chunk-4LY47RPI.mjs";
6
6
  import "./chunk-XUI43LEZ.mjs";
7
7
  export {
8
8
  TokenBalancesController,
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkOPYNW5AWjs = require('./chunk-OPYNW5AW.js');
7
+ var _chunkI53XGBU3js = require('./chunk-I53XGBU3.js');
8
8
  require('./chunk-LS6R3HQL.js');
9
9
  require('./chunk-Z4BLTVTB.js');
10
10
 
@@ -13,5 +13,5 @@ require('./chunk-Z4BLTVTB.js');
13
13
 
14
14
 
15
15
 
16
- exports.STATIC_MAINNET_TOKEN_LIST = _chunkOPYNW5AWjs.STATIC_MAINNET_TOKEN_LIST; exports.TokenDetectionController = _chunkOPYNW5AWjs.TokenDetectionController; exports.controllerName = _chunkOPYNW5AWjs.controllerName; exports.default = _chunkOPYNW5AWjs.TokenDetectionController_default; exports.isEqualCaseInsensitive = _chunkOPYNW5AWjs.isEqualCaseInsensitive;
16
+ exports.STATIC_MAINNET_TOKEN_LIST = _chunkI53XGBU3js.STATIC_MAINNET_TOKEN_LIST; exports.TokenDetectionController = _chunkI53XGBU3js.TokenDetectionController; exports.controllerName = _chunkI53XGBU3js.controllerName; exports.default = _chunkI53XGBU3js.TokenDetectionController_default; exports.isEqualCaseInsensitive = _chunkI53XGBU3js.isEqualCaseInsensitive;
17
17
  //# sourceMappingURL=TokenDetectionController.js.map
@@ -4,7 +4,7 @@ import {
4
4
  TokenDetectionController_default,
5
5
  controllerName,
6
6
  isEqualCaseInsensitive
7
- } from "./chunk-2MMZPHA6.mjs";
7
+ } from "./chunk-D3PCUDTX.mjs";
8
8
  import "./chunk-X5PLVMOQ.mjs";
9
9
  import "./chunk-XUI43LEZ.mjs";
10
10
  export {
@@ -2,13 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkDEQZ35QEjs = require('./chunk-DEQZ35QE.js');
6
- require('./chunk-OHSQRYVL.js');
5
+ var _chunkU36OEBF2js = require('./chunk-U36OEBF2.js');
6
+ require('./chunk-OKEA7NPV.js');
7
7
  require('./chunk-LS6R3HQL.js');
8
8
  require('./chunk-Z4BLTVTB.js');
9
9
 
10
10
 
11
11
 
12
12
 
13
- exports.TokenListController = _chunkDEQZ35QEjs.TokenListController; exports.default = _chunkDEQZ35QEjs.TokenListController_default; exports.getDefaultTokenListState = _chunkDEQZ35QEjs.getDefaultTokenListState;
13
+ exports.TokenListController = _chunkU36OEBF2js.TokenListController; exports.default = _chunkU36OEBF2js.TokenListController_default; exports.getDefaultTokenListState = _chunkU36OEBF2js.getDefaultTokenListState;
14
14
  //# sourceMappingURL=TokenListController.js.map
@@ -2,8 +2,8 @@ import {
2
2
  TokenListController,
3
3
  TokenListController_default,
4
4
  getDefaultTokenListState
5
- } from "./chunk-RUE635TV.mjs";
6
- import "./chunk-NXGX7LZJ.mjs";
5
+ } from "./chunk-C64L6MMU.mjs";
6
+ import "./chunk-S6KASB6I.mjs";
7
7
  import "./chunk-X5PLVMOQ.mjs";
8
8
  import "./chunk-XUI43LEZ.mjs";
9
9
  export {
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunk3YTCRJI6js = require('./chunk-3YTCRJI6.js');
4
+ var _chunkIOQX3VTDjs = require('./chunk-IOQX3VTD.js');
5
5
  require('./chunk-DYH5P3VY.js');
6
6
  require('./chunk-LS6R3HQL.js');
7
7
  require('./chunk-Z4BLTVTB.js');
8
8
 
9
9
 
10
10
 
11
- exports.TokenRatesController = _chunk3YTCRJI6js.TokenRatesController; exports.default = _chunk3YTCRJI6js.TokenRatesController_default;
11
+ exports.TokenRatesController = _chunkIOQX3VTDjs.TokenRatesController; exports.default = _chunkIOQX3VTDjs.TokenRatesController_default;
12
12
  //# sourceMappingURL=TokenRatesController.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TokenRatesController,
3
3
  TokenRatesController_default
4
- } from "./chunk-ZWIFMJBZ.mjs";
4
+ } from "./chunk-OWTCG2N3.mjs";
5
5
  import "./chunk-PWZE6KJV.mjs";
6
6
  import "./chunk-X5PLVMOQ.mjs";
7
7
  import "./chunk-XUI43LEZ.mjs";
@@ -2,15 +2,15 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkFWKJDOD5js = require('./chunk-FWKJDOD5.js');
5
+ var _chunkAVPUXAZYjs = require('./chunk-AVPUXAZY.js');
6
6
  require('./chunk-3ZHN4GFT.js');
7
7
  require('./chunk-BO2WZDUM.js');
8
- require('./chunk-OHSQRYVL.js');
8
+ require('./chunk-OKEA7NPV.js');
9
9
  require('./chunk-LS6R3HQL.js');
10
10
  require('./chunk-Z4BLTVTB.js');
11
11
 
12
12
 
13
13
 
14
14
 
15
- exports.TokensController = _chunkFWKJDOD5js.TokensController; exports.default = _chunkFWKJDOD5js.TokensController_default; exports.getDefaultTokensState = _chunkFWKJDOD5js.getDefaultTokensState;
15
+ exports.TokensController = _chunkAVPUXAZYjs.TokensController; exports.default = _chunkAVPUXAZYjs.TokensController_default; exports.getDefaultTokensState = _chunkAVPUXAZYjs.getDefaultTokensState;
16
16
  //# sourceMappingURL=TokensController.js.map
@@ -2,10 +2,10 @@ import {
2
2
  TokensController,
3
3
  TokensController_default,
4
4
  getDefaultTokensState
5
- } from "./chunk-NRWTWDPT.mjs";
5
+ } from "./chunk-MDHJNCTR.mjs";
6
6
  import "./chunk-S7UA2DU7.mjs";
7
7
  import "./chunk-LLYYJY7H.mjs";
8
- import "./chunk-NXGX7LZJ.mjs";
8
+ import "./chunk-S6KASB6I.mjs";
9
9
  import "./chunk-X5PLVMOQ.mjs";
10
10
  import "./chunk-XUI43LEZ.mjs";
11
11
  export {
@@ -9,7 +9,6 @@ import {
9
9
  BaseController
10
10
  } from "@metamask/base-controller";
11
11
  import { safelyExecute, toHex } from "@metamask/controller-utils";
12
- import { isEvmAccountType } from "@metamask/keyring-api";
13
12
  var DEFAULT_INTERVAL = 18e4;
14
13
  var controllerName = "TokenBalancesController";
15
14
  var metadata = {
@@ -104,18 +103,15 @@ var TokenBalancesController = class extends BaseController {
104
103
  if (__privateGet(this, _disabled)) {
105
104
  return;
106
105
  }
107
- const selectedInternalAccount = this.messagingSystem.call(
108
- "AccountsController:getSelectedAccount"
109
- );
110
- if (!isEvmAccountType(selectedInternalAccount.type)) {
111
- return;
112
- }
113
106
  const newContractBalances = {};
114
107
  for (const token of __privateGet(this, _tokens)) {
115
108
  const { address } = token;
109
+ const { selectedAddress } = this.messagingSystem.call(
110
+ "PreferencesController:getState"
111
+ );
116
112
  try {
117
113
  newContractBalances[address] = toHex(
118
- await __privateGet(this, _getERC20BalanceOf).call(this, address, selectedInternalAccount.address)
114
+ await __privateGet(this, _getERC20BalanceOf).call(this, address, selectedAddress)
119
115
  );
120
116
  token.balanceError = null;
121
117
  } catch (error) {
@@ -140,4 +136,4 @@ export {
140
136
  TokenBalancesController,
141
137
  TokenBalancesController_default
142
138
  };
143
- //# sourceMappingURL=chunk-6AID3HJG.mjs.map
139
+ //# sourceMappingURL=chunk-4LY47RPI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/TokenBalancesController.ts"],"sourcesContent":["import {\n type RestrictedControllerMessenger,\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n BaseController,\n} from '@metamask/base-controller';\nimport { safelyExecute, toHex } from '@metamask/controller-utils';\nimport type { PreferencesControllerGetStateAction } from '@metamask/preferences-controller';\n\nimport type { AssetsContractController } from './AssetsContractController';\nimport type { Token } from './TokenRatesController';\nimport type { TokensControllerStateChangeEvent } from './TokensController';\n\nconst DEFAULT_INTERVAL = 180000;\n\nconst controllerName = 'TokenBalancesController';\n\nconst metadata = {\n contractBalances: { persist: true, anonymous: false },\n};\n\n/**\n * Token balances controller options\n * @property interval - Polling interval used to fetch new token balances.\n * @property tokens - List of tokens to track balances for.\n * @property disabled - If set to true, all tracked tokens contract balances updates are blocked.\n * @property getERC20BalanceOf - Gets the balance of the given account at the given contract address.\n */\ntype TokenBalancesControllerOptions = {\n interval?: number;\n tokens?: Token[];\n disabled?: boolean;\n getERC20BalanceOf: AssetsContractController['getERC20BalanceOf'];\n messenger: TokenBalancesControllerMessenger;\n state?: Partial<TokenBalancesControllerState>;\n};\n\n/**\n * Represents a mapping of hash token contract addresses to their balances.\n */\ntype ContractBalances = Record<string, string>;\n\n/**\n * Token balances controller state\n * @property contractBalances - Hash of token contract addresses to balances\n */\nexport type TokenBalancesControllerState = {\n contractBalances: ContractBalances;\n};\n\nexport type TokenBalancesControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n TokenBalancesControllerState\n>;\n\nexport type TokenBalancesControllerActions =\n TokenBalancesControllerGetStateAction;\n\nexport type AllowedActions = PreferencesControllerGetStateAction;\n\nexport type TokenBalancesControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n TokenBalancesControllerState\n >;\n\nexport type TokenBalancesControllerEvents =\n TokenBalancesControllerStateChangeEvent;\n\nexport type AllowedEvents = TokensControllerStateChangeEvent;\n\nexport type TokenBalancesControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n TokenBalancesControllerActions | AllowedActions,\n TokenBalancesControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Get the default TokenBalancesController state.\n *\n * @returns The default TokenBalancesController state.\n */\nexport function getDefaultTokenBalancesState(): TokenBalancesControllerState {\n return {\n contractBalances: {},\n };\n}\n\n/**\n * Controller that passively polls on a set interval token balances\n * for tokens stored in the TokensController\n */\nexport class TokenBalancesController extends BaseController<\n typeof controllerName,\n TokenBalancesControllerState,\n TokenBalancesControllerMessenger\n> {\n #handle?: ReturnType<typeof setTimeout>;\n\n #getERC20BalanceOf: AssetsContractController['getERC20BalanceOf'];\n\n #interval: number;\n\n #tokens: Token[];\n\n #disabled: boolean;\n\n /**\n * Construct a Token Balances Controller.\n *\n * @param options - The controller options.\n * @param options.interval - Polling interval used to fetch new token balances.\n * @param options.tokens - List of tokens to track balances for.\n * @param options.disabled - If set to true, all tracked tokens contract balances updates are blocked.\n * @param options.getERC20BalanceOf - Gets the balance of the given account at the given contract address.\n * @param options.state - Initial state to set on this controller.\n * @param options.messenger - The controller restricted messenger.\n */\n constructor({\n interval = DEFAULT_INTERVAL,\n tokens = [],\n disabled = false,\n getERC20BalanceOf,\n messenger,\n state = {},\n }: TokenBalancesControllerOptions) {\n super({\n name: controllerName,\n metadata,\n messenger,\n state: {\n ...getDefaultTokenBalancesState(),\n ...state,\n },\n });\n\n this.#disabled = disabled;\n this.#interval = interval;\n this.#tokens = tokens;\n\n this.messagingSystem.subscribe(\n 'TokensController:stateChange',\n ({ tokens: newTokens, detectedTokens }) => {\n this.#tokens = [...newTokens, ...detectedTokens];\n this.updateBalances();\n },\n );\n\n this.#getERC20BalanceOf = getERC20BalanceOf;\n\n this.poll();\n }\n\n /**\n * Allows controller to update tracked tokens contract balances.\n */\n enable() {\n this.#disabled = false;\n }\n\n /**\n * Blocks controller from updating tracked tokens contract balances.\n */\n disable() {\n this.#disabled = true;\n }\n\n /**\n * Starts a new polling interval.\n *\n * @param interval - Polling interval used to fetch new token balances.\n */\n async poll(interval?: number): Promise<void> {\n if (interval) {\n this.#interval = interval;\n }\n\n if (this.#handle) {\n clearTimeout(this.#handle);\n }\n\n await safelyExecute(() => this.updateBalances());\n\n this.#handle = setTimeout(() => {\n this.poll(this.#interval);\n }, this.#interval);\n }\n\n /**\n * Updates balances for all tokens.\n */\n async updateBalances() {\n if (this.#disabled) {\n return;\n }\n\n const newContractBalances: ContractBalances = {};\n for (const token of this.#tokens) {\n const { address } = token;\n const { selectedAddress } = this.messagingSystem.call(\n 'PreferencesController:getState',\n );\n try {\n newContractBalances[address] = toHex(\n await this.#getERC20BalanceOf(address, selectedAddress),\n );\n token.balanceError = null;\n } catch (error) {\n newContractBalances[address] = toHex(0);\n token.balanceError = error;\n }\n }\n\n this.update((state) => {\n state.contractBalances = newContractBalances;\n });\n }\n}\n\nexport default TokenBalancesController;\n"],"mappings":";;;;;;;AAAA;AAAA,EAIE;AAAA,OACK;AACP,SAAS,eAAe,aAAa;AAOrC,IAAM,mBAAmB;AAEzB,IAAM,iBAAiB;AAEvB,IAAM,WAAW;AAAA,EACf,kBAAkB,EAAE,SAAS,MAAM,WAAW,MAAM;AACtD;AAiEO,SAAS,+BAA6D;AAC3E,SAAO;AAAA,IACL,kBAAkB,CAAC;AAAA,EACrB;AACF;AAxFA;AA8FO,IAAM,0BAAN,cAAsC,eAI3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,QAAQ,CAAC;AAAA,EACX,GAAmC;AACjC,UAAM;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL,GAAG,6BAA6B;AAAA,QAChC,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AArCH;AAEA;AAEA;AAEA;AAEA;AA+BE,uBAAK,WAAY;AACjB,uBAAK,WAAY;AACjB,uBAAK,SAAU;AAEf,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,CAAC,EAAE,QAAQ,WAAW,eAAe,MAAM;AACzC,2BAAK,SAAU,CAAC,GAAG,WAAW,GAAG,cAAc;AAC/C,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAEA,uBAAK,oBAAqB;AAE1B,SAAK,KAAK;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,UAAkC;AAC3C,QAAI,UAAU;AACZ,yBAAK,WAAY;AAAA,IACnB;AAEA,QAAI,mBAAK,UAAS;AAChB,mBAAa,mBAAK,QAAO;AAAA,IAC3B;AAEA,UAAM,cAAc,MAAM,KAAK,eAAe,CAAC;AAE/C,uBAAK,SAAU,WAAW,MAAM;AAC9B,WAAK,KAAK,mBAAK,UAAS;AAAA,IAC1B,GAAG,mBAAK,UAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB;AACrB,QAAI,mBAAK,YAAW;AAClB;AAAA,IACF;AAEA,UAAM,sBAAwC,CAAC;AAC/C,eAAW,SAAS,mBAAK,UAAS;AAChC,YAAM,EAAE,QAAQ,IAAI;AACpB,YAAM,EAAE,gBAAgB,IAAI,KAAK,gBAAgB;AAAA,QAC/C;AAAA,MACF;AACA,UAAI;AACF,4BAAoB,OAAO,IAAI;AAAA,UAC7B,MAAM,mBAAK,oBAAL,WAAwB,SAAS;AAAA,QACzC;AACA,cAAM,eAAe;AAAA,MACvB,SAAS,OAAO;AACd,4BAAoB,OAAO,IAAI,MAAM,CAAC;AACtC,cAAM,eAAe;AAAA,MACvB;AAAA,IACF;AAEA,SAAK,OAAO,CAAC,UAAU;AACrB,YAAM,mBAAmB;AAAA,IAC3B,CAAC;AAAA,EACH;AACF;AAxHE;AAEA;AAEA;AAEA;AAEA;AAkHF,IAAO,kCAAQ;","names":[]}
@@ -5,7 +5,6 @@ import {
5
5
  ChainId,
6
6
  NFT_API_BASE_URL
7
7
  } from "@metamask/controller-utils";
8
- import { isEvmAccountType } from "@metamask/keyring-api";
9
8
  import { StaticIntervalPollingControllerV1 } from "@metamask/polling-controller";
10
9
  var DEFAULT_INTERVAL = 18e4;
11
10
  var BlockaidResultType = /* @__PURE__ */ ((BlockaidResultType2) => {
@@ -24,16 +23,13 @@ var NftDetectionController = class extends StaticIntervalPollingControllerV1 {
24
23
  * @param options.onNftsStateChange - Allows subscribing to assets controller state changes.
25
24
  * @param options.onPreferencesStateChange - Allows subscribing to preferences controller state changes.
26
25
  * @param options.onNetworkStateChange - Allows subscribing to network controller state changes.
27
- * @param options.onSelectedAccountChange - Allows subscribing to the change of account from the accoutns controller.
28
26
  * @param options.getOpenSeaApiKey - Gets the OpenSea API key, if one is set.
29
27
  * @param options.addNft - Add an NFT.
30
28
  * @param options.getNftApi - Gets the URL to fetch an NFT from OpenSea.
31
29
  * @param options.getNftState - Gets the current state of the Assets controller.
32
30
  * @param options.disabled - Represents previous value of useNftDetection. Used to detect changes of useNftDetection. Default value is true.
33
- * @param options.selectedAccountId - Represents current selected account id.
31
+ * @param options.selectedAddress - Represents current selected address.
34
32
  * @param options.getNetworkClientById - Gets the network client by ID, from the NetworkController.
35
- * @param options.getInternalAccount - Gets the internal account from the AccountsController.
36
- * @param options.getSelectedAccount - Gets the selected account from the AccountsController.
37
33
  * @param config - Initial options used to configure this controller.
38
34
  * @param state - Initial state to set on this controller.
39
35
  */
@@ -42,15 +38,12 @@ var NftDetectionController = class extends StaticIntervalPollingControllerV1 {
42
38
  getNetworkClientById,
43
39
  onPreferencesStateChange,
44
40
  onNetworkStateChange,
45
- onSelectedAccountChange,
46
41
  getOpenSeaApiKey,
47
42
  addNft,
48
43
  getNftApi,
49
44
  getNftState,
50
- getInternalAccount,
51
- getSelectedAccount,
52
45
  disabled: initialDisabled,
53
- selectedAccountId: initialSelectedAccountId
46
+ selectedAddress: initialSelectedAddress
54
47
  }, config, state) {
55
48
  super(config, state);
56
49
  /**
@@ -69,31 +62,16 @@ var NftDetectionController = class extends StaticIntervalPollingControllerV1 {
69
62
  this.defaultConfig = {
70
63
  interval: DEFAULT_INTERVAL,
71
64
  chainId: initialChainId,
72
- selectedAccountId: initialSelectedAccountId,
65
+ selectedAddress: initialSelectedAddress,
73
66
  disabled: initialDisabled
74
67
  };
75
68
  this.initialize();
76
69
  this.getNftState = getNftState;
77
70
  this.getNetworkClientById = getNetworkClientById;
78
- this.getInternalAccount = getInternalAccount;
79
- this.getSelectedAccount = getSelectedAccount;
80
- onSelectedAccountChange((internalAccount) => {
81
- this.configure({ selectedAccountId: internalAccount.id });
82
- const { selectedAccountId, disabled } = this.config;
83
- if (!disabled || selectedAccountId !== internalAccount.id) {
84
- this.start();
85
- } else {
86
- this.stop();
87
- }
88
- });
89
- onPreferencesStateChange(({ useNftDetection }) => {
90
- const { selectedAccountId: previousSelectedAccountId, disabled } = this.config;
91
- const newSelectedAccount = this.getSelectedAccount();
92
- if (newSelectedAccount.id !== previousSelectedAccountId || !useNftDetection !== disabled) {
93
- this.configure({
94
- disabled: !useNftDetection,
95
- selectedAccountId: newSelectedAccount.id
96
- });
71
+ onPreferencesStateChange(({ selectedAddress, useNftDetection }) => {
72
+ const { selectedAddress: previouslySelectedAddress, disabled } = this.config;
73
+ if (selectedAddress !== previouslySelectedAddress || !useNftDetection !== disabled) {
74
+ this.configure({ selectedAddress, disabled: !useNftDetection });
97
75
  if (useNftDetection) {
98
76
  this.start();
99
77
  } else {
@@ -188,13 +166,7 @@ var NftDetectionController = class extends StaticIntervalPollingControllerV1 {
188
166
  async detectNfts({
189
167
  networkClientId,
190
168
  userAddress
191
- } = {}) {
192
- const { selectedAccountId } = this.config;
193
- const selectedInternalAccount = this.getInternalAccount(selectedAccountId);
194
- if (!isEvmAccountType(selectedInternalAccount.type)) {
195
- return;
196
- }
197
- userAddress = userAddress || selectedInternalAccount.address;
169
+ } = { userAddress: this.config.selectedAddress }) {
198
170
  if (!this.isMainnet() || this.disabled) {
199
171
  return;
200
172
  }
@@ -260,4 +232,4 @@ export {
260
232
  NftDetectionController,
261
233
  NftDetectionController_default
262
234
  };
263
- //# sourceMappingURL=chunk-2IFE6FHM.mjs.map
235
+ //# sourceMappingURL=chunk-ASFD56OL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/NftDetectionController.ts"],"sourcesContent":["import type { BaseConfig, BaseState } from '@metamask/base-controller';\nimport {\n fetchWithErrorHandling,\n toChecksumHexAddress,\n ChainId,\n NFT_API_BASE_URL,\n} from '@metamask/controller-utils';\nimport type {\n NetworkClientId,\n NetworkController,\n NetworkState,\n NetworkClient,\n} from '@metamask/network-controller';\nimport { StaticIntervalPollingControllerV1 } from '@metamask/polling-controller';\nimport type { PreferencesState } from '@metamask/preferences-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { Source } from './constants';\nimport {\n type NftController,\n type NftState,\n type NftMetadata,\n} from './NftController';\n\nconst DEFAULT_INTERVAL = 180000;\n\n/**\n * @type ApiNft\n *\n * NFT object coming from OpenSea api\n * @property token_id - The NFT identifier\n * @property num_sales - Number of sales\n * @property background_color - The background color to be displayed with the item\n * @property image_url - URI of an image associated with this NFT\n * @property image_preview_url - URI of a smaller image associated with this NFT\n * @property image_thumbnail_url - URI of a thumbnail image associated with this NFT\n * @property image_original_url - URI of the original image associated with this NFT\n * @property animation_url - URI of a animation associated with this NFT\n * @property animation_original_url - URI of the original animation associated with this NFT\n * @property name - The NFT name\n * @property description - The NFT description\n * @property external_link - External link containing additional information\n * @property assetContract - The NFT contract information object\n * @property creator - The NFT owner information object\n * @property lastSale - When this item was last sold\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface ApiNft {\n token_id: string;\n num_sales: number | null;\n background_color: string | null;\n image_url: string | null;\n image_preview_url: string | null;\n image_thumbnail_url: string | null;\n image_original_url: string | null;\n animation_url: string | null;\n animation_original_url: string | null;\n name: string | null;\n description: string | null;\n external_link: string | null;\n asset_contract: ApiNftContract;\n creator: ApiNftCreator;\n last_sale: ApiNftLastSale | null;\n}\n\n/**\n * @type ApiNftContract\n *\n * NFT contract object coming from OpenSea api\n * @property address - Address of the NFT contract\n * @property asset_contract_type - The NFT type, it could be `semi-fungible` or `non-fungible`\n * @property created_date - Creation date\n * @property collection - Object containing the contract name and URI of an image associated\n * @property schema_name - The schema followed by the contract, it could be `ERC721` or `ERC1155`\n * @property symbol - The NFT contract symbol\n * @property total_supply - Total supply of NFTs\n * @property description - The NFT contract description\n * @property external_link - External link containing additional information\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface ApiNftContract {\n address: string;\n asset_contract_type: string | null;\n created_date: string | null;\n schema_name: string | null;\n symbol: string | null;\n total_supply: string | null;\n description: string | null;\n external_link: string | null;\n collection: {\n name: string | null;\n image_url?: string | null;\n tokenCount?: string | null;\n };\n}\n\n/**\n * @type ApiNftLastSale\n *\n * NFT sale object coming from OpenSea api\n * @property event_timestamp - Object containing a `username`\n * @property total_price - URI of NFT image associated with this owner\n * @property transaction - Object containing transaction_hash and block_hash\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface ApiNftLastSale {\n event_timestamp: string;\n total_price: string;\n transaction: { transaction_hash: string; block_hash: string };\n}\n\n/**\n * @type ApiNftCreator\n *\n * NFT creator object coming from OpenSea api\n * @property user - Object containing a `username`\n * @property profile_img_url - URI of NFT image associated with this owner\n * @property address - The owner address\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface ApiNftCreator {\n user: { username: string };\n profile_img_url: string;\n address: string;\n}\n\n/**\n * @type NftDetectionConfig\n *\n * NftDetection configuration\n * @property interval - Polling interval used to fetch new token rates\n * @property chainId - Current chain ID\n * @property selectedAddress - Vault selected address\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface NftDetectionConfig extends BaseConfig {\n interval: number;\n chainId: Hex;\n selectedAddress: string;\n}\n\nexport type ReservoirResponse = {\n tokens: TokensResponse[];\n continuation?: string;\n};\n\nexport type TokensResponse = {\n token: TokenResponse;\n ownership: Ownership;\n market?: Market;\n blockaidResult?: Blockaid;\n};\n\nexport enum BlockaidResultType {\n Benign = 'Benign',\n Spam = 'Spam',\n Warning = 'Warning',\n Malicious = 'Malicious',\n}\n\nexport type Blockaid = {\n contract: string;\n chainId: number;\n result_type: BlockaidResultType;\n malicious_score: string;\n attack_types: object;\n};\n\nexport type Market = {\n floorAsk?: FloorAsk;\n topBid?: TopBid;\n};\n\nexport type TokenResponse = {\n chainId: number;\n contract: string;\n tokenId: string;\n kind?: string;\n name?: string;\n image?: string;\n imageSmall?: string;\n imageLarge?: string;\n metadata?: Metadata;\n description?: string;\n supply?: number;\n remainingSupply?: number;\n rarityScore?: number;\n rarity?: number;\n rarityRank?: number;\n media?: string;\n isFlagged?: boolean;\n isSpam?: boolean;\n isNsfw?: boolean;\n metadataDisabled?: boolean;\n lastFlagUpdate?: string;\n lastFlagChange?: string;\n collection?: Collection;\n lastSale?: LastSale;\n topBid?: TopBid;\n lastAppraisalValue?: number;\n attributes?: Attributes[];\n};\n\nexport type TopBid = {\n id?: string;\n price?: Price;\n source?: {\n id?: string;\n domain?: string;\n name?: string;\n icon?: string;\n url?: string;\n };\n};\n\nexport type LastSale = {\n saleId?: string;\n token?: {\n contract?: string;\n tokenId?: string;\n name?: string;\n image?: string;\n collection?: {\n id?: string;\n name?: string;\n };\n };\n orderSource?: string;\n orderSide?: 'ask' | 'bid';\n orderKind?: string;\n orderId?: string;\n from?: string;\n to?: string;\n amount?: string;\n fillSource?: string;\n block?: number;\n txHash?: string;\n logIndex?: number;\n batchIndex?: number;\n timestamp?: number;\n price?: Price;\n washTradingScore?: number;\n royaltyFeeBps?: number;\n marketplaceFeeBps?: number;\n paidFullRoyalty?: boolean;\n feeBreakdown?: FeeBreakdown[];\n isDeleted?: boolean;\n createdAt?: string;\n updatedAt?: string;\n};\n\nexport type FeeBreakdown = {\n kind?: string;\n bps?: number;\n recipient?: string;\n source?: string;\n rawAmount?: string;\n};\n\nexport type Attributes = {\n key?: string;\n kind?: string;\n value: string;\n tokenCount?: number;\n onSaleCount?: number;\n floorAskPrice?: Price | null;\n topBidValue?: number | null;\n createdAt?: string;\n};\n\nexport type Collection = {\n id?: string;\n name?: string;\n slug?: string;\n symbol?: string;\n imageUrl?: string;\n image?: string;\n isSpam?: boolean;\n isNsfw?: boolean;\n creator?: string;\n tokenCount?: string;\n metadataDisabled?: boolean;\n openseaVerificationStatus?: string;\n floorAskPrice?: Price;\n royaltiesBps?: number;\n royalties?: Royalties[];\n};\n\nexport type Royalties = {\n bps?: number;\n recipient?: string;\n};\n\nexport type Ownership = {\n tokenCount?: string;\n onSaleCount?: string;\n floorAsk?: FloorAsk;\n acquiredAt?: string;\n};\n\nexport type FloorAsk = {\n id?: string;\n price?: Price;\n maker?: string;\n kind?: string;\n validFrom?: number;\n validUntil?: number;\n source?: Source;\n rawData?: Metadata;\n isNativeOffChainCancellable?: boolean;\n};\n\nexport type Price = {\n currency?: {\n contract?: string;\n name?: string;\n symbol?: string;\n decimals?: number;\n chainId?: number;\n };\n amount?: {\n raw?: string;\n decimal?: number;\n usd?: number;\n native?: number;\n };\n netAmount?: {\n raw?: string;\n decimal?: number;\n usd?: number;\n native?: number;\n };\n};\n\nexport type Metadata = {\n imageOriginal?: string;\n tokenURI?: string;\n};\n\n/**\n * Controller that passively polls on a set interval for NFT auto detection\n */\nexport class NftDetectionController extends StaticIntervalPollingControllerV1<\n NftDetectionConfig,\n BaseState\n> {\n private intervalId?: ReturnType<typeof setTimeout>;\n\n private getOwnerNftApi({\n address,\n next,\n }: {\n address: string;\n next?: string;\n }) {\n return `${NFT_API_BASE_URL}/users/${address}/tokens?chainIds=1&limit=50&includeTopBid=true&continuation=${\n next ?? ''\n }`;\n }\n\n private async getOwnerNfts(address: string) {\n let nftApiResponse: ReservoirResponse;\n let nfts: TokensResponse[] = [];\n let next;\n\n do {\n nftApiResponse = await fetchWithErrorHandling({\n url: this.getOwnerNftApi({ address, next }),\n options: {\n headers: {\n Version: '1',\n },\n },\n timeout: 15000,\n });\n\n if (!nftApiResponse) {\n return nfts;\n }\n\n const newNfts = nftApiResponse.tokens.filter(\n (elm) =>\n elm.token.isSpam === false &&\n (elm.blockaidResult?.result_type\n ? elm.blockaidResult?.result_type === BlockaidResultType.Benign\n : true),\n );\n\n nfts = [...nfts, ...newNfts];\n } while ((next = nftApiResponse.continuation));\n\n return nfts;\n }\n\n /**\n * Name of this controller used during composition\n */\n override name = 'NftDetectionController';\n\n private readonly getOpenSeaApiKey: () => string | undefined;\n\n private readonly addNft: NftController['addNft'];\n\n private readonly getNftApi: NftController['getNftApi'];\n\n private readonly getNftState: () => NftState;\n\n private readonly getNetworkClientById: NetworkController['getNetworkClientById'];\n\n /**\n * Creates an NftDetectionController instance.\n *\n * @param options - The controller options.\n * @param options.chainId - The chain ID of the current network.\n * @param options.onNftsStateChange - Allows subscribing to assets controller state changes.\n * @param options.onPreferencesStateChange - Allows subscribing to preferences controller state changes.\n * @param options.onNetworkStateChange - Allows subscribing to network controller state changes.\n * @param options.getOpenSeaApiKey - Gets the OpenSea API key, if one is set.\n * @param options.addNft - Add an NFT.\n * @param options.getNftApi - Gets the URL to fetch an NFT from OpenSea.\n * @param options.getNftState - Gets the current state of the Assets controller.\n * @param options.disabled - Represents previous value of useNftDetection. Used to detect changes of useNftDetection. Default value is true.\n * @param options.selectedAddress - Represents current selected address.\n * @param options.getNetworkClientById - Gets the network client by ID, from the NetworkController.\n * @param config - Initial options used to configure this controller.\n * @param state - Initial state to set on this controller.\n */\n constructor(\n {\n chainId: initialChainId,\n getNetworkClientById,\n onPreferencesStateChange,\n onNetworkStateChange,\n getOpenSeaApiKey,\n addNft,\n getNftApi,\n getNftState,\n disabled: initialDisabled,\n selectedAddress: initialSelectedAddress,\n }: {\n chainId: Hex;\n getNetworkClientById: NetworkController['getNetworkClientById'];\n onNftsStateChange: (listener: (nftsState: NftState) => void) => void;\n onPreferencesStateChange: (\n listener: (preferencesState: PreferencesState) => void,\n ) => void;\n onNetworkStateChange: (\n listener: (networkState: NetworkState) => void,\n ) => void;\n getOpenSeaApiKey: () => string | undefined;\n addNft: NftController['addNft'];\n getNftApi: NftController['getNftApi'];\n getNftState: () => NftState;\n disabled: boolean;\n selectedAddress: string;\n },\n config?: Partial<NftDetectionConfig>,\n state?: Partial<BaseState>,\n ) {\n super(config, state);\n this.defaultConfig = {\n interval: DEFAULT_INTERVAL,\n chainId: initialChainId,\n selectedAddress: initialSelectedAddress,\n disabled: initialDisabled,\n };\n this.initialize();\n this.getNftState = getNftState;\n this.getNetworkClientById = getNetworkClientById;\n onPreferencesStateChange(({ selectedAddress, useNftDetection }) => {\n const { selectedAddress: previouslySelectedAddress, disabled } =\n this.config;\n\n if (\n selectedAddress !== previouslySelectedAddress ||\n !useNftDetection !== disabled\n ) {\n this.configure({ selectedAddress, disabled: !useNftDetection });\n if (useNftDetection) {\n this.start();\n } else {\n this.stop();\n }\n }\n });\n\n onNetworkStateChange(({ providerConfig }) => {\n this.configure({\n chainId: providerConfig.chainId,\n });\n });\n this.getOpenSeaApiKey = getOpenSeaApiKey;\n this.addNft = addNft;\n this.getNftApi = getNftApi;\n this.setIntervalLength(this.config.interval);\n }\n\n async _executePoll(\n networkClientId: string,\n options: { address: string },\n ): Promise<void> {\n await this.detectNfts({ networkClientId, userAddress: options.address });\n }\n\n /**\n * Start polling for the currency rate.\n */\n async start() {\n if (!this.isMainnet() || this.disabled) {\n return;\n }\n\n await this.startPolling();\n }\n\n /**\n * Stop polling for the currency rate.\n */\n stop() {\n this.stopPolling();\n }\n\n private stopPolling() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n }\n\n /**\n * Starts a new polling interval.\n *\n * @param interval - An interval on which to poll.\n */\n private async startPolling(interval?: number): Promise<void> {\n interval && this.configure({ interval }, false, false);\n this.stopPolling();\n await this.detectNfts();\n this.intervalId = setInterval(async () => {\n await this.detectNfts();\n }, this.config.interval);\n }\n\n /**\n * Checks whether network is mainnet or not.\n *\n * @returns Whether current network is mainnet.\n */\n isMainnet = (): boolean => this.config.chainId === ChainId.mainnet;\n\n isMainnetByNetworkClientId = (networkClient: NetworkClient): boolean => {\n return networkClient.configuration.chainId === ChainId.mainnet;\n };\n\n /**\n * Triggers asset ERC721 token auto detection on mainnet. Any newly detected NFTs are\n * added.\n *\n * @param options - Options bag.\n * @param options.networkClientId - The network client ID to detect NFTs on.\n * @param options.userAddress - The address to detect NFTs for.\n */\n async detectNfts(\n {\n networkClientId,\n userAddress,\n }: {\n networkClientId?: NetworkClientId;\n userAddress: string;\n } = { userAddress: this.config.selectedAddress },\n ) {\n /* istanbul ignore if */\n if (!this.isMainnet() || this.disabled) {\n return;\n }\n /* istanbul ignore else */\n if (!userAddress) {\n return;\n }\n\n const apiNfts = await this.getOwnerNfts(userAddress);\n const addNftPromises = apiNfts.map(async (nft) => {\n const {\n tokenId: token_id,\n contract,\n kind,\n image: image_url,\n imageSmall: image_thumbnail_url,\n metadata: { imageOriginal: image_original_url } = {},\n name,\n description,\n attributes,\n topBid,\n lastSale,\n rarityRank,\n rarityScore,\n collection,\n } = nft.token;\n\n let ignored;\n /* istanbul ignore else */\n const { ignoredNfts } = this.getNftState();\n if (ignoredNfts.length) {\n ignored = ignoredNfts.find((c) => {\n /* istanbul ignore next */\n return (\n c.address === toChecksumHexAddress(contract) &&\n c.tokenId === token_id\n );\n });\n }\n\n /* istanbul ignore else */\n if (!ignored) {\n /* istanbul ignore next */\n const nftMetadata: NftMetadata = Object.assign(\n {},\n { name },\n description && { description },\n image_url && { image: image_url },\n image_thumbnail_url && { imageThumbnail: image_thumbnail_url },\n image_original_url && { imageOriginal: image_original_url },\n kind && { standard: kind.toUpperCase() },\n lastSale && { lastSale },\n attributes && { attributes },\n topBid && { topBid },\n rarityRank && { rarityRank },\n rarityScore && { rarityScore },\n collection && { collection },\n );\n\n await this.addNft(contract, token_id, {\n nftMetadata,\n userAddress,\n source: Source.Detected,\n networkClientId,\n });\n }\n });\n await Promise.all(addNftPromises);\n }\n}\n\nexport default NftDetectionController;\n"],"mappings":"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","names":["BlockaidResultType"]}
@@ -7,7 +7,7 @@ var _chunkBO2WZDUMjs = require('./chunk-BO2WZDUM.js');
7
7
 
8
8
 
9
9
 
10
- var _chunkOHSQRYVLjs = require('./chunk-OHSQRYVL.js');
10
+ var _chunkOKEA7NPVjs = require('./chunk-OKEA7NPV.js');
11
11
 
12
12
 
13
13
 
@@ -29,7 +29,6 @@ var _contractmetadata = require('@metamask/contract-metadata'); var _contractmet
29
29
 
30
30
 
31
31
  var _controllerutils = require('@metamask/controller-utils');
32
- var _keyringapi = require('@metamask/keyring-api');
33
32
  var _metamaskethabis = require('@metamask/metamask-eth-abis');
34
33
  var _rpcerrors = require('@metamask/rpc-errors');
35
34
  var _asyncmutex = require('async-mutex');
@@ -73,7 +72,7 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
73
72
  */
74
73
  this.name = "TokensController";
75
74
  this.defaultConfig = {
76
- selectedAccountId: "",
75
+ selectedAddress: "",
77
76
  chainId: initialChainId,
78
77
  provider: void 0,
79
78
  ...config
@@ -90,18 +89,15 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
90
89
  this.addDetectedTokens.bind(this)
91
90
  );
92
91
  this.messagingSystem.subscribe(
93
- "AccountsController:selectedAccountChange",
94
- (internalAccount) => {
95
- this.configure({ selectedAccountId: internalAccount.id });
96
- if (!_keyringapi.isEvmAccountType.call(void 0, internalAccount.type)) {
97
- return;
98
- }
92
+ "PreferencesController:stateChange",
93
+ ({ selectedAddress }) => {
99
94
  const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state;
100
95
  const { chainId } = this.config;
96
+ this.configure({ selectedAddress });
101
97
  this.update({
102
- tokens: allTokens[chainId]?.[internalAccount.address] ?? [],
103
- ignoredTokens: allIgnoredTokens[chainId]?.[internalAccount.address] ?? [],
104
- detectedTokens: allDetectedTokens[chainId]?.[internalAccount.address] ?? []
98
+ tokens: allTokens[chainId]?.[selectedAddress] ?? [],
99
+ ignoredTokens: allIgnoredTokens[chainId]?.[selectedAddress] ?? [],
100
+ detectedTokens: allDetectedTokens[chainId]?.[selectedAddress] ?? []
105
101
  });
106
102
  }
107
103
  );
@@ -109,22 +105,15 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
109
105
  "NetworkController:networkDidChange",
110
106
  ({ providerConfig }) => {
111
107
  const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state;
112
- const { selectedAccountId } = this.config;
113
- const selectedInternalAccount = this.messagingSystem.call(
114
- "AccountsController:getAccount",
115
- selectedAccountId
116
- );
108
+ const { selectedAddress } = this.config;
117
109
  const { chainId } = providerConfig;
118
110
  this.abortController.abort();
119
111
  this.abortController = new AbortController();
120
112
  this.configure({ chainId });
121
- if (!selectedInternalAccount || !_keyringapi.isEvmAccountType.call(void 0, selectedInternalAccount.type)) {
122
- return;
123
- }
124
113
  this.update({
125
- tokens: allTokens[chainId]?.[selectedInternalAccount.address] || [],
126
- ignoredTokens: allIgnoredTokens[chainId]?.[selectedInternalAccount.address] || [],
127
- detectedTokens: allDetectedTokens[chainId]?.[selectedInternalAccount.address] || []
114
+ tokens: allTokens[chainId]?.[selectedAddress] || [],
115
+ ignoredTokens: allIgnoredTokens[chainId]?.[selectedAddress] || [],
116
+ detectedTokens: allDetectedTokens[chainId]?.[selectedAddress] || []
128
117
  });
129
118
  }
130
119
  );
@@ -146,14 +135,14 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
146
135
  */
147
136
  async fetchTokenMetadata(tokenAddress) {
148
137
  try {
149
- const token = await _chunkOHSQRYVLjs.fetchTokenMetadata.call(void 0,
138
+ const token = await _chunkOKEA7NPVjs.fetchTokenMetadata.call(void 0,
150
139
  this.config.chainId,
151
140
  tokenAddress,
152
141
  this.abortController.signal
153
142
  );
154
143
  return token;
155
144
  } catch (error) {
156
- if (error instanceof Error && error.message.includes(_chunkOHSQRYVLjs.TOKEN_METADATA_NO_SUPPORT_ERROR)) {
145
+ if (error instanceof Error && error.message.includes(_chunkOKEA7NPVjs.TOKEN_METADATA_NO_SUPPORT_ERROR)) {
157
146
  return void 0;
158
147
  }
159
148
  throw error;
@@ -181,7 +170,7 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
181
170
  interactingAddress,
182
171
  networkClientId
183
172
  }) {
184
- const { chainId, selectedAccountId } = this.config;
173
+ const { chainId, selectedAddress } = this.config;
185
174
  const releaseLock = await this.mutex.acquire();
186
175
  const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state;
187
176
  let currentChainId = chainId;
@@ -191,16 +180,8 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
191
180
  networkClientId
192
181
  ).configuration.chainId;
193
182
  }
194
- const internalAccount = this.messagingSystem.call(
195
- "AccountsController:getAccount",
196
- selectedAccountId
197
- );
198
- if (!internalAccount || !_keyringapi.isEvmAccountType.call(void 0, internalAccount.type)) {
199
- releaseLock();
200
- return [];
201
- }
202
- const accountAddress = interactingAddress || internalAccount.address;
203
- const isInteractingWithWalletAccount = accountAddress === internalAccount.address;
183
+ const accountAddress = interactingAddress || selectedAddress;
184
+ const isInteractingWithWalletAccount = accountAddress === selectedAddress;
204
185
  try {
205
186
  address = _controllerutils.toChecksumHexAddress.call(void 0, address);
206
187
  const tokens = allTokens[currentChainId]?.[accountAddress] || [];
@@ -376,16 +357,8 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
376
357
  */
377
358
  async addDetectedTokens(incomingDetectedTokens, detectionDetails) {
378
359
  const releaseLock = await this.mutex.acquire();
379
- const internalAccount = this.messagingSystem.call(
380
- "AccountsController:getAccount",
381
- this.config.selectedAccountId
382
- );
383
- if (!internalAccount || !_keyringapi.isEvmAccountType.call(void 0, internalAccount.type)) {
384
- releaseLock();
385
- return;
386
- }
387
360
  const chainId = detectionDetails?.chainId ?? this.config.chainId;
388
- const accountAddress = detectionDetails?.selectedAddress ?? internalAccount.address;
361
+ const accountAddress = detectionDetails?.selectedAddress ?? this.config.selectedAddress;
389
362
  const { allTokens, allDetectedTokens, allIgnoredTokens } = this.state;
390
363
  let newTokens = [...allTokens?.[chainId]?.[accountAddress] ?? []];
391
364
  let newDetectedTokens = [
@@ -439,17 +412,9 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
439
412
  interactingChainId: chainId
440
413
  }
441
414
  );
442
- const { chainId: currentChain, selectedAccountId: currentAccountId } = this.config;
443
- const currentInternalAccount = this.messagingSystem.call(
444
- "AccountsController:getAccount",
445
- currentAccountId
446
- );
447
- if (!currentInternalAccount || !_keyringapi.isEvmAccountType.call(void 0, currentInternalAccount.type)) {
448
- releaseLock();
449
- return;
450
- }
451
- newTokens = newAllTokens?.[currentChain]?.[currentInternalAccount.address] || [];
452
- newDetectedTokens = newAllDetectedTokens?.[currentChain]?.[currentInternalAccount.address] || [];
415
+ const { chainId: currentChain, selectedAddress: currentAddress } = this.config;
416
+ newTokens = newAllTokens?.[currentChain]?.[currentAddress] || [];
417
+ newDetectedTokens = newAllDetectedTokens?.[currentChain]?.[currentAddress] || [];
453
418
  this.update({
454
419
  tokens: newTokens,
455
420
  allTokens: newAllTokens,
@@ -560,13 +525,6 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
560
525
  if (!_controllerutils.isValidHexAddress.call(void 0, asset.address)) {
561
526
  throw _rpcerrors.rpcErrors.invalidParams(`Invalid address "${asset.address}"`);
562
527
  }
563
- const selectedAccount = this.messagingSystem.call(
564
- "AccountsController:getAccount",
565
- this.config.selectedAccountId
566
- );
567
- if (!selectedAccount || !_keyringapi.isEvmAccountType.call(void 0, selectedAccount.type)) {
568
- throw new Error(`Account is not an EVM account`);
569
- }
570
528
  if (await this._detectIsERC721(asset.address, networkClientId)) {
571
529
  throw _rpcerrors.rpcErrors.invalidParams(
572
530
  `Contract ${asset.address} must match type ${type}, but was detected as ${_controllerutils.ERC721}`
@@ -632,7 +590,7 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
632
590
  id: this._generateRandomId(),
633
591
  time: Date.now(),
634
592
  type,
635
- interactingAddress: interactingAddress || selectedAccount.address
593
+ interactingAddress: interactingAddress || this.config.selectedAddress
636
594
  };
637
595
  await this._requestApproval(suggestedAssetMeta);
638
596
  const { address, symbol, decimals, name, image } = asset;
@@ -667,19 +625,8 @@ var TokensController = class extends _basecontroller.BaseControllerV1 {
667
625
  interactingChainId
668
626
  } = params;
669
627
  const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state;
670
- const { chainId, selectedAccountId } = this.config;
671
- const selectedInternalAccount = this.messagingSystem.call(
672
- "AccountsController:getAccount",
673
- selectedAccountId
674
- );
675
- if (!selectedInternalAccount || !_keyringapi.isEvmAccountType.call(void 0, selectedInternalAccount.type)) {
676
- return {
677
- newAllTokens: allTokens,
678
- newAllIgnoredTokens: allIgnoredTokens,
679
- newAllDetectedTokens: allDetectedTokens
680
- };
681
- }
682
- const userAddressToAddTokens = interactingAddress ?? selectedInternalAccount.address;
628
+ const { chainId, selectedAddress } = this.config;
629
+ const userAddressToAddTokens = interactingAddress ?? selectedAddress;
683
630
  const chainIdToAddTokens = interactingChainId ?? chainId;
684
631
  let newAllTokens = allTokens;
685
632
  if (newTokens?.length || newTokens && allTokens && allTokens[chainIdToAddTokens] && allTokens[chainIdToAddTokens][userAddressToAddTokens]) {
@@ -754,4 +701,4 @@ var TokensController_default = TokensController;
754
701
 
755
702
 
756
703
  exports.getDefaultTokensState = getDefaultTokensState; exports.TokensController = TokensController; exports.TokensController_default = TokensController_default;
757
- //# sourceMappingURL=chunk-FWKJDOD5.js.map
704
+ //# sourceMappingURL=chunk-AVPUXAZY.js.map