import { Rpc } from "../../../../helpers"; import { BinaryReader } from "../../../../binary"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; import { QueryConnectionRequest, QueryConnectionResponse, QueryConnectionsRequest, QueryConnectionsResponse, QueryClientConnectionsRequest, QueryClientConnectionsResponse, QueryConnectionClientStateRequest, QueryConnectionClientStateResponse, QueryConnectionConsensusStateRequest, QueryConnectionConsensusStateResponse } from "./query"; /** Query provides defines the gRPC querier service */ export interface Query { /** Connection queries an IBC connection end. */ connection(request: QueryConnectionRequest): Promise; /** Connections queries all the IBC connections of a chain. */ connections(request?: QueryConnectionsRequest): Promise; /** * ClientConnections queries the connection paths associated with a client * state. */ clientConnections(request: QueryClientConnectionsRequest): Promise; /** * ConnectionClientState queries the client state associated with the * connection. */ connectionClientState(request: QueryConnectionClientStateRequest): Promise; /** * ConnectionConsensusState queries the consensus state associated with the * connection. */ connectionConsensusState(request: QueryConnectionConsensusStateRequest): Promise; } export class QueryClientImpl implements Query { private readonly rpc: Rpc; constructor(rpc: Rpc) { this.rpc = rpc; this.connection = this.connection.bind(this); this.connections = this.connections.bind(this); this.clientConnections = this.clientConnections.bind(this); this.connectionClientState = this.connectionClientState.bind(this); this.connectionConsensusState = this.connectionConsensusState.bind(this); } connection(request: QueryConnectionRequest): Promise { const data = QueryConnectionRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.connection.v1.Query", "Connection", data); return promise.then(data => QueryConnectionResponse.decode(new BinaryReader(data))); } connections(request: QueryConnectionsRequest = { pagination: undefined }): Promise { const data = QueryConnectionsRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.connection.v1.Query", "Connections", data); return promise.then(data => QueryConnectionsResponse.decode(new BinaryReader(data))); } clientConnections(request: QueryClientConnectionsRequest): Promise { const data = QueryClientConnectionsRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.connection.v1.Query", "ClientConnections", data); return promise.then(data => QueryClientConnectionsResponse.decode(new BinaryReader(data))); } connectionClientState(request: QueryConnectionClientStateRequest): Promise { const data = QueryConnectionClientStateRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.connection.v1.Query", "ConnectionClientState", data); return promise.then(data => QueryConnectionClientStateResponse.decode(new BinaryReader(data))); } connectionConsensusState(request: QueryConnectionConsensusStateRequest): Promise { const data = QueryConnectionConsensusStateRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.connection.v1.Query", "ConnectionConsensusState", data); return promise.then(data => QueryConnectionConsensusStateResponse.decode(new BinaryReader(data))); } } export const createRpcQueryExtension = (base: QueryClient) => { const rpc = createProtobufRpcClient(base); const queryService = new QueryClientImpl(rpc); return { connection(request: QueryConnectionRequest): Promise { return queryService.connection(request); }, connections(request?: QueryConnectionsRequest): Promise { return queryService.connections(request); }, clientConnections(request: QueryClientConnectionsRequest): Promise { return queryService.clientConnections(request); }, connectionClientState(request: QueryConnectionClientStateRequest): Promise { return queryService.connectionClientState(request); }, connectionConsensusState(request: QueryConnectionConsensusStateRequest): Promise { return queryService.connectionConsensusState(request); } }; };