@metamask-previews/perps-controller 1.3.0-preview-a0caca0c0 → 1.3.0-preview-afe010990

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 (158) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/PerpsController-method-action-types.cjs +3 -0
  3. package/dist/PerpsController-method-action-types.cjs.map +1 -0
  4. package/dist/PerpsController-method-action-types.d.cts +147 -0
  5. package/dist/PerpsController-method-action-types.d.cts.map +1 -0
  6. package/dist/PerpsController-method-action-types.d.mts +147 -0
  7. package/dist/PerpsController-method-action-types.d.mts.map +1 -0
  8. package/dist/PerpsController-method-action-types.mjs +2 -0
  9. package/dist/PerpsController-method-action-types.mjs.map +1 -0
  10. package/dist/PerpsController.cjs +488 -183
  11. package/dist/PerpsController.cjs.map +1 -1
  12. package/dist/PerpsController.d.cts +91 -131
  13. package/dist/PerpsController.d.cts.map +1 -1
  14. package/dist/PerpsController.d.mts +91 -131
  15. package/dist/PerpsController.d.mts.map +1 -1
  16. package/dist/PerpsController.mjs +485 -182
  17. package/dist/PerpsController.mjs.map +1 -1
  18. package/dist/constants/eventNames.cjs +26 -0
  19. package/dist/constants/eventNames.cjs.map +1 -1
  20. package/dist/constants/eventNames.d.cts +19 -0
  21. package/dist/constants/eventNames.d.cts.map +1 -1
  22. package/dist/constants/eventNames.d.mts +19 -0
  23. package/dist/constants/eventNames.d.mts.map +1 -1
  24. package/dist/constants/eventNames.mjs +26 -0
  25. package/dist/constants/eventNames.mjs.map +1 -1
  26. package/dist/constants/hyperLiquidConfig.cjs +24 -4
  27. package/dist/constants/hyperLiquidConfig.cjs.map +1 -1
  28. package/dist/constants/hyperLiquidConfig.d.cts +8 -3
  29. package/dist/constants/hyperLiquidConfig.d.cts.map +1 -1
  30. package/dist/constants/hyperLiquidConfig.d.mts +8 -3
  31. package/dist/constants/hyperLiquidConfig.d.mts.map +1 -1
  32. package/dist/constants/hyperLiquidConfig.mjs +23 -3
  33. package/dist/constants/hyperLiquidConfig.mjs.map +1 -1
  34. package/dist/constants/myxConfig.cjs +75 -51
  35. package/dist/constants/myxConfig.cjs.map +1 -1
  36. package/dist/constants/myxConfig.d.cts +58 -19
  37. package/dist/constants/myxConfig.d.cts.map +1 -1
  38. package/dist/constants/myxConfig.d.mts +58 -19
  39. package/dist/constants/myxConfig.d.mts.map +1 -1
  40. package/dist/constants/myxConfig.mjs +74 -50
  41. package/dist/constants/myxConfig.mjs.map +1 -1
  42. package/dist/constants/perpsConfig.cjs +6 -2
  43. package/dist/constants/perpsConfig.cjs.map +1 -1
  44. package/dist/constants/perpsConfig.d.cts +5 -1
  45. package/dist/constants/perpsConfig.d.cts.map +1 -1
  46. package/dist/constants/perpsConfig.d.mts +5 -1
  47. package/dist/constants/perpsConfig.d.mts.map +1 -1
  48. package/dist/constants/perpsConfig.mjs +5 -1
  49. package/dist/constants/perpsConfig.mjs.map +1 -1
  50. package/dist/index.cjs +243 -25
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.cts +48 -5
  53. package/dist/index.d.cts.map +1 -1
  54. package/dist/index.d.mts +48 -5
  55. package/dist/index.d.mts.map +1 -1
  56. package/dist/index.mjs +36 -10
  57. package/dist/index.mjs.map +1 -1
  58. package/dist/providers/AggregatedPerpsProvider.cjs +24 -0
  59. package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -1
  60. package/dist/providers/AggregatedPerpsProvider.d.cts +4 -0
  61. package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -1
  62. package/dist/providers/AggregatedPerpsProvider.d.mts +4 -0
  63. package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -1
  64. package/dist/providers/AggregatedPerpsProvider.mjs +24 -0
  65. package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -1
  66. package/dist/providers/HyperLiquidProvider.cjs +470 -154
  67. package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
  68. package/dist/providers/HyperLiquidProvider.d.cts +11 -2
  69. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
  70. package/dist/providers/HyperLiquidProvider.d.mts +11 -2
  71. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
  72. package/dist/providers/HyperLiquidProvider.mjs +471 -155
  73. package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
  74. package/dist/selectors.cjs +1 -1
  75. package/dist/selectors.cjs.map +1 -1
  76. package/dist/selectors.mjs +1 -1
  77. package/dist/selectors.mjs.map +1 -1
  78. package/dist/services/AccountService.cjs +1 -1
  79. package/dist/services/AccountService.cjs.map +1 -1
  80. package/dist/services/AccountService.d.cts.map +1 -1
  81. package/dist/services/AccountService.d.mts.map +1 -1
  82. package/dist/services/AccountService.mjs +2 -2
  83. package/dist/services/AccountService.mjs.map +1 -1
  84. package/dist/services/DepositService.cjs +2 -1
  85. package/dist/services/DepositService.cjs.map +1 -1
  86. package/dist/services/DepositService.d.cts.map +1 -1
  87. package/dist/services/DepositService.d.mts.map +1 -1
  88. package/dist/services/DepositService.mjs +2 -1
  89. package/dist/services/DepositService.mjs.map +1 -1
  90. package/dist/services/EligibilityService.cjs +8 -103
  91. package/dist/services/EligibilityService.cjs.map +1 -1
  92. package/dist/services/EligibilityService.d.cts +4 -15
  93. package/dist/services/EligibilityService.d.cts.map +1 -1
  94. package/dist/services/EligibilityService.d.mts +4 -15
  95. package/dist/services/EligibilityService.d.mts.map +1 -1
  96. package/dist/services/EligibilityService.mjs +8 -103
  97. package/dist/services/EligibilityService.mjs.map +1 -1
  98. package/dist/services/HyperLiquidSubscriptionService.cjs +252 -46
  99. package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -1
  100. package/dist/services/HyperLiquidSubscriptionService.d.cts +1 -0
  101. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -1
  102. package/dist/services/HyperLiquidSubscriptionService.d.mts +1 -0
  103. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -1
  104. package/dist/services/HyperLiquidSubscriptionService.mjs +252 -46
  105. package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -1
  106. package/dist/services/MarketDataService.cjs +2 -4
  107. package/dist/services/MarketDataService.cjs.map +1 -1
  108. package/dist/services/MarketDataService.d.cts.map +1 -1
  109. package/dist/services/MarketDataService.d.mts.map +1 -1
  110. package/dist/services/MarketDataService.mjs +2 -4
  111. package/dist/services/MarketDataService.mjs.map +1 -1
  112. package/dist/services/TradingService.cjs +72 -6
  113. package/dist/services/TradingService.cjs.map +1 -1
  114. package/dist/services/TradingService.d.cts.map +1 -1
  115. package/dist/services/TradingService.d.mts.map +1 -1
  116. package/dist/services/TradingService.mjs +72 -6
  117. package/dist/services/TradingService.mjs.map +1 -1
  118. package/dist/types/index.cjs.map +1 -1
  119. package/dist/types/index.d.cts +51 -3
  120. package/dist/types/index.d.cts.map +1 -1
  121. package/dist/types/index.d.mts +51 -3
  122. package/dist/types/index.d.mts.map +1 -1
  123. package/dist/types/index.mjs.map +1 -1
  124. package/dist/types/messenger.cjs.map +1 -1
  125. package/dist/types/messenger.d.cts +2 -1
  126. package/dist/types/messenger.d.cts.map +1 -1
  127. package/dist/types/messenger.d.mts +2 -1
  128. package/dist/types/messenger.d.mts.map +1 -1
  129. package/dist/types/messenger.mjs.map +1 -1
  130. package/dist/types/myx-types.cjs +19 -3
  131. package/dist/types/myx-types.cjs.map +1 -1
  132. package/dist/types/myx-types.d.cts +33 -2
  133. package/dist/types/myx-types.d.cts.map +1 -1
  134. package/dist/types/myx-types.d.mts +33 -2
  135. package/dist/types/myx-types.d.mts.map +1 -1
  136. package/dist/types/myx-types.mjs +6 -2
  137. package/dist/types/myx-types.mjs.map +1 -1
  138. package/dist/types/perps-types.cjs +3 -0
  139. package/dist/types/perps-types.cjs.map +1 -1
  140. package/dist/types/perps-types.d.cts +3 -3
  141. package/dist/types/perps-types.d.cts.map +1 -1
  142. package/dist/types/perps-types.d.mts +3 -3
  143. package/dist/types/perps-types.d.mts.map +1 -1
  144. package/dist/types/perps-types.mjs +3 -0
  145. package/dist/types/perps-types.mjs.map +1 -1
  146. package/dist/utils/accountUtils.cjs.map +1 -1
  147. package/dist/utils/accountUtils.d.cts.map +1 -1
  148. package/dist/utils/accountUtils.d.mts.map +1 -1
  149. package/dist/utils/accountUtils.mjs.map +1 -1
  150. package/dist/utils/myxAdapter.cjs +360 -15
  151. package/dist/utils/myxAdapter.cjs.map +1 -1
  152. package/dist/utils/myxAdapter.d.cts +94 -7
  153. package/dist/utils/myxAdapter.d.cts.map +1 -1
  154. package/dist/utils/myxAdapter.d.mts +94 -7
  155. package/dist/utils/myxAdapter.d.mts.map +1 -1
  156. package/dist/utils/myxAdapter.mjs +351 -16
  157. package/dist/utils/myxAdapter.mjs.map +1 -1
  158. package/package.json +4 -2
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.TradingService = void 0;
16
16
  const uuid_1 = require("uuid");
