Lux Docs
Exchange sdk

API Reference

TypeScript API for order book, orders, trades, and candles

Book

class Book {
  id: string              // UUID
  name: string            // e.g. "BTC-USD"
  askSize: number         // number of ask orders
  bidSize: number         // number of bid orders
  spread: Decimal         // current ask - bid
  displaySpread: Decimal  // cached after settle
  meanPrice: Decimal      // (ask + bid) / 2
  lastPrice: Decimal      // last trade fill price
  orderBook: OrderBook    // { asks: [price, qty][], bids: [price, qty][] }

  addOrder(order: Order): boolean
  cancelOrder(order: Order): boolean
  nearestAsk(): Order | undefined
  nearestBid(): Order | undefined
  settle(): Trade[]
  start(fn: (book: Book, trades: Trade[]) => void): ExecutionContext
}

Order

class Order {
  id: string               // UUID (auto-generated)
  seqId: number            // monotonic sequence number
  externalId: string       // caller-provided ID
  side: OrderSide          // 'ask' | 'bid'
  type: OrderType          // 'limit' | 'market'
  status: OrderStatus      // lifecycle state
  price: Decimal           // order price (0 for market orders)
  quantity: Decimal         // order size
  fillQuantity: Decimal    // amount filled
  createdAt: number        // unix timestamp

  constructor(
    externalId: string,
    side: OrderSide,
    type: OrderType,
    quantity: number | string | Decimal,
    price: number | string | Decimal
  )

  clone(): Order
}

Trade

class Trade {
  id: string                // UUID
  fillPrice: Decimal        // execution price
  fillQuantity: Decimal     // execution quantity
  newOrders: Order[]        // remainder orders from partial fills
  matchedOrders: Order[]    // the bid/ask pair that matched
  rejectedOrders: Order[]   // orders that could not be re-queued
  executedAt: number        // unix timestamp
}

Candle

class Candle {
  openTime: number
  closeTime: number
  interval: CandleInterval
  open: Decimal
  high: Decimal
  low: Decimal
  close: Decimal
  volume: Decimal            // price * quantity sum
  quoteAssetVolume: Decimal  // quantity sum
  trades: number             // trade count

  addTrade(trade: Trade): Candle
  export(): any[]  // [openTime, closeTime, O, H, L, C, vol, quoteVol, trades]
}

enum CandleInterval {
  ONE_MINUTE = '1 minute',
  ONE_HOUR   = '1 hour',
  ONE_DAY    = '1 day',
  ONE_WEEK   = '1 week',
}

Servers

// Create Express HTTP server for order management
import { createHttp } from '@hanzo/matching-engine'

// Create Socket.IO server for real-time streaming
import { createSocketIO } from '@hanzo/matching-engine'

Both servers wrap a Book instance and expose order submission, cancellation, and order book queries over their respective protocols.

On this page