@metamask-previews/perps-controller 10.0.0-preview-a42e8d0d2 → 10.0.0-preview-5a03e1b92

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 (106) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/constants/eventNames.cjs +6 -0
  3. package/dist/constants/eventNames.cjs.map +1 -1
  4. package/dist/constants/eventNames.d.cts +4 -0
  5. package/dist/constants/eventNames.d.cts.map +1 -1
  6. package/dist/constants/eventNames.d.mts +4 -0
  7. package/dist/constants/eventNames.d.mts.map +1 -1
  8. package/dist/constants/eventNames.mjs +6 -0
  9. package/dist/constants/eventNames.mjs.map +1 -1
  10. package/dist/index.cjs +86 -74
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +3 -1
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +3 -1
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +2 -0
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/perpsErrorCodes.cjs +16 -0
  19. package/dist/perpsErrorCodes.cjs.map +1 -1
  20. package/dist/perpsErrorCodes.d.cts +12 -0
  21. package/dist/perpsErrorCodes.d.cts.map +1 -1
  22. package/dist/perpsErrorCodes.d.mts +12 -0
  23. package/dist/perpsErrorCodes.d.mts.map +1 -1
  24. package/dist/perpsErrorCodes.mjs +16 -0
  25. package/dist/perpsErrorCodes.mjs.map +1 -1
  26. package/dist/providers/HyperLiquidProvider.cjs +674 -77
  27. package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
  28. package/dist/providers/HyperLiquidProvider.d.cts +13 -0
  29. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
  30. package/dist/providers/HyperLiquidProvider.d.mts +13 -0
  31. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
  32. package/dist/providers/HyperLiquidProvider.mjs +676 -79
  33. package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
  34. package/dist/selectors.cjs.map +1 -1
  35. package/dist/selectors.d.cts +17 -17
  36. package/dist/selectors.d.cts.map +1 -1
  37. package/dist/selectors.d.mts +17 -17
  38. package/dist/selectors.d.mts.map +1 -1
  39. package/dist/selectors.mjs.map +1 -1
  40. package/dist/services/HyperLiquidSubscriptionService.cjs +121 -11
  41. package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -1
  42. package/dist/services/HyperLiquidSubscriptionService.d.cts +21 -0
  43. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -1
  44. package/dist/services/HyperLiquidSubscriptionService.d.mts +21 -0
  45. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -1
  46. package/dist/services/HyperLiquidSubscriptionService.mjs +121 -11
  47. package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -1
  48. package/dist/services/TradingService.cjs +6 -2
  49. package/dist/services/TradingService.cjs.map +1 -1
  50. package/dist/services/TradingService.d.cts.map +1 -1
  51. package/dist/services/TradingService.d.mts.map +1 -1
  52. package/dist/services/TradingService.mjs +6 -2
  53. package/dist/services/TradingService.mjs.map +1 -1
  54. package/dist/types/index.cjs.map +1 -1
  55. package/dist/types/index.d.cts +69 -4
  56. package/dist/types/index.d.cts.map +1 -1
  57. package/dist/types/index.d.mts +69 -4
  58. package/dist/types/index.d.mts.map +1 -1
  59. package/dist/types/index.mjs.map +1 -1
  60. package/dist/types/perps-types.cjs.map +1 -1
  61. package/dist/types/perps-types.d.cts +35 -1
  62. package/dist/types/perps-types.d.cts.map +1 -1
  63. package/dist/types/perps-types.d.mts +35 -1
  64. package/dist/types/perps-types.d.mts.map +1 -1
  65. package/dist/types/perps-types.mjs.map +1 -1
  66. package/dist/utils/hyperLiquidAdapter.cjs +168 -10
  67. package/dist/utils/hyperLiquidAdapter.cjs.map +1 -1
  68. package/dist/utils/hyperLiquidAdapter.d.cts +35 -1
  69. package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -1
  70. package/dist/utils/hyperLiquidAdapter.d.mts +35 -1
  71. package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -1
  72. package/dist/utils/hyperLiquidAdapter.mjs +166 -11
  73. package/dist/utils/hyperLiquidAdapter.mjs.map +1 -1
  74. package/dist/utils/hyperLiquidValidation.cjs +160 -5
  75. package/dist/utils/hyperLiquidValidation.cjs.map +1 -1
  76. package/dist/utils/hyperLiquidValidation.d.cts +23 -4
  77. package/dist/utils/hyperLiquidValidation.d.cts.map +1 -1
  78. package/dist/utils/hyperLiquidValidation.d.mts +23 -4
  79. package/dist/utils/hyperLiquidValidation.d.mts.map +1 -1
  80. package/dist/utils/hyperLiquidValidation.mjs +160 -5
  81. package/dist/utils/hyperLiquidValidation.mjs.map +1 -1
  82. package/dist/utils/index.cjs +5 -1
  83. package/dist/utils/index.cjs.map +1 -1
  84. package/dist/utils/index.d.cts +2 -1
  85. package/dist/utils/index.d.cts.map +1 -1
  86. package/dist/utils/index.d.mts +2 -1
  87. package/dist/utils/index.d.mts.map +1 -1
  88. package/dist/utils/index.mjs +2 -1
  89. package/dist/utils/index.mjs.map +1 -1
  90. package/dist/utils/orderCalculations.cjs +363 -37
  91. package/dist/utils/orderCalculations.cjs.map +1 -1
  92. package/dist/utils/orderCalculations.d.cts +87 -2
  93. package/dist/utils/orderCalculations.d.cts.map +1 -1
  94. package/dist/utils/orderCalculations.d.mts +87 -2
  95. package/dist/utils/orderCalculations.d.mts.map +1 -1
  96. package/dist/utils/orderCalculations.mjs +359 -36
  97. package/dist/utils/orderCalculations.mjs.map +1 -1
  98. package/dist/utils/orderTypes.cjs +222 -0
  99. package/dist/utils/orderTypes.cjs.map +1 -0
  100. package/dist/utils/orderTypes.d.cts +114 -0
  101. package/dist/utils/orderTypes.d.cts.map +1 -0
  102. package/dist/utils/orderTypes.d.mts +114 -0
  103. package/dist/utils/orderTypes.d.mts.map +1 -0
  104. package/dist/utils/orderTypes.mjs +210 -0
  105. package/dist/utils/orderTypes.mjs.map +1 -0
  106. package/package.json +7 -6