17
17
  const eventNames_1 = require("../constants/eventNames.cjs");
18
+ const hyperLiquidConfig_1 = require("../constants/hyperLiquidConfig.cjs");
18
19
  const orderTypes_1 = require("../constants/orderTypes.cjs");
19
20
  const performanceMetrics_1 = require("../constants/performanceMetrics.cjs");
20
21
  const perpsConfig_1 = require("../constants/perpsConfig.cjs");
@@ -74,7 +75,20 @@ class TradingService {
74
75
  const traceId = (0, uuid_1.v4)();
75
76
  const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
76
77
  let traceData;
78
+ const paymentToken = params.trackingData?.tradeWithToken === true
79
+ ? (params.trackingData.mmPayTokenSelected ?? 'unknown_token')
80
+ : 'perps_balance';
77
81
  try {
82
+ __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.addBreadcrumb({
83
+ category: 'perps',
84
+ message: 'Order execution started',
85
+ level: 'info',
86
+ data: {
87
+ payment_token: paymentToken,
88
+ market: params.symbol,
89
+ orderType: params.orderType,
90
+ },
91
+ });
78
92
  // Start trace for the entire operation
79
93
  __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
80
94
  name: types_1.PerpsTraceNames.PlaceOrder,
@@ -86,10 +100,12 @@ class TradingService {
86
100
  market: params.symbol,
87
101
  leverage: String(params.leverage ?? 1),
88
102
  isTestnet: String(context.tracingContext.isTestnet),
103
+ payment_token: paymentToken,
89
104
  },
90
105
  data: {
91
106
  isBuy: params.isBuy,
92
107
  orderPrice: params.price ?? '',
108
+ payment_token: paymentToken,
93
109
  },
94
110
  });
