summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/stream
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/stream')
-rw-r--r--packages/backend/src/server/api/stream/Connection.ts7
1 files changed, 7 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts
index 7dd7db24e5..dfc6f0d298 100644
--- a/packages/backend/src/server/api/stream/Connection.ts
+++ b/packages/backend/src/server/api/stream/Connection.ts
@@ -25,6 +25,7 @@ import type Channel from './channel.js';
export default class Connection {
public user?: MiUser;
public token?: MiAccessToken;
+ private rateLimiter?: () => Promise<boolean>;
private wsConnection: WebSocket.WebSocket;
public subscriber: StreamEventEmitter;
private channels: Channel[] = [];
@@ -48,9 +49,11 @@ export default class Connection {
user: MiUser | null | undefined,
token: MiAccessToken | null | undefined,
+ rateLimiter: () => Promise<boolean>,
) {
if (user) this.user = user;
if (token) this.token = token;
+ if (rateLimiter) this.rateLimiter = rateLimiter;
}
@bindThis
@@ -103,6 +106,10 @@ export default class Connection {
private async onWsConnectionMessage(data: WebSocket.RawData) {
let obj: Record<string, any>;
+ if (this.rateLimiter && await this.rateLimiter()) {
+ return;
+ }
+
try {
obj = JSON.parse(data.toString());
} catch (e) {