@metamask-previews/perps-controller 8.1.0-preview-5588db68c → 8.1.0-preview-138a209ad

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 (54) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/PerpsController.cjs +17 -3
  3. package/dist/PerpsController.cjs.map +1 -1
  4. package/dist/PerpsController.d.cts.map +1 -1
  5. package/dist/PerpsController.d.mts.map +1 -1
  6. package/dist/PerpsController.mjs +17 -3
  7. package/dist/PerpsController.mjs.map +1 -1
  8. package/dist/constants/perpsConfig.cjs +16 -1
  9. package/dist/constants/perpsConfig.cjs.map +1 -1
  10. package/dist/constants/perpsConfig.d.cts +15 -0
  11. package/dist/constants/perpsConfig.d.cts.map +1 -1
  12. package/dist/constants/perpsConfig.d.mts +15 -0
  13. package/dist/constants/perpsConfig.d.mts.map +1 -1
  14. package/dist/constants/perpsConfig.mjs +15 -0
  15. package/dist/constants/perpsConfig.mjs.map +1 -1
  16. package/dist/services/MarketDataService.cjs +77 -9
  17. package/dist/services/MarketDataService.cjs.map +1 -1
  18. package/dist/services/MarketDataService.d.cts +13 -2
  19. package/dist/services/MarketDataService.d.cts.map +1 -1
  20. package/dist/services/MarketDataService.d.mts +13 -2
  21. package/dist/services/MarketDataService.d.mts.map +1 -1
  22. package/dist/services/MarketDataService.mjs +77 -9
  23. package/dist/services/MarketDataService.mjs.map +1 -1
  24. package/dist/services/TerminalMarketService.cjs +175 -0
  25. package/dist/services/TerminalMarketService.cjs.map +1 -0
  26. package/dist/services/TerminalMarketService.d.cts +48 -0
  27. package/dist/services/TerminalMarketService.d.cts.map +1 -0
  28. package/dist/services/TerminalMarketService.d.mts +48 -0
  29. package/dist/services/TerminalMarketService.d.mts.map +1 -0
  30. package/dist/services/TerminalMarketService.mjs +171 -0
  31. package/dist/services/TerminalMarketService.mjs.map +1 -0
  32. package/dist/types/index.cjs.map +1 -1
  33. package/dist/types/index.d.cts +18 -0
  34. package/dist/types/index.d.cts.map +1 -1
  35. package/dist/types/index.d.mts +18 -0
  36. package/dist/types/index.d.mts.map +1 -1
  37. package/dist/types/index.mjs.map +1 -1
  38. package/dist/utils/marketDataTransform.cjs +14 -8
  39. package/dist/utils/marketDataTransform.cjs.map +1 -1
  40. package/dist/utils/marketDataTransform.d.cts +5 -1
  41. package/dist/utils/marketDataTransform.d.cts.map +1 -1
  42. package/dist/utils/marketDataTransform.d.mts +5 -1
  43. package/dist/utils/marketDataTransform.d.mts.map +1 -1
  44. package/dist/utils/marketDataTransform.mjs +14 -8
  45. package/dist/utils/marketDataTransform.mjs.map +1 -1
  46. package/dist/utils/marketSearch.cjs +28 -2
  47. package/dist/utils/marketSearch.cjs.map +1 -1
  48. package/dist/utils/marketSearch.d.cts +4 -3
  49. package/dist/utils/marketSearch.d.cts.map +1 -1
  50. package/dist/utils/marketSearch.d.mts +4 -3
  51. package/dist/utils/marketSearch.d.mts.map +1 -1
  52. package/dist/utils/marketSearch.mjs +28 -2
  53. package/dist/utils/marketSearch.mjs.map +1 -1
  54. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -7,8 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - Add Terminal API integration for market data behind `perpsTerminalApiMarkets` feature flag ([#TBD](https://github.com/MetaMask/core/pull/TBD))
13
+ - `TerminalMarketService` fetches structured market metadata from `{terminalApiBaseUrl}/perpetuals` with a 5-minute cache TTL.
14
+ - When enabled, `getMarkets()` attempts the Terminal API first; on failure or empty response, falls back silently to HyperLiquid.
15
+ - `getMarketDataWithPrices()` enriches provider data with Terminal API metadata (name, keywords, tags, categories).
16
+ - `PerpsPlatformDependencies` gains a required `terminalApiBaseUrl: string` field; clients must inject the correct environment URL.
17
+ - `PerpsMarketData` gains optional `keywords`, `tags`, and `categories` fields.
18
+ - `transformMarketData()` accepts optional `terminalMetadata` parameter to override static name/category maps per symbol.
19
+ - Market search (`getMarketMatchRank`, `rankMarketsByQuery`) now indexes the `keywords` field for richer search results.
20
+ - `HYPERLIQUID_ASSET_NAMES` and `HIP3_ASSET_MARKET_TYPES` remain intact as fallback for assets absent from the Terminal API.
21
+
10
22
  ### Changed
11
23
 
24
+ - Replace unsafe `as` type cast with runtime schema validation (`@metamask/superstruct`) in `TerminalMarketService` ([#TBD](https://github.com/MetaMask/core/pull/TBD))
25
+ - Each item in the Terminal API response is now individually validated; items that fail validation are filtered out and logged instead of silently accepted.
12
26
  - Bump `@metamask/utils` from `^11.9.0` to `^11.11.0` ([#9074](https://github.com/MetaMask/core/pull/9074))
13
27
 
14
28
  ## [8.1.0]
@@ -10,7 +10,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
10
10
  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");
11
11
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
12
  };
13
- var _PerpsController_instances, _a, _PerpsController_initializationPromise, _PerpsController_isReinitializing, _PerpsController_myxRegistrationPromise, _PerpsController_blockedRegionListVersion, _PerpsController_hip3Enabled, _PerpsController_hip3AllowlistMarkets, _PerpsController_hip3BlocklistMarkets, _PerpsController_hip3ConfigSource, _PerpsController_isMYXProviderEnabled, _PerpsController_standaloneProvider, _PerpsController_handlersRegistered, _PerpsController_standaloneProviderIsTestnet, _PerpsController_standaloneProviderHip3Version, _PerpsController_eligibilityCheckDeferred, _PerpsController_options, _PerpsController_tradingService, _PerpsController_marketDataService, _PerpsController_accountService, _PerpsController_eligibilityService, _PerpsController_dataLakeService, _PerpsController_depositService, _PerpsController_featureFlagConfigurationService, _PerpsController_rewardsIntegrationService, _PerpsController_logError, _PerpsController_debugLog, _PerpsController_getAggregatedCacheProviderIds, _PerpsController_getOrCreateStandaloneProvider, _PerpsController_cleanupStandaloneProvider, _PerpsController_getMetrics, _PerpsController_findNetworkClientIdForChain, _PerpsController_submitTransaction, _PerpsController_migrateRequestsIfNeeded, _PerpsController_withStreamPause, _PerpsController_performInitialization, _PerpsController_createProviders, _PerpsController_assignActiveProvider, _PerpsController_getErrorContext, _PerpsController_getControllerState, _PerpsController_createServiceContext, _PerpsController_ensureTradingServiceDeps, _PerpsController_preloadWatchedPaths, _PerpsController_preloadTimer, _PerpsController_isPreloading, _PerpsController_isPreloadingUserData, _PerpsController_preloadStateUnsubscribe, _PerpsController_accountChangeUnsubscribe, _PerpsController_previousIsTestnet, _PerpsController_previousHip3ConfigVersion, _PerpsController_preloadRefreshMs, _PerpsController_preloadGuardMs, _PerpsController_hydrateCacheFromDiskSync, _PerpsController_performMarketDataPreload, _PerpsController_performUserDataPreload;
13
+ var _PerpsController_instances, _a, _PerpsController_initializationPromise, _PerpsController_isReinitializing, _PerpsController_myxRegistrationPromise, _PerpsController_blockedRegionListVersion, _PerpsController_hip3Enabled, _PerpsController_hip3AllowlistMarkets, _PerpsController_hip3BlocklistMarkets, _PerpsController_hip3ConfigSource, _PerpsController_isMYXProviderEnabled, _PerpsController_isTerminalApiEnabled, _PerpsController_standaloneProvider, _PerpsController_handlersRegistered, _PerpsController_standaloneProviderIsTestnet, _PerpsController_standaloneProviderHip3Version, _PerpsController_eligibilityCheckDeferred, _PerpsController_options, _PerpsController_tradingService, _PerpsController_marketDataService, _PerpsController_terminalMarketService, _PerpsController_accountService, _PerpsController_eligibilityService, _PerpsController_dataLakeService, _PerpsController_depositService, _PerpsController_featureFlagConfigurationService, _PerpsController_rewardsIntegrationService, _PerpsController_logError, _PerpsController_debugLog, _PerpsController_getAggregatedCacheProviderIds, _PerpsController_getOrCreateStandaloneProvider, _PerpsController_cleanupStandaloneProvider, _PerpsController_getMetrics, _PerpsController_findNetworkClientIdForChain, _PerpsController_submitTransaction, _PerpsController_migrateRequestsIfNeeded, _PerpsController_withStreamPause, _PerpsController_performInitialization, _PerpsController_createProviders, _PerpsController_assignActiveProvider, _PerpsController_getErrorContext, _PerpsController_getControllerState, _PerpsController_createServiceContext, _PerpsController_ensureTradingServiceDeps, _PerpsController_preloadWatchedPaths, _PerpsController_preloadTimer, _PerpsController_isPreloading, _PerpsController_isPreloadingUserData, _PerpsController_preloadStateUnsubscribe, _PerpsController_accountChangeUnsubscribe, _PerpsController_previousIsTestnet, _PerpsController_previousHip3ConfigVersion, _PerpsController_preloadRefreshMs, _PerpsController_preloadGuardMs, _PerpsController_hydrateCacheFromDiskSync, _PerpsController_performMarketDataPreload, _PerpsController_performUserDataPreload;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.PerpsController = exports.getDefaultPerpsControllerState = exports.InitializationState = exports.PERPS_ERROR_CODES = exports.resolveMyxAuthConfig = exports.firstNonEmpty = void 0;
16
16
  const base_controller_1 = require("@metamask/base-controller");
@@ -31,6 +31,7 @@ const EligibilityService_1 = require("./services/EligibilityService.cjs");
31
31
  const FeatureFlagConfigurationService_1 = require("./services/FeatureFlagConfigurationService.cjs");
32
32
  const MarketDataService_1 = require("./services/MarketDataService.cjs");
33
33
  const RewardsIntegrationService_1 = require("./services/RewardsIntegrationService.cjs");
34
+ const TerminalMarketService_1 = require("./services/TerminalMarketService.cjs");
34
35
  const TradingService_1 = require("./services/TradingService.cjs");
35
36
  // PerpsStreamChannelKey removed: using string for channel keys (PerpsStreamManager.pauseChannel takes string)
36
37
  const types_1 = require("./types/index.cjs");
@@ -478,6 +479,7 @@ class PerpsController extends base_controller_1.BaseController {
478
479
  // Service instances (instantiated with platform dependencies)
479
480
  _PerpsController_tradingService.set(this, void 0);
480
481
  _PerpsController_marketDataService.set(this, void 0);
482
+ _PerpsController_terminalMarketService.set(this, void 0);
481
483
  _PerpsController_accountService.set(this, void 0);
482
484
  _PerpsController_eligibilityService.set(this, void 0);
483
485
  _PerpsController_dataLakeService.set(this, void 0);
@@ -502,7 +504,8 @@ class PerpsController extends base_controller_1.BaseController {
502
504
  // Instantiate services with platform dependencies
503
505
  // Services that need cross-controller access receive the messenger
504
506
  __classPrivateFieldSet(this, _PerpsController_tradingService, new TradingService_1.TradingService(infrastructure), "f");
505
- __classPrivateFieldSet(this, _PerpsController_marketDataService, new MarketDataService_1.MarketDataService(infrastructure), "f");
507
+ __classPrivateFieldSet(this, _PerpsController_terminalMarketService, new TerminalMarketService_1.TerminalMarketService(infrastructure), "f");
508
+ __classPrivateFieldSet(this, _PerpsController_marketDataService, new MarketDataService_1.MarketDataService(infrastructure, __classPrivateFieldGet(this, _PerpsController_terminalMarketService, "f")), "f");
506
509
  __classPrivateFieldSet(this, _PerpsController_accountService, new AccountService_1.AccountService(infrastructure, messenger), "f");
507
510
  __classPrivateFieldSet(this, _PerpsController_eligibilityService, new EligibilityService_1.EligibilityService(infrastructure), "f");
508
511
  __classPrivateFieldSet(this, _PerpsController_dataLakeService, new DataLakeService_1.DataLakeService(infrastructure, messenger), "f");
@@ -1605,6 +1608,7 @@ class PerpsController extends base_controller_1.BaseController {
1605
1608
  provider,
1606
1609
  params,
1607
1610
  context: __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_createServiceContext).call(this, 'getMarkets'),
1611
+ useTerminalApi: __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isTerminalApiEnabled).call(this),
1608
1612
  });
1609
1613
  }
1610
1614
  /**
@@ -1631,6 +1635,7 @@ class PerpsController extends base_controller_1.BaseController {
1631
1635
  provider,
1632
1636
  params,
1633
1637
  context: __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_createServiceContext).call(this, 'getMarketDataWithPrices'),
1638
+ useTerminalApi: __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isTerminalApiEnabled).call(this),
1634
1639
  });
1635
1640
  }
1636
1641
  const provider = this.getActiveProvider();
@@ -1638,6 +1643,7 @@ class PerpsController extends base_controller_1.BaseController {
1638
1643
  provider,
1639
1644
  params,
1640
1645
  context: __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_createServiceContext).call(this, 'getMarketDataWithPrices'),
1646
+ useTerminalApi: __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isTerminalApiEnabled).call(this),
1641
1647
  });
1642
1648
  }
1643
1649
  /**
@@ -3011,7 +3017,7 @@ class PerpsController extends base_controller_1.BaseController {
3011
3017
  }
3012
3018
  }
3013
3019
  exports.PerpsController = PerpsController;
3014
- _a = PerpsController, _PerpsController_initializationPromise = new WeakMap(), _PerpsController_isReinitializing = new WeakMap(), _PerpsController_myxRegistrationPromise = new WeakMap(), _PerpsController_blockedRegionListVersion = new WeakMap(), _PerpsController_hip3Enabled = new WeakMap(), _PerpsController_hip3AllowlistMarkets = new WeakMap(), _PerpsController_hip3BlocklistMarkets = new WeakMap(), _PerpsController_hip3ConfigSource = new WeakMap(), _PerpsController_standaloneProvider = new WeakMap(), _PerpsController_handlersRegistered = new WeakMap(), _PerpsController_standaloneProviderIsTestnet = new WeakMap(), _PerpsController_standaloneProviderHip3Version = new WeakMap(), _PerpsController_eligibilityCheckDeferred = new WeakMap(), _PerpsController_options = new WeakMap(), _PerpsController_tradingService = new WeakMap(), _PerpsController_marketDataService = new WeakMap(), _PerpsController_accountService = new WeakMap(), _PerpsController_eligibilityService = new WeakMap(), _PerpsController_dataLakeService = new WeakMap(), _PerpsController_depositService = new WeakMap(), _PerpsController_featureFlagConfigurationService = new WeakMap(), _PerpsController_rewardsIntegrationService = new WeakMap(), _PerpsController_preloadTimer = new WeakMap(), _PerpsController_isPreloading = new WeakMap(), _PerpsController_isPreloadingUserData = new WeakMap(), _PerpsController_preloadStateUnsubscribe = new WeakMap(), _PerpsController_accountChangeUnsubscribe = new WeakMap(), _PerpsController_previousIsTestnet = new WeakMap(), _PerpsController_previousHip3ConfigVersion = new WeakMap(), _PerpsController_instances = new WeakSet(), _PerpsController_isMYXProviderEnabled = function _PerpsController_isMYXProviderEnabled() {
3020
+ _a = PerpsController, _PerpsController_initializationPromise = new WeakMap(), _PerpsController_isReinitializing = new WeakMap(), _PerpsController_myxRegistrationPromise = new WeakMap(), _PerpsController_blockedRegionListVersion = new WeakMap(), _PerpsController_hip3Enabled = new WeakMap(), _PerpsController_hip3AllowlistMarkets = new WeakMap(), _PerpsController_hip3BlocklistMarkets = new WeakMap(), _PerpsController_hip3ConfigSource = new WeakMap(), _PerpsController_standaloneProvider = new WeakMap(), _PerpsController_handlersRegistered = new WeakMap(), _PerpsController_standaloneProviderIsTestnet = new WeakMap(), _PerpsController_standaloneProviderHip3Version = new WeakMap(), _PerpsController_eligibilityCheckDeferred = new WeakMap(), _PerpsController_options = new WeakMap(), _PerpsController_tradingService = new WeakMap(), _PerpsController_marketDataService = new WeakMap(), _PerpsController_terminalMarketService = new WeakMap(), _PerpsController_accountService = new WeakMap(), _PerpsController_eligibilityService = new WeakMap(), _PerpsController_dataLakeService = new WeakMap(), _PerpsController_depositService = new WeakMap(), _PerpsController_featureFlagConfigurationService = new WeakMap(), _PerpsController_rewardsIntegrationService = new WeakMap(), _PerpsController_preloadTimer = new WeakMap(), _PerpsController_isPreloading = new WeakMap(), _PerpsController_isPreloadingUserData = new WeakMap(), _PerpsController_preloadStateUnsubscribe = new WeakMap(), _PerpsController_accountChangeUnsubscribe = new WeakMap(), _PerpsController_previousIsTestnet = new WeakMap(), _PerpsController_previousHip3ConfigVersion = new WeakMap(), _PerpsController_instances = new WeakSet(), _PerpsController_isMYXProviderEnabled = function _PerpsController_isMYXProviderEnabled() {
3015
3021
  const myx = __classPrivateFieldGet(this, _PerpsController_options, "f").clientConfig?.providerCredentials?.myx;
3016
3022
  // Local env-var override (MM_PERPS_MYX_PROVIDER_ENABLED) always wins —
3017
3023
  // matches the UI selector (resolvePerpsMyxProviderEnabled) so controller
@@ -3040,6 +3046,14 @@ _a = PerpsController, _PerpsController_initializationPromise = new WeakMap(), _P
3040
3046
  catch {
3041
3047
  return false;
3042
3048
  }
3049
+ }, _PerpsController_isTerminalApiEnabled = function _PerpsController_isTerminalApiEnabled() {
3050
+ try {
3051
+ const remoteState = this.messenger.call('RemoteFeatureFlagController:getState');
3052
+ return (remoteState.remoteFeatureFlags?.perpsTerminalApiMarkets === true);
3053
+ }
3054
+ catch {
3055
+ return false;
3056
+ }
3043
3057
  }, _PerpsController_logError = function _PerpsController_logError(error, options) {
3044
3058
  __classPrivateFieldGet(this, _PerpsController_options, "f").infrastructure.logger.error(error, options);
3045
3059
  }, _PerpsController_debugLog = function _PerpsController_debugLog(...args) {