@metamask-previews/perps-controller 15.1.0-preview-00a181c → 15.1.0-preview-cfd35b8dd

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 (130) hide show
  1. package/CHANGELOG.md +0 -14
  2. package/dist/PerpsController-method-action-types.cjs.map +1 -1
  3. package/dist/PerpsController-method-action-types.d.cts +1 -20
  4. package/dist/PerpsController-method-action-types.d.cts.map +1 -1
  5. package/dist/PerpsController-method-action-types.d.mts +1 -20
  6. package/dist/PerpsController-method-action-types.d.mts.map +1 -1
  7. package/dist/PerpsController-method-action-types.mjs.map +1 -1
  8. package/dist/PerpsController.cjs +154 -65
  9. package/dist/PerpsController.cjs.map +1 -1
  10. package/dist/PerpsController.d.cts +43 -37
  11. package/dist/PerpsController.d.cts.map +1 -1
  12. package/dist/PerpsController.d.mts +43 -37
  13. package/dist/PerpsController.d.mts.map +1 -1
  14. package/dist/PerpsController.mjs +151 -64
  15. package/dist/PerpsController.mjs.map +1 -1
  16. package/dist/aggregation/SubscriptionMultiplexer.cjs +1 -1
  17. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +1 -1
  18. package/dist/aggregation/SubscriptionMultiplexer.d.cts +1 -1
  19. package/dist/aggregation/SubscriptionMultiplexer.d.mts +1 -1
  20. package/dist/aggregation/SubscriptionMultiplexer.mjs +1 -1
  21. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +1 -1
  22. package/dist/constants/index.cjs +1 -0
  23. package/dist/constants/index.cjs.map +1 -1
  24. package/dist/constants/index.d.cts +1 -0
  25. package/dist/constants/index.d.cts.map +1 -1
  26. package/dist/constants/index.d.mts +1 -0
  27. package/dist/constants/index.d.mts.map +1 -1
  28. package/dist/constants/index.mjs +1 -0
  29. package/dist/constants/index.mjs.map +1 -1
  30. package/dist/constants/myxConfig.cjs +253 -0
  31. package/dist/constants/myxConfig.cjs.map +1 -0
  32. package/dist/constants/myxConfig.d.cts +145 -0
  33. package/dist/constants/myxConfig.d.cts.map +1 -0
  34. package/dist/constants/myxConfig.d.mts +145 -0
  35. package/dist/constants/myxConfig.d.mts.map +1 -0
  36. package/dist/constants/myxConfig.mjs +243 -0
  37. package/dist/constants/myxConfig.mjs.map +1 -0
  38. package/dist/constants/perpsConfig.cjs +9 -4
  39. package/dist/constants/perpsConfig.cjs.map +1 -1
  40. package/dist/constants/perpsConfig.d.cts +5 -3
  41. package/dist/constants/perpsConfig.d.cts.map +1 -1
  42. package/dist/constants/perpsConfig.d.mts +5 -3
  43. package/dist/constants/perpsConfig.d.mts.map +1 -1
  44. package/dist/constants/perpsConfig.mjs +9 -4
  45. package/dist/constants/perpsConfig.mjs.map +1 -1
  46. package/dist/index.cjs +175 -146
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.cts +2 -2
  49. package/dist/index.d.cts.map +1 -1
  50. package/dist/index.d.mts +2 -2
  51. package/dist/index.d.mts.map +1 -1
  52. package/dist/index.mjs +1 -0
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/providers/AggregatedPerpsProvider.cjs +2 -8
  55. package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -1
  56. package/dist/providers/AggregatedPerpsProvider.d.cts +2 -3
  57. package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -1
  58. package/dist/providers/AggregatedPerpsProvider.d.mts +2 -3
  59. package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -1
  60. package/dist/providers/AggregatedPerpsProvider.mjs +2 -8
  61. package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -1
  62. package/dist/providers/HyperLiquidProvider.cjs +22 -118
  63. package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
  64. package/dist/providers/HyperLiquidProvider.d.cts +0 -31
  65. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
  66. package/dist/providers/HyperLiquidProvider.d.mts +0 -31
  67. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
  68. package/dist/providers/HyperLiquidProvider.mjs +22 -118
  69. package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
  70. package/dist/providers/LighterProvider.cjs +1 -1
  71. package/dist/providers/LighterProvider.cjs.map +1 -1
  72. package/dist/providers/LighterProvider.mjs +1 -1
  73. package/dist/providers/LighterProvider.mjs.map +1 -1
  74. package/dist/routing/ProviderRouter.cjs +1 -1
  75. package/dist/routing/ProviderRouter.cjs.map +1 -1
  76. package/dist/routing/ProviderRouter.d.cts +1 -1
  77. package/dist/routing/ProviderRouter.d.mts +1 -1
  78. package/dist/routing/ProviderRouter.mjs +1 -1
  79. package/dist/routing/ProviderRouter.mjs.map +1 -1
  80. package/dist/services/HyperLiquidClientService.cjs.map +1 -1
  81. package/dist/services/HyperLiquidClientService.d.cts +16 -26
  82. package/dist/services/HyperLiquidClientService.d.cts.map +1 -1
  83. package/dist/services/HyperLiquidClientService.d.mts +16 -26
  84. package/dist/services/HyperLiquidClientService.d.mts.map +1 -1
  85. package/dist/services/HyperLiquidClientService.mjs.map +1 -1
  86. package/dist/services/HyperLiquidWalletService.cjs +30 -80
  87. package/dist/services/HyperLiquidWalletService.cjs.map +1 -1
  88. package/dist/services/HyperLiquidWalletService.d.cts +22 -48
  89. package/dist/services/HyperLiquidWalletService.d.cts.map +1 -1
  90. package/dist/services/HyperLiquidWalletService.d.mts +22 -48
  91. package/dist/services/HyperLiquidWalletService.d.mts.map +1 -1
  92. package/dist/services/HyperLiquidWalletService.mjs +30 -80
  93. package/dist/services/HyperLiquidWalletService.mjs.map +1 -1
  94. package/dist/services/LighterWalletService.cjs +1 -1
  95. package/dist/services/LighterWalletService.cjs.map +1 -1
  96. package/dist/services/LighterWalletService.d.cts +1 -1
  97. package/dist/services/LighterWalletService.d.mts +1 -1
  98. package/dist/services/LighterWalletService.mjs +1 -1
  99. package/dist/services/LighterWalletService.mjs.map +1 -1
  100. package/dist/types/index.cjs.map +1 -1
  101. package/dist/types/index.d.cts +16 -10
  102. package/dist/types/index.d.cts.map +1 -1
  103. package/dist/types/index.d.mts +16 -10
  104. package/dist/types/index.d.mts.map +1 -1
  105. package/dist/types/index.mjs.map +1 -1
  106. package/dist/types/myx-types.cjs +41 -0
  107. package/dist/types/myx-types.cjs.map +1 -0
  108. package/dist/types/myx-types.d.cts +94 -0
  109. package/dist/types/myx-types.d.cts.map +1 -0
  110. package/dist/types/myx-types.d.mts +94 -0
  111. package/dist/types/myx-types.d.mts.map +1 -0
  112. package/dist/types/myx-types.mjs +26 -0
  113. package/dist/types/myx-types.mjs.map +1 -0
  114. package/dist/utils/lighterAdapter.cjs +2 -1
  115. package/dist/utils/lighterAdapter.cjs.map +1 -1
  116. package/dist/utils/lighterAdapter.d.cts +2 -1
  117. package/dist/utils/lighterAdapter.d.cts.map +1 -1
  118. package/dist/utils/lighterAdapter.d.mts +2 -1
  119. package/dist/utils/lighterAdapter.d.mts.map +1 -1
  120. package/dist/utils/lighterAdapter.mjs +2 -1
  121. package/dist/utils/lighterAdapter.mjs.map +1 -1
  122. package/dist/utils/myxAdapter.cjs +569 -0
  123. package/dist/utils/myxAdapter.cjs.map +1 -0
  124. package/dist/utils/myxAdapter.d.cts +168 -0
  125. package/dist/utils/myxAdapter.d.cts.map +1 -0
  126. package/dist/utils/myxAdapter.d.mts +168 -0
  127. package/dist/utils/myxAdapter.d.mts.map +1 -0
  128. package/dist/utils/myxAdapter.mjs +548 -0
  129. package/dist/utils/myxAdapter.mjs.map +1 -0
  130. package/package.json +8 -2
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * MYX Protocol Type Definitions
4
+ *
5
+ * SDK types re-exported with MYX prefix for consistency.
6
+ * Includes types for market display, positions, orders, and trading.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MYX_HL_OVERLAPPING_MARKETS = exports.MYXTradeFlowTypeEnum = exports.MYXExecTypeEnum = exports.MYXOrderStatusEnum = exports.MYXOperationEnum = exports.MYXOrderTypeEnum = exports.MYXDirectionEnum = exports.MYXTimeInForce = exports.MYXOrderStatus = exports.MYXTriggerType = exports.MYXOperationType = exports.MYXOrderType = exports.MYXDirection = void 0;
10
+ // SDK enums (re-exported as types since they're const objects in the SDK)
11
+ var sdk_1 = require("@myx-trade/sdk");
12
+ Object.defineProperty(exports, "MYXDirection", { enumerable: true, get: function () { return sdk_1.Direction; } });
13
+ Object.defineProperty(exports, "MYXOrderType", { enumerable: true, get: function () { return sdk_1.OrderType; } });
14
+ Object.defineProperty(exports, "MYXOperationType", { enumerable: true, get: function () { return sdk_1.OperationType; } });
15
+ Object.defineProperty(exports, "MYXTriggerType", { enumerable: true, get: function () { return sdk_1.TriggerType; } });
16
+ Object.defineProperty(exports, "MYXOrderStatus", { enumerable: true, get: function () { return sdk_1.OrderStatus; } });
17
+ Object.defineProperty(exports, "MYXTimeInForce", { enumerable: true, get: function () { return sdk_1.TimeInForce; } });
18
+ // History enums
19
+ var sdk_2 = require("@myx-trade/sdk");
20
+ Object.defineProperty(exports, "MYXDirectionEnum", { enumerable: true, get: function () { return sdk_2.DirectionEnum; } });
21
+ Object.defineProperty(exports, "MYXOrderTypeEnum", { enumerable: true, get: function () { return sdk_2.OrderTypeEnum; } });
22
+ Object.defineProperty(exports, "MYXOperationEnum", { enumerable: true, get: function () { return sdk_2.OperationEnum; } });
23
+ Object.defineProperty(exports, "MYXOrderStatusEnum", { enumerable: true, get: function () { return sdk_2.OrderStatusEnum; } });
24
+ Object.defineProperty(exports, "MYXExecTypeEnum", { enumerable: true, get: function () { return sdk_2.ExecTypeEnum; } });
25
+ Object.defineProperty(exports, "MYXTradeFlowTypeEnum", { enumerable: true, get: function () { return sdk_2.TradeFlowTypeEnum; } });
26
+ // ============================================================================
27
+ // Market Overlap Configuration
28
+ // ============================================================================
29
+ /**
30
+ * Markets that overlap with HyperLiquid
31
+ * These are excluded from MYX display in v1.0 to avoid confusion
32
+ * In Stage 7, we'll implement market collision handling
33
+ */
34
+ exports.MYX_HL_OVERLAPPING_MARKETS = [
35
+ 'BTC',
36
+ 'ETH',
37
+ 'BNB',
38
+ 'PUMP',
39
+ 'WLFI',
40
+ ];
41
+ //# sourceMappingURL=myx-types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myx-types.cjs","sourceRoot":"","sources":["../../src/types/myx-types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAiCH,0EAA0E;AAC1E,sCAOwB;AANtB,mGAAA,SAAS,OAAgB;AACzB,mGAAA,SAAS,OAAgB;AACzB,uGAAA,aAAa,OAAoB;AACjC,qGAAA,WAAW,OAAkB;AAC7B,qGAAA,WAAW,OAAkB;AAC7B,qGAAA,WAAW,OAAkB;AAG/B,gBAAgB;AAChB,sCAOwB;AANtB,uGAAA,aAAa,OAAoB;AACjC,uGAAA,aAAa,OAAoB;AACjC,uGAAA,aAAa,OAAoB;AACjC,yGAAA,eAAe,OAAsB;AACrC,sGAAA,YAAY,OAAmB;AAC/B,2GAAA,iBAAiB,OAAwB;AAqD3C,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;;;GAIG;AACU,QAAA,0BAA0B,GAAG;IACxC,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;CACE,CAAC","sourcesContent":["/**\n * MYX Protocol Type Definitions\n *\n * SDK types re-exported with MYX prefix for consistency.\n * Includes types for market display, positions, orders, and trading.\n */\n\nimport type { CaipChainId } from '@metamask/utils';\n\n// ============================================================================\n// Re-export SDK Types with MYX prefix for consistency\n// ============================================================================\n\nexport type { PoolSymbolAllResponse as MYXPoolSymbol } from '@myx-trade/sdk';\nexport type { TickerDataItem as MYXTicker } from '@myx-trade/sdk';\n\n// Position & order types from SDK\nexport type { PositionType as MYXPositionType } from '@myx-trade/sdk';\nexport type { HistoryOrderItem as MYXHistoryOrderItem } from '@myx-trade/sdk';\nexport type { PositionHistoryItem as MYXPositionHistoryItem } from '@myx-trade/sdk';\nexport type { TradeFlowItem as MYXTradeFlowItem } from '@myx-trade/sdk';\nexport type { KlineDataItemType as MYXKlineData } from '@myx-trade/sdk';\n// KlineData is declared but not exported by @myx-trade/sdk — define locally.\n// Property names match the SDK's wire format (single-char keys).\nexport type MYXKlineWsData = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n E: number; // Timestamp\n // eslint-disable-next-line @typescript-eslint/naming-convention\n T: string; // Turnover\n c: string; // Close price\n h: string; // High price\n l: string; // Low price\n o: string; // Open price\n t: number; // Timestamp\n v: string; // Volume\n};\nexport type { KlineDataResponse as MYXKlineDataResponse } from '@myx-trade/sdk';\n\n// SDK enums (re-exported as types since they're const objects in the SDK)\nexport {\n Direction as MYXDirection,\n OrderType as MYXOrderType,\n OperationType as MYXOperationType,\n TriggerType as MYXTriggerType,\n OrderStatus as MYXOrderStatus,\n TimeInForce as MYXTimeInForce,\n} from '@myx-trade/sdk';\n\n// History enums\nexport {\n DirectionEnum as MYXDirectionEnum,\n OrderTypeEnum as MYXOrderTypeEnum,\n OperationEnum as MYXOperationEnum,\n OrderStatusEnum as MYXOrderStatusEnum,\n ExecTypeEnum as MYXExecTypeEnum,\n TradeFlowTypeEnum as MYXTradeFlowTypeEnum,\n} from '@myx-trade/sdk';\n\n// Trading params types\nexport type { PlaceOrderParams as MYXPlaceOrderParams } from '@myx-trade/sdk';\nexport type { PositionTpSlOrderParams as MYXPositionTpSlOrderParams } from '@myx-trade/sdk';\nexport type { GetHistoryOrdersParams as MYXGetHistoryOrdersParams } from '@myx-trade/sdk';\n\n// ============================================================================\n// Network Configuration Types\n// ============================================================================\n\n/**\n * MYX Network type - mainnet or testnet\n */\nexport type MYXNetwork = 'mainnet' | 'testnet';\n\n/**\n * MYX Endpoint configuration for a single network\n */\nexport type MYXEndpointConfig = {\n http: string;\n ws: string;\n};\n\n/**\n * MYX Endpoints for all networks\n */\nexport type MYXEndpoints = {\n mainnet: MYXEndpointConfig;\n testnet: MYXEndpointConfig;\n};\n\n/**\n * MYX Asset network configuration (token addresses per network)\n */\nexport type MYXAssetNetworkConfig = {\n chainId: CaipChainId;\n tokenAddress: string;\n};\n\n/**\n * MYX Asset configurations by network\n */\nexport type MYXAssetConfigs = {\n // USDT is the token symbol used as API key - not a variable name\n // eslint-disable-next-line @typescript-eslint/naming-convention\n USDT: {\n mainnet: MYXAssetNetworkConfig;\n testnet: MYXAssetNetworkConfig;\n };\n};\n\n// ============================================================================\n// Market Overlap Configuration\n// ============================================================================\n\n/**\n * Markets that overlap with HyperLiquid\n * These are excluded from MYX display in v1.0 to avoid confusion\n * In Stage 7, we'll implement market collision handling\n */\nexport const MYX_HL_OVERLAPPING_MARKETS = [\n 'BTC',\n 'ETH',\n 'BNB',\n 'PUMP',\n 'WLFI',\n] as const;\n\nexport type MYXOverlappingMarket = (typeof MYX_HL_OVERLAPPING_MARKETS)[number];\n\n// ============================================================================\n// Auth Configuration (passed from init file via babel-transformed env vars)\n// ============================================================================\n\n/**\n * MYX auth credentials passed at construction time.\n * Eliminates runtime `process.env` lookups — values come from the init file\n * where `process.env.X` is babel-transformed at build time.\n */\nexport type MYXAuthConfig = {\n appId: string;\n apiSecret: string;\n brokerAddress: string;\n};\n\n// ============================================================================\n// Client Service Types\n// ============================================================================\n\n/**\n * Price callback for REST polling\n */\nexport type MYXPriceCallback = (\n tickers: { symbol: string; price: string; change24h: number }[],\n) => void;\n\n/**\n * Error callback for client operations\n */\nexport type MYXErrorCallback = (error: Error) => void;\n"]}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * MYX Protocol Type Definitions
3
+ *
4
+ * SDK types re-exported with MYX prefix for consistency.
5
+ * Includes types for market display, positions, orders, and trading.
6
+ */
7
+ import type { CaipChainId } from "@metamask/utils";
8
+ export type { PoolSymbolAllResponse as MYXPoolSymbol } from "@myx-trade/sdk";
9
+ export type { TickerDataItem as MYXTicker } from "@myx-trade/sdk";
10
+ export type { PositionType as MYXPositionType } from "@myx-trade/sdk";
11
+ export type { HistoryOrderItem as MYXHistoryOrderItem } from "@myx-trade/sdk";
12
+ export type { PositionHistoryItem as MYXPositionHistoryItem } from "@myx-trade/sdk";
13
+ export type { TradeFlowItem as MYXTradeFlowItem } from "@myx-trade/sdk";
14
+ export type { KlineDataItemType as MYXKlineData } from "@myx-trade/sdk";
15
+ export type MYXKlineWsData = {
16
+ E: number;
17
+ T: string;
18
+ c: string;
19
+ h: string;
20
+ l: string;
21
+ o: string;
22
+ t: number;
23
+ v: string;
24
+ };
25
+ export type { KlineDataResponse as MYXKlineDataResponse } from "@myx-trade/sdk";
26
+ export { Direction as MYXDirection, OrderType as MYXOrderType, OperationType as MYXOperationType, TriggerType as MYXTriggerType, OrderStatus as MYXOrderStatus, TimeInForce as MYXTimeInForce, } from "@myx-trade/sdk";
27
+ export { DirectionEnum as MYXDirectionEnum, OrderTypeEnum as MYXOrderTypeEnum, OperationEnum as MYXOperationEnum, OrderStatusEnum as MYXOrderStatusEnum, ExecTypeEnum as MYXExecTypeEnum, TradeFlowTypeEnum as MYXTradeFlowTypeEnum, } from "@myx-trade/sdk";
28
+ export type { PlaceOrderParams as MYXPlaceOrderParams } from "@myx-trade/sdk";
29
+ export type { PositionTpSlOrderParams as MYXPositionTpSlOrderParams } from "@myx-trade/sdk";
30
+ export type { GetHistoryOrdersParams as MYXGetHistoryOrdersParams } from "@myx-trade/sdk";
31
+ /**
32
+ * MYX Network type - mainnet or testnet
33
+ */
34
+ export type MYXNetwork = 'mainnet' | 'testnet';
35
+ /**
36
+ * MYX Endpoint configuration for a single network
37
+ */
38
+ export type MYXEndpointConfig = {
39
+ http: string;
40
+ ws: string;
41
+ };
42
+ /**
43
+ * MYX Endpoints for all networks
44
+ */
45
+ export type MYXEndpoints = {
46
+ mainnet: MYXEndpointConfig;
47
+ testnet: MYXEndpointConfig;
48
+ };
49
+ /**
50
+ * MYX Asset network configuration (token addresses per network)
51
+ */
52
+ export type MYXAssetNetworkConfig = {
53
+ chainId: CaipChainId;
54
+ tokenAddress: string;
55
+ };
56
+ /**
57
+ * MYX Asset configurations by network
58
+ */
59
+ export type MYXAssetConfigs = {
60
+ USDT: {
61
+ mainnet: MYXAssetNetworkConfig;
62
+ testnet: MYXAssetNetworkConfig;
63
+ };
64
+ };
65
+ /**
66
+ * Markets that overlap with HyperLiquid
67
+ * These are excluded from MYX display in v1.0 to avoid confusion
68
+ * In Stage 7, we'll implement market collision handling
69
+ */
70
+ export declare const MYX_HL_OVERLAPPING_MARKETS: readonly ["BTC", "ETH", "BNB", "PUMP", "WLFI"];
71
+ export type MYXOverlappingMarket = (typeof MYX_HL_OVERLAPPING_MARKETS)[number];
72
+ /**
73
+ * MYX auth credentials passed at construction time.
74
+ * Eliminates runtime `process.env` lookups — values come from the init file
75
+ * where `process.env.X` is babel-transformed at build time.
76
+ */
77
+ export type MYXAuthConfig = {
78
+ appId: string;
79
+ apiSecret: string;
80
+ brokerAddress: string;
81
+ };
82
+ /**
83
+ * Price callback for REST polling
84
+ */
85
+ export type MYXPriceCallback = (tickers: {
86
+ symbol: string;
87
+ price: string;
88
+ change24h: number;
89
+ }[]) => void;
90
+ /**
91
+ * Error callback for client operations
92
+ */
93
+ export type MYXErrorCallback = (error: Error) => void;
94
+ //# sourceMappingURL=myx-types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myx-types.d.cts","sourceRoot":"","sources":["../../src/types/myx-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * MYX Protocol Type Definitions
3
+ *
4
+ * SDK types re-exported with MYX prefix for consistency.
5
+ * Includes types for market display, positions, orders, and trading.
6
+ */
7
+ import type { CaipChainId } from "@metamask/utils";
8
+ export type { PoolSymbolAllResponse as MYXPoolSymbol } from "@myx-trade/sdk";
9
+ export type { TickerDataItem as MYXTicker } from "@myx-trade/sdk";
10
+ export type { PositionType as MYXPositionType } from "@myx-trade/sdk";
11
+ export type { HistoryOrderItem as MYXHistoryOrderItem } from "@myx-trade/sdk";
12
+ export type { PositionHistoryItem as MYXPositionHistoryItem } from "@myx-trade/sdk";
13
+ export type { TradeFlowItem as MYXTradeFlowItem } from "@myx-trade/sdk";
14
+ export type { KlineDataItemType as MYXKlineData } from "@myx-trade/sdk";
15
+ export type MYXKlineWsData = {
16
+ E: number;
17
+ T: string;
18
+ c: string;
19
+ h: string;
20
+ l: string;
21
+ o: string;
22
+ t: number;
23
+ v: string;
24
+ };
25
+ export type { KlineDataResponse as MYXKlineDataResponse } from "@myx-trade/sdk";
26
+ export { Direction as MYXDirection, OrderType as MYXOrderType, OperationType as MYXOperationType, TriggerType as MYXTriggerType, OrderStatus as MYXOrderStatus, TimeInForce as MYXTimeInForce, } from "@myx-trade/sdk";
27
+ export { DirectionEnum as MYXDirectionEnum, OrderTypeEnum as MYXOrderTypeEnum, OperationEnum as MYXOperationEnum, OrderStatusEnum as MYXOrderStatusEnum, ExecTypeEnum as MYXExecTypeEnum, TradeFlowTypeEnum as MYXTradeFlowTypeEnum, } from "@myx-trade/sdk";
28
+ export type { PlaceOrderParams as MYXPlaceOrderParams } from "@myx-trade/sdk";
29
+ export type { PositionTpSlOrderParams as MYXPositionTpSlOrderParams } from "@myx-trade/sdk";
30
+ export type { GetHistoryOrdersParams as MYXGetHistoryOrdersParams } from "@myx-trade/sdk";
31
+ /**
32
+ * MYX Network type - mainnet or testnet
33
+ */
34
+ export type MYXNetwork = 'mainnet' | 'testnet';
35
+ /**
36
+ * MYX Endpoint configuration for a single network
37
+ */
38
+ export type MYXEndpointConfig = {
39
+ http: string;
40
+ ws: string;
41
+ };
42
+ /**
43
+ * MYX Endpoints for all networks
44
+ */
45
+ export type MYXEndpoints = {
46
+ mainnet: MYXEndpointConfig;
47
+ testnet: MYXEndpointConfig;
48
+ };
49
+ /**
50
+ * MYX Asset network configuration (token addresses per network)
51
+ */
52
+ export type MYXAssetNetworkConfig = {
53
+ chainId: CaipChainId;
54
+ tokenAddress: string;
55
+ };
56
+ /**
57
+ * MYX Asset configurations by network
58
+ */
59
+ export type MYXAssetConfigs = {
60
+ USDT: {
61
+ mainnet: MYXAssetNetworkConfig;
62
+ testnet: MYXAssetNetworkConfig;
63
+ };
64
+ };
65
+ /**
66
+ * Markets that overlap with HyperLiquid
67
+ * These are excluded from MYX display in v1.0 to avoid confusion
68
+ * In Stage 7, we'll implement market collision handling
69
+ */
70
+ export declare const MYX_HL_OVERLAPPING_MARKETS: readonly ["BTC", "ETH", "BNB", "PUMP", "WLFI"];
71
+ export type MYXOverlappingMarket = (typeof MYX_HL_OVERLAPPING_MARKETS)[number];
72
+ /**
73
+ * MYX auth credentials passed at construction time.
74
+ * Eliminates runtime `process.env` lookups — values come from the init file
75
+ * where `process.env.X` is babel-transformed at build time.
76
+ */
77
+ export type MYXAuthConfig = {
78
+ appId: string;
79
+ apiSecret: string;
80
+ brokerAddress: string;
81
+ };
82
+ /**
83
+ * Price callback for REST polling
84
+ */
85
+ export type MYXPriceCallback = (tickers: {
86
+ symbol: string;
87
+ price: string;
88
+ change24h: number;
89
+ }[]) => void;
90
+ /**
91
+ * Error callback for client operations
92
+ */
93
+ export type MYXErrorCallback = (error: Error) => void;
94
+ //# sourceMappingURL=myx-types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myx-types.d.mts","sourceRoot":"","sources":["../../src/types/myx-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * MYX Protocol Type Definitions
3
+ *
4
+ * SDK types re-exported with MYX prefix for consistency.
5
+ * Includes types for market display, positions, orders, and trading.
6
+ */
7
+ // SDK enums (re-exported as types since they're const objects in the SDK)
8
+ export { Direction as MYXDirection, OrderType as MYXOrderType, OperationType as MYXOperationType, TriggerType as MYXTriggerType, OrderStatus as MYXOrderStatus, TimeInForce as MYXTimeInForce } from "@myx-trade/sdk";
9
+ // History enums
10
+ export { DirectionEnum as MYXDirectionEnum, OrderTypeEnum as MYXOrderTypeEnum, OperationEnum as MYXOperationEnum, OrderStatusEnum as MYXOrderStatusEnum, ExecTypeEnum as MYXExecTypeEnum, TradeFlowTypeEnum as MYXTradeFlowTypeEnum } from "@myx-trade/sdk";
11
+ // ============================================================================
12
+ // Market Overlap Configuration
13
+ // ============================================================================
14
+ /**
15
+ * Markets that overlap with HyperLiquid
16
+ * These are excluded from MYX display in v1.0 to avoid confusion
17
+ * In Stage 7, we'll implement market collision handling
18
+ */
19
+ export const MYX_HL_OVERLAPPING_MARKETS = [
20
+ 'BTC',
21
+ 'ETH',
22
+ 'BNB',
23
+ 'PUMP',
24
+ 'WLFI',
25
+ ];
26
+ //# sourceMappingURL=myx-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myx-types.mjs","sourceRoot":"","sources":["../../src/types/myx-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,0EAA0E;AAC1E,OAAO,EACL,SAAS,IAAI,YAAY,EACzB,SAAS,IAAI,YAAY,EACzB,aAAa,IAAI,gBAAgB,EACjC,WAAW,IAAI,cAAc,EAC7B,WAAW,IAAI,cAAc,EAC7B,WAAW,IAAI,cAAc,EAC9B,uBAAuB;AAExB,gBAAgB;AAChB,OAAO,EACL,aAAa,IAAI,gBAAgB,EACjC,aAAa,IAAI,gBAAgB,EACjC,aAAa,IAAI,gBAAgB,EACjC,eAAe,IAAI,kBAAkB,EACrC,YAAY,IAAI,eAAe,EAC/B,iBAAiB,IAAI,oBAAoB,EAC1C,uBAAuB;AAoDxB,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;CACE,CAAC","sourcesContent":["/**\n * MYX Protocol Type Definitions\n *\n * SDK types re-exported with MYX prefix for consistency.\n * Includes types for market display, positions, orders, and trading.\n */\n\nimport type { CaipChainId } from '@metamask/utils';\n\n// ============================================================================\n// Re-export SDK Types with MYX prefix for consistency\n// ============================================================================\n\nexport type { PoolSymbolAllResponse as MYXPoolSymbol } from '@myx-trade/sdk';\nexport type { TickerDataItem as MYXTicker } from '@myx-trade/sdk';\n\n// Position & order types from SDK\nexport type { PositionType as MYXPositionType } from '@myx-trade/sdk';\nexport type { HistoryOrderItem as MYXHistoryOrderItem } from '@myx-trade/sdk';\nexport type { PositionHistoryItem as MYXPositionHistoryItem } from '@myx-trade/sdk';\nexport type { TradeFlowItem as MYXTradeFlowItem } from '@myx-trade/sdk';\nexport type { KlineDataItemType as MYXKlineData } from '@myx-trade/sdk';\n// KlineData is declared but not exported by @myx-trade/sdk — define locally.\n// Property names match the SDK's wire format (single-char keys).\nexport type MYXKlineWsData = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n E: number; // Timestamp\n // eslint-disable-next-line @typescript-eslint/naming-convention\n T: string; // Turnover\n c: string; // Close price\n h: string; // High price\n l: string; // Low price\n o: string; // Open price\n t: number; // Timestamp\n v: string; // Volume\n};\nexport type { KlineDataResponse as MYXKlineDataResponse } from '@myx-trade/sdk';\n\n// SDK enums (re-exported as types since they're const objects in the SDK)\nexport {\n Direction as MYXDirection,\n OrderType as MYXOrderType,\n OperationType as MYXOperationType,\n TriggerType as MYXTriggerType,\n OrderStatus as MYXOrderStatus,\n TimeInForce as MYXTimeInForce,\n} from '@myx-trade/sdk';\n\n// History enums\nexport {\n DirectionEnum as MYXDirectionEnum,\n OrderTypeEnum as MYXOrderTypeEnum,\n OperationEnum as MYXOperationEnum,\n OrderStatusEnum as MYXOrderStatusEnum,\n ExecTypeEnum as MYXExecTypeEnum,\n TradeFlowTypeEnum as MYXTradeFlowTypeEnum,\n} from '@myx-trade/sdk';\n\n// Trading params types\nexport type { PlaceOrderParams as MYXPlaceOrderParams } from '@myx-trade/sdk';\nexport type { PositionTpSlOrderParams as MYXPositionTpSlOrderParams } from '@myx-trade/sdk';\nexport type { GetHistoryOrdersParams as MYXGetHistoryOrdersParams } from '@myx-trade/sdk';\n\n// ============================================================================\n// Network Configuration Types\n// ============================================================================\n\n/**\n * MYX Network type - mainnet or testnet\n */\nexport type MYXNetwork = 'mainnet' | 'testnet';\n\n/**\n * MYX Endpoint configuration for a single network\n */\nexport type MYXEndpointConfig = {\n http: string;\n ws: string;\n};\n\n/**\n * MYX Endpoints for all networks\n */\nexport type MYXEndpoints = {\n mainnet: MYXEndpointConfig;\n testnet: MYXEndpointConfig;\n};\n\n/**\n * MYX Asset network configuration (token addresses per network)\n */\nexport type MYXAssetNetworkConfig = {\n chainId: CaipChainId;\n tokenAddress: string;\n};\n\n/**\n * MYX Asset configurations by network\n */\nexport type MYXAssetConfigs = {\n // USDT is the token symbol used as API key - not a variable name\n // eslint-disable-next-line @typescript-eslint/naming-convention\n USDT: {\n mainnet: MYXAssetNetworkConfig;\n testnet: MYXAssetNetworkConfig;\n };\n};\n\n// ============================================================================\n// Market Overlap Configuration\n// ============================================================================\n\n/**\n * Markets that overlap with HyperLiquid\n * These are excluded from MYX display in v1.0 to avoid confusion\n * In Stage 7, we'll implement market collision handling\n */\nexport const MYX_HL_OVERLAPPING_MARKETS = [\n 'BTC',\n 'ETH',\n 'BNB',\n 'PUMP',\n 'WLFI',\n] as const;\n\nexport type MYXOverlappingMarket = (typeof MYX_HL_OVERLAPPING_MARKETS)[number];\n\n// ============================================================================\n// Auth Configuration (passed from init file via babel-transformed env vars)\n// ============================================================================\n\n/**\n * MYX auth credentials passed at construction time.\n * Eliminates runtime `process.env` lookups — values come from the init file\n * where `process.env.X` is babel-transformed at build time.\n */\nexport type MYXAuthConfig = {\n appId: string;\n apiSecret: string;\n brokerAddress: string;\n};\n\n// ============================================================================\n// Client Service Types\n// ============================================================================\n\n/**\n * Price callback for REST polling\n */\nexport type MYXPriceCallback = (\n tickers: { symbol: string; price: string; change24h: number }[],\n) => void;\n\n/**\n * Error callback for client operations\n */\nexport type MYXErrorCallback = (error: Error) => void;\n"]}
@@ -4,7 +4,8 @@
4
4
  *
