feat(web): pending-message orchestrator (TTL discard, deferred send, online retry)

This commit is contained in:
Jannis Braun
2026-05-02 16:00:30 +02:00
parent b01ad4edb8
commit 5128a625b8
6 changed files with 206 additions and 2 deletions
@@ -34,6 +34,7 @@ interface PendingMessageStoreActions {
) => PendingBubble | null;
discardExpired: (now: number) => PendingBubble[];
listReadyForDeferredSend: () => PendingBubble[];
listFailedRetryable: () => PendingBubble[];
}
type PendingMessageStore = PendingMessageStoreState & PendingMessageStoreActions;
@@ -200,6 +201,23 @@ export const usePendingMessageStore = create<PendingMessageStore>()(
}
return ready;
},
listFailedRetryable: () => {
const transfers = useTransferStore.getState().transfers;
const out: PendingBubble[] = [];
for (const list of get().bubbles.values()) {
for (const b of list) {
if (b.state !== 'failed') continue;
if (b.retryCount > 0) continue;
const allDone = b.transferIds.every((tid) => {
const t = transfers.get(tid);
return t?.state === 'completed' && !!t.attachmentId;
});
if (allDone) out.push(b);
}
}
return out;
},
}),
{
name: 'pendingMessageStore@v1',