Skip to content

Commit 524cb65

Browse files
hughnstoger5
andauthored
MatrixRTC: enforce Promise handling using eslint rules (#4725)
* MatrixRTC: enforce Promise handling using eslint rules * Fix lints without behaviour change. * fix not calling functions --------- Co-authored-by: Timo <toger5@hotmail.de>
1 parent ea77028 commit 524cb65

File tree

5 files changed

+24
-13
lines changed

5 files changed

+24
-13
lines changed

.eslintrc.cjs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,5 +154,16 @@ module.exports = {
154154
"@typescript-eslint/no-empty-object-type": "off",
155155
},
156156
},
157+
{
158+
// Enable stricter promise rules for the MatrixRTC codebase
159+
files: ["src/matrixrtc/**/*.ts"],
160+
rules: {
161+
// Encourage proper usage of Promises:
162+
"@typescript-eslint/no-floating-promises": "error",
163+
"@typescript-eslint/no-misused-promises": "error",
164+
"@typescript-eslint/require-await": "error",
165+
"@typescript-eslint/await-thenable": "error",
166+
},
167+
},
157168
],
158169
};

src/matrixrtc/EncryptionManager.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export type Statistics = {
4141
export interface IEncryptionManager {
4242
join(joinConfig: EncryptionConfig | undefined): void;
4343
leave(): void;
44-
onMembershipsUpdate(oldMemberships: CallMembership[]): Promise<void>;
44+
onMembershipsUpdate(oldMemberships: CallMembership[]): void;
4545
/**
4646
* Process `m.call.encryption_keys` events to track the encryption keys for call participants.
4747
* This should be called each time the relevant event is received from a room timeline.
@@ -150,7 +150,7 @@ export class EncryptionManager implements IEncryptionManager {
150150
private isMyMembership = (m: CallMembership): boolean =>
151151
m.sender === this.client.getUserId() && m.deviceId === this.client.getDeviceId();
152152

153-
public async onMembershipsUpdate(oldMemberships: CallMembership[]): Promise<void> {
153+
public onMembershipsUpdate(oldMemberships: CallMembership[]): void {
154154
if (this.manageMediaKeys && this.joined) {
155155
const oldMembershipIds = new Set(
156156
oldMemberships.filter((m) => !this.isMyMembership(m)).map(getParticipantIdFromMembership),
@@ -231,14 +231,14 @@ export class EncryptionManager implements IEncryptionManager {
231231
logger.info("Last encryption key event sent too recently: postponing");
232232
if (this.keysEventUpdateTimeout === undefined) {
233233
this.keysEventUpdateTimeout = setTimeout(
234-
this.sendEncryptionKeysEvent,
234+
() => void this.sendEncryptionKeysEvent(),
235235
this.updateEncryptionKeyThrottle,
236236
);
237237
}
238238
return;
239239
}
240240

241-
this.sendEncryptionKeysEvent();
241+
void this.sendEncryptionKeysEvent();
242242
}
243243

244244
/**
@@ -318,7 +318,7 @@ export class EncryptionManager implements IEncryptionManager {
318318
if (this.keysEventUpdateTimeout === undefined) {
319319
const resendDelay = safeGetRetryAfterMs(matrixError, 5000);
320320
logger.warn(`Failed to send m.call.encryption_key, retrying in ${resendDelay}`, error);
321-
this.keysEventUpdateTimeout = setTimeout(this.sendEncryptionKeysEvent, resendDelay);
321+
this.keysEventUpdateTimeout = setTimeout(() => void this.sendEncryptionKeysEvent(), resendDelay);
322322
} else {
323323
logger.info("Not scheduling key resend as another re-send is already pending");
324324
}
@@ -488,7 +488,7 @@ export class EncryptionManager implements IEncryptionManager {
488488
const newKeyIndex = this.makeNewSenderKey(true);
489489
// send immediately: if we're about to start sending with a new key, it's
490490
// important we get it out to others as soon as we can.
491-
this.sendEncryptionKeysEvent(newKeyIndex);
491+
void this.sendEncryptionKeysEvent(newKeyIndex);
492492
};
493493
}
494494

src/matrixrtc/MatrixRTCSession.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,11 +458,11 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
458458
logger.info(`Memberships for call in room ${this.room.roomId} have changed: emitting`);
459459
this.emit(MatrixRTCSessionEvent.MembershipsChanged, oldMemberships, this.memberships);
460460

461-
this.membershipManager?.onRTCSessionMemberUpdate(this.memberships);
461+
void this.membershipManager?.onRTCSessionMemberUpdate(this.memberships);
462462
}
463463
// This also needs to be done if `changed` = false
464464
// A member might have updated their fingerprint (created_ts)
465-
this.encryptionManager.onMembershipsUpdate(oldMemberships);
465+
void this.encryptionManager.onMembershipsUpdate(oldMemberships);
466466

467467
this.setExpiryTimer();
468468
};

src/matrixrtc/MatrixRTCSessionManager.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class MatrixRTCSessionManager extends TypedEventEmitter<MatrixRTCSessionM
7171

7272
public stop(): void {
7373
for (const sess of this.roomSessions.values()) {
74-
sess.stop();
74+
void sess.stop();
7575
}
7676
this.roomSessions.clear();
7777

@@ -108,7 +108,7 @@ export class MatrixRTCSessionManager extends TypedEventEmitter<MatrixRTCSessionM
108108
`Decryption failed for event ${event.getId()}: ${event.decryptionFailureReason} will retry once only`,
109109
);
110110
// retry after 1 second. After this we give up.
111-
setTimeout(() => this.consumeCallEncryptionEvent(event, true), 1000);
111+
setTimeout(() => void this.consumeCallEncryptionEvent(event, true), 1000);
112112
} else {
113113
logger.warn(`Decryption failed for event ${event.getId()}: ${event.decryptionFailureReason}`);
114114
}
@@ -128,7 +128,7 @@ export class MatrixRTCSessionManager extends TypedEventEmitter<MatrixRTCSessionM
128128
this.getRoomSession(room).onCallEncryption(event);
129129
}
130130
private onTimeline = (event: MatrixEvent): void => {
131-
this.consumeCallEncryptionEvent(event);
131+
void this.consumeCallEncryptionEvent(event);
132132
};
133133

134134
private onRoom = (room: Room): void => {

src/matrixrtc/MembershipManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export class LegacyMembershipManager implements IMembershipManager {
134134
this.relativeExpiry = this.membershipExpiryTimeout;
135135
// We don't wait for this, mostly because it may fail and schedule a retry, so this
136136
// function returning doesn't really mean anything at all.
137-
this.triggerCallMembershipEventUpdate();
137+
void this.triggerCallMembershipEventUpdate();
138138
}
139139

140140
public async leave(timeout: number | undefined = undefined): Promise<boolean> {
@@ -351,7 +351,7 @@ export class LegacyMembershipManager implements IMembershipManager {
351351
}
352352

353353
private scheduleDelayDisconnection(): void {
354-
this.memberEventTimeout = setTimeout(this.delayDisconnection, this.membershipKeepAlivePeriod);
354+
this.memberEventTimeout = setTimeout(() => void this.delayDisconnection(), this.membershipKeepAlivePeriod);
355355
}
356356

357357
private readonly delayDisconnection = async (): Promise<void> => {

0 commit comments

Comments
 (0)