try {
await this.deps.client.decryptEventIfNeeded?.(state.event, {
isRetry: true,
});
} catch { // Retry with backoff until we hit the configured retry cap.
} finally {
state.inFlight = false; this.activeRetryRuns = Math.max(0, this.activeRetryRuns - 1); this.resolveRetryIdleIfNeeded();
}
if (this.decryptRetries.get(retryKey) !== state) { return;
} if (isDecryptionFailure(state.event)) { this.scheduleDecryptRetry(state); return;
}
this.clearDecryptRetry(retryKey);
}
private clearDecryptRetry(retryKey: string): void { const state = this.decryptRetries.get(retryKey); if (state?.timer) {
clearTimeout(state.timer);
} this.decryptRetries.delete(retryKey); this.failedDecryptionsNotified.delete(retryKey);
}
private rememberDecryptedMessage(roomId: string, eventId: string): void { if (!eventId) { return;
} const now = Date.now(); this.pruneDecryptedMessageDedupe(now); this.decryptedMessageDedupe.set(`${roomId}|${eventId}`, now);
}
private pruneDecryptedMessageDedupe(now: number): void { const ttlMs = 30_000; for (const [key, createdAt] of this.decryptedMessageDedupe) { if (now - createdAt > ttlMs) { this.decryptedMessageDedupe.delete(key);
}
} const maxEntries = 2048; while (this.decryptedMessageDedupe.size > maxEntries) { const oldest = this.decryptedMessageDedupe.keys().next().value; if (oldest === undefined) { break;
} this.decryptedMessageDedupe.delete(oldest);
}
}
private async waitForActiveRetryRunsToFinish(): Promise<void> { if (this.activeRetryRuns === 0) { return;
}
await new Promise<void>((resolve) => { this.retryIdleResolvers.add(resolve); if (this.activeRetryRuns === 0) { this.retryIdleResolvers.delete(resolve);
resolve();
}
});
}
private resolveRetryIdleIfNeeded(): void { if (this.activeRetryRuns !== 0) { return;
} for (const resolve of this.retryIdleResolvers) {
resolve();
} this.retryIdleResolvers.clear();
}
}
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.35Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-02)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.