@lifi/perps-sdk-provider-lighter 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/cjs/LighterProvider.d.ts.map +1 -1
  2. package/dist/cjs/LighterProvider.js +27 -1
  3. package/dist/cjs/LighterProvider.js.map +1 -1
  4. package/dist/cjs/accountConfig.d.ts.map +1 -1
  5. package/dist/cjs/accountConfig.js +2 -0
  6. package/dist/cjs/accountConfig.js.map +1 -1
  7. package/dist/cjs/signers/LighterSigner.d.ts.map +1 -1
  8. package/dist/cjs/signers/LighterSigner.js +2 -0
  9. package/dist/cjs/signers/LighterSigner.js.map +1 -1
  10. package/dist/cjs/utils/mapTwap.d.ts +4 -0
  11. package/dist/cjs/utils/mapTwap.d.ts.map +1 -0
  12. package/dist/cjs/utils/mapTwap.js +31 -0
  13. package/dist/cjs/utils/mapTwap.js.map +1 -0
  14. package/dist/cjs/utils/ohlcvInterval.d.ts +2 -1
  15. package/dist/cjs/utils/ohlcvInterval.d.ts.map +1 -1
  16. package/dist/cjs/utils/ohlcvInterval.js.map +1 -1
  17. package/dist/cjs/utils/wireEncoding.d.ts.map +1 -1
  18. package/dist/cjs/utils/wireEncoding.js +1 -0
  19. package/dist/cjs/utils/wireEncoding.js.map +1 -1
  20. package/dist/esm/LighterProvider.d.ts.map +1 -1
  21. package/dist/esm/LighterProvider.js +27 -1
  22. package/dist/esm/LighterProvider.js.map +1 -1
  23. package/dist/esm/accountConfig.d.ts.map +1 -1
  24. package/dist/esm/accountConfig.js +2 -0
  25. package/dist/esm/accountConfig.js.map +1 -1
  26. package/dist/esm/signers/LighterSigner.d.ts.map +1 -1
  27. package/dist/esm/signers/LighterSigner.js +2 -0
  28. package/dist/esm/signers/LighterSigner.js.map +1 -1
  29. package/dist/esm/utils/mapTwap.d.ts +5 -0
  30. package/dist/esm/utils/mapTwap.d.ts.map +1 -0
  31. package/dist/esm/utils/mapTwap.js +25 -0
  32. package/dist/esm/utils/mapTwap.js.map +1 -0
  33. package/dist/esm/utils/ohlcvInterval.d.ts +2 -1
  34. package/dist/esm/utils/ohlcvInterval.d.ts.map +1 -1
  35. package/dist/esm/utils/ohlcvInterval.js.map +1 -1
  36. package/dist/esm/utils/wireEncoding.d.ts +2 -3
  37. package/dist/esm/utils/wireEncoding.d.ts.map +1 -1
  38. package/dist/esm/utils/wireEncoding.js +4 -4
  39. package/dist/esm/utils/wireEncoding.js.map +1 -1
  40. package/dist/types/LighterProvider.d.ts.map +1 -1
  41. package/dist/types/accountConfig.d.ts.map +1 -1
  42. package/dist/types/signers/LighterSigner.d.ts.map +1 -1
  43. package/dist/types/utils/mapTwap.d.ts +5 -0
  44. package/dist/types/utils/mapTwap.d.ts.map +1 -0
  45. package/dist/types/utils/ohlcvInterval.d.ts +2 -1
  46. package/dist/types/utils/ohlcvInterval.d.ts.map +1 -1
  47. package/dist/types/utils/wireEncoding.d.ts +2 -3
  48. package/dist/types/utils/wireEncoding.d.ts.map +1 -1
  49. package/package.json +3 -3
  50. package/src/LighterProvider.ts +47 -1
  51. package/src/accountConfig.ts +2 -0
  52. package/src/signers/LighterSigner.ts +2 -0
  53. package/src/utils/mapTwap.ts +31 -0
  54. package/src/utils/ohlcvInterval.ts +3 -2
  55. package/src/utils/wireEncoding.ts +4 -3
