@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +20 -2
  2. package/dist/constants/hyperLiquidConfig.cjs +1 -3
  3. package/dist/constants/hyperLiquidConfig.cjs.map +1 -1
  4. package/dist/constants/hyperLiquidConfig.d.cts +0 -1
  5. package/dist/constants/hyperLiquidConfig.d.cts.map +1 -1
  6. package/dist/constants/hyperLiquidConfig.d.mts +0 -1
  7. package/dist/constants/hyperLiquidConfig.d.mts.map +1 -1
  8. package/dist/constants/hyperLiquidConfig.mjs +0 -1
  9. package/dist/constants/hyperLiquidConfig.mjs.map +1 -1
  10. package/dist/index.cjs +4 -3
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +1 -1
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +1 -1
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +1 -1
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/services/HyperLiquidClientService.cjs +4 -0
  19. package/dist/services/HyperLiquidClientService.cjs.map +1 -1
  20. package/dist/services/HyperLiquidClientService.d.cts.map +1 -1
  21. package/dist/services/HyperLiquidClientService.d.mts.map +1 -1
  22. package/dist/services/HyperLiquidClientService.mjs +5 -1
  23. package/dist/services/HyperLiquidClientService.mjs.map +1 -1
  24. package/dist/services/MarketDataService.cjs +24 -21
  25. package/dist/services/MarketDataService.cjs.map +1 -1
  26. package/dist/services/MarketDataService.d.cts.map +1 -1
  27. package/dist/services/MarketDataService.d.mts.map +1 -1
  28. package/dist/services/MarketDataService.mjs +25 -22
  29. package/dist/services/MarketDataService.mjs.map +1 -1
  30. package/dist/services/TradingService.cjs +5 -19
  31. package/dist/services/TradingService.cjs.map +1 -1
  32. package/dist/services/TradingService.d.cts.map +1 -1
  33. package/dist/services/TradingService.d.mts.map +1 -1
  34. package/dist/services/TradingService.mjs +5 -19
  35. package/dist/services/TradingService.mjs.map +1 -1
  36. package/dist/utils/errorUtils.cjs +18 -1
  37. package/dist/utils/errorUtils.cjs.map +1 -1
  38. package/dist/utils/errorUtils.d.cts +9 -0
  39. package/dist/utils/errorUtils.d.cts.map +1 -1
  40. package/dist/utils/errorUtils.d.mts +9 -0
  41. package/dist/utils/errorUtils.d.mts.map +1 -1
  42. package/dist/utils/errorUtils.mjs +16 -0
  43. package/dist/utils/errorUtils.mjs.map +1 -1
  44. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TradingService.d.mts","sourceRoot":"","sources":["../../src/services/TradingService.ts"],"names":[],"mappings":"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"}
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 * parseFloat(position.entryPrice),
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' });