fix(correctness): call-invite clock skew, forceState, upload cancel (COR-3/5/6)
COR-3 (CallEmbedProvider): the incoming-call lifetime guard distrusted a caller's sender_ts only when it was >20s AHEAD of the server ts. A caller clock that ran SLOW left sender_ts in the past, so the ring auto-dismissed/never showed for a fresh invite. Trust sender_ts only within ±20s of the server ts, else fall back to it (also fixes a NaN path when sender_ts is missing). COR-6 (CallControl): forceState rebuilt CallControlState with 5 args, silently defaulting screenshareAudioMuted to false; pass this.screenshareAudioMuted. COR-5 (uploadContent + useBindUploadAtom): cancelling during the retry back-off was a no-op (mx.cancelUpload only aborts an in-flight request), so the upload resurrected on the next attempt. Thread an AbortSignal: the back-off sleep resolves early on abort and the loop stops with an abort error; the hook aborts a per-upload AbortController on cancel (alongside mx.cancelUpload for the in-flight case). All verified by two review passes (no double-settle / no resurrection); includes their suggested abort-listener cleanup on normal sleep resolution. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -159,6 +159,7 @@ export class CallControl extends EventEmitter implements CallControlState {
|
||||
desired.sound,
|
||||
this.screenshare,
|
||||
this.spotlight,
|
||||
this.screenshareAudioMuted,
|
||||
);
|
||||
await this.applyState();
|
||||
// P6-2: CallEmbed calls forceState() only from onCallJoined(), so this is
|
||||
|
||||
Reference in New Issue
Block a user