import { Rpc } from "../../../helpers"; import * as _m0 from "protobufjs/minimal"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; import { QueryBalanceRequest, QueryBalanceResponse, QueryOwnerRequest, QueryOwnerResponse, QuerySupplyRequest, QuerySupplyResponse, QueryNFTsRequest, QueryNFTsResponse, QueryNFTRequest, QueryNFTResponse, QueryClassRequest, QueryClassResponse, QueryClassesRequest, QueryClassesResponse } from "./query"; /** Query defines the gRPC querier service. */ export interface Query { /** Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721 */ balance(request: QueryBalanceRequest): Promise; /** Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721 */ owner(request: QueryOwnerRequest): Promise; /** Supply queries the number of NFTs from the given class, same as totalSupply of ERC721. */ supply(request: QuerySupplyRequest): Promise; /** * NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in * ERC721Enumerable */ nFTs(request: QueryNFTsRequest): Promise; /** NFT queries an NFT based on its class and id. */ nFT(request: QueryNFTRequest): Promise; /** Class queries an NFT class based on its id */ class(request: QueryClassRequest): Promise; /** Classes queries all NFT classes */ classes(request?: QueryClassesRequest): Promise; } export class QueryClientImpl implements Query { private readonly rpc: Rpc; constructor(rpc: Rpc) { this.rpc = rpc; this.balance = this.balance.bind(this); this.owner = this.owner.bind(this); this.supply = this.supply.bind(this); this.nFTs = this.nFTs.bind(this); this.nFT = this.nFT.bind(this); this.class = this.class.bind(this); this.classes = this.classes.bind(this); } balance(request: QueryBalanceRequest): Promise { const data = QueryBalanceRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "Balance", data); return promise.then(data => QueryBalanceResponse.decode(new _m0.Reader(data))); } owner(request: QueryOwnerRequest): Promise { const data = QueryOwnerRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "Owner", data); return promise.then(data => QueryOwnerResponse.decode(new _m0.Reader(data))); } supply(request: QuerySupplyRequest): Promise { const data = QuerySupplyRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "Supply", data); return promise.then(data => QuerySupplyResponse.decode(new _m0.Reader(data))); } nFTs(request: QueryNFTsRequest): Promise { const data = QueryNFTsRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "NFTs", data); return promise.then(data => QueryNFTsResponse.decode(new _m0.Reader(data))); } nFT(request: QueryNFTRequest): Promise { const data = QueryNFTRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "NFT", data); return promise.then(data => QueryNFTResponse.decode(new _m0.Reader(data))); } class(request: QueryClassRequest): Promise { const data = QueryClassRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "Class", data); return promise.then(data => QueryClassResponse.decode(new _m0.Reader(data))); } classes(request: QueryClassesRequest = { pagination: undefined }): Promise { const data = QueryClassesRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.nft.v1beta1.Query", "Classes", data); return promise.then(data => QueryClassesResponse.decode(new _m0.Reader(data))); } } export const createRpcQueryExtension = (base: QueryClient) => { const rpc = createProtobufRpcClient(base); const queryService = new QueryClientImpl(rpc); return { balance(request: QueryBalanceRequest): Promise { return queryService.balance(request); }, owner(request: QueryOwnerRequest): Promise { return queryService.owner(request); }, supply(request: QuerySupplyRequest): Promise { return queryService.supply(request); }, nFTs(request: QueryNFTsRequest): Promise { return queryService.nFTs(request); }, nFT(request: QueryNFTRequest): Promise { return queryService.nFT(request); }, class(request: QueryClassRequest): Promise { return queryService.class(request); }, classes(request?: QueryClassesRequest): Promise { return queryService.classes(request); } }; };