package/CHANGELOG.md CHANGED
@@ -7,6 +7,83 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - **BREAKING:** Add trigger placement order types to `OrderType`: `stop_market`, `stop_limit`, `take_profit_market`, and `take_profit_limit`, placeable through `placeOrder` alongside the existing `market` and `limit` types ([#9674](https://github.com/MetaMask/core/pull/9674))
13
+ - `OrderType` is a wider union, so any consumer signature that narrows it back to `'market' | 'limit'` no longer accepts a value typed `OrderType` — including anything fed from `OrderFormState.type` or `selectPendingTradeConfiguration`. Mobile has six such signatures (`usePerpsOrderFees`, `usePerpsTPSLForm`, `PerpsLeverageBottomSheet`, `usePerpsClosePosition`, the `PerpsTPSL` route params in `types/navigation.ts`, and `determineMakerStatus` in `utils/orderUtils.ts`); they must widen to `OrderType` (or narrow explicitly at the call site) in the client update that adopts this release.
14
+ - `OrderParams.triggerPrice` sets the price at which the resting order activates. It is required for the four trigger types and rejected for `market`/`limit` orders, so a stray trigger price can never be silently dropped.
15
+ - `*_limit` types execute at `OrderParams.price` once triggered; `*_market` types execute as market orders, with a limit price derived from the trigger price and capped by `OrderParams.maxSlippageBps`, falling back to `ORDER_SLIPPAGE_CONFIG.DefaultTpslSlippageBps` when the caller does not set a tolerance.
16
+ - The params model stays provider-agnostic: no protocol vocabulary (HyperLiquid's `tpsl`, `triggerPx`, `isMarket`) appears in `OrderParams`, so a second provider can map the same fields.
17
+ - Add partial (quantity-scoped) TP/SL via `OrderParams.takeProfitSize` / `OrderParams.stopLossSize` and `UpdatePositionTPSLParams.takeProfitSize` / `UpdatePositionTPSLParams.stopLossSize`; omitting a size keeps the previous whole-order/whole-position behavior ([#9674](https://github.com/MetaMask/core/pull/9674))
18
+ - On HyperLiquid, a size cannot be expressed under `positionTpsl` grouping, so `updatePositionTPSL` submits partial TP/SL as standalone reduce-only trigger orders with `na` grouping and explicit sizes. In both the partial and whole-position paths the pre-cancel sweep clears previously placed standalone reduce-only triggers for the symbol so repeated calls stay idempotent, but never a TP/SL child of another pending order. Note that this includes standalone triggers the caller placed independently through `placeOrder` (for example a manual reduce-only stop on the same market), which are cancelled as part of the replace.
19
+ - Add `Position.takeProfitOrders` and `Position.stopLossOrders` (`PositionTriggerOrder[]`), the complete view of the trigger orders attached to a position — including partial ones, which the scalar `takeProfitPrice`/`stopLossPrice` fields cannot represent. Each entry carries `orderId`, `direction`, `orderType`, `triggerPrice`, `size` (resolved to the position size when the protocol encodes "whole position"), `isPartial`, and `reduceOnly` ([#9674](https://github.com/MetaMask/core/pull/9674))
20
+ - `direction` (`'stop' | 'take_profit'`) is always present and is what sorts a trigger into one array or the other. `orderType` is optional: HyperLiquid sometimes reports a bare `Trigger`, naming neither direction nor execution, and while the direction is recoverable from the trigger price against the entry, the execution mode is not — so it is left unstated rather than guessed. Such an order is still reported, in both the arrays and the counts derived from them.
21
+ - A trigger sitting exactly at the entry price is classified as a stop on both sides, matching the legacy price fallback the scalar `takeProfitPrice`/`stopLossPrice` fields use, so the arrays and the scalars cannot disagree about the same order.
22
+ - Add `Order.triggerOrderType`, the normalized placement type of an open trigger order, so open-orders state round-trips the placement type alongside the existing `triggerPrice`, `reduceOnly`, and size fields ([#9674](https://github.com/MetaMask/core/pull/9674))
23
+ - Add `OrderParams.tpslLinkage` (`'none' | 'order' | 'position'`), a provider-agnostic way to say how an attached TP/SL is linked — to this order, to the resulting position, or absent — replacing the HyperLiquid-shaped `grouping` without removing it ([#9674](https://github.com/MetaMask/core/pull/9674))
24
+ - `grouping` (`'na' | 'normalTpsl' | 'positionTpsl'`) is deprecated but still honoured for `'normalTpsl'`, so those callers keep working. `tpslLinkage` takes precedence; supplying both with different meanings is rejected with the new `ORDER_TPSL_LINKAGE_CONFLICT` error rather than silently resolved. `'positionTpsl'` is no longer accepted on `placeOrder` at all, and `'na'` is no longer accepted when the order carries an attached TP/SL — see the breaking entry under Changed.
25
+ - `adaptTpslLinkageToGrouping` maps the linkage onto HyperLiquid's grouping inside the adapter layer, keeping protocol wording out of `OrderParams`.
26
+ - Add the `TriggerOrderType`, `OrderExecution`, `TriggerDirection`, `TpslLinkage`, and `PositionTriggerOrder` types ([#9674](https://github.com/MetaMask/core/pull/9674))
27
+ - Add order-type helpers `TRIGGER_ORDER_TYPES`, `isTriggerOrderType`, `isLimitExecutionOrderType`, `getTriggerExecution`, `getTriggerDirection`, `buildTriggerOrderType`, and `buildPositionTriggerOrderFromOrder`, plus the HyperLiquid mappers `adaptTriggerOrderTypeFromSDK` and `adaptPositionTriggerOrderFromSDK` ([#9674](https://github.com/MetaMask/core/pull/9674))
28
+ - Add an executable proof of the advanced order-type contract under `tests/`: a case matrix shared by a Jest guard (`tests/src/e2e/advanced-orders.contract.test.ts`, simulated, runs in CI) and a script (`tests/e2e/advanced-orders.e2e.ts`) that replays it against HyperLiquid testnet. The matrix also probes the venue behaviours the controller's refusals rest on — that a `positionTpsl` batch containing a plain order is rejected, that a zero `triggerPx` or zero cap price is rejected, that a zero-size trigger is read as whole-position, and that `na`-grouped children outlive a cancelled parent — so each guard is justified by observed behaviour rather than assumption ([#9674](https://github.com/MetaMask/core/pull/9674))
29
+ - Add order validation error codes `ORDER_TRIGGER_PRICE_REQUIRED`, `ORDER_TRIGGER_PRICE_POSITIVE`, `ORDER_TRIGGER_PRICE_NOT_SUPPORTED`, `ORDER_TRIGGER_TPSL_UNSUPPORTED`, `ORDER_TPSL_SIZE_INVALID`, `ORDER_EDIT_TRIGGER_UNSUPPORTED`, `ORDER_EDIT_ORDER_UNVERIFIABLE`, `ORDER_TPSL_LINKAGE_CONFLICT`, `ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED`, `ORDER_TPSL_LINKAGE_REQUIRED`, and `ORDER_TIME_IN_FORCE_NOT_SUPPORTED` ([#9674](https://github.com/MetaMask/core/pull/9674))
30
+ - Add `floorToSizeDecimals(size, szDecimals)` (exported from `@metamask/perps-controller/utils/*`), which rounds an order size down onto an asset's size grid, snapping values that floating-point error leaves just below a grid point. The result is never greater than the input: a value genuinely below a grid point is truncated rather than snapped up ([#9719](https://github.com/MetaMask/core/pull/9719))
31
+ - **BREAKING:** Add `EXCHANGE_ACCOUNT_NOT_FOUND` to `PERPS_ERROR_CODES`, returned by `HyperLiquidProvider.placeOrder` when the wallet has no HyperLiquid account yet (TAT-3343) ([#9709](https://github.com/MetaMask/core/pull/9709))
32
+ - This widens the exported `PerpsErrorCode` union, so consumers that key an exhaustive `Record<PerpsErrorCode, …>` stop compiling until they add an entry for the new code. Both first-party clients do: Mobile's `app/components/UI/Perps/utils/translatePerpsError.ts` and Extension's `ui/components/app/perps/utils/translate-perps-error.ts`.
33
+ - To migrate: add a translation entry for `EXCHANGE_ACCOUNT_NOT_FOUND`. It signals that the wallet has no HyperLiquid account yet, so the message should direct the user to fund the account before trading.
34
+
35
+ ### Changed
36
+
37
+ - **BREAKING:** `placeOrder` now rejects `OrderParams.grouping: 'positionTpsl'` (and the equivalent `tpslLinkage: 'position'`) with `ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED`, where it was previously accepted and passed through to the exchange ([#9674](https://github.com/MetaMask/core/pull/9674))
38
+ - The rejection is not new behaviour so much as an earlier, clearer one: HyperLiquid requires every order in a `positionTpsl` batch to be a trigger, and the parent being placed is an ordinary market or limit order, so the venue rejected the whole batch. This was confirmed against HyperLiquid testnet rather than assumed. A caller that previously sent this combination did not get position-bound TP/SL; it got a failed submission, further from the call site and without a typed error.
39
+ - To bind TP/SL to the position, call `updatePositionTPSL` once the parent has filled — a position must exist before anything can be bound to it. To attach TP/SL to the order itself, use `tpslLinkage: 'order'` (legacy `grouping: 'normalTpsl'`), which is unchanged.
40
+ - `grouping: 'na'` with an attached TP/SL is rejected on the same grounds with `ORDER_TPSL_LINKAGE_REQUIRED`: it submits the children bound to nothing, so an unfilled parent leaves orphan reduce-only triggers that fire against whatever position happens to exist.
41
+ - `validateOrderParams` accepts the new placement fields (`triggerPrice`, `takeProfitPrice`, `stopLossPrice`, `takeProfitSize`, `stopLossSize`) and enforces them: trigger types need a positive trigger price, `*_limit` types need a limit price, `market`/`limit` orders reject a trigger price, a trigger placement cannot carry attached TP/SL, and a partial TP/SL size must be positive, no larger than the order size, and paired with its price ([#9674](https://github.com/MetaMask/core/pull/9674))
42
+ - `getMaxOrderValue`, `calculateOrderPriceAndSize`, `buildOrdersArray`, and `FeeCalculationParams` accept the full `OrderType` union; trigger types follow their execution mode (`*_limit` is treated as a limit order, `*_market` as a market order) for order-value limits and fee tiers ([#9674](https://github.com/MetaMask/core/pull/9674))
43
+ - `validateOrder` falls back to the trigger price when validating the notional of a market-executing trigger order that has no current or limit price ([#9674](https://github.com/MetaMask/core/pull/9674))
44
+ - `editOrder` rejects modifying a resting order into a trigger placement with `ORDER_EDIT_TRIGGER_UNSUPPORTED` instead of dropping the trigger, since HyperLiquid's `modify` rebuilds the order as a plain limit/market order ([#9674](https://github.com/MetaMask/core/pull/9674))
45
+ - The resting side of the edit is verified too, and fails closed: when the WebSocket order cache cannot confirm the order's placement type, `editOrder` queries `frontendOpenOrders` and rejects with `ORDER_EDIT_TRIGGER_UNSUPPORTED` for a resting trigger, or `ORDER_EDIT_ORDER_UNVERIFIABLE` when the order is no longer listed. Previously an unverifiable order was edited anyway, which could rebuild a protective stop as a plain order and report success. Both refusals happen before the trading setup that may prompt for a signature and write builder-fee and referral approvals, so a refused edit costs the caller nothing.
46
+ - `validateOrderParams` rejects position linkage on an order placement (`tpslLinkage: 'position'` or `grouping: 'positionTpsl'`) with `ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED`, whether or not a TP/SL is attached; every order in a `positionTpsl` batch must be a trigger order, and no order placement produces one — with an attached TP/SL the batch carries the ordinary parent order, and without one it is that parent alone, so HyperLiquid rejected both. Use `updatePositionTPSL` on the position instead ([#9674](https://github.com/MetaMask/core/pull/9674))
47
+ - `validateOrderParams` also rejects an attached TP/SL with no linkage (`tpslLinkage: 'none'` or `grouping: 'na'` alongside `takeProfitPrice`/`stopLossPrice`) with `ORDER_TPSL_LINKAGE_REQUIRED`; `na` grouping submits the TP/SL as standalone triggers bound to neither the parent order nor the position, so an unfilled parent left them behind as orphan reduce-only triggers ([#9674](https://github.com/MetaMask/core/pull/9674))
48
+ - `adaptOrderToSDK` now throws where it previously never threw: `ORDER_TRIGGER_PRICE_REQUIRED` when a trigger placement has no trigger price, and `ORDER_TIME_IN_FORCE_NOT_SUPPORTED` when a market order or trigger placement carries a time in force ([#9674](https://github.com/MetaMask/core/pull/9674))
49
+ - `PERPS_EVENT_VALUE.ORDER_TYPE` lists the four trigger placement types, which `TradingService` emits verbatim in the `order_type` analytics property ([#9674](https://github.com/MetaMask/core/pull/9674))
50
+ - `Order.parentOrderId` is now populated for real TP/SL child orders on the WebSocket order stream (previously only ever set by clients for synthetic display rows), which is what lets position state tell a position's own triggers apart from another order's ([#9674](https://github.com/MetaMask/core/pull/9674))
51
+
52
+ ### Fixed
53
+
54
+ - **BREAKING:** `OrderParams.timeInForce` now controls the HyperLiquid time-in-force for plain limit orders instead of being ignored; `GTC`, `IOC`, and post-only `ALO` map to their corresponding SDK values ([#9674](https://github.com/MetaMask/core/pull/9674))
55
+ - Order shapes that cannot carry a time in force — market orders and trigger placements, whose execution is decided when they fire — now reject it with `ORDER_TIME_IN_FORCE_NOT_SUPPORTED`, where previously the field was accepted and ignored for every order type. Callers passing `timeInForce` on anything other than a `limit` order must drop it.
56
+ - The rejection happens in `validateOrderParams`, before `placeOrder` changes leverage on-chain or moves margin to a HIP-3 DEX, so a rejected order leaves no side effects behind.
57
+ - Streamed `takeProfitCount` / `stopLossCount` can no longer disagree with the arrays they summarize. A symbol whose triggers produced no array entry fell back to the legacy count, so a position could report a count of 1 beside an empty array — a state no subscriber can render ([#9674](https://github.com/MetaMask/core/pull/9674))
58
+ - `getPositions` now populates `takeProfitCount` / `stopLossCount` on the REST path, which previously always reported `0` there while the WebSocket path counted them. Both counts and the new trigger arrays use one definition on both transports: reduce-only triggers on the market that are not a child of another pending order, de-duplicated by order ID. The WebSocket path derives its counts from the same arrays, so a standalone or partial trigger is counted identically on both transports; orders whose placement type HyperLiquid does not name (its ambiguous `Trigger`) are absent from both, where the legacy WebSocket count included them. The legacy scalar `takeProfitPrice` / `stopLossPrice` fields keep their previous behaviour and may still reflect a pending order's TP/SL child, so they can disagree with the arrays and counts; this is documented on the `Position` fields ([#9674](https://github.com/MetaMask/core/pull/9674))
59
+ - `updatePositionTPSL` now cancels standalone reduce-only triggers left by an earlier partial update when replacing whole-position TP/SL, where previously those leftovers survived the replace and could fire beside the new position-bound orders ([#9674](https://github.com/MetaMask/core/pull/9674))
60
+ - `editOrder` no longer reports the edited order's ID back as `OrderResult.orderId`. HyperLiquid does not edit in place: it cancels the target and rests a replacement under a new order ID, which the SDK's modify response does not carry, so the returned ID named an order the venue had already cancelled ([#9674](https://github.com/MetaMask/core/pull/9674))
61
+ - The replacement is now resolved from the open orders read after the modify, and is returned only when exactly one newly-rested order carries the submitted market, side and size. Novelty is judged against a snapshot taken before the modify, so an order that was already resting with the same attributes cannot be mistaken for the replacement.
62
+ - When the replacement cannot be identified unambiguously — a market edit that filled rather than rested, a read that has not yet caught up, or more than one candidate — the result stays successful and the optional `orderId` is omitted rather than reporting an ID that may be wrong. Callers reading `orderId` after an edit must handle it being absent.
63
+ - A partial TP/SL size that rounds away at the asset's precision (for example `0.0004` against `szDecimals: 3`) is now rejected with `ORDER_TPSL_SIZE_INVALID` in both `placeOrder` and `updatePositionTPSL`. Validation only saw the requested size, so such a size passed and was then submitted as `'0'` — which HyperLiquid reads as covering the whole position, silently turning a partial TP/SL into a full close ([#9674](https://github.com/MetaMask/core/pull/9674))
64
+ - The check runs before either method takes a side effect, so a rejected update leaves the account as it found it: `updatePositionTPSL` rejects before its pre-cancel sweep, so the position keeps the triggers it already had, and `placeOrder` rejects before signing prompts, the leverage change, and any HIP-3 margin transfer.
65
+ - A price that rounds away at the asset's precision is rejected the same way, and at the same point, as a size that does. An asset quotes to `DECIMAL_PRECISION_CONFIG.MaxPriceDecimals - szDecimals` places, so a positive price below that tick was formatted to `'0'` and submitted as a zero `triggerPx`, which the SDK rejects — previously only after `placeOrder` had completed trading setup, the leverage change, and any HIP-3 margin handling. `OrderParams.triggerPrice` is rejected with `ORDER_TRIGGER_PRICE_POSITIVE`; an attached or position `takeProfitPrice` / `stopLossPrice` with `ORDER_PRICE_POSITIVE` ([#9674](https://github.com/MetaMask/core/pull/9674))
66
+ - `updatePositionTPSL` now runs its trading setup — the step that can prompt a hardware wallet and write the referral and builder-fee approvals — only after every validation has passed, where previously it ran first. A rejected update (invalid partial size, a size missing its price, a size that rounds away) no longer leaves those writes behind ([#9674](https://github.com/MetaMask/core/pull/9674))
67
+ - `adaptOrderToSDK` derives the slippage cap price for `stop_market` / `take_profit_market` orders from the trigger price when the caller supplies none, instead of emitting `p: '0'`, which the SDK rejects before the request is made ([#9674](https://github.com/MetaMask/core/pull/9674))
68
+ - The cap follows the order's own `maxSlippageBps` (or the deprecated decimal `slippage`), falling back to `ORDER_SLIPPAGE_CONFIG.DefaultTpslSlippageBps` only when neither is set, so the same order priced through this helper and through `placeOrder` gets the same execution bound.
69
+ - Streamed positions now emit when a standalone or partial trigger order is placed or cancelled: the position change hash covers `takeProfitOrders` / `stopLossOrders`, where previously such a change altered neither the scalar TP/SL fields nor the counts and so was never delivered to position subscribers ([#9674](https://github.com/MetaMask/core/pull/9674))
70
+ - `Position.takeProfitOrders` / `stopLossOrders` re-resolve a position-bound trigger's size against the current position instead of reporting the size it was resolved to when the order was first adapted. A position-bound TP/SL covers whatever the position is, so after the position was resized the entry reported a stale size — and, when the position had grown, wrongly reported `isPartial: true` for a trigger that still covered the whole position ([#9674](https://github.com/MetaMask/core/pull/9674))
71
+ - That hash covers each trigger's placement type too, so a trigger modified in place from market to limit execution — keeping its order ID, trigger price, and size — is delivered rather than leaving subscribers on stale execution semantics.
72
+ - `Order.orderType` now reports how a trigger order executes rather than always reporting `limit`: HyperLiquid sets `limitPx` on trigger orders as a slippage cap, so a `Stop Market`/`Take Profit Market` order was previously read back as a limit order ([#9674](https://github.com/MetaMask/core/pull/9674))
73
+ - Stop `closePosition` from submitting reduce-only orders that HyperLiquid rejects with "Reduce only order would increase position" ([#9719](https://github.com/MetaMask/core/pull/9719))
74
+ - The position snapshot callers pass (to avoid a `getPositions()` REST call) is now re-validated against the freshest WebSocket position cache, so the order side and size follow the live position instead of a snapshot that a concurrent TP/SL fill, liquidation, or repeated close has already invalidated. No additional network request is made when the cache covers the symbol's DEX: a missing entry there means the position is already closed, so the close now fails fast with `No position found for <symbol>` instead of submitting a doomed order. When the cache does not cover that DEX — a HIP-3 DEX whose subscription has not published this session — the absence proves nothing, so a single `clearinghouseState` request for that DEX alone supplies live data, which keeps the outcome attributable to the symbol's own DEX: if the DEX answers without this symbol — including when it reports no positions at all — the position is genuinely closed and the close fails with `No position found for <symbol>`; only if that request fails does the caller's snapshot stand, since a failed lookup proves nothing and must not block a position that is open and closable. `HyperLiquidSubscriptionService` exposes the new `getCachedPositionsForDex(dexName)` method this uses, which returns that DEX's own cached positions rather than the cross-DEX aggregate: the aggregate is only rebuilt once every expected DEX has published, so after a WebSocket reconnect it can sit frozen at pre-reconnect contents while the per-DEX slices keep updating.
75
+ - A caller-supplied close size is clamped to the live position size, and that clamp is binding: for a partial close the `usdAmount` clients also send can no longer recompute the size above it. A close size that is supplied but not a positive number (e.g. `'0'` or `'abc'`) now fails with `ORDER_SIZE_POSITIVE`; only an omitted or empty `size` means "close 100%".
76
+ - The batch `closePositions` path also rounds each reduce-only size down onto the asset's size grid, instead of letting `formatHyperLiquidSize`'s half-up rounding push it above the position. A position smaller than one size increment is skipped rather than submitted as a zero-size order, and the remaining positions still close. Each skipped position is reported in `results` with `success: false` and `error: ORDER_SIZE_POSITIVE` and counted in `failureCount`, so a caller cannot read "closed everything" from a batch that left one open. `results` keeps the order of the requested positions, so a consumer correlating results to positions by index is unaffected by a skip.
77
+ - A close that covers the whole position — no `size`, or a `size` that reaches (or was clamped to) the position size — now submits exactly the live position size. The `usdAmount` clients send for slippage protection is no longer forwarded for such a close, because `placeOrder` treats it as the source of truth and would recompute the size from it, discarding the clamp and rounding the size up. Genuine partial closes still use `usdAmount`. As a result, a close of the entire position requested via an explicit `size` is now treated as a full close for validation too, so it skips the USD/$10-minimum check as an omitted `size` already did. The `priceAtCalculation` staleness check is unaffected: `calculateFinalPositionSize` now runs it whenever a caller supplies that field, rather than only inside its `usdAmount` branch, so a full close that drifted past `maxSlippageBps` is still rejected with "Price moved too much" even though its size no longer comes from `usdAmount`.
78
+ - `placeOrder` no longer retries **any** reduce-only order that the exchange rejected for the $10 minimum order value with a 1.5% larger size; the minimum-value error is surfaced instead. This covers reduce-only limit and TP/SL orders submitted directly through `placeOrder`, not just closes. **It is a behaviour change for partial closes**, which previously recovered from that rejection by closing ~1.5% more than requested: a reduce-only order can no longer grow past the position (full close) or past the size the caller asked to close (partial close), so the retry could only be rejected again or resubmit an identical order.
79
+ - `calculateFinalPositionSize` throws `ORDER_SIZE_POSITIVE` when a `reduceOnly` call supplies a `size` that is not a positive number, in both its `usdAmount` and legacy-size branches, instead of capping the USD-derived size to that value or passing it through to be formatted as a zero or negative size.
80
+ - `calculateFinalPositionSize` accepts an optional `reduceOnly` flag. When set, the size is rounded down onto the asset's size grid and the "add one increment to meet the requested USD" adjustment is skipped, so a reduce-only size can never round up past the position. If rounding down leaves a size of `0` (the order is worth less than one size increment), it throws `ORDER_SIZE_POSITIVE` rather than submitting a zero-size order. **This is a behaviour change for a reduce-only close between half an increment and one full increment**: `formatHyperLiquidSize` uses `toFixed`, which rounds half-up, so such a close previously succeeded by closing one whole increment and now fails client-side instead. It is most visible on coarse-grid (low `szDecimals`) assets, and reachable from any partial close that omits `usdAmount` — Mobile limit partial closes do (`usePerpsClosePosition` sends `usdAmount: undefined` for limit orders).
81
+ - Map HyperLiquid's `"User or API Wallet 0x... does not exist."` order rejection to `PERPS_ERROR_CODES.EXCHANGE_ACCOUNT_NOT_FOUND` instead of returning the raw exchange message as `OrderResult.error`, so clients can render an actionable "fund your account" message (TAT-3343) ([#9709](https://github.com/MetaMask/core/pull/9709))
82
+ - Stop reporting the `"User or API Wallet 0x... does not exist."` order rejection to the error logger; it is an expected pre-account state, matching the handling already applied to the other user-scoped HyperLiquid exchange writes (TAT-3343) ([#9709](https://github.com/MetaMask/core/pull/9709))
83
+ - Size the max order amount off the price a resting limit order is submitted at, fixing `order 0: insufficient margin to place order` rejections on max-size limit orders resting above the market price ([#9694](https://github.com/MetaMask/core/pull/9694))
84
+ - `getMaxAllowedAmount` derived the maximum from the market price, but HyperLiquid reserves initial margin for a resting order against the price that order is submitted at. A max-size limit order resting above the market price - typically a sell - therefore reserved more margin than the account had and the exchange rejected it.
85
+ - `getMaxAllowedAmount` now accepts optional `orderType` and `limitPrice` params. When a limit order rests above the market price the maximum is scaled by `limitPrice / marketPrice`; orders at or below the market price, and market orders, are unchanged. Both params are optional, so existing callers keep the previous behavior.
86
+
10
87
  ## [10.0.0]
11
88
 
12
89
  ### Added
@@ -220,6 +220,12 @@ exports.PERPS_EVENT_VALUE = {
220
220
  ORDER_TYPE: {
221
221
  MARKET: 'market',
222
222
  LIMIT: 'limit',
223
+ // Trigger placements are emitted verbatim by TradingService, so the enum has
224
+ // to list them for dashboards keyed on `order_type`.
225
+ STOP_MARKET: 'stop_market',
226
+ STOP_LIMIT: 'stop_limit',
227
+ TAKE_PROFIT_MARKET: 'take_profit_market',
228
+ TAKE_PROFIT_LIMIT: 'take_profit_limit',
223
229
  },
224
230
  ORDER_TYPE_CAPITALIZED: {
225
231
  MARKET: 'market',
@@ -1 +1 @@
1
- {"version":3,"file":"eventNames.cjs","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;GAEG;AACU,QAAA,oBAAoB,GAAG;IAClC,oBAAoB;IACpB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IAEpB,mBAAmB;IACnB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY,EAAE,0BAA0B;IACpD,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,iBAAiB,EAAE,mBAAmB;IACtC,WAAW,EAAE,aAAa;IAC1B,mBAAmB,EAAE,qBAAqB;IAE1C,sBAAsB;IACtB,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,YAAY;IACxB,kBAAkB,EAAE,oBAAoB;IACxC,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,UAAU,EAAE,YAAY;IACxB,iBAAiB,EAAE,mBAAmB;IACtC,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;IAElC,wBAAwB;IACxB,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAE1C,qBAAqB;IACrB,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IAEtC,mBAAmB;IACnB,gBAAgB,EAAE,kBAAkB;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,YAAY;IAExB,6BAA6B;IAC7B,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;IAEpD,0BAA0B;IAC1B,iBAAiB,EAAE,mBAAmB;IAEtC,mBAAmB;IACnB,YAAY,EAAE,cAAc,EAAE,6BAA6B;IAC3D,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,QAAQ,EAAE,UAAU;IACpB,4BAA4B,EAAE,8BAA8B;IAC5D,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,kBAAkB;IACpC,uBAAuB,EAAE,yBAAyB;IAElD,0CAA0C;IAC1C,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,mBAAmB;IACtC,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAEhC,2BAA2B;IAC3B,cAAc,EAAE,gBAAgB;IAChC,UAAU,EAAE,YAAY;IAExB,yBAAyB;IACzB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;IAE5B,uEAAuE;IACvE,sFAAsF;IACtF,+BAA+B;IAC/B,oBAAoB,EAAE,sBAAsB;IAC5C,yEAAyE;IAEzE,kCAAkC;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAElC,qBAAqB;IACrB,gBAAgB,EAAE,kBAAkB;IAEpC,8BAA8B;IAC9B,mBAAmB,EAAE,qBAAqB;IAE1C,mFAAmF;IACnF,cAAc,EAAE,gBAAgB;IAEhC,mCAAmC;IACnC,eAAe,EAAE,iBAAiB;IAClC,aAAa,EAAE,eAAe;IAC9B,sBAAsB,EAAE,wBAAwB;IAChD,oBAAoB,EAAE,sBAAsB;IAC5C,mDAAmD;IACnD,QAAQ,EAAE,UAAU;IACpB,iCAAiC;IACjC,eAAe,EAAE,iBAAiB;IAElC,6BAA6B;IAC7B,cAAc,EAAE,gBAAgB;IAEhC,iCAAiC;IACjC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IACxC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IAEtC,yCAAyC;IACzC,WAAW,EAAE,aAAa;IAE1B,kDAAkD;IAClD,eAAe,EAAE,iBAAiB;IAElC,+CAA+C;IAC/C,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,uBAAuB,EAAE,yBAAyB;IAElD,qCAAqC;IACrC,sBAAsB,EAAE,wBAAwB;IAChD,kBAAkB,EAAE,oBAAoB;IAExC,sBAAsB;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,sBAAsB,EAAE,wBAAwB;IAEhD,yDAAyD;IACzD,gBAAgB,EAAE,kBAAkB;IACpC,yBAAyB,EAAE,2BAA2B;IAEtD,iDAAiD;IACjD,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAE9C,+CAA+C;IAC/C,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;IAEpB,gDAAgD;IAChD,WAAW,EAAE,aAAa;IAE1B,4DAA4D;IAC5D,WAAW,EAAE,aAAa;IAE1B,+DAA+D;IAC/D,cAAc,EAAE,gBAAgB;IAEhC,2DAA2D;IAC3D,gBAAgB,EAAE,kBAAkB;IAEpC,6DAA6D;IAC7D,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IACxC,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;IACpD,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,qBAAqB,EAAE,uBAAuB;IAC9C,mBAAmB,EAAE,qBAAqB;IAC1C,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,0BAA0B,EAAE,4BAA4B;IACxD,cAAc,EAAE,gBAAgB;IAChC,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IAEpB,qEAAqE;IACrE,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,aAAa,EAAE,eAAe;IAE9B,sCAAsC;IACtC,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAElC,iDAAiD;IACjD,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC;AAEX;;GAEG;AACU,QAAA,iBAAiB,GAAG;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;KACf;IACD,UAAU,EAAE;QACV,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;KACf;IACD,sBAAsB,EAAE;QACtB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;KACf;IACD,aAAa,EAAE;QACb,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,UAAU;KACrB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACb;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,mBAAmB;KACvC;IACD,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,cAAc;QAC5B,kBAAkB,EAAE,oBAAoB;QACxC,YAAY,EAAE,cAAc;QAC5B,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,gBAAgB;QAChC,iBAAiB,EAAE,mBAAmB;QACtC,WAAW,EAAE,aAAa;QAC1B,kBAAkB,EAAE,oBAAoB;QACxC,eAAe,EAAE,iBAAiB;QAClC,cAAc,EAAE,gBAAgB;QAChC,UAAU,EAAE,YAAY;QACxB,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,sBAAsB,EAAE,wBAAwB;QAChD,2BAA2B,EAAE,6BAA6B;QAC1D,iBAAiB,EAAE,mBAAmB;QACtC,WAAW,EAAE,aAAa;QAC1B,YAAY,EAAE,cAAc;QAC5B,OAAO,EAAE,SAAS;QAClB,gBAAgB,EAAE,kBAAkB;QACpC,aAAa,EAAE,eAAe;QAC9B,aAAa,EAAE,eAAe;QAC9B,WAAW,EAAE,aAAa;QAC1B,uDAAuD;QACvD,mBAAmB,EAAE,qBAAqB;QAC1C,iBAAiB,EAAE,mBAAmB;QACtC,oBAAoB,EAAE,sBAAsB;QAC5C,yBAAyB,EAAE,2BAA2B;QACtD,yBAAyB,EAAE,2BAA2B;QACtD,mBAAmB,EAAE,qBAAqB;QAC1C,+BAA+B;QAC/B,OAAO,EAAE,SAAS;QAClB,0BAA0B;QAC1B,qBAAqB,EAAE,uBAAuB;QAC9C,wBAAwB,EAAE,0BAA0B;QACpD,wBAAwB,EAAE,0BAA0B;QACpD,2BAA2B;QAC3B,SAAS,EAAE,WAAW;QACtB,uBAAuB,EAAE,yBAAyB;QAClD,iBAAiB,EAAE,mBAAmB;QACtC,UAAU,EAAE,YAAY;QACxB,iBAAiB,EAAE,mBAAmB;QACtC,uBAAuB,EAAE,yBAAyB;QAClD,8BAA8B;QAC9B,aAAa,EAAE,eAAe;QAC9B,oBAAoB,EAAE,sBAAsB;QAC5C,aAAa,EAAE,eAAe;QAC9B,mEAAmE;QACnE,cAAc,EAAE,gBAAgB;QAChC,eAAe,EAAE,iBAAiB;QAClC,YAAY,EAAE,cAAc;QAC5B,gBAAgB,EAAE,kBAAkB;QACpC,YAAY,EAAE,cAAc;QAC5B,mBAAmB,EAAE,qBAAqB;QAC1C,eAAe,EAAE,iBAAiB;QAClC,uDAAuD;QACvD,qBAAqB,EAAE,uBAAuB;QAC9C,sBAAsB,EAAE,wBAAwB;QAChD,2CAA2C;QAC3C,sBAAsB,EAAE,wBAAwB;QAChD,uBAAuB,EAAE,yBAAyB;QAClD,uBAAuB,EAAE,yBAAyB;QAClD,wBAAwB,EAAE,0BAA0B;QACpD,oDAAoD;QACpD,iBAAiB,EAAE,mBAAmB;QACtC,oBAAoB,EAAE,sBAAsB;QAC5C,2BAA2B,EAAE,6BAA6B;QAC1D,uBAAuB,EAAE,yBAAyB;QAClD,qCAAqC;QACrC,0BAA0B,EAAE,4BAA4B;QACxD,wBAAwB,EAAE,0BAA0B;KACrD;IACD,YAAY,EAAE;QACZ,eAAe,EAAE,iBAAiB;QAClC,kBAAkB,EAAE,oBAAoB;QACxC,oBAAoB,EAAE,sBAAsB;KAC7C;IACD,UAAU,EAAE;QACV,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,SAAS;KACnB;IACD,wDAAwD;IACxD,6EAA6E;IAC7E,iBAAiB,EAAE;QACjB,kCAAkC,EAAE,oCAAoC;QACxE,mCAAmC,EAAE,qCAAqC;QAC1E,oBAAoB,EAAE,sBAAsB;QAC5C,YAAY,EAAE,cAAc;QAC5B,eAAe,EAAE,iBAAiB;QAClC,kBAAkB,EAAE,oBAAoB;QACxC,yBAAyB,EAAE,2BAA2B;QACtD,wBAAwB,EAAE,0BAA0B;QACpD,kBAAkB,EAAE,oBAAoB;QACxC,aAAa,EAAE,eAAe;QAC9B,iBAAiB,EAAE,mBAAmB;QACtC,sBAAsB,EAAE,wBAAwB;QAChD,mBAAmB,EAAE,qBAAqB;QAC1C,oBAAoB,EAAE,sBAAsB;QAC5C,OAAO,EAAE,SAAS;KACnB;IACD,cAAc,EAAE;QACd,gBAAgB;QAChB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,WAAW;QACtB,eAAe,EAAE,iBAAiB;QAClC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,aAAa;QAC1B,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,OAAO;QACd,mBAAmB;QACnB,YAAY,EAAE,cAAc;QAC5B,YAAY,EAAE,cAAc;QAC5B,wBAAwB,EAAE,0BAA0B;QACpD,aAAa,EAAE,eAAe;QAC9B,uBAAuB;QACvB,WAAW,EAAE,aAAa;QAC1B,GAAG,EAAE,KAAK;QACV,aAAa,EAAE,eAAe;KAC/B;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,WAAW;QACtB,eAAe,EAAE,iBAAiB;QAClC,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,mBAAmB,EAAE,qBAAqB;QAC1C,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,eAAe;QAC9B,eAAe,EAAE,iBAAiB;KACnC;IACD,gBAAgB,EAAE;QAChB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;QACd,cAAc,EAAE,gBAAgB;QAChC,iBAAiB,EAAE,mBAAmB;QACtC,mBAAmB,EAAE,qBAAqB;QAC1C,2DAA2D;QAC3D,eAAe,EAAE,iBAAiB;QAClC,gBAAgB,EAAE,kBAAkB;QACpC,gBAAgB,EAAE,kBAAkB;QACpC,kBAAkB,EAAE,oBAAoB;QACxC,mBAAmB,EAAE,qBAAqB;QAC1C,oBAAoB,EAAE,sBAAsB;QAC5C,qBAAqB,EAAE,uBAAuB;QAC9C,gBAAgB,EAAE,kBAAkB;QACpC,cAAc,EAAE,gBAAgB;QAChC,mCAAmC;QACnC,eAAe,EAAE,iBAAiB;QAClC,0BAA0B,EAAE,4BAA4B;QACxD,UAAU,EAAE,YAAY;QACxB,aAAa,EAAE,eAAe;QAC9B,iBAAiB,EAAE,mBAAmB;QACtC,eAAe,EAAE,iBAAiB;QAClC,aAAa,EAAE,eAAe;QAC9B,yBAAyB;QACzB,iBAAiB,EAAE,mBAAmB;QACtC,mBAAmB,EAAE,qBAAqB;QAC1C,qBAAqB;QACrB,iBAAiB,EAAE,mBAAmB;QACtC,wBAAwB;QACxB,sBAAsB,EAAE,wBAAwB;QAChD,sBAAsB,EAAE,wBAAwB;QAChD,0CAA0C;QAC1C,uBAAuB,EAAE,yBAAyB;QAClD,wBAAwB;QACxB,sBAAsB,EAAE,wBAAwB;QAChD,uBAAuB,EAAE,yBAAyB;QAClD,4BAA4B,EAAE,8BAA8B;QAC5D,mCAAmC;QACnC,qBAAqB,EAAE,uBAAuB;QAC9C,sBAAsB;QACtB,kBAAkB,EAAE,oBAAoB;QACxC,wCAAwC;QACxC,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,gBAAgB;QAChC,2CAA2C;QAC3C,oBAAoB,EAAE,sBAAsB;QAC5C,kBAAkB,EAAE,oBAAoB;QACxC,yBAAyB,EAAE,2BAA2B;QACtD,+CAA+C;QAC/C,gCAAgC,EAAE,kCAAkC;KACrE;IACD,mBAAmB,EAAE;QACnB,OAAO,EAAE,SAAS;QAClB,eAAe,EAAE,iBAAiB;KACnC;IACD,WAAW,EAAE;QACX,aAAa,EAAE,eAAe;QAC9B,IAAI,EAAE,MAAM;QACZ,aAAa,EAAE,eAAe;QAC9B,eAAe,EAAE,iBAAiB;QAClC,cAAc,EAAE,gBAAgB;QAChC,UAAU,EAAE,YAAY;QACxB,eAAe,EAAE,iBAAiB;QAClC,iBAAiB,EAAE,mBAAmB;KACvC;IACD,iBAAiB,EAAE;QACjB,mBAAmB,EAAE,qBAAqB;QAC1C,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,oBAAoB,EAAE,sBAAsB;KAC7C;IACD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;KACnB;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,iBAAiB;QAClC,YAAY,EAAE,cAAc;KAC7B;IACD,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,gBAAgB,EAAE,kBAAkB;QACpC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,eAAe,EAAE,iBAAiB;QAClC,kBAAkB,EAAE,oBAAoB;QACxC,2EAA2E;QAC3E,uEAAuE;QACvE,kEAAkE;QAClE,cAAc,EAAE,gBAAgB;KACjC;IACD,WAAW,EAAE;QACX,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,eAAe;QAC9B,OAAO,EAAE,SAAS;QAClB,kEAAkE;QAClE,UAAU,EAAE,YAAY;QACxB,UAAU,EAAE,YAAY;QACxB,qBAAqB,EAAE,uBAAuB;QAC9C,cAAc,EAAE,gBAAgB;QAChC,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,WAAW;QACtB,aAAa,EAAE,eAAe;QAC9B,cAAc,EAAE,gBAAgB;QAChC,mBAAmB,EAAE,qBAAqB;QAC1C,iBAAiB,EAAE,mBAAmB;QACtC,aAAa,EAAE,eAAe;QAC9B,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,OAAO;QACd,+BAA+B;QAC/B,eAAe,EAAE,iBAAiB;QAClC,kBAAkB,EAAE,oBAAoB;QACxC,kBAAkB,EAAE,oBAAoB;QACxC,qBAAqB;QACrB,iBAAiB,EAAE,mBAAmB;QACtC,QAAQ,EAAE,UAAU;QACpB,iBAAiB,EAAE,mBAAmB;QACtC,UAAU,EAAE,YAAY;QACxB,aAAa,EAAE,eAAe;QAC9B,eAAe,EAAE,iBAAiB;QAClC,sBAAsB,EAAE,wBAAwB;QAChD,gDAAgD;QAChD,6BAA6B,EAAE,+BAA+B;QAC9D,yCAAyC;QACzC,oBAAoB,EAAE,sBAAsB;QAC5C,iBAAiB,EAAE,mBAAmB;KACvC;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;KACrB;IACD,WAAW,EAAE;QACX,gBAAgB,EAAE,kBAAkB;QACpC,eAAe,EAAE,iBAAiB;QAClC,sBAAsB,EAAE,wBAAwB;QAChD,UAAU,EAAE,YAAY;QACxB,oBAAoB,EAAE,sBAAsB;QAC5C,WAAW,EAAE,aAAa;KAC3B;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,kBAAkB;QACpC,kBAAkB,EAAE,oBAAoB;QACxC,KAAK,EAAE,OAAO;QACd,0BAA0B;QAC1B,UAAU,EAAE,YAAY;QACxB,aAAa,EAAE,eAAe;QAC9B,UAAU,EAAE,YAAY;QACxB,YAAY,EAAE,cAAc;QAC5B,oDAAoD;QACpD,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,MAAM;QACZ,kFAAkF;QAClF,eAAe,EAAE,iBAAiB;QAClC,iBAAiB,EAAE,mBAAmB;QACtC,mDAAmD;QACnD,kBAAkB,EAAE,oBAAoB;QACxC,kBAAkB,EAAE,oBAAoB;QACxC,sCAAsC;QACtC,aAAa,EAAE,eAAe;KAC/B;IACD,0BAA0B;IAC1B,sBAAsB,EAAE;QACtB,YAAY,EAAE,cAAc;QAC5B,eAAe,EAAE,iBAAiB;QAClC,uBAAuB,EAAE,yBAAyB;KACnD;IACD,kBAAkB,EAAE;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,UAAU;KACrB;IACD,sFAAsF;IACtF,YAAY,EAAE;QACZ,aAAa,EAAE,eAAe;KAC/B;IACD,qBAAqB;IACrB,OAAO,EAAE;QACP,WAAW;QACX,iBAAiB,EAAE,mBAAmB;QACtC,6BAA6B;QAC7B,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,YAAY;KACzB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,eAAe;QAC9B,gBAAgB,EAAE,kBAAkB;QACpC,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,aAAa;QAC1B,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,KAAK;QACV,aAAa,EAAE,eAAe;QAC9B,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,YAAY;QACxB,eAAe,EAAE,iBAAiB;QAClC,wDAAwD;QACxD,WAAW,EAAE,aAAa;QAC1B,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,iBAAiB;KACnC;IACD,eAAe,EAAE;QACf,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,sBAAsB,EAAE,wBAAwB;QAChD,kBAAkB,EAAE,oBAAoB;QACxC,SAAS,EAAE,WAAW;QACtB,iBAAiB,EAAE,mBAAmB;QACtC,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,mBAAmB,EAAE,qBAAqB;QAC1C,UAAU,EAAE,YAAY;QACxB,iBAAiB,EAAE,mBAAmB;QACtC,aAAa,EAAE,eAAe;KAC/B;CACO,CAAC","sourcesContent":["/**\n * Perps event property keys and values - matching dashboard requirements exactly\n * Event names are defined in MetaMetrics.events.ts as the single source of truth\n */\n\n/**\n * Event property keys - ensures consistent property naming\n */\nexport const PERPS_EVENT_PROPERTY = {\n // Common properties\n TIMESTAMP: 'timestamp',\n ASSET: 'asset',\n DIRECTION: 'direction',\n SOURCE: 'source',\n TAB_NAME: 'tab_name',\n LOCATION: 'location',\n\n // Trade properties\n LEVERAGE: 'leverage',\n LEVERAGE_USED: 'leverage_used',\n ORDER_SIZE: 'order_size',\n MARGIN_USED: 'margin_used',\n ORDER_TYPE: 'order_type', // lowercase per dashboard\n ORDER_TIMESTAMP: 'order_timestamp',\n LIMIT_PRICE: 'limit_price',\n FEES: 'fees',\n FEE: 'fee',\n METAMASK_FEE: 'metamask_fee',\n METAMASK_FEE_RATE: 'metamask_fee_rate',\n DISCOUNT_PERCENTAGE: 'discount_percentage',\n ESTIMATED_REWARDS: 'estimated_rewards',\n ASSET_PRICE: 'asset_price',\n COMPLETION_DURATION: 'completion_duration',\n\n // Position properties\n OPEN_POSITION: 'open_position',\n OPEN_ORDER: 'open_order',\n OPEN_POSITION_SIZE: 'open_position_size',\n UNREALIZED_PNL_DOLLAR: 'unrealized_dollar_pnl',\n UNREALIZED_PNL_PERCENT: 'unrealized_percent_pnl',\n CLOSE_VALUE: 'close_value',\n CLOSE_PERCENTAGE: 'close_percentage',\n CLOSE_TYPE: 'close_type',\n PERCENTAGE_CLOSED: 'percentage_closed',\n PNL_DOLLAR: 'dollar_pnl',\n PNL_PERCENT: 'percent_pnl',\n RECEIVED_AMOUNT: 'received_amount',\n\n // Order type variations\n CURRENT_ORDER_TYPE: 'current_order_type',\n SELECTED_ORDER_TYPE: 'selected_order_type',\n\n // Funding properties\n SOURCE_CHAIN: 'source_chain',\n SOURCE_ASSET: 'source_asset',\n SOURCE_AMOUNT: 'source_amount',\n DESTINATION_AMOUNT: 'destination_amount',\n NETWORK_FEE: 'network_fee',\n WITHDRAWAL_AMOUNT: 'withdrawal_amount',\n\n // Chart properties\n INTERACTION_TYPE: 'interaction_type',\n TIME_SERIE_SELECTED: 'time_serie_selected',\n CANDLE_PERIOD: 'candle_period',\n CHART_LIBRARY: 'chart_library',\n ASSET_TYPE: 'asset_type',\n\n // Risk management properties\n STOP_LOSS_PRICE: 'stop_loss_price',\n STOP_LOSS_PERCENT: 'stop_loss_percent',\n TAKE_PROFIT_PRICE: 'take_profit_price',\n TAKE_PROFIT_PERCENT: 'take_profit_percent',\n POSITION_SIZE: 'position_size',\n POSITION_AGE: 'position_age',\n LIQUIDATION_DISTANCE_OLD: 'liquidation_distance_old',\n LIQUIDATION_DISTANCE_NEW: 'liquidation_distance_new',\n\n // Notification properties\n NOTIFICATION_TYPE: 'notification_type',\n\n // Other properties\n INPUT_METHOD: 'input_method', // camelCase per requirements\n ACTION_TYPE: 'action_type',\n SETTING_TYPE: 'setting_type',\n FAILURE_REASON: 'failure_reason',\n WARNING_TYPE: 'warning_type',\n WARNING_MESSAGE: 'warning_message',\n ERROR_TYPE: 'error_type',\n ERROR_MESSAGE: 'error_message',\n AB_TESTS: 'ab_tests',\n COMPLETION_DURATION_TUTORIAL: 'completion_duration_tutorial',\n STEPS_VIEWED: 'steps_viewed',\n VIEW_OCCURRENCES: 'view_occurrences',\n AMOUNT_FILLED: 'amount_filled',\n REMAINING_AMOUNT: 'remaining_amount',\n NUMBER_POSITIONS_CLOSED: 'number_positions_closed',\n\n // Tutorial carousel navigation properties\n PREVIOUS_SCREEN: 'previous_screen',\n CURRENT_SCREEN: 'current_screen',\n SCREEN_POSITION: 'screen_position',\n TOTAL_SCREENS: 'total_screens',\n NAVIGATION_METHOD: 'navigation_method',\n STATUS: 'status',\n SCREEN_TYPE: 'screen_type',\n SCREEN_NAME: 'screen_name',\n ACTION: 'action',\n RETRY_ATTEMPTS: 'retry_attempts',\n SHOW_BACK_BUTTON: 'show_back_button',\n ATTEMPT_NUMBER: 'attempt_number',\n\n // PnL Hero Card properties\n IMAGE_SELECTED: 'image_selected',\n TAB_NUMBER: 'tab_number',\n\n // VIP rewards properties\n VIP_TIER: 'vip_tier',\n VIP_DISCOUNT: 'vip_discount',\n\n // A/B testing properties (flat per test for multiple concurrent tests)\n // Only include AB test properties when test is enabled (event not sent when disabled)\n // Button color test (TAT-1937)\n AB_TEST_BUTTON_COLOR: 'ab_test_button_color',\n // Future tests: add as AB_TEST_{TEST_NAME} (no _ENABLED property needed)\n\n // Entry point tracking properties\n BUTTON_CLICKED: 'button_clicked',\n BUTTON_LOCATION: 'button_location',\n\n // Balance properties\n HAS_PERP_BALANCE: 'has_perp_balance',\n\n // Service interruption banner\n OUTAGE_BANNER_SHOWN: 'outage_banner_shown',\n\n // Geo-blocking properties (TAT-2337: track geo-blocked withdrawals for monitoring)\n IS_GEO_BLOCKED: 'is_geo_blocked',\n\n // TP/SL differentiation properties\n HAS_TAKE_PROFIT: 'has_take_profit',\n HAS_STOP_LOSS: 'has_stop_loss',\n TAKE_PROFIT_PERCENTAGE: 'take_profit_percentage',\n STOP_LOSS_PERCENTAGE: 'stop_loss_percentage',\n // Auto Close TP/SL RoE sign toggle (`'+'` | `'-'`)\n ROE_SIGN: 'roe_sign',\n // Watchlist/Favorites properties\n FAVORITES_COUNT: 'favorites_count',\n\n // Scroll tracking properties\n SECTION_VIEWED: 'section_viewed',\n\n // Discovery analytics properties\n SOURCE_SECTION: 'source_section',\n RESULT_COUNT: 'result_count',\n SECTION_NAME: 'section_name',\n SECTION_INDEX: 'section_index',\n SECTIONS_DISPLAYED: 'sections_displayed',\n WATCHLIST_COUNT: 'watchlist_count',\n WATCHLIST_MARKETS: 'watchlist_markets',\n\n // Order value (USD $ value of the order)\n ORDER_VALUE: 'order_value',\n\n // Market category filter (for market list screen)\n MARKET_CATEGORY: 'market_category',\n\n // Pay with any token (PERPS_TRADE_TRANSACTION)\n TRADE_WITH_TOKEN: 'trade_with_token',\n MM_PAY_TOKEN_SELECTED: 'mm_pay_token_selected',\n MM_PAY_NETWORK_SELECTED: 'mm_pay_network_selected',\n\n // Pay-with UI (PERPS_UI_INTERACTION)\n INITIAL_PAYMENT_METHOD: 'initial_payment_method',\n NEW_PAYMENT_METHOD: 'new_payment_method',\n\n // Slippage properties\n MAX_SLIPPAGE_PCT: 'max_slippage_pct',\n MAX_SLIPPAGE_SOURCE: 'max_slippage_source',\n ESTIMATED_SLIPPAGE_PCT: 'estimated_slippage_pct',\n\n // Account setup / abstraction mode (PERPS_ACCOUNT_SETUP)\n ABSTRACTION_MODE: 'abstraction_mode',\n PREVIOUS_ABSTRACTION_MODE: 'previous_abstraction_mode',\n\n // Entry point / discovery attribution (TAT-3080)\n ENTRY_POINT: 'entry_point',\n DISCOVERY_SOURCE: 'discovery_source',\n PERP_DISCOVERY_SOURCE: 'perp_discovery_source',\n\n // UTM attribution context (TAT-3133, TAT-3140)\n UTM_SOURCE: 'utm_source',\n UTM_MEDIUM: 'utm_medium',\n UTM_CAMPAIGN: 'utm_campaign',\n UTM_CONTENT: 'utm_content',\n UTM_TERM: 'utm_term',\n\n // Watchlist membership at event time (TAT-3148)\n WATCHLISTED: 'watchlisted',\n\n // HyperLiquid protocol fee rate on trade + close (TAT-3149)\n HL_FEE_RATE: 'hl_fee_rate',\n\n // Bulk action correlation id for batch close/cancel (TAT-3150)\n BULK_ACTION_ID: 'bulk_action_id',\n\n // Client environment (Extension supplies value) (TAT-3335)\n ENVIRONMENT_TYPE: 'environment_type',\n\n // Order funnel / consideration + quote properties (TAT-3084)\n ORDER_CONTEXT: 'order_context',\n ORDER_SIZE_PERCENT: 'order_size_percent',\n LIMIT_PRICE_INPUT_TYPE: 'limit_price_input_type',\n LIMIT_PRICE_INPUT_PRESET: 'limit_price_input_preset',\n ORDER_HAS_TP: 'order_has_tp',\n ORDER_HAS_SL: 'order_has_sl',\n QUOTE_LATENCY_MS: 'quote_latency_ms',\n ERROR_REASON: 'error_reason',\n SAVED_ORDER: 'saved_order',\n DEFAULT_PAYMENT_TOKEN: 'default_payment_token',\n DEFAULT_SIZE_AMOUNT: 'default_size_amount',\n DEFAULT_LEVERAGE: 'default_leverage',\n DEFAULT_AUTO_CLOSE: 'default_auto_close',\n ORDER_EXECUTION_LATENCY_MS: 'order_execution_latency_ms',\n SCREEN_CONTEXT: 'screen_context',\n FROM_TOKEN: 'from_token',\n FROM_CHAIN: 'from_chain',\n TO_TOKEN: 'to_token',\n TO_CHAIN: 'to_chain',\n\n // Search / discovery query properties (TAT-3144, TAT-3202, TAT-3151)\n SEARCH_QUERY: 'search_query',\n RESULTS_COUNT: 'results_count',\n RESULT_RANK: 'result_rank',\n MODE: 'mode',\n CURRENT_TOKEN: 'current_token',\n\n // Sort / filter properties (TAT-3142)\n SORT_FIELD: 'sort_field',\n SORT_DIRECTION: 'sort_direction',\n FILTER_CATEGORY: 'filter_category',\n\n // Time-on-screen for abandon tracking (TAT-3136)\n TIME_ON_SCREEN_MS: 'time_on_screen_ms',\n} as const;\n\n/**\n * Property value constants\n */\nexport const PERPS_EVENT_VALUE = {\n DIRECTION: {\n LONG: 'long',\n SHORT: 'short',\n },\n ORDER_TYPE: {\n MARKET: 'market',\n LIMIT: 'limit',\n },\n ORDER_TYPE_CAPITALIZED: {\n MARKET: 'market',\n LIMIT: 'limit',\n },\n CHART_LIBRARY: {\n LIGHTWEIGHT: 'lightweight',\n ADVANCED: 'advanced',\n },\n ASSET_TYPE: {\n SPOT: 'spot',\n PERP: 'perp',\n },\n INPUT_METHOD: {\n SLIDER: 'slider',\n KEYBOARD: 'keyboard',\n PRESET: 'preset',\n MANUAL: 'manual',\n PERCENTAGE_BUTTON: 'percentage_button',\n },\n SOURCE: {\n BANNER: 'banner',\n NOTIFICATION: 'notification',\n MAIN_ACTION_BUTTON: 'main_action_button',\n POSITION_TAB: 'position_tab',\n PERP_MARKETS: 'perp_markets',\n DEEPLINK: 'deeplink',\n TUTORIAL: 'tutorial',\n TRADE_SCREEN: 'trade_screen',\n HOMESCREEN_TAB: 'homescreen_tab',\n PERP_ASSET_SCREEN: 'perp_asset_screen',\n PERP_MARKET: 'perp_market',\n PERP_MARKET_SEARCH: 'perp_market_search',\n POSITION_SCREEN: 'position_screen',\n BOTTOM_NAV_BAR: 'bottom_nav_bar',\n TP_SL_VIEW: 'tp_sl_view',\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN_NO_FUNDS: 'perps_asset_screen_no_funds',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n HOME_SECTION: 'home_section',\n TOOLTIP: 'tooltip',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO_BUTTON: 'crypto_button',\n STOCKS_BUTTON: 'stocks_button',\n CLOSE_TOAST: 'close_toast',\n // Perps home section sources (for navigation tracking)\n PERPS_HOME_POSITION: 'perps_home_position',\n PERPS_HOME_ORDERS: 'perps_home_orders',\n PERPS_HOME_WATCHLIST: 'perps_home_watchlist',\n PERPS_HOME_EXPLORE_CRYPTO: 'perps_home_explore_crypto',\n PERPS_HOME_EXPLORE_STOCKS: 'perps_home_explore_stocks',\n PERPS_HOME_ACTIVITY: 'perps_home_activity',\n // Explore/Trending page source\n EXPLORE: 'explore',\n // Market list tab sources\n PERPS_MARKET_LIST_ALL: 'perps_market_list_all',\n PERPS_MARKET_LIST_CRYPTO: 'perps_market_list_crypto',\n PERPS_MARKET_LIST_STOCKS: 'perps_market_list_stocks',\n // Other navigation sources\n PERPS_TAB: 'perps_tab',\n WALLET_MAIN_ACTION_MENU: 'wallet_main_action_menu',\n PUSH_NOTIFICATION: 'push_notification',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n // Position management sources\n OPEN_POSITION: 'open_position',\n POSITION_CLOSE_TOAST: 'position_close_toast',\n TRADE_DETAILS: 'trade_details',\n // Geo-block trigger sources (for tracking what action was blocked)\n DEPOSIT_BUTTON: 'deposit_button',\n WITHDRAW_BUTTON: 'withdraw_button',\n TRADE_ACTION: 'trade_action',\n ADD_FUNDS_ACTION: 'add_funds_action',\n CANCEL_ORDER: 'cancel_order',\n ASSET_DETAIL_SCREEN: 'asset_detail_screen',\n MARKET_INSIGHTS: 'market_insights',\n // TAT-2449: Geo-block sources for close/modify actions\n CLOSE_POSITION_ACTION: 'close_position_action',\n MODIFY_POSITION_ACTION: 'modify_position_action',\n // Geo-block sources for order book actions\n ORDER_BOOK_LONG_BUTTON: 'order_book_long_button',\n ORDER_BOOK_SHORT_BUTTON: 'order_book_short_button',\n ORDER_BOOK_CLOSE_BUTTON: 'order_book_close_button',\n ORDER_BOOK_MODIFY_BUTTON: 'order_book_modify_button',\n // Geo-block sources for position management actions\n AUTO_CLOSE_ACTION: 'auto_close_action',\n ADJUST_MARGIN_ACTION: 'adjust_margin_action',\n STOP_LOSS_PROMPT_ADD_MARGIN: 'stop_loss_prompt_add_margin',\n STOP_LOSS_PROMPT_SET_SL: 'stop_loss_prompt_set_sl',\n // Geo-block sources for bulk actions\n CLOSE_ALL_POSITIONS_BUTTON: 'close_all_positions_button',\n CANCEL_ALL_ORDERS_BUTTON: 'cancel_all_orders_button',\n },\n WARNING_TYPE: {\n MINIMUM_DEPOSIT: 'minimum_deposit',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n },\n ERROR_TYPE: {\n NETWORK: 'network',\n APP_CRASH: 'app_crash',\n BACKEND: 'backend',\n VALIDATION: 'validation',\n WARNING: 'warning',\n },\n // Standardized error message keys for PERP_ERROR events\n // These should be used instead of localized strings for consistent analytics\n ERROR_MESSAGE_KEY: {\n ORDER_CHANGED_FROM_LIMIT_TO_MARKET: 'order_changed_from_limit_to_market',\n OPEN_CROSS_MARGIN_POSITION_DETECTED: 'open_cross_margin_position_detected',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n ORDER_FAILED: 'order_failed',\n GEO_RESTRICTION: 'geo_restriction',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n MAXIMUM_LEVERAGE_EXCEEDED: 'maximum_leverage_exceeded',\n PRICE_DEVIATION_TOO_HIGH: 'price_deviation_too_high',\n MARKET_AT_CAPACITY: 'market_at_capacity',\n NETWORK_ERROR: 'network_error',\n CONNECTION_FAILED: 'connection_failed',\n POSITION_UPDATE_FAILED: 'position_update_failed',\n TP_SL_UPDATE_FAILED: 'tp_sl_update_failed',\n MARGIN_UPDATE_FAILED: 'margin_update_failed',\n UNKNOWN: 'unknown',\n },\n SOURCE_SECTION: {\n // Home sections\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_GAINERS: 'top_gainers',\n TOP_LOSERS: 'top_losers',\n CRYPTO: 'crypto',\n COMMODITY: 'commodity',\n STOCK: 'stock',\n FOREX: 'forex',\n // Explore sections\n PERPS_MOVERS: 'perps_movers',\n PERPS_CRYPTO: 'perps_crypto',\n PERPS_STOCKS_COMMODITIES: 'perps_stocks_commodities',\n PERPS_MARKETS: 'perps_markets',\n // Market list sections\n ALL_MARKETS: 'all_markets',\n NEW: 'new',\n ACTIVE_SEARCH: 'active_search',\n },\n SECTION_NAME: {\n BALANCE: 'balance',\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_MOVERS: 'top_movers',\n EXPLORE_CRYPTO: 'explore_crypto',\n EXPLORE_COMMODITIES: 'explore_commodities',\n EXPLORE_STOCKS: 'explore_stocks',\n EXPLORE_FOREX: 'explore_forex',\n RECENT_ACTIVITY: 'recent_activity',\n },\n INTERACTION_TYPE: {\n TAP: 'tap',\n ZOOM: 'zoom',\n SLIDE: 'slide',\n SEARCH_CLICKED: 'search_clicked',\n ORDER_TYPE_VIEWED: 'order_type_viewed',\n ORDER_TYPE_SELECTED: 'order_type_selected',\n /** @deprecated Use LEVERAGE_CHANGED instead for clarity */\n SETTING_CHANGED: 'setting_changed',\n LEVERAGE_CHANGED: 'leverage_changed',\n TUTORIAL_STARTED: 'tutorial_started',\n TUTORIAL_COMPLETED: 'tutorial_completed',\n TUTORIAL_NAVIGATION: 'tutorial_navigation',\n CANDLE_PERIOD_VIEWED: 'candle_period_viewed',\n CANDLE_PERIOD_CHANGED: 'candle_period_changed',\n FAVORITE_TOGGLED: 'favorite_toggled',\n BUTTON_CLICKED: 'button_clicked',\n // Position management interactions\n CONTACT_SUPPORT: 'contact_support',\n STOP_LOSS_ONE_CLICK_PROMPT: 'stop_loss_one_click_prompt',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n INCREASE_EXPOSURE: 'increase_exposure',\n REDUCE_EXPOSURE: 'reduce_exposure',\n FLIP_POSITION: 'flip_position',\n // Hero card interactions\n DISPLAY_HERO_CARD: 'display_hero_card',\n SHARE_PNL_HERO_CARD: 'share_pnl_hero_card',\n // Chart interactions\n FULL_SCREEN_CHART: 'full_screen_chart',\n // Pay-with interactions\n PAYMENT_TOKEN_SELECTOR: 'payment_token_selector',\n PAYMENT_METHOD_CHANGED: 'payment_method_changed',\n // Deposit + order (pay-with token) cancel\n CANCEL_TRADE_WITH_TOKEN: 'cancel_trade_with_token',\n // Slippage interactions\n SLIPPAGE_CONFIG_OPENED: 'slippage_config_opened',\n SLIPPAGE_CONFIG_CHANGED: 'slippage_config_changed',\n SLIPPAGE_LIMIT_BLOCKED_ORDER: 'slippage_limit_blocked_order',\n // Auto Close TP/SL RoE sign toggle\n TPSL_ROE_SIGN_TOGGLED: 'tpsl_roe_sign_toggled',\n // Discovery analytics\n MARKET_LIST_FILTER: 'market_list_filter',\n // Sort / filter interactions (TAT-3142)\n SORT_APPLIED: 'sort_applied',\n FILTER_APPLIED: 'filter_applied',\n // Search interactions (TAT-3144, TAT-3202)\n SEARCH_RESULT_TAPPED: 'search_result_tapped',\n SEARCH_CHIP_TAPPED: 'search_chip_tapped',\n SEARCH_SIGNAL_TILE_TAPPED: 'search_signal_tile_tapped',\n // Pay-with token selector dismissed (TAT-3151)\n PAYMENT_TOKEN_SELECTOR_DISMISSED: 'payment_token_selector_dismissed',\n },\n MAX_SLIPPAGE_SOURCE: {\n DEFAULT: 'default',\n USER_CONFIGURED: 'user_configured',\n },\n ACTION_TYPE: {\n START_TRADING: 'start_trading',\n SKIP: 'skip',\n STOP_LOSS_SET: 'stop_loss_set',\n TAKE_PROFIT_SET: 'take_profit_set',\n ADL_LEARN_MORE: 'adl_learn_more',\n LEARN_MORE: 'learn_more',\n FAVORITE_MARKET: 'favorite_market',\n UNFAVORITE_MARKET: 'unfavorite_market',\n },\n NOTIFICATION_TYPE: {\n POSITION_LIQUIDATED: 'position_liquidated',\n TP_EXECUTED: 'tp_executed',\n SL_EXECUTED: 'sl_executed',\n LIMIT_ORDER_EXECUTED: 'limit_order_executed',\n },\n CLOSE_TYPE: {\n FULL: 'full',\n PARTIAL: 'partial',\n },\n NAVIGATION_METHOD: {\n SWIPE: 'swipe',\n CONTINUE_BUTTON: 'continue_button',\n PROGRESS_DOT: 'progress_dot',\n },\n STATUS: {\n VIEWED: 'viewed',\n STARTED: 'started',\n COMPLETED: 'completed',\n INITIATED: 'initiated',\n SUBMITTED: 'submitted',\n EXECUTED: 'executed',\n PARTIALLY_FILLED: 'partially_filled',\n FAILED: 'failed',\n SUCCESS: 'success',\n ALREADY_ENABLED: 'already_enabled',\n MIGRATION_REQUIRED: 'migration_required',\n // Emitted when a migration attempt is skipped because it is not applicable\n // (e.g. the user has no Hyperliquid account yet — nothing to migrate).\n // Distinguishes expected no-ops from real failures in dashboards.\n NOT_APPLICABLE: 'not_applicable',\n },\n SCREEN_TYPE: {\n MARKETS: 'markets',\n MARKET_LIST: 'market_list',\n ASSET_DETAILS: 'asset_details',\n TRADING: 'trading',\n /** @deprecated Use PERPS_HOME or WALLET_HOME_PERPS_TAB instead */\n HOMESCREEN: 'homescreen',\n PERPS_HOME: 'perps_home',\n WALLET_HOME_PERPS_TAB: 'wallet_home_perps_tab',\n POSITION_CLOSE: 'position_close',\n LEVERAGE: 'leverage',\n TUTORIAL: 'tutorial',\n WITHDRAWAL: 'withdrawal',\n TP_SL: 'tp_sl',\n CREATE_TPSL: 'create_tpsl',\n EDIT_TPSL: 'edit_tpsl',\n DEPOSIT_INPUT: 'deposit_input',\n DEPOSIT_REVIEW: 'deposit_review',\n CLOSE_ALL_POSITIONS: 'close_all_positions',\n CANCEL_ALL_ORDERS: 'cancel_all_orders',\n PNL_HERO_CARD: 'pnl_hero_card',\n ORDER_BOOK: 'order_book',\n ERROR: 'error',\n // Market list tab screen types\n MARKET_LIST_ALL: 'market_list_all',\n MARKET_LIST_CRYPTO: 'market_list_crypto',\n MARKET_LIST_STOCKS: 'market_list_stocks',\n // Additional screens\n FULL_SCREEN_CHART: 'full_screen_chart',\n ACTIVITY: 'activity',\n INCREASE_EXPOSURE: 'increase_exposure',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n GEO_BLOCK_NOTIF: 'geo_block_notif',\n COMPLIANCE_BLOCK_NOTIF: 'compliance_block_notif',\n // Deposit + order (pay-with token) cancel toast\n CANCEL_TRADE_WITH_TOKEN_TOAST: 'cancel_trade_with_token_toast',\n // Search result screen states (TAT-3144)\n SEARCH_RESULTS_SHOWN: 'search_results_shown',\n SEARCH_NO_RESULTS: 'search_no_results',\n },\n SETTING_TYPE: {\n LEVERAGE: 'leverage',\n SLIPPAGE: 'slippage',\n },\n SCREEN_NAME: {\n CONNECTION_ERROR: 'connection_error',\n PERPS_HERO_CARD: 'perps_hero_card',\n PERPS_ACTIVITY_HISTORY: 'perps_activity_history',\n PERPS_HOME: 'perps_home',\n PERPS_MARKET_DETAILS: 'perps_market_details',\n PERPS_ORDER: 'perps_order',\n },\n ACTION: {\n CONNECTION_RETRY: 'connection_retry',\n CONNECTION_GO_BACK: 'connection_go_back',\n SHARE: 'share',\n // Risk management actions\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n EDIT_TP_SL: 'edit_tp_sl',\n CREATE_TP_SL: 'create_tp_sl',\n // TP/SL specific actions for risk management events\n TP: 'tp',\n SL: 'sl',\n TPSL: 'tpsl',\n // Trade transaction actions - differentiates new position from adding to existing\n CREATE_POSITION: 'create_position',\n INCREASE_EXPOSURE: 'increase_exposure',\n // Flip position actions with direction specificity\n FLIP_LONG_TO_SHORT: 'flip_long_to_short',\n FLIP_SHORT_TO_LONG: 'flip_short_to_long',\n // Order funnel abandonment (TAT-3136)\n ABANDON_ORDER: 'abandon_order',\n },\n // Risk management sources\n RISK_MANAGEMENT_SOURCE: {\n TRADE_SCREEN: 'trade_screen',\n POSITION_SCREEN: 'position_screen',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n },\n PERPS_HISTORY_TABS: {\n TRADES: 'trades',\n ORDERS: 'orders',\n FUNDING: 'funding',\n DEPOSITS: 'deposits',\n },\n /** Value for mm_pay_token_selected when user pays with Perps balance (not a token) */\n MM_PAY_TOKEN: {\n PERPS_BALANCE: 'Perps Balance',\n },\n // A/B testing values\n AB_TEST: {\n // Test IDs\n BUTTON_COLOR_TEST: 'button_color_test',\n // Button color test variants\n CONTROL: 'control',\n MONOCHROME: 'monochrome',\n },\n BUTTON_CLICKED: {\n DEPOSIT: 'deposit',\n WITHDRAW: 'withdraw',\n PERPS_HOME: 'perps_home',\n TUTORIAL: 'tutorial',\n TOOLTIP: 'tooltip',\n MARKET_LIST: 'market_list',\n OPEN_POSITION: 'open_position',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO: 'crypto',\n STOCKS: 'stocks',\n COMMODITIES: 'commodities',\n FOREX: 'forex',\n NEW: 'new',\n GIVE_FEEDBACK: 'give_feedback',\n WATCHLIST: 'watchlist',\n TOP_MOVERS: 'top_movers',\n WHATS_HAPPENING: 'whats_happening',\n // Order + position management CTAs (TAT-3135, TAT-3141)\n PLACE_ORDER: 'place_order',\n CLOSE: 'close',\n REDUCE_EXPOSURE: 'reduce_exposure',\n },\n BUTTON_LOCATION: {\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN: 'perps_asset_screen',\n PERPS_TAB: 'perps_tab',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n MARKET_LIST: 'market_list',\n SCREEN: 'screen',\n TOOLTIP: 'tooltip',\n PERP_MARKET_DETAILS: 'perp_market_details',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n ASSET_DETAILS: 'asset_details',\n },\n} as const;\n"]}
1
+ {"version":3,"file":"eventNames.cjs","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Perps event property keys and values - matching dashboard requirements exactly\n * Event names are defined in MetaMetrics.events.ts as the single source of truth\n */\n\n/**\n * Event property keys - ensures consistent property naming\n */\nexport const PERPS_EVENT_PROPERTY = {\n // Common properties\n TIMESTAMP: 'timestamp',\n ASSET: 'asset',\n DIRECTION: 'direction',\n SOURCE: 'source',\n TAB_NAME: 'tab_name',\n LOCATION: 'location',\n\n // Trade properties\n LEVERAGE: 'leverage',\n LEVERAGE_USED: 'leverage_used',\n ORDER_SIZE: 'order_size',\n MARGIN_USED: 'margin_used',\n ORDER_TYPE: 'order_type', // lowercase per dashboard\n ORDER_TIMESTAMP: 'order_timestamp',\n LIMIT_PRICE: 'limit_price',\n FEES: 'fees',\n FEE: 'fee',\n METAMASK_FEE: 'metamask_fee',\n METAMASK_FEE_RATE: 'metamask_fee_rate',\n DISCOUNT_PERCENTAGE: 'discount_percentage',\n ESTIMATED_REWARDS: 'estimated_rewards',\n ASSET_PRICE: 'asset_price',\n COMPLETION_DURATION: 'completion_duration',\n\n // Position properties\n OPEN_POSITION: 'open_position',\n OPEN_ORDER: 'open_order',\n OPEN_POSITION_SIZE: 'open_position_size',\n UNREALIZED_PNL_DOLLAR: 'unrealized_dollar_pnl',\n UNREALIZED_PNL_PERCENT: 'unrealized_percent_pnl',\n CLOSE_VALUE: 'close_value',\n CLOSE_PERCENTAGE: 'close_percentage',\n CLOSE_TYPE: 'close_type',\n PERCENTAGE_CLOSED: 'percentage_closed',\n PNL_DOLLAR: 'dollar_pnl',\n PNL_PERCENT: 'percent_pnl',\n RECEIVED_AMOUNT: 'received_amount',\n\n // Order type variations\n CURRENT_ORDER_TYPE: 'current_order_type',\n SELECTED_ORDER_TYPE: 'selected_order_type',\n\n // Funding properties\n SOURCE_CHAIN: 'source_chain',\n SOURCE_ASSET: 'source_asset',\n SOURCE_AMOUNT: 'source_amount',\n DESTINATION_AMOUNT: 'destination_amount',\n NETWORK_FEE: 'network_fee',\n WITHDRAWAL_AMOUNT: 'withdrawal_amount',\n\n // Chart properties\n INTERACTION_TYPE: 'interaction_type',\n TIME_SERIE_SELECTED: 'time_serie_selected',\n CANDLE_PERIOD: 'candle_period',\n CHART_LIBRARY: 'chart_library',\n ASSET_TYPE: 'asset_type',\n\n // Risk management properties\n STOP_LOSS_PRICE: 'stop_loss_price',\n STOP_LOSS_PERCENT: 'stop_loss_percent',\n TAKE_PROFIT_PRICE: 'take_profit_price',\n TAKE_PROFIT_PERCENT: 'take_profit_percent',\n POSITION_SIZE: 'position_size',\n POSITION_AGE: 'position_age',\n LIQUIDATION_DISTANCE_OLD: 'liquidation_distance_old',\n LIQUIDATION_DISTANCE_NEW: 'liquidation_distance_new',\n\n // Notification properties\n NOTIFICATION_TYPE: 'notification_type',\n\n // Other properties\n INPUT_METHOD: 'input_method', // camelCase per requirements\n ACTION_TYPE: 'action_type',\n SETTING_TYPE: 'setting_type',\n FAILURE_REASON: 'failure_reason',\n WARNING_TYPE: 'warning_type',\n WARNING_MESSAGE: 'warning_message',\n ERROR_TYPE: 'error_type',\n ERROR_MESSAGE: 'error_message',\n AB_TESTS: 'ab_tests',\n COMPLETION_DURATION_TUTORIAL: 'completion_duration_tutorial',\n STEPS_VIEWED: 'steps_viewed',\n VIEW_OCCURRENCES: 'view_occurrences',\n AMOUNT_FILLED: 'amount_filled',\n REMAINING_AMOUNT: 'remaining_amount',\n NUMBER_POSITIONS_CLOSED: 'number_positions_closed',\n\n // Tutorial carousel navigation properties\n PREVIOUS_SCREEN: 'previous_screen',\n CURRENT_SCREEN: 'current_screen',\n SCREEN_POSITION: 'screen_position',\n TOTAL_SCREENS: 'total_screens',\n NAVIGATION_METHOD: 'navigation_method',\n STATUS: 'status',\n SCREEN_TYPE: 'screen_type',\n SCREEN_NAME: 'screen_name',\n ACTION: 'action',\n RETRY_ATTEMPTS: 'retry_attempts',\n SHOW_BACK_BUTTON: 'show_back_button',\n ATTEMPT_NUMBER: 'attempt_number',\n\n // PnL Hero Card properties\n IMAGE_SELECTED: 'image_selected',\n TAB_NUMBER: 'tab_number',\n\n // VIP rewards properties\n VIP_TIER: 'vip_tier',\n VIP_DISCOUNT: 'vip_discount',\n\n // A/B testing properties (flat per test for multiple concurrent tests)\n // Only include AB test properties when test is enabled (event not sent when disabled)\n // Button color test (TAT-1937)\n AB_TEST_BUTTON_COLOR: 'ab_test_button_color',\n // Future tests: add as AB_TEST_{TEST_NAME} (no _ENABLED property needed)\n\n // Entry point tracking properties\n BUTTON_CLICKED: 'button_clicked',\n BUTTON_LOCATION: 'button_location',\n\n // Balance properties\n HAS_PERP_BALANCE: 'has_perp_balance',\n\n // Service interruption banner\n OUTAGE_BANNER_SHOWN: 'outage_banner_shown',\n\n // Geo-blocking properties (TAT-2337: track geo-blocked withdrawals for monitoring)\n IS_GEO_BLOCKED: 'is_geo_blocked',\n\n // TP/SL differentiation properties\n HAS_TAKE_PROFIT: 'has_take_profit',\n HAS_STOP_LOSS: 'has_stop_loss',\n TAKE_PROFIT_PERCENTAGE: 'take_profit_percentage',\n STOP_LOSS_PERCENTAGE: 'stop_loss_percentage',\n // Auto Close TP/SL RoE sign toggle (`'+'` | `'-'`)\n ROE_SIGN: 'roe_sign',\n // Watchlist/Favorites properties\n FAVORITES_COUNT: 'favorites_count',\n\n // Scroll tracking properties\n SECTION_VIEWED: 'section_viewed',\n\n // Discovery analytics properties\n SOURCE_SECTION: 'source_section',\n RESULT_COUNT: 'result_count',\n SECTION_NAME: 'section_name',\n SECTION_INDEX: 'section_index',\n SECTIONS_DISPLAYED: 'sections_displayed',\n WATCHLIST_COUNT: 'watchlist_count',\n WATCHLIST_MARKETS: 'watchlist_markets',\n\n // Order value (USD $ value of the order)\n ORDER_VALUE: 'order_value',\n\n // Market category filter (for market list screen)\n MARKET_CATEGORY: 'market_category',\n\n // Pay with any token (PERPS_TRADE_TRANSACTION)\n TRADE_WITH_TOKEN: 'trade_with_token',\n MM_PAY_TOKEN_SELECTED: 'mm_pay_token_selected',\n MM_PAY_NETWORK_SELECTED: 'mm_pay_network_selected',\n\n // Pay-with UI (PERPS_UI_INTERACTION)\n INITIAL_PAYMENT_METHOD: 'initial_payment_method',\n NEW_PAYMENT_METHOD: 'new_payment_method',\n\n // Slippage properties\n MAX_SLIPPAGE_PCT: 'max_slippage_pct',\n MAX_SLIPPAGE_SOURCE: 'max_slippage_source',\n ESTIMATED_SLIPPAGE_PCT: 'estimated_slippage_pct',\n\n // Account setup / abstraction mode (PERPS_ACCOUNT_SETUP)\n ABSTRACTION_MODE: 'abstraction_mode',\n PREVIOUS_ABSTRACTION_MODE: 'previous_abstraction_mode',\n\n // Entry point / discovery attribution (TAT-3080)\n ENTRY_POINT: 'entry_point',\n DISCOVERY_SOURCE: 'discovery_source',\n PERP_DISCOVERY_SOURCE: 'perp_discovery_source',\n\n // UTM attribution context (TAT-3133, TAT-3140)\n UTM_SOURCE: 'utm_source',\n UTM_MEDIUM: 'utm_medium',\n UTM_CAMPAIGN: 'utm_campaign',\n UTM_CONTENT: 'utm_content',\n UTM_TERM: 'utm_term',\n\n // Watchlist membership at event time (TAT-3148)\n WATCHLISTED: 'watchlisted',\n\n // HyperLiquid protocol fee rate on trade + close (TAT-3149)\n HL_FEE_RATE: 'hl_fee_rate',\n\n // Bulk action correlation id for batch close/cancel (TAT-3150)\n BULK_ACTION_ID: 'bulk_action_id',\n\n // Client environment (Extension supplies value) (TAT-3335)\n ENVIRONMENT_TYPE: 'environment_type',\n\n // Order funnel / consideration + quote properties (TAT-3084)\n ORDER_CONTEXT: 'order_context',\n ORDER_SIZE_PERCENT: 'order_size_percent',\n LIMIT_PRICE_INPUT_TYPE: 'limit_price_input_type',\n LIMIT_PRICE_INPUT_PRESET: 'limit_price_input_preset',\n ORDER_HAS_TP: 'order_has_tp',\n ORDER_HAS_SL: 'order_has_sl',\n QUOTE_LATENCY_MS: 'quote_latency_ms',\n ERROR_REASON: 'error_reason',\n SAVED_ORDER: 'saved_order',\n DEFAULT_PAYMENT_TOKEN: 'default_payment_token',\n DEFAULT_SIZE_AMOUNT: 'default_size_amount',\n DEFAULT_LEVERAGE: 'default_leverage',\n DEFAULT_AUTO_CLOSE: 'default_auto_close',\n ORDER_EXECUTION_LATENCY_MS: 'order_execution_latency_ms',\n SCREEN_CONTEXT: 'screen_context',\n FROM_TOKEN: 'from_token',\n FROM_CHAIN: 'from_chain',\n TO_TOKEN: 'to_token',\n TO_CHAIN: 'to_chain',\n\n // Search / discovery query properties (TAT-3144, TAT-3202, TAT-3151)\n SEARCH_QUERY: 'search_query',\n RESULTS_COUNT: 'results_count',\n RESULT_RANK: 'result_rank',\n MODE: 'mode',\n CURRENT_TOKEN: 'current_token',\n\n // Sort / filter properties (TAT-3142)\n SORT_FIELD: 'sort_field',\n SORT_DIRECTION: 'sort_direction',\n FILTER_CATEGORY: 'filter_category',\n\n // Time-on-screen for abandon tracking (TAT-3136)\n TIME_ON_SCREEN_MS: 'time_on_screen_ms',\n} as const;\n\n/**\n * Property value constants\n */\nexport const PERPS_EVENT_VALUE = {\n DIRECTION: {\n LONG: 'long',\n SHORT: 'short',\n },\n ORDER_TYPE: {\n MARKET: 'market',\n LIMIT: 'limit',\n // Trigger placements are emitted verbatim by TradingService, so the enum has\n // to list them for dashboards keyed on `order_type`.\n STOP_MARKET: 'stop_market',\n STOP_LIMIT: 'stop_limit',\n TAKE_PROFIT_MARKET: 'take_profit_market',\n TAKE_PROFIT_LIMIT: 'take_profit_limit',\n },\n ORDER_TYPE_CAPITALIZED: {\n MARKET: 'market',\n LIMIT: 'limit',\n },\n CHART_LIBRARY: {\n LIGHTWEIGHT: 'lightweight',\n ADVANCED: 'advanced',\n },\n ASSET_TYPE: {\n SPOT: 'spot',\n PERP: 'perp',\n },\n INPUT_METHOD: {\n SLIDER: 'slider',\n KEYBOARD: 'keyboard',\n PRESET: 'preset',\n MANUAL: 'manual',\n PERCENTAGE_BUTTON: 'percentage_button',\n },\n SOURCE: {\n BANNER: 'banner',\n NOTIFICATION: 'notification',\n MAIN_ACTION_BUTTON: 'main_action_button',\n POSITION_TAB: 'position_tab',\n PERP_MARKETS: 'perp_markets',\n DEEPLINK: 'deeplink',\n TUTORIAL: 'tutorial',\n TRADE_SCREEN: 'trade_screen',\n HOMESCREEN_TAB: 'homescreen_tab',\n PERP_ASSET_SCREEN: 'perp_asset_screen',\n PERP_MARKET: 'perp_market',\n PERP_MARKET_SEARCH: 'perp_market_search',\n POSITION_SCREEN: 'position_screen',\n BOTTOM_NAV_BAR: 'bottom_nav_bar',\n TP_SL_VIEW: 'tp_sl_view',\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN_NO_FUNDS: 'perps_asset_screen_no_funds',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n HOME_SECTION: 'home_section',\n TOOLTIP: 'tooltip',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO_BUTTON: 'crypto_button',\n STOCKS_BUTTON: 'stocks_button',\n CLOSE_TOAST: 'close_toast',\n // Perps home section sources (for navigation tracking)\n PERPS_HOME_POSITION: 'perps_home_position',\n PERPS_HOME_ORDERS: 'perps_home_orders',\n PERPS_HOME_WATCHLIST: 'perps_home_watchlist',\n PERPS_HOME_EXPLORE_CRYPTO: 'perps_home_explore_crypto',\n PERPS_HOME_EXPLORE_STOCKS: 'perps_home_explore_stocks',\n PERPS_HOME_ACTIVITY: 'perps_home_activity',\n // Explore/Trending page source\n EXPLORE: 'explore',\n // Market list tab sources\n PERPS_MARKET_LIST_ALL: 'perps_market_list_all',\n PERPS_MARKET_LIST_CRYPTO: 'perps_market_list_crypto',\n PERPS_MARKET_LIST_STOCKS: 'perps_market_list_stocks',\n // Other navigation sources\n PERPS_TAB: 'perps_tab',\n WALLET_MAIN_ACTION_MENU: 'wallet_main_action_menu',\n PUSH_NOTIFICATION: 'push_notification',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n // Position management sources\n OPEN_POSITION: 'open_position',\n POSITION_CLOSE_TOAST: 'position_close_toast',\n TRADE_DETAILS: 'trade_details',\n // Geo-block trigger sources (for tracking what action was blocked)\n DEPOSIT_BUTTON: 'deposit_button',\n WITHDRAW_BUTTON: 'withdraw_button',\n TRADE_ACTION: 'trade_action',\n ADD_FUNDS_ACTION: 'add_funds_action',\n CANCEL_ORDER: 'cancel_order',\n ASSET_DETAIL_SCREEN: 'asset_detail_screen',\n MARKET_INSIGHTS: 'market_insights',\n // TAT-2449: Geo-block sources for close/modify actions\n CLOSE_POSITION_ACTION: 'close_position_action',\n MODIFY_POSITION_ACTION: 'modify_position_action',\n // Geo-block sources for order book actions\n ORDER_BOOK_LONG_BUTTON: 'order_book_long_button',\n ORDER_BOOK_SHORT_BUTTON: 'order_book_short_button',\n ORDER_BOOK_CLOSE_BUTTON: 'order_book_close_button',\n ORDER_BOOK_MODIFY_BUTTON: 'order_book_modify_button',\n // Geo-block sources for position management actions\n AUTO_CLOSE_ACTION: 'auto_close_action',\n ADJUST_MARGIN_ACTION: 'adjust_margin_action',\n STOP_LOSS_PROMPT_ADD_MARGIN: 'stop_loss_prompt_add_margin',\n STOP_LOSS_PROMPT_SET_SL: 'stop_loss_prompt_set_sl',\n // Geo-block sources for bulk actions\n CLOSE_ALL_POSITIONS_BUTTON: 'close_all_positions_button',\n CANCEL_ALL_ORDERS_BUTTON: 'cancel_all_orders_button',\n },\n WARNING_TYPE: {\n MINIMUM_DEPOSIT: 'minimum_deposit',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n },\n ERROR_TYPE: {\n NETWORK: 'network',\n APP_CRASH: 'app_crash',\n BACKEND: 'backend',\n VALIDATION: 'validation',\n WARNING: 'warning',\n },\n // Standardized error message keys for PERP_ERROR events\n // These should be used instead of localized strings for consistent analytics\n ERROR_MESSAGE_KEY: {\n ORDER_CHANGED_FROM_LIMIT_TO_MARKET: 'order_changed_from_limit_to_market',\n OPEN_CROSS_MARGIN_POSITION_DETECTED: 'open_cross_margin_position_detected',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n ORDER_FAILED: 'order_failed',\n GEO_RESTRICTION: 'geo_restriction',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n MAXIMUM_LEVERAGE_EXCEEDED: 'maximum_leverage_exceeded',\n PRICE_DEVIATION_TOO_HIGH: 'price_deviation_too_high',\n MARKET_AT_CAPACITY: 'market_at_capacity',\n NETWORK_ERROR: 'network_error',\n CONNECTION_FAILED: 'connection_failed',\n POSITION_UPDATE_FAILED: 'position_update_failed',\n TP_SL_UPDATE_FAILED: 'tp_sl_update_failed',\n MARGIN_UPDATE_FAILED: 'margin_update_failed',\n UNKNOWN: 'unknown',\n },\n SOURCE_SECTION: {\n // Home sections\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_GAINERS: 'top_gainers',\n TOP_LOSERS: 'top_losers',\n CRYPTO: 'crypto',\n COMMODITY: 'commodity',\n STOCK: 'stock',\n FOREX: 'forex',\n // Explore sections\n PERPS_MOVERS: 'perps_movers',\n PERPS_CRYPTO: 'perps_crypto',\n PERPS_STOCKS_COMMODITIES: 'perps_stocks_commodities',\n PERPS_MARKETS: 'perps_markets',\n // Market list sections\n ALL_MARKETS: 'all_markets',\n NEW: 'new',\n ACTIVE_SEARCH: 'active_search',\n },\n SECTION_NAME: {\n BALANCE: 'balance',\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_MOVERS: 'top_movers',\n EXPLORE_CRYPTO: 'explore_crypto',\n EXPLORE_COMMODITIES: 'explore_commodities',\n EXPLORE_STOCKS: 'explore_stocks',\n EXPLORE_FOREX: 'explore_forex',\n RECENT_ACTIVITY: 'recent_activity',\n },\n INTERACTION_TYPE: {\n TAP: 'tap',\n ZOOM: 'zoom',\n SLIDE: 'slide',\n SEARCH_CLICKED: 'search_clicked',\n ORDER_TYPE_VIEWED: 'order_type_viewed',\n ORDER_TYPE_SELECTED: 'order_type_selected',\n /** @deprecated Use LEVERAGE_CHANGED instead for clarity */\n SETTING_CHANGED: 'setting_changed',\n LEVERAGE_CHANGED: 'leverage_changed',\n TUTORIAL_STARTED: 'tutorial_started',\n TUTORIAL_COMPLETED: 'tutorial_completed',\n TUTORIAL_NAVIGATION: 'tutorial_navigation',\n CANDLE_PERIOD_VIEWED: 'candle_period_viewed',\n CANDLE_PERIOD_CHANGED: 'candle_period_changed',\n FAVORITE_TOGGLED: 'favorite_toggled',\n BUTTON_CLICKED: 'button_clicked',\n // Position management interactions\n CONTACT_SUPPORT: 'contact_support',\n STOP_LOSS_ONE_CLICK_PROMPT: 'stop_loss_one_click_prompt',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n INCREASE_EXPOSURE: 'increase_exposure',\n REDUCE_EXPOSURE: 'reduce_exposure',\n FLIP_POSITION: 'flip_position',\n // Hero card interactions\n DISPLAY_HERO_CARD: 'display_hero_card',\n SHARE_PNL_HERO_CARD: 'share_pnl_hero_card',\n // Chart interactions\n FULL_SCREEN_CHART: 'full_screen_chart',\n // Pay-with interactions\n PAYMENT_TOKEN_SELECTOR: 'payment_token_selector',\n PAYMENT_METHOD_CHANGED: 'payment_method_changed',\n // Deposit + order (pay-with token) cancel\n CANCEL_TRADE_WITH_TOKEN: 'cancel_trade_with_token',\n // Slippage interactions\n SLIPPAGE_CONFIG_OPENED: 'slippage_config_opened',\n SLIPPAGE_CONFIG_CHANGED: 'slippage_config_changed',\n SLIPPAGE_LIMIT_BLOCKED_ORDER: 'slippage_limit_blocked_order',\n // Auto Close TP/SL RoE sign toggle\n TPSL_ROE_SIGN_TOGGLED: 'tpsl_roe_sign_toggled',\n // Discovery analytics\n MARKET_LIST_FILTER: 'market_list_filter',\n // Sort / filter interactions (TAT-3142)\n SORT_APPLIED: 'sort_applied',\n FILTER_APPLIED: 'filter_applied',\n // Search interactions (TAT-3144, TAT-3202)\n SEARCH_RESULT_TAPPED: 'search_result_tapped',\n SEARCH_CHIP_TAPPED: 'search_chip_tapped',\n SEARCH_SIGNAL_TILE_TAPPED: 'search_signal_tile_tapped',\n // Pay-with token selector dismissed (TAT-3151)\n PAYMENT_TOKEN_SELECTOR_DISMISSED: 'payment_token_selector_dismissed',\n },\n MAX_SLIPPAGE_SOURCE: {\n DEFAULT: 'default',\n USER_CONFIGURED: 'user_configured',\n },\n ACTION_TYPE: {\n START_TRADING: 'start_trading',\n SKIP: 'skip',\n STOP_LOSS_SET: 'stop_loss_set',\n TAKE_PROFIT_SET: 'take_profit_set',\n ADL_LEARN_MORE: 'adl_learn_more',\n LEARN_MORE: 'learn_more',\n FAVORITE_MARKET: 'favorite_market',\n UNFAVORITE_MARKET: 'unfavorite_market',\n },\n NOTIFICATION_TYPE: {\n POSITION_LIQUIDATED: 'position_liquidated',\n TP_EXECUTED: 'tp_executed',\n SL_EXECUTED: 'sl_executed',\n LIMIT_ORDER_EXECUTED: 'limit_order_executed',\n },\n CLOSE_TYPE: {\n FULL: 'full',\n PARTIAL: 'partial',\n },\n NAVIGATION_METHOD: {\n SWIPE: 'swipe',\n CONTINUE_BUTTON: 'continue_button',\n PROGRESS_DOT: 'progress_dot',\n },\n STATUS: {\n VIEWED: 'viewed',\n STARTED: 'started',\n COMPLETED: 'completed',\n INITIATED: 'initiated',\n SUBMITTED: 'submitted',\n EXECUTED: 'executed',\n PARTIALLY_FILLED: 'partially_filled',\n FAILED: 'failed',\n SUCCESS: 'success',\n ALREADY_ENABLED: 'already_enabled',\n MIGRATION_REQUIRED: 'migration_required',\n // Emitted when a migration attempt is skipped because it is not applicable\n // (e.g. the user has no Hyperliquid account yet — nothing to migrate).\n // Distinguishes expected no-ops from real failures in dashboards.\n NOT_APPLICABLE: 'not_applicable',\n },\n SCREEN_TYPE: {\n MARKETS: 'markets',\n MARKET_LIST: 'market_list',\n ASSET_DETAILS: 'asset_details',\n TRADING: 'trading',\n /** @deprecated Use PERPS_HOME or WALLET_HOME_PERPS_TAB instead */\n HOMESCREEN: 'homescreen',\n PERPS_HOME: 'perps_home',\n WALLET_HOME_PERPS_TAB: 'wallet_home_perps_tab',\n POSITION_CLOSE: 'position_close',\n LEVERAGE: 'leverage',\n TUTORIAL: 'tutorial',\n WITHDRAWAL: 'withdrawal',\n TP_SL: 'tp_sl',\n CREATE_TPSL: 'create_tpsl',\n EDIT_TPSL: 'edit_tpsl',\n DEPOSIT_INPUT: 'deposit_input',\n DEPOSIT_REVIEW: 'deposit_review',\n CLOSE_ALL_POSITIONS: 'close_all_positions',\n CANCEL_ALL_ORDERS: 'cancel_all_orders',\n PNL_HERO_CARD: 'pnl_hero_card',\n ORDER_BOOK: 'order_book',\n ERROR: 'error',\n // Market list tab screen types\n MARKET_LIST_ALL: 'market_list_all',\n MARKET_LIST_CRYPTO: 'market_list_crypto',\n MARKET_LIST_STOCKS: 'market_list_stocks',\n // Additional screens\n FULL_SCREEN_CHART: 'full_screen_chart',\n ACTIVITY: 'activity',\n INCREASE_EXPOSURE: 'increase_exposure',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n GEO_BLOCK_NOTIF: 'geo_block_notif',\n COMPLIANCE_BLOCK_NOTIF: 'compliance_block_notif',\n // Deposit + order (pay-with token) cancel toast\n CANCEL_TRADE_WITH_TOKEN_TOAST: 'cancel_trade_with_token_toast',\n // Search result screen states (TAT-3144)\n SEARCH_RESULTS_SHOWN: 'search_results_shown',\n SEARCH_NO_RESULTS: 'search_no_results',\n },\n SETTING_TYPE: {\n LEVERAGE: 'leverage',\n SLIPPAGE: 'slippage',\n },\n SCREEN_NAME: {\n CONNECTION_ERROR: 'connection_error',\n PERPS_HERO_CARD: 'perps_hero_card',\n PERPS_ACTIVITY_HISTORY: 'perps_activity_history',\n PERPS_HOME: 'perps_home',\n PERPS_MARKET_DETAILS: 'perps_market_details',\n PERPS_ORDER: 'perps_order',\n },\n ACTION: {\n CONNECTION_RETRY: 'connection_retry',\n CONNECTION_GO_BACK: 'connection_go_back',\n SHARE: 'share',\n // Risk management actions\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n EDIT_TP_SL: 'edit_tp_sl',\n CREATE_TP_SL: 'create_tp_sl',\n // TP/SL specific actions for risk management events\n TP: 'tp',\n SL: 'sl',\n TPSL: 'tpsl',\n // Trade transaction actions - differentiates new position from adding to existing\n CREATE_POSITION: 'create_position',\n INCREASE_EXPOSURE: 'increase_exposure',\n // Flip position actions with direction specificity\n FLIP_LONG_TO_SHORT: 'flip_long_to_short',\n FLIP_SHORT_TO_LONG: 'flip_short_to_long',\n // Order funnel abandonment (TAT-3136)\n ABANDON_ORDER: 'abandon_order',\n },\n // Risk management sources\n RISK_MANAGEMENT_SOURCE: {\n TRADE_SCREEN: 'trade_screen',\n POSITION_SCREEN: 'position_screen',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n },\n PERPS_HISTORY_TABS: {\n TRADES: 'trades',\n ORDERS: 'orders',\n FUNDING: 'funding',\n DEPOSITS: 'deposits',\n },\n /** Value for mm_pay_token_selected when user pays with Perps balance (not a token) */\n MM_PAY_TOKEN: {\n PERPS_BALANCE: 'Perps Balance',\n },\n // A/B testing values\n AB_TEST: {\n // Test IDs\n BUTTON_COLOR_TEST: 'button_color_test',\n // Button color test variants\n CONTROL: 'control',\n MONOCHROME: 'monochrome',\n },\n BUTTON_CLICKED: {\n DEPOSIT: 'deposit',\n WITHDRAW: 'withdraw',\n PERPS_HOME: 'perps_home',\n TUTORIAL: 'tutorial',\n TOOLTIP: 'tooltip',\n MARKET_LIST: 'market_list',\n OPEN_POSITION: 'open_position',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO: 'crypto',\n STOCKS: 'stocks',\n COMMODITIES: 'commodities',\n FOREX: 'forex',\n NEW: 'new',\n GIVE_FEEDBACK: 'give_feedback',\n WATCHLIST: 'watchlist',\n TOP_MOVERS: 'top_movers',\n WHATS_HAPPENING: 'whats_happening',\n // Order + position management CTAs (TAT-3135, TAT-3141)\n PLACE_ORDER: 'place_order',\n CLOSE: 'close',\n REDUCE_EXPOSURE: 'reduce_exposure',\n },\n BUTTON_LOCATION: {\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN: 'perps_asset_screen',\n PERPS_TAB: 'perps_tab',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n MARKET_LIST: 'market_list',\n SCREEN: 'screen',\n TOOLTIP: 'tooltip',\n PERP_MARKET_DETAILS: 'perp_market_details',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n ASSET_DETAILS: 'asset_details',\n },\n} as const;\n"]}
@@ -176,6 +176,10 @@ export declare const PERPS_EVENT_VALUE: {
176
176
  readonly ORDER_TYPE: {
177
177
  readonly MARKET: "market";
178
178
  readonly LIMIT: "limit";
179
+ readonly STOP_MARKET: "stop_market";
180
+ readonly STOP_LIMIT: "stop_limit";
181
+ readonly TAKE_PROFIT_MARKET: "take_profit_market";
182
+ readonly TAKE_PROFIT_LIMIT: "take_profit_limit";
179
183
  };
180
184
  readonly ORDER_TYPE_CAPITALIZED: {
181
185
  readonly MARKET: "market";
@@ -1 +1 @@
1
- {"version":3,"file":"eventNames.d.cts","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2OvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoL1B,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiG3D,kEAAkE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkFpE,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD9E,CAAC"}
1
+ {"version":3,"file":"eventNames.d.cts","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2OvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0L1B,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiG3D,kEAAkE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkFpE,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD9E,CAAC"}
@@ -176,6 +176,10 @@ export declare const PERPS_EVENT_VALUE: {
176
176
  readonly ORDER_TYPE: {
177
177
  readonly MARKET: "market";
178
178
  readonly LIMIT: "limit";
179
+ readonly STOP_MARKET: "stop_market";
180
+ readonly STOP_LIMIT: "stop_limit";
181
+ readonly TAKE_PROFIT_MARKET: "take_profit_market";
182
+ readonly TAKE_PROFIT_LIMIT: "take_profit_limit";
179
183
  };
180
184
  readonly ORDER_TYPE_CAPITALIZED: {
181
185
  readonly MARKET: "market";
@@ -1 +1 @@
1
- {"version":3,"file":"eventNames.d.mts","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2OvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoL1B,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiG3D,kEAAkE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkFpE,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD9E,CAAC"}
1
+ {"version":3,"file":"eventNames.d.mts","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2OvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0L1B,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiG3D,kEAAkE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkFpE,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD9E,CAAC"}
@@ -217,6 +217,12 @@ export const PERPS_EVENT_VALUE = {
217
217
  ORDER_TYPE: {
218
218
  MARKET: 'market',
219
219
  LIMIT: 'limit',
220
+ // Trigger placements are emitted verbatim by TradingService, so the enum has
221
+ // to list them for dashboards keyed on `order_type`.
222
+ STOP_MARKET: 'stop_market',
223
+ STOP_LIMIT: 'stop_limit',
224
+ TAKE_PROFIT_MARKET: 'take_profit_market',
225
+ TAKE_PROFIT_LIMIT: 'take_profit_limit',
220
226
  },
221
227
  ORDER_TYPE_CAPITALIZED: {
222
228
  MARKET: 'market',
@@ -1 +1 @@
1
- {"version":3,"file":"eventNames.mjs","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Perps event property keys and values - matching dashboard requirements exactly\n * Event names are defined in MetaMetrics.events.ts as the single source of truth\n */\n\n/**\n * Event property keys - ensures consistent property naming\n */\nexport const PERPS_EVENT_PROPERTY = {\n // Common properties\n TIMESTAMP: 'timestamp',\n ASSET: 'asset',\n DIRECTION: 'direction',\n SOURCE: 'source',\n TAB_NAME: 'tab_name',\n LOCATION: 'location',\n\n // Trade properties\n LEVERAGE: 'leverage',\n LEVERAGE_USED: 'leverage_used',\n ORDER_SIZE: 'order_size',\n MARGIN_USED: 'margin_used',\n ORDER_TYPE: 'order_type', // lowercase per dashboard\n ORDER_TIMESTAMP: 'order_timestamp',\n LIMIT_PRICE: 'limit_price',\n FEES: 'fees',\n FEE: 'fee',\n METAMASK_FEE: 'metamask_fee',\n METAMASK_FEE_RATE: 'metamask_fee_rate',\n DISCOUNT_PERCENTAGE: 'discount_percentage',\n ESTIMATED_REWARDS: 'estimated_rewards',\n ASSET_PRICE: 'asset_price',\n COMPLETION_DURATION: 'completion_duration',\n\n // Position properties\n OPEN_POSITION: 'open_position',\n OPEN_ORDER: 'open_order',\n OPEN_POSITION_SIZE: 'open_position_size',\n UNREALIZED_PNL_DOLLAR: 'unrealized_dollar_pnl',\n UNREALIZED_PNL_PERCENT: 'unrealized_percent_pnl',\n CLOSE_VALUE: 'close_value',\n CLOSE_PERCENTAGE: 'close_percentage',\n CLOSE_TYPE: 'close_type',\n PERCENTAGE_CLOSED: 'percentage_closed',\n PNL_DOLLAR: 'dollar_pnl',\n PNL_PERCENT: 'percent_pnl',\n RECEIVED_AMOUNT: 'received_amount',\n\n // Order type variations\n CURRENT_ORDER_TYPE: 'current_order_type',\n SELECTED_ORDER_TYPE: 'selected_order_type',\n\n // Funding properties\n SOURCE_CHAIN: 'source_chain',\n SOURCE_ASSET: 'source_asset',\n SOURCE_AMOUNT: 'source_amount',\n DESTINATION_AMOUNT: 'destination_amount',\n NETWORK_FEE: 'network_fee',\n WITHDRAWAL_AMOUNT: 'withdrawal_amount',\n\n // Chart properties\n INTERACTION_TYPE: 'interaction_type',\n TIME_SERIE_SELECTED: 'time_serie_selected',\n CANDLE_PERIOD: 'candle_period',\n CHART_LIBRARY: 'chart_library',\n ASSET_TYPE: 'asset_type',\n\n // Risk management properties\n STOP_LOSS_PRICE: 'stop_loss_price',\n STOP_LOSS_PERCENT: 'stop_loss_percent',\n TAKE_PROFIT_PRICE: 'take_profit_price',\n TAKE_PROFIT_PERCENT: 'take_profit_percent',\n POSITION_SIZE: 'position_size',\n POSITION_AGE: 'position_age',\n LIQUIDATION_DISTANCE_OLD: 'liquidation_distance_old',\n LIQUIDATION_DISTANCE_NEW: 'liquidation_distance_new',\n\n // Notification properties\n NOTIFICATION_TYPE: 'notification_type',\n\n // Other properties\n INPUT_METHOD: 'input_method', // camelCase per requirements\n ACTION_TYPE: 'action_type',\n SETTING_TYPE: 'setting_type',\n FAILURE_REASON: 'failure_reason',\n WARNING_TYPE: 'warning_type',\n WARNING_MESSAGE: 'warning_message',\n ERROR_TYPE: 'error_type',\n ERROR_MESSAGE: 'error_message',\n AB_TESTS: 'ab_tests',\n COMPLETION_DURATION_TUTORIAL: 'completion_duration_tutorial',\n STEPS_VIEWED: 'steps_viewed',\n VIEW_OCCURRENCES: 'view_occurrences',\n AMOUNT_FILLED: 'amount_filled',\n REMAINING_AMOUNT: 'remaining_amount',\n NUMBER_POSITIONS_CLOSED: 'number_positions_closed',\n\n // Tutorial carousel navigation properties\n PREVIOUS_SCREEN: 'previous_screen',\n CURRENT_SCREEN: 'current_screen',\n SCREEN_POSITION: 'screen_position',\n TOTAL_SCREENS: 'total_screens',\n NAVIGATION_METHOD: 'navigation_method',\n STATUS: 'status',\n SCREEN_TYPE: 'screen_type',\n SCREEN_NAME: 'screen_name',\n ACTION: 'action',\n RETRY_ATTEMPTS: 'retry_attempts',\n SHOW_BACK_BUTTON: 'show_back_button',\n ATTEMPT_NUMBER: 'attempt_number',\n\n // PnL Hero Card properties\n IMAGE_SELECTED: 'image_selected',\n TAB_NUMBER: 'tab_number',\n\n // VIP rewards properties\n VIP_TIER: 'vip_tier',\n VIP_DISCOUNT: 'vip_discount',\n\n // A/B testing properties (flat per test for multiple concurrent tests)\n // Only include AB test properties when test is enabled (event not sent when disabled)\n // Button color test (TAT-1937)\n AB_TEST_BUTTON_COLOR: 'ab_test_button_color',\n // Future tests: add as AB_TEST_{TEST_NAME} (no _ENABLED property needed)\n\n // Entry point tracking properties\n BUTTON_CLICKED: 'button_clicked',\n BUTTON_LOCATION: 'button_location',\n\n // Balance properties\n HAS_PERP_BALANCE: 'has_perp_balance',\n\n // Service interruption banner\n OUTAGE_BANNER_SHOWN: 'outage_banner_shown',\n\n // Geo-blocking properties (TAT-2337: track geo-blocked withdrawals for monitoring)\n IS_GEO_BLOCKED: 'is_geo_blocked',\n\n // TP/SL differentiation properties\n HAS_TAKE_PROFIT: 'has_take_profit',\n HAS_STOP_LOSS: 'has_stop_loss',\n TAKE_PROFIT_PERCENTAGE: 'take_profit_percentage',\n STOP_LOSS_PERCENTAGE: 'stop_loss_percentage',\n // Auto Close TP/SL RoE sign toggle (`'+'` | `'-'`)\n ROE_SIGN: 'roe_sign',\n // Watchlist/Favorites properties\n FAVORITES_COUNT: 'favorites_count',\n\n // Scroll tracking properties\n SECTION_VIEWED: 'section_viewed',\n\n // Discovery analytics properties\n SOURCE_SECTION: 'source_section',\n RESULT_COUNT: 'result_count',\n SECTION_NAME: 'section_name',\n SECTION_INDEX: 'section_index',\n SECTIONS_DISPLAYED: 'sections_displayed',\n WATCHLIST_COUNT: 'watchlist_count',\n WATCHLIST_MARKETS: 'watchlist_markets',\n\n // Order value (USD $ value of the order)\n ORDER_VALUE: 'order_value',\n\n // Market category filter (for market list screen)\n MARKET_CATEGORY: 'market_category',\n\n // Pay with any token (PERPS_TRADE_TRANSACTION)\n TRADE_WITH_TOKEN: 'trade_with_token',\n MM_PAY_TOKEN_SELECTED: 'mm_pay_token_selected',\n MM_PAY_NETWORK_SELECTED: 'mm_pay_network_selected',\n\n // Pay-with UI (PERPS_UI_INTERACTION)\n INITIAL_PAYMENT_METHOD: 'initial_payment_method',\n NEW_PAYMENT_METHOD: 'new_payment_method',\n\n // Slippage properties\n MAX_SLIPPAGE_PCT: 'max_slippage_pct',\n MAX_SLIPPAGE_SOURCE: 'max_slippage_source',\n ESTIMATED_SLIPPAGE_PCT: 'estimated_slippage_pct',\n\n // Account setup / abstraction mode (PERPS_ACCOUNT_SETUP)\n ABSTRACTION_MODE: 'abstraction_mode',\n PREVIOUS_ABSTRACTION_MODE: 'previous_abstraction_mode',\n\n // Entry point / discovery attribution (TAT-3080)\n ENTRY_POINT: 'entry_point',\n DISCOVERY_SOURCE: 'discovery_source',\n PERP_DISCOVERY_SOURCE: 'perp_discovery_source',\n\n // UTM attribution context (TAT-3133, TAT-3140)\n UTM_SOURCE: 'utm_source',\n UTM_MEDIUM: 'utm_medium',\n UTM_CAMPAIGN: 'utm_campaign',\n UTM_CONTENT: 'utm_content',\n UTM_TERM: 'utm_term',\n\n // Watchlist membership at event time (TAT-3148)\n WATCHLISTED: 'watchlisted',\n\n // HyperLiquid protocol fee rate on trade + close (TAT-3149)\n HL_FEE_RATE: 'hl_fee_rate',\n\n // Bulk action correlation id for batch close/cancel (TAT-3150)\n BULK_ACTION_ID: 'bulk_action_id',\n\n // Client environment (Extension supplies value) (TAT-3335)\n ENVIRONMENT_TYPE: 'environment_type',\n\n // Order funnel / consideration + quote properties (TAT-3084)\n ORDER_CONTEXT: 'order_context',\n ORDER_SIZE_PERCENT: 'order_size_percent',\n LIMIT_PRICE_INPUT_TYPE: 'limit_price_input_type',\n LIMIT_PRICE_INPUT_PRESET: 'limit_price_input_preset',\n ORDER_HAS_TP: 'order_has_tp',\n ORDER_HAS_SL: 'order_has_sl',\n QUOTE_LATENCY_MS: 'quote_latency_ms',\n ERROR_REASON: 'error_reason',\n SAVED_ORDER: 'saved_order',\n DEFAULT_PAYMENT_TOKEN: 'default_payment_token',\n DEFAULT_SIZE_AMOUNT: 'default_size_amount',\n DEFAULT_LEVERAGE: 'default_leverage',\n DEFAULT_AUTO_CLOSE: 'default_auto_close',\n ORDER_EXECUTION_LATENCY_MS: 'order_execution_latency_ms',\n SCREEN_CONTEXT: 'screen_context',\n FROM_TOKEN: 'from_token',\n FROM_CHAIN: 'from_chain',\n TO_TOKEN: 'to_token',\n TO_CHAIN: 'to_chain',\n\n // Search / discovery query properties (TAT-3144, TAT-3202, TAT-3151)\n SEARCH_QUERY: 'search_query',\n RESULTS_COUNT: 'results_count',\n RESULT_RANK: 'result_rank',\n MODE: 'mode',\n CURRENT_TOKEN: 'current_token',\n\n // Sort / filter properties (TAT-3142)\n SORT_FIELD: 'sort_field',\n SORT_DIRECTION: 'sort_direction',\n FILTER_CATEGORY: 'filter_category',\n\n // Time-on-screen for abandon tracking (TAT-3136)\n TIME_ON_SCREEN_MS: 'time_on_screen_ms',\n} as const;\n\n/**\n * Property value constants\n */\nexport const PERPS_EVENT_VALUE = {\n DIRECTION: {\n LONG: 'long',\n SHORT: 'short',\n },\n ORDER_TYPE: {\n MARKET: 'market',\n LIMIT: 'limit',\n },\n ORDER_TYPE_CAPITALIZED: {\n MARKET: 'market',\n LIMIT: 'limit',\n },\n CHART_LIBRARY: {\n LIGHTWEIGHT: 'lightweight',\n ADVANCED: 'advanced',\n },\n ASSET_TYPE: {\n SPOT: 'spot',\n PERP: 'perp',\n },\n INPUT_METHOD: {\n SLIDER: 'slider',\n KEYBOARD: 'keyboard',\n PRESET: 'preset',\n MANUAL: 'manual',\n PERCENTAGE_BUTTON: 'percentage_button',\n },\n SOURCE: {\n BANNER: 'banner',\n NOTIFICATION: 'notification',\n MAIN_ACTION_BUTTON: 'main_action_button',\n POSITION_TAB: 'position_tab',\n PERP_MARKETS: 'perp_markets',\n DEEPLINK: 'deeplink',\n TUTORIAL: 'tutorial',\n TRADE_SCREEN: 'trade_screen',\n HOMESCREEN_TAB: 'homescreen_tab',\n PERP_ASSET_SCREEN: 'perp_asset_screen',\n PERP_MARKET: 'perp_market',\n PERP_MARKET_SEARCH: 'perp_market_search',\n POSITION_SCREEN: 'position_screen',\n BOTTOM_NAV_BAR: 'bottom_nav_bar',\n TP_SL_VIEW: 'tp_sl_view',\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN_NO_FUNDS: 'perps_asset_screen_no_funds',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n HOME_SECTION: 'home_section',\n TOOLTIP: 'tooltip',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO_BUTTON: 'crypto_button',\n STOCKS_BUTTON: 'stocks_button',\n CLOSE_TOAST: 'close_toast',\n // Perps home section sources (for navigation tracking)\n PERPS_HOME_POSITION: 'perps_home_position',\n PERPS_HOME_ORDERS: 'perps_home_orders',\n PERPS_HOME_WATCHLIST: 'perps_home_watchlist',\n PERPS_HOME_EXPLORE_CRYPTO: 'perps_home_explore_crypto',\n PERPS_HOME_EXPLORE_STOCKS: 'perps_home_explore_stocks',\n PERPS_HOME_ACTIVITY: 'perps_home_activity',\n // Explore/Trending page source\n EXPLORE: 'explore',\n // Market list tab sources\n PERPS_MARKET_LIST_ALL: 'perps_market_list_all',\n PERPS_MARKET_LIST_CRYPTO: 'perps_market_list_crypto',\n PERPS_MARKET_LIST_STOCKS: 'perps_market_list_stocks',\n // Other navigation sources\n PERPS_TAB: 'perps_tab',\n WALLET_MAIN_ACTION_MENU: 'wallet_main_action_menu',\n PUSH_NOTIFICATION: 'push_notification',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n // Position management sources\n OPEN_POSITION: 'open_position',\n POSITION_CLOSE_TOAST: 'position_close_toast',\n TRADE_DETAILS: 'trade_details',\n // Geo-block trigger sources (for tracking what action was blocked)\n DEPOSIT_BUTTON: 'deposit_button',\n WITHDRAW_BUTTON: 'withdraw_button',\n TRADE_ACTION: 'trade_action',\n ADD_FUNDS_ACTION: 'add_funds_action',\n CANCEL_ORDER: 'cancel_order',\n ASSET_DETAIL_SCREEN: 'asset_detail_screen',\n MARKET_INSIGHTS: 'market_insights',\n // TAT-2449: Geo-block sources for close/modify actions\n CLOSE_POSITION_ACTION: 'close_position_action',\n MODIFY_POSITION_ACTION: 'modify_position_action',\n // Geo-block sources for order book actions\n ORDER_BOOK_LONG_BUTTON: 'order_book_long_button',\n ORDER_BOOK_SHORT_BUTTON: 'order_book_short_button',\n ORDER_BOOK_CLOSE_BUTTON: 'order_book_close_button',\n ORDER_BOOK_MODIFY_BUTTON: 'order_book_modify_button',\n // Geo-block sources for position management actions\n AUTO_CLOSE_ACTION: 'auto_close_action',\n ADJUST_MARGIN_ACTION: 'adjust_margin_action',\n STOP_LOSS_PROMPT_ADD_MARGIN: 'stop_loss_prompt_add_margin',\n STOP_LOSS_PROMPT_SET_SL: 'stop_loss_prompt_set_sl',\n // Geo-block sources for bulk actions\n CLOSE_ALL_POSITIONS_BUTTON: 'close_all_positions_button',\n CANCEL_ALL_ORDERS_BUTTON: 'cancel_all_orders_button',\n },\n WARNING_TYPE: {\n MINIMUM_DEPOSIT: 'minimum_deposit',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n },\n ERROR_TYPE: {\n NETWORK: 'network',\n APP_CRASH: 'app_crash',\n BACKEND: 'backend',\n VALIDATION: 'validation',\n WARNING: 'warning',\n },\n // Standardized error message keys for PERP_ERROR events\n // These should be used instead of localized strings for consistent analytics\n ERROR_MESSAGE_KEY: {\n ORDER_CHANGED_FROM_LIMIT_TO_MARKET: 'order_changed_from_limit_to_market',\n OPEN_CROSS_MARGIN_POSITION_DETECTED: 'open_cross_margin_position_detected',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n ORDER_FAILED: 'order_failed',\n GEO_RESTRICTION: 'geo_restriction',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n MAXIMUM_LEVERAGE_EXCEEDED: 'maximum_leverage_exceeded',\n PRICE_DEVIATION_TOO_HIGH: 'price_deviation_too_high',\n MARKET_AT_CAPACITY: 'market_at_capacity',\n NETWORK_ERROR: 'network_error',\n CONNECTION_FAILED: 'connection_failed',\n POSITION_UPDATE_FAILED: 'position_update_failed',\n TP_SL_UPDATE_FAILED: 'tp_sl_update_failed',\n MARGIN_UPDATE_FAILED: 'margin_update_failed',\n UNKNOWN: 'unknown',\n },\n SOURCE_SECTION: {\n // Home sections\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_GAINERS: 'top_gainers',\n TOP_LOSERS: 'top_losers',\n CRYPTO: 'crypto',\n COMMODITY: 'commodity',\n STOCK: 'stock',\n FOREX: 'forex',\n // Explore sections\n PERPS_MOVERS: 'perps_movers',\n PERPS_CRYPTO: 'perps_crypto',\n PERPS_STOCKS_COMMODITIES: 'perps_stocks_commodities',\n PERPS_MARKETS: 'perps_markets',\n // Market list sections\n ALL_MARKETS: 'all_markets',\n NEW: 'new',\n ACTIVE_SEARCH: 'active_search',\n },\n SECTION_NAME: {\n BALANCE: 'balance',\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_MOVERS: 'top_movers',\n EXPLORE_CRYPTO: 'explore_crypto',\n EXPLORE_COMMODITIES: 'explore_commodities',\n EXPLORE_STOCKS: 'explore_stocks',\n EXPLORE_FOREX: 'explore_forex',\n RECENT_ACTIVITY: 'recent_activity',\n },\n INTERACTION_TYPE: {\n TAP: 'tap',\n ZOOM: 'zoom',\n SLIDE: 'slide',\n SEARCH_CLICKED: 'search_clicked',\n ORDER_TYPE_VIEWED: 'order_type_viewed',\n ORDER_TYPE_SELECTED: 'order_type_selected',\n /** @deprecated Use LEVERAGE_CHANGED instead for clarity */\n SETTING_CHANGED: 'setting_changed',\n LEVERAGE_CHANGED: 'leverage_changed',\n TUTORIAL_STARTED: 'tutorial_started',\n TUTORIAL_COMPLETED: 'tutorial_completed',\n TUTORIAL_NAVIGATION: 'tutorial_navigation',\n CANDLE_PERIOD_VIEWED: 'candle_period_viewed',\n CANDLE_PERIOD_CHANGED: 'candle_period_changed',\n FAVORITE_TOGGLED: 'favorite_toggled',\n BUTTON_CLICKED: 'button_clicked',\n // Position management interactions\n CONTACT_SUPPORT: 'contact_support',\n STOP_LOSS_ONE_CLICK_PROMPT: 'stop_loss_one_click_prompt',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n INCREASE_EXPOSURE: 'increase_exposure',\n REDUCE_EXPOSURE: 'reduce_exposure',\n FLIP_POSITION: 'flip_position',\n // Hero card interactions\n DISPLAY_HERO_CARD: 'display_hero_card',\n SHARE_PNL_HERO_CARD: 'share_pnl_hero_card',\n // Chart interactions\n FULL_SCREEN_CHART: 'full_screen_chart',\n // Pay-with interactions\n PAYMENT_TOKEN_SELECTOR: 'payment_token_selector',\n PAYMENT_METHOD_CHANGED: 'payment_method_changed',\n // Deposit + order (pay-with token) cancel\n CANCEL_TRADE_WITH_TOKEN: 'cancel_trade_with_token',\n // Slippage interactions\n SLIPPAGE_CONFIG_OPENED: 'slippage_config_opened',\n SLIPPAGE_CONFIG_CHANGED: 'slippage_config_changed',\n SLIPPAGE_LIMIT_BLOCKED_ORDER: 'slippage_limit_blocked_order',\n // Auto Close TP/SL RoE sign toggle\n TPSL_ROE_SIGN_TOGGLED: 'tpsl_roe_sign_toggled',\n // Discovery analytics\n MARKET_LIST_FILTER: 'market_list_filter',\n // Sort / filter interactions (TAT-3142)\n SORT_APPLIED: 'sort_applied',\n FILTER_APPLIED: 'filter_applied',\n // Search interactions (TAT-3144, TAT-3202)\n SEARCH_RESULT_TAPPED: 'search_result_tapped',\n SEARCH_CHIP_TAPPED: 'search_chip_tapped',\n SEARCH_SIGNAL_TILE_TAPPED: 'search_signal_tile_tapped',\n // Pay-with token selector dismissed (TAT-3151)\n PAYMENT_TOKEN_SELECTOR_DISMISSED: 'payment_token_selector_dismissed',\n },\n MAX_SLIPPAGE_SOURCE: {\n DEFAULT: 'default',\n USER_CONFIGURED: 'user_configured',\n },\n ACTION_TYPE: {\n START_TRADING: 'start_trading',\n SKIP: 'skip',\n STOP_LOSS_SET: 'stop_loss_set',\n TAKE_PROFIT_SET: 'take_profit_set',\n ADL_LEARN_MORE: 'adl_learn_more',\n LEARN_MORE: 'learn_more',\n FAVORITE_MARKET: 'favorite_market',\n UNFAVORITE_MARKET: 'unfavorite_market',\n },\n NOTIFICATION_TYPE: {\n POSITION_LIQUIDATED: 'position_liquidated',\n TP_EXECUTED: 'tp_executed',\n SL_EXECUTED: 'sl_executed',\n LIMIT_ORDER_EXECUTED: 'limit_order_executed',\n },\n CLOSE_TYPE: {\n FULL: 'full',\n PARTIAL: 'partial',\n },\n NAVIGATION_METHOD: {\n SWIPE: 'swipe',\n CONTINUE_BUTTON: 'continue_button',\n PROGRESS_DOT: 'progress_dot',\n },\n STATUS: {\n VIEWED: 'viewed',\n STARTED: 'started',\n COMPLETED: 'completed',\n INITIATED: 'initiated',\n SUBMITTED: 'submitted',\n EXECUTED: 'executed',\n PARTIALLY_FILLED: 'partially_filled',\n FAILED: 'failed',\n SUCCESS: 'success',\n ALREADY_ENABLED: 'already_enabled',\n MIGRATION_REQUIRED: 'migration_required',\n // Emitted when a migration attempt is skipped because it is not applicable\n // (e.g. the user has no Hyperliquid account yet — nothing to migrate).\n // Distinguishes expected no-ops from real failures in dashboards.\n NOT_APPLICABLE: 'not_applicable',\n },\n SCREEN_TYPE: {\n MARKETS: 'markets',\n MARKET_LIST: 'market_list',\n ASSET_DETAILS: 'asset_details',\n TRADING: 'trading',\n /** @deprecated Use PERPS_HOME or WALLET_HOME_PERPS_TAB instead */\n HOMESCREEN: 'homescreen',\n PERPS_HOME: 'perps_home',\n WALLET_HOME_PERPS_TAB: 'wallet_home_perps_tab',\n POSITION_CLOSE: 'position_close',\n LEVERAGE: 'leverage',\n TUTORIAL: 'tutorial',\n WITHDRAWAL: 'withdrawal',\n TP_SL: 'tp_sl',\n CREATE_TPSL: 'create_tpsl',\n EDIT_TPSL: 'edit_tpsl',\n DEPOSIT_INPUT: 'deposit_input',\n DEPOSIT_REVIEW: 'deposit_review',\n CLOSE_ALL_POSITIONS: 'close_all_positions',\n CANCEL_ALL_ORDERS: 'cancel_all_orders',\n PNL_HERO_CARD: 'pnl_hero_card',\n ORDER_BOOK: 'order_book',\n ERROR: 'error',\n // Market list tab screen types\n MARKET_LIST_ALL: 'market_list_all',\n MARKET_LIST_CRYPTO: 'market_list_crypto',\n MARKET_LIST_STOCKS: 'market_list_stocks',\n // Additional screens\n FULL_SCREEN_CHART: 'full_screen_chart',\n ACTIVITY: 'activity',\n INCREASE_EXPOSURE: 'increase_exposure',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n GEO_BLOCK_NOTIF: 'geo_block_notif',\n COMPLIANCE_BLOCK_NOTIF: 'compliance_block_notif',\n // Deposit + order (pay-with token) cancel toast\n CANCEL_TRADE_WITH_TOKEN_TOAST: 'cancel_trade_with_token_toast',\n // Search result screen states (TAT-3144)\n SEARCH_RESULTS_SHOWN: 'search_results_shown',\n SEARCH_NO_RESULTS: 'search_no_results',\n },\n SETTING_TYPE: {\n LEVERAGE: 'leverage',\n SLIPPAGE: 'slippage',\n },\n SCREEN_NAME: {\n CONNECTION_ERROR: 'connection_error',\n PERPS_HERO_CARD: 'perps_hero_card',\n PERPS_ACTIVITY_HISTORY: 'perps_activity_history',\n PERPS_HOME: 'perps_home',\n PERPS_MARKET_DETAILS: 'perps_market_details',\n PERPS_ORDER: 'perps_order',\n },\n ACTION: {\n CONNECTION_RETRY: 'connection_retry',\n CONNECTION_GO_BACK: 'connection_go_back',\n SHARE: 'share',\n // Risk management actions\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n EDIT_TP_SL: 'edit_tp_sl',\n CREATE_TP_SL: 'create_tp_sl',\n // TP/SL specific actions for risk management events\n TP: 'tp',\n SL: 'sl',\n TPSL: 'tpsl',\n // Trade transaction actions - differentiates new position from adding to existing\n CREATE_POSITION: 'create_position',\n INCREASE_EXPOSURE: 'increase_exposure',\n // Flip position actions with direction specificity\n FLIP_LONG_TO_SHORT: 'flip_long_to_short',\n FLIP_SHORT_TO_LONG: 'flip_short_to_long',\n // Order funnel abandonment (TAT-3136)\n ABANDON_ORDER: 'abandon_order',\n },\n // Risk management sources\n RISK_MANAGEMENT_SOURCE: {\n TRADE_SCREEN: 'trade_screen',\n POSITION_SCREEN: 'position_screen',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n },\n PERPS_HISTORY_TABS: {\n TRADES: 'trades',\n ORDERS: 'orders',\n FUNDING: 'funding',\n DEPOSITS: 'deposits',\n },\n /** Value for mm_pay_token_selected when user pays with Perps balance (not a token) */\n MM_PAY_TOKEN: {\n PERPS_BALANCE: 'Perps Balance',\n },\n // A/B testing values\n AB_TEST: {\n // Test IDs\n BUTTON_COLOR_TEST: 'button_color_test',\n // Button color test variants\n CONTROL: 'control',\n MONOCHROME: 'monochrome',\n },\n BUTTON_CLICKED: {\n DEPOSIT: 'deposit',\n WITHDRAW: 'withdraw',\n PERPS_HOME: 'perps_home',\n TUTORIAL: 'tutorial',\n TOOLTIP: 'tooltip',\n MARKET_LIST: 'market_list',\n OPEN_POSITION: 'open_position',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO: 'crypto',\n STOCKS: 'stocks',\n COMMODITIES: 'commodities',\n FOREX: 'forex',\n NEW: 'new',\n GIVE_FEEDBACK: 'give_feedback',\n WATCHLIST: 'watchlist',\n TOP_MOVERS: 'top_movers',\n WHATS_HAPPENING: 'whats_happening',\n // Order + position management CTAs (TAT-3135, TAT-3141)\n PLACE_ORDER: 'place_order',\n CLOSE: 'close',\n REDUCE_EXPOSURE: 'reduce_exposure',\n },\n BUTTON_LOCATION: {\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN: 'perps_asset_screen',\n PERPS_TAB: 'perps_tab',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n MARKET_LIST: 'market_list',\n SCREEN: 'screen',\n TOOLTIP: 'tooltip',\n PERP_MARKET_DETAILS: 'perp_market_details',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n ASSET_DETAILS: 'asset_details',\n },\n} as const;\n"]}
1
+ {"version":3,"file":"eventNames.mjs","sourceRoot":"","sources":["../../src/constants/eventNames.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Perps event property keys and values - matching dashboard requirements exactly\n * Event names are defined in MetaMetrics.events.ts as the single source of truth\n */\n\n/**\n * Event property keys - ensures consistent property naming\n */\nexport const PERPS_EVENT_PROPERTY = {\n // Common properties\n TIMESTAMP: 'timestamp',\n ASSET: 'asset',\n DIRECTION: 'direction',\n SOURCE: 'source',\n TAB_NAME: 'tab_name',\n LOCATION: 'location',\n\n // Trade properties\n LEVERAGE: 'leverage',\n LEVERAGE_USED: 'leverage_used',\n ORDER_SIZE: 'order_size',\n MARGIN_USED: 'margin_used',\n ORDER_TYPE: 'order_type', // lowercase per dashboard\n ORDER_TIMESTAMP: 'order_timestamp',\n LIMIT_PRICE: 'limit_price',\n FEES: 'fees',\n FEE: 'fee',\n METAMASK_FEE: 'metamask_fee',\n METAMASK_FEE_RATE: 'metamask_fee_rate',\n DISCOUNT_PERCENTAGE: 'discount_percentage',\n ESTIMATED_REWARDS: 'estimated_rewards',\n ASSET_PRICE: 'asset_price',\n COMPLETION_DURATION: 'completion_duration',\n\n // Position properties\n OPEN_POSITION: 'open_position',\n OPEN_ORDER: 'open_order',\n OPEN_POSITION_SIZE: 'open_position_size',\n UNREALIZED_PNL_DOLLAR: 'unrealized_dollar_pnl',\n UNREALIZED_PNL_PERCENT: 'unrealized_percent_pnl',\n CLOSE_VALUE: 'close_value',\n CLOSE_PERCENTAGE: 'close_percentage',\n CLOSE_TYPE: 'close_type',\n PERCENTAGE_CLOSED: 'percentage_closed',\n PNL_DOLLAR: 'dollar_pnl',\n PNL_PERCENT: 'percent_pnl',\n RECEIVED_AMOUNT: 'received_amount',\n\n // Order type variations\n CURRENT_ORDER_TYPE: 'current_order_type',\n SELECTED_ORDER_TYPE: 'selected_order_type',\n\n // Funding properties\n SOURCE_CHAIN: 'source_chain',\n SOURCE_ASSET: 'source_asset',\n SOURCE_AMOUNT: 'source_amount',\n DESTINATION_AMOUNT: 'destination_amount',\n NETWORK_FEE: 'network_fee',\n WITHDRAWAL_AMOUNT: 'withdrawal_amount',\n\n // Chart properties\n INTERACTION_TYPE: 'interaction_type',\n TIME_SERIE_SELECTED: 'time_serie_selected',\n CANDLE_PERIOD: 'candle_period',\n CHART_LIBRARY: 'chart_library',\n ASSET_TYPE: 'asset_type',\n\n // Risk management properties\n STOP_LOSS_PRICE: 'stop_loss_price',\n STOP_LOSS_PERCENT: 'stop_loss_percent',\n TAKE_PROFIT_PRICE: 'take_profit_price',\n TAKE_PROFIT_PERCENT: 'take_profit_percent',\n POSITION_SIZE: 'position_size',\n POSITION_AGE: 'position_age',\n LIQUIDATION_DISTANCE_OLD: 'liquidation_distance_old',\n LIQUIDATION_DISTANCE_NEW: 'liquidation_distance_new',\n\n // Notification properties\n NOTIFICATION_TYPE: 'notification_type',\n\n // Other properties\n INPUT_METHOD: 'input_method', // camelCase per requirements\n ACTION_TYPE: 'action_type',\n SETTING_TYPE: 'setting_type',\n FAILURE_REASON: 'failure_reason',\n WARNING_TYPE: 'warning_type',\n WARNING_MESSAGE: 'warning_message',\n ERROR_TYPE: 'error_type',\n ERROR_MESSAGE: 'error_message',\n AB_TESTS: 'ab_tests',\n COMPLETION_DURATION_TUTORIAL: 'completion_duration_tutorial',\n STEPS_VIEWED: 'steps_viewed',\n VIEW_OCCURRENCES: 'view_occurrences',\n AMOUNT_FILLED: 'amount_filled',\n REMAINING_AMOUNT: 'remaining_amount',\n NUMBER_POSITIONS_CLOSED: 'number_positions_closed',\n\n // Tutorial carousel navigation properties\n PREVIOUS_SCREEN: 'previous_screen',\n CURRENT_SCREEN: 'current_screen',\n SCREEN_POSITION: 'screen_position',\n TOTAL_SCREENS: 'total_screens',\n NAVIGATION_METHOD: 'navigation_method',\n STATUS: 'status',\n SCREEN_TYPE: 'screen_type',\n SCREEN_NAME: 'screen_name',\n ACTION: 'action',\n RETRY_ATTEMPTS: 'retry_attempts',\n SHOW_BACK_BUTTON: 'show_back_button',\n ATTEMPT_NUMBER: 'attempt_number',\n\n // PnL Hero Card properties\n IMAGE_SELECTED: 'image_selected',\n TAB_NUMBER: 'tab_number',\n\n // VIP rewards properties\n VIP_TIER: 'vip_tier',\n VIP_DISCOUNT: 'vip_discount',\n\n // A/B testing properties (flat per test for multiple concurrent tests)\n // Only include AB test properties when test is enabled (event not sent when disabled)\n // Button color test (TAT-1937)\n AB_TEST_BUTTON_COLOR: 'ab_test_button_color',\n // Future tests: add as AB_TEST_{TEST_NAME} (no _ENABLED property needed)\n\n // Entry point tracking properties\n BUTTON_CLICKED: 'button_clicked',\n BUTTON_LOCATION: 'button_location',\n\n // Balance properties\n HAS_PERP_BALANCE: 'has_perp_balance',\n\n // Service interruption banner\n OUTAGE_BANNER_SHOWN: 'outage_banner_shown',\n\n // Geo-blocking properties (TAT-2337: track geo-blocked withdrawals for monitoring)\n IS_GEO_BLOCKED: 'is_geo_blocked',\n\n // TP/SL differentiation properties\n HAS_TAKE_PROFIT: 'has_take_profit',\n HAS_STOP_LOSS: 'has_stop_loss',\n TAKE_PROFIT_PERCENTAGE: 'take_profit_percentage',\n STOP_LOSS_PERCENTAGE: 'stop_loss_percentage',\n // Auto Close TP/SL RoE sign toggle (`'+'` | `'-'`)\n ROE_SIGN: 'roe_sign',\n // Watchlist/Favorites properties\n FAVORITES_COUNT: 'favorites_count',\n\n // Scroll tracking properties\n SECTION_VIEWED: 'section_viewed',\n\n // Discovery analytics properties\n SOURCE_SECTION: 'source_section',\n RESULT_COUNT: 'result_count',\n SECTION_NAME: 'section_name',\n SECTION_INDEX: 'section_index',\n SECTIONS_DISPLAYED: 'sections_displayed',\n WATCHLIST_COUNT: 'watchlist_count',\n WATCHLIST_MARKETS: 'watchlist_markets',\n\n // Order value (USD $ value of the order)\n ORDER_VALUE: 'order_value',\n\n // Market category filter (for market list screen)\n MARKET_CATEGORY: 'market_category',\n\n // Pay with any token (PERPS_TRADE_TRANSACTION)\n TRADE_WITH_TOKEN: 'trade_with_token',\n MM_PAY_TOKEN_SELECTED: 'mm_pay_token_selected',\n MM_PAY_NETWORK_SELECTED: 'mm_pay_network_selected',\n\n // Pay-with UI (PERPS_UI_INTERACTION)\n INITIAL_PAYMENT_METHOD: 'initial_payment_method',\n NEW_PAYMENT_METHOD: 'new_payment_method',\n\n // Slippage properties\n MAX_SLIPPAGE_PCT: 'max_slippage_pct',\n MAX_SLIPPAGE_SOURCE: 'max_slippage_source',\n ESTIMATED_SLIPPAGE_PCT: 'estimated_slippage_pct',\n\n // Account setup / abstraction mode (PERPS_ACCOUNT_SETUP)\n ABSTRACTION_MODE: 'abstraction_mode',\n PREVIOUS_ABSTRACTION_MODE: 'previous_abstraction_mode',\n\n // Entry point / discovery attribution (TAT-3080)\n ENTRY_POINT: 'entry_point',\n DISCOVERY_SOURCE: 'discovery_source',\n PERP_DISCOVERY_SOURCE: 'perp_discovery_source',\n\n // UTM attribution context (TAT-3133, TAT-3140)\n UTM_SOURCE: 'utm_source',\n UTM_MEDIUM: 'utm_medium',\n UTM_CAMPAIGN: 'utm_campaign',\n UTM_CONTENT: 'utm_content',\n UTM_TERM: 'utm_term',\n\n // Watchlist membership at event time (TAT-3148)\n WATCHLISTED: 'watchlisted',\n\n // HyperLiquid protocol fee rate on trade + close (TAT-3149)\n HL_FEE_RATE: 'hl_fee_rate',\n\n // Bulk action correlation id for batch close/cancel (TAT-3150)\n BULK_ACTION_ID: 'bulk_action_id',\n\n // Client environment (Extension supplies value) (TAT-3335)\n ENVIRONMENT_TYPE: 'environment_type',\n\n // Order funnel / consideration + quote properties (TAT-3084)\n ORDER_CONTEXT: 'order_context',\n ORDER_SIZE_PERCENT: 'order_size_percent',\n LIMIT_PRICE_INPUT_TYPE: 'limit_price_input_type',\n LIMIT_PRICE_INPUT_PRESET: 'limit_price_input_preset',\n ORDER_HAS_TP: 'order_has_tp',\n ORDER_HAS_SL: 'order_has_sl',\n QUOTE_LATENCY_MS: 'quote_latency_ms',\n ERROR_REASON: 'error_reason',\n SAVED_ORDER: 'saved_order',\n DEFAULT_PAYMENT_TOKEN: 'default_payment_token',\n DEFAULT_SIZE_AMOUNT: 'default_size_amount',\n DEFAULT_LEVERAGE: 'default_leverage',\n DEFAULT_AUTO_CLOSE: 'default_auto_close',\n ORDER_EXECUTION_LATENCY_MS: 'order_execution_latency_ms',\n SCREEN_CONTEXT: 'screen_context',\n FROM_TOKEN: 'from_token',\n FROM_CHAIN: 'from_chain',\n TO_TOKEN: 'to_token',\n TO_CHAIN: 'to_chain',\n\n // Search / discovery query properties (TAT-3144, TAT-3202, TAT-3151)\n SEARCH_QUERY: 'search_query',\n RESULTS_COUNT: 'results_count',\n RESULT_RANK: 'result_rank',\n MODE: 'mode',\n CURRENT_TOKEN: 'current_token',\n\n // Sort / filter properties (TAT-3142)\n SORT_FIELD: 'sort_field',\n SORT_DIRECTION: 'sort_direction',\n FILTER_CATEGORY: 'filter_category',\n\n // Time-on-screen for abandon tracking (TAT-3136)\n TIME_ON_SCREEN_MS: 'time_on_screen_ms',\n} as const;\n\n/**\n * Property value constants\n */\nexport const PERPS_EVENT_VALUE = {\n DIRECTION: {\n LONG: 'long',\n SHORT: 'short',\n },\n ORDER_TYPE: {\n MARKET: 'market',\n LIMIT: 'limit',\n // Trigger placements are emitted verbatim by TradingService, so the enum has\n // to list them for dashboards keyed on `order_type`.\n STOP_MARKET: 'stop_market',\n STOP_LIMIT: 'stop_limit',\n TAKE_PROFIT_MARKET: 'take_profit_market',\n TAKE_PROFIT_LIMIT: 'take_profit_limit',\n },\n ORDER_TYPE_CAPITALIZED: {\n MARKET: 'market',\n LIMIT: 'limit',\n },\n CHART_LIBRARY: {\n LIGHTWEIGHT: 'lightweight',\n ADVANCED: 'advanced',\n },\n ASSET_TYPE: {\n SPOT: 'spot',\n PERP: 'perp',\n },\n INPUT_METHOD: {\n SLIDER: 'slider',\n KEYBOARD: 'keyboard',\n PRESET: 'preset',\n MANUAL: 'manual',\n PERCENTAGE_BUTTON: 'percentage_button',\n },\n SOURCE: {\n BANNER: 'banner',\n NOTIFICATION: 'notification',\n MAIN_ACTION_BUTTON: 'main_action_button',\n POSITION_TAB: 'position_tab',\n PERP_MARKETS: 'perp_markets',\n DEEPLINK: 'deeplink',\n TUTORIAL: 'tutorial',\n TRADE_SCREEN: 'trade_screen',\n HOMESCREEN_TAB: 'homescreen_tab',\n PERP_ASSET_SCREEN: 'perp_asset_screen',\n PERP_MARKET: 'perp_market',\n PERP_MARKET_SEARCH: 'perp_market_search',\n POSITION_SCREEN: 'position_screen',\n BOTTOM_NAV_BAR: 'bottom_nav_bar',\n TP_SL_VIEW: 'tp_sl_view',\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN_NO_FUNDS: 'perps_asset_screen_no_funds',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n HOME_SECTION: 'home_section',\n TOOLTIP: 'tooltip',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO_BUTTON: 'crypto_button',\n STOCKS_BUTTON: 'stocks_button',\n CLOSE_TOAST: 'close_toast',\n // Perps home section sources (for navigation tracking)\n PERPS_HOME_POSITION: 'perps_home_position',\n PERPS_HOME_ORDERS: 'perps_home_orders',\n PERPS_HOME_WATCHLIST: 'perps_home_watchlist',\n PERPS_HOME_EXPLORE_CRYPTO: 'perps_home_explore_crypto',\n PERPS_HOME_EXPLORE_STOCKS: 'perps_home_explore_stocks',\n PERPS_HOME_ACTIVITY: 'perps_home_activity',\n // Explore/Trending page source\n EXPLORE: 'explore',\n // Market list tab sources\n PERPS_MARKET_LIST_ALL: 'perps_market_list_all',\n PERPS_MARKET_LIST_CRYPTO: 'perps_market_list_crypto',\n PERPS_MARKET_LIST_STOCKS: 'perps_market_list_stocks',\n // Other navigation sources\n PERPS_TAB: 'perps_tab',\n WALLET_MAIN_ACTION_MENU: 'wallet_main_action_menu',\n PUSH_NOTIFICATION: 'push_notification',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n // Position management sources\n OPEN_POSITION: 'open_position',\n POSITION_CLOSE_TOAST: 'position_close_toast',\n TRADE_DETAILS: 'trade_details',\n // Geo-block trigger sources (for tracking what action was blocked)\n DEPOSIT_BUTTON: 'deposit_button',\n WITHDRAW_BUTTON: 'withdraw_button',\n TRADE_ACTION: 'trade_action',\n ADD_FUNDS_ACTION: 'add_funds_action',\n CANCEL_ORDER: 'cancel_order',\n ASSET_DETAIL_SCREEN: 'asset_detail_screen',\n MARKET_INSIGHTS: 'market_insights',\n // TAT-2449: Geo-block sources for close/modify actions\n CLOSE_POSITION_ACTION: 'close_position_action',\n MODIFY_POSITION_ACTION: 'modify_position_action',\n // Geo-block sources for order book actions\n ORDER_BOOK_LONG_BUTTON: 'order_book_long_button',\n ORDER_BOOK_SHORT_BUTTON: 'order_book_short_button',\n ORDER_BOOK_CLOSE_BUTTON: 'order_book_close_button',\n ORDER_BOOK_MODIFY_BUTTON: 'order_book_modify_button',\n // Geo-block sources for position management actions\n AUTO_CLOSE_ACTION: 'auto_close_action',\n ADJUST_MARGIN_ACTION: 'adjust_margin_action',\n STOP_LOSS_PROMPT_ADD_MARGIN: 'stop_loss_prompt_add_margin',\n STOP_LOSS_PROMPT_SET_SL: 'stop_loss_prompt_set_sl',\n // Geo-block sources for bulk actions\n CLOSE_ALL_POSITIONS_BUTTON: 'close_all_positions_button',\n CANCEL_ALL_ORDERS_BUTTON: 'cancel_all_orders_button',\n },\n WARNING_TYPE: {\n MINIMUM_DEPOSIT: 'minimum_deposit',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n },\n ERROR_TYPE: {\n NETWORK: 'network',\n APP_CRASH: 'app_crash',\n BACKEND: 'backend',\n VALIDATION: 'validation',\n WARNING: 'warning',\n },\n // Standardized error message keys for PERP_ERROR events\n // These should be used instead of localized strings for consistent analytics\n ERROR_MESSAGE_KEY: {\n ORDER_CHANGED_FROM_LIMIT_TO_MARKET: 'order_changed_from_limit_to_market',\n OPEN_CROSS_MARGIN_POSITION_DETECTED: 'open_cross_margin_position_detected',\n INSUFFICIENT_BALANCE: 'insufficient_balance',\n ORDER_FAILED: 'order_failed',\n GEO_RESTRICTION: 'geo_restriction',\n MINIMUM_ORDER_SIZE: 'minimum_order_size',\n MAXIMUM_LEVERAGE_EXCEEDED: 'maximum_leverage_exceeded',\n PRICE_DEVIATION_TOO_HIGH: 'price_deviation_too_high',\n MARKET_AT_CAPACITY: 'market_at_capacity',\n NETWORK_ERROR: 'network_error',\n CONNECTION_FAILED: 'connection_failed',\n POSITION_UPDATE_FAILED: 'position_update_failed',\n TP_SL_UPDATE_FAILED: 'tp_sl_update_failed',\n MARGIN_UPDATE_FAILED: 'margin_update_failed',\n UNKNOWN: 'unknown',\n },\n SOURCE_SECTION: {\n // Home sections\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_GAINERS: 'top_gainers',\n TOP_LOSERS: 'top_losers',\n CRYPTO: 'crypto',\n COMMODITY: 'commodity',\n STOCK: 'stock',\n FOREX: 'forex',\n // Explore sections\n PERPS_MOVERS: 'perps_movers',\n PERPS_CRYPTO: 'perps_crypto',\n PERPS_STOCKS_COMMODITIES: 'perps_stocks_commodities',\n PERPS_MARKETS: 'perps_markets',\n // Market list sections\n ALL_MARKETS: 'all_markets',\n NEW: 'new',\n ACTIVE_SEARCH: 'active_search',\n },\n SECTION_NAME: {\n BALANCE: 'balance',\n POSITIONS: 'positions',\n ORDERS: 'orders',\n WATCHLIST: 'watchlist',\n WHATS_HAPPENING: 'whats_happening',\n PRODUCTS: 'products',\n TOP_MOVERS: 'top_movers',\n EXPLORE_CRYPTO: 'explore_crypto',\n EXPLORE_COMMODITIES: 'explore_commodities',\n EXPLORE_STOCKS: 'explore_stocks',\n EXPLORE_FOREX: 'explore_forex',\n RECENT_ACTIVITY: 'recent_activity',\n },\n INTERACTION_TYPE: {\n TAP: 'tap',\n ZOOM: 'zoom',\n SLIDE: 'slide',\n SEARCH_CLICKED: 'search_clicked',\n ORDER_TYPE_VIEWED: 'order_type_viewed',\n ORDER_TYPE_SELECTED: 'order_type_selected',\n /** @deprecated Use LEVERAGE_CHANGED instead for clarity */\n SETTING_CHANGED: 'setting_changed',\n LEVERAGE_CHANGED: 'leverage_changed',\n TUTORIAL_STARTED: 'tutorial_started',\n TUTORIAL_COMPLETED: 'tutorial_completed',\n TUTORIAL_NAVIGATION: 'tutorial_navigation',\n CANDLE_PERIOD_VIEWED: 'candle_period_viewed',\n CANDLE_PERIOD_CHANGED: 'candle_period_changed',\n FAVORITE_TOGGLED: 'favorite_toggled',\n BUTTON_CLICKED: 'button_clicked',\n // Position management interactions\n CONTACT_SUPPORT: 'contact_support',\n STOP_LOSS_ONE_CLICK_PROMPT: 'stop_loss_one_click_prompt',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n INCREASE_EXPOSURE: 'increase_exposure',\n REDUCE_EXPOSURE: 'reduce_exposure',\n FLIP_POSITION: 'flip_position',\n // Hero card interactions\n DISPLAY_HERO_CARD: 'display_hero_card',\n SHARE_PNL_HERO_CARD: 'share_pnl_hero_card',\n // Chart interactions\n FULL_SCREEN_CHART: 'full_screen_chart',\n // Pay-with interactions\n PAYMENT_TOKEN_SELECTOR: 'payment_token_selector',\n PAYMENT_METHOD_CHANGED: 'payment_method_changed',\n // Deposit + order (pay-with token) cancel\n CANCEL_TRADE_WITH_TOKEN: 'cancel_trade_with_token',\n // Slippage interactions\n SLIPPAGE_CONFIG_OPENED: 'slippage_config_opened',\n SLIPPAGE_CONFIG_CHANGED: 'slippage_config_changed',\n SLIPPAGE_LIMIT_BLOCKED_ORDER: 'slippage_limit_blocked_order',\n // Auto Close TP/SL RoE sign toggle\n TPSL_ROE_SIGN_TOGGLED: 'tpsl_roe_sign_toggled',\n // Discovery analytics\n MARKET_LIST_FILTER: 'market_list_filter',\n // Sort / filter interactions (TAT-3142)\n SORT_APPLIED: 'sort_applied',\n FILTER_APPLIED: 'filter_applied',\n // Search interactions (TAT-3144, TAT-3202)\n SEARCH_RESULT_TAPPED: 'search_result_tapped',\n SEARCH_CHIP_TAPPED: 'search_chip_tapped',\n SEARCH_SIGNAL_TILE_TAPPED: 'search_signal_tile_tapped',\n // Pay-with token selector dismissed (TAT-3151)\n PAYMENT_TOKEN_SELECTOR_DISMISSED: 'payment_token_selector_dismissed',\n },\n MAX_SLIPPAGE_SOURCE: {\n DEFAULT: 'default',\n USER_CONFIGURED: 'user_configured',\n },\n ACTION_TYPE: {\n START_TRADING: 'start_trading',\n SKIP: 'skip',\n STOP_LOSS_SET: 'stop_loss_set',\n TAKE_PROFIT_SET: 'take_profit_set',\n ADL_LEARN_MORE: 'adl_learn_more',\n LEARN_MORE: 'learn_more',\n FAVORITE_MARKET: 'favorite_market',\n UNFAVORITE_MARKET: 'unfavorite_market',\n },\n NOTIFICATION_TYPE: {\n POSITION_LIQUIDATED: 'position_liquidated',\n TP_EXECUTED: 'tp_executed',\n SL_EXECUTED: 'sl_executed',\n LIMIT_ORDER_EXECUTED: 'limit_order_executed',\n },\n CLOSE_TYPE: {\n FULL: 'full',\n PARTIAL: 'partial',\n },\n NAVIGATION_METHOD: {\n SWIPE: 'swipe',\n CONTINUE_BUTTON: 'continue_button',\n PROGRESS_DOT: 'progress_dot',\n },\n STATUS: {\n VIEWED: 'viewed',\n STARTED: 'started',\n COMPLETED: 'completed',\n INITIATED: 'initiated',\n SUBMITTED: 'submitted',\n EXECUTED: 'executed',\n PARTIALLY_FILLED: 'partially_filled',\n FAILED: 'failed',\n SUCCESS: 'success',\n ALREADY_ENABLED: 'already_enabled',\n MIGRATION_REQUIRED: 'migration_required',\n // Emitted when a migration attempt is skipped because it is not applicable\n // (e.g. the user has no Hyperliquid account yet — nothing to migrate).\n // Distinguishes expected no-ops from real failures in dashboards.\n NOT_APPLICABLE: 'not_applicable',\n },\n SCREEN_TYPE: {\n MARKETS: 'markets',\n MARKET_LIST: 'market_list',\n ASSET_DETAILS: 'asset_details',\n TRADING: 'trading',\n /** @deprecated Use PERPS_HOME or WALLET_HOME_PERPS_TAB instead */\n HOMESCREEN: 'homescreen',\n PERPS_HOME: 'perps_home',\n WALLET_HOME_PERPS_TAB: 'wallet_home_perps_tab',\n POSITION_CLOSE: 'position_close',\n LEVERAGE: 'leverage',\n TUTORIAL: 'tutorial',\n WITHDRAWAL: 'withdrawal',\n TP_SL: 'tp_sl',\n CREATE_TPSL: 'create_tpsl',\n EDIT_TPSL: 'edit_tpsl',\n DEPOSIT_INPUT: 'deposit_input',\n DEPOSIT_REVIEW: 'deposit_review',\n CLOSE_ALL_POSITIONS: 'close_all_positions',\n CANCEL_ALL_ORDERS: 'cancel_all_orders',\n PNL_HERO_CARD: 'pnl_hero_card',\n ORDER_BOOK: 'order_book',\n ERROR: 'error',\n // Market list tab screen types\n MARKET_LIST_ALL: 'market_list_all',\n MARKET_LIST_CRYPTO: 'market_list_crypto',\n MARKET_LIST_STOCKS: 'market_list_stocks',\n // Additional screens\n FULL_SCREEN_CHART: 'full_screen_chart',\n ACTIVITY: 'activity',\n INCREASE_EXPOSURE: 'increase_exposure',\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n GEO_BLOCK_NOTIF: 'geo_block_notif',\n COMPLIANCE_BLOCK_NOTIF: 'compliance_block_notif',\n // Deposit + order (pay-with token) cancel toast\n CANCEL_TRADE_WITH_TOKEN_TOAST: 'cancel_trade_with_token_toast',\n // Search result screen states (TAT-3144)\n SEARCH_RESULTS_SHOWN: 'search_results_shown',\n SEARCH_NO_RESULTS: 'search_no_results',\n },\n SETTING_TYPE: {\n LEVERAGE: 'leverage',\n SLIPPAGE: 'slippage',\n },\n SCREEN_NAME: {\n CONNECTION_ERROR: 'connection_error',\n PERPS_HERO_CARD: 'perps_hero_card',\n PERPS_ACTIVITY_HISTORY: 'perps_activity_history',\n PERPS_HOME: 'perps_home',\n PERPS_MARKET_DETAILS: 'perps_market_details',\n PERPS_ORDER: 'perps_order',\n },\n ACTION: {\n CONNECTION_RETRY: 'connection_retry',\n CONNECTION_GO_BACK: 'connection_go_back',\n SHARE: 'share',\n // Risk management actions\n ADD_MARGIN: 'add_margin',\n REMOVE_MARGIN: 'remove_margin',\n EDIT_TP_SL: 'edit_tp_sl',\n CREATE_TP_SL: 'create_tp_sl',\n // TP/SL specific actions for risk management events\n TP: 'tp',\n SL: 'sl',\n TPSL: 'tpsl',\n // Trade transaction actions - differentiates new position from adding to existing\n CREATE_POSITION: 'create_position',\n INCREASE_EXPOSURE: 'increase_exposure',\n // Flip position actions with direction specificity\n FLIP_LONG_TO_SHORT: 'flip_long_to_short',\n FLIP_SHORT_TO_LONG: 'flip_short_to_long',\n // Order funnel abandonment (TAT-3136)\n ABANDON_ORDER: 'abandon_order',\n },\n // Risk management sources\n RISK_MANAGEMENT_SOURCE: {\n TRADE_SCREEN: 'trade_screen',\n POSITION_SCREEN: 'position_screen',\n STOP_LOSS_PROMPT_BANNER: 'stop_loss_prompt_banner',\n },\n PERPS_HISTORY_TABS: {\n TRADES: 'trades',\n ORDERS: 'orders',\n FUNDING: 'funding',\n DEPOSITS: 'deposits',\n },\n /** Value for mm_pay_token_selected when user pays with Perps balance (not a token) */\n MM_PAY_TOKEN: {\n PERPS_BALANCE: 'Perps Balance',\n },\n // A/B testing values\n AB_TEST: {\n // Test IDs\n BUTTON_COLOR_TEST: 'button_color_test',\n // Button color test variants\n CONTROL: 'control',\n MONOCHROME: 'monochrome',\n },\n BUTTON_CLICKED: {\n DEPOSIT: 'deposit',\n WITHDRAW: 'withdraw',\n PERPS_HOME: 'perps_home',\n TUTORIAL: 'tutorial',\n TOOLTIP: 'tooltip',\n MARKET_LIST: 'market_list',\n OPEN_POSITION: 'open_position',\n MAGNIFYING_GLASS: 'magnifying_glass',\n CRYPTO: 'crypto',\n STOCKS: 'stocks',\n COMMODITIES: 'commodities',\n FOREX: 'forex',\n NEW: 'new',\n GIVE_FEEDBACK: 'give_feedback',\n WATCHLIST: 'watchlist',\n TOP_MOVERS: 'top_movers',\n WHATS_HAPPENING: 'whats_happening',\n // Order + position management CTAs (TAT-3135, TAT-3141)\n PLACE_ORDER: 'place_order',\n CLOSE: 'close',\n REDUCE_EXPOSURE: 'reduce_exposure',\n },\n BUTTON_LOCATION: {\n PERPS_HOME: 'perps_home',\n PERPS_TUTORIAL: 'perps_tutorial',\n PERPS_HOME_EMPTY_STATE: 'perps_home_empty_state',\n PERPS_ASSET_SCREEN: 'perps_asset_screen',\n PERPS_TAB: 'perps_tab',\n TRADE_MENU_ACTION: 'trade_menu_action',\n WALLET_HOME: 'wallet_home',\n MARKET_LIST: 'market_list',\n SCREEN: 'screen',\n TOOLTIP: 'tooltip',\n PERP_MARKET_DETAILS: 'perp_market_details',\n ORDER_BOOK: 'order_book',\n FULL_SCREEN_CHART: 'full_screen_chart',\n ASSET_DETAILS: 'asset_details',\n },\n} as const;\n"]}