@superfluid-finance/sdk-core
Version:
SDK Core for building with Superfluid Protocol
100 lines • 4.75 kB
TypeScript
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<TFilter extends {
id?: InputMaybe<Scalars["ID"]["input"]>;
id_gt?: InputMaybe<Scalars["ID"]["input"]>;
}, TOrderBy extends string> {
filter?: TFilter;
pagination?: Paging;
order?: Ordering<TOrderBy>;
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<TResult extends ILightEntity> {
get(subgraphClient: SubgraphClient, query: SubgraphGetQuery): Promise<TResult | null>;
}
/**
* Capable of handling the {@link SubgraphGetQuery} request.
*/
export interface SubgraphListQueryHandler<TResult extends ILightEntity, TQuery extends SubgraphListQuery<TFilter, TOrderBy>, TFilter extends {
[key: string]: unknown;
} = NonNullable<TQuery["filter"]>, TOrderBy extends string = NonNullable<TQuery["order"]>["orderBy"]> {
list(subgraphClient: SubgraphClient, query: SubgraphListQuery<TFilter, TOrderBy>): Promise<PagedResult<TResult>>;
}
/**
* "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<TFilter> {
getRelevantAddressesFromFilter(filter?: TFilter): RelevantAddresses;
}
/**
* Provides relevant address from a query result.
*/
export interface RelevantAddressProviderFromResult<TResult> {
getRelevantAddressesFromResult(result?: TResult | null): RelevantAddresses;
}
/**
* A base class to handle common Subgraph query logic.
*/
export declare abstract class SubgraphQueryHandler<TResult extends ILightEntity, TListQuery extends SubgraphListQuery<TFilter, TOrderBy>, TSubgraphQuery, TSubgraphQueryVariables extends Exact<{
first?: InputMaybe<Scalars["Int"]["input"]>;
orderBy?: InputMaybe<TOrderBy>;
orderDirection?: InputMaybe<OrderDirection>;
skip?: InputMaybe<Scalars["Int"]["input"]>;
where?: InputMaybe<TFilter>;
block?: InputMaybe<Block_Height>;
}>, TFilter extends {
id?: InputMaybe<Scalars["ID"]["input"]>;
id_gt?: InputMaybe<Scalars["ID"]["input"]>;
} = NonNullable<TListQuery["filter"]>, TOrderBy extends string = NonNullable<TListQuery["order"]>["orderBy"]> implements SubgraphGetQueryHandler<TResult>, SubgraphListQueryHandler<TResult, TListQuery, TFilter, TOrderBy>, RelevantAddressProviderFromFilter<TFilter>, RelevantAddressProviderFromResult<TResult> {
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<TResult | null>;
list(subgraphClient: SubgraphClient, query: SubgraphListQuery<TFilter, TOrderBy>): Promise<PagedResult<TResult>>;
protected querySubgraph(subgraphClient: SubgraphClient, variables: TSubgraphQueryVariables): Promise<TSubgraphQuery>;
abstract requestDocument: TypedDocumentNode<TSubgraphQuery, TSubgraphQueryVariables>;
}
//# sourceMappingURL=subgraphQueryHandler.d.ts.map