Skip to main content
Example code snippets to stream from the indexer for derivatives market module related data using StreamManagerV2.

Using gRPC Stream with StreamManagerV2

Stream orderbook updates

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-orderbook-updates',
  streamFactory: () => stream.streamOrderbookUpdates({ 
    marketIds: ['0x...'],
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (orderbookUpdates) => {
    console.log(orderbookUpdates)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

Stream derivative orders

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { OrderSide } from '@injectivelabs/sdk-ts/types'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-orders',
  streamFactory: () => stream.streamOrders({
    marketId: '0x...',
    subaccountId: '0x...', // optional
    orderSide: OrderSide.Buy, // optional
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (orders) => {
    console.log(orders)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

Stream derivative order history

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import {
  TradeDirection,
  TradeExecutionType,
} from '@injectivelabs/sdk-ts/types'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-order-history',
  streamFactory: () => stream.streamOrdersHistory({
    marketId: '0x...', // optional
    subaccountId: '0x...', // optional
    direction: TradeDirection.Buy, // optional
    executionTypes: [TradeExecutionType.Market], // optional
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (orderHistory) => {
    console.log(orderHistory)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

Stream derivative trades

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { TradeDirection } from '@injectivelabs/sdk-ts/types'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-trades',
  streamFactory: () => stream.streamTrades({
    marketIds: ['0x...'], // optional
    subaccountId: '0x...', // optional
    direction: TradeDirection.Buy, // optional
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (trades) => {
    console.log(trades)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

Stream derivative positions

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-positions',
  streamFactory: () => stream.streamPositions({
    marketId: '0x...', // optional
    subaccountId: '0x...', // optional
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (positions) => {
    console.log(positions)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

Stream derivative markets

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-markets',
  streamFactory: () => stream.streamMarkets({
    marketIds: ['0x...'], // optional
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (markets) => {
    console.log(markets)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()