// package: injective_derivative_exchange_rpc
// file: injective_derivative_exchange_rpc.proto

import * as injective_derivative_exchange_rpc_pb from "./injective_derivative_exchange_rpc_pb";
import {grpc} from "@improbable-eng/grpc-web";

type InjectiveDerivativeExchangeRPCMarkets = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.MarketsRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.MarketsResponse;
};

type InjectiveDerivativeExchangeRPCMarket = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.MarketRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.MarketResponse;
};

type InjectiveDerivativeExchangeRPCStreamMarket = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: true;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.StreamMarketRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.StreamMarketResponse;
};

type InjectiveDerivativeExchangeRPCBinaryOptionsMarkets = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.BinaryOptionsMarketsRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.BinaryOptionsMarketsResponse;
};

type InjectiveDerivativeExchangeRPCBinaryOptionsMarket = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.BinaryOptionsMarketRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.BinaryOptionsMarketResponse;
};

type InjectiveDerivativeExchangeRPCOrderbook = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.OrderbookRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.OrderbookResponse;
};

type InjectiveDerivativeExchangeRPCOrderbooks = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.OrderbooksRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.OrderbooksResponse;
};

type InjectiveDerivativeExchangeRPCStreamOrderbook = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: true;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.StreamOrderbookRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.StreamOrderbookResponse;
};

type InjectiveDerivativeExchangeRPCOrders = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.OrdersRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.OrdersResponse;
};

type InjectiveDerivativeExchangeRPCPositions = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.PositionsRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.PositionsResponse;
};

type InjectiveDerivativeExchangeRPCLiquidablePositions = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.LiquidablePositionsRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.LiquidablePositionsResponse;
};

type InjectiveDerivativeExchangeRPCFundingPayments = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.FundingPaymentsRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.FundingPaymentsResponse;
};

type InjectiveDerivativeExchangeRPCFundingRates = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.FundingRatesRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.FundingRatesResponse;
};

type InjectiveDerivativeExchangeRPCStreamPositions = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: true;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.StreamPositionsRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.StreamPositionsResponse;
};

type InjectiveDerivativeExchangeRPCStreamOrders = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: true;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.StreamOrdersRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.StreamOrdersResponse;
};

type InjectiveDerivativeExchangeRPCTrades = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.TradesRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.TradesResponse;
};

type InjectiveDerivativeExchangeRPCStreamTrades = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: true;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.StreamTradesRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.StreamTradesResponse;
};

type InjectiveDerivativeExchangeRPCSubaccountOrdersList = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.SubaccountOrdersListRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.SubaccountOrdersListResponse;
};

type InjectiveDerivativeExchangeRPCSubaccountTradesList = {
  readonly methodName: string;
  readonly service: typeof InjectiveDerivativeExchangeRPC;
  readonly requestStream: false;
  readonly responseStream: false;
  readonly requestType: typeof injective_derivative_exchange_rpc_pb.SubaccountTradesListRequest;
  readonly responseType: typeof injective_derivative_exchange_rpc_pb.SubaccountTradesListResponse;
};

export class InjectiveDerivativeExchangeRPC {
  static readonly serviceName: string;
  static readonly Markets: InjectiveDerivativeExchangeRPCMarkets;
  static readonly Market: InjectiveDerivativeExchangeRPCMarket;
  static readonly StreamMarket: InjectiveDerivativeExchangeRPCStreamMarket;
  static readonly BinaryOptionsMarkets: InjectiveDerivativeExchangeRPCBinaryOptionsMarkets;
  static readonly BinaryOptionsMarket: InjectiveDerivativeExchangeRPCBinaryOptionsMarket;
  static readonly Orderbook: InjectiveDerivativeExchangeRPCOrderbook;
  static readonly Orderbooks: InjectiveDerivativeExchangeRPCOrderbooks;
  static readonly StreamOrderbook: InjectiveDerivativeExchangeRPCStreamOrderbook;
  static readonly Orders: InjectiveDerivativeExchangeRPCOrders;
  static readonly Positions: InjectiveDerivativeExchangeRPCPositions;
  static readonly LiquidablePositions: InjectiveDerivativeExchangeRPCLiquidablePositions;
  static readonly FundingPayments: InjectiveDerivativeExchangeRPCFundingPayments;
  static readonly FundingRates: InjectiveDerivativeExchangeRPCFundingRates;
  static readonly StreamPositions: InjectiveDerivativeExchangeRPCStreamPositions;
  static readonly StreamOrders: InjectiveDerivativeExchangeRPCStreamOrders;
  static readonly Trades: InjectiveDerivativeExchangeRPCTrades;
  static readonly StreamTrades: InjectiveDerivativeExchangeRPCStreamTrades;
  static readonly SubaccountOrdersList: InjectiveDerivativeExchangeRPCSubaccountOrdersList;
  static readonly SubaccountTradesList: InjectiveDerivativeExchangeRPCSubaccountTradesList;
}