@@ -377,6 +377,7 @@ export class LighterSigner {
377
377
  switch (action) {
378
378
  case ActionType.PLACE_ORDER:
379
379
  case ActionType.PLACE_TRIGGER_ORDER:
380
+ case ActionType.PLACE_TWAP_ORDER:
380
381
  return wasm.SignCreateOrder(
381
382
  numberField(p, 'market_index'),
382
383
  numberField(p, 'client_order_index'),
@@ -414,6 +415,7 @@ export class LighterSigner {
414
415
  ctx.accountIndex
415
416
  )
416
417
  case ActionType.CANCEL_ORDER:
418
+ case ActionType.CANCEL_TWAP_ORDER:
417
419
  return wasm.SignCancelOrder(
418
420
  numberField(p, 'market_index'),
419
421
  numberField(p, 'order_index'),
@@ -0,0 +1,31 @@
1
+ import { toMarketDisplay } from '@lifi/perps-sdk'
2
+ import {
3
+ type Market,
4
+ OrderSide,
5
+ type TwapOrder,
6
+ TwapOrderStatus,
7
+ } from '@lifi/perps-types'
8
+ import Big from 'big.js'
9
+ import type { LtOrder } from '../types/order.js'
10
+
11
+ /** Map an active Lighter `twap` parent order to the shared running-TWAP model. */
12
+ export const mapRunningTwap = (order: LtOrder, market: Market): TwapOrder => {
13
+ const filledSize = new Big(order.filled_base_amount)
14
+ return {
15
+ twapId: String(order.order_index),
16
+ market: toMarketDisplay(market),
17
+ side: order.is_ask ? OrderSide.SELL : OrderSide.BUY,
18
+ totalSize: order.initial_base_amount,
19
+ filledSize: order.filled_base_amount,
20
+ ...(filledSize.eq(0)
21
+ ? {}
22
+ : {
23
+ avgFillPrice: new Big(order.filled_quote_amount)
24
+ .div(filledSize)
25
+ .toString(),
26
+ }),
27
+ startedAt: new Date(order.created_at * 1000).toISOString(),
28
+ durationSeconds: (order.order_expiry - order.created_at * 1000) / 1000,
29
+ status: TwapOrderStatus.RUNNING,
30
+ }
31
+ }
@@ -1,4 +1,5 @@
1
1
  import { PerpsError } from '@lifi/perps-sdk'
2
+ import type { OhlcvInterval } from '@lifi/perps-types'
2
3
  import { PerpsErrorCode } from '@lifi/perps-types'
3
4
 
4
5
  /**
@@ -8,7 +9,7 @@ import { PerpsErrorCode } from '@lifi/perps-types'
8
9
  * direct match (3m, 2h, 8h, 3d, 1M) raise a validation error rather than
9
10
  * silently rounding — the caller picks a supported timeframe.
10
11
  */
11
- const LIGHTER_SUPPORTED_INTERVALS: Record<string, string> = {
12
+ const LIGHTER_SUPPORTED_INTERVALS: Partial<Record<OhlcvInterval, string>> = {
12
13
  '1m': '1m',
13
14
  '5m': '5m',
14
15
  '15m': '15m',
@@ -26,7 +27,7 @@ const LIGHTER_SUPPORTED_INTERVALS: Record<string, string> = {
26
27
  *
27
28
  * @public
28
29
  */
29
- export const mapInterval = (interval: string): string => {
30
+ export const mapInterval = (interval: OhlcvInterval): string => {
30
31
  const resolution = LIGHTER_SUPPORTED_INTERVALS[interval]
31
32
  if (!resolution) {
32
33
  throw new PerpsError(
@@ -13,6 +13,7 @@ import {
13
13
  LT_ORDER_TYPE_STOP_LOSS_LIMIT,
14
14
  LT_ORDER_TYPE_TAKE_PROFIT,
15
15
  LT_ORDER_TYPE_TAKE_PROFIT_LIMIT,
16
+ LT_ORDER_TYPE_TWAP,
16
17
  LT_TIME_IN_FORCE_GTC,
17
18
  LT_TIME_IN_FORCE_IOC,
18
19
  LT_TIME_IN_FORCE_POST_ONLY,
@@ -61,10 +62,9 @@ export const leverageToFraction = (leverage: number): number => {
61
62
 
62
63
  /**
63
64
  * Map a LI.FI `OrderType` value to Lighter's integer wire type.
64
- *
65
65
  * Supported mappings are LIMIT → 0, MARKET → 1, STOP_MARKET → 2,
66
- * STOP_LIMIT → 3, TAKE_PROFIT_MARKET → 4, and TAKE_PROFIT_LIMIT → 5.
67
- * Omitted or unknown values fall back to LIMIT.
66
+ * STOP_LIMIT → 3, TAKE_PROFIT_MARKET → 4, TAKE_PROFIT_LIMIT → 5, and
67
+ * TWAP → 6. Omitted or unknown values fall back to LIMIT.
68
68
  *
69
69
  * @param type - LI.FI order type value.
70
70
  * @returns The corresponding Lighter order-type integer.
@@ -78,6 +78,7 @@ export const mapOrderTypeToInt = (type?: string): number => {
78
78
  STOP_LIMIT: LT_ORDER_TYPE_STOP_LOSS_LIMIT,
79
79
  TAKE_PROFIT_MARKET: LT_ORDER_TYPE_TAKE_PROFIT,
80
80
  TAKE_PROFIT_LIMIT: LT_ORDER_TYPE_TAKE_PROFIT_LIMIT,
81
+ TWAP: LT_ORDER_TYPE_TWAP,
81
82
  }
82
83
  return map[type ?? 'LIMIT'] ?? LT_ORDER_TYPE_LIMIT
83
84
  }