95
111
  // Calculate fee discount at execution time (fresh, secure)
@@ -854,6 +870,17 @@ class TradingService {
854
870
  // Determine if TP/SL are set
855
871
  const hasTakeProfit = Boolean(params.takeProfitPrice);
856
872
  const hasStopLoss = Boolean(params.stopLossPrice);
873
+ // Determine TP/SL action type
874
+ let tpslAction;
875
+ if (hasTakeProfit && hasStopLoss) {
876
+ tpslAction = eventNames_1.PERPS_EVENT_VALUE.ACTION.TPSL;
877
+ }
878
+ else if (hasTakeProfit) {
879
+ tpslAction = eventNames_1.PERPS_EVENT_VALUE.ACTION.TP;
880
+ }
881
+ else if (hasStopLoss) {
882
+ tpslAction = eventNames_1.PERPS_EVENT_VALUE.ACTION.SL;
883
+ }
857
884
  // Build comprehensive event properties
858
885
  const eventProperties = {
859
886
  [eventNames_1.PERPS_EVENT_PROPERTY.STATUS]: result?.success
@@ -865,6 +892,9 @@ class TradingService {
865
892
  [eventNames_1.PERPS_EVENT_PROPERTY.SCREEN_TYPE]: screenType,
866
893
  [eventNames_1.PERPS_EVENT_PROPERTY.HAS_TAKE_PROFIT]: hasTakeProfit,
867
894
  [eventNames_1.PERPS_EVENT_PROPERTY.HAS_STOP_LOSS]: hasStopLoss,
895
+ ...(tpslAction && {
896
+ [eventNames_1.PERPS_EVENT_PROPERTY.ACTION]: tpslAction,
897
+ }),
868
898
  ...(direction && {
869
899
  [eventNames_1.PERPS_EVENT_PROPERTY.DIRECTION]: direction === 'long'
870
900
  ? eventNames_1.PERPS_EVENT_VALUE.DIRECTION.LONG
@@ -1016,7 +1046,7 @@ class TradingService {
1016
1046
  const entryPrice = parseFloat(position.entryPrice);
1017
1047
  const flipSize = positionSize * 2;
1018
1048
  const notionalValue = flipSize * entryPrice;
1019
- const estimatedFees = notionalValue * 0.0009;
1049
+ const estimatedFees = notionalValue * hyperLiquidConfig_1.ESTIMATED_FEE_RATE;
1020
1050
  if (estimatedFees > availableBalance) {
1021
1051
  throw new Error(`Insufficient balance for flip fees. Need $${estimatedFees.toFixed(2)}, have $${availableBalance.toFixed(2)}`);
1022
1052
  }
@@ -1040,7 +1070,10 @@ class TradingService {
1040
1070
  state.lastUpdateTimestamp = Date.now();
1041
1071
  });
1042
1072
  }
1043
- // Track success analytics
1073
+ // Track success analytics with direction-specific flip action
1074
+ const flipAction = isCurrentlyLong
1075
+ ? eventNames_1.PERPS_EVENT_VALUE.ACTION.FLIP_LONG_TO_SHORT
1076
+ : eventNames_1.PERPS_EVENT_VALUE.ACTION.FLIP_SHORT_TO_LONG;
1044
1077
  __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(types_1.PerpsAnalyticsEvent.TradeTransaction, {
1045
1078
  [eventNames_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_1.PERPS_EVENT_VALUE.STATUS.EXECUTED,
1046
1079
  [eventNames_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
@@ -1051,7 +1084,8 @@ class TradingService {
1051
1084
  [eventNames_1.PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value || 1,
1052
1085
  [eventNames_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: positionSize,
1053
1086
  [eventNames_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1054
- [eventNames_1.PERPS_EVENT_PROPERTY.ACTION]: 'flip_position',
1087
+ [eventNames_1.PERPS_EVENT_PROPERTY.ACTION]: flipAction,
1088
+ [eventNames_1.PERPS_EVENT_PROPERTY.ORDER_VALUE]: positionSize * parseFloat(position.entryPrice),
1055
1089
  });
1056
1090
  // Invalidate standalone caches so external hooks refresh
1057
1091
  __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
@@ -1068,11 +1102,15 @@ class TradingService {
1068
1102
  const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
1069
1103
  const errorMessage = error instanceof Error ? error.message : 'Unknown error';
1070
1104
  __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_1.ensureError)(error, 'TradingService.flipPosition'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'flipPosition', { symbol: position.symbol }));
1071
- // Track failure analytics
1105
+ // Track failure analytics with direction-specific flip action
1106
+ const wasLong = parseFloat(position.size) > 0;
1107
+ const failFlipAction = wasLong
1108
+ ? eventNames_1.PERPS_EVENT_VALUE.ACTION.FLIP_LONG_TO_SHORT
1109
+ : eventNames_1.PERPS_EVENT_VALUE.ACTION.FLIP_SHORT_TO_LONG;
1072
1110
  __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(types_1.PerpsAnalyticsEvent.TradeTransaction, {
1073
1111
  [eventNames_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_1.PERPS_EVENT_VALUE.STATUS.FAILED,
1074
1112
  [eventNames_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
1075
- [eventNames_1.PERPS_EVENT_PROPERTY.ACTION]: 'flip_position',
1113
+ [eventNames_1.PERPS_EVENT_PROPERTY.ACTION]: failFlipAction,
1076
1114
  [eventNames_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1077
1115
  [eventNames_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,
1078
1116
  });
@@ -1131,7 +1169,7 @@ _TradingService_deps = new WeakMap(), _TradingService_controllerDeps = new WeakM
1131
1169
  if (params.trackingData?.tradeAction) {
1132
1170
  properties[eventNames_1.PERPS_EVENT_PROPERTY.ACTION] = params.trackingData.tradeAction;
1133
1171
  }
1134
- // Pay with any token: trade_with_token (boolean); when true, include mm_pay_token_selected and mm_pay_network_selected
1172
+ // Pay with any token: trade_with_token (boolean); when true, include mm_pay_token_selected and mm_pay_network_selected; when false (Perps balance), include mm_pay_token_selected: "Perps Balance"
1135
1173
  properties[eventNames_1.PERPS_EVENT_PROPERTY.TRADE_WITH_TOKEN] =
1136
1174
  params.trackingData?.tradeWithToken === true;
1137
1175
  if (params.trackingData?.tradeWithToken === true) {
@@ -1144,6 +1182,18 @@ _TradingService_deps = new WeakMap(), _TradingService_controllerDeps = new WeakM
1144
1182
  params.trackingData.mmPayNetworkSelected;
1145
1183
  }
1146
1184
  }
1185
+ else if (params.trackingData !== undefined) {
1186
+ properties[eventNames_1.PERPS_EVENT_PROPERTY.MM_PAY_TOKEN_SELECTED] =
1187
+ eventNames_1.PERPS_EVENT_VALUE.MM_PAY_TOKEN.PERPS_BALANCE;
1188
+ }
1189
+ // Calculate order value in USD (size * price)
1190
+ const orderSize = parseFloat(result?.filledSize ?? params.size);
1191
+ const assetPrice = result?.averagePrice
1192
+ ? parseFloat(result.averagePrice)
1193
+ : params.trackingData?.marketPrice;
1194
+ if (assetPrice && orderSize) {
1195
+ properties[eventNames_1.PERPS_EVENT_PROPERTY.ORDER_VALUE] = orderSize * assetPrice;
1196
+ }
1147
1197
  // Add success-specific properties
1148
1198
  if (status === eventNames_1.PERPS_EVENT_VALUE.STATUS.EXECUTED) {
1149
1199
  if (params.trackingData?.metamaskFee !== undefined) {
@@ -1349,18 +1399,34 @@ async function _TradingService_loadPositionData(options) {
1349
1399
  ...(params.trackingData?.receivedAmount !== undefined && {
1350
1400
  [eventNames_1.PERPS_EVENT_PROPERTY.RECEIVED_AMOUNT]: params.trackingData.receivedAmount,
1351
1401
  }),
1402
+ ...(params.trackingData?.source && {
1403
+ [eventNames_1.PERPS_EVENT_PROPERTY.SOURCE]: params.trackingData.source,
1404
+ }),
1352
1405
  };
1406
+ // Calculate and add order value in USD (size * price)
1407
+ const closeAssetPrice = result?.averagePrice
1408
+ ? parseFloat(result.averagePrice)
1409
+ : params.trackingData?.marketPrice;
1410
+ const orderValue = closeAssetPrice && metrics.requestedSize
1411
+ ? metrics.requestedSize * closeAssetPrice
1412
+ : undefined;
1353
1413
  // Add success-specific properties
1354
1414
  if (status === eventNames_1.PERPS_EVENT_VALUE.STATUS.EXECUTED) {
1355
1415
  return {
1356
1416
  ...baseProperties,
1357
1417
  [eventNames_1.PERPS_EVENT_PROPERTY.CLOSE_TYPE]: metrics.closeType,
1418
+ ...(orderValue !== undefined && {
1419
+ [eventNames_1.PERPS_EVENT_PROPERTY.ORDER_VALUE]: orderValue,
1420
+ }),
1358
1421
  };
1359
1422
  }
1360
1423
  // Add error for failures
1361
1424
  return {
1362
1425
  ...baseProperties,
1363
1426
  ...(error && { [eventNames_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: error }),
1427
+ ...(orderValue !== undefined && {
1428
+ [eventNames_1.PERPS_EVENT_PROPERTY.ORDER_VALUE]: orderValue,
1429
+ }),
1364
1430
  };
1365
1431
  }, _TradingService_trackPositionCloseResult = function _TradingService_trackPositionCloseResult(options) {
1366
1432
  const { position, result, error, params, duration } = options;