export type ServiceError = { message: string, code: number; metadata: grpc.Metadata }
export type Status = { details: string, code: number; metadata: grpc.Metadata }

interface UnaryResponse {
  cancel(): void;
}
interface ResponseStream<T> {
  cancel(): void;
  on(type: 'data', handler: (message: T) => void): ResponseStream<T>;
  on(type: 'end', handler: (status?: Status) => void): ResponseStream<T>;
  on(type: 'status', handler: (status: Status) => void): ResponseStream<T>;
}
interface RequestStream<T> {
  write(message: T): RequestStream<T>;
  end(): void;
  cancel(): void;
  on(type: 'end', handler: (status?: Status) => void): RequestStream<T>;
  on(type: 'status', handler: (status: Status) => void): RequestStream<T>;
}
interface BidirectionalStream<ReqT, ResT> {
  write(message: ReqT): BidirectionalStream<ReqT, ResT>;
  end(): void;
  cancel(): void;
  on(type: 'data', handler: (message: ResT) => void): BidirectionalStream<ReqT, ResT>;
  on(type: 'end', handler: (status?: Status) => void): BidirectionalStream<ReqT, ResT>;
  on(type: 'status', handler: (status: Status) => void): BidirectionalStream<ReqT, ResT>;
}

export class InjectiveDerivativeExchangeRPCClient {
  readonly serviceHost: string;

