import { proto_store as proto } from "@waku/proto"; import type { IDecodedMessage, IDecoder } from "./message.js"; import type { IBaseProtocolCore, IBaseProtocolSDK } from "./protocols.js"; export enum PageDirection { BACKWARD = "backward", FORWARD = "forward" } export interface TimeFilter { startTime: Date; endTime: Date; } export interface Cursor { digest: Uint8Array; receiverTime: bigint; senderTime: bigint; pubsubTopic: string; } export type StoreQueryOptions = { /** * The direction in which pages are retrieved: * - { @link PageDirection.BACKWARD }: Most recent page first. * - { @link PageDirection.FORWARD }: Oldest page first. * * Note: This does not affect the ordering of messages with the page * (the oldest message is always first). * * @default { @link PageDirection.BACKWARD } */ pageDirection?: PageDirection; /** * The number of message per page. */ pageSize?: number; /** * Retrieve messages with a timestamp within the provided values. */ timeFilter?: TimeFilter; /** * Cursor as an index to start a query from. Must be generated from a Waku * Message. */ cursor?: proto.Index; }; export type IStoreCore = IBaseProtocolCore; export type IStoreSDK = IBaseProtocolSDK & { protocol: IBaseProtocolCore; createCursor(message: IDecodedMessage): Cursor; queryGenerator: ( decoders: IDecoder[], options?: StoreQueryOptions ) => AsyncGenerator[]>; queryWithOrderedCallback: ( decoders: IDecoder[], callback: (message: T) => Promise | boolean | void, options?: StoreQueryOptions ) => Promise; queryWithPromiseCallback: ( decoders: IDecoder[], callback: ( message: Promise ) => Promise | boolean | void, options?: StoreQueryOptions ) => Promise; };