export type ServerChangeFeedEntry = { /** * - Signed mutation actor device id when available. */ actorDeviceId: string | null; /** * - Signed mutation actor user id when available. */ actorUserId: string | null; /** * - Serialized mutation attributes. */ attributes: Record> | null; /** * - Server change creation timestamp. */ createdAt: string; /** * - Server change id. */ id: string; /** * - Mutation idempotency key when available. */ idempotencyKey: string | null; /** * - Frontend model name. */ model: string; /** * - Mutation operation. */ operation: string; /** * - Serialized mutation payload. */ payload: Record> | null; /** * - Changed record id when known. */ recordId: string | null; /** * - Command response payload. */ response: Record> | null; /** * - Offline grant scope. */ scope: Record> | null; /** * - Monotonic server sequence. */ serverSequence: number; }; export type ServerChangeFeedRow = { /** * - Actor device id. */ actor_device_id: string | null; /** * - Actor user id. */ actor_user_id: string | null; /** * - Attributes JSON. */ attributes_json: string | null; /** * - Creation time. */ created_at: Date | string; /** * - Entry id. */ id: string; /** * - Mutation idempotency key. */ idempotency_key: string | null; /** * - Frontend model name. */ model: string; /** * - Mutation operation. */ operation: string; /** * - Mutation payload JSON. */ payload_json: string | null; /** * - Record id. */ record_id: string | null; /** * - Response JSON. */ response_json: string | null; /** * - Scope JSON. */ scope_json: string | null; /** * - Server sequence. */ server_sequence: number | string; }; /** * Shared server change-feed store for a configuration. * @param {import("../configuration.js").default} configuration - Configuration. * @returns {ServerChangeFeedStore} - Store. */ export declare function serverChangeFeedStoreForConfiguration(configuration: import("../configuration.js").default): ServerChangeFeedStore; export default class ServerChangeFeedStore { configuration: import("../configuration.js").default; databaseIdentifier: string; retentionSize: number; /** @type {ServerChangeFeedEntry[]} */ _memoryChanges: ServerChangeFeedEntry[]; _memorySequence: number; _isReady: boolean; /** @type {Promise | null} */ _readyPromise: Promise | null; /** @type {WeakMap, promise: Promise}>} */ _transactionReadyPromises: WeakMap; promise: Promise; }>; /** * Runs constructor. * @param {object} args - Options. * @param {import("../configuration.js").default} args.configuration - Configuration. * @param {string} [args.databaseIdentifier] - Database identifier. * @param {number} [args.retentionSize] - Number of feed entries to retain. */ constructor({ configuration, databaseIdentifier, retentionSize }: { configuration: import("../configuration.js").default; databaseIdentifier?: string; retentionSize?: number; }); /** * Ensures the backing table exists. * @returns {Promise} - Resolves when ready. */ ensureReady(): Promise; /** * Coordinates durable and transaction-local readiness on one connection. * @param {import("../database/drivers/base.js").default} db - Database connection. * @returns {Promise} Resolves when this caller can use the table. */ _ensureReadyWithDb(db: import("../database/drivers/base.js").default): Promise; /** * Appends a change and assigns the next server sequence. * @param {Omit & {createdAt?: string, id?: string}} change - Change payload. * @returns {Promise} - Persisted change. */ append(change: Omit & { createdAt?: string; id?: string; }): Promise; /** * Returns current latest server sequence. * @returns {Promise} - Latest sequence. */ latestSequence(): Promise; /** * Returns oldest retained server sequence. * @returns {Promise} - Oldest retained sequence. */ oldestSequence(): Promise; /** * Returns ordered changes after a cursor. * @param {object} args - Arguments. * @param {number} args.afterSequence - Exclusive lower bound. * @param {number} [args.limit] - Maximum number of changes. * @param {number} [args.upToSequence] - Inclusive upper bound. * @param {Record>} [args.scope] - Caller sync scope. * @returns {Promise<{changes: ServerChangeFeedEntry[], hasMore: boolean, nextSequence: number, oldestSequence: number | null, snapshotRequired: boolean, upToSequence: number}>} - Ordered page. */ changesAfter({ afterSequence, limit, scope, upToSequence }: { afterSequence: number; limit?: number; upToSequence?: number; scope?: Record>; }): Promise<{ changes: ServerChangeFeedEntry[]; hasMore: boolean; nextSequence: number; oldestSequence: number | null; snapshotRequired: boolean; upToSequence: number; }>; /** * Ensures schema is still present. * @returns {Promise} - Whether ready. */ _schemaReady(): Promise; /** * Ensures changes table exists. * @param {import("../database/drivers/base.js").default} db - Database connection. * @returns {Promise} - Whether the table had to be created. */ _ensureChangesTable(db: import("../database/drivers/base.js").default): Promise; /** * Resolves a persisted change by id. * @param {import("../database/drivers/base.js").default} db - Database connection. * @param {string} id - Entry id. * @returns {Promise} - Entry or null. */ _changeById(db: import("../database/drivers/base.js").default, id: string): Promise; /** * Resolves current latest sequence without readiness checks. * @param {import("../database/drivers/base.js").default} db - Database connection. * @returns {Promise} - Latest sequence. */ _latestSequence(db: import("../database/drivers/base.js").default): Promise; /** * Resolves current oldest sequence without readiness checks. * @param {import("../database/drivers/base.js").default} db - Database connection. * @returns {Promise} - Oldest sequence. */ _oldestSequence(db: import("../database/drivers/base.js").default): Promise; /** * Prunes old retained changes. * @param {import("../database/drivers/base.js").default} db - Database connection. * @param {number} latestSequence - Latest sequence after append. * @returns {Promise} - Resolves when complete. */ _pruneRetainedChanges(db: import("../database/drivers/base.js").default, latestSequence: number): Promise; /** * Normalizes a change row. * @param {ServerChangeFeedRow} row - Raw database row. * @returns {ServerChangeFeedEntry} - Normalized change. */ _normalizeChangeRow(row: ServerChangeFeedRow): ServerChangeFeedEntry; /** * Whether this store should use process-local memory because no database identifier is configured. * @returns {boolean} - Whether memory storage is active. */ _usesMemoryStorage(): boolean; /** * Appends a process-local memory entry when no database is configured. * @param {Omit} change - Change payload. * @returns {ServerChangeFeedEntry} - Appended entry. */ _appendMemory(change: Omit): ServerChangeFeedEntry; /** * Returns a process-local memory change page. * @param {object} args - Arguments. * @param {number} args.afterSequence - Exclusive lower bound. * @param {number} args.limit - Page size. * @param {number} [args.upToSequence] - Inclusive upper bound. * @param {Record>} [args.scope] - Caller sync scope. * @returns {{changes: ServerChangeFeedEntry[], hasMore: boolean, nextSequence: number, oldestSequence: number | null, snapshotRequired: boolean, upToSequence: number}} - Ordered page. */ _memoryChangesAfter({ afterSequence, limit, scope, upToSequence }: { afterSequence: number; limit: number; upToSequence?: number; scope?: Record>; }): { changes: ServerChangeFeedEntry[]; hasMore: boolean; nextSequence: number; oldestSequence: number | null; snapshotRequired: boolean; upToSequence: number; }; /** * Runs with db. * @param {(db: import("../database/drivers/base.js").default) => Promise>} callback - Callback. * @returns {Promise>} - Callback result. */ _withDb(callback: (db: import("../database/drivers/base.js").default) => Promise>): Promise>; } //# sourceMappingURL=server-change-feed.d.ts.map