@metamask/assets-controller 0.1.0 → 1.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 (132) hide show
  1. package/CHANGELOG.md +31 -3
  2. package/dist/AssetsController-method-action-types.cjs +7 -0
  3. package/dist/AssetsController-method-action-types.cjs.map +1 -0
  4. package/dist/AssetsController-method-action-types.d.cts +78 -0
  5. package/dist/AssetsController-method-action-types.d.cts.map +1 -0
  6. package/dist/AssetsController-method-action-types.d.mts +78 -0
  7. package/dist/AssetsController-method-action-types.d.mts.map +1 -0
  8. package/dist/AssetsController-method-action-types.mjs +6 -0
  9. package/dist/AssetsController-method-action-types.mjs.map +1 -0
  10. package/dist/AssetsController.cjs +273 -247
  11. package/dist/AssetsController.cjs.map +1 -1
  12. package/dist/AssetsController.d.cts +55 -93
  13. package/dist/AssetsController.d.cts.map +1 -1
  14. package/dist/AssetsController.d.mts +55 -93
  15. package/dist/AssetsController.d.mts.map +1 -1
  16. package/dist/AssetsController.mjs +273 -247
  17. package/dist/AssetsController.mjs.map +1 -1
  18. package/dist/data-sources/AbstractDataSource.cjs +8 -0
  19. package/dist/data-sources/AbstractDataSource.cjs.map +1 -1
  20. package/dist/data-sources/AbstractDataSource.d.cts +16 -1
  21. package/dist/data-sources/AbstractDataSource.d.cts.map +1 -1
  22. package/dist/data-sources/AbstractDataSource.d.mts +16 -1
  23. package/dist/data-sources/AbstractDataSource.d.mts.map +1 -1
  24. package/dist/data-sources/AbstractDataSource.mjs +8 -0
  25. package/dist/data-sources/AbstractDataSource.mjs.map +1 -1
  26. package/dist/data-sources/AccountsApiDataSource.cjs +25 -99
  27. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
  28. package/dist/data-sources/AccountsApiDataSource.d.cts +5 -67
  29. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
  30. package/dist/data-sources/AccountsApiDataSource.d.mts +5 -67
  31. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
  32. package/dist/data-sources/AccountsApiDataSource.mjs +24 -97
  33. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
  34. package/dist/data-sources/BackendWebsocketDataSource.cjs +138 -45
  35. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
  36. package/dist/data-sources/BackendWebsocketDataSource.d.cts +19 -66
  37. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
  38. package/dist/data-sources/BackendWebsocketDataSource.d.mts +19 -66
  39. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
  40. package/dist/data-sources/BackendWebsocketDataSource.mjs +138 -45
  41. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
  42. package/dist/data-sources/PriceDataSource.cjs +22 -44
  43. package/dist/data-sources/PriceDataSource.cjs.map +1 -1
  44. package/dist/data-sources/PriceDataSource.d.cts +6 -89
  45. package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
  46. package/dist/data-sources/PriceDataSource.d.mts +6 -89
  47. package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
  48. package/dist/data-sources/PriceDataSource.mjs +22 -44
  49. package/dist/data-sources/PriceDataSource.mjs.map +1 -1
  50. package/dist/data-sources/RpcDataSource.cjs +64 -102
  51. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  52. package/dist/data-sources/RpcDataSource.d.cts +16 -62
  53. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  54. package/dist/data-sources/RpcDataSource.d.mts +16 -62
  55. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  56. package/dist/data-sources/RpcDataSource.mjs +64 -102
  57. package/dist/data-sources/RpcDataSource.mjs.map +1 -1
  58. package/dist/data-sources/SnapDataSource.cjs +32 -30
  59. package/dist/data-sources/SnapDataSource.cjs.map +1 -1
  60. package/dist/data-sources/SnapDataSource.d.cts +7 -44
  61. package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
  62. package/dist/data-sources/SnapDataSource.d.mts +7 -44
  63. package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
  64. package/dist/data-sources/SnapDataSource.mjs +32 -30
  65. package/dist/data-sources/SnapDataSource.mjs.map +1 -1
  66. package/dist/data-sources/TokenDataSource.cjs +3 -16
  67. package/dist/data-sources/TokenDataSource.cjs.map +1 -1
  68. package/dist/data-sources/TokenDataSource.d.cts +2 -25
  69. package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
  70. package/dist/data-sources/TokenDataSource.d.mts +2 -25
  71. package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
  72. package/dist/data-sources/TokenDataSource.mjs +3 -16
  73. package/dist/data-sources/TokenDataSource.mjs.map +1 -1
  74. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +27 -35
  75. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -1
  76. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -1
  77. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -1
  78. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs +27 -35
  79. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -1
  80. package/dist/data-sources/index.cjs +1 -6
  81. package/dist/data-sources/index.cjs.map +1 -1
  82. package/dist/data-sources/index.d.cts +6 -7
  83. package/dist/data-sources/index.d.cts.map +1 -1
  84. package/dist/data-sources/index.d.mts +6 -7
  85. package/dist/data-sources/index.d.mts.map +1 -1
  86. package/dist/data-sources/index.mjs +1 -3
  87. package/dist/data-sources/index.mjs.map +1 -1
  88. package/dist/index.cjs +6 -6
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.d.cts +11 -11
  91. package/dist/index.d.cts.map +1 -1
  92. package/dist/index.d.mts +11 -11
  93. package/dist/index.d.mts.map +1 -1
  94. package/dist/index.mjs +3 -3
  95. package/dist/index.mjs.map +1 -1
  96. package/dist/middlewares/DetectionMiddleware.cjs +4 -27
  97. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -1
  98. package/dist/middlewares/DetectionMiddleware.d.cts +3 -26
  99. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -1
  100. package/dist/middlewares/DetectionMiddleware.d.mts +3 -26
  101. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -1
  102. package/dist/middlewares/DetectionMiddleware.mjs +4 -27
  103. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -1
  104. package/dist/middlewares/index.cjs.map +1 -1
  105. package/dist/middlewares/index.d.cts +1 -1
  106. package/dist/middlewares/index.d.cts.map +1 -1
  107. package/dist/middlewares/index.d.mts +1 -1
  108. package/dist/middlewares/index.d.mts.map +1 -1
  109. package/dist/middlewares/index.mjs.map +1 -1
  110. package/dist/selectors/balance.cjs +306 -0
  111. package/dist/selectors/balance.cjs.map +1 -0
  112. package/dist/selectors/balance.d.cts +22 -0
  113. package/dist/selectors/balance.d.cts.map +1 -0
  114. package/dist/selectors/balance.d.mts +22 -0
  115. package/dist/selectors/balance.d.mts.map +1 -0
  116. package/dist/selectors/balance.mjs +297 -0
  117. package/dist/selectors/balance.mjs.map +1 -0
  118. package/dist/types.cjs.map +1 -1
  119. package/dist/types.d.cts +63 -18
  120. package/dist/types.d.cts.map +1 -1
  121. package/dist/types.d.mts +63 -18
  122. package/dist/types.d.mts.map +1 -1
  123. package/dist/types.mjs.map +1 -1
  124. package/package.json +4 -4
  125. package/dist/data-sources/initDataSources.cjs +0 -215
  126. package/dist/data-sources/initDataSources.cjs.map +0 -1
  127. package/dist/data-sources/initDataSources.d.cts +0 -140
  128. package/dist/data-sources/initDataSources.d.cts.map +0 -1
  129. package/dist/data-sources/initDataSources.d.mts +0 -140
  130. package/dist/data-sources/initDataSources.d.mts.map +0 -1
  131. package/dist/data-sources/initDataSources.mjs +0 -210
  132. package/dist/data-sources/initDataSources.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,+BAA+B,EAChC,+BAA2B;AA+E5B,sCAAsC;AACtC,OAAO,EAAE,kBAAkB,EAAE,iCAAuB;AAIpD,6BAA6B;AAC7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC5B,iCAAuB;AAUxB,kCAAkC;AAClC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EACjC,iCAAuB;AAYxB,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iCAAuB;AAUpE,gFAAgF;AAChF,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB;AACrB,YAAY;AACZ,kBAAkB;AAClB,oBAAoB;AACpB,iBAAiB,EACjB,uBAAuB,EACxB,iCAAuB;AAUxB,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iCAAuB;AAUlE,cAAc;AACd,OAAO,EAAE,mBAAmB,EAAE,gCAAsB;AAOpD,6BAA6B;AAC7B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iCAAuB;AAcjE,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,oBAAgB","sourcesContent":["// Main controller export\nexport {\n AssetsController,\n getDefaultAssetsControllerState,\n} from './AssetsController';\n\n// State and messenger types\nexport type {\n AssetsControllerState,\n AssetsControllerMessenger,\n AssetsControllerOptions,\n AssetsControllerGetStateAction,\n AssetsControllerGetAssetsAction,\n AssetsControllerGetAssetsBalanceAction,\n AssetsControllerGetAssetMetadataAction,\n AssetsControllerGetAssetsPriceAction,\n AssetsControllerActiveChainsUpdateAction,\n AssetsControllerAssetsUpdateAction,\n AssetsControllerAddCustomAssetAction,\n AssetsControllerRemoveCustomAssetAction,\n AssetsControllerGetCustomAssetsAction,\n AssetsControllerActions,\n AssetsControllerStateChangeEvent,\n AssetsControllerBalanceChangedEvent,\n AssetsControllerPriceChangedEvent,\n AssetsControllerAssetsDetectedEvent,\n AssetsControllerEvents,\n} from './AssetsController';\n\n// Core types\nexport type {\n // CAIP types\n Caip19AssetId,\n AccountId,\n ChainId,\n // Asset types\n AssetType,\n TokenStandard,\n // Contract data types\n TokenFees,\n HoneypotStatus,\n StorageSlots,\n LocalizedDescription,\n // Metadata types\n BaseAssetMetadata,\n FungibleAssetMetadata,\n ERC721AssetMetadata,\n ERC1155AssetMetadata,\n AssetMetadata,\n // Price types\n BaseAssetPrice,\n FungibleAssetPrice,\n NFTAssetPrice,\n AssetPrice,\n // Balance types\n FungibleAssetBalance,\n ERC721AssetBalance,\n ERC1155AssetBalance,\n AssetBalance,\n // Data source types\n DataType,\n DataRequest,\n DataResponse,\n // Middleware types\n Context,\n NextFunction,\n Middleware,\n FetchContext,\n FetchNextFunction,\n FetchMiddleware,\n // Data source registration\n DataSourceDefinition,\n RegisteredDataSource,\n SubscriptionResponse,\n // Combined asset type\n Asset,\n // Event types\n BalanceChangeEvent,\n PriceChangeEvent,\n MetadataChangeEvent,\n AssetsDetectedEvent,\n} from './types';\n\n// Data sources - base class and types\nexport { AbstractDataSource } from './data-sources';\n\nexport type { DataSourceState, SubscriptionRequest } from './data-sources';\n\n// Data sources - AccountsApi\nexport {\n AccountsApiDataSource,\n createAccountsApiDataSource,\n} from './data-sources';\n\nexport type {\n AccountsApiDataSourceOptions,\n AccountsApiDataSourceState,\n AccountsApiDataSourceActions,\n AccountsApiDataSourceEvents,\n AccountsApiDataSourceMessenger,\n} from './data-sources';\n\n// Data sources - BackendWebsocket\nexport {\n BackendWebsocketDataSource,\n createBackendWebsocketDataSource,\n} from './data-sources';\n\nexport type {\n BackendWebsocketDataSourceOptions,\n BackendWebsocketDataSourceState,\n BackendWebsocketDataSourceActions,\n BackendWebsocketDataSourceEvents,\n BackendWebsocketDataSourceMessenger,\n BackendWebsocketDataSourceAllowedActions,\n BackendWebsocketDataSourceAllowedEvents,\n} from './data-sources';\n\n// Data sources - RPC\nexport { RpcDataSource, createRpcDataSource } from './data-sources';\n\nexport type {\n RpcDataSourceOptions,\n RpcDataSourceState,\n RpcDataSourceActions,\n RpcDataSourceEvents,\n RpcDataSourceMessenger,\n} from './data-sources';\n\n// Data sources - Unified Snap Data Source (dynamically discovers keyring snaps)\nexport {\n SnapDataSource,\n createSnapDataSource,\n SNAP_DATA_SOURCE_NAME,\n // Constants\n KEYRING_PERMISSION,\n // Utility functions\n getChainIdsCaveat,\n extractChainFromAssetId,\n} from './data-sources';\n\nexport type {\n SnapDataSourceState,\n SnapDataSourceOptions,\n SnapDataSourceActions,\n SnapDataSourceEvents,\n SnapDataSourceMessenger,\n} from './data-sources';\n\n// Enrichment data sources\nexport { TokenDataSource, PriceDataSource } from './data-sources';\n\nexport type {\n TokenDataSourceActions,\n TokenDataSourceMessenger,\n PriceDataSourceActions,\n PriceDataSourceEvents,\n PriceDataSourceMessenger,\n} from './data-sources';\n\n// Middlewares\nexport { DetectionMiddleware } from './middlewares';\n\nexport type {\n DetectionMiddlewareActions,\n DetectionMiddlewareMessenger,\n} from './middlewares';\n\n// Data source initialization\nexport { initMessengers, initDataSources } from './data-sources';\n\nexport type {\n DataSourceMessengers,\n DataSources,\n InitMessengersOptions,\n InitDataSourcesOptions,\n DataSourceActions,\n DataSourceEvents,\n DataSourceAllowedActions,\n DataSourceAllowedEvents,\n RootMessenger,\n} from './data-sources';\n\n// Utilities\nexport { normalizeAssetId } from './utils';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,+BAA+B,EAChC,+BAA2B;AAgF5B,sCAAsC;AACtC,OAAO,EAAE,kBAAkB,EAAE,iCAAuB;AAIpD,6BAA6B;AAC7B,OAAO,EAAE,qBAAqB,EAAE,iCAAuB;AAQvD,kCAAkC;AAClC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EACjC,iCAAuB;AASxB,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iCAAuB;AAWpE,gFAAgF;AAChF,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB;AACrB,YAAY;AACZ,kBAAkB;AAClB,oBAAoB;AACpB,iBAAiB,EACjB,uBAAuB,EACxB,iCAAuB;AASxB,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iCAAuB;AAQlE,cAAc;AACd,OAAO,EAAE,mBAAmB,EAAE,gCAAsB;AAEpD,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,oBAAgB;AAE3C,YAAY;AACZ,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,2BAA2B,EAC5B,gCAA4B","sourcesContent":["// Main controller export\nexport {\n AssetsController,\n getDefaultAssetsControllerState,\n} from './AssetsController';\n\n// State and messenger types\nexport type {\n AssetsControllerState,\n AssetsControllerMessenger,\n AssetsControllerOptions,\n AssetsControllerGetStateAction,\n AssetsControllerActions,\n AssetsControllerStateChangeEvent,\n AssetsControllerBalanceChangedEvent,\n AssetsControllerPriceChangedEvent,\n AssetsControllerAssetsDetectedEvent,\n AssetsControllerEvents,\n} from './AssetsController';\nexport type {\n AssetsControllerGetAssetsAction,\n AssetsControllerGetAssetsBalanceAction,\n AssetsControllerGetAssetMetadataAction,\n AssetsControllerGetAssetsPriceAction,\n AssetsControllerAddCustomAssetAction,\n AssetsControllerRemoveCustomAssetAction,\n AssetsControllerGetCustomAssetsAction,\n AssetsControllerHideAssetAction,\n AssetsControllerUnhideAssetAction,\n AssetsControllerMethodActions,\n} from './AssetsController-method-action-types';\n\n// Core types\nexport type {\n // CAIP types\n Caip19AssetId,\n AccountId,\n ChainId,\n // Asset types\n AssetType,\n TokenStandard,\n // Contract data types\n TokenFees,\n HoneypotStatus,\n StorageSlots,\n LocalizedDescription,\n // Metadata types\n BaseAssetMetadata,\n FungibleAssetMetadata,\n ERC721AssetMetadata,\n ERC1155AssetMetadata,\n AssetMetadata,\n // Price types\n BaseAssetPrice,\n FungibleAssetPrice,\n NFTAssetPrice,\n AssetPrice,\n // Balance types\n FungibleAssetBalance,\n ERC721AssetBalance,\n ERC1155AssetBalance,\n AssetBalance,\n // Data source types\n AccountWithSupportedChains,\n DataType,\n DataRequest,\n DataResponse,\n // Middleware types\n Context,\n NextFunction,\n Middleware,\n FetchContext,\n FetchNextFunction,\n FetchMiddleware,\n SubscriptionResponse,\n // Combined asset type\n Asset,\n // Event types\n BalanceChangeEvent,\n PriceChangeEvent,\n MetadataChangeEvent,\n AssetsDetectedEvent,\n} from './types';\n\n// Data sources - base class and types\nexport { AbstractDataSource } from './data-sources';\n\nexport type { DataSourceState, SubscriptionRequest } from './data-sources';\n\n// Data sources - AccountsApi\nexport { AccountsApiDataSource } from './data-sources';\n\nexport type {\n AccountsApiDataSourceOptions,\n AccountsApiDataSourceState,\n AccountsApiDataSourceAllowedActions,\n} from './data-sources';\n\n// Data sources - BackendWebsocket\nexport {\n BackendWebsocketDataSource,\n createBackendWebsocketDataSource,\n} from './data-sources';\n\nexport type {\n BackendWebsocketDataSourceOptions,\n BackendWebsocketDataSourceState,\n BackendWebsocketDataSourceAllowedActions,\n BackendWebsocketDataSourceAllowedEvents,\n} from './data-sources';\n\n// Data sources - RPC\nexport { RpcDataSource, createRpcDataSource } from './data-sources';\n\nexport type {\n RpcDataSourceConfig,\n RpcDataSourceOptions,\n RpcDataSourceState,\n RpcDataSourceAllowedActions,\n RpcDataSourceAllowedEvents,\n ChainStatus,\n} from './data-sources';\n\n// Data sources - Unified Snap Data Source (dynamically discovers keyring snaps)\nexport {\n SnapDataSource,\n createSnapDataSource,\n SNAP_DATA_SOURCE_NAME,\n // Constants\n KEYRING_PERMISSION,\n // Utility functions\n getChainIdsCaveat,\n extractChainFromAssetId,\n} from './data-sources';\n\nexport type {\n SnapDataSourceState,\n SnapDataSourceOptions,\n SnapDataSourceAllowedActions,\n SnapDataSourceAllowedEvents,\n} from './data-sources';\n\n// Enrichment data sources\nexport { TokenDataSource, PriceDataSource } from './data-sources';\n\nexport type {\n TokenDataSourceOptions,\n TokenDataSourceAllowedActions,\n PriceDataSourceOptions,\n} from './data-sources';\n\n// Middlewares\nexport { DetectionMiddleware } from './middlewares';\n\n// Utilities\nexport { normalizeAssetId } from './utils';\n\n// Selectors\nexport {\n getAggregatedBalanceForAccount,\n getGroupIdForAccount,\n getInternalAccountsForGroup,\n} from './selectors/balance';\n\nexport type {\n AccountsById,\n AggregatedBalanceEntry,\n AggregatedBalanceForAccount,\n EnabledNetworkMap,\n} from './selectors/balance';\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 _DetectionMiddleware_instances, _DetectionMiddleware_messenger, _DetectionMiddleware_registerActionHandlers;
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.DetectionMiddleware = void 0;
16
4
  const logger_1 = require("../logger.cjs");
