@metamask-previews/perps-controller 3.1.1-preview-d363b2d74 → 3.2.0-preview-5e99f980f
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 +20 -2
- package/dist/constants/hyperLiquidConfig.cjs +1 -3
- package/dist/constants/hyperLiquidConfig.cjs.map +1 -1
- package/dist/constants/hyperLiquidConfig.d.cts +0 -1
- package/dist/constants/hyperLiquidConfig.d.cts.map +1 -1
- package/dist/constants/hyperLiquidConfig.d.mts +0 -1
- package/dist/constants/hyperLiquidConfig.d.mts.map +1 -1
- package/dist/constants/hyperLiquidConfig.mjs +0 -1
- package/dist/constants/hyperLiquidConfig.mjs.map +1 -1
- package/dist/index.cjs +4 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/services/HyperLiquidClientService.cjs +4 -0
- 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 +5 -1
- package/dist/services/HyperLiquidClientService.mjs.map +1 -1
- package/dist/services/MarketDataService.cjs +24 -21
- package/dist/services/MarketDataService.cjs.map +1 -1
- package/dist/services/MarketDataService.d.cts.map +1 -1
- package/dist/services/MarketDataService.d.mts.map +1 -1
- package/dist/services/MarketDataService.mjs +25 -22
- package/dist/services/MarketDataService.mjs.map +1 -1
- package/dist/services/TradingService.cjs +5 -19
- 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 +5 -19
- package/dist/services/TradingService.mjs.map +1 -1
- package/dist/utils/errorUtils.cjs +18 -1
- package/dist/utils/errorUtils.cjs.map +1 -1
- package/dist/utils/errorUtils.d.cts +9 -0
- package/dist/utils/errorUtils.d.cts.map +1 -1
- package/dist/utils/errorUtils.d.mts +9 -0
- package/dist/utils/errorUtils.d.mts.map +1 -1
- package/dist/utils/errorUtils.mjs +16 -0
- package/dist/utils/errorUtils.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingService.d.mts","sourceRoot":"","sources":["../../src/services/TradingService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TradingService.d.mts","sourceRoot":"","sources":["../../src/services/TradingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,6 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
12
12
|
var _TradingService_instances, _TradingService_deps, _TradingService_controllerDeps, _TradingService_getErrorContext, _TradingService_trackOrderResult, _TradingService_handleOrderSuccess, _TradingService_withFeeDiscount, _TradingService_loadPositionData, _TradingService_calculateCloseMetrics, _TradingService_buildCloseEventProperties, _TradingService_trackPositionCloseResult, _TradingService_handleDataLakeReporting, _TradingService_calculateFeeDiscountWithMeasurement;
|
|
13
13
|
import { v4 as uuidv4 } from "uuid";
|
|
14
14
|
import { PERPS_EVENT_PROPERTY, PERPS_EVENT_VALUE } from "../constants/eventNames.mjs";
|
|
15
|
-
import { ESTIMATED_FEE_RATE } from "../constants/hyperLiquidConfig.mjs";
|
|
16
15
|
import { isTPSLOrder } from "../constants/orderTypes.mjs";
|
|
17
16
|
import { PerpsMeasurementName } from "../constants/performanceMetrics.mjs";
|
|
18
17
|
import { PERPS_CONSTANTS } from "../constants/perpsConfig.mjs";
|
|
@@ -1031,35 +1030,22 @@ export class TradingService {
|
|
|
1031
1030
|
const positionSize = Math.abs(parseFloat(position.size));
|
|
1032
1031
|
const isCurrentlyLong = parseFloat(position.size) > 0;
|
|
1033
1032
|
const oppositeDirection = !isCurrentlyLong;
|
|
1034
|
-
// Validate available balance for fees
|
|
1035
|
-
const accountState = await provider.getAccountState?.();
|
|
1036
|
-
if (!accountState) {
|
|
1037
|
-
throw new Error('Failed to get account state');
|
|
1038
|
-
}
|
|
1039
|
-
const availableBalance = parseFloat(accountState.availableBalance);
|
|
1040
|
-
// Estimate fees: ESTIMATED_FEE_RATE (0.09%) already accounts for both legs
|
|
1041
|
-
// (close at 0.045% + open at 0.045% = 0.09% of position notional).
|
|
1042
|
-
// Apply to 1x notional (positionSize * entryPrice), not 2x (flipSize * entryPrice).
|
|
1043
|
-
const entryPrice = parseFloat(position.entryPrice);
|
|
1044
1033
|
const flipSize = positionSize * 2;
|
|
1045
|
-
const notionalValue = positionSize * entryPrice;
|
|
1046
|
-
const estimatedFees = notionalValue * ESTIMATED_FEE_RATE;
|
|
1047
|
-
if (estimatedFees > availableBalance) {
|
|
1048
|
-
throw new Error(`Insufficient balance for flip fees. Need $${estimatedFees.toFixed(2)}, have $${availableBalance.toFixed(2)}`);
|
|
1049
|
-
}
|
|
1050
1034
|
// Create order params for flip
|
|
1051
|
-
// Use 2x position size: 1x to close current position + 1x to open opposite position
|
|
1035
|
+
// Use 2x position size: 1x to close current position + 1x to open opposite position.
|
|
1036
|
+
// Do not pass the position entry price as currentPrice: the provider must fetch
|
|
1037
|
+
// live market data for validation and IOC pricing.
|
|
1052
1038
|
const orderParams = {
|
|
1053
1039
|
symbol: position.symbol,
|
|
1054
1040
|
isBuy: oppositeDirection,
|
|
1055
1041
|
size: flipSize.toString(),
|
|
1056
1042
|
orderType: 'market',
|
|
1057
1043
|
leverage: position.leverage?.value,
|
|
1058
|
-
currentPrice: entryPrice,
|
|
1059
1044
|
};
|
|
1060
1045
|
// Place flip order (HyperLiquid handles margin transfer automatically)
|
|
1061
1046
|
const result = await provider.placeOrder(orderParams);
|
|
1062
1047
|
const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
|
|
1048
|
+
const executedPrice = parseFloat(result.averagePrice ?? position.entryPrice);
|
|
1063
1049
|
if (result.success) {
|
|
1064
1050
|
// Update state on success
|
|
1065
1051
|
if (context.stateManager) {
|
|
@@ -1082,7 +1068,7 @@ export class TradingService {
|
|
|
1082
1068
|
[PERPS_EVENT_PROPERTY.ORDER_SIZE]: positionSize,
|
|
1083
1069
|
[PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
|
|
1084
1070
|
[PERPS_EVENT_PROPERTY.ACTION]: flipAction,
|
|
1085
|
-
[PERPS_EVENT_PROPERTY.ORDER_VALUE]: positionSize *
|
|
1071
|
+
[PERPS_EVENT_PROPERTY.ORDER_VALUE]: positionSize * executedPrice,
|
|
1086
1072
|
});
|
|
1087
1073
|
// Invalidate standalone caches so external hooks refresh
|
|
1088
1074
|
__classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
|