  constructor(serviceHost: string, options?: grpc.RpcOptions);
  markets(
    requestMessage: injective_derivative_exchange_rpc_pb.MarketsRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.MarketsResponse|null) => void
  ): UnaryResponse;
  markets(
    requestMessage: injective_derivative_exchange_rpc_pb.MarketsRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.MarketsResponse|null) => void
  ): UnaryResponse;
  market(
    requestMessage: injective_derivative_exchange_rpc_pb.MarketRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.MarketResponse|null) => void
  ): UnaryResponse;
  market(
    requestMessage: injective_derivative_exchange_rpc_pb.MarketRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.MarketResponse|null) => void
  ): UnaryResponse;
  streamMarket(requestMessage: injective_derivative_exchange_rpc_pb.StreamMarketRequest, metadata?: grpc.Metadata): ResponseStream<injective_derivative_exchange_rpc_pb.StreamMarketResponse>;
  binaryOptionsMarkets(
    requestMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketsRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketsResponse|null) => void
  ): UnaryResponse;
  binaryOptionsMarkets(
    requestMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketsRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketsResponse|null) => void
  ): UnaryResponse;
  binaryOptionsMarket(
    requestMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketResponse|null) => void
  ): UnaryResponse;
  binaryOptionsMarket(
    requestMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.BinaryOptionsMarketResponse|null) => void
  ): UnaryResponse;
  orderbook(
    requestMessage: injective_derivative_exchange_rpc_pb.OrderbookRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.OrderbookResponse|null) => void
  ): UnaryResponse;
  orderbook(
    requestMessage: injective_derivative_exchange_rpc_pb.OrderbookRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.OrderbookResponse|null) => void
  ): UnaryResponse;
  orderbooks(
    requestMessage: injective_derivative_exchange_rpc_pb.OrderbooksRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.OrderbooksResponse|null) => void
  ): UnaryResponse;
  orderbooks(
    requestMessage: injective_derivative_exchange_rpc_pb.OrderbooksRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.OrderbooksResponse|null) => void
  ): UnaryResponse;
  streamOrderbook(requestMessage: injective_derivative_exchange_rpc_pb.StreamOrderbookRequest, metadata?: grpc.Metadata): ResponseStream<injective_derivative_exchange_rpc_pb.StreamOrderbookResponse>;
  orders(
    requestMessage: injective_derivative_exchange_rpc_pb.OrdersRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.OrdersResponse|null) => void
  ): UnaryResponse;
  orders(
    requestMessage: injective_derivative_exchange_rpc_pb.OrdersRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.OrdersResponse|null) => void
  ): UnaryResponse;
  positions(
    requestMessage: injective_derivative_exchange_rpc_pb.PositionsRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.PositionsResponse|null) => void
  ): UnaryResponse;
  positions(
    requestMessage: injective_derivative_exchange_rpc_pb.PositionsRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.PositionsResponse|null) => void
  ): UnaryResponse;
  liquidablePositions(
    requestMessage: injective_derivative_exchange_rpc_pb.LiquidablePositionsRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.LiquidablePositionsResponse|null) => void
  ): UnaryResponse;
  liquidablePositions(
    requestMessage: injective_derivative_exchange_rpc_pb.LiquidablePositionsRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.LiquidablePositionsResponse|null) => void
  ): UnaryResponse;
  fundingPayments(
    requestMessage: injective_derivative_exchange_rpc_pb.FundingPaymentsRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.FundingPaymentsResponse|null) => void
  ): UnaryResponse;
  fundingPayments(
    requestMessage: injective_derivative_exchange_rpc_pb.FundingPaymentsRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.FundingPaymentsResponse|null) => void
  ): UnaryResponse;
  fundingRates(
    requestMessage: injective_derivative_exchange_rpc_pb.FundingRatesRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.FundingRatesResponse|null) => void
  ): UnaryResponse;
  fundingRates(
    requestMessage: injective_derivative_exchange_rpc_pb.FundingRatesRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.FundingRatesResponse|null) => void
  ): UnaryResponse;
  streamPositions(requestMessage: injective_derivative_exchange_rpc_pb.StreamPositionsRequest, metadata?: grpc.Metadata): ResponseStream<injective_derivative_exchange_rpc_pb.StreamPositionsResponse>;
  streamOrders(requestMessage: injective_derivative_exchange_rpc_pb.StreamOrdersRequest, metadata?: grpc.Metadata): ResponseStream<injective_derivative_exchange_rpc_pb.StreamOrdersResponse>;
  trades(
    requestMessage: injective_derivative_exchange_rpc_pb.TradesRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.TradesResponse|null) => void
  ): UnaryResponse;
  trades(
    requestMessage: injective_derivative_exchange_rpc_pb.TradesRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.TradesResponse|null) => void
  ): UnaryResponse;
  streamTrades(requestMessage: injective_derivative_exchange_rpc_pb.StreamTradesRequest, metadata?: grpc.Metadata): ResponseStream<injective_derivative_exchange_rpc_pb.StreamTradesResponse>;
  subaccountOrdersList(
    requestMessage: injective_derivative_exchange_rpc_pb.SubaccountOrdersListRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.SubaccountOrdersListResponse|null) => void
  ): UnaryResponse;
  subaccountOrdersList(
    requestMessage: injective_derivative_exchange_rpc_pb.SubaccountOrdersListRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.SubaccountOrdersListResponse|null) => void
  ): UnaryResponse;
  subaccountTradesList(
    requestMessage: injective_derivative_exchange_rpc_pb.SubaccountTradesListRequest,
    metadata: grpc.Metadata,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.SubaccountTradesListResponse|null) => void
  ): UnaryResponse;
  subaccountTradesList(
    requestMessage: injective_derivative_exchange_rpc_pb.SubaccountTradesListRequest,
    callback: (error: ServiceError|null, responseMessage: injective_derivative_exchange_rpc_pb.SubaccountTradesListResponse|null) => void
  ): UnaryResponse;
}

