mirror of
https://github.com/block/buzz.git
synced 2026-10-27 20:41:57 +00:00
## Summary - repair exact-channel reconnect gaps from a source-coupled 1,865-second floor (`900` seconds of relay future tolerance + `960` seconds of DB created-at floor + `5` seconds of fence margin) - page the existing authenticated `POST /query` bridge losslessly with `(until, before_id)`, including dense timestamp boundaries and an unbounded first page that does not trust the renderer clock - keep the restored live REQ unchanged while deduplicating live/repair overlap until both live EOSE and repair completion for the active connection generation ## Scope and behavior The wider repair applies only to live subscriptions containing the exact channel-event kind set and one `#h`. Profile, read-state, global, channel-less, and other subscription behavior is unchanged. Failed or stale repairs retain their pinned lower bound for the next reconnect. This intersects the replay path described in #3215, but does not claim to fix that issue. Desktop already has a bounded notification-side event-ID guard; this PR adds transport dispatch dedupe for the restored-live/repair overlap. Notification behavior should remain a focused regression check while this wider repair window rolls out. ## Testing - `cd desktop && pnpm typecheck` - `cd desktop && pnpm biome check src/shared/api/channelReconnectRepair.ts src/shared/api/relayClientSession.ts src/shared/api/relayClientShared.ts src/shared/api/relayClosedRecovery.ts src/shared/api/relayReconnectReplay.ts src/shared/api/relayReconnectReplay.test.mjs src/testing/e2eBridge.ts` - `cd desktop && node --test src/shared/api/relayReconnectReplay.test.mjs` (26 passed) - `cargo test --manifest-path desktop/src-tauri/Cargo.toml channel_reconnect_repair` (2 passed) - pre-push hooks passed at `743283439eb6be7969e19951cbb6720c5e493a04` --------- Signed-off-by: Wes <wesbillman@users.noreply.github.com> Co-authored-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
28 lines
655 B
TypeScript
28 lines
655 B
TypeScript
import { invokeTauri } from "@/shared/api/tauri";
|
|
import type { RelayEvent } from "@/shared/api/types";
|
|
|
|
export type ChannelReconnectRepairRequest = {
|
|
channelId: string;
|
|
since: number;
|
|
limit: number;
|
|
until?: number;
|
|
beforeId?: string;
|
|
};
|
|
|
|
/** Fetch one fixed-kind, channel-scoped reconnect repair page. */
|
|
export async function getChannelReconnectRepairEvents({
|
|
channelId,
|
|
since,
|
|
limit,
|
|
until,
|
|
beforeId,
|
|
}: ChannelReconnectRepairRequest): Promise<RelayEvent[]> {
|
|
return invokeTauri<RelayEvent[]>("get_channel_reconnect_repair", {
|
|
channelId,
|
|
since,
|
|
limit,
|
|
until: until ?? null,
|
|
beforeId: beforeId ?? null,
|
|
});
|
|
}
|