@metamask-previews/perps-controller 17.2.0-preview-c6cdff1dd → 17.3.0-preview-d3f9964be
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -1
- package/dist/services/LighterClientService.d.ts.map +1 -1
- package/dist/services/LighterClientService.js +1 -0
- package/dist/services/LighterClientService.js.map +1 -1
- package/dist/types/lighter-types.d.ts +2 -0
- package/dist/types/lighter-types.d.ts.map +1 -1
- package/dist/types/lighter-types.js.map +1 -1
- package/dist/utils/lighterAdapter.d.ts.map +1 -1
- package/dist/utils/lighterAdapter.js +4 -1
- package/dist/utils/lighterAdapter.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [17.3.0]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Use Lighter's reported executed amount for order filled sizes so canceled orders do not appear fully filled. ([#10308](https://github.com/MetaMask/core/pull/10308))
|
|
15
|
+
|
|
10
16
|
## [17.2.0]
|
|
11
17
|
|
|
12
18
|
### Changed
|
|
@@ -932,7 +938,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
932
938
|
|
|
933
939
|
- Bump `@metamask/controller-utils` from `^11.18.0` to `^11.19.0` ([#7995](https://github.com/MetaMask/core/pull/7995))
|
|
934
940
|
|
|
935
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/perps-controller@17.
|
|
941
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/perps-controller@17.3.0...HEAD
|
|
942
|
+
[17.3.0]: https://github.com/MetaMask/core/compare/@metamask/perps-controller@17.2.0...@metamask/perps-controller@17.3.0
|
|
936
943
|
[17.2.0]: https://github.com/MetaMask/core/compare/@metamask/perps-controller@17.1.0...@metamask/perps-controller@17.2.0
|
|
937
944
|
[17.1.0]: https://github.com/MetaMask/core/compare/@metamask/perps-controller@17.0.0...@metamask/perps-controller@17.1.0
|
|
938
945
|
[17.0.0]: https://github.com/MetaMask/core/compare/@metamask/perps-controller@16.2.0...@metamask/perps-controller@17.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterClientService.d.ts","sourceRoot":"","sources":["../../src/services/LighterClientService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqBH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EACV,sBAAsB,EACtB,kCAAkC,EAClC,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAE/B,sBAAsB,EACtB,6BAA6B,EAC7B,6BAA6B,EAC7B,kBAAkB,EAClB,+BAA+B,EAC/B,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAElB,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"LighterClientService.d.ts","sourceRoot":"","sources":["../../src/services/LighterClientService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqBH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EACV,sBAAsB,EACtB,kCAAkC,EAClC,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAE/B,sBAAsB,EACtB,6BAA6B,EAC7B,6BAA6B,EAC7B,kBAAkB,EAClB,+BAA+B,EAC/B,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAElB,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AAmYnC;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAa9D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAIzC;CACF;AAED;;GAEG;AACH,qBAAa,oBAAoB;;IAS/B,YAAY,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,EAG1E;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;;OAKG;IACG,aAAa,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAiBzE;IAED;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAKpE;IAED;;;;;OAKG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,sBAAsB,CAAC,CAKjC;IAED;;;;;OAKG;IACG,sBAAsB,CAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kCAAkC,CAAC,CAK7C;IAED;;;;;;OAMG;IACG,UAAU,CACd,YAAY,EAAE,MAAM,EACpB,WAAW,SAAM,GAChB,OAAO,CAAC,sBAAsB,CAAC,CAKjC;IAED;;;;;;OAMG;IACG,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,wBAAwB,CAAC,CAKnC;IAED;;;;;;;;;;;;OAYG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAYnE;IAED;;;;;;;OAOG;IACG,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,SAAM,GACb,OAAO,CAAC,2BAA2B,CAAC,CAMtC;IAED;;;;;;;;;;;OAWG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAK,EACV,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,6BAA6B,CAAC,CAQxC;IAED;;;;;;;;OAQG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,6BAA6B,CAAC,CAMxC;IAED;;;;;;OAMG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,8BAA8B,CAAC,CAMzC;IAED;;;;;;OAMG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,8BAA8B,CAAC,CAMzC;IAED;;;;;;;OAOG;IACG,SAAS,CACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;IAED;;;;;;;OAOG;IACG,mBAAmB,CACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAK,GACT,OAAO,CAAC,+BAA+B,CAAC,CAM1C;IAED;;;;;;;;;OASG;IACG,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAM7B;IAED;;;;;;;;;OASG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,sBAAsB,CAAC,CAKjC;IAED;;;;;;OAMG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgB3E;CAsEF"}
|
|
@@ -141,6 +141,7 @@ const OrderStruct = type({
|
|
|
141
141
|
ownerAccountIndex: NonNegativeIntegerStruct,
|
|
142
142
|
initialBaseAmount: PositiveDecimalStringStruct,
|
|
143
143
|
remainingBaseAmount: NonNegativeDecimalStringStruct,
|
|
144
|
+
filledBaseAmount: optional(NonNegativeDecimalStringStruct),
|
|
144
145
|
price: PositiveDecimalStringStruct,
|
|
145
146
|
isAsk: boolean(),
|
|
146
147
|
type: string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterClientService.js","sourceRoot":"","sources":["../../src/services/LighterClientService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lighter Client Service\n *\n * Thin REST client for the zkLighter API. No SDK dependency — endpoints are\n * called with the platform `fetch` global. Each successful endpoint response\n * is decoded before it reaches provider signing or trading logic.\n *\n * Endpoints used (https://apidocs.lighter.xyz):\n * - GET /api/v1/orderBooks market metadata\n * - GET /api/v1/orderBookDetails market stats\n * - GET /api/v1/account account (+positions) by index\n * - GET /api/v1/accountsByL1Address account discovery\n * - GET /api/v1/apikeys registered venue keys\n * - GET /api/v1/nextNonce per-key nonce\n * - GET /api/v1/accountActiveOrders open orders (auth token header)\n * - POST /api/v1/sendTx submit signed L2 transaction\n */\n\nimport type { Struct } from '@metamask/superstruct';\nimport {\n array,\n assert,\n boolean,\n define,\n optional,\n record,\n refine,\n string,\n type,\n union,\n} from '@metamask/superstruct';\n\nimport {\n getLighterHttpEndpoint,\n LIGHTER_DATA_INTEGRITY_PREFIX,\n LIGHTER_HTTP_TIMEOUT_MS,\n} from '../constants/lighterConfig.js';\nimport type { PerpsPlatformDependencies } from '../types/index.js';\nimport type {\n LighterAccountResponse,\n LighterAccountsByL1AddressResponse,\n LighterActiveOrdersResponse,\n LighterApiKeysResponse,\n LighterNetwork,\n LighterNextNonceResponse,\n LighterTxLookupResponse,\n LighterOrderBookMeta,\n LighterOrderBookDetailsResponse,\n LighterOrderBooksResponse,\n LighterCandlesResponse,\n LighterDepositHistoryResponse,\n LighterInactiveOrdersResponse,\n LighterPnlResponse,\n LighterPositionFundingsResponse,\n LighterSendTxResponse,\n LighterTradesResponse,\n LighterTradesQuery,\n LighterTransferType,\n LighterTransferHistoryResponse,\n LighterWithdrawHistoryResponse,\n} from '../types/lighter-types.js';\n\n/**\n * Duration market metadata stays cached before a refetch.\n */\nconst MARKETS_CACHE_TTL_MS = 5 * 60 * 1000;\n\nconst FiniteNumberStruct = define<number>('finite number', (value) =>\n typeof value === 'number' ? Number.isFinite(value) : false,\n);\nconst SafeIntegerStruct = define<number>('safe integer', (value) =>\n typeof value === 'number' ? Number.isSafeInteger(value) : false,\n);\nconst NonNegativeIntegerStruct = define<number>(\n 'non-negative safe integer',\n (value) =>\n typeof value === 'number'\n ? Number.isSafeInteger(value) && value >= 0\n : false,\n);\nconst parseStrictDecimalString = (value: unknown): number | null => {\n if (\n typeof value !== 'string' ||\n !/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/u.test(value)\n ) {\n return null;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n};\nconst SignedDecimalStringStruct = define<string>(\n 'finite decimal string',\n (value) => parseStrictDecimalString(value) !== null,\n);\nconst NonNegativeDecimalStringStruct = define<string>(\n 'non-negative finite decimal string',\n (value) => {\n const parsed = parseStrictDecimalString(value);\n return parsed !== null && parsed >= 0;\n },\n);\nconst TransferTypeStruct = define<LighterTransferType>(\n 'Lighter transfer type',\n (value) => value === 'L2TransferInflow' || value === 'L2TransferOutflow',\n);\nconst PositiveDecimalStringStruct = define<string>(\n 'positive finite decimal string',\n (value) => {\n const parsed = parseStrictDecimalString(value);\n return parsed !== null && parsed > 0;\n },\n);\nconst NonNegativeFiniteNumberStruct = define<number>(\n 'non-negative finite number',\n (value) => typeof value === 'number' && Number.isFinite(value) && value >= 0,\n);\nconst NonNegativeMarginFractionStruct = define<number>(\n 'margin fraction in [0, 10000]',\n (value) =>\n typeof value === 'number' &&\n Number.isSafeInteger(value) &&\n value >= 0 &&\n value <= 10_000,\n);\nconst NonNegativeFinancialNumberStruct = union([\n NonNegativeFiniteNumberStruct,\n NonNegativeDecimalStringStruct,\n]);\nconst BaseResponseStruct = type({\n code: SafeIntegerStruct,\n message: optional(string()),\n});\nconst PositionStruct = type({\n marketId: NonNegativeIntegerStruct,\n symbol: string(),\n initialMarginFraction: NonNegativeDecimalStringStruct,\n openOrderCount: NonNegativeIntegerStruct,\n sign: SafeIntegerStruct,\n position: NonNegativeDecimalStringStruct,\n avgEntryPrice: NonNegativeDecimalStringStruct,\n positionValue: NonNegativeDecimalStringStruct,\n unrealizedPnl: SignedDecimalStringStruct,\n realizedPnl: SignedDecimalStringStruct,\n liquidationPrice: NonNegativeDecimalStringStruct,\n marginMode: optional(SafeIntegerStruct),\n});\nconst AccountStruct = type({\n code: SafeIntegerStruct,\n accountType: SafeIntegerStruct,\n index: NonNegativeIntegerStruct,\n l1Address: string(),\n cancelAllTime: NonNegativeIntegerStruct,\n totalOrderCount: NonNegativeIntegerStruct,\n pendingOrderCount: NonNegativeIntegerStruct,\n status: SafeIntegerStruct,\n collateral: NonNegativeDecimalStringStruct,\n availableBalance: NonNegativeDecimalStringStruct,\n positions: optional(array(PositionStruct)),\n});\n// The address-discovery endpoint is an identity lookup, not a financial read:\n// live responses can carry sparse balance fields (for example an empty\n// `availableBalance`). Validate only the fields its sole consumer needs. Full\n// account reads retain AccountStruct and its strict financial validation.\nconst AccountSummaryStruct = type({\n accountType: SafeIntegerStruct,\n index: NonNegativeIntegerStruct,\n l1Address: string(),\n});\nconst MarketBaseStruct = type({\n symbol: string(),\n marketId: NonNegativeIntegerStruct,\n marketType: string(),\n status: string(),\n takerFee: SignedDecimalStringStruct,\n makerFee: SignedDecimalStringStruct,\n minBaseAmount: NonNegativeDecimalStringStruct,\n minQuoteAmount: NonNegativeDecimalStringStruct,\n supportedSizeDecimals: NonNegativeIntegerStruct,\n supportedPriceDecimals: NonNegativeIntegerStruct,\n supportedQuoteDecimals: NonNegativeIntegerStruct,\n});\nconst hasValidMarketMinimums = (\n market: Pick<\n LighterOrderBookMeta,\n 'status' | 'minBaseAmount' | 'minQuoteAmount'\n >,\n): boolean =>\n market.status === 'inactive' ||\n [market.minBaseAmount, market.minQuoteAmount].every((value) => {\n const parsed = parseStrictDecimalString(value);\n return parsed !== null && parsed > 0;\n });\nconst MarketStruct = refine(\n MarketBaseStruct,\n 'positive minimum amounts for tradable markets',\n hasValidMarketMinimums,\n);\nconst MarketDetailBaseStruct = type({\n ...MarketBaseStruct.schema,\n lastTradePrice: NonNegativeFiniteNumberStruct,\n defaultInitialMarginFraction: optional(NonNegativeMarginFractionStruct),\n minInitialMarginFraction: optional(NonNegativeMarginFractionStruct),\n maintenanceMarginFraction: optional(NonNegativeMarginFractionStruct),\n dailyTradesCount: NonNegativeFiniteNumberStruct,\n dailyBaseTokenVolume: NonNegativeFiniteNumberStruct,\n dailyQuoteTokenVolume: NonNegativeFiniteNumberStruct,\n dailyPriceLow: NonNegativeFiniteNumberStruct,\n dailyPriceHigh: NonNegativeFiniteNumberStruct,\n dailyPriceChange: FiniteNumberStruct,\n openInterest: NonNegativeFiniteNumberStruct,\n dailyChart: record(string(), FiniteNumberStruct),\n});\nconst hasValidMarketMarginFractions = (market: {\n status: string;\n defaultInitialMarginFraction?: number;\n minInitialMarginFraction?: number;\n maintenanceMarginFraction?: number;\n}): boolean =>\n market.status === 'inactive' ||\n [\n market.defaultInitialMarginFraction,\n market.minInitialMarginFraction,\n market.maintenanceMarginFraction,\n ].every((value) => value === undefined || value > 0);\nconst MarketDetailStruct = refine(\n refine(\n MarketDetailBaseStruct,\n 'positive minimum amounts for tradable markets',\n hasValidMarketMinimums,\n ),\n 'positive margin fractions for tradable markets',\n hasValidMarketMarginFractions,\n);\nconst OrderStruct = type({\n orderIndex: NonNegativeIntegerStruct,\n clientOrderIndex: NonNegativeIntegerStruct,\n marketIndex: NonNegativeIntegerStruct,\n ownerAccountIndex: NonNegativeIntegerStruct,\n initialBaseAmount: PositiveDecimalStringStruct,\n remainingBaseAmount: NonNegativeDecimalStringStruct,\n price: PositiveDecimalStringStruct,\n isAsk: boolean(),\n type: string(),\n timeInForce: string(),\n reduceOnly: union([FiniteNumberStruct, boolean()]),\n status: string(),\n orderExpiry: SafeIntegerStruct,\n timestamp: NonNegativeIntegerStruct,\n triggerPrice: optional(NonNegativeDecimalStringStruct),\n orderId: optional(string()),\n parentOrderIndex: optional(NonNegativeIntegerStruct),\n parentOrderId: optional(string()),\n toCancelOrderId0: optional(string()),\n toTriggerOrderId0: optional(string()),\n toTriggerOrderId1: optional(string()),\n});\nconst TradeStruct = type({\n tradeId: NonNegativeIntegerStruct,\n txHash: string(),\n type: string(),\n marketId: NonNegativeIntegerStruct,\n size: PositiveDecimalStringStruct,\n price: PositiveDecimalStringStruct,\n usdAmount: PositiveDecimalStringStruct,\n askId: NonNegativeIntegerStruct,\n bidId: NonNegativeIntegerStruct,\n askAccountId: NonNegativeIntegerStruct,\n bidAccountId: NonNegativeIntegerStruct,\n isMakerAsk: boolean(),\n timestamp: NonNegativeIntegerStruct,\n askAccountPnl: optional(SignedDecimalStringStruct),\n bidAccountPnl: optional(SignedDecimalStringStruct),\n takerFee: optional(NonNegativeFinancialNumberStruct),\n makerFee: optional(NonNegativeFinancialNumberStruct),\n takerPositionSizeBefore: NonNegativeDecimalStringStruct,\n makerPositionSizeBefore: NonNegativeDecimalStringStruct,\n takerPositionSignChanged: boolean(),\n makerPositionSignChanged: boolean(),\n});\n\nconst ResponseStructs = {\n orderBooks: type({\n ...BaseResponseStruct.schema,\n orderBooks: array(MarketStruct),\n }),\n orderBookDetails: type({\n ...BaseResponseStruct.schema,\n orderBookDetails: array(MarketDetailStruct),\n }),\n account: type({\n ...BaseResponseStruct.schema,\n accounts: array(AccountStruct),\n }),\n accountsByAddress: type({\n ...BaseResponseStruct.schema,\n l1Address: string(),\n subAccounts: array(AccountSummaryStruct),\n }),\n apiKeys: type({\n ...BaseResponseStruct.schema,\n apiKeys: array(\n type({\n accountIndex: NonNegativeIntegerStruct,\n apiKeyIndex: NonNegativeIntegerStruct,\n nonce: NonNegativeIntegerStruct,\n publicKey: string(),\n }),\n ),\n }),\n nextNonce: type({\n ...BaseResponseStruct.schema,\n nonce: NonNegativeIntegerStruct,\n }),\n transaction: type({\n ...BaseResponseStruct.schema,\n hash: string(),\n accountIndex: NonNegativeIntegerStruct,\n apiKeyIndex: NonNegativeIntegerStruct,\n nonce: NonNegativeIntegerStruct,\n status: SafeIntegerStruct,\n }),\n sendTransaction: type({\n ...BaseResponseStruct.schema,\n txHash: string(),\n }),\n activeOrders: type({\n ...BaseResponseStruct.schema,\n orders: array(OrderStruct),\n }),\n inactiveOrders: type({\n ...BaseResponseStruct.schema,\n nextCursor: optional(string()),\n orders: array(OrderStruct),\n }),\n deposits: type({\n ...BaseResponseStruct.schema,\n deposits: array(\n type({\n id: string(),\n assetId: NonNegativeIntegerStruct,\n amount: PositiveDecimalStringStruct,\n timestamp: NonNegativeIntegerStruct,\n status: string(),\n l1TxHash: string(),\n }),\n ),\n cursor: optional(string()),\n }),\n withdrawals: type({\n ...BaseResponseStruct.schema,\n withdraws: array(\n type({\n id: string(),\n assetId: NonNegativeIntegerStruct,\n amount: PositiveDecimalStringStruct,\n timestamp: NonNegativeIntegerStruct,\n status: string(),\n type: string(),\n l1TxHash: string(),\n }),\n ),\n cursor: optional(string()),\n }),\n transfers: type({\n ...BaseResponseStruct.schema,\n transfers: array(\n type({\n id: string(),\n assetId: NonNegativeIntegerStruct,\n amount: PositiveDecimalStringStruct,\n fee: NonNegativeDecimalStringStruct,\n timestamp: NonNegativeIntegerStruct,\n type: TransferTypeStruct,\n fromL1Address: string(),\n toL1Address: string(),\n fromAccountIndex: NonNegativeIntegerStruct,\n toAccountIndex: NonNegativeIntegerStruct,\n txHash: string(),\n }),\n ),\n cursor: optional(string()),\n }),\n trades: type({\n ...BaseResponseStruct.schema,\n nextCursor: optional(string()),\n trades: array(TradeStruct),\n }),\n fundings: type({\n ...BaseResponseStruct.schema,\n positionFundings: array(\n type({\n timestamp: NonNegativeIntegerStruct,\n marketId: NonNegativeIntegerStruct,\n fundingId: NonNegativeIntegerStruct,\n change: SignedDecimalStringStruct,\n rate: SignedDecimalStringStruct,\n positionSize: NonNegativeDecimalStringStruct,\n positionSide: string(),\n }),\n ),\n }),\n pnl: type({\n ...BaseResponseStruct.schema,\n resolution: optional(string()),\n pnl: optional(\n array(\n type({\n timestamp: NonNegativeIntegerStruct,\n tradePnl: FiniteNumberStruct,\n inflow: FiniteNumberStruct,\n outflow: FiniteNumberStruct,\n volume: FiniteNumberStruct,\n }),\n ),\n ),\n }),\n candles: type({\n ...BaseResponseStruct.schema,\n r: optional(string()),\n c: optional(\n array(\n type({\n t: NonNegativeIntegerStruct,\n o: FiniteNumberStruct,\n h: FiniteNumberStruct,\n l: FiniteNumberStruct,\n c: FiniteNumberStruct,\n v: FiniteNumberStruct,\n }),\n ),\n ),\n }),\n} as const;\n\n/**\n * Convert a snake_case wire key to camelCase.\n *\n * @param key - Wire key (e.g. `min_base_amount`).\n * @returns camelCase key (e.g. `minBaseAmount`).\n */\nfunction toCamelKey(key: string): string {\n return key.replace(/_([a-z0-9])/gu, (_match, char: string) =>\n char.toUpperCase(),\n );\n}\n\n/**\n * Recursively convert all object keys from snake_case to camelCase.\n * The zkLighter wire format is snake_case; parsed shapes in this package\n * follow camelCase conventions (see types/lighter-types.ts).\n *\n * @param value - Parsed JSON value.\n * @returns The value with camelCase keys.\n */\nexport function convertKeysToCamelCase(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(convertKeysToCamelCase);\n }\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n toCamelKey(key),\n convertKeysToCamelCase(entry),\n ]),\n );\n }\n return value;\n}\n\n/**\n * Error thrown for non-2xx HTTP responses or API-level error codes.\n */\nexport class LighterApiError extends Error {\n readonly code: number | undefined;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'LighterApiError';\n this.code = code;\n }\n}\n\n/**\n * REST client for the zkLighter API.\n */\nexport class LighterClientService {\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #isTestnet: boolean;\n\n #marketsCache: LighterOrderBookMeta[] | null = null;\n\n #marketsCacheTime = 0;\n\n constructor(deps: PerpsPlatformDependencies, config: { isTestnet: boolean }) {\n this.#deps = deps;\n this.#isTestnet = config.isTestnet;\n }\n\n get network(): LighterNetwork {\n return this.#isTestnet ? 'testnet' : 'mainnet';\n }\n\n get baseUrl(): string {\n return getLighterHttpEndpoint(this.network);\n }\n\n /**\n * Fetch market metadata, cached for 5 minutes.\n *\n * @param forceRefresh - Skip the cache and refetch.\n * @returns Market metadata entries.\n */\n async getOrderBooks(forceRefresh = false): Promise<LighterOrderBookMeta[]> {\n const now = Date.now();\n if (\n !forceRefresh &&\n this.#marketsCache &&\n now - this.#marketsCacheTime < MARKETS_CACHE_TTL_MS\n ) {\n return this.#marketsCache;\n }\n\n const response = await this.#get<LighterOrderBooksResponse>(\n '/api/v1/orderBooks',\n ResponseStructs.orderBooks,\n );\n this.#marketsCache = response.orderBooks;\n this.#marketsCacheTime = now;\n return response.orderBooks;\n }\n\n /**\n * Fetch market stats for all markets.\n *\n * @returns Order book details entries.\n */\n async getOrderBookDetails(): Promise<LighterOrderBookDetailsResponse> {\n return await this.#get<LighterOrderBookDetailsResponse>(\n '/api/v1/orderBookDetails',\n ResponseStructs.orderBookDetails,\n );\n }\n\n /**\n * Fetch an account (including positions) by its Lighter index.\n *\n * @param accountIndex - The Lighter account index.\n * @returns Account payload.\n */\n async getAccountByIndex(\n accountIndex: number,\n ): Promise<LighterAccountResponse> {\n return await this.#get<LighterAccountResponse>(\n `/api/v1/account?by=index&value=${accountIndex}`,\n ResponseStructs.account,\n );\n }\n\n /**\n * Discover Lighter accounts owned by an L1 address.\n *\n * @param l1Address - The owning EVM address.\n * @returns Accounts payload.\n */\n async getAccountsByL1Address(\n l1Address: string,\n ): Promise<LighterAccountsByL1AddressResponse> {\n return await this.#get<LighterAccountsByL1AddressResponse>(\n `/api/v1/accountsByL1Address?l1_address=${l1Address}`,\n ResponseStructs.accountsByAddress,\n );\n }\n\n /**\n * Fetch registered API keys for an account.\n *\n * @param accountIndex - The Lighter account index.\n * @param apiKeyIndex - Key slot, or 255 for all slots.\n * @returns API keys payload.\n */\n async getApiKeys(\n accountIndex: number,\n apiKeyIndex = 255,\n ): Promise<LighterApiKeysResponse> {\n return await this.#get<LighterApiKeysResponse>(\n `/api/v1/apikeys?account_index=${accountIndex}&api_key_index=${apiKeyIndex}`,\n ResponseStructs.apiKeys,\n );\n }\n\n /**\n * Fetch the next nonce for a key slot.\n *\n * @param accountIndex - The Lighter account index.\n * @param apiKeyIndex - Key slot.\n * @returns Next nonce payload.\n */\n async getNextNonce(\n accountIndex: number,\n apiKeyIndex: number,\n ): Promise<LighterNextNonceResponse> {\n return await this.#get<LighterNextNonceResponse>(\n `/api/v1/nextNonce?account_index=${accountIndex}&api_key_index=${apiKeyIndex}`,\n ResponseStructs.nextNonce,\n );\n }\n\n /**\n * Look up a transaction by its exact hash (`GET /api/v1/tx`). Used to\n * resolve submission-acceptance ambiguity authoritatively: an exact-hash\n * match proves the signed payload reached the sequencer.\n *\n * Contract: a venue-confirmed \"transaction not found\" (API error code\n * 21500) resolves to NULL; transport failures and every other API error\n * RETHROW — they are ambiguity, never evidence of non-acceptance.\n *\n * @param txHash - The signed transaction hash.\n * @returns The venue's transaction payload, or null when the venue\n * confirms the hash is unknown.\n */\n async getTx(txHash: string): Promise<LighterTxLookupResponse | null> {\n try {\n return await this.#get<LighterTxLookupResponse>(\n `/api/v1/tx?by=hash&value=${encodeURIComponent(txHash)}`,\n ResponseStructs.transaction,\n );\n } catch (error) {\n if (error instanceof LighterApiError && error.code === 21500) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Fetch active (open) orders for an account.\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer (`_createAuthToken`).\n * @param marketId - Optional market filter (255 = all markets).\n * @returns Active orders payload.\n */\n async getActiveOrders(\n accountIndex: number,\n authToken: string,\n marketId = 255,\n ): Promise<LighterActiveOrdersResponse> {\n return await this.#get<LighterActiveOrdersResponse>(\n `/api/v1/accountActiveOrders?account_index=${accountIndex}&market_id=${marketId}`,\n ResponseStructs.activeOrders,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch historical (inactive) orders: filled and canceled lifecycle\n * states, newest first (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param limit - Maximum entries per page.\n * @param cursor - Pagination cursor from a previous page's `nextCursor`.\n * @param marketId - Optional market filter (official `market_id` query\n * param) — sharply bounds history scans to one symbol.\n * @returns Inactive orders payload.\n */\n async getInactiveOrders(\n accountIndex: number,\n authToken: string,\n limit = 50,\n cursor?: string,\n marketId?: number,\n ): Promise<LighterInactiveOrdersResponse> {\n return await this.#get<LighterInactiveOrdersResponse>(\n `/api/v1/accountInactiveOrders?account_index=${accountIndex}&limit=${limit}${\n cursor === undefined ? '' : `&cursor=${encodeURIComponent(cursor)}`\n }${marketId === undefined ? '' : `&market_id=${marketId}`}`,\n ResponseStructs.inactiveOrders,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch L1→L2 deposit history (auth token required). The venue requires\n * both the account index and its L1 address on this endpoint.\n *\n * @param accountIndex - The Lighter account index.\n * @param l1Address - The account's L1 address.\n * @param authToken - Auth token minted by the signer.\n * @returns Deposit history payload (newest first, cursor-paged).\n */\n async getDepositHistory(\n accountIndex: number,\n l1Address: string,\n authToken: string,\n ): Promise<LighterDepositHistoryResponse> {\n return await this.#get<LighterDepositHistoryResponse>(\n `/api/v1/deposit/history?account_index=${accountIndex}&l1_address=${l1Address}`,\n ResponseStructs.deposits,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch L2→L1 withdrawal history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @returns Withdrawal history payload (newest first, cursor-paged).\n */\n async getWithdrawHistory(\n accountIndex: number,\n authToken: string,\n ): Promise<LighterWithdrawHistoryResponse> {\n return await this.#get<LighterWithdrawHistoryResponse>(\n `/api/v1/withdraw/history?account_index=${accountIndex}`,\n ResponseStructs.withdrawals,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch L2 transfer history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @returns Transfer history payload (newest first, cursor-paged).\n */\n async getTransferHistory(\n accountIndex: number,\n authToken: string,\n ): Promise<LighterTransferHistoryResponse> {\n return await this.#get<LighterTransferHistoryResponse>(\n `/api/v1/transfer/history?account_index=${accountIndex}`,\n ResponseStructs.transfers,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch account trade history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param query - Pagination, range, and market filters.\n * @returns Trades payload (newest first).\n */\n async getTrades(\n accountIndex: number,\n authToken: string,\n query: LighterTradesQuery,\n ): Promise<LighterTradesResponse> {\n const { limit, cursor, from, marketId } = query;\n return await this.#get<LighterTradesResponse>(\n `/api/v1/trades?sort_by=timestamp&sort_dir=desc&limit=${limit}&account_index=${accountIndex}&market_type=perp${\n cursor === undefined ? '' : `&cursor=${encodeURIComponent(cursor)}`\n }${from === undefined ? '' : `&from=${from}`}${\n marketId === undefined ? '' : `&market_id=${marketId}`\n }`,\n ResponseStructs.trades,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch user funding payment history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param limit - Max entries.\n * @returns Position fundings payload.\n */\n async getPositionFundings(\n accountIndex: number,\n authToken: string,\n limit = 50,\n ): Promise<LighterPositionFundingsResponse> {\n return await this.#get<LighterPositionFundingsResponse>(\n `/api/v1/positionFunding?account_index=${accountIndex}&market_id=255&limit=${limit}&sort_by=timestamp&side=all`,\n ResponseStructs.fundings,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch account PnL history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param startTimestamp - Range start (ms).\n * @param endTimestamp - Range end (ms).\n * @param countBack - Records counted back from range end.\n * @returns PnL payload.\n */\n async getPnl(\n accountIndex: number,\n authToken: string,\n startTimestamp: number,\n endTimestamp: number,\n countBack: number,\n ): Promise<LighterPnlResponse> {\n return await this.#get<LighterPnlResponse>(\n `/api/v1/pnl?by=index&value=${accountIndex}&resolution=1d&count_back=${countBack}&start_timestamp=${startTimestamp}&end_timestamp=${endTimestamp}`,\n ResponseStructs.pnl,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch an OHLCV candle series for a market.\n *\n * @param marketId - Numeric Lighter market id.\n * @param resolution - Candle resolution (e.g. `1m`, `15m`, `1h`, `1d`).\n * @param startTimestamp - Range start (ms).\n * @param endTimestamp - Range end (ms).\n * @param countBack - Number of candles counted back from the range end.\n * @returns Candle series payload.\n */\n async getCandles(\n marketId: number,\n resolution: string,\n startTimestamp: number,\n endTimestamp: number,\n countBack: number,\n ): Promise<LighterCandlesResponse> {\n return await this.#get<LighterCandlesResponse>(\n `/api/v1/candles?market_id=${marketId}&resolution=${resolution}&start_timestamp=${startTimestamp}&end_timestamp=${endTimestamp}&count_back=${countBack}`,\n ResponseStructs.candles,\n );\n }\n\n /**\n * Submit a signed L2 transaction.\n *\n * @param txType - L2 transaction type code (see lighterConfig).\n * @param txInfo - Serialized signed transaction JSON.\n * @returns Send result payload.\n */\n async sendTx(txType: number, txInfo: string): Promise<LighterSendTxResponse> {\n const body = new URLSearchParams({\n tx_type: String(txType),\n tx_info: txInfo,\n });\n\n const response = await this.#request<LighterSendTxResponse>(\n '/api/v1/sendTx',\n {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n },\n ResponseStructs.sendTransaction,\n );\n return response;\n }\n\n readonly #get = async <Result extends { code: number; message?: string }>(\n path: string,\n responseStruct: Struct<Result, unknown>,\n headers?: Record<string, string>,\n ): Promise<Result> => {\n return await this.#request<Result>(\n path,\n { method: 'GET', headers },\n responseStruct,\n );\n };\n\n readonly #request = async <Result extends { code: number; message?: string }>(\n path: string,\n init: { method: string; headers?: Record<string, string>; body?: string },\n responseStruct: Struct<Result, unknown>,\n ): Promise<Result> => {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n LIGHTER_HTTP_TIMEOUT_MS,\n );\n\n try {\n const response = await fetch(url, {\n method: init.method,\n headers: init.headers,\n body: init.body,\n signal: controller.signal,\n });\n\n const payload: unknown = convertKeysToCamelCase(await response.json());\n assert(payload, BaseResponseStruct);\n\n // Lighter returns HTTP 200 with an application-level error code, and\n // 4xx/5xx with `{code, message}` bodies — treat both uniformly.\n if (!response.ok || payload.code !== 200) {\n throw new LighterApiError(\n payload.message ?? `Lighter API error (HTTP ${response.status})`,\n payload.code ?? response.status,\n );\n }\n try {\n assert(payload, responseStruct);\n } catch (error) {\n throw new LighterApiError(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} response for ${path}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n return payload;\n } catch (error) {\n if (error instanceof LighterApiError) {\n throw error;\n }\n this.#deps.debugLogger?.log?.('LighterClientService request failed', {\n url,\n error,\n });\n throw new LighterApiError(\n error instanceof Error ? error.message : String(error),\n );\n } finally {\n clearTimeout(timeout);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"LighterClientService.js","sourceRoot":"","sources":["../../src/services/LighterClientService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lighter Client Service\n *\n * Thin REST client for the zkLighter API. No SDK dependency — endpoints are\n * called with the platform `fetch` global. Each successful endpoint response\n * is decoded before it reaches provider signing or trading logic.\n *\n * Endpoints used (https://apidocs.lighter.xyz):\n * - GET /api/v1/orderBooks market metadata\n * - GET /api/v1/orderBookDetails market stats\n * - GET /api/v1/account account (+positions) by index\n * - GET /api/v1/accountsByL1Address account discovery\n * - GET /api/v1/apikeys registered venue keys\n * - GET /api/v1/nextNonce per-key nonce\n * - GET /api/v1/accountActiveOrders open orders (auth token header)\n * - POST /api/v1/sendTx submit signed L2 transaction\n */\n\nimport type { Struct } from '@metamask/superstruct';\nimport {\n array,\n assert,\n boolean,\n define,\n optional,\n record,\n refine,\n string,\n type,\n union,\n} from '@metamask/superstruct';\n\nimport {\n getLighterHttpEndpoint,\n LIGHTER_DATA_INTEGRITY_PREFIX,\n LIGHTER_HTTP_TIMEOUT_MS,\n} from '../constants/lighterConfig.js';\nimport type { PerpsPlatformDependencies } from '../types/index.js';\nimport type {\n LighterAccountResponse,\n LighterAccountsByL1AddressResponse,\n LighterActiveOrdersResponse,\n LighterApiKeysResponse,\n LighterNetwork,\n LighterNextNonceResponse,\n LighterTxLookupResponse,\n LighterOrderBookMeta,\n LighterOrderBookDetailsResponse,\n LighterOrderBooksResponse,\n LighterCandlesResponse,\n LighterDepositHistoryResponse,\n LighterInactiveOrdersResponse,\n LighterPnlResponse,\n LighterPositionFundingsResponse,\n LighterSendTxResponse,\n LighterTradesResponse,\n LighterTradesQuery,\n LighterTransferType,\n LighterTransferHistoryResponse,\n LighterWithdrawHistoryResponse,\n} from '../types/lighter-types.js';\n\n/**\n * Duration market metadata stays cached before a refetch.\n */\nconst MARKETS_CACHE_TTL_MS = 5 * 60 * 1000;\n\nconst FiniteNumberStruct = define<number>('finite number', (value) =>\n typeof value === 'number' ? Number.isFinite(value) : false,\n);\nconst SafeIntegerStruct = define<number>('safe integer', (value) =>\n typeof value === 'number' ? Number.isSafeInteger(value) : false,\n);\nconst NonNegativeIntegerStruct = define<number>(\n 'non-negative safe integer',\n (value) =>\n typeof value === 'number'\n ? Number.isSafeInteger(value) && value >= 0\n : false,\n);\nconst parseStrictDecimalString = (value: unknown): number | null => {\n if (\n typeof value !== 'string' ||\n !/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/u.test(value)\n ) {\n return null;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n};\nconst SignedDecimalStringStruct = define<string>(\n 'finite decimal string',\n (value) => parseStrictDecimalString(value) !== null,\n);\nconst NonNegativeDecimalStringStruct = define<string>(\n 'non-negative finite decimal string',\n (value) => {\n const parsed = parseStrictDecimalString(value);\n return parsed !== null && parsed >= 0;\n },\n);\nconst TransferTypeStruct = define<LighterTransferType>(\n 'Lighter transfer type',\n (value) => value === 'L2TransferInflow' || value === 'L2TransferOutflow',\n);\nconst PositiveDecimalStringStruct = define<string>(\n 'positive finite decimal string',\n (value) => {\n const parsed = parseStrictDecimalString(value);\n return parsed !== null && parsed > 0;\n },\n);\nconst NonNegativeFiniteNumberStruct = define<number>(\n 'non-negative finite number',\n (value) => typeof value === 'number' && Number.isFinite(value) && value >= 0,\n);\nconst NonNegativeMarginFractionStruct = define<number>(\n 'margin fraction in [0, 10000]',\n (value) =>\n typeof value === 'number' &&\n Number.isSafeInteger(value) &&\n value >= 0 &&\n value <= 10_000,\n);\nconst NonNegativeFinancialNumberStruct = union([\n NonNegativeFiniteNumberStruct,\n NonNegativeDecimalStringStruct,\n]);\nconst BaseResponseStruct = type({\n code: SafeIntegerStruct,\n message: optional(string()),\n});\nconst PositionStruct = type({\n marketId: NonNegativeIntegerStruct,\n symbol: string(),\n initialMarginFraction: NonNegativeDecimalStringStruct,\n openOrderCount: NonNegativeIntegerStruct,\n sign: SafeIntegerStruct,\n position: NonNegativeDecimalStringStruct,\n avgEntryPrice: NonNegativeDecimalStringStruct,\n positionValue: NonNegativeDecimalStringStruct,\n unrealizedPnl: SignedDecimalStringStruct,\n realizedPnl: SignedDecimalStringStruct,\n liquidationPrice: NonNegativeDecimalStringStruct,\n marginMode: optional(SafeIntegerStruct),\n});\nconst AccountStruct = type({\n code: SafeIntegerStruct,\n accountType: SafeIntegerStruct,\n index: NonNegativeIntegerStruct,\n l1Address: string(),\n cancelAllTime: NonNegativeIntegerStruct,\n totalOrderCount: NonNegativeIntegerStruct,\n pendingOrderCount: NonNegativeIntegerStruct,\n status: SafeIntegerStruct,\n collateral: NonNegativeDecimalStringStruct,\n availableBalance: NonNegativeDecimalStringStruct,\n positions: optional(array(PositionStruct)),\n});\n// The address-discovery endpoint is an identity lookup, not a financial read:\n// live responses can carry sparse balance fields (for example an empty\n// `availableBalance`). Validate only the fields its sole consumer needs. Full\n// account reads retain AccountStruct and its strict financial validation.\nconst AccountSummaryStruct = type({\n accountType: SafeIntegerStruct,\n index: NonNegativeIntegerStruct,\n l1Address: string(),\n});\nconst MarketBaseStruct = type({\n symbol: string(),\n marketId: NonNegativeIntegerStruct,\n marketType: string(),\n status: string(),\n takerFee: SignedDecimalStringStruct,\n makerFee: SignedDecimalStringStruct,\n minBaseAmount: NonNegativeDecimalStringStruct,\n minQuoteAmount: NonNegativeDecimalStringStruct,\n supportedSizeDecimals: NonNegativeIntegerStruct,\n supportedPriceDecimals: NonNegativeIntegerStruct,\n supportedQuoteDecimals: NonNegativeIntegerStruct,\n});\nconst hasValidMarketMinimums = (\n market: Pick<\n LighterOrderBookMeta,\n 'status' | 'minBaseAmount' | 'minQuoteAmount'\n >,\n): boolean =>\n market.status === 'inactive' ||\n [market.minBaseAmount, market.minQuoteAmount].every((value) => {\n const parsed = parseStrictDecimalString(value);\n return parsed !== null && parsed > 0;\n });\nconst MarketStruct = refine(\n MarketBaseStruct,\n 'positive minimum amounts for tradable markets',\n hasValidMarketMinimums,\n);\nconst MarketDetailBaseStruct = type({\n ...MarketBaseStruct.schema,\n lastTradePrice: NonNegativeFiniteNumberStruct,\n defaultInitialMarginFraction: optional(NonNegativeMarginFractionStruct),\n minInitialMarginFraction: optional(NonNegativeMarginFractionStruct),\n maintenanceMarginFraction: optional(NonNegativeMarginFractionStruct),\n dailyTradesCount: NonNegativeFiniteNumberStruct,\n dailyBaseTokenVolume: NonNegativeFiniteNumberStruct,\n dailyQuoteTokenVolume: NonNegativeFiniteNumberStruct,\n dailyPriceLow: NonNegativeFiniteNumberStruct,\n dailyPriceHigh: NonNegativeFiniteNumberStruct,\n dailyPriceChange: FiniteNumberStruct,\n openInterest: NonNegativeFiniteNumberStruct,\n dailyChart: record(string(), FiniteNumberStruct),\n});\nconst hasValidMarketMarginFractions = (market: {\n status: string;\n defaultInitialMarginFraction?: number;\n minInitialMarginFraction?: number;\n maintenanceMarginFraction?: number;\n}): boolean =>\n market.status === 'inactive' ||\n [\n market.defaultInitialMarginFraction,\n market.minInitialMarginFraction,\n market.maintenanceMarginFraction,\n ].every((value) => value === undefined || value > 0);\nconst MarketDetailStruct = refine(\n refine(\n MarketDetailBaseStruct,\n 'positive minimum amounts for tradable markets',\n hasValidMarketMinimums,\n ),\n 'positive margin fractions for tradable markets',\n hasValidMarketMarginFractions,\n);\nconst OrderStruct = type({\n orderIndex: NonNegativeIntegerStruct,\n clientOrderIndex: NonNegativeIntegerStruct,\n marketIndex: NonNegativeIntegerStruct,\n ownerAccountIndex: NonNegativeIntegerStruct,\n initialBaseAmount: PositiveDecimalStringStruct,\n remainingBaseAmount: NonNegativeDecimalStringStruct,\n filledBaseAmount: optional(NonNegativeDecimalStringStruct),\n price: PositiveDecimalStringStruct,\n isAsk: boolean(),\n type: string(),\n timeInForce: string(),\n reduceOnly: union([FiniteNumberStruct, boolean()]),\n status: string(),\n orderExpiry: SafeIntegerStruct,\n timestamp: NonNegativeIntegerStruct,\n triggerPrice: optional(NonNegativeDecimalStringStruct),\n orderId: optional(string()),\n parentOrderIndex: optional(NonNegativeIntegerStruct),\n parentOrderId: optional(string()),\n toCancelOrderId0: optional(string()),\n toTriggerOrderId0: optional(string()),\n toTriggerOrderId1: optional(string()),\n});\nconst TradeStruct = type({\n tradeId: NonNegativeIntegerStruct,\n txHash: string(),\n type: string(),\n marketId: NonNegativeIntegerStruct,\n size: PositiveDecimalStringStruct,\n price: PositiveDecimalStringStruct,\n usdAmount: PositiveDecimalStringStruct,\n askId: NonNegativeIntegerStruct,\n bidId: NonNegativeIntegerStruct,\n askAccountId: NonNegativeIntegerStruct,\n bidAccountId: NonNegativeIntegerStruct,\n isMakerAsk: boolean(),\n timestamp: NonNegativeIntegerStruct,\n askAccountPnl: optional(SignedDecimalStringStruct),\n bidAccountPnl: optional(SignedDecimalStringStruct),\n takerFee: optional(NonNegativeFinancialNumberStruct),\n makerFee: optional(NonNegativeFinancialNumberStruct),\n takerPositionSizeBefore: NonNegativeDecimalStringStruct,\n makerPositionSizeBefore: NonNegativeDecimalStringStruct,\n takerPositionSignChanged: boolean(),\n makerPositionSignChanged: boolean(),\n});\n\nconst ResponseStructs = {\n orderBooks: type({\n ...BaseResponseStruct.schema,\n orderBooks: array(MarketStruct),\n }),\n orderBookDetails: type({\n ...BaseResponseStruct.schema,\n orderBookDetails: array(MarketDetailStruct),\n }),\n account: type({\n ...BaseResponseStruct.schema,\n accounts: array(AccountStruct),\n }),\n accountsByAddress: type({\n ...BaseResponseStruct.schema,\n l1Address: string(),\n subAccounts: array(AccountSummaryStruct),\n }),\n apiKeys: type({\n ...BaseResponseStruct.schema,\n apiKeys: array(\n type({\n accountIndex: NonNegativeIntegerStruct,\n apiKeyIndex: NonNegativeIntegerStruct,\n nonce: NonNegativeIntegerStruct,\n publicKey: string(),\n }),\n ),\n }),\n nextNonce: type({\n ...BaseResponseStruct.schema,\n nonce: NonNegativeIntegerStruct,\n }),\n transaction: type({\n ...BaseResponseStruct.schema,\n hash: string(),\n accountIndex: NonNegativeIntegerStruct,\n apiKeyIndex: NonNegativeIntegerStruct,\n nonce: NonNegativeIntegerStruct,\n status: SafeIntegerStruct,\n }),\n sendTransaction: type({\n ...BaseResponseStruct.schema,\n txHash: string(),\n }),\n activeOrders: type({\n ...BaseResponseStruct.schema,\n orders: array(OrderStruct),\n }),\n inactiveOrders: type({\n ...BaseResponseStruct.schema,\n nextCursor: optional(string()),\n orders: array(OrderStruct),\n }),\n deposits: type({\n ...BaseResponseStruct.schema,\n deposits: array(\n type({\n id: string(),\n assetId: NonNegativeIntegerStruct,\n amount: PositiveDecimalStringStruct,\n timestamp: NonNegativeIntegerStruct,\n status: string(),\n l1TxHash: string(),\n }),\n ),\n cursor: optional(string()),\n }),\n withdrawals: type({\n ...BaseResponseStruct.schema,\n withdraws: array(\n type({\n id: string(),\n assetId: NonNegativeIntegerStruct,\n amount: PositiveDecimalStringStruct,\n timestamp: NonNegativeIntegerStruct,\n status: string(),\n type: string(),\n l1TxHash: string(),\n }),\n ),\n cursor: optional(string()),\n }),\n transfers: type({\n ...BaseResponseStruct.schema,\n transfers: array(\n type({\n id: string(),\n assetId: NonNegativeIntegerStruct,\n amount: PositiveDecimalStringStruct,\n fee: NonNegativeDecimalStringStruct,\n timestamp: NonNegativeIntegerStruct,\n type: TransferTypeStruct,\n fromL1Address: string(),\n toL1Address: string(),\n fromAccountIndex: NonNegativeIntegerStruct,\n toAccountIndex: NonNegativeIntegerStruct,\n txHash: string(),\n }),\n ),\n cursor: optional(string()),\n }),\n trades: type({\n ...BaseResponseStruct.schema,\n nextCursor: optional(string()),\n trades: array(TradeStruct),\n }),\n fundings: type({\n ...BaseResponseStruct.schema,\n positionFundings: array(\n type({\n timestamp: NonNegativeIntegerStruct,\n marketId: NonNegativeIntegerStruct,\n fundingId: NonNegativeIntegerStruct,\n change: SignedDecimalStringStruct,\n rate: SignedDecimalStringStruct,\n positionSize: NonNegativeDecimalStringStruct,\n positionSide: string(),\n }),\n ),\n }),\n pnl: type({\n ...BaseResponseStruct.schema,\n resolution: optional(string()),\n pnl: optional(\n array(\n type({\n timestamp: NonNegativeIntegerStruct,\n tradePnl: FiniteNumberStruct,\n inflow: FiniteNumberStruct,\n outflow: FiniteNumberStruct,\n volume: FiniteNumberStruct,\n }),\n ),\n ),\n }),\n candles: type({\n ...BaseResponseStruct.schema,\n r: optional(string()),\n c: optional(\n array(\n type({\n t: NonNegativeIntegerStruct,\n o: FiniteNumberStruct,\n h: FiniteNumberStruct,\n l: FiniteNumberStruct,\n c: FiniteNumberStruct,\n v: FiniteNumberStruct,\n }),\n ),\n ),\n }),\n} as const;\n\n/**\n * Convert a snake_case wire key to camelCase.\n *\n * @param key - Wire key (e.g. `min_base_amount`).\n * @returns camelCase key (e.g. `minBaseAmount`).\n */\nfunction toCamelKey(key: string): string {\n return key.replace(/_([a-z0-9])/gu, (_match, char: string) =>\n char.toUpperCase(),\n );\n}\n\n/**\n * Recursively convert all object keys from snake_case to camelCase.\n * The zkLighter wire format is snake_case; parsed shapes in this package\n * follow camelCase conventions (see types/lighter-types.ts).\n *\n * @param value - Parsed JSON value.\n * @returns The value with camelCase keys.\n */\nexport function convertKeysToCamelCase(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(convertKeysToCamelCase);\n }\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n toCamelKey(key),\n convertKeysToCamelCase(entry),\n ]),\n );\n }\n return value;\n}\n\n/**\n * Error thrown for non-2xx HTTP responses or API-level error codes.\n */\nexport class LighterApiError extends Error {\n readonly code: number | undefined;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'LighterApiError';\n this.code = code;\n }\n}\n\n/**\n * REST client for the zkLighter API.\n */\nexport class LighterClientService {\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #isTestnet: boolean;\n\n #marketsCache: LighterOrderBookMeta[] | null = null;\n\n #marketsCacheTime = 0;\n\n constructor(deps: PerpsPlatformDependencies, config: { isTestnet: boolean }) {\n this.#deps = deps;\n this.#isTestnet = config.isTestnet;\n }\n\n get network(): LighterNetwork {\n return this.#isTestnet ? 'testnet' : 'mainnet';\n }\n\n get baseUrl(): string {\n return getLighterHttpEndpoint(this.network);\n }\n\n /**\n * Fetch market metadata, cached for 5 minutes.\n *\n * @param forceRefresh - Skip the cache and refetch.\n * @returns Market metadata entries.\n */\n async getOrderBooks(forceRefresh = false): Promise<LighterOrderBookMeta[]> {\n const now = Date.now();\n if (\n !forceRefresh &&\n this.#marketsCache &&\n now - this.#marketsCacheTime < MARKETS_CACHE_TTL_MS\n ) {\n return this.#marketsCache;\n }\n\n const response = await this.#get<LighterOrderBooksResponse>(\n '/api/v1/orderBooks',\n ResponseStructs.orderBooks,\n );\n this.#marketsCache = response.orderBooks;\n this.#marketsCacheTime = now;\n return response.orderBooks;\n }\n\n /**\n * Fetch market stats for all markets.\n *\n * @returns Order book details entries.\n */\n async getOrderBookDetails(): Promise<LighterOrderBookDetailsResponse> {\n return await this.#get<LighterOrderBookDetailsResponse>(\n '/api/v1/orderBookDetails',\n ResponseStructs.orderBookDetails,\n );\n }\n\n /**\n * Fetch an account (including positions) by its Lighter index.\n *\n * @param accountIndex - The Lighter account index.\n * @returns Account payload.\n */\n async getAccountByIndex(\n accountIndex: number,\n ): Promise<LighterAccountResponse> {\n return await this.#get<LighterAccountResponse>(\n `/api/v1/account?by=index&value=${accountIndex}`,\n ResponseStructs.account,\n );\n }\n\n /**\n * Discover Lighter accounts owned by an L1 address.\n *\n * @param l1Address - The owning EVM address.\n * @returns Accounts payload.\n */\n async getAccountsByL1Address(\n l1Address: string,\n ): Promise<LighterAccountsByL1AddressResponse> {\n return await this.#get<LighterAccountsByL1AddressResponse>(\n `/api/v1/accountsByL1Address?l1_address=${l1Address}`,\n ResponseStructs.accountsByAddress,\n );\n }\n\n /**\n * Fetch registered API keys for an account.\n *\n * @param accountIndex - The Lighter account index.\n * @param apiKeyIndex - Key slot, or 255 for all slots.\n * @returns API keys payload.\n */\n async getApiKeys(\n accountIndex: number,\n apiKeyIndex = 255,\n ): Promise<LighterApiKeysResponse> {\n return await this.#get<LighterApiKeysResponse>(\n `/api/v1/apikeys?account_index=${accountIndex}&api_key_index=${apiKeyIndex}`,\n ResponseStructs.apiKeys,\n );\n }\n\n /**\n * Fetch the next nonce for a key slot.\n *\n * @param accountIndex - The Lighter account index.\n * @param apiKeyIndex - Key slot.\n * @returns Next nonce payload.\n */\n async getNextNonce(\n accountIndex: number,\n apiKeyIndex: number,\n ): Promise<LighterNextNonceResponse> {\n return await this.#get<LighterNextNonceResponse>(\n `/api/v1/nextNonce?account_index=${accountIndex}&api_key_index=${apiKeyIndex}`,\n ResponseStructs.nextNonce,\n );\n }\n\n /**\n * Look up a transaction by its exact hash (`GET /api/v1/tx`). Used to\n * resolve submission-acceptance ambiguity authoritatively: an exact-hash\n * match proves the signed payload reached the sequencer.\n *\n * Contract: a venue-confirmed \"transaction not found\" (API error code\n * 21500) resolves to NULL; transport failures and every other API error\n * RETHROW — they are ambiguity, never evidence of non-acceptance.\n *\n * @param txHash - The signed transaction hash.\n * @returns The venue's transaction payload, or null when the venue\n * confirms the hash is unknown.\n */\n async getTx(txHash: string): Promise<LighterTxLookupResponse | null> {\n try {\n return await this.#get<LighterTxLookupResponse>(\n `/api/v1/tx?by=hash&value=${encodeURIComponent(txHash)}`,\n ResponseStructs.transaction,\n );\n } catch (error) {\n if (error instanceof LighterApiError && error.code === 21500) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Fetch active (open) orders for an account.\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer (`_createAuthToken`).\n * @param marketId - Optional market filter (255 = all markets).\n * @returns Active orders payload.\n */\n async getActiveOrders(\n accountIndex: number,\n authToken: string,\n marketId = 255,\n ): Promise<LighterActiveOrdersResponse> {\n return await this.#get<LighterActiveOrdersResponse>(\n `/api/v1/accountActiveOrders?account_index=${accountIndex}&market_id=${marketId}`,\n ResponseStructs.activeOrders,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch historical (inactive) orders: filled and canceled lifecycle\n * states, newest first (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param limit - Maximum entries per page.\n * @param cursor - Pagination cursor from a previous page's `nextCursor`.\n * @param marketId - Optional market filter (official `market_id` query\n * param) — sharply bounds history scans to one symbol.\n * @returns Inactive orders payload.\n */\n async getInactiveOrders(\n accountIndex: number,\n authToken: string,\n limit = 50,\n cursor?: string,\n marketId?: number,\n ): Promise<LighterInactiveOrdersResponse> {\n return await this.#get<LighterInactiveOrdersResponse>(\n `/api/v1/accountInactiveOrders?account_index=${accountIndex}&limit=${limit}${\n cursor === undefined ? '' : `&cursor=${encodeURIComponent(cursor)}`\n }${marketId === undefined ? '' : `&market_id=${marketId}`}`,\n ResponseStructs.inactiveOrders,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch L1→L2 deposit history (auth token required). The venue requires\n * both the account index and its L1 address on this endpoint.\n *\n * @param accountIndex - The Lighter account index.\n * @param l1Address - The account's L1 address.\n * @param authToken - Auth token minted by the signer.\n * @returns Deposit history payload (newest first, cursor-paged).\n */\n async getDepositHistory(\n accountIndex: number,\n l1Address: string,\n authToken: string,\n ): Promise<LighterDepositHistoryResponse> {\n return await this.#get<LighterDepositHistoryResponse>(\n `/api/v1/deposit/history?account_index=${accountIndex}&l1_address=${l1Address}`,\n ResponseStructs.deposits,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch L2→L1 withdrawal history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @returns Withdrawal history payload (newest first, cursor-paged).\n */\n async getWithdrawHistory(\n accountIndex: number,\n authToken: string,\n ): Promise<LighterWithdrawHistoryResponse> {\n return await this.#get<LighterWithdrawHistoryResponse>(\n `/api/v1/withdraw/history?account_index=${accountIndex}`,\n ResponseStructs.withdrawals,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch L2 transfer history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @returns Transfer history payload (newest first, cursor-paged).\n */\n async getTransferHistory(\n accountIndex: number,\n authToken: string,\n ): Promise<LighterTransferHistoryResponse> {\n return await this.#get<LighterTransferHistoryResponse>(\n `/api/v1/transfer/history?account_index=${accountIndex}`,\n ResponseStructs.transfers,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch account trade history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param query - Pagination, range, and market filters.\n * @returns Trades payload (newest first).\n */\n async getTrades(\n accountIndex: number,\n authToken: string,\n query: LighterTradesQuery,\n ): Promise<LighterTradesResponse> {\n const { limit, cursor, from, marketId } = query;\n return await this.#get<LighterTradesResponse>(\n `/api/v1/trades?sort_by=timestamp&sort_dir=desc&limit=${limit}&account_index=${accountIndex}&market_type=perp${\n cursor === undefined ? '' : `&cursor=${encodeURIComponent(cursor)}`\n }${from === undefined ? '' : `&from=${from}`}${\n marketId === undefined ? '' : `&market_id=${marketId}`\n }`,\n ResponseStructs.trades,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch user funding payment history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param limit - Max entries.\n * @returns Position fundings payload.\n */\n async getPositionFundings(\n accountIndex: number,\n authToken: string,\n limit = 50,\n ): Promise<LighterPositionFundingsResponse> {\n return await this.#get<LighterPositionFundingsResponse>(\n `/api/v1/positionFunding?account_index=${accountIndex}&market_id=255&limit=${limit}&sort_by=timestamp&side=all`,\n ResponseStructs.fundings,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch account PnL history (auth token required).\n *\n * @param accountIndex - The Lighter account index.\n * @param authToken - Auth token minted by the signer.\n * @param startTimestamp - Range start (ms).\n * @param endTimestamp - Range end (ms).\n * @param countBack - Records counted back from range end.\n * @returns PnL payload.\n */\n async getPnl(\n accountIndex: number,\n authToken: string,\n startTimestamp: number,\n endTimestamp: number,\n countBack: number,\n ): Promise<LighterPnlResponse> {\n return await this.#get<LighterPnlResponse>(\n `/api/v1/pnl?by=index&value=${accountIndex}&resolution=1d&count_back=${countBack}&start_timestamp=${startTimestamp}&end_timestamp=${endTimestamp}`,\n ResponseStructs.pnl,\n { authorization: authToken },\n );\n }\n\n /**\n * Fetch an OHLCV candle series for a market.\n *\n * @param marketId - Numeric Lighter market id.\n * @param resolution - Candle resolution (e.g. `1m`, `15m`, `1h`, `1d`).\n * @param startTimestamp - Range start (ms).\n * @param endTimestamp - Range end (ms).\n * @param countBack - Number of candles counted back from the range end.\n * @returns Candle series payload.\n */\n async getCandles(\n marketId: number,\n resolution: string,\n startTimestamp: number,\n endTimestamp: number,\n countBack: number,\n ): Promise<LighterCandlesResponse> {\n return await this.#get<LighterCandlesResponse>(\n `/api/v1/candles?market_id=${marketId}&resolution=${resolution}&start_timestamp=${startTimestamp}&end_timestamp=${endTimestamp}&count_back=${countBack}`,\n ResponseStructs.candles,\n );\n }\n\n /**\n * Submit a signed L2 transaction.\n *\n * @param txType - L2 transaction type code (see lighterConfig).\n * @param txInfo - Serialized signed transaction JSON.\n * @returns Send result payload.\n */\n async sendTx(txType: number, txInfo: string): Promise<LighterSendTxResponse> {\n const body = new URLSearchParams({\n tx_type: String(txType),\n tx_info: txInfo,\n });\n\n const response = await this.#request<LighterSendTxResponse>(\n '/api/v1/sendTx',\n {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n },\n ResponseStructs.sendTransaction,\n );\n return response;\n }\n\n readonly #get = async <Result extends { code: number; message?: string }>(\n path: string,\n responseStruct: Struct<Result, unknown>,\n headers?: Record<string, string>,\n ): Promise<Result> => {\n return await this.#request<Result>(\n path,\n { method: 'GET', headers },\n responseStruct,\n );\n };\n\n readonly #request = async <Result extends { code: number; message?: string }>(\n path: string,\n init: { method: string; headers?: Record<string, string>; body?: string },\n responseStruct: Struct<Result, unknown>,\n ): Promise<Result> => {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n LIGHTER_HTTP_TIMEOUT_MS,\n );\n\n try {\n const response = await fetch(url, {\n method: init.method,\n headers: init.headers,\n body: init.body,\n signal: controller.signal,\n });\n\n const payload: unknown = convertKeysToCamelCase(await response.json());\n assert(payload, BaseResponseStruct);\n\n // Lighter returns HTTP 200 with an application-level error code, and\n // 4xx/5xx with `{code, message}` bodies — treat both uniformly.\n if (!response.ok || payload.code !== 200) {\n throw new LighterApiError(\n payload.message ?? `Lighter API error (HTTP ${response.status})`,\n payload.code ?? response.status,\n );\n }\n try {\n assert(payload, responseStruct);\n } catch (error) {\n throw new LighterApiError(\n `${LIGHTER_DATA_INTEGRITY_PREFIX} response for ${path}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n return payload;\n } catch (error) {\n if (error instanceof LighterApiError) {\n throw error;\n }\n this.#deps.debugLogger?.log?.('LighterClientService request failed', {\n url,\n error,\n });\n throw new LighterApiError(\n error instanceof Error ? error.message : String(error),\n );\n } finally {\n clearTimeout(timeout);\n }\n };\n}\n"]}
|
|
@@ -661,6 +661,8 @@ export type LighterApiOrder = {
|
|
|
661
661
|
ownerAccountIndex: number;
|
|
662
662
|
initialBaseAmount: string;
|
|
663
663
|
remainingBaseAmount: string;
|
|
664
|
+
/** Executed base amount; zero remaining does not imply a fill on cancellation. */
|
|
665
|
+
filledBaseAmount?: string;
|
|
664
666
|
price: string;
|
|
665
667
|
isAsk: boolean;
|
|
666
668
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lighter-types.d.ts","sourceRoot":"","sources":["../../src/types/lighter-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lighter-types.d.ts","sourceRoot":"","sources":["../../src/types/lighter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAMF;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,MAAM;IAChB,gBAAgB,EAAE,MAAM;IACxB,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,GAAG,KAAK,EAAE,4BAA4B;IACtC,GAAG,MAAM,EAAE,4BAA4B;CACxC,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,MAAM;IACf,YAAY,EAAE,MAAM;IACpB,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,YAAY,EAAE,MAAM;IACpB,GAAG,KAAK,EAAE,4BAA4B;IACtC,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,CAAC;IACb,GAAG,MAAM,EAAE,6BAA6B;IACxC,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,YAAY,EAAE,MAAM;IACpB,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,YAAY,EAAE,MAAM;IACpB,QAAQ,EAAE,MAAM;IAChB,qBAAqB,EAAE,MAAM;IAC7B,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,EAAE,MAAM;IACpB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,MAAM;IAClB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,MAAM,gCAAgC,CAC1C,MAAM,SAAS,OAAO,EAAE,EACxB,MAAM,IACJ;IACF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,EAAE,gCAAgC,CAC7C,6BAA6B,EAC7B,yBAAyB,CAC1B,CAAC;IACF,iBAAiB,EAAE,gCAAgC,CACjD,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;IACF,gBAAgB,EAAE,gCAAgC,CAChD,gCAAgC,EAChC,eAAe,CAChB,CAAC;IACF,wBAAwB,EAAE,gCAAgC,CACxD,wCAAwC,EACxC,eAAe,CAChB,CAAC;IACF,gBAAgB,EAAE,gCAAgC,CAChD,gCAAgC,EAChC,eAAe,CAChB,CAAC;IACF,mBAAmB,EAAE,gCAAgC,CACnD,mCAAmC,EACnC,eAAe,CAChB,CAAC;IACF,iBAAiB,EAAE,gCAAgC,CACjD,iCAAiC,EACjC,eAAe,CAChB,CAAC;IACF,aAAa,EAAE,gCAAgC,CAC7C,6BAA6B,EAC7B,eAAe,CAChB,CAAC;IACF,gBAAgB,EAAE,gCAAgC,CAChD,gCAAgC,EAChC,4BAA4B,CAC7B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,CAAC;AAErE,MAAM,MAAM,eAAe,CACzB,SAAS,SAAS,sBAAsB,GAAG,sBAAsB,IAC/D,SAAS,SAAS,sBAAsB,GACxC;IACE,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;CACxD,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,CAAC,SAAS,SAAS,sBAAsB,IACtE,yBAAyB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;OAMG;IACH,YAAY,CACV,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAEtC;;;;OAIG;IACH,OAAO,CAAC,SAAS,SAAS,sBAAsB,EAC9C,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,GAC/B,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3C;;;;;;;;OAQG;IACH,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAE3C;;OAEG;IACH,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB,CAAC;AAMF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC,CAAC;AAUF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GAAG;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,gFAAgF;IAChF,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;CAC5C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,iBAAiB,EACjB,aAAa,GAAG,OAAO,GAAG,WAAW,CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACnD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,wDAAwD;QACxD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,8DAA8D;QAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACzC,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC1C,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,uEAAuE;IACvE,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,uEAAuE;IACvE,wBAAwB,EAAE,OAAO,CAAC;IAClC,wBAAwB,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;CAC5C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,0BAA0B,EAAE,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,0BAA0B,EAAE,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lighter-types.js","sourceRoot":"","sources":["../../src/types/lighter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG","sourcesContent":["/**\n * Lighter Protocol Type Definitions\n *\n * Types for the zkLighter REST API, the Go/WASM signer bridge, and\n * provider configuration. No SDK dependency — shapes are derived from\n * the public API (https://apidocs.lighter.xyz) and the reference\n * WebView bridge (elliottech/lighter-go, `web-wasm` branch).\n */\n\n// ============================================================================\n// Network Configuration Types\n// ============================================================================\n\n/**\n * Lighter Network type - mainnet or testnet\n */\nexport type LighterNetwork = 'mainnet' | 'testnet';\n\n/**\n * Lighter endpoint configuration for a single network\n */\nexport type LighterEndpointConfig = {\n http: string;\n ws: string;\n};\n\n/**\n * Lighter endpoints for all networks\n */\nexport type LighterEndpoints = {\n mainnet: LighterEndpointConfig;\n testnet: LighterEndpointConfig;\n};\n\n// ============================================================================\n// Signer Bridge (WASM seam)\n// ============================================================================\n\n/**\n * A single call into the Lighter Go/WASM signer.\n *\n * Mirrors the postMessage protocol of the reference React Native WebView\n * bridge (`{ function, params }`), so a WebView-backed bridge on mobile and\n * an in-process WASM bridge in Node are interchangeable implementations.\n */\nexport type LighterCreateOrderWireParams = [\n marketId: number,\n clientOrderIndex: number,\n baseAmount: string,\n price: string,\n isAsk: number,\n orderType: number,\n timeInForce: number,\n reduceOnly: number,\n triggerPrice: string,\n orderExpiry: number,\n];\n\nexport type LighterGroupedOrderWireParams = [\n ...first: LighterCreateOrderWireParams,\n ...second: LighterCreateOrderWireParams,\n];\n\nexport type LighterCreateClientWireParams = [\n chainId: number,\n accountIndex: number,\n nonce: number,\n apiKeyIndex: number,\n];\n\nexport type LighterSignChangePubKeyWireParams = [\n accountIndex: number,\n l1Signature: string,\n nonce: number,\n apiKeyIndex: number,\n];\n\nexport type LighterSignCreateOrderWireParams = [\n accountIndex: number,\n ...order: LighterCreateOrderWireParams,\n nonce: number,\n];\n\nexport type LighterSignCreateGroupedOrdersWireParams = [\n accountIndex: number,\n groupingType: number,\n orderCount: 2,\n ...orders: LighterGroupedOrderWireParams,\n nonce: number,\n];\n\nexport type LighterSignCancelOrderWireParams = [\n accountIndex: number,\n marketId: number,\n orderId: string,\n nonce: number,\n];\n\nexport type LighterSignUpdateLeverageWireParams = [\n accountIndex: number,\n marketId: number,\n leverageImfHundredths: number,\n marginMode: number,\n nonce: number,\n];\n\nexport type LighterSignUpdateMarginWireParams = [\n accountIndex: number,\n marketId: number,\n amount: number,\n direction: number,\n nonce: number,\n];\n\nexport type LighterSignWithdrawWireParams = [\n accountIndex: number,\n assetIndex: number,\n routeType: number,\n amount: string,\n nonce: number,\n];\n\nexport type LighterCreateAuthTokenWireParams = [\n accountIndex: number,\n apiKeyIndex: number,\n];\n\nexport type LighterSignerOperationDefinition<\n Params extends unknown[],\n Result,\n> = {\n params: Params;\n result: Result;\n};\n\nexport type LighterSignerOperationMap = {\n _createClient: LighterSignerOperationDefinition<\n LighterCreateClientWireParams,\n LighterCreateClientResult\n >;\n _signChangePubKey: LighterSignerOperationDefinition<\n LighterSignChangePubKeyWireParams,\n LighterSignChangePubKeyResult\n >;\n _signCreateOrder: LighterSignerOperationDefinition<\n LighterSignCreateOrderWireParams,\n LighterTxResult\n >;\n _signCreateGroupedOrders: LighterSignerOperationDefinition<\n LighterSignCreateGroupedOrdersWireParams,\n LighterTxResult\n >;\n _signCancelOrder: LighterSignerOperationDefinition<\n LighterSignCancelOrderWireParams,\n LighterTxResult\n >;\n _signUpdateLeverage: LighterSignerOperationDefinition<\n LighterSignUpdateLeverageWireParams,\n LighterTxResult\n >;\n _signUpdateMargin: LighterSignerOperationDefinition<\n LighterSignUpdateMarginWireParams,\n LighterTxResult\n >;\n _signWithdraw: LighterSignerOperationDefinition<\n LighterSignWithdrawWireParams,\n LighterTxResult\n >;\n _createAuthToken: LighterSignerOperationDefinition<\n LighterCreateAuthTokenWireParams,\n LighterCreateAuthTokenResult\n >;\n};\n\nexport type LighterSignerOperation = keyof LighterSignerOperationMap;\n\nexport type LighterWasmCall<\n Operation extends LighterSignerOperation = LighterSignerOperation,\n> = Operation extends LighterSignerOperation\n ? {\n function: Operation;\n params: LighterSignerOperationMap[Operation]['params'];\n }\n : never;\n\nexport type LighterSignerResult<Operation extends LighterSignerOperation> =\n LighterSignerOperationMap[Operation]['result'];\n\n/** Public metadata needed to create or restore a client-owned venue signer. */\nexport type LighterCreateClientParams = {\n chainId: number;\n accountIndex: number;\n apiKeyIndex: number;\n nonce: number;\n};\n\n/**\n * Transport-agnostic seam to the Lighter Go/WASM signer.\n *\n * Implementations:\n * - Mobile: off-screen WebView loading the locally-bundled\n * `wasm-wrapper.standalone.html`, dispatching calls via postMessage.\n * - Node (e2e): in-process `WebAssembly.instantiate` via Go's `wasm_exec.js`.\n */\nexport type LighterSignerBridge = {\n /**\n * Create or restore the client-owned venue signer. The implementation owns\n * key generation and persistence; Core never receives the seed or private\n * key.\n *\n * @param params - Public venue/session metadata required by the signer.\n */\n createClient(\n params: LighterCreateClientParams,\n ): Promise<LighterCreateClientResult>;\n\n /**\n * Execute one WASM signer call and resolve with its result object.\n *\n * @param call - The function name and positional params to invoke.\n */\n execute<Operation extends LighterSignerOperation>(\n call: LighterWasmCall<Operation>,\n ): Promise<LighterSignerResult<Operation>>;\n\n /**\n * Optional subscription to bridge resets (WebView reload / process\n * loss). The provider uses it to invalidate its cached signer session\n * IMMEDIATELY instead of learning about the reset from the next failed\n * trading call.\n *\n * @param listener - Invoked on every reset.\n * @returns Unsubscribe function.\n */\n onReset?(listener: () => void): () => void;\n\n /**\n * Optional hook to re-arm the bridge after a reload (WebView remount).\n */\n reset?(): void;\n};\n\n// ============================================================================\n// WASM signer response shapes (from lighter-go react-native/src/lighterSdk.ts)\n// ============================================================================\n\n/**\n * Response of `_createClient` / `_createClientByPrv`.\n */\nexport type LighterCreateClientResult = {\n success: boolean;\n /** Venue public key, hex (80 chars / 40 bytes, Schnorr over ECgFp5). */\n pk: string;\n pubKeySuccess: boolean;\n /**\n * ChangePubKey plaintext body to be signed with EIP-191 `personal_sign`\n * by the user's L1 (EVM) account.\n */\n body: string;\n error?: string;\n};\n\n/**\n * Response of `_signChangePubKey`.\n */\nexport type LighterSignChangePubKeyResult = {\n /** Serialized L2 transaction JSON (includes the injected `L1Sig`). */\n txInfo: string;\n /**\n * Signed transaction hash (pinned WASM contract: the signing RESULT\n * carries the hash; `txInfo` never does). Required for the durable\n * dispatch ledger's exact-identity reconciliation.\n */\n txHash?: string;\n error?: string;\n};\n\n/**\n * Response of `_createAuthToken`.\n */\nexport type LighterCreateAuthTokenResult = {\n token: string;\n deadline: number;\n error?: string;\n};\n\n/**\n * Response of signing functions returning a full L2 transaction\n * (`_signCreateOrder`, `_signCancelOrder`, ...).\n */\nexport type LighterTxResult = {\n txInfo: string;\n txHash?: string;\n error?: string;\n};\n\n// ============================================================================\n// Auth Configuration\n// ============================================================================\n\n/**\n * Signs an EIP-191 personal message and resolves with the 65-byte signature\n * as a 0x-prefixed hex string. Injected for headless use; when a messenger\n * is available the wallet service routes through\n * `KeyringController:signPersonalMessage` instead.\n */\nexport type LighterPersonalSigner = (message: string) => Promise<string>;\n\n/**\n * Lighter auth/config passed at construction time.\n */\nexport type LighterAuthConfig = {\n /** Whether the Lighter provider is enabled via local override. */\n enabled?: boolean;\n /** Lighter account index (assigned at first deposit). */\n accountIndex?: number;\n /** API key slot to register/use (0-254). */\n apiKeyIndex?: number;\n /** L1 address owning the Lighter account. */\n l1Address?: string;\n /** Headless personal_sign implementation for L1 ChangePubKey approval. */\n personalSigner?: LighterPersonalSigner;\n};\n\n// ============================================================================\n// REST API response shapes (subset used by the POC)\n//\n// The zkLighter wire format is snake_case; LighterClientService converts\n// keys to camelCase at the fetch boundary so these parsed shapes follow\n// package conventions.\n// ============================================================================\n\n/**\n * One market entry from `GET /api/v1/orderBooks`.\n */\nexport type LighterOrderBookMeta = {\n symbol: string;\n marketId: number;\n marketType: string;\n status: string;\n takerFee: string;\n makerFee: string;\n minBaseAmount: string;\n minQuoteAmount: string;\n supportedSizeDecimals: number;\n supportedPriceDecimals: number;\n supportedQuoteDecimals: number;\n};\n\n/**\n * Response of `GET /api/v1/orderBooks`.\n */\nexport type LighterOrderBooksResponse = {\n code: number;\n orderBooks: LighterOrderBookMeta[];\n};\n\n/**\n * Market stats from `GET /api/v1/orderBookDetails`.\n */\nexport type LighterOrderBookDetail = LighterOrderBookMeta & {\n lastTradePrice: number;\n /** Default initial margin fraction, hundredths of a percent (666 = 6.66%). */\n defaultInitialMarginFraction?: number;\n /** Minimum initial margin fraction, hundredths of a percent (400 → 25x max). */\n minInitialMarginFraction?: number;\n /** Maintenance margin fraction, hundredths of a percent (240 = 2.4%). */\n maintenanceMarginFraction?: number;\n dailyTradesCount: number;\n dailyBaseTokenVolume: number;\n dailyQuoteTokenVolume: number;\n dailyPriceLow: number;\n dailyPriceHigh: number;\n dailyPriceChange: number;\n openInterest: number;\n dailyChart: Record<string, number>;\n};\n\n/**\n * Response of `GET /api/v1/orderBookDetails`.\n */\nexport type LighterOrderBookDetailsResponse = {\n code: number;\n orderBookDetails: LighterOrderBookDetail[];\n};\n\n/**\n * One sub-account from `GET /api/v1/accountsByL1Address` or `account`.\n */\nexport type LighterSubAccount = {\n code: number;\n accountType: number;\n index: number;\n l1Address: string;\n cancelAllTime: number;\n totalOrderCount: number;\n pendingOrderCount: number;\n status: number;\n collateral: string;\n availableBalance: string;\n positions?: LighterApiPosition[];\n};\n\n/**\n * Identity fields returned by `GET /api/v1/accountsByL1Address`.\n *\n * Lighter's address-discovery endpoint may leave balance fields empty even\n * though the full `account` endpoint returns validated decimal values. Account\n * discovery only consumes these identity fields; financial reads continue to\n * use {@link LighterSubAccount} and its stricter response validation.\n */\nexport type LighterAccountSummary = Pick<\n LighterSubAccount,\n 'accountType' | 'index' | 'l1Address'\n>;\n\n/**\n * Response of `GET /api/v1/accountsByL1Address`.\n */\nexport type LighterAccountsByL1AddressResponse = {\n code: number;\n message?: string;\n l1Address: string;\n subAccounts: LighterAccountSummary[];\n};\n\n/**\n * Response of `GET /api/v1/account` (`by=index`).\n */\nexport type LighterAccountResponse = {\n code: number;\n message?: string;\n accounts: LighterSubAccount[];\n};\n\n/**\n * One position inside an account payload.\n */\nexport type LighterApiPosition = {\n marketId: number;\n symbol: string;\n initialMarginFraction: string;\n openOrderCount: number;\n /** 1 = long, -1 = short (sign convention per API). */\n sign: number;\n position: string;\n avgEntryPrice: string;\n positionValue: string;\n unrealizedPnl: string;\n realizedPnl: string;\n liquidationPrice: string;\n /** 0 = cross, 1 = isolated. Older captures omit it (venue default cross). */\n marginMode?: number;\n};\n\n/**\n * One API key entry from `GET /api/v1/apikeys`.\n */\nexport type LighterApiKey = {\n accountIndex: number;\n apiKeyIndex: number;\n nonce: number;\n publicKey: string;\n};\n\n/**\n * Response of `GET /api/v1/apikeys`.\n */\nexport type LighterApiKeysResponse = {\n code: number;\n message?: string;\n apiKeys: LighterApiKey[];\n};\n\n/**\n * Response of `GET /api/v1/nextNonce`.\n */\nexport type LighterNextNonceResponse = {\n code: number;\n message?: string;\n nonce: number;\n};\n\n/**\n * Response of `GET /api/v1/tx?by=hash&value=...` (EnrichedTx). Only the\n * identity fields the settlement reconciler verifies are typed; a\n * successful exact-hash match proves the signed payload reached the\n * sequencer.\n */\nexport type LighterTxLookupResponse = {\n code: number;\n message?: string;\n hash: string;\n accountIndex: number;\n apiKeyIndex: number;\n nonce: number;\n status: number;\n};\n\n/**\n * Response of `POST /api/v1/sendTx`.\n */\nexport type LighterSendTxResponse = {\n code: number;\n message?: string;\n txHash: string;\n};\n\n/**\n * One market entry from the `market_stats/all` WebSocket channel\n * (`subscribed/market_stats` snapshot and `update/market_stats` deltas),\n * after snake→camel conversion at the socket boundary.\n */\nexport type LighterWsMarketStat = {\n symbol: string;\n marketId: number;\n indexPrice: string;\n markPrice: string;\n midPrice: string;\n bestAskPrice: string;\n bestBidPrice: string;\n lastTradePrice: string;\n openInterest: string;\n fundingRate: string;\n currentFundingRate?: string;\n dailyQuoteTokenVolume: number;\n dailyPriceChange: number;\n};\n\n/**\n * Envelope of a `market_stats` WebSocket message (post-camelization).\n */\nexport type LighterWsMarketStatsMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n marketStats?: Record<string, LighterWsMarketStat>;\n};\n\n/**\n * Stats block of a `user_stats/{account_index}` WebSocket message\n * (post-camelization). Live-verified against testnet account 28.\n */\nexport type LighterWsUserStats = {\n collateral: string;\n portfolioValue: string;\n leverage: string;\n availableBalance: string;\n marginUsage: string;\n buyingPower: string;\n};\n\n/**\n * Generic account-channel WebSocket envelope (post-camelization):\n * `user_stats` carries `stats`, `account_all_positions` carries `positions`\n * (same field shape as the REST account payload), `account_all_orders`\n * carries `orders` keyed by market id.\n */\nexport type LighterWsAccountMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n stats?: LighterWsUserStats;\n positions?: Record<string, LighterApiPosition>;\n orders?: Record<string, LighterApiOrder[]>;\n};\n\n/**\n * Minimal structural WebSocket surface the Lighter stream manager uses.\n * Structural (rather than the DOM/Node `WebSocket` type) so platforms and\n * tests can supply any compatible implementation.\n */\nexport type LighterWebSocketLike = {\n readyState: number;\n send(data: string): void;\n close(): void;\n onopen: (() => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n onclose: (() => void) | null;\n onerror: (() => void) | null;\n};\n\n/**\n * Constructor for {@link LighterWebSocketLike} transports.\n */\nexport type LighterWebSocketCtor = new (url: string) => LighterWebSocketLike;\n\n/**\n * `order_book/{market_id}` WebSocket payload (post-camelization).\n * `subscribed/*` carries a full snapshot; `update/*` carries deltas where\n * `size: \"0.000\"` removes a level.\n */\nexport type LighterWsOrderBookMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n orderBook?: {\n /** Last nonce represented by this snapshot or delta. */\n nonce?: number;\n /** Previous book nonce required before applying an update. */\n beginNonce?: number;\n bids?: { price: string; size: string }[];\n asks?: { price: string; size: string }[];\n };\n};\n\n/**\n * `candle/{market_id}/{resolution}` WebSocket payload (post-camelization,\n * candle entries keep the compact t/o/h/l/c/v wire keys).\n */\nexport type LighterWsCandleMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n candles?: LighterCandle[];\n};\n\n/**\n * One trade entry from the `account_all_trades/{account_index}` channel\n * (post-camelization).\n */\nexport type LighterWsTrade = {\n tradeId: number;\n marketId: number;\n size: string;\n price: string;\n askId: number;\n bidId: number;\n askAccountId: number;\n bidAccountId: number;\n isMakerAsk: boolean;\n timestamp: number;\n /** Realized pnl per side — same wire shape as the REST trade payload. */\n askAccountPnl?: string;\n bidAccountPnl?: string;\n /** Fees, present when nonzero; unit unproven — see LighterRestTrade. */\n takerFee?: number | string;\n makerFee?: number | string;\n takerPositionSizeBefore?: string;\n makerPositionSizeBefore?: string;\n takerPositionSignChanged?: boolean;\n makerPositionSignChanged?: boolean;\n};\n\n/**\n * `account_all_trades/{account_index}` WebSocket payload (post-camelization).\n */\nexport type LighterWsTradesMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n trades?: Record<string, LighterWsTrade[]>;\n};\n\n/**\n * One trade from `GET /api/v1/trades` (post-camelization).\n */\nexport type LighterRestTrade = {\n tradeId: number;\n txHash: string;\n type: string;\n marketId: number;\n size: string;\n price: string;\n usdAmount: string;\n askId: number;\n bidId: number;\n askAccountId: number;\n bidAccountId: number;\n isMakerAsk: boolean;\n timestamp: number;\n /** Realized pnl for the ask-side account, signed USDC; may be omitted on opens from flat. */\n askAccountPnl?: string;\n /** Realized pnl for the bid-side account, signed USDC; may be omitted on opens from flat. */\n bidAccountPnl?: string;\n /**\n * Taker/maker fees, present when nonzero. The official model types them\n * as StrictInt with NO documented unit or scale; until a captured\n * nonzero payload proves one, adapters must treat these as unavailable.\n */\n takerFee?: number | string;\n makerFee?: number | string;\n /** Position size (absolute) of each side before the trade executed. */\n takerPositionSizeBefore: string;\n makerPositionSizeBefore: string;\n /** Whether the side's position sign changed (crossed or left zero). */\n takerPositionSignChanged: boolean;\n makerPositionSignChanged: boolean;\n};\n\n/**\n * Response of `GET /api/v1/trades`.\n */\nexport type LighterTradesResponse = {\n code: number;\n message?: string;\n nextCursor?: string;\n trades: LighterRestTrade[];\n};\n\n/** Query parameters supported by the Lighter trades endpoint. */\nexport type LighterTradesQuery = {\n limit: number;\n cursor?: string;\n from?: number;\n marketId?: number;\n};\n\n/**\n * One entry from `GET /api/v1/positionFunding` (post-camelization).\n */\nexport type LighterPositionFunding = {\n timestamp: number;\n marketId: number;\n fundingId: number;\n change: string;\n rate: string;\n positionSize: string;\n positionSide: string;\n};\n\n/**\n * Response of `GET /api/v1/positionFunding`.\n */\nexport type LighterPositionFundingsResponse = {\n code: number;\n message?: string;\n positionFundings: LighterPositionFunding[];\n};\n\n/**\n * One record from `GET /api/v1/pnl` (post-camelization).\n */\nexport type LighterPnlRecord = {\n timestamp: number;\n tradePnl: number;\n inflow: number;\n outflow: number;\n volume: number;\n};\n\n/**\n * Response of `GET /api/v1/pnl`.\n */\nexport type LighterPnlResponse = {\n code: number;\n message?: string;\n resolution?: string;\n pnl?: LighterPnlRecord[];\n};\n\n/**\n * One candle from `GET /api/v1/candles` (compact wire keys: t/o/h/l/c/v).\n */\nexport type LighterCandle = {\n t: number;\n o: number;\n h: number;\n l: number;\n c: number;\n v: number;\n};\n\n/**\n * Response of `GET /api/v1/candles`.\n */\nexport type LighterCandlesResponse = {\n code: number;\n message?: string;\n /** Resolution echo (e.g. `15m`). */\n r?: string;\n /** Ascending candle series. */\n c?: LighterCandle[];\n};\n\n/**\n * One order from `GET /api/v1/accountActiveOrders`.\n */\nexport type LighterApiOrder = {\n orderIndex: number;\n clientOrderIndex: number;\n marketIndex: number;\n ownerAccountIndex: number;\n initialBaseAmount: string;\n remainingBaseAmount: string;\n price: string;\n isAsk: boolean;\n type: string;\n timeInForce: string;\n reduceOnly: number | boolean;\n status: string;\n orderExpiry: number;\n /** Unix seconds from order endpoints, unlike millisecond trade timestamps. */\n timestamp: number;\n /**\n * Trigger level for stop-loss/take-profit orders. Note `price` on a\n * trigger order is the ±5% protection EXECUTION price, not this level.\n */\n triggerPrice?: string;\n /** Venue string order id (linkage fields reference this form). */\n orderId?: string;\n /** OCO/linkage: parent order references. */\n parentOrderIndex?: number;\n parentOrderId?: string;\n /** OCO linkage: the sibling this order auto-cancels when it fires. */\n toCancelOrderId0?: string;\n toTriggerOrderId0?: string;\n toTriggerOrderId1?: string;\n};\n\n/**\n * Response of `GET /api/v1/accountActiveOrders`.\n */\nexport type LighterActiveOrdersResponse = {\n code: number;\n message?: string;\n orders: LighterApiOrder[];\n};\n\n/**\n * Response of `GET /api/v1/accountInactiveOrders` (historical order\n * lifecycle: filled / canceled orders, newest first, cursor-paged).\n */\nexport type LighterInactiveOrdersResponse = {\n code: number;\n message?: string;\n nextCursor?: string;\n orders: LighterApiOrder[];\n};\n\n/**\n * One entry of `GET /api/v1/deposit/history` (camelized).\n */\nexport type LighterDepositHistoryItem = {\n id: string;\n assetId: number;\n amount: string;\n timestamp: number;\n status: string;\n l1TxHash: string;\n};\n\n/**\n * Response of `GET /api/v1/deposit/history`.\n */\nexport type LighterDepositHistoryResponse = {\n code: number;\n message?: string;\n deposits: LighterDepositHistoryItem[];\n cursor?: string;\n};\n\n/**\n * One entry of `GET /api/v1/withdraw/history` (camelized).\n */\nexport type LighterWithdrawHistoryItem = {\n id: string;\n assetId: number;\n amount: string;\n timestamp: number;\n status: string;\n type: string;\n l1TxHash: string;\n};\n\n/**\n * Response of `GET /api/v1/withdraw/history`.\n */\nexport type LighterWithdrawHistoryResponse = {\n code: number;\n message?: string;\n withdraws: LighterWithdrawHistoryItem[];\n cursor?: string;\n};\n\nexport type LighterTransferType = 'L2TransferInflow' | 'L2TransferOutflow';\n\n/**\n * One entry of `GET /api/v1/transfer/history` (camelized).\n */\nexport type LighterTransferHistoryItem = {\n id: string;\n assetId: number;\n amount: string;\n fee: string;\n timestamp: number;\n type: LighterTransferType;\n fromL1Address: string;\n toL1Address: string;\n fromAccountIndex: number;\n toAccountIndex: number;\n txHash: string;\n};\n\n/**\n * Response of `GET /api/v1/transfer/history`.\n */\nexport type LighterTransferHistoryResponse = {\n code: number;\n message?: string;\n transfers: LighterTransferHistoryItem[];\n cursor?: string;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"lighter-types.js","sourceRoot":"","sources":["../../src/types/lighter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG","sourcesContent":["/**\n * Lighter Protocol Type Definitions\n *\n * Types for the zkLighter REST API, the Go/WASM signer bridge, and\n * provider configuration. No SDK dependency — shapes are derived from\n * the public API (https://apidocs.lighter.xyz) and the reference\n * WebView bridge (elliottech/lighter-go, `web-wasm` branch).\n */\n\n// ============================================================================\n// Network Configuration Types\n// ============================================================================\n\n/**\n * Lighter Network type - mainnet or testnet\n */\nexport type LighterNetwork = 'mainnet' | 'testnet';\n\n/**\n * Lighter endpoint configuration for a single network\n */\nexport type LighterEndpointConfig = {\n http: string;\n ws: string;\n};\n\n/**\n * Lighter endpoints for all networks\n */\nexport type LighterEndpoints = {\n mainnet: LighterEndpointConfig;\n testnet: LighterEndpointConfig;\n};\n\n// ============================================================================\n// Signer Bridge (WASM seam)\n// ============================================================================\n\n/**\n * A single call into the Lighter Go/WASM signer.\n *\n * Mirrors the postMessage protocol of the reference React Native WebView\n * bridge (`{ function, params }`), so a WebView-backed bridge on mobile and\n * an in-process WASM bridge in Node are interchangeable implementations.\n */\nexport type LighterCreateOrderWireParams = [\n marketId: number,\n clientOrderIndex: number,\n baseAmount: string,\n price: string,\n isAsk: number,\n orderType: number,\n timeInForce: number,\n reduceOnly: number,\n triggerPrice: string,\n orderExpiry: number,\n];\n\nexport type LighterGroupedOrderWireParams = [\n ...first: LighterCreateOrderWireParams,\n ...second: LighterCreateOrderWireParams,\n];\n\nexport type LighterCreateClientWireParams = [\n chainId: number,\n accountIndex: number,\n nonce: number,\n apiKeyIndex: number,\n];\n\nexport type LighterSignChangePubKeyWireParams = [\n accountIndex: number,\n l1Signature: string,\n nonce: number,\n apiKeyIndex: number,\n];\n\nexport type LighterSignCreateOrderWireParams = [\n accountIndex: number,\n ...order: LighterCreateOrderWireParams,\n nonce: number,\n];\n\nexport type LighterSignCreateGroupedOrdersWireParams = [\n accountIndex: number,\n groupingType: number,\n orderCount: 2,\n ...orders: LighterGroupedOrderWireParams,\n nonce: number,\n];\n\nexport type LighterSignCancelOrderWireParams = [\n accountIndex: number,\n marketId: number,\n orderId: string,\n nonce: number,\n];\n\nexport type LighterSignUpdateLeverageWireParams = [\n accountIndex: number,\n marketId: number,\n leverageImfHundredths: number,\n marginMode: number,\n nonce: number,\n];\n\nexport type LighterSignUpdateMarginWireParams = [\n accountIndex: number,\n marketId: number,\n amount: number,\n direction: number,\n nonce: number,\n];\n\nexport type LighterSignWithdrawWireParams = [\n accountIndex: number,\n assetIndex: number,\n routeType: number,\n amount: string,\n nonce: number,\n];\n\nexport type LighterCreateAuthTokenWireParams = [\n accountIndex: number,\n apiKeyIndex: number,\n];\n\nexport type LighterSignerOperationDefinition<\n Params extends unknown[],\n Result,\n> = {\n params: Params;\n result: Result;\n};\n\nexport type LighterSignerOperationMap = {\n _createClient: LighterSignerOperationDefinition<\n LighterCreateClientWireParams,\n LighterCreateClientResult\n >;\n _signChangePubKey: LighterSignerOperationDefinition<\n LighterSignChangePubKeyWireParams,\n LighterSignChangePubKeyResult\n >;\n _signCreateOrder: LighterSignerOperationDefinition<\n LighterSignCreateOrderWireParams,\n LighterTxResult\n >;\n _signCreateGroupedOrders: LighterSignerOperationDefinition<\n LighterSignCreateGroupedOrdersWireParams,\n LighterTxResult\n >;\n _signCancelOrder: LighterSignerOperationDefinition<\n LighterSignCancelOrderWireParams,\n LighterTxResult\n >;\n _signUpdateLeverage: LighterSignerOperationDefinition<\n LighterSignUpdateLeverageWireParams,\n LighterTxResult\n >;\n _signUpdateMargin: LighterSignerOperationDefinition<\n LighterSignUpdateMarginWireParams,\n LighterTxResult\n >;\n _signWithdraw: LighterSignerOperationDefinition<\n LighterSignWithdrawWireParams,\n LighterTxResult\n >;\n _createAuthToken: LighterSignerOperationDefinition<\n LighterCreateAuthTokenWireParams,\n LighterCreateAuthTokenResult\n >;\n};\n\nexport type LighterSignerOperation = keyof LighterSignerOperationMap;\n\nexport type LighterWasmCall<\n Operation extends LighterSignerOperation = LighterSignerOperation,\n> = Operation extends LighterSignerOperation\n ? {\n function: Operation;\n params: LighterSignerOperationMap[Operation]['params'];\n }\n : never;\n\nexport type LighterSignerResult<Operation extends LighterSignerOperation> =\n LighterSignerOperationMap[Operation]['result'];\n\n/** Public metadata needed to create or restore a client-owned venue signer. */\nexport type LighterCreateClientParams = {\n chainId: number;\n accountIndex: number;\n apiKeyIndex: number;\n nonce: number;\n};\n\n/**\n * Transport-agnostic seam to the Lighter Go/WASM signer.\n *\n * Implementations:\n * - Mobile: off-screen WebView loading the locally-bundled\n * `wasm-wrapper.standalone.html`, dispatching calls via postMessage.\n * - Node (e2e): in-process `WebAssembly.instantiate` via Go's `wasm_exec.js`.\n */\nexport type LighterSignerBridge = {\n /**\n * Create or restore the client-owned venue signer. The implementation owns\n * key generation and persistence; Core never receives the seed or private\n * key.\n *\n * @param params - Public venue/session metadata required by the signer.\n */\n createClient(\n params: LighterCreateClientParams,\n ): Promise<LighterCreateClientResult>;\n\n /**\n * Execute one WASM signer call and resolve with its result object.\n *\n * @param call - The function name and positional params to invoke.\n */\n execute<Operation extends LighterSignerOperation>(\n call: LighterWasmCall<Operation>,\n ): Promise<LighterSignerResult<Operation>>;\n\n /**\n * Optional subscription to bridge resets (WebView reload / process\n * loss). The provider uses it to invalidate its cached signer session\n * IMMEDIATELY instead of learning about the reset from the next failed\n * trading call.\n *\n * @param listener - Invoked on every reset.\n * @returns Unsubscribe function.\n */\n onReset?(listener: () => void): () => void;\n\n /**\n * Optional hook to re-arm the bridge after a reload (WebView remount).\n */\n reset?(): void;\n};\n\n// ============================================================================\n// WASM signer response shapes (from lighter-go react-native/src/lighterSdk.ts)\n// ============================================================================\n\n/**\n * Response of `_createClient` / `_createClientByPrv`.\n */\nexport type LighterCreateClientResult = {\n success: boolean;\n /** Venue public key, hex (80 chars / 40 bytes, Schnorr over ECgFp5). */\n pk: string;\n pubKeySuccess: boolean;\n /**\n * ChangePubKey plaintext body to be signed with EIP-191 `personal_sign`\n * by the user's L1 (EVM) account.\n */\n body: string;\n error?: string;\n};\n\n/**\n * Response of `_signChangePubKey`.\n */\nexport type LighterSignChangePubKeyResult = {\n /** Serialized L2 transaction JSON (includes the injected `L1Sig`). */\n txInfo: string;\n /**\n * Signed transaction hash (pinned WASM contract: the signing RESULT\n * carries the hash; `txInfo` never does). Required for the durable\n * dispatch ledger's exact-identity reconciliation.\n */\n txHash?: string;\n error?: string;\n};\n\n/**\n * Response of `_createAuthToken`.\n */\nexport type LighterCreateAuthTokenResult = {\n token: string;\n deadline: number;\n error?: string;\n};\n\n/**\n * Response of signing functions returning a full L2 transaction\n * (`_signCreateOrder`, `_signCancelOrder`, ...).\n */\nexport type LighterTxResult = {\n txInfo: string;\n txHash?: string;\n error?: string;\n};\n\n// ============================================================================\n// Auth Configuration\n// ============================================================================\n\n/**\n * Signs an EIP-191 personal message and resolves with the 65-byte signature\n * as a 0x-prefixed hex string. Injected for headless use; when a messenger\n * is available the wallet service routes through\n * `KeyringController:signPersonalMessage` instead.\n */\nexport type LighterPersonalSigner = (message: string) => Promise<string>;\n\n/**\n * Lighter auth/config passed at construction time.\n */\nexport type LighterAuthConfig = {\n /** Whether the Lighter provider is enabled via local override. */\n enabled?: boolean;\n /** Lighter account index (assigned at first deposit). */\n accountIndex?: number;\n /** API key slot to register/use (0-254). */\n apiKeyIndex?: number;\n /** L1 address owning the Lighter account. */\n l1Address?: string;\n /** Headless personal_sign implementation for L1 ChangePubKey approval. */\n personalSigner?: LighterPersonalSigner;\n};\n\n// ============================================================================\n// REST API response shapes (subset used by the POC)\n//\n// The zkLighter wire format is snake_case; LighterClientService converts\n// keys to camelCase at the fetch boundary so these parsed shapes follow\n// package conventions.\n// ============================================================================\n\n/**\n * One market entry from `GET /api/v1/orderBooks`.\n */\nexport type LighterOrderBookMeta = {\n symbol: string;\n marketId: number;\n marketType: string;\n status: string;\n takerFee: string;\n makerFee: string;\n minBaseAmount: string;\n minQuoteAmount: string;\n supportedSizeDecimals: number;\n supportedPriceDecimals: number;\n supportedQuoteDecimals: number;\n};\n\n/**\n * Response of `GET /api/v1/orderBooks`.\n */\nexport type LighterOrderBooksResponse = {\n code: number;\n orderBooks: LighterOrderBookMeta[];\n};\n\n/**\n * Market stats from `GET /api/v1/orderBookDetails`.\n */\nexport type LighterOrderBookDetail = LighterOrderBookMeta & {\n lastTradePrice: number;\n /** Default initial margin fraction, hundredths of a percent (666 = 6.66%). */\n defaultInitialMarginFraction?: number;\n /** Minimum initial margin fraction, hundredths of a percent (400 → 25x max). */\n minInitialMarginFraction?: number;\n /** Maintenance margin fraction, hundredths of a percent (240 = 2.4%). */\n maintenanceMarginFraction?: number;\n dailyTradesCount: number;\n dailyBaseTokenVolume: number;\n dailyQuoteTokenVolume: number;\n dailyPriceLow: number;\n dailyPriceHigh: number;\n dailyPriceChange: number;\n openInterest: number;\n dailyChart: Record<string, number>;\n};\n\n/**\n * Response of `GET /api/v1/orderBookDetails`.\n */\nexport type LighterOrderBookDetailsResponse = {\n code: number;\n orderBookDetails: LighterOrderBookDetail[];\n};\n\n/**\n * One sub-account from `GET /api/v1/accountsByL1Address` or `account`.\n */\nexport type LighterSubAccount = {\n code: number;\n accountType: number;\n index: number;\n l1Address: string;\n cancelAllTime: number;\n totalOrderCount: number;\n pendingOrderCount: number;\n status: number;\n collateral: string;\n availableBalance: string;\n positions?: LighterApiPosition[];\n};\n\n/**\n * Identity fields returned by `GET /api/v1/accountsByL1Address`.\n *\n * Lighter's address-discovery endpoint may leave balance fields empty even\n * though the full `account` endpoint returns validated decimal values. Account\n * discovery only consumes these identity fields; financial reads continue to\n * use {@link LighterSubAccount} and its stricter response validation.\n */\nexport type LighterAccountSummary = Pick<\n LighterSubAccount,\n 'accountType' | 'index' | 'l1Address'\n>;\n\n/**\n * Response of `GET /api/v1/accountsByL1Address`.\n */\nexport type LighterAccountsByL1AddressResponse = {\n code: number;\n message?: string;\n l1Address: string;\n subAccounts: LighterAccountSummary[];\n};\n\n/**\n * Response of `GET /api/v1/account` (`by=index`).\n */\nexport type LighterAccountResponse = {\n code: number;\n message?: string;\n accounts: LighterSubAccount[];\n};\n\n/**\n * One position inside an account payload.\n */\nexport type LighterApiPosition = {\n marketId: number;\n symbol: string;\n initialMarginFraction: string;\n openOrderCount: number;\n /** 1 = long, -1 = short (sign convention per API). */\n sign: number;\n position: string;\n avgEntryPrice: string;\n positionValue: string;\n unrealizedPnl: string;\n realizedPnl: string;\n liquidationPrice: string;\n /** 0 = cross, 1 = isolated. Older captures omit it (venue default cross). */\n marginMode?: number;\n};\n\n/**\n * One API key entry from `GET /api/v1/apikeys`.\n */\nexport type LighterApiKey = {\n accountIndex: number;\n apiKeyIndex: number;\n nonce: number;\n publicKey: string;\n};\n\n/**\n * Response of `GET /api/v1/apikeys`.\n */\nexport type LighterApiKeysResponse = {\n code: number;\n message?: string;\n apiKeys: LighterApiKey[];\n};\n\n/**\n * Response of `GET /api/v1/nextNonce`.\n */\nexport type LighterNextNonceResponse = {\n code: number;\n message?: string;\n nonce: number;\n};\n\n/**\n * Response of `GET /api/v1/tx?by=hash&value=...` (EnrichedTx). Only the\n * identity fields the settlement reconciler verifies are typed; a\n * successful exact-hash match proves the signed payload reached the\n * sequencer.\n */\nexport type LighterTxLookupResponse = {\n code: number;\n message?: string;\n hash: string;\n accountIndex: number;\n apiKeyIndex: number;\n nonce: number;\n status: number;\n};\n\n/**\n * Response of `POST /api/v1/sendTx`.\n */\nexport type LighterSendTxResponse = {\n code: number;\n message?: string;\n txHash: string;\n};\n\n/**\n * One market entry from the `market_stats/all` WebSocket channel\n * (`subscribed/market_stats` snapshot and `update/market_stats` deltas),\n * after snake→camel conversion at the socket boundary.\n */\nexport type LighterWsMarketStat = {\n symbol: string;\n marketId: number;\n indexPrice: string;\n markPrice: string;\n midPrice: string;\n bestAskPrice: string;\n bestBidPrice: string;\n lastTradePrice: string;\n openInterest: string;\n fundingRate: string;\n currentFundingRate?: string;\n dailyQuoteTokenVolume: number;\n dailyPriceChange: number;\n};\n\n/**\n * Envelope of a `market_stats` WebSocket message (post-camelization).\n */\nexport type LighterWsMarketStatsMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n marketStats?: Record<string, LighterWsMarketStat>;\n};\n\n/**\n * Stats block of a `user_stats/{account_index}` WebSocket message\n * (post-camelization). Live-verified against testnet account 28.\n */\nexport type LighterWsUserStats = {\n collateral: string;\n portfolioValue: string;\n leverage: string;\n availableBalance: string;\n marginUsage: string;\n buyingPower: string;\n};\n\n/**\n * Generic account-channel WebSocket envelope (post-camelization):\n * `user_stats` carries `stats`, `account_all_positions` carries `positions`\n * (same field shape as the REST account payload), `account_all_orders`\n * carries `orders` keyed by market id.\n */\nexport type LighterWsAccountMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n stats?: LighterWsUserStats;\n positions?: Record<string, LighterApiPosition>;\n orders?: Record<string, LighterApiOrder[]>;\n};\n\n/**\n * Minimal structural WebSocket surface the Lighter stream manager uses.\n * Structural (rather than the DOM/Node `WebSocket` type) so platforms and\n * tests can supply any compatible implementation.\n */\nexport type LighterWebSocketLike = {\n readyState: number;\n send(data: string): void;\n close(): void;\n onopen: (() => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n onclose: (() => void) | null;\n onerror: (() => void) | null;\n};\n\n/**\n * Constructor for {@link LighterWebSocketLike} transports.\n */\nexport type LighterWebSocketCtor = new (url: string) => LighterWebSocketLike;\n\n/**\n * `order_book/{market_id}` WebSocket payload (post-camelization).\n * `subscribed/*` carries a full snapshot; `update/*` carries deltas where\n * `size: \"0.000\"` removes a level.\n */\nexport type LighterWsOrderBookMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n orderBook?: {\n /** Last nonce represented by this snapshot or delta. */\n nonce?: number;\n /** Previous book nonce required before applying an update. */\n beginNonce?: number;\n bids?: { price: string; size: string }[];\n asks?: { price: string; size: string }[];\n };\n};\n\n/**\n * `candle/{market_id}/{resolution}` WebSocket payload (post-camelization,\n * candle entries keep the compact t/o/h/l/c/v wire keys).\n */\nexport type LighterWsCandleMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n candles?: LighterCandle[];\n};\n\n/**\n * One trade entry from the `account_all_trades/{account_index}` channel\n * (post-camelization).\n */\nexport type LighterWsTrade = {\n tradeId: number;\n marketId: number;\n size: string;\n price: string;\n askId: number;\n bidId: number;\n askAccountId: number;\n bidAccountId: number;\n isMakerAsk: boolean;\n timestamp: number;\n /** Realized pnl per side — same wire shape as the REST trade payload. */\n askAccountPnl?: string;\n bidAccountPnl?: string;\n /** Fees, present when nonzero; unit unproven — see LighterRestTrade. */\n takerFee?: number | string;\n makerFee?: number | string;\n takerPositionSizeBefore?: string;\n makerPositionSizeBefore?: string;\n takerPositionSignChanged?: boolean;\n makerPositionSignChanged?: boolean;\n};\n\n/**\n * `account_all_trades/{account_index}` WebSocket payload (post-camelization).\n */\nexport type LighterWsTradesMessage = {\n type: string;\n channel?: string;\n timestamp?: number;\n trades?: Record<string, LighterWsTrade[]>;\n};\n\n/**\n * One trade from `GET /api/v1/trades` (post-camelization).\n */\nexport type LighterRestTrade = {\n tradeId: number;\n txHash: string;\n type: string;\n marketId: number;\n size: string;\n price: string;\n usdAmount: string;\n askId: number;\n bidId: number;\n askAccountId: number;\n bidAccountId: number;\n isMakerAsk: boolean;\n timestamp: number;\n /** Realized pnl for the ask-side account, signed USDC; may be omitted on opens from flat. */\n askAccountPnl?: string;\n /** Realized pnl for the bid-side account, signed USDC; may be omitted on opens from flat. */\n bidAccountPnl?: string;\n /**\n * Taker/maker fees, present when nonzero. The official model types them\n * as StrictInt with NO documented unit or scale; until a captured\n * nonzero payload proves one, adapters must treat these as unavailable.\n */\n takerFee?: number | string;\n makerFee?: number | string;\n /** Position size (absolute) of each side before the trade executed. */\n takerPositionSizeBefore: string;\n makerPositionSizeBefore: string;\n /** Whether the side's position sign changed (crossed or left zero). */\n takerPositionSignChanged: boolean;\n makerPositionSignChanged: boolean;\n};\n\n/**\n * Response of `GET /api/v1/trades`.\n */\nexport type LighterTradesResponse = {\n code: number;\n message?: string;\n nextCursor?: string;\n trades: LighterRestTrade[];\n};\n\n/** Query parameters supported by the Lighter trades endpoint. */\nexport type LighterTradesQuery = {\n limit: number;\n cursor?: string;\n from?: number;\n marketId?: number;\n};\n\n/**\n * One entry from `GET /api/v1/positionFunding` (post-camelization).\n */\nexport type LighterPositionFunding = {\n timestamp: number;\n marketId: number;\n fundingId: number;\n change: string;\n rate: string;\n positionSize: string;\n positionSide: string;\n};\n\n/**\n * Response of `GET /api/v1/positionFunding`.\n */\nexport type LighterPositionFundingsResponse = {\n code: number;\n message?: string;\n positionFundings: LighterPositionFunding[];\n};\n\n/**\n * One record from `GET /api/v1/pnl` (post-camelization).\n */\nexport type LighterPnlRecord = {\n timestamp: number;\n tradePnl: number;\n inflow: number;\n outflow: number;\n volume: number;\n};\n\n/**\n * Response of `GET /api/v1/pnl`.\n */\nexport type LighterPnlResponse = {\n code: number;\n message?: string;\n resolution?: string;\n pnl?: LighterPnlRecord[];\n};\n\n/**\n * One candle from `GET /api/v1/candles` (compact wire keys: t/o/h/l/c/v).\n */\nexport type LighterCandle = {\n t: number;\n o: number;\n h: number;\n l: number;\n c: number;\n v: number;\n};\n\n/**\n * Response of `GET /api/v1/candles`.\n */\nexport type LighterCandlesResponse = {\n code: number;\n message?: string;\n /** Resolution echo (e.g. `15m`). */\n r?: string;\n /** Ascending candle series. */\n c?: LighterCandle[];\n};\n\n/**\n * One order from `GET /api/v1/accountActiveOrders`.\n */\nexport type LighterApiOrder = {\n orderIndex: number;\n clientOrderIndex: number;\n marketIndex: number;\n ownerAccountIndex: number;\n initialBaseAmount: string;\n remainingBaseAmount: string;\n /** Executed base amount; zero remaining does not imply a fill on cancellation. */\n filledBaseAmount?: string;\n price: string;\n isAsk: boolean;\n type: string;\n timeInForce: string;\n reduceOnly: number | boolean;\n status: string;\n orderExpiry: number;\n /** Unix seconds from order endpoints, unlike millisecond trade timestamps. */\n timestamp: number;\n /**\n * Trigger level for stop-loss/take-profit orders. Note `price` on a\n * trigger order is the ±5% protection EXECUTION price, not this level.\n */\n triggerPrice?: string;\n /** Venue string order id (linkage fields reference this form). */\n orderId?: string;\n /** OCO/linkage: parent order references. */\n parentOrderIndex?: number;\n parentOrderId?: string;\n /** OCO linkage: the sibling this order auto-cancels when it fires. */\n toCancelOrderId0?: string;\n toTriggerOrderId0?: string;\n toTriggerOrderId1?: string;\n};\n\n/**\n * Response of `GET /api/v1/accountActiveOrders`.\n */\nexport type LighterActiveOrdersResponse = {\n code: number;\n message?: string;\n orders: LighterApiOrder[];\n};\n\n/**\n * Response of `GET /api/v1/accountInactiveOrders` (historical order\n * lifecycle: filled / canceled orders, newest first, cursor-paged).\n */\nexport type LighterInactiveOrdersResponse = {\n code: number;\n message?: string;\n nextCursor?: string;\n orders: LighterApiOrder[];\n};\n\n/**\n * One entry of `GET /api/v1/deposit/history` (camelized).\n */\nexport type LighterDepositHistoryItem = {\n id: string;\n assetId: number;\n amount: string;\n timestamp: number;\n status: string;\n l1TxHash: string;\n};\n\n/**\n * Response of `GET /api/v1/deposit/history`.\n */\nexport type LighterDepositHistoryResponse = {\n code: number;\n message?: string;\n deposits: LighterDepositHistoryItem[];\n cursor?: string;\n};\n\n/**\n * One entry of `GET /api/v1/withdraw/history` (camelized).\n */\nexport type LighterWithdrawHistoryItem = {\n id: string;\n assetId: number;\n amount: string;\n timestamp: number;\n status: string;\n type: string;\n l1TxHash: string;\n};\n\n/**\n * Response of `GET /api/v1/withdraw/history`.\n */\nexport type LighterWithdrawHistoryResponse = {\n code: number;\n message?: string;\n withdraws: LighterWithdrawHistoryItem[];\n cursor?: string;\n};\n\nexport type LighterTransferType = 'L2TransferInflow' | 'L2TransferOutflow';\n\n/**\n * One entry of `GET /api/v1/transfer/history` (camelized).\n */\nexport type LighterTransferHistoryItem = {\n id: string;\n assetId: number;\n amount: string;\n fee: string;\n timestamp: number;\n type: LighterTransferType;\n fromL1Address: string;\n toL1Address: string;\n fromAccountIndex: number;\n toAccountIndex: number;\n txHash: string;\n};\n\n/**\n * Response of `GET /api/v1/transfer/history`.\n */\nexport type LighterTransferHistoryResponse = {\n code: number;\n message?: string;\n transfers: LighterTransferHistoryItem[];\n cursor?: string;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lighterAdapter.d.ts","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,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;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,CAsIX;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,
|
|
1
|
+
{"version":3,"file":"lighterAdapter.d.ts","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,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;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,CAsIX;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,CA6EP"}
|
|
@@ -505,7 +505,10 @@ function adaptOrderStatus(status) {
|
|
|
505
505
|
export function adaptOrderFromLighter(order, symbol) {
|
|
506
506
|
const original = parseFloat(order.initialBaseAmount);
|
|
507
507
|
const remaining = parseFloat(order.remainingBaseAmount);
|
|
508
|
-
|
|
508
|
+
// Canceled orders have zero remaining size even when nothing filled.
|
|
509
|
+
const filled = order.filledBaseAmount === undefined
|
|
510
|
+
? Math.max(original - remaining, 0)
|
|
511
|
+
: parseFloat(order.filledBaseAmount);
|
|
509
512
|
const isTrigger = !['market', 'limit'].includes(order.type);
|
|
510
513
|
const triggerPrice = order.triggerPrice !== undefined && parseFloat(order.triggerPrice) > 0
|
|
511
514
|
? order.triggerPrice
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lighterAdapter.js","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 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 accountPnl = accountIsAsk ? trade.askAccountPnl : trade.bidAccountPnl;\n // The venue omits PnL on opens from flat. Only a validated zero pre-trade\n // position proves zero realized PnL; never assume it for an existing position.\n const pnl =\n accountPnl === undefined && positionBefore === 0 ? '0' : accountPnl;\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 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 // Order endpoints report seconds; preserve already-normalized millisecond\n // inputs. Trade timestamps are a separate millisecond wire contract.\n timestamp:\n order.timestamp < 1e12 ? order.timestamp * 1000 : order.timestamp,\n reduceOnly: Boolean(order.reduceOnly),\n providerId: 'lighter',\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lighterAdapter.js","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 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 accountPnl = accountIsAsk ? trade.askAccountPnl : trade.bidAccountPnl;\n // The venue omits PnL on opens from flat. Only a validated zero pre-trade\n // position proves zero realized PnL; never assume it for an existing position.\n const pnl =\n accountPnl === undefined && positionBefore === 0 ? '0' : accountPnl;\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 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 // Canceled orders have zero remaining size even when nothing filled.\n const filled =\n order.filledBaseAmount === undefined\n ? Math.max(original - remaining, 0)\n : parseFloat(order.filledBaseAmount);\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 // Order endpoints report seconds; preserve already-normalized millisecond\n // inputs. Trade timestamps are a separate millisecond wire contract.\n timestamp:\n order.timestamp < 1e12 ? order.timestamp * 1000 : order.timestamp,\n reduceOnly: Boolean(order.reduceOnly),\n providerId: 'lighter',\n };\n}\n"]}
|
package/package.json
CHANGED