import { Rpc } from "../../../../helpers"; import { BinaryReader } from "../../../../binary"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; import { QueryDenomTraceRequest, QueryDenomTraceResponse, QueryDenomTracesRequest, QueryDenomTracesResponse, QueryParamsRequest, QueryParamsResponse } from "./query"; /** Query provides defines the gRPC querier service. */ export interface Query { /** DenomTrace queries a denomination trace information. */ denomTrace(request: QueryDenomTraceRequest): Promise; /** DenomTraces queries all denomination traces. */ denomTraces(request?: QueryDenomTracesRequest): Promise; /** Params queries all parameters of the ibc-transfer module. */ params(request?: QueryParamsRequest): Promise; } export class QueryClientImpl implements Query { private readonly rpc: Rpc; constructor(rpc: Rpc) { this.rpc = rpc; this.denomTrace = this.denomTrace.bind(this); this.denomTraces = this.denomTraces.bind(this); this.params = this.params.bind(this); } denomTrace(request: QueryDenomTraceRequest): Promise { const data = QueryDenomTraceRequest.encode(request).finish(); const promise = this.rpc.request("ibc.applications.transfer.v1.Query", "DenomTrace", data); return promise.then(data => QueryDenomTraceResponse.decode(new BinaryReader(data))); } denomTraces(request: QueryDenomTracesRequest = { pagination: undefined }): Promise { const data = QueryDenomTracesRequest.encode(request).finish(); const promise = this.rpc.request("ibc.applications.transfer.v1.Query", "DenomTraces", data); return promise.then(data => QueryDenomTracesResponse.decode(new BinaryReader(data))); } params(request: QueryParamsRequest = {}): Promise { const data = QueryParamsRequest.encode(request).finish(); const promise = this.rpc.request("ibc.applications.transfer.v1.Query", "Params", data); return promise.then(data => QueryParamsResponse.decode(new BinaryReader(data))); } } export const createRpcQueryExtension = (base: QueryClient) => { const rpc = createProtobufRpcClient(base); const queryService = new QueryClientImpl(rpc); return { denomTrace(request: QueryDenomTraceRequest): Promise { return queryService.denomTrace(request); }, denomTraces(request?: QueryDenomTracesRequest): Promise { return queryService.denomTraces(request); }, params(request?: QueryParamsRequest): Promise { return queryService.params(request); } }; };