import { PublicKey } from '@metaplex-foundation/umi-public-keys'; import type { Serializer, StructToSerializerTuple } from '@metaplex-foundation/umi-serializers'; import type { RpcAccount } from './Account'; import type { Context } from './Context'; import type { RpcDataFilter, RpcDataSlice, RpcGetProgramAccountsOptions } from './RpcInterface'; /** * Callback for sorting raw accounts from `getProgramAccounts` RPC requests. * @category Utils — GpaBuilder */ export type GpaBuilderSortCallback = (a: RpcAccount, b: RpcAccount) => number; /** * Callback for mapping raw accounts into any type. * @category Utils — GpaBuilder */ export type GpaBuilderMapCallback = (account: RpcAccount) => T; /** * Get the GPA field offsets and serializers from their object definition. * @category Utils — GpaBuilder */ export type GpaBuilderFieldSerializers = { [K in keyof T]: [number | null, Serializer]; }; /** * Builder for `getProgramAccounts` RPC requests. * @category Utils — GpaBuilder */ export declare class GpaBuilder { protected readonly context: Pick; readonly programId: PublicKey; readonly options: { readonly fields?: GpaBuilderFieldSerializers; readonly deserializeCallback?: GpaBuilderMapCallback; readonly dataSlice?: RpcDataSlice; readonly filters?: RpcDataFilter[]; readonly sortCallback?: GpaBuilderSortCallback; }; constructor(context: Pick, programId: PublicKey, options?: { readonly fields?: GpaBuilderFieldSerializers; readonly deserializeCallback?: GpaBuilderMapCallback; readonly dataSlice?: RpcDataSlice; readonly filters?: RpcDataFilter[]; readonly sortCallback?: GpaBuilderSortCallback; }); reset(): GpaBuilder; registerFields(fields: GpaBuilderFieldSerializers): GpaBuilder; registerFieldsFromStruct(structFields: StructToSerializerTuple): GpaBuilder; /** * Registers nested struct fields with a parent path prefix. * This allows filtering on nested fields using dot-notation paths. * * @example * ```ts * gpaBuilder * .registerFieldsFromStruct([ * ['authority', publicKeySerializer], * ['metadata', metadataSerializer], * ]) * .registerNestedFieldsFromStruct('metadata', 32, [ * ['name', stringSerializer], * ['creator', publicKeySerializer], * ]) * .whereField('metadata.creator', somePublicKey) * ``` * * @param parentPath - The dot-notation path prefix for the nested fields * @param parentOffset - The byte offset where the parent struct starts * @param structFields - The nested struct's field definitions */ registerNestedFieldsFromStruct(parentPath: string, parentOffset: number, structFields: StructToSerializerTuple): GpaBuilder; deserializeUsing(callback: GpaBuilderMapCallback): GpaBuilder; slice(offset: number, length: number): GpaBuilder; sliceField(field: keyof Fields, offset?: number): GpaBuilder; withoutData(): GpaBuilder; addFilter(...filters: RpcDataFilter[]): GpaBuilder; where(offset: number, data: string | bigint | number | boolean | Uint8Array | PublicKey): GpaBuilder; whereField(field: K, data: Fields[K], offset?: number): GpaBuilder; whereSize(dataSize: number): GpaBuilder; sortUsing(callback: GpaBuilderSortCallback): GpaBuilder; get(options?: RpcGetProgramAccountsOptions): Promise; getAndMap(callback: GpaBuilderMapCallback, options?: RpcGetProgramAccountsOptions): Promise; getDeserialized(options?: RpcGetProgramAccountsOptions): Promise; getPublicKeys(options?: RpcGetProgramAccountsOptions): Promise; getDataAsPublicKeys(options?: RpcGetProgramAccountsOptions): Promise; protected getField(fieldName: K, forcedOffset?: number): [number, Serializer]; } /** * Creates a new {@link GpaBuilder} instance. * @category Utils — GpaBuilder */ export declare const gpaBuilder: (context: Pick, programId: PublicKey) => GpaBuilder;