@metamask-previews/perps-controller 13.1.0-preview-965e373 → 13.1.0-preview-b13d916

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 CHANGED
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Fixed
11
+
12
+ - Prevent transient HyperLiquid WebSocket disconnects from failing the first TP/SL update by checking builder-fee approval over HTTP ([#9997](https://github.com/MetaMask/core/pull/9997))
13
+ - Stop reporting `TPSL_UPDATE_FAILED` from `updatePositionTPSL` when HyperLiquid accepts a trigger with `waitingForTrigger`; accepted triggers without response order IDs are reconciled before mixed-failure cleanup ([#9995](https://github.com/MetaMask/core/pull/9995))
14
+
10
15
  ## [13.1.0]
11
16
 
12
17
  ### Added
@@ -15,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
20
 
16
21
  ### Fixed
17
22
 
23
+ - Preserve trigger prices and normalized trigger order types in HyperLiquid historical orders while retaining their lifecycle and execution semantics ([#9982](https://github.com/MetaMask/core/pull/9982)).
18
24
  - Classify `xyz:CBRS` and `xyz:SPCX` as stocks in the Hyperliquid fallback market map ([#9988](https://github.com/MetaMask/core/pull/9988))
19
25
 
20
26
  ## [13.0.0]
@@ -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, _a, _HyperLiquidProvider_deps, _HyperLiquidProvider_clientService, _HyperLiquidProvider_walletService, _HyperLiquidProvider_subscriptionService, _HyperLiquidProvider_symbolToAssetId, _HyperLiquidProvider_userFeeCache, _HyperLiquidProvider_maxLeverageCache, _HyperLiquidProvider_cachedMetaByDex, _HyperLiquidProvider_orderCapabilitiesMarketsByDex, _HyperLiquidProvider_orderCapabilitiesRefreshByDex, _HyperLiquidProvider_isDisconnected, _HyperLiquidProvider_disconnectOperationsInFlight, _HyperLiquidProvider_disconnectOperationPromise, _HyperLiquidProvider_lifecycleGeneration, _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_cancelledScaleOrderGroups, _HyperLiquidProvider_trackedTwapOrdersByMessenger, _HyperLiquidProvider_trackedTwapOrders, _HyperLiquidProvider_chaseSessions, _HyperLiquidProvider_chaseTerminations, _HyperLiquidProvider_terminatedChaseHandles, _HyperLiquidProvider_chasePlacementsInFlight, _HyperLiquidProvider_chasePlacementWaiters, _HyperLiquidProvider_chaseTickQueue, _HyperLiquidProvider_strategyGeneration, _HyperLiquidProvider_chasePlacementBlockers, _HyperLiquidProvider_clientsInitialized, _HyperLiquidProvider_initializationPromise, _HyperLiquidProvider_messenger, _HyperLiquidProvider_builderAddressTestnet, _HyperLiquidProvider_builderAddressMainnet, _HyperLiquidProvider_subscriptionBuilderAddressTestnet, _HyperLiquidProvider_subscriptionBuilderAddressMainnet, _HyperLiquidProvider_priceDeviationLimit, _HyperLiquidProvider_onChaseOrderMaxDistanceReached, _HyperLiquidProvider_resolveOrderFeePolicy, _HyperLiquidProvider_assertProviderLifecycleCurrent, _HyperLiquidProvider_assertCacheWriteLifecycleCurrent, _HyperLiquidProvider_isCacheWriteLifecycleCurrent, _HyperLiquidProvider_getFreshOrderCapabilityMarkets, _HyperLiquidProvider_compilePatternsSafely, _HyperLiquidProvider_ensureClientsInitialized, _HyperLiquidProvider_isWalletOnHyperliquid, _HyperLiquidProvider_isHyperliquidMultiSigAccount, _HyperLiquidProvider_ensureUnifiedAccountEnabled, _HyperLiquidProvider_ensureReady, _HyperLiquidProvider_tradingSetupPromise, _HyperLiquidProvider_tradingSetupComplete, _HyperLiquidProvider_builderFeeSetupPromises, _HyperLiquidProvider_ensureBuilderFeeSetup, _HyperLiquidProvider_ensureReadyForTrading, _HyperLiquidProvider_getOrFetchPrice, _HyperLiquidProvider_filterFills, _HyperLiquidProvider_getAllAvailableDexs, _HyperLiquidProvider_getValidatedDexs, _HyperLiquidProvider_fetchValidatedDexsInternal, _HyperLiquidProvider_getCachedMeta, _HyperLiquidProvider_fetchMeta, _HyperLiquidProvider_cacheDexMetadata, _HyperLiquidProvider_cacheDexMetadataFromRead, _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_submitPreparedStrategy, _HyperLiquidProvider_prepareStrategyPlacement, _HyperLiquidProvider_getMinimumOrderSize, _HyperLiquidProvider_buildScaleLadder, _HyperLiquidProvider_placeTwapOrder, _HyperLiquidProvider_placeScaleOrder, _HyperLiquidProvider_startChaseSession, _HyperLiquidProvider_getChaseQuotePrice, _HyperLiquidProvider_restChaseOrder, _HyperLiquidProvider_scheduleChaseTick, _HyperLiquidProvider_pauseChaseTicksForPlacement, _HyperLiquidProvider_resumeChaseTicksAfterPlacement, _HyperLiquidProvider_recoverFailedChaseTick, _HyperLiquidProvider_runChaseTick, _HyperLiquidProvider_resolveOwnRestingSizes, _HyperLiquidProvider_readOrderRemainder, _HyperLiquidProvider_cancelChaseChild, _HyperLiquidProvider_retractOrphanedChaseOrder, _HyperLiquidProvider_stopChaseSession, _HyperLiquidProvider_rebalanceChaseSession, _HyperLiquidProvider_adaptTwapOrder, _HyperLiquidProvider_rebalanceTrackedTwapOrder, _HyperLiquidProvider_rebalanceTerminalHip3Twaps, _HyperLiquidProvider_cancelStrategyOrder, _HyperLiquidProvider_cancelTwapOrder, _HyperLiquidProvider_cancelScaleOrder, _HyperLiquidProvider_cancelChaseOrder, _HyperLiquidProvider_performChaseTermination, _HyperLiquidProvider_cancelOrderRequests, _HyperLiquidProvider_cancelOrderRequestBatch, _HyperLiquidProvider_readOrderPlacementOutcome, _HyperLiquidProvider_readOrderIdFromStatus, _HyperLiquidProvider_getDiscountedBuilderFee, _HyperLiquidProvider_getBuilderOrderContext, _HyperLiquidProvider_fetchOpenOrders, _HyperLiquidProvider_resolveReplacementOrderId, _HyperLiquidProvider_getStandaloneValidatedDexs, _HyperLiquidProvider_queryDexPositions, _HyperLiquidProvider_restoreScaleOrderGroups, _HyperLiquidProvider_getAllMids, _HyperLiquidProvider_fetchSingleDexFresh, _HyperLiquidProvider_excludeNonUsdcCollateralResults, _HyperLiquidProvider_mergeDexResultsInto, _HyperLiquidProvider_cacheFreshMarketDataSnapshot, _HyperLiquidProvider_getStaleMarketDataSnapshot, _HyperLiquidProvider_isFeeCacheValid, _HyperLiquidProvider_performDisconnect, _HyperLiquidProvider_getBuilderAddress, _HyperLiquidProvider_getSubscriptionBuilderAddress, _HyperLiquidProvider_getReferralCode, _HyperLiquidProvider_ensureReferralSet, _HyperLiquidProvider_isReferralCodeReady, _HyperLiquidProvider_checkReferralSet, _HyperLiquidProvider_setReferralCode;
13
+ var _HyperLiquidProvider_instances, _a, _HyperLiquidProvider_deps, _HyperLiquidProvider_clientService, _HyperLiquidProvider_walletService, _HyperLiquidProvider_subscriptionService, _HyperLiquidProvider_symbolToAssetId, _HyperLiquidProvider_userFeeCache, _HyperLiquidProvider_maxLeverageCache, _HyperLiquidProvider_cachedMetaByDex, _HyperLiquidProvider_orderCapabilitiesMarketsByDex, _HyperLiquidProvider_orderCapabilitiesRefreshByDex, _HyperLiquidProvider_isDisconnected, _HyperLiquidProvider_disconnectOperationsInFlight, _HyperLiquidProvider_disconnectOperationPromise, _HyperLiquidProvider_lifecycleGeneration, _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_cancelledScaleOrderGroups, _HyperLiquidProvider_trackedTwapOrdersByMessenger, _HyperLiquidProvider_trackedTwapOrders, _HyperLiquidProvider_chaseSessions, _HyperLiquidProvider_chaseTerminations, _HyperLiquidProvider_terminatedChaseHandles, _HyperLiquidProvider_chasePlacementsInFlight, _HyperLiquidProvider_chasePlacementWaiters, _HyperLiquidProvider_chaseTickQueue, _HyperLiquidProvider_strategyGeneration, _HyperLiquidProvider_chasePlacementBlockers, _HyperLiquidProvider_clientsInitialized, _HyperLiquidProvider_initializationPromise, _HyperLiquidProvider_messenger, _HyperLiquidProvider_builderAddressTestnet, _HyperLiquidProvider_builderAddressMainnet, _HyperLiquidProvider_subscriptionBuilderAddressTestnet, _HyperLiquidProvider_subscriptionBuilderAddressMainnet, _HyperLiquidProvider_priceDeviationLimit, _HyperLiquidProvider_onChaseOrderMaxDistanceReached, _HyperLiquidProvider_resolveOrderFeePolicy, _HyperLiquidProvider_assertProviderLifecycleCurrent, _HyperLiquidProvider_assertCacheWriteLifecycleCurrent, _HyperLiquidProvider_isCacheWriteLifecycleCurrent, _HyperLiquidProvider_getFreshOrderCapabilityMarkets, _HyperLiquidProvider_compilePatternsSafely, _HyperLiquidProvider_ensureClientsInitialized, _HyperLiquidProvider_isWalletOnHyperliquid, _HyperLiquidProvider_isHyperliquidMultiSigAccount, _HyperLiquidProvider_ensureUnifiedAccountEnabled, _HyperLiquidProvider_ensureReady, _HyperLiquidProvider_tradingSetupPromise, _HyperLiquidProvider_tradingSetupComplete, _HyperLiquidProvider_builderFeeSetupPromises, _HyperLiquidProvider_ensureBuilderFeeSetup, _HyperLiquidProvider_ensureReadyForTrading, _HyperLiquidProvider_getOrFetchPrice, _HyperLiquidProvider_filterFills, _HyperLiquidProvider_getAllAvailableDexs, _HyperLiquidProvider_getValidatedDexs, _HyperLiquidProvider_fetchValidatedDexsInternal, _HyperLiquidProvider_getCachedMeta, _HyperLiquidProvider_fetchMeta, _HyperLiquidProvider_cacheDexMetadata, _HyperLiquidProvider_cacheDexMetadataFromRead, _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_submitPreparedStrategy, _HyperLiquidProvider_prepareStrategyPlacement, _HyperLiquidProvider_getMinimumOrderSize, _HyperLiquidProvider_buildScaleLadder, _HyperLiquidProvider_placeTwapOrder, _HyperLiquidProvider_placeScaleOrder, _HyperLiquidProvider_startChaseSession, _HyperLiquidProvider_getChaseQuotePrice, _HyperLiquidProvider_restChaseOrder, _HyperLiquidProvider_scheduleChaseTick, _HyperLiquidProvider_pauseChaseTicksForPlacement, _HyperLiquidProvider_resumeChaseTicksAfterPlacement, _HyperLiquidProvider_recoverFailedChaseTick, _HyperLiquidProvider_runChaseTick, _HyperLiquidProvider_resolveOwnRestingSizes, _HyperLiquidProvider_readOrderRemainder, _HyperLiquidProvider_cancelChaseChild, _HyperLiquidProvider_retractOrphanedChaseOrder, _HyperLiquidProvider_stopChaseSession, _HyperLiquidProvider_rebalanceChaseSession, _HyperLiquidProvider_adaptTwapOrder, _HyperLiquidProvider_rebalanceTrackedTwapOrder, _HyperLiquidProvider_rebalanceTerminalHip3Twaps, _HyperLiquidProvider_cancelStrategyOrder, _HyperLiquidProvider_cancelTwapOrder, _HyperLiquidProvider_cancelScaleOrder, _HyperLiquidProvider_cancelChaseOrder, _HyperLiquidProvider_performChaseTermination, _HyperLiquidProvider_cancelOrderRequests, _HyperLiquidProvider_cancelOrderRequestBatch, _HyperLiquidProvider_readOrderPlacementOutcome, _HyperLiquidProvider_readTpslOrderPlacementOutcome, _HyperLiquidProvider_reconcileTpslOrderPlacementOutcomes, _HyperLiquidProvider_readOrderIdFromStatus, _HyperLiquidProvider_getDiscountedBuilderFee, _HyperLiquidProvider_getBuilderOrderContext, _HyperLiquidProvider_fetchOpenOrders, _HyperLiquidProvider_resolveReplacementOrderId, _HyperLiquidProvider_getStandaloneValidatedDexs, _HyperLiquidProvider_queryDexPositions, _HyperLiquidProvider_restoreScaleOrderGroups, _HyperLiquidProvider_getAllMids, _HyperLiquidProvider_fetchSingleDexFresh, _HyperLiquidProvider_excludeNonUsdcCollateralResults, _HyperLiquidProvider_mergeDexResultsInto, _HyperLiquidProvider_cacheFreshMarketDataSnapshot, _HyperLiquidProvider_getStaleMarketDataSnapshot, _HyperLiquidProvider_isFeeCacheValid, _HyperLiquidProvider_performDisconnect, _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");
@@ -18,6 +18,7 @@ const bignumber_js_1 = require("bignumber.js");
18
18
  const uuid_1 = require("uuid");
19
19
  const eventNames_js_1 = require("../constants/eventNames.cjs");
20
20
  const hyperLiquidConfig_js_1 = require("../constants/hyperLiquidConfig.cjs");
21
+ const orderTypes_js_1 = require("../constants/orderTypes.cjs");
21
22
  const perpsConfig_js_1 = require("../constants/perpsConfig.cjs");
22
23
  const transactionsHistoryConfig_js_1 = require("../constants/transactionsHistoryConfig.cjs");
23
24
  const perpsErrorCodes_js_1 = require("../perpsErrorCodes.cjs");
@@ -38,10 +39,18 @@ const idUtils_js_1 = require("../utils/idUtils.cjs");
38
39
  const marketDataTransform_js_1 = require("../utils/marketDataTransform.cjs");
39
40
  const marketUtils_js_1 = require("../utils/marketUtils.cjs");
40
41
  const orderCalculations_js_1 = require("../utils/orderCalculations.cjs");
41
- const orderTypes_js_1 = require("../utils/orderTypes.cjs");
42
+ const orderTypes_js_2 = require("../utils/orderTypes.cjs");
42
43
  const standaloneInfoClient_js_1 = require("../utils/standaloneInfoClient.cjs");
43
44
  const stringParseUtils_js_1 = require("../utils/stringParseUtils.cjs");
44
45
  // getStreamManagerInstance removed: use this.#deps.streamManager instead
46
+ const HISTORICAL_ORDER_TYPE_BY_DETAILED_TYPE = {
47
+ [orderTypes_js_1.DETAILED_ORDER_TYPES.LIMIT]: 'limit',
48
+ [orderTypes_js_1.DETAILED_ORDER_TYPES.MARKET]: 'market',
49
+ [orderTypes_js_1.DETAILED_ORDER_TYPES.STOP_LIMIT]: 'limit',
50
+ [orderTypes_js_1.DETAILED_ORDER_TYPES.STOP_MARKET]: 'market',
51
+ [orderTypes_js_1.DETAILED_ORDER_TYPES.TAKE_PROFIT_LIMIT]: 'limit',
52
+ [orderTypes_js_1.DETAILED_ORDER_TYPES.TAKE_PROFIT_MARKET]: 'market',
53
+ };
45
54
  /**
46
55
  * Type guard to check if a status is an object (not a string literal like "waitingForFill")
47
56
  * The SDK returns status as a union of object types and string literals.
@@ -349,11 +358,11 @@ function collectPositionTriggerOrders(params) {
349
358
  const triggerOrders = Array.from(byOrderId.values());
350
359
  const takeProfitOrders = triggerOrders.filter((order) => order.direction === 'take_profit');
351
360
  const stopLossOrders = triggerOrders.filter((order) => order.direction !== 'take_profit');
352
- const takeProfitSummaryPrice = (0, orderTypes_js_1.resolvePositionTriggerSummaryPrice)({
361
+ const takeProfitSummaryPrice = (0, orderTypes_js_2.resolvePositionTriggerSummaryPrice)({
353
362
  triggerOrders: takeProfitOrders,
354
363
  scannedPrice: takeProfitPrice,
355
364
  });
356
- const stopLossSummaryPrice = (0, orderTypes_js_1.resolvePositionTriggerSummaryPrice)({
365
+ const stopLossSummaryPrice = (0, orderTypes_js_2.resolvePositionTriggerSummaryPrice)({
357
366
  triggerOrders: stopLossOrders,
358
367
  scannedPrice: stopLossPrice,
359
368
  });
@@ -914,7 +923,7 @@ class HyperLiquidProvider {
914
923
  // single order, so they leave the shared path here — before the order
915
924
  // array, the HIP-3 transfer, and the atomic single-order submit, none of
916
925
  // which describe what a TWAP, a ladder, or a chase does.
917
- if ((0, orderTypes_js_1.isStrategyOrderType)(params.orderType)) {
926
+ if ((0, orderTypes_js_2.isStrategyOrderType)(params.orderType)) {
918
927
  return await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_placeStrategyOrder).call(this, params, params.orderType);
919
928
  }
920
929
  // Extract DEX name for API calls (main DEX = null)
@@ -1095,7 +1104,7 @@ class HyperLiquidProvider {
1095
1104
  if (isMinimumOrderError &&
1096
1105
  retryCount === 0 &&
1097
1106
  !params.reduceOnly &&
1098
- !(0, orderTypes_js_1.isStrategyOrderType)(params.orderType)) {
1107
+ !(0, orderTypes_js_2.isStrategyOrderType)(params.orderType)) {
1099
1108
  let adjustedUsdAmount;
1100
1109
  let originalValue;
1101
1110
  if (params.usdAmount) {
@@ -1325,7 +1334,7 @@ class HyperLiquidProvider {
1325
1334
  // `modify` rebuilds an order as a plain limit/market order, so a trigger
1326
1335
  // on either side of the edit would be silently dropped. Reject a resting
1327
1336
  // trigger order as well as an edit *into* one; cancel and re-place instead.
1328
- if ((0, orderTypes_js_1.isTriggerOrderType)(params.newOrder.orderType)) {
1337
+ if ((0, orderTypes_js_2.isTriggerOrderType)(params.newOrder.orderType)) {
1329
1338
  return {
1330
1339
  success: false,
1331
1340
  error: perpsErrorCodes_js_1.PERPS_ERROR_CODES.ORDER_EDIT_TRIGGER_UNSUPPORTED,
@@ -1336,7 +1345,7 @@ class HyperLiquidProvider {
1336
1345
  // FrontendMarket modification and quietly drop the TWAP schedule, the
1337
1346
  // ladder, or the chase loop the caller asked for. Cancel by the strategy
1338
1347
  // handle and place again.
1339
- if ((0, orderTypes_js_1.isStrategyOrderType)(params.newOrder.orderType)) {
1348
+ if ((0, orderTypes_js_2.isStrategyOrderType)(params.newOrder.orderType)) {
1340
1349
  return {
1341
1350
  success: false,
1342
1351
  error: perpsErrorCodes_js_1.PERPS_ERROR_CODES.ORDER_EDIT_STRATEGY_UNSUPPORTED,
@@ -1454,7 +1463,7 @@ class HyperLiquidProvider {
1454
1463
  // A limit order honours the caller's time in force; validation above has
1455
1464
  // already rejected one on any other order shape.
1456
1465
  t: params.newOrder.orderType === 'limit'
1457
- ? { limit: { tif: (0, orderTypes_js_1.toSDKTimeInForce)(params.newOrder.timeInForce) } }
1466
+ ? { limit: { tif: (0, orderTypes_js_2.toSDKTimeInForce)(params.newOrder.timeInForce) } }
1458
1467
  : { limit: { tif: 'FrontendMarket' } }, // True market order
1459
1468
  c: params.newOrder.clientOrderId
1460
1469
  ? params.newOrder.clientOrderId
@@ -1515,7 +1524,7 @@ class HyperLiquidProvider {
1515
1524
  // A strategy handle is not an exchange order ID, so it cannot go through
1516
1525
  // the single-order cancel below. Callers that omit `orderType` — every
1517
1526
  // existing one — keep the behaviour they have today.
1518
- if (params.orderType && (0, orderTypes_js_1.isStrategyOrderType)(params.orderType)) {
1527
+ if (params.orderType && (0, orderTypes_js_2.isStrategyOrderType)(params.orderType)) {
1519
1528
  return await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_cancelStrategyOrder).call(this, params);
1520
1529
  }
1521
1530
  // Resolve ownership before the first await. A reprice can change the child
@@ -2119,6 +2128,7 @@ class HyperLiquidProvider {
2119
2128
  // OPTIMIZATION: Use WebSocket cache first (0 weight), fall back to single-DEX REST (20 weight)
2120
2129
  // Previously: queryUserDataAcrossDexs queried ALL DEXs (20 weight × N DEXs = 40+ weight)
2121
2130
  let cancelRequests = [];
2131
+ const orderIdsBeforePlacement = new Set();
2122
2132
  const restorablePositionTpslOrders = [];
2123
2133
  const restorableStandaloneTpslOrders = [];
2124
2134
  // Every replacement must cancel first so old and new reduce-only triggers
@@ -2144,7 +2154,7 @@ class HyperLiquidProvider {
2144
2154
  orderType,
2145
2155
  triggerPrice,
2146
2156
  reduceOnly: true,
2147
- ...((0, orderTypes_js_1.isLimitExecutionOrderType)(orderType) && {
2157
+ ...((0, orderTypes_js_2.isLimitExecutionOrderType)(orderType) && {
2148
2158
  price: order.price,
2149
2159
  }),
2150
2160
  };
@@ -2158,9 +2168,9 @@ class HyperLiquidProvider {
2158
2168
  r: true,
2159
2169
  t: {
2160
2170
  trigger: {
2161
- isMarket: !(0, orderTypes_js_1.isLimitExecutionOrderType)(orderType),
2171
+ isMarket: !(0, orderTypes_js_2.isLimitExecutionOrderType)(orderType),
2162
2172
  triggerPx: triggerPrice,
2163
- tpsl: (0, orderTypes_js_1.getTriggerDirection)(orderType) === 'stop' ? 'sl' : 'tp',
2173
+ tpsl: (0, orderTypes_js_2.getTriggerDirection)(orderType) === 'stop' ? 'sl' : 'tp',
2164
2174
  },
2165
2175
  },
2166
2176
  },
@@ -2205,6 +2215,7 @@ class HyperLiquidProvider {
2205
2215
  user: userAddress,
2206
2216
  dex: dexName ?? undefined,
2207
2217
  });
2218
+ openOrders.forEach((order) => orderIdsBeforePlacement.add(order.oid.toString()));
2208
2219
  // Orders that belong to a pending parent order (normalTpsl children) are
2209
2220
  // also listed at the top level, so collect their IDs to exclude them:
2210
2221
  // they protect that pending order, not this position.
@@ -2231,6 +2242,7 @@ class HyperLiquidProvider {
2231
2242
  else {
2232
2243
  // WebSocket cache available - use it (no API call, 0 weight)
2233
2244
  __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Using WebSocket cache for TP/SL orders lookup', { cachedOrdersCount: cachedOrders.length });
2245
+ cachedOrders.forEach((order) => orderIdsBeforePlacement.add(order.orderId));
2234
2246
  // Filter using normalized Order type properties, matching the REST fallback criteria:
2235
2247
  // - symbol matches
2236
2248
  // - isTrigger === true
@@ -2344,13 +2356,23 @@ class HyperLiquidProvider {
2344
2356
  builderOrderContext && { builder: builderOrderContext }),
2345
2357
  });
2346
2358
  const statuses = result.response?.data?.statuses ?? [];
2347
- const outcomes = statuses
2359
+ const rawOutcomes = statuses
2348
2360
  .slice(0, entries.length)
2349
- .map((status) => __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_readOrderPlacementOutcome).call(this, status));
2350
- restoredOrderIds.push(...outcomes.flatMap((outcome) => outcome ? [outcome.orderId] : []));
2361
+ .map((status) => __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_readTpslOrderPlacementOutcome).call(this, status));
2362
+ const outcomes = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_reconcileTpslOrderPlacementOutcomes).call(this, {
2363
+ outcomes: rawOutcomes,
2364
+ orders: entries.map((entry) => entry.order),
2365
+ previousOrderIds: new Set([
2366
+ ...orderIdsBeforePlacement,
2367
+ ...Array.from(cancelledOrderIds, String),
2368
+ ]),
2369
+ dexName,
2370
+ symbol,
2371
+ });
2372
+ restoredOrderIds.push(...outcomes.flatMap((outcome) => outcome.orderId ? [outcome.orderId] : []));
2351
2373
  if (result.status !== 'ok' ||
2352
2374
  statuses.length !== entries.length ||
2353
- outcomes.some((outcome) => outcome === undefined)) {
2375
+ outcomes.some((outcome) => outcome.state === 'rejected' || outcome.state === 'unknown')) {
2354
2376
  success = false;
2355
2377
  __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").logger.error(new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.TPSL_UPDATE_FAILED), __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getErrorContext).call(this, 'updatePositionTPSL > restoreCancelledProtection', { symbol, grouping: protection.grouping, statuses }));
2356
2378
  }
@@ -2443,48 +2465,69 @@ class HyperLiquidProvider {
2443
2465
  throw error;
2444
2466
  }
2445
2467
  const placementStatuses = result.response?.data?.statuses ?? [];
2446
- const placementOutcomes = placementStatuses
2468
+ const initialPlacementOutcomes = placementStatuses
2447
2469
  .slice(0, orders.length)
2448
- .map((status) => __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_readOrderPlacementOutcome).call(this, status));
2449
- const replacementOrderIds = placementOutcomes.flatMap((outcome) => outcome ? [outcome.orderId] : []);
2450
- const restingReplacementOrderIds = placementOutcomes.flatMap((outcome) => outcome?.state === 'resting' ? [outcome.orderId] : []);
2451
- const filledReplacementOrderIds = placementOutcomes.flatMap((outcome) => outcome?.state === 'filled' ? [outcome.orderId] : []);
2452
- if (result.status !== 'ok' ||
2453
- placementStatuses.length !== orders.length ||
2454
- replacementOrderIds.length !== orders.length) {
2455
- const remainingReplacementIds = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_cancelOrderRequests).call(this, exchangeClient, restingReplacementOrderIds.map((orderId) => ({
2456
- a: assetId,
2457
- o: Number(orderId),
2458
- })));
2459
- const recoverableOrderIds = [
2460
- ...filledReplacementOrderIds,
2461
- ...remainingReplacementIds.map(String),
2462
- ];
2463
- if (recoverableOrderIds.length === 0) {
2464
- const restoration = await restoreCancelledProtection(confirmedCancelledOldOrderIds);
2465
- if (!restoration.success) {
2466
- return createProtectionLostResult(restoration.restoredOrderIds);
2467
- }
2470
+ .map((status) => __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_readTpslOrderPlacementOutcome).call(this, status));
2471
+ const placementAccepted = result.status === 'ok' &&
2472
+ placementStatuses.length === orders.length &&
2473
+ initialPlacementOutcomes.every((outcome) => outcome.state === 'resting' ||
2474
+ outcome.state === 'filled' ||
2475
+ outcome.state === 'waitingForTrigger');
2476
+ if (placementAccepted) {
2477
+ return {
2478
+ success: true,
2479
+ orderId: 'TP/SL orders placed',
2480
+ };
2481
+ }
2482
+ const placementOutcomes = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_reconcileTpslOrderPlacementOutcomes).call(this, {
2483
+ outcomes: initialPlacementOutcomes,
2484
+ orders,
2485
+ previousOrderIds: new Set([
2486
+ ...orderIdsBeforePlacement,
2487
+ ...Array.from(confirmedCancelledOldOrderIds, String),
2488
+ ]),
2489
+ dexName,
2490
+ symbol,
2491
+ });
2492
+ const restingReplacementOrderIds = placementOutcomes.flatMap((outcome) => (outcome.state === 'resting' ||
2493
+ outcome.state === 'waitingForTrigger') &&
2494
+ outcome.orderId
2495
+ ? [outcome.orderId]
2496
+ : []);
2497
+ const filledReplacementOrderIds = placementOutcomes.flatMap((outcome) => outcome.state === 'filled' && outcome.orderId ? [outcome.orderId] : []);
2498
+ const hasUnresolvedWaitingTrigger = placementOutcomes.some((outcome) => outcome.state === 'waitingForTrigger' &&
2499
+ outcome.orderId === undefined);
2500
+ const remainingReplacementIds = await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_cancelOrderRequests).call(this, exchangeClient, restingReplacementOrderIds.map((orderId) => ({
2501
+ a: assetId,
2502
+ o: Number(orderId),
2503
+ })));
2504
+ const recoverableOrderIds = [
2505
+ ...filledReplacementOrderIds,
2506
+ ...remainingReplacementIds.map(String),
2507
+ ];
2508
+ if (hasUnresolvedWaitingTrigger) {
2509
+ return createProtectionLostResult(recoverableOrderIds);
2510
+ }
2511
+ if (recoverableOrderIds.length === 0) {
2512
+ const restoration = await restoreCancelledProtection(confirmedCancelledOldOrderIds);
2513
+ if (!restoration.success) {
2514
+ return createProtectionLostResult(restoration.restoredOrderIds);
2468
2515
  }
2469
- // A filled replacement may have changed or closed the position, while
2470
- // an uncancelled replacement may still protect it. Restoring the old
2471
- // whole-position triggers in either case risks stale or duplicate
2472
- // protection, so return those IDs for caller reconciliation instead.
2473
- if (recoverableOrderIds.length > 0) {
2474
- if (!isPartialTpsl) {
2475
- return createProtectionLostResult(recoverableOrderIds);
2476
- }
2477
- return (0, hyperLiquidValidation_js_1.createErrorResult)(new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.TPSL_UPDATE_FAILED), {
2478
- success: false,
2479
- childOrderIds: recoverableOrderIds,
2480
- });
2516
+ }
2517
+ // A filled replacement may have changed or closed the position, while
2518
+ // an uncancelled replacement may still protect it. Restoring the old
2519
+ // whole-position triggers in either case risks stale or duplicate
2520
+ // protection, so return those IDs for caller reconciliation instead.
2521
+ if (recoverableOrderIds.length > 0) {
2522
+ if (!isPartialTpsl) {
2523
+ return createProtectionLostResult(recoverableOrderIds);
2481
2524
  }
2482
- throw new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.TPSL_UPDATE_FAILED);
2525
+ return (0, hyperLiquidValidation_js_1.createErrorResult)(new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.TPSL_UPDATE_FAILED), {
2526
+ success: false,
2527
+ childOrderIds: recoverableOrderIds,
2528
+ });
2483
2529
  }
2484
- return {
2485
- success: true,
2486
- orderId: 'TP/SL orders placed',
2487
- };
2530
+ throw new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.TPSL_UPDATE_FAILED);
2488
2531
  }
2489
2532
  catch (error) {
2490
2533
  __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'HyperLiquidProvider.updatePositionTPSL'), __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getErrorContext).call(this, 'updatePositionTPSL', {
@@ -3065,11 +3108,11 @@ class HyperLiquidProvider {
3065
3108
  });
3066
3109
  return {
3067
3110
  ...position,
3068
- takeProfitPrice: (0, orderTypes_js_1.resolvePositionTriggerSummaryPrice)({
3111
+ takeProfitPrice: (0, orderTypes_js_2.resolvePositionTriggerSummaryPrice)({
3069
3112
  triggerOrders: takeProfitOrders,
3070
3113
  scannedPrice: takeProfitPrice,
3071
3114
  }),
3072
- stopLossPrice: (0, orderTypes_js_1.resolvePositionTriggerSummaryPrice)({
3115
+ stopLossPrice: (0, orderTypes_js_2.resolvePositionTriggerSummaryPrice)({
3073
3116
  triggerOrders: stopLossOrders,
3074
3117
  scannedPrice: stopLossPrice,
3075
3118
  }),
@@ -3210,8 +3253,6 @@ class HyperLiquidProvider {
3210
3253
  // Transform HyperLiquid orders to abstract Order type
3211
3254
  const orders = (rawOrders || []).map((rawOrder) => {
3212
3255
  const { order, status, statusTimestamp } = rawOrder;
3213
- // Normalize side: HyperLiquid uses 'A' (Ask/Sell) and 'B' (Bid/Buy)
3214
- const normalizedSide = order.side === 'B' ? 'buy' : 'sell';
3215
3256
  // Normalize status
3216
3257
  let normalizedStatus;
3217
3258
  switch (status) {
@@ -3244,28 +3285,19 @@ class HyperLiquidProvider {
3244
3285
  default:
3245
3286
  normalizedStatus = 'queued';
3246
3287
  }
3247
- // Calculate filled and remaining size
3248
- const originalSize = parseFloat(order.origSz || order.sz);
3249
- const currentSize = parseFloat(order.sz);
3250
- const filledSize = originalSize - currentSize;
3288
+ const adaptedOrder = (0, hyperLiquidAdapter_js_1.adaptOrderFromSDK)(order, undefined);
3289
+ // limitPx is also populated as a slippage cap for market orders, so the
3290
+ // exchange's detailed type is the reliable execution-mode source.
3291
+ const historicalOrderType = (0, utils_1.hasProperty)(HISTORICAL_ORDER_TYPE_BY_DETAILED_TYPE, order.orderType)
3292
+ ? HISTORICAL_ORDER_TYPE_BY_DETAILED_TYPE[order.orderType]
3293
+ : 'market';
3251
3294
  return {
3252
- orderId: order.oid?.toString() || '',
3253
- symbol: order.coin,
3254
- side: normalizedSide,
3255
- orderType: order.orderType?.toLowerCase().includes('limit')
3256
- ? 'limit'
3257
- : 'market',
3258
- size: order.sz,
3259
- originalSize: order.origSz || order.sz,
3260
- price: order.limitPx || '0',
3261
- filledSize: filledSize.toString(),
3262
- remainingSize: currentSize.toString(),
3295
+ ...adaptedOrder,
3296
+ orderType: historicalOrderType,
3297
+ remainingSize: parseFloat(order.sz).toString(),
3263
3298
  status: normalizedStatus,
3264
3299
  timestamp: statusTimestamp,
3265
3300
  lastUpdated: statusTimestamp,
3266
- detailedOrderType: order.orderType, // Full order type from exchange (e.g., 'Take Profit Limit', 'Stop Market')
3267
- isTrigger: order.isTrigger,
3268
- reduceOnly: order.reduceOnly,
3269
3301
  };
3270
3302
  });
3271
3303
  return orders;
@@ -4132,7 +4164,7 @@ class HyperLiquidProvider {
4132
4164
  // fallback (plain limit, stop_limit, take_profit_limit)
4133
4165
  if (!priceForValidation &&
4134
4166
  params.price &&
4135
- (0, orderTypes_js_1.isLimitExecutionOrderType)(params.orderType)) {
4167
+ (0, orderTypes_js_2.isLimitExecutionOrderType)(params.orderType)) {
4136
4168
  priceForValidation = parseFloat(params.price);
4137
4169
  __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Using limit price for order validation (limit order):', {
4138
4170
  size,
@@ -4143,7 +4175,7 @@ class HyperLiquidProvider {
4143
4175
  // have no limit price; the trigger price is the best notional estimate.
4144
4176
  if (!priceForValidation &&
4145
4177
  params.triggerPrice &&
4146
- (0, orderTypes_js_1.isTriggerOrderType)(params.orderType)) {
4178
+ (0, orderTypes_js_2.isTriggerOrderType)(params.orderType)) {
4147
4179
  priceForValidation = parseFloat(params.triggerPrice);
4148
4180
  __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Using trigger price for order validation (trigger order):', {
4149
4181
  size,
@@ -4972,7 +5004,7 @@ class HyperLiquidProvider {
4972
5004
  // market order (taker), a stop_limit as a limit order, a scale ladder as the
4973
5005
  // resting limit orders it fans out into, and a TWAP as the marketable
4974
5006
  // suborders it crosses the book with.
4975
- const isMarketExecution = (0, orderTypes_js_1.getTriggerExecution)(orderType) === 'market';
5007
+ const isMarketExecution = (0, orderTypes_js_2.getTriggerExecution)(orderType) === 'market';
4976
5008
  // A chase is post-only by construction, so it can only ever fill as a maker.
4977
5009
  // Quoting it at the taker rate would overstate the fee whatever the caller
4978
5010
  // passes for `isMaker`.
@@ -6964,7 +6996,7 @@ async function _HyperLiquidProvider_queryUserDataAcrossDexs(baseParams, queryFn)
6964
6996
  * @returns Current max fee rate or null if not approved
6965
6997
  */
6966
6998
  async function _HyperLiquidProvider_checkBuilderFeeApproval(builder, userAddress) {
6967
- const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient();
6999
+ const infoClient = __classPrivateFieldGet(this, _HyperLiquidProvider_clientService, "f").getInfoClient({ useHttp: true });
6968
7000
  return infoClient.maxBuilderFee({
6969
7001
  user: userAddress,
6970
7002
  builder,
@@ -9561,6 +9593,84 @@ async function _HyperLiquidProvider_cancelOrderRequestBatch(exchangeClient, requ
9561
9593
  }
9562
9594
  }
9563
9595
  return undefined;
9596
+ }, _HyperLiquidProvider_readTpslOrderPlacementOutcome = function _HyperLiquidProvider_readTpslOrderPlacementOutcome(status) {
9597
+ const placement = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_readOrderPlacementOutcome).call(this, status);
9598
+ if (placement) {
9599
+ return placement;
9600
+ }
9601
+ if (status === 'waitingForTrigger') {
9602
+ return { state: 'waitingForTrigger' };
9603
+ }
9604
+ if (isStatusObject(status) && (0, utils_1.hasProperty)(status, 'error')) {
9605
+ return { state: 'rejected' };
9606
+ }
9607
+ return { state: 'unknown' };
9608
+ }, _HyperLiquidProvider_reconcileTpslOrderPlacementOutcomes =
9609
+ /**
9610
+ * Recover IDs omitted from waiting trigger acknowledgements.
9611
+ *
9612
+ * HyperLiquid does not preserve submission order in `frontendOpenOrders`, so
9613
+ * each unresolved leg is matched by its submitted trigger attributes and
9614
+ * accepted only when exactly one new order qualifies.
9615
+ *
9616
+ * @param params - Reconciliation parameters.
9617
+ * @param params.outcomes - Classified placement responses.
9618
+ * @param params.orders - Submitted TP/SL orders.
9619
+ * @param params.previousOrderIds - Order IDs observed before submission.
9620
+ * @param params.dexName - DEX queried for the placement.
9621
+ * @param params.symbol - Market the triggers protect.
9622
+ * @returns Outcomes enriched with unambiguous exchange order IDs.
9623
+ */
9624
+ async function _HyperLiquidProvider_reconcileTpslOrderPlacementOutcomes(params) {
9625
+ if (!params.outcomes.some((outcome) => outcome.state === 'waitingForTrigger' &&
9626
+ outcome.orderId === undefined)) {
9627
+ return params.outcomes;
9628
+ }
9629
+ try {
9630
+ const appearedOrders = (await __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_fetchOpenOrders).call(this, { dexName: params.dexName })).filter((order) => order.coin === params.symbol &&
9631
+ order.reduceOnly &&
9632
+ order.isTrigger &&
9633
+ !params.previousOrderIds.has(order.oid.toString()));
9634
+ const claimedOrderIds = new Set();
9635
+ return params.outcomes.map((outcome, index) => {
9636
+ if (outcome.orderId !== undefined ||
9637
+ outcome.state !== 'waitingForTrigger') {
9638
+ return outcome;
9639
+ }
9640
+ const submittedOrder = params.orders[index];
9641
+ const trigger = (0, utils_1.hasProperty)(submittedOrder.t, 'trigger')
9642
+ ? submittedOrder.t.trigger
9643
+ : undefined;
9644
+ if (!isStatusObject(trigger) ||
9645
+ !(0, utils_1.hasProperty)(trigger, 'triggerPx') ||
9646
+ (typeof trigger.triggerPx !== 'string' &&
9647
+ typeof trigger.triggerPx !== 'number') ||
9648
+ !(0, utils_1.hasProperty)(trigger, 'tpsl') ||
9649
+ (trigger.tpsl !== 'tp' && trigger.tpsl !== 'sl')) {
9650
+ return outcome;
9651
+ }
9652
+ const submittedSize = parseFloat(String(submittedOrder.s));
9653
+ const submittedTriggerPrice = parseFloat(String(trigger.triggerPx));
9654
+ const expectedOrderType = trigger.tpsl === 'tp' ? 'Take Profit' : 'Stop';
9655
+ const candidates = appearedOrders.filter((order) => !claimedOrderIds.has(order.oid) &&
9656
+ (order.side === 'B') === submittedOrder.b &&
9657
+ parseFloat(order.sz) === submittedSize &&
9658
+ parseFloat(order.triggerPx) === submittedTriggerPrice &&
9659
+ order.orderType.includes(expectedOrderType));
9660
+ if (candidates.length !== 1) {
9661
+ return outcome;
9662
+ }
9663
+ claimedOrderIds.add(candidates[0].oid);
9664
+ return { ...outcome, orderId: candidates[0].oid.toString() };
9665
+ });
9666
+ }
9667
+ catch (error) {
9668
+ __classPrivateFieldGet(this, _HyperLiquidProvider_deps, "f").debugLogger.log('Could not reconcile TP/SL placement order IDs', {
9669
+ error: (0, errorUtils_js_1.ensureError)(error, 'HyperLiquidProvider.reconcileTpslOrderPlacementOutcomes').message,
9670
+ symbol: params.symbol,
9671
+ });
9672
+ return params.outcomes;
9673
+ }
9564
9674
  }, _HyperLiquidProvider_readOrderIdFromStatus = function _HyperLiquidProvider_readOrderIdFromStatus(status) {
9565
9675
  return __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_readOrderPlacementOutcome).call(this, status)?.orderId;
9566
9676
  }, _HyperLiquidProvider_getDiscountedBuilderFee = function _HyperLiquidProvider_getDiscountedBuilderFee() {