@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 +6 -0
- package/dist/providers/HyperLiquidProvider.cjs +191 -81
- package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
- package/dist/providers/HyperLiquidProvider.mjs +174 -64
- package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
- package/dist/utils/hyperLiquidAdapter.cjs +2 -2
- package/dist/utils/hyperLiquidAdapter.cjs.map +1 -1
- package/dist/utils/hyperLiquidAdapter.mjs +2 -2
- package/dist/utils/hyperLiquidAdapter.mjs.map +1 -1
- package/package.json +1 -1
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
|
|
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,
|
|
361
|
+
const takeProfitSummaryPrice = (0, orderTypes_js_2.resolvePositionTriggerSummaryPrice)({
|
|
353
362
|
triggerOrders: takeProfitOrders,
|
|
354
363
|
scannedPrice: takeProfitPrice,
|
|
355
364
|
});
|
|
356
|
-
const stopLossSummaryPrice = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
2171
|
+
isMarket: !(0, orderTypes_js_2.isLimitExecutionOrderType)(orderType),
|
|
2162
2172
|
triggerPx: triggerPrice,
|
|
2163
|
-
tpsl: (0,
|
|
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
|
|
2359
|
+
const rawOutcomes = statuses
|
|
2348
2360
|
.slice(0, entries.length)
|
|
2349
|
-
.map((status) => __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m",
|
|
2350
|
-
|
|
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 ===
|
|
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
|
|
2468
|
+
const initialPlacementOutcomes = placementStatuses
|
|
2447
2469
|
.slice(0, orders.length)
|
|
2448
|
-
.map((status) => __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m",
|
|
2449
|
-
const
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
}
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
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
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
3111
|
+
takeProfitPrice: (0, orderTypes_js_2.resolvePositionTriggerSummaryPrice)({
|
|
3069
3112
|
triggerOrders: takeProfitOrders,
|
|
3070
3113
|
scannedPrice: takeProfitPrice,
|
|
3071
3114
|
}),
|
|
3072
|
-
stopLossPrice: (0,
|
|
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
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
const
|
|
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
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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() {
|