mirror of
https://github.com/block/buzz.git
synced 2026-10-31 14:31:02 +00:00
Exercise the native IPC boundary with an in-memory protocol rig, route local read markers with their exact timestamps, persist catch-up latest anchors independently of notify rows, and seed renderer membership only once. Co-authored-by: Tyler Longwell <tlongwell@squareup.com> Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { invokeTauri } from "@/shared/api/tauri";
|
|
import type { ObservedUnreadEvent } from "@/features/channels/unreadChannelCounts";
|
|
|
|
export type ObservedUnreadScope = { pubkey: string; relayUrl: string };
|
|
export type ObservedUnreadProjection = {
|
|
channelId: string;
|
|
latest: number;
|
|
count: number;
|
|
badgeCount: number;
|
|
appBadgeCount: number;
|
|
topLevelUnread: boolean;
|
|
highPriorityUnread: boolean;
|
|
};
|
|
export type ObservedUnreadMembershipSeed = {
|
|
participatedRootIds: string[];
|
|
authoredRootIds: string[];
|
|
mentionedRootIds: string[];
|
|
followedRootIds: string[];
|
|
mutedRootIds: string[];
|
|
mutedChannelIds: string[];
|
|
};
|
|
export type ObservedUnreadWireEvent = ObservedUnreadEvent & {
|
|
channelId: string;
|
|
};
|
|
export type ObservedUnreadResponse =
|
|
| {
|
|
kind: "snapshot";
|
|
scope: ObservedUnreadScope;
|
|
generation: string;
|
|
revision: number;
|
|
lastAckedSequence: number;
|
|
migrationComplete: boolean;
|
|
membershipSeeded: boolean;
|
|
channels: ObservedUnreadProjection[];
|
|
}
|
|
| {
|
|
kind: "delta";
|
|
scope: ObservedUnreadScope;
|
|
generation: string;
|
|
baseRevision: number;
|
|
revision: number;
|
|
ackedSequence: number;
|
|
upserts: ObservedUnreadProjection[];
|
|
removed: string[];
|
|
}
|
|
| {
|
|
kind: "snapshotRequired";
|
|
scope: ObservedUnreadScope;
|
|
generation: string;
|
|
revision: number;
|
|
lastAckedSequence: number;
|
|
};
|
|
|
|
export function openObservedUnreadScope(request: {
|
|
scope: ObservedUnreadScope;
|
|
legacyPayload: unknown | null;
|
|
membershipSeed: ObservedUnreadMembershipSeed | null;
|
|
}): Promise<ObservedUnreadResponse> {
|
|
return invokeTauri("observed_unread_open_scope", { request });
|
|
}
|
|
|
|
export function ingestObservedUnread(request: {
|
|
scope: ObservedUnreadScope;
|
|
sequence: number;
|
|
baseRevision: number;
|
|
events: ObservedUnreadWireEvent[];
|
|
channelLatest: Array<{ channelId: string; createdAt: number }>;
|
|
markers: Array<{ contextId: string; readAt: number | null }>;
|
|
membership: Array<{ kind: string; value: string; present: boolean }>;
|
|
clearChannels: string[];
|
|
clearAll: boolean;
|
|
}): Promise<ObservedUnreadResponse> {
|
|
return invokeTauri("observed_unread_ingest", { request });
|
|
}
|