@metamask-previews/perps-controller 11.0.0-preview-9efd0b754 → 12.0.0-preview-4e64b66e8
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 +30 -1
- package/dist/PerpsController-method-action-types.cjs.map +1 -1
- package/dist/PerpsController-method-action-types.d.cts +36 -1
- package/dist/PerpsController-method-action-types.d.cts.map +1 -1
- package/dist/PerpsController-method-action-types.d.mts +36 -1
- package/dist/PerpsController-method-action-types.d.mts.map +1 -1
- package/dist/PerpsController-method-action-types.mjs.map +1 -1
- package/dist/PerpsController.cjs +600 -119
- package/dist/PerpsController.cjs.map +1 -1
- package/dist/PerpsController.d.cts +35 -4
- package/dist/PerpsController.d.cts.map +1 -1
- package/dist/PerpsController.d.mts +35 -4
- package/dist/PerpsController.d.mts.map +1 -1
- package/dist/PerpsController.mjs +603 -122
- package/dist/PerpsController.mjs.map +1 -1
- package/dist/constants/eventNames.cjs +3 -0
- package/dist/constants/eventNames.cjs.map +1 -1
- package/dist/constants/eventNames.d.cts +1 -0
- package/dist/constants/eventNames.d.cts.map +1 -1
- package/dist/constants/eventNames.d.mts +1 -0
- package/dist/constants/eventNames.d.mts.map +1 -1
- package/dist/constants/eventNames.mjs +3 -0
- package/dist/constants/eventNames.mjs.map +1 -1
- package/dist/constants/hyperLiquidConfig.cjs +14 -2
- package/dist/constants/hyperLiquidConfig.cjs.map +1 -1
- package/dist/constants/hyperLiquidConfig.d.cts +7 -0
- package/dist/constants/hyperLiquidConfig.d.cts.map +1 -1
- package/dist/constants/hyperLiquidConfig.d.mts +7 -0
- package/dist/constants/hyperLiquidConfig.d.mts.map +1 -1
- package/dist/constants/hyperLiquidConfig.mjs +11 -0
- package/dist/constants/hyperLiquidConfig.mjs.map +1 -1
- package/dist/constants/perpsConfig.cjs +19 -2
- package/dist/constants/perpsConfig.cjs.map +1 -1
- package/dist/constants/perpsConfig.d.cts +39 -7
- package/dist/constants/perpsConfig.d.cts.map +1 -1
- package/dist/constants/perpsConfig.d.mts +39 -7
- package/dist/constants/perpsConfig.d.mts.map +1 -1
- package/dist/constants/perpsConfig.mjs +18 -1
- package/dist/constants/perpsConfig.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.cjs +16 -0
- package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.d.cts +3 -1
- package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.d.mts +3 -1
- package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -1
- package/dist/providers/AggregatedPerpsProvider.mjs +16 -0
- package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.cjs +325 -59
- package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.cts +27 -1
- package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.mts +27 -1
- package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
- package/dist/providers/HyperLiquidProvider.mjs +326 -60
- package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
- package/dist/services/HyperLiquidClientService.cjs +74 -25
- package/dist/services/HyperLiquidClientService.cjs.map +1 -1
- package/dist/services/HyperLiquidClientService.d.cts.map +1 -1
- package/dist/services/HyperLiquidClientService.d.mts.map +1 -1
- package/dist/services/HyperLiquidClientService.mjs +74 -25
- package/dist/services/HyperLiquidClientService.mjs.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.cjs +16 -5
- package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.d.cts +1 -1
- package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.d.mts +1 -1
- package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -1
- package/dist/services/HyperLiquidSubscriptionService.mjs +16 -5
- package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -1
- package/dist/services/MarketDataService.cjs +49 -5
- package/dist/services/MarketDataService.cjs.map +1 -1
- package/dist/services/MarketDataService.d.cts +2 -2
- package/dist/services/MarketDataService.d.cts.map +1 -1
- package/dist/services/MarketDataService.d.mts +2 -2
- package/dist/services/MarketDataService.d.mts.map +1 -1
- package/dist/services/MarketDataService.mjs +49 -5
- package/dist/services/MarketDataService.mjs.map +1 -1
- package/dist/services/RewardsIntegrationService.cjs +330 -68
- package/dist/services/RewardsIntegrationService.cjs.map +1 -1
- package/dist/services/RewardsIntegrationService.d.cts +61 -5
- package/dist/services/RewardsIntegrationService.d.cts.map +1 -1
- package/dist/services/RewardsIntegrationService.d.mts +61 -5
- package/dist/services/RewardsIntegrationService.d.mts.map +1 -1
- package/dist/services/RewardsIntegrationService.mjs +330 -68
- package/dist/services/RewardsIntegrationService.mjs.map +1 -1
- package/dist/services/ServiceContext.cjs.map +1 -1
- package/dist/services/ServiceContext.d.cts +17 -1
- package/dist/services/ServiceContext.d.cts.map +1 -1
- package/dist/services/ServiceContext.d.mts +17 -1
- package/dist/services/ServiceContext.d.mts.map +1 -1
- package/dist/services/ServiceContext.mjs.map +1 -1
- package/dist/services/TerminalMarketService.cjs +422 -7
- package/dist/services/TerminalMarketService.cjs.map +1 -1
- package/dist/services/TerminalMarketService.d.cts +10 -1
- package/dist/services/TerminalMarketService.d.cts.map +1 -1
- package/dist/services/TerminalMarketService.d.mts +10 -1
- package/dist/services/TerminalMarketService.d.mts.map +1 -1
- package/dist/services/TerminalMarketService.mjs +423 -8
- package/dist/services/TerminalMarketService.mjs.map +1 -1
- package/dist/services/TradingService.cjs +52 -28
- package/dist/services/TradingService.cjs.map +1 -1
- package/dist/services/TradingService.d.cts.map +1 -1
- package/dist/services/TradingService.d.mts.map +1 -1
- package/dist/services/TradingService.mjs +52 -28
- package/dist/services/TradingService.mjs.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +156 -7
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.mts +156 -7
- package/dist/types/index.d.mts.map +1 -1
- package/dist/types/index.mjs.map +1 -1
- package/dist/utils/marketUtils.cjs +16 -1
- package/dist/utils/marketUtils.cjs.map +1 -1
- package/dist/utils/marketUtils.d.cts +1 -0
- package/dist/utils/marketUtils.d.cts.map +1 -1
- package/dist/utils/marketUtils.d.mts +1 -0
- package/dist/utils/marketUtils.d.mts.map +1 -1
- package/dist/utils/marketUtils.mjs +14 -0
- package/dist/utils/marketUtils.mjs.map +1 -1
- package/dist/utils/perpsDiskPersistence.cjs +19 -12
- package/dist/utils/perpsDiskPersistence.cjs.map +1 -1
- package/dist/utils/perpsDiskPersistence.d.cts +5 -1
- package/dist/utils/perpsDiskPersistence.d.cts.map +1 -1
- package/dist/utils/perpsDiskPersistence.d.mts +5 -1
- package/dist/utils/perpsDiskPersistence.d.mts.map +1 -1
- package/dist/utils/perpsDiskPersistence.mjs +19 -12
- package/dist/utils/perpsDiskPersistence.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
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
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _HyperLiquidProvider_instances, _HyperLiquidProvider_deps, _HyperLiquidProvider_clientService, _HyperLiquidProvider_walletService, _HyperLiquidProvider_subscriptionService, _HyperLiquidProvider_symbolToAssetId, _HyperLiquidProvider_userFeeCache, _HyperLiquidProvider_maxLeverageCache, _HyperLiquidProvider_cachedMetaByDex, _HyperLiquidProvider_cachedMarketDataWithPrices, _HyperLiquidProvider_cachedSpotMeta, _HyperLiquidProvider_dexDiscoveryCache, _HyperLiquidProvider_referralCheckCache, _HyperLiquidProvider_builderFeeCheckCache, _HyperLiquidProvider_ensureReadyPromise, _HyperLiquidProvider_pendingBuilderFeeApprovals, _HyperLiquidProvider_compiledAllowlistPatterns, _HyperLiquidProvider_compiledBlocklistPatterns, _HyperLiquidProvider_userFeeDiscountBips, _HyperLiquidProvider_hip3Enabled, _HyperLiquidProvider_allowlistMarkets, _HyperLiquidProvider_blocklistMarkets, _HyperLiquidProvider_useUnifiedAccount, _HyperLiquidProvider_dexDiscoveryComplete, _HyperLiquidProvider_unifiedAccountSetupNeedsRetry, _HyperLiquidProvider_pendingValidatedDexsPromise, _HyperLiquidProvider_cachedUsdcTokenId, _HyperLiquidProvider_errorMappings, _HyperLiquidProvider_scaleOrderGroups, _HyperLiquidProvider_chaseSessions, _HyperLiquidProvider_chasePlacementsInFlight, _HyperLiquidProvider_chaseGeneration, _HyperLiquidProvider_clientsInitialized, _HyperLiquidProvider_initializationPromise, _HyperLiquidProvider_messenger, _HyperLiquidProvider_builderAddressTestnet, _HyperLiquidProvider_builderAddressMainnet, _HyperLiquidProvider_priceDeviationLimit, _HyperLiquidProvider_compilePatternsSafely, _HyperLiquidProvider_ensureClientsInitialized, _HyperLiquidProvider_isWalletOnHyperliquid, _HyperLiquidProvider_isHyperliquidMultiSigAccount, _HyperLiquidProvider_ensureUnifiedAccountEnabled, _HyperLiquidProvider_ensureReady, _HyperLiquidProvider_tradingSetupPromise, _HyperLiquidProvider_tradingSetupComplete, _HyperLiquidProvider_ensureReadyForTrading, _HyperLiquidProvider_getOrFetchPrice, _HyperLiquidProvider_filterFills, _HyperLiquidProvider_getAllAvailableDexs, _HyperLiquidProvider_getValidatedDexs, _HyperLiquidProvider_fetchValidatedDexsInternal, _HyperLiquidProvider_getCachedMeta, _HyperLiquidProvider_backfillAssetMapForDex, _HyperLiquidProvider_getAssetIdWithRepair, _HyperLiquidProvider_getCachedSpotMeta, _HyperLiquidProvider_getCachedPerpDexs, _HyperLiquidProvider_calculateHip3FeeMultiplier, _HyperLiquidProvider_getCacheKey, _HyperLiquidProvider_fetchMarketsForDex, _HyperLiquidProvider_getUsdcTokenId, _HyperLiquidProvider_isUsdcCollateralDex, _HyperLiquidProvider_buildAssetMapping, _HyperLiquidProvider_queryUserDataAcrossDexs, _HyperLiquidProvider_mapError, _HyperLiquidProvider_getErrorContext, _HyperLiquidProvider_isMappedAccountModeExchangeError, _HyperLiquidProvider_getTradingErrorContext, _HyperLiquidProvider_checkBuilderFeeApproval, _HyperLiquidProvider_ensureBuilderFeeApproval, _HyperLiquidProvider_checkBuilderFeeStatus, _HyperLiquidProvider_getBalanceForDex, _HyperLiquidProvider_findSourceDexWithBalance, _HyperLiquidProvider_autoTransferForHip3Order, _HyperLiquidProvider_autoTransferBackAfterClose, _HyperLiquidProvider_calculateHip3RequiredMargin, _HyperLiquidProvider_handleHip3PostOrderRebalance, _HyperLiquidProvider_handleHip3OrderRollback, _HyperLiquidProvider_validateOrderBeforePlacement, _HyperLiquidProvider_getAssetInfo, _HyperLiquidProvider_prepareAssetForTrading, _HyperLiquidProvider_handleHip3PreOrder, _HyperLiquidProvider_submitOrderWithRollback, _HyperLiquidProvider_handleOrderError, _HyperLiquidProvider_placeStrategyOrder, _HyperLiquidProvider_prepareStrategyPlacement, _HyperLiquidProvider_getMinimumOrderSize, _HyperLiquidProvider_buildScaleLadder, _HyperLiquidProvider_placeTwapOrder, _HyperLiquidProvider_placeScaleOrder, _HyperLiquidProvider_startChaseSession, _HyperLiquidProvider_getChaseQuotePrice, _HyperLiquidProvider_restChaseOrder, _HyperLiquidProvider_scheduleChaseTick, _HyperLiquidProvider_recoverFailedChaseTick, _HyperLiquidProvider_runChaseTick, _HyperLiquidProvider_resolveOwnRestingSizes, _HyperLiquidProvider_readOrderRemainder, _HyperLiquidProvider_cancelChaseChild, _HyperLiquidProvider_retractOrphanedChaseOrder, _HyperLiquidProvider_stopChaseSession, _HyperLiquidProvider_cancelStrategyOrder, _HyperLiquidProvider_cancelTwapOrder, _HyperLiquidProvider_cancelScaleOrder, _HyperLiquidProvider_cancelChaseOrder, _HyperLiquidProvider_readOrderIdFromStatus, _HyperLiquidProvider_getDiscountedBuilderFee, _HyperLiquidProvider_fetchOpenOrders, _HyperLiquidProvider_resolveReplacementOrderId, _HyperLiquidProvider_getStandaloneValidatedDexs, _HyperLiquidProvider_queryDexPositions, _HyperLiquidProvider_getAllMids, _HyperLiquidProvider_fetchSingleDexFresh, _HyperLiquidProvider_excludeNonUsdcCollateralResults, _HyperLiquidProvider_mergeDexResultsInto, _HyperLiquidProvider_cacheFreshMarketDataSnapshot, _HyperLiquidProvider_getStaleMarketDataSnapshot, _HyperLiquidProvider_isFeeCacheValid, _HyperLiquidProvider_getBuilderAddress, _HyperLiquidProvider_getReferralCode, _HyperLiquidProvider_ensureReferralSet, _HyperLiquidProvider_isReferralCodeReady, _HyperLiquidProvider_checkReferralSet, _HyperLiquidProvider_setReferralCode;
|
|
13
|
+
var _HyperLiquidProvider_instances, _HyperLiquidProvider_deps, _HyperLiquidProvider_clientService, _HyperLiquidProvider_walletService, _HyperLiquidProvider_subscriptionService, _HyperLiquidProvider_symbolToAssetId, _HyperLiquidProvider_userFeeCache, _HyperLiquidProvider_maxLeverageCache, _HyperLiquidProvider_cachedMetaByDex, _HyperLiquidProvider_cachedMarketDataWithPrices, _HyperLiquidProvider_cachedSpotMeta, _HyperLiquidProvider_dexDiscoveryCache, _HyperLiquidProvider_referralCheckCache, _HyperLiquidProvider_builderFeeCheckCache, _HyperLiquidProvider_ensureReadyPromise, _HyperLiquidProvider_pendingBuilderFeeApprovals, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, _HyperLiquidProvider_approvedBuilderAddresses, _HyperLiquidProvider_compiledAllowlistPatterns, _HyperLiquidProvider_compiledBlocklistPatterns, _HyperLiquidProvider_userFeeDiscountBips, _HyperLiquidProvider_userFeeResolution, _HyperLiquidProvider_hip3Enabled, _HyperLiquidProvider_allowlistMarkets, _HyperLiquidProvider_blocklistMarkets, _HyperLiquidProvider_useUnifiedAccount, _HyperLiquidProvider_dexDiscoveryComplete, _HyperLiquidProvider_unifiedAccountSetupNeedsRetry, _HyperLiquidProvider_pendingValidatedDexsPromise, _HyperLiquidProvider_cachedUsdcTokenId, _HyperLiquidProvider_errorMappings, _HyperLiquidProvider_scaleOrderGroups, _HyperLiquidProvider_chaseSessions, _HyperLiquidProvider_chasePlacementsInFlight, _HyperLiquidProvider_chaseGeneration, _HyperLiquidProvider_clientsInitialized, _HyperLiquidProvider_initializationPromise, _HyperLiquidProvider_messenger, _HyperLiquidProvider_builderAddressTestnet, _HyperLiquidProvider_builderAddressMainnet, _HyperLiquidProvider_subscriptionBuilderAddressTestnet, _HyperLiquidProvider_subscriptionBuilderAddressMainnet, _HyperLiquidProvider_priceDeviationLimit, _HyperLiquidProvider_compilePatternsSafely, _HyperLiquidProvider_ensureClientsInitialized, _HyperLiquidProvider_isWalletOnHyperliquid, _HyperLiquidProvider_isHyperliquidMultiSigAccount, _HyperLiquidProvider_ensureUnifiedAccountEnabled, _HyperLiquidProvider_ensureReady, _HyperLiquidProvider_tradingSetupPromise, _HyperLiquidProvider_tradingSetupComplete, _HyperLiquidProvider_ensureReadyForTrading, _HyperLiquidProvider_getOrFetchPrice, _HyperLiquidProvider_filterFills, _HyperLiquidProvider_getAllAvailableDexs, _HyperLiquidProvider_getValidatedDexs, _HyperLiquidProvider_fetchValidatedDexsInternal, _HyperLiquidProvider_getCachedMeta, _HyperLiquidProvider_backfillAssetMapForDex, _HyperLiquidProvider_getAssetIdWithRepair, _HyperLiquidProvider_getCachedSpotMeta, _HyperLiquidProvider_getCachedPerpDexs, _HyperLiquidProvider_calculateHip3FeeMultiplier, _HyperLiquidProvider_getCacheKey, _HyperLiquidProvider_getApprovedBuilderKey, _HyperLiquidProvider_fetchMarketsForDex, _HyperLiquidProvider_getUsdcTokenId, _HyperLiquidProvider_isUsdcCollateralDex, _HyperLiquidProvider_buildAssetMapping, _HyperLiquidProvider_queryUserDataAcrossDexs, _HyperLiquidProvider_mapError, _HyperLiquidProvider_getErrorContext, _HyperLiquidProvider_isMappedAccountModeExchangeError, _HyperLiquidProvider_getTradingErrorContext, _HyperLiquidProvider_checkBuilderFeeApproval, _HyperLiquidProvider_ensureBuilderFeeApproval, _HyperLiquidProvider_checkBuilderFeeStatus, _HyperLiquidProvider_getBalanceForDex, _HyperLiquidProvider_findSourceDexWithBalance, _HyperLiquidProvider_autoTransferForHip3Order, _HyperLiquidProvider_autoTransferBackAfterClose, _HyperLiquidProvider_calculateHip3RequiredMargin, _HyperLiquidProvider_handleHip3PostOrderRebalance, _HyperLiquidProvider_handleHip3OrderRollback, _HyperLiquidProvider_validateOrderBeforePlacement, _HyperLiquidProvider_getAssetInfo, _HyperLiquidProvider_prepareAssetForTrading, _HyperLiquidProvider_handleHip3PreOrder, _HyperLiquidProvider_submitOrderWithRollback, _HyperLiquidProvider_handleOrderError, _HyperLiquidProvider_placeStrategyOrder, _HyperLiquidProvider_prepareStrategyPlacement, _HyperLiquidProvider_getMinimumOrderSize, _HyperLiquidProvider_buildScaleLadder, _HyperLiquidProvider_placeTwapOrder, _HyperLiquidProvider_placeScaleOrder, _HyperLiquidProvider_startChaseSession, _HyperLiquidProvider_getChaseQuotePrice, _HyperLiquidProvider_restChaseOrder, _HyperLiquidProvider_scheduleChaseTick, _HyperLiquidProvider_recoverFailedChaseTick, _HyperLiquidProvider_runChaseTick, _HyperLiquidProvider_resolveOwnRestingSizes, _HyperLiquidProvider_readOrderRemainder, _HyperLiquidProvider_cancelChaseChild, _HyperLiquidProvider_retractOrphanedChaseOrder, _HyperLiquidProvider_stopChaseSession, _HyperLiquidProvider_cancelStrategyOrder, _HyperLiquidProvider_cancelTwapOrder, _HyperLiquidProvider_cancelScaleOrder, _HyperLiquidProvider_cancelChaseOrder, _HyperLiquidProvider_readOrderIdFromStatus, _HyperLiquidProvider_getDiscountedBuilderFee, _HyperLiquidProvider_getBuilderOrderContext, _HyperLiquidProvider_fetchOpenOrders, _HyperLiquidProvider_resolveReplacementOrderId, _HyperLiquidProvider_getStandaloneValidatedDexs, _HyperLiquidProvider_queryDexPositions, _HyperLiquidProvider_getAllMids, _HyperLiquidProvider_fetchSingleDexFresh, _HyperLiquidProvider_excludeNonUsdcCollateralResults, _HyperLiquidProvider_mergeDexResultsInto, _HyperLiquidProvider_cacheFreshMarketDataSnapshot, _HyperLiquidProvider_getStaleMarketDataSnapshot, _HyperLiquidProvider_isFeeCacheValid, _HyperLiquidProvider_getBuilderAddress, _HyperLiquidProvider_getSubscriptionBuilderAddress, _HyperLiquidProvider_getReferralCode, _HyperLiquidProvider_ensureReferralSet, _HyperLiquidProvider_isReferralCodeReady, _HyperLiquidProvider_checkReferralSet, _HyperLiquidProvider_setReferralCode;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.HyperLiquidProvider = void 0;
|
|
16
16
|
const utils_1 = require("@metamask/utils");
|
|
@@ -230,7 +230,32 @@ function groupOrdersBySymbol(orders) {
|
|
|
230
230
|
function collectPositionTriggerOrders(params) {
|
|
231
231
|
const { orders, position, childOrderIds } = params;
|
|
232
232
|
const byOrderId = new Map();
|
|
233
|
+
let takeProfitPrice;
|
|
234
|
+
let stopLossPrice;
|
|
233
235
|
orders.forEach((rawOrder) => {
|
|
236
|
+
if (rawOrder.isTrigger &&
|
|
237
|
+
rawOrder.reduceOnly &&
|
|
238
|
+
rawOrder.isPositionTpsl === Boolean(perpsConfig_js_1.TP_SL_CONFIG.UsePositionBoundTpsl)) {
|
|
239
|
+
if (rawOrder.orderType.includes('Take Profit')) {
|
|
240
|
+
takeProfitPrice = rawOrder.triggerPx;
|
|
241
|
+
}
|
|
242
|
+
else if (rawOrder.orderType.includes('Stop')) {
|
|
243
|
+
stopLossPrice = rawOrder.triggerPx;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
rawOrder.children?.forEach((childOrder) => {
|
|
247
|
+
if (!childOrder.isTrigger ||
|
|
248
|
+
!childOrder.reduceOnly ||
|
|
249
|
+
childOrder.isPositionTpsl !== Boolean(perpsConfig_js_1.TP_SL_CONFIG.UsePositionBoundTpsl)) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (childOrder.orderType.includes('Take Profit')) {
|
|
253
|
+
takeProfitPrice = childOrder.triggerPx;
|
|
254
|
+
}
|
|
255
|
+
else if (childOrder.orderType.includes('Stop')) {
|
|
256
|
+
stopLossPrice = childOrder.triggerPx;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
234
259
|
if (rawOrder.coin !== position.symbol ||
|
|
235
260
|
!rawOrder.isTrigger ||
|
|
236
261
|
!rawOrder.reduceOnly ||
|
|
@@ -250,6 +275,8 @@ function collectPositionTriggerOrders(params) {
|
|
|
250
275
|
return {
|
|
251
276
|
takeProfitOrders: triggerOrders.filter((order) => order.direction === 'take_profit'),
|
|
252
277
|
stopLossOrders: triggerOrders.filter((order) => order.direction !== 'take_profit'),
|
|
278
|
+
...(takeProfitPrice && { takeProfitPrice }),
|
|
279
|
+
...(stopLossPrice && { stopLossPrice }),
|
|
253
280
|
};
|
|
254
281
|
}
|
|
255
282
|
/**
|
|
@@ -301,11 +328,15 @@ class HyperLiquidProvider {
|
|
|
301
328
|
// Prevents multiple signature requests when methods called simultaneously
|
|
302
329
|
_HyperLiquidProvider_ensureReadyPromise.set(this, null);
|
|
303
330
|
_HyperLiquidProvider_pendingBuilderFeeApprovals.set(this, new Map());
|
|
331
|
+
_HyperLiquidProvider_subscriptionBuilderApprovalEpoch.set(this, 0);
|
|
332
|
+
/** Builder approvals keyed by network, account, and builder address. */
|
|
333
|
+
_HyperLiquidProvider_approvedBuilderAddresses.set(this, new Set());
|
|
304
334
|
// Pre-compiled patterns for fast filtering
|
|
305
335
|
_HyperLiquidProvider_compiledAllowlistPatterns.set(this, []);
|
|
306
336
|
_HyperLiquidProvider_compiledBlocklistPatterns.set(this, []);
|
|
307
337
|
// Fee discount context for MetaMask reward discounts (in basis points)
|
|
308
338
|
_HyperLiquidProvider_userFeeDiscountBips.set(this, void 0);
|
|
339
|
+
_HyperLiquidProvider_userFeeResolution.set(this, void 0);
|
|
309
340
|
// Feature flag configuration for HIP-3 market filtering
|
|
310
341
|
_HyperLiquidProvider_hip3Enabled.set(this, void 0);
|
|
311
342
|
_HyperLiquidProvider_allowlistMarkets.set(this, void 0);
|
|
@@ -362,6 +393,8 @@ class HyperLiquidProvider {
|
|
|
362
393
|
_HyperLiquidProvider_messenger.set(this, void 0);
|
|
363
394
|
_HyperLiquidProvider_builderAddressTestnet.set(this, void 0);
|
|
364
395
|
_HyperLiquidProvider_builderAddressMainnet.set(this, void 0);
|
|
396
|
+
_HyperLiquidProvider_subscriptionBuilderAddressTestnet.set(this, void 0);
|
|
397
|
+
_HyperLiquidProvider_subscriptionBuilderAddressMainnet.set(this, void 0);
|
|
365
398
|
_HyperLiquidProvider_priceDeviationLimit.set(this, void 0);
|
|
366
399
|
/**
|
|
367
400
|
* Ensure provider is ready for TRADING operations (signing required)
|
|
@@ -382,6 +415,8 @@ class HyperLiquidProvider {
|
|
|
382
415
|
__classPrivateFieldSet(this, _HyperLiquidProvider_messenger, options.messenger, "f");
|
|
383
416
|
__classPrivateFieldSet(this, _HyperLiquidProvider_builderAddressTestnet, options.builderAddressTestnet, "f");
|
|
384
417
|
__classPrivateFieldSet(this, _HyperLiquidProvider_builderAddressMainnet, options.builderAddressMainnet, "f");
|
|
418
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_subscriptionBuilderAddressTestnet, options.subscriptionBuilderAddressTestnet, "f");
|
|
419
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_subscriptionBuilderAddressMainnet, options.subscriptionBuilderAddressMainnet, "f");
|
|
385
420
|
__classPrivateFieldSet(this, _HyperLiquidProvider_priceDeviationLimit, options.priceDeviationLimit ??
|
|
386
421
|
hyperLiquidConfig_js_1.HYPERLIQUID_CONFIG.OraclePriceDeviationLimit, "f");
|
|
387
422
|
const isTestnet = options.isTestnet ?? false;
|
|
@@ -404,7 +439,11 @@ class HyperLiquidProvider {
|
|
|
404
439
|
isTestnet,
|
|
405
440
|
}), "f");
|
|
406
441
|
__classPrivateFieldSet(this, _HyperLiquidProvider_subscriptionService, new HyperLiquidSubscriptionService_js_1.HyperLiquidSubscriptionService(__classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_walletService, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_hip3Enabled, "f"), [], // enabledDexs - will be populated after DEX discovery in buildAssetMapping
|
|
407
|
-
__classPrivateFieldGet(this, _HyperLiquidProvider_allowlistMarkets, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_blocklistMarkets, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_priceDeviationLimit, "f")
|
|
442
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_allowlistMarkets, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_blocklistMarkets, "f"), __classPrivateFieldGet(this, _HyperLiquidProvider_priceDeviationLimit, "f"), async () => {
|
|
443
|
+
await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_ensureClientsInitialized).call(this);
|
|
444
|
+
const validatedDexs = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getValidatedDexs).call(this);
|
|
445
|
+
return validatedDexs.filter((dex) => dex !== null);
|
|
446
|
+
}), "f");
|
|
408
447
|
// NOTE: Clients are NOT initialized here - they'll be initialized lazily
|
|
409
448
|
// when first needed. This avoids accessing Engine.context before it's ready.
|
|
410
449
|
// Pre-compile filter patterns for performance (invalid patterns are skipped)
|
|
@@ -461,6 +500,7 @@ class HyperLiquidProvider {
|
|
|
461
500
|
* @param discountBips - The discount in basis points (e.g., 550 = 5.5%)
|
|
462
501
|
*/
|
|
463
502
|
setUserFeeDiscount(discountBips) {
|
|
503
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_userFeeResolution, undefined, "f");
|
|
464
504
|
__classPrivateFieldSet(this, _HyperLiquidProvider_userFeeDiscountBips, discountBips, "f");
|
|
465
505
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('HyperLiquid: Fee discount context updated', {
|
|
466
506
|
discountBips,
|
|
@@ -468,6 +508,20 @@ class HyperLiquidProvider {
|
|
|
468
508
|
isActive: discountBips !== undefined,
|
|
469
509
|
});
|
|
470
510
|
}
|
|
511
|
+
/**
|
|
512
|
+
* Set the resolved fee and its attribution source for the next operation.
|
|
513
|
+
*
|
|
514
|
+
* @param resolution - Unified fee resolution, or undefined to clear it.
|
|
515
|
+
*/
|
|
516
|
+
setUserFeeResolution(resolution) {
|
|
517
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_userFeeResolution, resolution, "f");
|
|
518
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_userFeeDiscountBips, resolution?.discountBips, "f");
|
|
519
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('HyperLiquid: Fee resolution context updated', {
|
|
520
|
+
source: resolution?.source,
|
|
521
|
+
discountBips: resolution?.discountBips,
|
|
522
|
+
isActive: resolution !== undefined,
|
|
523
|
+
});
|
|
524
|
+
}
|
|
471
525
|
/**
|
|
472
526
|
* Get supported deposit routes with complete asset and routing information
|
|
473
527
|
*
|
|
@@ -502,6 +556,84 @@ class HyperLiquidProvider {
|
|
|
502
556
|
// For HyperLiquid, withdrawal routes are the same as deposit routes
|
|
503
557
|
return this.getDepositRoutes(params);
|
|
504
558
|
}
|
|
559
|
+
/**
|
|
560
|
+
* Approve the dedicated subscription builder outside order submission.
|
|
561
|
+
* Failure is non-blocking: order construction will use the ordinary builder
|
|
562
|
+
* at the standard fee until a later approval succeeds.
|
|
563
|
+
*
|
|
564
|
+
* @returns Whether the builder is approved for the current account.
|
|
565
|
+
*/
|
|
566
|
+
async approveSubscriptionBuilderFee() {
|
|
567
|
+
const approvalEpoch = __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, "f");
|
|
568
|
+
await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_ensureClientsInitialized).call(this);
|
|
569
|
+
if (approvalEpoch !== __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, "f")) {
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
const isTestnet = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode();
|
|
573
|
+
const network = isTestnet ? 'testnet' : 'mainnet';
|
|
574
|
+
const builderAddress = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getSubscriptionBuilderAddress).call(this, isTestnet);
|
|
575
|
+
if (!builderAddress) {
|
|
576
|
+
return false;
|
|
577
|
+
}
|
|
578
|
+
const userAddress = await __classPrivateFieldGet(this, _HyperLiquidProvider_walletService, "f").getUserAddressWithDefault();
|
|
579
|
+
const key = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getApprovedBuilderKey).call(this, network, userAddress, builderAddress);
|
|
580
|
+
if (__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").has(key)) {
|
|
581
|
+
return true;
|
|
582
|
+
}
|
|
583
|
+
const pending = __classPrivateFieldGet(this, _HyperLiquidProvider_pendingBuilderFeeApprovals, "f").get(key);
|
|
584
|
+
if (pending) {
|
|
585
|
+
try {
|
|
586
|
+
await pending;
|
|
587
|
+
return __classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").has(key);
|
|
588
|
+
}
|
|
589
|
+
catch (error) {
|
|
590
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('HyperLiquidProvider: Subscription builder approval unavailable', error);
|
|
591
|
+
return false;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
const approval = (async () => {
|
|
595
|
+
const currentApproval = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeApproval).call(this, builderAddress, userAddress);
|
|
596
|
+
if (approvalEpoch !== __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, "f")) {
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
if (currentApproval !== null &&
|
|
600
|
+
currentApproval >= hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeDecimal) {
|
|
601
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").add(key);
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
const exchangeClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getExchangeClient();
|
|
605
|
+
await exchangeClient.approveBuilderFee({
|
|
606
|
+
builder: builderAddress,
|
|
607
|
+
maxFeeRate: hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeRate,
|
|
608
|
+
});
|
|
609
|
+
if (approvalEpoch !== __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, "f")) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
const afterApproval = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeApproval).call(this, builderAddress, userAddress);
|
|
613
|
+
if (approvalEpoch !== __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, "f")) {
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
if (afterApproval === null ||
|
|
617
|
+
afterApproval < hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeDecimal) {
|
|
618
|
+
throw new Error('[HyperLiquidProvider] Subscription builder approval verification failed');
|
|
619
|
+
}
|
|
620
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").add(key);
|
|
621
|
+
})();
|
|
622
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_pendingBuilderFeeApprovals, "f").set(key, approval);
|
|
623
|
+
try {
|
|
624
|
+
await approval;
|
|
625
|
+
return __classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").has(key);
|
|
626
|
+
}
|
|
627
|
+
catch (error) {
|
|
628
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('HyperLiquidProvider: Subscription builder approval unavailable', error);
|
|
629
|
+
return false;
|
|
630
|
+
}
|
|
631
|
+
finally {
|
|
632
|
+
if (__classPrivateFieldGet(this, _HyperLiquidProvider_pendingBuilderFeeApprovals, "f").get(key) === approval) {
|
|
633
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_pendingBuilderFeeApprovals, "f").delete(key);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
505
637
|
/**
|
|
506
638
|
* Place an order using direct wallet signing
|
|
507
639
|
*
|
|
@@ -1249,19 +1381,11 @@ class HyperLiquidProvider {
|
|
|
1249
1381
|
results: skippedResults,
|
|
1250
1382
|
};
|
|
1251
1383
|
}
|
|
1252
|
-
// Calculate discounted builder fee if reward discount is active
|
|
1253
|
-
let builderFee = hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps;
|
|
1254
|
-
if (__classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") !== undefined) {
|
|
1255
|
-
builderFee = Math.floor(builderFee * (1 - __classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") / hyperLiquidConfig_js_1.BASIS_POINTS_DIVISOR));
|
|
1256
|
-
}
|
|
1257
1384
|
// Single batch API call
|
|
1258
1385
|
const result = await exchangeClient.order({
|
|
1259
1386
|
orders,
|
|
1260
1387
|
grouping: 'na',
|
|
1261
|
-
builder:
|
|
1262
|
-
b: __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderAddress).call(this, __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode()),
|
|
1263
|
-
f: builderFee,
|
|
1264
|
-
},
|
|
1388
|
+
builder: await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderOrderContext).call(this),
|
|
1265
1389
|
});
|
|
1266
1390
|
// Parse response statuses (one per order)
|
|
1267
1391
|
const { statuses } = result.response.data;
|
|
@@ -1627,26 +1751,13 @@ class HyperLiquidProvider {
|
|
|
1627
1751
|
// No orderId since we only cancelled orders, didn't place new ones
|
|
1628
1752
|
};
|
|
1629
1753
|
}
|
|
1630
|
-
// Calculate discounted builder fee if reward discount is active
|
|
1631
|
-
let builderFee = hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps;
|
|
1632
|
-
if (__classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") !== undefined) {
|
|
1633
|
-
builderFee = Math.floor(builderFee * (1 - __classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") / hyperLiquidConfig_js_1.BASIS_POINTS_DIVISOR));
|
|
1634
|
-
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('HyperLiquid: Applying builder fee discount to TP/SL', {
|
|
1635
|
-
originalFee: hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps,
|
|
1636
|
-
discountBips: __classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f"),
|
|
1637
|
-
discountedFee: builderFee,
|
|
1638
|
-
});
|
|
1639
|
-
}
|
|
1640
1754
|
// Submit via SDK exchange client. Position-bound TP/SL uses 'positionTpsl';
|
|
1641
1755
|
// partial TP/SL must be standalone reduce-only triggers ('na'), since a
|
|
1642
1756
|
// position-bound TP/SL always closes the whole position.
|
|
1643
1757
|
const result = await exchangeClient.order({
|
|
1644
1758
|
orders,
|
|
1645
1759
|
grouping: isPartialTpsl ? 'na' : 'positionTpsl',
|
|
1646
|
-
builder:
|
|
1647
|
-
b: __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderAddress).call(this, __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode()),
|
|
1648
|
-
f: builderFee,
|
|
1649
|
-
},
|
|
1760
|
+
builder: await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderOrderContext).call(this),
|
|
1650
1761
|
});
|
|
1651
1762
|
if (result.status !== 'ok') {
|
|
1652
1763
|
throw new Error(`TP/SL update failed: ${JSON.stringify(result)}`);
|
|
@@ -1945,6 +2056,122 @@ class HyperLiquidProvider {
|
|
|
1945
2056
|
};
|
|
1946
2057
|
}
|
|
1947
2058
|
}
|
|
2059
|
+
/**
|
|
2060
|
+
* Fetch a complete standalone user-data bundle.
|
|
2061
|
+
*
|
|
2062
|
+
* Each DEX clearinghouse response is shared by position and account-state
|
|
2063
|
+
* mapping. Any required request failure rejects the entire bundle.
|
|
2064
|
+
*
|
|
2065
|
+
* @param params - User and captured controller identity.
|
|
2066
|
+
* @returns The complete user-data snapshot.
|
|
2067
|
+
*/
|
|
2068
|
+
async getUserDataSnapshot(params) {
|
|
2069
|
+
const { identity, userAddress } = params;
|
|
2070
|
+
const network = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode() ? 'testnet' : 'mainnet';
|
|
2071
|
+
const snapshotStartedAt = __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").performance.now();
|
|
2072
|
+
const measure = async (stage, request, dex) => {
|
|
2073
|
+
const startedAt = __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").performance.now();
|
|
2074
|
+
const dexDetail = dex === undefined ? {} : { dex: dex ?? 'main' };
|
|
2075
|
+
try {
|
|
2076
|
+
const result = await request();
|
|
2077
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('[PerpsUserSnapshot]', {
|
|
2078
|
+
stage,
|
|
2079
|
+
durationMs: Math.round(__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").performance.now() - startedAt),
|
|
2080
|
+
success: true,
|
|
2081
|
+
...dexDetail,
|
|
2082
|
+
});
|
|
2083
|
+
return result;
|
|
2084
|
+
}
|
|
2085
|
+
catch (error) {
|
|
2086
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('[PerpsUserSnapshot]', {
|
|
2087
|
+
stage,
|
|
2088
|
+
durationMs: Math.round(__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").performance.now() - startedAt),
|
|
2089
|
+
success: false,
|
|
2090
|
+
...dexDetail,
|
|
2091
|
+
});
|
|
2092
|
+
throw error;
|
|
2093
|
+
}
|
|
2094
|
+
};
|
|
2095
|
+
if (identity.provider !== 'hyperliquid' || identity.network !== network) {
|
|
2096
|
+
throw new Error('User data snapshot identity does not match provider');
|
|
2097
|
+
}
|
|
2098
|
+
const requestedDexes = identity.dexes;
|
|
2099
|
+
const canonicalDexes = (0, hyperLiquidConfig_js_1.canonicalizeHyperLiquidDexes)(requestedDexes);
|
|
2100
|
+
const hasValidDexIdentity = requestedDexes.length > 0 &&
|
|
2101
|
+
new Set(requestedDexes).size === requestedDexes.length &&
|
|
2102
|
+
requestedDexes.every((dex) => dex === 'main' || /^[a-z0-9][a-z0-9-]*$/u.test(dex)) &&
|
|
2103
|
+
requestedDexes.length === canonicalDexes.length &&
|
|
2104
|
+
requestedDexes.every((dex, index) => dex === canonicalDexes[index]);
|
|
2105
|
+
if (!hasValidDexIdentity) {
|
|
2106
|
+
throw new Error('User data snapshot DEX identity is invalid');
|
|
2107
|
+
}
|
|
2108
|
+
const dexs = requestedDexes.map((dex) => (dex === 'main' ? null : dex));
|
|
2109
|
+
const standaloneInfoClient = (0, standaloneInfoClient_js_1.createStandaloneInfoClient)({
|
|
2110
|
+
isTestnet: network === 'testnet',
|
|
2111
|
+
});
|
|
2112
|
+
const buildUserParams = (dex) => ({
|
|
2113
|
+
user: userAddress,
|
|
2114
|
+
...(dex ? { dex } : {}),
|
|
2115
|
+
});
|
|
2116
|
+
const [clearinghouseStates, openOrdersByDex, spotState, abstractionMode] = await Promise.all([
|
|
2117
|
+
Promise.all(dexs.map((dex) => measure('clearinghouse_state', () => standaloneInfoClient.clearinghouseState(buildUserParams(dex)), dex))),
|
|
2118
|
+
Promise.all(dexs.map((dex) => measure('frontend_open_orders', () => standaloneInfoClient.frontendOpenOrders(buildUserParams(dex)), dex))),
|
|
2119
|
+
measure('spot_clearinghouse_state', () => standaloneInfoClient.spotClearinghouseState({ user: userAddress })),
|
|
2120
|
+
measure('user_abstraction', () => standaloneInfoClient.userAbstraction({ user: userAddress })),
|
|
2121
|
+
]);
|
|
2122
|
+
const rawOrders = openOrdersByDex.flat();
|
|
2123
|
+
const childOrderIds = collectChildOrderIds(rawOrders);
|
|
2124
|
+
const ordersBySymbol = groupOrdersBySymbol(rawOrders);
|
|
2125
|
+
const positions = clearinghouseStates.flatMap((state) => state.assetPositions
|
|
2126
|
+
.filter(({ position }) => position.szi !== '0')
|
|
2127
|
+
.map((assetPosition) => {
|
|
2128
|
+
const position = (0, hyperLiquidAdapter_js_1.adaptPositionFromSDK)(assetPosition);
|
|
2129
|
+
const { takeProfitOrders, stopLossOrders, takeProfitPrice, stopLossPrice, } = collectPositionTriggerOrders({
|
|
2130
|
+
orders: ordersBySymbol.get(position.symbol) ?? [],
|
|
2131
|
+
position,
|
|
2132
|
+
childOrderIds,
|
|
2133
|
+
});
|
|
2134
|
+
return {
|
|
2135
|
+
...position,
|
|
2136
|
+
takeProfitCount: takeProfitOrders.length,
|
|
2137
|
+
stopLossCount: stopLossOrders.length,
|
|
2138
|
+
takeProfitOrders,
|
|
2139
|
+
stopLossOrders,
|
|
2140
|
+
...(takeProfitPrice && { takeProfitPrice }),
|
|
2141
|
+
...(stopLossPrice && { stopLossPrice }),
|
|
2142
|
+
};
|
|
2143
|
+
}));
|
|
2144
|
+
const positionsBySymbol = new Map(positions.map((position) => [position.symbol, position]));
|
|
2145
|
+
const orders = rawOrders.map((order) => (0, hyperLiquidAdapter_js_1.adaptOrderFromSDK)(order, positionsBySymbol.get(order.coin)));
|
|
2146
|
+
const dexAccountStates = clearinghouseStates.map((state) => (0, hyperLiquidAdapter_js_1.adaptAccountStateFromSDK)(state));
|
|
2147
|
+
const accountState = (0, accountUtils_js_1.addSpotBalanceToAccountState)((0, accountUtils_js_1.aggregateAccountStates)(dexAccountStates), spotState, { foldIntoCollateral: (0, hyperliquid_types_js_1.hyperLiquidModeFoldsSpot)(abstractionMode) });
|
|
2148
|
+
accountState.subAccountBreakdown = Object.fromEntries(dexAccountStates.map((dexAccountState, index) => {
|
|
2149
|
+
return [
|
|
2150
|
+
dexs[index] ?? '',
|
|
2151
|
+
{
|
|
2152
|
+
spendableBalance: dexAccountState.spendableBalance,
|
|
2153
|
+
withdrawableBalance: dexAccountState.withdrawableBalance,
|
|
2154
|
+
totalBalance: dexAccountState.totalBalance,
|
|
2155
|
+
},
|
|
2156
|
+
];
|
|
2157
|
+
}));
|
|
2158
|
+
const snapshot = {
|
|
2159
|
+
positions,
|
|
2160
|
+
orders,
|
|
2161
|
+
accountState,
|
|
2162
|
+
identity: {
|
|
2163
|
+
...identity,
|
|
2164
|
+
address: userAddress,
|
|
2165
|
+
},
|
|
2166
|
+
};
|
|
2167
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('[PerpsUserSnapshot]', {
|
|
2168
|
+
stage: 'complete',
|
|
2169
|
+
durationMs: Math.round(__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").performance.now() - snapshotStartedAt),
|
|
2170
|
+
success: true,
|
|
2171
|
+
dexCount: dexs.length,
|
|
2172
|
+
});
|
|
2173
|
+
return snapshot;
|
|
2174
|
+
}
|
|
1948
2175
|
/**
|
|
1949
2176
|
* Get current positions with TP/SL prices
|
|
1950
2177
|
*
|
|
@@ -4296,6 +4523,10 @@ class HyperLiquidProvider {
|
|
|
4296
4523
|
// Clear session caches (ensures fresh state on reconnect/account switch)
|
|
4297
4524
|
__classPrivateFieldGet(this, _HyperLiquidProvider_referralCheckCache, "f").clear();
|
|
4298
4525
|
__classPrivateFieldGet(this, _HyperLiquidProvider_builderFeeCheckCache, "f").clear();
|
|
4526
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderApprovalEpoch, "f") + 1, "f");
|
|
4527
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").clear();
|
|
4528
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_userFeeResolution, undefined, "f");
|
|
4529
|
+
__classPrivateFieldSet(this, _HyperLiquidProvider_userFeeDiscountBips, undefined, "f");
|
|
4299
4530
|
// NOTE: UnifiedAccountCache is global and NOT cleared on disconnect
|
|
4300
4531
|
// to prevent repeated signing requests across reconnections
|
|
4301
4532
|
__classPrivateFieldGet(this, _HyperLiquidProvider_cachedMetaByDex, "f").clear();
|
|
@@ -4477,7 +4708,7 @@ class HyperLiquidProvider {
|
|
|
4477
4708
|
}
|
|
4478
4709
|
}
|
|
4479
4710
|
exports.HyperLiquidProvider = HyperLiquidProvider;
|
|
4480
|
-
_HyperLiquidProvider_deps = new WeakMap(), _HyperLiquidProvider_clientService = new WeakMap(), _HyperLiquidProvider_walletService = new WeakMap(), _HyperLiquidProvider_subscriptionService = new WeakMap(), _HyperLiquidProvider_symbolToAssetId = new WeakMap(), _HyperLiquidProvider_userFeeCache = new WeakMap(), _HyperLiquidProvider_maxLeverageCache = new WeakMap(), _HyperLiquidProvider_cachedMetaByDex = new WeakMap(), _HyperLiquidProvider_cachedMarketDataWithPrices = new WeakMap(), _HyperLiquidProvider_cachedSpotMeta = new WeakMap(), _HyperLiquidProvider_dexDiscoveryCache = new WeakMap(), _HyperLiquidProvider_referralCheckCache = new WeakMap(), _HyperLiquidProvider_builderFeeCheckCache = new WeakMap(), _HyperLiquidProvider_ensureReadyPromise = new WeakMap(), _HyperLiquidProvider_pendingBuilderFeeApprovals = new WeakMap(), _HyperLiquidProvider_compiledAllowlistPatterns = new WeakMap(), _HyperLiquidProvider_compiledBlocklistPatterns = new WeakMap(), _HyperLiquidProvider_userFeeDiscountBips = new WeakMap(), _HyperLiquidProvider_hip3Enabled = new WeakMap(), _HyperLiquidProvider_allowlistMarkets = new WeakMap(), _HyperLiquidProvider_blocklistMarkets = new WeakMap(), _HyperLiquidProvider_useUnifiedAccount = new WeakMap(), _HyperLiquidProvider_dexDiscoveryComplete = new WeakMap(), _HyperLiquidProvider_unifiedAccountSetupNeedsRetry = new WeakMap(), _HyperLiquidProvider_pendingValidatedDexsPromise = new WeakMap(), _HyperLiquidProvider_cachedUsdcTokenId = new WeakMap(), _HyperLiquidProvider_errorMappings = new WeakMap(), _HyperLiquidProvider_scaleOrderGroups = new WeakMap(), _HyperLiquidProvider_chaseSessions = new WeakMap(), _HyperLiquidProvider_chasePlacementsInFlight = new WeakMap(), _HyperLiquidProvider_chaseGeneration = new WeakMap(), _HyperLiquidProvider_clientsInitialized = new WeakMap(), _HyperLiquidProvider_initializationPromise = new WeakMap(), _HyperLiquidProvider_messenger = new WeakMap(), _HyperLiquidProvider_builderAddressTestnet = new WeakMap(), _HyperLiquidProvider_builderAddressMainnet = new WeakMap(), _HyperLiquidProvider_priceDeviationLimit = new WeakMap(), _HyperLiquidProvider_tradingSetupPromise = new WeakMap(), _HyperLiquidProvider_tradingSetupComplete = new WeakMap(), _HyperLiquidProvider_instances = new WeakSet(), _HyperLiquidProvider_compilePatternsSafely = function _HyperLiquidProvider_compilePatternsSafely(patterns, listName) {
|
|
4711
|
+
_HyperLiquidProvider_deps = new WeakMap(), _HyperLiquidProvider_clientService = new WeakMap(), _HyperLiquidProvider_walletService = new WeakMap(), _HyperLiquidProvider_subscriptionService = new WeakMap(), _HyperLiquidProvider_symbolToAssetId = new WeakMap(), _HyperLiquidProvider_userFeeCache = new WeakMap(), _HyperLiquidProvider_maxLeverageCache = new WeakMap(), _HyperLiquidProvider_cachedMetaByDex = new WeakMap(), _HyperLiquidProvider_cachedMarketDataWithPrices = new WeakMap(), _HyperLiquidProvider_cachedSpotMeta = new WeakMap(), _HyperLiquidProvider_dexDiscoveryCache = new WeakMap(), _HyperLiquidProvider_referralCheckCache = new WeakMap(), _HyperLiquidProvider_builderFeeCheckCache = new WeakMap(), _HyperLiquidProvider_ensureReadyPromise = new WeakMap(), _HyperLiquidProvider_pendingBuilderFeeApprovals = new WeakMap(), _HyperLiquidProvider_subscriptionBuilderApprovalEpoch = new WeakMap(), _HyperLiquidProvider_approvedBuilderAddresses = new WeakMap(), _HyperLiquidProvider_compiledAllowlistPatterns = new WeakMap(), _HyperLiquidProvider_compiledBlocklistPatterns = new WeakMap(), _HyperLiquidProvider_userFeeDiscountBips = new WeakMap(), _HyperLiquidProvider_userFeeResolution = new WeakMap(), _HyperLiquidProvider_hip3Enabled = new WeakMap(), _HyperLiquidProvider_allowlistMarkets = new WeakMap(), _HyperLiquidProvider_blocklistMarkets = new WeakMap(), _HyperLiquidProvider_useUnifiedAccount = new WeakMap(), _HyperLiquidProvider_dexDiscoveryComplete = new WeakMap(), _HyperLiquidProvider_unifiedAccountSetupNeedsRetry = new WeakMap(), _HyperLiquidProvider_pendingValidatedDexsPromise = new WeakMap(), _HyperLiquidProvider_cachedUsdcTokenId = new WeakMap(), _HyperLiquidProvider_errorMappings = new WeakMap(), _HyperLiquidProvider_scaleOrderGroups = new WeakMap(), _HyperLiquidProvider_chaseSessions = new WeakMap(), _HyperLiquidProvider_chasePlacementsInFlight = new WeakMap(), _HyperLiquidProvider_chaseGeneration = new WeakMap(), _HyperLiquidProvider_clientsInitialized = new WeakMap(), _HyperLiquidProvider_initializationPromise = new WeakMap(), _HyperLiquidProvider_messenger = new WeakMap(), _HyperLiquidProvider_builderAddressTestnet = new WeakMap(), _HyperLiquidProvider_builderAddressMainnet = new WeakMap(), _HyperLiquidProvider_subscriptionBuilderAddressTestnet = new WeakMap(), _HyperLiquidProvider_subscriptionBuilderAddressMainnet = new WeakMap(), _HyperLiquidProvider_priceDeviationLimit = new WeakMap(), _HyperLiquidProvider_tradingSetupPromise = new WeakMap(), _HyperLiquidProvider_tradingSetupComplete = new WeakMap(), _HyperLiquidProvider_instances = new WeakSet(), _HyperLiquidProvider_compilePatternsSafely = function _HyperLiquidProvider_compilePatternsSafely(patterns, listName) {
|
|
4481
4712
|
const compiled = [];
|
|
4482
4713
|
for (const pattern of patterns) {
|
|
4483
4714
|
try {
|
|
@@ -5101,7 +5332,7 @@ async function _HyperLiquidProvider_getOrFetchPrice(params) {
|
|
|
5101
5332
|
}
|
|
5102
5333
|
// Fallback to REST API if cache miss
|
|
5103
5334
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Price cache miss for getOrFetchPrice, falling back to REST allMids', { symbol });
|
|
5104
|
-
const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient();
|
|
5335
|
+
const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient({ useHttp: true });
|
|
5105
5336
|
const mids = await infoClient.allMids(dexName ? { dex: dexName } : undefined);
|
|
5106
5337
|
const price = parseFloat(mids[symbol] || '0');
|
|
5107
5338
|
// Validate REST price: must be positive and finite
|
|
@@ -5272,8 +5503,16 @@ async function _HyperLiquidProvider_getCachedMeta(params) {
|
|
|
5272
5503
|
return cached;
|
|
5273
5504
|
}
|
|
5274
5505
|
}
|
|
5275
|
-
// Cache miss or skipCache=true - fetch from API
|
|
5276
|
-
|
|
5506
|
+
// Cache miss or skipCache=true - fetch from API.
|
|
5507
|
+
// Bring the SDK clients up first. This is the first client touch on the
|
|
5508
|
+
// write path — placeOrder resolves asset info before it ensures trading
|
|
5509
|
+
// readiness — so without it a cold start or a post-disconnect action fails
|
|
5510
|
+
// with CLIENT_NOT_INITIALIZED instead of waiting for the clients it needs.
|
|
5511
|
+
// Idempotent, and a warm cache hit returns above without reaching here.
|
|
5512
|
+
await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_ensureClientsInitialized).call(this);
|
|
5513
|
+
// Metadata is request/response data, so keep this path available while a
|
|
5514
|
+
// failed WebSocket reconnect is retrying.
|
|
5515
|
+
const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient({ useHttp: true });
|
|
5277
5516
|
// Pass dex only for HIP-3 DEXs; omit for main DEX (empty string).
|
|
5278
5517
|
// Testnet API returns null when dex="" is explicitly sent.
|
|
5279
5518
|
const meta = await infoClient.meta(dexKey ? { dex: dexKey } : undefined);
|
|
@@ -5494,6 +5733,8 @@ async function _HyperLiquidProvider_calculateHip3FeeMultiplier(params) {
|
|
|
5494
5733
|
}
|
|
5495
5734
|
}, _HyperLiquidProvider_getCacheKey = function _HyperLiquidProvider_getCacheKey(network, userAddress) {
|
|
5496
5735
|
return `${network}:${userAddress.toLowerCase()}`;
|
|
5736
|
+
}, _HyperLiquidProvider_getApprovedBuilderKey = function _HyperLiquidProvider_getApprovedBuilderKey(network, userAddress, builderAddress) {
|
|
5737
|
+
return `${__classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getCacheKey).call(this, network, userAddress)}:${builderAddress.toLowerCase()}`;
|
|
5497
5738
|
}, _HyperLiquidProvider_fetchMarketsForDex =
|
|
5498
5739
|
/**
|
|
5499
5740
|
* Fetch markets for a specific DEX with optional filtering
|
|
@@ -5821,12 +6062,12 @@ async function _HyperLiquidProvider_queryUserDataAcrossDexs(baseParams, queryFn)
|
|
|
5821
6062
|
/**
|
|
5822
6063
|
* Check current builder fee approval for the user
|
|
5823
6064
|
*
|
|
6065
|
+
* @param builder - Builder address to query.
|
|
6066
|
+
* @param userAddress - Account whose approval should be queried.
|
|
5824
6067
|
* @returns Current max fee rate or null if not approved
|
|
5825
6068
|
*/
|
|
5826
|
-
async function _HyperLiquidProvider_checkBuilderFeeApproval() {
|
|
6069
|
+
async function _HyperLiquidProvider_checkBuilderFeeApproval(builder, userAddress) {
|
|
5827
6070
|
const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient();
|
|
5828
|
-
const userAddress = await __classPrivateFieldGet(this, _HyperLiquidProvider_walletService, "f").getUserAddressWithDefault();
|
|
5829
|
-
const builder = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderAddress).call(this, __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode());
|
|
5830
6071
|
return infoClient.maxBuilderFee({
|
|
5831
6072
|
user: userAddress,
|
|
5832
6073
|
builder,
|
|
@@ -5855,6 +6096,7 @@ async function _HyperLiquidProvider_ensureBuilderFeeApproval() {
|
|
|
5855
6096
|
if (globalCached?.attempted && globalCached?.success) {
|
|
5856
6097
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('[ensureBuilderFeeApproval] Using global cache (prevents hardware wallet prompt spam)', { network, success: globalCached.success });
|
|
5857
6098
|
__classPrivateFieldGet(this, _HyperLiquidProvider_builderFeeCheckCache, "f").set(cacheKey, true);
|
|
6099
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").add(__classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getApprovedBuilderKey).call(this, network, userAddress, builderAddress));
|
|
5858
6100
|
return;
|
|
5859
6101
|
}
|
|
5860
6102
|
// Check if another provider instance is currently attempting this operation
|
|
@@ -5874,7 +6116,7 @@ async function _HyperLiquidProvider_ensureBuilderFeeApproval() {
|
|
|
5874
6116
|
completeInFlight();
|
|
5875
6117
|
return;
|
|
5876
6118
|
}
|
|
5877
|
-
const { isApproved, requiredDecimal } = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeStatus).call(this);
|
|
6119
|
+
const { isApproved, requiredDecimal } = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeStatus).call(this, builderAddress, userAddress);
|
|
5878
6120
|
if (isApproved) {
|
|
5879
6121
|
// User already has approval on-chain
|
|
5880
6122
|
TradingReadinessCache_js_1.PerpsSigningCache.setBuilderFee(network, userAddress, {
|
|
@@ -5882,6 +6124,7 @@ async function _HyperLiquidProvider_ensureBuilderFeeApproval() {
|
|
|
5882
6124
|
success: true,
|
|
5883
6125
|
});
|
|
5884
6126
|
__classPrivateFieldGet(this, _HyperLiquidProvider_builderFeeCheckCache, "f").set(cacheKey, true);
|
|
6127
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").add(__classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getApprovedBuilderKey).call(this, network, userAddress, builderAddress));
|
|
5885
6128
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('[ensureBuilderFeeApproval] Already approved on-chain', { network });
|
|
5886
6129
|
}
|
|
5887
6130
|
else {
|
|
@@ -5893,7 +6136,7 @@ async function _HyperLiquidProvider_ensureBuilderFeeApproval() {
|
|
|
5893
6136
|
maxFeeRate,
|
|
5894
6137
|
});
|
|
5895
6138
|
// Verify approval was successful before caching
|
|
5896
|
-
const afterApprovalDecimal = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeApproval).call(this);
|
|
6139
|
+
const afterApprovalDecimal = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeApproval).call(this, builderAddress, userAddress);
|
|
5897
6140
|
if (afterApprovalDecimal === null ||
|
|
5898
6141
|
afterApprovalDecimal < requiredDecimal) {
|
|
5899
6142
|
throw new Error('[HyperLiquidProvider] Builder fee approval verification failed');
|
|
@@ -5904,6 +6147,7 @@ async function _HyperLiquidProvider_ensureBuilderFeeApproval() {
|
|
|
5904
6147
|
success: true,
|
|
5905
6148
|
});
|
|
5906
6149
|
__classPrivateFieldGet(this, _HyperLiquidProvider_builderFeeCheckCache, "f").set(cacheKey, true);
|
|
6150
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").add(__classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getApprovedBuilderKey).call(this, network, userAddress, builderAddress));
|
|
5907
6151
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('[ensureBuilderFeeApproval] Approval successful', {
|
|
5908
6152
|
builder: builderAddress,
|
|
5909
6153
|
maxFeeRate,
|
|
@@ -5935,10 +6179,12 @@ async function _HyperLiquidProvider_ensureBuilderFeeApproval() {
|
|
|
5935
6179
|
/**
|
|
5936
6180
|
* Check if builder fee is approved for the current user
|
|
5937
6181
|
*
|
|
6182
|
+
* @param builderAddress - Builder address to query.
|
|
6183
|
+
* @param userAddress - Account whose approval should be queried.
|
|
5938
6184
|
* @returns Object with approval status and current rate
|
|
5939
6185
|
*/
|
|
5940
|
-
async function _HyperLiquidProvider_checkBuilderFeeStatus() {
|
|
5941
|
-
const currentApproval = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeApproval).call(this);
|
|
6186
|
+
async function _HyperLiquidProvider_checkBuilderFeeStatus(builderAddress, userAddress) {
|
|
6187
|
+
const currentApproval = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_checkBuilderFeeApproval).call(this, builderAddress, userAddress);
|
|
5942
6188
|
const requiredDecimal = hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeDecimal;
|
|
5943
6189
|
return {
|
|
5944
6190
|
isApproved: currentApproval !== null && currentApproval >= requiredDecimal,
|
|
@@ -6492,16 +6738,7 @@ async function _HyperLiquidProvider_handleHip3PreOrder(params) {
|
|
|
6492
6738
|
async function _HyperLiquidProvider_submitOrderWithRollback(params) {
|
|
6493
6739
|
const { orders, grouping, isHip3Order, dexName, transferInfo, symbol } = params;
|
|
6494
6740
|
const exchangeClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getExchangeClient();
|
|
6495
|
-
|
|
6496
|
-
let builderFee = hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps;
|
|
6497
|
-
if (__classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") !== undefined) {
|
|
6498
|
-
builderFee = Math.floor(builderFee * (1 - __classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") / hyperLiquidConfig_js_1.BASIS_POINTS_DIVISOR));
|
|
6499
|
-
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Applying builder fee discount', {
|
|
6500
|
-
originalFee: hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps,
|
|
6501
|
-
discountBips: __classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f"),
|
|
6502
|
-
discountedFee: builderFee,
|
|
6503
|
-
});
|
|
6504
|
-
}
|
|
6741
|
+
const builder = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderOrderContext).call(this);
|
|
6505
6742
|
__classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Submitting order via asset ID routing', {
|
|
6506
6743
|
symbol,
|
|
6507
6744
|
assetId: orders[0].a,
|
|
@@ -6514,10 +6751,7 @@ async function _HyperLiquidProvider_submitOrderWithRollback(params) {
|
|
|
6514
6751
|
const result = await exchangeClient.order({
|
|
6515
6752
|
orders,
|
|
6516
6753
|
grouping,
|
|
6517
|
-
builder
|
|
6518
|
-
b: __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderAddress).call(this, __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode()),
|
|
6519
|
-
f: builderFee,
|
|
6520
|
-
},
|
|
6754
|
+
builder,
|
|
6521
6755
|
});
|
|
6522
6756
|
if (result.status !== 'ok') {
|
|
6523
6757
|
throw new Error(`Order failed: ${JSON.stringify(result)}`);
|
|
@@ -6835,10 +7069,7 @@ async function _HyperLiquidProvider_placeScaleOrder(params, context) {
|
|
|
6835
7069
|
const result = await exchangeClient.order({
|
|
6836
7070
|
orders,
|
|
6837
7071
|
grouping: 'na',
|
|
6838
|
-
builder:
|
|
6839
|
-
b: __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderAddress).call(this, __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode()),
|
|
6840
|
-
f: __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getDiscountedBuilderFee).call(this),
|
|
6841
|
-
},
|
|
7072
|
+
builder: await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderOrderContext).call(this),
|
|
6842
7073
|
});
|
|
6843
7074
|
if (result.status !== 'ok') {
|
|
6844
7075
|
throw new Error(`Scale order failed: ${JSON.stringify(result)}`);
|
|
@@ -6922,8 +7153,8 @@ async function _HyperLiquidProvider_startChaseSession(params, context, generatio
|
|
|
6922
7153
|
if (generation !== __classPrivateFieldGet(this, _HyperLiquidProvider_chaseGeneration, "f")) {
|
|
6923
7154
|
throw new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.ORDER_CHASE_ABANDONED);
|
|
6924
7155
|
}
|
|
6925
|
-
// Read once, while the caller's
|
|
6926
|
-
const
|
|
7156
|
+
// Read once, while the caller's fee-source context is still set.
|
|
7157
|
+
const builder = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderOrderContext).call(this);
|
|
6927
7158
|
// Held onto rather than looked up again after the submission returns.
|
|
6928
7159
|
// `disconnect` drops the service's client reference synchronously, so a
|
|
6929
7160
|
// retraction that asked for a client after the fact would be refused one
|
|
@@ -6936,7 +7167,8 @@ async function _HyperLiquidProvider_startChaseSession(params, context, generatio
|
|
|
6936
7167
|
price: quotePrice,
|
|
6937
7168
|
size: formattedSize,
|
|
6938
7169
|
reduceOnly: params.reduceOnly ?? false,
|
|
6939
|
-
builderFee,
|
|
7170
|
+
builderFee: builder.f,
|
|
7171
|
+
builderAddress: builder.b,
|
|
6940
7172
|
exchangeClient: placingClient,
|
|
6941
7173
|
});
|
|
6942
7174
|
const intervalMs = params.chaseIntervalMs ?? perpsConfig_js_1.CHASE_ORDER_CONFIG.DefaultIntervalMs;
|
|
@@ -6952,7 +7184,8 @@ async function _HyperLiquidProvider_startChaseSession(params, context, generatio
|
|
|
6952
7184
|
pendingReplacement: null,
|
|
6953
7185
|
restingPrice: quotePrice,
|
|
6954
7186
|
intervalMs,
|
|
6955
|
-
builderFee,
|
|
7187
|
+
builderFee: builder.f,
|
|
7188
|
+
builderAddress: builder.b,
|
|
6956
7189
|
deadline: Date.now() +
|
|
6957
7190
|
(params.chaseMaxDurationMs ?? perpsConfig_js_1.CHASE_ORDER_CONFIG.DefaultMaxDurationMs),
|
|
6958
7191
|
maxRepricings: params.chaseMaxRepricings ?? perpsConfig_js_1.CHASE_ORDER_CONFIG.DefaultMaxRepricings,
|
|
@@ -7058,6 +7291,7 @@ async function _HyperLiquidProvider_getChaseQuotePrice(params) {
|
|
|
7058
7291
|
* @param params.reduceOnly - Whether the order may only reduce a position.
|
|
7059
7292
|
* @param params.builderFee - Builder fee, in tenths of a basis point, captured
|
|
7060
7293
|
* when the session started so replacements keep the rate they were quoted at.
|
|
7294
|
+
* @param params.builderAddress - Builder address captured with the fee.
|
|
7061
7295
|
* @param params.exchangeClient - Client to submit through. Passed in rather
|
|
7062
7296
|
* than looked up here so a first placement can keep the instance it signed
|
|
7063
7297
|
* with, which is the only one that can take the order back once `disconnect`
|
|
@@ -7080,7 +7314,7 @@ async function _HyperLiquidProvider_restChaseOrder(params) {
|
|
|
7080
7314
|
],
|
|
7081
7315
|
grouping: 'na',
|
|
7082
7316
|
builder: {
|
|
7083
|
-
b:
|
|
7317
|
+
b: params.builderAddress,
|
|
7084
7318
|
f: params.builderFee,
|
|
7085
7319
|
},
|
|
7086
7320
|
});
|
|
@@ -7258,6 +7492,7 @@ async function _HyperLiquidProvider_runChaseTick(sessionId) {
|
|
|
7258
7492
|
size: remaining,
|
|
7259
7493
|
reduceOnly: session.reduceOnly,
|
|
7260
7494
|
builderFee: session.builderFee,
|
|
7495
|
+
builderAddress: session.builderAddress,
|
|
7261
7496
|
// A running session is on a live provider, so the current client is
|
|
7262
7497
|
// the right one; only the first placement has a teardown to survive.
|
|
7263
7498
|
exchangeClient: __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getExchangeClient(),
|
|
@@ -7631,6 +7866,33 @@ async function _HyperLiquidProvider_cancelChaseOrder(params) {
|
|
|
7631
7866
|
}
|
|
7632
7867
|
return Math.floor(hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps *
|
|
7633
7868
|
(1 - __classPrivateFieldGet(this, _HyperLiquidProvider_userFeeDiscountBips, "f") / hyperLiquidConfig_js_1.BASIS_POINTS_DIVISOR));
|
|
7869
|
+
}, _HyperLiquidProvider_getBuilderOrderContext =
|
|
7870
|
+
/**
|
|
7871
|
+
* Resolve the builder payload for the current operation.
|
|
7872
|
+
*
|
|
7873
|
+
* Subscription waivers use their dedicated builder only after approval is
|
|
7874
|
+
* cached for this provider/account session. Until then, the ordinary builder
|
|
7875
|
+
* and standard fee keep the trade attributable and non-blocking.
|
|
7876
|
+
*
|
|
7877
|
+
* @returns HyperLiquid builder address and fee payload.
|
|
7878
|
+
*/
|
|
7879
|
+
async function _HyperLiquidProvider_getBuilderOrderContext() {
|
|
7880
|
+
const isTestnet = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").isTestnetMode();
|
|
7881
|
+
const network = isTestnet ? 'testnet' : 'mainnet';
|
|
7882
|
+
const defaultBuilder = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getBuilderAddress).call(this, isTestnet);
|
|
7883
|
+
if (__classPrivateFieldGet(this, _HyperLiquidProvider_userFeeResolution, "f")?.source === 'subscription') {
|
|
7884
|
+
const subscriptionBuilder = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getSubscriptionBuilderAddress).call(this, isTestnet);
|
|
7885
|
+
const userAddress = await __classPrivateFieldGet(this, _HyperLiquidProvider_walletService, "f").getUserAddressWithDefault();
|
|
7886
|
+
if (subscriptionBuilder &&
|
|
7887
|
+
__classPrivateFieldGet(this, _HyperLiquidProvider_approvedBuilderAddresses, "f").has(__classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getApprovedBuilderKey).call(this, network, userAddress, subscriptionBuilder))) {
|
|
7888
|
+
return { b: subscriptionBuilder, f: 0 };
|
|
7889
|
+
}
|
|
7890
|
+
return {
|
|
7891
|
+
b: defaultBuilder,
|
|
7892
|
+
f: hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MaxFeeTenthsBps,
|
|
7893
|
+
};
|
|
7894
|
+
}
|
|
7895
|
+
return { b: defaultBuilder, f: __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getDiscountedBuilderFee).call(this) };
|
|
7634
7896
|
}, _HyperLiquidProvider_fetchOpenOrders =
|
|
7635
7897
|
/**
|
|
7636
7898
|
* Read the account's currently resting orders.
|
|
@@ -7924,6 +8186,10 @@ async function _HyperLiquidProvider_excludeNonUsdcCollateralResults(results) {
|
|
|
7924
8186
|
}
|
|
7925
8187
|
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
7926
8188
|
return __classPrivateFieldGet(this, _HyperLiquidProvider_builderAddressMainnet, "f") || hyperLiquidConfig_js_1.BUILDER_FEE_CONFIG.MainnetBuilder;
|
|
8189
|
+
}, _HyperLiquidProvider_getSubscriptionBuilderAddress = function _HyperLiquidProvider_getSubscriptionBuilderAddress(isTestnet) {
|
|
8190
|
+
return isTestnet
|
|
8191
|
+
? __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderAddressTestnet, "f")
|
|
8192
|
+
: __classPrivateFieldGet(this, _HyperLiquidProvider_subscriptionBuilderAddressMainnet, "f");
|
|
7927
8193
|
}, _HyperLiquidProvider_getReferralCode = function _HyperLiquidProvider_getReferralCode(isTestnet) {
|
|
7928
8194
|
return isTestnet
|
|
7929
8195
|
? hyperLiquidConfig_js_1.REFERRAL_CONFIG.TestnetCode
|