@@ -28,26 +16,19 @@ const CONTROLLER_NAME = 'DetectionMiddleware';
28
16
  * DetectionMiddleware identifies assets that do not have metadata.
29
17
  *
30
18
  * This middleware:
31
- * - Checks assets in the response for metadata in state
19
+ * - Checks assets in the response for metadata in state (via ctx.getAssetsState)
32
20
  * - Assets in response but without metadata are considered "detected"
33
21
  * - Fills response.detectedAssets with asset IDs per account that lack metadata
34
22
  *
35
23
  * Usage:
36
24
  * ```typescript
37
- * // Create and initialize (registers messenger actions)
38
- * const detectionMiddleware = new DetectionMiddleware({ messenger });
39
- *
40
- * // Later, get middleware via messenger
41
- * const middleware = messenger.call('DetectionMiddleware:getAssetsMiddleware');
25
+ * const detectionMiddleware = new DetectionMiddleware();
26
+ * const middleware = detectionMiddleware.assetsMiddleware;
42
27
  * ```
43
28
  */
44
29
  class DetectionMiddleware {
45
- constructor(options) {
46
- _DetectionMiddleware_instances.add(this);
30
+ constructor() {
47
31
  this.name = CONTROLLER_NAME;
48
- _DetectionMiddleware_messenger.set(this, void 0);
49
- __classPrivateFieldSet(this, _DetectionMiddleware_messenger, options.messenger, "f");
50
- __classPrivateFieldGet(this, _DetectionMiddleware_instances, "m", _DetectionMiddleware_registerActionHandlers).call(this);
51
32
  }
52
33
  /**
53
34
  * Get the middleware for detecting assets without metadata.
@@ -94,8 +75,4 @@ class DetectionMiddleware {
94
75
  }
95
76
  }
96
77
  exports.DetectionMiddleware = DetectionMiddleware;
97
- _DetectionMiddleware_messenger = new WeakMap(), _DetectionMiddleware_instances = new WeakSet(), _DetectionMiddleware_registerActionHandlers = function _DetectionMiddleware_registerActionHandlers() {
98
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
- __classPrivateFieldGet(this, _DetectionMiddleware_messenger, "f").registerActionHandler('DetectionMiddleware:getAssetsMiddleware', () => this.assetsMiddleware);
100
- };
101
78
  //# sourceMappingURL=DetectionMiddleware.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetectionMiddleware.cjs","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,0CAA8D;AAC9D,wCAAwC;AAGxC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,uBAAuB;AACvB,IAAA,2BAAkB,EAAC,sBAAa,EAAE,eAAe,CAAC,CAAC;AAkCnD,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,mBAAmB;IAK9B,YAAY,OAAmC;;QAJtC,SAAI,GAAG,eAAe,CAAC;QAEvB,iDAAyC;QAGhD,uBAAA,IAAI,kCAAc,OAAO,CAAC,SAAS,MAAA,CAAC;QACpC,uBAAA,IAAI,mFAAwB,MAA5B,IAAI,CAA0B,CAAC;IACjC,CAAC;IAUD;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAA,oBAAY,EAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACnD,gCAAgC;YAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;YAEzB,+DAA+D;YAC/D,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,0BAA0B;YAC1B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/D,MAAM,cAAc,GAAuC,EAAE,CAAC;YAE9D,2DAA2D;YAC3D,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CACvD,QAAQ,CAAC,aAAa,CACvB,EAAE,CAAC;gBACF,MAAM,QAAQ,GAAoB,EAAE,CAAC;gBAErC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAC/B,eAA0C,CAC3C,EAAE,CAAC;oBACF,0DAA0D;oBAC1D,IAAI,CAAC,aAAa,CAAC,OAAwB,CAAC,EAAE,CAAC;wBAC7C,QAAQ,CAAC,IAAI,CAAC,OAAwB,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,cAAc,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,sCAAsC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YAC3C,CAAC;YAED,+CAA+C;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAzED,kDAyEC;;IA9DG,8DAA8D;IAC7D,uBAAA,IAAI,sCAAmB,CAAC,qBAAqB,CAC5C,yCAAyC,EACzC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAC5B,CAAC;AACJ,CAAC","sourcesContent":["import type { Messenger } from '@metamask/messenger';\n\nimport { projectLogger, createModuleLogger } from '../logger';\nimport { forDataTypes } from '../types';\nimport type { AccountId, Caip19AssetId, Middleware } from '../types';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst CONTROLLER_NAME = 'DetectionMiddleware';\n\n// Logger for debugging\ncreateModuleLogger(projectLogger, CONTROLLER_NAME);\n\n// ============================================================================\n// MESSENGER TYPES\n// ============================================================================\n\n/**\n * Action to get the DetectionMiddleware middleware.\n */\nexport type DetectionMiddlewareGetAssetsMiddlewareAction = {\n type: `${typeof CONTROLLER_NAME}:getAssetsMiddleware`;\n handler: () => Middleware;\n};\n\n/**\n * All actions exposed by DetectionMiddleware.\n */\nexport type DetectionMiddlewareActions =\n DetectionMiddlewareGetAssetsMiddlewareAction;\n\nexport type DetectionMiddlewareMessenger = Messenger<\n typeof CONTROLLER_NAME,\n DetectionMiddlewareActions,\n never\n>;\n\n// ============================================================================\n// OPTIONS\n// ============================================================================\n\nexport type DetectionMiddlewareOptions = {\n messenger: DetectionMiddlewareMessenger;\n};\n\n// ============================================================================\n// DETECTION MIDDLEWARE\n// ============================================================================\n\n/**\n * DetectionMiddleware identifies assets that do not have metadata.\n *\n * This middleware:\n * - Checks assets in the response for metadata in state\n * - Assets in response but without metadata are considered \"detected\"\n * - Fills response.detectedAssets with asset IDs per account that lack metadata\n *\n * Usage:\n * ```typescript\n * // Create and initialize (registers messenger actions)\n * const detectionMiddleware = new DetectionMiddleware({ messenger });\n *\n * // Later, get middleware via messenger\n * const middleware = messenger.call('DetectionMiddleware:getAssetsMiddleware');\n * ```\n */\nexport class DetectionMiddleware {\n readonly name = CONTROLLER_NAME;\n\n readonly #messenger: DetectionMiddlewareMessenger;\n\n constructor(options: DetectionMiddlewareOptions) {\n this.#messenger = options.messenger;\n this.#registerActionHandlers();\n }\n\n #registerActionHandlers(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.#messenger as any).registerActionHandler(\n 'DetectionMiddleware:getAssetsMiddleware',\n () => this.assetsMiddleware,\n );\n }\n\n /**\n * Get the middleware for detecting assets without metadata.\n *\n * This middleware:\n * 1. Extracts the response from context\n * 2. Detects assets from the response that don't have metadata\n * 3. Fills response.detectedAssets with detected asset IDs per account\n * 4. Calls next() to continue the middleware chain\n *\n * @returns The middleware function for the assets pipeline.\n */\n get assetsMiddleware(): Middleware {\n return forDataTypes(['balance'], async (ctx, next) => {\n // Extract response from context\n const { response } = ctx;\n\n // If no balances in response, nothing to detect - pass through\n if (!response.assetsBalance) {\n return next(ctx);\n }\n\n // Get metadata from state\n const { assetsMetadata: stateMetadata } = ctx.getAssetsState();\n\n const detectedAssets: Record<AccountId, Caip19AssetId[]> = {};\n\n // Detect assets from the response that don't have metadata\n for (const [accountId, accountBalances] of Object.entries(\n response.assetsBalance,\n )) {\n const detected: Caip19AssetId[] = [];\n\n for (const assetId of Object.keys(\n accountBalances as Record<string, unknown>,\n )) {\n // Asset is detected if it does not have metadata in state\n if (!stateMetadata[assetId as Caip19AssetId]) {\n detected.push(assetId as Caip19AssetId);\n }\n }\n\n if (detected.length > 0) {\n detectedAssets[accountId] = detected;\n }\n }\n\n // Fill detectedAssets in the response\n if (Object.keys(detectedAssets).length > 0) {\n response.detectedAssets = detectedAssets;\n }\n\n // Call next() to continue the middleware chain\n return next(ctx);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"DetectionMiddleware.cjs","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":";;;AAAA,0CAA8D;AAC9D,wCAAwC;AAGxC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,uBAAuB;AACvB,IAAA,2BAAkB,EAAC,sBAAa,EAAE,eAAe,CAAC,CAAC;AAEnD,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;;GAaG;AACH,MAAa,mBAAmB;IAAhC;QACW,SAAI,GAAG,eAAe,CAAC;IAyDlC,CAAC;IAvDC;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAA,oBAAY,EAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACnD,gCAAgC;YAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;YAEzB,+DAA+D;YAC/D,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,0BAA0B;YAC1B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/D,MAAM,cAAc,GAAuC,EAAE,CAAC;YAE9D,2DAA2D;YAC3D,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CACvD,QAAQ,CAAC,aAAa,CACvB,EAAE,CAAC;gBACF,MAAM,QAAQ,GAAoB,EAAE,CAAC;gBAErC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAC/B,eAA0C,CAC3C,EAAE,CAAC;oBACF,0DAA0D;oBAC1D,IAAI,CAAC,aAAa,CAAC,OAAwB,CAAC,EAAE,CAAC;wBAC7C,QAAQ,CAAC,IAAI,CAAC,OAAwB,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,cAAc,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,sCAAsC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YAC3C,CAAC;YAED,+CAA+C;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA1DD,kDA0DC","sourcesContent":["import { projectLogger, createModuleLogger } from '../logger';\nimport { forDataTypes } from '../types';\nimport type { AccountId, Caip19AssetId, Middleware } from '../types';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst CONTROLLER_NAME = 'DetectionMiddleware';\n\n// Logger for debugging\ncreateModuleLogger(projectLogger, CONTROLLER_NAME);\n\n// ============================================================================\n// DETECTION MIDDLEWARE\n// ============================================================================\n\n/**\n * DetectionMiddleware identifies assets that do not have metadata.\n *\n * This middleware:\n * - Checks assets in the response for metadata in state (via ctx.getAssetsState)\n * - Assets in response but without metadata are considered \"detected\"\n * - Fills response.detectedAssets with asset IDs per account that lack metadata\n *\n * Usage:\n * ```typescript\n * const detectionMiddleware = new DetectionMiddleware();\n * const middleware = detectionMiddleware.assetsMiddleware;\n * ```\n */\nexport class DetectionMiddleware {\n readonly name = CONTROLLER_NAME;\n\n /**\n * Get the middleware for detecting assets without metadata.\n *\n * This middleware:\n * 1. Extracts the response from context\n * 2. Detects assets from the response that don't have metadata\n * 3. Fills response.detectedAssets with detected asset IDs per account\n * 4. Calls next() to continue the middleware chain\n *\n * @returns The middleware function for the assets pipeline.\n */\n get assetsMiddleware(): Middleware {\n return forDataTypes(['balance'], async (ctx, next) => {\n // Extract response from context\n const { response } = ctx;\n\n // If no balances in response, nothing to detect - pass through\n if (!response.assetsBalance) {\n return next(ctx);\n }\n\n // Get metadata from state\n const { assetsMetadata: stateMetadata } = ctx.getAssetsState();\n\n const detectedAssets: Record<AccountId, Caip19AssetId[]> = {};\n\n // Detect assets from the response that don't have metadata\n for (const [accountId, accountBalances] of Object.entries(\n response.assetsBalance,\n )) {\n const detected: Caip19AssetId[] = [];\n\n for (const assetId of Object.keys(\n accountBalances as Record<string, unknown>,\n )) {\n // Asset is detected if it does not have metadata in state\n if (!stateMetadata[assetId as Caip19AssetId]) {\n detected.push(assetId as Caip19AssetId);\n }\n }\n\n if (detected.length > 0) {\n detectedAssets[accountId] = detected;\n }\n }\n\n // Fill detectedAssets in the response\n if (Object.keys(detectedAssets).length > 0) {\n response.detectedAssets = detectedAssets;\n }\n\n // Call next() to continue the middleware chain\n return next(ctx);\n });\n }\n}\n"]}
@@ -1,42 +1,20 @@
1
- import type { Messenger } from "@metamask/messenger";
2
1
  import type { Middleware } from "../types.cjs";
3
- declare const CONTROLLER_NAME = "DetectionMiddleware";
4
- /**
5
- * Action to get the DetectionMiddleware middleware.
6
- */
7
- export type DetectionMiddlewareGetAssetsMiddlewareAction = {
8
- type: `${typeof CONTROLLER_NAME}:getAssetsMiddleware`;
9
- handler: () => Middleware;
10
- };
11
- /**
12
- * All actions exposed by DetectionMiddleware.
13
- */
14
- export type DetectionMiddlewareActions = DetectionMiddlewareGetAssetsMiddlewareAction;
15
- export type DetectionMiddlewareMessenger = Messenger<typeof CONTROLLER_NAME, DetectionMiddlewareActions, never>;
16
- export type DetectionMiddlewareOptions = {
17
- messenger: DetectionMiddlewareMessenger;
18
- };
19
2
  /**
20
3
  * DetectionMiddleware identifies assets that do not have metadata.
21
4
  *
22
5
  * This middleware:
23
- * - Checks assets in the response for metadata in state
6
+ * - Checks assets in the response for metadata in state (via ctx.getAssetsState)
24
7
  * - Assets in response but without metadata are considered "detected"
25
8
  * - Fills response.detectedAssets with asset IDs per account that lack metadata
26
9
  *
27
10
  * Usage:
28
11
  * ```typescript
29
- * // Create and initialize (registers messenger actions)
30
- * const detectionMiddleware = new DetectionMiddleware({ messenger });
31
- *
32
- * // Later, get middleware via messenger
33
- * const middleware = messenger.call('DetectionMiddleware:getAssetsMiddleware');
12
+ * const detectionMiddleware = new DetectionMiddleware();
13
+ * const middleware = detectionMiddleware.assetsMiddleware;
34
14
  * ```
35
15
  */
36
16
  export declare class DetectionMiddleware {
37
- #private;
38
17
  readonly name = "DetectionMiddleware";
39
- constructor(options: DetectionMiddlewareOptions);
40
18
  /**
41
19
  * Get the middleware for detecting assets without metadata.
42
20
  *
@@ -50,5 +28,4 @@ export declare class DetectionMiddleware {
50
28
  */
51
29
  get assetsMiddleware(): Middleware;
52
30
  }
53
- export {};
54
31
  //# sourceMappingURL=DetectionMiddleware.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetectionMiddleware.d.cts","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAIrD,OAAO,KAAK,EAA4B,UAAU,EAAE,qBAAiB;AAMrE,QAAA,MAAM,eAAe,wBAAwB,CAAC;AAS9C;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD,IAAI,EAAE,GAAG,OAAO,eAAe,sBAAsB,CAAC;IACtD,OAAO,EAAE,MAAM,UAAU,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GACpC,4CAA4C,CAAC;AAE/C,MAAM,MAAM,4BAA4B,GAAG,SAAS,CAClD,OAAO,eAAe,EACtB,0BAA0B,EAC1B,KAAK,CACN,CAAC;AAMF,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,4BAA4B,CAAC;CACzC,CAAC;AAMF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAmB;;IAC9B,QAAQ,CAAC,IAAI,yBAAmB;gBAIpB,OAAO,EAAE,0BAA0B;IAa/C;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB,IAAI,UAAU,CA2CjC;CACF"}
1
+ {"version":3,"file":"DetectionMiddleware.d.cts","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA4B,UAAU,EAAE,qBAAiB;AAerE;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,yBAAmB;IAEhC;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB,IAAI,UAAU,CA2CjC;CACF"}
@@ -1,42 +1,20 @@
1
- import type { Messenger } from "@metamask/messenger";
2
1
  import type { Middleware } from "../types.mjs";
3
- declare const CONTROLLER_NAME = "DetectionMiddleware";
4
- /**
5
- * Action to get the DetectionMiddleware middleware.
6
- */
7
- export type DetectionMiddlewareGetAssetsMiddlewareAction = {
8
- type: `${typeof CONTROLLER_NAME}:getAssetsMiddleware`;
9
- handler: () => Middleware;
10
- };
11
- /**
12
- * All actions exposed by DetectionMiddleware.
13
- */
14
- export type DetectionMiddlewareActions = DetectionMiddlewareGetAssetsMiddlewareAction;
15
- export type DetectionMiddlewareMessenger = Messenger<typeof CONTROLLER_NAME, DetectionMiddlewareActions, never>;
16
- export type DetectionMiddlewareOptions = {
17
- messenger: DetectionMiddlewareMessenger;
18
- };
19
2
  /**
20
3
  * DetectionMiddleware identifies assets that do not have metadata.
21
4
  *
22
5
  * This middleware:
23
- * - Checks assets in the response for metadata in state
6
+ * - Checks assets in the response for metadata in state (via ctx.getAssetsState)
24
7
  * - Assets in response but without metadata are considered "detected"
25
8
  * - Fills response.detectedAssets with asset IDs per account that lack metadata
26
9
  *
27
10
  * Usage:
28
11
  * ```typescript
29
- * // Create and initialize (registers messenger actions)
30
- * const detectionMiddleware = new DetectionMiddleware({ messenger });
31
- *
32
- * // Later, get middleware via messenger
33
- * const middleware = messenger.call('DetectionMiddleware:getAssetsMiddleware');
12
+ * const detectionMiddleware = new DetectionMiddleware();
13
+ * const middleware = detectionMiddleware.assetsMiddleware;
34
14
  * ```
35
15
  */
36
16
  export declare class DetectionMiddleware {
37
- #private;
38
17
  readonly name = "DetectionMiddleware";
39
- constructor(options: DetectionMiddlewareOptions);
40
18
  /**
41
19
  * Get the middleware for detecting assets without metadata.
42
20
  *
@@ -50,5 +28,4 @@ export declare class DetectionMiddleware {
50
28
  */
51
29
  get assetsMiddleware(): Middleware;
52
30
  }
53
- export {};
54
31
  //# sourceMappingURL=DetectionMiddleware.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetectionMiddleware.d.mts","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAIrD,OAAO,KAAK,EAA4B,UAAU,EAAE,qBAAiB;AAMrE,QAAA,MAAM,eAAe,wBAAwB,CAAC;AAS9C;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD,IAAI,EAAE,GAAG,OAAO,eAAe,sBAAsB,CAAC;IACtD,OAAO,EAAE,MAAM,UAAU,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GACpC,4CAA4C,CAAC;AAE/C,MAAM,MAAM,4BAA4B,GAAG,SAAS,CAClD,OAAO,eAAe,EACtB,0BAA0B,EAC1B,KAAK,CACN,CAAC;AAMF,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,4BAA4B,CAAC;CACzC,CAAC;AAMF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAmB;;IAC9B,QAAQ,CAAC,IAAI,yBAAmB;gBAIpB,OAAO,EAAE,0BAA0B;IAa/C;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB,IAAI,UAAU,CA2CjC;CACF"}
1
+ {"version":3,"file":"DetectionMiddleware.d.mts","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA4B,UAAU,EAAE,qBAAiB;AAerE;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,yBAAmB;IAEhC;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB,IAAI,UAAU,CA2CjC;CACF"}
@@ -1,15 +1,3 @@
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 _DetectionMiddleware_instances, _DetectionMiddleware_messenger, _DetectionMiddleware_registerActionHandlers;
13
1
  import { projectLogger, createModuleLogger } from "../logger.mjs";
14
2
  import { forDataTypes } from "../types.mjs";
15
3
  // ============================================================================
@@ -25,26 +13,19 @@ createModuleLogger(projectLogger, CONTROLLER_NAME);
25
13
  * DetectionMiddleware identifies assets that do not have metadata.
26
14
  *
27
15
  * This middleware:
28
- * - Checks assets in the response for metadata in state
16
+ * - Checks assets in the response for metadata in state (via ctx.getAssetsState)
29
17
  * - Assets in response but without metadata are considered "detected"
30
18
  * - Fills response.detectedAssets with asset IDs per account that lack metadata
31
19
  *
32
20
  * Usage:
33
21
  * ```typescript
34
- * // Create and initialize (registers messenger actions)
35
- * const detectionMiddleware = new DetectionMiddleware({ messenger });
36
- *
37
- * // Later, get middleware via messenger
38
- * const middleware = messenger.call('DetectionMiddleware:getAssetsMiddleware');
22
+ * const detectionMiddleware = new DetectionMiddleware();
23
+ * const middleware = detectionMiddleware.assetsMiddleware;
39
24
  * ```
40
25
  */
41
26
  export class DetectionMiddleware {
42
- constructor(options) {
43
- _DetectionMiddleware_instances.add(this);
27
+ constructor() {
44
28
  this.name = CONTROLLER_NAME;
45
- _DetectionMiddleware_messenger.set(this, void 0);
46
- __classPrivateFieldSet(this, _DetectionMiddleware_messenger, options.messenger, "f");
47
- __classPrivateFieldGet(this, _DetectionMiddleware_instances, "m", _DetectionMiddleware_registerActionHandlers).call(this);
48
29
  }
49
30
  /**
50
31
  * Get the middleware for detecting assets without metadata.
@@ -90,8 +71,4 @@ export class DetectionMiddleware {
90
71
  });
91
72
  }
92
73
  }
93
- _DetectionMiddleware_messenger = new WeakMap(), _DetectionMiddleware_instances = new WeakSet(), _DetectionMiddleware_registerActionHandlers = function _DetectionMiddleware_registerActionHandlers() {
94
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
- __classPrivateFieldGet(this, _DetectionMiddleware_messenger, "f").registerActionHandler('DetectionMiddleware:getAssetsMiddleware', () => this.assetsMiddleware);
96
- };
97
74
  //# sourceMappingURL=DetectionMiddleware.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetectionMiddleware.mjs","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAkB;AAC9D,OAAO,EAAE,YAAY,EAAE,qBAAiB;AAGxC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,uBAAuB;AACvB,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAkCnD,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,mBAAmB;IAK9B,YAAY,OAAmC;;QAJtC,SAAI,GAAG,eAAe,CAAC;QAEvB,iDAAyC;QAGhD,uBAAA,IAAI,kCAAc,OAAO,CAAC,SAAS,MAAA,CAAC;QACpC,uBAAA,IAAI,mFAAwB,MAA5B,IAAI,CAA0B,CAAC;IACjC,CAAC;IAUD;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB;QAClB,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACnD,gCAAgC;YAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;YAEzB,+DAA+D;YAC/D,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,0BAA0B;YAC1B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/D,MAAM,cAAc,GAAuC,EAAE,CAAC;YAE9D,2DAA2D;YAC3D,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CACvD,QAAQ,CAAC,aAAa,CACvB,EAAE,CAAC;gBACF,MAAM,QAAQ,GAAoB,EAAE,CAAC;gBAErC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAC/B,eAA0C,CAC3C,EAAE,CAAC;oBACF,0DAA0D;oBAC1D,IAAI,CAAC,aAAa,CAAC,OAAwB,CAAC,EAAE,CAAC;wBAC7C,QAAQ,CAAC,IAAI,CAAC,OAAwB,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,cAAc,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,sCAAsC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YAC3C,CAAC;YAED,+CAA+C;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;IA9DG,8DAA8D;IAC7D,uBAAA,IAAI,sCAAmB,CAAC,qBAAqB,CAC5C,yCAAyC,EACzC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAC5B,CAAC;AACJ,CAAC","sourcesContent":["import type { Messenger } from '@metamask/messenger';\n\nimport { projectLogger, createModuleLogger } from '../logger';\nimport { forDataTypes } from '../types';\nimport type { AccountId, Caip19AssetId, Middleware } from '../types';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst CONTROLLER_NAME = 'DetectionMiddleware';\n\n// Logger for debugging\ncreateModuleLogger(projectLogger, CONTROLLER_NAME);\n\n// ============================================================================\n// MESSENGER TYPES\n// ============================================================================\n\n/**\n * Action to get the DetectionMiddleware middleware.\n */\nexport type DetectionMiddlewareGetAssetsMiddlewareAction = {\n type: `${typeof CONTROLLER_NAME}:getAssetsMiddleware`;\n handler: () => Middleware;\n};\n\n/**\n * All actions exposed by DetectionMiddleware.\n */\nexport type DetectionMiddlewareActions =\n DetectionMiddlewareGetAssetsMiddlewareAction;\n\nexport type DetectionMiddlewareMessenger = Messenger<\n typeof CONTROLLER_NAME,\n DetectionMiddlewareActions,\n never\n>;\n\n// ============================================================================\n// OPTIONS\n// ============================================================================\n\nexport type DetectionMiddlewareOptions = {\n messenger: DetectionMiddlewareMessenger;\n};\n\n// ============================================================================\n// DETECTION MIDDLEWARE\n// ============================================================================\n\n/**\n * DetectionMiddleware identifies assets that do not have metadata.\n *\n * This middleware:\n * - Checks assets in the response for metadata in state\n * - Assets in response but without metadata are considered \"detected\"\n * - Fills response.detectedAssets with asset IDs per account that lack metadata\n *\n * Usage:\n * ```typescript\n * // Create and initialize (registers messenger actions)\n * const detectionMiddleware = new DetectionMiddleware({ messenger });\n *\n * // Later, get middleware via messenger\n * const middleware = messenger.call('DetectionMiddleware:getAssetsMiddleware');\n * ```\n */\nexport class DetectionMiddleware {\n readonly name = CONTROLLER_NAME;\n\n readonly #messenger: DetectionMiddlewareMessenger;\n\n constructor(options: DetectionMiddlewareOptions) {\n this.#messenger = options.messenger;\n this.#registerActionHandlers();\n }\n\n #registerActionHandlers(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.#messenger as any).registerActionHandler(\n 'DetectionMiddleware:getAssetsMiddleware',\n () => this.assetsMiddleware,\n );\n }\n\n /**\n * Get the middleware for detecting assets without metadata.\n *\n * This middleware:\n * 1. Extracts the response from context\n * 2. Detects assets from the response that don't have metadata\n * 3. Fills response.detectedAssets with detected asset IDs per account\n * 4. Calls next() to continue the middleware chain\n *\n * @returns The middleware function for the assets pipeline.\n */\n get assetsMiddleware(): Middleware {\n return forDataTypes(['balance'], async (ctx, next) => {\n // Extract response from context\n const { response } = ctx;\n\n // If no balances in response, nothing to detect - pass through\n if (!response.assetsBalance) {\n return next(ctx);\n }\n\n // Get metadata from state\n const { assetsMetadata: stateMetadata } = ctx.getAssetsState();\n\n const detectedAssets: Record<AccountId, Caip19AssetId[]> = {};\n\n // Detect assets from the response that don't have metadata\n for (const [accountId, accountBalances] of Object.entries(\n response.assetsBalance,\n )) {\n const detected: Caip19AssetId[] = [];\n\n for (const assetId of Object.keys(\n accountBalances as Record<string, unknown>,\n )) {\n // Asset is detected if it does not have metadata in state\n if (!stateMetadata[assetId as Caip19AssetId]) {\n detected.push(assetId as Caip19AssetId);\n }\n }\n\n if (detected.length > 0) {\n detectedAssets[accountId] = detected;\n }\n }\n\n // Fill detectedAssets in the response\n if (Object.keys(detectedAssets).length > 0) {\n response.detectedAssets = detectedAssets;\n }\n\n // Call next() to continue the middleware chain\n return next(ctx);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"DetectionMiddleware.mjs","sourceRoot":"","sources":["../../src/middlewares/DetectionMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAkB;AAC9D,OAAO,EAAE,YAAY,EAAE,qBAAiB;AAGxC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,uBAAuB;AACvB,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAEnD,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,mBAAmB;IAAhC;QACW,SAAI,GAAG,eAAe,CAAC;IAyDlC,CAAC;IAvDC;;;;;;;;;;OAUG;IACH,IAAI,gBAAgB;QAClB,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACnD,gCAAgC;YAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;YAEzB,+DAA+D;YAC/D,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,0BAA0B;YAC1B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/D,MAAM,cAAc,GAAuC,EAAE,CAAC;YAE9D,2DAA2D;YAC3D,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CACvD,QAAQ,CAAC,aAAa,CACvB,EAAE,CAAC;gBACF,MAAM,QAAQ,GAAoB,EAAE,CAAC;gBAErC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAC/B,eAA0C,CAC3C,EAAE,CAAC;oBACF,0DAA0D;oBAC1D,IAAI,CAAC,aAAa,CAAC,OAAwB,CAAC,EAAE,CAAC;wBAC7C,QAAQ,CAAC,IAAI,CAAC,OAAwB,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,cAAc,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,sCAAsC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YAC3C,CAAC;YAED,+CAA+C;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { projectLogger, createModuleLogger } from '../logger';\nimport { forDataTypes } from '../types';\nimport type { AccountId, Caip19AssetId, Middleware } from '../types';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst CONTROLLER_NAME = 'DetectionMiddleware';\n\n// Logger for debugging\ncreateModuleLogger(projectLogger, CONTROLLER_NAME);\n\n// ============================================================================\n// DETECTION MIDDLEWARE\n// ============================================================================\n\n/**\n * DetectionMiddleware identifies assets that do not have metadata.\n *\n * This middleware:\n * - Checks assets in the response for metadata in state (via ctx.getAssetsState)\n * - Assets in response but without metadata are considered \"detected\"\n * - Fills response.detectedAssets with asset IDs per account that lack metadata\n *\n * Usage:\n * ```typescript\n * const detectionMiddleware = new DetectionMiddleware();\n * const middleware = detectionMiddleware.assetsMiddleware;\n * ```\n */\nexport class DetectionMiddleware {\n readonly name = CONTROLLER_NAME;\n\n /**\n * Get the middleware for detecting assets without metadata.\n *\n * This middleware:\n * 1. Extracts the response from context\n * 2. Detects assets from the response that don't have metadata\n * 3. Fills response.detectedAssets with detected asset IDs per account\n * 4. Calls next() to continue the middleware chain\n *\n * @returns The middleware function for the assets pipeline.\n */\n get assetsMiddleware(): Middleware {\n return forDataTypes(['balance'], async (ctx, next) => {\n // Extract response from context\n const { response } = ctx;\n\n // If no balances in response, nothing to detect - pass through\n if (!response.assetsBalance) {\n return next(ctx);\n }\n\n // Get metadata from state\n const { assetsMetadata: stateMetadata } = ctx.getAssetsState();\n\n const detectedAssets: Record<AccountId, Caip19AssetId[]> = {};\n\n // Detect assets from the response that don't have metadata\n for (const [accountId, accountBalances] of Object.entries(\n response.assetsBalance,\n )) {\n const detected: Caip19AssetId[] = [];\n\n for (const assetId of Object.keys(\n accountBalances as Record<string, unknown>,\n )) {\n // Asset is detected if it does not have metadata in state\n if (!stateMetadata[assetId as Caip19AssetId]) {\n detected.push(assetId as Caip19AssetId);\n }\n }\n\n if (detected.length > 0) {\n detectedAssets[accountId] = detected;\n }\n }\n\n // Fill detectedAssets in the response\n if (Object.keys(detectedAssets).length > 0) {\n response.detectedAssets = detectedAssets;\n }\n\n // Call next() to continue the middleware chain\n return next(ctx);\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";;;AAAA,iEAM+B;AAL7B,0HAAA,mBAAmB,OAAA","sourcesContent":["export {\n DetectionMiddleware,\n type DetectionMiddlewareOptions,\n type DetectionMiddlewareMessenger,\n type DetectionMiddlewareActions,\n type DetectionMiddlewareGetAssetsMiddlewareAction,\n} from './DetectionMiddleware';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";;;AAAA,iEAA4D;AAAnD,0HAAA,mBAAmB,OAAA","sourcesContent":["export { DetectionMiddleware } from './DetectionMiddleware';\n"]}
@@ -1,2 +1,2 @@
1
- export { DetectionMiddleware, type DetectionMiddlewareOptions, type DetectionMiddlewareMessenger, type DetectionMiddlewareActions, type DetectionMiddlewareGetAssetsMiddlewareAction, } from "./DetectionMiddleware.cjs";
1
+ export { DetectionMiddleware } from "./DetectionMiddleware.cjs";
2
2
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,4CAA4C,GAClD,kCAA8B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kCAA8B"}
@@ -1,2 +1,2 @@
1
- export { DetectionMiddleware, type DetectionMiddlewareOptions, type DetectionMiddlewareMessenger, type DetectionMiddlewareActions, type DetectionMiddlewareGetAssetsMiddlewareAction, } from "./DetectionMiddleware.mjs";
1
+ export { DetectionMiddleware } from "./DetectionMiddleware.mjs";
2
2
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,4CAA4C,GAClD,kCAA8B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kCAA8B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAKpB,kCAA8B","sourcesContent":["export {\n DetectionMiddleware,\n type DetectionMiddlewareOptions,\n type DetectionMiddlewareMessenger,\n type DetectionMiddlewareActions,\n type DetectionMiddlewareGetAssetsMiddlewareAction,\n} from './DetectionMiddleware';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kCAA8B","sourcesContent":["export { DetectionMiddleware } from './DetectionMiddleware';\n"]}