Alert internal users if first message on websocket is repeated

This commit is contained in:
Scott Nonnenberg 2024-09-21 04:27:39 +10:00 committed by GitHub
parent d0b8a2991f
commit cd2bb537fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 144 additions and 0 deletions

View file

@ -34,6 +34,7 @@ import type {
import WebSocketResource, {
connectAuthenticatedLibsignal,
connectUnauthenticatedLibsignal,
ServerRequestType,
TransportOption,
WebSocketResourceWithShadowing,
} from './WebsocketResources';
@ -106,6 +107,8 @@ export class SocketManager extends EventListener {
private reconnectController: AbortController | undefined;
private envelopeCount = 0;
constructor(
private readonly libsignalNet: Net.Net,
private readonly options: SocketManagerOptions
@ -298,6 +301,7 @@ export class SocketManager extends EventListener {
);
window.logAuthenticatedConnect?.();
this.envelopeCount = 0;
this.backOff.reset();
authenticated.addEventListener('close', ({ code, reason }): void => {
@ -860,6 +864,12 @@ export class SocketManager extends EventListener {
}
private queueOrHandleRequest(req: IncomingWebSocketRequest): void {
if (req.requestType === ServerRequestType.ApiMessage) {
this.envelopeCount += 1;
if (this.envelopeCount === 1) {
this.emit('firstEnvelope', req);
}
}
if (this.requestHandlers.size === 0) {
this.incomingRequestQueue.push(req);
log.info(
@ -924,6 +934,10 @@ export class SocketManager extends EventListener {
public override on(type: 'statusChange', callback: () => void): this;
public override on(type: 'online', callback: () => void): this;
public override on(type: 'offline', callback: () => void): this;
public override on(
type: 'firstEnvelope',
callback: (incoming: IncomingWebSocketRequest) => void
): this;
public override on(
type: string | symbol,
@ -937,6 +951,10 @@ export class SocketManager extends EventListener {
public override emit(type: 'statusChange'): boolean;
public override emit(type: 'online'): boolean;
public override emit(type: 'offline'): boolean;
public override emit(
type: 'firstEnvelope',
incoming: IncomingWebSocketRequest
): boolean;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public override emit(type: string | symbol, ...args: Array<any>): boolean {