@metamask-previews/perps-controller 15.1.0-preview-a302de5c3 → 15.1.0-preview-e12b5ece6
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.
- package/CHANGELOG.md +14 -0
- package/dist/PerpsController.cjs +19 -153
- package/dist/PerpsController.cjs.map +1 -1
- package/dist/PerpsController.d.cts +2 -42
- package/dist/PerpsController.d.cts.map +1 -1
- package/dist/PerpsController.d.mts +2 -42
- package/dist/PerpsController.d.mts.map +1 -1
- package/dist/PerpsController.mjs +18 -150
- package/dist/PerpsController.mjs.map +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.cjs +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.cjs.map +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.d.cts +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.d.mts +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.mjs +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.mjs.map +1 -1
- package/dist/constants/index.cjs +0 -1
- package/dist/constants/index.cjs.map +1 -1
- package/dist/constants/index.d.cts +0 -1
- package/dist/constants/index.d.cts.map +1 -1
- package/dist/constants/index.d.mts +0 -1
- package/dist/constants/index.d.mts.map +1 -1
- package/dist/constants/index.mjs +0 -1
- package/dist/constants/index.mjs.map +1 -1
- package/dist/constants/perpsConfig.cjs +4 -9
- package/dist/constants/perpsConfig.cjs.map +1 -1
- package/dist/constants/perpsConfig.d.cts +3 -5
- package/dist/constants/perpsConfig.d.cts.map +1 -1
- package/dist/constants/perpsConfig.d.mts +3 -5
- package/dist/constants/perpsConfig.d.mts.map +1 -1
- package/dist/constants/perpsConfig.mjs +4 -9
- package/dist/constants/perpsConfig.mjs.map +1 -1
- package/dist/index.cjs +146 -175
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.cjs +2 -2
- package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.d.cts +2 -2
- package/dist/providers/AggregatedPerpsProvider.d.mts +2 -2
- package/dist/providers/AggregatedPerpsProvider.mjs +2 -2
- package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -1
- package/dist/providers/LighterProvider.cjs +1 -1
- package/dist/providers/LighterProvider.cjs.map +1 -1
- package/dist/providers/LighterProvider.mjs +1 -1
- package/dist/providers/LighterProvider.mjs.map +1 -1
- package/dist/routing/ProviderRouter.cjs +1 -1
- package/dist/routing/ProviderRouter.cjs.map +1 -1
- package/dist/routing/ProviderRouter.d.cts +1 -1
- package/dist/routing/ProviderRouter.d.mts +1 -1
- package/dist/routing/ProviderRouter.mjs +1 -1
- package/dist/routing/ProviderRouter.mjs.map +1 -1
- package/dist/services/LighterWalletService.cjs +1 -1
- package/dist/services/LighterWalletService.cjs.map +1 -1
- package/dist/services/LighterWalletService.d.cts +1 -1
- package/dist/services/LighterWalletService.d.mts +1 -1
- package/dist/services/LighterWalletService.mjs +1 -1
- package/dist/services/LighterWalletService.mjs.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +2 -16
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.mts +2 -16
- package/dist/types/index.d.mts.map +1 -1
- package/dist/types/index.mjs.map +1 -1
- package/dist/utils/lighterAdapter.cjs +1 -2
- package/dist/utils/lighterAdapter.cjs.map +1 -1
- package/dist/utils/lighterAdapter.d.cts +1 -2
- package/dist/utils/lighterAdapter.d.cts.map +1 -1
- package/dist/utils/lighterAdapter.d.mts +1 -2
- package/dist/utils/lighterAdapter.d.mts.map +1 -1
- package/dist/utils/lighterAdapter.mjs +1 -2
- package/dist/utils/lighterAdapter.mjs.map +1 -1
- package/package.json +4 -10
- package/dist/constants/myxConfig.cjs +0 -253
- package/dist/constants/myxConfig.cjs.map +0 -1
- package/dist/constants/myxConfig.d.cts +0 -145
- package/dist/constants/myxConfig.d.cts.map +0 -1
- package/dist/constants/myxConfig.d.mts +0 -145
- package/dist/constants/myxConfig.d.mts.map +0 -1
- package/dist/constants/myxConfig.mjs +0 -243
- package/dist/constants/myxConfig.mjs.map +0 -1
- package/dist/types/myx-types.cjs +0 -41
- package/dist/types/myx-types.cjs.map +0 -1
- package/dist/types/myx-types.d.cts +0 -94
- package/dist/types/myx-types.d.cts.map +0 -1
- package/dist/types/myx-types.d.mts +0 -94
- package/dist/types/myx-types.d.mts.map +0 -1
- package/dist/types/myx-types.mjs +0 -26
- package/dist/types/myx-types.mjs.map +0 -1
- package/dist/utils/myxAdapter.cjs +0 -569
- package/dist/utils/myxAdapter.cjs.map +0 -1
- package/dist/utils/myxAdapter.d.cts +0 -168
- package/dist/utils/myxAdapter.d.cts.map +0 -1
- package/dist/utils/myxAdapter.d.mts +0 -168
- package/dist/utils/myxAdapter.d.mts.map +0 -1
- package/dist/utils/myxAdapter.mjs +0 -548
- package/dist/utils/myxAdapter.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Bump `@metamask/transaction-controller` from `^69.7.0` to `^69.8.0` ([#10080](https://github.com/MetaMask/core/pull/10080))
|
|
13
|
+
- Bump `@metamask/utils` from `^11.11.0` to `^11.12.0` ([#10076](https://github.com/MetaMask/core/pull/10076))
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- **BREAKING:** Remove all MYX protocol support ([#10038](https://github.com/MetaMask/core/pull/10038))
|
|
18
|
+
- `PerpsProviderType` is now `'hyperliquid' | 'lighter'`. Drop any `'myx'` case from exhaustive switches, and stop passing `activeProvider: 'myx'` or `providerId: 'myx'`.
|
|
19
|
+
- Removes the `MYXCredentials` type and the `providerCredentials.myx` option from `PerpsControllerOptions`, all `MYX_*` exports (chain ids, endpoints, decimals, fees, asset configs), the `getMYXChainId` / `getMYXHttpEndpoint` helpers, the `fromMYX*` / `toMYX*` converters, the MYX-only `USDT_BNB_TESTNET` / `USDT_BNB_MAINNET` addresses, and `PROVIDER_CONFIG.MYX_TESTNET_ONLY`.
|
|
20
|
+
- No migration is required for stored client state: an `activeProvider` value naming a removed venue falls back to `'hyperliquid'` and is rewritten on next launch.
|
|
21
|
+
- The `perpsMyxProviderEnabled` remote feature flag and the `MM_PERPS_MYX_PROVIDER_ENABLED` env override are no longer read; clients can retire both.
|
|
22
|
+
- HyperLiquid and Lighter behavior is unchanged.
|
|
23
|
+
|
|
10
24
|
## [15.1.0]
|
|
11
25
|
|
|
12
26
|
### Added
|
package/dist/PerpsController.cjs
CHANGED
|
@@ -10,9 +10,9 @@ 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_reinitializationOperationPromise, _PerpsController_disconnectOperationPromise,
|
|
13
|
+
var _PerpsController_instances, _a, _PerpsController_initializationPromise, _PerpsController_isReinitializing, _PerpsController_reinitializationOperationPromise, _PerpsController_disconnectOperationPromise, _PerpsController_lighterRegistrationPromise, _PerpsController_blockedRegionListVersion, _PerpsController_hip3Enabled, _PerpsController_hip3AllowlistMarkets, _PerpsController_hip3BlocklistMarkets, _PerpsController_hip3ConfigSource, _PerpsController_priceDeviationLimit, _PerpsController_attributionContext, _PerpsController_isLighterProviderEnabled, _PerpsController_standaloneProvider, _PerpsController_handlersRegistered, _PerpsController_standaloneProviderIsTestnet, _PerpsController_standaloneProviderHip3Version, _PerpsController_standaloneProviderOperations, _PerpsController_eligibilityCheckDeferred, _PerpsController_ausQueue, _PerpsController_userDiskWrite, _PerpsController_options, _PerpsController_tradingService, _PerpsController_marketDataService, _PerpsController_accountService, _PerpsController_eligibilityService, _PerpsController_dataLakeService, _PerpsController_depositService, _PerpsController_featureFlagConfigurationService, _PerpsController_rewardsIntegrationService, _PerpsController_publishChaseOrderMaxDistanceReached, _PerpsController_logError, _PerpsController_debugLog, _PerpsController_getAggregatedCacheProviderIds, _PerpsController_isMarketCacheEntryCurrent, _PerpsController_isUserCacheIdentityCurrent, _PerpsController_fetchAndCacheUserDataSnapshot, _PerpsController_getOrCreateStandaloneProvider, _PerpsController_trackStandaloneProviderOperation, _PerpsController_retireStandaloneProvider, _PerpsController_cleanupStandaloneProvider, _PerpsController_getMetrics, _PerpsController_findNetworkClientIdForChain, _PerpsController_submitTransaction, _PerpsController_migrateRequestsIfNeeded, _PerpsController_withStreamPause, _PerpsController_initWithoutDisconnectWait, _PerpsController_beginReinitialization, _PerpsController_performInitialization, _PerpsController_createProviders, _PerpsController_assignActiveProvider, _PerpsController_getErrorContext, _PerpsController_getControllerState, _PerpsController_buildMarketAllowedFilter, _PerpsController_compilePatternsSafely, _PerpsController_createServiceContext, _PerpsController_ensureTradingServiceDeps, _PerpsController_getActiveProviderWhenReady, _PerpsController_getUnavailableScalePriceLadder, _PerpsController_getUnavailableOrderCapabilities, _PerpsController_getDirectProviderId, _PerpsController_hasConflictingProviderRoute, _PerpsController_resolveRoutedOrderProvider, _PerpsController_buildGlobalSnapshotContext, _PerpsController_getStaticSnapshotDexes, _PerpsController_preloadWatchedPaths, _PerpsController_preloadTimer, _PerpsController_preloadStartRequested, _PerpsController_isPreloading, _PerpsController_marketPreloadQueued, _PerpsController_isPreloadingUserData, _PerpsController_userPreloadQueued, _PerpsController_lifecycleGeneration, _PerpsController_userSnapshotRequests, _PerpsController_preloadStateUnsubscribe, _PerpsController_accountChangeUnsubscribe, _PerpsController_previousIsTestnet, _PerpsController_previousHip3ConfigVersion, _PerpsController_preloadRefreshMs, _PerpsController_preloadGuardMs, _PerpsController_hydrateCacheFromDiskSync, _PerpsController_persistUserCacheToDisk, _PerpsController_performMarketDataPreload, _PerpsController_performUserDataPreload, _PerpsController_performDisconnect, _PerpsController_persistWatchlistToRemote, _PerpsController_syncWatchlistFromRemote;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.PerpsController = exports.getDefaultPerpsControllerState = exports.DEFAULT_SELECTED_ORDER_TYPE = exports.DEFAULT_PRO_LAYOUT_PREFERENCES = exports.DEFAULT_PERPS_MODE = exports.DEFAULT_ORDER_BOOK_PREFERENCES = exports.PerpsMode = exports.InitializationState = exports.PERPS_ERROR_CODES = exports.
|
|
15
|
+
exports.PerpsController = exports.getDefaultPerpsControllerState = exports.DEFAULT_SELECTED_ORDER_TYPE = exports.DEFAULT_PRO_LAYOUT_PREFERENCES = exports.DEFAULT_PERPS_MODE = exports.DEFAULT_ORDER_BOOK_PREFERENCES = exports.PerpsMode = exports.InitializationState = exports.PERPS_ERROR_CODES = exports.resolveWatchlistExchangeKey = void 0;
|
|
16
16
|
const base_controller_1 = require("@metamask/base-controller");
|
|
17
17
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
18
18
|
const uuid_1 = require("uuid");
|
|
@@ -72,17 +72,6 @@ function cloneUserDataSnapshot(snapshot) {
|
|
|
72
72
|
},
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Returns the first non-empty string from the given values.
|
|
77
|
-
* Env vars default to '' (not null/undefined), so ?? wouldn't fall through.
|
|
78
|
-
*
|
|
79
|
-
* @param vals - String values to check in order.
|
|
80
|
-
* @returns The first non-empty string, or '' if all are empty/undefined.
|
|
81
|
-
*/
|
|
82
|
-
function firstNonEmpty(...vals) {
|
|
83
|
-
return (vals.find((val) => val !== null && val !== undefined && val !== '') ?? '');
|
|
84
|
-
}
|
|
85
|
-
exports.firstNonEmpty = firstNonEmpty;
|
|
86
75
|
/**
|
|
87
76
|
* Maps an active provider mode to the corresponding exchange key used in the
|
|
88
77
|
* AUS {@link PerpsWatchlistMarkets} schema.
|
|
@@ -98,33 +87,10 @@ exports.firstNonEmpty = firstNonEmpty;
|
|
|
98
87
|
function resolveWatchlistExchangeKey(activeProvider) {
|
|
99
88
|
const map = {
|
|
100
89
|
hyperliquid: 'hyperliquid',
|
|
101
|
-
myx: 'myx',
|
|
102
90
|
};
|
|
103
91
|
return map[activeProvider] ?? null;
|
|
104
92
|
}
|
|
105
93
|
exports.resolveWatchlistExchangeKey = resolveWatchlistExchangeKey;
|
|
106
|
-
/**
|
|
107
|
-
* Resolves MYX auth config from provider credentials, handling
|
|
108
|
-
* testnet/mainnet fallback logic.
|
|
109
|
-
*
|
|
110
|
-
* @param myx - MYX provider credentials.
|
|
111
|
-
* @param isTestnet - Whether the controller is in testnet mode.
|
|
112
|
-
* @returns Resolved appId, apiSecret, and brokerAddress.
|
|
113
|
-
*/
|
|
114
|
-
function resolveMyxAuthConfig(myx, isTestnet) {
|
|
115
|
-
return {
|
|
116
|
-
appId: isTestnet
|
|
117
|
-
? (myx.appIdTestnet ?? '')
|
|
118
|
-
: firstNonEmpty(myx.appIdMainnet, myx.appIdTestnet),
|
|
119
|
-
apiSecret: isTestnet
|
|
120
|
-
? (myx.apiSecretTestnet ?? '')
|
|
121
|
-
: firstNonEmpty(myx.apiSecretMainnet, myx.apiSecretTestnet),
|
|
122
|
-
brokerAddress: isTestnet
|
|
123
|
-
? (myx.brokerAddressTestnet ?? '')
|
|
124
|
-
: firstNonEmpty(myx.brokerAddressMainnet, myx.brokerAddressTestnet),
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
exports.resolveMyxAuthConfig = resolveMyxAuthConfig;
|
|
128
94
|
// Re-export error codes from separate file to avoid circular dependencies
|
|
129
95
|
var perpsErrorCodes_js_2 = require("./perpsErrorCodes.cjs");
|
|
130
96
|
Object.defineProperty(exports, "PERPS_ERROR_CODES", { enumerable: true, get: function () { return perpsErrorCodes_js_2.PERPS_ERROR_CODES; } });
|
|
@@ -152,7 +118,6 @@ Object.defineProperty(exports, "DEFAULT_SELECTED_ORDER_TYPE", { enumerable: true
|
|
|
152
118
|
* To change the active provider, modify the `activeProvider` value below:
|
|
153
119
|
* - 'hyperliquid': HyperLiquid provider (default, production)
|
|
154
120
|
* - 'aggregated': Multi-provider aggregation mode
|
|
155
|
-
* - 'myx': MYX provider (future implementation)
|
|
156
121
|
*
|
|
157
122
|
* @returns The default perps controller state.
|
|
158
123
|
*/
|
|
@@ -575,8 +540,6 @@ class PerpsController extends base_controller_1.BaseController {
|
|
|
575
540
|
_PerpsController_isReinitializing.set(this, false);
|
|
576
541
|
_PerpsController_reinitializationOperationPromise.set(this, null);
|
|
577
542
|
_PerpsController_disconnectOperationPromise.set(this, null);
|
|
578
|
-
/** Tracks the async MYX dynamic import so performInitialization can await it. */
|
|
579
|
-
_PerpsController_myxRegistrationPromise.set(this, null);
|
|
580
543
|
_PerpsController_lighterRegistrationPromise.set(this, null);
|
|
581
544
|
this.blockedRegionList = {
|
|
582
545
|
list: [],
|
|
@@ -606,7 +569,7 @@ class PerpsController extends base_controller_1.BaseController {
|
|
|
606
569
|
_PerpsController_attributionContext.set(this, {});
|
|
607
570
|
/**
|
|
608
571
|
* Active provider instance for routing operations.
|
|
609
|
-
* When activeProvider is 'hyperliquid' or '
|
|
572
|
+
* When activeProvider is 'hyperliquid' or 'lighter': points to specific provider directly
|
|
610
573
|
* When activeProvider is 'aggregated': points to AggregatedPerpsProvider wrapper
|
|
611
574
|
*/
|
|
612
575
|
this.activeProviderInstance = null;
|
|
@@ -1025,50 +988,6 @@ class PerpsController extends base_controller_1.BaseController {
|
|
|
1025
988
|
return __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_initWithoutDisconnectWait).call(this);
|
|
1026
989
|
}
|
|
1027
990
|
}
|
|
1028
|
-
/**
|
|
1029
|
-
* Registers the MYX provider after dynamic import resolves.
|
|
1030
|
-
*
|
|
1031
|
-
* Extracted from the import().then() callback so it can be tested directly
|
|
1032
|
-
* (Jest cannot resolve dynamic imports without --experimental-vm-modules).
|
|
1033
|
-
*
|
|
1034
|
-
* @param MYXProvider - Constructor class for the MYX provider.
|
|
1035
|
-
*/
|
|
1036
|
-
registerMYXProvider(MYXProvider) {
|
|
1037
|
-
if (typeof MYXProvider !== 'function') {
|
|
1038
|
-
return;
|
|
1039
|
-
}
|
|
1040
|
-
const myxIsTestnet = perpsConfig_js_1.PROVIDER_CONFIG.MYX_TESTNET_ONLY || this.state.isTestnet;
|
|
1041
|
-
const myx = __classPrivateFieldGet(this, _PerpsController_options, "f").clientConfig?.providerCredentials?.myx ?? {};
|
|
1042
|
-
const myxAuthConfig = resolveMyxAuthConfig(myx, myxIsTestnet);
|
|
1043
|
-
const MYXProviderConstructor = MYXProvider;
|
|
1044
|
-
const myxProvider = new MYXProviderConstructor({
|
|
1045
|
-
isTestnet: myxIsTestnet,
|
|
1046
|
-
platformDependencies: __classPrivateFieldGet(this, _PerpsController_options, "f").infrastructure,
|
|
1047
|
-
messenger: this.messenger,
|
|
1048
|
-
myxAuthConfig,
|
|
1049
|
-
});
|
|
1050
|
-
this.providers.set('myx', myxProvider);
|
|
1051
|
-
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_debugLog).call(this, 'PerpsController: MYX provider registered', {
|
|
1052
|
-
isTestnet: myxIsTestnet,
|
|
1053
|
-
});
|
|
1054
|
-
}
|
|
1055
|
-
/**
|
|
1056
|
-
* Handles errors from the MYX dynamic import.
|
|
1057
|
-
*
|
|
1058
|
-
* Module-not-found errors are expected (extension doesn't ship MYX) → debug log.
|
|
1059
|
-
* Other errors indicate constructor/config problems → Sentry via logError.
|
|
1060
|
-
*
|
|
1061
|
-
* @param error - The caught error from the dynamic import or constructor.
|
|
1062
|
-
*/
|
|
1063
|
-
handleMYXImportError(error) {
|
|
1064
|
-
const isModuleError = error?.code === 'MODULE_NOT_FOUND';
|
|
1065
|
-
if (isModuleError) {
|
|
1066
|
-
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_debugLog).call(this, 'PerpsController: MYX provider module not available, skipping registration');
|
|
1067
|
-
}
|
|
1068
|
-
else {
|
|
1069
|
-
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_logError).call(this, error instanceof Error ? error : new Error(String(error)), __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_getErrorContext).call(this, 'createProviders.myx'));
|
|
1070
|
-
}
|
|
1071
|
-
}
|
|
1072
991
|
/**
|
|
1073
992
|
* Registers the Lighter provider after dynamic import resolves.
|
|
1074
993
|
*
|
|
@@ -1888,7 +1807,7 @@ class PerpsController extends base_controller_1.BaseController {
|
|
|
1888
1807
|
if (params?.standalone && params.userAddress) {
|
|
1889
1808
|
// Use activeProviderInstance if available (respects provider abstraction)
|
|
1890
1809
|
// Fallback to cached standalone provider for pre-initialization discovery
|
|
1891
|
-
// TODO: When adding new providers
|
|
1810
|
+
// TODO: When adding new providers, consider a provider factory pattern
|
|
1892
1811
|
const provider = this.activeProviderInstance ?? __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_getOrCreateStandaloneProvider).call(this);
|
|
1893
1812
|
const operation = provider.getPositions(params);
|
|
1894
1813
|
return provider === __classPrivateFieldGet(this, _PerpsController_standaloneProvider, "f")
|
|
@@ -3874,36 +3793,7 @@ class PerpsController extends base_controller_1.BaseController {
|
|
|
3874
3793
|
}
|
|
3875
3794
|
}
|
|
3876
3795
|
exports.PerpsController = PerpsController;
|
|
3877
|
-
_a = PerpsController, _PerpsController_initializationPromise = new WeakMap(), _PerpsController_isReinitializing = new WeakMap(), _PerpsController_reinitializationOperationPromise = new WeakMap(), _PerpsController_disconnectOperationPromise = new WeakMap(),
|
|
3878
|
-
const myx = __classPrivateFieldGet(this, _PerpsController_options, "f").clientConfig?.providerCredentials?.myx;
|
|
3879
|
-
// Local env-var override (MM_PERPS_MYX_PROVIDER_ENABLED) always wins —
|
|
3880
|
-
// matches the UI selector (resolvePerpsMyxProviderEnabled) so controller
|
|
3881
|
-
// and UI agree on whether MYX is available.
|
|
3882
|
-
if (myx?.enabled) {
|
|
3883
|
-
return true;
|
|
3884
|
-
}
|
|
3885
|
-
// Credentials present → MYX is enabled regardless of remote flag.
|
|
3886
|
-
// Use || so empty-string env vars (default '') fall through.
|
|
3887
|
-
const hasCredentials = Boolean(
|
|
3888
|
-
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
3889
|
-
myx?.appIdTestnet || myx?.appIdMainnet);
|
|
3890
|
-
if (hasCredentials) {
|
|
3891
|
-
return true;
|
|
3892
|
-
}
|
|
3893
|
-
// No local override or credentials — check remote flag as fallback
|
|
3894
|
-
try {
|
|
3895
|
-
const remoteState = this.messenger.call('RemoteFeatureFlagController:getState');
|
|
3896
|
-
const remoteFlag = remoteState.remoteFeatureFlags?.perpsMyxProviderEnabled;
|
|
3897
|
-
if ((0, index_js_1.isVersionGatedFeatureFlag)(remoteFlag)) {
|
|
3898
|
-
const validated = __classPrivateFieldGet(this, _PerpsController_options, "f").infrastructure.featureFlags.validateVersionGated(remoteFlag);
|
|
3899
|
-
return validated ?? false;
|
|
3900
|
-
}
|
|
3901
|
-
return false;
|
|
3902
|
-
}
|
|
3903
|
-
catch {
|
|
3904
|
-
return false;
|
|
3905
|
-
}
|
|
3906
|
-
}, _PerpsController_isLighterProviderEnabled = function _PerpsController_isLighterProviderEnabled() {
|
|
3796
|
+
_a = PerpsController, _PerpsController_initializationPromise = new WeakMap(), _PerpsController_isReinitializing = new WeakMap(), _PerpsController_reinitializationOperationPromise = new WeakMap(), _PerpsController_disconnectOperationPromise = new WeakMap(), _PerpsController_lighterRegistrationPromise = new WeakMap(), _PerpsController_blockedRegionListVersion = new WeakMap(), _PerpsController_hip3Enabled = new WeakMap(), _PerpsController_hip3AllowlistMarkets = new WeakMap(), _PerpsController_hip3BlocklistMarkets = new WeakMap(), _PerpsController_hip3ConfigSource = new WeakMap(), _PerpsController_priceDeviationLimit = new WeakMap(), _PerpsController_attributionContext = new WeakMap(), _PerpsController_standaloneProvider = new WeakMap(), _PerpsController_handlersRegistered = new WeakMap(), _PerpsController_standaloneProviderIsTestnet = new WeakMap(), _PerpsController_standaloneProviderHip3Version = new WeakMap(), _PerpsController_standaloneProviderOperations = new WeakMap(), _PerpsController_eligibilityCheckDeferred = new WeakMap(), _PerpsController_ausQueue = new WeakMap(), _PerpsController_userDiskWrite = 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_publishChaseOrderMaxDistanceReached = new WeakMap(), _PerpsController_preloadTimer = new WeakMap(), _PerpsController_preloadStartRequested = new WeakMap(), _PerpsController_isPreloading = new WeakMap(), _PerpsController_marketPreloadQueued = new WeakMap(), _PerpsController_isPreloadingUserData = new WeakMap(), _PerpsController_userPreloadQueued = new WeakMap(), _PerpsController_lifecycleGeneration = new WeakMap(), _PerpsController_userSnapshotRequests = new WeakMap(), _PerpsController_preloadStateUnsubscribe = new WeakMap(), _PerpsController_accountChangeUnsubscribe = new WeakMap(), _PerpsController_previousIsTestnet = new WeakMap(), _PerpsController_previousHip3ConfigVersion = new WeakMap(), _PerpsController_instances = new WeakSet(), _PerpsController_isLighterProviderEnabled = function _PerpsController_isLighterProviderEnabled() {
|
|
3907
3797
|
const lighter = __classPrivateFieldGet(this, _PerpsController_options, "f").clientConfig?.providerCredentials?.lighter;
|
|
3908
3798
|
if (lighter?.enabled) {
|
|
3909
3799
|
return true;
|
|
@@ -3941,7 +3831,6 @@ _a = PerpsController, _PerpsController_initializationPromise = new WeakMap(), _P
|
|
|
3941
3831
|
continue;
|
|
3942
3832
|
}
|
|
3943
3833
|
if (providerId === 'hyperliquid' ||
|
|
3944
|
-
(providerId === 'myx' && __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isMYXProviderEnabled).call(this)) ||
|
|
3945
3834
|
(providerId === 'lighter' && __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isLighterProviderEnabled).call(this)) ||
|
|
3946
3835
|
this.providers.has(providerId)) {
|
|
3947
3836
|
providerIds.add(providerId);
|
|
@@ -4286,15 +4175,13 @@ async function _PerpsController_performInitialization() {
|
|
|
4286
4175
|
this.providers.clear();
|
|
4287
4176
|
await __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_cleanupStandaloneProvider).call(this);
|
|
4288
4177
|
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_createProviders).call(this);
|
|
4289
|
-
// Await
|
|
4290
|
-
// map before we assign the active provider. Runs concurrently
|
|
4291
|
-
// the WebSocket readiness delay for zero additional latency.
|
|
4178
|
+
// Await the Lighter dynamic import (if started) so Lighter is in the
|
|
4179
|
+
// providers map before we assign the active provider. Runs concurrently
|
|
4180
|
+
// with the WebSocket readiness delay for zero additional latency.
|
|
4292
4181
|
await Promise.all([
|
|
4293
4182
|
(0, wait_js_1.wait)(perpsConfig_js_1.PERPS_CONSTANTS.ReconnectionCleanupDelayMs),
|
|
4294
|
-
__classPrivateFieldGet(this, _PerpsController_myxRegistrationPromise, "f"),
|
|
4295
4183
|
__classPrivateFieldGet(this, _PerpsController_lighterRegistrationPromise, "f"),
|
|
4296
4184
|
]);
|
|
4297
|
-
__classPrivateFieldSet(this, _PerpsController_myxRegistrationPromise, null, "f");
|
|
4298
4185
|
__classPrivateFieldSet(this, _PerpsController_lighterRegistrationPromise, null, "f");
|
|
4299
4186
|
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_assignActiveProvider).call(this);
|
|
4300
4187
|
this.isInitialized = true;
|
|
@@ -4376,32 +4263,12 @@ async function _PerpsController_performInitialization() {
|
|
|
4376
4263
|
onChaseOrderMaxDistanceReached: __classPrivateFieldGet(this, _PerpsController_publishChaseOrderMaxDistanceReached, "f"),
|
|
4377
4264
|
});
|
|
4378
4265
|
this.providers.set('hyperliquid', hyperLiquidProvider);
|
|
4379
|
-
// Register
|
|
4380
|
-
//
|
|
4381
|
-
//
|
|
4382
|
-
//
|
|
4383
|
-
//
|
|
4384
|
-
//
|
|
4385
|
-
// explicitly enabled and selected.
|
|
4386
|
-
const isMYXEnabled = __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isMYXProviderEnabled).call(this);
|
|
4387
|
-
if (isMYXEnabled) {
|
|
4388
|
-
// IMPORTANT: Must use import() — NOT require() — for core/extension tree-shaking.
|
|
4389
|
-
// require() is synchronous and bundlers include it in the main bundle.
|
|
4390
|
-
// import() enables true code splitting so MYX is excluded when not enabled.
|
|
4391
|
-
// NOTE: Keep the path in a variable so ts-bridge does not rewrite the
|
|
4392
|
-
// import argument and strip the webpackIgnore magic comment in core dist.
|
|
4393
|
-
const myxModulePath = './providers/MYXProvider';
|
|
4394
|
-
__classPrivateFieldSet(this, _PerpsController_myxRegistrationPromise, import(
|
|
4395
|
-
/* webpackIgnore: true */ myxModulePath)
|
|
4396
|
-
.then(({ MYXProvider }) => {
|
|
4397
|
-
this.registerMYXProvider(MYXProvider);
|
|
4398
|
-
return undefined;
|
|
4399
|
-
})
|
|
4400
|
-
.catch((error) => this.handleMYXImportError(error)), "f");
|
|
4401
|
-
}
|
|
4402
|
-
// Register Lighter provider if enabled (POC). Same dynamic-import pattern
|
|
4403
|
-
// as MYX so clients that do not ship the Lighter files skip registration
|
|
4404
|
-
// silently.
|
|
4266
|
+
// Register Lighter provider if enabled (POC). Dynamic import so clients
|
|
4267
|
+
// that do not ship the Lighter files skip registration silently, and so
|
|
4268
|
+
// bundlers can code-split it out when it is not enabled.
|
|
4269
|
+
// Uses .then()/.catch() instead of await because #createProviders is not
|
|
4270
|
+
// async; registration completing asynchronously is fine since the provider
|
|
4271
|
+
// is only used when explicitly enabled and selected.
|
|
4405
4272
|
const isLighterEnabled = __classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_isLighterProviderEnabled).call(this);
|
|
4406
4273
|
if (isLighterEnabled) {
|
|
4407
4274
|
// NOTE: Keep the path in a variable so ts-bridge does not rewrite the
|
|
@@ -4433,7 +4300,11 @@ async function _PerpsController_performInitialization() {
|
|
|
4433
4300
|
this.activeProviderInstance = hyperLiquidProvider;
|
|
4434
4301
|
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_debugLog).call(this, `PerpsController: Using direct provider (${activeProvider})`);
|
|
4435
4302
|
}
|
|
4436
|
-
else
|
|
4303
|
+
else {
|
|
4304
|
+
// Any other direct provider, including a value persisted by an older
|
|
4305
|
+
// version whose venue has since been removed. `activeProvider` is
|
|
4306
|
+
// persisted, so throwing here would fail initialization on every
|
|
4307
|
+
// launch — the stale value must self-heal.
|
|
4437
4308
|
const directProvider = this.providers.get(activeProvider);
|
|
4438
4309
|
if (directProvider) {
|
|
4439
4310
|
this.activeProviderInstance = directProvider;
|
|
@@ -4447,9 +4318,6 @@ async function _PerpsController_performInitialization() {
|
|
|
4447
4318
|
}
|
|
4448
4319
|
__classPrivateFieldGet(this, _PerpsController_instances, "m", _PerpsController_debugLog).call(this, `PerpsController: Using direct provider (${this.activeProviderInstance === hyperLiquidProvider ? 'hyperliquid' : activeProvider})`);
|
|
4449
4320
|
}
|
|
4450
|
-
else {
|
|
4451
|
-
throw new Error(`Unsupported provider: ${String(activeProvider)}. Currently only 'hyperliquid', 'myx', 'lighter', and 'aggregated' are supported.`);
|
|
4452
|
-
}
|
|
4453
4321
|
}, _PerpsController_getErrorContext = function _PerpsController_getErrorContext(method, extra) {
|
|
4454
4322
|
return {
|
|
4455
4323
|
tags: {
|
|
@@ -5171,7 +5039,6 @@ async function _PerpsController_persistWatchlistToRemote(network) {
|
|
|
5171
5039
|
const existingWatchlist = prefs.perps
|
|
5172
5040
|
.watchlistMarkets ?? {
|
|
5173
5041
|
hyperliquid: { testnet: [], mainnet: [] },
|
|
5174
|
-
myx: { testnet: [], mainnet: [] },
|
|
5175
5042
|
};
|
|
5176
5043
|
const nextWatchlistMarkets = {
|
|
5177
5044
|
...existingWatchlist,
|
|
@@ -5239,7 +5106,6 @@ async function _PerpsController_syncWatchlistFromRemote() {
|
|
|
5239
5106
|
const existingWatchlist = prefs.perps
|
|
5240
5107
|
.watchlistMarkets ?? {
|
|
5241
5108
|
hyperliquid: { testnet: [], mainnet: [] },
|
|
5242
|
-
myx: { testnet: [], mainnet: [] },
|
|
5243
5109
|
};
|
|
5244
5110
|
const nextWatchlistMarkets = {
|
|
5245
5111
|
...existingWatchlist,
|