5
5
  * Adapters transforming zkLighter REST payloads into the MetaMask Perps API
6
6
  * canonical types. Portable: no mobile-specific imports; formatters are
7
- * injected via the MarketDataFormatters interface.
7
+ * injected via the MarketDataFormatters interface (same pattern as
8
+ * myxAdapter.ts).
8
9
  *
9
10
  * Key differences from HyperLiquid:
10
11
  * - Prices/sizes are human-readable decimal strings in REST responses, but
@@ -1 +1 @@
1
- {"version":3,"file":"lighterAdapter.cjs","sourceRoot":"","sources":["../../src/utils/lighterAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lighter API Adapter Utilities\n *\n * Adapters transforming zkLighter REST payloads into the MetaMask Perps API\n * canonical types. Portable: no mobile-specific imports; formatters are\n * injected via the MarketDataFormatters interface.\n *\n * Key differences from HyperLiquid:\n * - Prices/sizes are human-readable decimal strings in REST responses, but\n * integers scaled by `supported_*_decimals` on the signing path.\n * - Position side is a `sign` field (1 = long, -1 = short).\n * - USDC collateral, single margin mode per account in the POC (cross).\n */\n\nimport {\n LIGHTER_DATA_INTEGRITY_PREFIX,\n LIGHTER_MAX_LEVERAGE,\n LIGHTER_UNSUPPORTED_CAPABILITY_PREFIX,\n parseLighterStrictDecimal,\n} from '../constants/lighterConfig.js';\nimport type {\n AccountState,\n MarketDataFormatters,\n MarketInfo,\n Order,\n OrderFill,\n PerpsMarketData,\n Position,\n PriceUpdate,\n TriggerOrderType,\n} from '../types/index.js';\nimport type {\n LighterApiOrder,\n LighterApiPosition,\n LighterOrderBookDetail,\n LighterOrderBookMeta,\n LighterRestTrade,\n LighterWsTrade,\n LighterSubAccount,\n LighterWsMarketStat,\n LighterWsUserStats,\n} from '../types/lighter-types.js';\n\n/**\n * Parse an account-state number at the untrusted venue boundary. Account\n * balances feed trading availability and must never accept prefix parses or\n * propagate NaN/Infinity into canonical state.\n *\n * @param value - Raw venue decimal string.\n * @param field - Field identity for the integrity error.\n * @returns A finite, fully parsed number.\n */\nfunction parseStrictAccountDecimal(value: string, field: string): number {\n const parsed = parseLighterStrictDecimal(value);\n if (parsed === null || !Number.isFinite(parsed)) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} ${field} '${String(value)}'`,\n );\n }\n return parsed;\n}\n\n/**\n * Format a price change value with sign prefix.\n *\n * @param change - The price change value to format.\n * @param formatters - Injectable formatters for platform-agnostic formatting.\n * @returns The formatted change string with sign and dollar symbol.\n */\nfunction formatChange(\n change: number,\n formatters: MarketDataFormatters,\n): string {\n if (isNaN(change) || !isFinite(change) || change === 0) {\n return '$0.00';\n }\n\n const formatted = formatters.formatPerpsFiat(Math.abs(change), {\n ranges: formatters.priceRangesUniversal,\n });\n const valueWithoutDollar = formatted.replace('$', '');\n return change > 0 ? `+$${valueWithoutDollar}` : `-$${valueWithoutDollar}`;\n}\n\n// ============================================================================\n// Market Transformation\n// ============================================================================\n\n/**\n * Transform a Lighter order book meta entry into canonical MarketInfo.\n *\n * @param market - Market metadata from `GET /api/v1/orderBooks`.\n * @param maxLeverage - Verified per-market leverage from margin metadata.\n * @returns MetaMask Perps API market info object.\n */\nexport function adaptMarketFromLighter(\n market: LighterOrderBookMeta,\n maxLeverage: number,\n): MarketInfo {\n if (!Number.isSafeInteger(maxLeverage) || maxLeverage <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} missing authoritative leverage for ${market.symbol}`,\n );\n }\n return {\n name: market.symbol,\n szDecimals: market.supportedSizeDecimals,\n maxLeverage,\n marginTableId: 0, // Lighter does not use margin tables\n minimumOrderSize: parseFloat(market.minQuoteAmount),\n providerId: 'lighter',\n ...(market.status === 'active' ? {} : { isDelisted: true as const }),\n };\n}\n\n/**\n * Transform a Lighter order book detail into UI-ready PerpsMarketData.\n *\n * @param detail - Market stats from `GET /api/v1/orderBookDetails`.\n * @param formatters - Injectable formatters for platform-agnostic formatting.\n * @returns MetaMask Perps API market data object.\n */\nexport function adaptMarketDataFromLighter(\n detail: LighterOrderBookDetail,\n formatters: MarketDataFormatters,\n): PerpsMarketData {\n const { minInitialMarginFraction } = detail;\n if (\n !Number.isFinite(minInitialMarginFraction) ||\n minInitialMarginFraction === undefined ||\n minInitialMarginFraction <= 0\n ) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} missing authoritative leverage for ${detail.symbol}`,\n );\n }\n const price = detail.lastTradePrice ?? 0;\n const changePercent = detail.dailyPriceChange ?? 0;\n // dailyPriceChange is a percentage; recover the absolute change.\n const changeAbs =\n changePercent === 0 ? 0 : (price * changePercent) / (100 + changePercent);\n\n const maxLeverage = Math.floor(10_000 / minInitialMarginFraction);\n if (!Number.isSafeInteger(maxLeverage) || maxLeverage <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} invalid authoritative leverage for ${detail.symbol}`,\n );\n }\n return {\n symbol: detail.symbol,\n name: detail.symbol,\n maxLeverage: `${maxLeverage}x`,\n price: formatters.formatPerpsFiat(price, {\n ranges: formatters.priceRangesUniversal,\n }),\n change24h: formatChange(changeAbs, formatters),\n change24hPercent: `${changePercent >= 0 ? '+' : ''}${changePercent.toFixed(2)}%`,\n volume: formatters.formatVolume(detail.dailyQuoteTokenVolume ?? 0),\n openInterest: formatters.formatVolume(detail.openInterest ?? 0),\n };\n}\n\n/**\n * Transform a Lighter order book detail into a canonical PriceUpdate for\n * price-stream subscribers (REST polling stands in for a WS feed in the POC).\n *\n * @param detail - Market stats from `GET /api/v1/orderBookDetails`.\n * @param timestamp - Update timestamp (injected for determinism in tests).\n * @returns MetaMask Perps API price update object.\n */\nexport function adaptPriceUpdateFromLighter(\n detail: LighterOrderBookDetail,\n timestamp: number,\n): PriceUpdate {\n return {\n symbol: detail.symbol,\n price: String(detail.lastTradePrice ?? 0),\n timestamp,\n percentChange24h: String(detail.dailyPriceChange ?? 0),\n volume24h: detail.dailyQuoteTokenVolume ?? 0,\n openInterest: detail.openInterest ?? 0,\n isTradable: detail.status === 'active',\n };\n}\n\n/**\n * Transform a `market_stats` WebSocket entry into a canonical PriceUpdate.\n * Richer than the REST fallback: carries mid/bid/ask, mark price, and funding.\n *\n * @param stat - Market stats entry from the `market_stats/all` WS channel.\n * @param timestamp - Update timestamp (injected for determinism in tests).\n * @returns MetaMask Perps API price update object.\n */\nexport function adaptPriceUpdateFromLighterWsStat(\n stat: LighterWsMarketStat,\n timestamp: number,\n): PriceUpdate {\n const bestBid = parseFloat(stat.bestBidPrice);\n const bestAsk = parseFloat(stat.bestAskPrice);\n const spread =\n Number.isFinite(bestBid) && Number.isFinite(bestAsk)\n ? String(bestAsk - bestBid)\n : undefined;\n return {\n symbol: stat.symbol,\n price: stat.midPrice,\n timestamp,\n percentChange24h: String(stat.dailyPriceChange ?? 0),\n bestBid: stat.bestBidPrice,\n bestAsk: stat.bestAskPrice,\n spread,\n markPrice: stat.markPrice,\n funding: parseFloat(stat.currentFundingRate ?? stat.fundingRate ?? '0'),\n openInterest: parseFloat(stat.openInterest ?? '0'),\n volume24h: stat.dailyQuoteTokenVolume ?? 0,\n isTradable: true,\n };\n}\n\n/**\n * Transform a `user_stats` WebSocket stats block into canonical AccountState.\n *\n * @param stats - Stats block from the `user_stats/{account_index}` channel.\n * @returns MetaMask Perps API account state object.\n */\nexport function adaptAccountStateFromLighterUserStats(\n stats: LighterWsUserStats,\n): AccountState {\n const collateral = parseStrictAccountDecimal(\n stats.collateral,\n 'WebSocket collateral',\n );\n const available = parseStrictAccountDecimal(\n stats.availableBalance,\n 'WebSocket available balance',\n );\n const portfolioValue = parseStrictAccountDecimal(\n stats.portfolioValue,\n 'WebSocket portfolio value',\n );\n return {\n totalBalance: String(portfolioValue),\n spendableBalance: String(available),\n withdrawableBalance: String(available),\n marginUsed: String(Math.max(collateral - available, 0)),\n unrealizedPnl: String(portfolioValue - collateral),\n returnOnEquity:\n collateral > 0\n ? String(((portfolioValue - collateral) / collateral) * 100)\n : '0',\n };\n}\n\n/**\n * Transform a Lighter trade (REST `/trades` or WS `account_all_trades`) into\n * a canonical OrderFill from the perspective of `accountIndex`.\n *\n * @param trade - Trade entry (post-camelization).\n * @param symbol - Market symbol resolved from the market id.\n * @param accountIndex - The account whose perspective determines the side.\n * @returns MetaMask Perps API order fill object.\n */\n/**\n * Derive the lifecycle direction of a fill from the venue's\n * position-before context, in the vocabulary client transforms consume\n * (`Open Long`, `Close Short`, `Long > Short`, ...).\n *\n * The venue reports the side's ABSOLUTE position size before the trade and\n * whether its sign changed. Combined with the trade side that is enough:\n * buying reduces shorts and opens longs; selling reduces longs and opens\n * shorts. A partial fill with no sign change is disambiguated by realized\n * pnl (closing realizes pnl, opening does not). Without position context\n * the side-only `Buy`/`Sell` vocabulary is used.\n *\n * @param context - Trade side, size, and position-before data.\n * @param context.isBuy - Whether our side bought.\n * @param context.size - Trade size (base units, absolute).\n * @param context.positionBefore - Our side's absolute position size before.\n * @param context.signChanged - Whether our side's position sign changed.\n * @param context.pnl - Realized pnl for our side.\n * @returns Client-facing direction string.\n */\nexport function deriveLighterFillDirection(context: {\n isBuy: boolean;\n size: number;\n positionBefore: number;\n signChanged: boolean | undefined;\n pnl: number;\n}): string {\n const { isBuy, size, positionBefore, signChanged, pnl } = context;\n if (!Number.isFinite(positionBefore) || signChanged === undefined) {\n return isBuy ? 'Buy' : 'Sell';\n }\n if (positionBefore === 0) {\n return isBuy ? 'Open Long' : 'Open Short';\n }\n if (signChanged) {\n // Crossed past zero → flipped; landed exactly on zero → full close.\n if (size > positionBefore * 1.000001) {\n return isBuy ? 'Short > Long' : 'Long > Short';\n }\n return isBuy ? 'Close Short' : 'Close Long';\n }\n // Partial fill on an existing position: realized pnl proves it reduced.\n if (pnl !== 0) {\n return isBuy ? 'Close Short' : 'Close Long';\n }\n // Zero-pnl partial with no sign change is genuinely ambiguous from this\n // payload (a break-even partial close and an add both fit): fall back to\n // the side-only vocabulary instead of asserting Open without evidence.\n return isBuy ? 'Buy' : 'Sell';\n}\n\n/**\n * Parse one optional venue fee without treating malformed supplied values as\n * an omitted zero.\n *\n * @param value - Raw maker or taker fee.\n * @param tradeId - Trade identity for error context.\n * @param role - Fee role for error context.\n * @returns The finite nonnegative fee, with undefined mapped to venue-zero.\n */\nfunction parseLighterTradeFee(\n value: unknown,\n tradeId: number,\n role: 'maker' | 'taker',\n): number {\n let parsed: number | null;\n if (value === undefined) {\n parsed = 0;\n } else if (typeof value === 'number') {\n parsed = value;\n } else if (typeof value === 'string') {\n parsed = parseLighterStrictDecimal(value);\n } else {\n parsed = null;\n }\n if (parsed === null || !Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${tradeId} has invalid ${role} fee`,\n );\n }\n return parsed;\n}\n\nexport function adaptFillFromLighterTrade(\n trade: LighterRestTrade | LighterWsTrade,\n symbol: string,\n accountIndex: number,\n): OrderFill {\n const identifiers = [\n ['trade id', trade.tradeId],\n ['market id', trade.marketId],\n ['ask id', trade.askId],\n ['bid id', trade.bidId],\n ['ask account id', trade.askAccountId],\n ['bid account id', trade.bidAccountId],\n ] as const;\n for (const [field, value] of identifiers) {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${String(trade.tradeId)} has invalid ${field}`,\n );\n }\n }\n const accountIsAsk = trade.askAccountId === accountIndex;\n const accountIsBid = trade.bidAccountId === accountIndex;\n if (accountIsAsk === accountIsBid) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} account ${accountIndex} is not an unambiguous participant in trade ${trade.tradeId}`,\n );\n }\n const size = parseLighterStrictDecimal(trade.size);\n const price = parseLighterStrictDecimal(trade.price);\n if (size === null || !Number.isFinite(size) || size <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} has invalid size`,\n );\n }\n if (price === null || !Number.isFinite(price) || price <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} has invalid price`,\n );\n }\n if (!Number.isSafeInteger(trade.timestamp) || trade.timestamp < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} has invalid timestamp`,\n );\n }\n if (typeof trade.isMakerAsk !== 'boolean') {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} is missing maker-role context`,\n );\n }\n // Our side's role decides which fee applies; the venue includes the fee\n // fields only when nonzero (zero is the current standard-account truth).\n const accountIsMaker = accountIsAsk === trade.isMakerAsk;\n // Standard accounts (the only supported type — the provider gates\n // Premium at account resolution) pay zero fees, so zero is venue truth.\n // A PRESENT nonzero fee ON OUR SIDE contradicts that gate and its wire\n // unit is unverified: refusing loudly beats silently coercing a real fee\n // to $0. A valid nonzero counterparty fee is allowed, but malformed\n // supplied counterparty data still invalidates the venue row.\n const makerFee = parseLighterTradeFee(trade.makerFee, trade.tradeId, 'maker');\n const takerFee = parseLighterTradeFee(trade.takerFee, trade.tradeId, 'taker');\n const ourFeeNumeric = accountIsMaker ? makerFee : takerFee;\n if (ourFeeNumeric !== 0) {\n throw new Error(\n `${LIGHTER_UNSUPPORTED_CAPABILITY_PREFIX} nonzero fee in trade ${trade.tradeId}: fee unit is unverified`,\n );\n }\n const fee = '0';\n const pnl = accountIsAsk ? trade.askAccountPnl : trade.bidAccountPnl;\n const parsedPnl = parseLighterStrictDecimal(pnl);\n if (\n typeof pnl !== 'string' ||\n parsedPnl === null ||\n !Number.isFinite(parsedPnl)\n ) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} is missing valid account pnl`,\n );\n }\n const isBuy = !accountIsAsk;\n // The account's maker/taker role selects the matching pre-trade position\n // context. Missing context is rejected above instead of becoming neutral\n // history that looks authoritative.\n const positionBeforeRaw = accountIsMaker\n ? trade.makerPositionSizeBefore\n : trade.takerPositionSizeBefore;\n const positionBefore = parseLighterStrictDecimal(positionBeforeRaw);\n const signChanged = accountIsMaker\n ? trade.makerPositionSignChanged\n : trade.takerPositionSignChanged;\n if (\n positionBefore === null ||\n !Number.isFinite(positionBefore) ||\n positionBefore < 0 ||\n typeof signChanged !== 'boolean'\n ) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} is missing valid position context`,\n );\n }\n const direction = deriveLighterFillDirection({\n isBuy,\n size,\n positionBefore,\n signChanged,\n pnl: parsedPnl,\n });\n // Signed pre-trade position, derivable whenever the direction proved the\n // orientation: closing/flipping a long means it was +before, a short\n // -before; opens start from zero. Clients size flip displays from this.\n let startPosition: string | undefined;\n if (direction.startsWith('Open')) {\n startPosition = '0';\n } else if (direction === 'Close Long' || direction === 'Long > Short') {\n startPosition = String(positionBefore);\n } else if (direction === 'Close Short' || direction === 'Short > Long') {\n startPosition = String(-positionBefore);\n }\n return {\n orderId: String(accountIsAsk ? trade.askId : trade.bidId),\n symbol,\n side: accountIsAsk ? 'sell' : 'buy',\n size: trade.size,\n price: trade.price,\n // The venue reports realized pnl per side of the trade.\n pnl,\n direction,\n ...(startPosition === undefined ? {} : { startPosition }),\n fee,\n feeToken: 'USDC',\n timestamp: trade.timestamp,\n // Lets clients apply venue-specific presentation rules (e.g. the\n // ambiguous side-only vocabulary) without guessing the source.\n providerId: 'lighter',\n };\n}\n\n// ============================================================================\n// Position Transformation\n// ============================================================================\n\n/**\n * Transform a Lighter account position into canonical Position.\n *\n * @param position - Position entry from an account payload.\n * @param maxLeverage - Per-market max leverage (venue margin fractions).\n * @returns MetaMask Perps API position object.\n */\nexport function adaptPositionFromLighter(\n position: LighterApiPosition,\n maxLeverage: number = LIGHTER_MAX_LEVERAGE,\n): Position {\n // Venue-input integrity boundary: the REST layer type-casts JSON without\n // runtime validation, and a prefix-parsed '0.1oops' would become a\n // canonical '0.1' that TP/SL cover-sizing and close paths then SIGN.\n // The documented representation is a NONNEGATIVE magnitude with sign\n // exactly 1 or -1: a negative magnitude with sign 1 would flip the\n // canonical direction and make close/TPSL act opposite the real\n // position; sign 0/2/'1' would be silently coerced by a > 0 ternary.\n const magnitude = parseLighterStrictDecimal(position.position);\n if (magnitude === null || !Number.isFinite(magnitude) || magnitude < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} position size '${position.position}' for ${position.symbol}`,\n );\n }\n // The documented contract is sign EXACTLY 1 or -1, including for flat\n // positions (zero magnitudes are filtered downstream); anything else is\n // malformed venue data, never something to coerce.\n if (position.sign !== 1 && position.sign !== -1) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} position sign '${String(position.sign)}' for ${position.symbol}`,\n );\n }\n const size = magnitude * position.sign;\n const positionValue = parseFloat(position.positionValue);\n const marginFraction = parseFloat(position.initialMarginFraction);\n // initialMarginFraction is a percentage (e.g. \"20\" => 5x leverage).\n const leverageValue =\n marginFraction > 0 ? Math.round(100 / marginFraction) : 1;\n const marginUsed =\n marginFraction > 0 ? (positionValue * marginFraction) / 100 : positionValue;\n const unrealizedPnl = parseFloat(position.unrealizedPnl);\n const liquidationPrice = parseFloat(position.liquidationPrice);\n\n return {\n symbol: position.symbol,\n size: String(size),\n entryPrice: position.avgEntryPrice,\n positionValue: position.positionValue,\n unrealizedPnl: position.unrealizedPnl,\n marginUsed: String(marginUsed),\n leverage: {\n // Older venue captures omit marginMode and therefore retain the\n // historical cross default. Current payloads use 1 for isolated.\n type: position.marginMode === 1 ? 'isolated' : 'cross',\n value: leverageValue,\n },\n liquidationPrice:\n isNaN(liquidationPrice) || liquidationPrice === 0\n ? null\n : position.liquidationPrice,\n maxLeverage,\n returnOnEquity:\n marginUsed > 0 ? String((unrealizedPnl / marginUsed) * 100) : '0',\n cumulativeFunding: {\n allTime: '0',\n sinceOpen: '0',\n sinceChange: '0',\n },\n takeProfitCount: 0,\n stopLossCount: 0,\n providerId: 'lighter',\n };\n}\n\n// ============================================================================\n// Account Transformation\n// ============================================================================\n\n/**\n * Transform a Lighter sub-account into canonical AccountState.\n *\n * @param account - Sub-account payload from `account`/`accountsByL1Address`.\n * @returns MetaMask Perps API account state object.\n */\nexport function adaptAccountStateFromLighter(\n account: LighterSubAccount,\n): AccountState {\n const collateral = parseStrictAccountDecimal(\n account.collateral,\n 'REST collateral',\n );\n const available = parseStrictAccountDecimal(\n account.availableBalance,\n 'REST available balance',\n );\n const positions = account.positions ?? [];\n const unrealizedPnl = positions.reduce(\n (sum, position) =>\n sum +\n parseStrictAccountDecimal(\n position.unrealizedPnl,\n `REST unrealized PnL for ${position.symbol}`,\n ),\n 0,\n );\n const marginUsed = Math.max(collateral - available, 0);\n const totalBalance = collateral + unrealizedPnl;\n\n return {\n totalBalance: String(totalBalance),\n spendableBalance: String(available),\n withdrawableBalance: String(available),\n marginUsed: String(marginUsed),\n unrealizedPnl: String(unrealizedPnl),\n returnOnEquity:\n marginUsed > 0 ? String((unrealizedPnl / marginUsed) * 100) : '0',\n providerId: 'lighter',\n };\n}\n\n// ============================================================================\n// Order Transformation\n// ============================================================================\n\n/**\n * Map a Lighter order status string onto the canonical status union.\n *\n * @param status - Raw status from the Lighter API.\n * @returns Canonical order status.\n */\nfunction adaptOrderStatus(status: string): Order['status'] {\n switch (status) {\n case 'open':\n case 'pending':\n case 'in-progress':\n return 'open';\n case 'filled':\n return 'filled';\n case 'canceled':\n case 'cancelled':\n case 'canceled-post-only':\n case 'canceled-reduce-only':\n case 'canceled-position-not-allowed':\n case 'canceled-margin-not-allowed':\n case 'canceled-too-much-slippage':\n case 'canceled-not-enough-liquidity':\n case 'canceled-self-trade':\n case 'canceled-expired':\n case 'canceled-oco':\n case 'canceled-child':\n case 'canceled-liquidation':\n case 'canceled-invalid-balance':\n return 'canceled';\n default:\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} unknown order status '${status}'`,\n );\n }\n}\n\n/**\n * Transform a Lighter active order into canonical Order.\n *\n * @param order - Order entry from `GET /api/v1/accountActiveOrders`.\n * @param symbol - Market symbol for the order's `marketIndex`.\n * @returns MetaMask Perps API order object.\n */\nexport function adaptOrderFromLighter(\n order: LighterApiOrder,\n symbol: string,\n): Order {\n const original = parseFloat(order.initialBaseAmount);\n const remaining = parseFloat(order.remainingBaseAmount);\n const filled = Math.max(original - remaining, 0);\n\n const isTrigger = !['market', 'limit'].includes(order.type);\n const triggerPrice =\n order.triggerPrice !== undefined && parseFloat(order.triggerPrice) > 0\n ? order.triggerPrice\n : undefined;\n // Semantic trigger typing: without it, a TP/SL renders as a generic\n // Limit order in clients. Venue trigger orders execute market-on-trigger\n // (IOC with a protection price), the -limit variants rest at a price.\n const triggerTypeMeta: Record<\n string,\n {\n orderType: 'market' | 'limit';\n triggerOrderType: TriggerOrderType;\n detailed: string;\n }\n > = {\n 'take-profit': {\n orderType: 'market',\n triggerOrderType: 'take_profit_market',\n detailed: 'Take Profit Market',\n },\n 'stop-loss': {\n orderType: 'market',\n triggerOrderType: 'stop_market',\n detailed: 'Stop Market',\n },\n 'take-profit-limit': {\n orderType: 'limit',\n triggerOrderType: 'take_profit_limit',\n detailed: 'Take Profit Limit',\n },\n 'stop-loss-limit': {\n orderType: 'limit',\n triggerOrderType: 'stop_limit',\n detailed: 'Stop Limit',\n },\n };\n const triggerMeta = triggerTypeMeta[order.type];\n\n return {\n orderId: String(order.orderIndex),\n symbol,\n side: order.isAsk ? 'sell' : 'buy',\n orderType:\n triggerMeta?.orderType ?? (order.type === 'market' ? 'market' : 'limit'),\n ...(triggerMeta\n ? {\n triggerOrderType: triggerMeta.triggerOrderType,\n detailedOrderType: triggerMeta.detailed,\n }\n : {}),\n isTrigger,\n size: order.remainingBaseAmount,\n originalSize: order.initialBaseAmount,\n // On trigger orders `price` is the ±5% protection EXECUTION price;\n // the user-facing TP/SL level is `triggerPrice`.\n price: order.price,\n ...(triggerPrice === undefined ? {} : { triggerPrice }),\n filledSize: String(filled),\n remainingSize: order.remainingBaseAmount,\n status: adaptOrderStatus(order.status),\n timestamp: order.timestamp,\n reduceOnly: Boolean(order.reduceOnly),\n providerId: 'lighter',\n };\n}\n"]}
1
+ {"version":3,"file":"lighterAdapter.cjs","sourceRoot":"","sources":["../../src/utils/lighterAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lighter API Adapter Utilities\n *\n * Adapters transforming zkLighter REST payloads into the MetaMask Perps API\n * canonical types. Portable: no mobile-specific imports; formatters are\n * injected via the MarketDataFormatters interface (same pattern as\n * myxAdapter.ts).\n *\n * Key differences from HyperLiquid:\n * - Prices/sizes are human-readable decimal strings in REST responses, but\n * integers scaled by `supported_*_decimals` on the signing path.\n * - Position side is a `sign` field (1 = long, -1 = short).\n * - USDC collateral, single margin mode per account in the POC (cross).\n */\n\nimport {\n LIGHTER_DATA_INTEGRITY_PREFIX,\n LIGHTER_MAX_LEVERAGE,\n LIGHTER_UNSUPPORTED_CAPABILITY_PREFIX,\n parseLighterStrictDecimal,\n} from '../constants/lighterConfig.js';\nimport type {\n AccountState,\n MarketDataFormatters,\n MarketInfo,\n Order,\n OrderFill,\n PerpsMarketData,\n Position,\n PriceUpdate,\n TriggerOrderType,\n} from '../types/index.js';\nimport type {\n LighterApiOrder,\n LighterApiPosition,\n LighterOrderBookDetail,\n LighterOrderBookMeta,\n LighterRestTrade,\n LighterWsTrade,\n LighterSubAccount,\n LighterWsMarketStat,\n LighterWsUserStats,\n} from '../types/lighter-types.js';\n\n/**\n * Parse an account-state number at the untrusted venue boundary. Account\n * balances feed trading availability and must never accept prefix parses or\n * propagate NaN/Infinity into canonical state.\n *\n * @param value - Raw venue decimal string.\n * @param field - Field identity for the integrity error.\n * @returns A finite, fully parsed number.\n */\nfunction parseStrictAccountDecimal(value: string, field: string): number {\n const parsed = parseLighterStrictDecimal(value);\n if (parsed === null || !Number.isFinite(parsed)) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} ${field} '${String(value)}'`,\n );\n }\n return parsed;\n}\n\n/**\n * Format a price change value with sign prefix.\n *\n * @param change - The price change value to format.\n * @param formatters - Injectable formatters for platform-agnostic formatting.\n * @returns The formatted change string with sign and dollar symbol.\n */\nfunction formatChange(\n change: number,\n formatters: MarketDataFormatters,\n): string {\n if (isNaN(change) || !isFinite(change) || change === 0) {\n return '$0.00';\n }\n\n const formatted = formatters.formatPerpsFiat(Math.abs(change), {\n ranges: formatters.priceRangesUniversal,\n });\n const valueWithoutDollar = formatted.replace('$', '');\n return change > 0 ? `+$${valueWithoutDollar}` : `-$${valueWithoutDollar}`;\n}\n\n// ============================================================================\n// Market Transformation\n// ============================================================================\n\n/**\n * Transform a Lighter order book meta entry into canonical MarketInfo.\n *\n * @param market - Market metadata from `GET /api/v1/orderBooks`.\n * @param maxLeverage - Verified per-market leverage from margin metadata.\n * @returns MetaMask Perps API market info object.\n */\nexport function adaptMarketFromLighter(\n market: LighterOrderBookMeta,\n maxLeverage: number,\n): MarketInfo {\n if (!Number.isSafeInteger(maxLeverage) || maxLeverage <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} missing authoritative leverage for ${market.symbol}`,\n );\n }\n return {\n name: market.symbol,\n szDecimals: market.supportedSizeDecimals,\n maxLeverage,\n marginTableId: 0, // Lighter does not use margin tables\n minimumOrderSize: parseFloat(market.minQuoteAmount),\n providerId: 'lighter',\n ...(market.status === 'active' ? {} : { isDelisted: true as const }),\n };\n}\n\n/**\n * Transform a Lighter order book detail into UI-ready PerpsMarketData.\n *\n * @param detail - Market stats from `GET /api/v1/orderBookDetails`.\n * @param formatters - Injectable formatters for platform-agnostic formatting.\n * @returns MetaMask Perps API market data object.\n */\nexport function adaptMarketDataFromLighter(\n detail: LighterOrderBookDetail,\n formatters: MarketDataFormatters,\n): PerpsMarketData {\n const { minInitialMarginFraction } = detail;\n if (\n !Number.isFinite(minInitialMarginFraction) ||\n minInitialMarginFraction === undefined ||\n minInitialMarginFraction <= 0\n ) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} missing authoritative leverage for ${detail.symbol}`,\n );\n }\n const price = detail.lastTradePrice ?? 0;\n const changePercent = detail.dailyPriceChange ?? 0;\n // dailyPriceChange is a percentage; recover the absolute change.\n const changeAbs =\n changePercent === 0 ? 0 : (price * changePercent) / (100 + changePercent);\n\n const maxLeverage = Math.floor(10_000 / minInitialMarginFraction);\n if (!Number.isSafeInteger(maxLeverage) || maxLeverage <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} invalid authoritative leverage for ${detail.symbol}`,\n );\n }\n return {\n symbol: detail.symbol,\n name: detail.symbol,\n maxLeverage: `${maxLeverage}x`,\n price: formatters.formatPerpsFiat(price, {\n ranges: formatters.priceRangesUniversal,\n }),\n change24h: formatChange(changeAbs, formatters),\n change24hPercent: `${changePercent >= 0 ? '+' : ''}${changePercent.toFixed(2)}%`,\n volume: formatters.formatVolume(detail.dailyQuoteTokenVolume ?? 0),\n openInterest: formatters.formatVolume(detail.openInterest ?? 0),\n };\n}\n\n/**\n * Transform a Lighter order book detail into a canonical PriceUpdate for\n * price-stream subscribers (REST polling stands in for a WS feed in the POC).\n *\n * @param detail - Market stats from `GET /api/v1/orderBookDetails`.\n * @param timestamp - Update timestamp (injected for determinism in tests).\n * @returns MetaMask Perps API price update object.\n */\nexport function adaptPriceUpdateFromLighter(\n detail: LighterOrderBookDetail,\n timestamp: number,\n): PriceUpdate {\n return {\n symbol: detail.symbol,\n price: String(detail.lastTradePrice ?? 0),\n timestamp,\n percentChange24h: String(detail.dailyPriceChange ?? 0),\n volume24h: detail.dailyQuoteTokenVolume ?? 0,\n openInterest: detail.openInterest ?? 0,\n isTradable: detail.status === 'active',\n };\n}\n\n/**\n * Transform a `market_stats` WebSocket entry into a canonical PriceUpdate.\n * Richer than the REST fallback: carries mid/bid/ask, mark price, and funding.\n *\n * @param stat - Market stats entry from the `market_stats/all` WS channel.\n * @param timestamp - Update timestamp (injected for determinism in tests).\n * @returns MetaMask Perps API price update object.\n */\nexport function adaptPriceUpdateFromLighterWsStat(\n stat: LighterWsMarketStat,\n timestamp: number,\n): PriceUpdate {\n const bestBid = parseFloat(stat.bestBidPrice);\n const bestAsk = parseFloat(stat.bestAskPrice);\n const spread =\n Number.isFinite(bestBid) && Number.isFinite(bestAsk)\n ? String(bestAsk - bestBid)\n : undefined;\n return {\n symbol: stat.symbol,\n price: stat.midPrice,\n timestamp,\n percentChange24h: String(stat.dailyPriceChange ?? 0),\n bestBid: stat.bestBidPrice,\n bestAsk: stat.bestAskPrice,\n spread,\n markPrice: stat.markPrice,\n funding: parseFloat(stat.currentFundingRate ?? stat.fundingRate ?? '0'),\n openInterest: parseFloat(stat.openInterest ?? '0'),\n volume24h: stat.dailyQuoteTokenVolume ?? 0,\n isTradable: true,\n };\n}\n\n/**\n * Transform a `user_stats` WebSocket stats block into canonical AccountState.\n *\n * @param stats - Stats block from the `user_stats/{account_index}` channel.\n * @returns MetaMask Perps API account state object.\n */\nexport function adaptAccountStateFromLighterUserStats(\n stats: LighterWsUserStats,\n): AccountState {\n const collateral = parseStrictAccountDecimal(\n stats.collateral,\n 'WebSocket collateral',\n );\n const available = parseStrictAccountDecimal(\n stats.availableBalance,\n 'WebSocket available balance',\n );\n const portfolioValue = parseStrictAccountDecimal(\n stats.portfolioValue,\n 'WebSocket portfolio value',\n );\n return {\n totalBalance: String(portfolioValue),\n spendableBalance: String(available),\n withdrawableBalance: String(available),\n marginUsed: String(Math.max(collateral - available, 0)),\n unrealizedPnl: String(portfolioValue - collateral),\n returnOnEquity:\n collateral > 0\n ? String(((portfolioValue - collateral) / collateral) * 100)\n : '0',\n };\n}\n\n/**\n * Transform a Lighter trade (REST `/trades` or WS `account_all_trades`) into\n * a canonical OrderFill from the perspective of `accountIndex`.\n *\n * @param trade - Trade entry (post-camelization).\n * @param symbol - Market symbol resolved from the market id.\n * @param accountIndex - The account whose perspective determines the side.\n * @returns MetaMask Perps API order fill object.\n */\n/**\n * Derive the lifecycle direction of a fill from the venue's\n * position-before context, in the vocabulary client transforms consume\n * (`Open Long`, `Close Short`, `Long > Short`, ...).\n *\n * The venue reports the side's ABSOLUTE position size before the trade and\n * whether its sign changed. Combined with the trade side that is enough:\n * buying reduces shorts and opens longs; selling reduces longs and opens\n * shorts. A partial fill with no sign change is disambiguated by realized\n * pnl (closing realizes pnl, opening does not). Without position context\n * the side-only `Buy`/`Sell` vocabulary is used.\n *\n * @param context - Trade side, size, and position-before data.\n * @param context.isBuy - Whether our side bought.\n * @param context.size - Trade size (base units, absolute).\n * @param context.positionBefore - Our side's absolute position size before.\n * @param context.signChanged - Whether our side's position sign changed.\n * @param context.pnl - Realized pnl for our side.\n * @returns Client-facing direction string.\n */\nexport function deriveLighterFillDirection(context: {\n isBuy: boolean;\n size: number;\n positionBefore: number;\n signChanged: boolean | undefined;\n pnl: number;\n}): string {\n const { isBuy, size, positionBefore, signChanged, pnl } = context;\n if (!Number.isFinite(positionBefore) || signChanged === undefined) {\n return isBuy ? 'Buy' : 'Sell';\n }\n if (positionBefore === 0) {\n return isBuy ? 'Open Long' : 'Open Short';\n }\n if (signChanged) {\n // Crossed past zero → flipped; landed exactly on zero → full close.\n if (size > positionBefore * 1.000001) {\n return isBuy ? 'Short > Long' : 'Long > Short';\n }\n return isBuy ? 'Close Short' : 'Close Long';\n }\n // Partial fill on an existing position: realized pnl proves it reduced.\n if (pnl !== 0) {\n return isBuy ? 'Close Short' : 'Close Long';\n }\n // Zero-pnl partial with no sign change is genuinely ambiguous from this\n // payload (a break-even partial close and an add both fit): fall back to\n // the side-only vocabulary instead of asserting Open without evidence.\n return isBuy ? 'Buy' : 'Sell';\n}\n\n/**\n * Parse one optional venue fee without treating malformed supplied values as\n * an omitted zero.\n *\n * @param value - Raw maker or taker fee.\n * @param tradeId - Trade identity for error context.\n * @param role - Fee role for error context.\n * @returns The finite nonnegative fee, with undefined mapped to venue-zero.\n */\nfunction parseLighterTradeFee(\n value: unknown,\n tradeId: number,\n role: 'maker' | 'taker',\n): number {\n let parsed: number | null;\n if (value === undefined) {\n parsed = 0;\n } else if (typeof value === 'number') {\n parsed = value;\n } else if (typeof value === 'string') {\n parsed = parseLighterStrictDecimal(value);\n } else {\n parsed = null;\n }\n if (parsed === null || !Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${tradeId} has invalid ${role} fee`,\n );\n }\n return parsed;\n}\n\nexport function adaptFillFromLighterTrade(\n trade: LighterRestTrade | LighterWsTrade,\n symbol: string,\n accountIndex: number,\n): OrderFill {\n const identifiers = [\n ['trade id', trade.tradeId],\n ['market id', trade.marketId],\n ['ask id', trade.askId],\n ['bid id', trade.bidId],\n ['ask account id', trade.askAccountId],\n ['bid account id', trade.bidAccountId],\n ] as const;\n for (const [field, value] of identifiers) {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${String(trade.tradeId)} has invalid ${field}`,\n );\n }\n }\n const accountIsAsk = trade.askAccountId === accountIndex;\n const accountIsBid = trade.bidAccountId === accountIndex;\n if (accountIsAsk === accountIsBid) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} account ${accountIndex} is not an unambiguous participant in trade ${trade.tradeId}`,\n );\n }\n const size = parseLighterStrictDecimal(trade.size);\n const price = parseLighterStrictDecimal(trade.price);\n if (size === null || !Number.isFinite(size) || size <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} has invalid size`,\n );\n }\n if (price === null || !Number.isFinite(price) || price <= 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} has invalid price`,\n );\n }\n if (!Number.isSafeInteger(trade.timestamp) || trade.timestamp < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} has invalid timestamp`,\n );\n }\n if (typeof trade.isMakerAsk !== 'boolean') {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} is missing maker-role context`,\n );\n }\n // Our side's role decides which fee applies; the venue includes the fee\n // fields only when nonzero (zero is the current standard-account truth).\n const accountIsMaker = accountIsAsk === trade.isMakerAsk;\n // Standard accounts (the only supported type — the provider gates\n // Premium at account resolution) pay zero fees, so zero is venue truth.\n // A PRESENT nonzero fee ON OUR SIDE contradicts that gate and its wire\n // unit is unverified: refusing loudly beats silently coercing a real fee\n // to $0. A valid nonzero counterparty fee is allowed, but malformed\n // supplied counterparty data still invalidates the venue row.\n const makerFee = parseLighterTradeFee(trade.makerFee, trade.tradeId, 'maker');\n const takerFee = parseLighterTradeFee(trade.takerFee, trade.tradeId, 'taker');\n const ourFeeNumeric = accountIsMaker ? makerFee : takerFee;\n if (ourFeeNumeric !== 0) {\n throw new Error(\n `${LIGHTER_UNSUPPORTED_CAPABILITY_PREFIX} nonzero fee in trade ${trade.tradeId}: fee unit is unverified`,\n );\n }\n const fee = '0';\n const pnl = accountIsAsk ? trade.askAccountPnl : trade.bidAccountPnl;\n const parsedPnl = parseLighterStrictDecimal(pnl);\n if (\n typeof pnl !== 'string' ||\n parsedPnl === null ||\n !Number.isFinite(parsedPnl)\n ) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} is missing valid account pnl`,\n );\n }\n const isBuy = !accountIsAsk;\n // The account's maker/taker role selects the matching pre-trade position\n // context. Missing context is rejected above instead of becoming neutral\n // history that looks authoritative.\n const positionBeforeRaw = accountIsMaker\n ? trade.makerPositionSizeBefore\n : trade.takerPositionSizeBefore;\n const positionBefore = parseLighterStrictDecimal(positionBeforeRaw);\n const signChanged = accountIsMaker\n ? trade.makerPositionSignChanged\n : trade.takerPositionSignChanged;\n if (\n positionBefore === null ||\n !Number.isFinite(positionBefore) ||\n positionBefore < 0 ||\n typeof signChanged !== 'boolean'\n ) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} trade ${trade.tradeId} is missing valid position context`,\n );\n }\n const direction = deriveLighterFillDirection({\n isBuy,\n size,\n positionBefore,\n signChanged,\n pnl: parsedPnl,\n });\n // Signed pre-trade position, derivable whenever the direction proved the\n // orientation: closing/flipping a long means it was +before, a short\n // -before; opens start from zero. Clients size flip displays from this.\n let startPosition: string | undefined;\n if (direction.startsWith('Open')) {\n startPosition = '0';\n } else if (direction === 'Close Long' || direction === 'Long > Short') {\n startPosition = String(positionBefore);\n } else if (direction === 'Close Short' || direction === 'Short > Long') {\n startPosition = String(-positionBefore);\n }\n return {\n orderId: String(accountIsAsk ? trade.askId : trade.bidId),\n symbol,\n side: accountIsAsk ? 'sell' : 'buy',\n size: trade.size,\n price: trade.price,\n // The venue reports realized pnl per side of the trade.\n pnl,\n direction,\n ...(startPosition === undefined ? {} : { startPosition }),\n fee,\n feeToken: 'USDC',\n timestamp: trade.timestamp,\n // Lets clients apply venue-specific presentation rules (e.g. the\n // ambiguous side-only vocabulary) without guessing the source.\n providerId: 'lighter',\n };\n}\n\n// ============================================================================\n// Position Transformation\n// ============================================================================\n\n/**\n * Transform a Lighter account position into canonical Position.\n *\n * @param position - Position entry from an account payload.\n * @param maxLeverage - Per-market max leverage (venue margin fractions).\n * @returns MetaMask Perps API position object.\n */\nexport function adaptPositionFromLighter(\n position: LighterApiPosition,\n maxLeverage: number = LIGHTER_MAX_LEVERAGE,\n): Position {\n // Venue-input integrity boundary: the REST layer type-casts JSON without\n // runtime validation, and a prefix-parsed '0.1oops' would become a\n // canonical '0.1' that TP/SL cover-sizing and close paths then SIGN.\n // The documented representation is a NONNEGATIVE magnitude with sign\n // exactly 1 or -1: a negative magnitude with sign 1 would flip the\n // canonical direction and make close/TPSL act opposite the real\n // position; sign 0/2/'1' would be silently coerced by a > 0 ternary.\n const magnitude = parseLighterStrictDecimal(position.position);\n if (magnitude === null || !Number.isFinite(magnitude) || magnitude < 0) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} position size '${position.position}' for ${position.symbol}`,\n );\n }\n // The documented contract is sign EXACTLY 1 or -1, including for flat\n // positions (zero magnitudes are filtered downstream); anything else is\n // malformed venue data, never something to coerce.\n if (position.sign !== 1 && position.sign !== -1) {\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} position sign '${String(position.sign)}' for ${position.symbol}`,\n );\n }\n const size = magnitude * position.sign;\n const positionValue = parseFloat(position.positionValue);\n const marginFraction = parseFloat(position.initialMarginFraction);\n // initialMarginFraction is a percentage (e.g. \"20\" => 5x leverage).\n const leverageValue =\n marginFraction > 0 ? Math.round(100 / marginFraction) : 1;\n const marginUsed =\n marginFraction > 0 ? (positionValue * marginFraction) / 100 : positionValue;\n const unrealizedPnl = parseFloat(position.unrealizedPnl);\n const liquidationPrice = parseFloat(position.liquidationPrice);\n\n return {\n symbol: position.symbol,\n size: String(size),\n entryPrice: position.avgEntryPrice,\n positionValue: position.positionValue,\n unrealizedPnl: position.unrealizedPnl,\n marginUsed: String(marginUsed),\n leverage: {\n // Older venue captures omit marginMode and therefore retain the\n // historical cross default. Current payloads use 1 for isolated.\n type: position.marginMode === 1 ? 'isolated' : 'cross',\n value: leverageValue,\n },\n liquidationPrice:\n isNaN(liquidationPrice) || liquidationPrice === 0\n ? null\n : position.liquidationPrice,\n maxLeverage,\n returnOnEquity:\n marginUsed > 0 ? String((unrealizedPnl / marginUsed) * 100) : '0',\n cumulativeFunding: {\n allTime: '0',\n sinceOpen: '0',\n sinceChange: '0',\n },\n takeProfitCount: 0,\n stopLossCount: 0,\n providerId: 'lighter',\n };\n}\n\n// ============================================================================\n// Account Transformation\n// ============================================================================\n\n/**\n * Transform a Lighter sub-account into canonical AccountState.\n *\n * @param account - Sub-account payload from `account`/`accountsByL1Address`.\n * @returns MetaMask Perps API account state object.\n */\nexport function adaptAccountStateFromLighter(\n account: LighterSubAccount,\n): AccountState {\n const collateral = parseStrictAccountDecimal(\n account.collateral,\n 'REST collateral',\n );\n const available = parseStrictAccountDecimal(\n account.availableBalance,\n 'REST available balance',\n );\n const positions = account.positions ?? [];\n const unrealizedPnl = positions.reduce(\n (sum, position) =>\n sum +\n parseStrictAccountDecimal(\n position.unrealizedPnl,\n `REST unrealized PnL for ${position.symbol}`,\n ),\n 0,\n );\n const marginUsed = Math.max(collateral - available, 0);\n const totalBalance = collateral + unrealizedPnl;\n\n return {\n totalBalance: String(totalBalance),\n spendableBalance: String(available),\n withdrawableBalance: String(available),\n marginUsed: String(marginUsed),\n unrealizedPnl: String(unrealizedPnl),\n returnOnEquity:\n marginUsed > 0 ? String((unrealizedPnl / marginUsed) * 100) : '0',\n providerId: 'lighter',\n };\n}\n\n// ============================================================================\n// Order Transformation\n// ============================================================================\n\n/**\n * Map a Lighter order status string onto the canonical status union.\n *\n * @param status - Raw status from the Lighter API.\n * @returns Canonical order status.\n */\nfunction adaptOrderStatus(status: string): Order['status'] {\n switch (status) {\n case 'open':\n case 'pending':\n case 'in-progress':\n return 'open';\n case 'filled':\n return 'filled';\n case 'canceled':\n case 'cancelled':\n case 'canceled-post-only':\n case 'canceled-reduce-only':\n case 'canceled-position-not-allowed':\n case 'canceled-margin-not-allowed':\n case 'canceled-too-much-slippage':\n case 'canceled-not-enough-liquidity':\n case 'canceled-self-trade':\n case 'canceled-expired':\n case 'canceled-oco':\n case 'canceled-child':\n case 'canceled-liquidation':\n case 'canceled-invalid-balance':\n return 'canceled';\n default:\n throw new Error(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} unknown order status '${status}'`,\n );\n }\n}\n\n/**\n * Transform a Lighter active order into canonical Order.\n *\n * @param order - Order entry from `GET /api/v1/accountActiveOrders`.\n * @param symbol - Market symbol for the order's `marketIndex`.\n * @returns MetaMask Perps API order object.\n */\nexport function adaptOrderFromLighter(\n order: LighterApiOrder,\n symbol: string,\n): Order {\n const original = parseFloat(order.initialBaseAmount);\n const remaining = parseFloat(order.remainingBaseAmount);\n const filled = Math.max(original - remaining, 0);\n\n const isTrigger = !['market', 'limit'].includes(order.type);\n const triggerPrice =\n order.triggerPrice !== undefined && parseFloat(order.triggerPrice) > 0\n ? order.triggerPrice\n : undefined;\n // Semantic trigger typing: without it, a TP/SL renders as a generic\n // Limit order in clients. Venue trigger orders execute market-on-trigger\n // (IOC with a protection price), the -limit variants rest at a price.\n const triggerTypeMeta: Record<\n string,\n {\n orderType: 'market' | 'limit';\n triggerOrderType: TriggerOrderType;\n detailed: string;\n }\n > = {\n 'take-profit': {\n orderType: 'market',\n triggerOrderType: 'take_profit_market',\n detailed: 'Take Profit Market',\n },\n 'stop-loss': {\n orderType: 'market',\n triggerOrderType: 'stop_market',\n detailed: 'Stop Market',\n },\n 'take-profit-limit': {\n orderType: 'limit',\n triggerOrderType: 'take_profit_limit',\n detailed: 'Take Profit Limit',\n },\n 'stop-loss-limit': {\n orderType: 'limit',\n triggerOrderType: 'stop_limit',\n detailed: 'Stop Limit',\n },\n };\n const triggerMeta = triggerTypeMeta[order.type];\n\n return {\n orderId: String(order.orderIndex),\n symbol,\n side: order.isAsk ? 'sell' : 'buy',\n orderType:\n triggerMeta?.orderType ?? (order.type === 'market' ? 'market' : 'limit'),\n ...(triggerMeta\n ? {\n triggerOrderType: triggerMeta.triggerOrderType,\n detailedOrderType: triggerMeta.detailed,\n }\n : {}),\n isTrigger,\n size: order.remainingBaseAmount,\n originalSize: order.initialBaseAmount,\n // On trigger orders `price` is the ±5% protection EXECUTION price;\n // the user-facing TP/SL level is `triggerPrice`.\n price: order.price,\n ...(triggerPrice === undefined ? {} : { triggerPrice }),\n filledSize: String(filled),\n remainingSize: order.remainingBaseAmount,\n status: adaptOrderStatus(order.status),\n timestamp: order.timestamp,\n reduceOnly: Boolean(order.reduceOnly),\n providerId: 'lighter',\n };\n}\n"]}
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Adapters transforming zkLighter REST payloads into the MetaMask Perps API
5
5
  * canonical types. Portable: no mobile-specific imports; formatters are
