import { TypedDocumentNode } from "@graphql-typed-document-node/core"; import { ILightEntity } from "../interfaces"; import { Ordering } from "../ordering"; import { PagedResult, Paging } from "../pagination"; import { SubgraphClient } from "./SubgraphClient"; import { Address, SubgraphId } from "./mappedSubgraphTypes"; import { Block_Height, Exact, InputMaybe, OrderDirection, Scalars } from "./schema.generated"; /** * An argument object type that is used for paginated Subgraph queries. */ export interface SubgraphListQuery; id_gt?: InputMaybe; }, TOrderBy extends string> { filter?: TFilter; pagination?: Paging; order?: Ordering; block?: Block_Height; } /** * An argument object type that is used for single object queries by ID from Subgraph. */ export interface SubgraphGetQuery { id: SubgraphId; block?: Block_Height; } /** * Capable of handling the {@link SubgraphGetQuery} request. */ export interface SubgraphGetQueryHandler { get(subgraphClient: SubgraphClient, query: SubgraphGetQuery): Promise; } /** * Capable of handling the {@link SubgraphGetQuery} request. */ export interface SubgraphListQueryHandler, TFilter extends { [key: string]: unknown; } = NonNullable, TOrderBy extends string = NonNullable["orderBy"]> { list(subgraphClient: SubgraphClient, query: SubgraphListQuery): Promise>; } /** * "Relevant" means that it's connected. * NOTE: Currently, the relevancy is used to create a caching logic on the SDK-Redux layer. */ export interface RelevantAddresses { tokens: Address[]; accounts: Address[]; } /** * Intermediate data object to pass relevant addresses from query results with less boilerplate code. */ export interface RelevantAddressesIntermediate { tokens: (Address | Address[] | null | undefined)[]; accounts: (Address | Address[] | null | undefined)[]; } /** * Provides relevant address from a inputted filter. */ export interface RelevantAddressProviderFromFilter { getRelevantAddressesFromFilter(filter?: TFilter): RelevantAddresses; } /** * Provides relevant address from a query result. */ export interface RelevantAddressProviderFromResult { getRelevantAddressesFromResult(result?: TResult | null): RelevantAddresses; } /** * A base class to handle common Subgraph query logic. */ export declare abstract class SubgraphQueryHandler, TSubgraphQuery, TSubgraphQueryVariables extends Exact<{ first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; where?: InputMaybe; block?: InputMaybe; }>, TFilter extends { id?: InputMaybe; id_gt?: InputMaybe; } = NonNullable, TOrderBy extends string = NonNullable["orderBy"]> implements SubgraphGetQueryHandler, SubgraphListQueryHandler, RelevantAddressProviderFromFilter, RelevantAddressProviderFromResult { abstract getAddressFieldKeysFromFilter(): { accountKeys: (keyof TFilter)[]; tokenKeys: (keyof TFilter)[]; }; getRelevantAddressesFromFilter(filter?: TFilter): RelevantAddresses; /** * For every primary address field key there are more fields generated which it should look for addresses. * NOTE: The implementation is a bit "magical" but it rids of a bunch of boilerplate and creates a single point for editing. */ private getRelevantAddressesFromFilterByAddressFieldKeys; protected abstract getRelevantAddressesFromResultCore(result: TResult): RelevantAddressesIntermediate; getRelevantAddressesFromResult(result?: TResult | null): RelevantAddresses; abstract mapFromSubgraphResponse(response: TSubgraphQuery): TResult[]; get(subgraphClient: SubgraphClient, query: SubgraphGetQuery): Promise; list(subgraphClient: SubgraphClient, query: SubgraphListQuery): Promise>; protected querySubgraph(subgraphClient: SubgraphClient, variables: TSubgraphQueryVariables): Promise; abstract requestDocument: TypedDocumentNode; } //# sourceMappingURL=subgraphQueryHandler.d.ts.map