6
- * injected via the MarketDataFormatters interface.
6
+ * injected via the MarketDataFormatters interface (same pattern as
7
+ * myxAdapter.ts).
7
8
  *
8
9
  * Key differences from HyperLiquid:
9
10
  * - Prices/sizes are human-readable decimal strings in REST responses, but
@@ -1 +1 @@
1
- {"version":3,"file":"lighterAdapter.d.cts","sourceRoot":"","sources":["../../src/utils/lighterAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EAEZ,2BAA0B;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,mCAAkC;AA+CnC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,oBAAoB,GAC/B,eAAe,CAmCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,MAAM,GAChB,WAAW,CAUb;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,MAAM,GAChB,WAAW,CAqBb;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,kBAAkB,GACxB,YAAY,CAwBd;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,MAAM,CAuBT;AAkCD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,gBAAgB,GAAG,cAAc,EACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,SAAS,CAkIX;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAA6B,GACzC,QAAQ,CA8DV;AAMD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,iBAAiB,GACzB,YAAY,CAgCd;AA0CD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,GACb,KAAK,CAsEP"}
1
+ {"version":3,"file":"lighterAdapter.d.cts","sourceRoot":"","sources":["../../src/utils/lighterAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EAEZ,2BAA0B;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,mCAAkC;AA+CnC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,oBAAoB,GAC/B,eAAe,CAmCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,MAAM,GAChB,WAAW,CAUb;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,MAAM,GAChB,WAAW,CAqBb;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,kBAAkB,GACxB,YAAY,CAwBd;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,MAAM,CAuBT;AAkCD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,gBAAgB,GAAG,cAAc,EACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,SAAS,CAkIX;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAA6B,GACzC,QAAQ,CA8DV;AAMD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,iBAAiB,GACzB,YAAY,CAgCd;AA0CD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,GACb,KAAK,CAsEP"}
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Adapters transforming zkLighter REST payloads into the MetaMask Perps API
5
5
  * canonical types. Portable: no mobile-specific imports; formatters are
6
- * injected via the MarketDataFormatters interface.
6
+ * injected via the MarketDataFormatters interface (same pattern as
7
+ * myxAdapter.ts).
7
8
  *
8
9
  * Key differences from HyperLiquid:
9
10
  * - Prices/sizes are human-readable decimal strings in REST responses, but
@@ -1 +1 @@
1
- {"version":3,"file":"lighterAdapter.d.mts","sourceRoot":"","sources":["../../src/utils/lighterAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EAEZ,2BAA0B;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,mCAAkC;AA+CnC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,oBAAoB,GAC/B,eAAe,CAmCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,MAAM,GAChB,WAAW,CAUb;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,MAAM,GAChB,WAAW,CAqBb;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,kBAAkB,GACxB,YAAY,CAwBd;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,MAAM,CAuBT;AAkCD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,gBAAgB,GAAG,cAAc,EACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,SAAS,CAkIX;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAA6B,GACzC,QAAQ,CA8DV;AAMD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,iBAAiB,GACzB,YAAY,CAgCd;AA0CD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,GACb,KAAK,CAsEP"}
1
+ {"version":3,"file":"lighterAdapter.d.mts","sourceRoot":"","sources":["../../src/utils/lighterAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EAEZ,2BAA0B;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,mCAAkC;AA+CnC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,oBAAoB,GAC/B,eAAe,CAmCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,MAAM,GAChB,WAAW,CAUb;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,MAAM,GAChB,WAAW,CAqBb;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,kBAAkB,GACxB,YAAY,CAwBd;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,MAAM,CAuBT;AAkCD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,gBAAgB,GAAG,cAAc,EACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,SAAS,CAkIX;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAA6B,GACzC,QAAQ,CA8DV;AAMD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,iBAAiB,GACzB,YAAY,CAgCd;AA0CD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,GACb,KAAK,CAsEP"}
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Adapters transforming zkLighter REST payloads into the MetaMask Perps API
5
5
  * canonical types. Portable: no mobile-specific imports; formatters are
6
- * injected via the MarketDataFormatters interface.
6
+ * injected via the MarketDataFormatters interface (same pattern as
7
+ * myxAdapter.ts).
7
8
  *
8
9
  * Key differences from HyperLiquid:
9
10
  * - Prices/sizes are human-readable decimal strings in REST responses, but